From 49e57ea80e91a9f5f09090388a59099c1527e88b Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 5 Sep 2024 16:21:06 +0200 Subject: [PATCH 001/128] lib/logstorage: delete unused function - bloomfilter.containsAny --- lib/logstorage/bloomfilter.go | 31 ------------------------------ lib/logstorage/bloomfilter_test.go | 7 +------ 2 files changed, 1 insertion(+), 37 deletions(-) diff --git a/lib/logstorage/bloomfilter.go b/lib/logstorage/bloomfilter.go index f1ef86918d..187073e299 100644 --- a/lib/logstorage/bloomfilter.go +++ b/lib/logstorage/bloomfilter.go @@ -120,37 +120,6 @@ func (bf *bloomFilter) containsAll(tokens []string) bool { return true } -// containsAny returns true if bf contains at least a single token from the given tokens. -func (bf *bloomFilter) containsAny(tokens []string) bool { - bits := bf.bits - if len(bits) == 0 { - return true - } - maxBits := uint64(len(bits)) * 64 - var buf [8]byte - hp := (*uint64)(unsafe.Pointer(&buf[0])) -nextToken: - for _, token := range tokens { - *hp = xxhash.Sum64(bytesutil.ToUnsafeBytes(token)) - for i := 0; i < bloomFilterHashesCount; i++ { - hi := xxhash.Sum64(buf[:]) - (*hp)++ - idx := hi % maxBits - i := idx / 64 - j := idx % 64 - mask := uint64(1) << j - w := bits[i] - if (w & mask) == 0 { - // The token is missing. Check the next token - continue nextToken - } - } - // It is likely the token exists in the bloom filter - return true - } - return false -} - func getBloomFilter() *bloomFilter { v := bloomFilterPool.Get() if v == nil { diff --git a/lib/logstorage/bloomfilter_test.go b/lib/logstorage/bloomfilter_test.go index 061e1483fd..cd94e665a4 100644 --- a/lib/logstorage/bloomfilter_test.go +++ b/lib/logstorage/bloomfilter_test.go @@ -14,11 +14,6 @@ func TestBloomFilter(t *testing.T) { if err := bf.unmarshal(data); err != nil { t.Fatalf("unexpected error when unmarshaling bloom filter: %s", err) } - for _, token := range tokens { - if !bf.containsAny([]string{token}) { - t.Fatalf("bloomFilterContains must return true for the added token %q", token) - } - } if !bf.containsAll(tokens) { t.Fatalf("bloomFilterContains must return true for the added tokens") } @@ -72,7 +67,7 @@ func TestBloomFilterFalsePositive(t *testing.T) { falsePositives := 0 for i := range tokens { token := fmt.Sprintf("non-existing-token_%d", i) - if bf.containsAny([]string{token}) { + if bf.containsAll([]string{token}) { falsePositives++ } } From b48f5f3e5965394bf8c1ca49121a3497fd4f7679 Mon Sep 17 00:00:00 2001 From: Hui Wang Date: Thu, 5 Sep 2024 22:42:49 +0800 Subject: [PATCH 002/128] lib/storage: fix metric `vm_object_references{type="indexdb"}` (#6937) follow up https://github.com/VictoriaMetrics/VictoriaMetrics/commit/4ecc370acb541447739e4c2c72e2d7179a650bd9 ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- docs/changelog/CHANGELOG.md | 1 + lib/storage/index_db.go | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 8d92d99e50..1cdb765805 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -25,6 +25,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. ## [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) diff --git a/lib/storage/index_db.go b/lib/storage/index_db.go index 9c88678c9c..d9a1939dbb 100644 --- a/lib/storage/index_db.go +++ b/lib/storage/index_db.go @@ -224,6 +224,9 @@ func (db *indexDB) UpdateMetrics(m *IndexDBMetrics) { m.TagFiltersToMetricIDsCacheMisses += cs.Misses m.IndexDBRefCount += uint64(db.refCount.Load()) + + // this shouldn't increase the MissingTSIDsForMetricID value, + // as we only count it as missingTSIDs if it can't be found in both the current and previous indexdb. m.MissingTSIDsForMetricID += db.missingTSIDsForMetricID.Load() m.DateRangeSearchCalls += db.dateRangeSearchCalls.Load() @@ -252,7 +255,6 @@ func (db *indexDB) UpdateMetrics(m *IndexDBMetrics) { m.GlobalSearchCalls += extDB.globalSearchCalls.Load() m.MissingMetricNamesForMetricID += extDB.missingMetricNamesForMetricID.Load() - m.IndexDBRefCount += uint64(extDB.refCount.Load()) }) } From 39294b4919a62ef799221b95b7605626b81a6da6 Mon Sep 17 00:00:00 2001 From: Artem Fetishev <149964189+rtm0@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:45:09 +0300 Subject: [PATCH 003/128] lib/storage: do not drop stale NaN samples (#6936) This patch reverts 1fd3385 After discussing it we've come to conclusion that this is a valid behavior which can be avoided by deleting the time series only once the corresponding stale NaNs have been received. On the other hand, the fix leads to lost stale NaNs in some rare but valid use cases. For example: - In a cluster configuration the samples for a given time series are normally sent to the same vmstorage replica. However, wminsert may reroute the samples to another replica because the original one is down or is overloaded. In this case the stale NaN may end up on a replica that has no data for that time series, but we still want to record that sample. Thus, reverting that fix. --- related issue https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069 Signed-off-by: Artem Fetishev --- lib/storage/storage.go | 9 ----- lib/storage/storage_test.go | 72 ------------------------------------- 2 files changed, 81 deletions(-) diff --git a/lib/storage/storage.go b/lib/storage/storage.go index b3553d33d3..ea6cdbc52e 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -1815,14 +1815,12 @@ func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, preci j := 0 for i := range mrs { mr := &mrs[i] - var isStaleNan bool if math.IsNaN(mr.Value) { if !decimal.IsStaleNaN(mr.Value) { // Skip NaNs other than Prometheus staleness marker, since the underlying encoding // doesn't know how to work with them. continue } - isStaleNan = true } if mr.Timestamp < minTimestamp { // Skip rows with too small timestamps outside the retention. @@ -1936,13 +1934,6 @@ func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, preci continue } - // If sample is stale and its TSID wasn't found in cache and in indexdb, - // then we skip it. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069 - if isStaleNan { - j-- - continue - } - // Slowest path - the TSID for the given mr.MetricNameRaw isn't found in indexdb. Create it. generateTSID(&genTSID.TSID, mn) diff --git a/lib/storage/storage_test.go b/lib/storage/storage_test.go index 7e06589a73..7b8525227d 100644 --- a/lib/storage/storage_test.go +++ b/lib/storage/storage_test.go @@ -13,7 +13,6 @@ import ( "testing/quick" "time" - "github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal" "github.com/VictoriaMetrics/VictoriaMetrics/lib/fasttime" "github.com/VictoriaMetrics/VictoriaMetrics/lib/fs" "github.com/VictoriaMetrics/VictoriaMetrics/lib/uint64set" @@ -1232,65 +1231,6 @@ func TestStorageDeleteStaleSnapshots(t *testing.T) { } } -func TestStorageSeriesAreNotCreatedOnStaleMarkers(t *testing.T) { - path := "TestStorageSeriesAreNotCreatedOnStaleMarkers" - s := MustOpenStorage(path, -1, 1e5, 1e6) - - tr := TimeRange{MinTimestamp: 0, MaxTimestamp: 2e10} - tfsAll := NewTagFilters() - if err := tfsAll.Add([]byte("__name__"), []byte(".*"), false, true); err != nil { - t.Fatalf("unexpected error in TagFilters.Add: %s", err) - } - - findN := func(n int) { - t.Helper() - lns, err := s.SearchMetricNames(nil, []*TagFilters{tfsAll}, tr, 1e5, noDeadline) - if err != nil { - t.Fatalf("error in SearchLabelNamesWithFiltersOnTimeRange() at the start: %s", err) - } - if len(lns) != n { - fmt.Println(lns) - t.Fatalf("expected to find %d metric names, found %d instead", n, len(lns)) - } - } - - // db is empty, so should be search results - findN(0) - - rng := rand.New(rand.NewSource(1)) - mrs := testGenerateMetricRows(rng, 20, tr.MinTimestamp, tr.MaxTimestamp) - // populate storage with some rows - s.AddRows(mrs[:10], defaultPrecisionBits) - s.DebugFlush() - - // verify ingested rows are searchable - findN(10) - - // clean up ingested data - _, err := s.DeleteSeries(nil, []*TagFilters{tfsAll}) - if err != nil { - t.Fatalf("DeleteSeries failed: %s", err) - } - - // verify that data was actually deleted - findN(0) - - // mark every 2nd row as stale, simulating a stale target - for i := 0; i < len(mrs); i = i + 2 { - mrs[i].Value = decimal.StaleNaN - } - s.AddRows(mrs, defaultPrecisionBits) - s.DebugFlush() - - // verify that rows marked as stale aren't searchable - findN(10) - - s.MustClose() - if err := os.RemoveAll(path); err != nil { - t.Fatalf("cannot remove %q: %s", path, err) - } -} - // testRemoveAll removes all storage data produced by a test if the test hasn't // failed. For this to work, the storage must use t.Name() as the base dir in // its data path. @@ -1380,18 +1320,6 @@ func TestStorageRowsNotAdded(t *testing.T) { tr: TimeRange{minTimestamp, maxTimestamp}, }) - minTimestamp = time.Now().UnixMilli() - maxTimestamp = minTimestamp + 1000 - mrs = testGenerateMetricRows(rng, numRows, minTimestamp, maxTimestamp) - for i := range numRows { - mrs[i].Value = decimal.StaleNaN - } - f(&options{ - name: "StaleNaN", - mrs: mrs, - tr: TimeRange{minTimestamp, maxTimestamp}, - }) - minTimestamp = time.Now().UnixMilli() maxTimestamp = minTimestamp + 1000 mrs = testGenerateMetricRows(rng, numRows, minTimestamp, maxTimestamp) From c193e6d43ef51d1d5b0d38cabf70652b0878ff54 Mon Sep 17 00:00:00 2001 From: Zhu Jiekun Date: Thu, 5 Sep 2024 22:48:09 +0800 Subject: [PATCH 004/128] lib/discovery/azure: fix host check in next link in Azure SD (#6915) Previous bugfix at 49f63b2 only partially fixed pagination host validation error. Before this fix it was: ``` unexpected nextLink host \"management.azure.com\", expecting \"https://management.azure.com\" ``` Now we only check the `Host` without schema. However, when Azure respond `nextLink` in `Host:Port` format, the `nextLink` check will fail: ``` unexpected nextLink host \"management.azure.com:443\", expecting \"management.azure.com\" ``` This pull request further relaxes the checks by only checking the `Hostname`. --- related issue: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912 --- docs/changelog/CHANGELOG.md | 1 + lib/promscrape/discovery/azure/api.go | 2 +- lib/promscrape/discovery/azure/machine.go | 6 ++++-- lib/promscrape/discovery/azure/machine_test.go | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 1cdb765805..8f914e2c5b 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -23,6 +23,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. +* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. diff --git a/lib/promscrape/discovery/azure/api.go b/lib/promscrape/discovery/azure/api.go index e21257d697..a7087deee3 100644 --- a/lib/promscrape/discovery/azure/api.go +++ b/lib/promscrape/discovery/azure/api.go @@ -122,7 +122,7 @@ func newAPIConfig(sdc *SDConfig, baseDir string) (*apiConfig, error) { cfg := &apiConfig{ c: c, - apiServerHost: u.Host, + apiServerHost: u.Hostname(), port: port, resourceGroup: sdc.ResourceGroup, subscriptionID: sdc.SubscriptionID, diff --git a/lib/promscrape/discovery/azure/machine.go b/lib/promscrape/discovery/azure/machine.go index 491d80b365..a46da299da 100644 --- a/lib/promscrape/discovery/azure/machine.go +++ b/lib/promscrape/discovery/azure/machine.go @@ -96,8 +96,10 @@ func visitAllAPIObjects(ac *apiConfig, apiURL string, cb func(data json.RawMessa return fmt.Errorf("cannot parse nextLink from response %q: %w", lar.NextLink, err) } - if nextURL.Host != "" && nextURL.Host != ac.apiServerHost { - return fmt.Errorf("unexpected nextLink host %q, expecting %q", nextURL.Host, ac.apiServerHost) + // Sometimes Azure will respond a host with a port. Since all possible apiServer defined in cloudEnvironments do not include a port, + // it is best to check the host without the port. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912 + if nextURL.Host != "" && nextURL.Hostname() != ac.apiServerHost { + return fmt.Errorf("unexpected nextLink host %q, expecting %q", nextURL.Hostname(), ac.apiServerHost) } nextLinkURI = nextURL.RequestURI() diff --git a/lib/promscrape/discovery/azure/machine_test.go b/lib/promscrape/discovery/azure/machine_test.go index 06710c192b..dccc371525 100644 --- a/lib/promscrape/discovery/azure/machine_test.go +++ b/lib/promscrape/discovery/azure/machine_test.go @@ -91,7 +91,7 @@ func TestGetVirtualMachinesSuccess(t *testing.T) { defer c.Stop() ac := &apiConfig{ c: c, - apiServerHost: u.Host, + apiServerHost: u.Hostname(), subscriptionID: "some-id", refreshToken: func() (string, time.Duration, error) { return "auth-token", 0, nil From d7be0e7c9afc1441f15f8311a2a9ffb988996040 Mon Sep 17 00:00:00 2001 From: f41gh7 Date: Thu, 5 Sep 2024 16:56:24 +0200 Subject: [PATCH 005/128] docs/changelog: mention storage NaN changes follow-up after 39294b4919a62ef799221b95b7605626b81a6da6 Signed-off-by: f41gh7 --- docs/changelog/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 8f914e2c5b..decb531afc 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -23,10 +23,12 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. +* * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. ## [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) From 258ccfb9532357af3fdace53ec08cb464b0c5909 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 5 Sep 2024 19:40:50 +0200 Subject: [PATCH 006/128] lib/logstorage: pre-calculate hashes from tokens used in bloom filter search Previously per-token hashes for per-block bloom filters were re-calculated on every scanned block. This could be slow when the number of tokens is big or when the number of blocks to scan is big. Pre-calculate hashes for bloom filters and then use them for searching in bloom filters. This improves performance by 2.5x for in(...) filters with many values to search inside `in()`. --- docs/VictoriaLogs/CHANGELOG.md | 1 + lib/logstorage/bloomfilter.go | 69 ++++++++++++++---------- lib/logstorage/bloomfilter_test.go | 8 +-- lib/logstorage/filter_and.go | 30 ++++++----- lib/logstorage/filter_any_case_phrase.go | 34 ++++++------ lib/logstorage/filter_any_case_prefix.go | 34 ++++++------ lib/logstorage/filter_exact.go | 31 ++++++----- lib/logstorage/filter_exact_prefix.go | 35 +++++++----- lib/logstorage/filter_in.go | 28 ++++++---- lib/logstorage/filter_or.go | 13 ++--- lib/logstorage/filter_phrase.go | 23 +++++--- lib/logstorage/filter_prefix.go | 21 +++++--- lib/logstorage/filter_regexp.go | 29 ++++++---- lib/logstorage/filter_sequence.go | 32 ++++++----- 14 files changed, 225 insertions(+), 163 deletions(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 5cf6b55040..2af3859dbc 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* FEATURE: optimize [multi-exact queries](https://docs.victoriametrics.com/victorialogs/logsql/#multi-exact-filter) with many phrases to search. For example, `ip:in(path:="/foo/bar" | keep ip)` when there are many unique values for `ip` field among log entries with `/foo/bar` path. * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add support for displaying the top 5 log streams in the hits graph. The remaining log streams are grouped into an "other" label. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6545). * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add the ability to customize the graph display with options for bar, line, stepped line, and points. * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add fields for setting AccountID and ProjectID. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6631). diff --git a/lib/logstorage/bloomfilter.go b/lib/logstorage/bloomfilter.go index 187073e299..e012ac1453 100644 --- a/lib/logstorage/bloomfilter.go +++ b/lib/logstorage/bloomfilter.go @@ -72,49 +72,64 @@ func (bf *bloomFilter) mustInit(tokens []string) { // bloomFilterAdd adds the given tokens to the bloom filter bits func bloomFilterAdd(bits []uint64, tokens []string) { + hashesCount := len(tokens) * bloomFilterHashesCount + a := encoding.GetUint64s(hashesCount) + a.A = appendTokensHashes(a.A[:0], tokens) + maxBits := uint64(len(bits)) * 64 + for _, h := range a.A { + idx := h % maxBits + i := idx / 64 + j := idx % 64 + mask := uint64(1) << j + w := bits[i] + if (w & mask) == 0 { + bits[i] = w | mask + } + } + + encoding.PutUint64s(a) +} + +// appendTokensHashes appends hashes for the given tokens to dst and returns the result. +// +// the appended hashes can be then passed to bloomFilter.containsAll(). +func appendTokensHashes(dst []uint64, tokens []string) []uint64 { + dstLen := len(dst) + hashesCount := len(tokens) * bloomFilterHashesCount + + dst = slicesutil.SetLength(dst, dstLen+hashesCount) + dst = dst[:dstLen] + var buf [8]byte hp := (*uint64)(unsafe.Pointer(&buf[0])) for _, token := range tokens { *hp = xxhash.Sum64(bytesutil.ToUnsafeBytes(token)) for i := 0; i < bloomFilterHashesCount; i++ { - hi := xxhash.Sum64(buf[:]) + h := xxhash.Sum64(buf[:]) (*hp)++ - idx := hi % maxBits - i := idx / 64 - j := idx % 64 - mask := uint64(1) << j - w := bits[i] - if (w & mask) == 0 { - bits[i] = w | mask - } + dst = append(dst, h) } } + return dst } -// containsAll returns true if bf contains all the given tokens. -func (bf *bloomFilter) containsAll(tokens []string) bool { +// containsAll returns true if bf contains all the given tokens hashes generated by appendTokensHashes. +func (bf *bloomFilter) containsAll(hashes []uint64) bool { bits := bf.bits if len(bits) == 0 { return true } maxBits := uint64(len(bits)) * 64 - var buf [8]byte - hp := (*uint64)(unsafe.Pointer(&buf[0])) - for _, token := range tokens { - *hp = xxhash.Sum64(bytesutil.ToUnsafeBytes(token)) - for i := 0; i < bloomFilterHashesCount; i++ { - hi := xxhash.Sum64(buf[:]) - (*hp)++ - idx := hi % maxBits - i := idx / 64 - j := idx % 64 - mask := uint64(1) << j - w := bits[i] - if (w & mask) == 0 { - // The token is missing - return false - } + for _, h := range hashes { + idx := h % maxBits + i := idx / 64 + j := idx % 64 + mask := uint64(1) << j + w := bits[i] + if (w & mask) == 0 { + // The token is missing + return false } } return true diff --git a/lib/logstorage/bloomfilter_test.go b/lib/logstorage/bloomfilter_test.go index cd94e665a4..4242b48903 100644 --- a/lib/logstorage/bloomfilter_test.go +++ b/lib/logstorage/bloomfilter_test.go @@ -14,8 +14,9 @@ func TestBloomFilter(t *testing.T) { if err := bf.unmarshal(data); err != nil { t.Fatalf("unexpected error when unmarshaling bloom filter: %s", err) } - if !bf.containsAll(tokens) { - t.Fatalf("bloomFilterContains must return true for the added tokens") + tokensHashes := appendTokensHashes(nil, tokens) + if !bf.containsAll(tokensHashes) { + t.Fatalf("containsAll must return true for the added tokens") } } f(nil) @@ -67,7 +68,8 @@ func TestBloomFilterFalsePositive(t *testing.T) { falsePositives := 0 for i := range tokens { token := fmt.Sprintf("non-existing-token_%d", i) - if bf.containsAll([]string{token}) { + tokensHashes := appendTokensHashes(nil, []string{token}) + if bf.containsAll(tokensHashes) { falsePositives++ } } diff --git a/lib/logstorage/filter_and.go b/lib/logstorage/filter_and.go index 513d3e23bf..64fa0c17ab 100644 --- a/lib/logstorage/filter_and.go +++ b/lib/logstorage/filter_and.go @@ -18,8 +18,9 @@ type filterAnd struct { } type fieldTokens struct { - field string - tokens []string + field string + tokens []string + tokensHashes []uint64 } func (fa *filterAnd) String() string { @@ -76,16 +77,16 @@ func (fa *filterAnd) matchBloomFilters(bs *blockSearch) bool { return true } - for _, fieldTokens := range byFieldTokens { - fieldName := fieldTokens.field - tokens := fieldTokens.tokens + for _, ft := range byFieldTokens { + fieldName := ft.field + tokens := ft.tokens v := bs.csh.getConstColumnValue(fieldName) if v != "" { - if !matchStringByAllTokens(v, tokens) { - return false + if matchStringByAllTokens(v, tokens) { + continue } - continue + return false } ch := bs.csh.getColumnHeader(fieldName) @@ -94,12 +95,12 @@ func (fa *filterAnd) matchBloomFilters(bs *blockSearch) bool { } if ch.valueType == valueTypeDict { - if !matchDictValuesByAllTokens(ch.valuesDict.values, tokens) { - return false + if matchDictValuesByAllTokens(ch.valuesDict.values, tokens) { + continue } - continue + return false } - if !matchBloomFilterAllTokens(bs, ch, tokens) { + if !matchBloomFilterAllTokens(bs, ch, ft.tokensHashes) { return false } } @@ -170,8 +171,9 @@ func (fa *filterAnd) initByFieldTokens() { } byFieldTokens = append(byFieldTokens, fieldTokens{ - field: fieldName, - tokens: tokens, + field: fieldName, + tokens: tokens, + tokensHashes: appendTokensHashes(nil, tokens), }) } diff --git a/lib/logstorage/filter_any_case_phrase.go b/lib/logstorage/filter_any_case_phrase.go index db3358d461..8c3c924c71 100644 --- a/lib/logstorage/filter_any_case_phrase.go +++ b/lib/logstorage/filter_any_case_phrase.go @@ -24,11 +24,9 @@ type filterAnyCasePhrase struct { phraseUppercaseOnce sync.Once phraseUppercase string - tokensOnce sync.Once - tokens []string - - tokensUppercaseOnce sync.Once - tokensUppercase []string + tokensOnce sync.Once + tokensHashes []uint64 + tokensHashesUppercase []uint64 } func (fp *filterAnyCasePhrase) String() string { @@ -39,27 +37,25 @@ func (fp *filterAnyCasePhrase) updateNeededFields(neededFields fieldsSet) { neededFields.add(fp.fieldName) } -func (fp *filterAnyCasePhrase) getTokens() []string { +func (fp *filterAnyCasePhrase) getTokensHashes() []uint64 { fp.tokensOnce.Do(fp.initTokens) - return fp.tokens + return fp.tokensHashes +} + +func (fp *filterAnyCasePhrase) getTokensHashesUppercase() []uint64 { + fp.tokensOnce.Do(fp.initTokens) + return fp.tokensHashesUppercase } func (fp *filterAnyCasePhrase) initTokens() { - fp.tokens = tokenizeStrings(nil, []string{fp.phrase}) -} + tokens := tokenizeStrings(nil, []string{fp.phrase}) + fp.tokensHashes = appendTokensHashes(nil, tokens) -func (fp *filterAnyCasePhrase) getTokensUppercase() []string { - fp.tokensUppercaseOnce.Do(fp.initTokensUppercase) - return fp.tokensUppercase -} - -func (fp *filterAnyCasePhrase) initTokensUppercase() { - tokens := fp.getTokens() tokensUppercase := make([]string, len(tokens)) for i, token := range tokens { tokensUppercase[i] = strings.ToUpper(token) } - fp.tokensUppercase = tokensUppercase + fp.tokensHashesUppercase = appendTokensHashes(nil, tokensUppercase) } func (fp *filterAnyCasePhrase) getPhraseLowercase() string { @@ -109,7 +105,7 @@ func (fp *filterAnyCasePhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fp.getTokens() + tokens := fp.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -130,7 +126,7 @@ func (fp *filterAnyCasePhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { matchIPv4ByPhrase(bs, ch, bm, phraseLowercase, tokens) case valueTypeTimestampISO8601: phraseUppercase := fp.getPhraseUppercase() - tokensUppercase := fp.getTokensUppercase() + tokensUppercase := fp.getTokensHashesUppercase() matchTimestampISO8601ByPhrase(bs, ch, bm, phraseUppercase, tokensUppercase) default: logger.Panicf("FATAL: %s: unknown valueType=%d", bs.partPath(), ch.valueType) diff --git a/lib/logstorage/filter_any_case_prefix.go b/lib/logstorage/filter_any_case_prefix.go index 06d4293036..10561c18ef 100644 --- a/lib/logstorage/filter_any_case_prefix.go +++ b/lib/logstorage/filter_any_case_prefix.go @@ -25,11 +25,9 @@ type filterAnyCasePrefix struct { prefixUppercaseOnce sync.Once prefixUppercase string - tokensOnce sync.Once - tokens []string - - tokensUppercaseOnce sync.Once - tokensUppercase []string + tokensOnce sync.Once + tokensHashes []uint64 + tokensUppercaseHashes []uint64 } func (fp *filterAnyCasePrefix) String() string { @@ -43,27 +41,25 @@ func (fp *filterAnyCasePrefix) updateNeededFields(neededFields fieldsSet) { neededFields.add(fp.fieldName) } -func (fp *filterAnyCasePrefix) getTokens() []string { +func (fp *filterAnyCasePrefix) getTokensHashes() []uint64 { fp.tokensOnce.Do(fp.initTokens) - return fp.tokens + return fp.tokensHashes +} + +func (fp *filterAnyCasePrefix) getTokensUppercaseHashes() []uint64 { + fp.tokensOnce.Do(fp.initTokens) + return fp.tokensUppercaseHashes } func (fp *filterAnyCasePrefix) initTokens() { - fp.tokens = getTokensSkipLast(fp.prefix) -} + tokens := getTokensSkipLast(fp.prefix) + fp.tokensHashes = appendTokensHashes(nil, tokens) -func (fp *filterAnyCasePrefix) getTokensUppercase() []string { - fp.tokensUppercaseOnce.Do(fp.initTokensUppercase) - return fp.tokensUppercase -} - -func (fp *filterAnyCasePrefix) initTokensUppercase() { - tokens := fp.getTokens() tokensUppercase := make([]string, len(tokens)) for i, token := range tokens { tokensUppercase[i] = strings.ToUpper(token) } - fp.tokensUppercase = tokensUppercase + fp.tokensUppercaseHashes = appendTokensHashes(nil, tokensUppercase) } func (fp *filterAnyCasePrefix) getPrefixLowercase() string { @@ -110,7 +106,7 @@ func (fp *filterAnyCasePrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fp.getTokens() + tokens := fp.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -131,7 +127,7 @@ func (fp *filterAnyCasePrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { matchIPv4ByPrefix(bs, ch, bm, prefixLowercase, tokens) case valueTypeTimestampISO8601: prefixUppercase := fp.getPrefixUppercase() - tokensUppercase := fp.getTokensUppercase() + tokensUppercase := fp.getTokensUppercaseHashes() matchTimestampISO8601ByPrefix(bs, ch, bm, prefixUppercase, tokensUppercase) default: logger.Panicf("FATAL: %s: unknown valueType=%d", bs.partPath(), ch.valueType) diff --git a/lib/logstorage/filter_exact.go b/lib/logstorage/filter_exact.go index 98e9ea1ee2..70c119aba3 100644 --- a/lib/logstorage/filter_exact.go +++ b/lib/logstorage/filter_exact.go @@ -16,8 +16,9 @@ type filterExact struct { fieldName string value string - tokensOnce sync.Once - tokens []string + tokensOnce sync.Once + tokens []string + tokensHashes []uint64 } func (fe *filterExact) String() string { @@ -33,8 +34,14 @@ func (fe *filterExact) getTokens() []string { return fe.tokens } +func (fe *filterExact) getTokensHashes() []uint64 { + fe.tokensOnce.Do(fe.initTokens) + return fe.tokensHashes +} + func (fe *filterExact) initTokens() { fe.tokens = tokenizeStrings(nil, []string{fe.value}) + fe.tokensHashes = appendTokensHashes(nil, fe.tokens) } func (fe *filterExact) applyToBlockResult(br *blockResult, bm *bitmap) { @@ -186,7 +193,7 @@ func (fe *filterExact) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fe.getTokens() + tokens := fe.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -212,7 +219,7 @@ func (fe *filterExact) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchTimestampISO8601ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []string) { +func matchTimestampISO8601ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []uint64) { n, ok := tryParseTimestampISO8601(value) if !ok || n < int64(ch.minValue) || n > int64(ch.maxValue) { bm.resetBits() @@ -224,7 +231,7 @@ func matchTimestampISO8601ByExactValue(bs *blockSearch, ch *columnHeader, bm *bi bbPool.Put(bb) } -func matchIPv4ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []string) { +func matchIPv4ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []uint64) { n, ok := tryParseIPv4(value) if !ok || uint64(n) < ch.minValue || uint64(n) > ch.maxValue { bm.resetBits() @@ -236,7 +243,7 @@ func matchIPv4ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value bbPool.Put(bb) } -func matchFloat64ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []string) { +func matchFloat64ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []uint64) { f, ok := tryParseFloat64(value) if !ok || f < math.Float64frombits(ch.minValue) || f > math.Float64frombits(ch.maxValue) { bm.resetBits() @@ -262,7 +269,7 @@ func matchValuesDictByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, bbPool.Put(bb) } -func matchStringByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []string) { +func matchStringByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, value string, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -272,7 +279,7 @@ func matchStringByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, valu }) } -func matchUint8ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchUint8ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { n, ok := tryParseUint64(phrase) if !ok || n < ch.minValue || n > ch.maxValue { bm.resetBits() @@ -284,7 +291,7 @@ func matchUint8ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phras bbPool.Put(bb) } -func matchUint16ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchUint16ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { n, ok := tryParseUint64(phrase) if !ok || n < ch.minValue || n > ch.maxValue { bm.resetBits() @@ -296,7 +303,7 @@ func matchUint16ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phra bbPool.Put(bb) } -func matchUint32ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchUint32ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { n, ok := tryParseUint64(phrase) if !ok || n < ch.minValue || n > ch.maxValue { bm.resetBits() @@ -308,7 +315,7 @@ func matchUint32ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phra bbPool.Put(bb) } -func matchUint64ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchUint64ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { n, ok := tryParseUint64(phrase) if !ok || n < ch.minValue || n > ch.maxValue { bm.resetBits() @@ -320,7 +327,7 @@ func matchUint64ByExactValue(bs *blockSearch, ch *columnHeader, bm *bitmap, phra bbPool.Put(bb) } -func matchBinaryValue(bs *blockSearch, ch *columnHeader, bm *bitmap, binValue []byte, tokens []string) { +func matchBinaryValue(bs *blockSearch, ch *columnHeader, bm *bitmap, binValue []byte, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return diff --git a/lib/logstorage/filter_exact_prefix.go b/lib/logstorage/filter_exact_prefix.go index e0b3b86486..7c241841c9 100644 --- a/lib/logstorage/filter_exact_prefix.go +++ b/lib/logstorage/filter_exact_prefix.go @@ -15,8 +15,9 @@ type filterExactPrefix struct { fieldName string prefix string - tokensOnce sync.Once - tokens []string + tokensOnce sync.Once + tokens []string + tokensHashes []uint64 } func (fep *filterExactPrefix) String() string { @@ -32,8 +33,14 @@ func (fep *filterExactPrefix) getTokens() []string { return fep.tokens } +func (fep *filterExactPrefix) getTokensHashes() []uint64 { + fep.tokensOnce.Do(fep.initTokens) + return fep.tokensHashes +} + func (fep *filterExactPrefix) initTokens() { fep.tokens = getTokensSkipLast(fep.prefix) + fep.tokensHashes = appendTokensHashes(nil, fep.tokens) } func (fep *filterExactPrefix) applyToBlockResult(br *blockResult, bm *bitmap) { @@ -62,7 +69,7 @@ func (fep *filterExactPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fep.getTokens() + tokens := fep.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -88,7 +95,7 @@ func (fep *filterExactPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchTimestampISO8601ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchTimestampISO8601ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if prefix == "" { return } @@ -105,11 +112,11 @@ func matchTimestampISO8601ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *b bbPool.Put(bb) } -func matchIPv4ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchIPv4ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if prefix == "" { return } - if prefix < "0" || prefix > "9" || len(tokens) > 3 || !matchBloomFilterAllTokens(bs, ch, tokens) { + if prefix < "0" || prefix > "9" || len(tokens) > 3*bloomFilterHashesCount || !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return } @@ -122,12 +129,12 @@ func matchIPv4ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefi bbPool.Put(bb) } -func matchFloat64ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchFloat64ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if prefix == "" { // An empty prefix matches all the values return } - if len(tokens) > 2 || !matchBloomFilterAllTokens(bs, ch, tokens) { + if len(tokens) > 2*bloomFilterHashesCount || !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return } @@ -153,7 +160,7 @@ func matchValuesDictByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, bbPool.Put(bb) } -func matchStringByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchStringByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -163,7 +170,7 @@ func matchStringByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, pre }) } -func matchUint8ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchUint8ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if !matchMinMaxExactPrefix(ch, bm, prefix, tokens) { return } @@ -176,7 +183,7 @@ func matchUint8ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, pref bbPool.Put(bb) } -func matchUint16ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchUint16ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if !matchMinMaxExactPrefix(ch, bm, prefix, tokens) { return } @@ -189,7 +196,7 @@ func matchUint16ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, pre bbPool.Put(bb) } -func matchUint32ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchUint32ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if !matchMinMaxExactPrefix(ch, bm, prefix, tokens) { return } @@ -202,7 +209,7 @@ func matchUint32ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, pre bbPool.Put(bb) } -func matchUint64ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchUint64ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if !matchMinMaxExactPrefix(ch, bm, prefix, tokens) { return } @@ -215,7 +222,7 @@ func matchUint64ByExactPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, pre bbPool.Put(bb) } -func matchMinMaxExactPrefix(ch *columnHeader, bm *bitmap, prefix string, tokens []string) bool { +func matchMinMaxExactPrefix(ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) bool { if prefix == "" { // An empty prefix matches all the values return false diff --git a/lib/logstorage/filter_in.go b/lib/logstorage/filter_in.go index eb39f41f6d..8b9e14caa1 100644 --- a/lib/logstorage/filter_in.go +++ b/lib/logstorage/filter_in.go @@ -28,9 +28,9 @@ type filterIn struct { // qFieldName must be set to field name for obtaining values from if q is non-nil. qFieldName string - tokensOnce sync.Once - commonTokens []string - tokenSets [][]string + tokensOnce sync.Once + commonTokensHashes []uint64 + tokenSetsHashes [][]uint64 stringValuesOnce sync.Once stringValues map[string]struct{} @@ -76,16 +76,21 @@ func (fi *filterIn) updateNeededFields(neededFields fieldsSet) { neededFields.add(fi.fieldName) } -func (fi *filterIn) getTokens() ([]string, [][]string) { +func (fi *filterIn) getTokensHashes() ([]uint64, [][]uint64) { fi.tokensOnce.Do(fi.initTokens) - return fi.commonTokens, fi.tokenSets + return fi.commonTokensHashes, fi.tokenSetsHashes } func (fi *filterIn) initTokens() { commonTokens, tokenSets := getCommonTokensAndTokenSets(fi.values) - fi.commonTokens = commonTokens - fi.tokenSets = tokenSets + fi.commonTokensHashes = appendTokensHashes(nil, commonTokens) + + tokenSetsHashes := make([][]uint64, len(tokenSets)) + for i, tokens := range tokenSets { + tokenSetsHashes[i] = appendTokensHashes(nil, tokens) + } + fi.tokenSetsHashes = tokenSetsHashes } func (fi *filterIn) getStringValues() map[string]struct{} { @@ -374,7 +379,7 @@ func (fi *filterIn) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - commonTokens, tokenSets := fi.getTokens() + commonTokens, tokenSets := fi.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -409,7 +414,7 @@ func (fi *filterIn) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchAnyValue(bs *blockSearch, ch *columnHeader, bm *bitmap, values map[string]struct{}, commonTokens []string, tokenSets [][]string) { +func matchAnyValue(bs *blockSearch, ch *columnHeader, bm *bitmap, values map[string]struct{}, commonTokens []uint64, tokenSets [][]uint64) { if len(values) == 0 { bm.resetBits() return @@ -424,7 +429,7 @@ func matchAnyValue(bs *blockSearch, ch *columnHeader, bm *bitmap, values map[str }) } -func matchBloomFilterAnyTokenSet(bs *blockSearch, ch *columnHeader, commonTokens []string, tokenSets [][]string) bool { +func matchBloomFilterAnyTokenSet(bs *blockSearch, ch *columnHeader, commonTokens []uint64, tokenSets [][]uint64) bool { if len(commonTokens) > 0 { if !matchBloomFilterAllTokens(bs, ch, commonTokens) { return false @@ -511,6 +516,9 @@ func getCommonTokens(tokenSets [][]string) []string { } } } + if len(m) == 0 { + return nil + } tokens := make([]string, 0, len(m)) for token := range m { diff --git a/lib/logstorage/filter_or.go b/lib/logstorage/filter_or.go index db281c1b65..a292bdedd8 100644 --- a/lib/logstorage/filter_or.go +++ b/lib/logstorage/filter_or.go @@ -89,9 +89,9 @@ func (fo *filterOr) matchBloomFilters(bs *blockSearch) bool { return true } - for _, fieldTokens := range byFieldTokens { - fieldName := fieldTokens.field - tokens := fieldTokens.tokens + for _, ft := range byFieldTokens { + fieldName := ft.field + tokens := ft.tokens v := bs.csh.getConstColumnValue(fieldName) if v != "" { @@ -112,7 +112,7 @@ func (fo *filterOr) matchBloomFilters(bs *blockSearch) bool { } continue } - if matchBloomFilterAllTokens(bs, ch, tokens) { + if matchBloomFilterAllTokens(bs, ch, ft.tokensHashes) { return true } } @@ -190,8 +190,9 @@ func (fo *filterOr) initByFieldTokens() { break } byFieldTokens = append(byFieldTokens, fieldTokens{ - field: fieldName, - tokens: commonTokens, + field: fieldName, + tokens: commonTokens, + tokensHashes: appendTokensHashes(nil, commonTokens), }) } diff --git a/lib/logstorage/filter_phrase.go b/lib/logstorage/filter_phrase.go index 3b4c04174c..aa73d8414c 100644 --- a/lib/logstorage/filter_phrase.go +++ b/lib/logstorage/filter_phrase.go @@ -24,8 +24,9 @@ type filterPhrase struct { fieldName string phrase string - tokensOnce sync.Once - tokens []string + tokensOnce sync.Once + tokens []string + tokensHashes []uint64 } func (fp *filterPhrase) String() string { @@ -41,8 +42,14 @@ func (fp *filterPhrase) getTokens() []string { return fp.tokens } +func (fp *filterPhrase) getTokensHashes() []uint64 { + fp.tokensOnce.Do(fp.initTokens) + return fp.tokensHashes +} + func (fp *filterPhrase) initTokens() { fp.tokens = tokenizeStrings(nil, []string{fp.phrase}) + fp.tokensHashes = appendTokensHashes(nil, fp.tokens) } func (fp *filterPhrase) applyToBlockResult(br *blockResult, bm *bitmap) { @@ -73,7 +80,7 @@ func (fp *filterPhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fp.getTokens() + tokens := fp.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -99,7 +106,7 @@ func (fp *filterPhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchTimestampISO8601ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchTimestampISO8601ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { _, ok := tryParseTimestampISO8601(phrase) if ok { // Fast path - the phrase contains complete timestamp, so we can use exact search @@ -121,7 +128,7 @@ func matchTimestampISO8601ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap bbPool.Put(bb) } -func matchIPv4ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchIPv4ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { _, ok := tryParseIPv4(phrase) if ok { // Fast path - phrase contains the full IP address, so we can use exact matching @@ -145,7 +152,7 @@ func matchIPv4ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase str bbPool.Put(bb) } -func matchFloat64ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchFloat64ByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { // The phrase may contain a part of the floating-point number. // For example, `foo:"123"` must match `123`, `123.456` and `-0.123`. // This means we cannot search in binary representation of floating-point numbers. @@ -187,7 +194,7 @@ func matchValuesDictByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phra bbPool.Put(bb) } -func matchStringByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []string) { +func matchStringByPhrase(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase string, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -288,7 +295,7 @@ func visitValues(bs *blockSearch, ch *columnHeader, bm *bitmap, f func(value str }) } -func matchBloomFilterAllTokens(bs *blockSearch, ch *columnHeader, tokens []string) bool { +func matchBloomFilterAllTokens(bs *blockSearch, ch *columnHeader, tokens []uint64) bool { if len(tokens) == 0 { return true } diff --git a/lib/logstorage/filter_prefix.go b/lib/logstorage/filter_prefix.go index 7b0fa9964f..4d0f75fde0 100644 --- a/lib/logstorage/filter_prefix.go +++ b/lib/logstorage/filter_prefix.go @@ -19,8 +19,9 @@ type filterPrefix struct { fieldName string prefix string - tokensOnce sync.Once - tokens []string + tokensOnce sync.Once + tokens []string + tokensHashes []uint64 } func (fp *filterPrefix) String() string { @@ -39,8 +40,14 @@ func (fp *filterPrefix) getTokens() []string { return fp.tokens } +func (fp *filterPrefix) getTokensHashes() []uint64 { + fp.tokensOnce.Do(fp.initTokens) + return fp.tokensHashes +} + func (fp *filterPrefix) initTokens() { fp.tokens = getTokensSkipLast(fp.prefix) + fp.tokensHashes = appendTokensHashes(nil, fp.tokens) } func (fp *filterPrefix) applyToBlockResult(bs *blockResult, bm *bitmap) { @@ -68,7 +75,7 @@ func (fp *filterPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fp.getTokens() + tokens := fp.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -94,7 +101,7 @@ func (fp *filterPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchTimestampISO8601ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchTimestampISO8601ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if prefix == "" { // Fast path - all the timestamp values match an empty prefix aka `*` return @@ -115,7 +122,7 @@ func matchTimestampISO8601ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap bbPool.Put(bb) } -func matchIPv4ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchIPv4ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if prefix == "" { // Fast path - all the ipv4 values match an empty prefix aka `*` return @@ -136,7 +143,7 @@ func matchIPv4ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix str bbPool.Put(bb) } -func matchFloat64ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchFloat64ByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if prefix == "" { // Fast path - all the float64 values match an empty prefix aka `*` return @@ -177,7 +184,7 @@ func matchValuesDictByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, pref bbPool.Put(bb) } -func matchStringByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []string) { +func matchStringByPrefix(bs *blockSearch, ch *columnHeader, bm *bitmap, prefix string, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return diff --git a/lib/logstorage/filter_regexp.go b/lib/logstorage/filter_regexp.go index 5e88ada0bc..df8e59733c 100644 --- a/lib/logstorage/filter_regexp.go +++ b/lib/logstorage/filter_regexp.go @@ -16,8 +16,9 @@ type filterRegexp struct { fieldName string re *regexutil.Regex - tokens []string - tokensOnce sync.Once + tokensOnce sync.Once + tokens []string + tokensHashes []uint64 } func (fr *filterRegexp) String() string { @@ -33,12 +34,18 @@ func (fr *filterRegexp) getTokens() []string { return fr.tokens } +func (fr *filterRegexp) getTokensHashes() []uint64 { + fr.tokensOnce.Do(fr.initTokens) + return fr.tokensHashes +} + func (fr *filterRegexp) initTokens() { literals := fr.re.GetLiterals() for i, literal := range literals { literals[i] = skipFirstLastToken(literal) } fr.tokens = tokenizeStrings(nil, literals) + fr.tokensHashes = appendTokensHashes(nil, fr.tokens) } func skipFirstLastToken(s string) string { @@ -89,7 +96,7 @@ func (fr *filterRegexp) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fr.getTokens() + tokens := fr.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -115,7 +122,7 @@ func (fr *filterRegexp) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchTimestampISO8601ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchTimestampISO8601ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -128,7 +135,7 @@ func matchTimestampISO8601ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap bbPool.Put(bb) } -func matchIPv4ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchIPv4ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -141,7 +148,7 @@ func matchIPv4ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexu bbPool.Put(bb) } -func matchFloat64ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchFloat64ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -167,7 +174,7 @@ func matchValuesDictByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re * bbPool.Put(bb) } -func matchStringByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchStringByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -177,7 +184,7 @@ func matchStringByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *rege }) } -func matchUint8ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchUint8ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -190,7 +197,7 @@ func matchUint8ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regex bbPool.Put(bb) } -func matchUint16ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchUint16ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -203,7 +210,7 @@ func matchUint16ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *rege bbPool.Put(bb) } -func matchUint32ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchUint32ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -216,7 +223,7 @@ func matchUint32ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *rege bbPool.Put(bb) } -func matchUint64ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []string) { +func matchUint64ByRegexp(bs *blockSearch, ch *columnHeader, bm *bitmap, re *regexutil.Regex, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return diff --git a/lib/logstorage/filter_sequence.go b/lib/logstorage/filter_sequence.go index 46ca9732fa..1fda32d05d 100644 --- a/lib/logstorage/filter_sequence.go +++ b/lib/logstorage/filter_sequence.go @@ -15,8 +15,9 @@ type filterSequence struct { fieldName string phrases []string - tokensOnce sync.Once - tokens []string + tokensOnce sync.Once + tokens []string + tokensHashes []uint64 nonEmptyPhrasesOnce sync.Once nonEmptyPhrases []string @@ -40,10 +41,15 @@ func (fs *filterSequence) getTokens() []string { return fs.tokens } +func (fs *filterSequence) getTokensHashes() []uint64 { + fs.tokensOnce.Do(fs.initTokens) + return fs.tokensHashes +} + func (fs *filterSequence) initTokens() { phrases := fs.getNonEmptyPhrases() - tokens := tokenizeStrings(nil, phrases) - fs.tokens = tokens + fs.tokens = tokenizeStrings(nil, phrases) + fs.tokensHashes = appendTokensHashes(nil, fs.tokens) } func (fs *filterSequence) getNonEmptyPhrases() []string { @@ -100,7 +106,7 @@ func (fs *filterSequence) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - tokens := fs.getTokens() + tokens := fs.getTokensHashes() switch ch.valueType { case valueTypeString: @@ -126,7 +132,7 @@ func (fs *filterSequence) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } } -func matchTimestampISO8601BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchTimestampISO8601BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if len(phrases) == 1 { matchTimestampISO8601ByPhrase(bs, ch, bm, phrases[0], tokens) return @@ -145,7 +151,7 @@ func matchTimestampISO8601BySequence(bs *blockSearch, ch *columnHeader, bm *bitm bbPool.Put(bb) } -func matchIPv4BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchIPv4BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if len(phrases) == 1 { matchIPv4ByPhrase(bs, ch, bm, phrases[0], tokens) return @@ -166,7 +172,7 @@ func matchIPv4BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, bbPool.Put(bb) } -func matchFloat64BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchFloat64BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -197,7 +203,7 @@ func matchValuesDictBySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, ph bbPool.Put(bb) } -func matchStringBySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []string) { +func matchStringBySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if !matchBloomFilterAllTokens(bs, ch, tokens) { bm.resetBits() return @@ -207,7 +213,7 @@ func matchStringBySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase }) } -func matchUint8BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchUint8BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if len(phrases) > 1 { bm.resetBits() return @@ -215,7 +221,7 @@ func matchUint8BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases matchUint8ByExactValue(bs, ch, bm, phrases[0], tokens) } -func matchUint16BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchUint16BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if len(phrases) > 1 { bm.resetBits() return @@ -223,7 +229,7 @@ func matchUint16BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase matchUint16ByExactValue(bs, ch, bm, phrases[0], tokens) } -func matchUint32BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchUint32BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if len(phrases) > 1 { bm.resetBits() return @@ -231,7 +237,7 @@ func matchUint32BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrase matchUint32ByExactValue(bs, ch, bm, phrases[0], tokens) } -func matchUint64BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases, tokens []string) { +func matchUint64BySequence(bs *blockSearch, ch *columnHeader, bm *bitmap, phrases []string, tokens []uint64) { if len(phrases) > 1 { bm.resetBits() return From 02051704094b31769d3896dc4c86ace6b771e618 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 6 Sep 2024 16:17:04 +0200 Subject: [PATCH 007/128] lib/logstorage: consistently use nsecsPerDay constant and remove nsecPerDay constant --- lib/logstorage/parser.go | 4 ++-- lib/logstorage/storage.go | 20 +++++++++----------- lib/logstorage/storage_search.go | 4 ++-- lib/logstorage/storage_test.go | 4 ++-- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 45f59768f7..131e5eef62 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -1644,8 +1644,8 @@ func getDayRangeArg(lex *lexer) (int64, string, error) { if offset < 0 { offset = 0 } - if offset >= nsecPerDay { - offset = nsecPerDay - 1 + if offset >= nsecsPerDay { + offset = nsecsPerDay - 1 } return offset, argStr, nil } diff --git a/lib/logstorage/storage.go b/lib/logstorage/storage.go index efa29c5f2b..b0d94babf1 100644 --- a/lib/logstorage/storage.go +++ b/lib/logstorage/storage.go @@ -200,8 +200,8 @@ func (ptw *partitionWrapper) decRef() { } func (ptw *partitionWrapper) canAddAllRows(lr *LogRows) bool { - minTimestamp := ptw.day * nsecPerDay - maxTimestamp := minTimestamp + nsecPerDay - 1 + minTimestamp := ptw.day * nsecsPerDay + maxTimestamp := minTimestamp + nsecsPerDay - 1 for _, ts := range lr.timestamps { if ts < minTimestamp || ts > maxTimestamp { return false @@ -286,7 +286,7 @@ func MustOpenStorage(path string, cfg *StorageConfig) *Storage { if err != nil { logger.Panicf("FATAL: cannot parse partition filename %q at %q; it must be in the form YYYYMMDD: %s", fname, partitionsPath, err) } - day := t.UTC().UnixNano() / nsecPerDay + day := t.UTC().UnixNano() / nsecsPerDay partitionPath := filepath.Join(partitionsPath, fname) pt := mustOpenPartition(s, partitionPath) @@ -441,11 +441,11 @@ func (s *Storage) watchMaxDiskSpaceUsage() { } func (s *Storage) getMinAllowedDay() int64 { - return time.Now().UTC().Add(-s.retention).UnixNano() / nsecPerDay + return time.Now().UTC().Add(-s.retention).UnixNano() / nsecsPerDay } func (s *Storage) getMaxAllowedDay() int64 { - return time.Now().UTC().Add(s.futureRetention).UnixNano() / nsecPerDay + return time.Now().UTC().Add(s.futureRetention).UnixNano() / nsecsPerDay } // MustClose closes s. @@ -514,11 +514,11 @@ func (s *Storage) MustAddRows(lr *LogRows) { maxAllowedDay := s.getMaxAllowedDay() m := make(map[int64]*LogRows) for i, ts := range lr.timestamps { - day := ts / nsecPerDay + day := ts / nsecsPerDay if day < minAllowedDay { rf := RowFormatter(lr.rows[i]) tsf := TimeFormatter(ts) - minAllowedTsf := TimeFormatter(minAllowedDay * nsecPerDay) + minAllowedTsf := TimeFormatter(minAllowedDay * nsecsPerDay) tooSmallTimestampLogger.Warnf("skipping log entry with too small timestamp=%s; it must be bigger than %s according "+ "to the configured -retentionPeriod=%dd. See https://docs.victoriametrics.com/victorialogs/#retention ; "+ "log entry: %s", &tsf, &minAllowedTsf, durationToDays(s.retention), &rf) @@ -528,7 +528,7 @@ func (s *Storage) MustAddRows(lr *LogRows) { if day > maxAllowedDay { rf := RowFormatter(lr.rows[i]) tsf := TimeFormatter(ts) - maxAllowedTsf := TimeFormatter(maxAllowedDay * nsecPerDay) + maxAllowedTsf := TimeFormatter(maxAllowedDay * nsecsPerDay) tooBigTimestampLogger.Warnf("skipping log entry with too big timestamp=%s; it must be smaller than %s according "+ "to the configured -futureRetention=%dd; see https://docs.victoriametrics.com/victorialogs/#retention ; "+ "log entry: %s", &tsf, &maxAllowedTsf, durationToDays(s.futureRetention), &rf) @@ -553,8 +553,6 @@ func (s *Storage) MustAddRows(lr *LogRows) { var tooSmallTimestampLogger = logger.WithThrottler("too_small_timestamp", 5*time.Second) var tooBigTimestampLogger = logger.WithThrottler("too_big_timestamp", 5*time.Second) -const nsecPerDay = 24 * 3600 * 1e9 - // TimeFormatter implements fmt.Stringer for timestamp in nanoseconds type TimeFormatter int64 @@ -582,7 +580,7 @@ func (s *Storage) getPartitionForDay(day int64) *partitionWrapper { } if ptw == nil { // Missing partition for the given day. Create it. - fname := time.Unix(0, day*nsecPerDay).UTC().Format(partitionNameFormat) + fname := time.Unix(0, day*nsecsPerDay).UTC().Format(partitionNameFormat) partitionPath := filepath.Join(s.path, partitionsDirname, fname) mustCreatePartition(partitionPath) diff --git a/lib/logstorage/storage_search.go b/lib/logstorage/storage_search.go index ba82ccd0dc..3f9185f54d 100644 --- a/lib/logstorage/storage_search.go +++ b/lib/logstorage/storage_search.go @@ -673,12 +673,12 @@ func (s *Storage) search(workersCount int, so *genericSearchOptions, stopCh <-ch // Select partitions according to the selected time range s.partitionsLock.Lock() ptws := s.partitions - minDay := so.minTimestamp / nsecPerDay + minDay := so.minTimestamp / nsecsPerDay n := sort.Search(len(ptws), func(i int) bool { return ptws[i].day >= minDay }) ptws = ptws[n:] - maxDay := so.maxTimestamp / nsecPerDay + maxDay := so.maxTimestamp / nsecsPerDay n = sort.Search(len(ptws), func(i int) bool { return ptws[i].day > maxDay }) diff --git a/lib/logstorage/storage_test.go b/lib/logstorage/storage_test.go index b67e90a5f0..cad816a4ea 100644 --- a/lib/logstorage/storage_test.go +++ b/lib/logstorage/storage_test.go @@ -78,10 +78,10 @@ func TestStorageMustAddRows(t *testing.T) { s = MustOpenStorage(path, cfg) lr = newTestLogRows(3, 10, 0) - now := time.Now().UTC().UnixNano() - int64(len(lr.timestamps)/2)*nsecPerDay + now := time.Now().UTC().UnixNano() - int64(len(lr.timestamps)/2)*nsecsPerDay for i := range lr.timestamps { lr.timestamps[i] = now - now += nsecPerDay + now += nsecsPerDay } totalRowsCount += uint64(len(lr.timestamps)) s.MustAddRows(lr) From 9f7ee4c0bb381fa34e086f6f22f2e427ae746c4b Mon Sep 17 00:00:00 2001 From: Zakhar Bessarab Date: Fri, 6 Sep 2024 18:05:40 +0400 Subject: [PATCH 008/128] Vmgateway no prefix string (#784) * app/vmgateway: allow skipping Bearer prefix, parsing access as string - allow disabling of "Bearer" prefix check - This is needed in order to support OIDC systems where identity token is provided separately from access token and it does not contain "Bearer" prefix(such as Azure Entra ID, ex AD).a - support parsing "vm_access" claim as a string - This is helpful for systems where claims can only be mapped to string. Signed-off-by: Zakhar Bessarab * docs/changelog: mention vmgateway updates Signed-off-by: Zakhar Bessarab --------- Signed-off-by: Zakhar Bessarab --- docs/changelog/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index decb531afc..ce7908a77b 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -22,6 +22,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. +* FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): allow disabling `Bearer` prefix enforcement for authentication header. This is useful for cases when identity token is used instead of access token. +* FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parting `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. * * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). From a5424e95b393022090a7996aa92cefe4d29f7311 Mon Sep 17 00:00:00 2001 From: Artem Fetishev <149964189+rtm0@users.noreply.github.com> Date: Fri, 6 Sep 2024 18:57:21 +0300 Subject: [PATCH 009/128] lib/storage: adds metrics that count records that failed to insert ### Describe Your Changes Add storage metrics that count records that failed to insert: - `RowsReceivedTotal`: the number of records that have been received by the storage from the clients - `RowsAddedTotal`: the number of records that have actually been persisted. This value must be equal to `RowsReceivedTotal` if all the records have been valid ones. But it will be smaller otherwise. The values of the metrics below should provide the insight of why some records hasn't been added - `NaNValueRows`: the number of records whose value was `NaN` - `StaleNaNValueRows`: the number of records whose value was `Stale NaN` - `InvalidRawMetricNames`: the number of records whose raw metric name has failed to unmarshal. The following metrics existed before this PR and are listed here for completeness: - `TooSmallTimestampRows`: the number of records whose timestamp is negative or is older than retention period - `TooBigTimestampRows`: the number of records whose timestamp is too far in the future. - `HourlySeriesLimitRowsDropped`: the number of records that have not been added because the hourly series limit has been exceeded. - `DailySeriesLimitRowsDropped`: the number of records that have not been added because the daily series limit has been exceeded. --- Signed-off-by: Artem Fetishev --- app/vmstorage/main.go | 9 ++++++ lib/storage/storage.go | 31 +++++++++++++++++--- lib/storage/storage_test.go | 56 ++++++++++++++++++++++++++++++++++--- 3 files changed, 88 insertions(+), 8 deletions(-) diff --git a/app/vmstorage/main.go b/app/vmstorage/main.go index d496310f90..a4d7c4f97c 100644 --- a/app/vmstorage/main.go +++ b/app/vmstorage/main.go @@ -521,12 +521,21 @@ func writeStorageMetrics(w io.Writer, strg *storage.Storage) { metrics.WriteGaugeUint64(w, `vm_data_size_bytes{type="indexdb/inmemory"}`, idbm.InmemorySizeBytes) metrics.WriteGaugeUint64(w, `vm_data_size_bytes{type="indexdb/file"}`, idbm.FileSizeBytes) + metrics.WriteCounterUint64(w, `vm_rows_received_by_storage_total`, m.RowsReceivedTotal) metrics.WriteCounterUint64(w, `vm_rows_added_to_storage_total`, m.RowsAddedTotal) metrics.WriteCounterUint64(w, `vm_deduplicated_samples_total{type="merge"}`, m.DedupsDuringMerge) metrics.WriteGaugeUint64(w, `vm_snapshots`, m.SnapshotsCount) + metrics.WriteCounterUint64(w, `vm_rows_ignored_total{reason="nan_value"}`, m.NaNValueRows) metrics.WriteCounterUint64(w, `vm_rows_ignored_total{reason="big_timestamp"}`, m.TooBigTimestampRows) metrics.WriteCounterUint64(w, `vm_rows_ignored_total{reason="small_timestamp"}`, m.TooSmallTimestampRows) + metrics.WriteCounterUint64(w, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, m.InvalidRawMetricNames) + if *maxHourlySeries > 0 { + metrics.WriteCounterUint64(w, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, m.HourlySeriesLimitRowsDropped) + } + if *maxDailySeries > 0 { + metrics.WriteCounterUint64(w, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`, m.DailySeriesLimitRowsDropped) + } metrics.WriteCounterUint64(w, `vm_timeseries_repopulated_total`, m.TimeseriesRepopulated) metrics.WriteCounterUint64(w, `vm_timeseries_precreated_total`, m.TimeseriesPreCreated) diff --git a/lib/storage/storage.go b/lib/storage/storage.go index ea6cdbc52e..2125ca247c 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -40,10 +40,13 @@ const ( // Storage represents TSDB storage. type Storage struct { - rowsAddedTotal atomic.Uint64 + rowsReceivedTotal atomic.Uint64 + rowsAddedTotal atomic.Uint64 + naNValueRows atomic.Uint64 tooSmallTimestampRows atomic.Uint64 tooBigTimestampRows atomic.Uint64 + invalidRawMetricNames atomic.Uint64 timeseriesRepopulated atomic.Uint64 timeseriesPreCreated atomic.Uint64 @@ -481,12 +484,15 @@ func (s *Storage) idb() *indexDB { // Metrics contains essential metrics for the Storage. type Metrics struct { + RowsReceivedTotal uint64 RowsAddedTotal uint64 DedupsDuringMerge uint64 SnapshotsCount uint64 + NaNValueRows uint64 TooSmallTimestampRows uint64 TooBigTimestampRows uint64 + InvalidRawMetricNames uint64 TimeseriesRepopulated uint64 TimeseriesPreCreated uint64 @@ -554,12 +560,15 @@ func (m *Metrics) Reset() { // UpdateMetrics updates m with metrics from s. func (s *Storage) UpdateMetrics(m *Metrics) { + m.RowsReceivedTotal += s.rowsReceivedTotal.Load() m.RowsAddedTotal += s.rowsAddedTotal.Load() m.DedupsDuringMerge = dedupsDuringMerge.Load() m.SnapshotsCount += uint64(s.mustGetSnapshotsCount()) + m.NaNValueRows += s.naNValueRows.Load() m.TooSmallTimestampRows += s.tooSmallTimestampRows.Load() m.TooBigTimestampRows += s.tooBigTimestampRows.Load() + m.InvalidRawMetricNames += s.invalidRawMetricNames.Load() m.TimeseriesRepopulated += s.timeseriesRepopulated.Load() m.TimeseriesPreCreated += s.timeseriesPreCreated.Load() @@ -1628,8 +1637,13 @@ func (s *Storage) AddRows(mrs []MetricRow, precisionBits uint8) { } else { mrs = nil } - s.add(ic.rrs, ic.tmpMrs, mrsBlock, precisionBits) - s.rowsAddedTotal.Add(uint64(len(mrsBlock))) + rowsAdded := s.add(ic.rrs, ic.tmpMrs, mrsBlock, precisionBits) + + // If the number of received rows is greater than the number of added + // rows, then some rows have failed to add. Check logs for the first + // error. + s.rowsAddedTotal.Add(uint64(rowsAdded)) + s.rowsReceivedTotal.Add(uint64(len(mrsBlock))) } putMetricRowsInsertCtx(ic) } @@ -1701,6 +1715,7 @@ func (s *Storage) RegisterMetricNames(qt *querytracer.Tracer, mrs []MetricRow) { if firstWarn == nil { firstWarn = fmt.Errorf("cannot umarshal MetricNameRaw %q: %w", mr.MetricNameRaw, err) } + s.invalidRawMetricNames.Add(1) continue } mn.sortTags() @@ -1735,6 +1750,7 @@ func (s *Storage) RegisterMetricNames(qt *querytracer.Tracer, mrs []MetricRow) { if firstWarn == nil { firstWarn = fmt.Errorf("cannot umarshal MetricNameRaw %q: %w", mr.MetricNameRaw, err) } + s.invalidRawMetricNames.Add(1) continue } mn.sortTags() @@ -1785,7 +1801,7 @@ func (s *Storage) RegisterMetricNames(qt *querytracer.Tracer, mrs []MetricRow) { } } -func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, precisionBits uint8) { +func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, precisionBits uint8) int { idb := s.idb() generation := idb.generation is := idb.getIndexSearch(noDeadline) @@ -1819,6 +1835,7 @@ func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, preci if !decimal.IsStaleNaN(mr.Value) { // Skip NaNs other than Prometheus staleness marker, since the underlying encoding // doesn't know how to work with them. + s.naNValueRows.Add(1) continue } } @@ -1881,6 +1898,7 @@ func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, preci firstWarn = fmt.Errorf("cannot unmarshal MetricNameRaw %q: %w", mr.MetricNameRaw, err) } j-- + s.invalidRawMetricNames.Add(1) continue } mn.sortTags() @@ -1905,6 +1923,7 @@ func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, preci firstWarn = fmt.Errorf("cannot unmarshal MetricNameRaw %q: %w", mr.MetricNameRaw, err) } j-- + s.invalidRawMetricNames.Add(1) continue } mn.sortTags() @@ -1980,6 +1999,8 @@ func (s *Storage) add(rows []rawRow, dstMrs []*MetricRow, mrs []MetricRow, preci } s.tb.MustAddRows(rows) + + return len(rows) } var storageAddRowsLogger = logger.WithThrottler("storageAddRows", 5*time.Second) @@ -2100,6 +2121,7 @@ func (s *Storage) prefillNextIndexDB(rows []rawRow, mrs []*MetricRow) error { if firstError == nil { firstError = fmt.Errorf("cannot unmarshal MetricNameRaw %q: %w", metricNameRaw, err) } + s.invalidRawMetricNames.Add(1) continue } mn.sortTags() @@ -2245,6 +2267,7 @@ func (s *Storage) updatePerDateData(rows []rawRow, mrs []*MetricRow) error { if firstError == nil { firstError = fmt.Errorf("cannot unmarshal MetricNameRaw %q: %w", dmid.mr.MetricNameRaw, err) } + s.invalidRawMetricNames.Add(1) continue } mn.sortTags() diff --git a/lib/storage/storage_test.go b/lib/storage/storage_test.go index 7b8525227d..8ccccc4ee2 100644 --- a/lib/storage/storage_test.go +++ b/lib/storage/storage_test.go @@ -1248,10 +1248,11 @@ func TestStorageRowsNotAdded(t *testing.T) { defer testRemoveAll(t) type options struct { - name string - retention time.Duration - mrs []MetricRow - tr TimeRange + name string + retention time.Duration + mrs []MetricRow + tr TimeRange + wantMetrics *Metrics } f := func(opts *options) { t.Helper() @@ -1268,6 +1269,19 @@ func TestStorageRowsNotAdded(t *testing.T) { if got != 0 { t.Fatalf("unexpected metric name count: got %d, want 0", got) } + + if got, want := gotMetrics.RowsReceivedTotal, opts.wantMetrics.RowsReceivedTotal; got != want { + t.Fatalf("unexpected Metrics.RowsReceivedTotal: got %d, want %d", got, want) + } + if got, want := gotMetrics.RowsAddedTotal, opts.wantMetrics.RowsAddedTotal; got != want { + t.Fatalf("unexpected Metrics.RowsAddedTotal: got %d, want %d", got, want) + } + if got, want := gotMetrics.NaNValueRows, opts.wantMetrics.NaNValueRows; got != want { + t.Fatalf("unexpected Metrics.NaNValueRows: got %d, want %d", got, want) + } + if got, want := gotMetrics.InvalidRawMetricNames, opts.wantMetrics.InvalidRawMetricNames; got != want { + t.Fatalf("unexpected Metrics.InvalidRawMetricNames: got %d, want %d", got, want) + } } const numRows = 1000 @@ -1286,6 +1300,10 @@ func TestStorageRowsNotAdded(t *testing.T) { retention: retentionMax, mrs: testGenerateMetricRows(rng, numRows, minTimestamp, maxTimestamp), tr: TimeRange{minTimestamp, maxTimestamp}, + wantMetrics: &Metrics{ + RowsReceivedTotal: numRows, + TooSmallTimestampRows: numRows, + }, }) retention = 48 * time.Hour @@ -1296,6 +1314,10 @@ func TestStorageRowsNotAdded(t *testing.T) { retention: retention, mrs: testGenerateMetricRows(rng, numRows, minTimestamp, maxTimestamp), tr: TimeRange{minTimestamp, maxTimestamp}, + wantMetrics: &Metrics{ + RowsReceivedTotal: numRows, + TooSmallTimestampRows: numRows, + }, }) retention = 48 * time.Hour @@ -1306,6 +1328,10 @@ func TestStorageRowsNotAdded(t *testing.T) { retention: retention, mrs: testGenerateMetricRows(rng, numRows, minTimestamp, maxTimestamp), tr: TimeRange{minTimestamp, maxTimestamp}, + wantMetrics: &Metrics{ + RowsReceivedTotal: numRows, + TooBigTimestampRows: numRows, + }, }) minTimestamp = time.Now().UnixMilli() @@ -1318,6 +1344,10 @@ func TestStorageRowsNotAdded(t *testing.T) { name: "NaN", mrs: mrs, tr: TimeRange{minTimestamp, maxTimestamp}, + wantMetrics: &Metrics{ + RowsReceivedTotal: numRows, + NaNValueRows: numRows, + }, }) minTimestamp = time.Now().UnixMilli() @@ -1330,6 +1360,10 @@ func TestStorageRowsNotAdded(t *testing.T) { name: "InvalidMetricNameRaw", mrs: mrs, tr: TimeRange{minTimestamp, maxTimestamp}, + wantMetrics: &Metrics{ + RowsReceivedTotal: numRows, + InvalidRawMetricNames: numRows, + }, }) } @@ -1353,10 +1387,24 @@ func TestStorageRowsNotAdded_SeriesLimitExceeded(t *testing.T) { s.DebugFlush() s.UpdateMetrics(&gotMetrics) + if got, want := gotMetrics.RowsReceivedTotal, numRows; got != want { + t.Fatalf("unexpected Metrics.RowsReceivedTotal: got %d, want %d", got, want) + } + if got := gotMetrics.HourlySeriesLimitRowsDropped; maxHourlySeries > 0 && got <= 0 { + t.Fatalf("unexpected Metrics.HourlySeriesLimitRowsDropped: got %d, want > 0", got) + } + if got := gotMetrics.DailySeriesLimitRowsDropped; maxDailySeries > 0 && got <= 0 { + t.Fatalf("unexpected Metrics.DailySeriesLimitRowsDropped: got %d, want > 0", got) + } + want := numRows - (gotMetrics.HourlySeriesLimitRowsDropped + gotMetrics.DailySeriesLimitRowsDropped) if got := testCountAllMetricNames(s, TimeRange{minTimestamp, maxTimestamp}); uint64(got) != want { t.Fatalf("unexpected metric name count: %d, want %d", got, want) } + + if got := gotMetrics.RowsAddedTotal; got != want { + t.Fatalf("unexpected Metrics.RowsAddedTotal: got %d, want %d", got, want) + } } maxHourlySeries := 1 From feafb30266ad2a42c6e5306d0a587be3fae52297 Mon Sep 17 00:00:00 2001 From: f41gh7 Date: Fri, 6 Sep 2024 18:05:11 +0200 Subject: [PATCH 010/128] docs/changelog: mention storage changes After a5424e95b393022090a7996aa92cefe4d29f7311 Signed-off-by: f41gh7 --- docs/changelog/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index ce7908a77b..7754d11ca5 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -24,8 +24,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): allow disabling `Bearer` prefix enforcement for authentication header. This is useful for cases when identity token is used instead of access token. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parting `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. +* FEATURE: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Adds new metrics for data ingestion: `vm_rows_received_by_storage_total`, `vm_rows_ignored_total{reason="nan_value"}`, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`. See this [PR](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6663) for details. -* * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. From 95acca6b5223c8e92c82935183cf1159b9046196 Mon Sep 17 00:00:00 2001 From: f41gh7 Date: Fri, 6 Sep 2024 18:12:17 +0200 Subject: [PATCH 011/128] app/*/multiarch: return back empty value for TARGETARCH follow-up after 91456ab5bbe7342b18067f3376a023239f9df57d docker buildx uses special variables, such as TARGETARCH and it shouldn't be overwritten. See this article for details https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/ Signed-off-by: f41gh7 --- app/victoria-logs/multiarch/Dockerfile | 2 +- app/victoria-metrics/multiarch/Dockerfile | 2 +- app/vmagent/multiarch/Dockerfile | 2 +- app/vmalert-tool/multiarch/Dockerfile | 2 +- app/vmalert/multiarch/Dockerfile | 2 +- app/vmauth/multiarch/Dockerfile | 2 +- app/vmbackup/multiarch/Dockerfile | 2 +- app/vmctl/multiarch/Dockerfile | 2 +- app/vmrestore/multiarch/Dockerfile | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/victoria-logs/multiarch/Dockerfile b/app/victoria-logs/multiarch/Dockerfile index 1ff166ea0c..f27828d81d 100644 --- a/app/victoria-logs/multiarch/Dockerfile +++ b/app/victoria-logs/multiarch/Dockerfile @@ -8,5 +8,5 @@ FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt EXPOSE 9428 ENTRYPOINT ["/victoria-logs-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY victoria-logs-linux-${TARGETARCH}-prod ./victoria-logs-prod diff --git a/app/victoria-metrics/multiarch/Dockerfile b/app/victoria-metrics/multiarch/Dockerfile index 8eb1e142b8..f161b83d03 100644 --- a/app/victoria-metrics/multiarch/Dockerfile +++ b/app/victoria-metrics/multiarch/Dockerfile @@ -8,5 +8,5 @@ FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt EXPOSE 8428 ENTRYPOINT ["/victoria-metrics-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY victoria-metrics-linux-${TARGETARCH}-prod ./victoria-metrics-prod diff --git a/app/vmagent/multiarch/Dockerfile b/app/vmagent/multiarch/Dockerfile index 9e8f7a3fd8..f6818075e1 100644 --- a/app/vmagent/multiarch/Dockerfile +++ b/app/vmagent/multiarch/Dockerfile @@ -8,5 +8,5 @@ FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt EXPOSE 8429 ENTRYPOINT ["/vmagent-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmagent-linux-${TARGETARCH}-prod ./vmagent-prod diff --git a/app/vmalert-tool/multiarch/Dockerfile b/app/vmalert-tool/multiarch/Dockerfile index e02dd73cf7..a0e17b2f37 100644 --- a/app/vmalert-tool/multiarch/Dockerfile +++ b/app/vmalert-tool/multiarch/Dockerfile @@ -8,5 +8,5 @@ FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt EXPOSE 8429 ENTRYPOINT ["/vmalert-tool-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmalert-tool-linux-${TARGETARCH}-prod ./vmalert-tool-prod diff --git a/app/vmalert/multiarch/Dockerfile b/app/vmalert/multiarch/Dockerfile index a376156b3e..7d0f2f3f19 100644 --- a/app/vmalert/multiarch/Dockerfile +++ b/app/vmalert/multiarch/Dockerfile @@ -8,5 +8,5 @@ FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt EXPOSE 8880 ENTRYPOINT ["/vmalert-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmalert-linux-${TARGETARCH}-prod ./vmalert-prod diff --git a/app/vmauth/multiarch/Dockerfile b/app/vmauth/multiarch/Dockerfile index 9dea6e320d..4b14f9a565 100644 --- a/app/vmauth/multiarch/Dockerfile +++ b/app/vmauth/multiarch/Dockerfile @@ -8,5 +8,5 @@ FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt EXPOSE 8427 ENTRYPOINT ["/vmauth-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmauth-linux-${TARGETARCH}-prod ./vmauth-prod diff --git a/app/vmbackup/multiarch/Dockerfile b/app/vmbackup/multiarch/Dockerfile index aac0da170d..8e66b9f2f9 100644 --- a/app/vmbackup/multiarch/Dockerfile +++ b/app/vmbackup/multiarch/Dockerfile @@ -7,5 +7,5 @@ RUN apk update && apk upgrade && apk --update --no-cache add ca-certificates FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt ENTRYPOINT ["/vmbackup-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmbackup-linux-${TARGETARCH}-prod ./vmbackup-prod diff --git a/app/vmctl/multiarch/Dockerfile b/app/vmctl/multiarch/Dockerfile index 48898ee378..6dd1a4c07c 100644 --- a/app/vmctl/multiarch/Dockerfile +++ b/app/vmctl/multiarch/Dockerfile @@ -7,5 +7,5 @@ RUN apk update && apk upgrade && apk --update --no-cache add ca-certificates FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt ENTRYPOINT ["/vmctl-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmctl-linux-${TARGETARCH}-prod ./vmctl-prod diff --git a/app/vmrestore/multiarch/Dockerfile b/app/vmrestore/multiarch/Dockerfile index a95249d10b..a1bf2399a5 100644 --- a/app/vmrestore/multiarch/Dockerfile +++ b/app/vmrestore/multiarch/Dockerfile @@ -7,5 +7,5 @@ RUN apk update && apk upgrade && apk --update --no-cache add ca-certificates FROM $root_image COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt ENTRYPOINT ["/vmrestore-prod"] -ARG TARGETARCH=non-existing +ARG TARGETARCH COPY vmrestore-linux-${TARGETARCH}-prod ./vmrestore-prod From 00e7d5add316d3463e4632509644bcfe9a5146ff Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 6 Sep 2024 22:40:53 +0200 Subject: [PATCH 012/128] lib/logstorage: substitute `|` operator with `or` operator at `math` pipe This is needed for avoiding confusion between the `|` operator at `math` pipe and `|` pipe delimiter. For example, the following query was parsed unexpectedly: * | math foo / bar | fields x as * | math foo / (bar | fields) as x Substituting `|` with `or` inside `math` pipe fixes this ambiguity. --- docs/VictoriaLogs/LogsQL.md | 2 +- lib/logstorage/pipe_math.go | 2 +- lib/logstorage/pipe_math_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index 974ba9c242..0bac580af4 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -1799,7 +1799,7 @@ The following mathematical operations are supported by `math` pipe: - `arg1 % arg2` - returns the remainder of the division of `arg1` by `arg2` - `arg1 ^ arg2` - returns the power of `arg1` by `arg2` - `arg1 & arg2` - returns bitwise `and` for `arg1` and `arg2`. It is expected that `arg1` and `arg2` are in the range `[0 .. 2^53-1]` -- `arg1 | arg2` - returns bitwise `or` for `arg1` and `arg2`. It is expected that `arg1` and `arg2` are in the range `[0 .. 2^53-1]` +- `arg1 or arg2` - returns bitwise `or` for `arg1` and `arg2`. It is expected that `arg1` and `arg2` are in the range `[0 .. 2^53-1]` - `arg1 xor arg2` - returns bitwise `xor` for `arg1` and `arg2`. It is expected that `arg1` and `arg2` are in the range `[0 .. 2^53-1]` - `arg1 default arg2` - returns `arg2` if `arg1` is non-[numeric](#numeric-values) or equals to `NaN` - `abs(arg)` - returns an absolute value for the given `arg` diff --git a/lib/logstorage/pipe_math.go b/lib/logstorage/pipe_math.go index a9b86f453c..7ce50bfb13 100644 --- a/lib/logstorage/pipe_math.go +++ b/lib/logstorage/pipe_math.go @@ -173,7 +173,7 @@ var mathBinaryOps = map[string]mathBinaryOp{ priority: 5, f: mathFuncXor, }, - "|": { + "or": { priority: 6, f: mathFuncOr, }, diff --git a/lib/logstorage/pipe_math_test.go b/lib/logstorage/pipe_math_test.go index 40b7dee50c..0425ff405e 100644 --- a/lib/logstorage/pipe_math_test.go +++ b/lib/logstorage/pipe_math_test.go @@ -56,7 +56,7 @@ func TestPipeMath(t *testing.T) { '123.45.67.89' + 1000 as ip, time - time % time_step as time_rounded, duration - duration % duration_step as duration_rounded, - (ip & ip_mask | 0x1234) xor 5678 as subnet + (ip & ip_mask or 0x1234) xor 5678 as subnet `, [][]Field{ { {"time_step", "30m"}, From 5261a8411946b2f7c5ca43f07779539503e55e51 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 6 Sep 2024 22:51:12 +0200 Subject: [PATCH 013/128] deployment: update Go builder from Go1.23.0 to Go1.23.1 See https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved --- app/vmui/Dockerfile-web | 2 +- deployment/docker/Makefile | 2 +- deployment/logs-benchmark/docker-compose-elk.yml | 2 +- deployment/logs-benchmark/docker-compose-loki.yml | 2 +- docs/changelog/CHANGELOG.md | 2 ++ go.mod | 2 +- 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/vmui/Dockerfile-web b/app/vmui/Dockerfile-web index c3afb20b2b..16e902e9fa 100644 --- a/app/vmui/Dockerfile-web +++ b/app/vmui/Dockerfile-web @@ -1,4 +1,4 @@ -FROM golang:1.23.0 AS build-web-stage +FROM golang:1.23.1 AS build-web-stage COPY build /build WORKDIR /build diff --git a/deployment/docker/Makefile b/deployment/docker/Makefile index 714211b702..a0a38b979e 100644 --- a/deployment/docker/Makefile +++ b/deployment/docker/Makefile @@ -6,7 +6,7 @@ ROOT_IMAGE ?= alpine:3.20.2 ROOT_IMAGE_SCRATCH ?= scratch CERTS_IMAGE := alpine:3.20.2 -GO_BUILDER_IMAGE := golang:1.23.0-alpine +GO_BUILDER_IMAGE := golang:1.23.1-alpine BUILDER_IMAGE := local/builder:2.0.0-$(shell echo $(GO_BUILDER_IMAGE) | tr :/ __)-1 BASE_IMAGE := local/base:1.1.4-$(shell echo $(ROOT_IMAGE) | tr :/ __)-$(shell echo $(CERTS_IMAGE) | tr :/ __) DOCKER ?= docker diff --git a/deployment/logs-benchmark/docker-compose-elk.yml b/deployment/logs-benchmark/docker-compose-elk.yml index 2c67796fbd..7cb6ab8799 100644 --- a/deployment/logs-benchmark/docker-compose-elk.yml +++ b/deployment/logs-benchmark/docker-compose-elk.yml @@ -18,7 +18,7 @@ services: - vlogs generator: - image: golang:1.23.0-alpine + image: golang:1.23.1-alpine restart: always working_dir: /go/src/app volumes: diff --git a/deployment/logs-benchmark/docker-compose-loki.yml b/deployment/logs-benchmark/docker-compose-loki.yml index a32e013e94..3cbe8ba001 100644 --- a/deployment/logs-benchmark/docker-compose-loki.yml +++ b/deployment/logs-benchmark/docker-compose-loki.yml @@ -2,7 +2,7 @@ version: '3' services: generator: - image: golang:1.23.0-alpine + image: golang:1.23.1-alpine restart: always working_dir: /go/src/app volumes: diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 7754d11ca5..2df6d30fa5 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -20,6 +20,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). **Update note 1: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** +* SECURITY: upgrade Go builder from Go1.23.0 to Go1.23.1. See the list of issues addressed in [Go1.23.1](https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved). + * FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): allow disabling `Bearer` prefix enforcement for authentication header. This is useful for cases when identity token is used instead of access token. diff --git a/go.mod b/go.mod index 744ea89442..24b6a1c9af 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/VictoriaMetrics/VictoriaMetrics -go 1.23.0 +go 1.23.1 require ( cloud.google.com/go/storage v1.43.0 From c9bb4ddeed6f6e8463bab9854b4565d7f788719a Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 6 Sep 2024 23:00:55 +0200 Subject: [PATCH 014/128] app/vlselect: add /select/logsql/stats_query endpoint, which is going to be used by vmalert Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6942 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6706 --- app/vlselect/logsql/logsql.go | 94 ++++++++++++- app/vlselect/logsql/stats_query_response.qtpl | 36 +++++ .../logsql/stats_query_response.qtpl.go | 133 ++++++++++++++++++ app/vlselect/main.go | 5 + app/vmselect/main.go | 35 ++--- .../prometheus/error_response.qtpl.go | 61 -------- app/vmselect/promql/eval.go | 17 +-- app/vmselect/promql/exec.go | 18 --- docs/VictoriaLogs/CHANGELOG.md | 1 + docs/VictoriaLogs/querying/README.md | 73 ++++++++++ lib/httpserver/prometheus.go | 47 +++++++ .../httpserver/prometheus_error_response.qtpl | 4 +- .../prometheus_error_response.qtpl.go | 61 ++++++++ lib/logstorage/parser.go | 98 ++++++++++++- lib/logstorage/parser_test.go | 91 ++++++++++++ lib/logstorage/pipe_stats.go | 2 +- 16 files changed, 655 insertions(+), 121 deletions(-) create mode 100644 app/vlselect/logsql/stats_query_response.qtpl create mode 100644 app/vlselect/logsql/stats_query_response.qtpl.go delete mode 100644 app/vmselect/prometheus/error_response.qtpl.go create mode 100644 lib/httpserver/prometheus.go rename app/vmselect/prometheus/error_response.qtpl => lib/httpserver/prometheus_error_response.qtpl (60%) create mode 100644 lib/httpserver/prometheus_error_response.qtpl.go diff --git a/app/vlselect/logsql/logsql.go b/app/vlselect/logsql/logsql.go index 03e886f70a..ad636b2393 100644 --- a/app/vlselect/logsql/logsql.go +++ b/app/vlselect/logsql/logsql.go @@ -5,6 +5,7 @@ import ( "fmt" "math" "net/http" + "slices" "sort" "strconv" "strings" @@ -380,6 +381,8 @@ func ProcessStreamsRequest(ctx context.Context, w http.ResponseWriter, r *http.R } // ProcessLiveTailRequest processes live tailing request to /select/logsq/tail +// +// See https://docs.victoriametrics.com/victorialogs/querying/#live-tailing func ProcessLiveTailRequest(ctx context.Context, w http.ResponseWriter, r *http.Request) { liveTailRequests.Inc() defer liveTailRequests.Dec() @@ -560,9 +563,82 @@ func (tp *tailProcessor) getTailRows() ([][]logstorage.Field, error) { return tailRows, nil } +// ProcessStatsQueryRequest handles /select/logsql/stats_query request. +// +// See https://docs.victoriametrics.com/victorialogs/querying/#querying-log-stats +func ProcessStatsQueryRequest(ctx context.Context, w http.ResponseWriter, r *http.Request) { + q, tenantIDs, err := parseCommonArgs(r) + if err != nil { + httpserver.SendPrometheusError(w, r, err) + return + } + + // Verify that q ends with `| stats` pipe + byFields, ok := q.GetStatsByFields() + if !ok { + err := fmt.Errorf("the query must end with '| stats ...'; got [%s]", q) + httpserver.SendPrometheusError(w, r, err) + return + } + + q.Optimize() + + var rows []statsRow + var rowsLock sync.Mutex + + timestamp := q.GetTimestamp() + writeBlock := func(_ uint, timestamps []int64, columns []logstorage.BlockColumn) { + clonedColumnNames := make([]string, len(columns)) + for i, c := range columns { + clonedColumnNames[i] = strings.Clone(c.Name) + } + for i := range timestamps { + labels := make([]logstorage.Field, 0, len(byFields)) + for j, c := range columns { + if slices.Contains(byFields, c.Name) { + labels = append(labels, logstorage.Field{ + Name: clonedColumnNames[j], + Value: strings.Clone(c.Values[i]), + }) + } + } + + for j, c := range columns { + if !slices.Contains(byFields, c.Name) { + r := statsRow{ + Name: clonedColumnNames[j], + Labels: labels, + Timestamp: timestamp, + Value: strings.Clone(c.Values[i]), + } + rowsLock.Lock() + rows = append(rows, r) + rowsLock.Unlock() + } + } + } + } + + if err := vlstorage.RunQuery(ctx, tenantIDs, q, writeBlock); err != nil { + err = fmt.Errorf("cannot execute query [%s]: %s", q, err) + httpserver.SendPrometheusError(w, r, err) + return + } + + w.Header().Set("Content-Type", "application/json") + WriteStatsQueryResponse(w, rows) +} + +type statsRow struct { + Name string + Labels []logstorage.Field + Timestamp int64 + Value string +} + // ProcessQueryRequest handles /select/logsql/query request. // -// See https://docs.victoriametrics.com/victorialogs/querying/#http-api +// See https://docs.victoriametrics.com/victorialogs/querying/#querying-logs func ProcessQueryRequest(ctx context.Context, w http.ResponseWriter, r *http.Request) { q, tenantIDs, err := parseCommonArgs(r) if err != nil { @@ -728,9 +804,23 @@ func parseCommonArgs(r *http.Request) (*logstorage.Query, []logstorage.TenantID, } tenantIDs := []logstorage.TenantID{tenantID} + // Parse optional time arg + timestamp, okTime, err := getTimeNsec(r, "time") + if err != nil { + return nil, nil, err + } + if !okTime { + // If time arg is missing, then evaluate query at the current timestamp + timestamp = time.Now().UnixNano() + } + + // decrease timestamp by one nanosecond in order to avoid capturing logs belonging + // to the first nanosecond at the next period of time (month, week, day, hour, etc.) + timestamp-- + // Parse query qStr := r.FormValue("query") - q, err := logstorage.ParseQuery(qStr) + q, err := logstorage.ParseQueryAtTimestamp(qStr, timestamp) if err != nil { return nil, nil, fmt.Errorf("cannot parse query [%s]: %s", qStr, err) } diff --git a/app/vlselect/logsql/stats_query_response.qtpl b/app/vlselect/logsql/stats_query_response.qtpl new file mode 100644 index 0000000000..3d818546bf --- /dev/null +++ b/app/vlselect/logsql/stats_query_response.qtpl @@ -0,0 +1,36 @@ +{% stripspace %} + +// StatsQueryResponse generates response for /select/logsql/stats_query +{% func StatsQueryResponse(rows []statsRow) %} +{ + "status":"success", + "data":{ + "resultType":"vector", + "result":[ + {% if len(rows) > 0 %} + {%= formatStatsRow(&rows[0]) %} + {% code rows = rows[1:] %} + {% for i := range rows %} + ,{%= formatStatsRow(&rows[i]) %} + {% endfor %} + {% endif %} + ] + } +} +{% endfunc %} + +{% func formatStatsRow(r *statsRow) %} +{ + "metric":{ + "__name__":{%q= r.Name %} + {% if len(r.Labels) > 0 %} + {% for _, label := range r.Labels %} + ,{%q= label.Name %}:{%q= label.Value %} + {% endfor %} + {% endif %} + }, + "value":[{%f= float64(r.Timestamp)/1e9 %},{%q= r.Value %}] +} +{% endfunc %} + +{% endstripspace %} diff --git a/app/vlselect/logsql/stats_query_response.qtpl.go b/app/vlselect/logsql/stats_query_response.qtpl.go new file mode 100644 index 0000000000..2548a18c39 --- /dev/null +++ b/app/vlselect/logsql/stats_query_response.qtpl.go @@ -0,0 +1,133 @@ +// Code generated by qtc from "stats_query_response.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +// StatsQueryResponse generates response for /select/logsql/stats_query + +//line app/vlselect/logsql/stats_query_response.qtpl:4 +package logsql + +//line app/vlselect/logsql/stats_query_response.qtpl:4 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line app/vlselect/logsql/stats_query_response.qtpl:4 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line app/vlselect/logsql/stats_query_response.qtpl:4 +func StreamStatsQueryResponse(qw422016 *qt422016.Writer, rows []statsRow) { +//line app/vlselect/logsql/stats_query_response.qtpl:4 + qw422016.N().S(`{"status":"success","data":{"resultType":"vector","result":[`) +//line app/vlselect/logsql/stats_query_response.qtpl:10 + if len(rows) > 0 { +//line app/vlselect/logsql/stats_query_response.qtpl:11 + streamformatStatsRow(qw422016, &rows[0]) +//line app/vlselect/logsql/stats_query_response.qtpl:12 + rows = rows[1:] + +//line app/vlselect/logsql/stats_query_response.qtpl:13 + for i := range rows { +//line app/vlselect/logsql/stats_query_response.qtpl:13 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_response.qtpl:14 + streamformatStatsRow(qw422016, &rows[i]) +//line app/vlselect/logsql/stats_query_response.qtpl:15 + } +//line app/vlselect/logsql/stats_query_response.qtpl:16 + } +//line app/vlselect/logsql/stats_query_response.qtpl:16 + qw422016.N().S(`]}}`) +//line app/vlselect/logsql/stats_query_response.qtpl:20 +} + +//line app/vlselect/logsql/stats_query_response.qtpl:20 +func WriteStatsQueryResponse(qq422016 qtio422016.Writer, rows []statsRow) { +//line app/vlselect/logsql/stats_query_response.qtpl:20 + qw422016 := qt422016.AcquireWriter(qq422016) +//line app/vlselect/logsql/stats_query_response.qtpl:20 + StreamStatsQueryResponse(qw422016, rows) +//line app/vlselect/logsql/stats_query_response.qtpl:20 + qt422016.ReleaseWriter(qw422016) +//line app/vlselect/logsql/stats_query_response.qtpl:20 +} + +//line app/vlselect/logsql/stats_query_response.qtpl:20 +func StatsQueryResponse(rows []statsRow) string { +//line app/vlselect/logsql/stats_query_response.qtpl:20 + qb422016 := qt422016.AcquireByteBuffer() +//line app/vlselect/logsql/stats_query_response.qtpl:20 + WriteStatsQueryResponse(qb422016, rows) +//line app/vlselect/logsql/stats_query_response.qtpl:20 + qs422016 := string(qb422016.B) +//line app/vlselect/logsql/stats_query_response.qtpl:20 + qt422016.ReleaseByteBuffer(qb422016) +//line app/vlselect/logsql/stats_query_response.qtpl:20 + return qs422016 +//line app/vlselect/logsql/stats_query_response.qtpl:20 +} + +//line app/vlselect/logsql/stats_query_response.qtpl:22 +func streamformatStatsRow(qw422016 *qt422016.Writer, r *statsRow) { +//line app/vlselect/logsql/stats_query_response.qtpl:22 + qw422016.N().S(`{"metric":{"__name__":`) +//line app/vlselect/logsql/stats_query_response.qtpl:25 + qw422016.N().Q(r.Name) +//line app/vlselect/logsql/stats_query_response.qtpl:26 + if len(r.Labels) > 0 { +//line app/vlselect/logsql/stats_query_response.qtpl:27 + for _, label := range r.Labels { +//line app/vlselect/logsql/stats_query_response.qtpl:27 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_response.qtpl:28 + qw422016.N().Q(label.Name) +//line app/vlselect/logsql/stats_query_response.qtpl:28 + qw422016.N().S(`:`) +//line app/vlselect/logsql/stats_query_response.qtpl:28 + qw422016.N().Q(label.Value) +//line app/vlselect/logsql/stats_query_response.qtpl:29 + } +//line app/vlselect/logsql/stats_query_response.qtpl:30 + } +//line app/vlselect/logsql/stats_query_response.qtpl:30 + qw422016.N().S(`},"value":[`) +//line app/vlselect/logsql/stats_query_response.qtpl:32 + qw422016.N().F(float64(r.Timestamp) / 1e9) +//line app/vlselect/logsql/stats_query_response.qtpl:32 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_response.qtpl:32 + qw422016.N().Q(r.Value) +//line app/vlselect/logsql/stats_query_response.qtpl:32 + qw422016.N().S(`]}`) +//line app/vlselect/logsql/stats_query_response.qtpl:34 +} + +//line app/vlselect/logsql/stats_query_response.qtpl:34 +func writeformatStatsRow(qq422016 qtio422016.Writer, r *statsRow) { +//line app/vlselect/logsql/stats_query_response.qtpl:34 + qw422016 := qt422016.AcquireWriter(qq422016) +//line app/vlselect/logsql/stats_query_response.qtpl:34 + streamformatStatsRow(qw422016, r) +//line app/vlselect/logsql/stats_query_response.qtpl:34 + qt422016.ReleaseWriter(qw422016) +//line app/vlselect/logsql/stats_query_response.qtpl:34 +} + +//line app/vlselect/logsql/stats_query_response.qtpl:34 +func formatStatsRow(r *statsRow) string { +//line app/vlselect/logsql/stats_query_response.qtpl:34 + qb422016 := qt422016.AcquireByteBuffer() +//line app/vlselect/logsql/stats_query_response.qtpl:34 + writeformatStatsRow(qb422016, r) +//line app/vlselect/logsql/stats_query_response.qtpl:34 + qs422016 := string(qb422016.B) +//line app/vlselect/logsql/stats_query_response.qtpl:34 + qt422016.ReleaseByteBuffer(qb422016) +//line app/vlselect/logsql/stats_query_response.qtpl:34 + return qs422016 +//line app/vlselect/logsql/stats_query_response.qtpl:34 +} diff --git a/app/vlselect/main.go b/app/vlselect/main.go index c91480682d..9033f4040a 100644 --- a/app/vlselect/main.go +++ b/app/vlselect/main.go @@ -193,6 +193,10 @@ func processSelectRequest(ctx context.Context, w http.ResponseWriter, r *http.Re logsqlQueryRequests.Inc() logsql.ProcessQueryRequest(ctx, w, r) return true + case "/select/logsql/stats_query": + logsqlStatsQueryRequests.Inc() + logsql.ProcessStatsQueryRequest(ctx, w, r) + return true case "/select/logsql/stream_field_names": logsqlStreamFieldNamesRequests.Inc() logsql.ProcessStreamFieldNamesRequest(ctx, w, r) @@ -232,6 +236,7 @@ var ( logsqlFieldValuesRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/field_values"}`) logsqlHitsRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/hits"}`) logsqlQueryRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/query"}`) + logsqlStatsQueryRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stats_query"}`) logsqlStreamFieldNamesRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stream_field_names"}`) logsqlStreamFieldValuesRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stream_field_values"}`) logsqlStreamIDsRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stream_ids"}`) diff --git a/app/vmselect/main.go b/app/vmselect/main.go index dbe57eb8e5..83fcbdda92 100644 --- a/app/vmselect/main.go +++ b/app/vmselect/main.go @@ -2,7 +2,6 @@ package vmselect import ( "embed" - "errors" "flag" "fmt" "net/http" @@ -187,7 +186,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.LabelValuesHandler(qt, startTime, labelName, w, r); err != nil { labelValuesErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -210,7 +209,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.QueryHandler(qt, startTime, w, r); err != nil { queryErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -219,7 +218,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.QueryRangeHandler(qt, startTime, w, r); err != nil { queryRangeErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -228,7 +227,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.SeriesHandler(qt, startTime, w, r); err != nil { seriesErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -237,7 +236,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.SeriesCountHandler(startTime, w, r); err != nil { seriesCountErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -246,7 +245,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.LabelsHandler(qt, startTime, w, r); err != nil { labelsErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -255,7 +254,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.EnableCORS(w, r) if err := prometheus.TSDBStatusHandler(qt, startTime, w, r); err != nil { statusTSDBErrors.Inc() - sendPrometheusError(w, r, err) + httpserver.SendPrometheusError(w, r, err) return true } return true @@ -498,7 +497,7 @@ func handleStaticAndSimpleRequests(w http.ResponseWriter, r *http.Request, path httpserver.EnableCORS(w, r) if err := prometheus.QueryStatsHandler(w, r); err != nil { topQueriesErrors.Inc() - sendPrometheusError(w, r, fmt.Errorf("cannot query status endpoint: %w", err)) + httpserver.SendPrometheusError(w, r, fmt.Errorf("cannot query status endpoint: %w", err)) return true } return true @@ -575,24 +574,6 @@ func isGraphiteTagsPath(path string) bool { } } -func sendPrometheusError(w http.ResponseWriter, r *http.Request, err error) { - logger.WarnfSkipframes(1, "error in %q: %s", httpserver.GetRequestURI(r), err) - - w.Header().Set("Content-Type", "application/json") - statusCode := http.StatusUnprocessableEntity - var esc *httpserver.ErrorWithStatusCode - if errors.As(err, &esc) { - statusCode = esc.StatusCode - } - w.WriteHeader(statusCode) - - var ure *promql.UserReadableError - if errors.As(err, &ure) { - err = ure - } - prometheus.WriteErrorResponse(w, statusCode, err) -} - var ( requestDuration = metrics.NewHistogram(`vmselect_request_duration_seconds`) diff --git a/app/vmselect/prometheus/error_response.qtpl.go b/app/vmselect/prometheus/error_response.qtpl.go deleted file mode 100644 index c6ecb80c66..0000000000 --- a/app/vmselect/prometheus/error_response.qtpl.go +++ /dev/null @@ -1,61 +0,0 @@ -// Code generated by qtc from "error_response.qtpl". DO NOT EDIT. -// See https://github.com/valyala/quicktemplate for details. - -// ErrorResponse generates error response for /api/v1/query.See https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview - -//line app/vmselect/prometheus/error_response.qtpl:4 -package prometheus - -//line app/vmselect/prometheus/error_response.qtpl:4 -import ( - qtio422016 "io" - - qt422016 "github.com/valyala/quicktemplate" -) - -//line app/vmselect/prometheus/error_response.qtpl:4 -var ( - _ = qtio422016.Copy - _ = qt422016.AcquireByteBuffer -) - -//line app/vmselect/prometheus/error_response.qtpl:4 -func StreamErrorResponse(qw422016 *qt422016.Writer, statusCode int, err error) { -//line app/vmselect/prometheus/error_response.qtpl:4 - qw422016.N().S(`{"status":"error","errorType":"`) -//line app/vmselect/prometheus/error_response.qtpl:7 - qw422016.N().D(statusCode) -//line app/vmselect/prometheus/error_response.qtpl:7 - qw422016.N().S(`","error":`) -//line app/vmselect/prometheus/error_response.qtpl:8 - qw422016.N().Q(err.Error()) -//line app/vmselect/prometheus/error_response.qtpl:8 - qw422016.N().S(`}`) -//line app/vmselect/prometheus/error_response.qtpl:10 -} - -//line app/vmselect/prometheus/error_response.qtpl:10 -func WriteErrorResponse(qq422016 qtio422016.Writer, statusCode int, err error) { -//line app/vmselect/prometheus/error_response.qtpl:10 - qw422016 := qt422016.AcquireWriter(qq422016) -//line app/vmselect/prometheus/error_response.qtpl:10 - StreamErrorResponse(qw422016, statusCode, err) -//line app/vmselect/prometheus/error_response.qtpl:10 - qt422016.ReleaseWriter(qw422016) -//line app/vmselect/prometheus/error_response.qtpl:10 -} - -//line app/vmselect/prometheus/error_response.qtpl:10 -func ErrorResponse(statusCode int, err error) string { -//line app/vmselect/prometheus/error_response.qtpl:10 - qb422016 := qt422016.AcquireByteBuffer() -//line app/vmselect/prometheus/error_response.qtpl:10 - WriteErrorResponse(qb422016, statusCode, err) -//line app/vmselect/prometheus/error_response.qtpl:10 - qs422016 := string(qb422016.B) -//line app/vmselect/prometheus/error_response.qtpl:10 - qt422016.ReleaseByteBuffer(qb422016) -//line app/vmselect/prometheus/error_response.qtpl:10 - return qs422016 -//line app/vmselect/prometheus/error_response.qtpl:10 -} diff --git a/app/vmselect/promql/eval.go b/app/vmselect/promql/eval.go index 5ecf21920e..0faac1f5f0 100644 --- a/app/vmselect/promql/eval.go +++ b/app/vmselect/promql/eval.go @@ -19,6 +19,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal" "github.com/VictoriaMetrics/VictoriaMetrics/lib/fasttime" "github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" "github.com/VictoriaMetrics/VictoriaMetrics/lib/memory" "github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer" @@ -354,7 +355,7 @@ func evalExprInternal(qt *querytracer.Tracer, ec *EvalConfig, e metricsql.Expr) func evalTransformFunc(qt *querytracer.Tracer, ec *EvalConfig, fe *metricsql.FuncExpr) ([]*timeseries, error) { tf := getTransformFunc(fe.Name) if tf == nil { - return nil, &UserReadableError{ + return nil, &httpserver.UserReadableError{ Err: fmt.Errorf(`unknown func %q`, fe.Name), } } @@ -376,7 +377,7 @@ func evalTransformFunc(qt *querytracer.Tracer, ec *EvalConfig, fe *metricsql.Fun } rv, err := tf(tfa) if err != nil { - return nil, &UserReadableError{ + return nil, &httpserver.UserReadableError{ Err: fmt.Errorf(`cannot evaluate %q: %w`, fe.AppendString(nil), err), } } @@ -407,7 +408,7 @@ func evalAggrFunc(qt *querytracer.Tracer, ec *EvalConfig, ae *metricsql.AggrFunc } af := getAggrFunc(ae.Name) if af == nil { - return nil, &UserReadableError{ + return nil, &httpserver.UserReadableError{ Err: fmt.Errorf(`unknown func %q`, ae.Name), } } @@ -802,12 +803,12 @@ func evalRollupFunc(qt *querytracer.Tracer, ec *EvalConfig, funcName string, rf } tssAt, err := evalExpr(qt, ec, re.At) if err != nil { - return nil, &UserReadableError{ + return nil, &httpserver.UserReadableError{ Err: fmt.Errorf("cannot evaluate `@` modifier: %w", err), } } if len(tssAt) != 1 { - return nil, &UserReadableError{ + return nil, &httpserver.UserReadableError{ Err: fmt.Errorf("`@` modifier must return a single series; it returns %d series instead", len(tssAt)), } } @@ -869,7 +870,7 @@ func evalRollupFuncWithoutAt(qt *querytracer.Tracer, ec *EvalConfig, funcName st rvs, err = evalRollupFuncWithSubquery(qt, ecNew, funcName, rf, expr, re) } if err != nil { - return nil, &UserReadableError{ + return nil, &httpserver.UserReadableError{ Err: err, } } @@ -1601,7 +1602,7 @@ func evalRollupFuncWithMetricExpr(qt *querytracer.Tracer, ec *EvalConfig, funcNa if ec.Start == ec.End { rvs, err := evalInstantRollup(qt, ec, funcName, rf, expr, me, iafc, window) if err != nil { - err = &UserReadableError{ + err = &httpserver.UserReadableError{ Err: err, } return nil, err @@ -1612,7 +1613,7 @@ func evalRollupFuncWithMetricExpr(qt *querytracer.Tracer, ec *EvalConfig, funcNa evalWithConfig := func(ec *EvalConfig) ([]*timeseries, error) { tss, err := evalRollupFuncNoCache(qt, ec, funcName, rf, expr, me, iafc, window, pointsPerSeries) if err != nil { - err = &UserReadableError{ + err = &httpserver.UserReadableError{ Err: err, } return nil, err diff --git a/app/vmselect/promql/exec.go b/app/vmselect/promql/exec.go index 5f0d208e82..5f2a798e06 100644 --- a/app/vmselect/promql/exec.go +++ b/app/vmselect/promql/exec.go @@ -35,24 +35,6 @@ var ( "Such conversion can be disabled using -search.disableImplicitConversion.") ) -// UserReadableError is a type of error which supposed to be returned to the user without additional context. -type UserReadableError struct { - // Err is the error which needs to be returned to the user. - Err error -} - -// Unwrap returns ure.Err. -// -// This is used by standard errors package. See https://golang.org/pkg/errors -func (ure *UserReadableError) Unwrap() error { - return ure.Err -} - -// Error satisfies Error interface -func (ure *UserReadableError) Error() string { - return ure.Err.Error() -} - // Exec executes q for the given ec. func Exec(qt *querytracer.Tracer, ec *EvalConfig, q string, isFirstPointOnly bool) ([]netstorage.Result, error) { if querystats.Enabled() { diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 2af3859dbc..2ae28e32cd 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* FEATURE: add [`/select/logsql/stats_query` HTTP API](https://docs.victoriametrics.com/victorialogs/querying/#querying-log-stats), which is going to be used by [vmalert](https://docs.victoriametrics.com/vmalert/) for executing alerting and recording rules against VictoriaLogs. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6942) for details. * FEATURE: optimize [multi-exact queries](https://docs.victoriametrics.com/victorialogs/logsql/#multi-exact-filter) with many phrases to search. For example, `ip:in(path:="/foo/bar" | keep ip)` when there are many unique values for `ip` field among log entries with `/foo/bar` path. * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add support for displaying the top 5 log streams in the hits graph. The remaining log streams are grouped into an "other" label. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6545). * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add the ability to customize the graph display with options for bar, line, stepped line, and points. diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index 3752ad9be7..a10f5768f4 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -13,6 +13,7 @@ VictoriaLogs provides the following HTTP endpoints: - [`/select/logsql/query`](#querying-logs) for querying logs. - [`/select/logsql/tail`](#live-tailing) for live tailing of query results. - [`/select/logsql/hits`](#querying-hits-stats) for querying log hits stats over the given time range. +- [`/select/logsql/stats_query`](#querying-log-stats) for querying log stats at the given time. - [`/select/logsql/stream_ids`](#querying-stream_ids) for querying `_stream_id` values of [log streams](#https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). - [`/select/logsql/streams`](#querying-streams) for querying [log streams](#https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). - [`/select/logsql/stream_field_names`](#querying-stream-field-names) for querying [log stream](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) field names. @@ -105,6 +106,7 @@ See also: - [Live tailing](#live-tailing) - [Querying hits stats](#querying-hits-stats) +- [Querying log stats](#querying-log-stats) - [Querying streams](#querying-streams) - [Querying stream field names](#querying-stream-field-names) - [Querying stream field values](#querying-stream-field-values) @@ -273,9 +275,80 @@ curl http://localhost:9428/select/logsql/hits -H 'AccountID: 12' -H 'ProjectID: See also: - [Querying logs](#querying-logs) +- [Querying log stats](#querying-log-stats) - [Querying streams](#querying-streams) - [HTTP API](#http-api) +### Querying log stats + +VictoriaLogs provides `/select/logsql/stats_query?query=&time=` HTTP endpoint, which returns log stats +for the given [`query`](https://docs.victoriametrics.com/victorialogs/logsql/) at the given timestamp `t` +in the format compatible with [Prometheus querying API](https://prometheus.io/docs/prometheus/latest/querying/api/#instant-queries). + +The `` arg can contain values in [any supported format](https://docs.victoriametrics.com/#timestamp-formats). +If `` is missing, then it equals to the current time. + +The `` must contain [`stats` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stats-pipe). The calculated stats is converted into metrics +with labels enumerated in `by(...)` clause of the `| stats by(...)` pipe. + +For example, the following command returns the number of logs per each `level` [field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) +across logs over `2024-01-01` day by UTC: + +```sh +curl http://localhost:9428/select/logsql/stats_query -d 'query=_time:1d | stats by (level) count(*)' -d 'time=2024-01-02' +``` + +Below is an example JSON output returned from this endpoint: + +```json +{ + "status": "success", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "__name__": "count(*)", + "level": "info" + }, + "value": [ + 1704153600, + "20395342" + ] + }, + { + "metric": { + "__name__": "count(*)", + "level": "warn" + }, + "value": [ + 1704153600, + "1239222" + ] + }, + { + "metric": { + "__name__": "count(*)", + "level": "error" + }, + "value": [ + 1704153600, + "832" + ] + }, + ] + } +} +``` + +The `/select/logsql/stats_query` API is useful for generating Prometheus-compatible alerts and calculating recording rules results. + +See also: + +- [Querying logs](#querying-logs) +- [Querying hits stats](#querying-hits-stats) +- [HTTP API](#http-api) + ### Querying stream_ids VictoriaLogs provides `/select/logsql/stream_ids?query=&start=&end=` HTTP endpoint, which returns `_stream_id` values diff --git a/lib/httpserver/prometheus.go b/lib/httpserver/prometheus.go new file mode 100644 index 0000000000..08c5e32afe --- /dev/null +++ b/lib/httpserver/prometheus.go @@ -0,0 +1,47 @@ +package httpserver + +import ( + "errors" + "net/http" + + "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" +) + +// SendPrometheusError sends err to w in Prometheus querying API response format. +// +// See https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview for more details +func SendPrometheusError(w http.ResponseWriter, r *http.Request, err error) { + logger.WarnfSkipframes(1, "error in %q: %s", GetRequestURI(r), err) + + w.Header().Set("Content-Type", "application/json") + statusCode := http.StatusUnprocessableEntity + var esc *ErrorWithStatusCode + if errors.As(err, &esc) { + statusCode = esc.StatusCode + } + w.WriteHeader(statusCode) + + var ure *UserReadableError + if errors.As(err, &ure) { + err = ure + } + WritePrometheusErrorResponse(w, statusCode, err) +} + +// UserReadableError is a type of error which supposed to be returned to the user without additional context. +type UserReadableError struct { + // Err is the error which needs to be returned to the user. + Err error +} + +// Unwrap returns ure.Err. +// +// This is used by standard errors package. See https://golang.org/pkg/errors +func (ure *UserReadableError) Unwrap() error { + return ure.Err +} + +// Error satisfies Error interface +func (ure *UserReadableError) Error() string { + return ure.Err.Error() +} diff --git a/app/vmselect/prometheus/error_response.qtpl b/lib/httpserver/prometheus_error_response.qtpl similarity index 60% rename from app/vmselect/prometheus/error_response.qtpl rename to lib/httpserver/prometheus_error_response.qtpl index c56facf9d3..241c7c6abd 100644 --- a/app/vmselect/prometheus/error_response.qtpl +++ b/lib/httpserver/prometheus_error_response.qtpl @@ -1,7 +1,7 @@ {% stripspace %} -ErrorResponse generates error response for /api/v1/query. +PrometheusErrorResponse generates error response for Prometheus Querying API. See https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview -{% func ErrorResponse(statusCode int, err error) %} +{% func PrometheusErrorResponse(statusCode int, err error) %} { "status":"error", "errorType":"{%d statusCode %}", diff --git a/lib/httpserver/prometheus_error_response.qtpl.go b/lib/httpserver/prometheus_error_response.qtpl.go new file mode 100644 index 0000000000..3756d7747d --- /dev/null +++ b/lib/httpserver/prometheus_error_response.qtpl.go @@ -0,0 +1,61 @@ +// Code generated by qtc from "prometheus_error_response.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +// PrometheusErrorResponse generates error response for Prometheus Querying API.See https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview + +//line lib/httpserver/prometheus_error_response.qtpl:4 +package httpserver + +//line lib/httpserver/prometheus_error_response.qtpl:4 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line lib/httpserver/prometheus_error_response.qtpl:4 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line lib/httpserver/prometheus_error_response.qtpl:4 +func StreamPrometheusErrorResponse(qw422016 *qt422016.Writer, statusCode int, err error) { +//line lib/httpserver/prometheus_error_response.qtpl:4 + qw422016.N().S(`{"status":"error","errorType":"`) +//line lib/httpserver/prometheus_error_response.qtpl:7 + qw422016.N().D(statusCode) +//line lib/httpserver/prometheus_error_response.qtpl:7 + qw422016.N().S(`","error":`) +//line lib/httpserver/prometheus_error_response.qtpl:8 + qw422016.N().Q(err.Error()) +//line lib/httpserver/prometheus_error_response.qtpl:8 + qw422016.N().S(`}`) +//line lib/httpserver/prometheus_error_response.qtpl:10 +} + +//line lib/httpserver/prometheus_error_response.qtpl:10 +func WritePrometheusErrorResponse(qq422016 qtio422016.Writer, statusCode int, err error) { +//line lib/httpserver/prometheus_error_response.qtpl:10 + qw422016 := qt422016.AcquireWriter(qq422016) +//line lib/httpserver/prometheus_error_response.qtpl:10 + StreamPrometheusErrorResponse(qw422016, statusCode, err) +//line lib/httpserver/prometheus_error_response.qtpl:10 + qt422016.ReleaseWriter(qw422016) +//line lib/httpserver/prometheus_error_response.qtpl:10 +} + +//line lib/httpserver/prometheus_error_response.qtpl:10 +func PrometheusErrorResponse(statusCode int, err error) string { +//line lib/httpserver/prometheus_error_response.qtpl:10 + qb422016 := qt422016.AcquireByteBuffer() +//line lib/httpserver/prometheus_error_response.qtpl:10 + WritePrometheusErrorResponse(qb422016, statusCode, err) +//line lib/httpserver/prometheus_error_response.qtpl:10 + qs422016 := string(qb422016.B) +//line lib/httpserver/prometheus_error_response.qtpl:10 + qt422016.ReleaseByteBuffer(qb422016) +//line lib/httpserver/prometheus_error_response.qtpl:10 + return qs422016 +//line lib/httpserver/prometheus_error_response.qtpl:10 +} diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 131e5eef62..a95a34e1fb 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -3,6 +3,7 @@ package logstorage import ( "fmt" "math" + "slices" "strconv" "strings" "time" @@ -57,10 +58,15 @@ func (lex *lexer) restoreState(ls *lexerState) { // // The lex.token points to the first token in s. func newLexer(s string) *lexer { + timestamp := time.Now().UnixNano() + return newLexerAtTimestamp(s, timestamp) +} + +func newLexerAtTimestamp(s string, timestamp int64) *lexer { lex := &lexer{ s: s, sOrig: s, - currentTimestamp: time.Now().UnixNano(), + currentTimestamp: timestamp, } lex.nextToken() return lex @@ -221,6 +227,9 @@ type Query struct { f filter pipes []pipe + + // timestamp is the timestamp context used for parsing the query. + timestamp int64 } // String returns string representation for q. @@ -445,6 +454,77 @@ func (q *Query) Optimize() { } } +// GetStatsByFields returns `| stats by (...)` fields from q if q contains safe `| stats ...` pipe in the end. +// +// False is returned if q doesn't contain safe `| stats ...` pipe. +func (q *Query) GetStatsByFields() ([]string, bool) { + pipes := q.pipes + + idx := getLastPipeStatsIdx(pipes) + if idx < 0 { + return nil, false + } + + // extract by(...) field names from stats pipe + byFields := pipes[idx].(*pipeStats).byFields + fields := make([]string, len(byFields)) + for i, f := range byFields { + fields[i] = f.name + } + + // verify that all the pipes after the idx do not add new fields + for i := idx + 1; i < len(pipes); i++ { + p := pipes[i] + switch t := p.(type) { + case *pipeSort, *pipeOffset, *pipeLimit, *pipeFilter: + // These pipes do not change the set of fields. + case *pipeMath: + // Allow pipeMath, since it adds additional metrics to the given set of fields. + case *pipeFields: + // `| fields ...` pipe must contain all the by(...) fields, otherwise it breaks output. + for _, f := range fields { + if !slices.Contains(t.fields, f) { + return nil, false + } + } + case *pipeDelete: + // Disallow deleting by(...) fields, since this breaks output. + for _, f := range t.fields { + if slices.Contains(fields, f) { + return nil, false + } + } + case *pipeCopy: + // Disallow copying by(...) fields, since this breaks output. + for _, f := range t.srcFields { + if slices.Contains(fields, f) { + return nil, false + } + } + case *pipeRename: + // Update by(...) fields with dst fields + for i, f := range t.srcFields { + if n := slices.Index(fields, f); n >= 0 { + fields[n] = t.dstFields[i] + } + } + default: + return nil, false + } + } + + return fields, true +} + +func getLastPipeStatsIdx(pipes []pipe) int { + for i := len(pipes) - 1; i >= 0; i-- { + if _, ok := pipes[i].(*pipeStats); ok { + return i + } + } + return -1 +} + func removeStarFilters(f filter) filter { visitFunc := func(f filter) bool { fp, ok := f.(*filterPrefix) @@ -584,7 +664,15 @@ func (q *Query) getNeededColumns() ([]string, []string) { // ParseQuery parses s. func ParseQuery(s string) (*Query, error) { - lex := newLexer(s) + timestamp := time.Now().UnixNano() + return ParseQueryAtTimestamp(s, timestamp) +} + +// ParseQueryAtTimestamp parses s in the context of the given timestamp. +// +// E.g. _time:duration filters are ajusted according to the provided timestamp as _time:[timestamp-duration, duration]. +func ParseQueryAtTimestamp(s string, timestamp int64) (*Query, error) { + lex := newLexerAtTimestamp(s, timestamp) // Verify the first token doesn't match pipe names. firstToken := strings.ToLower(lex.rawToken) @@ -600,9 +688,15 @@ func ParseQuery(s string) (*Query, error) { if !lex.isEnd() { return nil, fmt.Errorf("unexpected unparsed tail after [%s]; context: [%s]; tail: [%s]", q, lex.context(), lex.s) } + q.timestamp = timestamp return q, nil } +// GetTimestamp returns timestamp context for the given q, which was passed to ParseQueryAtTimestamp(). +func (q *Query) GetTimestamp() int64 { + return q.timestamp +} + func parseQuery(lex *lexer) (*Query, error) { f, err := parseFilter(lex) if err != nil { diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index 6956ba6e7d..4cbf18cefc 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -2100,3 +2100,94 @@ func TestQueryDropAllPipes(t *testing.T) { f(`foo or bar and baz | top 5 by (x)`, `foo or bar baz`) f(`foo | filter bar:baz | stats by (x) min(y)`, `foo bar:baz`) } + +func TestQueryGetStatsByFields_Success(t *testing.T) { + f := func(qStr string, fieldsExpected []string) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("cannot parse [%s]: %s", qStr, err) + } + fields, ok := q.GetStatsByFields() + if !ok { + t.Fatalf("cannot obtain byFields from the query [%s]", qStr) + } + if !reflect.DeepEqual(fields, fieldsExpected) { + t.Fatalf("unexpected byFields;\ngot\n%q\nwant\n%q", fields, fieldsExpected) + } + } + + f(`* | stats count()`, []string{}) + f(`* | count()`, []string{}) + f(`* | by (foo) count(), count_uniq(bar)`, []string{"foo"}) + f(`* | stats by (a, b, cd) min(foo), max(bar)`, []string{"a", "b", "cd"}) + + // multiple pipes before stats is ok + f(`foo | extract "ip=," | stats by (host) count_uniq(ip)`, []string{"host"}) + + // sort, offset and limit pipes are allowed after stats + f(`foo | stats by (x, y) count() rows | sort by (rows) desc | offset 5 | limit 10`, []string{"x", "y"}) + + // filter pipe is allowed after stats + f(`foo | stats by (x, y) count() rows | filter rows:>100`, []string{"x", "y"}) + + // math pipe is allowed after stats + f(`foo | stats by (x) count() total, count() if (error) errors | math errors / total`, []string{"x"}) + + // keep containing all the by(...) fields + f(`foo | stats by (x) count() total | keep x, y`, []string{"x"}) + + // drop which doesn't contain by(...) fields + f(`foo | stats by (x) count() total | drop y`, []string{"x"}) + + // copy which doesn't contain by(...) fields + f(`foo | stats by (x) count() total | copy total abc`, []string{"x"}) + + // mv by(...) fields + f(`foo | stats by (x) count() total | mv x y`, []string{"y"}) +} + +func TestQueryGetStatsByFields_Failure(t *testing.T) { + f := func(qStr string) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("cannot parse [%s]: %s", qStr, err) + } + fields, ok := q.GetStatsByFields() + if ok { + t.Fatalf("expecting failure to get byFields for the query [%s]", qStr) + } + if fields != nil { + t.Fatalf("expectig nil fields; got %q", fields) + } + } + + f(`*`) + f(`foo bar`) + f(`foo | by (a, b) count() | copy a b`) + f(`foo | by (a, b) count() | delete a`) + f(`foo | count() | drop_empty_fields`) + f(`foo | count() | extract "foobaz"`) + f(`foo | count() | extract_regexp "(?P([0-9]+[.]){3}[0-9]+)"`) + f(`foo | count() | field_names`) + f(`foo | count() | field_values abc`) + f(`foo | by (x) count() | fields a, b`) + f(`foo | count() | format "foobaz"`) + f(`foo | count() | pack_json`) + f(`foo | count() | pack_logfmt`) + f(`foo | rename x y`) + f(`foo | count() | replace ("foo", "bar")`) + f(`foo | count() | replace_regexp ("foo.+bar", "baz")`) + f(`foo | count() | stream_context after 10`) + f(`foo | count() | top 5 by (x)`) + f(`foo | count() | uniq by (x)`) + f(`foo | count() | unpack_json`) + f(`foo | count() | unpack_logfmt`) + f(`foo | count() | unpack_syslog`) + f(`foo | count() | unroll by (x)`) + + f(`* | by (x) count() as rows | math rows * 10, rows / 10 | drop x`) +} diff --git a/lib/logstorage/pipe_stats.go b/lib/logstorage/pipe_stats.go index 7382bb88cc..c26b5a8f81 100644 --- a/lib/logstorage/pipe_stats.go +++ b/lib/logstorage/pipe_stats.go @@ -728,7 +728,7 @@ var zeroByStatsField = &byStatsField{} // byStatsField represents 'by (...)' part of the pipeStats. // -// It can have either 'name' representation or 'name:bucket' or 'name:buket offset off' representation, +// It can have either 'name' representation or 'name:bucket' or 'name:bucket offset off' representation, // where `bucket` and `off` can contain duration, size or numeric value for creating different buckets // for 'value/bucket'. type byStatsField struct { From 0a40064a6fa64f9d3e3ae60f6f12a9584dce459d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 7 Sep 2024 00:41:44 +0200 Subject: [PATCH 015/128] app/vlselect: add /select/logsql/stats_query_range endpoint for building time series panels in VictoriaLogs plugin for Grafana Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6943 Updates https://github.com/VictoriaMetrics/victorialogs-datasource/issues/61 --- app/vlselect/logsql/logsql.go | 137 ++++++++++++- .../logsql/stats_query_range_response.qtpl | 52 +++++ .../logsql/stats_query_range_response.qtpl.go | 188 ++++++++++++++++++ app/vlselect/main.go | 5 + docs/VictoriaLogs/CHANGELOG.md | 1 + docs/VictoriaLogs/querying/README.md | 103 +++++++++- lib/logstorage/parser.go | 41 +++- lib/logstorage/parser_test.go | 33 ++- 8 files changed, 550 insertions(+), 10 deletions(-) create mode 100644 app/vlselect/logsql/stats_query_range_response.qtpl create mode 100644 app/vlselect/logsql/stats_query_range_response.qtpl.go diff --git a/app/vlselect/logsql/logsql.go b/app/vlselect/logsql/logsql.go index ad636b2393..cb8ef56fcf 100644 --- a/app/vlselect/logsql/logsql.go +++ b/app/vlselect/logsql/logsql.go @@ -45,6 +45,7 @@ func ProcessHitsRequest(ctx context.Context, w http.ResponseWriter, r *http.Requ } if step <= 0 { httpserver.Errorf(w, r, "'step' must be bigger than zero") + return } // Obtain offset @@ -563,6 +564,137 @@ func (tp *tailProcessor) getTailRows() ([][]logstorage.Field, error) { return tailRows, nil } +// ProcessStatsQueryRangeRequest handles /select/logsql/stats_query_range request. +// +// See https://docs.victoriametrics.com/victorialogs/querying/#querying-log-range-stats +func ProcessStatsQueryRangeRequest(ctx context.Context, w http.ResponseWriter, r *http.Request) { + q, tenantIDs, err := parseCommonArgs(r) + if err != nil { + httpserver.SendPrometheusError(w, r, err) + return + } + + // Obtain step + stepStr := r.FormValue("step") + if stepStr == "" { + stepStr = "1d" + } + step, err := promutils.ParseDuration(stepStr) + if err != nil { + err = fmt.Errorf("cannot parse 'step' arg: %s", err) + httpserver.SendPrometheusError(w, r, err) + return + } + if step <= 0 { + err := fmt.Errorf("'step' must be bigger than zero") + httpserver.SendPrometheusError(w, r, err) + return + } + + // Obtain `by(...)` fields from the last `| stats` pipe in q. + // Add `_time:step` to the `by(...)` list. + byFields, ok := q.GetStatsByFields(int64(step)) + if !ok { + err := fmt.Errorf("the query must end with '| stats ...'; got [%s]", q) + httpserver.SendPrometheusError(w, r, err) + return + } + + q.Optimize() + + m := make(map[string]*statsSeries) + var mLock sync.Mutex + + writeBlock := func(_ uint, timestamps []int64, columns []logstorage.BlockColumn) { + clonedColumnNames := make([]string, len(columns)) + for i, c := range columns { + clonedColumnNames[i] = strings.Clone(c.Name) + } + for i := range timestamps { + timestamp := q.GetTimestamp() + labels := make([]logstorage.Field, 0, len(byFields)) + for j, c := range columns { + if c.Name == "_time" { + nsec, ok := logstorage.TryParseTimestampRFC3339Nano(c.Values[i]) + if ok { + timestamp = nsec + continue + } + } + if slices.Contains(byFields, c.Name) { + labels = append(labels, logstorage.Field{ + Name: clonedColumnNames[j], + Value: strings.Clone(c.Values[i]), + }) + } + } + + var dst []byte + for j, c := range columns { + if !slices.Contains(byFields, c.Name) { + name := clonedColumnNames[j] + dst = dst[:0] + dst = append(dst, name...) + dst = logstorage.MarshalFieldsToJSON(dst, labels) + key := string(dst) + p := statsPoint{ + Timestamp: timestamp, + Value: strings.Clone(c.Values[i]), + } + + mLock.Lock() + ss := m[key] + if ss == nil { + ss = &statsSeries{ + key: key, + Name: name, + Labels: labels, + } + m[key] = ss + } + ss.Points = append(ss.Points, p) + mLock.Unlock() + } + } + } + } + + if err := vlstorage.RunQuery(ctx, tenantIDs, q, writeBlock); err != nil { + err = fmt.Errorf("cannot execute query [%s]: %s", q, err) + httpserver.SendPrometheusError(w, r, err) + return + } + + // Sort the collected stats by time + rows := make([]*statsSeries, 0, len(m)) + for _, ss := range m { + points := ss.Points + sort.Slice(points, func(i, j int) bool { + return points[i].Timestamp < points[j].Timestamp + }) + rows = append(rows, ss) + } + sort.Slice(rows, func(i, j int) bool { + return rows[i].key < rows[j].key + }) + + w.Header().Set("Content-Type", "application/json") + WriteStatsQueryRangeResponse(w, rows) +} + +type statsSeries struct { + key string + + Name string + Labels []logstorage.Field + Points []statsPoint +} + +type statsPoint struct { + Timestamp int64 + Value string +} + // ProcessStatsQueryRequest handles /select/logsql/stats_query request. // // See https://docs.victoriametrics.com/victorialogs/querying/#querying-log-stats @@ -573,8 +705,8 @@ func ProcessStatsQueryRequest(ctx context.Context, w http.ResponseWriter, r *htt return } - // Verify that q ends with `| stats` pipe - byFields, ok := q.GetStatsByFields() + // Obtain `by(...)` fields from the last `| stats` pipe in q. + byFields, ok := q.GetStatsByFields(0) if !ok { err := fmt.Errorf("the query must end with '| stats ...'; got [%s]", q) httpserver.SendPrometheusError(w, r, err) @@ -611,6 +743,7 @@ func ProcessStatsQueryRequest(ctx context.Context, w http.ResponseWriter, r *htt Timestamp: timestamp, Value: strings.Clone(c.Values[i]), } + rowsLock.Lock() rows = append(rows, r) rowsLock.Unlock() diff --git a/app/vlselect/logsql/stats_query_range_response.qtpl b/app/vlselect/logsql/stats_query_range_response.qtpl new file mode 100644 index 0000000000..2c71233f05 --- /dev/null +++ b/app/vlselect/logsql/stats_query_range_response.qtpl @@ -0,0 +1,52 @@ +{% stripspace %} + +// StatsQueryRangeResponse generates response for /select/logsql/stats_query_range +{% func StatsQueryRangeResponse(rows []*statsSeries) %} +{ + "status":"success", + "data":{ + "resultType":"matrix", + "result":[ + {% if len(rows) > 0 %} + {%= formatStatsSeries(rows[0]) %} + {% code rows = rows[1:] %} + {% for i := range rows %} + ,{%= formatStatsSeries(rows[i]) %} + {% endfor %} + {% endif %} + ] + } +} +{% endfunc %} + +{% func formatStatsSeries(ss *statsSeries) %} +{ + "metric":{ + "__name__":{%q= ss.Name %} + {% if len(ss.Labels) > 0 %} + {% for _, label := range ss.Labels %} + ,{%q= label.Name %}:{%q= label.Value %} + {% endfor %} + {% endif %} + }, + "values":[ + {% code points := ss.Points %} + {% if len(points) > 0 %} + {%= formatStatsPoint(&points[0]) %} + {% code points = points[1:] %} + {% for i := range points %} + ,{%= formatStatsPoint(&points[i]) %} + {% endfor %} + {% endif %} + ] +} +{% endfunc %} + +{% func formatStatsPoint(p *statsPoint) %} +[ + {%f= float64(p.Timestamp)/1e9 %}, + {%q= p.Value %} +] +{% endfunc %} + +{% endstripspace %} diff --git a/app/vlselect/logsql/stats_query_range_response.qtpl.go b/app/vlselect/logsql/stats_query_range_response.qtpl.go new file mode 100644 index 0000000000..ac8afd72f4 --- /dev/null +++ b/app/vlselect/logsql/stats_query_range_response.qtpl.go @@ -0,0 +1,188 @@ +// Code generated by qtc from "stats_query_range_response.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +// StatsQueryRangeResponse generates response for /select/logsql/stats_query_range + +//line app/vlselect/logsql/stats_query_range_response.qtpl:4 +package logsql + +//line app/vlselect/logsql/stats_query_range_response.qtpl:4 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line app/vlselect/logsql/stats_query_range_response.qtpl:4 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line app/vlselect/logsql/stats_query_range_response.qtpl:4 +func StreamStatsQueryRangeResponse(qw422016 *qt422016.Writer, rows []*statsSeries) { +//line app/vlselect/logsql/stats_query_range_response.qtpl:4 + qw422016.N().S(`{"status":"success","data":{"resultType":"matrix","result":[`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:10 + if len(rows) > 0 { +//line app/vlselect/logsql/stats_query_range_response.qtpl:11 + streamformatStatsSeries(qw422016, rows[0]) +//line app/vlselect/logsql/stats_query_range_response.qtpl:12 + rows = rows[1:] + +//line app/vlselect/logsql/stats_query_range_response.qtpl:13 + for i := range rows { +//line app/vlselect/logsql/stats_query_range_response.qtpl:13 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:14 + streamformatStatsSeries(qw422016, rows[i]) +//line app/vlselect/logsql/stats_query_range_response.qtpl:15 + } +//line app/vlselect/logsql/stats_query_range_response.qtpl:16 + } +//line app/vlselect/logsql/stats_query_range_response.qtpl:16 + qw422016.N().S(`]}}`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 +func WriteStatsQueryRangeResponse(qq422016 qtio422016.Writer, rows []*statsSeries) { +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + qw422016 := qt422016.AcquireWriter(qq422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + StreamStatsQueryRangeResponse(qw422016, rows) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + qt422016.ReleaseWriter(qw422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 +func StatsQueryRangeResponse(rows []*statsSeries) string { +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + qb422016 := qt422016.AcquireByteBuffer() +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + WriteStatsQueryRangeResponse(qb422016, rows) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + qs422016 := string(qb422016.B) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + qt422016.ReleaseByteBuffer(qb422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 + return qs422016 +//line app/vlselect/logsql/stats_query_range_response.qtpl:20 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:22 +func streamformatStatsSeries(qw422016 *qt422016.Writer, ss *statsSeries) { +//line app/vlselect/logsql/stats_query_range_response.qtpl:22 + qw422016.N().S(`{"metric":{"__name__":`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:25 + qw422016.N().Q(ss.Name) +//line app/vlselect/logsql/stats_query_range_response.qtpl:26 + if len(ss.Labels) > 0 { +//line app/vlselect/logsql/stats_query_range_response.qtpl:27 + for _, label := range ss.Labels { +//line app/vlselect/logsql/stats_query_range_response.qtpl:27 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:28 + qw422016.N().Q(label.Name) +//line app/vlselect/logsql/stats_query_range_response.qtpl:28 + qw422016.N().S(`:`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:28 + qw422016.N().Q(label.Value) +//line app/vlselect/logsql/stats_query_range_response.qtpl:29 + } +//line app/vlselect/logsql/stats_query_range_response.qtpl:30 + } +//line app/vlselect/logsql/stats_query_range_response.qtpl:30 + qw422016.N().S(`},"values":[`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:33 + points := ss.Points + +//line app/vlselect/logsql/stats_query_range_response.qtpl:34 + if len(points) > 0 { +//line app/vlselect/logsql/stats_query_range_response.qtpl:35 + streamformatStatsPoint(qw422016, &points[0]) +//line app/vlselect/logsql/stats_query_range_response.qtpl:36 + points = points[1:] + +//line app/vlselect/logsql/stats_query_range_response.qtpl:37 + for i := range points { +//line app/vlselect/logsql/stats_query_range_response.qtpl:37 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:38 + streamformatStatsPoint(qw422016, &points[i]) +//line app/vlselect/logsql/stats_query_range_response.qtpl:39 + } +//line app/vlselect/logsql/stats_query_range_response.qtpl:40 + } +//line app/vlselect/logsql/stats_query_range_response.qtpl:40 + qw422016.N().S(`]}`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 +func writeformatStatsSeries(qq422016 qtio422016.Writer, ss *statsSeries) { +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + qw422016 := qt422016.AcquireWriter(qq422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + streamformatStatsSeries(qw422016, ss) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + qt422016.ReleaseWriter(qw422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 +func formatStatsSeries(ss *statsSeries) string { +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + qb422016 := qt422016.AcquireByteBuffer() +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + writeformatStatsSeries(qb422016, ss) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + qs422016 := string(qb422016.B) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + qt422016.ReleaseByteBuffer(qb422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 + return qs422016 +//line app/vlselect/logsql/stats_query_range_response.qtpl:43 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:45 +func streamformatStatsPoint(qw422016 *qt422016.Writer, p *statsPoint) { +//line app/vlselect/logsql/stats_query_range_response.qtpl:45 + qw422016.N().S(`[`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:47 + qw422016.N().F(float64(p.Timestamp) / 1e9) +//line app/vlselect/logsql/stats_query_range_response.qtpl:47 + qw422016.N().S(`,`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:48 + qw422016.N().Q(p.Value) +//line app/vlselect/logsql/stats_query_range_response.qtpl:48 + qw422016.N().S(`]`) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 +func writeformatStatsPoint(qq422016 qtio422016.Writer, p *statsPoint) { +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + qw422016 := qt422016.AcquireWriter(qq422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + streamformatStatsPoint(qw422016, p) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + qt422016.ReleaseWriter(qw422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 +} + +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 +func formatStatsPoint(p *statsPoint) string { +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + qb422016 := qt422016.AcquireByteBuffer() +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + writeformatStatsPoint(qb422016, p) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + qs422016 := string(qb422016.B) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + qt422016.ReleaseByteBuffer(qb422016) +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 + return qs422016 +//line app/vlselect/logsql/stats_query_range_response.qtpl:50 +} diff --git a/app/vlselect/main.go b/app/vlselect/main.go index 9033f4040a..c08a53884c 100644 --- a/app/vlselect/main.go +++ b/app/vlselect/main.go @@ -197,6 +197,10 @@ func processSelectRequest(ctx context.Context, w http.ResponseWriter, r *http.Re logsqlStatsQueryRequests.Inc() logsql.ProcessStatsQueryRequest(ctx, w, r) return true + case "/select/logsql/stats_query_range": + logsqlStatsQueryRangeRequests.Inc() + logsql.ProcessStatsQueryRangeRequest(ctx, w, r) + return true case "/select/logsql/stream_field_names": logsqlStreamFieldNamesRequests.Inc() logsql.ProcessStreamFieldNamesRequest(ctx, w, r) @@ -237,6 +241,7 @@ var ( logsqlHitsRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/hits"}`) logsqlQueryRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/query"}`) logsqlStatsQueryRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stats_query"}`) + logsqlStatsQueryRangeRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stats_query_range"}`) logsqlStreamFieldNamesRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stream_field_names"}`) logsqlStreamFieldValuesRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stream_field_values"}`) logsqlStreamIDsRequests = metrics.NewCounter(`vl_http_requests_total{path="/select/logsql/stream_ids"}`) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 2ae28e32cd..1481ebd40c 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -16,6 +16,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip * FEATURE: add [`/select/logsql/stats_query` HTTP API](https://docs.victoriametrics.com/victorialogs/querying/#querying-log-stats), which is going to be used by [vmalert](https://docs.victoriametrics.com/vmalert/) for executing alerting and recording rules against VictoriaLogs. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6942) for details. +* FEATURE: add [`/select/logsql/stats_query_range` HTTP API](https://docs.victoriametrics.com/victorialogs/querying/#querying-log-range-stats), which is going to be used by [VictoriaLogs plugin for Grafana](https://docs.victoriametrics.com/victorialogs/victorialogs-datasource/) for building time series panels. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6943) for details. * FEATURE: optimize [multi-exact queries](https://docs.victoriametrics.com/victorialogs/logsql/#multi-exact-filter) with many phrases to search. For example, `ip:in(path:="/foo/bar" | keep ip)` when there are many unique values for `ip` field among log entries with `/foo/bar` path. * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add support for displaying the top 5 log streams in the hits graph. The remaining log streams are grouped into an "other" label. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6545). * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add the ability to customize the graph display with options for bar, line, stepped line, and points. diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index a10f5768f4..f170d7b654 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -14,6 +14,7 @@ VictoriaLogs provides the following HTTP endpoints: - [`/select/logsql/tail`](#live-tailing) for live tailing of query results. - [`/select/logsql/hits`](#querying-hits-stats) for querying log hits stats over the given time range. - [`/select/logsql/stats_query`](#querying-log-stats) for querying log stats at the given time. +- [`/select/logsql/stats_query_range`](#querying-log-range-stats) for querying log stats over the given time range. - [`/select/logsql/stream_ids`](#querying-stream_ids) for querying `_stream_id` values of [log streams](#https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). - [`/select/logsql/streams`](#querying-streams) for querying [log streams](#https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). - [`/select/logsql/stream_field_names`](#querying-stream-field-names) for querying [log stream](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) field names. @@ -107,6 +108,7 @@ See also: - [Live tailing](#live-tailing) - [Querying hits stats](#querying-hits-stats) - [Querying log stats](#querying-log-stats) +- [Querying log range stats](#querying-log-range-stats) - [Querying streams](#querying-streams) - [Querying stream field names](#querying-stream-field-names) - [Querying stream field values](#querying-stream-field-values) @@ -276,6 +278,7 @@ See also: - [Querying logs](#querying-logs) - [Querying log stats](#querying-log-stats) +- [Querying log range stats](#querying-log-range-stats) - [Querying streams](#querying-streams) - [HTTP API](#http-api) @@ -285,12 +288,12 @@ VictoriaLogs provides `/select/logsql/stats_query?query=&time=` HTTP e for the given [`query`](https://docs.victoriametrics.com/victorialogs/logsql/) at the given timestamp `t` in the format compatible with [Prometheus querying API](https://prometheus.io/docs/prometheus/latest/querying/api/#instant-queries). -The `` arg can contain values in [any supported format](https://docs.victoriametrics.com/#timestamp-formats). -If `` is missing, then it equals to the current time. - The `` must contain [`stats` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stats-pipe). The calculated stats is converted into metrics with labels enumerated in `by(...)` clause of the `| stats by(...)` pipe. +The `` arg can contain values in [any supported format](https://docs.victoriametrics.com/#timestamp-formats). +If `` is missing, then it equals to the current time. + For example, the following command returns the number of logs per each `level` [field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) across logs over `2024-01-01` day by UTC: @@ -345,6 +348,100 @@ The `/select/logsql/stats_query` API is useful for generating Prometheus-compati See also: +- [Querying log range stats](#querying-log-range-stats) +- [Querying logs](#querying-logs) +- [Querying hits stats](#querying-hits-stats) +- [HTTP API](#http-api) + +### Querying log range stats + +VictoriaLogs provides `/select/logsql/stats_query_range?query=&start=&end=&step=` HTTP endpoint, which returns log stats +for the given [`query`](https://docs.victoriametrics.com/victorialogs/logsql/) on the given `[start ... end]` time range with the given `step` interval. +The stats is returned in the format compatible with [Prometheus querying API](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries). + +The `` must contain [`stats` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stats-pipe). The calculated stats is converted into metrics +with labels enumerated in `by(...)` clause of the `| stats by(...)` pipe. + +The `` and `` args can contain values in [any supported format](https://docs.victoriametrics.com/#timestamp-formats). +If `` is missing, then it equals to the minimum timestamp across logs stored in VictoriaLogs. +If `` is missing, then it equals to the maximum timestamp across logs stored in VictoriaLogs. + +The `` arg can contain values in [the format specified here](https://docs.victoriametrics.com/victorialogs/logsql/#stats-by-time-buckets). +If `` is missing, then it equals to `1d` (one day). + +For example, the following command returns the number of logs per each `level` [field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) +across logs over `2024-01-01` day by UTC with 6-hour granularity: + +```sh +curl http://localhost:9428/select/logsql/stats_query_range -d 'query=* | stats by (level) count(*)' -d 'start=2024-01-01' -d 'end=2024-01-02' -d 'step=6h' +``` + +Below is an example JSON output returned from this endpoint: + +```json +{ + "status": "success", + "data": { + "resultType": "matrix", + "result": [ + { + "metric": { + "__name__": "count(*)", + "level": "info" + }, + "values": [ + [ + 1704067200, + "103125" + ], + [ + 1704088800, + "102500" + ], + [ + 1704110400, + "103125" + ], + [ + 1704132000, + "102500" + ] + ] + }, + { + "metric": { + "__name__": "count(*)", + "level": "error" + }, + "values": [ + [ + 1704067200, + "31" + ], + [ + 1704088800, + "25" + ], + [ + 1704110400, + "31" + ], + [ + 1704132000, + "125" + ] + ] + } + ] + } +} +``` + +The `/select/logsql/stats_query_range` API is useful for generating Prometheus-compatible graphs in Grafana. + +See also: + +- [Querying log stats](#querying-log-stats) - [Querying logs](#querying-logs) - [Querying hits stats](#querying-hits-stats) - [HTTP API](#http-api) diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index a95a34e1fb..57831ca290 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -454,10 +454,12 @@ func (q *Query) Optimize() { } } -// GetStatsByFields returns `| stats by (...)` fields from q if q contains safe `| stats ...` pipe in the end. +// GetStatsByFields returns `by (...)` fields from the last `stats` pipe at q. +// +// If step > 0, then _time:step field is added to the last `stats by(...)` pipe at q. // // False is returned if q doesn't contain safe `| stats ...` pipe. -func (q *Query) GetStatsByFields() ([]string, bool) { +func (q *Query) GetStatsByFields(step int64) ([]string, bool) { pipes := q.pipes idx := getLastPipeStatsIdx(pipes) @@ -465,8 +467,13 @@ func (q *Query) GetStatsByFields() ([]string, bool) { return nil, false } + ps := pipes[idx].(*pipeStats) + + // add _time:step to ps.byFields if it doesn't contain it yet. + ps.byFields = addByTimeField(ps.byFields, step) + // extract by(...) field names from stats pipe - byFields := pipes[idx].(*pipeStats).byFields + byFields := ps.byFields fields := make([]string, len(byFields)) for i, f := range byFields { fields[i] = f.name @@ -525,6 +532,34 @@ func getLastPipeStatsIdx(pipes []pipe) int { return -1 } +func addByTimeField(byFields []*byStatsField, step int64) []*byStatsField { + if step <= 0 { + return byFields + } + stepStr := fmt.Sprintf("%d", step) + dstFields := make([]*byStatsField, 0, len(byFields)+1) + hasByTime := false + for _, f := range byFields { + if f.name == "_time" { + f = &byStatsField{ + name: "_time", + bucketSizeStr: stepStr, + bucketSize: float64(step), + } + hasByTime = true + } + dstFields = append(dstFields, f) + } + if !hasByTime { + dstFields = append(dstFields, &byStatsField{ + name: "_time", + bucketSizeStr: stepStr, + bucketSize: float64(step), + }) + } + return dstFields +} + func removeStarFilters(f filter) filter { visitFunc := func(f filter) bool { fp, ok := f.(*filterPrefix) diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index 4cbf18cefc..366ed9c80b 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -2101,6 +2101,35 @@ func TestQueryDropAllPipes(t *testing.T) { f(`foo | filter bar:baz | stats by (x) min(y)`, `foo bar:baz`) } +func TestQueryGetStatsByFields_PositiveStep(t *testing.T) { + f := func(qStr string, step int64, fieldsExpected []string, qExpected string) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("cannot parse [%s]: %s", qStr, err) + } + fields, ok := q.GetStatsByFields(step) + if !ok { + t.Fatalf("cannot obtain byFields from the query [%s]", qStr) + } + if !reflect.DeepEqual(fields, fieldsExpected) { + t.Fatalf("unexpected byFields;\ngot\n%q\nwant\n%q", fields, fieldsExpected) + } + + // Verify the resulting query + qResult := q.String() + if qResult != qExpected { + t.Fatalf("unexpected query\ngot\n%s\nwant\n%s", qResult, qExpected) + } + } + + f(`* | count()`, nsecsPerHour, []string{"_time"}, `* | stats by (_time:3600000000000) count(*) as "count(*)"`) + f(`* | by (level) count() x`, nsecsPerDay, []string{"level", "_time"}, `* | stats by (level, _time:86400000000000) count(*) as x`) + f(`* | by (_time:1m) count() x`, nsecsPerDay, []string{"_time"}, `* | stats by (_time:86400000000000) count(*) as x`) + f(`* | by (_time:1m offset 30s,level) count() x, count_uniq(z) y`, nsecsPerDay, []string{"_time", "level"}, `* | stats by (_time:86400000000000, level) count(*) as x, count_uniq(z) as y`) +} + func TestQueryGetStatsByFields_Success(t *testing.T) { f := func(qStr string, fieldsExpected []string) { t.Helper() @@ -2109,7 +2138,7 @@ func TestQueryGetStatsByFields_Success(t *testing.T) { if err != nil { t.Fatalf("cannot parse [%s]: %s", qStr, err) } - fields, ok := q.GetStatsByFields() + fields, ok := q.GetStatsByFields(0) if !ok { t.Fatalf("cannot obtain byFields from the query [%s]", qStr) } @@ -2156,7 +2185,7 @@ func TestQueryGetStatsByFields_Failure(t *testing.T) { if err != nil { t.Fatalf("cannot parse [%s]: %s", qStr, err) } - fields, ok := q.GetStatsByFields() + fields, ok := q.GetStatsByFields(0) if ok { t.Fatalf("expecting failure to get byFields for the query [%s]", qStr) } From 1cd06ace5a17da40d660b0abe528b314665cb753 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 11:14:49 +0200 Subject: [PATCH 016/128] lib/logstorage: properly extract common tokens from unsupported OR filters Previously the following query could miss rows matching !bar if these rows do not contain foo: foo OR !bar This is because of incorrect detection of common tokens for OR filters - all the unsupported filters were skipped (including the NOT filter (aka `!`)), while in this case zero common tokens must be returned. While at it, move repetiteve code in TestFilterAnd and TestFilterOr into f function. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6556 --- lib/logstorage/filter_and.go | 8 +- lib/logstorage/filter_and_test.go | 357 +++--------------------------- lib/logstorage/filter_or.go | 19 +- lib/logstorage/filter_or_test.go | 306 +++---------------------- 4 files changed, 74 insertions(+), 616 deletions(-) diff --git a/lib/logstorage/filter_and.go b/lib/logstorage/filter_and.go index 64fa0c17ab..131050ed36 100644 --- a/lib/logstorage/filter_and.go +++ b/lib/logstorage/filter_and.go @@ -114,6 +114,10 @@ func (fa *filterAnd) getByFieldTokens() []fieldTokens { } func (fa *filterAnd) initByFieldTokens() { + fa.byFieldTokens = getCommonTokensForAndFilters(fa.filters) +} + +func getCommonTokensForAndFilters(filters []filter) []fieldTokens { m := make(map[string]map[string]struct{}) var fieldNames []string @@ -134,7 +138,7 @@ func (fa *filterAnd) initByFieldTokens() { } } - for _, f := range fa.filters { + for _, f := range filters { switch t := f.(type) { case *filterExact: tokens := t.getTokens() @@ -177,7 +181,7 @@ func (fa *filterAnd) initByFieldTokens() { }) } - fa.byFieldTokens = byFieldTokens + return byFieldTokens } func matchStringByAllTokens(v string, tokens []string) bool { diff --git a/lib/logstorage/filter_and_test.go b/lib/logstorage/filter_and_test.go index c0f9ddf695..41dd2d19fa 100644 --- a/lib/logstorage/filter_and_test.go +++ b/lib/logstorage/filter_and_test.go @@ -25,350 +25,53 @@ func TestFilterAnd(t *testing.T) { }, } - // non-empty intersection - // foo:a AND foo:abc* - fa := &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "a", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "abc", - }, - }, + f := func(qStr string, expectedRowIdxs []int) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("unexpected error in ParseQuery: %s", err) + } + testFilterMatchForColumns(t, columns, q.f, "foo", expectedRowIdxs) } - testFilterMatchForColumns(t, columns, fa, "foo", []int{2, 6}) + + // non-empty intersection + f(`foo:a AND foo:abc*`, []int{2, 6}) // reverse non-empty intersection - // foo:abc* AND foo:a - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "abc", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "a", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{2, 6}) + f(`foo:abc* AND foo:a`, []int{2, 6}) // the first filter mismatch - // foo:bc* AND foo:a - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "bc", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "a", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) + f(`foo:bc* AND foo:a`, nil) // the last filter mismatch - // foo:abc AND foo:foo* - fa = &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "abc", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) + f(`foo:abc AND foo:foo*`, nil) // empty intersection - // foo:foo AND foo:abc* - fa = &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "abc", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) - - // reverse empty intersection - // foo:abc* AND foo:foo - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "abc", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) + f(`foo:foo AND foo:abc*`, nil) + f(`foo:abc* AND foo:foo`, nil) // empty value - // foo:"" AND bar:"" - fa = &filterAnd{ - filters: []filter{ - &filterExact{ - fieldName: "foo", - value: "", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{5}) + f(`foo:"" AND bar:""`, []int{5}) // non-existing field with empty value - // foo:foo* AND bar:"" - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{0, 1, 3, 4, 6}) - - // reverse non-existing field with empty value - // bar:"" AND foo:foo* - fa = &filterAnd{ - filters: []filter{ - &filterExact{ - fieldName: "bar", - value: "", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{0, 1, 3, 4, 6}) + f(`foo:foo* AND bar:""`, []int{0, 1, 3, 4, 6}) + f(`bar:"" AND foo:foo*`, []int{0, 1, 3, 4, 6}) // non-existing field with non-empty value - // foo:foo* AND bar:* - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - &filterPrefix{ - fieldName: "bar", - prefix: "", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) - - // reverse non-existing field with non-empty value - // bar:* AND foo:foo* - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "bar", - prefix: "", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) + f(`foo:foo* AND bar:*`, nil) + f(`bar:* AND foo:foo*`, nil) // https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 - // foo:"a foo"* AND (foo:="a foobar" OR boo:bbbbbbb) - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "a foo", - }, - &filterOr{ - filters: []filter{ - &filterExact{ - fieldName: "foo", - value: "a foobar", - }, - &filterExact{ - fieldName: "boo", - value: "bbbbbbb", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{1}) + f(`foo:"a foo"* AND (foo:="a foobar" OR boo:bbbbbbb)`, []int{1}) - // foo:"a foo"* AND (foo:"abcd foobar" OR foo:foobar) - fa = &filterAnd{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "a foo", - }, - &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "abcd foobar", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "foobar", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{1, 6}) + f(`foo:"a foo"* AND (foo:"abcd foobar" OR foo:foobar)`, []int{1, 6}) + f(`(foo:foo* OR bar:baz) AND (bar:x OR foo:a)`, []int{0, 1, 3, 4, 6}) + f(`(foo:foo* OR bar:baz) AND (bar:x OR foo:xyz)`, nil) + f(`(foo:foo* OR bar:baz) AND (bar:* OR foo:xyz)`, nil) + f(`(foo:foo* OR bar:baz) AND (bar:"" OR foo:xyz)`, []int{0, 1, 3, 4, 6}) - // (foo:foo* OR bar:baz) AND (bar:x OR foo:a) - fa = &filterAnd{ - filters: []filter{ - &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - &filterPhrase{ - fieldName: "bar", - phrase: "baz", - }, - }, - }, - &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "bar", - phrase: "x", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "a", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{0, 1, 3, 4, 6}) - - // (foo:foo* OR bar:baz) AND (bar:x OR foo:xyz) - fa = &filterAnd{ - filters: []filter{ - &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - &filterPhrase{ - fieldName: "bar", - phrase: "baz", - }, - }, - }, - &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "bar", - phrase: "x", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "xyz", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) - - // (foo:foo* OR bar:baz) AND (bar:* OR foo:xyz) - fa = &filterAnd{ - filters: []filter{ - &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - &filterPhrase{ - fieldName: "bar", - phrase: "baz", - }, - }, - }, - &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "bar", - prefix: "", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "xyz", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", nil) - - // (foo:foo* OR bar:baz) AND (bar:"" OR foo:xyz) - fa = &filterAnd{ - filters: []filter{ - &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "foo", - }, - &filterPhrase{ - fieldName: "bar", - phrase: "baz", - }, - }, - }, - &filterOr{ - filters: []filter{ - &filterExact{ - fieldName: "bar", - value: "", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "xyz", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fa, "foo", []int{0, 1, 3, 4, 6}) + // negative filters + f(`foo:foo* AND !foo:~bar`, []int{0}) + f(`foo:foo* AND foo:!~bar`, []int{0}) } diff --git a/lib/logstorage/filter_or.go b/lib/logstorage/filter_or.go index a292bdedd8..ab268f7454 100644 --- a/lib/logstorage/filter_or.go +++ b/lib/logstorage/filter_or.go @@ -126,6 +126,10 @@ func (fo *filterOr) getByFieldTokens() []fieldTokens { } func (fo *filterOr) initByFieldTokens() { + fo.byFieldTokens = getCommonTokensForOrFilters(fo.filters) +} + +func getCommonTokensForOrFilters(filters []filter) []fieldTokens { m := make(map[string][][]string) var fieldNames []string @@ -141,7 +145,7 @@ func (fo *filterOr) initByFieldTokens() { m[fieldName] = append(m[fieldName], tokens) } - for _, f := range fo.filters { + for _, f := range filters { switch t := f.(type) { case *filterExact: tokens := t.getTokens() @@ -166,28 +170,29 @@ func (fo *filterOr) initByFieldTokens() { for _, bft := range bfts { mergeFieldTokens(bft.field, bft.tokens) } + default: + // Cannot extract tokens from this filter. This means that it is impossible to extract common tokens from OR filters. + return nil } } var byFieldTokens []fieldTokens for _, fieldName := range fieldNames { tokenss := m[fieldName] - if len(tokenss) != len(fo.filters) { + if len(tokenss) != len(filters) { // The filter for the given fieldName is missing in some OR filters, // so it is impossible to extract common tokens from these filters. // Give up extracting common tokens from the remaining filters, // since they may not cover log entries matching fieldName filters. // This fixes https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 - byFieldTokens = nil - break + return nil } commonTokens := getCommonTokens(tokenss) if len(commonTokens) == 0 { // Give up extracting common tokens from the remaining filters, // since they may not cover log entries matching fieldName filters. // This fixes https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 - byFieldTokens = nil - break + return nil } byFieldTokens = append(byFieldTokens, fieldTokens{ field: fieldName, @@ -196,5 +201,5 @@ func (fo *filterOr) initByFieldTokens() { }) } - fo.byFieldTokens = byFieldTokens + return byFieldTokens } diff --git a/lib/logstorage/filter_or_test.go b/lib/logstorage/filter_or_test.go index d5855de70a..c7bc860eee 100644 --- a/lib/logstorage/filter_or_test.go +++ b/lib/logstorage/filter_or_test.go @@ -25,302 +25,48 @@ func TestFilterOr(t *testing.T) { }, } - // non-empty union - // foo:23 OR foo:abc - fo := &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "abc", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{2, 6, 9}) + f := func(qStr string, expectedRowIdxs []int) { + t.Helper() - // reverse non-empty union - // foo:abc OR foo:23 - fo = &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "abc", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - }, + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("unexpected error in ParseQuery: %s", err) + } + testFilterMatchForColumns(t, columns, q.f, "foo", expectedRowIdxs) } - testFilterMatchForColumns(t, columns, fo, "foo", []int{2, 6, 9}) + + // non-empty union + f(`foo:23 OR foo:abc*`, []int{2, 6, 9}) + f(`foo:abc* OR foo:23`, []int{2, 6, 9}) // first empty result, second non-empty result - // foo:xabc* OR foo:23 - fo = &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "xabc", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{9}) + f(`foo:xabc* OR foo:23`, []int{9}) // first non-empty result, second empty result - // foo:23 OR foo:xabc* - fo = &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "xabc", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{9}) + f(`foo:23 OR foo:xabc*`, []int{9}) // first match all - // foo:a OR foo:23 - fo = &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "a", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "23", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) + f(`foo:a OR foo:23`, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) // second match all - // foo:23 OR foo:a - fo = &filterOr{ - filters: []filter{ - &filterPrefix{ - fieldName: "foo", - prefix: "23", - }, - &filterPhrase{ - fieldName: "foo", - phrase: "a", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) + f(`foo:23 OR foo:a`, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) // both empty results - // foo:x23 OR foo:xabc - fo = &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "x23", - }, - &filterPrefix{ - fieldName: "foo", - prefix: "xabc", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", nil) + f(`foo:x23 OR foo:xabc`, nil) // non-existing column (last) - // foo:23 OR bar:xabc* - fo = &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterPrefix{ - fieldName: "bar", - prefix: "xabc", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{9}) + f(`foo:23 OR bar:xabc*`, []int{9}) // non-existing column (first) - // bar:xabc* OR foo:23 - fo = &filterOr{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterPrefix{ - fieldName: "bar", - prefix: "xabc", - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{9}) + f(`bar:xabc* OR foo:23`, []int{9}) - // (foo:23 AND bar:"") OR (foo:foo AND bar:*) - fo = &filterOr{ - filters: []filter{ - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - }, - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - &filterPrefix{ - fieldName: "bar", - prefix: "", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{9}) + f(`(foo:23 AND bar:"") OR (foo:foo AND bar:*)`, []int{9}) + f(`(foo:23 AND bar:"") OR (foo:foo AND bar:"")`, []int{0, 9}) + f(`(foo:23 AND bar:"") OR (foo:foo AND baz:"")`, []int{0, 9}) + f(`(foo:23 AND bar:abc) OR (foo:foo AND bar:"")`, []int{0}) + f(`(foo:23 AND bar:abc) OR (foo:foo AND bar:*)`, nil) - // (foo:23 AND bar:"") OR (foo:foo AND bar:"") - fo = &filterOr{ - filters: []filter{ - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - }, - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{0, 9}) - - // (foo:23 AND bar:"") OR (foo:foo AND baz:"") - fo = &filterOr{ - filters: []filter{ - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - }, - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - &filterExact{ - fieldName: "baz", - value: "", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{0, 9}) - - // (foo:23 AND bar:abc) OR (foo:foo AND bar:"") - fo = &filterOr{ - filters: []filter{ - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterPhrase{ - fieldName: "bar", - phrase: "abc", - }, - }, - }, - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - &filterExact{ - fieldName: "bar", - value: "", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", []int{0}) - - // (foo:23 AND bar:abc) OR (foo:foo AND bar:*) - fo = &filterOr{ - filters: []filter{ - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "23", - }, - &filterPhrase{ - fieldName: "bar", - phrase: "abc", - }, - }, - }, - &filterAnd{ - filters: []filter{ - &filterPhrase{ - fieldName: "foo", - phrase: "foo", - }, - &filterPrefix{ - fieldName: "bar", - prefix: "", - }, - }, - }, - }, - } - testFilterMatchForColumns(t, columns, fo, "foo", nil) + // negative filter + f(`foo:baz or !foo:~foo`, []int{2, 3, 5, 7, 8, 9}) + f(`foo:baz or foo:!~foo`, []int{2, 3, 5, 7, 8, 9}) } From eaee2d7db459052323f0bb85701d7a43a827b0f8 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 11:24:44 +0200 Subject: [PATCH 017/128] lib/logstorage: improve error logging for incorrect queries passed to /select/logsql/stats_query and /select/logsql/stats_query_range functions --- app/vlselect/logsql/logsql.go | 10 +++---- docs/VictoriaLogs/querying/README.md | 4 +-- lib/logstorage/parser.go | 23 ++++++++------- lib/logstorage/parser_test.go | 42 +++++++++++++++++++++------- 4 files changed, 51 insertions(+), 28 deletions(-) diff --git a/app/vlselect/logsql/logsql.go b/app/vlselect/logsql/logsql.go index cb8ef56fcf..e12e53ed08 100644 --- a/app/vlselect/logsql/logsql.go +++ b/app/vlselect/logsql/logsql.go @@ -593,9 +593,8 @@ func ProcessStatsQueryRangeRequest(ctx context.Context, w http.ResponseWriter, r // Obtain `by(...)` fields from the last `| stats` pipe in q. // Add `_time:step` to the `by(...)` list. - byFields, ok := q.GetStatsByFields(int64(step)) - if !ok { - err := fmt.Errorf("the query must end with '| stats ...'; got [%s]", q) + byFields, err := q.GetStatsByFieldsAddGroupingByTime(int64(step)) + if err != nil { httpserver.SendPrometheusError(w, r, err) return } @@ -706,9 +705,8 @@ func ProcessStatsQueryRequest(ctx context.Context, w http.ResponseWriter, r *htt } // Obtain `by(...)` fields from the last `| stats` pipe in q. - byFields, ok := q.GetStatsByFields(0) - if !ok { - err := fmt.Errorf("the query must end with '| stats ...'; got [%s]", q) + byFields, err := q.GetStatsByFields() + if err != nil { httpserver.SendPrometheusError(w, r, err) return } diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index f170d7b654..95ae6bc317 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -289,7 +289,7 @@ for the given [`query`](https://docs.victoriametrics.com/victorialogs/logsql/) a in the format compatible with [Prometheus querying API](https://prometheus.io/docs/prometheus/latest/querying/api/#instant-queries). The `` must contain [`stats` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stats-pipe). The calculated stats is converted into metrics -with labels enumerated in `by(...)` clause of the `| stats by(...)` pipe. +with labels from `by(...)` clause of the `| stats by(...)` pipe. The `` arg can contain values in [any supported format](https://docs.victoriametrics.com/#timestamp-formats). If `` is missing, then it equals to the current time. @@ -360,7 +360,7 @@ for the given [`query`](https://docs.victoriametrics.com/victorialogs/logsql/) o The stats is returned in the format compatible with [Prometheus querying API](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries). The `` must contain [`stats` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stats-pipe). The calculated stats is converted into metrics -with labels enumerated in `by(...)` clause of the `| stats by(...)` pipe. +with labels from `by(...)` clause of the `| stats by(...)` pipe. The `` and `` args can contain values in [any supported format](https://docs.victoriametrics.com/#timestamp-formats). If `` is missing, then it equals to the minimum timestamp across logs stored in VictoriaLogs. diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 57831ca290..87ff9dc6be 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -455,16 +455,19 @@ func (q *Query) Optimize() { } // GetStatsByFields returns `by (...)` fields from the last `stats` pipe at q. +func (q *Query) GetStatsByFields() ([]string, error) { + return q.GetStatsByFieldsAddGroupingByTime(0) +} + +// GetStatsByFieldsAddGroupingByTime returns `by (...)` fields from the last `stats` pipe at q. // -// If step > 0, then _time:step field is added to the last `stats by(...)` pipe at q. -// -// False is returned if q doesn't contain safe `| stats ...` pipe. -func (q *Query) GetStatsByFields(step int64) ([]string, bool) { +// if step > 0, then _time:step is added to the last `stats by (...)` pipe at q. +func (q *Query) GetStatsByFieldsAddGroupingByTime(step int64) ([]string, error) { pipes := q.pipes idx := getLastPipeStatsIdx(pipes) if idx < 0 { - return nil, false + return nil, fmt.Errorf("missing `| stats ...` pipe in the query [%s]", q) } ps := pipes[idx].(*pipeStats) @@ -491,21 +494,21 @@ func (q *Query) GetStatsByFields(step int64) ([]string, bool) { // `| fields ...` pipe must contain all the by(...) fields, otherwise it breaks output. for _, f := range fields { if !slices.Contains(t.fields, f) { - return nil, false + return nil, fmt.Errorf("missing %q field at %q pipe in the query [%s]", f, p, q) } } case *pipeDelete: // Disallow deleting by(...) fields, since this breaks output. for _, f := range t.fields { if slices.Contains(fields, f) { - return nil, false + return nil, fmt.Errorf("the %q field cannot be deleted via %q in the query [%s]", f, p, q) } } case *pipeCopy: // Disallow copying by(...) fields, since this breaks output. for _, f := range t.srcFields { if slices.Contains(fields, f) { - return nil, false + return nil, fmt.Errorf("the %q field cannot be copied via %q in the query [%s]", f, p, q) } } case *pipeRename: @@ -516,11 +519,11 @@ func (q *Query) GetStatsByFields(step int64) ([]string, bool) { } } default: - return nil, false + return nil, fmt.Errorf("the %q pipe cannot be put after %q pipe in the query [%s]", p, ps, q) } } - return fields, true + return fields, nil } func getLastPipeStatsIdx(pipes []pipe) int { diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index 366ed9c80b..453080b21a 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -2101,7 +2101,7 @@ func TestQueryDropAllPipes(t *testing.T) { f(`foo | filter bar:baz | stats by (x) min(y)`, `foo bar:baz`) } -func TestQueryGetStatsByFields_PositiveStep(t *testing.T) { +func TestQueryGetStatsByFieldsAddGroupingByTime_Success(t *testing.T) { f := func(qStr string, step int64, fieldsExpected []string, qExpected string) { t.Helper() @@ -2109,9 +2109,9 @@ func TestQueryGetStatsByFields_PositiveStep(t *testing.T) { if err != nil { t.Fatalf("cannot parse [%s]: %s", qStr, err) } - fields, ok := q.GetStatsByFields(step) - if !ok { - t.Fatalf("cannot obtain byFields from the query [%s]", qStr) + fields, err := q.GetStatsByFieldsAddGroupingByTime(step) + if err != nil { + t.Fatalf("unexpected error in GetStatsByFieldsAddGroupingByTime(): %s", err) } if !reflect.DeepEqual(fields, fieldsExpected) { t.Fatalf("unexpected byFields;\ngot\n%q\nwant\n%q", fields, fieldsExpected) @@ -2130,6 +2130,28 @@ func TestQueryGetStatsByFields_PositiveStep(t *testing.T) { f(`* | by (_time:1m offset 30s,level) count() x, count_uniq(z) y`, nsecsPerDay, []string{"_time", "level"}, `* | stats by (_time:86400000000000, level) count(*) as x, count_uniq(z) as y`) } +func TestQueryGetStatsByFieldsAddGroupingByTime_Failure(t *testing.T) { + f := func(qStr string) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("cannot parse [%s]: %s", qStr, err) + } + fields, err := q.GetStatsByFieldsAddGroupingByTime(nsecsPerHour) + if err == nil { + t.Fatalf("expecting non-nil error") + } + if fields != nil { + t.Fatalf("unexpected non-nil fields: %q", fields) + } + } + + f(`*`) + f(`_time:5m | count() | drop _time`) + f(`* | by (x) count() | keep x`) +} + func TestQueryGetStatsByFields_Success(t *testing.T) { f := func(qStr string, fieldsExpected []string) { t.Helper() @@ -2138,9 +2160,9 @@ func TestQueryGetStatsByFields_Success(t *testing.T) { if err != nil { t.Fatalf("cannot parse [%s]: %s", qStr, err) } - fields, ok := q.GetStatsByFields(0) - if !ok { - t.Fatalf("cannot obtain byFields from the query [%s]", qStr) + fields, err := q.GetStatsByFields() + if err != nil { + t.Fatalf("unexpected error in GetStatsByFields(): %s", err) } if !reflect.DeepEqual(fields, fieldsExpected) { t.Fatalf("unexpected byFields;\ngot\n%q\nwant\n%q", fields, fieldsExpected) @@ -2185,9 +2207,9 @@ func TestQueryGetStatsByFields_Failure(t *testing.T) { if err != nil { t.Fatalf("cannot parse [%s]: %s", qStr, err) } - fields, ok := q.GetStatsByFields(0) - if ok { - t.Fatalf("expecting failure to get byFields for the query [%s]", qStr) + fields, err := q.GetStatsByFields() + if err == nil { + t.Fatalf("expecting non-nil error") } if fields != nil { t.Fatalf("expectig nil fields; got %q", fields) From 45a3713bdb0510cc7982e67a868e8389a9dd7f82 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 12:23:45 +0200 Subject: [PATCH 018/128] lib/logstorage: preserve the order of tokens to check against bloom filters in AND filters Previously tokens from AND filters were extracted in random order. This could slow down checking them agains bloom filters if the most specific tokens go at the beginning of the AND filters. Preserve the original order of tokens when matching them against bloom filters, so the user could control the performance of the query by putting the most specific AND filters at the beginning of the query. While at it, add tests for getCommonTokensForAndFilters() and getCommonTokensForOrFilters(). Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6556 --- lib/logstorage/filter_and.go | 18 +++--- lib/logstorage/filter_and_test.go | 90 ++++++++++++++++++++++++++++ lib/logstorage/filter_or.go | 10 +--- lib/logstorage/filter_or_test.go | 98 +++++++++++++++++++++++++++++++ 4 files changed, 199 insertions(+), 17 deletions(-) diff --git a/lib/logstorage/filter_and.go b/lib/logstorage/filter_and.go index 131050ed36..cf0fa8db28 100644 --- a/lib/logstorage/filter_and.go +++ b/lib/logstorage/filter_and.go @@ -118,7 +118,7 @@ func (fa *filterAnd) initByFieldTokens() { } func getCommonTokensForAndFilters(filters []filter) []fieldTokens { - m := make(map[string]map[string]struct{}) + m := make(map[string][]string) var fieldNames []string mergeFieldTokens := func(fieldName string, tokens []string) { @@ -127,15 +127,10 @@ func getCommonTokensForAndFilters(filters []filter) []fieldTokens { } fieldName = getCanonicalColumnName(fieldName) - mTokens, ok := m[fieldName] - if !ok { + if _, ok := m[fieldName]; !ok { fieldNames = append(fieldNames, fieldName) - mTokens = make(map[string]struct{}) - m[fieldName] = mTokens - } - for _, token := range tokens { - mTokens[token] = struct{}{} } + m[fieldName] = append(m[fieldName], tokens...) } for _, f := range filters { @@ -169,8 +164,13 @@ func getCommonTokensForAndFilters(filters []filter) []fieldTokens { var byFieldTokens []fieldTokens for _, fieldName := range fieldNames { mTokens := m[fieldName] + seenTokens := make(map[string]struct{}) tokens := make([]string, 0, len(mTokens)) - for token := range mTokens { + for _, token := range mTokens { + if _, ok := seenTokens[token]; ok { + continue + } + seenTokens[token] = struct{}{} tokens = append(tokens, token) } diff --git a/lib/logstorage/filter_and_test.go b/lib/logstorage/filter_and_test.go index 41dd2d19fa..223fffb7ac 100644 --- a/lib/logstorage/filter_and_test.go +++ b/lib/logstorage/filter_and_test.go @@ -1,6 +1,7 @@ package logstorage import ( + "reflect" "testing" ) @@ -75,3 +76,92 @@ func TestFilterAnd(t *testing.T) { f(`foo:foo* AND !foo:~bar`, []int{0}) f(`foo:foo* AND foo:!~bar`, []int{0}) } + +func TestGetCommonTokensForAndFilters(t *testing.T) { + f := func(qStr string, tokensExpected []fieldTokens) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("unexpected error in ParseQuery: %s", err) + } + fa, ok := q.f.(*filterAnd) + if !ok { + t.Fatalf("unexpected filter type: %T; want *filterAnd", q.f) + } + tokens := getCommonTokensForAndFilters(fa.filters) + + if len(tokens) != len(tokensExpected) { + t.Fatalf("unexpected len(tokens); got %d; want %d\ntokens\n%#v\ntokensExpected\n%#v", len(tokens), len(tokensExpected), tokens, tokensExpected) + } + for i, ft := range tokens { + ftExpected := tokensExpected[i] + if ft.field != ftExpected.field { + t.Fatalf("unexpected field; got %q; want %q\ntokens\n%q\ntokensExpected\n%q", ft.field, ftExpected.field, ft.tokens, ftExpected.tokens) + } + if !reflect.DeepEqual(ft.tokens, ftExpected.tokens) { + t.Fatalf("unexpected tokens for field %q; got %q; want %q", ft.field, ft.tokens, ftExpected.tokens) + } + } + } + + f(`foo AND bar`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo", "bar"}, + }, + }) + + f(`="foo bar" AND ="a foo"* AND "bar foo" AND "foo bar"* AND ~"foo qwe bar.+" AND seq(x, bar, "foo qwe")`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo", "bar", "a", "qwe", "x"}, + }, + }) + + // extract common tokens from OR filters + f(`foo AND (bar OR ~"x bar baz")`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo", "bar"}, + }, + }) + + // star matches any non-empty token, so it is skipped + f(`foo bar *`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo", "bar"}, + }, + }) + f(`* *`, nil) + + // empty filter must be skipped + f(`foo "" bar`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo", "bar"}, + }, + }) + f(`"" ""`, nil) + + // unknown filters must be skipped + f(`_time:5m !foo "bar baz" x`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"bar", "baz", "x"}, + }, + }) + + // distinct field names + f(`foo:x bar:"a bc" (foo:y OR (bar:qwe AND foo:"z y a"))`, []fieldTokens{ + { + field: "foo", + tokens: []string{"x", "y"}, + }, + { + field: "bar", + tokens: []string{"a", "bc"}, + }, + }) +} diff --git a/lib/logstorage/filter_or.go b/lib/logstorage/filter_or.go index ab268f7454..39e49a0d66 100644 --- a/lib/logstorage/filter_or.go +++ b/lib/logstorage/filter_or.go @@ -182,17 +182,11 @@ func getCommonTokensForOrFilters(filters []filter) []fieldTokens { if len(tokenss) != len(filters) { // The filter for the given fieldName is missing in some OR filters, // so it is impossible to extract common tokens from these filters. - // Give up extracting common tokens from the remaining filters, - // since they may not cover log entries matching fieldName filters. - // This fixes https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 - return nil + continue } commonTokens := getCommonTokens(tokenss) if len(commonTokens) == 0 { - // Give up extracting common tokens from the remaining filters, - // since they may not cover log entries matching fieldName filters. - // This fixes https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6554 - return nil + continue } byFieldTokens = append(byFieldTokens, fieldTokens{ field: fieldName, diff --git a/lib/logstorage/filter_or_test.go b/lib/logstorage/filter_or_test.go index c7bc860eee..371941a5ca 100644 --- a/lib/logstorage/filter_or_test.go +++ b/lib/logstorage/filter_or_test.go @@ -1,6 +1,7 @@ package logstorage import ( + "reflect" "testing" ) @@ -70,3 +71,100 @@ func TestFilterOr(t *testing.T) { f(`foo:baz or !foo:~foo`, []int{2, 3, 5, 7, 8, 9}) f(`foo:baz or foo:!~foo`, []int{2, 3, 5, 7, 8, 9}) } + +func TestGetCommonTokensForOrFilters(t *testing.T) { + f := func(qStr string, tokensExpected []fieldTokens) { + t.Helper() + + q, err := ParseQuery(qStr) + if err != nil { + t.Fatalf("unexpected error in ParseQuery: %s", err) + } + fo, ok := q.f.(*filterOr) + if !ok { + t.Fatalf("unexpected filter type: %T; want *filterOr", q.f) + } + tokens := getCommonTokensForOrFilters(fo.filters) + + if len(tokens) != len(tokensExpected) { + t.Fatalf("unexpected len(tokens); got %d; want %d\ntokens\n%#v\ntokensExpected\n%#v", len(tokens), len(tokensExpected), tokens, tokensExpected) + } + for i, ft := range tokens { + ftExpected := tokensExpected[i] + if ft.field != ftExpected.field { + t.Fatalf("unexpected field; got %q; want %q\ntokens\n%q\ntokensExpected\n%q", ft.field, ftExpected.field, ft.tokens, ftExpected.tokens) + } + if !reflect.DeepEqual(ft.tokens, ftExpected.tokens) { + t.Fatalf("unexpected tokens for field %q; got %q; want %q", ft.field, ft.tokens, ftExpected.tokens) + } + } + } + + // no common tokens + f(`foo OR bar`, nil) + + // star filter matches non-empty value; it is skipped, since one of OR filters may contain an empty filter + f(`* OR foo`, nil) + f(`foo or *`, nil) + f(`* or *`, nil) + f(`"" or * or foo`, nil) + + // empty filter suppresses all the common tokens. + f(`"" or foo or "foo bar"`, nil) + f(`foo or ""`, nil) + f(`"" or ""`, nil) + + // common foo token + f(`foo OR "foo bar" OR ="a foo" OR ="foo bar"* OR "bar foo "* OR seq("bar foo", "baz") OR ~"a.+ foo bar"`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo"}, + }, + }) + + // regexp ending on foo token doesn't contain foo token, since it may match foobar. + f(`foo OR "foo bar" OR ="a foo" OR ="foo bar"* OR "bar foo "* OR seq("bar foo", "baz") OR ~"a.+ foo"`, nil) + + // regexp starting from foo token doesn't contain foo token, since it may match barfoo. + f(`foo OR "foo bar" OR ="a foo" OR ="foo bar"* OR "bar foo "* OR seq("bar foo", "baz") OR ~"foo bar"`, nil) + + // prefix filter ending on foo doesn't contain foo token, since it may match foobar. + f(`foo OR "foo bar" OR ="a foo" OR ="foo bar"* OR "bar foo"* OR seq("bar foo", "baz") OR ~"a.+ foo bar"`, nil) + + // bar and foo are common tokens + f(`"bar foo baz" OR (foo AND "bar x" AND foobar)`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"bar", "foo"}, + }, + }) + + // bar and foo are common tokens, x:foobar should be ignored, since it doesn't present in every OR filter + f(`"bar foo baz" OR (foo AND "bar x" AND x:foobar)`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"bar", "foo"}, + }, + }) + + // common tokens for distinct fields + f(`(foo AND x:a) OR (x:"b a c" AND ~"aaa foo ")`, []fieldTokens{ + { + field: "_msg", + tokens: []string{"foo"}, + }, + { + field: "x", + tokens: []string{"a"}, + }, + }) + + // zero common tokens for distinct fields + f(`(foo AND x:a) OR (x:"b c" AND ~"aaa foo" AND y:z)`, nil) + + // negative filter removes all the matching + f(`foo OR !"foo bar"`, nil) + + // time filter removes all the matching + f(`_time:5m or foo`, nil) +} From 657988ac3aabad2d2f6021040633a202587b7bf0 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 14:13:38 +0200 Subject: [PATCH 019/128] app/vlselect: consistently reuse the original query timestamp when executing /select/logsql/query with positive limit=N query arg Previously the query could return incorrect results, since the query timestamp was updated with every Query.Clone() call during iterative search for the time range with up to limit=N rows. While at it, optimize queries, which find low number of matching logs, while spend a lot of CPU time for searching across big number of logs. The optimization reduces the upper bound of the time range to search if the current time range contains zero matching rows. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785 --- app/vlselect/logsql/logsql.go | 54 ++++++++++++++++++++++++++++------- lib/logstorage/parser.go | 4 ++- lib/logstorage/parser_test.go | 1 + 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/app/vlselect/logsql/logsql.go b/app/vlselect/logsql/logsql.go index e12e53ed08..6b25bb4094 100644 --- a/app/vlselect/logsql/logsql.go +++ b/app/vlselect/logsql/logsql.go @@ -844,6 +844,7 @@ func getLastNQueryResults(ctx context.Context, tenantIDs []logstorage.TenantID, limitUpper := 2 * limit q.AddPipeLimit(uint64(limitUpper)) q.Optimize() + rows, err := getQueryResultsWithLimit(ctx, tenantIDs, q, limitUpper) if err != nil { return nil, err @@ -854,7 +855,7 @@ func getLastNQueryResults(ctx context.Context, tenantIDs []logstorage.TenantID, return rows, nil } - // Slow path - search for the time range containing up to limitUpper rows. + // Slow path - adjust time range for selecting up to limitUpper rows start, end := q.GetFilterTimeRange() d := end/2 - start/2 start += d @@ -868,18 +869,44 @@ func getLastNQueryResults(ctx context.Context, tenantIDs []logstorage.TenantID, return nil, err } - if len(rows) >= limit && len(rows) < limitUpper || d == 0 { + if d == 0 || start >= end { + // The [start ... end] time range equals one nanosecond. + // Just return up to limit rows. + if len(rows) > limit { + rows = rows[:limit] + } + return rows, nil + } + + dLastBit := d & 1 + d /= 2 + + if len(rows) >= limitUpper { + // The number of found rows on the [start ... end] time range exceeds limitUpper, + // so reduce the time range to [start+d ... end]. + start += d + continue + } + if len(rows) >= limit { + // The number of found rows is in the range [limit ... limitUpper). + // This means that found rows contains the needed limit rows with the biggest timestamps. rows = getLastNRows(rows, limit) return rows, nil } - lastBit := d & 1 - d /= 2 - if len(rows) > limit { - start += d - } else { - start -= d + lastBit + // The number of found rows on [start ... end] time range is below the limit. + // This means the time range doesn't cover the needed logs, so it must be extended. + + if len(rows) == 0 { + // The [start ... end] time range doesn't contain any rows, so change it to [start-d ... start). + end = start - 1 + start -= d + dLastBit + continue } + + // The number of found rows on [start ... end] time range is bigger than 0 but smaller than limit. + // Increase the time range to [start-d ... end]. + start -= d + dLastBit } } @@ -900,20 +927,25 @@ func getQueryResultsWithLimit(ctx context.Context, tenantIDs []logstorage.Tenant var rows []row var rowsLock sync.Mutex writeBlock := func(_ uint, timestamps []int64, columns []logstorage.BlockColumn) { - rowsLock.Lock() - defer rowsLock.Unlock() + clonedColumnNames := make([]string, len(columns)) + for i, c := range columns { + clonedColumnNames[i] = strings.Clone(c.Name) + } for i, timestamp := range timestamps { fields := make([]logstorage.Field, len(columns)) for j := range columns { f := &fields[j] - f.Name = strings.Clone(columns[j].Name) + f.Name = clonedColumnNames[j] f.Value = strings.Clone(columns[j].Values[i]) } + + rowsLock.Lock() rows = append(rows, row{ timestamp: timestamp, fields: fields, }) + rowsLock.Unlock() } if len(rows) >= limit { diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 87ff9dc6be..58ce041b54 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -338,7 +338,8 @@ func (q *Query) AddCountByTimePipe(step, off int64, fields []string) { // Clone returns a copy of q. func (q *Query) Clone() *Query { qStr := q.String() - qCopy, err := ParseQuery(qStr) + timestamp := q.GetTimestamp() + qCopy, err := ParseQueryAtTimestamp(qStr, timestamp) if err != nil { logger.Panicf("BUG: cannot parse %q: %s", qStr, err) } @@ -353,6 +354,7 @@ func (q *Query) CanReturnLastNResults() bool { *pipeFieldValues, *pipeLimit, *pipeOffset, + *pipeTop, *pipeSort, *pipeStats, *pipeUniq: diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index 453080b21a..ca78dd1f5f 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -2032,6 +2032,7 @@ func TestQueryCanReturnLastNResults(t *testing.T) { f("* | uniq (x)", false) f("* | field_names", false) f("* | field_values x", false) + f("* | top 5 by (x)", false) } From 4fbdde585200975101ecd96b5345b3553d13fc76 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 19:26:45 +0200 Subject: [PATCH 020/128] deployment/docker: update base Alpine docker image from 3.20.2 to 3.20.3 See https://alpinelinux.org/posts/Alpine-3.17.10-3.18.9-3.19.4-3.20.3-released.html --- app/vmui/Dockerfile-web | 2 +- deployment/docker/Makefile | 4 ++-- docs/changelog/CHANGELOG.md | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/vmui/Dockerfile-web b/app/vmui/Dockerfile-web index 16e902e9fa..a7936f25d9 100644 --- a/app/vmui/Dockerfile-web +++ b/app/vmui/Dockerfile-web @@ -6,7 +6,7 @@ COPY web/ /build/ RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o web-amd64 github.com/VictoriMetrics/vmui/ && \ GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o web-windows github.com/VictoriMetrics/vmui/ -FROM alpine:3.20.2 +FROM alpine:3.20.3 USER root COPY --from=build-web-stage /build/web-amd64 /app/web diff --git a/deployment/docker/Makefile b/deployment/docker/Makefile index a0a38b979e..e762dc4842 100644 --- a/deployment/docker/Makefile +++ b/deployment/docker/Makefile @@ -2,9 +2,9 @@ DOCKER_NAMESPACE ?= victoriametrics -ROOT_IMAGE ?= alpine:3.20.2 +ROOT_IMAGE ?= alpine:3.20.3 ROOT_IMAGE_SCRATCH ?= scratch -CERTS_IMAGE := alpine:3.20.2 +CERTS_IMAGE := alpine:3.20.3 GO_BUILDER_IMAGE := golang:1.23.1-alpine BUILDER_IMAGE := local/builder:2.0.0-$(shell echo $(GO_BUILDER_IMAGE) | tr :/ __)-1 diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 2df6d30fa5..bc918f324f 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -21,6 +21,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). **Update note 1: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** * SECURITY: upgrade Go builder from Go1.23.0 to Go1.23.1. See the list of issues addressed in [Go1.23.1](https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved). +* SECURITY: upgrade base docker image (Alpine) from 3.20.2 to 3.20.3. See [alpine 3.20.3 release notes](https://alpinelinux.org/posts/Alpine-3.17.10-3.18.9-3.19.4-3.20.3-released.html). * FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. From 563a50b54783655172f1d5d9a9f1cef8951b7472 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 20:06:30 +0200 Subject: [PATCH 021/128] Makefile: remove '-d' flag from 'go get', since this flag is deprecated See https://go.dev/doc/go-get-install-deprecation --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8bb2b251e4..814653b798 100644 --- a/Makefile +++ b/Makefile @@ -467,8 +467,8 @@ benchmark-pure: CGO_ENABLED=0 go test -bench=. ./app/... vendor-update: - go get -u -d ./lib/... - go get -u -d ./app/... + go get -u ./lib/... + go get -u ./app/... go mod tidy -compat=1.22 go mod vendor From 6e4d29fc036ef167be13aad4e2121caac11cd452 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 21:01:15 +0200 Subject: [PATCH 022/128] Makefile: upgrade `go mod tidy` compatibility mode from Go1.22 to Go1.23 This is a follow-up for 1b9f3b39b4b2026b3e9cdac8c25f194c0ef472f1 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 814653b798..75748b4d4a 100644 --- a/Makefile +++ b/Makefile @@ -469,7 +469,7 @@ benchmark-pure: vendor-update: go get -u ./lib/... go get -u ./app/... - go mod tidy -compat=1.22 + go mod tidy -compat=1.23 go mod vendor app-local: From c6faab77f92072ff73812e57a0d7a7479995b42c Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 21:05:06 +0200 Subject: [PATCH 023/128] vendor: run `make vendor-update` --- go.mod | 106 +- go.sum | 311 +- vendor/cloud.google.com/go/auth/CHANGES.md | 57 + vendor/cloud.google.com/go/auth/auth.go | 27 +- .../go/auth/credentials/detect.go | 6 +- .../go/auth/credentials/filetypes.go | 12 +- .../externalaccount/externalaccount.go | 44 +- .../internal/externalaccount/url_provider.go | 1 + .../internal/externalaccount/x509_provider.go | 63 + .../go/auth/grpctransport/directpath.go | 4 +- .../go/auth/grpctransport/grpctransport.go | 27 +- .../go/auth/httptransport/httptransport.go | 2 + .../go/auth/httptransport/transport.go | 29 +- .../go/auth/internal/credsfile/filetype.go | 30 +- .../go/auth/internal/internal.go | 20 +- .../go/auth/internal/transport/cba.go | 82 +- .../transport/cert/secureconnect_cert.go | 10 +- .../go/auth/internal/transport/s2a.go | 100 +- .../go/auth/internal/transport/transport.go | 6 +- .../go/auth/oauth2adapt/CHANGES.md | 7 + .../cloud.google.com/go/auth/threelegged.go | 2 +- vendor/cloud.google.com/go/iam/CHANGES.md | 14 + .../go/internal/.repo-metadata-full.json | 48 +- .../azure-sdk-for-go/sdk/azcore/CHANGELOG.md | 10 + .../sdk/azcore/internal/shared/constants.go | 2 +- .../sdk/azcore/runtime/policy_http_trace.go | 11 +- .../sdk/azcore/runtime/policy_retry.go | 3 +- .../aws-sdk-go-v2/aws/go_module_metadata.go | 2 +- .../aws/protocol/eventstream/CHANGELOG.md | 4 + .../eventstream/go_module_metadata.go | 2 +- .../aws/signer/internal/v4/headers.go | 1 - .../aws/aws-sdk-go-v2/aws/signer/v4/v4.go | 13 +- .../aws/aws-sdk-go-v2/config/CHANGELOG.md | 25 + .../config/go_module_metadata.go | 2 +- .../aws-sdk-go-v2/credentials/CHANGELOG.md | 21 + .../credentials/go_module_metadata.go | 2 +- .../credentials/ssocreds/sso_cached_token.go | 2 +- .../feature/ec2/imds/CHANGELOG.md | 9 + .../feature/ec2/imds/go_module_metadata.go | 2 +- .../feature/s3/manager/CHANGELOG.md | 37 + .../feature/s3/manager/go_module_metadata.go | 2 +- .../internal/configsources/CHANGELOG.md | 9 + .../configsources/go_module_metadata.go | 2 +- .../endpoints/awsrulesfn/partitions.json | 3 + .../internal/endpoints/v2/CHANGELOG.md | 9 + .../endpoints/v2/go_module_metadata.go | 2 +- .../aws-sdk-go-v2/internal/ini/CHANGELOG.md | 4 + .../internal/ini/go_module_metadata.go | 2 +- .../aws-sdk-go-v2/internal/v4a/CHANGELOG.md | 9 + .../internal/v4a/go_module_metadata.go | 2 +- .../internal/accept-encoding/CHANGELOG.md | 4 + .../accept-encoding/go_module_metadata.go | 2 +- .../service/internal/checksum/CHANGELOG.md | 9 + .../internal/checksum/go_module_metadata.go | 2 +- .../internal/presigned-url/CHANGELOG.md | 9 + .../presigned-url/go_module_metadata.go | 2 +- .../service/internal/s3shared/CHANGELOG.md | 9 + .../internal/s3shared/go_module_metadata.go | 2 +- .../aws/aws-sdk-go-v2/service/s3/CHANGELOG.md | 30 + .../service/s3/api_op_AbortMultipartUpload.go | 19 +- .../s3/api_op_CompleteMultipartUpload.go | 21 + .../service/s3/api_op_CopyObject.go | 19 +- .../s3/api_op_CreateMultipartUpload.go | 43 +- .../service/s3/api_op_GetObject.go | 6 + .../service/s3/api_op_HeadBucket.go | 26 +- .../service/s3/api_op_HeadObject.go | 21 +- .../service/s3/api_op_ListBuckets.go | 115 + .../service/s3/api_op_ListDirectoryBuckets.go | 5 +- .../service/s3/api_op_ListMultipartUploads.go | 25 +- .../service/s3/api_op_ListObjectVersions.go | 20 +- .../service/s3/api_op_ListObjects.go | 35 +- .../service/s3/api_op_ListObjectsV2.go | 33 +- .../service/s3/api_op_PutBucketEncryption.go | 8 +- .../service/s3/api_op_PutBucketVersioning.go | 5 + .../service/s3/api_op_PutObject.go | 16 + .../service/s3/api_op_RestoreObject.go | 5 + .../service/s3/api_op_SelectObjectContent.go | 15 +- .../service/s3/api_op_UploadPart.go | 43 +- .../service/s3/api_op_UploadPartCopy.go | 39 +- .../aws-sdk-go-v2/service/s3/deserializers.go | 13 + .../service/s3/go_module_metadata.go | 2 +- .../s3/internal/endpoints/endpoints.go | 11 +- .../aws-sdk-go-v2/service/s3/presign_post.go | 433 + .../aws-sdk-go-v2/service/s3/serializers.go | 22 + .../aws-sdk-go-v2/service/s3/types/types.go | 69 +- .../aws-sdk-go-v2/service/sso/CHANGELOG.md | 13 + .../service/sso/go_module_metadata.go | 2 +- .../sso/internal/endpoints/endpoints.go | 2 +- .../service/ssooidc/CHANGELOG.md | 13 + .../service/ssooidc/go_module_metadata.go | 2 +- .../ssooidc/internal/endpoints/endpoints.go | 2 +- .../aws-sdk-go-v2/service/sts/CHANGELOG.md | 17 + .../service/sts/go_module_metadata.go | 2 +- .../sts/internal/endpoints/endpoints.go | 5 +- .../aws/aws-sdk-go/aws/endpoints/defaults.go | 9 + .../github.com/aws/aws-sdk-go/aws/version.go | 2 +- vendor/github.com/aws/smithy-go/CHANGELOG.md | 6 + vendor/github.com/aws/smithy-go/README.md | 74 +- .../aws/smithy-go/go_module_metadata.go | 2 +- .../prometheus/client_golang/NOTICE | 5 - .../client_golang/prometheus/go_collector.go | 55 +- .../prometheus/go_collector_latest.go | 19 +- .../client_golang/prometheus/histogram.go | 266 +- .../internal/go_collector_options.go | 2 + .../client_golang/prometheus/metric.go | 2 +- .../prometheus/process_collector.go | 29 +- .../prometheus/process_collector_other.go | 14 + .../client_golang/prometheus/registry.go | 19 +- .../client_golang/prometheus/summary.go | 42 + .../testutil/promlint/validation.go | 1 + .../validations/duplicate_validations.go | 37 + .../validations/generic_name_validations.go | 26 +- .../prometheus/testutil/testutil.go | 114 +- .../client_golang/prometheus/vec.go | 2 +- .../prometheus/common/config/headers.go | 63 +- .../prometheus/common/config/http_config.go | 4 +- .../prometheus/common/expfmt/decode.go | 14 +- .../prometheus/common/expfmt/encode.go | 24 +- .../prometheus/common/expfmt/expfmt.go | 76 +- .../common/expfmt/openmetrics_create.go | 2 +- .../prometheus/common/expfmt/text_create.go | 4 +- .../prometheus/common/expfmt/text_parse.go | 162 +- .../prometheus/common/model/labels.go | 27 +- .../prometheus/common/model/metric.go | 31 +- .../prometheus/prometheus/config/config.go | 54 +- .../prometheus/discovery/manager.go | 10 + .../model/histogram/float_histogram.go | 320 +- .../prometheus/model/histogram/generic.go | 107 +- .../prometheus/model/histogram/histogram.go | 222 +- .../prometheus/model/labels/labels_common.go | 5 + .../model/labels/labels_dedupelabels.go | 94 +- .../model/labels/labels_stringlabels.go | 5 - .../prometheus/model/labels/matcher.go | 2 +- .../prometheus/model/labels/regexp.go | 248 +- .../prometheus/model/relabel/relabel.go | 5 + .../prometheus/prometheus/prompb/codec.go | 201 + .../prometheus/prometheus/prompb/custom.go | 8 - .../prompb/io/prometheus/write/v2/codec.go | 216 + .../prompb/io/prometheus/write/v2/custom.go | 165 + .../prompb/io/prometheus/write/v2/symbols.go | 83 + .../prompb/io/prometheus/write/v2/types.pb.go | 3241 +++++ .../prompb/io/prometheus/write/v2/types.proto | 260 + .../prometheus/prometheus/scrape/manager.go | 8 +- .../prometheus/prometheus/scrape/metrics.go | 10 + .../prometheus/prometheus/scrape/scrape.go | 38 +- .../prometheus/prometheus/scrape/target.go | 23 +- .../prometheus/storage/interface.go | 18 +- .../prometheus/storage/memoized_iterator.go | 5 + .../prometheus/prometheus/storage/merge.go | 86 +- .../prometheus/prometheus/storage/noop.go | 8 +- .../prometheus/storage/remote/client.go | 91 +- .../prometheus/storage/remote/codec.go | 224 +- .../storage/remote/max_timestamp.go | 6 - .../storage/remote/metadata_watcher.go | 4 +- .../prometheus/normalize_name.go | 2 - .../otlptranslator/prometheus/unit_to_ucum.go | 1 - .../prometheusremotewrite/helper.go | 14 +- .../prometheusremotewrite/histograms.go | 19 +- .../storage/remote/queue_manager.go | 584 +- .../prometheus/storage/remote/read.go | 4 +- .../prometheus/storage/remote/read_handler.go | 53 +- .../prometheus/storage/remote/stats.go | 107 + .../prometheus/storage/remote/storage.go | 4 +- .../prometheus/storage/remote/write.go | 12 +- .../storage/remote/write_handler.go | 501 +- .../prometheus/storage/secondary.go | 8 +- .../prometheus/prometheus/tsdb/block.go | 20 +- .../prometheus/prometheus/tsdb/blockwriter.go | 9 +- .../tsdb/chunkenc/float_histogram.go | 52 +- .../prometheus/tsdb/chunkenc/histogram.go | 34 +- .../tsdb/chunkenc/histogram_meta.go | 90 +- .../prometheus/tsdb/chunkenc/xor.go | 2 +- .../prometheus/tsdb/chunks/chunks.go | 9 - .../prometheus/prometheus/tsdb/compact.go | 90 +- .../prometheus/prometheus/tsdb/db.go | 118 +- .../prometheus/prometheus/tsdb/head.go | 34 +- .../prometheus/prometheus/tsdb/head_append.go | 111 +- .../prometheus/tsdb/head_dedupelabels.go | 95 + .../prometheus/prometheus/tsdb/head_other.go | 32 + .../prometheus/prometheus/tsdb/head_read.go | 170 +- .../prometheus/prometheus/tsdb/head_wal.go | 8 +- .../prometheus/prometheus/tsdb/index/index.go | 14 +- .../prometheus/tsdb/index/postings.go | 154 +- .../prometheus/prometheus/tsdb/ooo_head.go | 109 +- .../prometheus/tsdb/ooo_head_read.go | 96 +- .../prometheus/prometheus/tsdb/querier.go | 15 +- .../prometheus/tsdb/record/record.go | 2 +- .../prometheus/prometheus/tsdb/testutil.go | 176 + .../prometheus/tsdb/tsdbutil/histogram.go | 38 +- .../prometheus/tsdb/wlog/watcher.go | 17 +- .../util/annotations/annotations.go | 99 +- .../google.golang.org/grpc/otelgrpc/config.go | 28 + .../grpc/otelgrpc/stats_handler.go | 8 +- .../grpc/otelgrpc/version.go | 2 +- .../net/http/otelhttp/common.go | 7 - .../net/http/otelhttp/config.go | 15 +- .../net/http/otelhttp/handler.go | 93 +- .../otelhttp/internal/request/body_wrapper.go | 75 + .../internal/request/resp_writer_wrapper.go | 112 + .../net/http/otelhttp/internal/semconv/env.go | 97 +- .../semconv/{v1.24.0.go => httpconv.go} | 153 +- .../http/otelhttp/internal/semconv/util.go | 11 +- .../http/otelhttp/internal/semconv/v1.20.0.go | 118 + .../otelhttp/internal/semconvutil/netconv.go | 2 +- .../net/http/otelhttp/transport.go | 64 +- .../net/http/otelhttp/version.go | 2 +- .../instrumentation/net/http/otelhttp/wrap.go | 99 - vendor/go.opentelemetry.io/otel/.golangci.yml | 2 + vendor/go.opentelemetry.io/otel/CHANGELOG.md | 67 +- vendor/go.opentelemetry.io/otel/CODEOWNERS | 2 +- .../go.opentelemetry.io/otel/CONTRIBUTING.md | 2 +- vendor/go.opentelemetry.io/otel/Makefile | 13 +- vendor/go.opentelemetry.io/otel/README.md | 37 +- vendor/go.opentelemetry.io/otel/RELEASING.md | 1 + .../otel/baggage/baggage.go | 150 +- .../go.opentelemetry.io/otel/codes/codes.go | 2 +- vendor/go.opentelemetry.io/otel/doc.go | 2 + .../otel/internal/rawhelpers.go | 9 +- .../go.opentelemetry.io/otel/metric/meter.go | 13 + .../otel/semconv/v1.24.0/README.md | 3 - .../otel/semconv/v1.24.0/attribute_group.go | 4387 ------ .../otel/semconv/v1.24.0/event.go | 200 - .../otel/semconv/v1.24.0/resource.go | 2545 ---- .../otel/semconv/v1.24.0/trace.go | 1323 -- .../otel/semconv/v1.26.0/README.md | 3 + .../otel/semconv/v1.26.0/attribute_group.go | 8996 ++++++++++++ .../otel/semconv/{v1.24.0 => v1.26.0}/doc.go | 4 +- .../semconv/{v1.24.0 => v1.26.0}/exception.go | 2 +- .../semconv/{v1.24.0 => v1.26.0}/metric.go | 588 +- .../semconv/{v1.24.0 => v1.26.0}/schema.go | 4 +- .../otel/trace/provider.go | 59 + vendor/go.opentelemetry.io/otel/trace/span.go | 177 + .../go.opentelemetry.io/otel/trace/trace.go | 249 - .../go.opentelemetry.io/otel/trace/tracer.go | 37 + .../otel/trace/tracestate.go | 10 + .../otel/verify_released_changelog.sh | 42 + vendor/go.opentelemetry.io/otel/version.go | 2 +- vendor/go.opentelemetry.io/otel/versions.yaml | 8 +- .../chacha20poly1305/chacha20poly1305_amd64.s | 11493 +++++++++++++--- .../x/crypto/internal/poly1305/sum_amd64.s | 133 +- vendor/golang.org/x/oauth2/LICENSE | 4 +- vendor/golang.org/x/oauth2/token.go | 7 + vendor/golang.org/x/sys/cpu/cpu.go | 19 + .../golang.org/x/sys/cpu/cpu_linux_noinit.go | 2 +- .../golang.org/x/sys/cpu/cpu_linux_riscv64.go | 137 + vendor/golang.org/x/sys/cpu/cpu_riscv64.go | 11 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 1 + .../golang.org/x/sys/unix/syscall_darwin.go | 37 + vendor/golang.org/x/sys/unix/syscall_hurd.go | 1 + .../x/sys/unix/zerrors_darwin_amd64.go | 7 + .../x/sys/unix/zerrors_darwin_arm64.go | 7 + .../x/sys/unix/zerrors_zos_s390x.go | 2 + .../x/sys/unix/zsyscall_darwin_amd64.go | 20 + .../x/sys/unix/zsyscall_darwin_amd64.s | 5 + .../x/sys/unix/zsyscall_darwin_arm64.go | 20 + .../x/sys/unix/zsyscall_darwin_arm64.s | 5 + .../x/sys/unix/ztypes_darwin_amd64.go | 13 + .../x/sys/unix/ztypes_darwin_arm64.go | 13 + .../x/sys/unix/ztypes_freebsd_386.go | 1 + .../x/sys/unix/ztypes_freebsd_amd64.go | 1 + .../x/sys/unix/ztypes_freebsd_arm.go | 1 + .../x/sys/unix/ztypes_freebsd_arm64.go | 1 + .../x/sys/unix/ztypes_freebsd_riscv64.go | 1 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 5 +- .../x/sys/unix/ztypes_linux_riscv64.go | 33 + .../x/sys/windows/syscall_windows.go | 4 + .../golang.org/x/sys/windows/types_windows.go | 45 + .../x/sys/windows/zsyscall_windows.go | 38 + vendor/golang.org/x/time/LICENSE | 4 +- .../google.golang.org/api/internal/creds.go | 17 - .../api/internal/settings.go | 3 +- .../google.golang.org/api/internal/version.go | 2 +- .../api/storage/v1/storage-api.json | 100 +- .../api/storage/v1/storage-gen.go | 165 +- .../api/transport/grpc/dial.go | 11 - .../api/transport/http/dial.go | 11 - .../googleapis/api/annotations/client.pb.go | 426 +- vendor/google.golang.org/grpc/MAINTAINERS.md | 33 +- vendor/google.golang.org/grpc/SECURITY.md | 2 +- .../google.golang.org/grpc/backoff/backoff.go | 2 +- .../grpc/balancer/balancer.go | 21 + .../grpclb/grpc_lb_v1/load_balancer.pb.go | 2 +- .../grpc_lb_v1/load_balancer_grpc.pb.go | 85 +- .../grpc/balancer/grpclb/grpclb.go | 2 +- .../grpc/balancer/pickfirst/pickfirst.go | 2 +- .../grpc/balancer_wrapper.go | 44 +- .../grpc_binarylog_v1/binarylog.pb.go | 2 +- vendor/google.golang.org/grpc/clientconn.go | 114 +- vendor/google.golang.org/grpc/codec.go | 69 +- .../alts/internal/conn/aeadrekey.go | 2 +- .../alts/internal/conn/aes128gcmrekey.go | 2 +- .../internal/handshaker/service/service.go | 4 +- .../internal/proto/grpc_gcp/altscontext.pb.go | 2 +- .../internal/proto/grpc_gcp/handshaker.pb.go | 4 +- .../proto/grpc_gcp/handshaker_grpc.pb.go | 23 +- .../grpc_gcp/transport_security_common.pb.go | 2 +- vendor/google.golang.org/grpc/dialoptions.go | 27 +- vendor/google.golang.org/grpc/doc.go | 2 +- .../grpc/encoding/encoding.go | 5 +- .../grpc/encoding/encoding_v2.go | 81 + .../grpc/encoding/proto/proto.go | 44 +- .../grpc/experimental/stats/metricregistry.go | 270 + .../grpc/experimental/stats/metrics.go | 114 + .../grpc/grpclog/component.go | 10 +- .../google.golang.org/grpc/grpclog/grpclog.go | 104 +- .../grpc/grpclog/internal/grpclog.go | 26 + .../grpc/grpclog/internal/logger.go | 87 + .../internal/loggerv2.go} | 178 +- .../google.golang.org/grpc/grpclog/logger.go | 59 +- .../grpc/grpclog/loggerv2.go | 181 +- .../grpc/internal/channelz/channelmap.go | 2 +- .../grpc/internal/envconfig/envconfig.go | 4 + .../grpc/internal/experimental.go | 8 +- .../{prefixLogger.go => prefix_logger.go} | 40 +- .../internal/grpcsync/callback_serializer.go | 24 +- .../grpc/internal/grpcsync/pubsub.go | 4 +- .../grpc/internal/internal.go | 21 + .../grpc/internal/stats/labels.go | 42 + .../internal/stats/metrics_recorder_list.go | 95 + .../grpc/internal/tcp_keepalive_unix.go | 2 +- .../grpc/internal/tcp_keepalive_windows.go | 2 +- .../grpc/internal/transport/controlbuf.go | 251 +- .../grpc/internal/transport/handler_server.go | 45 +- .../grpc/internal/transport/http2_client.go | 61 +- .../grpc/internal/transport/http2_server.go | 47 +- .../grpc/internal/transport/http_util.go | 22 +- .../grpc/internal/transport/proxy.go | 10 +- .../grpc/internal/transport/transport.go | 244 +- .../google.golang.org/grpc/mem/buffer_pool.go | 194 + .../grpc/mem/buffer_slice.go | 224 + vendor/google.golang.org/grpc/mem/buffers.go | 252 + .../grpc/metadata/metadata.go | 7 +- vendor/google.golang.org/grpc/preloader.go | 28 +- vendor/google.golang.org/grpc/regenerate.sh | 123 - .../grpc/resolver_wrapper.go | 9 +- vendor/google.golang.org/grpc/rpc_util.go | 299 +- vendor/google.golang.org/grpc/server.go | 98 +- .../grpc/shared_buffer_pool.go | 154 - vendor/google.golang.org/grpc/stats/stats.go | 6 - vendor/google.golang.org/grpc/stream.go | 213 +- vendor/google.golang.org/grpc/version.go | 2 +- .../apimachinery/pkg/util/runtime/runtime.go | 135 +- .../util/workqueue/default_rate_limiters.go | 139 +- .../util/workqueue/delaying_queue.go | 66 +- .../k8s.io/client-go/util/workqueue/queue.go | 153 +- .../util/workqueue/rate_limiting_queue.go | 64 +- vendor/modules.txt | 172 +- 347 files changed, 34382 insertions(+), 15315 deletions(-) create mode 100644 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go create mode 100644 vendor/github.com/aws/aws-sdk-go-v2/service/s3/presign_post.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/duplicate_validations.go create mode 100644 vendor/github.com/prometheus/prometheus/prompb/codec.go create mode 100644 vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/codec.go create mode 100644 vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/custom.go create mode 100644 vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/symbols.go create mode 100644 vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.pb.go create mode 100644 vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.proto create mode 100644 vendor/github.com/prometheus/prometheus/storage/remote/stats.go create mode 100644 vendor/github.com/prometheus/prometheus/tsdb/head_dedupelabels.go create mode 100644 vendor/github.com/prometheus/prometheus/tsdb/head_other.go create mode 100644 vendor/github.com/prometheus/prometheus/tsdb/testutil.go create mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go create mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go rename vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/{v1.24.0.go => httpconv.go} (57%) delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go create mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md create mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go rename vendor/go.opentelemetry.io/otel/semconv/{v1.24.0 => v1.26.0}/doc.go (96%) rename vendor/go.opentelemetry.io/otel/semconv/{v1.24.0 => v1.26.0}/exception.go (98%) rename vendor/go.opentelemetry.io/otel/semconv/{v1.24.0 => v1.26.0}/metric.go (77%) rename vendor/go.opentelemetry.io/otel/semconv/{v1.24.0 => v1.26.0}/schema.go (85%) create mode 100644 vendor/go.opentelemetry.io/otel/trace/provider.go create mode 100644 vendor/go.opentelemetry.io/otel/trace/span.go create mode 100644 vendor/go.opentelemetry.io/otel/trace/tracer.go create mode 100644 vendor/go.opentelemetry.io/otel/verify_released_changelog.sh create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go create mode 100644 vendor/google.golang.org/grpc/encoding/encoding_v2.go create mode 100644 vendor/google.golang.org/grpc/experimental/stats/metricregistry.go create mode 100644 vendor/google.golang.org/grpc/experimental/stats/metrics.go create mode 100644 vendor/google.golang.org/grpc/grpclog/internal/grpclog.go create mode 100644 vendor/google.golang.org/grpc/grpclog/internal/logger.go rename vendor/google.golang.org/grpc/{internal/grpclog/grpclog.go => grpclog/internal/loggerv2.go} (52%) rename vendor/google.golang.org/grpc/internal/grpclog/{prefixLogger.go => prefix_logger.go} (63%) create mode 100644 vendor/google.golang.org/grpc/internal/stats/labels.go create mode 100644 vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go create mode 100644 vendor/google.golang.org/grpc/mem/buffer_pool.go create mode 100644 vendor/google.golang.org/grpc/mem/buffer_slice.go create mode 100644 vendor/google.golang.org/grpc/mem/buffers.go delete mode 100644 vendor/google.golang.org/grpc/regenerate.sh delete mode 100644 vendor/google.golang.org/grpc/shared_buffer_pool.go diff --git a/go.mod b/go.mod index 24b6a1c9af..781bdd2174 100644 --- a/go.mod +++ b/go.mod @@ -4,65 +4,66 @@ go 1.23.1 require ( cloud.google.com/go/storage v1.43.0 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.0 github.com/VictoriaMetrics/easyproto v0.1.4 github.com/VictoriaMetrics/fastcache v1.12.2 github.com/VictoriaMetrics/metrics v1.35.1 github.com/VictoriaMetrics/metricsql v0.77.0 - github.com/aws/aws-sdk-go-v2 v1.30.3 - github.com/aws/aws-sdk-go-v2/config v1.27.27 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.9 - github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 + github.com/aws/aws-sdk-go-v2 v1.30.5 + github.com/aws/aws-sdk-go-v2/config v1.27.33 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 + github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2 github.com/bmatcuk/doublestar/v4 v4.6.1 github.com/cespare/xxhash/v2 v2.3.0 github.com/cheggaaa/pb/v3 v3.1.5 github.com/gogo/protobuf v1.3.2 github.com/golang/snappy v0.0.4 github.com/googleapis/gax-go/v2 v2.13.0 - github.com/influxdata/influxdb v1.11.5 + github.com/influxdata/influxdb v1.11.6 github.com/klauspost/compress v1.17.9 - github.com/prometheus/prometheus v0.53.1 - github.com/urfave/cli/v2 v2.27.3 + github.com/prometheus/prometheus v0.54.1 + github.com/urfave/cli/v2 v2.27.4 github.com/valyala/fastjson v1.6.4 github.com/valyala/fastrand v1.1.0 github.com/valyala/fasttemplate v1.2.2 github.com/valyala/gozstd v1.21.1 github.com/valyala/histogram v1.2.0 github.com/valyala/quicktemplate v1.8.0 - golang.org/x/oauth2 v0.21.0 - golang.org/x/sys v0.23.0 - google.golang.org/api v0.189.0 + golang.org/x/net v0.29.0 + golang.org/x/oauth2 v0.23.0 + golang.org/x/sys v0.25.0 + google.golang.org/api v0.196.0 gopkg.in/yaml.v2 v2.4.0 ) require ( - cloud.google.com/go v0.115.0 // indirect - cloud.google.com/go/auth v0.7.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect cloud.google.com/go/compute/metadata v0.5.0 // indirect - cloud.google.com/go/iam v1.1.12 // indirect + cloud.google.com/go/iam v1.2.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/VividCortex/ewma v1.2.0 // indirect github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect - github.com/aws/aws-sdk-go v1.55.3 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.27 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect - github.com/aws/smithy-go v1.20.3 // indirect + github.com/aws/aws-sdk-go v1.55.5 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.32 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 // indirect + github.com/aws/smithy-go v1.20.4 // indirect github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect @@ -79,7 +80,7 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -95,9 +96,9 @@ require ( github.com/oklog/ulid v1.3.1 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_golang v1.20.3 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/common v0.59.1 // indirect github.com/prometheus/common/sigv4 v0.1.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect @@ -106,30 +107,29 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/pdata v1.12.0 // indirect - go.opentelemetry.io/collector/semconv v0.105.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/collector/pdata v1.14.1 // indirect + go.opentelemetry.io/collector/semconv v0.108.1 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/goleak v1.3.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/net v0.28.0 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/text v0.17.0 // indirect - golang.org/x/time v0.5.0 // indirect - google.golang.org/genproto v0.0.0-20240725223205-93522f1f2a9f // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240725223205-93522f1f2a9f // indirect - google.golang.org/grpc v1.65.0 // indirect + golang.org/x/text v0.18.0 // indirect + golang.org/x/time v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/grpc v1.66.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apimachinery v0.30.3 // indirect - k8s.io/client-go v0.30.3 // indirect + k8s.io/apimachinery v0.31.0 // indirect + k8s.io/client-go v0.31.0 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect + k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 // indirect ) diff --git a/go.sum b/go.sum index 2d5a60ae0a..a2d1108f36 100644 --- a/go.sum +++ b/go.sum @@ -13,12 +13,12 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= -cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= -cloud.google.com/go/auth v0.7.2 h1:uiha352VrCDMXg+yoBtaD0tUF4Kv9vrtrWPYXwutnDE= -cloud.google.com/go/auth v0.7.2/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= -cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= -cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= +cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= +cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -29,10 +29,10 @@ cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJ cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.1.12 h1:JixGLimRrNGcxvJEQ8+clfLxPlbeZA6MuRJ+qJNQ5Xw= -cloud.google.com/go/iam v1.1.12/go.mod h1:9LDX8J7dN5YRyzVHxwQzrQs9opFFqn0Mxs9nAeB+Hhg= -cloud.google.com/go/longrunning v0.5.10 h1:eB/BniENNRKhjz/xgiillrdcH3G74TGSl3BXinGlI7E= -cloud.google.com/go/longrunning v0.5.10/go.mod h1:tljz5guTr5oc/qhlUjBlk7UAIFMOGuPNxkNDZXlLics= +cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8= +cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q= +cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI= +cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -45,8 +45,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 h1:GJHeeA2N7xrG3q30L2UXDyuWRzDM900/65j70wcM4Ww= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 h1:nyQWyZvwGTvunIMxi1Y9uXkcyr+I7TeNrr/foo4Kpk8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= @@ -74,8 +74,6 @@ github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkT github.com/VictoriaMetrics/metrics v1.34.0/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8= github.com/VictoriaMetrics/metrics v1.35.1 h1:o84wtBKQbzLdDy14XeskkCZih6anG+veZ1SwJHFGwrU= github.com/VictoriaMetrics/metrics v1.35.1/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8= -github.com/VictoriaMetrics/metricsql v0.76.0 h1:hl7vqJqyH2d8zKImzalkFrkFiD5q4ACF8gl3s86DqKA= -github.com/VictoriaMetrics/metricsql v0.76.0/go.mod h1:1g4hdCwlbJZ851PU9VN65xy9Rdlzupo6fx3SNZ8Z64U= github.com/VictoriaMetrics/metricsql v0.77.0 h1:eD+1RuIBQmbSPdl8ItbghxLifE+gexJxQBWKSJYwhBE= github.com/VictoriaMetrics/metricsql v0.77.0/go.mod h1:1g4hdCwlbJZ851PU9VN65xy9Rdlzupo6fx3SNZ8Z64U= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= @@ -92,46 +90,46 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.55.3 h1:0B5hOX+mIx7I5XPOrjrHlKSDQV/+ypFZpIHOx5LOk3E= -github.com/aws/aws-sdk-go v1.55.3/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= -github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM= -github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90= -github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg= -github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI= -github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.9 h1:TC2vjvaAv1VNl9A0rm+SeuBjrzXnrlwk6Yop+gKRi38= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.9/go.mod h1:WPv2FRnkIOoDv/8j2gSUsI4qDc7392w5anFB/I89GZ8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 h1:Z5r7SycxmSllHYmaAZPpmN8GviDrSGhMS6bldqtXZPw= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15/go.mod h1:CetW7bDE00QoGEmPUoZuRog07SGVAUVW6LFpNP0YfIg= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 h1:YPYe6ZmvUfDDDELqEKtAd6bo8zxhkm+XEFEzQisqUIE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17/go.mod h1:oBtcnYua/CgzCWYN7NZ5j7PotFDaFSUjCYVTtfyn7vw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 h1:246A4lSTXWJw/rmlQI+TT2OcqeDMKBdyjEQrafMaQdA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15/go.mod h1:haVfg3761/WF7YPuJOER2MP0k4UAXyHaLclKXB6usDg= -github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 h1:sZXIzO38GZOU+O0C+INqbH7C2yALwfMWpd64tONS/NE= -github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2/go.mod h1:Lcxzg5rojyVPU/0eFwLtcyTaek/6Mtic5B1gJo7e/zE= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ= -github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE= -github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.30.5 h1:mWSRTwQAb0aLE17dSzztCVJWI9+cRMgqebndjwDyK0g= +github.com/aws/aws-sdk-go-v2 v1.30.5/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= +github.com/aws/aws-sdk-go-v2/config v1.27.33 h1:Nof9o/MsmH4oa0s2q9a0k7tMz5x/Yj5k06lDODWz3BU= +github.com/aws/aws-sdk-go-v2/config v1.27.33/go.mod h1:kEqdYzRb8dd8Sy2pOdEbExTTF5v7ozEXX0McgPE7xks= +github.com/aws/aws-sdk-go-v2/credentials v1.17.32 h1:7Cxhp/BnT2RcGy4VisJ9miUPecY+lyE9I8JvcZofn9I= +github.com/aws/aws-sdk-go-v2/credentials v1.17.32/go.mod h1:P5/QMF3/DCHbXGEGkdbilXHsyTBX5D3HSwcrSc9p20I= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 h1:pfQ2sqNpMVK6xz2RbqLEL0GH87JOwSxPV2rzm8Zsb74= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13/go.mod h1:NG7RXPUlqfsCLLFfi0+IpKN4sCB9D9fw/qTaSB+xRoU= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 h1:9DIp7vhmOPmueCDwpXa45bEbLHHTt1kcxChdTJWWxvI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18/go.mod h1:aJv/Fwz8r56ozwYFRC4bzoeL1L17GYQYemfblOBux1M= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 h1:pI7Bzt0BJtYA0N/JEC6B8fJ4RBrEMi1LBrkMdFYNSnQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17/go.mod h1:Dh5zzJYMtxfIjYW+/evjQ8uj2OyR/ve2KROHGHlSFqE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 h1:Mqr/V5gvrhA2gvgnF42Zh5iMiQNcOYthFYwCyrnuWlc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17/go.mod h1:aLJpZlCmjE+V+KtN1q1uyZkfnUWpQGpbsn89XPKyzfU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 h1:Roo69qTpfu8OlJ2Tb7pAYVuF0CpuUMB0IYWwYP/4DZM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17/go.mod h1:NcWPxQzGM1USQggaTVwz6VpqMZPX1CvDJLDh6jnOCa4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 h1:FLMkfEiRjhgeDTCjjLoc3URo/TBkgeQbocA78lfkzSI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19/go.mod h1:Vx+GucNSsdhaxs3aZIKfSUjKVGsxN25nX2SRcdhuw08= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 h1:rfprUlsdzgl7ZL2KlXiUAoJnI/VxfHCvDFr2QDFj6u4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19/go.mod h1:SCWkEdRq8/7EK60NcvvQ6NXKuTcchAD4ROAsC37VEZE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 h1:u+EfGmksnJc/x5tq3A+OD7LrMbSSR/5TrKLvkdy/fhY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17/go.mod h1:VaMx6302JHax2vHJWgRo+5n9zvbacs3bLU/23DNQrTY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2 h1:Kp6PWAlXwP1UvIflkIP6MFZYBNDCa4mFCGtxrpICVOg= +github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2/go.mod h1:5FmD/Dqq57gP+XwaUnd5WFPipAuzrf0HmupX27Gvjvc= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 h1:pIaGg+08llrP7Q5aiz9ICWbY8cqhTkyy+0SHvfzQpTc= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.7/go.mod h1:eEygMHnTKH/3kNp9Jr1n3PdejuSNcgwLe1dWgQtO0VQ= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 h1:/Cfdu0XV3mONYKaOt1Gr0k1KvQzkzPyiKUdlWJqy+J4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7/go.mod h1:bCbAxKDqNvkHxRaIMnyVPXPo+OaPRwvmgzMxbz1VKSA= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 h1:NKTa1eqZYw8tiHSRGpP0VtTdub/8KNk8sDkNPFaOKDE= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.7/go.mod h1:NXi1dIAGteSaRLqYgarlhP/Ij0cFT+qmCwiJqWh/U5o= +github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= +github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -162,12 +160,12 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= -github.com/digitalocean/godo v1.117.0 h1:WVlTe09melDYTd7VCVyvHcNWbgB+uI1O115+5LOtdSw= -github.com/digitalocean/godo v1.117.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= +github.com/digitalocean/godo v1.118.0 h1:lkzGFQmACrVCp7UqH1sAi4JK/PWwlc5aaxubgorKmC4= +github.com/digitalocean/godo v1.118.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo= -github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.0.3+incompatible h1:aBGI9TeQ4MPlhquTQKq9XbK79rKFVwXNUAYz9aXyEBE= +github.com/docker/docker v27.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -179,8 +177,8 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= -github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/go-control-plane v0.12.1-0.20240621013728-1eb8caab5155 h1:IgJPqnrlY2Mr4pYB6oaMKvFvwJ9H+X6CCY5x1vCTcpc= +github.com/envoyproxy/go-control-plane v0.12.1-0.20240621013728-1eb8caab5155/go.mod h1:5Wkq+JduFtdAXihLmeTJf+tRYIT4KBc2vPXDhwVo1pA= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= @@ -192,6 +190,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -296,51 +296,51 @@ github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO github.com/google/uuid v1.1.2/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/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0= +github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= -github.com/gophercloud/gophercloud v1.12.0 h1:Jrz16vPAL93l80q16fp8NplrTCp93y7rZh2P3Q4Yq7g= -github.com/gophercloud/gophercloud v1.12.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gophercloud/gophercloud v1.13.0 h1:8iY9d1DAbzMW6Vok1AxbbK5ZaUjzMp0tdyt4fX9IeJ0= +github.com/gophercloud/gophercloud v1.13.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= -github.com/hashicorp/consul/api v1.29.1 h1:UEwOjYJrd3lG1x5w7HxDRMGiAUPrb3f103EoeKuuEcc= -github.com/hashicorp/consul/api v1.29.1/go.mod h1:lumfRkY/coLuqMICkI7Fh3ylMG31mQSRZyef2c5YvJI= +github.com/hashicorp/consul/api v1.29.2 h1:aYyRn8EdE2mSfG14S1+L9Qkjtz8RzmaWh6AcNGRNwPw= +github.com/hashicorp/consul/api v1.29.2/go.mod h1:0YObcaLNDSbtlgzIRtmRXI1ZkeuK0trCBxwZQ4MYnIk= github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A= github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 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-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= -github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= +github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/nomad/api v0.0.0-20240604134157-e73d8bb1140d h1:KHq+mAzWSkumj4PDoXc5VZbycPGcmYu8tohgVLQ6SIc= -github.com/hashicorp/nomad/api v0.0.0-20240604134157-e73d8bb1140d/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= +github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 h1:fgVfQ4AC1avVOnu2cfms8VAiD8lUq3vWI8mTocOXN/w= +github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hetznercloud/hcloud-go/v2 v2.9.0 h1:s0N6R7Zoi2DPfMtUF5o9VeUBzTtHVY6MIkHOQnfu/AY= -github.com/hetznercloud/hcloud-go/v2 v2.9.0/go.mod h1:qtW/TuU7Bs16ibXl/ktJarWqU2LwHr7eGlwoilHxtgg= +github.com/hetznercloud/hcloud-go/v2 v2.10.2 h1:9gyTUPhfNbfbS40Spgij5mV5k37bOZgt8iHKCbfGs5I= +github.com/hetznercloud/hcloud-go/v2 v2.10.2/go.mod h1:xQ+8KhIS62W0D78Dpi57jsufWh844gUw1az5OUvaeq8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/influxdata/influxdb v1.11.5 h1:+em5VOl6lhAZubXj5o6SobCwvrRs3XDlBx/MUI4schI= -github.com/influxdata/influxdb v1.11.5/go.mod h1:k8sWREQl1/9t46VrkrH5adUM4UNGIt206ipO3plbkw8= +github.com/influxdata/influxdb v1.11.6 h1:zS5MRY+RQ5/XFTer5R8xQRnY17JYSbacvO6OaP164wU= +github.com/influxdata/influxdb v1.11.6/go.mod h1:F10NoQb9qa04lME3pTPWQrYt4JZ/ke1Eei+1ttgHHrg= github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8= github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= @@ -378,8 +378,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/linode/linodego v1.35.0 h1:rIhUeCHBLEDlkoRnOTwzSGzljQ3ksXwLxacmXnrV+Do= -github.com/linode/linodego v1.35.0/go.mod h1:JxuhOEAMfSxun6RU5/MgTKH2GGTmFrhKRj3wL1NFin0= +github.com/linode/linodego v1.37.0 h1:B/2Spzv9jYXzKA+p+GD8fVCNJ7Wuw6P91ZDD9eCkkso= +github.com/linode/linodego v1.37.0/go.mod h1:L7GXKFD3PoN2xSEtFc04wIXP5WK65O10jYQx0PQISWQ= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -390,8 +390,8 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= -github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= +github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= +github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -416,14 +416,16 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/ovh/go-ovh v1.5.1 h1:P8O+7H+NQuFK9P/j4sFW5C0fvSS2DnHYGPwdVCp45wI= -github.com/ovh/go-ovh v1.5.1/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= +github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= +github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -431,8 +433,8 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -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_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4= +github.com/prometheus/client_golang v1.20.3/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -443,8 +445,8 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0= +github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0= github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -453,8 +455,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/prometheus/prometheus v0.53.1 h1:B0xu4VuVTKYrIuBMn/4YSUoIPYxs956qsOfcS4rqCuA= -github.com/prometheus/prometheus v0.53.1/go.mod h1:RZDkzs+ShMBDkAPQkLEaLBXpjmDcjhNxU2drUVPgKUU= +github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= +github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -463,8 +465,8 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27 h1:yGAraK1uUjlhSXgNMIy8o/J4LFNcy7yeipBqt9N9mVg= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 h1:BkTk4gynLjguayxrYxZoMZjBnAOh7ntQvUkOFmkMqPU= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -486,8 +488,8 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o 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= -github.com/urfave/cli/v2 v2.27.3 h1:/POWahRmdh7uztQ3CYnaDddk0Rm90PyOgIxgW2rr41M= -github.com/urfave/cli/v2 v2.27.3/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= +github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= +github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= @@ -504,6 +506,8 @@ github.com/valyala/quicktemplate v1.8.0 h1:zU0tjbIqTRgKQzFY1L42zq0qR3eh4WoQQdIdq github.com/valyala/quicktemplate v1.8.0/go.mod h1:qIqW8/igXt8fdrUln5kOSb+KWMaJ4Y8QUsfd1k6L2jM= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -517,22 +521,22 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector/pdata v1.12.0 h1:Xx5VK1p4VO0md8MWm2icwC1MnJ7f8EimKItMWw46BmA= -go.opentelemetry.io/collector/pdata v1.12.0/go.mod h1:MYeB0MmMAxeM0hstCFrCqWLzdyeYySim2dG6pDT6nYI= -go.opentelemetry.io/collector/semconv v0.105.0 h1:8p6dZ3JfxFTjbY38d8xlQGB1TQ3nPUvs+D0RERniZ1g= -go.opentelemetry.io/collector/semconv v0.105.0/go.mod h1:yMVUCNoQPZVq/IPfrHrnntZTWsLf5YGZ7qwKulIl5hw= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= -go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/collector/pdata v1.14.1 h1:wXZjtQA7Vy5HFqco+yA95ENyMQU5heBB1IxMHQf6mUk= +go.opentelemetry.io/collector/pdata v1.14.1/go.mod h1:z1dTjwwtcoXxZx2/nkHysjxMeaxe9pEmYTEr4SMNIx8= +go.opentelemetry.io/collector/semconv v0.108.1 h1:Txk9tauUnamZaxS5vlf1O0uZ4VD6nioRBR0nX8L/fU4= +go.opentelemetry.io/collector/semconv v0.108.1/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -545,10 +549,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= -golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -559,8 +561,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -581,8 +583,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 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.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -614,18 +616,16 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -636,8 +636,6 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/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.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -682,29 +680,24 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.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.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= -golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -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/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -747,8 +740,8 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= -golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= 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= @@ -769,8 +762,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.189.0 h1:equMo30LypAkdkLMBqfeIqtyAnlyig1JSZArl4XPwdI= -google.golang.org/api v0.189.0/go.mod h1:FLWGJKb0hb+pU2j+rJqwbnsF+ym+fQs73rbJ+KAUgy8= +google.golang.org/api v0.196.0 h1:k/RafYqebaIJBO3+SMnfEGtFVlvp5vSgqTUF54UN/zg= +google.golang.org/api v0.196.0/go.mod h1:g9IL21uGkYgvQ5BZg6BAtoGJQIm8r6EgaAbpNey5wBE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -806,12 +799,12 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20240725223205-93522f1f2a9f h1:htT2I9bZvGm+110zq8bIErMX+WgBWxCzV3ChwbvnKnc= -google.golang.org/genproto v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:Sk3mLpoDFTAp6R4OvlcUgaG4ISTspKeFsIAXMn9Bm4Y= -google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f h1:b1Ln/PG8orm0SsBbHZWke8dDp2lrCD4jSmfglFpTZbk= -google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240725223205-93522f1f2a9f h1:RARaIm8pxYuxyNPbBQf5igT7XdOyCNtat1qAT2ZxjU4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -825,8 +818,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= +google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -869,18 +862,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= -k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= -k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= -k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= -k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= -k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= +k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= +k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= +k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= +k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= +k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 h1:b2FmK8YH+QEwq/Sy2uAEhmqL5nPfGYbJOcaqjeYYZoA= +k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= @@ -888,5 +881,5 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/vendor/cloud.google.com/go/auth/CHANGES.md b/vendor/cloud.google.com/go/auth/CHANGES.md index e62f143492..5584c350b0 100644 --- a/vendor/cloud.google.com/go/auth/CHANGES.md +++ b/vendor/cloud.google.com/go/auth/CHANGES.md @@ -1,5 +1,62 @@ # Changelog +## [0.9.3](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.2...auth/v0.9.3) (2024-09-03) + + +### Bug Fixes + +* **auth:** Choose quota project envvar over file when both present ([#10807](https://github.com/googleapis/google-cloud-go/issues/10807)) ([2d8dd77](https://github.com/googleapis/google-cloud-go/commit/2d8dd7700eff92d4b95027be55e26e1e7aa79181)), refs [#10804](https://github.com/googleapis/google-cloud-go/issues/10804) + +## [0.9.2](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.1...auth/v0.9.2) (2024-08-30) + + +### Bug Fixes + +* **auth:** Handle non-Transport DefaultTransport ([#10733](https://github.com/googleapis/google-cloud-go/issues/10733)) ([98d91dc](https://github.com/googleapis/google-cloud-go/commit/98d91dc8316b247498fab41ab35e57a0446fe556)), refs [#10742](https://github.com/googleapis/google-cloud-go/issues/10742) +* **auth:** Make sure quota option takes precedence over env/file ([#10797](https://github.com/googleapis/google-cloud-go/issues/10797)) ([f1b050d](https://github.com/googleapis/google-cloud-go/commit/f1b050d56d804b245cab048c2980d32b0eaceb4e)), refs [#10795](https://github.com/googleapis/google-cloud-go/issues/10795) + + +### Documentation + +* **auth:** Fix Go doc comment link ([#10751](https://github.com/googleapis/google-cloud-go/issues/10751)) ([015acfa](https://github.com/googleapis/google-cloud-go/commit/015acfab4d172650928bb1119bc2cd6307b9a437)) + +## [0.9.1](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.0...auth/v0.9.1) (2024-08-22) + + +### Bug Fixes + +* **auth:** Setting expireEarly to default when the value is 0 ([#10732](https://github.com/googleapis/google-cloud-go/issues/10732)) ([5e67869](https://github.com/googleapis/google-cloud-go/commit/5e67869a31e9e8ecb4eeebd2cfa11a761c3b1948)) + +## [0.9.0](https://github.com/googleapis/google-cloud-go/compare/auth/v0.8.1...auth/v0.9.0) (2024-08-16) + + +### Features + +* **auth:** Auth library can talk to S2A over mTLS ([#10634](https://github.com/googleapis/google-cloud-go/issues/10634)) ([5250a13](https://github.com/googleapis/google-cloud-go/commit/5250a13ec95b8d4eefbe0158f82857ff2189cb45)) + +## [0.8.1](https://github.com/googleapis/google-cloud-go/compare/auth/v0.8.0...auth/v0.8.1) (2024-08-13) + + +### Bug Fixes + +* **auth:** Make default client creation more lenient ([#10669](https://github.com/googleapis/google-cloud-go/issues/10669)) ([1afb9ee](https://github.com/googleapis/google-cloud-go/commit/1afb9ee1ee9de9810722800018133304a0ca34d1)), refs [#10638](https://github.com/googleapis/google-cloud-go/issues/10638) + +## [0.8.0](https://github.com/googleapis/google-cloud-go/compare/auth/v0.7.3...auth/v0.8.0) (2024-08-07) + + +### Features + +* **auth:** Adds support for X509 workload identity federation ([#10373](https://github.com/googleapis/google-cloud-go/issues/10373)) ([5d07505](https://github.com/googleapis/google-cloud-go/commit/5d075056cbe27bb1da4072a26070c41f8999eb9b)) + +## [0.7.3](https://github.com/googleapis/google-cloud-go/compare/auth/v0.7.2...auth/v0.7.3) (2024-08-01) + + +### Bug Fixes + +* **auth/oauth2adapt:** Update dependencies ([257c40b](https://github.com/googleapis/google-cloud-go/commit/257c40bd6d7e59730017cf32bda8823d7a232758)) +* **auth:** Disable automatic universe domain check for MDS ([#10620](https://github.com/googleapis/google-cloud-go/issues/10620)) ([7cea5ed](https://github.com/googleapis/google-cloud-go/commit/7cea5edd5a0c1e6bca558696f5607879141910e8)) +* **auth:** Update dependencies ([257c40b](https://github.com/googleapis/google-cloud-go/commit/257c40bd6d7e59730017cf32bda8823d7a232758)) + ## [0.7.2](https://github.com/googleapis/google-cloud-go/compare/auth/v0.7.1...auth/v0.7.2) (2024-07-22) diff --git a/vendor/cloud.google.com/go/auth/auth.go b/vendor/cloud.google.com/go/auth/auth.go index 58af931887..bc37ea85fb 100644 --- a/vendor/cloud.google.com/go/auth/auth.go +++ b/vendor/cloud.google.com/go/auth/auth.go @@ -12,6 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package auth provides utilities for managing Google Cloud credentials, +// including functionality for creating, caching, and refreshing OAuth2 tokens. +// It offers customizable options for different OAuth2 flows, such as 2-legged +// (2LO) and 3-legged (3LO) OAuth, along with support for PKCE and automatic +// token management. package auth import ( @@ -101,6 +106,20 @@ func (t *Token) IsValid() bool { return t.isValidWithEarlyExpiry(defaultExpiryDelta) } +// MetadataString is a convenience method for accessing string values in the +// token's metadata. Returns an empty string if the metadata is nil or the value +// for the given key cannot be cast to a string. +func (t *Token) MetadataString(k string) string { + if t.Metadata == nil { + return "" + } + s, ok := t.Metadata[k].(string) + if !ok { + return "" + } + return s +} + func (t *Token) isValidWithEarlyExpiry(earlyExpiry time.Duration) bool { if t.isEmpty() { return false @@ -116,7 +135,9 @@ func (t *Token) isEmpty() bool { } // Credentials holds Google credentials, including -// [Application Default Credentials](https://developers.google.com/accounts/docs/application-default-credentials). +// [Application Default Credentials]. +// +// [Application Default Credentials]: https://developers.google.com/accounts/docs/application-default-credentials type Credentials struct { json []byte projectID CredentialsPropertyProvider @@ -244,7 +265,7 @@ func (ctpo *CachedTokenProviderOptions) autoRefresh() bool { } func (ctpo *CachedTokenProviderOptions) expireEarly() time.Duration { - if ctpo == nil { + if ctpo == nil || ctpo.ExpireEarly == 0 { return defaultExpiryDelta } return ctpo.ExpireEarly @@ -479,7 +500,7 @@ func (o *Options2LO) client() *http.Client { if o.Client != nil { return o.Client } - return internal.CloneDefaultClient() + return internal.DefaultClient() } func (o *Options2LO) validate() error { diff --git a/vendor/cloud.google.com/go/auth/credentials/detect.go b/vendor/cloud.google.com/go/auth/credentials/detect.go index 2d9a73edf3..010afc37c8 100644 --- a/vendor/cloud.google.com/go/auth/credentials/detect.go +++ b/vendor/cloud.google.com/go/auth/credentials/detect.go @@ -98,8 +98,8 @@ func DetectDefault(opts *DetectOptions) (*auth.Credentials, error) { if OnGCE() { return auth.NewCredentials(&auth.CredentialsOptions{ TokenProvider: computeTokenProvider(opts), - ProjectIDProvider: auth.CredentialsPropertyFunc(func(context.Context) (string, error) { - return metadata.ProjectID() + ProjectIDProvider: auth.CredentialsPropertyFunc(func(ctx context.Context) (string, error) { + return metadata.ProjectIDWithContext(ctx) }), UniverseDomainProvider: &internal.ComputeUniverseDomainProvider{}, }), nil @@ -190,7 +190,7 @@ func (o *DetectOptions) client() *http.Client { if o.Client != nil { return o.Client } - return internal.CloneDefaultClient() + return internal.DefaultClient() } func readCredentialsFile(filename string, opts *DetectOptions) (*auth.Credentials, error) { diff --git a/vendor/cloud.google.com/go/auth/credentials/filetypes.go b/vendor/cloud.google.com/go/auth/credentials/filetypes.go index fe93557389..cf56b025a2 100644 --- a/vendor/cloud.google.com/go/auth/credentials/filetypes.go +++ b/vendor/cloud.google.com/go/auth/credentials/filetypes.go @@ -33,7 +33,7 @@ func fileCredentials(b []byte, opts *DetectOptions) (*auth.Credentials, error) { return nil, err } - var projectID, quotaProjectID, universeDomain string + var projectID, universeDomain string var tp auth.TokenProvider switch fileType { case credsfile.ServiceAccountKey: @@ -56,7 +56,6 @@ func fileCredentials(b []byte, opts *DetectOptions) (*auth.Credentials, error) { if err != nil { return nil, err } - quotaProjectID = f.QuotaProjectID universeDomain = f.UniverseDomain case credsfile.ExternalAccountKey: f, err := credsfile.ParseExternalAccount(b) @@ -67,7 +66,6 @@ func fileCredentials(b []byte, opts *DetectOptions) (*auth.Credentials, error) { if err != nil { return nil, err } - quotaProjectID = f.QuotaProjectID universeDomain = resolveUniverseDomain(opts.UniverseDomain, f.UniverseDomain) case credsfile.ExternalAccountAuthorizedUserKey: f, err := credsfile.ParseExternalAccountAuthorizedUser(b) @@ -78,7 +76,6 @@ func fileCredentials(b []byte, opts *DetectOptions) (*auth.Credentials, error) { if err != nil { return nil, err } - quotaProjectID = f.QuotaProjectID universeDomain = f.UniverseDomain case credsfile.ImpersonatedServiceAccountKey: f, err := credsfile.ParseImpersonatedServiceAccount(b) @@ -108,9 +105,9 @@ func fileCredentials(b []byte, opts *DetectOptions) (*auth.Credentials, error) { TokenProvider: auth.NewCachedTokenProvider(tp, &auth.CachedTokenProviderOptions{ ExpireEarly: opts.EarlyTokenRefresh, }), - JSON: b, - ProjectIDProvider: internalauth.StaticCredentialsProperty(projectID), - QuotaProjectIDProvider: internalauth.StaticCredentialsProperty(quotaProjectID), + JSON: b, + ProjectIDProvider: internalauth.StaticCredentialsProperty(projectID), + // TODO(codyoss): only set quota project here if there was a user override UniverseDomainProvider: internalauth.StaticCredentialsProperty(universeDomain), }), nil } @@ -174,6 +171,7 @@ func handleExternalAccount(f *credsfile.ExternalAccountFile, opts *DetectOptions Scopes: opts.scopes(), WorkforcePoolUserProject: f.WorkforcePoolUserProject, Client: opts.client(), + IsDefaultClient: opts.Client == nil, } if f.ServiceAccountImpersonation != nil { externalOpts.ServiceAccountImpersonationLifetimeSeconds = f.ServiceAccountImpersonation.TokenLifetimeSeconds diff --git a/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go b/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go index b19c6edeae..112186a9e6 100644 --- a/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go +++ b/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go @@ -100,6 +100,10 @@ type Options struct { AwsSecurityCredentialsProvider AwsSecurityCredentialsProvider // Client for token request. Client *http.Client + // IsDefaultClient marks whether the client passed in is a default client that can be overriden. + // This is important for X509 credentials which should create a new client if the default was used + // but should respect a client explicitly passed in by the user. + IsDefaultClient bool } // SubjectTokenProvider can be used to supply a subject token to exchange for a @@ -181,6 +185,26 @@ func (o *Options) validate() error { return nil } +// client returns the http client that should be used for the token exchange. If a non-default client +// is provided, then the client configured in the options will always be returned. If a default client +// is provided and the options are configured for X509 credentials, a new client will be created. +func (o *Options) client() (*http.Client, error) { + // If a client was provided and no override certificate config location was provided, use the provided client. + if o.CredentialSource == nil || o.CredentialSource.Certificate == nil || (!o.IsDefaultClient && o.CredentialSource.Certificate.CertificateConfigLocation == "") { + return o.Client, nil + } + + // If a new client should be created, validate and use the certificate source to create a new mTLS client. + cert := o.CredentialSource.Certificate + if !cert.UseDefaultCertificateConfig && cert.CertificateConfigLocation == "" { + return nil, errors.New("credentials: \"certificate\" object must either specify a certificate_config_location or use_default_certificate_config should be true") + } + if cert.UseDefaultCertificateConfig && cert.CertificateConfigLocation != "" { + return nil, errors.New("credentials: \"certificate\" object cannot specify both a certificate_config_location and use_default_certificate_config=true") + } + return createX509Client(cert.CertificateConfigLocation) +} + // resolveTokenURL sets the default STS token endpoint with the configured // universe domain. func (o *Options) resolveTokenURL() { @@ -204,11 +228,18 @@ func NewTokenProvider(opts *Options) (auth.TokenProvider, error) { if err != nil { return nil, err } + + client, err := opts.client() + if err != nil { + return nil, err + } + tp := &tokenProvider{ - client: opts.Client, + client: client, opts: opts, stp: stp, } + if opts.ServiceAccountImpersonationURL == "" { return auth.NewCachedTokenProvider(tp, nil), nil } @@ -218,7 +249,7 @@ func NewTokenProvider(opts *Options) (auth.TokenProvider, error) { // needed for impersonation tp.opts.Scopes = []string{"https://www.googleapis.com/auth/cloud-platform"} imp, err := impersonate.NewTokenProvider(&impersonate.Options{ - Client: opts.Client, + Client: client, URL: opts.ServiceAccountImpersonationURL, Scopes: scopes, Tp: auth.NewCachedTokenProvider(tp, nil), @@ -353,6 +384,15 @@ func newSubjectTokenProvider(o *Options) (subjectTokenProvider, error) { execProvider.opts = o execProvider.env = runtimeEnvironment{} return execProvider, nil + } else if o.CredentialSource.Certificate != nil { + cert := o.CredentialSource.Certificate + if !cert.UseDefaultCertificateConfig && cert.CertificateConfigLocation == "" { + return nil, errors.New("credentials: \"certificate\" object must either specify a certificate_config_location or use_default_certificate_config should be true") + } + if cert.UseDefaultCertificateConfig && cert.CertificateConfigLocation != "" { + return nil, errors.New("credentials: \"certificate\" object cannot specify both a certificate_config_location and use_default_certificate_config=true") + } + return &x509Provider{}, nil } return nil, errors.New("credentials: unable to parse credential source") } diff --git a/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go b/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go index e33d35a268..0a020599e0 100644 --- a/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go +++ b/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go @@ -30,6 +30,7 @@ const ( fileTypeJSON = "json" urlProviderType = "url" programmaticProviderType = "programmatic" + x509ProviderType = "x509" ) type urlSubjectProvider struct { diff --git a/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go b/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go new file mode 100644 index 0000000000..115df5881f --- /dev/null +++ b/vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go @@ -0,0 +1,63 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package externalaccount + +import ( + "context" + "crypto/tls" + "net/http" + "time" + + "cloud.google.com/go/auth/internal/transport/cert" +) + +// x509Provider implements the subjectTokenProvider type for +// x509 workload identity credentials. Because x509 credentials +// rely on an mTLS connection to represent the 3rd party identity +// rather than a subject token, this provider will always return +// an empty string when a subject token is requested by the external account +// token provider. +type x509Provider struct { +} + +func (xp *x509Provider) providerType() string { + return x509ProviderType +} + +func (xp *x509Provider) subjectToken(ctx context.Context) (string, error) { + return "", nil +} + +// createX509Client creates a new client that is configured with mTLS, using the +// certificate configuration specified in the credential source. +func createX509Client(certificateConfigLocation string) (*http.Client, error) { + certProvider, err := cert.NewWorkloadX509CertProvider(certificateConfigLocation) + if err != nil { + return nil, err + } + trans := http.DefaultTransport.(*http.Transport).Clone() + + trans.TLSClientConfig = &tls.Config{ + GetClientCertificate: certProvider, + } + + // Create a client with default settings plus the X509 workload cert and key. + client := &http.Client{ + Transport: trans, + Timeout: 30 * time.Second, + } + + return client, nil +} diff --git a/vendor/cloud.google.com/go/auth/grpctransport/directpath.go b/vendor/cloud.google.com/go/auth/grpctransport/directpath.go index 8dbfa7ef7e..efc91c2b0c 100644 --- a/vendor/cloud.google.com/go/auth/grpctransport/directpath.go +++ b/vendor/cloud.google.com/go/auth/grpctransport/directpath.go @@ -66,10 +66,10 @@ func isTokenProviderDirectPathCompatible(tp auth.TokenProvider, _ *Options) bool if tok == nil { return false } - if source, _ := tok.Metadata["auth.google.tokenSource"].(string); source != "compute-metadata" { + if tok.MetadataString("auth.google.tokenSource") != "compute-metadata" { return false } - if acct, _ := tok.Metadata["auth.google.serviceAccount"].(string); acct != "default" { + if tok.MetadataString("auth.google.serviceAccount") != "default" { return false } return true diff --git a/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go b/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go index 5c3bc66f99..21488e29f0 100644 --- a/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go +++ b/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package grpctransport provides functionality for managing gRPC client +// connections to Google Cloud services. package grpctransport import ( @@ -38,7 +40,7 @@ const ( // Check env to decide if using google-c2p resolver for DirectPath traffic. enableDirectPathXdsEnvVar = "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" - quotaProjectHeaderKey = "X-Goog-User-Project" + quotaProjectHeaderKey = "X-goog-user-project" ) var ( @@ -271,7 +273,10 @@ func dial(ctx context.Context, secure bool, opts *Options) (*grpc.ClientConn, er if metadata == nil { metadata = make(map[string]string, 1) } - metadata[quotaProjectHeaderKey] = qp + // Don't overwrite user specified quota + if _, ok := metadata[quotaProjectHeaderKey]; !ok { + metadata[quotaProjectHeaderKey] = qp + } } grpcOpts = append(grpcOpts, grpc.WithPerRPCCredentials(&grpcCredentialsProvider{ @@ -291,7 +296,7 @@ func dial(ctx context.Context, secure bool, opts *Options) (*grpc.ClientConn, er grpcOpts = addOCStatsHandler(grpcOpts, opts) grpcOpts = append(grpcOpts, opts.GRPCDialOpts...) - return grpc.DialContext(ctx, endpoint, grpcOpts...) + return grpc.NewClient(endpoint, grpcOpts...) } // grpcKeyProvider satisfies https://pkg.go.dev/google.golang.org/grpc/credentials#PerRPCCredentials. @@ -337,17 +342,19 @@ func (c *grpcCredentialsProvider) getClientUniverseDomain() string { } func (c *grpcCredentialsProvider) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { - credentialsUniverseDomain, err := c.creds.UniverseDomain(ctx) - if err != nil { - return nil, err - } - if err := transport.ValidateUniverseDomain(c.getClientUniverseDomain(), credentialsUniverseDomain); err != nil { - return nil, err - } token, err := c.creds.Token(ctx) if err != nil { return nil, err } + if token.MetadataString("auth.google.tokenSource") != "compute-metadata" { + credentialsUniverseDomain, err := c.creds.UniverseDomain(ctx) + if err != nil { + return nil, err + } + if err := transport.ValidateUniverseDomain(c.getClientUniverseDomain(), credentialsUniverseDomain); err != nil { + return nil, err + } + } if c.secure { ri, _ := grpccreds.RequestInfoFromContext(ctx) if err = grpccreds.CheckSecurityLevel(ri.AuthInfo, grpccreds.PrivacyAndIntegrity); err != nil { diff --git a/vendor/cloud.google.com/go/auth/httptransport/httptransport.go b/vendor/cloud.google.com/go/auth/httptransport/httptransport.go index 969c8d4d20..30fedf9562 100644 --- a/vendor/cloud.google.com/go/auth/httptransport/httptransport.go +++ b/vendor/cloud.google.com/go/auth/httptransport/httptransport.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package httptransport provides functionality for managing HTTP client +// connections to Google Cloud services. package httptransport import ( diff --git a/vendor/cloud.google.com/go/auth/httptransport/transport.go b/vendor/cloud.google.com/go/auth/httptransport/transport.go index 94caeb00f0..274bb01254 100644 --- a/vendor/cloud.google.com/go/auth/httptransport/transport.go +++ b/vendor/cloud.google.com/go/auth/httptransport/transport.go @@ -31,7 +31,7 @@ import ( ) const ( - quotaProjectHeaderKey = "X-Goog-User-Project" + quotaProjectHeaderKey = "X-goog-user-project" ) func newTransport(base http.RoundTripper, opts *Options) (http.RoundTripper, error) { @@ -76,7 +76,10 @@ func newTransport(base http.RoundTripper, opts *Options) (http.RoundTripper, err if headers == nil { headers = make(map[string][]string, 1) } - headers.Set(quotaProjectHeaderKey, qp) + // Don't overwrite user specified quota + if v := headers.Get(quotaProjectHeaderKey); v == "" { + headers.Set(quotaProjectHeaderKey, qp) + } } creds.TokenProvider = auth.NewCachedTokenProvider(creds.TokenProvider, nil) trans = &authTransport{ @@ -94,7 +97,11 @@ func newTransport(base http.RoundTripper, opts *Options) (http.RoundTripper, err // http.DefaultTransport. // If TLSCertificate is available, set TLSClientConfig as well. func defaultBaseTransport(clientCertSource cert.Provider, dialTLSContext func(context.Context, string, string) (net.Conn, error)) http.RoundTripper { - trans := http.DefaultTransport.(*http.Transport).Clone() + defaultTransport, ok := http.DefaultTransport.(*http.Transport) + if !ok { + defaultTransport = transport.BaseTransport() + } + trans := defaultTransport.Clone() trans.MaxIdleConnsPerHost = 100 if clientCertSource != nil { @@ -193,17 +200,19 @@ func (t *authTransport) RoundTrip(req *http.Request) (*http.Response, error) { } }() } - credentialsUniverseDomain, err := t.creds.UniverseDomain(req.Context()) - if err != nil { - return nil, err - } - if err := transport.ValidateUniverseDomain(t.getClientUniverseDomain(), credentialsUniverseDomain); err != nil { - return nil, err - } token, err := t.creds.Token(req.Context()) if err != nil { return nil, err } + if token.MetadataString("auth.google.tokenSource") != "compute-metadata" { + credentialsUniverseDomain, err := t.creds.UniverseDomain(req.Context()) + if err != nil { + return nil, err + } + if err := transport.ValidateUniverseDomain(t.getClientUniverseDomain(), credentialsUniverseDomain); err != nil { + return nil, err + } + } req2 := req.Clone(req.Context()) SetAuthHeader(token, req2) reqBodyClosed = true diff --git a/vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go b/vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go index 69e30779f9..3be6e5bbb4 100644 --- a/vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go +++ b/vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go @@ -90,19 +90,20 @@ type ExternalAccountAuthorizedUserFile struct { // CredentialSource stores the information necessary to retrieve the credentials for the STS exchange. // -// One field amongst File, URL, and Executable should be filled, depending on the kind of credential in question. +// One field amongst File, URL, Certificate, and Executable should be filled, depending on the kind of credential in question. // The EnvironmentID should start with AWS if being used for an AWS credential. type CredentialSource struct { - File string `json:"file"` - URL string `json:"url"` - Headers map[string]string `json:"headers"` - Executable *ExecutableConfig `json:"executable,omitempty"` - EnvironmentID string `json:"environment_id"` - RegionURL string `json:"region_url"` - RegionalCredVerificationURL string `json:"regional_cred_verification_url"` - CredVerificationURL string `json:"cred_verification_url"` - IMDSv2SessionTokenURL string `json:"imdsv2_session_token_url"` - Format *Format `json:"format,omitempty"` + File string `json:"file"` + URL string `json:"url"` + Headers map[string]string `json:"headers"` + Executable *ExecutableConfig `json:"executable,omitempty"` + Certificate *CertificateConfig `json:"certificate"` + EnvironmentID string `json:"environment_id"` // TODO: Make type for this + RegionURL string `json:"region_url"` + RegionalCredVerificationURL string `json:"regional_cred_verification_url"` + CredVerificationURL string `json:"cred_verification_url"` + IMDSv2SessionTokenURL string `json:"imdsv2_session_token_url"` + Format *Format `json:"format,omitempty"` } // Format describes the format of a [CredentialSource]. @@ -121,6 +122,13 @@ type ExecutableConfig struct { OutputFile string `json:"output_file"` } +// CertificateConfig represents the options used to set up X509 based workload +// [CredentialSource] +type CertificateConfig struct { + UseDefaultCertificateConfig bool `json:"use_default_certificate_config"` + CertificateConfigLocation string `json:"certificate_config_location"` +} + // ServiceAccountImpersonationInfo has impersonation configuration. type ServiceAccountImpersonationInfo struct { TokenLifetimeSeconds int `json:"token_lifetime_seconds"` diff --git a/vendor/cloud.google.com/go/auth/internal/internal.go b/vendor/cloud.google.com/go/auth/internal/internal.go index e56daa7810..4308345eda 100644 --- a/vendor/cloud.google.com/go/auth/internal/internal.go +++ b/vendor/cloud.google.com/go/auth/internal/internal.go @@ -46,10 +46,24 @@ const ( DefaultUniverseDomain = "googleapis.com" ) -// CloneDefaultClient returns a [http.Client] with some good defaults. -func CloneDefaultClient() *http.Client { +type clonableTransport interface { + Clone() *http.Transport +} + +// DefaultClient returns an [http.Client] with some defaults set. If +// the current [http.DefaultTransport] is a [clonableTransport], as +// is the case for an [*http.Transport], the clone will be used. +// Otherwise the [http.DefaultTransport] is used directly. +func DefaultClient() *http.Client { + if transport, ok := http.DefaultTransport.(clonableTransport); ok { + return &http.Client{ + Transport: transport.Clone(), + Timeout: 30 * time.Second, + } + } + return &http.Client{ - Transport: http.DefaultTransport.(*http.Transport).Clone(), + Transport: http.DefaultTransport, Timeout: 30 * time.Second, } } diff --git a/vendor/cloud.google.com/go/auth/internal/transport/cba.go b/vendor/cloud.google.com/go/auth/internal/transport/cba.go index d94e0af08a..26e037c1a3 100644 --- a/vendor/cloud.google.com/go/auth/internal/transport/cba.go +++ b/vendor/cloud.google.com/go/auth/internal/transport/cba.go @@ -17,7 +17,9 @@ package transport import ( "context" "crypto/tls" + "crypto/x509" "errors" + "log" "net" "net/http" "net/url" @@ -44,10 +46,12 @@ const ( googleAPIUseMTLSOld = "GOOGLE_API_USE_MTLS" universeDomainPlaceholder = "UNIVERSE_DOMAIN" + + mtlsMDSRoot = "/run/google-mds-mtls/root.crt" + mtlsMDSKey = "/run/google-mds-mtls/client.key" ) var ( - mdsMTLSAutoConfigSource mtlsConfigSource errUniverseNotSupportedMTLS = errors.New("mTLS is not supported in any universe other than googleapis.com") ) @@ -120,7 +124,20 @@ func GetGRPCTransportCredsAndEndpoint(opts *Options) (credentials.TransportCrede defaultTransportCreds := credentials.NewTLS(&tls.Config{ GetClientCertificate: config.clientCertSource, }) - if config.s2aAddress == "" { + + var s2aAddr string + var transportCredsForS2A credentials.TransportCredentials + + if config.mtlsS2AAddress != "" { + s2aAddr = config.mtlsS2AAddress + transportCredsForS2A, err = loadMTLSMDSTransportCreds(mtlsMDSRoot, mtlsMDSKey) + if err != nil { + log.Printf("Loading MTLS MDS credentials failed: %v", err) + return defaultTransportCreds, config.endpoint, nil + } + } else if config.s2aAddress != "" { + s2aAddr = config.s2aAddress + } else { return defaultTransportCreds, config.endpoint, nil } @@ -133,8 +150,9 @@ func GetGRPCTransportCredsAndEndpoint(opts *Options) (credentials.TransportCrede } s2aTransportCreds, err := s2a.NewClientCreds(&s2a.ClientOptions{ - S2AAddress: config.s2aAddress, - FallbackOpts: fallbackOpts, + S2AAddress: s2aAddr, + TransportCreds: transportCredsForS2A, + FallbackOpts: fallbackOpts, }) if err != nil { // Use default if we cannot initialize S2A client transport credentials. @@ -151,7 +169,19 @@ func GetHTTPTransportConfig(opts *Options) (cert.Provider, func(context.Context, return nil, nil, err } - if config.s2aAddress == "" { + var s2aAddr string + var transportCredsForS2A credentials.TransportCredentials + + if config.mtlsS2AAddress != "" { + s2aAddr = config.mtlsS2AAddress + transportCredsForS2A, err = loadMTLSMDSTransportCreds(mtlsMDSRoot, mtlsMDSKey) + if err != nil { + log.Printf("Loading MTLS MDS credentials failed: %v", err) + return config.clientCertSource, nil, nil + } + } else if config.s2aAddress != "" { + s2aAddr = config.s2aAddress + } else { return config.clientCertSource, nil, nil } @@ -169,12 +199,38 @@ func GetHTTPTransportConfig(opts *Options) (cert.Provider, func(context.Context, } dialTLSContextFunc := s2a.NewS2ADialTLSContextFunc(&s2a.ClientOptions{ - S2AAddress: config.s2aAddress, - FallbackOpts: fallbackOpts, + S2AAddress: s2aAddr, + TransportCreds: transportCredsForS2A, + FallbackOpts: fallbackOpts, }) return nil, dialTLSContextFunc, nil } +func loadMTLSMDSTransportCreds(mtlsMDSRootFile, mtlsMDSKeyFile string) (credentials.TransportCredentials, error) { + rootPEM, err := os.ReadFile(mtlsMDSRootFile) + if err != nil { + return nil, err + } + caCertPool := x509.NewCertPool() + ok := caCertPool.AppendCertsFromPEM(rootPEM) + if !ok { + return nil, errors.New("failed to load MTLS MDS root certificate") + } + // The mTLS MDS credentials are formatted as the concatenation of a PEM-encoded certificate chain + // followed by a PEM-encoded private key. For this reason, the concatenation is passed in to the + // tls.X509KeyPair function as both the certificate chain and private key arguments. + cert, err := tls.LoadX509KeyPair(mtlsMDSKeyFile, mtlsMDSKeyFile) + if err != nil { + return nil, err + } + tlsConfig := tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{cert}, + MinVersion: tls.VersionTLS13, + } + return credentials.NewTLS(&tlsConfig), nil +} + func getTransportConfig(opts *Options) (*transportConfig, error) { clientCertSource, err := GetClientCertificateProvider(opts) if err != nil { @@ -196,17 +252,17 @@ func getTransportConfig(opts *Options) (*transportConfig, error) { return nil, errUniverseNotSupportedMTLS } - s2aMTLSEndpoint := opts.DefaultMTLSEndpoint - s2aAddress := GetS2AAddress() - if s2aAddress == "" { + mtlsS2AAddress := GetMTLSS2AAddress() + if s2aAddress == "" && mtlsS2AAddress == "" { return &defaultTransportConfig, nil } return &transportConfig{ clientCertSource: clientCertSource, endpoint: endpoint, s2aAddress: s2aAddress, - s2aMTLSEndpoint: s2aMTLSEndpoint, + mtlsS2AAddress: mtlsS2AAddress, + s2aMTLSEndpoint: opts.DefaultMTLSEndpoint, }, nil } @@ -241,8 +297,10 @@ type transportConfig struct { clientCertSource cert.Provider // The corresponding endpoint to use based on client certificate source. endpoint string - // The S2A address if it can be used, otherwise an empty string. + // The plaintext S2A address if it can be used, otherwise an empty string. s2aAddress string + // The MTLS S2A address if it can be used, otherwise an empty string. + mtlsS2AAddress string // The MTLS endpoint to use with S2A. s2aMTLSEndpoint string } diff --git a/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go b/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go index 3227aba280..738cb21618 100644 --- a/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go +++ b/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go @@ -62,11 +62,11 @@ func NewSecureConnectProvider(configFilePath string) (Provider, error) { file, err := os.ReadFile(configFilePath) if err != nil { - if errors.Is(err, os.ErrNotExist) { - // Config file missing means Secure Connect is not supported. - return nil, errSourceUnavailable - } - return nil, err + // Config file missing means Secure Connect is not supported. + // There are non-os.ErrNotExist errors that may be returned. + // (e.g. if the home directory is /dev/null, *nix systems will + // return ENOTDIR instead of ENOENT) + return nil, errSourceUnavailable } var metadata secureConnectMetadata diff --git a/vendor/cloud.google.com/go/auth/internal/transport/s2a.go b/vendor/cloud.google.com/go/auth/internal/transport/s2a.go index 2ed532deb7..37894bfcd0 100644 --- a/vendor/cloud.google.com/go/auth/internal/transport/s2a.go +++ b/vendor/cloud.google.com/go/auth/internal/transport/s2a.go @@ -15,12 +15,13 @@ package transport import ( + "context" "encoding/json" + "fmt" "log" "os" "strconv" "sync" - "time" "cloud.google.com/go/auth/internal/transport/cert" "cloud.google.com/go/compute/metadata" @@ -31,41 +32,38 @@ const ( ) var ( - // The period an MTLS config can be reused before needing refresh. - configExpiry = time.Hour + mtlsConfiguration *mtlsConfig - // mdsMTLSAutoConfigSource is an instance of reuseMTLSConfigSource, with metadataMTLSAutoConfig as its config source. mtlsOnce sync.Once ) // GetS2AAddress returns the S2A address to be reached via plaintext connection. // Returns empty string if not set or invalid. func GetS2AAddress() string { - c, err := getMetadataMTLSAutoConfig().Config() - if err != nil { + getMetadataMTLSAutoConfig() + if !mtlsConfiguration.valid() { return "" } - if !c.Valid() { - return "" - } - return c.S2A.PlaintextAddress + return mtlsConfiguration.S2A.PlaintextAddress } -type mtlsConfigSource interface { - Config() (*mtlsConfig, error) +// GetMTLSS2AAddress returns the S2A address to be reached via MTLS connection. +// Returns empty string if not set or invalid. +func GetMTLSS2AAddress() string { + getMetadataMTLSAutoConfig() + if !mtlsConfiguration.valid() { + return "" + } + return mtlsConfiguration.S2A.MTLSAddress } // mtlsConfig contains the configuration for establishing MTLS connections with Google APIs. type mtlsConfig struct { - S2A *s2aAddresses `json:"s2a"` - Expiry time.Time + S2A *s2aAddresses `json:"s2a"` } -func (c *mtlsConfig) Valid() bool { - return c != nil && c.S2A != nil && !c.expired() -} -func (c *mtlsConfig) expired() bool { - return c.Expiry.Before(time.Now()) +func (c *mtlsConfig) valid() bool { + return c != nil && c.S2A != nil } // s2aAddresses contains the plaintext and/or MTLS S2A addresses. @@ -76,80 +74,36 @@ type s2aAddresses struct { MTLSAddress string `json:"mtls_address"` } -// getMetadataMTLSAutoConfig returns mdsMTLSAutoConfigSource, which is backed by config from MDS with auto-refresh. -func getMetadataMTLSAutoConfig() mtlsConfigSource { +func getMetadataMTLSAutoConfig() { + var err error mtlsOnce.Do(func() { - mdsMTLSAutoConfigSource = &reuseMTLSConfigSource{ - src: &metadataMTLSAutoConfig{}, + mtlsConfiguration, err = queryConfig() + if err != nil { + log.Printf("Getting MTLS config failed: %v", err) } }) - return mdsMTLSAutoConfigSource } -// reuseMTLSConfigSource caches a valid version of mtlsConfig, and uses `src` to refresh upon config expiry. -// It implements the mtlsConfigSource interface, so calling Config() on it returns an mtlsConfig. -type reuseMTLSConfigSource struct { - src mtlsConfigSource // src.Config() is called when config is expired - mu sync.Mutex // mutex guards config - config *mtlsConfig // cached config -} - -func (cs *reuseMTLSConfigSource) Config() (*mtlsConfig, error) { - cs.mu.Lock() - defer cs.mu.Unlock() - - if cs.config.Valid() { - return cs.config, nil - } - c, err := cs.src.Config() - if err != nil { - return nil, err - } - cs.config = c - return c, nil -} - -// metadataMTLSAutoConfig is an implementation of the interface mtlsConfigSource -// It has the logic to query MDS and return an mtlsConfig -type metadataMTLSAutoConfig struct{} - var httpGetMetadataMTLSConfig = func() (string, error) { - return metadata.Get(configEndpointSuffix) + return metadata.GetWithContext(context.Background(), configEndpointSuffix) } -func (cs *metadataMTLSAutoConfig) Config() (*mtlsConfig, error) { +func queryConfig() (*mtlsConfig, error) { resp, err := httpGetMetadataMTLSConfig() if err != nil { - log.Printf("querying MTLS config from MDS endpoint failed: %v", err) - return defaultMTLSConfig(), nil + return nil, fmt.Errorf("querying MTLS config from MDS endpoint failed: %w", err) } var config mtlsConfig err = json.Unmarshal([]byte(resp), &config) if err != nil { - log.Printf("unmarshalling MTLS config from MDS endpoint failed: %v", err) - return defaultMTLSConfig(), nil + return nil, fmt.Errorf("unmarshalling MTLS config from MDS endpoint failed: %w", err) } - if config.S2A == nil { - log.Printf("returned MTLS config from MDS endpoint is invalid: %v", config) - return defaultMTLSConfig(), nil + return nil, fmt.Errorf("returned MTLS config from MDS endpoint is invalid: %v", config) } - - // set new expiry - config.Expiry = time.Now().Add(configExpiry) return &config, nil } -func defaultMTLSConfig() *mtlsConfig { - return &mtlsConfig{ - S2A: &s2aAddresses{ - PlaintextAddress: "", - MTLSAddress: "", - }, - Expiry: time.Now().Add(configExpiry), - } -} - func shouldUseS2A(clientCertSource cert.Provider, opts *Options) bool { // If client cert is found, use that over S2A. if clientCertSource != nil { diff --git a/vendor/cloud.google.com/go/auth/internal/transport/transport.go b/vendor/cloud.google.com/go/auth/internal/transport/transport.go index 718a6b1714..cc586ec5b1 100644 --- a/vendor/cloud.google.com/go/auth/internal/transport/transport.go +++ b/vendor/cloud.google.com/go/auth/internal/transport/transport.go @@ -81,12 +81,14 @@ func ValidateUniverseDomain(clientUniverseDomain, credentialsUniverseDomain stri // DefaultHTTPClientWithTLS constructs an HTTPClient using the provided tlsConfig, to support mTLS. func DefaultHTTPClientWithTLS(tlsConfig *tls.Config) *http.Client { - trans := baseTransport() + trans := BaseTransport() trans.TLSClientConfig = tlsConfig return &http.Client{Transport: trans} } -func baseTransport() *http.Transport { +// BaseTransport returns a default [http.Transport] which can be used if +// [http.DefaultTransport] has been overwritten. +func BaseTransport() *http.Transport { return &http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ diff --git a/vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md b/vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md index f75c8e204a..7faf6e0c98 100644 --- a/vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md +++ b/vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md @@ -1,5 +1,12 @@ # Changelog +## [0.2.4](https://github.com/googleapis/google-cloud-go/compare/auth/oauth2adapt/v0.2.3...auth/oauth2adapt/v0.2.4) (2024-08-08) + + +### Bug Fixes + +* **auth/oauth2adapt:** Update dependencies ([257c40b](https://github.com/googleapis/google-cloud-go/commit/257c40bd6d7e59730017cf32bda8823d7a232758)) + ## [0.2.3](https://github.com/googleapis/google-cloud-go/compare/auth/oauth2adapt/v0.2.2...auth/oauth2adapt/v0.2.3) (2024-07-10) diff --git a/vendor/cloud.google.com/go/auth/threelegged.go b/vendor/cloud.google.com/go/auth/threelegged.go index a8ce6cd8a8..97a57f4694 100644 --- a/vendor/cloud.google.com/go/auth/threelegged.go +++ b/vendor/cloud.google.com/go/auth/threelegged.go @@ -128,7 +128,7 @@ func (o *Options3LO) client() *http.Client { if o.Client != nil { return o.Client } - return internal.CloneDefaultClient() + return internal.DefaultClient() } // authCodeURL returns a URL that points to a OAuth2 consent page. diff --git a/vendor/cloud.google.com/go/iam/CHANGES.md b/vendor/cloud.google.com/go/iam/CHANGES.md index bae4733aeb..89f757b116 100644 --- a/vendor/cloud.google.com/go/iam/CHANGES.md +++ b/vendor/cloud.google.com/go/iam/CHANGES.md @@ -1,6 +1,20 @@ # Changes +## [1.2.0](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.13...iam/v1.2.0) (2024-08-20) + + +### Features + +* **iam:** Add support for Go 1.23 iterators ([84461c0](https://github.com/googleapis/google-cloud-go/commit/84461c0ba464ec2f951987ba60030e37c8a8fc18)) + +## [1.1.13](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.12...iam/v1.1.13) (2024-08-08) + + +### Bug Fixes + +* **iam:** Update google.golang.org/api to v0.191.0 ([5b32644](https://github.com/googleapis/google-cloud-go/commit/5b32644eb82eb6bd6021f80b4fad471c60fb9d73)) + ## [1.1.12](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.11...iam/v1.1.12) (2024-07-24) diff --git a/vendor/cloud.google.com/go/internal/.repo-metadata-full.json b/vendor/cloud.google.com/go/internal/.repo-metadata-full.json index a3e99df29b..54acae7cdc 100644 --- a/vendor/cloud.google.com/go/internal/.repo-metadata-full.json +++ b/vendor/cloud.google.com/go/internal/.repo-metadata-full.json @@ -346,7 +346,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/backupdr/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/baremetalsolution/apiv2": { @@ -526,7 +526,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/migration/apiv2", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/bigquery/migration/apiv2alpha": { @@ -589,6 +589,26 @@ "release_level": "stable", "library_type": "GAPIC_MANUAL" }, + "cloud.google.com/go/bigtable/admin/apiv2": { + "api_shortname": "bigtableadmin", + "distribution_name": "cloud.google.com/go/bigtable/admin/apiv2", + "description": "Cloud Bigtable Admin API", + "language": "go", + "client_library_type": "generated", + "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigtable/latest/admin/apiv2", + "release_level": "stable", + "library_type": "GAPIC_AUTO" + }, + "cloud.google.com/go/bigtable/apiv2": { + "api_shortname": "bigtable", + "distribution_name": "cloud.google.com/go/bigtable/apiv2", + "description": "Cloud Bigtable API", + "language": "go", + "client_library_type": "generated", + "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigtable/latest/apiv2", + "release_level": "stable", + "library_type": "GAPIC_AUTO" + }, "cloud.google.com/go/billing/apiv1": { "api_shortname": "cloudbilling", "distribution_name": "cloud.google.com/go/billing/apiv1", @@ -696,7 +716,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudcontrolspartner/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/cloudcontrolspartner/apiv1beta": { @@ -736,7 +756,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudquotas/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/cloudtasks/apiv2": { @@ -1166,7 +1186,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/edgenetwork/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/errorreporting": { @@ -1959,6 +1979,16 @@ "release_level": "preview", "library_type": "GAPIC_AUTO" }, + "cloud.google.com/go/privilegedaccessmanager/apiv1": { + "api_shortname": "privilegedaccessmanager", + "distribution_name": "cloud.google.com/go/privilegedaccessmanager/apiv1", + "description": "Privileged Access Manager API", + "language": "go", + "client_library_type": "generated", + "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/privilegedaccessmanager/latest/apiv1", + "release_level": "preview", + "library_type": "GAPIC_AUTO" + }, "cloud.google.com/go/profiler": { "api_shortname": "cloudprofiler", "distribution_name": "cloud.google.com/go/profiler", @@ -2226,7 +2256,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securesourcemanager/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/security/privateca/apiv1": { @@ -2316,7 +2346,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycentermanagement/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/securityposture/apiv1": { @@ -2606,7 +2636,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest/control/apiv2", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/storage/internal/apiv2": { @@ -2686,7 +2716,7 @@ "language": "go", "client_library_type": "generated", "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/telcoautomation/latest/apiv1", - "release_level": "preview", + "release_level": "stable", "library_type": "GAPIC_AUTO" }, "cloud.google.com/go/texttospeech/apiv1": { diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md index 1a9cedbaf0..d13f2e0b35 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md @@ -1,5 +1,15 @@ # Release History +## 1.14.0 (2024-08-07) + +### Features Added + +* Added field `Attributes` to `runtime.StartSpanOptions` to simplify creating spans with attributes. + +### Other Changes + +* Include the HTTP verb and URL in `log.EventRetryPolicy` log entries so it's clear which operation is being retried. + ## 1.13.0 (2024-07-16) ### Features Added diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go index e5b28a9b1a..7cb8c207e6 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go @@ -40,5 +40,5 @@ const ( Module = "azcore" // Version is the semantic version (see http://semver.org) of this module. - Version = "v1.13.0" + Version = "v1.14.0" ) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go index 3df1c12189..bc6989310b 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go @@ -96,7 +96,8 @@ func (h *httpTracePolicy) Do(req *policy.Request) (resp *http.Response, err erro // StartSpanOptions contains the optional values for StartSpan. type StartSpanOptions struct { - // for future expansion + // Attributes contains key-value pairs of attributes for the span. + Attributes []tracing.Attribute } // StartSpan starts a new tracing span. @@ -126,8 +127,14 @@ func StartSpan(ctx context.Context, name string, tracer tracing.Tracer, options return ctx, func(err error) {} } } + + if options == nil { + options = &StartSpanOptions{} + } + ctx, span := tracer.Start(ctx, name, &tracing.SpanOptions{ - Kind: newSpanKind, + Kind: newSpanKind, + Attributes: options.Attributes, }) ctx = context.WithValue(ctx, ctxActiveSpan{}, newSpanKind) return ctx, func(err error) { diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go index 04d7bb4ecb..e15eea8249 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go @@ -102,7 +102,8 @@ func (p *retryPolicy) Do(req *policy.Request) (resp *http.Response, err error) { try := int32(1) for { resp = nil // reset - log.Writef(log.EventRetryPolicy, "=====> Try=%d", try) + // unfortunately we don't have access to the custom allow-list of query params, so we'll redact everything but the default allowed QPs + log.Writef(log.EventRetryPolicy, "=====> Try=%d for %s %s", try, req.Raw().Method, getSanitizedURL(*req.Raw().URL, getAllowedQueryParams(nil))) // For each try, seek to the beginning of the Body stream. We do this even for the 1st try because // the stream may not be at offset 0 when we first get it and we want the same behavior for the diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go index ba898a1a85..fca15f3822 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go @@ -3,4 +3,4 @@ package aws // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.30.3" +const goModuleVersion = "1.30.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md index 7df617668f..5499113132 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.6.4 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. + # v1.6.3 (2024-06-28) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go index 382f886a92..a107da9084 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go @@ -3,4 +3,4 @@ package eventstream // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.6.3" +const goModuleVersion = "1.6.4" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go index 71b1a35217..734e548bd6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go @@ -45,7 +45,6 @@ var RequiredSignedHeaders = Rules{ "X-Amz-Grant-Write-Acp": struct{}{}, "X-Amz-Metadata-Directive": struct{}{}, "X-Amz-Mfa": struct{}{}, - "X-Amz-Request-Payer": struct{}{}, "X-Amz-Server-Side-Encryption": struct{}{}, "X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id": struct{}{}, "X-Amz-Server-Side-Encryption-Context": struct{}{}, diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go index dcd896a9bf..7ed91d5bac 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go @@ -394,11 +394,16 @@ func (s *httpSigner) buildCredentialScope() string { func buildQuery(r v4Internal.Rule, header http.Header) (url.Values, http.Header) { query := url.Values{} unsignedHeaders := http.Header{} + + // A list of headers to be converted to lower case to mitigate a limitation from S3 + lowerCaseHeaders := map[string]string{ + "X-Amz-Expected-Bucket-Owner": "x-amz-expected-bucket-owner", // see #2508 + "X-Amz-Request-Payer": "x-amz-request-payer", // see #2764 + } + for k, h := range header { - // literally just this header has this constraint for some stupid reason, - // see #2508 - if k == "X-Amz-Expected-Bucket-Owner" { - k = "x-amz-expected-bucket-owner" + if newKey, ok := lowerCaseHeaders[k]; ok { + k = newKey } if r.IsValid(k) { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md index 6977bdb781..8325c8a0be 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md @@ -1,3 +1,28 @@ +# v1.27.33 (2024-09-04) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.32 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.31 (2024-08-26) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.30 (2024-08-23) + +* **Bug Fix**: Don't fail credentials unit tests if credentials are found on a file + +# v1.27.29 (2024-08-22) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.28 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.27.27 (2024-07-18) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go index a8fe2a2bbe..411bda659d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go @@ -3,4 +3,4 @@ package config // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.27.27" +const goModuleVersion = "1.27.33" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md index 66b7868161..dfb3dc94b7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md @@ -1,3 +1,24 @@ +# v1.17.32 (2024-09-04) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.31 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.30 (2024-08-26) + +* **Bug Fix**: Save SSO cached token expiry in UTC to ensure cross-SDK compatibility. + +# v1.17.29 (2024-08-22) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.28 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.17.27 (2024-07-18) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go index aaed530a26..e7467a7d98 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go @@ -3,4 +3,4 @@ package credentials // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.17.27" +const goModuleVersion = "1.17.32" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go b/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go index 3b97e6dd40..46ae2f9231 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go @@ -225,7 +225,7 @@ func (r *rfc3339) UnmarshalJSON(bytes []byte) (err error) { } func (r *rfc3339) MarshalJSON() ([]byte, error) { - value := time.Time(*r).Format(time.RFC3339) + value := time.Time(*r).UTC().Format(time.RFC3339) // Use JSON unmarshal to unescape the quoted value making use of JSON's // quoting rules. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md index 3584159df8..821fd36539 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md @@ -1,3 +1,12 @@ +# v1.16.13 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.12 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.16.11 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go index 1cd7560633..949c9ca46b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go @@ -3,4 +3,4 @@ package imds // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.16.11" +const goModuleVersion = "1.16.13" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md index 315b293bf0..9b15f81b14 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md @@ -1,3 +1,40 @@ +# v1.17.18 (2024-09-04) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.17 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.16 (2024-08-28) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.15 (2024-08-26) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.14 (2024-08-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.13 (2024-08-22) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.12 (2024-08-20) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.11 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.10 (2024-08-02) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.17.9 (2024-07-24) * **Documentation**: Clarify region hint and credential usage in HeadBucketRegion. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go index 040875ff4e..7f32f117f1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go @@ -3,4 +3,4 @@ package manager // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.17.9" +const goModuleVersion = "1.17.18" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md index 3c1d846e03..f6833e54c2 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md @@ -1,3 +1,12 @@ +# v1.3.17 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.16 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.3.15 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go index 7926a49c24..3bcd95b80c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go @@ -3,4 +3,4 @@ package configsources // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.3.15" +const goModuleVersion = "1.3.17" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json index 7a28569c3d..712d31e3fe 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json @@ -44,6 +44,9 @@ "ap-southeast-4" : { "description" : "Asia Pacific (Melbourne)" }, + "ap-southeast-5" : { + "description" : "Asia Pacific (Malaysia)" + }, "aws-global" : { "description" : "AWS Standard global region" }, diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md index 549df6013c..a6860c0e23 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md @@ -1,3 +1,12 @@ +# v2.6.17 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v2.6.16 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v2.6.15 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go index dcb5a4b93b..5403b821c1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go @@ -3,4 +3,4 @@ package endpoints // goModuleVersion is the tagged release for this module -const goModuleVersion = "2.6.15" +const goModuleVersion = "2.6.17" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/CHANGELOG.md index c0e54faff2..be61098b46 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.8.1 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. + # v1.8.0 (2024-02-13) * **Feature**: Bump minimum Go version to 1.20 per our language support policy. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/go_module_metadata.go index 6e0b906c34..ef6a38110e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/go_module_metadata.go @@ -3,4 +3,4 @@ package ini // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.8.0" +const goModuleVersion = "1.8.1" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md index 2bf7d32f4b..a8eec06b6a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md @@ -1,3 +1,12 @@ +# v1.3.17 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.16 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.3.15 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go index 6fe0cd600f..7c79484714 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go @@ -3,4 +3,4 @@ package v4a // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.3.15" +const goModuleVersion = "1.3.17" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md index 2c9b1d6d4f..56f89df8d5 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.11.4 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. + # v1.11.3 (2024-06-28) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go index b59fb2afcc..47d97ccfb9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go @@ -3,4 +3,4 @@ package acceptencoding // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.11.3" +const goModuleVersion = "1.11.4" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md index 4c8a8759f6..ce9a0392a8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md @@ -1,3 +1,12 @@ +# v1.3.19 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.18 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.3.17 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go index c144a69a2f..ccf8a2e624 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go @@ -3,4 +3,4 @@ package checksum // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.3.17" +const goModuleVersion = "1.3.19" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md index c03183e1c5..1203b556e3 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md @@ -1,3 +1,12 @@ +# v1.11.19 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.11.18 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.11.17 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go index a21b047962..0259bbfb76 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go @@ -3,4 +3,4 @@ package presignedurl // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.11.17" +const goModuleVersion = "1.11.19" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md index bf568e8259..e69aad679e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md @@ -1,3 +1,12 @@ +# v1.17.17 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.16 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.17.15 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go index 04e649691d..0f195c536b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go @@ -3,4 +3,4 @@ package s3shared // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.17.15" +const goModuleVersion = "1.17.17" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md index 5a2eee1a86..9b34e8b5f7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md @@ -1,3 +1,33 @@ +# v1.61.2 (2024-09-04) + +* No change notes available for this release. + +# v1.61.1 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.61.0 (2024-08-28) + +* **Feature**: Add presignPost for s3 PutObject + +# v1.60.1 (2024-08-22) + +* No change notes available for this release. + +# v1.60.0 (2024-08-20) + +* **Feature**: Amazon Simple Storage Service / Features : Add support for conditional writes for PutObject and CompleteMultipartUpload APIs. + +# v1.59.0 (2024-08-15) + +* **Feature**: Amazon Simple Storage Service / Features : Adds support for pagination in the S3 ListBuckets API. +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.58.3 (2024-08-02) + +* **Bug Fix**: Add assurance tests for auth scheme selection logic. + # v1.58.2 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go index 00e395efb6..659ab8a716 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go @@ -24,12 +24,19 @@ import ( // part storage, you should call the [ListParts]API operation and ensure that the parts list // is empty. // -// Directory buckets - For directory buckets, you must make requests for this API -// operation to the Zonal endpoint. These endpoints support virtual-hosted-style -// requests in the format -// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . Path-style -// requests are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User -// Guide. +// - Directory buckets - If multipart uploads in a directory bucket are in +// progress, you can't delete the bucket until all the in-progress multipart +// uploads are aborted or completed. To delete these in-progress multipart uploads, +// use the ListMultipartUploads operation to list the in-progress multipart +// uploads in the bucket and use the AbortMultupartUpload operation to abort all +// the in-progress multipart uploads. +// +// - Directory buckets - For directory buckets, you must make requests for this +// API operation to the Zonal endpoint. These endpoints support +// virtual-hosted-style requests in the format +// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . +// Path-style requests are not supported. For more information, see [Regional and Zonal endpoints]in the +// Amazon S3 User Guide. // // Permissions // diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go index 29c7e3ea8e..e7039d2b11 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go @@ -75,6 +75,10 @@ import ( // session token automatically to avoid service interruptions when a session // expires. For more information about authorization, see [CreateSession]CreateSession . // +// - If you provide an [additional checksum value]in your MultipartUpload requests and the object is +// encrypted with Key Management Service, you must have permission to use the +// kms:Decrypt action for the CompleteMultipartUpload request to succeed. +// // Special errors // // - Error Code: EntityTooSmall @@ -127,6 +131,7 @@ import ( // [ListParts]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html // [UploadPart]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html +// [additional checksum value]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html // [ListMultipartUploads]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html // [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html @@ -233,6 +238,22 @@ type CompleteMultipartUploadInput struct { // status code 403 Forbidden (access denied). ExpectedBucketOwner *string + // Uploads the object only if the object key name does not already exist in the + // bucket specified. Otherwise, Amazon S3 returns a 412 Precondition Failed error. + // + // If a conflicting operation occurs during the upload S3 returns a 409 + // ConditionalRequestConflict response. On a 409 failure you should re-initiate the + // multipart upload with CreateMultipartUpload and re-upload each part. + // + // Expects the '*' (asterisk) character. + // + // For more information about conditional requests, see [RFC 7232], or [Conditional requests] in the Amazon S3 + // User Guide. + // + // [Conditional requests]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html + // [RFC 7232]: https://tools.ietf.org/html/rfc7232 + IfNoneMatch *string + // The container for the multipart upload request information. MultipartUpload *types.CompletedMultipartUpload diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go index 5f8275ca65..5403315af1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go @@ -25,12 +25,19 @@ import ( // You can copy individual objects between general purpose buckets, between // directory buckets, and between general purpose buckets and directory buckets. // -// Directory buckets - For directory buckets, you must make requests for this API -// operation to the Zonal endpoint. These endpoints support virtual-hosted-style -// requests in the format -// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . Path-style -// requests are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User -// Guide. +// - Amazon S3 supports copy operations using Multi-Region Access Points only as +// a destination when using the Multi-Region Access Point ARN. +// +// - Directory buckets - For directory buckets, you must make requests for this +// API operation to the Zonal endpoint. These endpoints support +// virtual-hosted-style requests in the format +// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . +// Path-style requests are not supported. For more information, see [Regional and Zonal endpoints]in the +// Amazon S3 User Guide. +// +// - VPC endpoints don't support cross-Region requests (including copies). If +// you're using VPC endpoints, your source and destination buckets should be in the +// same Amazon Web Services Region as your VPC endpoint. // // Both the Region that you want to copy the object from and the Region that you // want to copy the object to must be enabled for your account. For more diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go index a3d6ef9e4c..4af112049d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go @@ -49,28 +49,28 @@ import ( // requests. For more information about signing, see [Authenticating Requests (Amazon Web Services Signature Version 4)]in the Amazon S3 User Guide. // // Permissions -// - General purpose bucket permissions - For information about the permissions -// required to use the multipart upload API, see [Multipart upload and permissions]in the Amazon S3 User Guide. // -// To perform a multipart upload with encryption by using an Amazon Web Services +// - General purpose bucket permissions - To perform a multipart upload with +// encryption using an Key Management Service (KMS) KMS key, the requester must +// have permission to the kms:Decrypt and kms:GenerateDataKey actions on the key. +// The requester must also have permissions for the kms:GenerateDataKey action +// for the CreateMultipartUpload API. Then, the requester needs permissions for +// the kms:Decrypt action on the UploadPart and UploadPartCopy APIs. These +// permissions are required because Amazon S3 must decrypt and read data from the +// encrypted file parts before it completes the multipart upload. For more +// information, see [Multipart upload API and permissions]and [Protecting data using server-side encryption with Amazon Web Services KMS]in the Amazon S3 User Guide. // -// KMS key, the requester must have permission to the kms:Decrypt and -// kms:GenerateDataKey* actions on the key. These permissions are required -// because Amazon S3 must decrypt and read data from the encrypted file parts -// before it completes the multipart upload. For more information, see [Multipart upload API and permissions]and [Protecting data using server-side encryption with Amazon Web Services KMS]in -// the Amazon S3 User Guide. -// -// - Directory bucket permissions - To grant access to this API operation on a -// directory bucket, we recommend that you use the [CreateSession]CreateSession API operation -// for session-based authorization. Specifically, you grant the -// s3express:CreateSession permission to the directory bucket in a bucket policy -// or an IAM identity-based policy. Then, you make the CreateSession API call on -// the bucket to obtain a session token. With the session token in your request -// header, you can make API requests to this operation. After the session token -// expires, you make another CreateSession API call to generate a new session -// token for use. Amazon Web Services CLI or SDKs create session and refresh the -// session token automatically to avoid service interruptions when a session -// expires. For more information about authorization, see [CreateSession]CreateSession . +// - Directory bucket permissions - To grant access to this API operation on a +// directory bucket, we recommend that you use the [CreateSession]CreateSession API operation +// for session-based authorization. Specifically, you grant the +// s3express:CreateSession permission to the directory bucket in a bucket policy +// or an IAM identity-based policy. Then, you make the CreateSession API call on +// the bucket to obtain a session token. With the session token in your request +// header, you can make API requests to this operation. After the session token +// expires, you make another CreateSession API call to generate a new session +// token for use. Amazon Web Services CLI or SDKs create session and refresh the +// session token automatically to avoid service interruptions when a session +// expires. For more information about authorization, see [CreateSession]CreateSession . // // Encryption // @@ -171,7 +171,7 @@ import ( // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html // [Specifying the Signature Version in Request Authentication]: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version // [Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Configuration]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config -// [Multipart upload and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html +// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [Multipart upload API and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html // [CompleteMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html @@ -181,7 +181,6 @@ import ( // [Protecting data using server-side encryption with Amazon Web Services KMS]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html // [ListMultipartUploads]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html // -// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html func (c *Client) CreateMultipartUpload(ctx context.Context, params *CreateMultipartUploadInput, optFns ...func(*Options)) (*CreateMultipartUploadOutput, error) { if params == nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go index 088c48c7ca..618e9e4daa 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go @@ -216,6 +216,12 @@ type GetObjectInput struct { Key *string // To retrieve the checksum, this mode must be enabled. + // + // In addition, if you enable checksum mode and the object is uploaded with a [checksum] and + // encrypted with an Key Management Service (KMS) key, you must have permission to + // use the kms:Decrypt action to retrieve the checksum. + // + // [checksum]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html ChecksumMode types.ChecksumMode // The account ID of the expected bucket owner. If the account ID that you provide diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go index e53d4f4d04..81a1952857 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go @@ -26,17 +26,14 @@ import ( // code. A message body is not included, so you cannot determine the exception // beyond these HTTP response codes. // -// Directory buckets - You must make requests for this API operation to the Zonal -// endpoint. These endpoints support virtual-hosted-style requests in the format -// https://bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests -// are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User Guide. +// Authentication and authorization General purpose buckets - Request to public +// buckets that grant the s3:ListBucket permission publicly do not need to be +// signed. All other HeadBucket requests must be authenticated and signed by using +// IAM credentials (access key ID and secret access key for the IAM identities). +// All headers with the x-amz- prefix, including x-amz-copy-source , must be +// signed. For more information, see [REST Authentication]. // -// Authentication and authorization All HeadBucket requests must be authenticated -// and signed by using IAM credentials (access key ID and secret access key for the -// IAM identities). All headers with the x-amz- prefix, including x-amz-copy-source -// , must be signed. For more information, see [REST Authentication]. -// -// Directory bucket - You must use IAM credentials to authenticate and authorize +// Directory buckets - You must use IAM credentials to authenticate and authorize // your access to the HeadBucket API operation, instead of using the temporary // security credentials through the CreateSession API operation. // @@ -62,6 +59,11 @@ import ( // HTTP Host header syntax Directory buckets - The HTTP Host header syntax is // Bucket_name.s3express-az_id.region.amazonaws.com . // +// You must make requests for this API operation to the Zonal endpoint. These +// endpoints support virtual-hosted-style requests in the format +// https://bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests +// are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User Guide. +// // [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html // [REST Authentication]: https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html // [Example bucket policies for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html @@ -146,7 +148,7 @@ type HeadBucketOutput struct { // Indicates whether the bucket name used in the request is an access point alias. // - // This functionality is not supported for directory buckets. + // For directory buckets, the value of this field is false . AccessPointAlias *bool // The name of the location where the bucket will be created. @@ -163,8 +165,6 @@ type HeadBucketOutput struct { BucketLocationType types.LocationType // The Region that the bucket is located. - // - // This functionality is not supported for directory buckets. BucketRegion *string // Metadata pertaining to the operation's result. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go index 064734cab2..7f3417b16b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go @@ -30,13 +30,6 @@ import ( // // Request headers are limited to 8 KB in size. For more information, see [Common Request Headers]. // -// Directory buckets - For directory buckets, you must make requests for this API -// operation to the Zonal endpoint. These endpoints support virtual-hosted-style -// requests in the format -// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . Path-style -// requests are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User -// Guide. -// // Permissions // // - General purpose bucket permissions - To use HEAD , you must have the @@ -113,6 +106,12 @@ import ( // HTTP Host header syntax Directory buckets - The HTTP Host header syntax is // Bucket_name.s3express-az_id.region.amazonaws.com . // +// For directory buckets, you must make requests for this API operation to the +// Zonal endpoint. These endpoints support virtual-hosted-style requests in the +// format https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . +// Path-style requests are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon +// S3 User Guide. +// // The following actions are related to HeadObject : // // [GetObject] @@ -188,9 +187,11 @@ type HeadObjectInput struct { // To retrieve the checksum, this parameter must be enabled. // - // In addition, if you enable ChecksumMode and the object is encrypted with Amazon - // Web Services Key Management Service (Amazon Web Services KMS), you must have - // permission to use the kms:Decrypt action for the request to succeed. + // In addition, if you enable checksum mode and the object is uploaded with a [checksum] and + // encrypted with an Key Management Service (KMS) key, you must have permission to + // use the kms:Decrypt action to retrieve the checksum. + // + // [checksum]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html ChecksumMode types.ChecksumMode // The account ID of the expected bucket owner. If the account ID that you provide diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go index 8d2f98a8c0..b047b239c7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go @@ -37,6 +37,21 @@ func (c *Client) ListBuckets(ctx context.Context, params *ListBucketsInput, optF } type ListBucketsInput struct { + + // ContinuationToken indicates to Amazon S3 that the list is being continued on + // this bucket with a token. ContinuationToken is obfuscated and is not a real + // key. You can use this ContinuationToken for pagination of the list results. + // + // Length Constraints: Minimum length of 0. Maximum length of 1024. + // + // Required: No. + ContinuationToken *string + + // Maximum number of buckets to be returned in response. When the number is more + // than the count of buckets that are owned by an Amazon Web Services account, + // return all the buckets in response. + MaxBuckets *int32 + noSmithyDocumentSerde } @@ -45,6 +60,12 @@ type ListBucketsOutput struct { // The list of buckets owned by the requester. Buckets []types.Bucket + // ContinuationToken is included in the response when there are more buckets that + // can be listed with pagination. The next ListBuckets request to Amazon S3 can be + // continued with this ContinuationToken . ContinuationToken is obfuscated and is + // not a real bucket. + ContinuationToken *string + // The owner of the buckets listed. Owner *types.Owner @@ -154,6 +175,100 @@ func (c *Client) addOperationListBucketsMiddlewares(stack *middleware.Stack, opt return nil } +// ListBucketsPaginatorOptions is the paginator options for ListBuckets +type ListBucketsPaginatorOptions struct { + // Maximum number of buckets to be returned in response. When the number is more + // than the count of buckets that are owned by an Amazon Web Services account, + // return all the buckets in response. + Limit int32 + + // Set to true if pagination should stop if the service returns a pagination token + // that matches the most recent token provided to the service. + StopOnDuplicateToken bool +} + +// ListBucketsPaginator is a paginator for ListBuckets +type ListBucketsPaginator struct { + options ListBucketsPaginatorOptions + client ListBucketsAPIClient + params *ListBucketsInput + nextToken *string + firstPage bool +} + +// NewListBucketsPaginator returns a new ListBucketsPaginator +func NewListBucketsPaginator(client ListBucketsAPIClient, params *ListBucketsInput, optFns ...func(*ListBucketsPaginatorOptions)) *ListBucketsPaginator { + if params == nil { + params = &ListBucketsInput{} + } + + options := ListBucketsPaginatorOptions{} + if params.MaxBuckets != nil { + options.Limit = *params.MaxBuckets + } + + for _, fn := range optFns { + fn(&options) + } + + return &ListBucketsPaginator{ + options: options, + client: client, + params: params, + firstPage: true, + nextToken: params.ContinuationToken, + } +} + +// HasMorePages returns a boolean indicating whether more pages are available +func (p *ListBucketsPaginator) HasMorePages() bool { + return p.firstPage || (p.nextToken != nil && len(*p.nextToken) != 0) +} + +// NextPage retrieves the next ListBuckets page. +func (p *ListBucketsPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListBucketsOutput, error) { + if !p.HasMorePages() { + return nil, fmt.Errorf("no more pages available") + } + + params := *p.params + params.ContinuationToken = p.nextToken + + var limit *int32 + if p.options.Limit > 0 { + limit = &p.options.Limit + } + params.MaxBuckets = limit + + optFns = append([]func(*Options){ + addIsPaginatorUserAgent, + }, optFns...) + result, err := p.client.ListBuckets(ctx, ¶ms, optFns...) + if err != nil { + return nil, err + } + p.firstPage = false + + prevToken := p.nextToken + p.nextToken = result.ContinuationToken + + if p.options.StopOnDuplicateToken && + prevToken != nil && + p.nextToken != nil && + *prevToken == *p.nextToken { + p.nextToken = nil + } + + return result, nil +} + +// ListBucketsAPIClient is a client that implements the ListBuckets operation. +type ListBucketsAPIClient interface { + ListBuckets(context.Context, *ListBucketsInput, ...func(*Options)) (*ListBucketsOutput, error) +} + +var _ ListBucketsAPIClient = (*Client)(nil) + func newServiceMetadataMiddleware_opListBuckets(region string) *awsmiddleware.RegisterServiceMetadata { return &awsmiddleware.RegisterServiceMetadata{ Region: region, diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go index 5fdf9e6c7a..8fccf32bc1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go @@ -54,8 +54,9 @@ func (c *Client) ListDirectoryBuckets(ctx context.Context, params *ListDirectory type ListDirectoryBucketsInput struct { // ContinuationToken indicates to Amazon S3 that the list is being continued on - // this bucket with a token. ContinuationToken is obfuscated and is not a real - // key. You can use this ContinuationToken for pagination of the list results. + // buckets in this account with a token. ContinuationToken is obfuscated and is + // not a real bucket name. You can use this ContinuationToken for the pagination + // of the list results. ContinuationToken *string // Maximum number of buckets to be returned in response. When the number is more diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go index 60f9e13068..e84fae68ac 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go @@ -19,7 +19,10 @@ import ( // // Directory buckets - If multipart uploads in a directory bucket are in progress, // you can't delete the bucket until all the in-progress multipart uploads are -// aborted or completed. +// aborted or completed. To delete these in-progress multipart uploads, use the +// ListMultipartUploads operation to list the in-progress multipart uploads in the +// bucket and use the AbortMultupartUpload operation to abort all the in-progress +// multipart uploads. // // The ListMultipartUploads operation returns a maximum of 1,000 multipart uploads // in the response. The limit of 1,000 multipart uploads is also the default value. @@ -169,12 +172,20 @@ type ListMultipartUploadsInput struct { // Directory buckets - For directory buckets, / is the only supported delimiter. Delimiter *string - // Requests Amazon S3 to encode the object keys in the response and specifies the - // encoding method to use. An object key can contain any Unicode character; - // however, the XML 1.0 parser cannot parse some characters, such as characters - // with an ASCII value from 0 to 10. For characters that are not supported in XML - // 1.0, you can add this parameter to request that Amazon S3 encode the keys in the - // response. + // Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are + // encoded only in UTF-8. An object key can contain any Unicode character. However, + // the XML 1.0 parser can't parse certain characters, such as characters with an + // ASCII value from 0 to 10. For characters that aren't supported in XML 1.0, you + // can add this parameter to request that Amazon S3 encode the keys in the + // response. For more information about characters to avoid in object key names, + // see [Object key naming guidelines]. + // + // When using the URL encoding type, non-ASCII characters that are used in an + // object's key name will be percent-encoded according to UTF-8 code values. For + // example, the object test_file(3).png will appear as test_file%283%29.png . + // + // [Object key naming guidelines]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines + // [object keys]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html EncodingType types.EncodingType // The account ID of the expected bucket owner. If the account ID that you provide diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go index 2f7cc8d2c9..4e1b840ce0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go @@ -70,12 +70,20 @@ type ListObjectVersionsInput struct { // are not returned elsewhere in the response. Delimiter *string - // Requests Amazon S3 to encode the object keys in the response and specifies the - // encoding method to use. An object key can contain any Unicode character; - // however, the XML 1.0 parser cannot parse some characters, such as characters - // with an ASCII value from 0 to 10. For characters that are not supported in XML - // 1.0, you can add this parameter to request that Amazon S3 encode the keys in the - // response. + // Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are + // encoded only in UTF-8. An object key can contain any Unicode character. However, + // the XML 1.0 parser can't parse certain characters, such as characters with an + // ASCII value from 0 to 10. For characters that aren't supported in XML 1.0, you + // can add this parameter to request that Amazon S3 encode the keys in the + // response. For more information about characters to avoid in object key names, + // see [Object key naming guidelines]. + // + // When using the URL encoding type, non-ASCII characters that are used in an + // object's key name will be percent-encoded according to UTF-8 code values. For + // example, the object test_file(3).png will appear as test_file%283%29.png . + // + // [Object key naming guidelines]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines + // [object keys]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html EncodingType types.EncodingType // The account ID of the expected bucket owner. If the account ID that you provide diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go index 3ad2ff8250..599f2cad35 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go @@ -99,12 +99,20 @@ type ListObjectsInput struct { // A delimiter is a character that you use to group keys. Delimiter *string - // Requests Amazon S3 to encode the object keys in the response and specifies the - // encoding method to use. An object key can contain any Unicode character; - // however, the XML 1.0 parser cannot parse some characters, such as characters - // with an ASCII value from 0 to 10. For characters that are not supported in XML - // 1.0, you can add this parameter to request that Amazon S3 encode the keys in the - // response. + // Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are + // encoded only in UTF-8. An object key can contain any Unicode character. However, + // the XML 1.0 parser can't parse certain characters, such as characters with an + // ASCII value from 0 to 10. For characters that aren't supported in XML 1.0, you + // can add this parameter to request that Amazon S3 encode the keys in the + // response. For more information about characters to avoid in object key names, + // see [Object key naming guidelines]. + // + // When using the URL encoding type, non-ASCII characters that are used in an + // object's key name will be percent-encoded according to UTF-8 code values. For + // example, the object test_file(3).png will appear as test_file%283%29.png . + // + // [Object key naming guidelines]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines + // [object keys]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html EncodingType types.EncodingType // The account ID of the expected bucket owner. If the account ID that you provide @@ -172,9 +180,20 @@ type ListObjectsOutput struct { // MaxKeys value. Delimiter *string - // Encoding type used by Amazon S3 to encode object keys in the response. If using - // url , non-ASCII characters used in an object's key name will be URL encoded. For + // Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are + // encoded only in UTF-8. An object key can contain any Unicode character. However, + // the XML 1.0 parser can't parse certain characters, such as characters with an + // ASCII value from 0 to 10. For characters that aren't supported in XML 1.0, you + // can add this parameter to request that Amazon S3 encode the keys in the + // response. For more information about characters to avoid in object key names, + // see [Object key naming guidelines]. + // + // When using the URL encoding type, non-ASCII characters that are used in an + // object's key name will be percent-encoded according to UTF-8 code values. For // example, the object test_file(3).png will appear as test_file%283%29.png . + // + // [Object key naming guidelines]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines + // [object keys]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html EncodingType types.EncodingType // A flag that indicates whether Amazon S3 returned all of the results that diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go index 9044973619..e3af9b0bff 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go @@ -22,12 +22,18 @@ import ( // For more information about listing objects, see [Listing object keys programmatically] in the Amazon S3 User Guide. // To get a list of your buckets, see [ListBuckets]. // -// Directory buckets - For directory buckets, you must make requests for this API -// operation to the Zonal endpoint. These endpoints support virtual-hosted-style -// requests in the format -// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . Path-style -// requests are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User -// Guide. +// - General purpose bucket - For general purpose buckets, ListObjectsV2 doesn't +// return prefixes that are related only to in-progress multipart uploads. +// +// - Directory buckets - For directory buckets, ListObjectsV2 response includes +// the prefixes that are related only to in-progress multipart uploads. +// +// - Directory buckets - For directory buckets, you must make requests for this +// API operation to the Zonal endpoint. These endpoints support +// virtual-hosted-style requests in the format +// https://bucket_name.s3express-az_id.region.amazonaws.com/key-name . +// Path-style requests are not supported. For more information, see [Regional and Zonal endpoints]in the +// Amazon S3 User Guide. // // Permissions // @@ -152,9 +158,20 @@ type ListObjectsV2Input struct { // [Multipart Upload Overview]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html Delimiter *string - // Encoding type used by Amazon S3 to encode object keys in the response. If using - // url , non-ASCII characters used in an object's key name will be URL encoded. For + // Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are + // encoded only in UTF-8. An object key can contain any Unicode character. However, + // the XML 1.0 parser can't parse certain characters, such as characters with an + // ASCII value from 0 to 10. For characters that aren't supported in XML 1.0, you + // can add this parameter to request that Amazon S3 encode the keys in the + // response. For more information about characters to avoid in object key names, + // see [Object key naming guidelines]. + // + // When using the URL encoding type, non-ASCII characters that are used in an + // object's key name will be percent-encoded according to UTF-8 code values. For // example, the object test_file(3).png will appear as test_file%283%29.png . + // + // [Object key naming guidelines]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines + // [object keys]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html EncodingType types.EncodingType // The account ID of the expected bucket owner. If the account ID that you provide diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go index 187e73f248..bcf0d44096 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go @@ -29,7 +29,13 @@ import ( // set your [default bucket encryption]to SSE-KMS, you should verify that your KMS key ID is correct. Amazon // S3 does not validate the KMS key ID provided in PutBucketEncryption requests. // -// This action requires Amazon Web Services Signature Version 4. For more +// If you're specifying a customer managed KMS key, we recommend using a fully +// qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the +// key within the requester’s account. This behavior can result in data that's +// encrypted with a KMS key that belongs to the requester, and not the bucket +// owner. +// +// Also, this action requires Amazon Web Services Signature Version 4. For more // information, see [Authenticating Requests (Amazon Web Services Signature Version 4)]. // // To use this operation, you must have permission to perform the diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go index 25b038ecf3..fefdc109d6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go @@ -17,6 +17,11 @@ import ( // This operation is not supported by directory buckets. // +// When you enable versioning on a bucket for the first time, it might take a +// short amount of time for the change to be fully propagated. We recommend that +// you wait for 15 minutes after enabling versioning before issuing write +// operations ( PUT or DELETE ) on objects in the bucket. +// // Sets the versioning state of an existing bucket. // // You can set the versioning state with one of the following values: diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go index 270f19f1a4..a5e18d5856 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go @@ -362,6 +362,22 @@ type PutObjectInput struct { // - This functionality is not supported for Amazon S3 on Outposts. GrantWriteACP *string + // Uploads the object only if the object key name does not already exist in the + // bucket specified. Otherwise, Amazon S3 returns a 412 Precondition Failed error. + // + // If a conflicting operation occurs during the upload S3 returns a 409 + // ConditionalRequestConflict response. On a 409 failure you should retry the + // upload. + // + // Expects the '*' (asterisk) character. + // + // For more information about conditional requests, see [RFC 7232], or [Conditional requests] in the Amazon S3 + // User Guide. + // + // [Conditional requests]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html + // [RFC 7232]: https://tools.ietf.org/html/rfc7232 + IfNoneMatch *string + // A map of metadata to store with the object in S3. Metadata map[string]string diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go index 53f7ffd3d9..6f168bf2b6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go @@ -16,6 +16,10 @@ import ( // This operation is not supported by directory buckets. // +// The SELECT job type for the RestoreObject operation is no longer available to +// new customers. Existing customers of Amazon S3 Select can continue to use the +// feature as usual. [Learn more] +// // # Restores an archived copy of an object back into Amazon S3 // // This functionality is not supported for Amazon S3 on Outposts. @@ -150,6 +154,7 @@ import ( // // [GetBucketNotificationConfiguration] // +// [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ // [PutBucketLifecycleConfiguration]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html // [Object Lifecycle Management]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html // [Permissions Related to Bucket Subresource Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go index c8663907e6..749cf14c09 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go @@ -16,6 +16,10 @@ import ( // This operation is not supported by directory buckets. // +// The SelectObjectContent operation is no longer available to new customers. +// Existing customers of Amazon S3 Select can continue to use the operation as +// usual. [Learn more] +// // This action filters the contents of an Amazon S3 object based on a simple // structured query language (SQL) statement. In the request, along with the SQL // expression, you must also specify a data serialization format (JSON, CSV, or @@ -89,16 +93,17 @@ import ( // // [PutBucketLifecycleConfiguration] // -// [Appendix: SelectObjectContent Response]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html +// [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ // [Selecting Content from Objects]: https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html // [PutBucketLifecycleConfiguration]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html -// [SelectObjectContentRequest - ScanRange]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange // [List of SELECT Object Content Error Codes]: https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList // [GetBucketLifecycleConfiguration]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html // [Using Amazon S3 storage classes]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html // [SELECT Command]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-select.html -// [GetObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html // [Specifying Permissions in a Policy]: https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html +// [Appendix: SelectObjectContent Response]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html +// [SelectObjectContentRequest - ScanRange]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange +// [GetObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html // // [Server-Side Encryption (Using Customer-Provided Encryption Keys)]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html // [Protecting Data Using Server-Side Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html @@ -117,6 +122,9 @@ func (c *Client) SelectObjectContent(ctx context.Context, params *SelectObjectCo return out, nil } +// Learn Amazon S3 Select is no longer available to new customers. Existing +// customers of Amazon S3 Select can continue to use the feature as usual. [Learn more] +// // Request to filter the contents of an Amazon S3 object based on a simple // Structured Query Language (SQL) statement. In the request, along with the SQL // expression, you must specify a data serialization format (JSON or CSV) of the @@ -124,6 +132,7 @@ func (c *Client) SelectObjectContent(ctx context.Context, params *SelectObjectCo // records that match the specified SQL expression. You must also specify the data // serialization format for the response. For more information, see [S3Select API Documentation]. // +// [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ // [S3Select API Documentation]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html type SelectObjectContentInput struct { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go index 231da759d5..a1e8078cc4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go @@ -51,21 +51,31 @@ import ( // Guide. // // Permissions +// - General purpose bucket permissions - To perform a multipart upload with +// encryption using an Key Management Service key, the requester must have +// permission to the kms:Decrypt and kms:GenerateDataKey actions on the key. The +// requester must also have permissions for the kms:GenerateDataKey action for +// the CreateMultipartUpload API. Then, the requester needs permissions for the +// kms:Decrypt action on the UploadPart and UploadPartCopy APIs. // -// - General purpose bucket permissions - For information on the permissions -// required to use the multipart upload API, see [Multipart Upload and Permissions]in the Amazon S3 User Guide. +// These permissions are required because Amazon S3 must decrypt and read data // -// - Directory bucket permissions - To grant access to this API operation on a -// directory bucket, we recommend that you use the [CreateSession]CreateSession API operation -// for session-based authorization. Specifically, you grant the -// s3express:CreateSession permission to the directory bucket in a bucket policy -// or an IAM identity-based policy. Then, you make the CreateSession API call on -// the bucket to obtain a session token. With the session token in your request -// header, you can make API requests to this operation. After the session token -// expires, you make another CreateSession API call to generate a new session -// token for use. Amazon Web Services CLI or SDKs create session and refresh the -// session token automatically to avoid service interruptions when a session -// expires. For more information about authorization, see [CreateSession]CreateSession . +// from the encrypted file parts before it completes the multipart upload. For more +// information about KMS permissions, see [Protecting data using server-side encryption with KMS]in the Amazon S3 User Guide. For +// information about the permissions required to use the multipart upload API, see [Multipart upload and permissions] +// and [Multipart upload API and permissions]in the Amazon S3 User Guide. +// +// - Directory bucket permissions - To grant access to this API operation on a +// directory bucket, we recommend that you use the [CreateSession]CreateSession API operation +// for session-based authorization. Specifically, you grant the +// s3express:CreateSession permission to the directory bucket in a bucket policy +// or an IAM identity-based policy. Then, you make the CreateSession API call on +// the bucket to obtain a session token. With the session token in your request +// header, you can make API requests to this operation. After the session token +// expires, you make another CreateSession API call to generate a new session +// token for use. Amazon Web Services CLI or SDKs create session and refresh the +// session token automatically to avoid service interruptions when a session +// expires. For more information about authorization, see [CreateSession]CreateSession . // // Data integrity General purpose bucket - To ensure that data is not corrupted // traversing the network, specify the Content-MD5 header in the upload part @@ -142,7 +152,6 @@ import ( // [ListParts]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html // [Authenticating Requests: Using the Authorization Header (Amazon Web Services Signature Version 4)]: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html -// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html // [CompleteMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html // [CreateMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html @@ -151,7 +160,11 @@ import ( // [AbortMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html // [Multipart Upload Overview]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html // [ListMultipartUploads]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html -// [Multipart Upload and Permissions]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html +// +// [Protecting data using server-side encryption with KMS]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html +// [Multipart upload and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html +// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html +// [Multipart upload API and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions func (c *Client) UploadPart(ctx context.Context, params *UploadPartInput, optFns ...func(*Options)) (*UploadPartOutput, error) { if params == nil { params = &UploadPartInput{} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go index 0bd16a3a5a..77c77b2f93 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go @@ -66,24 +66,31 @@ import ( // - If the destination bucket is a general purpose bucket, you must have the // s3:PutObject permission to write the object copy to the destination bucket. // -// For information about permissions required to use the multipart upload API, see [Multipart upload API and permissions] +// - To perform a multipart upload with encryption using an Key Management +// Service key, the requester must have permission to the kms:Decrypt and +// kms:GenerateDataKey actions on the key. The requester must also have +// permissions for the kms:GenerateDataKey action for the CreateMultipartUpload +// API. Then, the requester needs permissions for the kms:Decrypt action on the +// UploadPart and UploadPartCopy APIs. These permissions are required because +// Amazon S3 must decrypt and read data from the encrypted file parts before it +// completes the multipart upload. For more information about KMS permissions, see [Protecting data using server-side encryption with KMS] +// in the Amazon S3 User Guide. For information about the permissions required to +// use the multipart upload API, see [Multipart upload and permissions]and [Multipart upload API and permissions]in the Amazon S3 User Guide. // -// in the Amazon S3 User Guide. +// - Directory bucket permissions - You must have permissions in a bucket policy +// or an IAM identity-based policy based on the source and destination bucket types +// in an UploadPartCopy operation. // -// - Directory bucket permissions - You must have permissions in a bucket policy -// or an IAM identity-based policy based on the source and destination bucket types -// in an UploadPartCopy operation. +// - If the source object that you want to copy is in a directory bucket, you +// must have the s3express:CreateSession permission in the Action element of a +// policy to read the object. By default, the session is in the ReadWrite mode. +// If you want to restrict the access, you can explicitly set the +// s3express:SessionMode condition key to ReadOnly on the copy source bucket. // -// - If the source object that you want to copy is in a directory bucket, you -// must have the s3express:CreateSession permission in the Action element of a -// policy to read the object. By default, the session is in the ReadWrite mode. -// If you want to restrict the access, you can explicitly set the -// s3express:SessionMode condition key to ReadOnly on the copy source bucket. -// -// - If the copy destination is a directory bucket, you must have the -// s3express:CreateSession permission in the Action element of a policy to write -// the object to the destination. The s3express:SessionMode condition key cannot -// be set to ReadOnly on the copy destination. +// - If the copy destination is a directory bucket, you must have the +// s3express:CreateSession permission in the Action element of a policy to write +// the object to the destination. The s3express:SessionMode condition key cannot +// be set to ReadOnly on the copy destination. // // For example policies, see [Example bucket policies for S3 Express One Zone]and [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone]in the Amazon S3 User Guide. // @@ -134,6 +141,8 @@ import ( // [ListParts]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html // [UploadPart]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html +// [Protecting data using server-side encryption with KMS]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html +// [Multipart upload and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html // [Multipart upload API and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions // [CompleteMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html // [CreateMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go index d953cdc1ca..62972c320f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go @@ -8113,6 +8113,19 @@ func awsRestxml_deserializeOpDocumentListBucketsOutput(v **ListBucketsOutput, de return err } + case strings.EqualFold("ContinuationToken", t.Name.Local): + val, err := decoder.Value() + if err != nil { + return err + } + if val == nil { + break + } + { + xtv := string(val) + sv.ContinuationToken = ptr.String(xtv) + } + case strings.EqualFold("Owner", t.Name.Local): nodeDecoder := smithyxml.WrapNodeDecoder(decoder.Decoder, t) if err := awsRestxml_deserializeDocumentOwner(&sv.Owner, nodeDecoder); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go index e365ab972f..6860d6f751 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go @@ -3,4 +3,4 @@ package s3 // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.58.2" +const goModuleVersion = "1.61.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints/endpoints.go index f3e6b0751d..c887fa3534 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints/endpoints.go @@ -96,7 +96,7 @@ var partitionRegexp = struct { AwsUsGov *regexp.Regexp }{ - Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$"), + Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$"), AwsCn: regexp.MustCompile("^cn\\-\\w+\\-\\d+$"), AwsIso: regexp.MustCompile("^us\\-iso\\-\\w+\\-\\d+$"), AwsIsoB: regexp.MustCompile("^us\\-isob\\-\\w+\\-\\d+$"), @@ -252,6 +252,15 @@ var defaultPartitions = endpoints.Partitions{ }: { Hostname: "s3.dualstack.ap-southeast-4.amazonaws.com", }, + endpoints.EndpointKey{ + Region: "ap-southeast-5", + }: endpoints.Endpoint{}, + endpoints.EndpointKey{ + Region: "ap-southeast-5", + Variant: endpoints.DualStackVariant, + }: { + Hostname: "s3.dualstack.ap-southeast-5.amazonaws.com", + }, endpoints.EndpointKey{ Region: "aws-global", }: endpoints.Endpoint{ diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/presign_post.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/presign_post.go new file mode 100644 index 0000000000..6bdbcde668 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/presign_post.go @@ -0,0 +1,433 @@ +package s3 + +import ( + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "net/url" + "strings" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" + "github.com/aws/aws-sdk-go-v2/aws/retry" + v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" + awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" + internalcontext "github.com/aws/aws-sdk-go-v2/internal/context" + "github.com/aws/aws-sdk-go-v2/internal/sdk" + acceptencodingcust "github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding" + presignedurlcust "github.com/aws/aws-sdk-go-v2/service/internal/presigned-url" + "github.com/aws/smithy-go/middleware" + smithyhttp "github.com/aws/smithy-go/transport/http" +) + +const ( + algorithmHeader = "X-Amz-Algorithm" + credentialHeader = "X-Amz-Credential" + dateHeader = "X-Amz-Date" + tokenHeader = "X-Amz-Security-Token" + signatureHeader = "X-Amz-Signature" + + algorithm = "AWS4-HMAC-SHA256" + aws4Request = "aws4_request" + bucketHeader = "bucket" + defaultExpiresIn = 15 * time.Minute + shortDateLayout = "20060102" +) + +// PresignPostObject is a special kind of [presigned request] used to send a request using +// form data, likely from an HTML form on a browser. +// Unlike other presigned operations, the return values of this function are not meant to be used directly +// to make an HTTP request but rather to be used as inputs to a form. See [the docs] for more information +// on how to use these values +// +// [presigned request] https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html +// [the docs] https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html +func (c *PresignClient) PresignPostObject(ctx context.Context, params *PutObjectInput, optFns ...func(*PresignPostOptions)) (*PresignedPostRequest, error) { + if params == nil { + params = &PutObjectInput{} + } + clientOptions := c.options.copy() + options := PresignPostOptions{ + Expires: clientOptions.Expires, + PostPresigner: &postSignAdapter{}, + } + for _, fn := range optFns { + fn(&options) + } + clientOptFns := append(clientOptions.ClientOptions, withNopHTTPClientAPIOption) + cvt := presignPostConverter(options) + result, _, err := c.client.invokeOperation(ctx, "$type:L", params, clientOptFns, + c.client.addOperationPutObjectMiddlewares, + cvt.ConvertToPresignMiddleware, + func(stack *middleware.Stack, options Options) error { + return awshttp.RemoveContentTypeHeader(stack) + }, + ) + if err != nil { + return nil, err + } + + out := result.(*PresignedPostRequest) + return out, nil +} + +// PresignedPostRequest represents a presigned request to be sent using HTTP verb POST and FormData +type PresignedPostRequest struct { + // Represents the Base URL to make a request to + URL string + // Values is a key-value map of values to be sent as FormData + // these values are not encoded + Values map[string]string +} + +// postSignAdapter adapter to implement the presignPost interface +type postSignAdapter struct{} + +// PresignPost creates a special kind of [presigned request] +// to be used with HTTP verb POST. +// It differs from PUT request mostly on +// 1. It accepts a new set of parameters, `Conditions[]`, that are used to create a policy doc to limit where an object can be posted to +// 2. The return value needs to have more processing since it's meant to be sent via a form and not stand on its own +// 3. There's no body to be signed, since that will be attached when the actual request is made +// 4. The signature is made based on the policy document, not the whole request +// More information can be found at https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html +// +// [presigned request] https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html +func (s *postSignAdapter) PresignPost( + credentials aws.Credentials, + bucket string, key string, + region string, service string, signingTime time.Time, conditions []interface{}, expirationTime time.Time, optFns ...func(*v4.SignerOptions), +) (fields map[string]string, err error) { + credentialScope := buildCredentialScope(signingTime, region, service) + credentialStr := credentials.AccessKeyID + "/" + credentialScope + + policyDoc, err := createPolicyDocument(expirationTime, signingTime, bucket, key, credentialStr, &credentials.SessionToken, conditions) + if err != nil { + return nil, err + } + + signature := buildSignature(policyDoc, credentials.SecretAccessKey, service, region, signingTime) + + fields = getPostSignRequiredFields(signingTime, credentialStr, credentials) + fields[signatureHeader] = signature + fields["key"] = key + fields["policy"] = policyDoc + + return fields, nil +} + +func getPostSignRequiredFields(t time.Time, credentialStr string, awsCredentials aws.Credentials) map[string]string { + fields := map[string]string{ + algorithmHeader: algorithm, + dateHeader: t.UTC().Format("20060102T150405Z"), + credentialHeader: credentialStr, + } + + sessionToken := awsCredentials.SessionToken + if len(sessionToken) > 0 { + fields[tokenHeader] = sessionToken + } + + return fields +} + +// PresignPost defines the interface to presign a POST request +type PresignPost interface { + PresignPost( + credentials aws.Credentials, + bucket string, key string, + region string, service string, signingTime time.Time, conditions []interface{}, expirationTime time.Time, + optFns ...func(*v4.SignerOptions), + ) (fields map[string]string, err error) +} + +// PresignPostOptions represent the options to be passed to a PresignPost sign request +type PresignPostOptions struct { + + // ClientOptions are list of functional options to mutate client options used by + // the presign client. + ClientOptions []func(*Options) + + // PostPresigner to use. One will be created if none is provided + PostPresigner PresignPost + + // Expires sets the expiration duration for the generated presign url. This should + // be the duration in seconds the presigned URL should be considered valid for. If + // not set or set to zero, presign url would default to expire after 900 seconds. + Expires time.Duration + + // Conditions a list of extra conditions to pass to the policy document + // Available conditions can be found [here] + // + // [here]https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html#sigv4-PolicyConditions + Conditions []interface{} +} + +type presignPostConverter PresignPostOptions + +// presignPostRequestMiddlewareOptions is the options for the presignPostRequestMiddleware middleware. +type presignPostRequestMiddlewareOptions struct { + CredentialsProvider aws.CredentialsProvider + Presigner PresignPost + LogSigning bool + ExpiresIn time.Duration + Conditions []interface{} +} + +type presignPostRequestMiddleware struct { + credentialsProvider aws.CredentialsProvider + presigner PresignPost + logSigning bool + expiresIn time.Duration + conditions []interface{} +} + +// newPresignPostRequestMiddleware returns a new presignPostRequestMiddleware +// initialized with the presigner. +func newPresignPostRequestMiddleware(options presignPostRequestMiddlewareOptions) *presignPostRequestMiddleware { + return &presignPostRequestMiddleware{ + credentialsProvider: options.CredentialsProvider, + presigner: options.Presigner, + logSigning: options.LogSigning, + expiresIn: options.ExpiresIn, + conditions: options.Conditions, + } +} + +// ID provides the middleware ID. +func (*presignPostRequestMiddleware) ID() string { return "PresignPostRequestMiddleware" } + +// HandleFinalize will take the provided input and create a presigned url for +// the http request using the SigV4 presign authentication scheme. +// +// Since the signed request is not a valid HTTP request +func (s *presignPostRequestMiddleware) HandleFinalize( + ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, +) ( + out middleware.FinalizeOutput, metadata middleware.Metadata, err error, +) { + req, ok := in.Request.(*smithyhttp.Request) + if !ok { + return out, metadata, fmt.Errorf("unexpected request middleware type %T", in.Request) + } + + input := getOperationInput(ctx) + asS3Put, ok := input.(*PutObjectInput) + if !ok { + return out, metadata, fmt.Errorf("expected PutObjectInput") + } + bucketName, ok := asS3Put.bucket() + if !ok { + return out, metadata, fmt.Errorf("requested input bucketName not found on request") + } + uploadKey := asS3Put.Key + if uploadKey == nil { + return out, metadata, fmt.Errorf("PutObject input does not have a key input") + } + + httpReq := req.Build(ctx) + u := httpReq.URL.String() + + signingName := awsmiddleware.GetSigningName(ctx) + signingRegion := awsmiddleware.GetSigningRegion(ctx) + + credentials, err := s.credentialsProvider.Retrieve(ctx) + if err != nil { + return out, metadata, &v4.SigningError{ + Err: fmt.Errorf("failed to retrieve credentials: %w", err), + } + } + skew := internalcontext.GetAttemptSkewContext(ctx) + signingTime := sdk.NowTime().Add(skew) + expirationTime := signingTime.Add(s.expiresIn).UTC() + + fields, err := s.presigner.PresignPost( + credentials, + bucketName, + *uploadKey, + signingRegion, + signingName, + signingTime, + s.conditions, + expirationTime, + func(o *v4.SignerOptions) { + o.Logger = middleware.GetLogger(ctx) + o.LogSigning = s.logSigning + }) + if err != nil { + return out, metadata, &v4.SigningError{ + Err: fmt.Errorf("failed to sign http request, %w", err), + } + } + + // Other middlewares may set default values on the URL on the path or as query params. Remove them + baseURL := toBaseURL(u) + + out.Result = &PresignedPostRequest{ + URL: baseURL, + Values: fields, + } + + return out, metadata, nil +} + +func toBaseURL(fullURL string) string { + a, _ := url.Parse(fullURL) + return a.Scheme + "://" + a.Host +} + +// Adapted from existing PresignConverter middleware +func (c presignPostConverter) ConvertToPresignMiddleware(stack *middleware.Stack, options Options) (err error) { + stack.Build.Remove("UserAgent") + stack.Finalize.Remove((*acceptencodingcust.DisableGzip)(nil).ID()) + stack.Finalize.Remove((*retry.Attempt)(nil).ID()) + stack.Finalize.Remove((*retry.MetricsHeader)(nil).ID()) + stack.Deserialize.Clear() + + if err := stack.Finalize.Insert(&presignContextPolyfillMiddleware{}, "Signing", middleware.Before); err != nil { + return err + } + + // if no expiration is set, set one + expiresIn := c.Expires + if expiresIn == 0 { + expiresIn = defaultExpiresIn + } + + pmw := newPresignPostRequestMiddleware(presignPostRequestMiddlewareOptions{ + CredentialsProvider: options.Credentials, + Presigner: c.PostPresigner, + LogSigning: options.ClientLogMode.IsSigning(), + ExpiresIn: expiresIn, + Conditions: c.Conditions, + }) + if _, err := stack.Finalize.Swap("Signing", pmw); err != nil { + return err + } + if err = smithyhttp.AddNoPayloadDefaultContentTypeRemover(stack); err != nil { + return err + } + err = presignedurlcust.AddAsIsPresigningMiddleware(stack) + if err != nil { + return err + } + return nil +} + +func createPolicyDocument(expirationTime time.Time, signingTime time.Time, bucket string, key string, credentialString string, securityToken *string, extraConditions []interface{}) (string, error) { + initialConditions := []interface{}{ + map[string]string{ + algorithmHeader: algorithm, + }, + map[string]string{ + bucketHeader: bucket, + }, + map[string]string{ + credentialHeader: credentialString, + }, + map[string]string{ + dateHeader: signingTime.UTC().Format("20060102T150405Z"), + }, + } + + var conditions []interface{} + for _, v := range initialConditions { + conditions = append(conditions, v) + } + + if securityToken != nil && *securityToken != "" { + conditions = append(conditions, map[string]string{ + tokenHeader: *securityToken, + }) + } + + // append user-defined conditions at the end + conditions = append(conditions, extraConditions...) + + // The policy allows you to set a "key" value to specify what's the name of the + // key to add. Customers can add one by specifying one in their conditions, + // so we're checking if one has already been set. + // If none is found, restrict this to just the key name passed on the request + // This can be disabled by adding a condition that explicitly allows + // everything + if !isAlreadyCheckingForKey(conditions) { + conditions = append(conditions, map[string]string{"key": key}) + } + + policyDoc := map[string]interface{}{ + "conditions": conditions, + "expiration": expirationTime.Format(time.RFC3339), + } + + jsonBytes, err := json.Marshal(policyDoc) + if err != nil { + return "", err + } + + return base64.StdEncoding.EncodeToString(jsonBytes), nil +} + +func isAlreadyCheckingForKey(conditions []interface{}) bool { + // Need to check for two conditions: + // 1. A condition of the form ["starts-with", "$key", "mykey"] + // 2. A condition of the form {"key": "mykey"} + for _, c := range conditions { + slice, ok := c.([]interface{}) + if ok && len(slice) > 1 { + if slice[0] == "starts-with" && slice[1] == "$key" { + return true + } + } + m, ok := c.(map[string]interface{}) + if ok && len(m) > 0 { + for k := range m { + if k == "key" { + return true + } + } + } + // Repeat this but for map[string]string due to type constrains + ms, ok := c.(map[string]string) + if ok && len(ms) > 0 { + for k := range ms { + if k == "key" { + return true + } + } + } + } + return false +} + +// these methods have been copied from v4 implementation since they are not exported for public use +func hmacsha256(key []byte, data []byte) []byte { + hash := hmac.New(sha256.New, key) + hash.Write(data) + return hash.Sum(nil) +} + +func buildSignature(strToSign, secret, service, region string, t time.Time) string { + key := deriveKey(secret, service, region, t) + return hex.EncodeToString(hmacsha256(key, []byte(strToSign))) +} + +func deriveKey(secret, service, region string, t time.Time) []byte { + hmacDate := hmacsha256([]byte("AWS4"+secret), []byte(t.UTC().Format(shortDateLayout))) + hmacRegion := hmacsha256(hmacDate, []byte(region)) + hmacService := hmacsha256(hmacRegion, []byte(service)) + return hmacsha256(hmacService, []byte(aws4Request)) +} + +func buildCredentialScope(signingTime time.Time, region, service string) string { + return strings.Join([]string{ + signingTime.UTC().Format(shortDateLayout), + region, + service, + aws4Request, + }, "/") +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go index 96022eee0f..9dd09cd6e6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go @@ -199,6 +199,11 @@ func awsRestxml_serializeOpHttpBindingsCompleteMultipartUploadInput(v *CompleteM encoder.SetHeader(locationName).String(*v.ExpectedBucketOwner) } + if v.IfNoneMatch != nil && len(*v.IfNoneMatch) > 0 { + locationName := "If-None-Match" + encoder.SetHeader(locationName).String(*v.IfNoneMatch) + } + if v.Key == nil || len(*v.Key) == 0 { return &smithy.SerializationError{Err: fmt.Errorf("input member Key must not be empty")} } @@ -4546,6 +4551,10 @@ func (m *awsRestxml_serializeOpListBuckets) HandleSerialize(ctx context.Context, return out, metadata, &smithy.SerializationError{Err: err} } + if err := awsRestxml_serializeOpHttpBindingsListBucketsInput(input, restEncoder); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + if request.Request, err = restEncoder.Encode(request.Request); err != nil { return out, metadata, &smithy.SerializationError{Err: err} } @@ -4558,6 +4567,14 @@ func awsRestxml_serializeOpHttpBindingsListBucketsInput(v *ListBucketsInput, enc return fmt.Errorf("unsupported serialization of nil %T", v) } + if v.ContinuationToken != nil { + encoder.SetQuery("continuation-token").String(*v.ContinuationToken) + } + + if v.MaxBuckets != nil { + encoder.SetQuery("max-buckets").Integer(*v.MaxBuckets) + } + return nil } @@ -6988,6 +7005,11 @@ func awsRestxml_serializeOpHttpBindingsPutObjectInput(v *PutObjectInput, encoder encoder.SetHeader(locationName).String(*v.GrantWriteACP) } + if v.IfNoneMatch != nil && len(*v.IfNoneMatch) > 0 { + locationName := "If-None-Match" + encoder.SetHeader(locationName).String(*v.IfNoneMatch) + } + if v.Key == nil || len(*v.Key) == 0 { return &smithy.SerializationError{Err: fmt.Errorf("input member Key must not be empty")} } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go index e2775f5a11..aee73d7cf6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go @@ -673,8 +673,8 @@ type CSVOutput struct { noSmithyDocumentSerde } -// The container element for specifying the default Object Lock retention settings -// for new objects placed in the specified bucket. +// The container element for optionally specifying the default Object Lock +// retention settings for new objects placed in the specified bucket. // // - The DefaultRetention settings require both a mode and a period. // @@ -870,6 +870,12 @@ type Encryption struct { // Specifies encryption-related information for an Amazon S3 bucket that is a // destination for replicated objects. +// +// If you're specifying a customer managed KMS key, we recommend using a fully +// qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the +// key within the requester’s account. This behavior can result in data that's +// encrypted with a KMS key that belongs to the requester, and not the bucket +// owner. type EncryptionConfiguration struct { // Specifies the ID (Key ARN or Alias ARN) of the customer managed Amazon Web @@ -3029,7 +3035,14 @@ type Part struct { type PartitionedPrefix struct { // Specifies the partition date source for the partitioned prefix. - // PartitionDateSource can be EventTime or DeliveryTime. + // PartitionDateSource can be EventTime or DeliveryTime . + // + // For DeliveryTime , the time in the log file names corresponds to the delivery + // time for the log files. + // + // For EventTime , The logs delivered are for a specific day only. The year, month, + // and day correspond to the day on which the event occurred, and the hour, minutes + // and seconds are set to 00 in the key. PartitionDateSource PartitionDateSource noSmithyDocumentSerde @@ -3107,8 +3120,8 @@ type PublicAccessBlockConfiguration struct { // Specifies whether Amazon S3 should restrict public bucket policies for this // bucket. Setting this element to TRUE restricts access to this bucket to only - // Amazon Web Service principals and authorized users within this account if the - // bucket has a public policy. + // Amazon Web Servicesservice principals and authorized users within this account + // if the bucket has a public policy. // // Enabling this setting doesn't affect previously stored bucket policies, except // that public and cross-account access within any public bucket policy, including @@ -3149,7 +3162,14 @@ type QueueConfiguration struct { // The container for the records event. type RecordsEvent struct { - // The byte array of partial, one or more result records. + // The byte array of partial, one or more result records. S3 Select doesn't + // guarantee that a record will be self-contained in one record frame. To ensure + // continuous streaming of data, S3 Select might split the same record across + // multiple record frames instead of aggregating the results in memory. Some S3 + // clients (for example, the SDK for Java) handle this behavior by creating a + // ByteStream out of the response by default. Other clients might not handle this + // behavior by default. In those cases, you must aggregate the results on the + // client side and parse the response. Payload []byte noSmithyDocumentSerde @@ -3484,13 +3504,23 @@ type RestoreRequest struct { // Describes the location where the restore job's output is stored. OutputLocation *OutputLocation + // Amazon S3 Select is no longer available to new customers. Existing customers of + // Amazon S3 Select can continue to use the feature as usual. [Learn more] + // // Describes the parameters for Select job types. + // + // [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ SelectParameters *SelectParameters // Retrieval tier at which the restore will be processed. Tier Tier + // Amazon S3 Select is no longer available to new customers. Existing customers of + // Amazon S3 Select can continue to use the feature as usual. [Learn more] + // // Type of restore request. + // + // [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ Type RestoreRequestType noSmithyDocumentSerde @@ -3677,11 +3707,26 @@ type SelectObjectContentEventStreamMemberStats struct { func (*SelectObjectContentEventStreamMemberStats) isSelectObjectContentEventStream() {} +// Amazon S3 Select is no longer available to new customers. Existing customers of +// Amazon S3 Select can continue to use the feature as usual. [Learn more] +// // Describes the parameters for Select job types. +// +// Learn [How to optimize querying your data in Amazon S3] using [Amazon Athena], [S3 Object Lambda], or client-side filtering. +// +// [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ +// [How to optimize querying your data in Amazon S3]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ +// [Amazon Athena]: https://docs.aws.amazon.com/athena/latest/ug/what-is.html +// [S3 Object Lambda]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html type SelectParameters struct { + // Amazon S3 Select is no longer available to new customers. Existing customers of + // Amazon S3 Select can continue to use the feature as usual. [Learn more] + // // The expression that is used to query the object. // + // [Learn more]: http://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/ + // // This member is required. Expression *string @@ -3711,6 +3756,12 @@ type SelectParameters struct { // encrypted with SSE-KMS to a bucket. By default, Amazon S3 uses this KMS key for // SSE-KMS. For more information, see [PUT Bucket encryption]in the Amazon S3 API Reference. // +// If you're specifying a customer managed KMS key, we recommend using a fully +// qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the +// key within the requester’s account. This behavior can result in data that's +// encrypted with a KMS key that belongs to the requester, and not the bucket +// owner. +// // [PUT Bucket encryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html type ServerSideEncryptionByDefault struct { @@ -3763,6 +3814,12 @@ type ServerSideEncryptionConfiguration struct { } // Specifies the default server-side encryption configuration. +// +// If you're specifying a customer managed KMS key, we recommend using a fully +// qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the +// key within the requester’s account. This behavior can result in data that's +// encrypted with a KMS key that belongs to the requester, and not the bucket +// owner. type ServerSideEncryptionRule struct { // Specifies the default server-side encryption to apply to new objects in the diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md index 03f870f4f8..a72bd91dfb 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md @@ -1,3 +1,16 @@ +# v1.22.7 (2024-09-04) + +* No change notes available for this release. + +# v1.22.6 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.22.5 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.22.4 (2024-07-18) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go index f252ba39e8..012580e77f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go @@ -3,4 +3,4 @@ package sso // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.22.4" +const goModuleVersion = "1.22.7" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go index d522129e76..081867b3da 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go @@ -94,7 +94,7 @@ var partitionRegexp = struct { AwsUsGov *regexp.Regexp }{ - Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$"), + Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$"), AwsCn: regexp.MustCompile("^cn\\-\\w+\\-\\d+$"), AwsIso: regexp.MustCompile("^us\\-iso\\-\\w+\\-\\d+$"), AwsIsoB: regexp.MustCompile("^us\\-isob\\-\\w+\\-\\d+$"), diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md index adf698c802..6924f05836 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md @@ -1,3 +1,16 @@ +# v1.26.7 (2024-09-04) + +* No change notes available for this release. + +# v1.26.6 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.26.5 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.26.4 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go index b71407f8db..880f8bbeff 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go @@ -3,4 +3,4 @@ package ssooidc // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.26.4" +const goModuleVersion = "1.26.7" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go index 4a29eaa20b..b4c61ebad9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go @@ -94,7 +94,7 @@ var partitionRegexp = struct { AwsUsGov *regexp.Regexp }{ - Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$"), + Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$"), AwsCn: regexp.MustCompile("^cn\\-\\w+\\-\\d+$"), AwsIso: regexp.MustCompile("^us\\-iso\\-\\w+\\-\\d+$"), AwsIsoB: regexp.MustCompile("^us\\-isob\\-\\w+\\-\\d+$"), diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md index f3128d7525..9bcf2568ed 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md @@ -1,3 +1,20 @@ +# v1.30.7 (2024-09-04) + +* No change notes available for this release. + +# v1.30.6 (2024-09-03) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.30.5 (2024-08-22) + +* No change notes available for this release. + +# v1.30.4 (2024-08-15) + +* **Dependency Update**: Bump minimum Go version to 1.21. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.30.3 (2024-07-10.2) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go index 84e221f2b9..c3a970dff4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go @@ -3,4 +3,4 @@ package sts // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.30.3" +const goModuleVersion = "1.30.7" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go index 3dbd993b54..9fe930b8d7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go @@ -94,7 +94,7 @@ var partitionRegexp = struct { AwsUsGov *regexp.Regexp }{ - Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$"), + Aws: regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$"), AwsCn: regexp.MustCompile("^cn\\-\\w+\\-\\d+$"), AwsIso: regexp.MustCompile("^us\\-iso\\-\\w+\\-\\d+$"), AwsIsoB: regexp.MustCompile("^us\\-isob\\-\\w+\\-\\d+$"), @@ -172,6 +172,9 @@ var defaultPartitions = endpoints.Partitions{ endpoints.EndpointKey{ Region: "ap-southeast-4", }: endpoints.Endpoint{}, + endpoints.EndpointKey{ + Region: "ap-southeast-5", + }: endpoints.Endpoint{}, endpoints.EndpointKey{ Region: "aws-global", }: endpoints.Endpoint{ diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go index 069debf1f5..c3516e018a 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -9503,6 +9503,12 @@ var awsPartition = partition{ endpointKey{ Region: "eu-central-1", }: endpoint{}, + endpointKey{ + Region: "eu-north-1", + }: endpoint{}, + endpointKey{ + Region: "eu-south-2", + }: endpoint{}, endpointKey{ Region: "eu-west-1", }: endpoint{}, @@ -32566,6 +32572,9 @@ var awsPartition = partition{ endpointKey{ Region: "ca-central-1", }: endpoint{}, + endpointKey{ + Region: "ca-west-1", + }: endpoint{}, endpointKey{ Region: "eu-central-1", }: endpoint{}, diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index 514bf3ade2..d15e3c84c0 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.55.3" +const SDKVersion = "1.55.5" diff --git a/vendor/github.com/aws/smithy-go/CHANGELOG.md b/vendor/github.com/aws/smithy-go/CHANGELOG.md index bdbc7b4365..96d57df805 100644 --- a/vendor/github.com/aws/smithy-go/CHANGELOG.md +++ b/vendor/github.com/aws/smithy-go/CHANGELOG.md @@ -1,3 +1,9 @@ +# Release (2024-08-14) + +## Module Highlights +* `github.com/aws/smithy-go`: v1.20.4 + * **Dependency Update**: Bump minimum Go version to 1.21. + # Release (2024-06-27) ## Module Highlights diff --git a/vendor/github.com/aws/smithy-go/README.md b/vendor/github.com/aws/smithy-go/README.md index c374f69283..08df74589a 100644 --- a/vendor/github.com/aws/smithy-go/README.md +++ b/vendor/github.com/aws/smithy-go/README.md @@ -1,19 +1,21 @@ -## Smithy Go +# Smithy Go [![Go Build Status](https://github.com/aws/smithy-go/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/aws/smithy-go/actions/workflows/go.yml)[![Codegen Build Status](https://github.com/aws/smithy-go/actions/workflows/codegen.yml/badge.svg?branch=main)](https://github.com/aws/smithy-go/actions/workflows/codegen.yml) -[Smithy](https://smithy.io/) code generators for Go. +[Smithy](https://smithy.io/) code generators for Go and the accompanying smithy-go runtime. + +The smithy-go runtime requires a minimum version of Go 1.20. **WARNING: All interfaces are subject to change.** -## Can I use this? +## Can I use the code generators? In order to generate a usable smithy client you must provide a [protocol definition](https://github.com/aws/smithy-go/blob/main/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/ProtocolGenerator.java), such as [AWS restJson1](https://smithy.io/2.0/aws/protocols/aws-restjson1-protocol.html), in order to generate transport mechanisms and serialization/deserialization code ("serde") accordingly. -The code generator does not currently support any protocols out of the box, +The code generator does not currently support any protocols out of the box other than the new `smithy.protocols#rpcv2Cbor`, therefore the useability of this project on its own is currently limited. Support for all [AWS protocols](https://smithy.io/2.0/aws/protocols/index.html) exists in [aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2). We are @@ -21,6 +23,70 @@ tracking the movement of those out of the SDK into smithy-go in [#458](https://github.com/aws/smithy-go/issues/458), but there's currently no timeline for doing so. +## Plugins + +This repository implements the following Smithy build plugins: + +| ID | GAV prefix | Description | +|----|------------|-------------| +| `go-codegen` | `software.amazon.smithy.go:smithy-go-codegen` | Implements Go client code generation for Smithy models. | +| `go-server-codegen` | `software.amazon.smithy.go:smithy-go-codegen` | Implements Go server code generation for Smithy models. | + +**NOTE: Build plugins are not currently published to mavenCentral. You must publish to mavenLocal to make the build plugins visible to the Smithy CLI. The artifact version is currently fixed at 0.1.0.** + +## `go-codegen` + +### Configuration + +[`GoSettings`](codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/GoSettings.java) +contains all of the settings enabled from `smithy-build.json` and helper +methods and types. The up-to-date list of top-level properties enabled for +`go-client-codegen` can be found in `GoSettings::from()`. + +| Setting | Type | Required | Description | +|-----------------|---------|----------|-----------------------------------------------------------------------------------------------------------------------------| +| `service` | string | yes | The Shape ID of the service for which to generate the client. | +| `module` | string | yes | Name of the module in `generated.json` (and `go.mod` if `generateGoMod` is enabled) and `doc.go`. | +| `generateGoMod` | boolean | | Whether to generate a default `go.mod` file. The default value is `false`. | +| `goDirective` | string | | [Go directive](https://go.dev/ref/mod#go-mod-file-go) of the module. The default value is the minimum supported Go version. | + +### Supported protocols + +| Protocol | Notes | +|----------|-------| +| [`smithy.protocols#rpcv2Cbor`](https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html) | Event streaming not yet implemented. | + +### Example + +This example applies the `go-codegen` build plugin to the Smithy quickstart +example created from `smithy init`: + +```json +{ + "version": "1.0", + "sources": [ + "models" + ], + "maven": { + "dependencies": [ + "software.amazon.smithy.go:smithy-go-codegen:0.1.0" + ] + }, + "plugins": { + "go-codegen": { + "service": "example.weather#Weather", + "module": "github.com/example/weather", + "generateGoMod": true, + "goDirective": "1.20" + } + } +} +``` + +## `go-server-codegen` + +This plugin is a work-in-progress and is currently undocumented. + ## License This project is licensed under the Apache-2.0 License. diff --git a/vendor/github.com/aws/smithy-go/go_module_metadata.go b/vendor/github.com/aws/smithy-go/go_module_metadata.go index f82b767255..33355b22c8 100644 --- a/vendor/github.com/aws/smithy-go/go_module_metadata.go +++ b/vendor/github.com/aws/smithy-go/go_module_metadata.go @@ -3,4 +3,4 @@ package smithy // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.20.3" +const goModuleVersion = "1.20.4" diff --git a/vendor/github.com/prometheus/client_golang/NOTICE b/vendor/github.com/prometheus/client_golang/NOTICE index dd878a30ee..b9cc55abbb 100644 --- a/vendor/github.com/prometheus/client_golang/NOTICE +++ b/vendor/github.com/prometheus/client_golang/NOTICE @@ -16,8 +16,3 @@ Go support for Protocol Buffers - Google's data interchange format http://github.com/golang/protobuf/ Copyright 2010 The Go Authors See source code for license details. - -Support for streaming Protocol Buffer messages for the Go language (golang). -https://github.com/matttproud/golang_protobuf_extensions -Copyright 2013 Matt T. Proud -Licensed under the Apache License, Version 2.0 diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index ad9a71a5e0..520cbd7d41 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -22,13 +22,13 @@ import ( // goRuntimeMemStats provides the metrics initially provided by runtime.ReadMemStats. // From Go 1.17 those similar (and better) statistics are provided by runtime/metrics, so // while eval closure works on runtime.MemStats, the struct from Go 1.17+ is -// populated using runtime/metrics. +// populated using runtime/metrics. Those are the defaults we can't alter. func goRuntimeMemStats() memStatsMetrics { return memStatsMetrics{ { desc: NewDesc( memstatNamespace("alloc_bytes"), - "Number of bytes allocated and still in use.", + "Number of bytes allocated in heap and currently in use. Equals to /memory/classes/heap/objects:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) }, @@ -36,7 +36,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("alloc_bytes_total"), - "Total number of bytes allocated, even if freed.", + "Total number of bytes allocated in heap until now, even if released already. Equals to /gc/heap/allocs:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) }, @@ -44,23 +44,16 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("sys_bytes"), - "Number of bytes obtained from system.", + "Number of bytes obtained from system. Equals to /memory/classes/total:byte.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) }, valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("lookups_total"), - "Total number of pointer lookups.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) }, - valType: CounterValue, }, { desc: NewDesc( memstatNamespace("mallocs_total"), - "Total number of mallocs.", + // TODO(bwplotka): We could add go_memstats_heap_objects, probably useful for discovery. Let's gather more feedback, kind of a waste of bytes for everybody for compatibility reasons to keep both, and we can't really rename/remove useful metric. + "Total number of heap objects allocated, both live and gc-ed. Semantically a counter version for go_memstats_heap_objects gauge. Equals to /gc/heap/allocs:objects + /gc/heap/tiny/allocs:objects.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) }, @@ -68,7 +61,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("frees_total"), - "Total number of frees.", + "Total number of heap objects frees. Equals to /gc/heap/frees:objects + /gc/heap/tiny/allocs:objects.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) }, @@ -76,7 +69,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_alloc_bytes"), - "Number of heap bytes allocated and still in use.", + "Number of heap bytes allocated and currently in use, same as go_memstats_alloc_bytes. Equals to /memory/classes/heap/objects:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) }, @@ -84,7 +77,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_sys_bytes"), - "Number of heap bytes obtained from system.", + "Number of heap bytes obtained from system. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes + /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) }, @@ -92,7 +85,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_idle_bytes"), - "Number of heap bytes waiting to be used.", + "Number of heap bytes waiting to be used. Equals to /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) }, @@ -100,7 +93,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_inuse_bytes"), - "Number of heap bytes that are in use.", + "Number of heap bytes that are in use. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) }, @@ -108,7 +101,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_released_bytes"), - "Number of heap bytes released to OS.", + "Number of heap bytes released to OS. Equals to /memory/classes/heap/released:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) }, @@ -116,7 +109,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_objects"), - "Number of allocated objects.", + "Number of currently allocated objects. Equals to /gc/heap/objects:objects.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) }, @@ -124,7 +117,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("stack_inuse_bytes"), - "Number of bytes in use by the stack allocator.", + "Number of bytes obtained from system for stack allocator in non-CGO environments. Equals to /memory/classes/heap/stacks:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) }, @@ -132,7 +125,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("stack_sys_bytes"), - "Number of bytes obtained from system for stack allocator.", + "Number of bytes obtained from system for stack allocator. Equals to /memory/classes/heap/stacks:bytes + /memory/classes/os-stacks:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) }, @@ -140,7 +133,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mspan_inuse_bytes"), - "Number of bytes in use by mspan structures.", + "Number of bytes in use by mspan structures. Equals to /memory/classes/metadata/mspan/inuse:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) }, @@ -148,7 +141,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mspan_sys_bytes"), - "Number of bytes used for mspan structures obtained from system.", + "Number of bytes used for mspan structures obtained from system. Equals to /memory/classes/metadata/mspan/inuse:bytes + /memory/classes/metadata/mspan/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) }, @@ -156,7 +149,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mcache_inuse_bytes"), - "Number of bytes in use by mcache structures.", + "Number of bytes in use by mcache structures. Equals to /memory/classes/metadata/mcache/inuse:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) }, @@ -164,7 +157,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mcache_sys_bytes"), - "Number of bytes used for mcache structures obtained from system.", + "Number of bytes used for mcache structures obtained from system. Equals to /memory/classes/metadata/mcache/inuse:bytes + /memory/classes/metadata/mcache/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) }, @@ -172,7 +165,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("buck_hash_sys_bytes"), - "Number of bytes used by the profiling bucket hash table.", + "Number of bytes used by the profiling bucket hash table. Equals to /memory/classes/profiling/buckets:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) }, @@ -180,7 +173,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("gc_sys_bytes"), - "Number of bytes used for garbage collection system metadata.", + "Number of bytes used for garbage collection system metadata. Equals to /memory/classes/metadata/other:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) }, @@ -188,7 +181,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("other_sys_bytes"), - "Number of bytes used for other system allocations.", + "Number of bytes used for other system allocations. Equals to /memory/classes/other:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) }, @@ -196,7 +189,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("next_gc_bytes"), - "Number of heap bytes when next garbage collection will take place.", + "Number of heap bytes when next garbage collection will take place. Equals to /gc/heap/goal:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, @@ -225,7 +218,7 @@ func newBaseGoCollector() baseGoCollector { nil, nil), gcDesc: NewDesc( "go_gc_duration_seconds", - "A summary of the pause duration of garbage collection cycles.", + "A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.", nil, nil), gcLastTimeDesc: NewDesc( "go_memstats_last_gc_time_seconds", diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go index 2d8d9f64f4..5117464172 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go @@ -17,6 +17,7 @@ package prometheus import ( + "fmt" "math" "runtime" "runtime/metrics" @@ -153,7 +154,8 @@ func defaultGoCollectorOptions() internal.GoCollectorOptions { "/gc/heap/frees-by-size:bytes": goGCHeapFreesBytes, }, RuntimeMetricRules: []internal.GoCollectorRule{ - //{Matcher: regexp.MustCompile("")}, + // Recommended metrics we want by default from runtime/metrics. + {Matcher: internal.GoCollectorDefaultRuntimeMetrics}, }, } } @@ -203,6 +205,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { // to fail here. This condition is tested in TestExpectedRuntimeMetrics. continue } + help := attachOriginalName(d.Description.Description, d.Name) sampleBuf = append(sampleBuf, metrics.Sample{Name: d.Name}) sampleMap[d.Name] = &sampleBuf[len(sampleBuf)-1] @@ -214,7 +217,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { m = newBatchHistogram( NewDesc( BuildFQName(namespace, subsystem, name), - d.Description.Description, + help, nil, nil, ), @@ -226,7 +229,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { Namespace: namespace, Subsystem: subsystem, Name: name, - Help: d.Description.Description, + Help: help, }, ) } else { @@ -234,7 +237,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { Namespace: namespace, Subsystem: subsystem, Name: name, - Help: d.Description.Description, + Help: help, }) } metricSet = append(metricSet, m) @@ -284,6 +287,10 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { } } +func attachOriginalName(desc, origName string) string { + return fmt.Sprintf("%s Sourced from %s", desc, origName) +} + // Describe returns all descriptions of the collector. func (c *goCollector) Describe(ch chan<- *Desc) { c.base.Describe(ch) @@ -376,13 +383,13 @@ func unwrapScalarRMValue(v metrics.Value) float64 { // // This should never happen because we always populate our metric // set from the runtime/metrics package. - panic("unexpected unsupported metric") + panic("unexpected bad kind metric") default: // Unsupported metric kind. // // This should never happen because we check for this during initialization // and flag and filter metrics whose kinds we don't understand. - panic("unexpected unsupported metric kind") + panic(fmt.Sprintf("unexpected unsupported metric: %v", v.Kind())) } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index b5c8bcb395..8a4f49a4c5 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -440,7 +440,7 @@ type HistogramOpts struct { // constant (or any negative float value). NativeHistogramZeroThreshold float64 - // The remaining fields define a strategy to limit the number of + // The next three fields define a strategy to limit the number of // populated sparse buckets. If NativeHistogramMaxBucketNumber is left // at zero, the number of buckets is not limited. (Note that this might // lead to unbounded memory consumption if the values observed by the @@ -473,6 +473,22 @@ type HistogramOpts struct { NativeHistogramMinResetDuration time.Duration NativeHistogramMaxZeroThreshold float64 + // NativeHistogramMaxExemplars limits the number of exemplars + // that are kept in memory for each native histogram. If you leave it at + // zero, a default value of 10 is used. If no exemplars should be kept specifically + // for native histograms, set it to a negative value. (Scrapers can + // still use the exemplars exposed for classic buckets, which are managed + // independently.) + NativeHistogramMaxExemplars int + // NativeHistogramExemplarTTL is only checked once + // NativeHistogramMaxExemplars is exceeded. In that case, the + // oldest exemplar is removed if it is older than NativeHistogramExemplarTTL. + // Otherwise, the older exemplar in the pair of exemplars that are closest + // together (on an exponential scale) is removed. + // If NativeHistogramExemplarTTL is left at its zero value, a default value of + // 5m is used. To always delete the oldest exemplar, set it to a negative value. + NativeHistogramExemplarTTL time.Duration + // now is for testing purposes, by default it's time.Now. now func() time.Time @@ -532,6 +548,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr if opts.afterFunc == nil { opts.afterFunc = time.AfterFunc } + h := &histogram{ desc: desc, upperBounds: opts.Buckets, @@ -556,6 +573,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr h.nativeHistogramZeroThreshold = DefNativeHistogramZeroThreshold } // Leave h.nativeHistogramZeroThreshold at 0 otherwise. h.nativeHistogramSchema = pickSchema(opts.NativeHistogramBucketFactor) + h.nativeExemplars = makeNativeExemplars(opts.NativeHistogramExemplarTTL, opts.NativeHistogramMaxExemplars) } for i, upperBound := range h.upperBounds { if i < len(h.upperBounds)-1 { @@ -725,7 +743,8 @@ type histogram struct { // resetScheduled is protected by mtx. It is true if a reset is // scheduled for a later time (when nativeHistogramMinResetDuration has // passed). - resetScheduled bool + resetScheduled bool + nativeExemplars nativeExemplars // now is for testing purposes, by default it's time.Now. now func() time.Time @@ -742,6 +761,9 @@ func (h *histogram) Observe(v float64) { h.observe(v, h.findBucket(v)) } +// ObserveWithExemplar should not be called in a high-frequency setting +// for a native histogram with configured exemplars. For this case, +// the implementation isn't lock-free and might suffer from lock contention. func (h *histogram) ObserveWithExemplar(v float64, e Labels) { i := h.findBucket(v) h.observe(v, i) @@ -821,6 +843,15 @@ func (h *histogram) Write(out *dto.Metric) error { Length: proto.Uint32(0), }} } + + // If exemplars are not configured, the cap will be 0. + // So append is not needed in this case. + if cap(h.nativeExemplars.exemplars) > 0 { + h.nativeExemplars.Lock() + his.Exemplars = append(his.Exemplars, h.nativeExemplars.exemplars...) + h.nativeExemplars.Unlock() + } + } addAndResetCounts(hotCounts, coldCounts) return nil @@ -1091,8 +1122,10 @@ func (h *histogram) resetCounts(counts *histogramCounts) { deleteSyncMap(&counts.nativeHistogramBucketsPositive) } -// updateExemplar replaces the exemplar for the provided bucket. With empty -// labels, it's a no-op. It panics if any of the labels is invalid. +// updateExemplar replaces the exemplar for the provided classic bucket. +// With empty labels, it's a no-op. It panics if any of the labels is invalid. +// If histogram is native, the exemplar will be cached into nativeExemplars, +// which has a limit, and will remove one exemplar when limit is reached. func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { if l == nil { return @@ -1102,6 +1135,10 @@ func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { panic(err) } h.exemplars[bucket].Store(e) + doSparse := h.nativeHistogramSchema > math.MinInt32 && !math.IsNaN(v) + if doSparse { + h.nativeExemplars.addExemplar(e) + } } // HistogramVec is a Collector that bundles a set of Histograms that all share the @@ -1336,6 +1373,48 @@ func MustNewConstHistogram( return m } +// NewConstHistogramWithCreatedTimestamp does the same thing as NewConstHistogram but sets the created timestamp. +func NewConstHistogramWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + buckets map[float64]uint64, + ct time.Time, + labelValues ...string, +) (Metric, error) { + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { + return nil, err + } + return &constHistogram{ + desc: desc, + count: count, + sum: sum, + buckets: buckets, + labelPairs: MakeLabelPairs(desc, labelValues), + createdTs: timestamppb.New(ct), + }, nil +} + +// MustNewConstHistogramWithCreatedTimestamp is a version of NewConstHistogramWithCreatedTimestamp that panics where +// NewConstHistogramWithCreatedTimestamp would have returned an error. +func MustNewConstHistogramWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + buckets map[float64]uint64, + ct time.Time, + labelValues ...string, +) Metric { + m, err := NewConstHistogramWithCreatedTimestamp(desc, count, sum, buckets, ct, labelValues...) + if err != nil { + panic(err) + } + return m +} + type buckSort []*dto.Bucket func (s buckSort) Len() int { @@ -1575,3 +1654,182 @@ func addAndResetCounts(hot, cold *histogramCounts) { atomic.AddUint64(&hot.nativeHistogramZeroBucket, atomic.LoadUint64(&cold.nativeHistogramZeroBucket)) atomic.StoreUint64(&cold.nativeHistogramZeroBucket, 0) } + +type nativeExemplars struct { + sync.Mutex + + // Time-to-live for exemplars, it is set to -1 if exemplars are disabled, that is NativeHistogramMaxExemplars is below 0. + // The ttl is used on insertion to remove an exemplar that is older than ttl, if present. + ttl time.Duration + + exemplars []*dto.Exemplar +} + +func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars { + if ttl == 0 { + ttl = 5 * time.Minute + } + + if maxCount == 0 { + maxCount = 10 + } + + if maxCount < 0 { + maxCount = 0 + ttl = -1 + } + + return nativeExemplars{ + ttl: ttl, + exemplars: make([]*dto.Exemplar, 0, maxCount), + } +} + +func (n *nativeExemplars) addExemplar(e *dto.Exemplar) { + if n.ttl == -1 { + return + } + + n.Lock() + defer n.Unlock() + + // When the number of exemplars has not yet exceeded or + // is equal to cap(n.exemplars), then + // insert the new exemplar directly. + if len(n.exemplars) < cap(n.exemplars) { + var nIdx int + for nIdx = 0; nIdx < len(n.exemplars); nIdx++ { + if *e.Value < *n.exemplars[nIdx].Value { + break + } + } + n.exemplars = append(n.exemplars[:nIdx], append([]*dto.Exemplar{e}, n.exemplars[nIdx:]...)...) + return + } + + if len(n.exemplars) == 1 { + // When the number of exemplars is 1, then + // replace the existing exemplar with the new exemplar. + n.exemplars[0] = e + return + } + // From this point on, the number of exemplars is greater than 1. + + // When the number of exemplars exceeds the limit, remove one exemplar. + var ( + ot = time.Time{} // Oldest timestamp seen. Initial value doesn't matter as we replace it due to otIdx == -1 in the loop. + otIdx = -1 // Index of the exemplar with the oldest timestamp. + + md = -1.0 // Logarithm of the delta of the closest pair of exemplars. + + // The insertion point of the new exemplar in the exemplars slice after insertion. + // This is calculated purely based on the order of the exemplars by value. + // nIdx == len(n.exemplars) means the new exemplar is to be inserted after the end. + nIdx = -1 + + // rIdx is ultimately the index for the exemplar that we are replacing with the new exemplar. + // The aim is to keep a good spread of exemplars by value and not let them bunch up too much. + // It is calculated in 3 steps: + // 1. First we set rIdx to the index of the older exemplar within the closest pair by value. + // That is the following will be true (on log scale): + // either the exemplar pair on index (rIdx-1, rIdx) or (rIdx, rIdx+1) will have + // the closest values to each other from all pairs. + // For example, suppose the values are distributed like this: + // |-----------x-------------x----------------x----x-----| + // ^--rIdx as this is older. + // Or like this: + // |-----------x-------------x----------------x----x-----| + // ^--rIdx as this is older. + // 2. If there is an exemplar that expired, then we simple reset rIdx to that index. + // 3. We check if by inserting the new exemplar we would create a closer pair at + // (nIdx-1, nIdx) or (nIdx, nIdx+1) and set rIdx to nIdx-1 or nIdx accordingly to + // keep the spread of exemplars by value; otherwise we keep rIdx as it is. + rIdx = -1 + cLog float64 // Logarithm of the current exemplar. + pLog float64 // Logarithm of the previous exemplar. + ) + + for i, exemplar := range n.exemplars { + // Find the exemplar with the oldest timestamp. + if otIdx == -1 || exemplar.Timestamp.AsTime().Before(ot) { + ot = exemplar.Timestamp.AsTime() + otIdx = i + } + + // Find the index at which to insert new the exemplar. + if nIdx == -1 && *e.Value <= *exemplar.Value { + nIdx = i + } + + // Find the two closest exemplars and pick the one the with older timestamp. + pLog = cLog + cLog = math.Log(exemplar.GetValue()) + if i == 0 { + continue + } + diff := math.Abs(cLog - pLog) + if md == -1 || diff < md { + // The closest exemplar pair is at index: i-1, i. + // Choose the exemplar with the older timestamp for replacement. + md = diff + if n.exemplars[i].Timestamp.AsTime().Before(n.exemplars[i-1].Timestamp.AsTime()) { + rIdx = i + } else { + rIdx = i - 1 + } + } + + } + + // If all existing exemplar are smaller than new exemplar, + // then the exemplar should be inserted at the end. + if nIdx == -1 { + nIdx = len(n.exemplars) + } + // Here, we have the following relationships: + // n.exemplars[nIdx-1].Value < e.Value (if nIdx > 0) + // e.Value <= n.exemplars[nIdx].Value (if nIdx < len(n.exemplars)) + + if otIdx != -1 && e.Timestamp.AsTime().Sub(ot) > n.ttl { + // If the oldest exemplar has expired, then replace it with the new exemplar. + rIdx = otIdx + } else { + // In the previous for loop, when calculating the closest pair of exemplars, + // we did not take into account the newly inserted exemplar. + // So we need to calculate with the newly inserted exemplar again. + elog := math.Log(e.GetValue()) + if nIdx > 0 { + diff := math.Abs(elog - math.Log(n.exemplars[nIdx-1].GetValue())) + if diff < md { + // The value we are about to insert is closer to the previous exemplar at the insertion point than what we calculated before in rIdx. + // v--rIdx + // |-----------x-n-----------x----------------x----x-----| + // nIdx-1--^ ^--new exemplar value + // Do not make the spread worse, replace nIdx-1 and not rIdx. + md = diff + rIdx = nIdx - 1 + } + } + if nIdx < len(n.exemplars) { + diff := math.Abs(math.Log(n.exemplars[nIdx].GetValue()) - elog) + if diff < md { + // The value we are about to insert is closer to the next exemplar at the insertion point than what we calculated before in rIdx. + // v--rIdx + // |-----------x-----------n-x----------------x----x-----| + // new exemplar value--^ ^--nIdx + // Do not make the spread worse, replace nIdx-1 and not rIdx. + rIdx = nIdx + } + } + } + + // Adjust the slice according to rIdx and nIdx. + switch { + case rIdx == nIdx: + n.exemplars[nIdx] = e + case rIdx < nIdx: + n.exemplars = append(n.exemplars[:rIdx], append(n.exemplars[rIdx+1:nIdx], append([]*dto.Exemplar{e}, n.exemplars[nIdx:]...)...)...) + case rIdx > nIdx: + n.exemplars = append(n.exemplars[:nIdx], append([]*dto.Exemplar{e}, append(n.exemplars[nIdx:rIdx], n.exemplars[rIdx+1:]...)...)...) + } +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go index 723b45d644..a4fa6eabd7 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go @@ -30,3 +30,5 @@ type GoCollectorOptions struct { RuntimeMetricSumForHist map[string]string RuntimeMetricRules []GoCollectorRule } + +var GoCollectorDefaultRuntimeMetrics = regexp.MustCompile(`/gc/gogc:percent|/gc/gomemlimit:bytes|/sched/gomaxprocs:threads`) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go index f018e57237..9d9b81ab44 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go @@ -234,7 +234,7 @@ func NewMetricWithExemplars(m Metric, exemplars ...Exemplar) (Metric, error) { ) for i, e := range exemplars { ts := e.Timestamp - if ts == (time.Time{}) { + if ts.IsZero() { ts = now } exs[i], err = newExemplar(e.Value, ts, e.Labels) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go index 8548dd18ed..62a4e7ad9a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go @@ -22,14 +22,15 @@ import ( ) type processCollector struct { - collectFn func(chan<- Metric) - pidFn func() (int, error) - reportErrors bool - cpuTotal *Desc - openFDs, maxFDs *Desc - vsize, maxVsize *Desc - rss *Desc - startTime *Desc + collectFn func(chan<- Metric) + pidFn func() (int, error) + reportErrors bool + cpuTotal *Desc + openFDs, maxFDs *Desc + vsize, maxVsize *Desc + rss *Desc + startTime *Desc + inBytes, outBytes *Desc } // ProcessCollectorOpts defines the behavior of a process metrics collector @@ -100,6 +101,16 @@ func NewProcessCollector(opts ProcessCollectorOpts) Collector { "Start time of the process since unix epoch in seconds.", nil, nil, ), + inBytes: NewDesc( + ns+"process_network_receive_bytes_total", + "Number of bytes received by the process over the network.", + nil, nil, + ), + outBytes: NewDesc( + ns+"process_network_transmit_bytes_total", + "Number of bytes sent by the process over the network.", + nil, nil, + ), } if opts.PidFn == nil { @@ -129,6 +140,8 @@ func (c *processCollector) Describe(ch chan<- *Desc) { ch <- c.maxVsize ch <- c.rss ch <- c.startTime + ch <- c.inBytes + ch <- c.outBytes } // Collect returns the current state of all metrics of the collector. diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go index 8c1136ceea..14d56d2d06 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go @@ -63,4 +63,18 @@ func (c *processCollector) processCollect(ch chan<- Metric) { } else { c.reportError(ch, nil, err) } + + if netstat, err := p.Netstat(); err == nil { + var inOctets, outOctets float64 + if netstat.IpExt.InOctets != nil { + inOctets = *netstat.IpExt.InOctets + } + if netstat.IpExt.OutOctets != nil { + outOctets = *netstat.IpExt.OutOctets + } + ch <- MustNewConstMetric(c.inBytes, CounterValue, inOctets) + ch <- MustNewConstMetric(c.outBytes, CounterValue, outOctets) + } else { + c.reportError(ch, nil, err) + } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go index 5e2ced25a0..c6fd2f58b7 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go @@ -314,16 +314,17 @@ func (r *Registry) Register(c Collector) error { if dimHash != desc.dimHash { return fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc) } - } else { - // ...then check the new descriptors already seen. - if dimHash, exists := newDimHashesByName[desc.fqName]; exists { - if dimHash != desc.dimHash { - return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) - } - } else { - newDimHashesByName[desc.fqName] = desc.dimHash - } + continue } + + // ...then check the new descriptors already seen. + if dimHash, exists := newDimHashesByName[desc.fqName]; exists { + if dimHash != desc.dimHash { + return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) + } + continue + } + newDimHashesByName[desc.fqName] = desc.dimHash } // A Collector yielding no Desc at all is considered unchecked. if len(newDescIDs) == 0 { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go index 1462704446..1ab0e47965 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -783,3 +783,45 @@ func MustNewConstSummary( } return m } + +// NewConstSummaryWithCreatedTimestamp does the same thing as NewConstSummary but sets the created timestamp. +func NewConstSummaryWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + quantiles map[float64]float64, + ct time.Time, + labelValues ...string, +) (Metric, error) { + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { + return nil, err + } + return &constSummary{ + desc: desc, + count: count, + sum: sum, + quantiles: quantiles, + labelPairs: MakeLabelPairs(desc, labelValues), + createdTs: timestamppb.New(ct), + }, nil +} + +// MustNewConstSummaryWithCreatedTimestamp is a version of NewConstSummaryWithCreatedTimestamp that panics where +// NewConstSummaryWithCreatedTimestamp would have returned an error. +func MustNewConstSummaryWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + quantiles map[float64]float64, + ct time.Time, + labelValues ...string, +) Metric { + m, err := NewConstSummaryWithCreatedTimestamp(desc, count, sum, quantiles, ct, labelValues...) + if err != nil { + panic(err) + } + return m +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validation.go b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validation.go index f52ad9eab6..e1441598da 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validation.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validation.go @@ -30,4 +30,5 @@ var defaultValidations = []Validation{ validations.LintReservedChars, validations.LintCamelCase, validations.LintUnitAbbreviations, + validations.LintDuplicateMetric, } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/duplicate_validations.go b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/duplicate_validations.go new file mode 100644 index 0000000000..fdc1e62394 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/duplicate_validations.go @@ -0,0 +1,37 @@ +// Copyright 2024 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package validations + +import ( + "fmt" + "reflect" + + dto "github.com/prometheus/client_model/go" +) + +// LintDuplicateMetric detects duplicate metric. +func LintDuplicateMetric(mf *dto.MetricFamily) []error { + var problems []error + + for i, m := range mf.Metric { + for _, k := range mf.Metric[i+1:] { + if reflect.DeepEqual(m.Label, k.Label) { + problems = append(problems, fmt.Errorf("metric not unique")) + break + } + } + } + + return problems +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/generic_name_validations.go b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/generic_name_validations.go index bc8dbd1e16..de52cfee44 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/generic_name_validations.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/validations/generic_name_validations.go @@ -44,21 +44,21 @@ func LintMetricUnits(mf *dto.MetricFamily) []error { return problems } -// LintMetricTypeInName detects when metric types are included in the metric name. +// LintMetricTypeInName detects when the metric type is included in the metric name. func LintMetricTypeInName(mf *dto.MetricFamily) []error { - var problems []error - n := strings.ToLower(mf.GetName()) - - for i, t := range dto.MetricType_name { - if i == int32(dto.MetricType_UNTYPED) { - continue - } - - typename := strings.ToLower(t) - if strings.Contains(n, "_"+typename+"_") || strings.HasSuffix(n, "_"+typename) { - problems = append(problems, fmt.Errorf(`metric name should not include type '%s'`, typename)) - } + if mf.GetType() == dto.MetricType_UNTYPED { + return nil } + + var problems []error + + n := strings.ToLower(mf.GetName()) + typename := strings.ToLower(mf.GetType().String()) + + if strings.Contains(n, "_"+typename+"_") || strings.HasSuffix(n, "_"+typename) { + problems = append(problems, fmt.Errorf(`metric name should not include type '%s'`, typename)) + } + return problems } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/testutil/testutil.go b/vendor/github.com/prometheus/client_golang/prometheus/testutil/testutil.go index 9dce15eafa..e0ac346665 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/testutil/testutil.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/testutil/testutil.go @@ -42,9 +42,8 @@ import ( "fmt" "io" "net/http" - "reflect" - "github.com/davecgh/go-spew/spew" + "github.com/kylelemons/godebug/diff" dto "github.com/prometheus/client_model/go" "github.com/prometheus/common/expfmt" "google.golang.org/protobuf/proto" @@ -184,9 +183,8 @@ func ScrapeAndCompare(url string, expected io.Reader, metricNames ...string) err return compareMetricFamilies(scraped, wanted, metricNames...) } -// CollectAndCompare registers the provided Collector with a newly created -// pedantic Registry. It then calls GatherAndCompare with that Registry and with -// the provided metricNames. +// CollectAndCompare collects the metrics identified by `metricNames` and compares them in the Prometheus text +// exposition format to the data read from expected. func CollectAndCompare(c prometheus.Collector, expected io.Reader, metricNames ...string) error { reg := prometheus.NewPedanticRegistry() if err := reg.Register(c); err != nil { @@ -222,6 +220,31 @@ func TransactionalGatherAndCompare(g prometheus.TransactionalGatherer, expected return compareMetricFamilies(got, wanted, metricNames...) } +// CollectAndFormat collects the metrics identified by `metricNames` and returns them in the given format. +func CollectAndFormat(c prometheus.Collector, format expfmt.FormatType, metricNames ...string) ([]byte, error) { + reg := prometheus.NewPedanticRegistry() + if err := reg.Register(c); err != nil { + return nil, fmt.Errorf("registering collector failed: %w", err) + } + + gotFiltered, err := reg.Gather() + if err != nil { + return nil, fmt.Errorf("gathering metrics failed: %w", err) + } + + gotFiltered = filterMetrics(gotFiltered, metricNames) + + var gotFormatted bytes.Buffer + enc := expfmt.NewEncoder(&gotFormatted, expfmt.NewFormat(format)) + for _, mf := range gotFiltered { + if err := enc.Encode(mf); err != nil { + return nil, fmt.Errorf("encoding gathered metrics failed: %w", err) + } + } + + return gotFormatted.Bytes(), nil +} + // convertReaderToMetricFamily would read from a io.Reader object and convert it to a slice of // dto.MetricFamily. func convertReaderToMetricFamily(reader io.Reader) ([]*dto.MetricFamily, error) { @@ -254,6 +277,15 @@ func compareMetricFamilies(got, expected []*dto.MetricFamily, metricNames ...str if metricNames != nil { got = filterMetrics(got, metricNames) expected = filterMetrics(expected, metricNames) + if len(metricNames) > len(got) { + var missingMetricNames []string + for _, name := range metricNames { + if ok := hasMetricByName(got, name); !ok { + missingMetricNames = append(missingMetricNames, name) + } + } + return fmt.Errorf("expected metric name(s) not found: %v", missingMetricNames) + } } return compare(got, expected) @@ -277,73 +309,12 @@ func compare(got, want []*dto.MetricFamily) error { return fmt.Errorf("encoding expected metrics failed: %w", err) } } - if diffErr := diff(wantBuf, gotBuf); diffErr != "" { + if diffErr := diff.Diff(gotBuf.String(), wantBuf.String()); diffErr != "" { return fmt.Errorf(diffErr) } return nil } -// diff returns a diff of both values as long as both are of the same type and -// are a struct, map, slice, array or string. Otherwise it returns an empty string. -func diff(expected, actual interface{}) string { - if expected == nil || actual == nil { - return "" - } - - et, ek := typeAndKind(expected) - at, _ := typeAndKind(actual) - if et != at { - return "" - } - - if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array && ek != reflect.String { - return "" - } - - var e, a string - c := spew.ConfigState{ - Indent: " ", - DisablePointerAddresses: true, - DisableCapacities: true, - SortKeys: true, - } - if et != reflect.TypeOf("") { - e = c.Sdump(expected) - a = c.Sdump(actual) - } else { - e = reflect.ValueOf(expected).String() - a = reflect.ValueOf(actual).String() - } - - diff, _ := internal.GetUnifiedDiffString(internal.UnifiedDiff{ - A: internal.SplitLines(e), - B: internal.SplitLines(a), - FromFile: "metric output does not match expectation; want", - FromDate: "", - ToFile: "got:", - ToDate: "", - Context: 1, - }) - - if diff == "" { - return "" - } - - return "\n\nDiff:\n" + diff -} - -// typeAndKind returns the type and kind of the given interface{} -func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) { - t := reflect.TypeOf(v) - k := t.Kind() - - if k == reflect.Ptr { - t = t.Elem() - k = t.Kind() - } - return t, k -} - func filterMetrics(metrics []*dto.MetricFamily, names []string) []*dto.MetricFamily { var filtered []*dto.MetricFamily for _, m := range metrics { @@ -356,3 +327,12 @@ func filterMetrics(metrics []*dto.MetricFamily, names []string) []*dto.MetricFam } return filtered } + +func hasMetricByName(metrics []*dto.MetricFamily, name string) bool { + for _, mf := range metrics { + if mf.GetName() == name { + return true + } + } + return false +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go index 955cfd59f8..2c808eece0 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -507,7 +507,7 @@ func (m *metricMap) getOrCreateMetricWithLabelValues( return metric } -// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value +// getOrCreateMetricWithLabels retrieves the metric by hash and label value // or creates it and returns the new one. // // This function holds the mutex. diff --git a/vendor/github.com/prometheus/common/config/headers.go b/vendor/github.com/prometheus/common/config/headers.go index 4a0be4a10e..7276742ec9 100644 --- a/vendor/github.com/prometheus/common/config/headers.go +++ b/vendor/github.com/prometheus/common/config/headers.go @@ -52,7 +52,31 @@ var reservedHeaders = map[string]struct{}{ // Headers represents the configuration for HTTP headers. type Headers struct { Headers map[string]Header `yaml:",inline"` - dir string +} + +func (h Headers) MarshalJSON() ([]byte, error) { + // Inline the Headers map when serializing JSON because json encoder doesn't support "inline" directive. + return json.Marshal(h.Headers) +} + +// SetDirectory make headers file relative to the configuration file. +func (h *Headers) SetDirectory(dir string) { + if h == nil { + return + } + for _, h := range h.Headers { + h.SetDirectory(dir) + } +} + +// Validate validates the Headers config. +func (h *Headers) Validate() error { + for n := range h.Headers { + if _, ok := reservedHeaders[http.CanonicalHeaderKey(n)]; ok { + return fmt.Errorf("setting header %q is not allowed", http.CanonicalHeaderKey(n)) + } + } + return nil } // Header represents the configuration for a single HTTP header. @@ -62,35 +86,11 @@ type Header struct { Files []string `yaml:"files,omitempty" json:"files,omitempty"` } -func (h Headers) MarshalJSON() ([]byte, error) { - // Inline the Headers map when serializing JSON because json encoder doesn't support "inline" directive. - return json.Marshal(h.Headers) -} - -// SetDirectory records the directory to make headers file relative to the -// configuration file. -func (h *Headers) SetDirectory(dir string) { - if h == nil { - return +// SetDirectory makes headers file relative to the configuration file. +func (h *Header) SetDirectory(dir string) { + for i := range h.Files { + h.Files[i] = JoinDir(dir, h.Files[i]) } - h.dir = dir -} - -// Validate validates the Headers config. -func (h *Headers) Validate() error { - for n, header := range h.Headers { - if _, ok := reservedHeaders[http.CanonicalHeaderKey(n)]; ok { - return fmt.Errorf("setting header %q is not allowed", http.CanonicalHeaderKey(n)) - } - for _, v := range header.Files { - f := JoinDir(h.dir, v) - _, err := os.ReadFile(f) - if err != nil { - return fmt.Errorf("unable to read header %q from file %s: %w", http.CanonicalHeaderKey(n), f, err) - } - } - } - return nil } // NewHeadersRoundTripper returns a RoundTripper that sets HTTP headers on @@ -121,10 +121,9 @@ func (rt *headersRoundTripper) RoundTrip(req *http.Request) (*http.Response, err req.Header.Add(n, string(v)) } for _, v := range h.Files { - f := JoinDir(rt.config.dir, v) - b, err := os.ReadFile(f) + b, err := os.ReadFile(v) if err != nil { - return nil, fmt.Errorf("unable to read headers file %s: %w", f, err) + return nil, fmt.Errorf("unable to read headers file %s: %w", v, err) } req.Header.Add(n, strings.TrimSpace(string(b))) } diff --git a/vendor/github.com/prometheus/common/config/http_config.go b/vendor/github.com/prometheus/common/config/http_config.go index 3e32013477..b640b89953 100644 --- a/vendor/github.com/prometheus/common/config/http_config.go +++ b/vendor/github.com/prometheus/common/config/http_config.go @@ -828,7 +828,7 @@ type basicAuthRoundTripper struct { // NewBasicAuthRoundTripper will apply a BASIC auth authorization header to a request unless it has // already been set. -func NewBasicAuthRoundTripper(username SecretReader, password SecretReader, rt http.RoundTripper) http.RoundTripper { +func NewBasicAuthRoundTripper(username, password SecretReader, rt http.RoundTripper) http.RoundTripper { return &basicAuthRoundTripper{username, password, rt} } @@ -964,7 +964,7 @@ func (rt *oauth2RoundTripper) RoundTrip(req *http.Request) (*http.Response, erro } rt.mtx.Lock() - rt.lastSecret = secret + rt.lastSecret = newSecret rt.lastRT.Source = source if rt.client != nil { rt.client.CloseIdleConnections() diff --git a/vendor/github.com/prometheus/common/expfmt/decode.go b/vendor/github.com/prometheus/common/expfmt/decode.go index 25cfaa2164..1448439b7f 100644 --- a/vendor/github.com/prometheus/common/expfmt/decode.go +++ b/vendor/github.com/prometheus/common/expfmt/decode.go @@ -45,7 +45,7 @@ func ResponseFormat(h http.Header) Format { mediatype, params, err := mime.ParseMediaType(ct) if err != nil { - return fmtUnknown + return FmtUnknown } const textType = "text/plain" @@ -53,21 +53,21 @@ func ResponseFormat(h http.Header) Format { switch mediatype { case ProtoType: if p, ok := params["proto"]; ok && p != ProtoProtocol { - return fmtUnknown + return FmtUnknown } if e, ok := params["encoding"]; ok && e != "delimited" { - return fmtUnknown + return FmtUnknown } - return fmtProtoDelim + return FmtProtoDelim case textType: if v, ok := params["version"]; ok && v != TextVersion { - return fmtUnknown + return FmtUnknown } - return fmtText + return FmtText } - return fmtUnknown + return FmtUnknown } // NewDecoder returns a new decoder based on the given input format. diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go index ff5ef7a9d9..cf0c150c2e 100644 --- a/vendor/github.com/prometheus/common/expfmt/encode.go +++ b/vendor/github.com/prometheus/common/expfmt/encode.go @@ -77,18 +77,18 @@ func Negotiate(h http.Header) Format { if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { switch ac.Params["encoding"] { case "delimited": - return fmtProtoDelim + escapingScheme + return FmtProtoDelim + escapingScheme case "text": - return fmtProtoText + escapingScheme + return FmtProtoText + escapingScheme case "compact-text": - return fmtProtoCompact + escapingScheme + return FmtProtoCompact + escapingScheme } } if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { - return fmtText + escapingScheme + return FmtText + escapingScheme } } - return fmtText + escapingScheme + return FmtText + escapingScheme } // NegotiateIncludingOpenMetrics works like Negotiate but includes @@ -110,26 +110,26 @@ func NegotiateIncludingOpenMetrics(h http.Header) Format { if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { switch ac.Params["encoding"] { case "delimited": - return fmtProtoDelim + escapingScheme + return FmtProtoDelim + escapingScheme case "text": - return fmtProtoText + escapingScheme + return FmtProtoText + escapingScheme case "compact-text": - return fmtProtoCompact + escapingScheme + return FmtProtoCompact + escapingScheme } } if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { - return fmtText + escapingScheme + return FmtText + escapingScheme } if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion_0_0_1 || ver == OpenMetricsVersion_1_0_0 || ver == "") { switch ver { case OpenMetricsVersion_1_0_0: - return fmtOpenMetrics_1_0_0 + escapingScheme + return FmtOpenMetrics_1_0_0 + escapingScheme default: - return fmtOpenMetrics_0_0_1 + escapingScheme + return FmtOpenMetrics_0_0_1 + escapingScheme } } } - return fmtText + escapingScheme + return FmtText + escapingScheme } // NewEncoder returns a new encoder based on content type negotiation. All diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go index 051b38cd17..d942af8edd 100644 --- a/vendor/github.com/prometheus/common/expfmt/expfmt.go +++ b/vendor/github.com/prometheus/common/expfmt/expfmt.go @@ -32,24 +32,31 @@ type Format string // it on the wire, new content-type strings will have to be agreed upon and // added here. const ( - TextVersion = "0.0.4" - ProtoType = `application/vnd.google.protobuf` - ProtoProtocol = `io.prometheus.client.MetricFamily` - protoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + TextVersion = "0.0.4" + ProtoType = `application/vnd.google.protobuf` + ProtoProtocol = `io.prometheus.client.MetricFamily` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeProtoCompact) instead. + ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" OpenMetricsType = `application/openmetrics-text` OpenMetricsVersion_0_0_1 = "0.0.1" OpenMetricsVersion_1_0_0 = "1.0.0" - // The Content-Type values for the different wire protocols. Note that these - // values are now unexported. If code was relying on comparisons to these - // constants, instead use FormatType(). - fmtUnknown Format = `` - fmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8` - fmtProtoDelim Format = protoFmt + ` encoding=delimited` - fmtProtoText Format = protoFmt + ` encoding=text` - fmtProtoCompact Format = protoFmt + ` encoding=compact-text` - fmtOpenMetrics_1_0_0 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_1_0_0 + `; charset=utf-8` - fmtOpenMetrics_0_0_1 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_0_0_1 + `; charset=utf-8` + // The Content-Type values for the different wire protocols. Do not do direct + // comparisons to these constants, instead use the comparison functions. + // Deprecated: Use expfmt.NewFormat(expfmt.TypeUnknown) instead. + FmtUnknown Format = `` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeTextPlain) instead. + FmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeProtoDelim) instead. + FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeProtoText) instead. + FmtProtoText Format = ProtoFmt + ` encoding=text` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeProtoCompact) instead. + FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeOpenMetrics) instead. + FmtOpenMetrics_1_0_0 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_1_0_0 + `; charset=utf-8` + // Deprecated: Use expfmt.NewFormat(expfmt.TypeOpenMetrics) instead. + FmtOpenMetrics_0_0_1 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_0_0_1 + `; charset=utf-8` ) const ( @@ -79,17 +86,17 @@ const ( func NewFormat(t FormatType) Format { switch t { case TypeProtoCompact: - return fmtProtoCompact + return FmtProtoCompact case TypeProtoDelim: - return fmtProtoDelim + return FmtProtoDelim case TypeProtoText: - return fmtProtoText + return FmtProtoText case TypeTextPlain: - return fmtText + return FmtText case TypeOpenMetrics: - return fmtOpenMetrics_1_0_0 + return FmtOpenMetrics_1_0_0 default: - return fmtUnknown + return FmtUnknown } } @@ -97,12 +104,35 @@ func NewFormat(t FormatType) Format { // specified version number. func NewOpenMetricsFormat(version string) (Format, error) { if version == OpenMetricsVersion_0_0_1 { - return fmtOpenMetrics_0_0_1, nil + return FmtOpenMetrics_0_0_1, nil } if version == OpenMetricsVersion_1_0_0 { - return fmtOpenMetrics_1_0_0, nil + return FmtOpenMetrics_1_0_0, nil } - return fmtUnknown, fmt.Errorf("unknown open metrics version string") + return FmtUnknown, fmt.Errorf("unknown open metrics version string") +} + +// WithEscapingScheme returns a copy of Format with the specified escaping +// scheme appended to the end. If an escaping scheme already exists it is +// removed. +func (f Format) WithEscapingScheme(s model.EscapingScheme) Format { + var terms []string + for _, p := range strings.Split(string(f), ";") { + toks := strings.Split(p, "=") + if len(toks) != 2 { + trimmed := strings.TrimSpace(p) + if len(trimmed) > 0 { + terms = append(terms, trimmed) + } + continue + } + key := strings.TrimSpace(toks[0]) + if key != model.EscapingKey { + terms = append(terms, strings.TrimSpace(p)) + } + } + terms = append(terms, model.EscapingKey+"="+s.String()) + return Format(strings.Join(terms, "; ")) } // FormatType deduces an overall FormatType for the given format. diff --git a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go index 353c5e93f9..11c8ff4b9d 100644 --- a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go +++ b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go @@ -477,7 +477,7 @@ func writeOpenMetricsNameAndLabelPairs( if name != "" { // If the name does not pass the legacy validity check, we must put the // metric name inside the braces, quoted. - if !model.IsValidLegacyMetricName(model.LabelValue(name)) { + if !model.IsValidLegacyMetricName(name) { metricInsideBraces = true err := w.WriteByte(separator) written++ diff --git a/vendor/github.com/prometheus/common/expfmt/text_create.go b/vendor/github.com/prometheus/common/expfmt/text_create.go index f9b8265a9e..4b86434b33 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_create.go +++ b/vendor/github.com/prometheus/common/expfmt/text_create.go @@ -354,7 +354,7 @@ func writeNameAndLabelPairs( if name != "" { // If the name does not pass the legacy validity check, we must put the // metric name inside the braces. - if !model.IsValidLegacyMetricName(model.LabelValue(name)) { + if !model.IsValidLegacyMetricName(name) { metricInsideBraces = true err := w.WriteByte(separator) written++ @@ -498,7 +498,7 @@ func writeInt(w enhancedWriter, i int64) (int, error) { // writeName writes a string as-is if it complies with the legacy naming // scheme, or escapes it in double quotes if not. func writeName(w enhancedWriter, name string) (int, error) { - if model.IsValidLegacyMetricName(model.LabelValue(name)) { + if model.IsValidLegacyMetricName(name) { return w.WriteString(name) } var written int diff --git a/vendor/github.com/prometheus/common/expfmt/text_parse.go b/vendor/github.com/prometheus/common/expfmt/text_parse.go index 26490211af..f085a923f6 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_parse.go +++ b/vendor/github.com/prometheus/common/expfmt/text_parse.go @@ -22,9 +22,9 @@ import ( "math" "strconv" "strings" + "unicode/utf8" dto "github.com/prometheus/client_model/go" - "google.golang.org/protobuf/proto" "github.com/prometheus/common/model" @@ -60,6 +60,7 @@ type TextParser struct { currentMF *dto.MetricFamily currentMetric *dto.Metric currentLabelPair *dto.LabelPair + currentLabelPairs []*dto.LabelPair // Temporarily stores label pairs while parsing a metric line. // The remaining member variables are only used for summaries/histograms. currentLabels map[string]string // All labels including '__name__' but excluding 'quantile'/'le' @@ -74,6 +75,9 @@ type TextParser struct { // count and sum of that summary/histogram. currentIsSummaryCount, currentIsSummarySum bool currentIsHistogramCount, currentIsHistogramSum bool + // These indicate if the metric name from the current line being parsed is inside + // braces and if that metric name was found respectively. + currentMetricIsInsideBraces, currentMetricInsideBracesIsPresent bool } // TextToMetricFamilies reads 'in' as the simple and flat text-based exchange @@ -137,12 +141,15 @@ func (p *TextParser) reset(in io.Reader) { } p.currentQuantile = math.NaN() p.currentBucket = math.NaN() + p.currentMF = nil } // startOfLine represents the state where the next byte read from p.buf is the // start of a line (or whitespace leading up to it). func (p *TextParser) startOfLine() stateFn { p.lineCount++ + p.currentMetricIsInsideBraces = false + p.currentMetricInsideBracesIsPresent = false if p.skipBlankTab(); p.err != nil { // This is the only place that we expect to see io.EOF, // which is not an error but the signal that we are done. @@ -158,6 +165,9 @@ func (p *TextParser) startOfLine() stateFn { return p.startComment case '\n': return p.startOfLine // Empty line, start the next one. + case '{': + p.currentMetricIsInsideBraces = true + return p.readingLabels } return p.readingMetricName } @@ -275,6 +285,8 @@ func (p *TextParser) startLabelName() stateFn { return nil // Unexpected end of input. } if p.currentByte == '}' { + p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPairs...) + p.currentLabelPairs = nil if p.skipBlankTab(); p.err != nil { return nil // Unexpected end of input. } @@ -287,6 +299,45 @@ func (p *TextParser) startLabelName() stateFn { p.parseError(fmt.Sprintf("invalid label name for metric %q", p.currentMF.GetName())) return nil } + if p.skipBlankTabIfCurrentBlankTab(); p.err != nil { + return nil // Unexpected end of input. + } + if p.currentByte != '=' { + if p.currentMetricIsInsideBraces { + if p.currentMetricInsideBracesIsPresent { + p.parseError(fmt.Sprintf("multiple metric names for metric %q", p.currentMF.GetName())) + return nil + } + switch p.currentByte { + case ',': + p.setOrCreateCurrentMF() + if p.currentMF.Type == nil { + p.currentMF.Type = dto.MetricType_UNTYPED.Enum() + } + p.currentMetric = &dto.Metric{} + p.currentMetricInsideBracesIsPresent = true + return p.startLabelName + case '}': + p.setOrCreateCurrentMF() + if p.currentMF.Type == nil { + p.currentMF.Type = dto.MetricType_UNTYPED.Enum() + } + p.currentMetric = &dto.Metric{} + p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPairs...) + p.currentLabelPairs = nil + if p.skipBlankTab(); p.err != nil { + return nil // Unexpected end of input. + } + return p.readingValue + default: + p.parseError(fmt.Sprintf("unexpected end of metric name %q", p.currentByte)) + return nil + } + } + p.parseError(fmt.Sprintf("expected '=' after label name, found %q", p.currentByte)) + p.currentLabelPairs = nil + return nil + } p.currentLabelPair = &dto.LabelPair{Name: proto.String(p.currentToken.String())} if p.currentLabelPair.GetName() == string(model.MetricNameLabel) { p.parseError(fmt.Sprintf("label name %q is reserved", model.MetricNameLabel)) @@ -296,23 +347,17 @@ func (p *TextParser) startLabelName() stateFn { // labels to 'real' labels. if !(p.currentMF.GetType() == dto.MetricType_SUMMARY && p.currentLabelPair.GetName() == model.QuantileLabel) && !(p.currentMF.GetType() == dto.MetricType_HISTOGRAM && p.currentLabelPair.GetName() == model.BucketLabel) { - p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPair) - } - if p.skipBlankTabIfCurrentBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte != '=' { - p.parseError(fmt.Sprintf("expected '=' after label name, found %q", p.currentByte)) - return nil + p.currentLabelPairs = append(p.currentLabelPairs, p.currentLabelPair) } // Check for duplicate label names. labels := make(map[string]struct{}) - for _, l := range p.currentMetric.Label { + for _, l := range p.currentLabelPairs { lName := l.GetName() if _, exists := labels[lName]; !exists { labels[lName] = struct{}{} } else { p.parseError(fmt.Sprintf("duplicate label names for metric %q", p.currentMF.GetName())) + p.currentLabelPairs = nil return nil } } @@ -345,6 +390,7 @@ func (p *TextParser) startLabelValue() stateFn { if p.currentQuantile, p.err = parseFloat(p.currentLabelPair.GetValue()); p.err != nil { // Create a more helpful error message. p.parseError(fmt.Sprintf("expected float as value for 'quantile' label, got %q", p.currentLabelPair.GetValue())) + p.currentLabelPairs = nil return nil } } else { @@ -371,12 +417,19 @@ func (p *TextParser) startLabelValue() stateFn { return p.startLabelName case '}': + if p.currentMF == nil { + p.parseError("invalid metric name") + return nil + } + p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPairs...) + p.currentLabelPairs = nil if p.skipBlankTab(); p.err != nil { return nil // Unexpected end of input. } return p.readingValue default: p.parseError(fmt.Sprintf("unexpected end of label value %q", p.currentLabelPair.GetValue())) + p.currentLabelPairs = nil return nil } } @@ -585,6 +638,8 @@ func (p *TextParser) readTokenUntilNewline(recognizeEscapeSequence bool) { p.currentToken.WriteByte(p.currentByte) case 'n': p.currentToken.WriteByte('\n') + case '"': + p.currentToken.WriteByte('"') default: p.parseError(fmt.Sprintf("invalid escape sequence '\\%c'", p.currentByte)) return @@ -610,13 +665,45 @@ func (p *TextParser) readTokenUntilNewline(recognizeEscapeSequence bool) { // but not into p.currentToken. func (p *TextParser) readTokenAsMetricName() { p.currentToken.Reset() + // A UTF-8 metric name must be quoted and may have escaped characters. + quoted := false + escaped := false if !isValidMetricNameStart(p.currentByte) { return } - for { - p.currentToken.WriteByte(p.currentByte) + for p.err == nil { + if escaped { + switch p.currentByte { + case '\\': + p.currentToken.WriteByte(p.currentByte) + case 'n': + p.currentToken.WriteByte('\n') + case '"': + p.currentToken.WriteByte('"') + default: + p.parseError(fmt.Sprintf("invalid escape sequence '\\%c'", p.currentByte)) + return + } + escaped = false + } else { + switch p.currentByte { + case '"': + quoted = !quoted + if !quoted { + p.currentByte, p.err = p.buf.ReadByte() + return + } + case '\n': + p.parseError(fmt.Sprintf("metric name %q contains unescaped new-line", p.currentToken.String())) + return + case '\\': + escaped = true + default: + p.currentToken.WriteByte(p.currentByte) + } + } p.currentByte, p.err = p.buf.ReadByte() - if p.err != nil || !isValidMetricNameContinuation(p.currentByte) { + if !isValidMetricNameContinuation(p.currentByte, quoted) || (!quoted && p.currentByte == ' ') { return } } @@ -628,13 +715,45 @@ func (p *TextParser) readTokenAsMetricName() { // but not into p.currentToken. func (p *TextParser) readTokenAsLabelName() { p.currentToken.Reset() + // A UTF-8 label name must be quoted and may have escaped characters. + quoted := false + escaped := false if !isValidLabelNameStart(p.currentByte) { return } - for { - p.currentToken.WriteByte(p.currentByte) + for p.err == nil { + if escaped { + switch p.currentByte { + case '\\': + p.currentToken.WriteByte(p.currentByte) + case 'n': + p.currentToken.WriteByte('\n') + case '"': + p.currentToken.WriteByte('"') + default: + p.parseError(fmt.Sprintf("invalid escape sequence '\\%c'", p.currentByte)) + return + } + escaped = false + } else { + switch p.currentByte { + case '"': + quoted = !quoted + if !quoted { + p.currentByte, p.err = p.buf.ReadByte() + return + } + case '\n': + p.parseError(fmt.Sprintf("label name %q contains unescaped new-line", p.currentToken.String())) + return + case '\\': + escaped = true + default: + p.currentToken.WriteByte(p.currentByte) + } + } p.currentByte, p.err = p.buf.ReadByte() - if p.err != nil || !isValidLabelNameContinuation(p.currentByte) { + if !isValidLabelNameContinuation(p.currentByte, quoted) || (!quoted && p.currentByte == '=') { return } } @@ -660,6 +779,7 @@ func (p *TextParser) readTokenAsLabelValue() { p.currentToken.WriteByte('\n') default: p.parseError(fmt.Sprintf("invalid escape sequence '\\%c'", p.currentByte)) + p.currentLabelPairs = nil return } escaped = false @@ -718,19 +838,19 @@ func (p *TextParser) setOrCreateCurrentMF() { } func isValidLabelNameStart(b byte) bool { - return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' + return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || b == '"' } -func isValidLabelNameContinuation(b byte) bool { - return isValidLabelNameStart(b) || (b >= '0' && b <= '9') +func isValidLabelNameContinuation(b byte, quoted bool) bool { + return isValidLabelNameStart(b) || (b >= '0' && b <= '9') || (quoted && utf8.ValidString(string(b))) } func isValidMetricNameStart(b byte) bool { return isValidLabelNameStart(b) || b == ':' } -func isValidMetricNameContinuation(b byte) bool { - return isValidLabelNameContinuation(b) || b == ':' +func isValidMetricNameContinuation(b byte, quoted bool) bool { + return isValidLabelNameContinuation(b, quoted) || b == ':' } func isBlankOrTab(b byte) bool { diff --git a/vendor/github.com/prometheus/common/model/labels.go b/vendor/github.com/prometheus/common/model/labels.go index 3317ce22ff..73b7aa3e60 100644 --- a/vendor/github.com/prometheus/common/model/labels.go +++ b/vendor/github.com/prometheus/common/model/labels.go @@ -97,26 +97,35 @@ var LabelNameRE = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") // therewith. type LabelName string -// IsValid returns true iff name matches the pattern of LabelNameRE for legacy -// names, and iff it's valid UTF-8 if NameValidationScheme is set to -// UTF8Validation. For the legacy matching, it does not use LabelNameRE for the -// check but a much faster hardcoded implementation. +// IsValid returns true iff the name matches the pattern of LabelNameRE when +// NameValidationScheme is set to LegacyValidation, or valid UTF-8 if +// NameValidationScheme is set to UTF8Validation. func (ln LabelName) IsValid() bool { if len(ln) == 0 { return false } switch NameValidationScheme { case LegacyValidation: - for i, b := range ln { - if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0)) { - return false - } - } + return ln.IsValidLegacy() case UTF8Validation: return utf8.ValidString(string(ln)) default: panic(fmt.Sprintf("Invalid name validation scheme requested: %d", NameValidationScheme)) } +} + +// IsValidLegacy returns true iff name matches the pattern of LabelNameRE for +// legacy names. It does not use LabelNameRE for the check but a much faster +// hardcoded implementation. +func (ln LabelName) IsValidLegacy() bool { + if len(ln) == 0 { + return false + } + for i, b := range ln { + if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0)) { + return false + } + } return true } diff --git a/vendor/github.com/prometheus/common/model/metric.go b/vendor/github.com/prometheus/common/model/metric.go index eb865e5a59..f50966bc49 100644 --- a/vendor/github.com/prometheus/common/model/metric.go +++ b/vendor/github.com/prometheus/common/model/metric.go @@ -34,10 +34,13 @@ var ( // goroutines are started. NameValidationScheme = LegacyValidation - // NameEscapingScheme defines the default way that names will be - // escaped when presented to systems that do not support UTF-8 names. If the - // Content-Type "escaping" term is specified, that will override this value. - NameEscapingScheme = ValueEncodingEscaping + // NameEscapingScheme defines the default way that names will be escaped when + // presented to systems that do not support UTF-8 names. If the Content-Type + // "escaping" term is specified, that will override this value. + // NameEscapingScheme should not be set to the NoEscaping value. That string + // is used in content negotiation to indicate that a system supports UTF-8 and + // has that feature enabled. + NameEscapingScheme = UnderscoreEscaping ) // ValidationScheme is a Go enum for determining how metric and label names will @@ -161,7 +164,7 @@ func (m Metric) FastFingerprint() Fingerprint { func IsValidMetricName(n LabelValue) bool { switch NameValidationScheme { case LegacyValidation: - return IsValidLegacyMetricName(n) + return IsValidLegacyMetricName(string(n)) case UTF8Validation: if len(n) == 0 { return false @@ -176,7 +179,7 @@ func IsValidMetricName(n LabelValue) bool { // legacy validation scheme regardless of the value of NameValidationScheme. // This function, however, does not use MetricNameRE for the check but a much // faster hardcoded implementation. -func IsValidLegacyMetricName(n LabelValue) bool { +func IsValidLegacyMetricName(n string) bool { if len(n) == 0 { return false } @@ -208,7 +211,7 @@ func EscapeMetricFamily(v *dto.MetricFamily, scheme EscapingScheme) *dto.MetricF } // If the name is nil, copy as-is, don't try to escape. - if v.Name == nil || IsValidLegacyMetricName(LabelValue(v.GetName())) { + if v.Name == nil || IsValidLegacyMetricName(v.GetName()) { out.Name = v.Name } else { out.Name = proto.String(EscapeName(v.GetName(), scheme)) @@ -230,7 +233,7 @@ func EscapeMetricFamily(v *dto.MetricFamily, scheme EscapingScheme) *dto.MetricF for _, l := range m.Label { if l.GetName() == MetricNameLabel { - if l.Value == nil || IsValidLegacyMetricName(LabelValue(l.GetValue())) { + if l.Value == nil || IsValidLegacyMetricName(l.GetValue()) { escaped.Label = append(escaped.Label, l) continue } @@ -240,7 +243,7 @@ func EscapeMetricFamily(v *dto.MetricFamily, scheme EscapingScheme) *dto.MetricF }) continue } - if l.Name == nil || IsValidLegacyMetricName(LabelValue(l.GetName())) { + if l.Name == nil || IsValidLegacyMetricName(l.GetName()) { escaped.Label = append(escaped.Label, l) continue } @@ -256,10 +259,10 @@ func EscapeMetricFamily(v *dto.MetricFamily, scheme EscapingScheme) *dto.MetricF func metricNeedsEscaping(m *dto.Metric) bool { for _, l := range m.Label { - if l.GetName() == MetricNameLabel && !IsValidLegacyMetricName(LabelValue(l.GetValue())) { + if l.GetName() == MetricNameLabel && !IsValidLegacyMetricName(l.GetValue()) { return true } - if !IsValidLegacyMetricName(LabelValue(l.GetName())) { + if !IsValidLegacyMetricName(l.GetName()) { return true } } @@ -283,7 +286,7 @@ func EscapeName(name string, scheme EscapingScheme) string { case NoEscaping: return name case UnderscoreEscaping: - if IsValidLegacyMetricName(LabelValue(name)) { + if IsValidLegacyMetricName(name) { return name } for i, b := range name { @@ -309,7 +312,7 @@ func EscapeName(name string, scheme EscapingScheme) string { } return escaped.String() case ValueEncodingEscaping: - if IsValidLegacyMetricName(LabelValue(name)) { + if IsValidLegacyMetricName(name) { return name } escaped.WriteString("U__") @@ -452,6 +455,6 @@ func ToEscapingScheme(s string) (EscapingScheme, error) { case EscapeValues: return ValueEncodingEscaping, nil default: - return NoEscaping, fmt.Errorf("unknown format scheme " + s) + return NoEscaping, fmt.Errorf("unknown format scheme %s", s) } } diff --git a/vendor/github.com/prometheus/prometheus/config/config.go b/vendor/github.com/prometheus/prometheus/config/config.go index 9defa10d48..173689d6af 100644 --- a/vendor/github.com/prometheus/prometheus/config/config.go +++ b/vendor/github.com/prometheus/prometheus/config/config.go @@ -180,6 +180,7 @@ var ( // DefaultRemoteWriteConfig is the default remote write configuration. DefaultRemoteWriteConfig = RemoteWriteConfig{ RemoteTimeout: model.Duration(30 * time.Second), + ProtobufMessage: RemoteWriteProtoMsgV1, QueueConfig: DefaultQueueConfig, MetadataConfig: DefaultMetadataConfig, HTTPClientConfig: config.DefaultHTTPClientConfig, @@ -279,7 +280,7 @@ func (c *Config) GetScrapeConfigs() ([]*ScrapeConfig, error) { jobNames := map[string]string{} for i, scfg := range c.ScrapeConfigs { - // We do these checks for library users that would not call Validate in + // We do these checks for library users that would not call validate in // Unmarshal. if err := scfg.Validate(c.GlobalConfig); err != nil { return nil, err @@ -1055,6 +1056,50 @@ func CheckTargetAddress(address model.LabelValue) error { return nil } +// RemoteWriteProtoMsg represents the known protobuf message for the remote write +// 1.0 and 2.0 specs. +type RemoteWriteProtoMsg string + +// Validate returns error if the given reference for the protobuf message is not supported. +func (s RemoteWriteProtoMsg) Validate() error { + switch s { + case RemoteWriteProtoMsgV1, RemoteWriteProtoMsgV2: + return nil + default: + return fmt.Errorf("unknown remote write protobuf message %v, supported: %v", s, RemoteWriteProtoMsgs{RemoteWriteProtoMsgV1, RemoteWriteProtoMsgV2}.String()) + } +} + +type RemoteWriteProtoMsgs []RemoteWriteProtoMsg + +func (m RemoteWriteProtoMsgs) Strings() []string { + ret := make([]string, 0, len(m)) + for _, typ := range m { + ret = append(ret, string(typ)) + } + return ret +} + +func (m RemoteWriteProtoMsgs) String() string { + return strings.Join(m.Strings(), ", ") +} + +var ( + // RemoteWriteProtoMsgV1 represents the `prometheus.WriteRequest` protobuf + // message introduced in the https://prometheus.io/docs/specs/remote_write_spec/, + // which will eventually be deprecated. + // + // NOTE: This string is used for both HTTP header values and config value, so don't change + // this reference. + RemoteWriteProtoMsgV1 RemoteWriteProtoMsg = "prometheus.WriteRequest" + // RemoteWriteProtoMsgV2 represents the `io.prometheus.write.v2.Request` protobuf + // message introduced in https://prometheus.io/docs/specs/remote_write_spec_2_0/ + // + // NOTE: This string is used for both HTTP header values and config value, so don't change + // this reference. + RemoteWriteProtoMsgV2 RemoteWriteProtoMsg = "io.prometheus.write.v2.Request" +) + // RemoteWriteConfig is the configuration for writing to remote storage. type RemoteWriteConfig struct { URL *config.URL `yaml:"url"` @@ -1064,6 +1109,9 @@ type RemoteWriteConfig struct { Name string `yaml:"name,omitempty"` SendExemplars bool `yaml:"send_exemplars,omitempty"` SendNativeHistograms bool `yaml:"send_native_histograms,omitempty"` + // ProtobufMessage specifies the protobuf message to use against the remote + // receiver as specified in https://prometheus.io/docs/specs/remote_write_spec_2_0/ + ProtobufMessage RemoteWriteProtoMsg `yaml:"protobuf_message,omitempty"` // We cannot do proper Go type embedding below as the parser will then parse // values arbitrarily into the overflow maps of further-down types. @@ -1098,6 +1146,10 @@ func (c *RemoteWriteConfig) UnmarshalYAML(unmarshal func(interface{}) error) err return err } + if err := c.ProtobufMessage.Validate(); err != nil { + return fmt.Errorf("invalid protobuf_message value: %w", err) + } + // The UnmarshalYAML method of HTTPClientConfig is not being called because it's not a pointer. // We cannot make it a pointer as the parser panics for inlined pointer structs. // Thus we just do its validation here. diff --git a/vendor/github.com/prometheus/prometheus/discovery/manager.go b/vendor/github.com/prometheus/prometheus/discovery/manager.go index f14071af30..897d7d151c 100644 --- a/vendor/github.com/prometheus/prometheus/discovery/manager.go +++ b/vendor/github.com/prometheus/prometheus/discovery/manager.go @@ -120,6 +120,16 @@ func Name(n string) func(*Manager) { } } +// Updatert sets the updatert of the manager. +// Used to speed up tests. +func Updatert(u time.Duration) func(*Manager) { + return func(m *Manager) { + m.mtx.Lock() + defer m.mtx.Unlock() + m.updatert = u + } +} + // HTTPClientOptions sets the list of HTTP client options to expose to // Discoverers. It is up to Discoverers to choose to use the options provided. func HTTPClientOptions(opts ...config.HTTPClientOption) func(*Manager) { diff --git a/vendor/github.com/prometheus/prometheus/model/histogram/float_histogram.go b/vendor/github.com/prometheus/prometheus/model/histogram/float_histogram.go index 19a92b3d5a..2a37ea66d4 100644 --- a/vendor/github.com/prometheus/prometheus/model/histogram/float_histogram.go +++ b/vendor/github.com/prometheus/prometheus/model/histogram/float_histogram.go @@ -30,11 +30,12 @@ import ( type FloatHistogram struct { // Counter reset information. CounterResetHint CounterResetHint - // Currently valid schema numbers are -4 <= n <= 8. They are all for - // base-2 bucket schemas, where 1 is a bucket boundary in each case, and - // then each power of two is divided into 2^n logarithmic buckets. Or - // in other words, each bucket boundary is the previous boundary times - // 2^(2^-n). + // Currently valid schema numbers are -4 <= n <= 8 for exponential buckets. + // They are all for base-2 bucket schemas, where 1 is a bucket boundary in + // each case, and then each power of two is divided into 2^n logarithmic buckets. + // Or in other words, each bucket boundary is the previous boundary times + // 2^(2^-n). Another valid schema number is -53 for custom buckets, defined by + // the CustomValues field. Schema int32 // Width of the zero bucket. ZeroThreshold float64 @@ -49,6 +50,16 @@ type FloatHistogram struct { // Observation counts in buckets. Each represents an absolute count and // must be zero or positive. PositiveBuckets, NegativeBuckets []float64 + // Holds the custom (usually upper) bounds for bucket definitions, otherwise nil. + // This slice is interned, to be treated as immutable and copied by reference. + // These numbers should be strictly increasing. This field is only used when the + // schema is for custom buckets, and the ZeroThreshold, ZeroCount, NegativeSpans + // and NegativeBuckets fields are not used in that case. + CustomValues []float64 +} + +func (h *FloatHistogram) UsesCustomBuckets() bool { + return IsCustomBucketsSchema(h.Schema) } // Copy returns a deep copy of the Histogram. @@ -56,28 +67,37 @@ func (h *FloatHistogram) Copy() *FloatHistogram { c := FloatHistogram{ CounterResetHint: h.CounterResetHint, Schema: h.Schema, - ZeroThreshold: h.ZeroThreshold, - ZeroCount: h.ZeroCount, Count: h.Count, Sum: h.Sum, } + if h.UsesCustomBuckets() { + if len(h.CustomValues) != 0 { + c.CustomValues = make([]float64, len(h.CustomValues)) + copy(c.CustomValues, h.CustomValues) + } + } else { + c.ZeroThreshold = h.ZeroThreshold + c.ZeroCount = h.ZeroCount + + if len(h.NegativeSpans) != 0 { + c.NegativeSpans = make([]Span, len(h.NegativeSpans)) + copy(c.NegativeSpans, h.NegativeSpans) + } + if len(h.NegativeBuckets) != 0 { + c.NegativeBuckets = make([]float64, len(h.NegativeBuckets)) + copy(c.NegativeBuckets, h.NegativeBuckets) + } + } + if len(h.PositiveSpans) != 0 { c.PositiveSpans = make([]Span, len(h.PositiveSpans)) copy(c.PositiveSpans, h.PositiveSpans) } - if len(h.NegativeSpans) != 0 { - c.NegativeSpans = make([]Span, len(h.NegativeSpans)) - copy(c.NegativeSpans, h.NegativeSpans) - } if len(h.PositiveBuckets) != 0 { c.PositiveBuckets = make([]float64, len(h.PositiveBuckets)) copy(c.PositiveBuckets, h.PositiveBuckets) } - if len(h.NegativeBuckets) != 0 { - c.NegativeBuckets = make([]float64, len(h.NegativeBuckets)) - copy(c.NegativeBuckets, h.NegativeBuckets) - } return &c } @@ -87,32 +107,53 @@ func (h *FloatHistogram) Copy() *FloatHistogram { func (h *FloatHistogram) CopyTo(to *FloatHistogram) { to.CounterResetHint = h.CounterResetHint to.Schema = h.Schema - to.ZeroThreshold = h.ZeroThreshold - to.ZeroCount = h.ZeroCount to.Count = h.Count to.Sum = h.Sum + if h.UsesCustomBuckets() { + to.ZeroThreshold = 0 + to.ZeroCount = 0 + + to.NegativeSpans = clearIfNotNil(to.NegativeSpans) + to.NegativeBuckets = clearIfNotNil(to.NegativeBuckets) + + to.CustomValues = resize(to.CustomValues, len(h.CustomValues)) + copy(to.CustomValues, h.CustomValues) + } else { + to.ZeroThreshold = h.ZeroThreshold + to.ZeroCount = h.ZeroCount + + to.NegativeSpans = resize(to.NegativeSpans, len(h.NegativeSpans)) + copy(to.NegativeSpans, h.NegativeSpans) + + to.NegativeBuckets = resize(to.NegativeBuckets, len(h.NegativeBuckets)) + copy(to.NegativeBuckets, h.NegativeBuckets) + + to.CustomValues = clearIfNotNil(to.CustomValues) + } + to.PositiveSpans = resize(to.PositiveSpans, len(h.PositiveSpans)) copy(to.PositiveSpans, h.PositiveSpans) - to.NegativeSpans = resize(to.NegativeSpans, len(h.NegativeSpans)) - copy(to.NegativeSpans, h.NegativeSpans) - to.PositiveBuckets = resize(to.PositiveBuckets, len(h.PositiveBuckets)) copy(to.PositiveBuckets, h.PositiveBuckets) - - to.NegativeBuckets = resize(to.NegativeBuckets, len(h.NegativeBuckets)) - copy(to.NegativeBuckets, h.NegativeBuckets) } // CopyToSchema works like Copy, but the returned deep copy has the provided // target schema, which must be ≤ the original schema (i.e. it must have a lower -// resolution). +// resolution). This method panics if a custom buckets schema is used in the +// receiving FloatHistogram or as the provided targetSchema. func (h *FloatHistogram) CopyToSchema(targetSchema int32) *FloatHistogram { if targetSchema == h.Schema { // Fast path. return h.Copy() } + if h.UsesCustomBuckets() { + panic(fmt.Errorf("cannot reduce resolution to %d when there are custom buckets", targetSchema)) + } + if IsCustomBucketsSchema(targetSchema) { + panic("cannot reduce resolution to custom buckets schema") + } if targetSchema > h.Schema { panic(fmt.Errorf("cannot copy from schema %d to %d", h.Schema, targetSchema)) } @@ -185,6 +226,9 @@ func (h *FloatHistogram) TestExpression() string { if m.ZeroThreshold != 0 { res = append(res, fmt.Sprintf("z_bucket_w:%g", m.ZeroThreshold)) } + if m.UsesCustomBuckets() { + res = append(res, fmt.Sprintf("custom_values:%g", m.CustomValues)) + } addBuckets := func(kind, bucketsKey, offsetKey string, buckets []float64, spans []Span) []string { if len(spans) > 1 { @@ -210,14 +254,18 @@ func (h *FloatHistogram) TestExpression() string { return "{{" + strings.Join(res, " ") + "}}" } -// ZeroBucket returns the zero bucket. +// ZeroBucket returns the zero bucket. This method panics if the schema is for custom buckets. func (h *FloatHistogram) ZeroBucket() Bucket[float64] { + if h.UsesCustomBuckets() { + panic("histograms with custom buckets have no zero bucket") + } return Bucket[float64]{ Lower: -h.ZeroThreshold, Upper: h.ZeroThreshold, LowerInclusive: true, UpperInclusive: true, Count: h.ZeroCount, + // Index is irrelevant for the zero bucket. } } @@ -263,9 +311,18 @@ func (h *FloatHistogram) Div(scalar float64) *FloatHistogram { // // The method reconciles differences in the zero threshold and in the schema, and // changes them if needed. The other histogram will not be modified in any case. +// Adding is currently only supported between 2 exponential histograms, or between +// 2 custom buckets histograms with the exact same custom bounds. // // This method returns a pointer to the receiving histogram for convenience. -func (h *FloatHistogram) Add(other *FloatHistogram) *FloatHistogram { +func (h *FloatHistogram) Add(other *FloatHistogram) (*FloatHistogram, error) { + if h.UsesCustomBuckets() != other.UsesCustomBuckets() { + return nil, ErrHistogramsIncompatibleSchema + } + if h.UsesCustomBuckets() && !FloatBucketsMatch(h.CustomValues, other.CustomValues) { + return nil, ErrHistogramsIncompatibleBounds + } + switch { case other.CounterResetHint == h.CounterResetHint: // Adding apples to apples, all good. No need to change anything. @@ -290,19 +347,28 @@ func (h *FloatHistogram) Add(other *FloatHistogram) *FloatHistogram { // TODO(trevorwhitney): Actually issue the warning as soon as the plumbing for it is in place } - otherZeroCount := h.reconcileZeroBuckets(other) - h.ZeroCount += otherZeroCount + if !h.UsesCustomBuckets() { + otherZeroCount := h.reconcileZeroBuckets(other) + h.ZeroCount += otherZeroCount + } h.Count += other.Count h.Sum += other.Sum var ( - hPositiveSpans = h.PositiveSpans - hPositiveBuckets = h.PositiveBuckets - hNegativeSpans = h.NegativeSpans - hNegativeBuckets = h.NegativeBuckets - + hPositiveSpans = h.PositiveSpans + hPositiveBuckets = h.PositiveBuckets otherPositiveSpans = other.PositiveSpans otherPositiveBuckets = other.PositiveBuckets + ) + + if h.UsesCustomBuckets() { + h.PositiveSpans, h.PositiveBuckets = addBuckets(h.Schema, h.ZeroThreshold, false, hPositiveSpans, hPositiveBuckets, otherPositiveSpans, otherPositiveBuckets) + return h, nil + } + + var ( + hNegativeSpans = h.NegativeSpans + hNegativeBuckets = h.NegativeBuckets otherNegativeSpans = other.NegativeSpans otherNegativeBuckets = other.NegativeBuckets ) @@ -321,24 +387,40 @@ func (h *FloatHistogram) Add(other *FloatHistogram) *FloatHistogram { h.PositiveSpans, h.PositiveBuckets = addBuckets(h.Schema, h.ZeroThreshold, false, hPositiveSpans, hPositiveBuckets, otherPositiveSpans, otherPositiveBuckets) h.NegativeSpans, h.NegativeBuckets = addBuckets(h.Schema, h.ZeroThreshold, false, hNegativeSpans, hNegativeBuckets, otherNegativeSpans, otherNegativeBuckets) - return h + return h, nil } // Sub works like Add but subtracts the other histogram. -func (h *FloatHistogram) Sub(other *FloatHistogram) *FloatHistogram { - otherZeroCount := h.reconcileZeroBuckets(other) - h.ZeroCount -= otherZeroCount +func (h *FloatHistogram) Sub(other *FloatHistogram) (*FloatHistogram, error) { + if h.UsesCustomBuckets() != other.UsesCustomBuckets() { + return nil, ErrHistogramsIncompatibleSchema + } + if h.UsesCustomBuckets() && !FloatBucketsMatch(h.CustomValues, other.CustomValues) { + return nil, ErrHistogramsIncompatibleBounds + } + + if !h.UsesCustomBuckets() { + otherZeroCount := h.reconcileZeroBuckets(other) + h.ZeroCount -= otherZeroCount + } h.Count -= other.Count h.Sum -= other.Sum var ( - hPositiveSpans = h.PositiveSpans - hPositiveBuckets = h.PositiveBuckets - hNegativeSpans = h.NegativeSpans - hNegativeBuckets = h.NegativeBuckets - + hPositiveSpans = h.PositiveSpans + hPositiveBuckets = h.PositiveBuckets otherPositiveSpans = other.PositiveSpans otherPositiveBuckets = other.PositiveBuckets + ) + + if h.UsesCustomBuckets() { + h.PositiveSpans, h.PositiveBuckets = addBuckets(h.Schema, h.ZeroThreshold, true, hPositiveSpans, hPositiveBuckets, otherPositiveSpans, otherPositiveBuckets) + return h, nil + } + + var ( + hNegativeSpans = h.NegativeSpans + hNegativeBuckets = h.NegativeBuckets otherNegativeSpans = other.NegativeSpans otherNegativeBuckets = other.NegativeBuckets ) @@ -356,7 +438,7 @@ func (h *FloatHistogram) Sub(other *FloatHistogram) *FloatHistogram { h.PositiveSpans, h.PositiveBuckets = addBuckets(h.Schema, h.ZeroThreshold, true, hPositiveSpans, hPositiveBuckets, otherPositiveSpans, otherPositiveBuckets) h.NegativeSpans, h.NegativeBuckets = addBuckets(h.Schema, h.ZeroThreshold, true, hNegativeSpans, hNegativeBuckets, otherNegativeSpans, otherNegativeBuckets) - return h + return h, nil } // Equals returns true if the given float histogram matches exactly. @@ -365,29 +447,42 @@ func (h *FloatHistogram) Sub(other *FloatHistogram) *FloatHistogram { // but they must represent the same bucket layout to match. // Sum, Count, ZeroCount and bucket values are compared based on their bit patterns // because this method is about data equality rather than mathematical equality. +// We ignore fields that are not used based on the exponential / custom buckets schema, +// but check fields where differences may cause unintended behaviour even if they are not +// supposed to be used according to the schema. func (h *FloatHistogram) Equals(h2 *FloatHistogram) bool { if h2 == nil { return false } - if h.Schema != h2.Schema || h.ZeroThreshold != h2.ZeroThreshold || - math.Float64bits(h.ZeroCount) != math.Float64bits(h2.ZeroCount) || + if h.Schema != h2.Schema || math.Float64bits(h.Count) != math.Float64bits(h2.Count) || math.Float64bits(h.Sum) != math.Float64bits(h2.Sum) { return false } + if h.UsesCustomBuckets() { + if !FloatBucketsMatch(h.CustomValues, h2.CustomValues) { + return false + } + } + + if h.ZeroThreshold != h2.ZeroThreshold || + math.Float64bits(h.ZeroCount) != math.Float64bits(h2.ZeroCount) { + return false + } + + if !spansMatch(h.NegativeSpans, h2.NegativeSpans) { + return false + } + if !FloatBucketsMatch(h.NegativeBuckets, h2.NegativeBuckets) { + return false + } + if !spansMatch(h.PositiveSpans, h2.PositiveSpans) { return false } - if !spansMatch(h.NegativeSpans, h2.NegativeSpans) { - return false - } - - if !floatBucketsMatch(h.PositiveBuckets, h2.PositiveBuckets) { - return false - } - if !floatBucketsMatch(h.NegativeBuckets, h2.NegativeBuckets) { + if !FloatBucketsMatch(h.PositiveBuckets, h2.PositiveBuckets) { return false } @@ -403,6 +498,7 @@ func (h *FloatHistogram) Size() int { negSpanSize := len(h.NegativeSpans) * 8 // 8 bytes (int32 + uint32). posBucketSize := len(h.PositiveBuckets) * 8 // 8 bytes (float64). negBucketSize := len(h.NegativeBuckets) * 8 // 8 bytes (float64). + customBoundSize := len(h.CustomValues) * 8 // 8 bytes (float64). // Total size of the struct. @@ -417,9 +513,10 @@ func (h *FloatHistogram) Size() int { // fh.NegativeSpans is 24 bytes. // fh.PositiveBuckets is 24 bytes. // fh.NegativeBuckets is 24 bytes. - structSize := 144 + // fh.CustomValues is 24 bytes. + structSize := 168 - return structSize + posSpanSize + negSpanSize + posBucketSize + negBucketSize + return structSize + posSpanSize + negSpanSize + posBucketSize + negBucketSize + customBoundSize } // Compact eliminates empty buckets at the beginning and end of each span, then @@ -504,6 +601,12 @@ func (h *FloatHistogram) DetectReset(previous *FloatHistogram) bool { if h.Count < previous.Count { return true } + if h.UsesCustomBuckets() != previous.UsesCustomBuckets() || (h.UsesCustomBuckets() && !FloatBucketsMatch(h.CustomValues, previous.CustomValues)) { + // Mark that something has changed or that the application has been restarted. However, this does + // not matter so much since the change in schema will be handled directly in the chunks and PromQL + // functions. + return true + } if h.Schema > previous.Schema { return true } @@ -609,7 +712,7 @@ func (h *FloatHistogram) NegativeBucketIterator() BucketIterator[float64] { // positive buckets in descending order (starting at the highest bucket and // going down towards the zero bucket). func (h *FloatHistogram) PositiveReverseBucketIterator() BucketIterator[float64] { - it := newReverseFloatBucketIterator(h.PositiveSpans, h.PositiveBuckets, h.Schema, true) + it := newReverseFloatBucketIterator(h.PositiveSpans, h.PositiveBuckets, h.Schema, true, h.CustomValues) return &it } @@ -617,7 +720,7 @@ func (h *FloatHistogram) PositiveReverseBucketIterator() BucketIterator[float64] // negative buckets in ascending order (starting at the lowest bucket and going // up towards the zero bucket). func (h *FloatHistogram) NegativeReverseBucketIterator() BucketIterator[float64] { - it := newReverseFloatBucketIterator(h.NegativeSpans, h.NegativeBuckets, h.Schema, false) + it := newReverseFloatBucketIterator(h.NegativeSpans, h.NegativeBuckets, h.Schema, false, nil) return &it } @@ -629,7 +732,7 @@ func (h *FloatHistogram) NegativeReverseBucketIterator() BucketIterator[float64] func (h *FloatHistogram) AllBucketIterator() BucketIterator[float64] { return &allFloatBucketIterator{ h: h, - leftIter: newReverseFloatBucketIterator(h.NegativeSpans, h.NegativeBuckets, h.Schema, false), + leftIter: newReverseFloatBucketIterator(h.NegativeSpans, h.NegativeBuckets, h.Schema, false, nil), rightIter: h.floatBucketIterator(true, 0, h.Schema), state: -1, } @@ -643,30 +746,52 @@ func (h *FloatHistogram) AllBucketIterator() BucketIterator[float64] { func (h *FloatHistogram) AllReverseBucketIterator() BucketIterator[float64] { return &allFloatBucketIterator{ h: h, - leftIter: newReverseFloatBucketIterator(h.PositiveSpans, h.PositiveBuckets, h.Schema, true), + leftIter: newReverseFloatBucketIterator(h.PositiveSpans, h.PositiveBuckets, h.Schema, true, h.CustomValues), rightIter: h.floatBucketIterator(false, 0, h.Schema), state: -1, } } // Validate validates consistency between span and bucket slices. Also, buckets are checked -// against negative values. +// against negative values. We check to make sure there are no unexpected fields or field values +// based on the exponential / custom buckets schema. // We do not check for h.Count being at least as large as the sum of the // counts in the buckets because floating point precision issues can // create false positives here. func (h *FloatHistogram) Validate() error { - if err := checkHistogramSpans(h.NegativeSpans, len(h.NegativeBuckets)); err != nil { - return fmt.Errorf("negative side: %w", err) - } - if err := checkHistogramSpans(h.PositiveSpans, len(h.PositiveBuckets)); err != nil { - return fmt.Errorf("positive side: %w", err) - } var nCount, pCount float64 - err := checkHistogramBuckets(h.NegativeBuckets, &nCount, false) - if err != nil { - return fmt.Errorf("negative side: %w", err) + if h.UsesCustomBuckets() { + if err := checkHistogramCustomBounds(h.CustomValues, h.PositiveSpans, len(h.PositiveBuckets)); err != nil { + return fmt.Errorf("custom buckets: %w", err) + } + if h.ZeroCount != 0 { + return fmt.Errorf("custom buckets: must have zero count of 0") + } + if h.ZeroThreshold != 0 { + return fmt.Errorf("custom buckets: must have zero threshold of 0") + } + if len(h.NegativeSpans) > 0 { + return fmt.Errorf("custom buckets: must not have negative spans") + } + if len(h.NegativeBuckets) > 0 { + return fmt.Errorf("custom buckets: must not have negative buckets") + } + } else { + if err := checkHistogramSpans(h.PositiveSpans, len(h.PositiveBuckets)); err != nil { + return fmt.Errorf("positive side: %w", err) + } + if err := checkHistogramSpans(h.NegativeSpans, len(h.NegativeBuckets)); err != nil { + return fmt.Errorf("negative side: %w", err) + } + err := checkHistogramBuckets(h.NegativeBuckets, &nCount, false) + if err != nil { + return fmt.Errorf("negative side: %w", err) + } + if h.CustomValues != nil { + return fmt.Errorf("histogram with exponential schema must not have custom bounds") + } } - err = checkHistogramBuckets(h.PositiveBuckets, &pCount, false) + err := checkHistogramBuckets(h.PositiveBuckets, &pCount, false) if err != nil { return fmt.Errorf("positive side: %w", err) } @@ -790,17 +915,25 @@ func (h *FloatHistogram) reconcileZeroBuckets(other *FloatHistogram) float64 { // If positive is true, the returned iterator iterates through the positive // buckets, otherwise through the negative buckets. // -// If absoluteStartValue is < the lowest absolute value of any upper bucket -// boundary, the iterator starts with the first bucket. Otherwise, it will skip -// all buckets with an absolute value of their upper boundary ≤ -// absoluteStartValue. +// Only for exponential schemas, if absoluteStartValue is < the lowest absolute +// value of any upper bucket boundary, the iterator starts with the first bucket. +// Otherwise, it will skip all buckets with an absolute value of their upper boundary ≤ +// absoluteStartValue. For custom bucket schemas, absoluteStartValue is ignored and +// no buckets are skipped. // // targetSchema must be ≤ the schema of FloatHistogram (and of course within the // legal values for schemas in general). The buckets are merged to match the -// targetSchema prior to iterating (without mutating FloatHistogram). +// targetSchema prior to iterating (without mutating FloatHistogram), but custom buckets +// schemas cannot be merged with other schemas. func (h *FloatHistogram) floatBucketIterator( positive bool, absoluteStartValue float64, targetSchema int32, ) floatBucketIterator { + if h.UsesCustomBuckets() && targetSchema != h.Schema { + panic(fmt.Errorf("cannot merge from custom buckets schema to exponential schema")) + } + if !h.UsesCustomBuckets() && IsCustomBucketsSchema(targetSchema) { + panic(fmt.Errorf("cannot merge from exponential buckets schema to custom schema")) + } if targetSchema > h.Schema { panic(fmt.Errorf("cannot merge from schema %d to %d", h.Schema, targetSchema)) } @@ -816,6 +949,7 @@ func (h *FloatHistogram) floatBucketIterator( if positive { i.spans = h.PositiveSpans i.buckets = h.PositiveBuckets + i.customValues = h.CustomValues } else { i.spans = h.NegativeSpans i.buckets = h.NegativeBuckets @@ -825,14 +959,15 @@ func (h *FloatHistogram) floatBucketIterator( // reverseFloatBucketIterator is a low-level constructor for reverse bucket iterators. func newReverseFloatBucketIterator( - spans []Span, buckets []float64, schema int32, positive bool, + spans []Span, buckets []float64, schema int32, positive bool, customValues []float64, ) reverseFloatBucketIterator { r := reverseFloatBucketIterator{ baseBucketIterator: baseBucketIterator[float64, float64]{ - schema: schema, - spans: spans, - buckets: buckets, - positive: positive, + schema: schema, + spans: spans, + buckets: buckets, + positive: positive, + customValues: customValues, }, } @@ -946,9 +1081,9 @@ func (i *floatBucketIterator) Next() bool { } } - // Skip buckets before absoluteStartValue. + // Skip buckets before absoluteStartValue for exponential schemas. // TODO(beorn7): Maybe do something more efficient than this recursive call. - if !i.boundReachedStartValue && getBound(i.currIdx, i.targetSchema) <= i.absoluteStartValue { + if !i.boundReachedStartValue && IsExponentialSchema(i.targetSchema) && getBoundExponential(i.currIdx, i.targetSchema) <= i.absoluteStartValue { return i.Next() } i.boundReachedStartValue = true @@ -1010,14 +1145,7 @@ func (i *allFloatBucketIterator) Next() bool { case 0: i.state = 1 if i.h.ZeroCount > 0 { - i.currBucket = Bucket[float64]{ - Lower: -i.h.ZeroThreshold, - Upper: i.h.ZeroThreshold, - LowerInclusive: true, - UpperInclusive: true, - Count: i.h.ZeroCount, - // Index is irrelevant for the zero bucket. - } + i.currBucket = i.h.ZeroBucket() return true } return i.Next() @@ -1076,7 +1204,7 @@ func addBuckets( for _, spanB := range spansB { indexB += spanB.Offset for j := 0; j < int(spanB.Length); j++ { - if lowerThanThreshold && getBound(indexB, schema) <= threshold { + if lowerThanThreshold && IsExponentialSchema(schema) && getBoundExponential(indexB, schema) <= threshold { goto nextLoop } lowerThanThreshold = false @@ -1177,7 +1305,7 @@ func addBuckets( return spansA, bucketsA } -func floatBucketsMatch(b1, b2 []float64) bool { +func FloatBucketsMatch(b1, b2 []float64) bool { if len(b1) != len(b2) { return false } @@ -1191,7 +1319,15 @@ func floatBucketsMatch(b1, b2 []float64) bool { // ReduceResolution reduces the float histogram's spans, buckets into target schema. // The target schema must be smaller than the current float histogram's schema. +// This will panic if the histogram has custom buckets or if the target schema is +// a custom buckets schema. func (h *FloatHistogram) ReduceResolution(targetSchema int32) *FloatHistogram { + if h.UsesCustomBuckets() { + panic("cannot reduce resolution when there are custom buckets") + } + if IsCustomBucketsSchema(targetSchema) { + panic("cannot reduce resolution to custom buckets schema") + } if targetSchema >= h.Schema { panic(fmt.Errorf("cannot reduce resolution from schema %d to %d", h.Schema, targetSchema)) } diff --git a/vendor/github.com/prometheus/prometheus/model/histogram/generic.go b/vendor/github.com/prometheus/prometheus/model/histogram/generic.go index 67abe7b0aa..a36b58d069 100644 --- a/vendor/github.com/prometheus/prometheus/model/histogram/generic.go +++ b/vendor/github.com/prometheus/prometheus/model/histogram/generic.go @@ -20,14 +20,33 @@ import ( "strings" ) -var ( - ErrHistogramCountNotBigEnough = errors.New("histogram's observation count should be at least the number of observations found in the buckets") - ErrHistogramCountMismatch = errors.New("histogram's observation count should equal the number of observations found in the buckets (in absence of NaN)") - ErrHistogramNegativeBucketCount = errors.New("histogram has a bucket whose observation count is negative") - ErrHistogramSpanNegativeOffset = errors.New("histogram has a span whose offset is negative") - ErrHistogramSpansBucketsMismatch = errors.New("histogram spans specify different number of buckets than provided") +const ( + ExponentialSchemaMax int32 = 8 + ExponentialSchemaMin int32 = -4 + CustomBucketsSchema int32 = -53 ) +var ( + ErrHistogramCountNotBigEnough = errors.New("histogram's observation count should be at least the number of observations found in the buckets") + ErrHistogramCountMismatch = errors.New("histogram's observation count should equal the number of observations found in the buckets (in absence of NaN)") + ErrHistogramNegativeBucketCount = errors.New("histogram has a bucket whose observation count is negative") + ErrHistogramSpanNegativeOffset = errors.New("histogram has a span whose offset is negative") + ErrHistogramSpansBucketsMismatch = errors.New("histogram spans specify different number of buckets than provided") + ErrHistogramCustomBucketsMismatch = errors.New("histogram custom bounds are too few") + ErrHistogramCustomBucketsInvalid = errors.New("histogram custom bounds must be in strictly increasing order") + ErrHistogramCustomBucketsInfinite = errors.New("histogram custom bounds must be finite") + ErrHistogramsIncompatibleSchema = errors.New("cannot apply this operation on histograms with a mix of exponential and custom bucket schemas") + ErrHistogramsIncompatibleBounds = errors.New("cannot apply this operation on custom buckets histograms with different custom bounds") +) + +func IsCustomBucketsSchema(s int32) bool { + return s == CustomBucketsSchema +} + +func IsExponentialSchema(s int32) bool { + return s >= ExponentialSchemaMin && s <= ExponentialSchemaMax +} + // BucketCount is a type constraint for the count in a bucket, which can be // float64 (for type FloatHistogram) or uint64 (for type Histogram). type BucketCount interface { @@ -115,6 +134,8 @@ type baseBucketIterator[BC BucketCount, IBC InternalBucketCount] struct { currCount IBC // Count in the current bucket. currIdx int32 // The actual bucket index. + + customValues []float64 // Bounds (usually upper) for histograms with custom buckets. } func (b *baseBucketIterator[BC, IBC]) At() Bucket[BC] { @@ -128,14 +149,19 @@ func (b *baseBucketIterator[BC, IBC]) at(schema int32) Bucket[BC] { Index: b.currIdx, } if b.positive { - bucket.Upper = getBound(b.currIdx, schema) - bucket.Lower = getBound(b.currIdx-1, schema) + bucket.Upper = getBound(b.currIdx, schema, b.customValues) + bucket.Lower = getBound(b.currIdx-1, schema, b.customValues) } else { - bucket.Lower = -getBound(b.currIdx, schema) - bucket.Upper = -getBound(b.currIdx-1, schema) + bucket.Lower = -getBound(b.currIdx, schema, b.customValues) + bucket.Upper = -getBound(b.currIdx-1, schema, b.customValues) + } + if IsCustomBucketsSchema(schema) { + bucket.LowerInclusive = b.currIdx == 0 + bucket.UpperInclusive = true + } else { + bucket.LowerInclusive = bucket.Lower < 0 + bucket.UpperInclusive = bucket.Upper > 0 } - bucket.LowerInclusive = bucket.Lower < 0 - bucket.UpperInclusive = bucket.Upper > 0 return bucket } @@ -393,7 +419,55 @@ func checkHistogramBuckets[BC BucketCount, IBC InternalBucketCount](buckets []IB return nil } -func getBound(idx, schema int32) float64 { +func checkHistogramCustomBounds(bounds []float64, spans []Span, numBuckets int) error { + prev := math.Inf(-1) + for _, curr := range bounds { + if curr <= prev { + return fmt.Errorf("previous bound is %f and current is %f: %w", prev, curr, ErrHistogramCustomBucketsInvalid) + } + prev = curr + } + if prev == math.Inf(1) { + return fmt.Errorf("last +Inf bound must not be explicitly defined: %w", ErrHistogramCustomBucketsInfinite) + } + + var spanBuckets int + var totalSpanLength int + for n, span := range spans { + if span.Offset < 0 { + return fmt.Errorf("span number %d with offset %d: %w", n+1, span.Offset, ErrHistogramSpanNegativeOffset) + } + spanBuckets += int(span.Length) + totalSpanLength += int(span.Length) + int(span.Offset) + } + if spanBuckets != numBuckets { + return fmt.Errorf("spans need %d buckets, have %d buckets: %w", spanBuckets, numBuckets, ErrHistogramSpansBucketsMismatch) + } + if (len(bounds) + 1) < totalSpanLength { + return fmt.Errorf("only %d custom bounds defined which is insufficient to cover total span length of %d: %w", len(bounds), totalSpanLength, ErrHistogramCustomBucketsMismatch) + } + + return nil +} + +func getBound(idx, schema int32, customValues []float64) float64 { + if IsCustomBucketsSchema(schema) { + length := int32(len(customValues)) + switch { + case idx > length || idx < -1: + panic(fmt.Errorf("index %d out of bounds for custom bounds of length %d", idx, length)) + case idx == length: + return math.Inf(1) + case idx == -1: + return math.Inf(-1) + default: + return customValues[idx] + } + } + return getBoundExponential(idx, schema) +} + +func getBoundExponential(idx, schema int32) float64 { // Here a bit of context about the behavior for the last bucket counting // regular numbers (called simply "last bucket" below) and the bucket // counting observations of ±Inf (called "inf bucket" below, with an idx @@ -703,3 +777,10 @@ func reduceResolution[IBC InternalBucketCount]( return targetSpans, targetBuckets } + +func clearIfNotNil[T any](items []T) []T { + if items == nil { + return nil + } + return items[:0] +} diff --git a/vendor/github.com/prometheus/prometheus/model/histogram/histogram.go b/vendor/github.com/prometheus/prometheus/model/histogram/histogram.go index d94cf98fa6..e4b99ec420 100644 --- a/vendor/github.com/prometheus/prometheus/model/histogram/histogram.go +++ b/vendor/github.com/prometheus/prometheus/model/histogram/histogram.go @@ -49,11 +49,12 @@ const ( type Histogram struct { // Counter reset information. CounterResetHint CounterResetHint - // Currently valid schema numbers are -4 <= n <= 8. They are all for - // base-2 bucket schemas, where 1 is a bucket boundary in each case, and - // then each power of two is divided into 2^n logarithmic buckets. Or - // in other words, each bucket boundary is the previous boundary times - // 2^(2^-n). + // Currently valid schema numbers are -4 <= n <= 8 for exponential buckets, + // They are all for base-2 bucket schemas, where 1 is a bucket boundary in + // each case, and then each power of two is divided into 2^n logarithmic buckets. + // Or in other words, each bucket boundary is the previous boundary times + // 2^(2^-n). Another valid schema number is -53 for custom buckets, defined by + // the CustomValues field. Schema int32 // Width of the zero bucket. ZeroThreshold float64 @@ -69,6 +70,12 @@ type Histogram struct { // count. All following ones are deltas relative to the previous // element. PositiveBuckets, NegativeBuckets []int64 + // Holds the custom (usually upper) bounds for bucket definitions, otherwise nil. + // This slice is interned, to be treated as immutable and copied by reference. + // These numbers should be strictly increasing. This field is only used when the + // schema is for custom buckets, and the ZeroThreshold, ZeroCount, NegativeSpans + // and NegativeBuckets fields are not used in that case. + CustomValues []float64 } // A Span defines a continuous sequence of buckets. @@ -80,33 +87,46 @@ type Span struct { Length uint32 } +func (h *Histogram) UsesCustomBuckets() bool { + return IsCustomBucketsSchema(h.Schema) +} + // Copy returns a deep copy of the Histogram. func (h *Histogram) Copy() *Histogram { c := Histogram{ CounterResetHint: h.CounterResetHint, Schema: h.Schema, - ZeroThreshold: h.ZeroThreshold, - ZeroCount: h.ZeroCount, Count: h.Count, Sum: h.Sum, } + if h.UsesCustomBuckets() { + if len(h.CustomValues) != 0 { + c.CustomValues = make([]float64, len(h.CustomValues)) + copy(c.CustomValues, h.CustomValues) + } + } else { + c.ZeroThreshold = h.ZeroThreshold + c.ZeroCount = h.ZeroCount + + if len(h.NegativeSpans) != 0 { + c.NegativeSpans = make([]Span, len(h.NegativeSpans)) + copy(c.NegativeSpans, h.NegativeSpans) + } + if len(h.NegativeBuckets) != 0 { + c.NegativeBuckets = make([]int64, len(h.NegativeBuckets)) + copy(c.NegativeBuckets, h.NegativeBuckets) + } + } + if len(h.PositiveSpans) != 0 { c.PositiveSpans = make([]Span, len(h.PositiveSpans)) copy(c.PositiveSpans, h.PositiveSpans) } - if len(h.NegativeSpans) != 0 { - c.NegativeSpans = make([]Span, len(h.NegativeSpans)) - copy(c.NegativeSpans, h.NegativeSpans) - } if len(h.PositiveBuckets) != 0 { c.PositiveBuckets = make([]int64, len(h.PositiveBuckets)) copy(c.PositiveBuckets, h.PositiveBuckets) } - if len(h.NegativeBuckets) != 0 { - c.NegativeBuckets = make([]int64, len(h.NegativeBuckets)) - copy(c.NegativeBuckets, h.NegativeBuckets) - } return &c } @@ -116,22 +136,36 @@ func (h *Histogram) Copy() *Histogram { func (h *Histogram) CopyTo(to *Histogram) { to.CounterResetHint = h.CounterResetHint to.Schema = h.Schema - to.ZeroThreshold = h.ZeroThreshold - to.ZeroCount = h.ZeroCount to.Count = h.Count to.Sum = h.Sum + if h.UsesCustomBuckets() { + to.ZeroThreshold = 0 + to.ZeroCount = 0 + + to.NegativeSpans = clearIfNotNil(to.NegativeSpans) + to.NegativeBuckets = clearIfNotNil(to.NegativeBuckets) + + to.CustomValues = resize(to.CustomValues, len(h.CustomValues)) + copy(to.CustomValues, h.CustomValues) + } else { + to.ZeroThreshold = h.ZeroThreshold + to.ZeroCount = h.ZeroCount + + to.NegativeSpans = resize(to.NegativeSpans, len(h.NegativeSpans)) + copy(to.NegativeSpans, h.NegativeSpans) + + to.NegativeBuckets = resize(to.NegativeBuckets, len(h.NegativeBuckets)) + copy(to.NegativeBuckets, h.NegativeBuckets) + + to.CustomValues = clearIfNotNil(to.CustomValues) + } + to.PositiveSpans = resize(to.PositiveSpans, len(h.PositiveSpans)) copy(to.PositiveSpans, h.PositiveSpans) - to.NegativeSpans = resize(to.NegativeSpans, len(h.NegativeSpans)) - copy(to.NegativeSpans, h.NegativeSpans) - to.PositiveBuckets = resize(to.PositiveBuckets, len(h.PositiveBuckets)) copy(to.PositiveBuckets, h.PositiveBuckets) - - to.NegativeBuckets = resize(to.NegativeBuckets, len(h.NegativeBuckets)) - copy(to.NegativeBuckets, h.NegativeBuckets) } // String returns a string representation of the Histogram. @@ -165,8 +199,11 @@ func (h *Histogram) String() string { return sb.String() } -// ZeroBucket returns the zero bucket. +// ZeroBucket returns the zero bucket. This method panics if the schema is for custom buckets. func (h *Histogram) ZeroBucket() Bucket[uint64] { + if h.UsesCustomBuckets() { + panic("histograms with custom buckets have no zero bucket") + } return Bucket[uint64]{ Lower: -h.ZeroThreshold, Upper: h.ZeroThreshold, @@ -179,14 +216,14 @@ func (h *Histogram) ZeroBucket() Bucket[uint64] { // PositiveBucketIterator returns a BucketIterator to iterate over all positive // buckets in ascending order (starting next to the zero bucket and going up). func (h *Histogram) PositiveBucketIterator() BucketIterator[uint64] { - it := newRegularBucketIterator(h.PositiveSpans, h.PositiveBuckets, h.Schema, true) + it := newRegularBucketIterator(h.PositiveSpans, h.PositiveBuckets, h.Schema, true, h.CustomValues) return &it } // NegativeBucketIterator returns a BucketIterator to iterate over all negative // buckets in descending order (starting next to the zero bucket and going down). func (h *Histogram) NegativeBucketIterator() BucketIterator[uint64] { - it := newRegularBucketIterator(h.NegativeSpans, h.NegativeBuckets, h.Schema, false) + it := newRegularBucketIterator(h.NegativeSpans, h.NegativeBuckets, h.Schema, false, nil) return &it } @@ -207,30 +244,42 @@ func (h *Histogram) CumulativeBucketIterator() BucketIterator[uint64] { // but they must represent the same bucket layout to match. // Sum is compared based on its bit pattern because this method // is about data equality rather than mathematical equality. +// We ignore fields that are not used based on the exponential / custom buckets schema, +// but check fields where differences may cause unintended behaviour even if they are not +// supposed to be used according to the schema. func (h *Histogram) Equals(h2 *Histogram) bool { if h2 == nil { return false } - if h.Schema != h2.Schema || h.ZeroThreshold != h2.ZeroThreshold || - h.ZeroCount != h2.ZeroCount || h.Count != h2.Count || + if h.Schema != h2.Schema || h.Count != h2.Count || math.Float64bits(h.Sum) != math.Float64bits(h2.Sum) { return false } + if h.UsesCustomBuckets() { + if !FloatBucketsMatch(h.CustomValues, h2.CustomValues) { + return false + } + } + + if h.ZeroThreshold != h2.ZeroThreshold || h.ZeroCount != h2.ZeroCount { + return false + } + + if !spansMatch(h.NegativeSpans, h2.NegativeSpans) { + return false + } + if !slices.Equal(h.NegativeBuckets, h2.NegativeBuckets) { + return false + } + if !spansMatch(h.PositiveSpans, h2.PositiveSpans) { return false } - if !spansMatch(h.NegativeSpans, h2.NegativeSpans) { - return false - } - if !slices.Equal(h.PositiveBuckets, h2.PositiveBuckets) { return false } - if !slices.Equal(h.NegativeBuckets, h2.NegativeBuckets) { - return false - } return true } @@ -321,17 +370,36 @@ func (h *Histogram) ToFloat(fh *FloatHistogram) *FloatHistogram { } fh.CounterResetHint = h.CounterResetHint fh.Schema = h.Schema - fh.ZeroThreshold = h.ZeroThreshold - fh.ZeroCount = float64(h.ZeroCount) fh.Count = float64(h.Count) fh.Sum = h.Sum + if h.UsesCustomBuckets() { + fh.ZeroThreshold = 0 + fh.ZeroCount = 0 + fh.NegativeSpans = clearIfNotNil(fh.NegativeSpans) + fh.NegativeBuckets = clearIfNotNil(fh.NegativeBuckets) + + fh.CustomValues = resize(fh.CustomValues, len(h.CustomValues)) + copy(fh.CustomValues, h.CustomValues) + } else { + fh.ZeroThreshold = h.ZeroThreshold + fh.ZeroCount = float64(h.ZeroCount) + + fh.NegativeSpans = resize(fh.NegativeSpans, len(h.NegativeSpans)) + copy(fh.NegativeSpans, h.NegativeSpans) + + fh.NegativeBuckets = resize(fh.NegativeBuckets, len(h.NegativeBuckets)) + var currentNegative float64 + for i, b := range h.NegativeBuckets { + currentNegative += float64(b) + fh.NegativeBuckets[i] = currentNegative + } + fh.CustomValues = clearIfNotNil(fh.CustomValues) + } + fh.PositiveSpans = resize(fh.PositiveSpans, len(h.PositiveSpans)) copy(fh.PositiveSpans, h.PositiveSpans) - fh.NegativeSpans = resize(fh.NegativeSpans, len(h.NegativeSpans)) - copy(fh.NegativeSpans, h.NegativeSpans) - fh.PositiveBuckets = resize(fh.PositiveBuckets, len(h.PositiveBuckets)) var currentPositive float64 for i, b := range h.PositiveBuckets { @@ -339,13 +407,6 @@ func (h *Histogram) ToFloat(fh *FloatHistogram) *FloatHistogram { fh.PositiveBuckets[i] = currentPositive } - fh.NegativeBuckets = resize(fh.NegativeBuckets, len(h.NegativeBuckets)) - var currentNegative float64 - for i, b := range h.NegativeBuckets { - currentNegative += float64(b) - fh.NegativeBuckets[i] = currentNegative - } - return fh } @@ -357,25 +418,47 @@ func resize[T any](items []T, n int) []T { } // Validate validates consistency between span and bucket slices. Also, buckets are checked -// against negative values. +// against negative values. We check to make sure there are no unexpected fields or field values +// based on the exponential / custom buckets schema. // For histograms that have not observed any NaN values (based on IsNaN(h.Sum) check), a // strict h.Count = nCount + pCount + h.ZeroCount check is performed. // Otherwise, only a lower bound check will be done (h.Count >= nCount + pCount + h.ZeroCount), // because NaN observations do not increment the values of buckets (but they do increment // the total h.Count). func (h *Histogram) Validate() error { - if err := checkHistogramSpans(h.NegativeSpans, len(h.NegativeBuckets)); err != nil { - return fmt.Errorf("negative side: %w", err) - } - if err := checkHistogramSpans(h.PositiveSpans, len(h.PositiveBuckets)); err != nil { - return fmt.Errorf("positive side: %w", err) - } var nCount, pCount uint64 - err := checkHistogramBuckets(h.NegativeBuckets, &nCount, true) - if err != nil { - return fmt.Errorf("negative side: %w", err) + if h.UsesCustomBuckets() { + if err := checkHistogramCustomBounds(h.CustomValues, h.PositiveSpans, len(h.PositiveBuckets)); err != nil { + return fmt.Errorf("custom buckets: %w", err) + } + if h.ZeroCount != 0 { + return fmt.Errorf("custom buckets: must have zero count of 0") + } + if h.ZeroThreshold != 0 { + return fmt.Errorf("custom buckets: must have zero threshold of 0") + } + if len(h.NegativeSpans) > 0 { + return fmt.Errorf("custom buckets: must not have negative spans") + } + if len(h.NegativeBuckets) > 0 { + return fmt.Errorf("custom buckets: must not have negative buckets") + } + } else { + if err := checkHistogramSpans(h.PositiveSpans, len(h.PositiveBuckets)); err != nil { + return fmt.Errorf("positive side: %w", err) + } + if err := checkHistogramSpans(h.NegativeSpans, len(h.NegativeBuckets)); err != nil { + return fmt.Errorf("negative side: %w", err) + } + err := checkHistogramBuckets(h.NegativeBuckets, &nCount, true) + if err != nil { + return fmt.Errorf("negative side: %w", err) + } + if h.CustomValues != nil { + return fmt.Errorf("histogram with exponential schema must not have custom bounds") + } } - err = checkHistogramBuckets(h.PositiveBuckets, &pCount, true) + err := checkHistogramBuckets(h.PositiveBuckets, &pCount, true) if err != nil { return fmt.Errorf("positive side: %w", err) } @@ -398,12 +481,13 @@ type regularBucketIterator struct { baseBucketIterator[uint64, int64] } -func newRegularBucketIterator(spans []Span, buckets []int64, schema int32, positive bool) regularBucketIterator { +func newRegularBucketIterator(spans []Span, buckets []int64, schema int32, positive bool, customValues []float64) regularBucketIterator { i := baseBucketIterator[uint64, int64]{ - schema: schema, - spans: spans, - buckets: buckets, - positive: positive, + schema: schema, + spans: spans, + buckets: buckets, + positive: positive, + customValues: customValues, } return regularBucketIterator{i} } @@ -477,7 +561,7 @@ func (c *cumulativeBucketIterator) Next() bool { if c.emptyBucketCount > 0 { // We are traversing through empty buckets at the moment. - c.currUpper = getBound(c.currIdx, c.h.Schema) + c.currUpper = getBound(c.currIdx, c.h.Schema, c.h.CustomValues) c.currIdx++ c.emptyBucketCount-- return true @@ -494,7 +578,7 @@ func (c *cumulativeBucketIterator) Next() bool { c.currCount += c.h.PositiveBuckets[c.posBucketsIdx] c.currCumulativeCount += uint64(c.currCount) - c.currUpper = getBound(c.currIdx, c.h.Schema) + c.currUpper = getBound(c.currIdx, c.h.Schema, c.h.CustomValues) c.posBucketsIdx++ c.idxInSpan++ @@ -524,7 +608,15 @@ func (c *cumulativeBucketIterator) At() Bucket[uint64] { // ReduceResolution reduces the histogram's spans, buckets into target schema. // The target schema must be smaller than the current histogram's schema. +// This will panic if the histogram has custom buckets or if the target schema is +// a custom buckets schema. func (h *Histogram) ReduceResolution(targetSchema int32) *Histogram { + if h.UsesCustomBuckets() { + panic("cannot reduce resolution when there are custom buckets") + } + if IsCustomBucketsSchema(targetSchema) { + panic("cannot reduce resolution to custom buckets schema") + } if targetSchema >= h.Schema { panic(fmt.Errorf("cannot reduce resolution from schema %d to %d", h.Schema, targetSchema)) } diff --git a/vendor/github.com/prometheus/prometheus/model/labels/labels_common.go b/vendor/github.com/prometheus/prometheus/model/labels/labels_common.go index f46321c97e..4bc94f84fe 100644 --- a/vendor/github.com/prometheus/prometheus/model/labels/labels_common.go +++ b/vendor/github.com/prometheus/prometheus/model/labels/labels_common.go @@ -18,6 +18,7 @@ import ( "encoding/json" "slices" "strconv" + "unsafe" "github.com/prometheus/common/model" ) @@ -215,3 +216,7 @@ func contains(s []Label, n string) bool { } return false } + +func yoloString(b []byte) string { + return *((*string)(unsafe.Pointer(&b))) +} diff --git a/vendor/github.com/prometheus/prometheus/model/labels/labels_dedupelabels.go b/vendor/github.com/prometheus/prometheus/model/labels/labels_dedupelabels.go index dfc74aa3a3..0e5bb048be 100644 --- a/vendor/github.com/prometheus/prometheus/model/labels/labels_dedupelabels.go +++ b/vendor/github.com/prometheus/prometheus/model/labels/labels_dedupelabels.go @@ -20,7 +20,6 @@ import ( "slices" "strings" "sync" - "unsafe" "github.com/cespare/xxhash/v2" ) @@ -105,30 +104,39 @@ func (t *nameTable) ToName(num int) string { return t.byNum[num] } +// "Varint" in this file is non-standard: we encode small numbers (up to 32767) in 2 bytes, +// because we expect most Prometheus to have more than 127 unique strings. +// And we don't encode numbers larger than 4 bytes because we don't expect more than 536,870,912 unique strings. func decodeVarint(data string, index int) (int, int) { - // Fast-path for common case of a single byte, value 0..127. - b := data[index] + b := int(data[index]) + int(data[index+1])<<8 + index += 2 + if b < 0x8000 { + return b, index + } + return decodeVarintRest(b, data, index) +} + +func decodeVarintRest(b int, data string, index int) (int, int) { + value := int(b & 0x7FFF) + b = int(data[index]) index++ if b < 0x80 { - return int(b), index + return value | (b << 15), index } - value := int(b & 0x7F) - for shift := uint(7); ; shift += 7 { - // Just panic if we go of the end of data, since all Labels strings are constructed internally and - // malformed data indicates a bug, or memory corruption. - b := data[index] - index++ - value |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - return value, index + + value |= (b & 0x7f) << 15 + b = int(data[index]) + index++ + return value | (b << 22), index } func decodeString(t *nameTable, data string, index int) (string, int) { - var num int - num, index = decodeVarint(data, index) + // Copy decodeVarint here, because the Go compiler says it's too big to inline. + num := int(data[index]) + int(data[index+1])<<8 + index += 2 + if num >= 0x8000 { + num, index = decodeVarintRest(num, data, index) + } return t.ToName(num), index } @@ -322,7 +330,12 @@ func (ls Labels) Get(name string) string { } else if lName[0] > name[0] { // Stop looking if we've gone past. break } - _, i = decodeVarint(ls.data, i) + // Copy decodeVarint here, because the Go compiler says it's too big to inline. + num := int(ls.data[i]) + int(ls.data[i+1])<<8 + i += 2 + if num >= 0x8000 { + _, i = decodeVarintRest(num, ls.data, i) + } } return "" } @@ -340,7 +353,12 @@ func (ls Labels) Has(name string) bool { } else if lName[0] > name[0] { // Stop looking if we've gone past. break } - _, i = decodeVarint(ls.data, i) + // Copy decodeVarint here, because the Go compiler says it's too big to inline. + num := int(ls.data[i]) + int(ls.data[i+1])<<8 + i += 2 + if num >= 0x8000 { + _, i = decodeVarintRest(num, ls.data, i) + } } return false } @@ -426,10 +444,6 @@ func EmptyLabels() Labels { return Labels{} } -func yoloString(b []byte) string { - return *((*string)(unsafe.Pointer(&b))) -} - // New returns a sorted Labels from the given labels. // The caller has to guarantee that all label names are unique. // Note this function is not efficient; should not be used in performance-critical places. @@ -646,29 +660,24 @@ func marshalNumbersToSizedBuffer(nums []int, data []byte) int { func sizeVarint(x uint64) (n int) { // Most common case first - if x < 1<<7 { - return 1 + if x < 1<<15 { + return 2 } - if x >= 1<<56 { - return 9 + if x < 1<<22 { + return 3 } - if x >= 1<<28 { - x >>= 28 - n = 4 + if x >= 1<<29 { + panic("Number too large to represent") } - if x >= 1<<14 { - x >>= 14 - n += 2 - } - if x >= 1<<7 { - n++ - } - return n + 1 + return 4 } func encodeVarintSlow(data []byte, offset int, v uint64) int { offset -= sizeVarint(v) base := offset + data[offset] = uint8(v) + v >>= 8 + offset++ for v >= 1<<7 { data[offset] = uint8(v&0x7f | 0x80) v >>= 7 @@ -678,11 +687,12 @@ func encodeVarintSlow(data []byte, offset int, v uint64) int { return base } -// Special code for the common case that a value is less than 128 +// Special code for the common case that a value is less than 32768 func encodeVarint(data []byte, offset, v int) int { - if v < 1<<7 { - offset-- + if v < 1<<15 { + offset -= 2 data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) return offset } return encodeVarintSlow(data, offset, uint64(v)) diff --git a/vendor/github.com/prometheus/prometheus/model/labels/labels_stringlabels.go b/vendor/github.com/prometheus/prometheus/model/labels/labels_stringlabels.go index 9ef764daec..bccceb61fe 100644 --- a/vendor/github.com/prometheus/prometheus/model/labels/labels_stringlabels.go +++ b/vendor/github.com/prometheus/prometheus/model/labels/labels_stringlabels.go @@ -299,11 +299,6 @@ func Equal(ls, o Labels) bool { func EmptyLabels() Labels { return Labels{} } - -func yoloString(b []byte) string { - return *((*string)(unsafe.Pointer(&b))) -} - func yoloBytes(s string) (b []byte) { *(*string)(unsafe.Pointer(&b)) = s (*reflect.SliceHeader)(unsafe.Pointer(&b)).Cap = len(s) diff --git a/vendor/github.com/prometheus/prometheus/model/labels/matcher.go b/vendor/github.com/prometheus/prometheus/model/labels/matcher.go index 8e220e392d..a09c838e3f 100644 --- a/vendor/github.com/prometheus/prometheus/model/labels/matcher.go +++ b/vendor/github.com/prometheus/prometheus/model/labels/matcher.go @@ -101,7 +101,7 @@ func (m *Matcher) shouldQuoteName() bool { } return true } - return false + return len(m.Name) == 0 } // Matches returns whether the matcher matches the given string value. diff --git a/vendor/github.com/prometheus/prometheus/model/labels/regexp.go b/vendor/github.com/prometheus/prometheus/model/labels/regexp.go index b484e27168..d2151d83dd 100644 --- a/vendor/github.com/prometheus/prometheus/model/labels/regexp.go +++ b/vendor/github.com/prometheus/prometheus/model/labels/regexp.go @@ -16,17 +16,19 @@ package labels import ( "slices" "strings" + "unicode" "unicode/utf8" "github.com/grafana/regexp" "github.com/grafana/regexp/syntax" + "golang.org/x/text/unicode/norm" ) const ( maxSetMatches = 256 // The minimum number of alternate values a regex should have to trigger - // the optimization done by optimizeEqualStringMatchers() and so use a map + // the optimization done by optimizeEqualOrPrefixStringMatchers() and so use a map // to match values instead of iterating over a list. This value has // been computed running BenchmarkOptimizeEqualStringMatchers. minEqualMultiStringMatcherMapThreshold = 16 @@ -42,7 +44,7 @@ type FastRegexMatcher struct { stringMatcher StringMatcher prefix string suffix string - contains string + contains []string // matchString is the "compiled" function to run by MatchString(). matchString func(string) bool @@ -87,7 +89,7 @@ func NewFastRegexMatcher(v string) (*FastRegexMatcher, error) { // compileMatchStringFunction returns the function to run by MatchString(). func (m *FastRegexMatcher) compileMatchStringFunction() func(string) bool { // If the only optimization available is the string matcher, then we can just run it. - if len(m.setMatches) == 0 && m.prefix == "" && m.suffix == "" && m.contains == "" && m.stringMatcher != nil { + if len(m.setMatches) == 0 && m.prefix == "" && m.suffix == "" && len(m.contains) == 0 && m.stringMatcher != nil { return m.stringMatcher.Matches } @@ -106,7 +108,7 @@ func (m *FastRegexMatcher) compileMatchStringFunction() func(string) bool { if m.suffix != "" && !strings.HasSuffix(s, m.suffix) { return false } - if m.contains != "" && !strings.Contains(s, m.contains) { + if len(m.contains) > 0 && !containsInOrder(s, m.contains) { return false } if m.stringMatcher != nil { @@ -119,7 +121,7 @@ func (m *FastRegexMatcher) compileMatchStringFunction() func(string) bool { // IsOptimized returns true if any fast-path optimization is applied to the // regex matcher. func (m *FastRegexMatcher) IsOptimized() bool { - return len(m.setMatches) > 0 || m.stringMatcher != nil || m.prefix != "" || m.suffix != "" || m.contains != "" + return len(m.setMatches) > 0 || m.stringMatcher != nil || m.prefix != "" || m.suffix != "" || len(m.contains) > 0 } // findSetMatches extract equality matches from a regexp. @@ -335,7 +337,7 @@ func optimizeAlternatingLiterals(s string) (StringMatcher, []string) { return nil, nil } - multiMatcher := newEqualMultiStringMatcher(true, estimatedAlternates) + multiMatcher := newEqualMultiStringMatcher(true, estimatedAlternates, 0, 0) for end := strings.IndexByte(s, '|'); end > -1; end = strings.IndexByte(s, '|') { // Split the string into the next literal and the remainder @@ -361,8 +363,9 @@ func optimizeAlternatingLiterals(s string) (StringMatcher, []string) { // optimizeConcatRegex returns literal prefix/suffix text that can be safely // checked against the label value before running the regexp matcher. -func optimizeConcatRegex(r *syntax.Regexp) (prefix, suffix, contains string) { +func optimizeConcatRegex(r *syntax.Regexp) (prefix, suffix string, contains []string) { sub := r.Sub + clearCapture(sub...) // We can safely remove begin and end text matchers respectively // at the beginning and end of the regexp. @@ -387,13 +390,11 @@ func optimizeConcatRegex(r *syntax.Regexp) (prefix, suffix, contains string) { suffix = string(sub[last].Rune) } - // If contains any literal which is not a prefix/suffix, we keep the - // 1st one. We do not keep the whole list of literals to simplify the - // fast path. + // If contains any literal which is not a prefix/suffix, we keep track of + // all the ones which are case-sensitive. for i := 1; i < len(sub)-1; i++ { if sub[i].Op == syntax.OpLiteral && (sub[i].Flags&syntax.FoldCase) == 0 { - contains = string(sub[i].Rune) - break + contains = append(contains, string(sub[i].Rune)) } } @@ -411,7 +412,7 @@ func stringMatcherFromRegexp(re *syntax.Regexp) StringMatcher { clearBeginEndText(re) m := stringMatcherFromRegexpInternal(re) - m = optimizeEqualStringMatchers(m, minEqualMultiStringMatcherMapThreshold) + m = optimizeEqualOrPrefixStringMatchers(m, minEqualMultiStringMatcherMapThreshold) return m } @@ -548,11 +549,7 @@ func stringMatcherFromRegexpInternal(re *syntax.Regexp) StringMatcher { // Right matcher with 1 fixed set match. case left == nil && len(matches) == 1: - return &literalPrefixStringMatcher{ - prefix: matches[0], - prefixCaseSensitive: matchesCaseSensitive, - right: right, - } + return newLiteralPrefixStringMatcher(matches[0], matchesCaseSensitive, right) // Left matcher with 1 fixed set match. case right == nil && len(matches) == 1: @@ -630,21 +627,47 @@ func (m *containsStringMatcher) Matches(s string) bool { return false } -// literalPrefixStringMatcher matches a string with the given literal prefix and right side matcher. -type literalPrefixStringMatcher struct { - prefix string - prefixCaseSensitive bool +func newLiteralPrefixStringMatcher(prefix string, prefixCaseSensitive bool, right StringMatcher) StringMatcher { + if prefixCaseSensitive { + return &literalPrefixSensitiveStringMatcher{ + prefix: prefix, + right: right, + } + } + + return &literalPrefixInsensitiveStringMatcher{ + prefix: prefix, + right: right, + } +} + +// literalPrefixSensitiveStringMatcher matches a string with the given literal case-sensitive prefix and right side matcher. +type literalPrefixSensitiveStringMatcher struct { + prefix string // The matcher that must match the right side. Can be nil. right StringMatcher } -func (m *literalPrefixStringMatcher) Matches(s string) bool { - // Ensure the prefix matches. - if m.prefixCaseSensitive && !strings.HasPrefix(s, m.prefix) { +func (m *literalPrefixSensitiveStringMatcher) Matches(s string) bool { + if !strings.HasPrefix(s, m.prefix) { return false } - if !m.prefixCaseSensitive && !hasPrefixCaseInsensitive(s, m.prefix) { + + // Ensure the right side matches. + return m.right.Matches(s[len(m.prefix):]) +} + +// literalPrefixInsensitiveStringMatcher matches a string with the given literal case-insensitive prefix and right side matcher. +type literalPrefixInsensitiveStringMatcher struct { + prefix string + + // The matcher that must match the right side. Can be nil. + right StringMatcher +} + +func (m *literalPrefixInsensitiveStringMatcher) Matches(s string) bool { + if !hasPrefixCaseInsensitive(s, m.prefix) { return false } @@ -709,17 +732,20 @@ func (m *equalStringMatcher) Matches(s string) bool { type multiStringMatcherBuilder interface { StringMatcher add(s string) + addPrefix(prefix string, prefixCaseSensitive bool, matcher StringMatcher) setMatches() []string } -func newEqualMultiStringMatcher(caseSensitive bool, estimatedSize int) multiStringMatcherBuilder { +func newEqualMultiStringMatcher(caseSensitive bool, estimatedSize, estimatedPrefixes, minPrefixLength int) multiStringMatcherBuilder { // If the estimated size is low enough, it's faster to use a slice instead of a map. - if estimatedSize < minEqualMultiStringMatcherMapThreshold { + if estimatedSize < minEqualMultiStringMatcherMapThreshold && estimatedPrefixes == 0 { return &equalMultiStringSliceMatcher{caseSensitive: caseSensitive, values: make([]string, 0, estimatedSize)} } return &equalMultiStringMapMatcher{ values: make(map[string]struct{}, estimatedSize), + prefixes: make(map[string][]StringMatcher, estimatedPrefixes), + minPrefixLen: minPrefixLength, caseSensitive: caseSensitive, } } @@ -735,6 +761,10 @@ func (m *equalMultiStringSliceMatcher) add(s string) { m.values = append(m.values, s) } +func (m *equalMultiStringSliceMatcher) addPrefix(_ string, _ bool, _ StringMatcher) { + panic("not implemented") +} + func (m *equalMultiStringSliceMatcher) setMatches() []string { return m.values } @@ -756,25 +786,49 @@ func (m *equalMultiStringSliceMatcher) Matches(s string) bool { return false } -// equalMultiStringMapMatcher matches a string exactly against a map of valid values. +// equalMultiStringMapMatcher matches a string exactly against a map of valid values +// or against a set of prefix matchers. type equalMultiStringMapMatcher struct { // values contains values to match a string against. If the matching is case insensitive, // the values here must be lowercase. values map[string]struct{} - + // prefixes maps strings, all of length minPrefixLen, to sets of matchers to check the rest of the string. + // If the matching is case insensitive, prefixes are all lowercase. + prefixes map[string][]StringMatcher + // minPrefixLen can be zero, meaning there are no prefix matchers. + minPrefixLen int caseSensitive bool } func (m *equalMultiStringMapMatcher) add(s string) { if !m.caseSensitive { - s = strings.ToLower(s) + s = toNormalisedLower(s) } m.values[s] = struct{}{} } +func (m *equalMultiStringMapMatcher) addPrefix(prefix string, prefixCaseSensitive bool, matcher StringMatcher) { + if m.minPrefixLen == 0 { + panic("addPrefix called when no prefix length defined") + } + if len(prefix) < m.minPrefixLen { + panic("addPrefix called with a too short prefix") + } + if m.caseSensitive != prefixCaseSensitive { + panic("addPrefix called with a prefix whose case sensitivity is different than the expected one") + } + + s := prefix[:m.minPrefixLen] + if !m.caseSensitive { + s = strings.ToLower(s) + } + + m.prefixes[s] = append(m.prefixes[s], matcher) +} + func (m *equalMultiStringMapMatcher) setMatches() []string { - if len(m.values) >= maxSetMatches { + if len(m.values) >= maxSetMatches || len(m.prefixes) > 0 { return nil } @@ -787,11 +841,42 @@ func (m *equalMultiStringMapMatcher) setMatches() []string { func (m *equalMultiStringMapMatcher) Matches(s string) bool { if !m.caseSensitive { - s = strings.ToLower(s) + s = toNormalisedLower(s) } - _, ok := m.values[s] - return ok + if _, ok := m.values[s]; ok { + return true + } + if m.minPrefixLen > 0 && len(s) >= m.minPrefixLen { + for _, matcher := range m.prefixes[s[:m.minPrefixLen]] { + if matcher.Matches(s) { + return true + } + } + } + return false +} + +// toNormalisedLower normalise the input string using "Unicode Normalization Form D" and then convert +// it to lower case. +func toNormalisedLower(s string) string { + var buf []byte + for i := 0; i < len(s); i++ { + c := s[i] + if c >= utf8.RuneSelf { + return strings.Map(unicode.ToLower, norm.NFKD.String(s)) + } + if 'A' <= c && c <= 'Z' { + if buf == nil { + buf = []byte(s) + } + buf[i] = c + 'a' - 'A' + } + } + if buf == nil { + return s + } + return yoloString(buf) } // anyStringWithoutNewlineMatcher is a stringMatcher which matches any string @@ -852,20 +937,24 @@ func (m trueMatcher) Matches(_ string) bool { return true } -// optimizeEqualStringMatchers optimize a specific case where all matchers are made by an -// alternation (orStringMatcher) of strings checked for equality (equalStringMatcher). In -// this specific case, when we have many strings to match against we can use a map instead +// optimizeEqualOrPrefixStringMatchers optimize a specific case where all matchers are made by an +// alternation (orStringMatcher) of strings checked for equality (equalStringMatcher) or +// with a literal prefix (literalPrefixSensitiveStringMatcher or literalPrefixInsensitiveStringMatcher). +// +// In this specific case, when we have many strings to match against we can use a map instead // of iterating over the list of strings. -func optimizeEqualStringMatchers(input StringMatcher, threshold int) StringMatcher { +func optimizeEqualOrPrefixStringMatchers(input StringMatcher, threshold int) StringMatcher { var ( caseSensitive bool caseSensitiveSet bool numValues int + numPrefixes int + minPrefixLength int ) // Analyse the input StringMatcher to count the number of occurrences // and ensure all of them have the same case sensitivity. - analyseCallback := func(matcher *equalStringMatcher) bool { + analyseEqualMatcherCallback := func(matcher *equalStringMatcher) bool { // Ensure we don't have mixed case sensitivity. if caseSensitiveSet && caseSensitive != matcher.caseSensitive { return false @@ -878,34 +967,55 @@ func optimizeEqualStringMatchers(input StringMatcher, threshold int) StringMatch return true } - if !findEqualStringMatchers(input, analyseCallback) { + analysePrefixMatcherCallback := func(prefix string, prefixCaseSensitive bool, matcher StringMatcher) bool { + // Ensure we don't have mixed case sensitivity. + if caseSensitiveSet && caseSensitive != prefixCaseSensitive { + return false + } else if !caseSensitiveSet { + caseSensitive = prefixCaseSensitive + caseSensitiveSet = true + } + if numPrefixes == 0 || len(prefix) < minPrefixLength { + minPrefixLength = len(prefix) + } + + numPrefixes++ + return true + } + + if !findEqualOrPrefixStringMatchers(input, analyseEqualMatcherCallback, analysePrefixMatcherCallback) { return input } - // If the number of values found is less than the threshold, then we should skip the optimization. - if numValues < threshold { + // If the number of values and prefixes found is less than the threshold, then we should skip the optimization. + if (numValues + numPrefixes) < threshold { return input } // Parse again the input StringMatcher to extract all values and storing them. // We can skip the case sensitivity check because we've already checked it and // if the code reach this point then it means all matchers have the same case sensitivity. - multiMatcher := newEqualMultiStringMatcher(caseSensitive, numValues) + multiMatcher := newEqualMultiStringMatcher(caseSensitive, numValues, numPrefixes, minPrefixLength) // Ignore the return value because we already iterated over the input StringMatcher // and it was all good. - findEqualStringMatchers(input, func(matcher *equalStringMatcher) bool { + findEqualOrPrefixStringMatchers(input, func(matcher *equalStringMatcher) bool { multiMatcher.add(matcher.s) return true + }, func(prefix string, prefixCaseSensitive bool, matcher StringMatcher) bool { + multiMatcher.addPrefix(prefix, caseSensitive, matcher) + return true }) return multiMatcher } -// findEqualStringMatchers analyze the input StringMatcher and calls the callback for each -// equalStringMatcher found. Returns true if and only if the input StringMatcher is *only* -// composed by an alternation of equalStringMatcher. -func findEqualStringMatchers(input StringMatcher, callback func(matcher *equalStringMatcher) bool) bool { +// findEqualOrPrefixStringMatchers analyze the input StringMatcher and calls the equalMatcherCallback for each +// equalStringMatcher found, and prefixMatcherCallback for each literalPrefixSensitiveStringMatcher and literalPrefixInsensitiveStringMatcher found. +// +// Returns true if and only if the input StringMatcher is *only* composed by an alternation of equalStringMatcher and/or +// literal prefix matcher. Returns false if prefixMatcherCallback is nil and a literal prefix matcher is encountered. +func findEqualOrPrefixStringMatchers(input StringMatcher, equalMatcherCallback func(matcher *equalStringMatcher) bool, prefixMatcherCallback func(prefix string, prefixCaseSensitive bool, matcher StringMatcher) bool) bool { orInput, ok := input.(orStringMatcher) if !ok { return false @@ -914,17 +1024,27 @@ func findEqualStringMatchers(input StringMatcher, callback func(matcher *equalSt for _, m := range orInput { switch casted := m.(type) { case orStringMatcher: - if !findEqualStringMatchers(m, callback) { + if !findEqualOrPrefixStringMatchers(m, equalMatcherCallback, prefixMatcherCallback) { return false } case *equalStringMatcher: - if !callback(casted) { + if !equalMatcherCallback(casted) { + return false + } + + case *literalPrefixSensitiveStringMatcher: + if prefixMatcherCallback == nil || !prefixMatcherCallback(casted.prefix, true, casted) { + return false + } + + case *literalPrefixInsensitiveStringMatcher: + if prefixMatcherCallback == nil || !prefixMatcherCallback(casted.prefix, false, casted) { return false } default: - // It's not an equal string matcher, so we have to stop searching + // It's not an equal or prefix string matcher, so we have to stop searching // cause this optimization can't be applied. return false } @@ -940,3 +1060,27 @@ func hasPrefixCaseInsensitive(s, prefix string) bool { func hasSuffixCaseInsensitive(s, suffix string) bool { return len(s) >= len(suffix) && strings.EqualFold(s[len(s)-len(suffix):], suffix) } + +func containsInOrder(s string, contains []string) bool { + // Optimization for the case we only have to look for 1 substring. + if len(contains) == 1 { + return strings.Contains(s, contains[0]) + } + + return containsInOrderMulti(s, contains) +} + +func containsInOrderMulti(s string, contains []string) bool { + offset := 0 + + for _, substr := range contains { + at := strings.Index(s[offset:], substr) + if at == -1 { + return false + } + + offset += at + len(substr) + } + + return true +} diff --git a/vendor/github.com/prometheus/prometheus/model/relabel/relabel.go b/vendor/github.com/prometheus/prometheus/model/relabel/relabel.go index db2e6ce2ff..4f33edda43 100644 --- a/vendor/github.com/prometheus/prometheus/model/relabel/relabel.go +++ b/vendor/github.com/prometheus/prometheus/model/relabel/relabel.go @@ -206,6 +206,11 @@ func (re Regexp) MarshalYAML() (interface{}, error) { return nil, nil } +// IsZero implements the yaml.IsZeroer interface. +func (re Regexp) IsZero() bool { + return re.Regexp == DefaultRelabelConfig.Regex.Regexp +} + // String returns the original string used to compile the regular expression. func (re Regexp) String() string { str := re.Regexp.String() diff --git a/vendor/github.com/prometheus/prometheus/prompb/codec.go b/vendor/github.com/prometheus/prometheus/prompb/codec.go new file mode 100644 index 0000000000..ad30cd5e7b --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/prompb/codec.go @@ -0,0 +1,201 @@ +// Copyright 2024 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prompb + +import ( + "strings" + + "github.com/prometheus/common/model" + + "github.com/prometheus/prometheus/model/exemplar" + "github.com/prometheus/prometheus/model/histogram" + "github.com/prometheus/prometheus/model/labels" +) + +// NOTE(bwplotka): This file's code is tested in /prompb/rwcommon. + +// ToLabels return model labels.Labels from timeseries' remote labels. +func (m TimeSeries) ToLabels(b *labels.ScratchBuilder, _ []string) labels.Labels { + return labelProtosToLabels(b, m.GetLabels()) +} + +// ToLabels return model labels.Labels from timeseries' remote labels. +func (m ChunkedSeries) ToLabels(b *labels.ScratchBuilder, _ []string) labels.Labels { + return labelProtosToLabels(b, m.GetLabels()) +} + +func labelProtosToLabels(b *labels.ScratchBuilder, labelPairs []Label) labels.Labels { + b.Reset() + for _, l := range labelPairs { + b.Add(l.Name, l.Value) + } + b.Sort() + return b.Labels() +} + +// FromLabels transforms labels into prompb labels. The buffer slice +// will be used to avoid allocations if it is big enough to store the labels. +func FromLabels(lbls labels.Labels, buf []Label) []Label { + result := buf[:0] + lbls.Range(func(l labels.Label) { + result = append(result, Label{ + Name: l.Name, + Value: l.Value, + }) + }) + return result +} + +// FromMetadataType transforms a Prometheus metricType into prompb metricType. Since the former is a string we need to transform it to an enum. +func FromMetadataType(t model.MetricType) MetricMetadata_MetricType { + mt := strings.ToUpper(string(t)) + v, ok := MetricMetadata_MetricType_value[mt] + if !ok { + return MetricMetadata_UNKNOWN + } + return MetricMetadata_MetricType(v) +} + +// IsFloatHistogram returns true if the histogram is float. +func (h Histogram) IsFloatHistogram() bool { + _, ok := h.GetCount().(*Histogram_CountFloat) + return ok +} + +// ToIntHistogram returns integer Prometheus histogram from the remote implementation +// of integer histogram. If it's a float histogram, the method returns nil. +func (h Histogram) ToIntHistogram() *histogram.Histogram { + if h.IsFloatHistogram() { + return nil + } + return &histogram.Histogram{ + CounterResetHint: histogram.CounterResetHint(h.ResetHint), + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: h.GetZeroCountInt(), + Count: h.GetCountInt(), + Sum: h.Sum, + PositiveSpans: spansProtoToSpans(h.GetPositiveSpans()), + PositiveBuckets: h.GetPositiveDeltas(), + NegativeSpans: spansProtoToSpans(h.GetNegativeSpans()), + NegativeBuckets: h.GetNegativeDeltas(), + } +} + +// ToFloatHistogram returns float Prometheus histogram from the remote implementation +// of float histogram. If the underlying implementation is an integer histogram, a +// conversion is performed. +func (h Histogram) ToFloatHistogram() *histogram.FloatHistogram { + if h.IsFloatHistogram() { + return &histogram.FloatHistogram{ + CounterResetHint: histogram.CounterResetHint(h.ResetHint), + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: h.GetZeroCountFloat(), + Count: h.GetCountFloat(), + Sum: h.Sum, + PositiveSpans: spansProtoToSpans(h.GetPositiveSpans()), + PositiveBuckets: h.GetPositiveCounts(), + NegativeSpans: spansProtoToSpans(h.GetNegativeSpans()), + NegativeBuckets: h.GetNegativeCounts(), + } + } + // Conversion from integer histogram. + return &histogram.FloatHistogram{ + CounterResetHint: histogram.CounterResetHint(h.ResetHint), + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: float64(h.GetZeroCountInt()), + Count: float64(h.GetCountInt()), + Sum: h.Sum, + PositiveSpans: spansProtoToSpans(h.GetPositiveSpans()), + PositiveBuckets: deltasToCounts(h.GetPositiveDeltas()), + NegativeSpans: spansProtoToSpans(h.GetNegativeSpans()), + NegativeBuckets: deltasToCounts(h.GetNegativeDeltas()), + } +} + +func spansProtoToSpans(s []BucketSpan) []histogram.Span { + spans := make([]histogram.Span, len(s)) + for i := 0; i < len(s); i++ { + spans[i] = histogram.Span{Offset: s[i].Offset, Length: s[i].Length} + } + + return spans +} + +func deltasToCounts(deltas []int64) []float64 { + counts := make([]float64, len(deltas)) + var cur float64 + for i, d := range deltas { + cur += float64(d) + counts[i] = cur + } + return counts +} + +// FromIntHistogram returns remote Histogram from the integer Histogram. +func FromIntHistogram(timestamp int64, h *histogram.Histogram) Histogram { + return Histogram{ + Count: &Histogram_CountInt{CountInt: h.Count}, + Sum: h.Sum, + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: &Histogram_ZeroCountInt{ZeroCountInt: h.ZeroCount}, + NegativeSpans: spansToSpansProto(h.NegativeSpans), + NegativeDeltas: h.NegativeBuckets, + PositiveSpans: spansToSpansProto(h.PositiveSpans), + PositiveDeltas: h.PositiveBuckets, + ResetHint: Histogram_ResetHint(h.CounterResetHint), + Timestamp: timestamp, + } +} + +// FromFloatHistogram returns remote Histogram from the float Histogram. +func FromFloatHistogram(timestamp int64, fh *histogram.FloatHistogram) Histogram { + return Histogram{ + Count: &Histogram_CountFloat{CountFloat: fh.Count}, + Sum: fh.Sum, + Schema: fh.Schema, + ZeroThreshold: fh.ZeroThreshold, + ZeroCount: &Histogram_ZeroCountFloat{ZeroCountFloat: fh.ZeroCount}, + NegativeSpans: spansToSpansProto(fh.NegativeSpans), + NegativeCounts: fh.NegativeBuckets, + PositiveSpans: spansToSpansProto(fh.PositiveSpans), + PositiveCounts: fh.PositiveBuckets, + ResetHint: Histogram_ResetHint(fh.CounterResetHint), + Timestamp: timestamp, + } +} + +func spansToSpansProto(s []histogram.Span) []BucketSpan { + spans := make([]BucketSpan, len(s)) + for i := 0; i < len(s); i++ { + spans[i] = BucketSpan{Offset: s[i].Offset, Length: s[i].Length} + } + + return spans +} + +// ToExemplar converts remote exemplar to model exemplar. +func (m Exemplar) ToExemplar(b *labels.ScratchBuilder, _ []string) exemplar.Exemplar { + timestamp := m.Timestamp + + return exemplar.Exemplar{ + Labels: labelProtosToLabels(b, m.GetLabels()), + Value: m.Value, + Ts: timestamp, + HasTs: timestamp != 0, + } +} diff --git a/vendor/github.com/prometheus/prometheus/prompb/custom.go b/vendor/github.com/prometheus/prometheus/prompb/custom.go index 13d6e0f0cd..f73ddd446b 100644 --- a/vendor/github.com/prometheus/prometheus/prompb/custom.go +++ b/vendor/github.com/prometheus/prometheus/prompb/custom.go @@ -17,14 +17,6 @@ import ( "sync" ) -func (m Sample) T() int64 { return m.Timestamp } -func (m Sample) V() float64 { return m.Value } - -func (h Histogram) IsFloatHistogram() bool { - _, ok := h.GetCount().(*Histogram_CountFloat) - return ok -} - func (r *ChunkedReadResponse) PooledMarshal(p *sync.Pool) ([]byte, error) { size := r.Size() data, ok := p.Get().(*[]byte) diff --git a/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/codec.go b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/codec.go new file mode 100644 index 0000000000..25fa0d4035 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/codec.go @@ -0,0 +1,216 @@ +// Copyright 2024 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package writev2 + +import ( + "github.com/prometheus/common/model" + + "github.com/prometheus/prometheus/model/exemplar" + "github.com/prometheus/prometheus/model/histogram" + "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/model/metadata" +) + +// NOTE(bwplotka): This file's code is tested in /prompb/rwcommon. + +// ToLabels return model labels.Labels from timeseries' remote labels. +func (m TimeSeries) ToLabels(b *labels.ScratchBuilder, symbols []string) labels.Labels { + return desymbolizeLabels(b, m.GetLabelsRefs(), symbols) +} + +// ToMetadata return model metadata from timeseries' remote metadata. +func (m TimeSeries) ToMetadata(symbols []string) metadata.Metadata { + typ := model.MetricTypeUnknown + switch m.Metadata.Type { + case Metadata_METRIC_TYPE_COUNTER: + typ = model.MetricTypeCounter + case Metadata_METRIC_TYPE_GAUGE: + typ = model.MetricTypeGauge + case Metadata_METRIC_TYPE_HISTOGRAM: + typ = model.MetricTypeHistogram + case Metadata_METRIC_TYPE_GAUGEHISTOGRAM: + typ = model.MetricTypeGaugeHistogram + case Metadata_METRIC_TYPE_SUMMARY: + typ = model.MetricTypeSummary + case Metadata_METRIC_TYPE_INFO: + typ = model.MetricTypeInfo + case Metadata_METRIC_TYPE_STATESET: + typ = model.MetricTypeStateset + } + return metadata.Metadata{ + Type: typ, + Unit: symbols[m.Metadata.UnitRef], + Help: symbols[m.Metadata.HelpRef], + } +} + +// FromMetadataType transforms a Prometheus metricType into writev2 metricType. +// Since the former is a string we need to transform it to an enum. +func FromMetadataType(t model.MetricType) Metadata_MetricType { + switch t { + case model.MetricTypeCounter: + return Metadata_METRIC_TYPE_COUNTER + case model.MetricTypeGauge: + return Metadata_METRIC_TYPE_GAUGE + case model.MetricTypeHistogram: + return Metadata_METRIC_TYPE_HISTOGRAM + case model.MetricTypeGaugeHistogram: + return Metadata_METRIC_TYPE_GAUGEHISTOGRAM + case model.MetricTypeSummary: + return Metadata_METRIC_TYPE_SUMMARY + case model.MetricTypeInfo: + return Metadata_METRIC_TYPE_INFO + case model.MetricTypeStateset: + return Metadata_METRIC_TYPE_STATESET + default: + return Metadata_METRIC_TYPE_UNSPECIFIED + } +} + +// IsFloatHistogram returns true if the histogram is float. +func (h Histogram) IsFloatHistogram() bool { + _, ok := h.GetCount().(*Histogram_CountFloat) + return ok +} + +// ToIntHistogram returns integer Prometheus histogram from the remote implementation +// of integer histogram. If it's a float histogram, the method returns nil. +func (h Histogram) ToIntHistogram() *histogram.Histogram { + if h.IsFloatHistogram() { + return nil + } + return &histogram.Histogram{ + CounterResetHint: histogram.CounterResetHint(h.ResetHint), + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: h.GetZeroCountInt(), + Count: h.GetCountInt(), + Sum: h.Sum, + PositiveSpans: spansProtoToSpans(h.GetPositiveSpans()), + PositiveBuckets: h.GetPositiveDeltas(), + NegativeSpans: spansProtoToSpans(h.GetNegativeSpans()), + NegativeBuckets: h.GetNegativeDeltas(), + CustomValues: h.GetCustomValues(), + } +} + +// ToFloatHistogram returns float Prometheus histogram from the remote implementation +// of float histogram. If the underlying implementation is an integer histogram, a +// conversion is performed. +func (h Histogram) ToFloatHistogram() *histogram.FloatHistogram { + if h.IsFloatHistogram() { + return &histogram.FloatHistogram{ + CounterResetHint: histogram.CounterResetHint(h.ResetHint), + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: h.GetZeroCountFloat(), + Count: h.GetCountFloat(), + Sum: h.Sum, + PositiveSpans: spansProtoToSpans(h.GetPositiveSpans()), + PositiveBuckets: h.GetPositiveCounts(), + NegativeSpans: spansProtoToSpans(h.GetNegativeSpans()), + NegativeBuckets: h.GetNegativeCounts(), + CustomValues: h.GetCustomValues(), + } + } + // Conversion from integer histogram. + return &histogram.FloatHistogram{ + CounterResetHint: histogram.CounterResetHint(h.ResetHint), + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: float64(h.GetZeroCountInt()), + Count: float64(h.GetCountInt()), + Sum: h.Sum, + PositiveSpans: spansProtoToSpans(h.GetPositiveSpans()), + PositiveBuckets: deltasToCounts(h.GetPositiveDeltas()), + NegativeSpans: spansProtoToSpans(h.GetNegativeSpans()), + NegativeBuckets: deltasToCounts(h.GetNegativeDeltas()), + CustomValues: h.GetCustomValues(), + } +} + +func spansProtoToSpans(s []BucketSpan) []histogram.Span { + spans := make([]histogram.Span, len(s)) + for i := 0; i < len(s); i++ { + spans[i] = histogram.Span{Offset: s[i].Offset, Length: s[i].Length} + } + + return spans +} + +func deltasToCounts(deltas []int64) []float64 { + counts := make([]float64, len(deltas)) + var cur float64 + for i, d := range deltas { + cur += float64(d) + counts[i] = cur + } + return counts +} + +// FromIntHistogram returns remote Histogram from the integer Histogram. +func FromIntHistogram(timestamp int64, h *histogram.Histogram) Histogram { + return Histogram{ + Count: &Histogram_CountInt{CountInt: h.Count}, + Sum: h.Sum, + Schema: h.Schema, + ZeroThreshold: h.ZeroThreshold, + ZeroCount: &Histogram_ZeroCountInt{ZeroCountInt: h.ZeroCount}, + NegativeSpans: spansToSpansProto(h.NegativeSpans), + NegativeDeltas: h.NegativeBuckets, + PositiveSpans: spansToSpansProto(h.PositiveSpans), + PositiveDeltas: h.PositiveBuckets, + ResetHint: Histogram_ResetHint(h.CounterResetHint), + CustomValues: h.CustomValues, + Timestamp: timestamp, + } +} + +// FromFloatHistogram returns remote Histogram from the float Histogram. +func FromFloatHistogram(timestamp int64, fh *histogram.FloatHistogram) Histogram { + return Histogram{ + Count: &Histogram_CountFloat{CountFloat: fh.Count}, + Sum: fh.Sum, + Schema: fh.Schema, + ZeroThreshold: fh.ZeroThreshold, + ZeroCount: &Histogram_ZeroCountFloat{ZeroCountFloat: fh.ZeroCount}, + NegativeSpans: spansToSpansProto(fh.NegativeSpans), + NegativeCounts: fh.NegativeBuckets, + PositiveSpans: spansToSpansProto(fh.PositiveSpans), + PositiveCounts: fh.PositiveBuckets, + ResetHint: Histogram_ResetHint(fh.CounterResetHint), + CustomValues: fh.CustomValues, + Timestamp: timestamp, + } +} + +func spansToSpansProto(s []histogram.Span) []BucketSpan { + spans := make([]BucketSpan, len(s)) + for i := 0; i < len(s); i++ { + spans[i] = BucketSpan{Offset: s[i].Offset, Length: s[i].Length} + } + + return spans +} + +func (m Exemplar) ToExemplar(b *labels.ScratchBuilder, symbols []string) exemplar.Exemplar { + timestamp := m.Timestamp + + return exemplar.Exemplar{ + Labels: desymbolizeLabels(b, m.LabelsRefs, symbols), + Value: m.Value, + Ts: timestamp, + HasTs: timestamp != 0, + } +} diff --git a/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/custom.go b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/custom.go new file mode 100644 index 0000000000..3aa778eb60 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/custom.go @@ -0,0 +1,165 @@ +// Copyright 2024 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package writev2 + +import ( + "slices" +) + +func (m Sample) T() int64 { return m.Timestamp } +func (m Sample) V() float64 { return m.Value } + +func (m *Request) OptimizedMarshal(dst []byte) ([]byte, error) { + siz := m.Size() + if cap(dst) < siz { + dst = make([]byte, siz) + } + n, err := m.OptimizedMarshalToSizedBuffer(dst[:siz]) + if err != nil { + return nil, err + } + return dst[:n], nil +} + +// OptimizedMarshalToSizedBuffer is mostly a copy of the generated MarshalToSizedBuffer, +// but calls OptimizedMarshalToSizedBuffer on the timeseries. +func (m *Request) OptimizedMarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Timeseries) > 0 { + for iNdEx := len(m.Timeseries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Timeseries[iNdEx].OptimizedMarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if len(m.Symbols) > 0 { + for iNdEx := len(m.Symbols) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Symbols[iNdEx]) + copy(dAtA[i:], m.Symbols[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Symbols[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + return len(dAtA) - i, nil +} + +// OptimizedMarshalToSizedBuffer is mostly a copy of the generated MarshalToSizedBuffer, +// but marshals m.LabelsRefs in place without extra allocations. +func (m *TimeSeries) OptimizedMarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.CreatedTimestamp != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.CreatedTimestamp)) + i-- + dAtA[i] = 0x30 + } + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Histograms) > 0 { + for iNdEx := len(m.Histograms) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Histograms[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Exemplars) > 0 { + for iNdEx := len(m.Exemplars) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Exemplars[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Samples) > 0 { + for iNdEx := len(m.Samples) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Samples[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + + if len(m.LabelsRefs) > 0 { + // This is the trick: encode the varints in reverse order to make it easier + // to do it in place. Then reverse the whole thing. + var j10 int + start := i + for _, num := range m.LabelsRefs { + for num >= 1<<7 { + dAtA[i-1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + i-- + j10++ + } + dAtA[i-1] = uint8(num) + i-- + j10++ + } + slices.Reverse(dAtA[i:start]) + // --- end of trick + + i = encodeVarintTypes(dAtA, i, uint64(j10)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} diff --git a/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/symbols.go b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/symbols.go new file mode 100644 index 0000000000..f316a976f2 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/symbols.go @@ -0,0 +1,83 @@ +// Copyright 2024 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package writev2 + +import "github.com/prometheus/prometheus/model/labels" + +// SymbolsTable implements table for easy symbol use. +type SymbolsTable struct { + strings []string + symbolsMap map[string]uint32 +} + +// NewSymbolTable returns a symbol table. +func NewSymbolTable() SymbolsTable { + return SymbolsTable{ + // Empty string is required as a first element. + symbolsMap: map[string]uint32{"": 0}, + strings: []string{""}, + } +} + +// Symbolize adds (if not added before) a string to the symbols table, +// while returning its reference number. +func (t *SymbolsTable) Symbolize(str string) uint32 { + if ref, ok := t.symbolsMap[str]; ok { + return ref + } + ref := uint32(len(t.strings)) + t.strings = append(t.strings, str) + t.symbolsMap[str] = ref + return ref +} + +// SymbolizeLabels symbolize Prometheus labels. +func (t *SymbolsTable) SymbolizeLabels(lbls labels.Labels, buf []uint32) []uint32 { + result := buf[:0] + lbls.Range(func(l labels.Label) { + off := t.Symbolize(l.Name) + result = append(result, off) + off = t.Symbolize(l.Value) + result = append(result, off) + }) + return result +} + +// Symbols returns computes symbols table to put in e.g. Request.Symbols. +// As per spec, order does not matter. +func (t *SymbolsTable) Symbols() []string { + return t.strings +} + +// Reset clears symbols table. +func (t *SymbolsTable) Reset() { + // NOTE: Make sure to keep empty symbol. + t.strings = t.strings[:1] + for k := range t.symbolsMap { + if k == "" { + continue + } + delete(t.symbolsMap, k) + } +} + +// desymbolizeLabels decodes label references, with given symbols to labels. +func desymbolizeLabels(b *labels.ScratchBuilder, labelRefs []uint32, symbols []string) labels.Labels { + b.Reset() + for i := 0; i < len(labelRefs); i += 2 { + b.Add(symbols[labelRefs[i]], symbols[labelRefs[i+1]]) + } + b.Sort() + return b.Labels() +} diff --git a/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.pb.go b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.pb.go new file mode 100644 index 0000000000..d6ea8398f7 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.pb.go @@ -0,0 +1,3241 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: io/prometheus/write/v2/types.proto + +package writev2 + +import ( + encoding_binary "encoding/binary" + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Metadata_MetricType int32 + +const ( + Metadata_METRIC_TYPE_UNSPECIFIED Metadata_MetricType = 0 + Metadata_METRIC_TYPE_COUNTER Metadata_MetricType = 1 + Metadata_METRIC_TYPE_GAUGE Metadata_MetricType = 2 + Metadata_METRIC_TYPE_HISTOGRAM Metadata_MetricType = 3 + Metadata_METRIC_TYPE_GAUGEHISTOGRAM Metadata_MetricType = 4 + Metadata_METRIC_TYPE_SUMMARY Metadata_MetricType = 5 + Metadata_METRIC_TYPE_INFO Metadata_MetricType = 6 + Metadata_METRIC_TYPE_STATESET Metadata_MetricType = 7 +) + +var Metadata_MetricType_name = map[int32]string{ + 0: "METRIC_TYPE_UNSPECIFIED", + 1: "METRIC_TYPE_COUNTER", + 2: "METRIC_TYPE_GAUGE", + 3: "METRIC_TYPE_HISTOGRAM", + 4: "METRIC_TYPE_GAUGEHISTOGRAM", + 5: "METRIC_TYPE_SUMMARY", + 6: "METRIC_TYPE_INFO", + 7: "METRIC_TYPE_STATESET", +} + +var Metadata_MetricType_value = map[string]int32{ + "METRIC_TYPE_UNSPECIFIED": 0, + "METRIC_TYPE_COUNTER": 1, + "METRIC_TYPE_GAUGE": 2, + "METRIC_TYPE_HISTOGRAM": 3, + "METRIC_TYPE_GAUGEHISTOGRAM": 4, + "METRIC_TYPE_SUMMARY": 5, + "METRIC_TYPE_INFO": 6, + "METRIC_TYPE_STATESET": 7, +} + +func (x Metadata_MetricType) String() string { + return proto.EnumName(Metadata_MetricType_name, int32(x)) +} + +func (Metadata_MetricType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{4, 0} +} + +type Histogram_ResetHint int32 + +const ( + Histogram_RESET_HINT_UNSPECIFIED Histogram_ResetHint = 0 + Histogram_RESET_HINT_YES Histogram_ResetHint = 1 + Histogram_RESET_HINT_NO Histogram_ResetHint = 2 + Histogram_RESET_HINT_GAUGE Histogram_ResetHint = 3 +) + +var Histogram_ResetHint_name = map[int32]string{ + 0: "RESET_HINT_UNSPECIFIED", + 1: "RESET_HINT_YES", + 2: "RESET_HINT_NO", + 3: "RESET_HINT_GAUGE", +} + +var Histogram_ResetHint_value = map[string]int32{ + "RESET_HINT_UNSPECIFIED": 0, + "RESET_HINT_YES": 1, + "RESET_HINT_NO": 2, + "RESET_HINT_GAUGE": 3, +} + +func (x Histogram_ResetHint) String() string { + return proto.EnumName(Histogram_ResetHint_name, int32(x)) +} + +func (Histogram_ResetHint) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{5, 0} +} + +// Request represents a request to write the given timeseries to a remote destination. +// This message was introduced in the Remote Write 2.0 specification: +// https://prometheus.io/docs/concepts/remote_write_spec_2_0/ +// +// The canonical Content-Type request header value for this message is +// "application/x-protobuf;proto=io.prometheus.write.v2.Request" +// +// NOTE: gogoproto options might change in future for this file, they +// are not part of the spec proto (they only modify the generated Go code, not +// the serialized message). See: https://github.com/prometheus/prometheus/issues/11908 +type Request struct { + // symbols contains a de-duplicated array of string elements used for various + // items in a Request message, like labels and metadata items. For the sender's convenience + // around empty values for optional fields like unit_ref, symbols array MUST start with + // empty string. + // + // To decode each of the symbolized strings, referenced, by "ref(s)" suffix, you + // need to lookup the actual string by index from symbols array. The order of + // strings is up to the sender. The receiver should not assume any particular encoding. + Symbols []string `protobuf:"bytes,4,rep,name=symbols,proto3" json:"symbols,omitempty"` + // timeseries represents an array of distinct series with 0 or more samples. + Timeseries []TimeSeries `protobuf:"bytes,5,rep,name=timeseries,proto3" json:"timeseries"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Request) Reset() { *m = Request{} } +func (m *Request) String() string { return proto.CompactTextString(m) } +func (*Request) ProtoMessage() {} +func (*Request) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{0} +} +func (m *Request) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Request.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_Request.Merge(m, src) +} +func (m *Request) XXX_Size() int { + return m.Size() +} +func (m *Request) XXX_DiscardUnknown() { + xxx_messageInfo_Request.DiscardUnknown(m) +} + +var xxx_messageInfo_Request proto.InternalMessageInfo + +func (m *Request) GetSymbols() []string { + if m != nil { + return m.Symbols + } + return nil +} + +func (m *Request) GetTimeseries() []TimeSeries { + if m != nil { + return m.Timeseries + } + return nil +} + +// TimeSeries represents a single series. +type TimeSeries struct { + // labels_refs is a list of label name-value pair references, encoded + // as indices to the Request.symbols array. This list's length is always + // a multiple of two, and the underlying labels should be sorted lexicographically. + // + // Note that there might be multiple TimeSeries objects in the same + // Requests with the same labels e.g. for different exemplars, metadata + // or created timestamp. + LabelsRefs []uint32 `protobuf:"varint,1,rep,packed,name=labels_refs,json=labelsRefs,proto3" json:"labels_refs,omitempty"` + // Timeseries messages can either specify samples or (native) histogram samples + // (histogram field), but not both. For a typical sender (real-time metric + // streaming), in healthy cases, there will be only one sample or histogram. + // + // Samples and histograms are sorted by timestamp (older first). + Samples []Sample `protobuf:"bytes,2,rep,name=samples,proto3" json:"samples"` + Histograms []Histogram `protobuf:"bytes,3,rep,name=histograms,proto3" json:"histograms"` + // exemplars represents an optional set of exemplars attached to this series' samples. + Exemplars []Exemplar `protobuf:"bytes,4,rep,name=exemplars,proto3" json:"exemplars"` + // metadata represents the metadata associated with the given series' samples. + Metadata Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata"` + // created_timestamp represents an optional created timestamp associated with + // this series' samples in ms format, typically for counter or histogram type + // metrics. Created timestamp represents the time when the counter started + // counting (sometimes referred to as start timestamp), which can increase + // the accuracy of query results. + // + // Note that some receivers might require this and in return fail to + // ingest such samples within the Request. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + // + // Note that the "optional" keyword is omitted due to + // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields + // Zero value means value not set. If you need to use exactly zero value for + // the timestamp, use 1 millisecond before or after. + CreatedTimestamp int64 `protobuf:"varint,6,opt,name=created_timestamp,json=createdTimestamp,proto3" json:"created_timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TimeSeries) Reset() { *m = TimeSeries{} } +func (m *TimeSeries) String() string { return proto.CompactTextString(m) } +func (*TimeSeries) ProtoMessage() {} +func (*TimeSeries) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{1} +} +func (m *TimeSeries) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TimeSeries) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TimeSeries.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TimeSeries) XXX_Merge(src proto.Message) { + xxx_messageInfo_TimeSeries.Merge(m, src) +} +func (m *TimeSeries) XXX_Size() int { + return m.Size() +} +func (m *TimeSeries) XXX_DiscardUnknown() { + xxx_messageInfo_TimeSeries.DiscardUnknown(m) +} + +var xxx_messageInfo_TimeSeries proto.InternalMessageInfo + +func (m *TimeSeries) GetLabelsRefs() []uint32 { + if m != nil { + return m.LabelsRefs + } + return nil +} + +func (m *TimeSeries) GetSamples() []Sample { + if m != nil { + return m.Samples + } + return nil +} + +func (m *TimeSeries) GetHistograms() []Histogram { + if m != nil { + return m.Histograms + } + return nil +} + +func (m *TimeSeries) GetExemplars() []Exemplar { + if m != nil { + return m.Exemplars + } + return nil +} + +func (m *TimeSeries) GetMetadata() Metadata { + if m != nil { + return m.Metadata + } + return Metadata{} +} + +func (m *TimeSeries) GetCreatedTimestamp() int64 { + if m != nil { + return m.CreatedTimestamp + } + return 0 +} + +// Exemplar is an additional information attached to some series' samples. +// It is typically used to attach an example trace or request ID associated with +// the metric changes. +type Exemplar struct { + // labels_refs is an optional list of label name-value pair references, encoded + // as indices to the Request.symbols array. This list's len is always + // a multiple of 2, and the underlying labels should be sorted lexicographically. + // If the exemplar references a trace it should use the `trace_id` label name, as a best practice. + LabelsRefs []uint32 `protobuf:"varint,1,rep,packed,name=labels_refs,json=labelsRefs,proto3" json:"labels_refs,omitempty"` + // value represents an exact example value. This can be useful when the exemplar + // is attached to a histogram, which only gives an estimated value through buckets. + Value float64 `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"` + // timestamp represents an optional timestamp of the sample in ms. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + // + // Note that the "optional" keyword is omitted due to + // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields + // Zero value means value not set. If you need to use exactly zero value for + // the timestamp, use 1 millisecond before or after. + Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Exemplar) Reset() { *m = Exemplar{} } +func (m *Exemplar) String() string { return proto.CompactTextString(m) } +func (*Exemplar) ProtoMessage() {} +func (*Exemplar) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{2} +} +func (m *Exemplar) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Exemplar) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Exemplar.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Exemplar) XXX_Merge(src proto.Message) { + xxx_messageInfo_Exemplar.Merge(m, src) +} +func (m *Exemplar) XXX_Size() int { + return m.Size() +} +func (m *Exemplar) XXX_DiscardUnknown() { + xxx_messageInfo_Exemplar.DiscardUnknown(m) +} + +var xxx_messageInfo_Exemplar proto.InternalMessageInfo + +func (m *Exemplar) GetLabelsRefs() []uint32 { + if m != nil { + return m.LabelsRefs + } + return nil +} + +func (m *Exemplar) GetValue() float64 { + if m != nil { + return m.Value + } + return 0 +} + +func (m *Exemplar) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +// Sample represents series sample. +type Sample struct { + // value of the sample. + Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` + // timestamp represents timestamp of the sample in ms. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Sample) Reset() { *m = Sample{} } +func (m *Sample) String() string { return proto.CompactTextString(m) } +func (*Sample) ProtoMessage() {} +func (*Sample) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{3} +} +func (m *Sample) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Sample) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Sample.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Sample) XXX_Merge(src proto.Message) { + xxx_messageInfo_Sample.Merge(m, src) +} +func (m *Sample) XXX_Size() int { + return m.Size() +} +func (m *Sample) XXX_DiscardUnknown() { + xxx_messageInfo_Sample.DiscardUnknown(m) +} + +var xxx_messageInfo_Sample proto.InternalMessageInfo + +func (m *Sample) GetValue() float64 { + if m != nil { + return m.Value + } + return 0 +} + +func (m *Sample) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +// Metadata represents the metadata associated with the given series' samples. +type Metadata struct { + Type Metadata_MetricType `protobuf:"varint,1,opt,name=type,proto3,enum=io.prometheus.write.v2.Metadata_MetricType" json:"type,omitempty"` + // help_ref is a reference to the Request.symbols array representing help + // text for the metric. Help is optional, reference should point to an empty string in + // such a case. + HelpRef uint32 `protobuf:"varint,3,opt,name=help_ref,json=helpRef,proto3" json:"help_ref,omitempty"` + // unit_ref is a reference to the Request.symbols array representing a unit + // for the metric. Unit is optional, reference should point to an empty string in + // such a case. + UnitRef uint32 `protobuf:"varint,4,opt,name=unit_ref,json=unitRef,proto3" json:"unit_ref,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Metadata) Reset() { *m = Metadata{} } +func (m *Metadata) String() string { return proto.CompactTextString(m) } +func (*Metadata) ProtoMessage() {} +func (*Metadata) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{4} +} +func (m *Metadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Metadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Metadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_Metadata.Merge(m, src) +} +func (m *Metadata) XXX_Size() int { + return m.Size() +} +func (m *Metadata) XXX_DiscardUnknown() { + xxx_messageInfo_Metadata.DiscardUnknown(m) +} + +var xxx_messageInfo_Metadata proto.InternalMessageInfo + +func (m *Metadata) GetType() Metadata_MetricType { + if m != nil { + return m.Type + } + return Metadata_METRIC_TYPE_UNSPECIFIED +} + +func (m *Metadata) GetHelpRef() uint32 { + if m != nil { + return m.HelpRef + } + return 0 +} + +func (m *Metadata) GetUnitRef() uint32 { + if m != nil { + return m.UnitRef + } + return 0 +} + +// A native histogram, also known as a sparse histogram. +// Original design doc: +// https://docs.google.com/document/d/1cLNv3aufPZb3fNfaJgdaRBZsInZKKIHo9E6HinJVbpM/edit +// The appendix of this design doc also explains the concept of float +// histograms. This Histogram message can represent both, the usual +// integer histogram as well as a float histogram. +type Histogram struct { + // Types that are valid to be assigned to Count: + // + // *Histogram_CountInt + // *Histogram_CountFloat + Count isHistogram_Count `protobuf_oneof:"count"` + Sum float64 `protobuf:"fixed64,3,opt,name=sum,proto3" json:"sum,omitempty"` + // The schema defines the bucket schema. Currently, valid numbers + // are -53 and numbers in range of -4 <= n <= 8. More valid numbers might be + // added in future for new bucketing layouts. + // + // The schema equal to -53 means custom buckets. See + // custom_values field description for more details. + // + // Values between -4 and 8 represent base-2 bucket schema, where 1 + // is a bucket boundary in each case, and then each power of two is + // divided into 2^n (n is schema value) logarithmic buckets. Or in other words, + // each bucket boundary is the previous boundary times 2^(2^-n). + Schema int32 `protobuf:"zigzag32,4,opt,name=schema,proto3" json:"schema,omitempty"` + ZeroThreshold float64 `protobuf:"fixed64,5,opt,name=zero_threshold,json=zeroThreshold,proto3" json:"zero_threshold,omitempty"` + // Types that are valid to be assigned to ZeroCount: + // + // *Histogram_ZeroCountInt + // *Histogram_ZeroCountFloat + ZeroCount isHistogram_ZeroCount `protobuf_oneof:"zero_count"` + // Negative Buckets. + NegativeSpans []BucketSpan `protobuf:"bytes,8,rep,name=negative_spans,json=negativeSpans,proto3" json:"negative_spans"` + // Use either "negative_deltas" or "negative_counts", the former for + // regular histograms with integer counts, the latter for + // float histograms. + NegativeDeltas []int64 `protobuf:"zigzag64,9,rep,packed,name=negative_deltas,json=negativeDeltas,proto3" json:"negative_deltas,omitempty"` + NegativeCounts []float64 `protobuf:"fixed64,10,rep,packed,name=negative_counts,json=negativeCounts,proto3" json:"negative_counts,omitempty"` + // Positive Buckets. + // + // In case of custom buckets (-53 schema value) the positive buckets are interpreted as follows: + // * The span offset+length points to an the index of the custom_values array + // or +Inf if pointing to the len of the array. + // * The counts and deltas have the same meaning as for exponential histograms. + PositiveSpans []BucketSpan `protobuf:"bytes,11,rep,name=positive_spans,json=positiveSpans,proto3" json:"positive_spans"` + // Use either "positive_deltas" or "positive_counts", the former for + // regular histograms with integer counts, the latter for + // float histograms. + PositiveDeltas []int64 `protobuf:"zigzag64,12,rep,packed,name=positive_deltas,json=positiveDeltas,proto3" json:"positive_deltas,omitempty"` + PositiveCounts []float64 `protobuf:"fixed64,13,rep,packed,name=positive_counts,json=positiveCounts,proto3" json:"positive_counts,omitempty"` + ResetHint Histogram_ResetHint `protobuf:"varint,14,opt,name=reset_hint,json=resetHint,proto3,enum=io.prometheus.write.v2.Histogram_ResetHint" json:"reset_hint,omitempty"` + // timestamp represents timestamp of the sample in ms. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + Timestamp int64 `protobuf:"varint,15,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // custom_values is an additional field used by non-exponential bucketing layouts. + // + // For custom buckets (-53 schema value) custom_values specify monotonically + // increasing upper inclusive boundaries for the bucket counts with arbitrary + // widths for this histogram. In other words, custom_values represents custom, + // explicit bucketing that could have been converted from the classic histograms. + // + // Those bounds are then referenced by spans in positive_spans with corresponding positive + // counts of deltas (refer to positive_spans for more details). This way we can + // have encode sparse histograms with custom bucketing (many buckets are often + // not used). + // + // Note that for custom bounds, even negative observations are placed in the positive + // counts to simplify the implementation and avoid ambiguity of where to place + // an underflow bucket, e.g. (-2, 1]. Therefore negative buckets and + // the zero bucket are unused, if the schema indicates custom bucketing. + // + // For each upper boundary the previous boundary represent the lower exclusive + // boundary for that bucket. The first element is the upper inclusive boundary + // for the first bucket, which implicitly has a lower inclusive bound of -Inf. + // This is similar to "le" label semantics on classic histograms. You may add a + // bucket with an upper bound of 0 to make sure that you really have no negative + // observations, but in practice, native histogram rendering will show both with + // or without first upper boundary 0 and no negative counts as the same case. + // + // The last element is not only the upper inclusive bound of the last regular + // bucket, but implicitly the lower exclusive bound of the +Inf bucket. + CustomValues []float64 `protobuf:"fixed64,16,rep,packed,name=custom_values,json=customValues,proto3" json:"custom_values,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Histogram) Reset() { *m = Histogram{} } +func (m *Histogram) String() string { return proto.CompactTextString(m) } +func (*Histogram) ProtoMessage() {} +func (*Histogram) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{5} +} +func (m *Histogram) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Histogram.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Histogram) XXX_Merge(src proto.Message) { + xxx_messageInfo_Histogram.Merge(m, src) +} +func (m *Histogram) XXX_Size() int { + return m.Size() +} +func (m *Histogram) XXX_DiscardUnknown() { + xxx_messageInfo_Histogram.DiscardUnknown(m) +} + +var xxx_messageInfo_Histogram proto.InternalMessageInfo + +type isHistogram_Count interface { + isHistogram_Count() + MarshalTo([]byte) (int, error) + Size() int +} +type isHistogram_ZeroCount interface { + isHistogram_ZeroCount() + MarshalTo([]byte) (int, error) + Size() int +} + +type Histogram_CountInt struct { + CountInt uint64 `protobuf:"varint,1,opt,name=count_int,json=countInt,proto3,oneof" json:"count_int,omitempty"` +} +type Histogram_CountFloat struct { + CountFloat float64 `protobuf:"fixed64,2,opt,name=count_float,json=countFloat,proto3,oneof" json:"count_float,omitempty"` +} +type Histogram_ZeroCountInt struct { + ZeroCountInt uint64 `protobuf:"varint,6,opt,name=zero_count_int,json=zeroCountInt,proto3,oneof" json:"zero_count_int,omitempty"` +} +type Histogram_ZeroCountFloat struct { + ZeroCountFloat float64 `protobuf:"fixed64,7,opt,name=zero_count_float,json=zeroCountFloat,proto3,oneof" json:"zero_count_float,omitempty"` +} + +func (*Histogram_CountInt) isHistogram_Count() {} +func (*Histogram_CountFloat) isHistogram_Count() {} +func (*Histogram_ZeroCountInt) isHistogram_ZeroCount() {} +func (*Histogram_ZeroCountFloat) isHistogram_ZeroCount() {} + +func (m *Histogram) GetCount() isHistogram_Count { + if m != nil { + return m.Count + } + return nil +} +func (m *Histogram) GetZeroCount() isHistogram_ZeroCount { + if m != nil { + return m.ZeroCount + } + return nil +} + +func (m *Histogram) GetCountInt() uint64 { + if x, ok := m.GetCount().(*Histogram_CountInt); ok { + return x.CountInt + } + return 0 +} + +func (m *Histogram) GetCountFloat() float64 { + if x, ok := m.GetCount().(*Histogram_CountFloat); ok { + return x.CountFloat + } + return 0 +} + +func (m *Histogram) GetSum() float64 { + if m != nil { + return m.Sum + } + return 0 +} + +func (m *Histogram) GetSchema() int32 { + if m != nil { + return m.Schema + } + return 0 +} + +func (m *Histogram) GetZeroThreshold() float64 { + if m != nil { + return m.ZeroThreshold + } + return 0 +} + +func (m *Histogram) GetZeroCountInt() uint64 { + if x, ok := m.GetZeroCount().(*Histogram_ZeroCountInt); ok { + return x.ZeroCountInt + } + return 0 +} + +func (m *Histogram) GetZeroCountFloat() float64 { + if x, ok := m.GetZeroCount().(*Histogram_ZeroCountFloat); ok { + return x.ZeroCountFloat + } + return 0 +} + +func (m *Histogram) GetNegativeSpans() []BucketSpan { + if m != nil { + return m.NegativeSpans + } + return nil +} + +func (m *Histogram) GetNegativeDeltas() []int64 { + if m != nil { + return m.NegativeDeltas + } + return nil +} + +func (m *Histogram) GetNegativeCounts() []float64 { + if m != nil { + return m.NegativeCounts + } + return nil +} + +func (m *Histogram) GetPositiveSpans() []BucketSpan { + if m != nil { + return m.PositiveSpans + } + return nil +} + +func (m *Histogram) GetPositiveDeltas() []int64 { + if m != nil { + return m.PositiveDeltas + } + return nil +} + +func (m *Histogram) GetPositiveCounts() []float64 { + if m != nil { + return m.PositiveCounts + } + return nil +} + +func (m *Histogram) GetResetHint() Histogram_ResetHint { + if m != nil { + return m.ResetHint + } + return Histogram_RESET_HINT_UNSPECIFIED +} + +func (m *Histogram) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +func (m *Histogram) GetCustomValues() []float64 { + if m != nil { + return m.CustomValues + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Histogram) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Histogram_CountInt)(nil), + (*Histogram_CountFloat)(nil), + (*Histogram_ZeroCountInt)(nil), + (*Histogram_ZeroCountFloat)(nil), + } +} + +// A BucketSpan defines a number of consecutive buckets with their +// offset. Logically, it would be more straightforward to include the +// bucket counts in the Span. However, the protobuf representation is +// more compact in the way the data is structured here (with all the +// buckets in a single array separate from the Spans). +type BucketSpan struct { + Offset int32 `protobuf:"zigzag32,1,opt,name=offset,proto3" json:"offset,omitempty"` + Length uint32 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BucketSpan) Reset() { *m = BucketSpan{} } +func (m *BucketSpan) String() string { return proto.CompactTextString(m) } +func (*BucketSpan) ProtoMessage() {} +func (*BucketSpan) Descriptor() ([]byte, []int) { + return fileDescriptor_f139519efd9fa8d7, []int{6} +} +func (m *BucketSpan) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BucketSpan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_BucketSpan.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *BucketSpan) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketSpan.Merge(m, src) +} +func (m *BucketSpan) XXX_Size() int { + return m.Size() +} +func (m *BucketSpan) XXX_DiscardUnknown() { + xxx_messageInfo_BucketSpan.DiscardUnknown(m) +} + +var xxx_messageInfo_BucketSpan proto.InternalMessageInfo + +func (m *BucketSpan) GetOffset() int32 { + if m != nil { + return m.Offset + } + return 0 +} + +func (m *BucketSpan) GetLength() uint32 { + if m != nil { + return m.Length + } + return 0 +} + +func init() { + proto.RegisterEnum("io.prometheus.write.v2.Metadata_MetricType", Metadata_MetricType_name, Metadata_MetricType_value) + proto.RegisterEnum("io.prometheus.write.v2.Histogram_ResetHint", Histogram_ResetHint_name, Histogram_ResetHint_value) + proto.RegisterType((*Request)(nil), "io.prometheus.write.v2.Request") + proto.RegisterType((*TimeSeries)(nil), "io.prometheus.write.v2.TimeSeries") + proto.RegisterType((*Exemplar)(nil), "io.prometheus.write.v2.Exemplar") + proto.RegisterType((*Sample)(nil), "io.prometheus.write.v2.Sample") + proto.RegisterType((*Metadata)(nil), "io.prometheus.write.v2.Metadata") + proto.RegisterType((*Histogram)(nil), "io.prometheus.write.v2.Histogram") + proto.RegisterType((*BucketSpan)(nil), "io.prometheus.write.v2.BucketSpan") +} + +func init() { + proto.RegisterFile("io/prometheus/write/v2/types.proto", fileDescriptor_f139519efd9fa8d7) +} + +var fileDescriptor_f139519efd9fa8d7 = []byte{ + // 926 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x5d, 0x6f, 0xe3, 0x44, + 0x14, 0xed, 0xc4, 0x69, 0x3e, 0x6e, 0x9a, 0xac, 0x33, 0xb4, 0x5d, 0x6f, 0x81, 0x6c, 0xd6, 0x08, + 0x88, 0x58, 0x29, 0x91, 0xc2, 0xeb, 0x0a, 0xd4, 0xb4, 0x6e, 0x93, 0x95, 0x92, 0xac, 0x26, 0x2e, + 0x52, 0x79, 0xb1, 0xdc, 0x64, 0x92, 0x58, 0xd8, 0xb1, 0xf1, 0x4c, 0x02, 0xe5, 0xf7, 0xf1, 0xb0, + 0x8f, 0xfc, 0x01, 0x10, 0xf4, 0x9d, 0xff, 0x80, 0x66, 0xfc, 0xd9, 0x42, 0xbb, 0xe2, 0x6d, 0xe6, + 0xdc, 0x73, 0xee, 0x3d, 0xb9, 0xbe, 0x77, 0x02, 0xba, 0xe3, 0xf7, 0x82, 0xd0, 0xf7, 0x28, 0x5f, + 0xd3, 0x2d, 0xeb, 0xfd, 0x14, 0x3a, 0x9c, 0xf6, 0x76, 0xfd, 0x1e, 0xbf, 0x0d, 0x28, 0xeb, 0x06, + 0xa1, 0xcf, 0x7d, 0x7c, 0xec, 0xf8, 0xdd, 0x8c, 0xd3, 0x95, 0x9c, 0xee, 0xae, 0x7f, 0x72, 0xb8, + 0xf2, 0x57, 0xbe, 0xa4, 0xf4, 0xc4, 0x29, 0x62, 0xeb, 0x0c, 0xca, 0x84, 0xfe, 0xb8, 0xa5, 0x8c, + 0x63, 0x0d, 0xca, 0xec, 0xd6, 0xbb, 0xf1, 0x5d, 0xa6, 0x15, 0xdb, 0x4a, 0xa7, 0x4a, 0x92, 0x2b, + 0x1e, 0x02, 0x70, 0xc7, 0xa3, 0x8c, 0x86, 0x0e, 0x65, 0xda, 0x7e, 0x5b, 0xe9, 0xd4, 0xfa, 0x7a, + 0xf7, 0xbf, 0xeb, 0x74, 0x4d, 0xc7, 0xa3, 0x33, 0xc9, 0x1c, 0x14, 0xdf, 0xff, 0xf1, 0x72, 0x8f, + 0xe4, 0xb4, 0x6f, 0x8b, 0x15, 0xa4, 0x16, 0xf5, 0xbf, 0x0b, 0x00, 0x19, 0x0d, 0xbf, 0x84, 0x9a, + 0x6b, 0xdf, 0x50, 0x97, 0x59, 0x21, 0x5d, 0x32, 0x0d, 0xb5, 0x95, 0x4e, 0x9d, 0x40, 0x04, 0x11, + 0xba, 0x64, 0xf8, 0x1b, 0x28, 0x33, 0xdb, 0x0b, 0x5c, 0xca, 0xb4, 0x82, 0x2c, 0xde, 0x7a, 0xac, + 0xf8, 0x4c, 0xd2, 0xe2, 0xc2, 0x89, 0x08, 0x5f, 0x02, 0xac, 0x1d, 0xc6, 0xfd, 0x55, 0x68, 0x7b, + 0x4c, 0x53, 0x64, 0x8a, 0x57, 0x8f, 0xa5, 0x18, 0x26, 0xcc, 0xc4, 0x7e, 0x26, 0xc5, 0xe7, 0x50, + 0xa5, 0x3f, 0x53, 0x2f, 0x70, 0xed, 0x30, 0x6a, 0x52, 0xad, 0xdf, 0x7e, 0x2c, 0x8f, 0x11, 0x13, + 0xe3, 0x34, 0x99, 0x10, 0x0f, 0xa0, 0xe2, 0x51, 0x6e, 0x2f, 0x6c, 0x6e, 0x6b, 0xfb, 0x6d, 0xf4, + 0x54, 0x92, 0x71, 0xcc, 0x8b, 0x93, 0xa4, 0x3a, 0xfc, 0x1a, 0x9a, 0xf3, 0x90, 0xda, 0x9c, 0x2e, + 0x2c, 0xd9, 0x5e, 0x6e, 0x7b, 0x81, 0x56, 0x6a, 0xa3, 0x8e, 0x42, 0xd4, 0x38, 0x60, 0x26, 0xb8, + 0x6e, 0x41, 0x25, 0x71, 0xf3, 0xe1, 0x66, 0x1f, 0xc2, 0xfe, 0xce, 0x76, 0xb7, 0x54, 0x2b, 0xb4, + 0x51, 0x07, 0x91, 0xe8, 0x82, 0x3f, 0x81, 0x6a, 0x56, 0x47, 0x91, 0x75, 0x32, 0x40, 0x7f, 0x03, + 0xa5, 0xa8, 0xf3, 0x99, 0x1a, 0x3d, 0xaa, 0x2e, 0x3c, 0x54, 0xff, 0x55, 0x80, 0x4a, 0xf2, 0x43, + 0xf1, 0xb7, 0x50, 0x14, 0xd3, 0x2c, 0xf5, 0x8d, 0xfe, 0xeb, 0x0f, 0x35, 0x46, 0x1c, 0x42, 0x67, + 0x6e, 0xde, 0x06, 0x94, 0x48, 0x21, 0x7e, 0x01, 0x95, 0x35, 0x75, 0x03, 0xf1, 0xf3, 0xa4, 0xd1, + 0x3a, 0x29, 0x8b, 0x3b, 0xa1, 0x4b, 0x11, 0xda, 0x6e, 0x1c, 0x2e, 0x43, 0xc5, 0x28, 0x24, 0xee, + 0x84, 0x2e, 0xf5, 0xdf, 0x11, 0x40, 0x96, 0x0a, 0x7f, 0x0c, 0xcf, 0xc7, 0x86, 0x49, 0x46, 0x67, + 0x96, 0x79, 0xfd, 0xce, 0xb0, 0xae, 0x26, 0xb3, 0x77, 0xc6, 0xd9, 0xe8, 0x62, 0x64, 0x9c, 0xab, + 0x7b, 0xf8, 0x39, 0x7c, 0x94, 0x0f, 0x9e, 0x4d, 0xaf, 0x26, 0xa6, 0x41, 0x54, 0x84, 0x8f, 0xa0, + 0x99, 0x0f, 0x5c, 0x9e, 0x5e, 0x5d, 0x1a, 0x6a, 0x01, 0xbf, 0x80, 0xa3, 0x3c, 0x3c, 0x1c, 0xcd, + 0xcc, 0xe9, 0x25, 0x39, 0x1d, 0xab, 0x0a, 0x6e, 0xc1, 0xc9, 0xbf, 0x14, 0x59, 0xbc, 0xf8, 0xb0, + 0xd4, 0xec, 0x6a, 0x3c, 0x3e, 0x25, 0xd7, 0xea, 0x3e, 0x3e, 0x04, 0x35, 0x1f, 0x18, 0x4d, 0x2e, + 0xa6, 0x6a, 0x09, 0x6b, 0x70, 0x78, 0x8f, 0x6e, 0x9e, 0x9a, 0xc6, 0xcc, 0x30, 0xd5, 0xb2, 0xfe, + 0x6b, 0x09, 0xaa, 0xe9, 0x64, 0xe3, 0x4f, 0xa1, 0x3a, 0xf7, 0xb7, 0x1b, 0x6e, 0x39, 0x1b, 0x2e, + 0x3b, 0x5d, 0x1c, 0xee, 0x91, 0x8a, 0x84, 0x46, 0x1b, 0x8e, 0x5f, 0x41, 0x2d, 0x0a, 0x2f, 0x5d, + 0xdf, 0xe6, 0xd1, 0x20, 0x0c, 0xf7, 0x08, 0x48, 0xf0, 0x42, 0x60, 0x58, 0x05, 0x85, 0x6d, 0x3d, + 0xd9, 0x60, 0x44, 0xc4, 0x11, 0x1f, 0x43, 0x89, 0xcd, 0xd7, 0xd4, 0xb3, 0x65, 0x6b, 0x9b, 0x24, + 0xbe, 0xe1, 0xcf, 0xa1, 0xf1, 0x0b, 0x0d, 0x7d, 0x8b, 0xaf, 0x43, 0xca, 0xd6, 0xbe, 0xbb, 0x90, + 0x33, 0x8f, 0x48, 0x5d, 0xa0, 0x66, 0x02, 0xe2, 0x2f, 0x62, 0x5a, 0xe6, 0xab, 0x24, 0x7d, 0x21, + 0x72, 0x20, 0xf0, 0xb3, 0xc4, 0xdb, 0x57, 0xa0, 0xe6, 0x78, 0x91, 0xc1, 0xb2, 0x34, 0x88, 0x48, + 0x23, 0x65, 0x46, 0x26, 0xa7, 0xd0, 0xd8, 0xd0, 0x95, 0xcd, 0x9d, 0x1d, 0xb5, 0x58, 0x60, 0x6f, + 0x98, 0x56, 0x79, 0xfa, 0xed, 0x1a, 0x6c, 0xe7, 0x3f, 0x50, 0x3e, 0x0b, 0xec, 0x4d, 0xbc, 0x70, + 0xf5, 0x44, 0x2f, 0x30, 0x86, 0xbf, 0x84, 0x67, 0x69, 0xc2, 0x05, 0x75, 0xb9, 0xcd, 0xb4, 0x6a, + 0x5b, 0xe9, 0x60, 0x92, 0xd6, 0x39, 0x97, 0xe8, 0x3d, 0xa2, 0x74, 0xca, 0x34, 0x68, 0x2b, 0x1d, + 0x94, 0x11, 0xa5, 0x4d, 0x26, 0x2c, 0x06, 0x3e, 0x73, 0x72, 0x16, 0x6b, 0xff, 0xd7, 0x62, 0xa2, + 0x4f, 0x2d, 0xa6, 0x09, 0x63, 0x8b, 0x07, 0x91, 0xc5, 0x04, 0xce, 0x2c, 0xa6, 0xc4, 0xd8, 0x62, + 0x3d, 0xb2, 0x98, 0xc0, 0xb1, 0xc5, 0xb7, 0x00, 0x21, 0x65, 0x94, 0x5b, 0x6b, 0xf1, 0x55, 0x1a, + 0x4f, 0xef, 0x65, 0x3a, 0x63, 0x5d, 0x22, 0x34, 0x43, 0x67, 0xc3, 0x49, 0x35, 0x4c, 0x8e, 0xf7, + 0x1f, 0x82, 0x67, 0x0f, 0x1e, 0x02, 0xfc, 0x19, 0xd4, 0xe7, 0x5b, 0xc6, 0x7d, 0xcf, 0x92, 0xcf, + 0x06, 0xd3, 0x54, 0x69, 0xe8, 0x20, 0x02, 0xbf, 0x93, 0x98, 0xbe, 0x80, 0x6a, 0x9a, 0x1a, 0x9f, + 0xc0, 0x31, 0x11, 0x13, 0x6e, 0x0d, 0x47, 0x13, 0xf3, 0xc1, 0x9a, 0x62, 0x68, 0xe4, 0x62, 0xd7, + 0xc6, 0x4c, 0x45, 0xb8, 0x09, 0xf5, 0x1c, 0x36, 0x99, 0xaa, 0x05, 0xb1, 0x49, 0x39, 0x28, 0xda, + 0x59, 0x65, 0x50, 0x86, 0x7d, 0xd9, 0x94, 0xc1, 0x01, 0x40, 0x36, 0x6f, 0xfa, 0x1b, 0x80, 0xec, + 0x03, 0x88, 0x91, 0xf7, 0x97, 0x4b, 0x46, 0xa3, 0x1d, 0x6a, 0x92, 0xf8, 0x26, 0x70, 0x97, 0x6e, + 0x56, 0x7c, 0x2d, 0x57, 0xa7, 0x4e, 0xe2, 0xdb, 0xe0, 0xe8, 0xfd, 0x5d, 0x0b, 0xfd, 0x76, 0xd7, + 0x42, 0x7f, 0xde, 0xb5, 0xd0, 0xf7, 0x65, 0xd9, 0xb4, 0x5d, 0xff, 0xa6, 0x24, 0xff, 0x8a, 0xbf, + 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xfc, 0x93, 0x1c, 0xde, 0x07, 0x00, 0x00, +} + +func (m *Request) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Request) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Request) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Timeseries) > 0 { + for iNdEx := len(m.Timeseries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Timeseries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if len(m.Symbols) > 0 { + for iNdEx := len(m.Symbols) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Symbols[iNdEx]) + copy(dAtA[i:], m.Symbols[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Symbols[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + return len(dAtA) - i, nil +} + +func (m *TimeSeries) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TimeSeries) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TimeSeries) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.CreatedTimestamp != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.CreatedTimestamp)) + i-- + dAtA[i] = 0x30 + } + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Exemplars) > 0 { + for iNdEx := len(m.Exemplars) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Exemplars[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Histograms) > 0 { + for iNdEx := len(m.Histograms) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Histograms[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Samples) > 0 { + for iNdEx := len(m.Samples) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Samples[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.LabelsRefs) > 0 { + dAtA3 := make([]byte, len(m.LabelsRefs)*10) + var j2 int + for _, num := range m.LabelsRefs { + for num >= 1<<7 { + dAtA3[j2] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j2++ + } + dAtA3[j2] = uint8(num) + j2++ + } + i -= j2 + copy(dAtA[i:], dAtA3[:j2]) + i = encodeVarintTypes(dAtA, i, uint64(j2)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Exemplar) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Exemplar) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Exemplar) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Timestamp != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp)) + i-- + dAtA[i] = 0x18 + } + if m.Value != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Value)))) + i-- + dAtA[i] = 0x11 + } + if len(m.LabelsRefs) > 0 { + dAtA5 := make([]byte, len(m.LabelsRefs)*10) + var j4 int + for _, num := range m.LabelsRefs { + for num >= 1<<7 { + dAtA5[j4] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j4++ + } + dAtA5[j4] = uint8(num) + j4++ + } + i -= j4 + copy(dAtA[i:], dAtA5[:j4]) + i = encodeVarintTypes(dAtA, i, uint64(j4)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Sample) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Sample) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Sample) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Timestamp != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp)) + i-- + dAtA[i] = 0x10 + } + if m.Value != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Value)))) + i-- + dAtA[i] = 0x9 + } + return len(dAtA) - i, nil +} + +func (m *Metadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Metadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.UnitRef != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.UnitRef)) + i-- + dAtA[i] = 0x20 + } + if m.HelpRef != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.HelpRef)) + i-- + dAtA[i] = 0x18 + } + if m.Type != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Type)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *Histogram) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Histogram) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Histogram) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.CustomValues) > 0 { + for iNdEx := len(m.CustomValues) - 1; iNdEx >= 0; iNdEx-- { + f6 := math.Float64bits(float64(m.CustomValues[iNdEx])) + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(f6)) + } + i = encodeVarintTypes(dAtA, i, uint64(len(m.CustomValues)*8)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if m.Timestamp != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp)) + i-- + dAtA[i] = 0x78 + } + if m.ResetHint != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.ResetHint)) + i-- + dAtA[i] = 0x70 + } + if len(m.PositiveCounts) > 0 { + for iNdEx := len(m.PositiveCounts) - 1; iNdEx >= 0; iNdEx-- { + f7 := math.Float64bits(float64(m.PositiveCounts[iNdEx])) + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(f7)) + } + i = encodeVarintTypes(dAtA, i, uint64(len(m.PositiveCounts)*8)) + i-- + dAtA[i] = 0x6a + } + if len(m.PositiveDeltas) > 0 { + var j8 int + dAtA10 := make([]byte, len(m.PositiveDeltas)*10) + for _, num := range m.PositiveDeltas { + x9 := (uint64(num) << 1) ^ uint64((num >> 63)) + for x9 >= 1<<7 { + dAtA10[j8] = uint8(uint64(x9)&0x7f | 0x80) + j8++ + x9 >>= 7 + } + dAtA10[j8] = uint8(x9) + j8++ + } + i -= j8 + copy(dAtA[i:], dAtA10[:j8]) + i = encodeVarintTypes(dAtA, i, uint64(j8)) + i-- + dAtA[i] = 0x62 + } + if len(m.PositiveSpans) > 0 { + for iNdEx := len(m.PositiveSpans) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PositiveSpans[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + } + if len(m.NegativeCounts) > 0 { + for iNdEx := len(m.NegativeCounts) - 1; iNdEx >= 0; iNdEx-- { + f11 := math.Float64bits(float64(m.NegativeCounts[iNdEx])) + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(f11)) + } + i = encodeVarintTypes(dAtA, i, uint64(len(m.NegativeCounts)*8)) + i-- + dAtA[i] = 0x52 + } + if len(m.NegativeDeltas) > 0 { + var j12 int + dAtA14 := make([]byte, len(m.NegativeDeltas)*10) + for _, num := range m.NegativeDeltas { + x13 := (uint64(num) << 1) ^ uint64((num >> 63)) + for x13 >= 1<<7 { + dAtA14[j12] = uint8(uint64(x13)&0x7f | 0x80) + j12++ + x13 >>= 7 + } + dAtA14[j12] = uint8(x13) + j12++ + } + i -= j12 + copy(dAtA[i:], dAtA14[:j12]) + i = encodeVarintTypes(dAtA, i, uint64(j12)) + i-- + dAtA[i] = 0x4a + } + if len(m.NegativeSpans) > 0 { + for iNdEx := len(m.NegativeSpans) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NegativeSpans[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.ZeroCount != nil { + { + size := m.ZeroCount.Size() + i -= size + if _, err := m.ZeroCount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if m.ZeroThreshold != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.ZeroThreshold)))) + i-- + dAtA[i] = 0x29 + } + if m.Schema != 0 { + i = encodeVarintTypes(dAtA, i, uint64((uint32(m.Schema)<<1)^uint32((m.Schema>>31)))) + i-- + dAtA[i] = 0x20 + } + if m.Sum != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Sum)))) + i-- + dAtA[i] = 0x19 + } + if m.Count != nil { + { + size := m.Count.Size() + i -= size + if _, err := m.Count.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *Histogram_CountInt) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Histogram_CountInt) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + i = encodeVarintTypes(dAtA, i, uint64(m.CountInt)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} +func (m *Histogram_CountFloat) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Histogram_CountFloat) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.CountFloat)))) + i-- + dAtA[i] = 0x11 + return len(dAtA) - i, nil +} +func (m *Histogram_ZeroCountInt) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Histogram_ZeroCountInt) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + i = encodeVarintTypes(dAtA, i, uint64(m.ZeroCountInt)) + i-- + dAtA[i] = 0x30 + return len(dAtA) - i, nil +} +func (m *Histogram_ZeroCountFloat) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Histogram_ZeroCountFloat) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.ZeroCountFloat)))) + i-- + dAtA[i] = 0x39 + return len(dAtA) - i, nil +} +func (m *BucketSpan) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BucketSpan) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BucketSpan) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Length != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Length)) + i-- + dAtA[i] = 0x10 + } + if m.Offset != 0 { + i = encodeVarintTypes(dAtA, i, uint64((uint32(m.Offset)<<1)^uint32((m.Offset>>31)))) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { + offset -= sovTypes(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Request) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Symbols) > 0 { + for _, s := range m.Symbols { + l = len(s) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Timeseries) > 0 { + for _, e := range m.Timeseries { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TimeSeries) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.LabelsRefs) > 0 { + l = 0 + for _, e := range m.LabelsRefs { + l += sovTypes(uint64(e)) + } + n += 1 + sovTypes(uint64(l)) + l + } + if len(m.Samples) > 0 { + for _, e := range m.Samples { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Histograms) > 0 { + for _, e := range m.Histograms { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Exemplars) > 0 { + for _, e := range m.Exemplars { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + l = m.Metadata.Size() + n += 1 + l + sovTypes(uint64(l)) + if m.CreatedTimestamp != 0 { + n += 1 + sovTypes(uint64(m.CreatedTimestamp)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Exemplar) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.LabelsRefs) > 0 { + l = 0 + for _, e := range m.LabelsRefs { + l += sovTypes(uint64(e)) + } + n += 1 + sovTypes(uint64(l)) + l + } + if m.Value != 0 { + n += 9 + } + if m.Timestamp != 0 { + n += 1 + sovTypes(uint64(m.Timestamp)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Sample) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Value != 0 { + n += 9 + } + if m.Timestamp != 0 { + n += 1 + sovTypes(uint64(m.Timestamp)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Metadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Type != 0 { + n += 1 + sovTypes(uint64(m.Type)) + } + if m.HelpRef != 0 { + n += 1 + sovTypes(uint64(m.HelpRef)) + } + if m.UnitRef != 0 { + n += 1 + sovTypes(uint64(m.UnitRef)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Histogram) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Count != nil { + n += m.Count.Size() + } + if m.Sum != 0 { + n += 9 + } + if m.Schema != 0 { + n += 1 + sozTypes(uint64(m.Schema)) + } + if m.ZeroThreshold != 0 { + n += 9 + } + if m.ZeroCount != nil { + n += m.ZeroCount.Size() + } + if len(m.NegativeSpans) > 0 { + for _, e := range m.NegativeSpans { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NegativeDeltas) > 0 { + l = 0 + for _, e := range m.NegativeDeltas { + l += sozTypes(uint64(e)) + } + n += 1 + sovTypes(uint64(l)) + l + } + if len(m.NegativeCounts) > 0 { + n += 1 + sovTypes(uint64(len(m.NegativeCounts)*8)) + len(m.NegativeCounts)*8 + } + if len(m.PositiveSpans) > 0 { + for _, e := range m.PositiveSpans { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.PositiveDeltas) > 0 { + l = 0 + for _, e := range m.PositiveDeltas { + l += sozTypes(uint64(e)) + } + n += 1 + sovTypes(uint64(l)) + l + } + if len(m.PositiveCounts) > 0 { + n += 1 + sovTypes(uint64(len(m.PositiveCounts)*8)) + len(m.PositiveCounts)*8 + } + if m.ResetHint != 0 { + n += 1 + sovTypes(uint64(m.ResetHint)) + } + if m.Timestamp != 0 { + n += 1 + sovTypes(uint64(m.Timestamp)) + } + if len(m.CustomValues) > 0 { + n += 2 + sovTypes(uint64(len(m.CustomValues)*8)) + len(m.CustomValues)*8 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Histogram_CountInt) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovTypes(uint64(m.CountInt)) + return n +} +func (m *Histogram_CountFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 9 + return n +} +func (m *Histogram_ZeroCountInt) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovTypes(uint64(m.ZeroCountInt)) + return n +} +func (m *Histogram_ZeroCountFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 9 + return n +} +func (m *BucketSpan) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Offset != 0 { + n += 1 + sozTypes(uint64(m.Offset)) + } + if m.Length != 0 { + n += 1 + sovTypes(uint64(m.Length)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovTypes(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTypes(x uint64) (n int) { + return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Request) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Symbols", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Symbols = append(m.Symbols, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timeseries", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Timeseries = append(m.Timeseries, TimeSeries{}) + if err := m.Timeseries[len(m.Timeseries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TimeSeries) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TimeSeries: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TimeSeries: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LabelsRefs = append(m.LabelsRefs, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.LabelsRefs) == 0 { + m.LabelsRefs = make([]uint32, 0, elementCount) + } + for iNdEx < postIndex { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LabelsRefs = append(m.LabelsRefs, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field LabelsRefs", wireType) + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Samples", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Samples = append(m.Samples, Sample{}) + if err := m.Samples[len(m.Samples)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Histograms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Histograms = append(m.Histograms, Histogram{}) + if err := m.Histograms[len(m.Histograms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Exemplars", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Exemplars = append(m.Exemplars, Exemplar{}) + if err := m.Exemplars[len(m.Exemplars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreatedTimestamp", wireType) + } + m.CreatedTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CreatedTimestamp |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Exemplar) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Exemplar: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Exemplar: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LabelsRefs = append(m.LabelsRefs, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.LabelsRefs) == 0 { + m.LabelsRefs = make([]uint32, 0, elementCount) + } + for iNdEx < postIndex { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LabelsRefs = append(m.LabelsRefs, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field LabelsRefs", wireType) + } + case 2: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Value = float64(math.Float64frombits(v)) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Sample) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Sample: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Sample: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Value = float64(math.Float64frombits(v)) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Metadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Metadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Type |= Metadata_MetricType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HelpRef", wireType) + } + m.HelpRef = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HelpRef |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnitRef", wireType) + } + m.UnitRef = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnitRef |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Histogram) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Histogram: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Histogram: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CountInt", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Count = &Histogram_CountInt{v} + case 2: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field CountFloat", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Count = &Histogram_CountFloat{float64(math.Float64frombits(v))} + case 3: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Sum", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Sum = float64(math.Float64frombits(v)) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Schema", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31)) + m.Schema = v + case 5: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field ZeroThreshold", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.ZeroThreshold = float64(math.Float64frombits(v)) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ZeroCountInt", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ZeroCount = &Histogram_ZeroCountInt{v} + case 7: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field ZeroCountFloat", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.ZeroCount = &Histogram_ZeroCountFloat{float64(math.Float64frombits(v))} + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NegativeSpans", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NegativeSpans = append(m.NegativeSpans, BucketSpan{}) + if err := m.NegativeSpans[len(m.NegativeSpans)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + v = (v >> 1) ^ uint64((int64(v&1)<<63)>>63) + m.NegativeDeltas = append(m.NegativeDeltas, int64(v)) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.NegativeDeltas) == 0 { + m.NegativeDeltas = make([]int64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + v = (v >> 1) ^ uint64((int64(v&1)<<63)>>63) + m.NegativeDeltas = append(m.NegativeDeltas, int64(v)) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field NegativeDeltas", wireType) + } + case 10: + if wireType == 1 { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.NegativeCounts = append(m.NegativeCounts, v2) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.NegativeCounts) == 0 { + m.NegativeCounts = make([]float64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.NegativeCounts = append(m.NegativeCounts, v2) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field NegativeCounts", wireType) + } + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PositiveSpans", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PositiveSpans = append(m.PositiveSpans, BucketSpan{}) + if err := m.PositiveSpans[len(m.PositiveSpans)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + v = (v >> 1) ^ uint64((int64(v&1)<<63)>>63) + m.PositiveDeltas = append(m.PositiveDeltas, int64(v)) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.PositiveDeltas) == 0 { + m.PositiveDeltas = make([]int64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + v = (v >> 1) ^ uint64((int64(v&1)<<63)>>63) + m.PositiveDeltas = append(m.PositiveDeltas, int64(v)) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field PositiveDeltas", wireType) + } + case 13: + if wireType == 1 { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.PositiveCounts = append(m.PositiveCounts, v2) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.PositiveCounts) == 0 { + m.PositiveCounts = make([]float64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.PositiveCounts = append(m.PositiveCounts, v2) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field PositiveCounts", wireType) + } + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ResetHint", wireType) + } + m.ResetHint = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ResetHint |= Histogram_ResetHint(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType == 1 { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.CustomValues = append(m.CustomValues, v2) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.CustomValues) == 0 { + m.CustomValues = make([]float64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.CustomValues = append(m.CustomValues, v2) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field CustomValues", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BucketSpan) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BucketSpan: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BucketSpan: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Offset", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31)) + m.Offset = v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Length", wireType) + } + m.Length = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Length |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTypes(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTypes + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTypes + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTypes + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTypes = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTypes = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.proto b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.proto new file mode 100644 index 0000000000..0cc7b8bc4a --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/prompb/io/prometheus/write/v2/types.proto @@ -0,0 +1,260 @@ +// Copyright 2024 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// NOTE: This file is also available on https://buf.build/prometheus/prometheus/docs/main:io.prometheus.write.v2 + +syntax = "proto3"; +package io.prometheus.write.v2; + +option go_package = "writev2"; + +import "gogoproto/gogo.proto"; + +// Request represents a request to write the given timeseries to a remote destination. +// This message was introduced in the Remote Write 2.0 specification: +// https://prometheus.io/docs/concepts/remote_write_spec_2_0/ +// +// The canonical Content-Type request header value for this message is +// "application/x-protobuf;proto=io.prometheus.write.v2.Request" +// +// NOTE: gogoproto options might change in future for this file, they +// are not part of the spec proto (they only modify the generated Go code, not +// the serialized message). See: https://github.com/prometheus/prometheus/issues/11908 +message Request { + // Since Request supersedes 1.0 spec's prometheus.WriteRequest, we reserve the top-down message + // for the deterministic interop between those two, see types_test.go for details. + // Generally it's not needed, because Receivers must use the Content-Type header, but we want to + // be sympathetic to adopters with mistaken implementations and have deterministic error (empty + // message if you use the wrong proto schema). + reserved 1 to 3; + + // symbols contains a de-duplicated array of string elements used for various + // items in a Request message, like labels and metadata items. For the sender's convenience + // around empty values for optional fields like unit_ref, symbols array MUST start with + // empty string. + // + // To decode each of the symbolized strings, referenced, by "ref(s)" suffix, you + // need to lookup the actual string by index from symbols array. The order of + // strings is up to the sender. The receiver should not assume any particular encoding. + repeated string symbols = 4; + // timeseries represents an array of distinct series with 0 or more samples. + repeated TimeSeries timeseries = 5 [(gogoproto.nullable) = false]; +} + +// TimeSeries represents a single series. +message TimeSeries { + // labels_refs is a list of label name-value pair references, encoded + // as indices to the Request.symbols array. This list's length is always + // a multiple of two, and the underlying labels should be sorted lexicographically. + // + // Note that there might be multiple TimeSeries objects in the same + // Requests with the same labels e.g. for different exemplars, metadata + // or created timestamp. + repeated uint32 labels_refs = 1; + + // Timeseries messages can either specify samples or (native) histogram samples + // (histogram field), but not both. For a typical sender (real-time metric + // streaming), in healthy cases, there will be only one sample or histogram. + // + // Samples and histograms are sorted by timestamp (older first). + repeated Sample samples = 2 [(gogoproto.nullable) = false]; + repeated Histogram histograms = 3 [(gogoproto.nullable) = false]; + + // exemplars represents an optional set of exemplars attached to this series' samples. + repeated Exemplar exemplars = 4 [(gogoproto.nullable) = false]; + + // metadata represents the metadata associated with the given series' samples. + Metadata metadata = 5 [(gogoproto.nullable) = false]; + + // created_timestamp represents an optional created timestamp associated with + // this series' samples in ms format, typically for counter or histogram type + // metrics. Created timestamp represents the time when the counter started + // counting (sometimes referred to as start timestamp), which can increase + // the accuracy of query results. + // + // Note that some receivers might require this and in return fail to + // ingest such samples within the Request. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + // + // Note that the "optional" keyword is omitted due to + // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields + // Zero value means value not set. If you need to use exactly zero value for + // the timestamp, use 1 millisecond before or after. + int64 created_timestamp = 6; +} + +// Exemplar is an additional information attached to some series' samples. +// It is typically used to attach an example trace or request ID associated with +// the metric changes. +message Exemplar { + // labels_refs is an optional list of label name-value pair references, encoded + // as indices to the Request.symbols array. This list's len is always + // a multiple of 2, and the underlying labels should be sorted lexicographically. + // If the exemplar references a trace it should use the `trace_id` label name, as a best practice. + repeated uint32 labels_refs = 1; + // value represents an exact example value. This can be useful when the exemplar + // is attached to a histogram, which only gives an estimated value through buckets. + double value = 2; + // timestamp represents an optional timestamp of the sample in ms. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + // + // Note that the "optional" keyword is omitted due to + // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields + // Zero value means value not set. If you need to use exactly zero value for + // the timestamp, use 1 millisecond before or after. + int64 timestamp = 3; +} + +// Sample represents series sample. +message Sample { + // value of the sample. + double value = 1; + // timestamp represents timestamp of the sample in ms. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + int64 timestamp = 2; +} + +// Metadata represents the metadata associated with the given series' samples. +message Metadata { + enum MetricType { + METRIC_TYPE_UNSPECIFIED = 0; + METRIC_TYPE_COUNTER = 1; + METRIC_TYPE_GAUGE = 2; + METRIC_TYPE_HISTOGRAM = 3; + METRIC_TYPE_GAUGEHISTOGRAM = 4; + METRIC_TYPE_SUMMARY = 5; + METRIC_TYPE_INFO = 6; + METRIC_TYPE_STATESET = 7; + } + MetricType type = 1; + // help_ref is a reference to the Request.symbols array representing help + // text for the metric. Help is optional, reference should point to an empty string in + // such a case. + uint32 help_ref = 3; + // unit_ref is a reference to the Request.symbols array representing a unit + // for the metric. Unit is optional, reference should point to an empty string in + // such a case. + uint32 unit_ref = 4; +} + +// A native histogram, also known as a sparse histogram. +// Original design doc: +// https://docs.google.com/document/d/1cLNv3aufPZb3fNfaJgdaRBZsInZKKIHo9E6HinJVbpM/edit +// The appendix of this design doc also explains the concept of float +// histograms. This Histogram message can represent both, the usual +// integer histogram as well as a float histogram. +message Histogram { + enum ResetHint { + RESET_HINT_UNSPECIFIED = 0; // Need to test for a counter reset explicitly. + RESET_HINT_YES = 1; // This is the 1st histogram after a counter reset. + RESET_HINT_NO = 2; // There was no counter reset between this and the previous Histogram. + RESET_HINT_GAUGE = 3; // This is a gauge histogram where counter resets don't happen. + } + + oneof count { // Count of observations in the histogram. + uint64 count_int = 1; + double count_float = 2; + } + double sum = 3; // Sum of observations in the histogram. + + // The schema defines the bucket schema. Currently, valid numbers + // are -53 and numbers in range of -4 <= n <= 8. More valid numbers might be + // added in future for new bucketing layouts. + // + // The schema equal to -53 means custom buckets. See + // custom_values field description for more details. + // + // Values between -4 and 8 represent base-2 bucket schema, where 1 + // is a bucket boundary in each case, and then each power of two is + // divided into 2^n (n is schema value) logarithmic buckets. Or in other words, + // each bucket boundary is the previous boundary times 2^(2^-n). + sint32 schema = 4; + double zero_threshold = 5; // Breadth of the zero bucket. + oneof zero_count { // Count in zero bucket. + uint64 zero_count_int = 6; + double zero_count_float = 7; + } + + // Negative Buckets. + repeated BucketSpan negative_spans = 8 [(gogoproto.nullable) = false]; + // Use either "negative_deltas" or "negative_counts", the former for + // regular histograms with integer counts, the latter for + // float histograms. + repeated sint64 negative_deltas = 9; // Count delta of each bucket compared to previous one (or to zero for 1st bucket). + repeated double negative_counts = 10; // Absolute count of each bucket. + + // Positive Buckets. + // + // In case of custom buckets (-53 schema value) the positive buckets are interpreted as follows: + // * The span offset+length points to an the index of the custom_values array + // or +Inf if pointing to the len of the array. + // * The counts and deltas have the same meaning as for exponential histograms. + repeated BucketSpan positive_spans = 11 [(gogoproto.nullable) = false]; + // Use either "positive_deltas" or "positive_counts", the former for + // regular histograms with integer counts, the latter for + // float histograms. + repeated sint64 positive_deltas = 12; // Count delta of each bucket compared to previous one (or to zero for 1st bucket). + repeated double positive_counts = 13; // Absolute count of each bucket. + + ResetHint reset_hint = 14; + // timestamp represents timestamp of the sample in ms. + // + // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go + // for conversion from/to time.Time to Prometheus timestamp. + int64 timestamp = 15; + + // custom_values is an additional field used by non-exponential bucketing layouts. + // + // For custom buckets (-53 schema value) custom_values specify monotonically + // increasing upper inclusive boundaries for the bucket counts with arbitrary + // widths for this histogram. In other words, custom_values represents custom, + // explicit bucketing that could have been converted from the classic histograms. + // + // Those bounds are then referenced by spans in positive_spans with corresponding positive + // counts of deltas (refer to positive_spans for more details). This way we can + // have encode sparse histograms with custom bucketing (many buckets are often + // not used). + // + // Note that for custom bounds, even negative observations are placed in the positive + // counts to simplify the implementation and avoid ambiguity of where to place + // an underflow bucket, e.g. (-2, 1]. Therefore negative buckets and + // the zero bucket are unused, if the schema indicates custom bucketing. + // + // For each upper boundary the previous boundary represent the lower exclusive + // boundary for that bucket. The first element is the upper inclusive boundary + // for the first bucket, which implicitly has a lower inclusive bound of -Inf. + // This is similar to "le" label semantics on classic histograms. You may add a + // bucket with an upper bound of 0 to make sure that you really have no negative + // observations, but in practice, native histogram rendering will show both with + // or without first upper boundary 0 and no negative counts as the same case. + // + // The last element is not only the upper inclusive bound of the last regular + // bucket, but implicitly the lower exclusive bound of the +Inf bucket. + repeated double custom_values = 16; +} + +// A BucketSpan defines a number of consecutive buckets with their +// offset. Logically, it would be more straightforward to include the +// bucket counts in the Span. However, the protobuf representation is +// more compact in the way the data is structured here (with all the +// buckets in a single array separate from the Spans). +message BucketSpan { + sint32 offset = 1; // Gap to previous span, or starting point for 1st span (which can be negative). + uint32 length = 2; // Length of consecutive buckets. +} diff --git a/vendor/github.com/prometheus/prometheus/scrape/manager.go b/vendor/github.com/prometheus/prometheus/scrape/manager.go index cb92db5a8c..156e949f83 100644 --- a/vendor/github.com/prometheus/prometheus/scrape/manager.go +++ b/vendor/github.com/prometheus/prometheus/scrape/manager.go @@ -73,9 +73,11 @@ type Options struct { // Option used by downstream scraper users like OpenTelemetry Collector // to help lookup metric metadata. Should be false for Prometheus. PassMetadataInContext bool - // Option to enable the experimental in-memory metadata storage and append - // metadata to the WAL. - EnableMetadataStorage bool + // Option to enable appending of scraped Metadata to the TSDB/other appenders. Individual appenders + // can decide what to do with metadata, but for practical purposes this flag exists so that metadata + // can be written to the WAL and thus read for remote write. + // TODO: implement some form of metadata storage + AppendMetadata bool // Option to increase the interval used by scrape manager to throttle target groups updates. DiscoveryReloadInterval model.Duration // Option to enable the ingestion of the created timestamp as a synthetic zero sample. diff --git a/vendor/github.com/prometheus/prometheus/scrape/metrics.go b/vendor/github.com/prometheus/prometheus/scrape/metrics.go index b67d0686b6..e7395c6191 100644 --- a/vendor/github.com/prometheus/prometheus/scrape/metrics.go +++ b/vendor/github.com/prometheus/prometheus/scrape/metrics.go @@ -34,6 +34,7 @@ type scrapeMetrics struct { targetScrapePoolExceededTargetLimit prometheus.Counter targetScrapePoolTargetLimit *prometheus.GaugeVec targetScrapePoolTargetsAdded *prometheus.GaugeVec + targetScrapePoolSymbolTableItems *prometheus.GaugeVec targetSyncIntervalLength *prometheus.SummaryVec targetSyncFailed *prometheus.CounterVec @@ -129,6 +130,13 @@ func newScrapeMetrics(reg prometheus.Registerer) (*scrapeMetrics, error) { }, []string{"scrape_job"}, ) + sm.targetScrapePoolSymbolTableItems = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "prometheus_target_scrape_pool_symboltable_items", + Help: "Current number of symbols in table for this scrape pool.", + }, + []string{"scrape_job"}, + ) sm.targetScrapePoolSyncsCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "prometheus_target_scrape_pool_sync_total", @@ -234,6 +242,7 @@ func newScrapeMetrics(reg prometheus.Registerer) (*scrapeMetrics, error) { sm.targetScrapePoolExceededTargetLimit, sm.targetScrapePoolTargetLimit, sm.targetScrapePoolTargetsAdded, + sm.targetScrapePoolSymbolTableItems, sm.targetSyncFailed, // Used by targetScraper. sm.targetScrapeExceededBodySizeLimit, @@ -274,6 +283,7 @@ func (sm *scrapeMetrics) Unregister() { sm.reg.Unregister(sm.targetScrapePoolExceededTargetLimit) sm.reg.Unregister(sm.targetScrapePoolTargetLimit) sm.reg.Unregister(sm.targetScrapePoolTargetsAdded) + sm.reg.Unregister(sm.targetScrapePoolSymbolTableItems) sm.reg.Unregister(sm.targetSyncFailed) sm.reg.Unregister(sm.targetScrapeExceededBodySizeLimit) sm.reg.Unregister(sm.targetScrapeCacheFlushForced) diff --git a/vendor/github.com/prometheus/prometheus/scrape/scrape.go b/vendor/github.com/prometheus/prometheus/scrape/scrape.go index c285f05e36..ccb068b680 100644 --- a/vendor/github.com/prometheus/prometheus/scrape/scrape.go +++ b/vendor/github.com/prometheus/prometheus/scrape/scrape.go @@ -181,7 +181,7 @@ func newScrapePool(cfg *config.ScrapeConfig, app storage.Appendable, offsetSeed options.EnableNativeHistogramsIngestion, options.EnableCreatedTimestampZeroIngestion, options.ExtraMetrics, - options.EnableMetadataStorage, + options.AppendMetadata, opts.target, options.PassMetadataInContext, metrics, @@ -246,6 +246,7 @@ func (sp *scrapePool) stop() { sp.metrics.targetScrapePoolSyncsCounter.DeleteLabelValues(sp.config.JobName) sp.metrics.targetScrapePoolTargetLimit.DeleteLabelValues(sp.config.JobName) sp.metrics.targetScrapePoolTargetsAdded.DeleteLabelValues(sp.config.JobName) + sp.metrics.targetScrapePoolSymbolTableItems.DeleteLabelValues(sp.config.JobName) sp.metrics.targetSyncIntervalLength.DeleteLabelValues(sp.config.JobName) sp.metrics.targetSyncFailed.DeleteLabelValues(sp.config.JobName) } @@ -273,6 +274,15 @@ func (sp *scrapePool) reload(cfg *config.ScrapeConfig) error { sp.metrics.targetScrapePoolTargetLimit.WithLabelValues(sp.config.JobName).Set(float64(sp.config.TargetLimit)) + sp.restartLoops(reuseCache) + oldClient.CloseIdleConnections() + sp.metrics.targetReloadIntervalLength.WithLabelValues(time.Duration(sp.config.ScrapeInterval).String()).Observe( + time.Since(start).Seconds(), + ) + return nil +} + +func (sp *scrapePool) restartLoops(reuseCache bool) { var ( wg sync.WaitGroup interval = time.Duration(sp.config.ScrapeInterval) @@ -313,7 +323,7 @@ func (sp *scrapePool) reload(cfg *config.ScrapeConfig) error { client: sp.client, timeout: timeout, bodySizeLimit: bodySizeLimit, - acceptHeader: acceptHeader(cfg.ScrapeProtocols), + acceptHeader: acceptHeader(sp.config.ScrapeProtocols), acceptEncodingHeader: acceptEncodingHeader(enableCompression), } newLoop = sp.newLoop(scrapeLoopOptions{ @@ -352,11 +362,10 @@ func (sp *scrapePool) reload(cfg *config.ScrapeConfig) error { sp.targetMtx.Unlock() wg.Wait() - oldClient.CloseIdleConnections() - sp.metrics.targetReloadIntervalLength.WithLabelValues(interval.String()).Observe( - time.Since(start).Seconds(), - ) +} +// Must be called with sp.mtx held. +func (sp *scrapePool) checkSymbolTable() { // Here we take steps to clear out the symbol table if it has grown a lot. // After waiting some time for things to settle, we take the size of the symbol-table. // If, after some more time, the table has grown to twice that size, we start a new one. @@ -367,11 +376,10 @@ func (sp *scrapePool) reload(cfg *config.ScrapeConfig) error { } else if sp.symbolTable.Len() > 2*sp.initialSymbolTableLen { sp.symbolTable = labels.NewSymbolTable() sp.initialSymbolTableLen = 0 + sp.restartLoops(false) // To drop all caches. } sp.lastSymbolTableCheck = time.Now() } - - return nil } // Sync converts target groups into actual scrape targets and synchronizes @@ -408,8 +416,10 @@ func (sp *scrapePool) Sync(tgs []*targetgroup.Group) { } } } + sp.metrics.targetScrapePoolSymbolTableItems.WithLabelValues(sp.config.JobName).Set(float64(sp.symbolTable.Len())) sp.targetMtx.Unlock() sp.sync(all) + sp.checkSymbolTable() sp.metrics.targetSyncIntervalLength.WithLabelValues(sp.config.JobName).Observe( time.Since(start).Seconds(), @@ -663,7 +673,7 @@ func appender(app storage.Appender, sampleLimit, bucketLimit int, maxSchema int3 } } - if maxSchema < nativeHistogramMaxSchema { + if maxSchema < histogram.ExponentialSchemaMax { app = &maxSchemaAppender{ Appender: app, maxSchema: maxSchema, @@ -1621,7 +1631,7 @@ loop: updateMetadata(lset, true) } - if seriesAlreadyScraped { + if seriesAlreadyScraped && parsedTimestamp == nil { err = storage.ErrDuplicateSampleForTimestamp } else { if ctMs := p.CreatedTimestamp(); sl.enableCTZeroIngestion && ctMs != nil { @@ -1978,10 +1988,10 @@ func pickSchema(bucketFactor float64) int32 { } floor := math.Floor(-math.Log2(math.Log2(bucketFactor))) switch { - case floor >= float64(nativeHistogramMaxSchema): - return nativeHistogramMaxSchema - case floor <= float64(nativeHistogramMinSchema): - return nativeHistogramMinSchema + case floor >= float64(histogram.ExponentialSchemaMax): + return histogram.ExponentialSchemaMax + case floor <= float64(histogram.ExponentialSchemaMin): + return histogram.ExponentialSchemaMin default: return int32(floor) } diff --git a/vendor/github.com/prometheus/prometheus/scrape/target.go b/vendor/github.com/prometheus/prometheus/scrape/target.go index ad4b4f6857..9ef4471fbd 100644 --- a/vendor/github.com/prometheus/prometheus/scrape/target.go +++ b/vendor/github.com/prometheus/prometheus/scrape/target.go @@ -365,16 +365,26 @@ type bucketLimitAppender struct { func (app *bucketLimitAppender) AppendHistogram(ref storage.SeriesRef, lset labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) { if h != nil { + // Return with an early error if the histogram has too many buckets and the + // schema is not exponential, in which case we can't reduce the resolution. + if len(h.PositiveBuckets)+len(h.NegativeBuckets) > app.limit && !histogram.IsExponentialSchema(h.Schema) { + return 0, errBucketLimit + } for len(h.PositiveBuckets)+len(h.NegativeBuckets) > app.limit { - if h.Schema == -4 { + if h.Schema <= histogram.ExponentialSchemaMin { return 0, errBucketLimit } h = h.ReduceResolution(h.Schema - 1) } } if fh != nil { + // Return with an early error if the histogram has too many buckets and the + // schema is not exponential, in which case we can't reduce the resolution. + if len(fh.PositiveBuckets)+len(fh.NegativeBuckets) > app.limit && !histogram.IsExponentialSchema(fh.Schema) { + return 0, errBucketLimit + } for len(fh.PositiveBuckets)+len(fh.NegativeBuckets) > app.limit { - if fh.Schema == -4 { + if fh.Schema <= histogram.ExponentialSchemaMin { return 0, errBucketLimit } fh = fh.ReduceResolution(fh.Schema - 1) @@ -387,11 +397,6 @@ func (app *bucketLimitAppender) AppendHistogram(ref storage.SeriesRef, lset labe return ref, nil } -const ( - nativeHistogramMaxSchema int32 = 8 - nativeHistogramMinSchema int32 = -4 -) - type maxSchemaAppender struct { storage.Appender @@ -400,12 +405,12 @@ type maxSchemaAppender struct { func (app *maxSchemaAppender) AppendHistogram(ref storage.SeriesRef, lset labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) { if h != nil { - if h.Schema > app.maxSchema { + if histogram.IsExponentialSchema(h.Schema) && h.Schema > app.maxSchema { h = h.ReduceResolution(app.maxSchema) } } if fh != nil { - if fh.Schema > app.maxSchema { + if histogram.IsExponentialSchema(fh.Schema) && fh.Schema > app.maxSchema { fh = fh.ReduceResolution(app.maxSchema) } } diff --git a/vendor/github.com/prometheus/prometheus/storage/interface.go b/vendor/github.com/prometheus/prometheus/storage/interface.go index 493c2d6893..f85f985e9d 100644 --- a/vendor/github.com/prometheus/prometheus/storage/interface.go +++ b/vendor/github.com/prometheus/prometheus/storage/interface.go @@ -122,11 +122,11 @@ type MockQuerier struct { SelectMockFunction func(sortSeries bool, hints *SelectHints, matchers ...*labels.Matcher) SeriesSet } -func (q *MockQuerier) LabelValues(context.Context, string, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *MockQuerier) LabelValues(context.Context, string, *LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { return nil, nil, nil } -func (q *MockQuerier) LabelNames(context.Context, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *MockQuerier) LabelNames(context.Context, *LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { return nil, nil, nil } @@ -161,12 +161,12 @@ type LabelQuerier interface { // It is not safe to use the strings beyond the lifetime of the querier. // If matchers are specified the returned result set is reduced // to label values of metrics matching the matchers. - LabelValues(ctx context.Context, name string, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) + LabelValues(ctx context.Context, name string, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) // LabelNames returns all the unique label names present in the block in sorted order. // If matchers are specified the returned result set is reduced // to label names of metrics matching the matchers. - LabelNames(ctx context.Context, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) + LabelNames(ctx context.Context, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) // Close releases the resources of the Querier. Close() error @@ -190,6 +190,9 @@ type SelectHints struct { Start int64 // Start time in milliseconds for this select. End int64 // End time in milliseconds for this select. + // Maximum number of results returned. Use a value of 0 to disable. + Limit int + Step int64 // Query step size in milliseconds. Func string // String representation of surrounding function or aggregation. @@ -217,6 +220,13 @@ type SelectHints struct { DisableTrimming bool } +// LabelHints specifies hints passed for label reads. +// This is used only as an option for implementation to use. +type LabelHints struct { + // Maximum number of results returned. Use a value of 0 to disable. + Limit int +} + // TODO(bwplotka): Move to promql/engine_test.go? // QueryableFunc is an adapter to allow the use of ordinary functions as // Queryables. It follows the idea of http.HandlerFunc. diff --git a/vendor/github.com/prometheus/prometheus/storage/memoized_iterator.go b/vendor/github.com/prometheus/prometheus/storage/memoized_iterator.go index 4ab2aa5d78..273b3caa1d 100644 --- a/vendor/github.com/prometheus/prometheus/storage/memoized_iterator.go +++ b/vendor/github.com/prometheus/prometheus/storage/memoized_iterator.go @@ -136,6 +136,11 @@ func (b *MemoizedSeriesIterator) AtFloatHistogram() (int64, *histogram.FloatHist return b.it.AtFloatHistogram(nil) } +// AtT returns the timestamp of the current element of the iterator. +func (b *MemoizedSeriesIterator) AtT() int64 { + return b.it.AtT() +} + // Err returns the last encountered error. func (b *MemoizedSeriesIterator) Err() error { return b.it.Err() diff --git a/vendor/github.com/prometheus/prometheus/storage/merge.go b/vendor/github.com/prometheus/prometheus/storage/merge.go index 8855600220..2424b26ab7 100644 --- a/vendor/github.com/prometheus/prometheus/storage/merge.go +++ b/vendor/github.com/prometheus/prometheus/storage/merge.go @@ -45,19 +45,24 @@ type mergeGenericQuerier struct { // // In case of overlaps between the data given by primaries' and secondaries' Selects, merge function will be used. func NewMergeQuerier(primaries, secondaries []Querier, mergeFn VerticalSeriesMergeFunc) Querier { - if len(primaries)+len(secondaries) == 0 { - return NoopQuerier() + primaries = filterQueriers(primaries) + secondaries = filterQueriers(secondaries) + + switch { + case len(primaries) == 0 && len(secondaries) == 0: + return noopQuerier{} + case len(primaries) == 1 && len(secondaries) == 0: + return primaries[0] + case len(primaries) == 0 && len(secondaries) == 1: + return &querierAdapter{newSecondaryQuerierFrom(secondaries[0])} } + queriers := make([]genericQuerier, 0, len(primaries)+len(secondaries)) for _, q := range primaries { - if _, ok := q.(noopQuerier); !ok && q != nil { - queriers = append(queriers, newGenericQuerierFrom(q)) - } + queriers = append(queriers, newGenericQuerierFrom(q)) } for _, q := range secondaries { - if _, ok := q.(noopQuerier); !ok && q != nil { - queriers = append(queriers, newSecondaryQuerierFrom(q)) - } + queriers = append(queriers, newSecondaryQuerierFrom(q)) } concurrentSelect := false @@ -71,22 +76,40 @@ func NewMergeQuerier(primaries, secondaries []Querier, mergeFn VerticalSeriesMer }} } +func filterQueriers(qs []Querier) []Querier { + ret := make([]Querier, 0, len(qs)) + for _, q := range qs { + if _, ok := q.(noopQuerier); !ok && q != nil { + ret = append(ret, q) + } + } + return ret +} + // NewMergeChunkQuerier returns a new Chunk Querier that merges results of given primary and secondary chunk queriers. // See NewFanout commentary to learn more about primary vs secondary differences. // // In case of overlaps between the data given by primaries' and secondaries' Selects, merge function will be used. // TODO(bwplotka): Currently merge will compact overlapping chunks with bigger chunk, without limit. Split it: https://github.com/prometheus/tsdb/issues/670 func NewMergeChunkQuerier(primaries, secondaries []ChunkQuerier, mergeFn VerticalChunkSeriesMergeFunc) ChunkQuerier { + primaries = filterChunkQueriers(primaries) + secondaries = filterChunkQueriers(secondaries) + + switch { + case len(primaries) == 0 && len(secondaries) == 0: + return noopChunkQuerier{} + case len(primaries) == 1 && len(secondaries) == 0: + return primaries[0] + case len(primaries) == 0 && len(secondaries) == 1: + return &chunkQuerierAdapter{newSecondaryQuerierFromChunk(secondaries[0])} + } + queriers := make([]genericQuerier, 0, len(primaries)+len(secondaries)) for _, q := range primaries { - if _, ok := q.(noopChunkQuerier); !ok && q != nil { - queriers = append(queriers, newGenericQuerierFromChunk(q)) - } + queriers = append(queriers, newGenericQuerierFromChunk(q)) } - for _, querier := range secondaries { - if _, ok := querier.(noopChunkQuerier); !ok && querier != nil { - queriers = append(queriers, newSecondaryQuerierFromChunk(querier)) - } + for _, q := range secondaries { + queriers = append(queriers, newSecondaryQuerierFromChunk(q)) } concurrentSelect := false @@ -100,15 +123,18 @@ func NewMergeChunkQuerier(primaries, secondaries []ChunkQuerier, mergeFn Vertica }} } +func filterChunkQueriers(qs []ChunkQuerier) []ChunkQuerier { + ret := make([]ChunkQuerier, 0, len(qs)) + for _, q := range qs { + if _, ok := q.(noopChunkQuerier); !ok && q != nil { + ret = append(ret, q) + } + } + return ret +} + // Select returns a set of series that matches the given label matchers. func (q *mergeGenericQuerier) Select(ctx context.Context, sortSeries bool, hints *SelectHints, matchers ...*labels.Matcher) genericSeriesSet { - if len(q.queriers) == 0 { - return noopGenericSeriesSet{} - } - if len(q.queriers) == 1 { - return q.queriers[0].Select(ctx, sortSeries, hints, matchers...) - } - seriesSets := make([]genericSeriesSet, 0, len(q.queriers)) if !q.concurrentSelect { for _, querier := range q.queriers { @@ -161,8 +187,8 @@ func (l labelGenericQueriers) SplitByHalf() (labelGenericQueriers, labelGenericQ // LabelValues returns all potential values for a label name. // If matchers are specified the returned result set is reduced // to label values of metrics matching the matchers. -func (q *mergeGenericQuerier) LabelValues(ctx context.Context, name string, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { - res, ws, err := q.lvals(ctx, q.queriers, name, matchers...) +func (q *mergeGenericQuerier) LabelValues(ctx context.Context, name string, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { + res, ws, err := q.lvals(ctx, q.queriers, name, hints, matchers...) if err != nil { return nil, nil, fmt.Errorf("LabelValues() from merge generic querier for label %s: %w", name, err) } @@ -170,22 +196,22 @@ func (q *mergeGenericQuerier) LabelValues(ctx context.Context, name string, matc } // lvals performs merge sort for LabelValues from multiple queriers. -func (q *mergeGenericQuerier) lvals(ctx context.Context, lq labelGenericQueriers, n string, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *mergeGenericQuerier) lvals(ctx context.Context, lq labelGenericQueriers, n string, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { if lq.Len() == 0 { return nil, nil, nil } if lq.Len() == 1 { - return lq.Get(0).LabelValues(ctx, n, matchers...) + return lq.Get(0).LabelValues(ctx, n, hints, matchers...) } a, b := lq.SplitByHalf() var ws annotations.Annotations - s1, w, err := q.lvals(ctx, a, n, matchers...) + s1, w, err := q.lvals(ctx, a, n, hints, matchers...) ws.Merge(w) if err != nil { return nil, ws, err } - s2, ws, err := q.lvals(ctx, b, n, matchers...) + s2, ws, err := q.lvals(ctx, b, n, hints, matchers...) ws.Merge(w) if err != nil { return nil, ws, err @@ -221,13 +247,13 @@ func mergeStrings(a, b []string) []string { } // LabelNames returns all the unique label names present in all queriers in sorted order. -func (q *mergeGenericQuerier) LabelNames(ctx context.Context, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *mergeGenericQuerier) LabelNames(ctx context.Context, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { var ( labelNamesMap = make(map[string]struct{}) warnings annotations.Annotations ) for _, querier := range q.queriers { - names, wrn, err := querier.LabelNames(ctx, matchers...) + names, wrn, err := querier.LabelNames(ctx, hints, matchers...) if wrn != nil { // TODO(bwplotka): We could potentially wrap warnings. warnings.Merge(wrn) diff --git a/vendor/github.com/prometheus/prometheus/storage/noop.go b/vendor/github.com/prometheus/prometheus/storage/noop.go index be5741ddd8..f5092da7c7 100644 --- a/vendor/github.com/prometheus/prometheus/storage/noop.go +++ b/vendor/github.com/prometheus/prometheus/storage/noop.go @@ -31,11 +31,11 @@ func (noopQuerier) Select(context.Context, bool, *SelectHints, ...*labels.Matche return NoopSeriesSet() } -func (noopQuerier) LabelValues(context.Context, string, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (noopQuerier) LabelValues(context.Context, string, *LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { return nil, nil, nil } -func (noopQuerier) LabelNames(context.Context, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (noopQuerier) LabelNames(context.Context, *LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { return nil, nil, nil } @@ -54,11 +54,11 @@ func (noopChunkQuerier) Select(context.Context, bool, *SelectHints, ...*labels.M return NoopChunkedSeriesSet() } -func (noopChunkQuerier) LabelValues(context.Context, string, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (noopChunkQuerier) LabelValues(context.Context, string, *LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { return nil, nil, nil } -func (noopChunkQuerier) LabelNames(context.Context, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (noopChunkQuerier) LabelNames(context.Context, *LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { return nil, nil, nil } diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/client.go b/vendor/github.com/prometheus/prometheus/storage/remote/client.go index 140194ec71..17caf7be9b 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/client.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/client.go @@ -14,7 +14,6 @@ package remote import ( - "bufio" "bytes" "context" "fmt" @@ -35,13 +34,40 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" + "github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/prompb" "github.com/prometheus/prometheus/storage/remote/azuread" ) const maxErrMsgLen = 1024 -var UserAgent = fmt.Sprintf("Prometheus/%s", version.Version) +const ( + RemoteWriteVersionHeader = "X-Prometheus-Remote-Write-Version" + RemoteWriteVersion1HeaderValue = "0.1.0" + RemoteWriteVersion20HeaderValue = "2.0.0" + appProtoContentType = "application/x-protobuf" +) + +// Compression represents the encoding. Currently remote storage supports only +// one, but we experiment with more, thus leaving the compression scaffolding +// for now. +// NOTE(bwplotka): Keeping it public, as a non-stable help for importers to use. +type Compression string + +const ( + // SnappyBlockCompression represents https://github.com/google/snappy/blob/2c94e11145f0b7b184b831577c93e5a41c4c0346/format_description.txt + SnappyBlockCompression Compression = "snappy" +) + +var ( + // UserAgent represents Prometheus version to use for user agent header. + UserAgent = fmt.Sprintf("Prometheus/%s", version.Version) + + remoteWriteContentTypeHeaders = map[config.RemoteWriteProtoMsg]string{ + config.RemoteWriteProtoMsgV1: appProtoContentType, // Also application/x-protobuf;proto=prometheus.WriteRequest but simplified for compatibility with 1.x spec. + config.RemoteWriteProtoMsgV2: appProtoContentType + ";proto=io.prometheus.write.v2.Request", + } +) var ( remoteReadQueriesTotal = prometheus.NewCounterVec( @@ -93,6 +119,9 @@ type Client struct { readQueries prometheus.Gauge readQueriesTotal *prometheus.CounterVec readQueriesDuration prometheus.Observer + + writeProtoMsg config.RemoteWriteProtoMsg + writeCompression Compression // Not exposed by ClientConfig for now. } // ClientConfig configures a client. @@ -104,6 +133,7 @@ type ClientConfig struct { AzureADConfig *azuread.AzureADConfig Headers map[string]string RetryOnRateLimit bool + WriteProtoMsg config.RemoteWriteProtoMsg } // ReadClient uses the SAMPLES method of remote read to read series samples from remote server. @@ -162,14 +192,20 @@ func NewWriteClient(name string, conf *ClientConfig) (WriteClient, error) { } } - httpClient.Transport = otelhttp.NewTransport(t) + writeProtoMsg := config.RemoteWriteProtoMsgV1 + if conf.WriteProtoMsg != "" { + writeProtoMsg = conf.WriteProtoMsg + } + httpClient.Transport = otelhttp.NewTransport(t) return &Client{ remoteName: name, urlString: conf.URL.String(), Client: httpClient, retryOnRateLimit: conf.RetryOnRateLimit, timeout: time.Duration(conf.Timeout), + writeProtoMsg: writeProtoMsg, + writeCompression: SnappyBlockCompression, }, nil } @@ -198,18 +234,24 @@ type RecoverableError struct { // Store sends a batch of samples to the HTTP endpoint, the request is the proto marshalled // and encoded bytes from codec.go. -func (c *Client) Store(ctx context.Context, req []byte, attempt int) error { +func (c *Client) Store(ctx context.Context, req []byte, attempt int) (WriteResponseStats, error) { httpReq, err := http.NewRequest(http.MethodPost, c.urlString, bytes.NewReader(req)) if err != nil { // Errors from NewRequest are from unparsable URLs, so are not // recoverable. - return err + return WriteResponseStats{}, err } - httpReq.Header.Add("Content-Encoding", "snappy") - httpReq.Header.Set("Content-Type", "application/x-protobuf") + httpReq.Header.Add("Content-Encoding", string(c.writeCompression)) + httpReq.Header.Set("Content-Type", remoteWriteContentTypeHeaders[c.writeProtoMsg]) httpReq.Header.Set("User-Agent", UserAgent) - httpReq.Header.Set("X-Prometheus-Remote-Write-Version", "0.1.0") + if c.writeProtoMsg == config.RemoteWriteProtoMsgV1 { + // Compatibility mode for 1.0. + httpReq.Header.Set(RemoteWriteVersionHeader, RemoteWriteVersion1HeaderValue) + } else { + httpReq.Header.Set(RemoteWriteVersionHeader, RemoteWriteVersion20HeaderValue) + } + if attempt > 0 { httpReq.Header.Set("Retry-Attempt", strconv.Itoa(attempt)) } @@ -224,26 +266,34 @@ func (c *Client) Store(ctx context.Context, req []byte, attempt int) error { if err != nil { // Errors from Client.Do are from (for example) network errors, so are // recoverable. - return RecoverableError{err, defaultBackoff} + return WriteResponseStats{}, RecoverableError{err, defaultBackoff} } defer func() { io.Copy(io.Discard, httpResp.Body) httpResp.Body.Close() }() - if httpResp.StatusCode/100 != 2 { - scanner := bufio.NewScanner(io.LimitReader(httpResp.Body, maxErrMsgLen)) - line := "" - if scanner.Scan() { - line = scanner.Text() - } - err = fmt.Errorf("server returned HTTP status %s: %s", httpResp.Status, line) + // TODO(bwplotka): Pass logger and emit debug on error? + // Parsing error means there were some response header values we can't parse, + // we can continue handling. + rs, _ := ParseWriteResponseStats(httpResp) + + //nolint:usestdlibvars + if httpResp.StatusCode/100 == 2 { + return rs, nil } + + // Handling errors e.g. read potential error in the body. + // TODO(bwplotka): Pass logger and emit debug on error? + body, _ := io.ReadAll(io.LimitReader(httpResp.Body, maxErrMsgLen)) + err = fmt.Errorf("server returned HTTP status %s: %s", httpResp.Status, body) + + //nolint:usestdlibvars if httpResp.StatusCode/100 == 5 || (c.retryOnRateLimit && httpResp.StatusCode == http.StatusTooManyRequests) { - return RecoverableError{err, retryAfterDuration(httpResp.Header.Get("Retry-After"))} + return rs, RecoverableError{err, retryAfterDuration(httpResp.Header.Get("Retry-After"))} } - return err + return rs, err } // retryAfterDuration returns the duration for the Retry-After header. In case of any errors, it @@ -263,12 +313,12 @@ func retryAfterDuration(t string) model.Duration { } // Name uniquely identifies the client. -func (c Client) Name() string { +func (c *Client) Name() string { return c.remoteName } // Endpoint is the remote read or write endpoint. -func (c Client) Endpoint() string { +func (c *Client) Endpoint() string { return c.urlString } @@ -323,6 +373,7 @@ func (c *Client) Read(ctx context.Context, query *prompb.Query) (*prompb.QueryRe return nil, fmt.Errorf("error reading response. HTTP status code: %s: %w", httpResp.Status, err) } + //nolint:usestdlibvars if httpResp.StatusCode/100 != 2 { return nil, fmt.Errorf("remote server %s returned HTTP status %s: %s", c.urlString, httpResp.Status, strings.TrimSpace(string(compressed))) } diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/codec.go b/vendor/github.com/prometheus/prometheus/storage/remote/codec.go index 1228b23f5c..c9220ca42d 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/codec.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/codec.go @@ -22,7 +22,6 @@ import ( "net/http" "slices" "sort" - "strings" "sync" "github.com/gogo/protobuf/proto" @@ -30,10 +29,10 @@ import ( "github.com/prometheus/common/model" "go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp" - "github.com/prometheus/prometheus/model/exemplar" "github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/prompb" + writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2" "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/tsdb/chunkenc" "github.com/prometheus/prometheus/tsdb/chunks" @@ -95,7 +94,7 @@ func EncodeReadResponse(resp *prompb.ReadResponse, w http.ResponseWriter) error // ToQuery builds a Query proto. func ToQuery(from, to int64, matchers []*labels.Matcher, hints *storage.SelectHints) (*prompb.Query, error) { - ms, err := toLabelMatchers(matchers) + ms, err := ToLabelMatchers(matchers) if err != nil { return nil, err } @@ -153,10 +152,10 @@ func ToQueryResult(ss storage.SeriesSet, sampleLimit int) (*prompb.QueryResult, }) case chunkenc.ValHistogram: ts, h := iter.AtHistogram(nil) - histograms = append(histograms, HistogramToHistogramProto(ts, h)) + histograms = append(histograms, prompb.FromIntHistogram(ts, h)) case chunkenc.ValFloatHistogram: ts, fh := iter.AtFloatHistogram(nil) - histograms = append(histograms, FloatHistogramToHistogramProto(ts, fh)) + histograms = append(histograms, prompb.FromFloatHistogram(ts, fh)) default: return nil, ss.Warnings(), fmt.Errorf("unrecognized value type: %s", valType) } @@ -166,7 +165,7 @@ func ToQueryResult(ss storage.SeriesSet, sampleLimit int) (*prompb.QueryResult, } resp.Timeseries = append(resp.Timeseries, &prompb.TimeSeries{ - Labels: labelsToLabelsProto(series.Labels(), nil), + Labels: prompb.FromLabels(series.Labels(), nil), Samples: samples, Histograms: histograms, }) @@ -182,7 +181,7 @@ func FromQueryResult(sortSeries bool, res *prompb.QueryResult) storage.SeriesSet if err := validateLabelsAndMetricName(ts.Labels); err != nil { return errSeriesSet{err: err} } - lbls := labelProtosToLabels(&b, ts.Labels) + lbls := ts.ToLabels(&b, nil) series = append(series, &concreteSeries{labels: lbls, floats: ts.Samples, histograms: ts.Histograms}) } @@ -235,7 +234,7 @@ func StreamChunkedReadResponses( for ss.Next() { series := ss.At() iter = series.Iterator(iter) - lbls = MergeLabels(labelsToLabelsProto(series.Labels(), lbls), sortedExternalLabels) + lbls = MergeLabels(prompb.FromLabels(series.Labels(), lbls), sortedExternalLabels) maxDataLength := maxBytesInFrame for _, lbl := range lbls { @@ -481,21 +480,16 @@ func (c *concreteSeriesIterator) AtHistogram(*histogram.Histogram) (int64, *hist panic("iterator is not on an integer histogram sample") } h := c.series.histograms[c.histogramsCur] - return h.Timestamp, HistogramProtoToHistogram(h) + return h.Timestamp, h.ToIntHistogram() } // AtFloatHistogram implements chunkenc.Iterator. func (c *concreteSeriesIterator) AtFloatHistogram(*histogram.FloatHistogram) (int64, *histogram.FloatHistogram) { - switch c.curValType { - case chunkenc.ValHistogram: + if c.curValType == chunkenc.ValHistogram || c.curValType == chunkenc.ValFloatHistogram { fh := c.series.histograms[c.histogramsCur] - return fh.Timestamp, HistogramProtoToFloatHistogram(fh) - case chunkenc.ValFloatHistogram: - fh := c.series.histograms[c.histogramsCur] - return fh.Timestamp, FloatHistogramProtoToFloatHistogram(fh) - default: - panic("iterator is not on a histogram sample") + return fh.Timestamp, fh.ToFloatHistogram() // integer will be auto-converted. } + panic("iterator is not on a histogram sample") } // AtT implements chunkenc.Iterator. @@ -566,7 +560,8 @@ func validateLabelsAndMetricName(ls []prompb.Label) error { return nil } -func toLabelMatchers(matchers []*labels.Matcher) ([]*prompb.LabelMatcher, error) { +// ToLabelMatchers converts Prometheus label matchers to protobuf label matchers. +func ToLabelMatchers(matchers []*labels.Matcher) ([]*prompb.LabelMatcher, error) { pbMatchers := make([]*prompb.LabelMatcher, 0, len(matchers)) for _, m := range matchers { var mType prompb.LabelMatcher_Type @@ -591,7 +586,7 @@ func toLabelMatchers(matchers []*labels.Matcher) ([]*prompb.LabelMatcher, error) return pbMatchers, nil } -// FromLabelMatchers parses protobuf label matchers to Prometheus label matchers. +// FromLabelMatchers converts protobuf label matchers to Prometheus label matchers. func FromLabelMatchers(matchers []*prompb.LabelMatcher) ([]*labels.Matcher, error) { result := make([]*labels.Matcher, 0, len(matchers)) for _, matcher := range matchers { @@ -617,141 +612,6 @@ func FromLabelMatchers(matchers []*prompb.LabelMatcher) ([]*labels.Matcher, erro return result, nil } -func exemplarProtoToExemplar(b *labels.ScratchBuilder, ep prompb.Exemplar) exemplar.Exemplar { - timestamp := ep.Timestamp - - return exemplar.Exemplar{ - Labels: labelProtosToLabels(b, ep.Labels), - Value: ep.Value, - Ts: timestamp, - HasTs: timestamp != 0, - } -} - -// HistogramProtoToHistogram extracts a (normal integer) Histogram from the -// provided proto message. The caller has to make sure that the proto message -// represents an integer histogram and not a float histogram, or it panics. -func HistogramProtoToHistogram(hp prompb.Histogram) *histogram.Histogram { - if hp.IsFloatHistogram() { - panic("HistogramProtoToHistogram called with a float histogram") - } - return &histogram.Histogram{ - CounterResetHint: histogram.CounterResetHint(hp.ResetHint), - Schema: hp.Schema, - ZeroThreshold: hp.ZeroThreshold, - ZeroCount: hp.GetZeroCountInt(), - Count: hp.GetCountInt(), - Sum: hp.Sum, - PositiveSpans: spansProtoToSpans(hp.GetPositiveSpans()), - PositiveBuckets: hp.GetPositiveDeltas(), - NegativeSpans: spansProtoToSpans(hp.GetNegativeSpans()), - NegativeBuckets: hp.GetNegativeDeltas(), - } -} - -// FloatHistogramProtoToFloatHistogram extracts a float Histogram from the -// provided proto message to a Float Histogram. The caller has to make sure that -// the proto message represents a float histogram and not an integer histogram, -// or it panics. -func FloatHistogramProtoToFloatHistogram(hp prompb.Histogram) *histogram.FloatHistogram { - if !hp.IsFloatHistogram() { - panic("FloatHistogramProtoToFloatHistogram called with an integer histogram") - } - return &histogram.FloatHistogram{ - CounterResetHint: histogram.CounterResetHint(hp.ResetHint), - Schema: hp.Schema, - ZeroThreshold: hp.ZeroThreshold, - ZeroCount: hp.GetZeroCountFloat(), - Count: hp.GetCountFloat(), - Sum: hp.Sum, - PositiveSpans: spansProtoToSpans(hp.GetPositiveSpans()), - PositiveBuckets: hp.GetPositiveCounts(), - NegativeSpans: spansProtoToSpans(hp.GetNegativeSpans()), - NegativeBuckets: hp.GetNegativeCounts(), - } -} - -// HistogramProtoToFloatHistogram extracts and converts a (normal integer) histogram from the provided proto message -// to a float histogram. The caller has to make sure that the proto message represents an integer histogram and not a -// float histogram, or it panics. -func HistogramProtoToFloatHistogram(hp prompb.Histogram) *histogram.FloatHistogram { - if hp.IsFloatHistogram() { - panic("HistogramProtoToFloatHistogram called with a float histogram") - } - return &histogram.FloatHistogram{ - CounterResetHint: histogram.CounterResetHint(hp.ResetHint), - Schema: hp.Schema, - ZeroThreshold: hp.ZeroThreshold, - ZeroCount: float64(hp.GetZeroCountInt()), - Count: float64(hp.GetCountInt()), - Sum: hp.Sum, - PositiveSpans: spansProtoToSpans(hp.GetPositiveSpans()), - PositiveBuckets: deltasToCounts(hp.GetPositiveDeltas()), - NegativeSpans: spansProtoToSpans(hp.GetNegativeSpans()), - NegativeBuckets: deltasToCounts(hp.GetNegativeDeltas()), - } -} - -func spansProtoToSpans(s []prompb.BucketSpan) []histogram.Span { - spans := make([]histogram.Span, len(s)) - for i := 0; i < len(s); i++ { - spans[i] = histogram.Span{Offset: s[i].Offset, Length: s[i].Length} - } - - return spans -} - -func deltasToCounts(deltas []int64) []float64 { - counts := make([]float64, len(deltas)) - var cur float64 - for i, d := range deltas { - cur += float64(d) - counts[i] = cur - } - return counts -} - -func HistogramToHistogramProto(timestamp int64, h *histogram.Histogram) prompb.Histogram { - return prompb.Histogram{ - Count: &prompb.Histogram_CountInt{CountInt: h.Count}, - Sum: h.Sum, - Schema: h.Schema, - ZeroThreshold: h.ZeroThreshold, - ZeroCount: &prompb.Histogram_ZeroCountInt{ZeroCountInt: h.ZeroCount}, - NegativeSpans: spansToSpansProto(h.NegativeSpans), - NegativeDeltas: h.NegativeBuckets, - PositiveSpans: spansToSpansProto(h.PositiveSpans), - PositiveDeltas: h.PositiveBuckets, - ResetHint: prompb.Histogram_ResetHint(h.CounterResetHint), - Timestamp: timestamp, - } -} - -func FloatHistogramToHistogramProto(timestamp int64, fh *histogram.FloatHistogram) prompb.Histogram { - return prompb.Histogram{ - Count: &prompb.Histogram_CountFloat{CountFloat: fh.Count}, - Sum: fh.Sum, - Schema: fh.Schema, - ZeroThreshold: fh.ZeroThreshold, - ZeroCount: &prompb.Histogram_ZeroCountFloat{ZeroCountFloat: fh.ZeroCount}, - NegativeSpans: spansToSpansProto(fh.NegativeSpans), - NegativeCounts: fh.NegativeBuckets, - PositiveSpans: spansToSpansProto(fh.PositiveSpans), - PositiveCounts: fh.PositiveBuckets, - ResetHint: prompb.Histogram_ResetHint(fh.CounterResetHint), - Timestamp: timestamp, - } -} - -func spansToSpansProto(s []histogram.Span) []prompb.BucketSpan { - spans := make([]prompb.BucketSpan, len(s)) - for i := 0; i < len(s); i++ { - spans[i] = prompb.BucketSpan{Offset: s[i].Offset, Length: s[i].Length} - } - - return spans -} - // LabelProtosToMetric unpack a []*prompb.Label to a model.Metric. func LabelProtosToMetric(labelPairs []*prompb.Label) model.Metric { metric := make(model.Metric, len(labelPairs)) @@ -761,41 +621,9 @@ func LabelProtosToMetric(labelPairs []*prompb.Label) model.Metric { return metric } -func labelProtosToLabels(b *labels.ScratchBuilder, labelPairs []prompb.Label) labels.Labels { - b.Reset() - for _, l := range labelPairs { - b.Add(l.Name, l.Value) - } - b.Sort() - return b.Labels() -} - -// labelsToLabelsProto transforms labels into prompb labels. The buffer slice -// will be used to avoid allocations if it is big enough to store the labels. -func labelsToLabelsProto(lbls labels.Labels, buf []prompb.Label) []prompb.Label { - result := buf[:0] - lbls.Range(func(l labels.Label) { - result = append(result, prompb.Label{ - Name: l.Name, - Value: l.Value, - }) - }) - return result -} - -// metricTypeToMetricTypeProto transforms a Prometheus metricType into prompb metricType. Since the former is a string we need to transform it to an enum. -func metricTypeToMetricTypeProto(t model.MetricType) prompb.MetricMetadata_MetricType { - mt := strings.ToUpper(string(t)) - v, ok := prompb.MetricMetadata_MetricType_value[mt] - if !ok { - return prompb.MetricMetadata_UNKNOWN - } - - return prompb.MetricMetadata_MetricType(v) -} - // DecodeWriteRequest from an io.Reader into a prompb.WriteRequest, handling // snappy decompression. +// Used also by documentation/examples/remote_storage. func DecodeWriteRequest(r io.Reader) (*prompb.WriteRequest, error) { compressed, err := io.ReadAll(r) if err != nil { @@ -815,6 +643,28 @@ func DecodeWriteRequest(r io.Reader) (*prompb.WriteRequest, error) { return &req, nil } +// DecodeWriteV2Request from an io.Reader into a writev2.Request, handling +// snappy decompression. +// Used also by documentation/examples/remote_storage. +func DecodeWriteV2Request(r io.Reader) (*writev2.Request, error) { + compressed, err := io.ReadAll(r) + if err != nil { + return nil, err + } + + reqBuf, err := snappy.Decode(nil, compressed) + if err != nil { + return nil, err + } + + var req writev2.Request + if err := proto.Unmarshal(reqBuf, &req); err != nil { + return nil, err + } + + return &req, nil +} + func DecodeOTLPWriteRequest(r *http.Request) (pmetricotlp.ExportRequest, error) { contentType := r.Header.Get("Content-Type") var decoderFunc func(buf []byte) (pmetricotlp.ExportRequest, error) diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/max_timestamp.go b/vendor/github.com/prometheus/prometheus/storage/remote/max_timestamp.go index 3a0a6d6fd4..bb67d9bb98 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/max_timestamp.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/max_timestamp.go @@ -39,9 +39,3 @@ func (m *maxTimestamp) Get() float64 { defer m.mtx.Unlock() return m.value } - -func (m *maxTimestamp) Collect(c chan<- prometheus.Metric) { - if m.Get() > 0 { - m.Gauge.Collect(c) - } -} diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/metadata_watcher.go b/vendor/github.com/prometheus/prometheus/storage/remote/metadata_watcher.go index abfea3c7b0..fdcd668f56 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/metadata_watcher.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/metadata_watcher.go @@ -27,7 +27,7 @@ import ( // MetadataAppender is an interface used by the Metadata Watcher to send metadata, It is read from the scrape manager, on to somewhere else. type MetadataAppender interface { - AppendMetadata(context.Context, []scrape.MetricMetadata) + AppendWatcherMetadata(context.Context, []scrape.MetricMetadata) } // Watchable represents from where we fetch active targets for metadata. @@ -146,7 +146,7 @@ func (mw *MetadataWatcher) collect() { } // Blocks until the metadata is sent to the remote write endpoint or hardShutdownContext is expired. - mw.writer.AppendMetadata(mw.hardShutdownCtx, metadata) + mw.writer.AppendWatcherMetadata(mw.hardShutdownCtx, metadata) } func (mw *MetadataWatcher) ready() bool { diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/normalize_name.go b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/normalize_name.go index 4cf36671aa..71bba40e48 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/normalize_name.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/normalize_name.go @@ -29,7 +29,6 @@ import ( // Prometheus best practices for units: https://prometheus.io/docs/practices/naming/#base-units // OpenMetrics specification for units: https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#units-and-base-units var unitMap = map[string]string{ - // Time "d": "days", "h": "hours", @@ -111,7 +110,6 @@ func BuildCompliantName(metric pmetric.Metric, namespace string, addMetricSuffix // Build a normalized name for the specified metric func normalizeName(metric pmetric.Metric, namespace string) string { - // Split metric name in "tokens" (remove all non-alphanumeric) nameTokens := strings.FieldsFunc( metric.Name(), diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/unit_to_ucum.go b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/unit_to_ucum.go index 1f8bf1a638..39a42734d7 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/unit_to_ucum.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheus/unit_to_ucum.go @@ -19,7 +19,6 @@ package prometheus import "strings" var wordToUCUM = map[string]string{ - // Time "days": "d", "hours": "h", diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/helper.go b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/helper.go index 68be82e443..2571338532 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/helper.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/helper.go @@ -182,12 +182,13 @@ func createAttributes(resource pcommon.Resource, attributes pcommon.Map, externa if i+1 >= len(extras) { break } - _, found := l[extras[i]] + + name := extras[i] + _, found := l[name] if found && logOnOverwrite { - log.Println("label " + extras[i] + " is overwritten. Check if Prometheus reserved labels are used.") + log.Println("label " + name + " is overwritten. Check if Prometheus reserved labels are used.") } // internal labels should be maintained - name := extras[i] if !(len(name) > 4 && name[:2] == "__" && name[len(name)-2:] == "__") { name = prometheustranslator.NormalizeLabel(name) } @@ -219,6 +220,13 @@ func isValidAggregationTemporality(metric pmetric.Metric) bool { return false } +// addHistogramDataPoints adds OTel histogram data points to the corresponding Prometheus time series +// as classical histogram samples. +// +// Note that we can't convert to native histograms, since these have exponential buckets and don't line up +// with the user defined bucket boundaries of non-exponential OTel histograms. +// However, work is under way to resolve this shortcoming through a feature called native histograms custom buckets: +// https://github.com/prometheus/prometheus/issues/13485. func (c *PrometheusConverter) addHistogramDataPoints(dataPoints pmetric.HistogramDataPointSlice, resource pcommon.Resource, settings Settings, baseName string) { for x := 0; x < dataPoints.Len(); x++ { diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/histograms.go b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/histograms.go index 31d343fe4d..21b3f5dd9f 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/histograms.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite/histograms.go @@ -30,10 +30,18 @@ import ( const defaultZeroThreshold = 1e-128 +// addExponentialHistogramDataPoints adds OTel exponential histogram data points to the corresponding time series +// as native histogram samples. func (c *PrometheusConverter) addExponentialHistogramDataPoints(dataPoints pmetric.ExponentialHistogramDataPointSlice, - resource pcommon.Resource, settings Settings, baseName string) error { + resource pcommon.Resource, settings Settings, promName string) error { for x := 0; x < dataPoints.Len(); x++ { pt := dataPoints.At(x) + + histogram, err := exponentialToNativeHistogram(pt) + if err != nil { + return err + } + lbls := createAttributes( resource, pt.Attributes(), @@ -41,14 +49,9 @@ func (c *PrometheusConverter) addExponentialHistogramDataPoints(dataPoints pmetr nil, true, model.MetricNameLabel, - baseName, + promName, ) ts, _ := c.getOrCreateTimeSeries(lbls) - - histogram, err := exponentialToNativeHistogram(pt) - if err != nil { - return err - } ts.Histograms = append(ts.Histograms, histogram) exemplars := getPromExemplars[pmetric.ExponentialHistogramDataPoint](pt) @@ -58,7 +61,7 @@ func (c *PrometheusConverter) addExponentialHistogramDataPoints(dataPoints pmetr return nil } -// exponentialToNativeHistogram translates OTel Exponential Histogram data point +// exponentialToNativeHistogram translates OTel Exponential Histogram data point // to Prometheus Native Histogram. func exponentialToNativeHistogram(p pmetric.ExponentialHistogramDataPoint) (prompb.Histogram, error) { scale := p.Scale() diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/queue_manager.go b/vendor/github.com/prometheus/prometheus/storage/remote/queue_manager.go index 01d2db06a5..5b59288e6c 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/queue_manager.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/queue_manager.go @@ -16,6 +16,7 @@ package remote import ( "context" "errors" + "fmt" "math" "strconv" "sync" @@ -35,9 +36,11 @@ import ( "github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/model/metadata" "github.com/prometheus/prometheus/model/relabel" "github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/prompb" + writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2" "github.com/prometheus/prometheus/scrape" "github.com/prometheus/prometheus/tsdb/chunks" "github.com/prometheus/prometheus/tsdb/record" @@ -229,7 +232,7 @@ func newQueueManagerMetrics(r prometheus.Registerer, rn, e string) *queueManager Namespace: namespace, Subsystem: subsystem, Name: "queue_highest_sent_timestamp_seconds", - Help: "Timestamp from a WAL sample, the highest timestamp successfully sent by this queue, in seconds since epoch.", + Help: "Timestamp from a WAL sample, the highest timestamp successfully sent by this queue, in seconds since epoch. Initialized to 0 when no data has been sent yet.", ConstLabels: constLabels, }), } @@ -388,7 +391,7 @@ func (m *queueManagerMetrics) unregister() { // external timeseries database. type WriteClient interface { // Store stores the given samples in the remote storage. - Store(context.Context, []byte, int) error + Store(ctx context.Context, req []byte, retryAttempt int) (WriteResponseStats, error) // Name uniquely identifies the remote storage. Name() string // Endpoint is the remote read or write endpoint for the storage client. @@ -417,11 +420,14 @@ type QueueManager struct { clientMtx sync.RWMutex storeClient WriteClient + protoMsg config.RemoteWriteProtoMsg + enc Compression - seriesMtx sync.Mutex // Covers seriesLabels, droppedSeries and builder. - seriesLabels map[chunks.HeadSeriesRef]labels.Labels - droppedSeries map[chunks.HeadSeriesRef]struct{} - builder *labels.Builder + seriesMtx sync.Mutex // Covers seriesLabels, seriesMetadata, droppedSeries and builder. + seriesLabels map[chunks.HeadSeriesRef]labels.Labels + seriesMetadata map[chunks.HeadSeriesRef]*metadata.Metadata + droppedSeries map[chunks.HeadSeriesRef]struct{} + builder *labels.Builder seriesSegmentMtx sync.Mutex // Covers seriesSegmentIndexes - if you also lock seriesMtx, take seriesMtx first. seriesSegmentIndexes map[chunks.HeadSeriesRef]int @@ -462,6 +468,7 @@ func NewQueueManager( sm ReadyScrapeManager, enableExemplarRemoteWrite bool, enableNativeHistogramRemoteWrite bool, + protoMsg config.RemoteWriteProtoMsg, ) *QueueManager { if logger == nil { logger = log.NewNopLogger() @@ -486,6 +493,7 @@ func NewQueueManager( sendNativeHistograms: enableNativeHistogramRemoteWrite, seriesLabels: make(map[chunks.HeadSeriesRef]labels.Labels), + seriesMetadata: make(map[chunks.HeadSeriesRef]*metadata.Metadata), seriesSegmentIndexes: make(map[chunks.HeadSeriesRef]int), droppedSeries: make(map[chunks.HeadSeriesRef]struct{}), builder: labels.NewBuilder(labels.EmptyLabels()), @@ -502,9 +510,26 @@ func NewQueueManager( metrics: metrics, interner: interner, highestRecvTimestamp: highestRecvTimestamp, + + protoMsg: protoMsg, + enc: SnappyBlockCompression, // Hardcoded for now, but scaffolding exists for likely future use. + } + + walMetadata := false + if t.protoMsg != config.RemoteWriteProtoMsgV1 { + walMetadata = true + } + t.watcher = wlog.NewWatcher(watcherMetrics, readerMetrics, logger, client.Name(), t, dir, enableExemplarRemoteWrite, enableNativeHistogramRemoteWrite, walMetadata) + + // The current MetadataWatcher implementation is mutually exclusive + // with the new approach, which stores metadata as WAL records and + // ships them alongside series. If both mechanisms are set, the new one + // takes precedence by implicitly disabling the older one. + if t.mcfg.Send && t.protoMsg != config.RemoteWriteProtoMsgV1 { + level.Warn(logger).Log("msg", "usage of 'metadata_config.send' is redundant when using remote write v2 (or higher) as metadata will always be gathered from the WAL and included for every series within each write request") + t.mcfg.Send = false } - t.watcher = wlog.NewWatcher(watcherMetrics, readerMetrics, logger, client.Name(), t, dir, enableExemplarRemoteWrite, enableNativeHistogramRemoteWrite) if t.mcfg.Send { t.metadataWatcher = NewMetadataWatcher(logger, sm, client.Name(), t, t.mcfg.SendInterval, flushDeadline) } @@ -513,14 +538,21 @@ func NewQueueManager( return t } -// AppendMetadata sends metadata to the remote storage. Metadata is sent in batches, but is not parallelized. -func (t *QueueManager) AppendMetadata(ctx context.Context, metadata []scrape.MetricMetadata) { +// AppendWatcherMetadata sends metadata to the remote storage. Metadata is sent in batches, but is not parallelized. +// This is only used for the metadata_config.send setting and 1.x Remote Write. +func (t *QueueManager) AppendWatcherMetadata(ctx context.Context, metadata []scrape.MetricMetadata) { + // no op for any newer proto format, which will cache metadata sent to it from the WAL watcher. + if t.protoMsg != config.RemoteWriteProtoMsgV1 { + return + } + + // 1.X will still get metadata in batches. mm := make([]prompb.MetricMetadata, 0, len(metadata)) for _, entry := range metadata { mm = append(mm, prompb.MetricMetadata{ MetricFamilyName: entry.Metric, Help: entry.Help, - Type: metricTypeToMetricTypeProto(entry.Type), + Type: prompb.FromMetadataType(entry.Type), Unit: entry.Unit, }) } @@ -541,8 +573,8 @@ func (t *QueueManager) AppendMetadata(ctx context.Context, metadata []scrape.Met } func (t *QueueManager) sendMetadataWithBackoff(ctx context.Context, metadata []prompb.MetricMetadata, pBuf *proto.Buffer) error { - // Build the WriteRequest with no samples. - req, _, _, err := buildWriteRequest(t.logger, nil, metadata, pBuf, nil, nil) + // Build the WriteRequest with no samples (v1 flow). + req, _, _, err := buildWriteRequest(t.logger, nil, metadata, pBuf, nil, nil, t.enc) if err != nil { return err } @@ -565,14 +597,15 @@ func (t *QueueManager) sendMetadataWithBackoff(ctx context.Context, metadata []p } begin := time.Now() - err := t.storeClient.Store(ctx, req, try) + // Ignoring WriteResponseStats, because there is nothing for metadata, since it's + // embedded in v2 calls now, and we do v1 here. + _, err := t.storeClient.Store(ctx, req, try) t.metrics.sentBatchDuration.Observe(time.Since(begin).Seconds()) if err != nil { span.RecordError(err) return err } - return nil } @@ -628,6 +661,36 @@ func isTimeSeriesOldFilter(metrics *queueManagerMetrics, baseTime time.Time, sam } } +func isV2TimeSeriesOldFilter(metrics *queueManagerMetrics, baseTime time.Time, sampleAgeLimit time.Duration) func(ts writev2.TimeSeries) bool { + return func(ts writev2.TimeSeries) bool { + if sampleAgeLimit == 0 { + // If sampleAgeLimit is unset, then we never skip samples due to their age. + return false + } + switch { + // Only the first element should be set in the series, therefore we only check the first element. + case len(ts.Samples) > 0: + if isSampleOld(baseTime, sampleAgeLimit, ts.Samples[0].Timestamp) { + metrics.droppedSamplesTotal.WithLabelValues(reasonTooOld).Inc() + return true + } + case len(ts.Histograms) > 0: + if isSampleOld(baseTime, sampleAgeLimit, ts.Histograms[0].Timestamp) { + metrics.droppedHistogramsTotal.WithLabelValues(reasonTooOld).Inc() + return true + } + case len(ts.Exemplars) > 0: + if isSampleOld(baseTime, sampleAgeLimit, ts.Exemplars[0].Timestamp) { + metrics.droppedExemplarsTotal.WithLabelValues(reasonTooOld).Inc() + return true + } + default: + return false + } + return false + } +} + // Append queues a sample to be sent to the remote storage. Blocks until all samples are // enqueued on their shards or a shutdown signal is received. func (t *QueueManager) Append(samples []record.RefSample) bool { @@ -651,6 +714,9 @@ outer: t.seriesMtx.Unlock() continue } + // TODO(cstyan): Handle or at least log an error if no metadata is found. + // See https://github.com/prometheus/prometheus/issues/14405 + meta := t.seriesMetadata[s.Ref] t.seriesMtx.Unlock() // Start with a very small backoff. This should not be t.cfg.MinBackoff // as it can happen without errors, and we want to pickup work after @@ -665,6 +731,7 @@ outer: } if t.shards.enqueue(s.Ref, timeSeries{ seriesLabels: lbls, + metadata: meta, timestamp: s.T, value: s.V, sType: tSample, @@ -710,6 +777,7 @@ outer: t.seriesMtx.Unlock() continue } + meta := t.seriesMetadata[e.Ref] t.seriesMtx.Unlock() // This will only loop if the queues are being resharded. backoff := t.cfg.MinBackoff @@ -721,6 +789,7 @@ outer: } if t.shards.enqueue(e.Ref, timeSeries{ seriesLabels: lbls, + metadata: meta, timestamp: e.T, value: e.V, exemplarLabels: e.Labels, @@ -764,6 +833,7 @@ outer: t.seriesMtx.Unlock() continue } + meta := t.seriesMetadata[h.Ref] t.seriesMtx.Unlock() backoff := model.Duration(5 * time.Millisecond) @@ -775,6 +845,7 @@ outer: } if t.shards.enqueue(h.Ref, timeSeries{ seriesLabels: lbls, + metadata: meta, timestamp: h.T, histogram: h.H, sType: tHistogram, @@ -817,6 +888,7 @@ outer: t.seriesMtx.Unlock() continue } + meta := t.seriesMetadata[h.Ref] t.seriesMtx.Unlock() backoff := model.Duration(5 * time.Millisecond) @@ -828,6 +900,7 @@ outer: } if t.shards.enqueue(h.Ref, timeSeries{ seriesLabels: lbls, + metadata: meta, timestamp: h.T, floatHistogram: h.FH, sType: tFloatHistogram, @@ -924,6 +997,23 @@ func (t *QueueManager) StoreSeries(series []record.RefSeries, index int) { } } +// StoreMetadata keeps track of known series' metadata for lookups when sending samples to remote. +func (t *QueueManager) StoreMetadata(meta []record.RefMetadata) { + if t.protoMsg == config.RemoteWriteProtoMsgV1 { + return + } + + t.seriesMtx.Lock() + defer t.seriesMtx.Unlock() + for _, m := range meta { + t.seriesMetadata[m.Ref] = &metadata.Metadata{ + Type: record.ToMetricType(m.Type), + Unit: m.Unit, + Help: m.Help, + } + } +} + // UpdateSeriesSegment updates the segment number held against the series, // so we can trim older ones in SeriesReset. func (t *QueueManager) UpdateSeriesSegment(series []record.RefSeries, index int) { @@ -949,6 +1039,7 @@ func (t *QueueManager) SeriesReset(index int) { delete(t.seriesSegmentIndexes, k) t.releaseLabels(t.seriesLabels[k]) delete(t.seriesLabels, k) + delete(t.seriesMetadata, k) delete(t.droppedSeries, k) } } @@ -1164,6 +1255,7 @@ type shards struct { samplesDroppedOnHardShutdown atomic.Uint32 exemplarsDroppedOnHardShutdown atomic.Uint32 histogramsDroppedOnHardShutdown atomic.Uint32 + metadataDroppedOnHardShutdown atomic.Uint32 } // start the shards; must be called before any call to enqueue. @@ -1192,6 +1284,7 @@ func (s *shards) start(n int) { s.samplesDroppedOnHardShutdown.Store(0) s.exemplarsDroppedOnHardShutdown.Store(0) s.histogramsDroppedOnHardShutdown.Store(0) + s.metadataDroppedOnHardShutdown.Store(0) for i := 0; i < n; i++ { go s.runShard(hardShutdownCtx, i, newQueues[i]) } @@ -1224,12 +1317,16 @@ func (s *shards) stop() { // Force an unclean shutdown. s.hardShutdown() <-s.done - if dropped := s.samplesDroppedOnHardShutdown.Load(); dropped > 0 { - level.Error(s.qm.logger).Log("msg", "Failed to flush all samples on shutdown", "count", dropped) - } - if dropped := s.exemplarsDroppedOnHardShutdown.Load(); dropped > 0 { - level.Error(s.qm.logger).Log("msg", "Failed to flush all exemplars on shutdown", "count", dropped) + + // Log error for any dropped samples, exemplars, or histograms. + logDroppedError := func(t string, counter atomic.Uint32) { + if dropped := counter.Load(); dropped > 0 { + level.Error(s.qm.logger).Log("msg", fmt.Sprintf("Failed to flush all %s on shutdown", t), "count", dropped) + } } + logDroppedError("samples", s.samplesDroppedOnHardShutdown) + logDroppedError("exemplars", s.exemplarsDroppedOnHardShutdown) + logDroppedError("histograms", s.histogramsDroppedOnHardShutdown) } // enqueue data (sample or exemplar). If the shard is full, shutting down, or @@ -1240,7 +1337,6 @@ func (s *shards) stop() { func (s *shards) enqueue(ref chunks.HeadSeriesRef, data timeSeries) bool { s.mtx.RLock() defer s.mtx.RUnlock() - shard := uint64(ref) % uint64(len(s.queues)) select { case <-s.softShutdown: @@ -1283,6 +1379,7 @@ type timeSeries struct { value float64 histogram *histogram.Histogram floatHistogram *histogram.FloatHistogram + metadata *metadata.Metadata timestamp int64 exemplarLabels labels.Labels // The type of series: sample, exemplar, or histogram. @@ -1296,6 +1393,7 @@ const ( tExemplar tHistogram tFloatHistogram + tMetadata ) func newQueue(batchSize, capacity int) *queue { @@ -1319,6 +1417,10 @@ func newQueue(batchSize, capacity int) *queue { func (q *queue) Append(datum timeSeries) bool { q.batchMtx.Lock() defer q.batchMtx.Unlock() + // TODO(cstyan): Check if metadata now means we've reduced the total # of samples + // we can batch together here, and if so find a way to not include metadata + // in the batch size calculation. + // See https://github.com/prometheus/prometheus/issues/14405 q.batch = append(q.batch, datum) if len(q.batch) == cap(q.batch) { select { @@ -1342,7 +1444,6 @@ func (q *queue) Chan() <-chan []timeSeries { func (q *queue) Batch() []timeSeries { q.batchMtx.Lock() defer q.batchMtx.Unlock() - select { case batch := <-q.batchQueue: return batch @@ -1368,6 +1469,8 @@ func (q *queue) FlushAndShutdown(done <-chan struct{}) { for q.tryEnqueueingBatch(done) { time.Sleep(time.Second) } + q.batchMtx.Lock() + defer q.batchMtx.Unlock() q.batch = nil close(q.batchQueue) } @@ -1414,19 +1517,23 @@ func (s *shards) runShard(ctx context.Context, shardID int, queue *queue) { }() shardNum := strconv.Itoa(shardID) + symbolTable := writev2.NewSymbolTable() // Send batches of at most MaxSamplesPerSend samples to the remote storage. // If we have fewer samples than that, flush them out after a deadline anyways. var ( max = s.qm.cfg.MaxSamplesPerSend - pBuf = proto.NewBuffer(nil) - buf []byte + pBuf = proto.NewBuffer(nil) + pBufRaw []byte + buf []byte ) + // TODO(@tpaschalis) Should we also raise the max if we have WAL metadata? if s.qm.sendExemplars { max += int(float64(max) * 0.1) } + // TODO: Dry all of this, we should make an interface/generic for the timeseries type. batchQueue := queue.Chan() pendingData := make([]prompb.TimeSeries, max) for i := range pendingData { @@ -1435,6 +1542,10 @@ func (s *shards) runShard(ctx context.Context, shardID int, queue *queue) { pendingData[i].Exemplars = []prompb.Exemplar{{}} } } + pendingDataV2 := make([]writev2.TimeSeries, max) + for i := range pendingDataV2 { + pendingDataV2[i].Samples = []writev2.Sample{{}} + } timer := time.NewTimer(time.Duration(s.qm.cfg.BatchSendDeadline)) stop := func() { @@ -1447,6 +1558,24 @@ func (s *shards) runShard(ctx context.Context, shardID int, queue *queue) { } defer stop() + sendBatch := func(batch []timeSeries, protoMsg config.RemoteWriteProtoMsg, enc Compression, timer bool) { + switch protoMsg { + case config.RemoteWriteProtoMsgV1: + nPendingSamples, nPendingExemplars, nPendingHistograms := populateTimeSeries(batch, pendingData, s.qm.sendExemplars, s.qm.sendNativeHistograms) + n := nPendingSamples + nPendingExemplars + nPendingHistograms + if timer { + level.Debug(s.qm.logger).Log("msg", "runShard timer ticked, sending buffered data", "samples", nPendingSamples, + "exemplars", nPendingExemplars, "shard", shardNum, "histograms", nPendingHistograms) + } + _ = s.sendSamples(ctx, pendingData[:n], nPendingSamples, nPendingExemplars, nPendingHistograms, pBuf, &buf, enc) + case config.RemoteWriteProtoMsgV2: + nPendingSamples, nPendingExemplars, nPendingHistograms, nPendingMetadata := populateV2TimeSeries(&symbolTable, batch, pendingDataV2, s.qm.sendExemplars, s.qm.sendNativeHistograms) + n := nPendingSamples + nPendingExemplars + nPendingHistograms + _ = s.sendV2Samples(ctx, pendingDataV2[:n], symbolTable.Symbols(), nPendingSamples, nPendingExemplars, nPendingHistograms, nPendingMetadata, &pBufRaw, &buf, enc) + symbolTable.Reset() + } + } + for { select { case <-ctx.Done(): @@ -1470,10 +1599,11 @@ func (s *shards) runShard(ctx context.Context, shardID int, queue *queue) { if !ok { return } - nPendingSamples, nPendingExemplars, nPendingHistograms := s.populateTimeSeries(batch, pendingData) + + sendBatch(batch, s.qm.protoMsg, s.qm.enc, false) + // TODO(bwplotka): Previously the return was between popular and send. + // Consider this when DRY-ing https://github.com/prometheus/prometheus/issues/14409 queue.ReturnForReuse(batch) - n := nPendingSamples + nPendingExemplars + nPendingHistograms - s.sendSamples(ctx, pendingData[:n], nPendingSamples, nPendingExemplars, nPendingHistograms, pBuf, &buf) stop() timer.Reset(time.Duration(s.qm.cfg.BatchSendDeadline)) @@ -1481,11 +1611,7 @@ func (s *shards) runShard(ctx context.Context, shardID int, queue *queue) { case <-timer.C: batch := queue.Batch() if len(batch) > 0 { - nPendingSamples, nPendingExemplars, nPendingHistograms := s.populateTimeSeries(batch, pendingData) - n := nPendingSamples + nPendingExemplars + nPendingHistograms - level.Debug(s.qm.logger).Log("msg", "runShard timer ticked, sending buffered data", "samples", nPendingSamples, - "exemplars", nPendingExemplars, "shard", shardNum, "histograms", nPendingHistograms) - s.sendSamples(ctx, pendingData[:n], nPendingSamples, nPendingExemplars, nPendingHistograms, pBuf, &buf) + sendBatch(batch, s.qm.protoMsg, s.qm.enc, true) } queue.ReturnForReuse(batch) timer.Reset(time.Duration(s.qm.cfg.BatchSendDeadline)) @@ -1493,21 +1619,22 @@ func (s *shards) runShard(ctx context.Context, shardID int, queue *queue) { } } -func (s *shards) populateTimeSeries(batch []timeSeries, pendingData []prompb.TimeSeries) (int, int, int) { +func populateTimeSeries(batch []timeSeries, pendingData []prompb.TimeSeries, sendExemplars, sendNativeHistograms bool) (int, int, int) { var nPendingSamples, nPendingExemplars, nPendingHistograms int for nPending, d := range batch { pendingData[nPending].Samples = pendingData[nPending].Samples[:0] - if s.qm.sendExemplars { + if sendExemplars { pendingData[nPending].Exemplars = pendingData[nPending].Exemplars[:0] } - if s.qm.sendNativeHistograms { + if sendNativeHistograms { pendingData[nPending].Histograms = pendingData[nPending].Histograms[:0] } // Number of pending samples is limited by the fact that sendSamples (via sendSamplesWithBackoff) // retries endlessly, so once we reach max samples, if we can never send to the endpoint we'll // stop reading from the queue. This makes it safe to reference pendingSamples by index. - pendingData[nPending].Labels = labelsToLabelsProto(d.seriesLabels, pendingData[nPending].Labels) + pendingData[nPending].Labels = prompb.FromLabels(d.seriesLabels, pendingData[nPending].Labels) + switch d.sType { case tSample: pendingData[nPending].Samples = append(pendingData[nPending].Samples, prompb.Sample{ @@ -1517,37 +1644,64 @@ func (s *shards) populateTimeSeries(batch []timeSeries, pendingData []prompb.Tim nPendingSamples++ case tExemplar: pendingData[nPending].Exemplars = append(pendingData[nPending].Exemplars, prompb.Exemplar{ - Labels: labelsToLabelsProto(d.exemplarLabels, nil), + Labels: prompb.FromLabels(d.exemplarLabels, nil), Value: d.value, Timestamp: d.timestamp, }) nPendingExemplars++ case tHistogram: - pendingData[nPending].Histograms = append(pendingData[nPending].Histograms, HistogramToHistogramProto(d.timestamp, d.histogram)) + pendingData[nPending].Histograms = append(pendingData[nPending].Histograms, prompb.FromIntHistogram(d.timestamp, d.histogram)) nPendingHistograms++ case tFloatHistogram: - pendingData[nPending].Histograms = append(pendingData[nPending].Histograms, FloatHistogramToHistogramProto(d.timestamp, d.floatHistogram)) + pendingData[nPending].Histograms = append(pendingData[nPending].Histograms, prompb.FromFloatHistogram(d.timestamp, d.floatHistogram)) nPendingHistograms++ } } return nPendingSamples, nPendingExemplars, nPendingHistograms } -func (s *shards) sendSamples(ctx context.Context, samples []prompb.TimeSeries, sampleCount, exemplarCount, histogramCount int, pBuf *proto.Buffer, buf *[]byte) { +func (s *shards) sendSamples(ctx context.Context, samples []prompb.TimeSeries, sampleCount, exemplarCount, histogramCount int, pBuf *proto.Buffer, buf *[]byte, enc Compression) error { begin := time.Now() - err := s.sendSamplesWithBackoff(ctx, samples, sampleCount, exemplarCount, histogramCount, pBuf, buf) + rs, err := s.sendSamplesWithBackoff(ctx, samples, sampleCount, exemplarCount, histogramCount, 0, pBuf, buf, enc) + s.updateMetrics(ctx, err, sampleCount, exemplarCount, histogramCount, 0, rs, time.Since(begin)) + return err +} + +// TODO(bwplotka): DRY this (have one logic for both v1 and v2). +// See https://github.com/prometheus/prometheus/issues/14409 +func (s *shards) sendV2Samples(ctx context.Context, samples []writev2.TimeSeries, labels []string, sampleCount, exemplarCount, histogramCount, metadataCount int, pBuf, buf *[]byte, enc Compression) error { + begin := time.Now() + rs, err := s.sendV2SamplesWithBackoff(ctx, samples, labels, sampleCount, exemplarCount, histogramCount, metadataCount, pBuf, buf, enc) + s.updateMetrics(ctx, err, sampleCount, exemplarCount, histogramCount, metadataCount, rs, time.Since(begin)) + return err +} + +func (s *shards) updateMetrics(_ context.Context, err error, sampleCount, exemplarCount, histogramCount, metadataCount int, rs WriteResponseStats, duration time.Duration) { + // Partial errors may happen -- account for that. + sampleDiff := sampleCount - rs.Samples + if sampleDiff > 0 { + s.qm.metrics.failedSamplesTotal.Add(float64(sampleDiff)) + } + histogramDiff := histogramCount - rs.Histograms + if histogramDiff > 0 { + s.qm.metrics.failedHistogramsTotal.Add(float64(histogramDiff)) + } + exemplarDiff := exemplarCount - rs.Exemplars + if exemplarDiff > 0 { + s.qm.metrics.failedExemplarsTotal.Add(float64(exemplarDiff)) + } if err != nil { - level.Error(s.qm.logger).Log("msg", "non-recoverable error", "count", sampleCount, "exemplarCount", exemplarCount, "err", err) - s.qm.metrics.failedSamplesTotal.Add(float64(sampleCount)) - s.qm.metrics.failedExemplarsTotal.Add(float64(exemplarCount)) - s.qm.metrics.failedHistogramsTotal.Add(float64(histogramCount)) + level.Error(s.qm.logger).Log("msg", "non-recoverable error", "failedSampleCount", sampleDiff, "failedHistogramCount", histogramDiff, "failedExemplarCount", exemplarDiff, "err", err) + } else if sampleDiff+exemplarDiff+histogramDiff > 0 { + level.Error(s.qm.logger).Log("msg", "we got 2xx status code from the Receiver yet statistics indicate some dat was not written; investigation needed", "failedSampleCount", sampleDiff, "failedHistogramCount", histogramDiff, "failedExemplarCount", exemplarDiff) } // These counters are used to calculate the dynamic sharding, and as such // should be maintained irrespective of success or failure. - s.qm.dataOut.incr(int64(len(samples))) - s.qm.dataOutDuration.incr(int64(time.Since(begin))) + s.qm.dataOut.incr(int64(sampleCount + exemplarCount + histogramCount + metadataCount)) + s.qm.dataOutDuration.incr(int64(duration)) s.qm.lastSendTimestamp.Store(time.Now().Unix()) + // Pending samples/exemplars/histograms also should be subtracted, as an error means // they will not be retried. s.qm.metrics.pendingSamples.Sub(float64(sampleCount)) @@ -1559,19 +1713,29 @@ func (s *shards) sendSamples(ctx context.Context, samples []prompb.TimeSeries, s } // sendSamples to the remote storage with backoff for recoverable errors. -func (s *shards) sendSamplesWithBackoff(ctx context.Context, samples []prompb.TimeSeries, sampleCount, exemplarCount, histogramCount int, pBuf *proto.Buffer, buf *[]byte) error { +func (s *shards) sendSamplesWithBackoff(ctx context.Context, samples []prompb.TimeSeries, sampleCount, exemplarCount, histogramCount, metadataCount int, pBuf *proto.Buffer, buf *[]byte, enc Compression) (WriteResponseStats, error) { // Build the WriteRequest with no metadata. - req, highest, lowest, err := buildWriteRequest(s.qm.logger, samples, nil, pBuf, *buf, nil) + req, highest, lowest, err := buildWriteRequest(s.qm.logger, samples, nil, pBuf, buf, nil, enc) s.qm.buildRequestLimitTimestamp.Store(lowest) if err != nil { // Failing to build the write request is non-recoverable, since it will // only error if marshaling the proto to bytes fails. - return err + return WriteResponseStats{}, err } reqSize := len(req) *buf = req + // Since we retry writes via attemptStore and sendWriteRequestWithBackoff we need + // to track the total amount of accepted data across the various attempts. + accumulatedStats := WriteResponseStats{} + var accumulatedStatsMu sync.Mutex + addStats := func(rs WriteResponseStats) { + accumulatedStatsMu.Lock() + accumulatedStats = accumulatedStats.Add(rs) + accumulatedStatsMu.Unlock() + } + // An anonymous function allows us to defer the completion of our per-try spans // without causing a memory leak, and it has the nice effect of not propagating any // parameters for sendSamplesWithBackoff/3. @@ -1585,8 +1749,9 @@ func (s *shards) sendSamplesWithBackoff(ctx context.Context, samples []prompb.Ti samples, nil, pBuf, - *buf, + buf, isTimeSeriesOldFilter(s.qm.metrics, currentTime, time.Duration(s.qm.cfg.SampleAgeLimit)), + enc, ) s.qm.buildRequestLimitTimestamp.Store(lowest) if err != nil { @@ -1617,15 +1782,20 @@ func (s *shards) sendSamplesWithBackoff(ctx context.Context, samples []prompb.Ti s.qm.metrics.samplesTotal.Add(float64(sampleCount)) s.qm.metrics.exemplarsTotal.Add(float64(exemplarCount)) s.qm.metrics.histogramsTotal.Add(float64(histogramCount)) - err := s.qm.client().Store(ctx, *buf, try) + s.qm.metrics.metadataTotal.Add(float64(metadataCount)) + // Technically for v1, we will likely have empty response stats, but for + // newer Receivers this might be not, so used it in a best effort. + rs, err := s.qm.client().Store(ctx, *buf, try) s.qm.metrics.sentBatchDuration.Observe(time.Since(begin).Seconds()) + // TODO(bwplotka): Revisit this once we have Receivers doing retriable partial error + // so far we don't have those, so it's ok to potentially skew statistics. + addStats(rs) - if err != nil { - span.RecordError(err) - return err + if err == nil { + return nil } - - return nil + span.RecordError(err) + return err } onRetry := func() { @@ -1638,13 +1808,186 @@ func (s *shards) sendSamplesWithBackoff(ctx context.Context, samples []prompb.Ti if errors.Is(err, context.Canceled) { // When there is resharding, we cancel the context for this queue, which means the data is not sent. // So we exit early to not update the metrics. - return err + return accumulatedStats, err } s.qm.metrics.sentBytesTotal.Add(float64(reqSize)) s.qm.metrics.highestSentTimestamp.Set(float64(highest / 1000)) - return err + if err == nil && !accumulatedStats.Confirmed { + // No 2.0 response headers, and we sent v1 message, so likely it's 1.0 Receiver. + // Assume success, don't rely on headers. + return WriteResponseStats{ + Samples: sampleCount, + Histograms: histogramCount, + Exemplars: exemplarCount, + }, nil + } + return accumulatedStats, err +} + +// sendV2Samples to the remote storage with backoff for recoverable errors. +func (s *shards) sendV2SamplesWithBackoff(ctx context.Context, samples []writev2.TimeSeries, labels []string, sampleCount, exemplarCount, histogramCount, metadataCount int, pBuf, buf *[]byte, enc Compression) (WriteResponseStats, error) { + // Build the WriteRequest with no metadata. + req, highest, lowest, err := buildV2WriteRequest(s.qm.logger, samples, labels, pBuf, buf, nil, enc) + s.qm.buildRequestLimitTimestamp.Store(lowest) + if err != nil { + // Failing to build the write request is non-recoverable, since it will + // only error if marshaling the proto to bytes fails. + return WriteResponseStats{}, err + } + + reqSize := len(req) + *buf = req + + // Since we retry writes via attemptStore and sendWriteRequestWithBackoff we need + // to track the total amount of accepted data across the various attempts. + accumulatedStats := WriteResponseStats{} + var accumulatedStatsMu sync.Mutex + addStats := func(rs WriteResponseStats) { + accumulatedStatsMu.Lock() + accumulatedStats = accumulatedStats.Add(rs) + accumulatedStatsMu.Unlock() + } + + // An anonymous function allows us to defer the completion of our per-try spans + // without causing a memory leak, and it has the nice effect of not propagating any + // parameters for sendSamplesWithBackoff/3. + attemptStore := func(try int) error { + currentTime := time.Now() + lowest := s.qm.buildRequestLimitTimestamp.Load() + if isSampleOld(currentTime, time.Duration(s.qm.cfg.SampleAgeLimit), lowest) { + // This will filter out old samples during retries. + req, _, lowest, err := buildV2WriteRequest( + s.qm.logger, + samples, + labels, + pBuf, + buf, + isV2TimeSeriesOldFilter(s.qm.metrics, currentTime, time.Duration(s.qm.cfg.SampleAgeLimit)), + enc, + ) + s.qm.buildRequestLimitTimestamp.Store(lowest) + if err != nil { + return err + } + *buf = req + } + + ctx, span := otel.Tracer("").Start(ctx, "Remote Send Batch") + defer span.End() + + span.SetAttributes( + attribute.Int("request_size", reqSize), + attribute.Int("samples", sampleCount), + attribute.Int("try", try), + attribute.String("remote_name", s.qm.storeClient.Name()), + attribute.String("remote_url", s.qm.storeClient.Endpoint()), + ) + + if exemplarCount > 0 { + span.SetAttributes(attribute.Int("exemplars", exemplarCount)) + } + if histogramCount > 0 { + span.SetAttributes(attribute.Int("histograms", histogramCount)) + } + + begin := time.Now() + s.qm.metrics.samplesTotal.Add(float64(sampleCount)) + s.qm.metrics.exemplarsTotal.Add(float64(exemplarCount)) + s.qm.metrics.histogramsTotal.Add(float64(histogramCount)) + s.qm.metrics.metadataTotal.Add(float64(metadataCount)) + rs, err := s.qm.client().Store(ctx, *buf, try) + s.qm.metrics.sentBatchDuration.Observe(time.Since(begin).Seconds()) + // TODO(bwplotka): Revisit this once we have Receivers doing retriable partial error + // so far we don't have those, so it's ok to potentially skew statistics. + addStats(rs) + + if err == nil { + // Check the case mentioned in PRW 2.0 + // https://prometheus.io/docs/specs/remote_write_spec_2_0/#required-written-response-headers. + if sampleCount+histogramCount+exemplarCount > 0 && rs.NoDataWritten() { + err = fmt.Errorf("sent v2 request with %v samples, %v histograms and %v exemplars; got 2xx, but PRW 2.0 response header statistics indicate %v samples, %v histograms and %v exemplars were accepted;"+ + " assumining failure e.g. the target only supports PRW 1.0 prometheus.WriteRequest, but does not check the Content-Type header correctly", + sampleCount, histogramCount, exemplarCount, + rs.Samples, rs.Histograms, rs.Exemplars, + ) + span.RecordError(err) + return err + } + return nil + } + span.RecordError(err) + return err + } + + onRetry := func() { + s.qm.metrics.retriedSamplesTotal.Add(float64(sampleCount)) + s.qm.metrics.retriedExemplarsTotal.Add(float64(exemplarCount)) + s.qm.metrics.retriedHistogramsTotal.Add(float64(histogramCount)) + } + + err = s.qm.sendWriteRequestWithBackoff(ctx, attemptStore, onRetry) + if errors.Is(err, context.Canceled) { + // When there is resharding, we cancel the context for this queue, which means the data is not sent. + // So we exit early to not update the metrics. + return accumulatedStats, err + } + + s.qm.metrics.sentBytesTotal.Add(float64(reqSize)) + s.qm.metrics.highestSentTimestamp.Set(float64(highest / 1000)) + return accumulatedStats, err +} + +func populateV2TimeSeries(symbolTable *writev2.SymbolsTable, batch []timeSeries, pendingData []writev2.TimeSeries, sendExemplars, sendNativeHistograms bool) (int, int, int, int) { + var nPendingSamples, nPendingExemplars, nPendingHistograms, nPendingMetadata int + for nPending, d := range batch { + pendingData[nPending].Samples = pendingData[nPending].Samples[:0] + // todo: should we also safeguard against empty metadata here? + if d.metadata != nil { + pendingData[nPending].Metadata.Type = writev2.FromMetadataType(d.metadata.Type) + pendingData[nPending].Metadata.HelpRef = symbolTable.Symbolize(d.metadata.Help) + pendingData[nPending].Metadata.HelpRef = symbolTable.Symbolize(d.metadata.Unit) + nPendingMetadata++ + } + + if sendExemplars { + pendingData[nPending].Exemplars = pendingData[nPending].Exemplars[:0] + } + if sendNativeHistograms { + pendingData[nPending].Histograms = pendingData[nPending].Histograms[:0] + } + + // Number of pending samples is limited by the fact that sendSamples (via sendSamplesWithBackoff) + // retries endlessly, so once we reach max samples, if we can never send to the endpoint we'll + // stop reading from the queue. This makes it safe to reference pendingSamples by index. + pendingData[nPending].LabelsRefs = symbolTable.SymbolizeLabels(d.seriesLabels, pendingData[nPending].LabelsRefs) + switch d.sType { + case tSample: + pendingData[nPending].Samples = append(pendingData[nPending].Samples, writev2.Sample{ + Value: d.value, + Timestamp: d.timestamp, + }) + nPendingSamples++ + case tExemplar: + pendingData[nPending].Exemplars = append(pendingData[nPending].Exemplars, writev2.Exemplar{ + LabelsRefs: symbolTable.SymbolizeLabels(d.exemplarLabels, nil), // TODO: optimize, reuse slice + Value: d.value, + Timestamp: d.timestamp, + }) + nPendingExemplars++ + case tHistogram: + pendingData[nPending].Histograms = append(pendingData[nPending].Histograms, writev2.FromIntHistogram(d.timestamp, d.histogram)) + nPendingHistograms++ + case tFloatHistogram: + pendingData[nPending].Histograms = append(pendingData[nPending].Histograms, writev2.FromFloatHistogram(d.timestamp, d.floatHistogram)) + nPendingHistograms++ + case tMetadata: + // TODO: log or return an error? + // we shouldn't receive metadata type data here, it should already be inserted into the timeSeries + } + } + return nPendingSamples, nPendingExemplars, nPendingHistograms, nPendingMetadata } func (t *QueueManager) sendWriteRequestWithBackoff(ctx context.Context, attempt func(int) error, onRetry func()) error { @@ -1778,9 +2121,11 @@ func buildTimeSeries(timeSeries []prompb.TimeSeries, filter func(prompb.TimeSeri if len(ts.Histograms) > 0 && ts.Histograms[0].Timestamp < lowest { lowest = ts.Histograms[0].Timestamp } - - // Move the current element to the write position and increment the write pointer - timeSeries[keepIdx] = timeSeries[i] + if i != keepIdx { + // We have to swap the kept timeseries with the one which should be dropped. + // Copying any elements within timeSeries could cause data corruptions when reusing the slice in a next batch (shards.populateTimeSeries). + timeSeries[keepIdx], timeSeries[i] = timeSeries[i], timeSeries[keepIdx] + } keepIdx++ } @@ -1788,7 +2133,21 @@ func buildTimeSeries(timeSeries []prompb.TimeSeries, filter func(prompb.TimeSeri return highest, lowest, timeSeries, droppedSamples, droppedExemplars, droppedHistograms } -func buildWriteRequest(logger log.Logger, timeSeries []prompb.TimeSeries, metadata []prompb.MetricMetadata, pBuf *proto.Buffer, buf []byte, filter func(prompb.TimeSeries) bool) ([]byte, int64, int64, error) { +func compressPayload(tmpbuf *[]byte, inp []byte, enc Compression) (compressed []byte, _ error) { + switch enc { + case SnappyBlockCompression: + compressed = snappy.Encode(*tmpbuf, inp) + if n := snappy.MaxEncodedLen(len(inp)); n > len(*tmpbuf) { + // grow the buffer for the next time + *tmpbuf = make([]byte, n) + } + return compressed, nil + default: + return compressed, fmt.Errorf("Unknown compression scheme [%v]", enc) + } +} + +func buildWriteRequest(logger log.Logger, timeSeries []prompb.TimeSeries, metadata []prompb.MetricMetadata, pBuf *proto.Buffer, buf *[]byte, filter func(prompb.TimeSeries) bool, enc Compression) (compressed []byte, highest, lowest int64, _ error) { highest, lowest, timeSeries, droppedSamples, droppedExemplars, droppedHistograms := buildTimeSeries(timeSeries, filter) @@ -1814,8 +2173,105 @@ func buildWriteRequest(logger log.Logger, timeSeries []prompb.TimeSeries, metada // snappy uses len() to see if it needs to allocate a new slice. Make the // buffer as long as possible. if buf != nil { - buf = buf[0:cap(buf)] + *buf = (*buf)[0:cap(*buf)] + } else { + buf = &[]byte{} + } + + compressed, err = compressPayload(buf, pBuf.Bytes(), enc) + if err != nil { + return nil, highest, lowest, err } - compressed := snappy.Encode(buf, pBuf.Bytes()) return compressed, highest, lowest, nil } + +func buildV2WriteRequest(logger log.Logger, samples []writev2.TimeSeries, labels []string, pBuf, buf *[]byte, filter func(writev2.TimeSeries) bool, enc Compression) (compressed []byte, highest, lowest int64, _ error) { + highest, lowest, timeSeries, droppedSamples, droppedExemplars, droppedHistograms := buildV2TimeSeries(samples, filter) + + if droppedSamples > 0 || droppedExemplars > 0 || droppedHistograms > 0 { + level.Debug(logger).Log("msg", "dropped data due to their age", "droppedSamples", droppedSamples, "droppedExemplars", droppedExemplars, "droppedHistograms", droppedHistograms) + } + + req := &writev2.Request{ + Symbols: labels, + Timeseries: timeSeries, + } + + if pBuf == nil { + pBuf = &[]byte{} // For convenience in tests. Not efficient. + } + + data, err := req.OptimizedMarshal(*pBuf) + if err != nil { + return nil, highest, lowest, err + } + *pBuf = data + + // snappy uses len() to see if it needs to allocate a new slice. Make the + // buffer as long as possible. + if buf != nil { + *buf = (*buf)[0:cap(*buf)] + } else { + buf = &[]byte{} + } + + compressed, err = compressPayload(buf, data, enc) + if err != nil { + return nil, highest, lowest, err + } + return compressed, highest, lowest, nil +} + +func buildV2TimeSeries(timeSeries []writev2.TimeSeries, filter func(writev2.TimeSeries) bool) (int64, int64, []writev2.TimeSeries, int, int, int) { + var highest int64 + var lowest int64 + var droppedSamples, droppedExemplars, droppedHistograms int + + keepIdx := 0 + lowest = math.MaxInt64 + for i, ts := range timeSeries { + if filter != nil && filter(ts) { + if len(ts.Samples) > 0 { + droppedSamples++ + } + if len(ts.Exemplars) > 0 { + droppedExemplars++ + } + if len(ts.Histograms) > 0 { + droppedHistograms++ + } + continue + } + + // At the moment we only ever append a TimeSeries with a single sample or exemplar in it. + if len(ts.Samples) > 0 && ts.Samples[0].Timestamp > highest { + highest = ts.Samples[0].Timestamp + } + if len(ts.Exemplars) > 0 && ts.Exemplars[0].Timestamp > highest { + highest = ts.Exemplars[0].Timestamp + } + if len(ts.Histograms) > 0 && ts.Histograms[0].Timestamp > highest { + highest = ts.Histograms[0].Timestamp + } + + // Get the lowest timestamp. + if len(ts.Samples) > 0 && ts.Samples[0].Timestamp < lowest { + lowest = ts.Samples[0].Timestamp + } + if len(ts.Exemplars) > 0 && ts.Exemplars[0].Timestamp < lowest { + lowest = ts.Exemplars[0].Timestamp + } + if len(ts.Histograms) > 0 && ts.Histograms[0].Timestamp < lowest { + lowest = ts.Histograms[0].Timestamp + } + if i != keepIdx { + // We have to swap the kept timeseries with the one which should be dropped. + // Copying any elements within timeSeries could cause data corruptions when reusing the slice in a next batch (shards.populateTimeSeries). + timeSeries[keepIdx], timeSeries[i] = timeSeries[i], timeSeries[keepIdx] + } + keepIdx++ + } + + timeSeries = timeSeries[:keepIdx] + return highest, lowest, timeSeries, droppedSamples, droppedExemplars, droppedHistograms +} diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/read.go b/vendor/github.com/prometheus/prometheus/storage/remote/read.go index 723030091a..e54b14f1e3 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/read.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/read.go @@ -210,13 +210,13 @@ func (q querier) addExternalLabels(ms []*labels.Matcher) ([]*labels.Matcher, []s } // LabelValues implements storage.Querier and is a noop. -func (q *querier) LabelValues(context.Context, string, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *querier) LabelValues(context.Context, string, *storage.LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { // TODO: Implement: https://github.com/prometheus/prometheus/issues/3351 return nil, nil, errors.New("not implemented") } // LabelNames implements storage.Querier and is a noop. -func (q *querier) LabelNames(context.Context, ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *querier) LabelNames(context.Context, *storage.LabelHints, ...*labels.Matcher) ([]string, annotations.Annotations, error) { // TODO: Implement: https://github.com/prometheus/prometheus/issues/3351 return nil, nil, errors.New("not implemented") } diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/read_handler.go b/vendor/github.com/prometheus/prometheus/storage/remote/read_handler.go index 2a00ce897f..ffc64c9c3f 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/read_handler.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/read_handler.go @@ -202,16 +202,34 @@ func (h *readHandler) remoteReadStreamedXORChunks(ctx context.Context, w http.Re return err } - chunks := h.getChunkSeriesSet(ctx, query, filteredMatchers) - if err := chunks.Err(); err != nil { + querier, err := h.queryable.ChunkQuerier(query.StartTimestampMs, query.EndTimestampMs) + if err != nil { return err } + defer func() { + if err := querier.Close(); err != nil { + level.Warn(h.logger).Log("msg", "Error on chunk querier close", "err", err.Error()) + } + }() + + var hints *storage.SelectHints + if query.Hints != nil { + hints = &storage.SelectHints{ + Start: query.Hints.StartMs, + End: query.Hints.EndMs, + Step: query.Hints.StepMs, + Func: query.Hints.Func, + Grouping: query.Hints.Grouping, + Range: query.Hints.RangeMs, + By: query.Hints.By, + } + } ws, err := StreamChunkedReadResponses( NewChunkedWriter(w, f), int64(i), // The streaming API has to provide the series sorted. - chunks, + querier.Select(ctx, true, hints, filteredMatchers...), sortedExternalLabels, h.remoteReadMaxBytesInFrame, h.marshalPool, @@ -236,35 +254,6 @@ func (h *readHandler) remoteReadStreamedXORChunks(ctx context.Context, w http.Re } } -// getChunkSeriesSet executes a query to retrieve a ChunkSeriesSet, -// encapsulating the operation in its own function to ensure timely release of -// the querier resources. -func (h *readHandler) getChunkSeriesSet(ctx context.Context, query *prompb.Query, filteredMatchers []*labels.Matcher) storage.ChunkSeriesSet { - querier, err := h.queryable.ChunkQuerier(query.StartTimestampMs, query.EndTimestampMs) - if err != nil { - return storage.ErrChunkSeriesSet(err) - } - defer func() { - if err := querier.Close(); err != nil { - level.Warn(h.logger).Log("msg", "Error on chunk querier close", "err", err.Error()) - } - }() - - var hints *storage.SelectHints - if query.Hints != nil { - hints = &storage.SelectHints{ - Start: query.Hints.StartMs, - End: query.Hints.EndMs, - Step: query.Hints.StepMs, - Func: query.Hints.Func, - Grouping: query.Hints.Grouping, - Range: query.Hints.RangeMs, - By: query.Hints.By, - } - } - return querier.Select(ctx, true, hints, filteredMatchers...) -} - // filterExtLabelsFromMatchers change equality matchers which match external labels // to a matcher that looks for an empty label, // as that label should not be present in the storage. diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/stats.go b/vendor/github.com/prometheus/prometheus/storage/remote/stats.go new file mode 100644 index 0000000000..89d00ffc31 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/storage/remote/stats.go @@ -0,0 +1,107 @@ +// Copyright 2024 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package remote + +import ( + "errors" + "net/http" + "strconv" +) + +const ( + rw20WrittenSamplesHeader = "X-Prometheus-Remote-Write-Samples-Written" + rw20WrittenHistogramsHeader = "X-Prometheus-Remote-Write-Histograms-Written" + rw20WrittenExemplarsHeader = "X-Prometheus-Remote-Write-Exemplars-Written" +) + +// WriteResponseStats represents the response write statistics specified in https://github.com/prometheus/docs/pull/2486 +type WriteResponseStats struct { + // Samples represents X-Prometheus-Remote-Write-Written-Samples + Samples int + // Histograms represents X-Prometheus-Remote-Write-Written-Histograms + Histograms int + // Exemplars represents X-Prometheus-Remote-Write-Written-Exemplars + Exemplars int + + // Confirmed means we can trust those statistics from the point of view + // of the PRW 2.0 spec. When parsed from headers, it means we got at least one + // response header from the Receiver to confirm those numbers, meaning it must + // be a at least 2.0 Receiver. See ParseWriteResponseStats for details. + Confirmed bool +} + +// NoDataWritten returns true if statistics indicate no data was written. +func (s WriteResponseStats) NoDataWritten() bool { + return (s.Samples + s.Histograms + s.Exemplars) == 0 +} + +// AllSamples returns both float and histogram sample numbers. +func (s WriteResponseStats) AllSamples() int { + return s.Samples + s.Histograms +} + +// Add returns the sum of this WriteResponseStats plus the given WriteResponseStats. +func (s WriteResponseStats) Add(rs WriteResponseStats) WriteResponseStats { + s.Confirmed = rs.Confirmed + s.Samples += rs.Samples + s.Histograms += rs.Histograms + s.Exemplars += rs.Exemplars + return s +} + +// SetHeaders sets response headers in a given response writer. +// Make sure to use it before http.ResponseWriter.WriteHeader and .Write. +func (s WriteResponseStats) SetHeaders(w http.ResponseWriter) { + h := w.Header() + h.Set(rw20WrittenSamplesHeader, strconv.Itoa(s.Samples)) + h.Set(rw20WrittenHistogramsHeader, strconv.Itoa(s.Histograms)) + h.Set(rw20WrittenExemplarsHeader, strconv.Itoa(s.Exemplars)) +} + +// ParseWriteResponseStats returns WriteResponseStats parsed from the response headers. +// +// As per 2.0 spec, missing header means 0. However, abrupt HTTP errors, 1.0 Receivers +// or buggy 2.0 Receivers might result in no response headers specified and that +// might NOT necessarily mean nothing was written. To represent that we set +// s.Confirmed = true only when see at least on response header. +// +// Error is returned when any of the header fails to parse as int64. +func ParseWriteResponseStats(r *http.Response) (s WriteResponseStats, err error) { + var ( + errs []error + h = r.Header + ) + if v := h.Get(rw20WrittenSamplesHeader); v != "" { // Empty means zero. + s.Confirmed = true + if s.Samples, err = strconv.Atoi(v); err != nil { + s.Samples = 0 + errs = append(errs, err) + } + } + if v := h.Get(rw20WrittenHistogramsHeader); v != "" { // Empty means zero. + s.Confirmed = true + if s.Histograms, err = strconv.Atoi(v); err != nil { + s.Histograms = 0 + errs = append(errs, err) + } + } + if v := h.Get(rw20WrittenExemplarsHeader); v != "" { // Empty means zero. + s.Confirmed = true + if s.Exemplars, err = strconv.Atoi(v); err != nil { + s.Exemplars = 0 + errs = append(errs, err) + } + } + return s, errors.Join(errs...) +} diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/storage.go b/vendor/github.com/prometheus/prometheus/storage/remote/storage.go index 758ba3cc91..afa2d411a9 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/storage.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/storage.go @@ -62,7 +62,7 @@ type Storage struct { } // NewStorage returns a remote.Storage. -func NewStorage(l log.Logger, reg prometheus.Registerer, stCallback startTimeCallback, walDir string, flushDeadline time.Duration, sm ReadyScrapeManager) *Storage { +func NewStorage(l log.Logger, reg prometheus.Registerer, stCallback startTimeCallback, walDir string, flushDeadline time.Duration, sm ReadyScrapeManager, metadataInWAL bool) *Storage { if l == nil { l = log.NewNopLogger() } @@ -72,7 +72,7 @@ func NewStorage(l log.Logger, reg prometheus.Registerer, stCallback startTimeCal logger: logger, localStartTimeCallback: stCallback, } - s.rws = NewWriteStorage(s.logger, reg, walDir, flushDeadline, sm) + s.rws = NewWriteStorage(s.logger, reg, walDir, flushDeadline, sm, metadataInWAL) return s } diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/write.go b/vendor/github.com/prometheus/prometheus/storage/remote/write.go index 66455cb4dd..81902a8f1a 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/write.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/write.go @@ -15,6 +15,7 @@ package remote import ( "context" + "errors" "fmt" "math" "sync" @@ -65,6 +66,7 @@ type WriteStorage struct { externalLabels labels.Labels dir string queues map[string]*QueueManager + metadataInWAL bool samplesIn *ewmaRate flushDeadline time.Duration interner *pool @@ -76,7 +78,7 @@ type WriteStorage struct { } // NewWriteStorage creates and runs a WriteStorage. -func NewWriteStorage(logger log.Logger, reg prometheus.Registerer, dir string, flushDeadline time.Duration, sm ReadyScrapeManager) *WriteStorage { +func NewWriteStorage(logger log.Logger, reg prometheus.Registerer, dir string, flushDeadline time.Duration, sm ReadyScrapeManager, metadataInWal bool) *WriteStorage { if logger == nil { logger = log.NewNopLogger() } @@ -92,12 +94,13 @@ func NewWriteStorage(logger log.Logger, reg prometheus.Registerer, dir string, f interner: newPool(), scraper: sm, quit: make(chan struct{}), + metadataInWAL: metadataInWal, highestTimestamp: &maxTimestamp{ Gauge: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: namespace, Subsystem: subsystem, Name: "highest_timestamp_in_seconds", - Help: "Highest timestamp that has come into the remote storage via the Appender interface, in seconds since epoch.", + Help: "Highest timestamp that has come into the remote storage via the Appender interface, in seconds since epoch. Initialized to 0 when no data has been received yet.", }), }, } @@ -145,6 +148,9 @@ func (rws *WriteStorage) ApplyConfig(conf *config.Config) error { newQueues := make(map[string]*QueueManager) newHashes := []string{} for _, rwConf := range conf.RemoteWriteConfigs { + if rwConf.ProtobufMessage == config.RemoteWriteProtoMsgV2 && !rws.metadataInWAL { + return errors.New("invalid remote write configuration, if you are using remote write version 2.0 the `--enable-feature=metadata-wal-records` feature flag must be enabled") + } hash, err := toHash(rwConf) if err != nil { return err @@ -165,6 +171,7 @@ func (rws *WriteStorage) ApplyConfig(conf *config.Config) error { c, err := NewWriteClient(name, &ClientConfig{ URL: rwConf.URL, + WriteProtoMsg: rwConf.ProtobufMessage, Timeout: rwConf.RemoteTimeout, HTTPClientConfig: rwConf.HTTPClientConfig, SigV4Config: rwConf.SigV4Config, @@ -207,6 +214,7 @@ func (rws *WriteStorage) ApplyConfig(conf *config.Config) error { rws.scraper, rwConf.SendExemplars, rwConf.SendNativeHistograms, + rwConf.ProtobufMessage, ) // Keep track of which queues are new so we know which to start. newHashes = append(newHashes, hash) diff --git a/vendor/github.com/prometheus/prometheus/storage/remote/write_handler.go b/vendor/github.com/prometheus/prometheus/storage/remote/write_handler.go index ff227292b8..6756bf0abe 100644 --- a/vendor/github.com/prometheus/prometheus/storage/remote/write_handler.go +++ b/vendor/github.com/prometheus/prometheus/storage/remote/write_handler.go @@ -17,16 +17,25 @@ import ( "context" "errors" "fmt" + "io" "net/http" + "strings" + "time" "github.com/go-kit/log" "github.com/go-kit/log/level" - + "github.com/gogo/protobuf/proto" + "github.com/golang/snappy" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/model/exemplar" + "github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/prompb" + writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2" "github.com/prometheus/prometheus/storage" otlptranslator "github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite" ) @@ -35,140 +44,229 @@ type writeHandler struct { logger log.Logger appendable storage.Appendable - samplesWithInvalidLabelsTotal prometheus.Counter + samplesWithInvalidLabelsTotal prometheus.Counter + samplesAppendedWithoutMetadata prometheus.Counter + + acceptedProtoMsgs map[config.RemoteWriteProtoMsg]struct{} } -// NewWriteHandler creates a http.Handler that accepts remote write requests and -// writes them to the provided appendable. -func NewWriteHandler(logger log.Logger, reg prometheus.Registerer, appendable storage.Appendable) http.Handler { - h := &writeHandler{ - logger: logger, - appendable: appendable, +const maxAheadTime = 10 * time.Minute - samplesWithInvalidLabelsTotal: prometheus.NewCounter(prometheus.CounterOpts{ +// NewWriteHandler creates a http.Handler that accepts remote write requests with +// the given message in acceptedProtoMsgs and writes them to the provided appendable. +// +// NOTE(bwplotka): When accepting v2 proto and spec, partial writes are possible +// as per https://prometheus.io/docs/specs/remote_write_spec_2_0/#partial-write. +func NewWriteHandler(logger log.Logger, reg prometheus.Registerer, appendable storage.Appendable, acceptedProtoMsgs []config.RemoteWriteProtoMsg) http.Handler { + protoMsgs := map[config.RemoteWriteProtoMsg]struct{}{} + for _, acc := range acceptedProtoMsgs { + protoMsgs[acc] = struct{}{} + } + h := &writeHandler{ + logger: logger, + appendable: appendable, + acceptedProtoMsgs: protoMsgs, + samplesWithInvalidLabelsTotal: promauto.With(reg).NewCounter(prometheus.CounterOpts{ Namespace: "prometheus", Subsystem: "api", Name: "remote_write_invalid_labels_samples_total", - Help: "The total number of remote write samples which contains invalid labels.", + Help: "The total number of received remote write samples and histogram samples which were rejected due to invalid labels.", + }), + samplesAppendedWithoutMetadata: promauto.With(reg).NewCounter(prometheus.CounterOpts{ + Namespace: "prometheus", + Subsystem: "api", + Name: "remote_write_without_metadata_appended_samples_total", + Help: "The total number of received remote write samples (and histogram samples) which were ingested without corresponding metadata.", }), - } - if reg != nil { - reg.MustRegister(h.samplesWithInvalidLabelsTotal) } return h } +func (h *writeHandler) parseProtoMsg(contentType string) (config.RemoteWriteProtoMsg, error) { + contentType = strings.TrimSpace(contentType) + + parts := strings.Split(contentType, ";") + if parts[0] != appProtoContentType { + return "", fmt.Errorf("expected %v as the first (media) part, got %v content-type", appProtoContentType, contentType) + } + // Parse potential https://www.rfc-editor.org/rfc/rfc9110#parameter + for _, p := range parts[1:] { + pair := strings.Split(p, "=") + if len(pair) != 2 { + return "", fmt.Errorf("as per https://www.rfc-editor.org/rfc/rfc9110#parameter expected parameters to be key-values, got %v in %v content-type", p, contentType) + } + if pair[0] == "proto" { + ret := config.RemoteWriteProtoMsg(pair[1]) + if err := ret.Validate(); err != nil { + return "", fmt.Errorf("got %v content type; %w", contentType, err) + } + return ret, nil + } + } + // No "proto=" parameter, assuming v1. + return config.RemoteWriteProtoMsgV1, nil +} + func (h *writeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - req, err := DecodeWriteRequest(r.Body) + contentType := r.Header.Get("Content-Type") + if contentType == "" { + // Don't break yolo 1.0 clients if not needed. This is similar to what we did + // before 2.0: https://github.com/prometheus/prometheus/blob/d78253319daa62c8f28ed47e40bafcad2dd8b586/storage/remote/write_handler.go#L62 + // We could give http.StatusUnsupportedMediaType, but let's assume 1.0 message by default. + contentType = appProtoContentType + } + + msgType, err := h.parseProtoMsg(contentType) + if err != nil { + level.Error(h.logger).Log("msg", "Error decoding remote write request", "err", err) + http.Error(w, err.Error(), http.StatusUnsupportedMediaType) + return + } + + if _, ok := h.acceptedProtoMsgs[msgType]; !ok { + err := fmt.Errorf("%v protobuf message is not accepted by this server; accepted %v", msgType, func() (ret []string) { + for k := range h.acceptedProtoMsgs { + ret = append(ret, string(k)) + } + return ret + }()) + level.Error(h.logger).Log("msg", "Error decoding remote write request", "err", err) + http.Error(w, err.Error(), http.StatusUnsupportedMediaType) + } + + enc := r.Header.Get("Content-Encoding") + if enc == "" { + // Don't break yolo 1.0 clients if not needed. This is similar to what we did + // before 2.0: https://github.com/prometheus/prometheus/blob/d78253319daa62c8f28ed47e40bafcad2dd8b586/storage/remote/write_handler.go#L62 + // We could give http.StatusUnsupportedMediaType, but let's assume snappy by default. + } else if enc != string(SnappyBlockCompression) { + err := fmt.Errorf("%v encoding (compression) is not accepted by this server; only %v is acceptable", enc, SnappyBlockCompression) + level.Error(h.logger).Log("msg", "Error decoding remote write request", "err", err) + http.Error(w, err.Error(), http.StatusUnsupportedMediaType) + } + + // Read the request body. + body, err := io.ReadAll(r.Body) if err != nil { level.Error(h.logger).Log("msg", "Error decoding remote write request", "err", err.Error()) http.Error(w, err.Error(), http.StatusBadRequest) return } - err = h.write(r.Context(), req) - switch { - case err == nil: - case errors.Is(err, storage.ErrOutOfOrderSample), errors.Is(err, storage.ErrOutOfBounds), errors.Is(err, storage.ErrDuplicateSampleForTimestamp), errors.Is(err, storage.ErrTooOldSample): - // Indicated an out of order sample is a bad request to prevent retries. + decompressed, err := snappy.Decode(nil, body) + if err != nil { + // TODO(bwplotka): Add more context to responded error? + level.Error(h.logger).Log("msg", "Error decompressing remote write request", "err", err.Error()) http.Error(w, err.Error(), http.StatusBadRequest) return - default: - level.Error(h.logger).Log("msg", "Error appending remote write", "err", err.Error()) - http.Error(w, err.Error(), http.StatusInternalServerError) + } + + // Now we have a decompressed buffer we can unmarshal it. + + if msgType == config.RemoteWriteProtoMsgV1 { + // PRW 1.0 flow has different proto message and no partial write handling. + var req prompb.WriteRequest + if err := proto.Unmarshal(decompressed, &req); err != nil { + // TODO(bwplotka): Add more context to responded error? + level.Error(h.logger).Log("msg", "Error decoding v1 remote write request", "protobuf_message", msgType, "err", err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err = h.write(r.Context(), &req); err != nil { + switch { + case errors.Is(err, storage.ErrOutOfOrderSample), errors.Is(err, storage.ErrOutOfBounds), errors.Is(err, storage.ErrDuplicateSampleForTimestamp), errors.Is(err, storage.ErrTooOldSample): + // Indicated an out-of-order sample is a bad request to prevent retries. + http.Error(w, err.Error(), http.StatusBadRequest) + return + default: + level.Error(h.logger).Log("msg", "Error while remote writing the v1 request", "err", err.Error()) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + w.WriteHeader(http.StatusNoContent) return } - w.WriteHeader(http.StatusNoContent) -} + // Remote Write 2.x proto message handling. + var req writev2.Request + if err := proto.Unmarshal(decompressed, &req); err != nil { + // TODO(bwplotka): Add more context to responded error? + level.Error(h.logger).Log("msg", "Error decoding v2 remote write request", "protobuf_message", msgType, "err", err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } -// checkAppendExemplarError modifies the AppendExemplar's returned error based on the error cause. -func (h *writeHandler) checkAppendExemplarError(err error, e exemplar.Exemplar, outOfOrderErrs *int) error { - unwrappedErr := errors.Unwrap(err) - if unwrappedErr == nil { - unwrappedErr = err - } - switch { - case errors.Is(unwrappedErr, storage.ErrNotFound): - return storage.ErrNotFound - case errors.Is(unwrappedErr, storage.ErrOutOfOrderExemplar): - *outOfOrderErrs++ - level.Debug(h.logger).Log("msg", "Out of order exemplar", "exemplar", fmt.Sprintf("%+v", e)) - return nil - default: - return err + respStats, errHTTPCode, err := h.writeV2(r.Context(), &req) + + // Set required X-Prometheus-Remote-Write-Written-* response headers, in all cases. + respStats.SetHeaders(w) + + if err != nil { + if errHTTPCode/5 == 100 { // 5xx + level.Error(h.logger).Log("msg", "Error while remote writing the v2 request", "err", err.Error()) + } + http.Error(w, err.Error(), errHTTPCode) + return } + w.WriteHeader(http.StatusNoContent) } func (h *writeHandler) write(ctx context.Context, req *prompb.WriteRequest) (err error) { outOfOrderExemplarErrs := 0 samplesWithInvalidLabels := 0 + samplesAppended := 0 + + app := &timeLimitAppender{ + Appender: h.appendable.Appender(ctx), + maxTime: timestamp.FromTime(time.Now().Add(maxAheadTime)), + } - app := h.appendable.Appender(ctx) defer func() { if err != nil { _ = app.Rollback() return } err = app.Commit() + if err != nil { + h.samplesAppendedWithoutMetadata.Add(float64(samplesAppended)) + } }() b := labels.NewScratchBuilder(0) - var exemplarErr error for _, ts := range req.Timeseries { - labels := labelProtosToLabels(&b, ts.Labels) - if !labels.IsValid() { - level.Warn(h.logger).Log("msg", "Invalid metric names or labels", "got", labels.String()) + ls := ts.ToLabels(&b, nil) + if !ls.Has(labels.MetricName) || !ls.IsValid() { + level.Warn(h.logger).Log("msg", "Invalid metric names or labels", "got", ls.String()) samplesWithInvalidLabels++ + // TODO(bwplotka): Even as per 1.0 spec, this should be a 400 error, while other samples are + // potentially written. Perhaps unify with fixed writeV2 implementation a bit. continue } - var ref storage.SeriesRef - for _, s := range ts.Samples { - ref, err = app.Append(ref, labels, s.Timestamp, s.Value) - if err != nil { - unwrappedErr := errors.Unwrap(err) - if unwrappedErr == nil { - unwrappedErr = err - } - if errors.Is(err, storage.ErrOutOfOrderSample) || errors.Is(unwrappedErr, storage.ErrOutOfBounds) || errors.Is(unwrappedErr, storage.ErrDuplicateSampleForTimestamp) { - level.Error(h.logger).Log("msg", "Out of order sample from remote write", "err", err.Error(), "series", labels.String(), "timestamp", s.Timestamp) - } - return err - } + + if err := h.appendV1Samples(app, ts.Samples, ls); err != nil { + return err } + samplesAppended += len(ts.Samples) for _, ep := range ts.Exemplars { - e := exemplarProtoToExemplar(&b, ep) - - _, exemplarErr = app.AppendExemplar(0, labels, e) - exemplarErr = h.checkAppendExemplarError(exemplarErr, e, &outOfOrderExemplarErrs) - if exemplarErr != nil { - // Since exemplar storage is still experimental, we don't fail the request on ingestion errors. - level.Debug(h.logger).Log("msg", "Error while adding exemplar in AddExemplar", "exemplar", fmt.Sprintf("%+v", e), "err", exemplarErr) + e := ep.ToExemplar(&b, nil) + if _, err := app.AppendExemplar(0, ls, e); err != nil { + switch { + case errors.Is(err, storage.ErrOutOfOrderExemplar): + outOfOrderExemplarErrs++ + level.Debug(h.logger).Log("msg", "Out of order exemplar", "series", ls.String(), "exemplar", fmt.Sprintf("%+v", e)) + default: + // Since exemplar storage is still experimental, we don't fail the request on ingestion errors + level.Debug(h.logger).Log("msg", "Error while adding exemplar in AppendExemplar", "series", ls.String(), "exemplar", fmt.Sprintf("%+v", e), "err", err) + } } } - for _, hp := range ts.Histograms { - if hp.IsFloatHistogram() { - fhs := FloatHistogramProtoToFloatHistogram(hp) - _, err = app.AppendHistogram(0, labels, hp.Timestamp, nil, fhs) - } else { - hs := HistogramProtoToHistogram(hp) - _, err = app.AppendHistogram(0, labels, hp.Timestamp, hs, nil) - } - if err != nil { - unwrappedErr := errors.Unwrap(err) - if unwrappedErr == nil { - unwrappedErr = err - } - // Although AppendHistogram does not currently return ErrDuplicateSampleForTimestamp there is - // a note indicating its inclusion in the future. - if errors.Is(unwrappedErr, storage.ErrOutOfOrderSample) || errors.Is(unwrappedErr, storage.ErrOutOfBounds) || errors.Is(unwrappedErr, storage.ErrDuplicateSampleForTimestamp) { - level.Error(h.logger).Log("msg", "Out of order histogram from remote write", "err", err.Error(), "series", labels.String(), "timestamp", hp.Timestamp) - } - return err - } + if err = h.appendV1Histograms(app, ts.Histograms, ls); err != nil { + return err } + samplesAppended += len(ts.Histograms) } if outOfOrderExemplarErrs > 0 { @@ -177,10 +275,201 @@ func (h *writeHandler) write(ctx context.Context, req *prompb.WriteRequest) (err if samplesWithInvalidLabels > 0 { h.samplesWithInvalidLabelsTotal.Add(float64(samplesWithInvalidLabels)) } - return nil } +func (h *writeHandler) appendV1Samples(app storage.Appender, ss []prompb.Sample, labels labels.Labels) error { + var ref storage.SeriesRef + var err error + for _, s := range ss { + ref, err = app.Append(ref, labels, s.GetTimestamp(), s.GetValue()) + if err != nil { + if errors.Is(err, storage.ErrOutOfOrderSample) || + errors.Is(err, storage.ErrOutOfBounds) || + errors.Is(err, storage.ErrDuplicateSampleForTimestamp) { + level.Error(h.logger).Log("msg", "Out of order sample from remote write", "err", err.Error(), "series", labels.String(), "timestamp", s.Timestamp) + } + return err + } + } + return nil +} + +func (h *writeHandler) appendV1Histograms(app storage.Appender, hh []prompb.Histogram, labels labels.Labels) error { + var err error + for _, hp := range hh { + if hp.IsFloatHistogram() { + _, err = app.AppendHistogram(0, labels, hp.Timestamp, nil, hp.ToFloatHistogram()) + } else { + _, err = app.AppendHistogram(0, labels, hp.Timestamp, hp.ToIntHistogram(), nil) + } + if err != nil { + // Although AppendHistogram does not currently return ErrDuplicateSampleForTimestamp there is + // a note indicating its inclusion in the future. + if errors.Is(err, storage.ErrOutOfOrderSample) || + errors.Is(err, storage.ErrOutOfBounds) || + errors.Is(err, storage.ErrDuplicateSampleForTimestamp) { + level.Error(h.logger).Log("msg", "Out of order histogram from remote write", "err", err.Error(), "series", labels.String(), "timestamp", hp.Timestamp) + } + return err + } + } + return nil +} + +// writeV2 is similar to write, but it works with v2 proto message, +// allows partial 4xx writes and gathers statistics. +// +// writeV2 returns the statistics. +// In error cases, writeV2, also returns statistics, but also the error that +// should be propagated to the remote write sender and httpCode to use for status. +// +// NOTE(bwplotka): TSDB storage is NOT idempotent, so we don't allow "partial retry-able" errors. +// Once we have 5xx type of error, we immediately stop and rollback all appends. +func (h *writeHandler) writeV2(ctx context.Context, req *writev2.Request) (_ WriteResponseStats, errHTTPCode int, _ error) { + app := &timeLimitAppender{ + Appender: h.appendable.Appender(ctx), + maxTime: timestamp.FromTime(time.Now().Add(maxAheadTime)), + } + + s := WriteResponseStats{} + samplesWithoutMetadata, errHTTPCode, err := h.appendV2(app, req, &s) + if err != nil { + if errHTTPCode/5 == 100 { + // On 5xx, we always rollback, because we expect + // sender to retry and TSDB is not idempotent. + if rerr := app.Rollback(); rerr != nil { + level.Error(h.logger).Log("msg", "writev2 rollback failed on retry-able error", "err", rerr) + } + return WriteResponseStats{}, errHTTPCode, err + } + + // Non-retriable (e.g. bad request error case). Can be partially written. + commitErr := app.Commit() + if commitErr != nil { + // Bad requests does not matter as we have internal error (retryable). + return WriteResponseStats{}, http.StatusInternalServerError, commitErr + } + // Bad request error happened, but rest of data (if any) was written. + h.samplesAppendedWithoutMetadata.Add(float64(samplesWithoutMetadata)) + return s, errHTTPCode, err + } + + // All good just commit. + if err := app.Commit(); err != nil { + return WriteResponseStats{}, http.StatusInternalServerError, err + } + h.samplesAppendedWithoutMetadata.Add(float64(samplesWithoutMetadata)) + return s, 0, nil +} + +func (h *writeHandler) appendV2(app storage.Appender, req *writev2.Request, rs *WriteResponseStats) (samplesWithoutMetadata, errHTTPCode int, err error) { + var ( + badRequestErrs []error + outOfOrderExemplarErrs, samplesWithInvalidLabels int + + b = labels.NewScratchBuilder(0) + ) + for _, ts := range req.Timeseries { + ls := ts.ToLabels(&b, req.Symbols) + // Validate series labels early. + // NOTE(bwplotka): While spec allows UTF-8, Prometheus Receiver may impose + // specific limits and follow https://prometheus.io/docs/specs/remote_write_spec_2_0/#invalid-samples case. + if !ls.Has(labels.MetricName) || !ls.IsValid() { + badRequestErrs = append(badRequestErrs, fmt.Errorf("invalid metric name or labels, got %v", ls.String())) + samplesWithInvalidLabels += len(ts.Samples) + len(ts.Histograms) + continue + } + + allSamplesSoFar := rs.AllSamples() + var ref storage.SeriesRef + + // Samples. + for _, s := range ts.Samples { + ref, err = app.Append(ref, ls, s.GetTimestamp(), s.GetValue()) + if err == nil { + rs.Samples++ + continue + } + // Handle append error. + if errors.Is(err, storage.ErrOutOfOrderSample) || + errors.Is(err, storage.ErrOutOfBounds) || + errors.Is(err, storage.ErrDuplicateSampleForTimestamp) || + errors.Is(err, storage.ErrTooOldSample) { + // TODO(bwplotka): Not too spammy log? + level.Error(h.logger).Log("msg", "Out of order sample from remote write", "err", err.Error(), "series", ls.String(), "timestamp", s.Timestamp) + badRequestErrs = append(badRequestErrs, fmt.Errorf("%w for series %v", err, ls.String())) + continue + } + return 0, http.StatusInternalServerError, err + } + + // Native Histograms. + for _, hp := range ts.Histograms { + if hp.IsFloatHistogram() { + ref, err = app.AppendHistogram(ref, ls, hp.Timestamp, nil, hp.ToFloatHistogram()) + } else { + ref, err = app.AppendHistogram(ref, ls, hp.Timestamp, hp.ToIntHistogram(), nil) + } + if err == nil { + rs.Histograms++ + continue + } + // Handle append error. + // Although AppendHistogram does not currently return ErrDuplicateSampleForTimestamp there is + // a note indicating its inclusion in the future. + if errors.Is(err, storage.ErrOutOfOrderSample) || + errors.Is(err, storage.ErrOutOfBounds) || + errors.Is(err, storage.ErrDuplicateSampleForTimestamp) { + // TODO(bwplotka): Not too spammy log? + level.Error(h.logger).Log("msg", "Out of order histogram from remote write", "err", err.Error(), "series", ls.String(), "timestamp", hp.Timestamp) + badRequestErrs = append(badRequestErrs, fmt.Errorf("%w for series %v", err, ls.String())) + continue + } + return 0, http.StatusInternalServerError, err + } + + // Exemplars. + for _, ep := range ts.Exemplars { + e := ep.ToExemplar(&b, req.Symbols) + ref, err = app.AppendExemplar(ref, ls, e) + if err == nil { + rs.Exemplars++ + continue + } + // Handle append error. + if errors.Is(err, storage.ErrOutOfOrderExemplar) { + outOfOrderExemplarErrs++ // Maintain old metrics, but technically not needed, given we fail here. + level.Error(h.logger).Log("msg", "Out of order exemplar", "err", err.Error(), "series", ls.String(), "exemplar", fmt.Sprintf("%+v", e)) + badRequestErrs = append(badRequestErrs, fmt.Errorf("%w for series %v", err, ls.String())) + continue + } + // TODO(bwplotka): Add strict mode which would trigger rollback of everything if needed. + // For now we keep the previously released flow (just error not debug leve) of dropping them without rollback and 5xx. + level.Error(h.logger).Log("msg", "failed to ingest exemplar, emitting error log, but no error for PRW caller", "err", err.Error(), "series", ls.String(), "exemplar", fmt.Sprintf("%+v", e)) + } + + m := ts.ToMetadata(req.Symbols) + if _, err = app.UpdateMetadata(ref, ls, m); err != nil { + level.Debug(h.logger).Log("msg", "error while updating metadata from remote write", "err", err) + // Metadata is attached to each series, so since Prometheus does not reject sample without metadata information, + // we don't report remote write error either. We increment metric instead. + samplesWithoutMetadata += rs.AllSamples() - allSamplesSoFar + } + } + + if outOfOrderExemplarErrs > 0 { + level.Warn(h.logger).Log("msg", "Error on ingesting out-of-order exemplars", "num_dropped", outOfOrderExemplarErrs) + } + h.samplesWithInvalidLabelsTotal.Add(float64(samplesWithInvalidLabels)) + + if len(badRequestErrs) == 0 { + return samplesWithoutMetadata, 0, nil + } + // TODO(bwplotka): Better concat formatting? Perhaps add size limit? + return samplesWithoutMetadata, http.StatusBadRequest, errors.Join(badRequestErrs...) +} + // NewOTLPWriteHandler creates a http.Handler that accepts OTLP write requests and // writes them to the provided appendable. func NewOTLPWriteHandler(logger log.Logger, appendable storage.Appendable) http.Handler { @@ -233,3 +522,45 @@ func (h *otlpWriteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) } + +type timeLimitAppender struct { + storage.Appender + + maxTime int64 +} + +func (app *timeLimitAppender) Append(ref storage.SeriesRef, lset labels.Labels, t int64, v float64) (storage.SeriesRef, error) { + if t > app.maxTime { + return 0, fmt.Errorf("%w: timestamp is too far in the future", storage.ErrOutOfBounds) + } + + ref, err := app.Appender.Append(ref, lset, t, v) + if err != nil { + return 0, err + } + return ref, nil +} + +func (app *timeLimitAppender) AppendHistogram(ref storage.SeriesRef, l labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) { + if t > app.maxTime { + return 0, fmt.Errorf("%w: timestamp is too far in the future", storage.ErrOutOfBounds) + } + + ref, err := app.Appender.AppendHistogram(ref, l, t, h, fh) + if err != nil { + return 0, err + } + return ref, nil +} + +func (app *timeLimitAppender) AppendExemplar(ref storage.SeriesRef, l labels.Labels, e exemplar.Exemplar) (storage.SeriesRef, error) { + if e.Ts > app.maxTime { + return 0, fmt.Errorf("%w: timestamp is too far in the future", storage.ErrOutOfBounds) + } + + ref, err := app.Appender.AppendExemplar(ref, l, e) + if err != nil { + return 0, err + } + return ref, nil +} diff --git a/vendor/github.com/prometheus/prometheus/storage/secondary.go b/vendor/github.com/prometheus/prometheus/storage/secondary.go index 44d9781835..1cf8024b65 100644 --- a/vendor/github.com/prometheus/prometheus/storage/secondary.go +++ b/vendor/github.com/prometheus/prometheus/storage/secondary.go @@ -49,16 +49,16 @@ func newSecondaryQuerierFromChunk(cq ChunkQuerier) genericQuerier { return &secondaryQuerier{genericQuerier: newGenericQuerierFromChunk(cq)} } -func (s *secondaryQuerier) LabelValues(ctx context.Context, name string, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { - vals, w, err := s.genericQuerier.LabelValues(ctx, name, matchers...) +func (s *secondaryQuerier) LabelValues(ctx context.Context, name string, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { + vals, w, err := s.genericQuerier.LabelValues(ctx, name, hints, matchers...) if err != nil { return nil, w.Add(err), nil } return vals, w, nil } -func (s *secondaryQuerier) LabelNames(ctx context.Context, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { - names, w, err := s.genericQuerier.LabelNames(ctx, matchers...) +func (s *secondaryQuerier) LabelNames(ctx context.Context, hints *LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { + names, w, err := s.genericQuerier.LabelNames(ctx, hints, matchers...) if err != nil { return nil, w.Add(err), nil } diff --git a/vendor/github.com/prometheus/prometheus/tsdb/block.go b/vendor/github.com/prometheus/prometheus/tsdb/block.go index 83b86a58d1..2f32733f8c 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/block.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/block.go @@ -103,9 +103,9 @@ type IndexReader interface { // storage.ErrNotFound is returned as error. LabelValueFor(ctx context.Context, id storage.SeriesRef, label string) (string, error) - // LabelNamesFor returns all the label names for the series referred to by IDs. + // LabelNamesFor returns all the label names for the series referred to by the postings. // The names returned are sorted. - LabelNamesFor(ctx context.Context, ids ...storage.SeriesRef) ([]string, error) + LabelNamesFor(ctx context.Context, postings index.Postings) ([]string, error) // Close releases the underlying resources of the reader. Close() error @@ -551,10 +551,10 @@ func (r blockIndexReader) LabelValueFor(ctx context.Context, id storage.SeriesRe return r.ir.LabelValueFor(ctx, id, label) } -// LabelNamesFor returns all the label names for the series referred to by IDs. +// LabelNamesFor returns all the label names for the series referred to by the postings. // The names returned are sorted. -func (r blockIndexReader) LabelNamesFor(ctx context.Context, ids ...storage.SeriesRef) ([]string, error) { - return r.ir.LabelNamesFor(ctx, ids...) +func (r blockIndexReader) LabelNamesFor(ctx context.Context, postings index.Postings) ([]string, error) { + return r.ir.LabelNamesFor(ctx, postings) } type blockTombstoneReader struct { @@ -646,10 +646,10 @@ Outer: } // CleanTombstones will remove the tombstones and rewrite the block (only if there are any tombstones). -// If there was a rewrite, then it returns the ULID of the new block written, else nil. -// If the resultant block is empty (tombstones covered the whole block), then it deletes the new block and return nil UID. +// If there was a rewrite, then it returns the ULID of new blocks written, else nil. +// If a resultant block is empty (tombstones covered the whole block), then it returns an empty slice. // It returns a boolean indicating if the parent block can be deleted safely of not. -func (pb *Block) CleanTombstones(dest string, c Compactor) (*ulid.ULID, bool, error) { +func (pb *Block) CleanTombstones(dest string, c Compactor) ([]ulid.ULID, bool, error) { numStones := 0 if err := pb.tombstones.Iter(func(id storage.SeriesRef, ivs tombstones.Intervals) error { @@ -664,12 +664,12 @@ func (pb *Block) CleanTombstones(dest string, c Compactor) (*ulid.ULID, bool, er } meta := pb.Meta() - uid, err := c.Write(dest, pb, pb.meta.MinTime, pb.meta.MaxTime, &meta) + uids, err := c.Write(dest, pb, pb.meta.MinTime, pb.meta.MaxTime, &meta) if err != nil { return nil, false, err } - return &uid, true, nil + return uids, true, nil } // Snapshot creates snapshot of the block into dir. diff --git a/vendor/github.com/prometheus/prometheus/tsdb/blockwriter.go b/vendor/github.com/prometheus/prometheus/tsdb/blockwriter.go index 32346d69d0..232ec2b914 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/blockwriter.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/blockwriter.go @@ -105,12 +105,17 @@ func (w *BlockWriter) Flush(ctx context.Context) (ulid.ULID, error) { if err != nil { return ulid.ULID{}, fmt.Errorf("create leveled compactor: %w", err) } - id, err := compactor.Write(w.destinationDir, w.head, mint, maxt, nil) + ids, err := compactor.Write(w.destinationDir, w.head, mint, maxt, nil) if err != nil { return ulid.ULID{}, fmt.Errorf("compactor write: %w", err) } - return id, nil + // No block was produced. Caller is responsible to check empty + // ulid.ULID based on its use case. + if len(ids) == 0 { + return ulid.ULID{}, nil + } + return ids[0], nil } func (w *BlockWriter) Close() error { diff --git a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/float_histogram.go b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/float_histogram.go index 1eed46ca87..a7c1fffb1e 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/float_histogram.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/float_histogram.go @@ -76,6 +76,7 @@ func (c *FloatHistogramChunk) NumSamples() int { func (c *FloatHistogramChunk) Layout() ( schema int32, zeroThreshold float64, negativeSpans, positiveSpans []histogram.Span, + customValues []float64, err error, ) { if c.NumSamples() == 0 { @@ -133,17 +134,18 @@ func (c *FloatHistogramChunk) Appender() (Appender, error) { a := &FloatHistogramAppender{ b: &c.b, - schema: it.schema, - zThreshold: it.zThreshold, - pSpans: it.pSpans, - nSpans: it.nSpans, - t: it.t, - tDelta: it.tDelta, - cnt: it.cnt, - zCnt: it.zCnt, - pBuckets: pBuckets, - nBuckets: nBuckets, - sum: it.sum, + schema: it.schema, + zThreshold: it.zThreshold, + pSpans: it.pSpans, + nSpans: it.nSpans, + customValues: it.customValues, + t: it.t, + tDelta: it.tDelta, + cnt: it.cnt, + zCnt: it.zCnt, + pBuckets: pBuckets, + nBuckets: nBuckets, + sum: it.sum, } if it.numTotal == 0 { a.sum.leading = 0xff @@ -191,6 +193,7 @@ type FloatHistogramAppender struct { schema int32 zThreshold float64 pSpans, nSpans []histogram.Span + customValues []float64 t, tDelta int64 sum, cnt, zCnt xorValue @@ -222,6 +225,7 @@ func (a *FloatHistogramAppender) Append(int64, float64) { // // The chunk is not appendable in the following cases: // - The schema has changed. +// - The custom bounds have changed if the current schema is custom buckets. // - The threshold for the zero bucket has changed. // - Any buckets have disappeared. // - There was a counter reset in the count of observations or in any bucket, including the zero bucket. @@ -263,6 +267,11 @@ func (a *FloatHistogramAppender) appendable(h *histogram.FloatHistogram) ( return } + if histogram.IsCustomBucketsSchema(h.Schema) && !histogram.FloatBucketsMatch(h.CustomValues, a.customValues) { + counterReset = true + return + } + if h.ZeroCount < a.zCnt.value { // There has been a counter reset since ZeroThreshold didn't change. counterReset = true @@ -303,6 +312,7 @@ func (a *FloatHistogramAppender) appendable(h *histogram.FloatHistogram) ( // // The chunk is not appendable in the following cases: // - The schema has changed. +// - The custom bounds have changed if the current schema is custom buckets. // - The threshold for the zero bucket has changed. // - The last sample in the chunk was stale while the current sample is not stale. func (a *FloatHistogramAppender) appendableGauge(h *histogram.FloatHistogram) ( @@ -329,6 +339,10 @@ func (a *FloatHistogramAppender) appendableGauge(h *histogram.FloatHistogram) ( return } + if histogram.IsCustomBucketsSchema(h.Schema) && !histogram.FloatBucketsMatch(h.CustomValues, a.customValues) { + return + } + positiveInserts, backwardPositiveInserts, positiveSpans = expandSpansBothWays(a.pSpans, h.PositiveSpans) negativeInserts, backwardNegativeInserts, negativeSpans = expandSpansBothWays(a.nSpans, h.NegativeSpans) okToAppend = true @@ -422,7 +436,7 @@ func (a *FloatHistogramAppender) appendFloatHistogram(t int64, h *histogram.Floa if num == 0 { // The first append gets the privilege to dictate the layout // but it's also responsible for encoding it into the chunk! - writeHistogramChunkLayout(a.b, h.Schema, h.ZeroThreshold, h.PositiveSpans, h.NegativeSpans) + writeHistogramChunkLayout(a.b, h.Schema, h.ZeroThreshold, h.PositiveSpans, h.NegativeSpans, h.CustomValues) a.schema = h.Schema a.zThreshold = h.ZeroThreshold @@ -438,6 +452,12 @@ func (a *FloatHistogramAppender) appendFloatHistogram(t int64, h *histogram.Floa } else { a.nSpans = nil } + if len(h.CustomValues) > 0 { + a.customValues = make([]float64, len(h.CustomValues)) + copy(a.customValues, h.CustomValues) + } else { + a.customValues = nil + } numPBuckets, numNBuckets := countSpans(h.PositiveSpans), countSpans(h.NegativeSpans) if numPBuckets > 0 { @@ -693,6 +713,7 @@ type floatHistogramIterator struct { schema int32 zThreshold float64 pSpans, nSpans []histogram.Span + customValues []float64 // For the fields that are tracked as deltas and ultimately dod's. t int64 @@ -753,6 +774,7 @@ func (it *floatHistogramIterator) AtFloatHistogram(fh *histogram.FloatHistogram) NegativeSpans: it.nSpans, PositiveBuckets: it.pBuckets, NegativeBuckets: it.nBuckets, + CustomValues: it.customValues, } } @@ -775,6 +797,9 @@ func (it *floatHistogramIterator) AtFloatHistogram(fh *histogram.FloatHistogram) fh.NegativeBuckets = resize(fh.NegativeBuckets, len(it.nBuckets)) copy(fh.NegativeBuckets, it.nBuckets) + fh.CustomValues = resize(fh.CustomValues, len(it.customValues)) + copy(fh.CustomValues, it.customValues) + return it.t, fh } @@ -819,7 +844,7 @@ func (it *floatHistogramIterator) Next() ValueType { // The first read is responsible for reading the chunk layout // and for initializing fields that depend on it. We give // counter reset info at chunk level, hence we discard it here. - schema, zeroThreshold, posSpans, negSpans, err := readHistogramChunkLayout(&it.br) + schema, zeroThreshold, posSpans, negSpans, customValues, err := readHistogramChunkLayout(&it.br) if err != nil { it.err = err return ValNone @@ -827,6 +852,7 @@ func (it *floatHistogramIterator) Next() ValueType { it.schema = schema it.zThreshold = zeroThreshold it.pSpans, it.nSpans = posSpans, negSpans + it.customValues = customValues numPBuckets, numNBuckets := countSpans(posSpans), countSpans(negSpans) // Allocate bucket slices as needed, recycling existing slices // in case this iterator was reset and already has slices of a diff --git a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram.go b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram.go index e12aec4dcd..aa74badd10 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram.go @@ -69,6 +69,7 @@ func (c *HistogramChunk) NumSamples() int { func (c *HistogramChunk) Layout() ( schema int32, zeroThreshold float64, negativeSpans, positiveSpans []histogram.Span, + customValues []float64, err error, ) { if c.NumSamples() == 0 { @@ -131,6 +132,7 @@ func (c *HistogramChunk) Appender() (Appender, error) { zThreshold: it.zThreshold, pSpans: it.pSpans, nSpans: it.nSpans, + customValues: it.customValues, t: it.t, cnt: it.cnt, zCnt: it.zCnt, @@ -198,6 +200,7 @@ type HistogramAppender struct { schema int32 zThreshold float64 pSpans, nSpans []histogram.Span + customValues []float64 // Although we intend to start new chunks on counter resets, we still // have to handle negative deltas for gauge histograms. Therefore, even @@ -241,6 +244,7 @@ func (a *HistogramAppender) Append(int64, float64) { // The chunk is not appendable in the following cases: // // - The schema has changed. +// - The custom bounds have changed if the current schema is custom buckets. // - The threshold for the zero bucket has changed. // - Any buckets have disappeared. // - There was a counter reset in the count of observations or in any bucket, @@ -283,6 +287,11 @@ func (a *HistogramAppender) appendable(h *histogram.Histogram) ( return } + if histogram.IsCustomBucketsSchema(h.Schema) && !histogram.FloatBucketsMatch(h.CustomValues, a.customValues) { + counterReset = true + return + } + if h.ZeroCount < a.zCnt { // There has been a counter reset since ZeroThreshold didn't change. counterReset = true @@ -323,6 +332,7 @@ func (a *HistogramAppender) appendable(h *histogram.Histogram) ( // // The chunk is not appendable in the following cases: // - The schema has changed. +// - The custom bounds have changed if the current schema is custom buckets. // - The threshold for the zero bucket has changed. // - The last sample in the chunk was stale while the current sample is not stale. func (a *HistogramAppender) appendableGauge(h *histogram.Histogram) ( @@ -349,6 +359,10 @@ func (a *HistogramAppender) appendableGauge(h *histogram.Histogram) ( return } + if histogram.IsCustomBucketsSchema(h.Schema) && !histogram.FloatBucketsMatch(h.CustomValues, a.customValues) { + return + } + positiveInserts, backwardPositiveInserts, positiveSpans = expandSpansBothWays(a.pSpans, h.PositiveSpans) negativeInserts, backwardNegativeInserts, negativeSpans = expandSpansBothWays(a.nSpans, h.NegativeSpans) okToAppend = true @@ -442,7 +456,7 @@ func (a *HistogramAppender) appendHistogram(t int64, h *histogram.Histogram) { if num == 0 { // The first append gets the privilege to dictate the layout // but it's also responsible for encoding it into the chunk! - writeHistogramChunkLayout(a.b, h.Schema, h.ZeroThreshold, h.PositiveSpans, h.NegativeSpans) + writeHistogramChunkLayout(a.b, h.Schema, h.ZeroThreshold, h.PositiveSpans, h.NegativeSpans, h.CustomValues) a.schema = h.Schema a.zThreshold = h.ZeroThreshold @@ -458,6 +472,12 @@ func (a *HistogramAppender) appendHistogram(t int64, h *histogram.Histogram) { } else { a.nSpans = nil } + if len(h.CustomValues) > 0 { + a.customValues = make([]float64, len(h.CustomValues)) + copy(a.customValues, h.CustomValues) + } else { + a.customValues = nil + } numPBuckets, numNBuckets := countSpans(h.PositiveSpans), countSpans(h.NegativeSpans) if numPBuckets > 0 { @@ -741,6 +761,7 @@ type histogramIterator struct { schema int32 zThreshold float64 pSpans, nSpans []histogram.Span + customValues []float64 // For the fields that are tracked as deltas and ultimately dod's. t int64 @@ -797,6 +818,7 @@ func (it *histogramIterator) AtHistogram(h *histogram.Histogram) (int64, *histog NegativeSpans: it.nSpans, PositiveBuckets: it.pBuckets, NegativeBuckets: it.nBuckets, + CustomValues: it.customValues, } } @@ -819,6 +841,9 @@ func (it *histogramIterator) AtHistogram(h *histogram.Histogram) (int64, *histog h.NegativeBuckets = resize(h.NegativeBuckets, len(it.nBuckets)) copy(h.NegativeBuckets, it.nBuckets) + h.CustomValues = resize(h.CustomValues, len(it.customValues)) + copy(h.CustomValues, it.customValues) + return it.t, h } @@ -839,6 +864,7 @@ func (it *histogramIterator) AtFloatHistogram(fh *histogram.FloatHistogram) (int NegativeSpans: it.nSpans, PositiveBuckets: it.pFloatBuckets, NegativeBuckets: it.nFloatBuckets, + CustomValues: it.customValues, } } @@ -869,6 +895,9 @@ func (it *histogramIterator) AtFloatHistogram(fh *histogram.FloatHistogram) (int fh.NegativeBuckets[i] = currentNegative } + fh.CustomValues = resize(fh.CustomValues, len(it.customValues)) + copy(fh.CustomValues, it.customValues) + return it.t, fh } @@ -927,7 +956,7 @@ func (it *histogramIterator) Next() ValueType { // The first read is responsible for reading the chunk layout // and for initializing fields that depend on it. We give // counter reset info at chunk level, hence we discard it here. - schema, zeroThreshold, posSpans, negSpans, err := readHistogramChunkLayout(&it.br) + schema, zeroThreshold, posSpans, negSpans, customValues, err := readHistogramChunkLayout(&it.br) if err != nil { it.err = err return ValNone @@ -935,6 +964,7 @@ func (it *histogramIterator) Next() ValueType { it.schema = schema it.zThreshold = zeroThreshold it.pSpans, it.nSpans = posSpans, negSpans + it.customValues = customValues numPBuckets, numNBuckets := countSpans(posSpans), countSpans(negSpans) // The code below recycles existing slices in case this iterator // was reset and already has slices of a sufficient capacity. diff --git a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram_meta.go b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram_meta.go index 9aae485a83..c5381ba2fb 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram_meta.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/histogram_meta.go @@ -21,17 +21,21 @@ import ( func writeHistogramChunkLayout( b *bstream, schema int32, zeroThreshold float64, - positiveSpans, negativeSpans []histogram.Span, + positiveSpans, negativeSpans []histogram.Span, customValues []float64, ) { putZeroThreshold(b, zeroThreshold) putVarbitInt(b, int64(schema)) putHistogramChunkLayoutSpans(b, positiveSpans) putHistogramChunkLayoutSpans(b, negativeSpans) + if histogram.IsCustomBucketsSchema(schema) { + putHistogramChunkLayoutCustomBounds(b, customValues) + } } func readHistogramChunkLayout(b *bstreamReader) ( schema int32, zeroThreshold float64, positiveSpans, negativeSpans []histogram.Span, + customValues []float64, err error, ) { zeroThreshold, err = readZeroThreshold(b) @@ -55,6 +59,13 @@ func readHistogramChunkLayout(b *bstreamReader) ( return } + if histogram.IsCustomBucketsSchema(schema) { + customValues, err = readHistogramChunkLayoutCustomBounds(b) + if err != nil { + return + } + } + return } @@ -91,6 +102,30 @@ func readHistogramChunkLayoutSpans(b *bstreamReader) ([]histogram.Span, error) { return spans, nil } +func putHistogramChunkLayoutCustomBounds(b *bstream, customValues []float64) { + putVarbitUint(b, uint64(len(customValues))) + for _, bound := range customValues { + putCustomBound(b, bound) + } +} + +func readHistogramChunkLayoutCustomBounds(b *bstreamReader) ([]float64, error) { + var customValues []float64 + num, err := readVarbitUint(b) + if err != nil { + return nil, err + } + for i := 0; i < int(num); i++ { + bound, err := readCustomBound(b) + if err != nil { + return nil, err + } + + customValues = append(customValues, bound) + } + return customValues, nil +} + // putZeroThreshold writes the zero threshold to the bstream. It stores typical // values in just one byte, but needs 9 bytes for other values. In detail: // - If the threshold is 0, store a single zero byte. @@ -139,6 +174,59 @@ func readZeroThreshold(br *bstreamReader) (float64, error) { } } +// isWholeWhenMultiplied checks to see if the number when multiplied by 1000 can +// be converted into an integer without losing precision. +func isWholeWhenMultiplied(in float64) bool { + i := uint(math.Round(in * 1000)) + out := float64(i) / 1000 + return in == out +} + +// putCustomBound writes a custom bound to the bstream. It stores values from +// 0 to 33554.430 (inclusive) that are multiples of 0.001 in unsigned varbit +// encoding of up to 4 bytes, but needs 1 bit + 8 bytes for other values like +// negative numbers, numbers greater than 33554.430, or numbers that are not +// a multiple of 0.001, on the assumption that they are less common. In detail: +// - Multiply the bound by 1000, without rounding. +// - If the multiplied bound is >= 0, <= 33554430 and a whole number, +// add 1 and store it in unsigned varbit encoding. All these numbers are +// greater than 0, so the leading bit of the varbit is always 1! +// - Otherwise, store a 0 bit, followed by the 8 bytes of the original +// bound as a float64. +// +// When reading the values, we can first decode a value as unsigned varbit, +// if it's 0, then we read the next 8 bytes as a float64, otherwise +// we can convert the value to a float64 by subtracting 1 and dividing by 1000. +func putCustomBound(b *bstream, f float64) { + tf := f * 1000 + // 33554431-1 comes from the maximum that can be stored in a varbit in 4 + // bytes, other values are stored in 8 bytes anyway. + if tf < 0 || tf > 33554430 || !isWholeWhenMultiplied(f) { + b.writeBit(zero) + b.writeBits(math.Float64bits(f), 64) + return + } + putVarbitUint(b, uint64(math.Round(tf))+1) +} + +// readCustomBound reads the custom bound written with putCustomBound. +func readCustomBound(br *bstreamReader) (float64, error) { + b, err := readVarbitUint(br) + if err != nil { + return 0, err + } + switch b { + case 0: + v, err := br.readBits(64) + if err != nil { + return 0, err + } + return math.Float64frombits(v), nil + default: + return float64(b-1) / 1000, nil + } +} + type bucketIterator struct { spans []histogram.Span span int // Span position of last yielded bucket. diff --git a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/xor.go b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/xor.go index 9430de3964..3177762f81 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/xor.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/chunkenc/xor.go @@ -60,7 +60,7 @@ type XORChunk struct { b bstream } -// NewXORChunk returns a new chunk with XOR encoding of the given size. +// NewXORChunk returns a new chunk with XOR encoding. func NewXORChunk() *XORChunk { b := make([]byte, 2, 128) return &XORChunk{b: bstream{stream: b, count: 0}} diff --git a/vendor/github.com/prometheus/prometheus/tsdb/chunks/chunks.go b/vendor/github.com/prometheus/prometheus/tsdb/chunks/chunks.go index e7df0eeed2..ec0f6d4036 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/chunks/chunks.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/chunks/chunks.go @@ -133,15 +133,6 @@ type Meta struct { // Time range the data covers. // When MaxTime == math.MaxInt64 the chunk is still open and being appended to. MinTime, MaxTime int64 - - // OOOLastRef, OOOLastMinTime and OOOLastMaxTime are kept as markers for - // overlapping chunks. - // These fields point to the last created out of order Chunk (the head) that existed - // when Series() was called and was overlapping. - // Series() and Chunk() method responses should be consistent for the same - // query even if new data is added in between the calls. - OOOLastRef ChunkRef - OOOLastMinTime, OOOLastMaxTime int64 } // ChunkFromSamples requires all samples to have the same type. diff --git a/vendor/github.com/prometheus/prometheus/tsdb/compact.go b/vendor/github.com/prometheus/prometheus/tsdb/compact.go index c2ae23b2e4..9ef42b339b 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/compact.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/compact.go @@ -58,19 +58,23 @@ type Compactor interface { // Results returned when compactions are in progress are undefined. Plan(dir string) ([]string, error) - // Write persists a Block into a directory. - // No Block is written when resulting Block has 0 samples, and returns empty ulid.ULID{}. - Write(dest string, b BlockReader, mint, maxt int64, base *BlockMeta) (ulid.ULID, error) + // Write persists one or more Blocks into a directory. + // No Block is written when resulting Block has 0 samples and returns an empty slice. + // Prometheus always return one or no block. The interface allows returning more than one + // block for downstream users to experiment with compactor. + Write(dest string, b BlockReader, mint, maxt int64, base *BlockMeta) ([]ulid.ULID, error) // Compact runs compaction against the provided directories. Must // only be called concurrently with results of Plan(). // Can optionally pass a list of already open blocks, // to avoid having to reopen them. - // When resulting Block has 0 samples + // Prometheus always return one or no block. The interface allows returning more than one + // block for downstream users to experiment with compactor. + // When one resulting Block has 0 samples // * No block is written. // * The source dirs are marked Deletable. - // * Returns empty ulid.ULID{}. - Compact(dest string, dirs []string, open []*Block) (ulid.ULID, error) + // * Block is not included in the result. + Compact(dest string, dirs []string, open []*Block) ([]ulid.ULID, error) } // LeveledCompactor implements the Compactor interface. @@ -441,11 +445,11 @@ func CompactBlockMetas(uid ulid.ULID, blocks ...*BlockMeta) *BlockMeta { // Compact creates a new block in the compactor's directory from the blocks in the // provided directories. -func (c *LeveledCompactor) Compact(dest string, dirs []string, open []*Block) (uid ulid.ULID, err error) { +func (c *LeveledCompactor) Compact(dest string, dirs []string, open []*Block) ([]ulid.ULID, error) { return c.CompactWithBlockPopulator(dest, dirs, open, DefaultBlockPopulator{}) } -func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, open []*Block, blockPopulator BlockPopulator) (uid ulid.ULID, err error) { +func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, open []*Block, blockPopulator BlockPopulator) ([]ulid.ULID, error) { var ( blocks []BlockReader bs []*Block @@ -457,7 +461,7 @@ func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, for _, d := range dirs { meta, _, err := readMetaFile(d) if err != nil { - return uid, err + return nil, err } var b *Block @@ -475,7 +479,7 @@ func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, var err error b, err = OpenBlock(c.logger, d, c.chunkPool) if err != nil { - return uid, err + return nil, err } defer b.Close() } @@ -486,10 +490,10 @@ func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, uids = append(uids, meta.ULID.String()) } - uid = ulid.MustNew(ulid.Now(), rand.Reader) + uid := ulid.MustNew(ulid.Now(), rand.Reader) meta := CompactBlockMetas(uid, metas...) - err = c.write(dest, meta, blockPopulator, blocks...) + err := c.write(dest, meta, blockPopulator, blocks...) if err == nil { if meta.Stats.NumSamples == 0 { for _, b := range bs { @@ -503,25 +507,25 @@ func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, } b.numBytesMeta = n } - uid = ulid.ULID{} level.Info(c.logger).Log( "msg", "compact blocks resulted in empty block", "count", len(blocks), "sources", fmt.Sprintf("%v", uids), "duration", time.Since(start), ) - } else { - level.Info(c.logger).Log( - "msg", "compact blocks", - "count", len(blocks), - "mint", meta.MinTime, - "maxt", meta.MaxTime, - "ulid", meta.ULID, - "sources", fmt.Sprintf("%v", uids), - "duration", time.Since(start), - ) + return nil, nil } - return uid, nil + + level.Info(c.logger).Log( + "msg", "compact blocks", + "count", len(blocks), + "mint", meta.MinTime, + "maxt", meta.MaxTime, + "ulid", meta.ULID, + "sources", fmt.Sprintf("%v", uids), + "duration", time.Since(start), + ) + return []ulid.ULID{uid}, nil } errs := tsdb_errors.NewMulti(err) @@ -533,10 +537,10 @@ func (c *LeveledCompactor) CompactWithBlockPopulator(dest string, dirs []string, } } - return uid, errs.Err() + return nil, errs.Err() } -func (c *LeveledCompactor) Write(dest string, b BlockReader, mint, maxt int64, base *BlockMeta) (ulid.ULID, error) { +func (c *LeveledCompactor) Write(dest string, b BlockReader, mint, maxt int64, base *BlockMeta) ([]ulid.ULID, error) { start := time.Now() uid := ulid.MustNew(ulid.Now(), rand.Reader) @@ -560,7 +564,7 @@ func (c *LeveledCompactor) Write(dest string, b BlockReader, mint, maxt int64, b err := c.write(dest, meta, DefaultBlockPopulator{}, b) if err != nil { - return uid, err + return nil, err } if meta.Stats.NumSamples == 0 { @@ -570,7 +574,7 @@ func (c *LeveledCompactor) Write(dest string, b BlockReader, mint, maxt int64, b "maxt", meta.MaxTime, "duration", time.Since(start), ) - return ulid.ULID{}, nil + return nil, nil } level.Info(c.logger).Log( @@ -581,7 +585,7 @@ func (c *LeveledCompactor) Write(dest string, b BlockReader, mint, maxt int64, b "duration", time.Since(start), "ooo", meta.Compaction.FromOutOfOrder(), ) - return uid, nil + return []ulid.ULID{uid}, nil } // instrumentedChunkWriter is used for level 1 compactions to record statistics @@ -652,7 +656,7 @@ func (c *LeveledCompactor) write(dest string, meta *BlockMeta, blockPopulator Bl } closers = append(closers, indexw) - if err := blockPopulator.PopulateBlock(c.ctx, c.metrics, c.logger, c.chunkPool, c.mergeFunc, blocks, meta, indexw, chunkw); err != nil { + if err := blockPopulator.PopulateBlock(c.ctx, c.metrics, c.logger, c.chunkPool, c.mergeFunc, blocks, meta, indexw, chunkw, AllSortedPostings); err != nil { return fmt.Errorf("populate block: %w", err) } @@ -718,7 +722,20 @@ func (c *LeveledCompactor) write(dest string, meta *BlockMeta, blockPopulator Bl } type BlockPopulator interface { - PopulateBlock(ctx context.Context, metrics *CompactorMetrics, logger log.Logger, chunkPool chunkenc.Pool, mergeFunc storage.VerticalChunkSeriesMergeFunc, blocks []BlockReader, meta *BlockMeta, indexw IndexWriter, chunkw ChunkWriter) error + PopulateBlock(ctx context.Context, metrics *CompactorMetrics, logger log.Logger, chunkPool chunkenc.Pool, mergeFunc storage.VerticalChunkSeriesMergeFunc, blocks []BlockReader, meta *BlockMeta, indexw IndexWriter, chunkw ChunkWriter, postingsFunc IndexReaderPostingsFunc) error +} + +// IndexReaderPostingsFunc is a function to get a sorted posting iterator from a given index reader. +type IndexReaderPostingsFunc func(ctx context.Context, reader IndexReader) index.Postings + +// AllSortedPostings returns a sorted all posting iterator from the input index reader. +func AllSortedPostings(ctx context.Context, reader IndexReader) index.Postings { + k, v := index.AllPostingsKey() + all, err := reader.Postings(ctx, k, v) + if err != nil { + return index.ErrPostings(err) + } + return reader.SortedPostings(all) } type DefaultBlockPopulator struct{} @@ -726,7 +743,7 @@ type DefaultBlockPopulator struct{} // PopulateBlock fills the index and chunk writers with new data gathered as the union // of the provided blocks. It returns meta information for the new block. // It expects sorted blocks input by mint. -func (c DefaultBlockPopulator) PopulateBlock(ctx context.Context, metrics *CompactorMetrics, logger log.Logger, chunkPool chunkenc.Pool, mergeFunc storage.VerticalChunkSeriesMergeFunc, blocks []BlockReader, meta *BlockMeta, indexw IndexWriter, chunkw ChunkWriter) (err error) { +func (c DefaultBlockPopulator) PopulateBlock(ctx context.Context, metrics *CompactorMetrics, logger log.Logger, chunkPool chunkenc.Pool, mergeFunc storage.VerticalChunkSeriesMergeFunc, blocks []BlockReader, meta *BlockMeta, indexw IndexWriter, chunkw ChunkWriter, postingsFunc IndexReaderPostingsFunc) (err error) { if len(blocks) == 0 { return errors.New("cannot populate block from no readers") } @@ -784,14 +801,9 @@ func (c DefaultBlockPopulator) PopulateBlock(ctx context.Context, metrics *Compa } closers = append(closers, tombsr) - k, v := index.AllPostingsKey() - all, err := indexr.Postings(ctx, k, v) - if err != nil { - return err - } - all = indexr.SortedPostings(all) + postings := postingsFunc(ctx, indexr) // Blocks meta is half open: [min, max), so subtract 1 to ensure we don't hold samples with exact meta.MaxTime timestamp. - sets = append(sets, NewBlockChunkSeriesSet(b.Meta().ULID, indexr, chunkr, tombsr, all, meta.MinTime, meta.MaxTime-1, false)) + sets = append(sets, NewBlockChunkSeriesSet(b.Meta().ULID, indexr, chunkr, tombsr, postings, meta.MinTime, meta.MaxTime-1, false)) syms := indexr.Symbols() if i == 0 { symbols = syms diff --git a/vendor/github.com/prometheus/prometheus/tsdb/db.go b/vendor/github.com/prometheus/prometheus/tsdb/db.go index 5651b403e5..87870a8472 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/db.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/db.go @@ -192,12 +192,22 @@ type Options struct { // NewCompactorFunc is a function that returns a TSDB compactor. NewCompactorFunc NewCompactorFunc + + // BlockQuerierFunc is a function to return storage.Querier from a BlockReader. + BlockQuerierFunc BlockQuerierFunc + + // BlockChunkQuerierFunc is a function to return storage.ChunkQuerier from a BlockReader. + BlockChunkQuerierFunc BlockChunkQuerierFunc } type NewCompactorFunc func(ctx context.Context, r prometheus.Registerer, l log.Logger, ranges []int64, pool chunkenc.Pool, opts *Options) (Compactor, error) type BlocksToDeleteFunc func(blocks []*Block) map[ulid.ULID]struct{} +type BlockQuerierFunc func(b BlockReader, mint, maxt int64) (storage.Querier, error) + +type BlockChunkQuerierFunc func(b BlockReader, mint, maxt int64) (storage.ChunkQuerier, error) + // DB handles reads and writes of time series falling into // a hashed partition of a seriedb. type DB struct { @@ -244,6 +254,10 @@ type DB struct { writeNotified wlog.WriteNotified registerer prometheus.Registerer + + blockQuerierFunc BlockQuerierFunc + + blockChunkQuerierFunc BlockChunkQuerierFunc } type dbMetrics struct { @@ -559,10 +573,12 @@ func (db *DBReadOnly) loadDataAsQueryable(maxt int64) (storage.SampleAndChunkQue db.closers = append(db.closers, head) return &DB{ - dir: db.dir, - logger: db.logger, - blocks: blocks, - head: head, + dir: db.dir, + logger: db.logger, + blocks: blocks, + head: head, + blockQuerierFunc: NewBlockQuerier, + blockChunkQuerierFunc: NewBlockChunkQuerier, }, nil } @@ -870,6 +886,18 @@ func open(dir string, l log.Logger, r prometheus.Registerer, opts *Options, rngs } db.compactCancel = cancel + if opts.BlockQuerierFunc == nil { + db.blockQuerierFunc = NewBlockQuerier + } else { + db.blockQuerierFunc = opts.BlockQuerierFunc + } + + if opts.BlockChunkQuerierFunc == nil { + db.blockChunkQuerierFunc = NewBlockChunkQuerier + } else { + db.blockChunkQuerierFunc = opts.BlockChunkQuerierFunc + } + var wal, wbl *wlog.WL segmentSize := wlog.DefaultSegmentSize // Wal is enabled. @@ -1267,6 +1295,9 @@ func (db *DB) CompactOOOHead(ctx context.Context) error { return db.compactOOOHead(ctx) } +// Callback for testing. +var compactOOOHeadTestingCallback func() + func (db *DB) compactOOOHead(ctx context.Context) error { if !db.oooWasEnabled.Load() { return nil @@ -1276,6 +1307,11 @@ func (db *DB) compactOOOHead(ctx context.Context) error { return fmt.Errorf("get ooo compaction head: %w", err) } + if compactOOOHeadTestingCallback != nil { + compactOOOHeadTestingCallback() + compactOOOHeadTestingCallback = nil + } + ulids, err := db.compactOOO(db.dir, oooHead) if err != nil { return fmt.Errorf("compact ooo head: %w", err) @@ -1336,13 +1372,11 @@ func (db *DB) compactOOO(dest string, oooHead *OOOCompactionHead) (_ []ulid.ULID for t := blockSize * (oooHeadMint / blockSize); t <= oooHeadMaxt; t += blockSize { mint, maxt := t, t+blockSize // Block intervals are half-open: [b.MinTime, b.MaxTime). Block intervals are always +1 than the total samples it includes. - uid, err := db.compactor.Write(dest, oooHead.CloneForTimeRange(mint, maxt-1), mint, maxt, meta) + uids, err := db.compactor.Write(dest, oooHead.CloneForTimeRange(mint, maxt-1), mint, maxt, meta) if err != nil { return nil, err } - if uid.Compare(ulid.ULID{}) != 0 { - ulids = append(ulids, uid) - } + ulids = append(ulids, uids...) } if len(ulids) == 0 { @@ -1364,23 +1398,26 @@ func (db *DB) compactOOO(dest string, oooHead *OOOCompactionHead) (_ []ulid.ULID // compactHead compacts the given RangeHead. // The compaction mutex should be held before calling this method. func (db *DB) compactHead(head *RangeHead) error { - uid, err := db.compactor.Write(db.dir, head, head.MinTime(), head.BlockMaxTime(), nil) + uids, err := db.compactor.Write(db.dir, head, head.MinTime(), head.BlockMaxTime(), nil) if err != nil { return fmt.Errorf("persist head block: %w", err) } if err := db.reloadBlocks(); err != nil { - if errRemoveAll := os.RemoveAll(filepath.Join(db.dir, uid.String())); errRemoveAll != nil { - return tsdb_errors.NewMulti( - fmt.Errorf("reloadBlocks blocks: %w", err), - fmt.Errorf("delete persisted head block after failed db reloadBlocks:%s: %w", uid, errRemoveAll), - ).Err() + multiErr := tsdb_errors.NewMulti(fmt.Errorf("reloadBlocks blocks: %w", err)) + for _, uid := range uids { + if errRemoveAll := os.RemoveAll(filepath.Join(db.dir, uid.String())); errRemoveAll != nil { + multiErr.Add(fmt.Errorf("delete persisted head block after failed db reloadBlocks:%s: %w", uid, errRemoveAll)) + } } - return fmt.Errorf("reloadBlocks blocks: %w", err) + return multiErr.Err() } if err = db.head.truncateMemory(head.BlockMaxTime()); err != nil { return fmt.Errorf("head memory truncate: %w", err) } + + db.head.RebuildSymbolTable(db.logger) + return nil } @@ -1411,16 +1448,19 @@ func (db *DB) compactBlocks() (err error) { default: } - uid, err := db.compactor.Compact(db.dir, plan, db.blocks) + uids, err := db.compactor.Compact(db.dir, plan, db.blocks) if err != nil { return fmt.Errorf("compact %s: %w", plan, err) } if err := db.reloadBlocks(); err != nil { - if err := os.RemoveAll(filepath.Join(db.dir, uid.String())); err != nil { - return fmt.Errorf("delete compacted block after failed db reloadBlocks:%s: %w", uid, err) + errs := tsdb_errors.NewMulti(fmt.Errorf("reloadBlocks blocks: %w", err)) + for _, uid := range uids { + if errRemoveAll := os.RemoveAll(filepath.Join(db.dir, uid.String())); errRemoveAll != nil { + errs.Add(fmt.Errorf("delete persisted block after failed db reloadBlocks:%s: %w", uid, errRemoveAll)) + } } - return fmt.Errorf("reloadBlocks blocks: %w", err) + return errs.Err() } } @@ -1541,12 +1581,15 @@ func (db *DB) reloadBlocks() (err error) { oldBlocks := db.blocks db.blocks = toLoad - blockMetas := make([]BlockMeta, 0, len(toLoad)) - for _, b := range toLoad { - blockMetas = append(blockMetas, b.Meta()) - } - if overlaps := OverlappingBlocks(blockMetas); len(overlaps) > 0 { - level.Warn(db.logger).Log("msg", "Overlapping blocks found during reloadBlocks", "detail", overlaps.String()) + // Only check overlapping blocks when overlapping compaction is enabled. + if db.opts.EnableOverlappingCompaction { + blockMetas := make([]BlockMeta, 0, len(toLoad)) + for _, b := range toLoad { + blockMetas = append(blockMetas, b.Meta()) + } + if overlaps := OverlappingBlocks(blockMetas); len(overlaps) > 0 { + level.Warn(db.logger).Log("msg", "Overlapping blocks found during reloadBlocks", "detail", overlaps.String()) + } } // Append blocks to old, deletable blocks, so we can close them. @@ -1960,7 +2003,7 @@ func (db *DB) Querier(mint, maxt int64) (_ storage.Querier, err error) { if maxt >= db.head.MinTime() { rh := NewRangeHead(db.head, mint, maxt) var err error - inOrderHeadQuerier, err := NewBlockQuerier(rh, mint, maxt) + inOrderHeadQuerier, err := db.blockQuerierFunc(rh, mint, maxt) if err != nil { return nil, fmt.Errorf("open block querier for head %s: %w", rh, err) } @@ -1977,7 +2020,7 @@ func (db *DB) Querier(mint, maxt int64) (_ storage.Querier, err error) { } if getNew { rh := NewRangeHead(db.head, newMint, maxt) - inOrderHeadQuerier, err = NewBlockQuerier(rh, newMint, maxt) + inOrderHeadQuerier, err = db.blockQuerierFunc(rh, newMint, maxt) if err != nil { return nil, fmt.Errorf("open block querier for head while getting new querier %s: %w", rh, err) } @@ -1991,9 +2034,9 @@ func (db *DB) Querier(mint, maxt int64) (_ storage.Querier, err error) { if overlapsClosedInterval(mint, maxt, db.head.MinOOOTime(), db.head.MaxOOOTime()) { rh := NewOOORangeHead(db.head, mint, maxt, db.lastGarbageCollectedMmapRef) var err error - outOfOrderHeadQuerier, err := NewBlockQuerier(rh, mint, maxt) + outOfOrderHeadQuerier, err := db.blockQuerierFunc(rh, mint, maxt) if err != nil { - // If NewBlockQuerier() failed, make sure to clean up the pending read created by NewOOORangeHead. + // If BlockQuerierFunc() failed, make sure to clean up the pending read created by NewOOORangeHead. rh.isoState.Close() return nil, fmt.Errorf("open block querier for ooo head %s: %w", rh, err) @@ -2003,7 +2046,7 @@ func (db *DB) Querier(mint, maxt int64) (_ storage.Querier, err error) { } for _, b := range blocks { - q, err := NewBlockQuerier(b, mint, maxt) + q, err := db.blockQuerierFunc(b, mint, maxt) if err != nil { return nil, fmt.Errorf("open querier for block %s: %w", b, err) } @@ -2041,7 +2084,7 @@ func (db *DB) blockChunkQuerierForRange(mint, maxt int64) (_ []storage.ChunkQuer if maxt >= db.head.MinTime() { rh := NewRangeHead(db.head, mint, maxt) - inOrderHeadQuerier, err := NewBlockChunkQuerier(rh, mint, maxt) + inOrderHeadQuerier, err := db.blockChunkQuerierFunc(rh, mint, maxt) if err != nil { return nil, fmt.Errorf("open querier for head %s: %w", rh, err) } @@ -2058,7 +2101,7 @@ func (db *DB) blockChunkQuerierForRange(mint, maxt int64) (_ []storage.ChunkQuer } if getNew { rh := NewRangeHead(db.head, newMint, maxt) - inOrderHeadQuerier, err = NewBlockChunkQuerier(rh, newMint, maxt) + inOrderHeadQuerier, err = db.blockChunkQuerierFunc(rh, newMint, maxt) if err != nil { return nil, fmt.Errorf("open querier for head while getting new querier %s: %w", rh, err) } @@ -2071,8 +2114,11 @@ func (db *DB) blockChunkQuerierForRange(mint, maxt int64) (_ []storage.ChunkQuer if overlapsClosedInterval(mint, maxt, db.head.MinOOOTime(), db.head.MaxOOOTime()) { rh := NewOOORangeHead(db.head, mint, maxt, db.lastGarbageCollectedMmapRef) - outOfOrderHeadQuerier, err := NewBlockChunkQuerier(rh, mint, maxt) + outOfOrderHeadQuerier, err := db.blockChunkQuerierFunc(rh, mint, maxt) if err != nil { + // If NewBlockQuerier() failed, make sure to clean up the pending read created by NewOOORangeHead. + rh.isoState.Close() + return nil, fmt.Errorf("open block chunk querier for ooo head %s: %w", rh, err) } @@ -2080,7 +2126,7 @@ func (db *DB) blockChunkQuerierForRange(mint, maxt int64) (_ []storage.ChunkQuer } for _, b := range blocks { - q, err := NewBlockChunkQuerier(b, mint, maxt) + q, err := db.blockChunkQuerierFunc(b, mint, maxt) if err != nil { return nil, fmt.Errorf("open querier for block %s: %w", b, err) } @@ -2149,7 +2195,7 @@ func (db *DB) CleanTombstones() (err error) { cleanUpCompleted = true for _, pb := range db.Blocks() { - uid, safeToDelete, cleanErr := pb.CleanTombstones(db.Dir(), db.compactor) + uids, safeToDelete, cleanErr := pb.CleanTombstones(db.Dir(), db.compactor) if cleanErr != nil { return fmt.Errorf("clean tombstones: %s: %w", pb.Dir(), cleanErr) } @@ -2173,7 +2219,7 @@ func (db *DB) CleanTombstones() (err error) { } // Delete new block if it was created. - if uid != nil && *uid != (ulid.ULID{}) { + for _, uid := range uids { dir := filepath.Join(db.Dir(), uid.String()) if err := os.RemoveAll(dir); err != nil { level.Error(db.logger).Log("msg", "failed to delete block after failed `CleanTombstones`", "dir", dir, "err", err) diff --git a/vendor/github.com/prometheus/prometheus/tsdb/head.go b/vendor/github.com/prometheus/prometheus/tsdb/head.go index d5f7144fdb..b7bfaa0fda 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/head.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/head.go @@ -1552,7 +1552,7 @@ func (h *Head) gc() (actualInOrderMint, minOOOTime int64, minMmapFile int) { // Drop old chunks and remember series IDs and hashes if they can be // deleted entirely. - deleted, chunksRemoved, actualInOrderMint, minOOOTime, minMmapFile := h.series.gc(mint, minOOOMmapRef) + deleted, affected, chunksRemoved, actualInOrderMint, minOOOTime, minMmapFile := h.series.gc(mint, minOOOMmapRef) seriesRemoved := len(deleted) h.metrics.seriesRemoved.Add(float64(seriesRemoved)) @@ -1561,7 +1561,7 @@ func (h *Head) gc() (actualInOrderMint, minOOOTime int64, minMmapFile int) { h.numSeries.Sub(uint64(seriesRemoved)) // Remove deleted series IDs from the postings lists. - h.postings.Delete(deleted) + h.postings.Delete(deleted, affected) // Remove tombstones referring to the deleted series. h.tombstones.DeleteTombstones(deleted) @@ -1759,12 +1759,12 @@ type seriesHashmap struct { func (m *seriesHashmap) get(hash uint64, lset labels.Labels) *memSeries { if s, found := m.unique[hash]; found { - if labels.Equal(s.lset, lset) { + if labels.Equal(s.labels(), lset) { return s } } for _, s := range m.conflicts[hash] { - if labels.Equal(s.lset, lset) { + if labels.Equal(s.labels(), lset) { return s } } @@ -1772,7 +1772,7 @@ func (m *seriesHashmap) get(hash uint64, lset labels.Labels) *memSeries { } func (m *seriesHashmap) set(hash uint64, s *memSeries) { - if existing, found := m.unique[hash]; !found || labels.Equal(existing.lset, s.lset) { + if existing, found := m.unique[hash]; !found || labels.Equal(existing.labels(), s.labels()) { m.unique[hash] = s return } @@ -1781,7 +1781,7 @@ func (m *seriesHashmap) set(hash uint64, s *memSeries) { } l := m.conflicts[hash] for i, prev := range l { - if labels.Equal(prev.lset, s.lset) { + if labels.Equal(prev.labels(), s.labels()) { l[i] = s return } @@ -1869,9 +1869,10 @@ func newStripeSeries(stripeSize int, seriesCallback SeriesLifecycleCallback) *st // but the returned map goes into postings.Delete() which expects a map[storage.SeriesRef]struct // and there's no easy way to cast maps. // minMmapFile is the min mmap file number seen in the series (in-order and out-of-order) after gc'ing the series. -func (s *stripeSeries) gc(mint int64, minOOOMmapRef chunks.ChunkDiskMapperRef) (_ map[storage.SeriesRef]struct{}, _ int, _, _ int64, minMmapFile int) { +func (s *stripeSeries) gc(mint int64, minOOOMmapRef chunks.ChunkDiskMapperRef) (_ map[storage.SeriesRef]struct{}, _ map[labels.Label]struct{}, _ int, _, _ int64, minMmapFile int) { var ( deleted = map[storage.SeriesRef]struct{}{} + affected = map[labels.Label]struct{}{} rmChunks = 0 actualMint int64 = math.MaxInt64 minOOOTime int64 = math.MaxInt64 @@ -1927,9 +1928,10 @@ func (s *stripeSeries) gc(mint int64, minOOOMmapRef chunks.ChunkDiskMapperRef) ( } deleted[storage.SeriesRef(series.ref)] = struct{}{} + series.lset.Range(func(l labels.Label) { affected[l] = struct{}{} }) s.hashes[hashShard].del(hash, series.ref) delete(s.series[refShard], series.ref) - deletedForCallback[series.ref] = series.lset + deletedForCallback[series.ref] = series.lset // OK to access lset; series is locked at the top of this function. } s.iterForDeletion(check) @@ -1938,7 +1940,7 @@ func (s *stripeSeries) gc(mint int64, minOOOMmapRef chunks.ChunkDiskMapperRef) ( actualMint = mint } - return deleted, rmChunks, actualMint, minOOOTime, minMmapFile + return deleted, affected, rmChunks, actualMint, minOOOTime, minMmapFile } // The iterForDeletion function iterates through all series, invoking the checkDeletedFunc for each. @@ -2021,7 +2023,7 @@ func (s *stripeSeries) getOrSet(hash uint64, lset labels.Labels, createSeries fu } // Setting the series in the s.hashes marks the creation of series // as any further calls to this methods would return that series. - s.seriesLifecycleCallback.PostCreation(series.lset) + s.seriesLifecycleCallback.PostCreation(series.labels()) i = uint64(series.ref) & uint64(s.size-1) @@ -2062,16 +2064,19 @@ func (s sample) Type() chunkenc.ValueType { // memSeries is the in-memory representation of a series. None of its methods // are goroutine safe and it is the caller's responsibility to lock it. type memSeries struct { - sync.Mutex - + // Members up to the Mutex are not changed after construction, so can be accessed without a lock. ref chunks.HeadSeriesRef - lset labels.Labels meta *metadata.Metadata // Series labels hash to use for sharding purposes. The value is always 0 when sharding has not // been explicitly enabled in TSDB. shardHash uint64 + // Everything after here should only be accessed with the lock held. + sync.Mutex + + lset labels.Labels // Locking required with -tags dedupelabels, not otherwise. + // Immutable chunks on disk that have not yet gone into a block, in order of ascending time stamps. // When compaction runs, chunks get moved into a block and all pointers are shifted like so: // @@ -2094,6 +2099,7 @@ type memSeries struct { nextAt int64 // Timestamp at which to cut the next chunk. histogramChunkHasComputedEndTime bool // True if nextAt has been predicted for the current histograms chunk; false otherwise. + pendingCommit bool // Whether there are samples waiting to be committed to this series. // We keep the last value here (in addition to appending it to the chunk) so we can check for duplicates. lastValue float64 @@ -2109,8 +2115,6 @@ type memSeries struct { // txs is nil if isolation is disabled. txs *txRing - - pendingCommit bool // Whether there are samples waiting to be committed to this series. } // memSeriesOOOFields contains the fields required by memSeries diff --git a/vendor/github.com/prometheus/prometheus/tsdb/head_append.go b/vendor/github.com/prometheus/prometheus/tsdb/head_append.go index 62c3727e28..8d66d1e818 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/head_append.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/head_append.go @@ -554,7 +554,7 @@ func (a *headAppender) AppendExemplar(ref storage.SeriesRef, lset labels.Labels, // Ensure no empty labels have gotten through. e.Labels = e.Labels.WithoutEmpty() - err := a.head.exemplars.ValidateExemplar(s.lset, e) + err := a.head.exemplars.ValidateExemplar(s.labels(), e) if err != nil { if errors.Is(err, storage.ErrDuplicateExemplar) || errors.Is(err, storage.ErrExemplarsDisabled) { // Duplicate, don't return an error but don't accept the exemplar. @@ -708,7 +708,7 @@ func (a *headAppender) GetRef(lset labels.Labels, hash uint64) (storage.SeriesRe return 0, labels.EmptyLabels() } // returned labels must be suitable to pass to Append() - return storage.SeriesRef(s.ref), s.lset + return storage.SeriesRef(s.ref), s.labels() } // log writes all headAppender's data to the WAL. @@ -816,7 +816,7 @@ func (a *headAppender) Commit() (err error) { continue } // We don't instrument exemplar appends here, all is instrumented by storage. - if err := a.head.exemplars.AddExemplar(s.lset, e.exemplar); err != nil { + if err := a.head.exemplars.AddExemplar(s.labels(), e.exemplar); err != nil { if errors.Is(err, storage.ErrOutOfOrderExemplar) { continue } @@ -846,16 +846,17 @@ func (a *headAppender) Commit() (err error) { // number of samples rejected due to: out of bounds: with t < minValidTime (OOO support disabled) floatOOBRejected int - inOrderMint int64 = math.MaxInt64 - inOrderMaxt int64 = math.MinInt64 - ooomint int64 = math.MaxInt64 - ooomaxt int64 = math.MinInt64 - wblSamples []record.RefSample - oooMmapMarkers map[chunks.HeadSeriesRef]chunks.ChunkDiskMapperRef - oooRecords [][]byte - oooCapMax = a.head.opts.OutOfOrderCapMax.Load() - series *memSeries - appendChunkOpts = chunkOpts{ + inOrderMint int64 = math.MaxInt64 + inOrderMaxt int64 = math.MinInt64 + oooMinT int64 = math.MaxInt64 + oooMaxT int64 = math.MinInt64 + wblSamples []record.RefSample + oooMmapMarkers map[chunks.HeadSeriesRef][]chunks.ChunkDiskMapperRef + oooMmapMarkersCount int + oooRecords [][]byte + oooCapMax = a.head.opts.OutOfOrderCapMax.Load() + series *memSeries + appendChunkOpts = chunkOpts{ chunkDiskMapper: a.head.chunkDiskMapper, chunkRange: a.head.chunkRange.Load(), samplesPerChunk: a.head.opts.SamplesPerChunk, @@ -872,6 +873,7 @@ func (a *headAppender) Commit() (err error) { // WBL is not enabled. So no need to collect. wblSamples = nil oooMmapMarkers = nil + oooMmapMarkersCount = 0 return } // The m-map happens before adding a new sample. So we collect @@ -880,12 +882,14 @@ func (a *headAppender) Commit() (err error) { // WBL Before this Commit(): [old samples before this commit for chunk 1] // WBL After this Commit(): [old samples before this commit for chunk 1][new samples in this commit for chunk 1]mmapmarker1[samples for chunk 2]mmapmarker2[samples for chunk 3] if oooMmapMarkers != nil { - markers := make([]record.RefMmapMarker, 0, len(oooMmapMarkers)) - for ref, mmapRef := range oooMmapMarkers { - markers = append(markers, record.RefMmapMarker{ - Ref: ref, - MmapRef: mmapRef, - }) + markers := make([]record.RefMmapMarker, 0, oooMmapMarkersCount) + for ref, mmapRefs := range oooMmapMarkers { + for _, mmapRef := range mmapRefs { + markers = append(markers, record.RefMmapMarker{ + Ref: ref, + MmapRef: mmapRef, + }) + } } r := enc.MmapMarkers(markers, a.head.getBytesBuffer()) oooRecords = append(oooRecords, r) @@ -928,32 +932,39 @@ func (a *headAppender) Commit() (err error) { case oooSample: // Sample is OOO and OOO handling is enabled // and the delta is within the OOO tolerance. - var mmapRef chunks.ChunkDiskMapperRef - ok, chunkCreated, mmapRef = series.insert(s.T, s.V, a.head.chunkDiskMapper, oooCapMax) + var mmapRefs []chunks.ChunkDiskMapperRef + ok, chunkCreated, mmapRefs = series.insert(s.T, s.V, a.head.chunkDiskMapper, oooCapMax) if chunkCreated { r, ok := oooMmapMarkers[series.ref] - if !ok || r != 0 { + if !ok || r != nil { // !ok means there are no markers collected for these samples yet. So we first flush the samples // before setting this m-map marker. - // r != 0 means we have already m-mapped a chunk for this series in the same Commit(). + // r != nil means we have already m-mapped a chunk for this series in the same Commit(). // Hence, before we m-map again, we should add the samples and m-map markers // seen till now to the WBL records. collectOOORecords() } if oooMmapMarkers == nil { - oooMmapMarkers = make(map[chunks.HeadSeriesRef]chunks.ChunkDiskMapperRef) + oooMmapMarkers = make(map[chunks.HeadSeriesRef][]chunks.ChunkDiskMapperRef) + } + if len(mmapRefs) > 0 { + oooMmapMarkers[series.ref] = mmapRefs + oooMmapMarkersCount += len(mmapRefs) + } else { + // No chunk was written to disk, so we need to set an initial marker for this series. + oooMmapMarkers[series.ref] = []chunks.ChunkDiskMapperRef{0} + oooMmapMarkersCount++ } - oooMmapMarkers[series.ref] = mmapRef } if ok { wblSamples = append(wblSamples, s) - if s.T < ooomint { - ooomint = s.T + if s.T < oooMinT { + oooMinT = s.T } - if s.T > ooomaxt { - ooomaxt = s.T + if s.T > oooMaxT { + oooMaxT = s.T } floatOOOAccepted++ } else { @@ -1053,7 +1064,7 @@ func (a *headAppender) Commit() (err error) { a.head.metrics.samplesAppended.WithLabelValues(sampleMetricTypeHistogram).Add(float64(histogramsAppended)) a.head.metrics.outOfOrderSamplesAppended.WithLabelValues(sampleMetricTypeFloat).Add(float64(floatOOOAccepted)) a.head.updateMinMaxTime(inOrderMint, inOrderMaxt) - a.head.updateMinOOOMaxOOOTime(ooomint, ooomaxt) + a.head.updateMinOOOMaxOOOTime(oooMinT, oooMaxT) collectOOORecords() if a.head.wbl != nil { @@ -1069,14 +1080,14 @@ func (a *headAppender) Commit() (err error) { } // insert is like append, except it inserts. Used for OOO samples. -func (s *memSeries) insert(t int64, v float64, chunkDiskMapper *chunks.ChunkDiskMapper, oooCapMax int64) (inserted, chunkCreated bool, mmapRef chunks.ChunkDiskMapperRef) { +func (s *memSeries) insert(t int64, v float64, chunkDiskMapper *chunks.ChunkDiskMapper, oooCapMax int64) (inserted, chunkCreated bool, mmapRefs []chunks.ChunkDiskMapperRef) { if s.ooo == nil { s.ooo = &memSeriesOOOFields{} } c := s.ooo.oooHeadChunk if c == nil || c.chunk.NumSamples() == int(oooCapMax) { // Note: If no new samples come in then we rely on compaction to clean up stale in-memory OOO chunks. - c, mmapRef = s.cutNewOOOHeadChunk(t, chunkDiskMapper) + c, mmapRefs = s.cutNewOOOHeadChunk(t, chunkDiskMapper) chunkCreated = true } @@ -1089,7 +1100,7 @@ func (s *memSeries) insert(t int64, v float64, chunkDiskMapper *chunks.ChunkDisk c.maxTime = t } } - return ok, chunkCreated, mmapRef + return ok, chunkCreated, mmapRefs } // chunkOpts are chunk-level options that are passed when appending to a memSeries. @@ -1431,7 +1442,7 @@ func (s *memSeries) cutNewHeadChunk(mint int64, e chunkenc.Encoding, chunkRange // cutNewOOOHeadChunk cuts a new OOO chunk and m-maps the old chunk. // The caller must ensure that s.ooo is not nil. -func (s *memSeries) cutNewOOOHeadChunk(mint int64, chunkDiskMapper *chunks.ChunkDiskMapper) (*oooHeadChunk, chunks.ChunkDiskMapperRef) { +func (s *memSeries) cutNewOOOHeadChunk(mint int64, chunkDiskMapper *chunks.ChunkDiskMapper) (*oooHeadChunk, []chunks.ChunkDiskMapperRef) { ref := s.mmapCurrentOOOHeadChunk(chunkDiskMapper) s.ooo.oooHeadChunk = &oooHeadChunk{ @@ -1443,21 +1454,29 @@ func (s *memSeries) cutNewOOOHeadChunk(mint int64, chunkDiskMapper *chunks.Chunk return s.ooo.oooHeadChunk, ref } -func (s *memSeries) mmapCurrentOOOHeadChunk(chunkDiskMapper *chunks.ChunkDiskMapper) chunks.ChunkDiskMapperRef { +func (s *memSeries) mmapCurrentOOOHeadChunk(chunkDiskMapper *chunks.ChunkDiskMapper) []chunks.ChunkDiskMapperRef { if s.ooo == nil || s.ooo.oooHeadChunk == nil { - // There is no head chunk, so nothing to m-map here. - return 0 + // OOO is not enabled or there is no head chunk, so nothing to m-map here. + return nil + } + chks, err := s.ooo.oooHeadChunk.chunk.ToEncodedChunks(math.MinInt64, math.MaxInt64) + if err != nil { + handleChunkWriteError(err) + return nil + } + chunkRefs := make([]chunks.ChunkDiskMapperRef, 0, 1) + for _, memchunk := range chks { + chunkRef := chunkDiskMapper.WriteChunk(s.ref, s.ooo.oooHeadChunk.minTime, s.ooo.oooHeadChunk.maxTime, memchunk.chunk, true, handleChunkWriteError) + chunkRefs = append(chunkRefs, chunkRef) + s.ooo.oooMmappedChunks = append(s.ooo.oooMmappedChunks, &mmappedChunk{ + ref: chunkRef, + numSamples: uint16(memchunk.chunk.NumSamples()), + minTime: memchunk.minTime, + maxTime: memchunk.maxTime, + }) } - xor, _ := s.ooo.oooHeadChunk.chunk.ToXOR() // Encode to XorChunk which is more compact and implements all of the needed functionality. - chunkRef := chunkDiskMapper.WriteChunk(s.ref, s.ooo.oooHeadChunk.minTime, s.ooo.oooHeadChunk.maxTime, xor, true, handleChunkWriteError) - s.ooo.oooMmappedChunks = append(s.ooo.oooMmappedChunks, &mmappedChunk{ - ref: chunkRef, - numSamples: uint16(xor.NumSamples()), - minTime: s.ooo.oooHeadChunk.minTime, - maxTime: s.ooo.oooHeadChunk.maxTime, - }) s.ooo.oooHeadChunk = nil - return chunkRef + return chunkRefs } // mmapChunks will m-map all but first chunk on s.headChunks list. diff --git a/vendor/github.com/prometheus/prometheus/tsdb/head_dedupelabels.go b/vendor/github.com/prometheus/prometheus/tsdb/head_dedupelabels.go new file mode 100644 index 0000000000..a16d907261 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/tsdb/head_dedupelabels.go @@ -0,0 +1,95 @@ +// Copyright 2024 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build dedupelabels + +package tsdb + +import ( + "github.com/go-kit/log" + "github.com/go-kit/log/level" + + "github.com/prometheus/prometheus/model/labels" +) + +// Helper method to access labels under lock. +func (s *memSeries) labels() labels.Labels { + s.Lock() + defer s.Unlock() + return s.lset +} + +// RebuildSymbolTable goes through all the series in h, build a SymbolTable with all names and values, +// replace each series' Labels with one using that SymbolTable. +func (h *Head) RebuildSymbolTable(logger log.Logger) *labels.SymbolTable { + level.Info(logger).Log("msg", "RebuildSymbolTable starting") + st := labels.NewSymbolTable() + builder := labels.NewScratchBuilderWithSymbolTable(st, 0) + rebuildLabels := func(lbls labels.Labels) labels.Labels { + builder.Reset() + lbls.Range(func(l labels.Label) { + builder.Add(l.Name, l.Value) + }) + return builder.Labels() + } + + for i := 0; i < h.series.size; i++ { + h.series.locks[i].Lock() + + for _, s := range h.series.hashes[i].unique { + s.Lock() + s.lset = rebuildLabels(s.lset) + s.Unlock() + } + + for _, all := range h.series.hashes[i].conflicts { + for _, s := range all { + s.Lock() + s.lset = rebuildLabels(s.lset) + s.Unlock() + } + } + + h.series.locks[i].Unlock() + } + type withReset interface{ ResetSymbolTable(*labels.SymbolTable) } + if e, ok := h.exemplars.(withReset); ok { + e.ResetSymbolTable(st) + } + level.Info(logger).Log("msg", "RebuildSymbolTable finished", "size", st.Len()) + return st +} + +func (ce *CircularExemplarStorage) ResetSymbolTable(st *labels.SymbolTable) { + builder := labels.NewScratchBuilderWithSymbolTable(st, 0) + rebuildLabels := func(lbls labels.Labels) labels.Labels { + builder.Reset() + lbls.Range(func(l labels.Label) { + builder.Add(l.Name, l.Value) + }) + return builder.Labels() + } + + ce.lock.RLock() + defer ce.lock.RUnlock() + + for _, v := range ce.index { + v.seriesLabels = rebuildLabels(v.seriesLabels) + } + for i := range ce.exemplars { + if ce.exemplars[i].ref == nil { + continue + } + ce.exemplars[i].exemplar.Labels = rebuildLabels(ce.exemplars[i].exemplar.Labels) + } +} diff --git a/vendor/github.com/prometheus/prometheus/tsdb/head_other.go b/vendor/github.com/prometheus/prometheus/tsdb/head_other.go new file mode 100644 index 0000000000..eb1b93a3e5 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/tsdb/head_other.go @@ -0,0 +1,32 @@ +// Copyright 2024 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !dedupelabels + +package tsdb + +import ( + "github.com/go-kit/log" + + "github.com/prometheus/prometheus/model/labels" +) + +// Helper method to access labels; trivial when not using dedupelabels. +func (s *memSeries) labels() labels.Labels { + return s.lset +} + +// No-op when not using dedupelabels. +func (h *Head) RebuildSymbolTable(logger log.Logger) *labels.SymbolTable { + return nil +} diff --git a/vendor/github.com/prometheus/prometheus/tsdb/head_read.go b/vendor/github.com/prometheus/prometheus/tsdb/head_read.go index df15abcd50..87564ae3c9 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/head_read.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/head_read.go @@ -142,7 +142,7 @@ func (h *headIndexReader) SortedPostings(p index.Postings) index.Postings { } slices.SortFunc(series, func(a, b *memSeries) int { - return labels.Compare(a.lset, b.lset) + return labels.Compare(a.labels(), b.labels()) }) // Convert back to list. @@ -189,7 +189,7 @@ func (h *headIndexReader) Series(ref storage.SeriesRef, builder *labels.ScratchB h.head.metrics.seriesNotFound.Inc() return storage.ErrNotFound } - builder.Assign(s.lset) + builder.Assign(s.labels()) if chks == nil { return nil @@ -259,7 +259,7 @@ func (h *headIndexReader) LabelValueFor(_ context.Context, id storage.SeriesRef, return "", storage.ErrNotFound } - value := memSeries.lset.Get(label) + value := memSeries.labels().Get(label) if value == "" { return "", storage.ErrNotFound } @@ -267,22 +267,29 @@ func (h *headIndexReader) LabelValueFor(_ context.Context, id storage.SeriesRef, return value, nil } -// LabelNamesFor returns all the label names for the series referred to by IDs. +// LabelNamesFor returns all the label names for the series referred to by the postings. // The names returned are sorted. -func (h *headIndexReader) LabelNamesFor(ctx context.Context, ids ...storage.SeriesRef) ([]string, error) { +func (h *headIndexReader) LabelNamesFor(ctx context.Context, series index.Postings) ([]string, error) { namesMap := make(map[string]struct{}) - for _, id := range ids { - if ctx.Err() != nil { + i := 0 + for series.Next() { + i++ + if i%checkContextEveryNIterations == 0 && ctx.Err() != nil { return nil, ctx.Err() } - memSeries := h.head.series.getByID(chunks.HeadSeriesRef(id)) + memSeries := h.head.series.getByID(chunks.HeadSeriesRef(series.At())) if memSeries == nil { - return nil, storage.ErrNotFound + // Series not found, this happens during compaction, + // when series was garbage collected after the caller got the series IDs. + continue } - memSeries.lset.Range(func(lbl labels.Label) { + memSeries.labels().Range(func(lbl labels.Label) { namesMap[lbl.Name] = struct{}{} }) } + if err := series.Err(); err != nil { + return nil, err + } names := make([]string, 0, len(namesMap)) for name := range namesMap { names = append(names, name) @@ -460,7 +467,7 @@ func (s *memSeries) chunk(id chunks.HeadChunkID, chunkDiskMapper *chunks.ChunkDi // amongst all the chunks in the OOOHead. // This function is not thread safe unless the caller holds a lock. // The caller must ensure that s.ooo is not nil. -func (s *memSeries) oooMergedChunks(meta chunks.Meta, cdm *chunks.ChunkDiskMapper, mint, maxt int64) (*mergedOOOChunks, error) { +func (s *memSeries) oooMergedChunks(meta chunks.Meta, cdm *chunks.ChunkDiskMapper, mint, maxt int64, maxMmapRef chunks.ChunkDiskMapperRef) (*mergedOOOChunks, error) { _, cid := chunks.HeadChunkRef(meta.Ref).Unpack() // ix represents the index of chunk in the s.mmappedChunks slice. The chunk meta's are @@ -480,55 +487,27 @@ func (s *memSeries) oooMergedChunks(meta chunks.Meta, cdm *chunks.ChunkDiskMappe // We create a temporary slice of chunk metas to hold the information of all // possible chunks that may overlap with the requested chunk. - tmpChks := make([]chunkMetaAndChunkDiskMapperRef, 0, len(s.ooo.oooMmappedChunks)) - - oooHeadRef := chunks.ChunkRef(chunks.NewHeadChunkRef(s.ref, s.oooHeadChunkID(len(s.ooo.oooMmappedChunks)))) - if s.ooo.oooHeadChunk != nil && s.ooo.oooHeadChunk.OverlapsClosedInterval(mint, maxt) { - // We only want to append the head chunk if this chunk existed when - // Series() was called. This brings consistency in case new data - // is added in between Series() and Chunk() calls. - if oooHeadRef == meta.OOOLastRef { - tmpChks = append(tmpChks, chunkMetaAndChunkDiskMapperRef{ - meta: chunks.Meta{ - // Ignoring samples added before and after the last known min and max time for this chunk. - MinTime: meta.OOOLastMinTime, - MaxTime: meta.OOOLastMaxTime, - Ref: oooHeadRef, - }, - }) - } - } + tmpChks := make([]chunkMetaAndChunkDiskMapperRef, 0, len(s.ooo.oooMmappedChunks)+1) for i, c := range s.ooo.oooMmappedChunks { - chunkRef := chunks.ChunkRef(chunks.NewHeadChunkRef(s.ref, s.oooHeadChunkID(i))) - // We can skip chunks that came in later than the last known OOOLastRef. - if chunkRef > meta.OOOLastRef { + if maxMmapRef != 0 && c.ref > maxMmapRef { break } - - switch { - case chunkRef == meta.OOOLastRef: - tmpChks = append(tmpChks, chunkMetaAndChunkDiskMapperRef{ - meta: chunks.Meta{ - MinTime: meta.OOOLastMinTime, - MaxTime: meta.OOOLastMaxTime, - Ref: chunkRef, - }, - ref: c.ref, - origMinT: c.minTime, - origMaxT: c.maxTime, - }) - case c.OverlapsClosedInterval(mint, maxt): + if c.OverlapsClosedInterval(mint, maxt) { tmpChks = append(tmpChks, chunkMetaAndChunkDiskMapperRef{ meta: chunks.Meta{ MinTime: c.minTime, MaxTime: c.maxTime, - Ref: chunkRef, + Ref: chunks.ChunkRef(chunks.NewHeadChunkRef(s.ref, s.oooHeadChunkID(i))), }, ref: c.ref, }) } } + // Add in data copied from the head OOO chunk. + if meta.Chunk != nil { + tmpChks = append(tmpChks, chunkMetaAndChunkDiskMapperRef{meta: meta}) + } // Next we want to sort all the collected chunks by min time so we can find // those that overlap and stop when we know the rest don't. @@ -541,22 +520,8 @@ func (s *memSeries) oooMergedChunks(meta chunks.Meta, cdm *chunks.ChunkDiskMappe continue } var iterable chunkenc.Iterable - if c.meta.Ref == oooHeadRef { - var xor *chunkenc.XORChunk - var err error - // If head chunk min and max time match the meta OOO markers - // that means that the chunk has not expanded so we can append - // it as it is. - if s.ooo.oooHeadChunk.minTime == meta.OOOLastMinTime && s.ooo.oooHeadChunk.maxTime == meta.OOOLastMaxTime { - xor, err = s.ooo.oooHeadChunk.chunk.ToXOR() // TODO(jesus.vazquez) (This is an optimization idea that has no priority and might not be that useful) See if we could use a copy of the underlying slice. That would leave the more expensive ToXOR() function only for the usecase where Bytes() is called. - } else { - // We need to remove samples that are outside of the markers - xor, err = s.ooo.oooHeadChunk.chunk.ToXORBetweenTimestamps(meta.OOOLastMinTime, meta.OOOLastMaxTime) - } - if err != nil { - return nil, fmt.Errorf("failed to convert ooo head chunk to xor chunk: %w", err) - } - iterable = xor + if c.meta.Chunk != nil { + iterable = c.meta.Chunk } else { chk, err := cdm.Chunk(c.ref) if err != nil { @@ -566,16 +531,7 @@ func (s *memSeries) oooMergedChunks(meta chunks.Meta, cdm *chunks.ChunkDiskMappe } return nil, err } - if c.meta.Ref == meta.OOOLastRef && - (c.origMinT != meta.OOOLastMinTime || c.origMaxT != meta.OOOLastMaxTime) { - // The head expanded and was memory mapped so now we need to - // wrap the chunk within a chunk that doesnt allows us to iterate - // through samples out of the OOOLastMinT and OOOLastMaxT - // markers. - iterable = boundedIterable{chk, meta.OOOLastMinTime, meta.OOOLastMaxTime} - } else { - iterable = chk - } + iterable = chk } mc.chunkIterables = append(mc.chunkIterables, iterable) if c.meta.MaxTime > absoluteMax { @@ -586,74 +542,6 @@ func (s *memSeries) oooMergedChunks(meta chunks.Meta, cdm *chunks.ChunkDiskMappe return mc, nil } -var _ chunkenc.Iterable = &boundedIterable{} - -// boundedIterable is an implementation of chunkenc.Iterable that uses a -// boundedIterator that only iterates through samples which timestamps are -// >= minT and <= maxT. -type boundedIterable struct { - chunk chunkenc.Chunk - minT int64 - maxT int64 -} - -func (b boundedIterable) Iterator(iterator chunkenc.Iterator) chunkenc.Iterator { - it := b.chunk.Iterator(iterator) - if it == nil { - panic("iterator shouldn't be nil") - } - return boundedIterator{it, b.minT, b.maxT} -} - -var _ chunkenc.Iterator = &boundedIterator{} - -// boundedIterator is an implementation of Iterator that only iterates through -// samples which timestamps are >= minT and <= maxT. -type boundedIterator struct { - chunkenc.Iterator - minT int64 - maxT int64 -} - -// Next the first time its called it will advance as many positions as necessary -// until its able to find a sample within the bounds minT and maxT. -// If there are samples within bounds it will advance one by one amongst them. -// If there are no samples within bounds it will return false. -func (b boundedIterator) Next() chunkenc.ValueType { - for b.Iterator.Next() == chunkenc.ValFloat { - t, _ := b.Iterator.At() - switch { - case t < b.minT: - continue - case t > b.maxT: - return chunkenc.ValNone - default: - return chunkenc.ValFloat - } - } - return chunkenc.ValNone -} - -func (b boundedIterator) Seek(t int64) chunkenc.ValueType { - if t < b.minT { - // We must seek at least up to b.minT if it is asked for something before that. - val := b.Iterator.Seek(b.minT) - if !(val == chunkenc.ValFloat) { - return chunkenc.ValNone - } - t, _ := b.Iterator.At() - if t <= b.maxT { - return chunkenc.ValFloat - } - } - if t > b.maxT { - // We seek anyway so that the subsequent Next() calls will also return false. - b.Iterator.Seek(t) - return chunkenc.ValNone - } - return b.Iterator.Seek(t) -} - // safeHeadChunk makes sure that the chunk can be accessed without a race condition. type safeHeadChunk struct { chunkenc.Chunk diff --git a/vendor/github.com/prometheus/prometheus/tsdb/head_wal.go b/vendor/github.com/prometheus/prometheus/tsdb/head_wal.go index 41f7dd46b2..787cb7c267 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/head_wal.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/head_wal.go @@ -126,7 +126,7 @@ func (h *Head) loadWAL(r *wlog.Reader, syms *labels.SymbolTable, multiRef map[ch } // At the moment the only possible error here is out of order exemplars, which we shouldn't see when // replaying the WAL, so lets just log the error if it's not that type. - err = h.exemplars.AddExemplar(ms.lset, exemplar.Exemplar{Ts: e.T, Value: e.V, Labels: e.Labels}) + err = h.exemplars.AddExemplar(ms.labels(), exemplar.Exemplar{Ts: e.T, Value: e.V, Labels: e.Labels}) if err != nil && errors.Is(err, storage.ErrOutOfOrderExemplar) { level.Warn(h.logger).Log("msg", "Unexpected error when replaying WAL on exemplar record", "err", err) } @@ -448,7 +448,7 @@ func (h *Head) resetSeriesWithMMappedChunks(mSeries *memSeries, mmc, oooMmc []*m ) { level.Debug(h.logger).Log( "msg", "M-mapped chunks overlap on a duplicate series record", - "series", mSeries.lset.String(), + "series", mSeries.labels().String(), "oldref", mSeries.ref, "oldmint", mSeries.mmappedChunks[0].minTime, "oldmaxt", mSeries.mmappedChunks[len(mSeries.mmappedChunks)-1].maxTime, @@ -932,7 +932,7 @@ func (s *memSeries) encodeToSnapshotRecord(b []byte) []byte { buf.PutByte(chunkSnapshotRecordTypeSeries) buf.PutBE64(uint64(s.ref)) - record.EncodeLabels(&buf, s.lset) + record.EncodeLabels(&buf, s.labels()) buf.PutBE64int64(0) // Backwards-compatibility; was chunkRange but now unused. s.Lock() @@ -1485,7 +1485,7 @@ Outer: continue } - if err := h.exemplars.AddExemplar(ms.lset, exemplar.Exemplar{ + if err := h.exemplars.AddExemplar(ms.labels(), exemplar.Exemplar{ Labels: e.Labels, Value: e.V, Ts: e.T, diff --git a/vendor/github.com/prometheus/prometheus/tsdb/index/index.go b/vendor/github.com/prometheus/prometheus/tsdb/index/index.go index 480e6a8fc7..3621054598 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/index/index.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/index/index.go @@ -1551,12 +1551,18 @@ func (r *Reader) LabelValues(ctx context.Context, name string, matchers ...*labe // LabelNamesFor returns all the label names for the series referred to by IDs. // The names returned are sorted. -func (r *Reader) LabelNamesFor(ctx context.Context, ids ...storage.SeriesRef) ([]string, error) { +func (r *Reader) LabelNamesFor(ctx context.Context, postings Postings) ([]string, error) { // Gather offsetsMap the name offsetsMap in the symbol table first offsetsMap := make(map[uint32]struct{}) - for _, id := range ids { - if ctx.Err() != nil { - return nil, ctx.Err() + i := 0 + for postings.Next() { + id := postings.At() + i++ + + if i%checkContextEveryNIterations == 0 { + if ctxErr := ctx.Err(); ctxErr != nil { + return nil, ctxErr + } } offset := id diff --git a/vendor/github.com/prometheus/prometheus/tsdb/index/postings.go b/vendor/github.com/prometheus/prometheus/tsdb/index/postings.go index 159f6416e2..bfe74c323d 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/index/postings.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/index/postings.go @@ -288,62 +288,34 @@ func (p *MemPostings) EnsureOrder(numberOfConcurrentProcesses int) { } // Delete removes all ids in the given map from the postings lists. -func (p *MemPostings) Delete(deleted map[storage.SeriesRef]struct{}) { - var keys, vals []string +// affectedLabels contains all the labels that are affected by the deletion, there's no need to check other labels. +func (p *MemPostings) Delete(deleted map[storage.SeriesRef]struct{}, affected map[labels.Label]struct{}) { + p.mtx.Lock() + defer p.mtx.Unlock() - // Collect all keys relevant for deletion once. New keys added afterwards - // can by definition not be affected by any of the given deletes. - p.mtx.RLock() - for n := range p.m { - keys = append(keys, n) + process := func(l labels.Label) { + orig := p.m[l.Name][l.Value] + repl := make([]storage.SeriesRef, 0, len(orig)) + for _, id := range orig { + if _, ok := deleted[id]; !ok { + repl = append(repl, id) + } + } + if len(repl) > 0 { + p.m[l.Name][l.Value] = repl + } else { + delete(p.m[l.Name], l.Value) + // Delete the key if we removed all values. + if len(p.m[l.Name]) == 0 { + delete(p.m, l.Name) + } + } } - p.mtx.RUnlock() - for _, n := range keys { - p.mtx.RLock() - vals = vals[:0] - for v := range p.m[n] { - vals = append(vals, v) - } - p.mtx.RUnlock() - - // For each posting we first analyse whether the postings list is affected by the deletes. - // If yes, we actually reallocate a new postings list. - for _, l := range vals { - // Only lock for processing one postings list so we don't block reads for too long. - p.mtx.Lock() - - found := false - for _, id := range p.m[n][l] { - if _, ok := deleted[id]; ok { - found = true - break - } - } - if !found { - p.mtx.Unlock() - continue - } - repl := make([]storage.SeriesRef, 0, len(p.m[n][l])) - - for _, id := range p.m[n][l] { - if _, ok := deleted[id]; !ok { - repl = append(repl, id) - } - } - if len(repl) > 0 { - p.m[n][l] = repl - } else { - delete(p.m[n], l) - } - p.mtx.Unlock() - } - p.mtx.Lock() - if len(p.m[n]) == 0 { - delete(p.m, n) - } - p.mtx.Unlock() + for l := range affected { + process(l) } + process(allPostingsKey) } // Iter calls f for each postings list. It aborts if f returns an error and returns it. @@ -398,16 +370,62 @@ func (p *MemPostings) addFor(id storage.SeriesRef, l labels.Label) { } func (p *MemPostings) PostingsForLabelMatching(ctx context.Context, name string, match func(string) bool) Postings { - p.mtx.RLock() + // We'll copy the values into a slice and then match over that, + // this way we don't need to hold the mutex while we're matching, + // which can be slow (seconds) if the match function is a huge regex. + // Holding this lock prevents new series from being added (slows down the write path) + // and blocks the compaction process. + vals := p.labelValues(name) + for i, count := 0, 1; i < len(vals); count++ { + if count%checkContextEveryNIterations == 0 && ctx.Err() != nil { + return ErrPostings(ctx.Err()) + } - e := p.m[name] - if len(e) == 0 { - p.mtx.RUnlock() + if match(vals[i]) { + i++ + continue + } + + // Didn't match, bring the last value to this position, make the slice shorter and check again. + // The order of the slice doesn't matter as it comes from a map iteration. + vals[i], vals = vals[len(vals)-1], vals[:len(vals)-1] + } + + // If none matched (or this label had no values), no need to grab the lock again. + if len(vals) == 0 { return EmptyPostings() } - // Benchmarking shows that first copying the values into a slice and then matching over that is - // faster than matching over the map keys directly, at least on AMD64. + // Now `vals` only contains the values that matched, get their postings. + its := make([]Postings, 0, len(vals)) + p.mtx.RLock() + e := p.m[name] + for _, v := range vals { + if refs, ok := e[v]; ok { + // Some of the values may have been garbage-collected in the meantime this is fine, we'll just skip them. + // If we didn't let the mutex go, we'd have these postings here, but they would be pointing nowhere + // because there would be a `MemPostings.Delete()` call waiting for the lock to delete these labels, + // because the series were deleted already. + its = append(its, NewListPostings(refs)) + } + } + // Let the mutex go before merging. + p.mtx.RUnlock() + + return Merge(ctx, its...) +} + +// labelValues returns a slice of label values for the given label name. +// It will take the read lock. +func (p *MemPostings) labelValues(name string) []string { + p.mtx.RLock() + defer p.mtx.RUnlock() + + e := p.m[name] + if len(e) == 0 { + return nil + } + vals := make([]string, 0, len(e)) for v, srs := range e { if len(srs) > 0 { @@ -415,21 +433,7 @@ func (p *MemPostings) PostingsForLabelMatching(ctx context.Context, name string, } } - var its []Postings - count := 1 - for _, v := range vals { - if count%checkContextEveryNIterations == 0 && ctx.Err() != nil { - p.mtx.RUnlock() - return ErrPostings(ctx.Err()) - } - count++ - if match(v) { - its = append(its, NewListPostings(e[v])) - } - } - p.mtx.RUnlock() - - return Merge(ctx, its...) + return vals } // ExpandPostings returns the postings expanded as a slice. @@ -751,9 +755,7 @@ func (it *ListPostings) Seek(x storage.SeriesRef) bool { } // Do binary search between current position and end. - i := sort.Search(len(it.list), func(i int) bool { - return it.list[i] >= x - }) + i, _ := slices.BinarySearch(it.list, x) if i < len(it.list) { it.cur = it.list[i] it.list = it.list[i+1:] diff --git a/vendor/github.com/prometheus/prometheus/tsdb/ooo_head.go b/vendor/github.com/prometheus/prometheus/tsdb/ooo_head.go index 7f2110fa65..01b5bff636 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/ooo_head.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/ooo_head.go @@ -17,9 +17,10 @@ import ( "fmt" "sort" + "github.com/prometheus/prometheus/tsdb/chunkenc" + "github.com/oklog/ulid" - "github.com/prometheus/prometheus/tsdb/chunkenc" "github.com/prometheus/prometheus/tsdb/chunks" "github.com/prometheus/prometheus/tsdb/tombstones" ) @@ -74,24 +75,22 @@ func (o *OOOChunk) NumSamples() int { return len(o.samples) } -func (o *OOOChunk) ToXOR() (*chunkenc.XORChunk, error) { - x := chunkenc.NewXORChunk() - app, err := x.Appender() - if err != nil { - return nil, err - } - for _, s := range o.samples { - app.Append(s.t, s.f) - } - return x, nil -} - -func (o *OOOChunk) ToXORBetweenTimestamps(mint, maxt int64) (*chunkenc.XORChunk, error) { - x := chunkenc.NewXORChunk() - app, err := x.Appender() - if err != nil { - return nil, err +// ToEncodedChunks returns chunks with the samples in the OOOChunk. +// +//nolint:revive // unexported-return. +func (o *OOOChunk) ToEncodedChunks(mint, maxt int64) (chks []memChunk, err error) { + if len(o.samples) == 0 { + return nil, nil } + // The most common case is that there will be a single chunk, with the same type of samples in it - this is always true for float samples. + chks = make([]memChunk, 0, 1) + var ( + cmint int64 + cmaxt int64 + chunk chunkenc.Chunk + app chunkenc.Appender + ) + prevEncoding := chunkenc.EncNone // Yes we could call the chunk for this, but this is more efficient. for _, s := range o.samples { if s.t < mint { continue @@ -99,9 +98,77 @@ func (o *OOOChunk) ToXORBetweenTimestamps(mint, maxt int64) (*chunkenc.XORChunk, if s.t > maxt { break } - app.Append(s.t, s.f) + encoding := chunkenc.EncXOR + if s.h != nil { + encoding = chunkenc.EncHistogram + } else if s.fh != nil { + encoding = chunkenc.EncFloatHistogram + } + + // prevApp is the appender for the previous sample. + prevApp := app + + if encoding != prevEncoding { // For the first sample, this will always be true as EncNone != EncXOR | EncHistogram | EncFloatHistogram + if prevEncoding != chunkenc.EncNone { + chks = append(chks, memChunk{chunk, cmint, cmaxt, nil}) + } + cmint = s.t + switch encoding { + case chunkenc.EncXOR: + chunk = chunkenc.NewXORChunk() + case chunkenc.EncHistogram: + chunk = chunkenc.NewHistogramChunk() + case chunkenc.EncFloatHistogram: + chunk = chunkenc.NewFloatHistogramChunk() + default: + chunk = chunkenc.NewXORChunk() + } + app, err = chunk.Appender() + if err != nil { + return + } + } + switch encoding { + case chunkenc.EncXOR: + app.Append(s.t, s.f) + case chunkenc.EncHistogram: + // Ignoring ok is ok, since we don't want to compare to the wrong previous appender anyway. + prevHApp, _ := prevApp.(*chunkenc.HistogramAppender) + var ( + newChunk chunkenc.Chunk + recoded bool + ) + newChunk, recoded, app, _ = app.AppendHistogram(prevHApp, s.t, s.h, false) + if newChunk != nil { // A new chunk was allocated. + if !recoded { + chks = append(chks, memChunk{chunk, cmint, cmaxt, nil}) + } + chunk = newChunk + cmint = s.t + } + case chunkenc.EncFloatHistogram: + // Ignoring ok is ok, since we don't want to compare to the wrong previous appender anyway. + prevHApp, _ := prevApp.(*chunkenc.FloatHistogramAppender) + var ( + newChunk chunkenc.Chunk + recoded bool + ) + newChunk, recoded, app, _ = app.AppendFloatHistogram(prevHApp, s.t, s.fh, false) + if newChunk != nil { // A new chunk was allocated. + if !recoded { + chks = append(chks, memChunk{chunk, cmint, cmaxt, nil}) + } + chunk = newChunk + cmint = s.t + } + } + cmaxt = s.t + prevEncoding = encoding } - return x, nil + if prevEncoding != chunkenc.EncNone { + chks = append(chks, memChunk{chunk, cmint, cmaxt, nil}) + } + return chks, nil } var _ BlockReader = &OOORangeHead{} @@ -134,7 +201,7 @@ func (oh *OOORangeHead) Index() (IndexReader, error) { } func (oh *OOORangeHead) Chunks() (ChunkReader, error) { - return NewOOOHeadChunkReader(oh.head, oh.mint, oh.maxt, oh.isoState), nil + return NewOOOHeadChunkReader(oh.head, oh.mint, oh.maxt, oh.isoState, 0), nil } func (oh *OOORangeHead) Tombstones() (tombstones.Reader, error) { diff --git a/vendor/github.com/prometheus/prometheus/tsdb/ooo_head_read.go b/vendor/github.com/prometheus/prometheus/tsdb/ooo_head_read.go index af431d678f..9d5b9d6443 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/ooo_head_read.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/ooo_head_read.go @@ -78,7 +78,7 @@ func (oh *OOOHeadIndexReader) series(ref storage.SeriesRef, builder *labels.Scra oh.head.metrics.seriesNotFound.Inc() return storage.ErrNotFound } - builder.Assign(s.lset) + builder.Assign(s.labels()) if chks == nil { return nil @@ -94,48 +94,40 @@ func (oh *OOOHeadIndexReader) series(ref storage.SeriesRef, builder *labels.Scra tmpChks := make([]chunks.Meta, 0, len(s.ooo.oooMmappedChunks)) - // We define these markers to track the last chunk reference while we - // fill the chunk meta. - // These markers are useful to give consistent responses to repeated queries - // even if new chunks that might be overlapping or not are added afterwards. - // Also, lastMinT and lastMaxT are initialized to the max int as a sentinel - // value to know they are unset. - var lastChunkRef chunks.ChunkRef - lastMinT, lastMaxT := int64(math.MaxInt64), int64(math.MaxInt64) - - addChunk := func(minT, maxT int64, ref chunks.ChunkRef) { - // the first time we get called is for the last included chunk. - // set the markers accordingly - if lastMinT == int64(math.MaxInt64) { - lastChunkRef = ref - lastMinT = minT - lastMaxT = maxT - } - + addChunk := func(minT, maxT int64, ref chunks.ChunkRef, chunk chunkenc.Chunk) { tmpChks = append(tmpChks, chunks.Meta{ - MinTime: minT, - MaxTime: maxT, - Ref: ref, - OOOLastRef: lastChunkRef, - OOOLastMinTime: lastMinT, - OOOLastMaxTime: lastMaxT, + MinTime: minT, + MaxTime: maxT, + Ref: ref, + Chunk: chunk, }) } - // Collect all chunks that overlap the query range, in order from most recent to most old, - // so we can set the correct markers. + // Collect all chunks that overlap the query range. if s.ooo.oooHeadChunk != nil { c := s.ooo.oooHeadChunk if c.OverlapsClosedInterval(oh.mint, oh.maxt) && maxMmapRef == 0 { ref := chunks.ChunkRef(chunks.NewHeadChunkRef(s.ref, s.oooHeadChunkID(len(s.ooo.oooMmappedChunks)))) - addChunk(c.minTime, c.maxTime, ref) + if len(c.chunk.samples) > 0 { // Empty samples happens in tests, at least. + chks, err := s.ooo.oooHeadChunk.chunk.ToEncodedChunks(c.minTime, c.maxTime) + if err != nil { + handleChunkWriteError(err) + return nil + } + for _, chk := range chks { + addChunk(c.minTime, c.maxTime, ref, chk.chunk) + } + } else { + var emptyChunk chunkenc.Chunk + addChunk(c.minTime, c.maxTime, ref, emptyChunk) + } } } for i := len(s.ooo.oooMmappedChunks) - 1; i >= 0; i-- { c := s.ooo.oooMmappedChunks[i] if c.OverlapsClosedInterval(oh.mint, oh.maxt) && (maxMmapRef == 0 || maxMmapRef.GreaterThanOrEqualTo(c.ref)) && (lastGarbageCollectedMmapRef == 0 || c.ref.GreaterThan(lastGarbageCollectedMmapRef)) { ref := chunks.ChunkRef(chunks.NewHeadChunkRef(s.ref, s.oooHeadChunkID(i))) - addChunk(c.minTime, c.maxTime, ref) + addChunk(c.minTime, c.maxTime, ref, nil) } } @@ -163,6 +155,12 @@ func (oh *OOOHeadIndexReader) series(ref storage.SeriesRef, builder *labels.Scra case c.MaxTime > maxTime: maxTime = c.MaxTime (*chks)[len(*chks)-1].MaxTime = c.MaxTime + fallthrough + default: + // If the head OOO chunk is part of an output chunk, copy the chunk pointer. + if c.Chunk != nil { + (*chks)[len(*chks)-1].Chunk = c.Chunk + } } } @@ -185,10 +183,8 @@ func (oh *OOOHeadIndexReader) LabelValues(ctx context.Context, name string, matc } type chunkMetaAndChunkDiskMapperRef struct { - meta chunks.Meta - ref chunks.ChunkDiskMapperRef - origMinT int64 - origMaxT int64 + meta chunks.Meta + ref chunks.ChunkDiskMapperRef } func refLessByMinTimeAndMinRef(a, b chunkMetaAndChunkDiskMapperRef) int { @@ -247,14 +243,16 @@ type OOOHeadChunkReader struct { head *Head mint, maxt int64 isoState *oooIsolationState + maxMmapRef chunks.ChunkDiskMapperRef } -func NewOOOHeadChunkReader(head *Head, mint, maxt int64, isoState *oooIsolationState) *OOOHeadChunkReader { +func NewOOOHeadChunkReader(head *Head, mint, maxt int64, isoState *oooIsolationState, maxMmapRef chunks.ChunkDiskMapperRef) *OOOHeadChunkReader { return &OOOHeadChunkReader{ - head: head, - mint: mint, - maxt: maxt, - isoState: isoState, + head: head, + mint: mint, + maxt: maxt, + isoState: isoState, + maxMmapRef: maxMmapRef, } } @@ -273,7 +271,7 @@ func (cr OOOHeadChunkReader) ChunkOrIterable(meta chunks.Meta) (chunkenc.Chunk, s.Unlock() return nil, nil, storage.ErrNotFound } - mc, err := s.oooMergedChunks(meta, cr.head.chunkDiskMapper, cr.mint, cr.maxt) + mc, err := s.oooMergedChunks(meta, cr.head.chunkDiskMapper, cr.mint, cr.maxt, cr.maxMmapRef) s.Unlock() if err != nil { return nil, nil, err @@ -353,14 +351,20 @@ func NewOOOCompactionHead(ctx context.Context, head *Head) (*OOOCompactionHead, continue } - mmapRef := ms.mmapCurrentOOOHeadChunk(head.chunkDiskMapper) - if mmapRef == 0 && len(ms.ooo.oooMmappedChunks) > 0 { + var lastMmapRef chunks.ChunkDiskMapperRef + mmapRefs := ms.mmapCurrentOOOHeadChunk(head.chunkDiskMapper) + if len(mmapRefs) == 0 && len(ms.ooo.oooMmappedChunks) > 0 { // Nothing was m-mapped. So take the mmapRef from the existing slice if it exists. - mmapRef = ms.ooo.oooMmappedChunks[len(ms.ooo.oooMmappedChunks)-1].ref + mmapRefs = []chunks.ChunkDiskMapperRef{ms.ooo.oooMmappedChunks[len(ms.ooo.oooMmappedChunks)-1].ref} } - seq, off := mmapRef.Unpack() + if len(mmapRefs) == 0 { + lastMmapRef = 0 + } else { + lastMmapRef = mmapRefs[len(mmapRefs)-1] + } + seq, off := lastMmapRef.Unpack() if seq > lastSeq || (seq == lastSeq && off > lastOff) { - ch.lastMmapRef, lastSeq, lastOff = mmapRef, seq, off + ch.lastMmapRef, lastSeq, lastOff = lastMmapRef, seq, off } if len(ms.ooo.oooMmappedChunks) > 0 { ch.postings = append(ch.postings, seriesRef) @@ -384,7 +388,7 @@ func (ch *OOOCompactionHead) Index() (IndexReader, error) { } func (ch *OOOCompactionHead) Chunks() (ChunkReader, error) { - return NewOOOHeadChunkReader(ch.oooIR.head, ch.oooIR.mint, ch.oooIR.maxt, nil), nil + return NewOOOHeadChunkReader(ch.oooIR.head, ch.oooIR.mint, ch.oooIR.maxt, nil, ch.lastMmapRef), nil } func (ch *OOOCompactionHead) Tombstones() (tombstones.Reader, error) { @@ -483,7 +487,7 @@ func (ir *OOOCompactionHeadIndexReader) LabelValueFor(context.Context, storage.S return "", errors.New("not implemented") } -func (ir *OOOCompactionHeadIndexReader) LabelNamesFor(ctx context.Context, ids ...storage.SeriesRef) ([]string, error) { +func (ir *OOOCompactionHeadIndexReader) LabelNamesFor(ctx context.Context, postings index.Postings) ([]string, error) { return nil, errors.New("not implemented") } diff --git a/vendor/github.com/prometheus/prometheus/tsdb/querier.go b/vendor/github.com/prometheus/prometheus/tsdb/querier.go index 1071c4a716..910c2d7fc1 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/querier.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/querier.go @@ -77,12 +77,12 @@ func newBlockBaseQuerier(b BlockReader, mint, maxt int64) (*blockBaseQuerier, er }, nil } -func (q *blockBaseQuerier) LabelValues(ctx context.Context, name string, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *blockBaseQuerier) LabelValues(ctx context.Context, name string, hints *storage.LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { res, err := q.index.SortedLabelValues(ctx, name, matchers...) return res, nil, err } -func (q *blockBaseQuerier) LabelNames(ctx context.Context, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { +func (q *blockBaseQuerier) LabelNames(ctx context.Context, hints *storage.LabelHints, matchers ...*labels.Matcher) ([]string, annotations.Annotations, error) { res, err := q.index.LabelNames(ctx, matchers...) return res, nil, err } @@ -447,16 +447,7 @@ func labelNamesWithMatchers(ctx context.Context, r IndexReader, matchers ...*lab if err != nil { return nil, err } - - var postings []storage.SeriesRef - for p.Next() { - postings = append(postings, p.At()) - } - if err := p.Err(); err != nil { - return nil, fmt.Errorf("postings for label names with matchers: %w", err) - } - - return r.LabelNamesFor(ctx, postings...) + return r.LabelNamesFor(ctx, p) } // seriesData, used inside other iterators, are updated when we move from one series to another. diff --git a/vendor/github.com/prometheus/prometheus/tsdb/record/record.go b/vendor/github.com/prometheus/prometheus/tsdb/record/record.go index c95b25f06e..784d0b23d7 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/record/record.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/record/record.go @@ -543,7 +543,7 @@ func (d *Decoder) FloatHistogramSamples(rec []byte, histograms []RefFloatHistogr return histograms, nil } -// Decode decodes a Histogram from a byte slice. +// DecodeFloatHistogram decodes a Histogram from a byte slice. func DecodeFloatHistogram(buf *encoding.Decbuf, fh *histogram.FloatHistogram) { fh.CounterResetHint = histogram.CounterResetHint(buf.Byte()) diff --git a/vendor/github.com/prometheus/prometheus/tsdb/testutil.go b/vendor/github.com/prometheus/prometheus/tsdb/testutil.go new file mode 100644 index 0000000000..9730e47132 --- /dev/null +++ b/vendor/github.com/prometheus/prometheus/tsdb/testutil.go @@ -0,0 +1,176 @@ +// Copyright 2017 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tsdb + +import ( + "testing" + + prom_testutil "github.com/prometheus/client_golang/prometheus/testutil" + + "github.com/stretchr/testify/require" + + "github.com/prometheus/prometheus/model/histogram" + "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/storage" + "github.com/prometheus/prometheus/tsdb/chunks" +) + +const ( + float = "float" +) + +type testValue struct { + Ts int64 + V int64 + CounterResetHeader histogram.CounterResetHint +} + +type sampleTypeScenario struct { + sampleType string + appendFunc func(appender storage.Appender, lbls labels.Labels, ts, value int64) (storage.SeriesRef, sample, error) + sampleFunc func(ts, value int64) sample +} + +// TODO: native histogram sample types will be added as part of out-of-order native histogram support; see #11220. +var sampleTypeScenarios = map[string]sampleTypeScenario{ + float: { + sampleType: sampleMetricTypeFloat, + appendFunc: func(appender storage.Appender, lbls labels.Labels, ts, value int64) (storage.SeriesRef, sample, error) { + s := sample{t: ts, f: float64(value)} + ref, err := appender.Append(0, lbls, ts, s.f) + return ref, s, err + }, + sampleFunc: func(ts, value int64) sample { + return sample{t: ts, f: float64(value)} + }, + }, + // intHistogram: { + // sampleType: sampleMetricTypeHistogram, + // appendFunc: func(appender storage.Appender, lbls labels.Labels, ts, value int64) (storage.SeriesRef, sample, error) { + // s := sample{t: ts, h: tsdbutil.GenerateTestHistogram(int(value))} + // ref, err := appender.AppendHistogram(0, lbls, ts, s.h, nil) + // return ref, s, err + // }, + // sampleFunc: func(ts, value int64) sample { + // return sample{t: ts, h: tsdbutil.GenerateTestHistogram(int(value))} + // }, + // }, + // floatHistogram: { + // sampleType: sampleMetricTypeHistogram, + // appendFunc: func(appender storage.Appender, lbls labels.Labels, ts, value int64) (storage.SeriesRef, sample, error) { + // s := sample{t: ts, fh: tsdbutil.GenerateTestFloatHistogram(int(value))} + // ref, err := appender.AppendHistogram(0, lbls, ts, nil, s.fh) + // return ref, s, err + // }, + // sampleFunc: func(ts, value int64) sample { + // return sample{t: ts, fh: tsdbutil.GenerateTestFloatHistogram(int(value))} + // }, + // }, + // gaugeIntHistogram: { + // sampleType: sampleMetricTypeHistogram, + // appendFunc: func(appender storage.Appender, lbls labels.Labels, ts, value int64) (storage.SeriesRef, sample, error) { + // s := sample{t: ts, h: tsdbutil.GenerateTestGaugeHistogram(int(value))} + // ref, err := appender.AppendHistogram(0, lbls, ts, s.h, nil) + // return ref, s, err + // }, + // sampleFunc: func(ts, value int64) sample { + // return sample{t: ts, h: tsdbutil.GenerateTestGaugeHistogram(int(value))} + // }, + // }, + // gaugeFloatHistogram: { + // sampleType: sampleMetricTypeHistogram, + // appendFunc: func(appender storage.Appender, lbls labels.Labels, ts, value int64) (storage.SeriesRef, sample, error) { + // s := sample{t: ts, fh: tsdbutil.GenerateTestGaugeFloatHistogram(int(value))} + // ref, err := appender.AppendHistogram(0, lbls, ts, nil, s.fh) + // return ref, s, err + // }, + // sampleFunc: func(ts, value int64) sample { + // return sample{t: ts, fh: tsdbutil.GenerateTestGaugeFloatHistogram(int(value))} + // }, + // }, +} + +// requireEqualSeries checks that the actual series are equal to the expected ones. It ignores the counter reset hints for histograms. +func requireEqualSeries(t *testing.T, expected, actual map[string][]chunks.Sample, ignoreCounterResets bool) { + for name, expectedItem := range expected { + actualItem, ok := actual[name] + require.True(t, ok, "Expected series %s not found", name) + requireEqualSamples(t, name, expectedItem, actualItem, ignoreCounterResets) + } + for name := range actual { + _, ok := expected[name] + require.True(t, ok, "Unexpected series %s", name) + } +} + +func requireEqualOOOSamples(t *testing.T, expectedSamples int, db *DB) { + require.Equal(t, float64(expectedSamples), + prom_testutil.ToFloat64(db.head.metrics.outOfOrderSamplesAppended.WithLabelValues(sampleMetricTypeFloat))+ + prom_testutil.ToFloat64(db.head.metrics.outOfOrderSamplesAppended.WithLabelValues(sampleMetricTypeHistogram)), + "number of ooo appended samples mismatch") +} + +func requireEqualSamples(t *testing.T, name string, expected, actual []chunks.Sample, ignoreCounterResets bool) { + require.Equal(t, len(expected), len(actual), "Length not equal to expected for %s", name) + for i, s := range expected { + expectedSample := s + actualSample := actual[i] + require.Equal(t, expectedSample.T(), actualSample.T(), "Different timestamps for %s[%d]", name, i) + require.Equal(t, expectedSample.Type().String(), actualSample.Type().String(), "Different types for %s[%d] at ts %d", name, i, expectedSample.T()) + switch { + case s.H() != nil: + { + expectedHist := expectedSample.H() + actualHist := actualSample.H() + if ignoreCounterResets && expectedHist.CounterResetHint != histogram.GaugeType { + expectedHist.CounterResetHint = histogram.UnknownCounterReset + actualHist.CounterResetHint = histogram.UnknownCounterReset + } else { + require.Equal(t, expectedHist.CounterResetHint, actualHist.CounterResetHint, "Sample header doesn't match for %s[%d] at ts %d, expected: %s, actual: %s", name, i, expectedSample.T(), counterResetAsString(expectedHist.CounterResetHint), counterResetAsString(actualHist.CounterResetHint)) + } + require.Equal(t, expectedHist, actualHist, "Sample doesn't match for %s[%d] at ts %d", name, i, expectedSample.T()) + } + case s.FH() != nil: + { + expectedHist := expectedSample.FH() + actualHist := actualSample.FH() + if ignoreCounterResets { + expectedHist.CounterResetHint = histogram.UnknownCounterReset + actualHist.CounterResetHint = histogram.UnknownCounterReset + } else { + require.Equal(t, expectedHist.CounterResetHint, actualHist.CounterResetHint, "Sample header doesn't match for %s[%d] at ts %d, expected: %s, actual: %s", name, i, expectedSample.T(), counterResetAsString(expectedHist.CounterResetHint), counterResetAsString(actualHist.CounterResetHint)) + } + require.Equal(t, expectedHist, actualHist, "Sample doesn't match for %s[%d] at ts %d", name, i, expectedSample.T()) + } + default: + expectedFloat := expectedSample.F() + actualFloat := actualSample.F() + require.Equal(t, expectedFloat, actualFloat, "Sample doesn't match for %s[%d] at ts %d", name, i, expectedSample.T()) + } + } +} + +func counterResetAsString(h histogram.CounterResetHint) string { + switch h { + case histogram.UnknownCounterReset: + return "UnknownCounterReset" + case histogram.CounterReset: + return "CounterReset" + case histogram.NotCounterReset: + return "NotCounterReset" + case histogram.GaugeType: + return "GaugeType" + } + panic("Unexpected counter reset type") +} diff --git a/vendor/github.com/prometheus/prometheus/tsdb/tsdbutil/histogram.go b/vendor/github.com/prometheus/prometheus/tsdb/tsdbutil/histogram.go index bb8d49b202..ce934a638d 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/tsdbutil/histogram.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/tsdbutil/histogram.go @@ -30,12 +30,10 @@ func GenerateTestHistograms(n int) (r []*histogram.Histogram) { return r } -func GenerateTestHistogramsWithUnknownResetHint(n int) []*histogram.Histogram { - hs := GenerateTestHistograms(n) - for i := range hs { - hs[i].CounterResetHint = histogram.UnknownCounterReset - } - return hs +func GenerateTestHistogramWithHint(n int, hint histogram.CounterResetHint) *histogram.Histogram { + h := GenerateTestHistogram(n) + h.CounterResetHint = hint + return h } // GenerateTestHistogram but it is up to the user to set any known counter reset hint. @@ -59,6 +57,20 @@ func GenerateTestHistogram(i int) *histogram.Histogram { } } +func GenerateTestCustomBucketsHistogram(i int) *histogram.Histogram { + return &histogram.Histogram{ + Count: 5 + uint64(i*4), + Sum: 18.4 * float64(i+1), + Schema: histogram.CustomBucketsSchema, + PositiveSpans: []histogram.Span{ + {Offset: 0, Length: 2}, + {Offset: 1, Length: 2}, + }, + PositiveBuckets: []int64{int64(i + 1), 1, -1, 0}, + CustomValues: []float64{0, 1, 2, 3, 4}, + } +} + func GenerateTestGaugeHistograms(n int) (r []*histogram.Histogram) { for x := 0; x < n; x++ { i := int(math.Sin(float64(x))*100) + 100 @@ -105,6 +117,20 @@ func GenerateTestFloatHistogram(i int) *histogram.FloatHistogram { } } +func GenerateTestCustomBucketsFloatHistogram(i int) *histogram.FloatHistogram { + return &histogram.FloatHistogram{ + Count: 5 + float64(i*4), + Sum: 18.4 * float64(i+1), + Schema: histogram.CustomBucketsSchema, + PositiveSpans: []histogram.Span{ + {Offset: 0, Length: 2}, + {Offset: 1, Length: 2}, + }, + PositiveBuckets: []float64{float64(i + 1), float64(i + 2), float64(i + 1), float64(i + 1)}, + CustomValues: []float64{0, 1, 2, 3, 4}, + } +} + func GenerateTestGaugeFloatHistograms(n int) (r []*histogram.FloatHistogram) { for x := 0; x < n; x++ { i := int(math.Sin(float64(x))*100) + 100 diff --git a/vendor/github.com/prometheus/prometheus/tsdb/wlog/watcher.go b/vendor/github.com/prometheus/prometheus/tsdb/wlog/watcher.go index d836e3d868..bc7a144e66 100644 --- a/vendor/github.com/prometheus/prometheus/tsdb/wlog/watcher.go +++ b/vendor/github.com/prometheus/prometheus/tsdb/wlog/watcher.go @@ -57,6 +57,7 @@ type WriteTo interface { AppendHistograms([]record.RefHistogramSample) bool AppendFloatHistograms([]record.RefFloatHistogramSample) bool StoreSeries([]record.RefSeries, int) + StoreMetadata([]record.RefMetadata) // Next two methods are intended for garbage-collection: first we call // UpdateSeriesSegment on all current series @@ -88,6 +89,7 @@ type Watcher struct { lastCheckpoint string sendExemplars bool sendHistograms bool + sendMetadata bool metrics *WatcherMetrics readerMetrics *LiveReaderMetrics @@ -170,7 +172,7 @@ func NewWatcherMetrics(reg prometheus.Registerer) *WatcherMetrics { } // NewWatcher creates a new WAL watcher for a given WriteTo. -func NewWatcher(metrics *WatcherMetrics, readerMetrics *LiveReaderMetrics, logger log.Logger, name string, writer WriteTo, dir string, sendExemplars, sendHistograms bool) *Watcher { +func NewWatcher(metrics *WatcherMetrics, readerMetrics *LiveReaderMetrics, logger log.Logger, name string, writer WriteTo, dir string, sendExemplars, sendHistograms, sendMetadata bool) *Watcher { if logger == nil { logger = log.NewNopLogger() } @@ -183,6 +185,7 @@ func NewWatcher(metrics *WatcherMetrics, readerMetrics *LiveReaderMetrics, logge name: name, sendExemplars: sendExemplars, sendHistograms: sendHistograms, + sendMetadata: sendMetadata, readNotify: make(chan struct{}), quit: make(chan struct{}), @@ -540,6 +543,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error { histogramsToSend []record.RefHistogramSample floatHistograms []record.RefFloatHistogramSample floatHistogramsToSend []record.RefFloatHistogramSample + metadata []record.RefMetadata ) for r.Next() && !isClosed(w.quit) { rec := r.Record() @@ -651,6 +655,17 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error { w.writer.AppendFloatHistograms(floatHistogramsToSend) floatHistogramsToSend = floatHistogramsToSend[:0] } + + case record.Metadata: + if !w.sendMetadata || !tail { + break + } + meta, err := dec.Metadata(rec, metadata[:0]) + if err != nil { + w.recordDecodeFailsMetric.Inc() + return err + } + w.writer.StoreMetadata(meta) case record.Tombstones: default: diff --git a/vendor/github.com/prometheus/prometheus/util/annotations/annotations.go b/vendor/github.com/prometheus/prometheus/util/annotations/annotations.go index 16a920d57f..bc5d76db43 100644 --- a/vendor/github.com/prometheus/prometheus/util/annotations/annotations.go +++ b/vendor/github.com/prometheus/prometheus/util/annotations/annotations.go @@ -71,27 +71,58 @@ func (a Annotations) AsErrors() []error { return arr } -// AsStrings is a convenience function to return the annotations map as a slice -// of strings. The query string is used to get the line number and character offset -// positioning info of the elements which trigger an annotation. We limit the number -// of annotations returned here with maxAnnos (0 for no limit). -func (a Annotations) AsStrings(query string, maxAnnos int) []string { - arr := make([]string, 0, len(a)) +// AsStrings is a convenience function to return the annotations map as 2 slices +// of strings, separated into warnings and infos. The query string is used to get the +// line number and character offset positioning info of the elements which trigger an +// annotation. We limit the number of warnings and infos returned here with maxWarnings +// and maxInfos respectively (0 for no limit). +func (a Annotations) AsStrings(query string, maxWarnings, maxInfos int) (warnings, infos []string) { + warnings = make([]string, 0, maxWarnings+1) + infos = make([]string, 0, maxInfos+1) + warnSkipped := 0 + infoSkipped := 0 for _, err := range a { - if maxAnnos > 0 && len(arr) >= maxAnnos { - break - } var anErr annoErr if errors.As(err, &anErr) { anErr.Query = query err = anErr } - arr = append(arr, err.Error()) + switch { + case errors.Is(err, PromQLInfo): + if maxInfos == 0 || len(infos) < maxInfos { + infos = append(infos, err.Error()) + } else { + infoSkipped++ + } + default: + if maxWarnings == 0 || len(warnings) < maxWarnings { + warnings = append(warnings, err.Error()) + } else { + warnSkipped++ + } + } } - if maxAnnos > 0 && len(a) > maxAnnos { - arr = append(arr, fmt.Sprintf("%d more annotations omitted", len(a)-maxAnnos)) + if warnSkipped > 0 { + warnings = append(warnings, fmt.Sprintf("%d more warning annotations omitted", warnSkipped)) } - return arr + if infoSkipped > 0 { + infos = append(infos, fmt.Sprintf("%d more info annotations omitted", infoSkipped)) + } + return +} + +// CountWarningsAndInfo counts and returns the number of warnings and infos in the +// annotations wrapper. +func (a Annotations) CountWarningsAndInfo() (countWarnings, countInfo int) { + for _, err := range a { + if errors.Is(err, PromQLWarning) { + countWarnings++ + } + if errors.Is(err, PromQLInfo) { + countInfo++ + } + } + return } //nolint:revive // error-naming. @@ -103,12 +134,15 @@ var ( PromQLInfo = errors.New("PromQL info") PromQLWarning = errors.New("PromQL warning") - InvalidQuantileWarning = fmt.Errorf("%w: quantile value should be between 0 and 1", PromQLWarning) - BadBucketLabelWarning = fmt.Errorf("%w: bucket label %q is missing or has a malformed value", PromQLWarning, model.BucketLabel) - MixedFloatsHistogramsWarning = fmt.Errorf("%w: encountered a mix of histograms and floats for", PromQLWarning) - MixedClassicNativeHistogramsWarning = fmt.Errorf("%w: vector contains a mix of classic and native histograms for metric name", PromQLWarning) - NativeHistogramNotCounterWarning = fmt.Errorf("%w: this native histogram metric is not a counter:", PromQLWarning) - NativeHistogramNotGaugeWarning = fmt.Errorf("%w: this native histogram metric is not a gauge:", PromQLWarning) + InvalidRatioWarning = fmt.Errorf("%w: ratio value should be between -1 and 1", PromQLWarning) + InvalidQuantileWarning = fmt.Errorf("%w: quantile value should be between 0 and 1", PromQLWarning) + BadBucketLabelWarning = fmt.Errorf("%w: bucket label %q is missing or has a malformed value", PromQLWarning, model.BucketLabel) + MixedFloatsHistogramsWarning = fmt.Errorf("%w: encountered a mix of histograms and floats for", PromQLWarning) + MixedClassicNativeHistogramsWarning = fmt.Errorf("%w: vector contains a mix of classic and native histograms for metric name", PromQLWarning) + NativeHistogramNotCounterWarning = fmt.Errorf("%w: this native histogram metric is not a counter:", PromQLWarning) + NativeHistogramNotGaugeWarning = fmt.Errorf("%w: this native histogram metric is not a gauge:", PromQLWarning) + MixedExponentialCustomHistogramsWarning = fmt.Errorf("%w: vector contains a mix of histograms with exponential and custom buckets schemas for metric name", PromQLWarning) + IncompatibleCustomBucketsHistogramsWarning = fmt.Errorf("%w: vector contains histograms with incompatible custom buckets for metric name", PromQLWarning) PossibleNonCounterInfo = fmt.Errorf("%w: metric might not be a counter, name does not end in _total/_sum/_count/_bucket:", PromQLInfo) HistogramQuantileForcedMonotonicityInfo = fmt.Errorf("%w: input to histogram_quantile needed to be fixed for monotonicity (see https://prometheus.io/docs/prometheus/latest/querying/functions/#histogram_quantile) for metric name", PromQLInfo) @@ -140,6 +174,15 @@ func NewInvalidQuantileWarning(q float64, pos posrange.PositionRange) error { } } +// NewInvalidQuantileWarning is used when the user specifies an invalid ratio +// value, i.e. a float that is outside the range [-1, 1] or NaN. +func NewInvalidRatioWarning(q, to float64, pos posrange.PositionRange) error { + return annoErr{ + PositionRange: pos, + Err: fmt.Errorf("%w, got %g, capping to %g", InvalidRatioWarning, q, to), + } +} + // NewBadBucketLabelWarning is used when there is an error parsing the bucket label // of a classic histogram. func NewBadBucketLabelWarning(metricName, label string, pos posrange.PositionRange) error { @@ -195,6 +238,24 @@ func NewNativeHistogramNotGaugeWarning(metricName string, pos posrange.PositionR } } +// NewMixedExponentialCustomHistogramsWarning is used when the queried series includes +// histograms with both exponential and custom buckets schemas. +func NewMixedExponentialCustomHistogramsWarning(metricName string, pos posrange.PositionRange) error { + return annoErr{ + PositionRange: pos, + Err: fmt.Errorf("%w %q", MixedExponentialCustomHistogramsWarning, metricName), + } +} + +// NewIncompatibleCustomBucketsHistogramsWarning is used when the queried series includes +// custom buckets histograms with incompatible custom bounds. +func NewIncompatibleCustomBucketsHistogramsWarning(metricName string, pos posrange.PositionRange) error { + return annoErr{ + PositionRange: pos, + Err: fmt.Errorf("%w %q", IncompatibleCustomBucketsHistogramsWarning, metricName), + } +} + // NewPossibleNonCounterInfo is used when a named counter metric with only float samples does not // have the suffixes _total, _sum, _count, or _bucket. func NewPossibleNonCounterInfo(metricName string, pos posrange.PositionRange) error { diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go index ab091cf6ad..18436eaedf 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go @@ -42,6 +42,8 @@ type config struct { TracerProvider trace.TracerProvider MeterProvider metric.MeterProvider SpanStartOptions []trace.SpanStartOption + SpanAttributes []attribute.KeyValue + MetricAttributes []attribute.KeyValue ReceivedEvent bool SentEvent bool @@ -257,3 +259,29 @@ func (o spanStartOption) apply(c *config) { func WithSpanOptions(opts ...trace.SpanStartOption) Option { return spanStartOption{opts} } + +type spanAttributesOption struct{ a []attribute.KeyValue } + +func (o spanAttributesOption) apply(c *config) { + if o.a != nil { + c.SpanAttributes = o.a + } +} + +// WithSpanAttributes returns an Option to add custom attributes to the spans. +func WithSpanAttributes(a ...attribute.KeyValue) Option { + return spanAttributesOption{a: a} +} + +type metricAttributesOption struct{ a []attribute.KeyValue } + +func (o metricAttributesOption) apply(c *config) { + if o.a != nil { + c.MetricAttributes = o.a + } +} + +// WithMetricAttributes returns an Option to add custom attributes to the metrics. +func WithMetricAttributes(a ...attribute.KeyValue) Option { + return metricAttributesOption{a: a} +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go index 201867a869..fbcbfb84e0 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go @@ -62,11 +62,11 @@ func (h *serverHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)), name, trace.WithSpanKind(trace.SpanKindServer), - trace.WithAttributes(attrs...), + trace.WithAttributes(append(attrs, h.config.SpanAttributes...)...), ) gctx := gRPCContext{ - metricAttrs: attrs, + metricAttrs: append(attrs, h.config.MetricAttributes...), record: true, } if h.config.Filter != nil { @@ -102,11 +102,11 @@ func (h *clientHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont ctx, name, trace.WithSpanKind(trace.SpanKindClient), - trace.WithAttributes(attrs...), + trace.WithAttributes(append(attrs, h.config.SpanAttributes...)...), ) gctx := gRPCContext{ - metricAttrs: attrs, + metricAttrs: append(attrs, h.config.MetricAttributes...), record: true, } if h.config.Filter != nil { diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go index a15d06cb0c..04f425edfe 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go @@ -5,7 +5,7 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g // Version is the current release version of the gRPC instrumentation. func Version() string { - return "0.53.0" + return "0.54.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go index 214acaf581..5d6e6156b7 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go @@ -18,13 +18,6 @@ const ( WriteErrorKey = attribute.Key("http.write_error") // if an error occurred while writing a reply, the string of the error (io.EOF is not recorded) ) -// Server HTTP metrics. -const ( - serverRequestSize = "http.server.request.size" // Incoming request bytes total - serverResponseSize = "http.server.response.size" // Incoming response bytes total - serverDuration = "http.server.duration" // Incoming end to end duration, milliseconds -) - // Client HTTP metrics. const ( clientRequestSize = "http.client.request.size" // Outgoing request bytes total diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go index f0a9bb9efe..a01bfafbe0 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go @@ -8,6 +8,8 @@ import ( "net/http" "net/http/httptrace" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/propagation" @@ -33,8 +35,9 @@ type config struct { SpanNameFormatter func(string, *http.Request) string ClientTrace func(context.Context) *httptrace.ClientTrace - TracerProvider trace.TracerProvider - MeterProvider metric.MeterProvider + TracerProvider trace.TracerProvider + MeterProvider metric.MeterProvider + MetricAttributesFn func(*http.Request) []attribute.KeyValue } // Option interface used for setting optional config properties. @@ -194,3 +197,11 @@ func WithServerName(server string) Option { c.ServerName = server }) } + +// WithMetricAttributesFn returns an Option to set a function that maps an HTTP request to a slice of attribute.KeyValue. +// These attributes will be included in metrics for every request. +func WithMetricAttributesFn(metricAttributesFn func(r *http.Request) []attribute.KeyValue) Option { + return optionFunc(func(c *config) { + c.MetricAttributesFn = metricAttributesFn + }) +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go index d01bdccf40..33580a35b7 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go @@ -9,11 +9,9 @@ import ( "github.com/felixge/httpsnoop" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/trace" ) @@ -24,7 +22,6 @@ type middleware struct { server string tracer trace.Tracer - meter metric.Meter propagators propagation.TextMapPropagator spanStartOptions []trace.SpanStartOption readEvent bool @@ -34,10 +31,7 @@ type middleware struct { publicEndpoint bool publicEndpointFn func(*http.Request) bool - traceSemconv semconv.HTTPServer - requestBytesCounter metric.Int64Counter - responseBytesCounter metric.Int64Counter - serverLatencyMeasure metric.Float64Histogram + semconv semconv.HTTPServer } func defaultHandlerFormatter(operation string, _ *http.Request) string { @@ -56,8 +50,6 @@ func NewHandler(handler http.Handler, operation string, opts ...Option) http.Han func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Handler { h := middleware{ operation: operation, - - traceSemconv: semconv.NewHTTPServer(), } defaultOpts := []Option{ @@ -67,7 +59,6 @@ func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Han c := newConfig(append(defaultOpts, opts...)...) h.configure(c) - h.createMeasures() return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -78,7 +69,6 @@ func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Han func (h *middleware) configure(c *config) { h.tracer = c.Tracer - h.meter = c.Meter h.propagators = c.Propagators h.spanStartOptions = c.SpanStartOptions h.readEvent = c.ReadEvent @@ -88,6 +78,7 @@ func (h *middleware) configure(c *config) { h.publicEndpoint = c.PublicEndpoint h.publicEndpointFn = c.PublicEndpointFn h.server = c.ServerName + h.semconv = semconv.NewHTTPServer(c.Meter) } func handleErr(err error) { @@ -96,30 +87,6 @@ func handleErr(err error) { } } -func (h *middleware) createMeasures() { - var err error - h.requestBytesCounter, err = h.meter.Int64Counter( - serverRequestSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP request messages."), - ) - handleErr(err) - - h.responseBytesCounter, err = h.meter.Int64Counter( - serverResponseSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP response messages."), - ) - handleErr(err) - - h.serverLatencyMeasure, err = h.meter.Float64Histogram( - serverDuration, - metric.WithUnit("ms"), - metric.WithDescription("Measures the duration of inbound HTTP requests."), - ) - handleErr(err) -} - // serveHTTP sets up tracing and calls the given next http.Handler with the span // context injected into the request context. func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http.Handler) { @@ -134,7 +101,7 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http ctx := h.propagators.Extract(r.Context(), propagation.HeaderCarrier(r.Header)) opts := []trace.SpanStartOption{ - trace.WithAttributes(h.traceSemconv.RequestTraceAttrs(h.server, r)...), + trace.WithAttributes(h.semconv.RequestTraceAttrs(h.server, r)...), } opts = append(opts, h.spanStartOptions...) @@ -166,14 +133,12 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http } } - var bw bodyWrapper // if request body is nil or NoBody, we don't want to mutate the body as it // will affect the identity of it in an unforeseeable way because we assert // ReadCloser fulfills a certain interface and it is indeed nil or NoBody. + bw := request.NewBodyWrapper(r.Body, readRecordFunc) if r.Body != nil && r.Body != http.NoBody { - bw.ReadCloser = r.Body - bw.record = readRecordFunc - r.Body = &bw + r.Body = bw } writeRecordFunc := func(int64) {} @@ -183,13 +148,7 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http } } - rww := &respWriterWrapper{ - ResponseWriter: w, - record: writeRecordFunc, - ctx: ctx, - props: h.propagators, - statusCode: http.StatusOK, // default status code in case the Handler doesn't write anything - } + rww := request.NewRespWriterWrapper(w, writeRecordFunc) // Wrap w to use our ResponseWriter methods while also exposing // other interfaces that w may implement (http.CloseNotifier, @@ -217,35 +176,35 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http next.ServeHTTP(w, r.WithContext(ctx)) - span.SetStatus(semconv.ServerStatus(rww.statusCode)) - span.SetAttributes(h.traceSemconv.ResponseTraceAttrs(semconv.ResponseTelemetry{ - StatusCode: rww.statusCode, - ReadBytes: bw.read.Load(), - ReadError: bw.err, - WriteBytes: rww.written, - WriteError: rww.err, + statusCode := rww.StatusCode() + bytesWritten := rww.BytesWritten() + span.SetStatus(h.semconv.Status(statusCode)) + span.SetAttributes(h.semconv.ResponseTraceAttrs(semconv.ResponseTelemetry{ + StatusCode: statusCode, + ReadBytes: bw.BytesRead(), + ReadError: bw.Error(), + WriteBytes: bytesWritten, + WriteError: rww.Error(), })...) - // Add metrics - attributes := append(labeler.Get(), semconvutil.HTTPServerRequestMetrics(h.server, r)...) - if rww.statusCode > 0 { - attributes = append(attributes, semconv.HTTPStatusCode(rww.statusCode)) - } - o := metric.WithAttributeSet(attribute.NewSet(attributes...)) - addOpts := []metric.AddOption{o} // Allocate vararg slice once. - h.requestBytesCounter.Add(ctx, bw.read.Load(), addOpts...) - h.responseBytesCounter.Add(ctx, rww.written, addOpts...) - // Use floating point division here for higher precision (instead of Millisecond method). elapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond) - h.serverLatencyMeasure.Record(ctx, elapsedTime, o) + h.semconv.RecordMetrics(ctx, semconv.MetricData{ + ServerName: h.server, + Req: r, + StatusCode: statusCode, + AdditionalAttributes: labeler.Get(), + RequestSize: bw.BytesRead(), + ResponseSize: bytesWritten, + ElapsedTime: elapsedTime, + }) } // WithRouteTag annotates spans and metrics with the provided route name // with HTTP route attribute. func WithRouteTag(route string, h http.Handler) http.Handler { - attr := semconv.NewHTTPServer().Route(route) + attr := semconv.NewHTTPServer(nil).Route(route) return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { span := trace.SpanFromContext(r.Context()) span.SetAttributes(attr) diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go new file mode 100644 index 0000000000..a945f55661 --- /dev/null +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go @@ -0,0 +1,75 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" + +import ( + "io" + "sync" +) + +var _ io.ReadCloser = &BodyWrapper{} + +// BodyWrapper wraps a http.Request.Body (an io.ReadCloser) to track the number +// of bytes read and the last error. +type BodyWrapper struct { + io.ReadCloser + OnRead func(n int64) // must not be nil + + mu sync.Mutex + read int64 + err error +} + +// NewBodyWrapper creates a new BodyWrapper. +// +// The onRead attribute is a callback that will be called every time the data +// is read, with the number of bytes being read. +func NewBodyWrapper(body io.ReadCloser, onRead func(int64)) *BodyWrapper { + return &BodyWrapper{ + ReadCloser: body, + OnRead: onRead, + } +} + +// Read reads the data from the io.ReadCloser, and stores the number of bytes +// read and the error. +func (w *BodyWrapper) Read(b []byte) (int, error) { + n, err := w.ReadCloser.Read(b) + n1 := int64(n) + + w.updateReadData(n1, err) + w.OnRead(n1) + return n, err +} + +func (w *BodyWrapper) updateReadData(n int64, err error) { + w.mu.Lock() + defer w.mu.Unlock() + + w.read += n + if err != nil { + w.err = err + } +} + +// Closes closes the io.ReadCloser. +func (w *BodyWrapper) Close() error { + return w.ReadCloser.Close() +} + +// BytesRead returns the number of bytes read up to this point. +func (w *BodyWrapper) BytesRead() int64 { + w.mu.Lock() + defer w.mu.Unlock() + + return w.read +} + +// Error returns the last error. +func (w *BodyWrapper) Error() error { + w.mu.Lock() + defer w.mu.Unlock() + + return w.err +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go new file mode 100644 index 0000000000..aea171fb26 --- /dev/null +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go @@ -0,0 +1,112 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" + +import ( + "net/http" + "sync" +) + +var _ http.ResponseWriter = &RespWriterWrapper{} + +// RespWriterWrapper wraps a http.ResponseWriter in order to track the number of +// bytes written, the last error, and to catch the first written statusCode. +// TODO: The wrapped http.ResponseWriter doesn't implement any of the optional +// types (http.Hijacker, http.Pusher, http.CloseNotifier, etc) +// that may be useful when using it in real life situations. +type RespWriterWrapper struct { + http.ResponseWriter + OnWrite func(n int64) // must not be nil + + mu sync.RWMutex + written int64 + statusCode int + err error + wroteHeader bool +} + +// NewRespWriterWrapper creates a new RespWriterWrapper. +// +// The onWrite attribute is a callback that will be called every time the data +// is written, with the number of bytes that were written. +func NewRespWriterWrapper(w http.ResponseWriter, onWrite func(int64)) *RespWriterWrapper { + return &RespWriterWrapper{ + ResponseWriter: w, + OnWrite: onWrite, + statusCode: http.StatusOK, // default status code in case the Handler doesn't write anything + } +} + +// Write writes the bytes array into the [ResponseWriter], and tracks the +// number of bytes written and last error. +func (w *RespWriterWrapper) Write(p []byte) (int, error) { + w.mu.Lock() + defer w.mu.Unlock() + + w.writeHeader(http.StatusOK) + + n, err := w.ResponseWriter.Write(p) + n1 := int64(n) + w.OnWrite(n1) + w.written += n1 + w.err = err + return n, err +} + +// WriteHeader persists initial statusCode for span attribution. +// All calls to WriteHeader will be propagated to the underlying ResponseWriter +// and will persist the statusCode from the first call. +// Blocking consecutive calls to WriteHeader alters expected behavior and will +// remove warning logs from net/http where developers will notice incorrect handler implementations. +func (w *RespWriterWrapper) WriteHeader(statusCode int) { + w.mu.Lock() + defer w.mu.Unlock() + + w.writeHeader(statusCode) +} + +// writeHeader persists the status code for span attribution, and propagates +// the call to the underlying ResponseWriter. +// It does not acquire a lock, and therefore assumes that is being handled by a +// parent method. +func (w *RespWriterWrapper) writeHeader(statusCode int) { + if !w.wroteHeader { + w.wroteHeader = true + w.statusCode = statusCode + } + w.ResponseWriter.WriteHeader(statusCode) +} + +// Flush implements [http.Flusher]. +func (w *RespWriterWrapper) Flush() { + w.WriteHeader(http.StatusOK) + + if f, ok := w.ResponseWriter.(http.Flusher); ok { + f.Flush() + } +} + +// BytesWritten returns the number of bytes written. +func (w *RespWriterWrapper) BytesWritten() int64 { + w.mu.RLock() + defer w.mu.RUnlock() + + return w.written +} + +// BytesWritten returns the HTTP status code that was sent. +func (w *RespWriterWrapper) StatusCode() int { + w.mu.RLock() + defer w.mu.RUnlock() + + return w.statusCode +} + +// Error returns the last error. +func (w *RespWriterWrapper) Error() error { + w.mu.RLock() + defer w.mu.RUnlock() + + return w.err +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go index 3ec0ad00c8..9cae4cab86 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go @@ -4,6 +4,7 @@ package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" import ( + "context" "fmt" "net/http" "os" @@ -11,6 +12,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/metric" ) type ResponseTelemetry struct { @@ -23,6 +25,11 @@ type ResponseTelemetry struct { type HTTPServer struct { duplicate bool + + // Old metrics + requestBytesCounter metric.Int64Counter + responseBytesCounter metric.Int64Counter + serverLatencyMeasure metric.Float64Histogram } // RequestTraceAttrs returns trace attributes for an HTTP request received by a @@ -63,15 +70,10 @@ func (s HTTPServer) Route(route string) attribute.KeyValue { return oldHTTPServer{}.Route(route) } -func NewHTTPServer() HTTPServer { - env := strings.ToLower(os.Getenv("OTEL_HTTP_CLIENT_COMPATIBILITY_MODE")) - return HTTPServer{duplicate: env == "http/dup"} -} - -// ServerStatus returns a span status code and message for an HTTP status code +// Status returns a span status code and message for an HTTP status code // value returned by a server. Status codes in the 400-499 range are not // returned as errors. -func ServerStatus(code int) (codes.Code, string) { +func (s HTTPServer) Status(code int) (codes.Code, string) { if code < 100 || code >= 600 { return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) } @@ -80,3 +82,84 @@ func ServerStatus(code int) (codes.Code, string) { } return codes.Unset, "" } + +type MetricData struct { + ServerName string + Req *http.Request + StatusCode int + AdditionalAttributes []attribute.KeyValue + + RequestSize int64 + ResponseSize int64 + ElapsedTime float64 +} + +func (s HTTPServer) RecordMetrics(ctx context.Context, md MetricData) { + if s.requestBytesCounter == nil || s.responseBytesCounter == nil || s.serverLatencyMeasure == nil { + // This will happen if an HTTPServer{} is used insted of NewHTTPServer. + return + } + + attributes := oldHTTPServer{}.MetricAttributes(md.ServerName, md.Req, md.StatusCode, md.AdditionalAttributes) + o := metric.WithAttributeSet(attribute.NewSet(attributes...)) + addOpts := []metric.AddOption{o} // Allocate vararg slice once. + s.requestBytesCounter.Add(ctx, md.RequestSize, addOpts...) + s.responseBytesCounter.Add(ctx, md.ResponseSize, addOpts...) + s.serverLatencyMeasure.Record(ctx, md.ElapsedTime, o) + + // TODO: Duplicate Metrics +} + +func NewHTTPServer(meter metric.Meter) HTTPServer { + env := strings.ToLower(os.Getenv("OTEL_SEMCONV_STABILITY_OPT_IN")) + duplicate := env == "http/dup" + server := HTTPServer{ + duplicate: duplicate, + } + server.requestBytesCounter, server.responseBytesCounter, server.serverLatencyMeasure = oldHTTPServer{}.createMeasures(meter) + return server +} + +type HTTPClient struct { + duplicate bool +} + +func NewHTTPClient() HTTPClient { + env := strings.ToLower(os.Getenv("OTEL_SEMCONV_STABILITY_OPT_IN")) + return HTTPClient{duplicate: env == "http/dup"} +} + +// RequestTraceAttrs returns attributes for an HTTP request made by a client. +func (c HTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue { + if c.duplicate { + return append(oldHTTPClient{}.RequestTraceAttrs(req), newHTTPClient{}.RequestTraceAttrs(req)...) + } + return oldHTTPClient{}.RequestTraceAttrs(req) +} + +// ResponseTraceAttrs returns metric attributes for an HTTP request made by a client. +func (c HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue { + if c.duplicate { + return append(oldHTTPClient{}.ResponseTraceAttrs(resp), newHTTPClient{}.ResponseTraceAttrs(resp)...) + } + + return oldHTTPClient{}.ResponseTraceAttrs(resp) +} + +func (c HTTPClient) Status(code int) (codes.Code, string) { + if code < 100 || code >= 600 { + return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) + } + if code >= 400 { + return codes.Error, "" + } + return codes.Unset, "" +} + +func (c HTTPClient) ErrorType(err error) attribute.KeyValue { + if c.duplicate { + return newHTTPClient{}.ErrorType(err) + } + + return attribute.KeyValue{} +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go similarity index 57% rename from vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go rename to vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go index 0c5d4c4608..745b8c67bc 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go @@ -4,11 +4,14 @@ package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" import ( + "fmt" "net/http" + "reflect" + "strconv" "strings" "go.opentelemetry.io/otel/attribute" - semconvNew "go.opentelemetry.io/otel/semconv/v1.24.0" + semconvNew "go.opentelemetry.io/otel/semconv/v1.26.0" ) type newHTTPServer struct{} @@ -195,3 +198,151 @@ func (n newHTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.Ke func (n newHTTPServer) Route(route string) attribute.KeyValue { return semconvNew.HTTPRoute(route) } + +type newHTTPClient struct{} + +// RequestTraceAttrs returns trace attributes for an HTTP request made by a client. +func (n newHTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue { + /* + below attributes are returned: + - http.request.method + - http.request.method.original + - url.full + - server.address + - server.port + - network.protocol.name + - network.protocol.version + */ + numOfAttributes := 3 // URL, server address, proto, and method. + + var urlHost string + if req.URL != nil { + urlHost = req.URL.Host + } + var requestHost string + var requestPort int + for _, hostport := range []string{urlHost, req.Header.Get("Host")} { + requestHost, requestPort = splitHostPort(hostport) + if requestHost != "" || requestPort > 0 { + break + } + } + + eligiblePort := requiredHTTPPort(req.URL != nil && req.URL.Scheme == "https", requestPort) + if eligiblePort > 0 { + numOfAttributes++ + } + useragent := req.UserAgent() + if useragent != "" { + numOfAttributes++ + } + + protoName, protoVersion := netProtocol(req.Proto) + if protoName != "" && protoName != "http" { + numOfAttributes++ + } + if protoVersion != "" { + numOfAttributes++ + } + + method, originalMethod := n.method(req.Method) + if originalMethod != (attribute.KeyValue{}) { + numOfAttributes++ + } + + attrs := make([]attribute.KeyValue, 0, numOfAttributes) + + attrs = append(attrs, method) + if originalMethod != (attribute.KeyValue{}) { + attrs = append(attrs, originalMethod) + } + + var u string + if req.URL != nil { + // Remove any username/password info that may be in the URL. + userinfo := req.URL.User + req.URL.User = nil + u = req.URL.String() + // Restore any username/password info that was removed. + req.URL.User = userinfo + } + attrs = append(attrs, semconvNew.URLFull(u)) + + attrs = append(attrs, semconvNew.ServerAddress(requestHost)) + if eligiblePort > 0 { + attrs = append(attrs, semconvNew.ServerPort(eligiblePort)) + } + + if protoName != "" && protoName != "http" { + attrs = append(attrs, semconvNew.NetworkProtocolName(protoName)) + } + if protoVersion != "" { + attrs = append(attrs, semconvNew.NetworkProtocolVersion(protoVersion)) + } + + return attrs +} + +// ResponseTraceAttrs returns trace attributes for an HTTP response made by a client. +func (n newHTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue { + /* + below attributes are returned: + - http.response.status_code + - error.type + */ + var count int + if resp.StatusCode > 0 { + count++ + } + + if isErrorStatusCode(resp.StatusCode) { + count++ + } + + attrs := make([]attribute.KeyValue, 0, count) + if resp.StatusCode > 0 { + attrs = append(attrs, semconvNew.HTTPResponseStatusCode(resp.StatusCode)) + } + + if isErrorStatusCode(resp.StatusCode) { + errorType := strconv.Itoa(resp.StatusCode) + attrs = append(attrs, semconvNew.ErrorTypeKey.String(errorType)) + } + return attrs +} + +func (n newHTTPClient) ErrorType(err error) attribute.KeyValue { + t := reflect.TypeOf(err) + var value string + if t.PkgPath() == "" && t.Name() == "" { + // Likely a builtin type. + value = t.String() + } else { + value = fmt.Sprintf("%s.%s", t.PkgPath(), t.Name()) + } + + if value == "" { + return semconvNew.ErrorTypeOther + } + + return semconvNew.ErrorTypeKey.String(value) +} + +func (n newHTTPClient) method(method string) (attribute.KeyValue, attribute.KeyValue) { + if method == "" { + return semconvNew.HTTPRequestMethodGet, attribute.KeyValue{} + } + if attr, ok := methodLookup[method]; ok { + return attr, attribute.KeyValue{} + } + + orig := semconvNew.HTTPRequestMethodOriginal(method) + if attr, ok := methodLookup[strings.ToUpper(method)]; ok { + return attr, orig + } + return semconvNew.HTTPRequestMethodGet, orig +} + +func isErrorStatusCode(code int) bool { + return code >= 400 || code < 100 +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go index e7f293761b..e6e14924f5 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go @@ -9,8 +9,9 @@ import ( "strconv" "strings" + "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" - semconvNew "go.opentelemetry.io/otel/semconv/v1.24.0" + semconvNew "go.opentelemetry.io/otel/semconv/v1.26.0" ) // splitHostPort splits a network address hostport of the form "host", @@ -49,7 +50,7 @@ func splitHostPort(hostport string) (host string, port int) { if err != nil { return } - return host, int(p) + return host, int(p) // nolint: gosec // Byte size checked 16 above. } func requiredHTTPPort(https bool, port int) int { // nolint:revive @@ -89,3 +90,9 @@ var methodLookup = map[string]attribute.KeyValue{ http.MethodPut: semconvNew.HTTPRequestMethodPut, http.MethodTrace: semconvNew.HTTPRequestMethodTrace, } + +func handleErr(err error) { + if err != nil { + otel.Handle(err) + } +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go index c3e838aaa5..c999b05e67 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go @@ -7,9 +7,13 @@ import ( "errors" "io" "net/http" + "slices" + "strings" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/metric/noop" semconv "go.opentelemetry.io/otel/semconv/v1.20.0" ) @@ -72,3 +76,117 @@ func (o oldHTTPServer) Route(route string) attribute.KeyValue { func HTTPStatusCode(status int) attribute.KeyValue { return semconv.HTTPStatusCode(status) } + +// Server HTTP metrics. +const ( + serverRequestSize = "http.server.request.size" // Incoming request bytes total + serverResponseSize = "http.server.response.size" // Incoming response bytes total + serverDuration = "http.server.duration" // Incoming end to end duration, milliseconds +) + +func (h oldHTTPServer) createMeasures(meter metric.Meter) (metric.Int64Counter, metric.Int64Counter, metric.Float64Histogram) { + if meter == nil { + return noop.Int64Counter{}, noop.Int64Counter{}, noop.Float64Histogram{} + } + var err error + requestBytesCounter, err := meter.Int64Counter( + serverRequestSize, + metric.WithUnit("By"), + metric.WithDescription("Measures the size of HTTP request messages."), + ) + handleErr(err) + + responseBytesCounter, err := meter.Int64Counter( + serverResponseSize, + metric.WithUnit("By"), + metric.WithDescription("Measures the size of HTTP response messages."), + ) + handleErr(err) + + serverLatencyMeasure, err := meter.Float64Histogram( + serverDuration, + metric.WithUnit("ms"), + metric.WithDescription("Measures the duration of inbound HTTP requests."), + ) + handleErr(err) + + return requestBytesCounter, responseBytesCounter, serverLatencyMeasure +} + +func (o oldHTTPServer) MetricAttributes(server string, req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { + n := len(additionalAttributes) + 3 + var host string + var p int + if server == "" { + host, p = splitHostPort(req.Host) + } else { + // Prioritize the primary server name. + host, p = splitHostPort(server) + if p < 0 { + _, p = splitHostPort(req.Host) + } + } + hostPort := requiredHTTPPort(req.TLS != nil, p) + if hostPort > 0 { + n++ + } + protoName, protoVersion := netProtocol(req.Proto) + if protoName != "" { + n++ + } + if protoVersion != "" { + n++ + } + + if statusCode > 0 { + n++ + } + + attributes := slices.Grow(additionalAttributes, n) + attributes = append(attributes, + o.methodMetric(req.Method), + o.scheme(req.TLS != nil), + semconv.NetHostName(host)) + + if hostPort > 0 { + attributes = append(attributes, semconv.NetHostPort(hostPort)) + } + if protoName != "" { + attributes = append(attributes, semconv.NetProtocolName(protoName)) + } + if protoVersion != "" { + attributes = append(attributes, semconv.NetProtocolVersion(protoVersion)) + } + + if statusCode > 0 { + attributes = append(attributes, semconv.HTTPStatusCode(statusCode)) + } + return attributes +} + +func (o oldHTTPServer) methodMetric(method string) attribute.KeyValue { + method = strings.ToUpper(method) + switch method { + case http.MethodConnect, http.MethodDelete, http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodPatch, http.MethodPost, http.MethodPut, http.MethodTrace: + default: + method = "_OTHER" + } + return semconv.HTTPMethod(method) +} + +func (o oldHTTPServer) scheme(https bool) attribute.KeyValue { // nolint:revive + if https { + return semconv.HTTPSchemeHTTPS + } + return semconv.HTTPSchemeHTTP +} + +type oldHTTPClient struct{} + +func (o oldHTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue { + return semconvutil.HTTPClientRequest(req) +} + +func (o oldHTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue { + return semconvutil.HTTPClientResponse(resp) +} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go index a9a9226b39..b80a1db61f 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go @@ -195,7 +195,7 @@ func splitHostPort(hostport string) (host string, port int) { if err != nil { return } - return host, int(p) + return host, int(p) // nolint: gosec // Bitsize checked to be 16 above. } func netProtocol(proto string) (name string, version string) { diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go index 0d3cb2e4aa..b4119d3438 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go @@ -11,13 +11,15 @@ import ( "sync/atomic" "time" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/propagation" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + "go.opentelemetry.io/otel/trace" ) @@ -26,14 +28,16 @@ import ( type Transport struct { rt http.RoundTripper - tracer trace.Tracer - meter metric.Meter - propagators propagation.TextMapPropagator - spanStartOptions []trace.SpanStartOption - filters []Filter - spanNameFormatter func(string, *http.Request) string - clientTrace func(context.Context) *httptrace.ClientTrace + tracer trace.Tracer + meter metric.Meter + propagators propagation.TextMapPropagator + spanStartOptions []trace.SpanStartOption + filters []Filter + spanNameFormatter func(string, *http.Request) string + clientTrace func(context.Context) *httptrace.ClientTrace + metricAttributesFn func(*http.Request) []attribute.KeyValue + semconv semconv.HTTPClient requestBytesCounter metric.Int64Counter responseBytesCounter metric.Int64Counter latencyMeasure metric.Float64Histogram @@ -53,7 +57,8 @@ func NewTransport(base http.RoundTripper, opts ...Option) *Transport { } t := Transport{ - rt: base, + rt: base, + semconv: semconv.NewHTTPClient(), } defaultOpts := []Option{ @@ -76,6 +81,7 @@ func (t *Transport) applyConfig(c *config) { t.filters = c.Filters t.spanNameFormatter = c.SpanNameFormatter t.clientTrace = c.ClientTrace + t.metricAttributesFn = c.MetricAttributesFn } func (t *Transport) createMeasures() { @@ -143,45 +149,49 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { r = r.Clone(ctx) // According to RoundTripper spec, we shouldn't modify the origin request. - // use a body wrapper to determine the request size - var bw bodyWrapper // if request body is nil or NoBody, we don't want to mutate the body as it // will affect the identity of it in an unforeseeable way because we assert // ReadCloser fulfills a certain interface and it is indeed nil or NoBody. + bw := request.NewBodyWrapper(r.Body, func(int64) {}) if r.Body != nil && r.Body != http.NoBody { - bw.ReadCloser = r.Body - // noop to prevent nil panic. not using this record fun yet. - bw.record = func(int64) {} - r.Body = &bw + r.Body = bw } - span.SetAttributes(semconvutil.HTTPClientRequest(r)...) + span.SetAttributes(t.semconv.RequestTraceAttrs(r)...) t.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header)) res, err := t.rt.RoundTrip(r) if err != nil { - span.RecordError(err) + // set error type attribute if the error is part of the predefined + // error types. + // otherwise, record it as an exception + if errType := t.semconv.ErrorType(err); errType.Valid() { + span.SetAttributes(errType) + } else { + span.RecordError(err) + } + span.SetStatus(codes.Error, err.Error()) span.End() return res, err } // metrics - metricAttrs := append(labeler.Get(), semconvutil.HTTPClientRequestMetrics(r)...) + metricAttrs := append(append(labeler.Get(), semconvutil.HTTPClientRequestMetrics(r)...), t.metricAttributesFromRequest(r)...) if res.StatusCode > 0 { metricAttrs = append(metricAttrs, semconv.HTTPStatusCode(res.StatusCode)) } o := metric.WithAttributeSet(attribute.NewSet(metricAttrs...)) - addOpts := []metric.AddOption{o} // Allocate vararg slice once. - t.requestBytesCounter.Add(ctx, bw.read.Load(), addOpts...) + + t.requestBytesCounter.Add(ctx, bw.BytesRead(), o) // For handling response bytes we leverage a callback when the client reads the http response readRecordFunc := func(n int64) { - t.responseBytesCounter.Add(ctx, n, addOpts...) + t.responseBytesCounter.Add(ctx, n, o) } // traces - span.SetAttributes(semconvutil.HTTPClientResponse(res)...) - span.SetStatus(semconvutil.HTTPClientStatus(res.StatusCode)) + span.SetAttributes(t.semconv.ResponseTraceAttrs(res)...) + span.SetStatus(t.semconv.Status(res.StatusCode)) res.Body = newWrappedBody(span, readRecordFunc, res.Body) @@ -193,6 +203,14 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { return res, err } +func (t *Transport) metricAttributesFromRequest(r *http.Request) []attribute.KeyValue { + var attributeForRequest []attribute.KeyValue + if t.metricAttributesFn != nil { + attributeForRequest = t.metricAttributesFn(r) + } + return attributeForRequest +} + // newWrappedBody returns a new and appropriately scoped *wrappedBody as an // io.ReadCloser. If the passed body implements io.Writer, the returned value // will implement io.ReadWriteCloser. diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go index b0957f28ce..502c1bdafc 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go @@ -5,7 +5,7 @@ package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http // Version is the current release version of the otelhttp instrumentation. func Version() string { - return "0.53.0" + return "0.54.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go deleted file mode 100644 index 948f8406c0..0000000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "context" - "io" - "net/http" - "sync/atomic" - - "go.opentelemetry.io/otel/propagation" -) - -var _ io.ReadCloser = &bodyWrapper{} - -// bodyWrapper wraps a http.Request.Body (an io.ReadCloser) to track the number -// of bytes read and the last error. -type bodyWrapper struct { - io.ReadCloser - record func(n int64) // must not be nil - - read atomic.Int64 - err error -} - -func (w *bodyWrapper) Read(b []byte) (int, error) { - n, err := w.ReadCloser.Read(b) - n1 := int64(n) - w.read.Add(n1) - w.err = err - w.record(n1) - return n, err -} - -func (w *bodyWrapper) Close() error { - return w.ReadCloser.Close() -} - -var _ http.ResponseWriter = &respWriterWrapper{} - -// respWriterWrapper wraps a http.ResponseWriter in order to track the number of -// bytes written, the last error, and to catch the first written statusCode. -// TODO: The wrapped http.ResponseWriter doesn't implement any of the optional -// types (http.Hijacker, http.Pusher, http.CloseNotifier, http.Flusher, etc) -// that may be useful when using it in real life situations. -type respWriterWrapper struct { - http.ResponseWriter - record func(n int64) // must not be nil - - // used to inject the header - ctx context.Context - - props propagation.TextMapPropagator - - written int64 - statusCode int - err error - wroteHeader bool -} - -func (w *respWriterWrapper) Header() http.Header { - return w.ResponseWriter.Header() -} - -func (w *respWriterWrapper) Write(p []byte) (int, error) { - if !w.wroteHeader { - w.WriteHeader(http.StatusOK) - } - n, err := w.ResponseWriter.Write(p) - n1 := int64(n) - w.record(n1) - w.written += n1 - w.err = err - return n, err -} - -// WriteHeader persists initial statusCode for span attribution. -// All calls to WriteHeader will be propagated to the underlying ResponseWriter -// and will persist the statusCode from the first call. -// Blocking consecutive calls to WriteHeader alters expected behavior and will -// remove warning logs from net/http where developers will notice incorrect handler implementations. -func (w *respWriterWrapper) WriteHeader(statusCode int) { - if !w.wroteHeader { - w.wroteHeader = true - w.statusCode = statusCode - } - w.ResponseWriter.WriteHeader(statusCode) -} - -func (w *respWriterWrapper) Flush() { - if !w.wroteHeader { - w.WriteHeader(http.StatusOK) - } - - if f, ok := w.ResponseWriter.(http.Flusher); ok { - f.Flush() - } -} diff --git a/vendor/go.opentelemetry.io/otel/.golangci.yml b/vendor/go.opentelemetry.io/otel/.golangci.yml index 6d9c8b6495..d9abe194d9 100644 --- a/vendor/go.opentelemetry.io/otel/.golangci.yml +++ b/vendor/go.opentelemetry.io/otel/.golangci.yml @@ -9,6 +9,8 @@ linters: disable-all: true # Specifically enable linters we want to use. enable: + - asasalint + - bodyclose - depguard - errcheck - errorlint diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md index c01e6998e0..6107c17b89 100644 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ b/vendor/go.opentelemetry.io/otel/CHANGELOG.md @@ -8,6 +8,64 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [Unreleased] + + + +## [1.29.0/0.51.0/0.5.0] 2024-08-23 + +This release is the last to support [Go 1.21]. +The next release will require at least [Go 1.22]. + +### Added + +- Add MacOS ARM64 platform to the compatibility testing suite. (#5577) +- Add `InstrumentationScope` field to `SpanStub` in `go.opentelemetry.io/otel/sdk/trace/tracetest`, as a replacement for the deprecated `InstrumentationLibrary`. (#5627) +- Make the initial release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. + This new module contains an OTLP exporter that transmits log telemetry using gRPC. + This module is unstable and breaking changes may be introduced. + See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5629) +- Add `Walk` function to `TraceState` in `go.opentelemetry.io/otel/trace` to iterate all the key-value pairs. (#5651) +- Bridge the trace state in `go.opentelemetry.io/otel/bridge/opencensus`. (#5651) +- Zero value of `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` no longer panics. (#5665) +- The `FilterProcessor` interface type is added in `go.opentelemetry.io/otel/sdk/log/internal/x`. + This is an optional and experimental interface that log `Processor`s can implement to instruct the `Logger` if a `Record` will be processed or not. + It replaces the existing `Enabled` method that is removed from the `Processor` interface itself. + It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#5692) +- Support [Go 1.23]. (#5720) + +### Changed + +- `NewMemberRaw`, `NewKeyProperty` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage` allow UTF-8 string in key. (#5132) +- `Processor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` now accepts a pointer to `Record` instead of a value so that the record modifications done in a processor are propagated to subsequent registered processors. (#5636) +- `SimpleProcessor.Enabled` in `go.opentelemetry.io/otel/sdk/log` now returns `false` if the exporter is `nil`. (#5665) +- Update the concurrency requirements of `Exporter` in `go.opentelemetry.io/otel/sdk/log`. (#5666) +- `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` synchronizes `OnEmit` calls. (#5666) +- The `Processor` interface in `go.opentelemetry.io/otel/sdk/log` no longer includes the `Enabled` method. + See the `FilterProcessor` interface type added in `go.opentelemetry.io/otel/sdk/log/internal/x` to continue providing this functionality. (#5692) +- The `SimpleProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693) +- The `BatchProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693) + +### Fixed + +- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5584) +- Pass the underlying error rather than a generic retry-able failure in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5541) +- Correct the `Tracer`, `Meter`, and `Logger` names used in `go.opentelemetry.io/otel/example/dice`. (#5612) +- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/namedtracer`. (#5612) +- Correct the `Tracer` name used in `go.opentelemetry.io/otel/example/opencensus`. (#5612) +- Correct the `Tracer` and `Meter` names used in `go.opentelemetry.io/otel/example/otel-collector`. (#5612) +- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/passthrough`. (#5612) +- Correct the `Meter` name used in `go.opentelemetry.io/otel/example/prometheus`. (#5612) +- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/zipkin`. (#5612) +- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5641) +- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5650) +- Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705) +- Remove invalid environment variable header keys in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705) + +### Removed + +- The `Enabled` method of the `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692) +- The `Enabled` method of the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692) + ## [1.28.0/0.50.0/0.4.0] 2024-07-02 ### Added @@ -49,6 +107,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Fix stale timestamps reported by the last-value aggregation. (#5517) - Indicate the `Exporter` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` must be created by the `New` method. (#5521) - Improved performance in all `{Bool,Int64,Float64,String}SliceValue` functions of `go.opentelemetry.io/attributes` by reducing the number of allocations. (#5549) +- Replace invalid percent-encoded octet sequences with replacement char in `go.opentelemetry.io/otel/baggage`. (#5528) ## [1.27.0/0.49.0/0.3.0] 2024-05-21 @@ -175,7 +234,7 @@ The next release will require at least [Go 1.21]. This module includes OpenTelemetry Go's implementation of the Logs Bridge API. This module is in an alpha state, it is subject to breaking changes. See our [versioning policy](./VERSIONING.md) for more info. (#4961) -- ARM64 platform to the compatibility testing suite. (#4994) +- Add ARM64 platform to the compatibility testing suite. (#4994) ### Fixed @@ -3003,7 +3062,8 @@ It contains api and sdk for trace and meter. - CircleCI build CI manifest files. - CODEOWNERS file to track owners of this project. -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...HEAD +[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.29.0...HEAD +[1.29.0/0.51.0/0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.29.0 [1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0 [1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0 [1.26.0/0.48.0/0.2.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.26.0 @@ -3086,6 +3146,9 @@ It contains api and sdk for trace and meter. [0.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.1 [0.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.0 + + +[Go 1.23]: https://go.dev/doc/go1.23 [Go 1.22]: https://go.dev/doc/go1.22 [Go 1.21]: https://go.dev/doc/go1.21 [Go 1.20]: https://go.dev/doc/go1.20 diff --git a/vendor/go.opentelemetry.io/otel/CODEOWNERS b/vendor/go.opentelemetry.io/otel/CODEOWNERS index 2025549332..5904bb7070 100644 --- a/vendor/go.opentelemetry.io/otel/CODEOWNERS +++ b/vendor/go.opentelemetry.io/otel/CODEOWNERS @@ -5,7 +5,7 @@ ##################################################### # # Learn about membership in OpenTelemetry community: -# https://github.com/open-telemetry/community/blob/main/community-membership.md +# https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md # # # Learn about CODEOWNERS file format: diff --git a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md index b86572f58e..b7402576f9 100644 --- a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md +++ b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md @@ -650,7 +650,7 @@ should be canceled. ### Become an Approver or a Maintainer See the [community membership document in OpenTelemetry community -repo](https://github.com/open-telemetry/community/blob/main/community-membership.md). +repo](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md). [Approver]: #approvers [Maintainer]: #maintainers diff --git a/vendor/go.opentelemetry.io/otel/Makefile b/vendor/go.opentelemetry.io/otel/Makefile index f33619f76a..070b1e57df 100644 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ b/vendor/go.opentelemetry.io/otel/Makefile @@ -178,17 +178,14 @@ test-coverage: $(GOCOVMERGE) done; \ $(GOCOVMERGE) $$(find . -name coverage.out) > coverage.txt -# Adding a directory will include all benchmarks in that directory if a filter is not specified. -BENCHMARK_TARGETS := sdk/trace .PHONY: benchmark -benchmark: $(BENCHMARK_TARGETS:%=benchmark/%) -BENCHMARK_FILTER = . -# You can override the filter for a particular directory by adding a rule here. -benchmark/sdk/trace: BENCHMARK_FILTER = SpanWithAttributes_8/AlwaysSample +benchmark: $(OTEL_GO_MOD_DIRS:%=benchmark/%) benchmark/%: - @echo "$(GO) test -timeout $(TIMEOUT)s -run=xxxxxMatchNothingxxxxx -bench=$(BENCHMARK_FILTER) $*..." \ + @echo "$(GO) test -run=xxxxxMatchNothingxxxxx -bench=. $*..." \ && cd $* \ - $(foreach filter, $(BENCHMARK_FILTER), && $(GO) test -timeout $(TIMEOUT)s -run=xxxxxMatchNothingxxxxx -bench=$(filter)) + && $(GO) list ./... \ + | grep -v third_party \ + | xargs $(GO) test -run=xxxxxMatchNothingxxxxx -bench=. .PHONY: golangci-lint golangci-lint-fix golangci-lint-fix: ARGS=--fix diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md index 5a89093173..657df34710 100644 --- a/vendor/go.opentelemetry.io/otel/README.md +++ b/vendor/go.opentelemetry.io/otel/README.md @@ -47,20 +47,29 @@ stop ensuring compatibility with these versions in the following manner: Currently, this project supports the following environments. -| OS | Go Version | Architecture | -|---------|------------|--------------| -| Ubuntu | 1.22 | amd64 | -| Ubuntu | 1.21 | amd64 | -| Ubuntu | 1.22 | 386 | -| Ubuntu | 1.21 | 386 | -| Linux | 1.22 | arm64 | -| Linux | 1.21 | arm64 | -| MacOS | 1.22 | amd64 | -| MacOS | 1.21 | amd64 | -| Windows | 1.22 | amd64 | -| Windows | 1.21 | amd64 | -| Windows | 1.22 | 386 | -| Windows | 1.21 | 386 | +| OS | Go Version | Architecture | +|----------|------------|--------------| +| Ubuntu | 1.23 | amd64 | +| Ubuntu | 1.22 | amd64 | +| Ubuntu | 1.21 | amd64 | +| Ubuntu | 1.23 | 386 | +| Ubuntu | 1.22 | 386 | +| Ubuntu | 1.21 | 386 | +| Linux | 1.23 | arm64 | +| Linux | 1.22 | arm64 | +| Linux | 1.21 | arm64 | +| macOS 13 | 1.23 | amd64 | +| macOS 13 | 1.22 | amd64 | +| macOS 13 | 1.21 | amd64 | +| macOS | 1.23 | arm64 | +| macOS | 1.22 | arm64 | +| macOS | 1.21 | arm64 | +| Windows | 1.23 | amd64 | +| Windows | 1.22 | amd64 | +| Windows | 1.21 | amd64 | +| Windows | 1.23 | 386 | +| Windows | 1.22 | 386 | +| Windows | 1.21 | 386 | While this project should work for other systems, no compatibility guarantees are made for those systems currently. diff --git a/vendor/go.opentelemetry.io/otel/RELEASING.md b/vendor/go.opentelemetry.io/otel/RELEASING.md index 940f57f3d8..59992984d4 100644 --- a/vendor/go.opentelemetry.io/otel/RELEASING.md +++ b/vendor/go.opentelemetry.io/otel/RELEASING.md @@ -69,6 +69,7 @@ Update go.mod for submodules to depend on the new release which will happen in t ``` - Move all the `Unreleased` changes into a new section following the title scheme (`[] - `). + - Make sure the new section is under the comment for released section, like ``, so it is protected from being overwritten in the future. - Update all the appropriate links at the bottom. 4. Push the changes to upstream and create a Pull Request on GitHub. diff --git a/vendor/go.opentelemetry.io/otel/baggage/baggage.go b/vendor/go.opentelemetry.io/otel/baggage/baggage.go index c40c896cc6..b3569e95e5 100644 --- a/vendor/go.opentelemetry.io/otel/baggage/baggage.go +++ b/vendor/go.opentelemetry.io/otel/baggage/baggage.go @@ -44,9 +44,15 @@ type Property struct { // NewKeyProperty returns a new Property for key. // +// The passed key must be valid, non-empty UTF-8 string. // If key is invalid, an error will be returned. +// However, the specific Propagators that are used to transmit baggage entries across +// component boundaries may impose their own restrictions on Property key. +// For example, the W3C Baggage specification restricts the Property keys to strings that +// satisfy the token definition from RFC7230, Section 3.2.6. +// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key. func NewKeyProperty(key string) (Property, error) { - if !validateKey(key) { + if !validateBaggageName(key) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) } @@ -62,6 +68,10 @@ func NewKeyProperty(key string) (Property, error) { // Notice: Consider using [NewKeyValuePropertyRaw] instead // that does not require percent-encoding of the value. func NewKeyValueProperty(key, value string) (Property, error) { + if !validateKey(key) { + return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) + } + if !validateValue(value) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value) } @@ -74,11 +84,20 @@ func NewKeyValueProperty(key, value string) (Property, error) { // NewKeyValuePropertyRaw returns a new Property for key with value. // -// The passed key must be compliant with W3C Baggage specification. +// The passed key must be valid, non-empty UTF-8 string. +// The passed value must be valid UTF-8 string. +// However, the specific Propagators that are used to transmit baggage entries across +// component boundaries may impose their own restrictions on Property key. +// For example, the W3C Baggage specification restricts the Property keys to strings that +// satisfy the token definition from RFC7230, Section 3.2.6. +// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key. func NewKeyValuePropertyRaw(key, value string) (Property, error) { - if !validateKey(key) { + if !validateBaggageName(key) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) } + if !validateBaggageValue(value) { + return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value) + } p := Property{ key: key, @@ -115,12 +134,15 @@ func (p Property) validate() error { return fmt.Errorf("invalid property: %w", err) } - if !validateKey(p.key) { + if !validateBaggageName(p.key) { return errFunc(fmt.Errorf("%w: %q", errInvalidKey, p.key)) } if !p.hasValue && p.value != "" { return errFunc(errors.New("inconsistent value")) } + if p.hasValue && !validateBaggageValue(p.value) { + return errFunc(fmt.Errorf("%w: %q", errInvalidValue, p.value)) + } return nil } @@ -138,7 +160,15 @@ func (p Property) Value() (string, bool) { // String encodes Property into a header string compliant with the W3C Baggage // specification. +// It would return empty string if the key is invalid with the W3C Baggage +// specification. This could happen for a UTF-8 key, as it may contain +// invalid characters. func (p Property) String() string { + // W3C Baggage specification does not allow percent-encoded keys. + if !validateKey(p.key) { + return "" + } + if p.hasValue { return fmt.Sprintf("%s%s%v", p.key, keyValueDelimiter, valueEscape(p.value)) } @@ -203,9 +233,14 @@ func (p properties) validate() error { // String encodes properties into a header string compliant with the W3C Baggage // specification. func (p properties) String() string { - props := make([]string, len(p)) - for i, prop := range p { - props[i] = prop.String() + props := make([]string, 0, len(p)) + for _, prop := range p { + s := prop.String() + + // Ignored empty properties. + if s != "" { + props = append(props, s) + } } return strings.Join(props, propertyDelimiter) } @@ -230,6 +265,10 @@ type Member struct { // Notice: Consider using [NewMemberRaw] instead // that does not require percent-encoding of the value. func NewMember(key, value string, props ...Property) (Member, error) { + if !validateKey(key) { + return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidKey, key) + } + if !validateValue(value) { return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, value) } @@ -242,7 +281,13 @@ func NewMember(key, value string, props ...Property) (Member, error) { // NewMemberRaw returns a new Member from the passed arguments. // -// The passed key must be compliant with W3C Baggage specification. +// The passed key must be valid, non-empty UTF-8 string. +// The passed value must be valid UTF-8 string. +// However, the specific Propagators that are used to transmit baggage entries across +// component boundaries may impose their own restrictions on baggage key. +// For example, the W3C Baggage specification restricts the baggage keys to strings that +// satisfy the token definition from RFC7230, Section 3.2.6. +// For maximum compatibility, alpha-numeric value are strongly recommended to be used as baggage key. func NewMemberRaw(key, value string, props ...Property) (Member, error) { m := Member{ key: key, @@ -294,19 +339,45 @@ func parseMember(member string) (Member, error) { return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidKey, key) } - val := strings.TrimSpace(v) - if !validateValue(val) { + rawVal := strings.TrimSpace(v) + if !validateValue(rawVal) { return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, v) } // Decode a percent-encoded value. - value, err := url.PathUnescape(val) + unescapeVal, err := url.PathUnescape(rawVal) if err != nil { return newInvalidMember(), fmt.Errorf("%w: %w", errInvalidValue, err) } + + value := replaceInvalidUTF8Sequences(len(rawVal), unescapeVal) return Member{key: key, value: value, properties: props, hasData: true}, nil } +// replaceInvalidUTF8Sequences replaces invalid UTF-8 sequences with '�'. +func replaceInvalidUTF8Sequences(cap int, unescapeVal string) string { + if utf8.ValidString(unescapeVal) { + return unescapeVal + } + // W3C baggage spec: + // https://github.com/w3c/baggage/blob/8c215efbeebd3fa4b1aceb937a747e56444f22f3/baggage/HTTP_HEADER_FORMAT.md?plain=1#L69 + + var b strings.Builder + b.Grow(cap) + for i := 0; i < len(unescapeVal); { + r, size := utf8.DecodeRuneInString(unescapeVal[i:]) + if r == utf8.RuneError && size == 1 { + // Invalid UTF-8 sequence found, replace it with '�' + _, _ = b.WriteString("�") + } else { + _, _ = b.WriteRune(r) + } + i += size + } + + return b.String() +} + // validate ensures m conforms to the W3C Baggage specification. // A key must be an ASCII string, returning an error otherwise. func (m Member) validate() error { @@ -314,9 +385,12 @@ func (m Member) validate() error { return fmt.Errorf("%w: %q", errInvalidMember, m) } - if !validateKey(m.key) { + if !validateBaggageName(m.key) { return fmt.Errorf("%w: %q", errInvalidKey, m.key) } + if !validateBaggageValue(m.value) { + return fmt.Errorf("%w: %q", errInvalidValue, m.value) + } return m.properties.validate() } @@ -331,10 +405,15 @@ func (m Member) Properties() []Property { return m.properties.Copy() } // String encodes Member into a header string compliant with the W3C Baggage // specification. +// It would return empty string if the key is invalid with the W3C Baggage +// specification. This could happen for a UTF-8 key, as it may contain +// invalid characters. func (m Member) String() string { - // A key is just an ASCII string. A value is restricted to be - // US-ASCII characters excluding CTLs, whitespace, - // DQUOTE, comma, semicolon, and backslash. + // W3C Baggage specification does not allow percent-encoded keys. + if !validateKey(m.key) { + return "" + } + s := m.key + keyValueDelimiter + valueEscape(m.value) if len(m.properties) > 0 { s += propertyDelimiter + m.properties.String() @@ -448,7 +527,7 @@ func (b Baggage) Member(key string) Member { } // Members returns all the baggage list-members. -// The order of the returned list-members does not have significance. +// The order of the returned list-members is not significant. // // The returned members are not validated, as we assume the validation happened // when they were added to the Baggage. @@ -469,8 +548,8 @@ func (b Baggage) Members() []Member { return members } -// SetMember returns a copy the Baggage with the member included. If the -// baggage contains a Member with the same key the existing Member is +// SetMember returns a copy of the Baggage with the member included. If the +// baggage contains a Member with the same key, the existing Member is // replaced. // // If member is invalid according to the W3C Baggage specification, an error @@ -528,14 +607,22 @@ func (b Baggage) Len() int { // String encodes Baggage into a header string compliant with the W3C Baggage // specification. +// It would ignore members where the member key is invalid with the W3C Baggage +// specification. This could happen for a UTF-8 key, as it may contain +// invalid characters. func (b Baggage) String() string { members := make([]string, 0, len(b.list)) for k, v := range b.list { - members = append(members, Member{ + s := Member{ key: k, value: v.Value, properties: fromInternalProperties(v.Properties), - }.String()) + }.String() + + // Ignored empty members. + if s != "" { + members = append(members, s) + } } return strings.Join(members, listDelimiter) } @@ -607,10 +694,12 @@ func parsePropertyInternal(s string) (p Property, ok bool) { } // Decode a percent-encoded value. - value, err := url.PathUnescape(s[valueStart:valueEnd]) + rawVal := s[valueStart:valueEnd] + unescapeVal, err := url.PathUnescape(rawVal) if err != nil { return } + value := replaceInvalidUTF8Sequences(len(rawVal), unescapeVal) ok = true p.key = s[keyStart:keyEnd] @@ -720,6 +809,24 @@ var safeKeyCharset = [utf8.RuneSelf]bool{ '~': true, } +// validateBaggageName checks if the string is a valid OpenTelemetry Baggage name. +// Baggage name is a valid, non-empty UTF-8 string. +func validateBaggageName(s string) bool { + if len(s) == 0 { + return false + } + + return utf8.ValidString(s) +} + +// validateBaggageValue checks if the string is a valid OpenTelemetry Baggage value. +// Baggage value is a valid UTF-8 strings. +// Empty string is also a valid UTF-8 string. +func validateBaggageValue(s string) bool { + return utf8.ValidString(s) +} + +// validateKey checks if the string is a valid W3C Baggage key. func validateKey(s string) bool { if len(s) == 0 { return false @@ -738,6 +845,7 @@ func validateKeyChar(c int32) bool { return c >= 0 && c < int32(utf8.RuneSelf) && safeKeyCharset[c] } +// validateValue checks if the string is a valid W3C Baggage value. func validateValue(s string) bool { for _, c := range s { if !validateValueChar(c) { diff --git a/vendor/go.opentelemetry.io/otel/codes/codes.go b/vendor/go.opentelemetry.io/otel/codes/codes.go index df29d96a6d..2acbac3546 100644 --- a/vendor/go.opentelemetry.io/otel/codes/codes.go +++ b/vendor/go.opentelemetry.io/otel/codes/codes.go @@ -83,7 +83,7 @@ func (c *Code) UnmarshalJSON(b []byte) error { return fmt.Errorf("invalid code: %q", ci) } - *c = Code(ci) + *c = Code(ci) // nolint: gosec // Bit size of 32 check above. return nil } return fmt.Errorf("invalid code: %q", string(b)) diff --git a/vendor/go.opentelemetry.io/otel/doc.go b/vendor/go.opentelemetry.io/otel/doc.go index 441c595014..921f85961a 100644 --- a/vendor/go.opentelemetry.io/otel/doc.go +++ b/vendor/go.opentelemetry.io/otel/doc.go @@ -17,6 +17,8 @@ To read more about tracing, see go.opentelemetry.io/otel/trace. To read more about metrics, see go.opentelemetry.io/otel/metric. +To read more about logs, see go.opentelemetry.io/otel/log. + To read more about propagation, see go.opentelemetry.io/otel/propagation and go.opentelemetry.io/otel/baggage. */ diff --git a/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go b/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go index 3e7bb3b356..9b1da2c02b 100644 --- a/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go +++ b/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go @@ -24,7 +24,8 @@ func Int64ToRaw(i int64) uint64 { } func RawToInt64(r uint64) int64 { - return int64(r) + // Assumes original was a valid int64 (overflow not checked). + return int64(r) // nolint: gosec } func Float64ToRaw(f float64) uint64 { @@ -36,9 +37,11 @@ func RawToFloat64(r uint64) float64 { } func RawPtrToFloat64Ptr(r *uint64) *float64 { - return (*float64)(unsafe.Pointer(r)) + // Assumes original was a valid *float64 (overflow not checked). + return (*float64)(unsafe.Pointer(r)) // nolint: gosec } func RawPtrToInt64Ptr(r *uint64) *int64 { - return (*int64)(unsafe.Pointer(r)) + // Assumes original was a valid *int64 (overflow not checked). + return (*int64)(unsafe.Pointer(r)) // nolint: gosec } diff --git a/vendor/go.opentelemetry.io/otel/metric/meter.go b/vendor/go.opentelemetry.io/otel/metric/meter.go index 6a7991e015..14e08c24a4 100644 --- a/vendor/go.opentelemetry.io/otel/metric/meter.go +++ b/vendor/go.opentelemetry.io/otel/metric/meter.go @@ -52,6 +52,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Int64Counter(name string, options ...Int64CounterOption) (Int64Counter, error) + // Int64UpDownCounter returns a new Int64UpDownCounter instrument // identified by name and configured with options. The instrument is used // to synchronously record int64 measurements during a computational @@ -61,6 +62,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Int64UpDownCounter(name string, options ...Int64UpDownCounterOption) (Int64UpDownCounter, error) + // Int64Histogram returns a new Int64Histogram instrument identified by // name and configured with options. The instrument is used to // synchronously record the distribution of int64 measurements during a @@ -70,6 +72,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Int64Histogram(name string, options ...Int64HistogramOption) (Int64Histogram, error) + // Int64Gauge returns a new Int64Gauge instrument identified by name and // configured with options. The instrument is used to synchronously record // instantaneous int64 measurements during a computational operation. @@ -78,6 +81,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Int64Gauge(name string, options ...Int64GaugeOption) (Int64Gauge, error) + // Int64ObservableCounter returns a new Int64ObservableCounter identified // by name and configured with options. The instrument is used to // asynchronously record increasing int64 measurements once per a @@ -92,6 +96,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Int64ObservableCounter(name string, options ...Int64ObservableCounterOption) (Int64ObservableCounter, error) + // Int64ObservableUpDownCounter returns a new Int64ObservableUpDownCounter // instrument identified by name and configured with options. The // instrument is used to asynchronously record int64 measurements once per @@ -106,6 +111,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Int64ObservableUpDownCounter(name string, options ...Int64ObservableUpDownCounterOption) (Int64ObservableUpDownCounter, error) + // Int64ObservableGauge returns a new Int64ObservableGauge instrument // identified by name and configured with options. The instrument is used // to asynchronously record instantaneous int64 measurements once per a @@ -130,6 +136,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Float64Counter(name string, options ...Float64CounterOption) (Float64Counter, error) + // Float64UpDownCounter returns a new Float64UpDownCounter instrument // identified by name and configured with options. The instrument is used // to synchronously record float64 measurements during a computational @@ -139,6 +146,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Float64UpDownCounter(name string, options ...Float64UpDownCounterOption) (Float64UpDownCounter, error) + // Float64Histogram returns a new Float64Histogram instrument identified by // name and configured with options. The instrument is used to // synchronously record the distribution of float64 measurements during a @@ -148,6 +156,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Float64Histogram(name string, options ...Float64HistogramOption) (Float64Histogram, error) + // Float64Gauge returns a new Float64Gauge instrument identified by name and // configured with options. The instrument is used to synchronously record // instantaneous float64 measurements during a computational operation. @@ -156,6 +165,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Float64Gauge(name string, options ...Float64GaugeOption) (Float64Gauge, error) + // Float64ObservableCounter returns a new Float64ObservableCounter // instrument identified by name and configured with options. The // instrument is used to asynchronously record increasing float64 @@ -170,6 +180,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Float64ObservableCounter(name string, options ...Float64ObservableCounterOption) (Float64ObservableCounter, error) + // Float64ObservableUpDownCounter returns a new // Float64ObservableUpDownCounter instrument identified by name and // configured with options. The instrument is used to asynchronously record @@ -184,6 +195,7 @@ type Meter interface { // See the Instrument Name section of the package documentation for more // information. Float64ObservableUpDownCounter(name string, options ...Float64ObservableUpDownCounterOption) (Float64ObservableUpDownCounter, error) + // Float64ObservableGauge returns a new Float64ObservableGauge instrument // identified by name and configured with options. The instrument is used // to asynchronously record instantaneous float64 measurements once per a @@ -242,6 +254,7 @@ type Observer interface { // ObserveFloat64 records the float64 value for obsrv. ObserveFloat64(obsrv Float64Observable, value float64, opts ...ObserveOption) + // ObserveInt64 records the int64 value for obsrv. ObserveInt64(obsrv Int64Observable, value int64, opts ...ObserveOption) } diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md deleted file mode 100644 index 0b6cbe960c..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Semconv v1.24.0 - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.24.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.24.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go deleted file mode 100644 index 6e688345cb..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go +++ /dev/null @@ -1,4387 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// Describes FaaS attributes. -const ( - // FaaSInvokedNameKey is the attribute Key conforming to the - // "faas.invoked_name" semantic conventions. It represents the name of the - // invoked function. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'my-function' - // Note: SHOULD be equal to the `faas.name` resource attribute of the - // invoked function. - FaaSInvokedNameKey = attribute.Key("faas.invoked_name") - - // FaaSInvokedProviderKey is the attribute Key conforming to the - // "faas.invoked_provider" semantic conventions. It represents the cloud - // provider of the invoked function. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Note: SHOULD be equal to the `cloud.provider` resource attribute of the - // invoked function. - FaaSInvokedProviderKey = attribute.Key("faas.invoked_provider") - - // FaaSInvokedRegionKey is the attribute Key conforming to the - // "faas.invoked_region" semantic conventions. It represents the cloud - // region of the invoked function. - // - // Type: string - // RequirementLevel: ConditionallyRequired (For some cloud providers, like - // AWS or GCP, the region in which a function is hosted is essential to - // uniquely identify the function and also part of its endpoint. Since it's - // part of the endpoint being called, the region is always known to - // clients. In these cases, `faas.invoked_region` MUST be set accordingly. - // If the region is unknown to the client or not required for identifying - // the invoked function, setting `faas.invoked_region` is optional.) - // Stability: experimental - // Examples: 'eu-central-1' - // Note: SHOULD be equal to the `cloud.region` resource attribute of the - // invoked function. - FaaSInvokedRegionKey = attribute.Key("faas.invoked_region") - - // FaaSTriggerKey is the attribute Key conforming to the "faas.trigger" - // semantic conventions. It represents the type of the trigger which caused - // this function invocation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - FaaSTriggerKey = attribute.Key("faas.trigger") -) - -var ( - // Alibaba Cloud - FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud") - // Amazon Web Services - FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws") - // Microsoft Azure - FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure") - // Google Cloud Platform - FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp") - // Tencent Cloud - FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud") -) - -var ( - // A response to some data source operation such as a database or filesystem read/write - FaaSTriggerDatasource = FaaSTriggerKey.String("datasource") - // To provide an answer to an inbound HTTP request - FaaSTriggerHTTP = FaaSTriggerKey.String("http") - // A function is set to be executed when messages are sent to a messaging system - FaaSTriggerPubsub = FaaSTriggerKey.String("pubsub") - // A function is scheduled to be executed regularly - FaaSTriggerTimer = FaaSTriggerKey.String("timer") - // If none of the others apply - FaaSTriggerOther = FaaSTriggerKey.String("other") -) - -// FaaSInvokedName returns an attribute KeyValue conforming to the -// "faas.invoked_name" semantic conventions. It represents the name of the -// invoked function. -func FaaSInvokedName(val string) attribute.KeyValue { - return FaaSInvokedNameKey.String(val) -} - -// FaaSInvokedRegion returns an attribute KeyValue conforming to the -// "faas.invoked_region" semantic conventions. It represents the cloud region -// of the invoked function. -func FaaSInvokedRegion(val string) attribute.KeyValue { - return FaaSInvokedRegionKey.String(val) -} - -// Attributes for Events represented using Log Records. -const ( - // EventNameKey is the attribute Key conforming to the "event.name" - // semantic conventions. It represents the identifies the class / type of - // event. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'browser.mouse.click', 'device.app.lifecycle' - // Note: Event names are subject to the same rules as [attribute - // names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.26.0/specification/common/attribute-naming.md). - // Notably, event names are namespaced to avoid collisions and provide a - // clean separation of semantics for events in separate domains like - // browser, mobile, and kubernetes. - EventNameKey = attribute.Key("event.name") -) - -// EventName returns an attribute KeyValue conforming to the "event.name" -// semantic conventions. It represents the identifies the class / type of -// event. -func EventName(val string) attribute.KeyValue { - return EventNameKey.String(val) -} - -// The attributes described in this section are rather generic. They may be -// used in any Log Record they apply to. -const ( - // LogRecordUIDKey is the attribute Key conforming to the "log.record.uid" - // semantic conventions. It represents a unique identifier for the Log - // Record. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV' - // Note: If an id is provided, other log records with the same id will be - // considered duplicates and can be removed safely. This means, that two - // distinguishable log records MUST have different values. - // The id MAY be an [Universally Unique Lexicographically Sortable - // Identifier (ULID)](https://github.com/ulid/spec), but other identifiers - // (e.g. UUID) may be used as needed. - LogRecordUIDKey = attribute.Key("log.record.uid") -) - -// LogRecordUID returns an attribute KeyValue conforming to the -// "log.record.uid" semantic conventions. It represents a unique identifier for -// the Log Record. -func LogRecordUID(val string) attribute.KeyValue { - return LogRecordUIDKey.String(val) -} - -// Describes Log attributes -const ( - // LogIostreamKey is the attribute Key conforming to the "log.iostream" - // semantic conventions. It represents the stream associated with the log. - // See below for a list of well-known values. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - LogIostreamKey = attribute.Key("log.iostream") -) - -var ( - // Logs from stdout stream - LogIostreamStdout = LogIostreamKey.String("stdout") - // Events from stderr stream - LogIostreamStderr = LogIostreamKey.String("stderr") -) - -// A file to which log was emitted. -const ( - // LogFileNameKey is the attribute Key conforming to the "log.file.name" - // semantic conventions. It represents the basename of the file. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'audit.log' - LogFileNameKey = attribute.Key("log.file.name") - - // LogFileNameResolvedKey is the attribute Key conforming to the - // "log.file.name_resolved" semantic conventions. It represents the - // basename of the file, with symlinks resolved. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'uuid.log' - LogFileNameResolvedKey = attribute.Key("log.file.name_resolved") - - // LogFilePathKey is the attribute Key conforming to the "log.file.path" - // semantic conventions. It represents the full path to the file. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/var/log/mysql/audit.log' - LogFilePathKey = attribute.Key("log.file.path") - - // LogFilePathResolvedKey is the attribute Key conforming to the - // "log.file.path_resolved" semantic conventions. It represents the full - // path to the file, with symlinks resolved. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/var/lib/docker/uuid.log' - LogFilePathResolvedKey = attribute.Key("log.file.path_resolved") -) - -// LogFileName returns an attribute KeyValue conforming to the -// "log.file.name" semantic conventions. It represents the basename of the -// file. -func LogFileName(val string) attribute.KeyValue { - return LogFileNameKey.String(val) -} - -// LogFileNameResolved returns an attribute KeyValue conforming to the -// "log.file.name_resolved" semantic conventions. It represents the basename of -// the file, with symlinks resolved. -func LogFileNameResolved(val string) attribute.KeyValue { - return LogFileNameResolvedKey.String(val) -} - -// LogFilePath returns an attribute KeyValue conforming to the -// "log.file.path" semantic conventions. It represents the full path to the -// file. -func LogFilePath(val string) attribute.KeyValue { - return LogFilePathKey.String(val) -} - -// LogFilePathResolved returns an attribute KeyValue conforming to the -// "log.file.path_resolved" semantic conventions. It represents the full path -// to the file, with symlinks resolved. -func LogFilePathResolved(val string) attribute.KeyValue { - return LogFilePathResolvedKey.String(val) -} - -// Describes Database attributes -const ( - // PoolNameKey is the attribute Key conforming to the "pool.name" semantic - // conventions. It represents the name of the connection pool; unique - // within the instrumented application. In case the connection pool - // implementation doesn't provide a name, then the - // [db.connection_string](/docs/database/database-spans.md#connection-level-attributes) - // should be used - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'myDataSource' - PoolNameKey = attribute.Key("pool.name") - - // StateKey is the attribute Key conforming to the "state" semantic - // conventions. It represents the state of a connection in the pool - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Examples: 'idle' - StateKey = attribute.Key("state") -) - -var ( - // idle - StateIdle = StateKey.String("idle") - // used - StateUsed = StateKey.String("used") -) - -// PoolName returns an attribute KeyValue conforming to the "pool.name" -// semantic conventions. It represents the name of the connection pool; unique -// within the instrumented application. In case the connection pool -// implementation doesn't provide a name, then the -// [db.connection_string](/docs/database/database-spans.md#connection-level-attributes) -// should be used -func PoolName(val string) attribute.KeyValue { - return PoolNameKey.String(val) -} - -// ASP.NET Core attributes -const ( - // AspnetcoreDiagnosticsHandlerTypeKey is the attribute Key conforming to - // the "aspnetcore.diagnostics.handler.type" semantic conventions. It - // represents the full type name of the - // [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) - // implementation that handled the exception. - // - // Type: string - // RequirementLevel: ConditionallyRequired (if and only if the exception - // was handled by this handler.) - // Stability: experimental - // Examples: 'Contoso.MyHandler' - AspnetcoreDiagnosticsHandlerTypeKey = attribute.Key("aspnetcore.diagnostics.handler.type") - - // AspnetcoreRateLimitingPolicyKey is the attribute Key conforming to the - // "aspnetcore.rate_limiting.policy" semantic conventions. It represents - // the rate limiting policy name. - // - // Type: string - // RequirementLevel: ConditionallyRequired (if the matched endpoint for the - // request had a rate-limiting policy.) - // Stability: experimental - // Examples: 'fixed', 'sliding', 'token' - AspnetcoreRateLimitingPolicyKey = attribute.Key("aspnetcore.rate_limiting.policy") - - // AspnetcoreRateLimitingResultKey is the attribute Key conforming to the - // "aspnetcore.rate_limiting.result" semantic conventions. It represents - // the rate-limiting result, shows whether the lease was acquired or - // contains a rejection reason - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Examples: 'acquired', 'request_canceled' - AspnetcoreRateLimitingResultKey = attribute.Key("aspnetcore.rate_limiting.result") - - // AspnetcoreRequestIsUnhandledKey is the attribute Key conforming to the - // "aspnetcore.request.is_unhandled" semantic conventions. It represents - // the flag indicating if request was handled by the application pipeline. - // - // Type: boolean - // RequirementLevel: ConditionallyRequired (if and only if the request was - // not handled.) - // Stability: experimental - // Examples: True - AspnetcoreRequestIsUnhandledKey = attribute.Key("aspnetcore.request.is_unhandled") - - // AspnetcoreRoutingIsFallbackKey is the attribute Key conforming to the - // "aspnetcore.routing.is_fallback" semantic conventions. It represents a - // value that indicates whether the matched route is a fallback route. - // - // Type: boolean - // RequirementLevel: ConditionallyRequired (If and only if a route was - // successfully matched.) - // Stability: experimental - // Examples: True - AspnetcoreRoutingIsFallbackKey = attribute.Key("aspnetcore.routing.is_fallback") -) - -var ( - // Lease was acquired - AspnetcoreRateLimitingResultAcquired = AspnetcoreRateLimitingResultKey.String("acquired") - // Lease request was rejected by the endpoint limiter - AspnetcoreRateLimitingResultEndpointLimiter = AspnetcoreRateLimitingResultKey.String("endpoint_limiter") - // Lease request was rejected by the global limiter - AspnetcoreRateLimitingResultGlobalLimiter = AspnetcoreRateLimitingResultKey.String("global_limiter") - // Lease request was canceled - AspnetcoreRateLimitingResultRequestCanceled = AspnetcoreRateLimitingResultKey.String("request_canceled") -) - -// AspnetcoreDiagnosticsHandlerType returns an attribute KeyValue conforming -// to the "aspnetcore.diagnostics.handler.type" semantic conventions. It -// represents the full type name of the -// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) -// implementation that handled the exception. -func AspnetcoreDiagnosticsHandlerType(val string) attribute.KeyValue { - return AspnetcoreDiagnosticsHandlerTypeKey.String(val) -} - -// AspnetcoreRateLimitingPolicy returns an attribute KeyValue conforming to -// the "aspnetcore.rate_limiting.policy" semantic conventions. It represents -// the rate limiting policy name. -func AspnetcoreRateLimitingPolicy(val string) attribute.KeyValue { - return AspnetcoreRateLimitingPolicyKey.String(val) -} - -// AspnetcoreRequestIsUnhandled returns an attribute KeyValue conforming to -// the "aspnetcore.request.is_unhandled" semantic conventions. It represents -// the flag indicating if request was handled by the application pipeline. -func AspnetcoreRequestIsUnhandled(val bool) attribute.KeyValue { - return AspnetcoreRequestIsUnhandledKey.Bool(val) -} - -// AspnetcoreRoutingIsFallback returns an attribute KeyValue conforming to -// the "aspnetcore.routing.is_fallback" semantic conventions. It represents a -// value that indicates whether the matched route is a fallback route. -func AspnetcoreRoutingIsFallback(val bool) attribute.KeyValue { - return AspnetcoreRoutingIsFallbackKey.Bool(val) -} - -// SignalR attributes -const ( - // SignalrConnectionStatusKey is the attribute Key conforming to the - // "signalr.connection.status" semantic conventions. It represents the - // signalR HTTP connection closure status. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'app_shutdown', 'timeout' - SignalrConnectionStatusKey = attribute.Key("signalr.connection.status") - - // SignalrTransportKey is the attribute Key conforming to the - // "signalr.transport" semantic conventions. It represents the [SignalR - // transport - // type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md) - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'web_sockets', 'long_polling' - SignalrTransportKey = attribute.Key("signalr.transport") -) - -var ( - // The connection was closed normally - SignalrConnectionStatusNormalClosure = SignalrConnectionStatusKey.String("normal_closure") - // The connection was closed due to a timeout - SignalrConnectionStatusTimeout = SignalrConnectionStatusKey.String("timeout") - // The connection was closed because the app is shutting down - SignalrConnectionStatusAppShutdown = SignalrConnectionStatusKey.String("app_shutdown") -) - -var ( - // ServerSentEvents protocol - SignalrTransportServerSentEvents = SignalrTransportKey.String("server_sent_events") - // LongPolling protocol - SignalrTransportLongPolling = SignalrTransportKey.String("long_polling") - // WebSockets protocol - SignalrTransportWebSockets = SignalrTransportKey.String("web_sockets") -) - -// Describes JVM buffer metric attributes. -const ( - // JvmBufferPoolNameKey is the attribute Key conforming to the - // "jvm.buffer.pool.name" semantic conventions. It represents the name of - // the buffer pool. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'mapped', 'direct' - // Note: Pool names are generally obtained via - // [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). - JvmBufferPoolNameKey = attribute.Key("jvm.buffer.pool.name") -) - -// JvmBufferPoolName returns an attribute KeyValue conforming to the -// "jvm.buffer.pool.name" semantic conventions. It represents the name of the -// buffer pool. -func JvmBufferPoolName(val string) attribute.KeyValue { - return JvmBufferPoolNameKey.String(val) -} - -// Describes JVM memory metric attributes. -const ( - // JvmMemoryPoolNameKey is the attribute Key conforming to the - // "jvm.memory.pool.name" semantic conventions. It represents the name of - // the memory pool. - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'G1 Old Gen', 'G1 Eden space', 'G1 Survivor Space' - // Note: Pool names are generally obtained via - // [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). - JvmMemoryPoolNameKey = attribute.Key("jvm.memory.pool.name") - - // JvmMemoryTypeKey is the attribute Key conforming to the - // "jvm.memory.type" semantic conventions. It represents the type of - // memory. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'heap', 'non_heap' - JvmMemoryTypeKey = attribute.Key("jvm.memory.type") -) - -var ( - // Heap memory - JvmMemoryTypeHeap = JvmMemoryTypeKey.String("heap") - // Non-heap memory - JvmMemoryTypeNonHeap = JvmMemoryTypeKey.String("non_heap") -) - -// JvmMemoryPoolName returns an attribute KeyValue conforming to the -// "jvm.memory.pool.name" semantic conventions. It represents the name of the -// memory pool. -func JvmMemoryPoolName(val string) attribute.KeyValue { - return JvmMemoryPoolNameKey.String(val) -} - -// Describes System metric attributes -const ( - // SystemDeviceKey is the attribute Key conforming to the "system.device" - // semantic conventions. It represents the device identifier - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '(identifier)' - SystemDeviceKey = attribute.Key("system.device") -) - -// SystemDevice returns an attribute KeyValue conforming to the -// "system.device" semantic conventions. It represents the device identifier -func SystemDevice(val string) attribute.KeyValue { - return SystemDeviceKey.String(val) -} - -// Describes System CPU metric attributes -const ( - // SystemCPULogicalNumberKey is the attribute Key conforming to the - // "system.cpu.logical_number" semantic conventions. It represents the - // logical CPU number [0..n-1] - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1 - SystemCPULogicalNumberKey = attribute.Key("system.cpu.logical_number") - - // SystemCPUStateKey is the attribute Key conforming to the - // "system.cpu.state" semantic conventions. It represents the state of the - // CPU - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'idle', 'interrupt' - SystemCPUStateKey = attribute.Key("system.cpu.state") -) - -var ( - // user - SystemCPUStateUser = SystemCPUStateKey.String("user") - // system - SystemCPUStateSystem = SystemCPUStateKey.String("system") - // nice - SystemCPUStateNice = SystemCPUStateKey.String("nice") - // idle - SystemCPUStateIdle = SystemCPUStateKey.String("idle") - // iowait - SystemCPUStateIowait = SystemCPUStateKey.String("iowait") - // interrupt - SystemCPUStateInterrupt = SystemCPUStateKey.String("interrupt") - // steal - SystemCPUStateSteal = SystemCPUStateKey.String("steal") -) - -// SystemCPULogicalNumber returns an attribute KeyValue conforming to the -// "system.cpu.logical_number" semantic conventions. It represents the logical -// CPU number [0..n-1] -func SystemCPULogicalNumber(val int) attribute.KeyValue { - return SystemCPULogicalNumberKey.Int(val) -} - -// Describes System Memory metric attributes -const ( - // SystemMemoryStateKey is the attribute Key conforming to the - // "system.memory.state" semantic conventions. It represents the memory - // state - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'free', 'cached' - SystemMemoryStateKey = attribute.Key("system.memory.state") -) - -var ( - // used - SystemMemoryStateUsed = SystemMemoryStateKey.String("used") - // free - SystemMemoryStateFree = SystemMemoryStateKey.String("free") - // shared - SystemMemoryStateShared = SystemMemoryStateKey.String("shared") - // buffers - SystemMemoryStateBuffers = SystemMemoryStateKey.String("buffers") - // cached - SystemMemoryStateCached = SystemMemoryStateKey.String("cached") -) - -// Describes System Memory Paging metric attributes -const ( - // SystemPagingDirectionKey is the attribute Key conforming to the - // "system.paging.direction" semantic conventions. It represents the paging - // access direction - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'in' - SystemPagingDirectionKey = attribute.Key("system.paging.direction") - - // SystemPagingStateKey is the attribute Key conforming to the - // "system.paging.state" semantic conventions. It represents the memory - // paging state - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'free' - SystemPagingStateKey = attribute.Key("system.paging.state") - - // SystemPagingTypeKey is the attribute Key conforming to the - // "system.paging.type" semantic conventions. It represents the memory - // paging type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'minor' - SystemPagingTypeKey = attribute.Key("system.paging.type") -) - -var ( - // in - SystemPagingDirectionIn = SystemPagingDirectionKey.String("in") - // out - SystemPagingDirectionOut = SystemPagingDirectionKey.String("out") -) - -var ( - // used - SystemPagingStateUsed = SystemPagingStateKey.String("used") - // free - SystemPagingStateFree = SystemPagingStateKey.String("free") -) - -var ( - // major - SystemPagingTypeMajor = SystemPagingTypeKey.String("major") - // minor - SystemPagingTypeMinor = SystemPagingTypeKey.String("minor") -) - -// Describes Filesystem metric attributes -const ( - // SystemFilesystemModeKey is the attribute Key conforming to the - // "system.filesystem.mode" semantic conventions. It represents the - // filesystem mode - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'rw, ro' - SystemFilesystemModeKey = attribute.Key("system.filesystem.mode") - - // SystemFilesystemMountpointKey is the attribute Key conforming to the - // "system.filesystem.mountpoint" semantic conventions. It represents the - // filesystem mount path - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/mnt/data' - SystemFilesystemMountpointKey = attribute.Key("system.filesystem.mountpoint") - - // SystemFilesystemStateKey is the attribute Key conforming to the - // "system.filesystem.state" semantic conventions. It represents the - // filesystem state - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'used' - SystemFilesystemStateKey = attribute.Key("system.filesystem.state") - - // SystemFilesystemTypeKey is the attribute Key conforming to the - // "system.filesystem.type" semantic conventions. It represents the - // filesystem type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ext4' - SystemFilesystemTypeKey = attribute.Key("system.filesystem.type") -) - -var ( - // used - SystemFilesystemStateUsed = SystemFilesystemStateKey.String("used") - // free - SystemFilesystemStateFree = SystemFilesystemStateKey.String("free") - // reserved - SystemFilesystemStateReserved = SystemFilesystemStateKey.String("reserved") -) - -var ( - // fat32 - SystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String("fat32") - // exfat - SystemFilesystemTypeExfat = SystemFilesystemTypeKey.String("exfat") - // ntfs - SystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String("ntfs") - // refs - SystemFilesystemTypeRefs = SystemFilesystemTypeKey.String("refs") - // hfsplus - SystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String("hfsplus") - // ext4 - SystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String("ext4") -) - -// SystemFilesystemMode returns an attribute KeyValue conforming to the -// "system.filesystem.mode" semantic conventions. It represents the filesystem -// mode -func SystemFilesystemMode(val string) attribute.KeyValue { - return SystemFilesystemModeKey.String(val) -} - -// SystemFilesystemMountpoint returns an attribute KeyValue conforming to -// the "system.filesystem.mountpoint" semantic conventions. It represents the -// filesystem mount path -func SystemFilesystemMountpoint(val string) attribute.KeyValue { - return SystemFilesystemMountpointKey.String(val) -} - -// Describes Network metric attributes -const ( - // SystemNetworkStateKey is the attribute Key conforming to the - // "system.network.state" semantic conventions. It represents a stateless - // protocol MUST NOT set this attribute - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'close_wait' - SystemNetworkStateKey = attribute.Key("system.network.state") -) - -var ( - // close - SystemNetworkStateClose = SystemNetworkStateKey.String("close") - // close_wait - SystemNetworkStateCloseWait = SystemNetworkStateKey.String("close_wait") - // closing - SystemNetworkStateClosing = SystemNetworkStateKey.String("closing") - // delete - SystemNetworkStateDelete = SystemNetworkStateKey.String("delete") - // established - SystemNetworkStateEstablished = SystemNetworkStateKey.String("established") - // fin_wait_1 - SystemNetworkStateFinWait1 = SystemNetworkStateKey.String("fin_wait_1") - // fin_wait_2 - SystemNetworkStateFinWait2 = SystemNetworkStateKey.String("fin_wait_2") - // last_ack - SystemNetworkStateLastAck = SystemNetworkStateKey.String("last_ack") - // listen - SystemNetworkStateListen = SystemNetworkStateKey.String("listen") - // syn_recv - SystemNetworkStateSynRecv = SystemNetworkStateKey.String("syn_recv") - // syn_sent - SystemNetworkStateSynSent = SystemNetworkStateKey.String("syn_sent") - // time_wait - SystemNetworkStateTimeWait = SystemNetworkStateKey.String("time_wait") -) - -// Describes System Process metric attributes -const ( - // SystemProcessesStatusKey is the attribute Key conforming to the - // "system.processes.status" semantic conventions. It represents the - // process state, e.g., [Linux Process State - // Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES) - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'running' - SystemProcessesStatusKey = attribute.Key("system.processes.status") -) - -var ( - // running - SystemProcessesStatusRunning = SystemProcessesStatusKey.String("running") - // sleeping - SystemProcessesStatusSleeping = SystemProcessesStatusKey.String("sleeping") - // stopped - SystemProcessesStatusStopped = SystemProcessesStatusKey.String("stopped") - // defunct - SystemProcessesStatusDefunct = SystemProcessesStatusKey.String("defunct") -) - -// These attributes may be used to describe the client in a connection-based -// network interaction where there is one side that initiates the connection -// (the client is the side that initiates the connection). This covers all TCP -// network interactions since TCP is connection-based and one side initiates -// the connection (an exception is made for peer-to-peer communication over TCP -// where the "user-facing" surface of the protocol / API doesn't expose a clear -// notion of client and server). This also covers UDP network interactions -// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS. -const ( - // ClientAddressKey is the attribute Key conforming to the "client.address" - // semantic conventions. It represents the client address - domain name if - // available without reverse DNS lookup; otherwise, IP address or Unix - // domain socket name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'client.example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the server side, and when communicating through - // an intermediary, `client.address` SHOULD represent the client address - // behind any intermediaries, for example proxies, if it's available. - ClientAddressKey = attribute.Key("client.address") - - // ClientPortKey is the attribute Key conforming to the "client.port" - // semantic conventions. It represents the client port number. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 65123 - // Note: When observed from the server side, and when communicating through - // an intermediary, `client.port` SHOULD represent the client port behind - // any intermediaries, for example proxies, if it's available. - ClientPortKey = attribute.Key("client.port") -) - -// ClientAddress returns an attribute KeyValue conforming to the -// "client.address" semantic conventions. It represents the client address - -// domain name if available without reverse DNS lookup; otherwise, IP address -// or Unix domain socket name. -func ClientAddress(val string) attribute.KeyValue { - return ClientAddressKey.String(val) -} - -// ClientPort returns an attribute KeyValue conforming to the "client.port" -// semantic conventions. It represents the client port number. -func ClientPort(val int) attribute.KeyValue { - return ClientPortKey.Int(val) -} - -// The attributes used to describe telemetry in the context of databases. -const ( - // DBCassandraConsistencyLevelKey is the attribute Key conforming to the - // "db.cassandra.consistency_level" semantic conventions. It represents the - // consistency level of the query. Based on consistency values from - // [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html). - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBCassandraConsistencyLevelKey = attribute.Key("db.cassandra.consistency_level") - - // DBCassandraCoordinatorDCKey is the attribute Key conforming to the - // "db.cassandra.coordinator.dc" semantic conventions. It represents the - // data center of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'us-west-2' - DBCassandraCoordinatorDCKey = attribute.Key("db.cassandra.coordinator.dc") - - // DBCassandraCoordinatorIDKey is the attribute Key conforming to the - // "db.cassandra.coordinator.id" semantic conventions. It represents the ID - // of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af' - DBCassandraCoordinatorIDKey = attribute.Key("db.cassandra.coordinator.id") - - // DBCassandraIdempotenceKey is the attribute Key conforming to the - // "db.cassandra.idempotence" semantic conventions. It represents the - // whether or not the query is idempotent. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - DBCassandraIdempotenceKey = attribute.Key("db.cassandra.idempotence") - - // DBCassandraPageSizeKey is the attribute Key conforming to the - // "db.cassandra.page_size" semantic conventions. It represents the fetch - // size used for paging, i.e. how many rows will be returned at once. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 5000 - DBCassandraPageSizeKey = attribute.Key("db.cassandra.page_size") - - // DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming - // to the "db.cassandra.speculative_execution_count" semantic conventions. - // It represents the number of times a query was speculatively executed. - // Not set or `0` if the query was not executed speculatively. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 2 - DBCassandraSpeculativeExecutionCountKey = attribute.Key("db.cassandra.speculative_execution_count") - - // DBCassandraTableKey is the attribute Key conforming to the - // "db.cassandra.table" semantic conventions. It represents the name of the - // primary Cassandra table that the operation is acting upon, including the - // keyspace name (if applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mytable' - // Note: This mirrors the db.sql.table attribute but references cassandra - // rather than sql. It is not recommended to attempt any client-side - // parsing of `db.statement` just to get this property, but it should be - // set if it is provided by the library being instrumented. If the - // operation is acting upon an anonymous table, or more than one table, - // this value MUST NOT be set. - DBCassandraTableKey = attribute.Key("db.cassandra.table") - - // DBConnectionStringKey is the attribute Key conforming to the - // "db.connection_string" semantic conventions. It represents the - // connection string used to connect to the database. It is recommended to - // remove embedded credentials. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Server=(localdb)\\v11.0;Integrated Security=true;' - DBConnectionStringKey = attribute.Key("db.connection_string") - - // DBCosmosDBClientIDKey is the attribute Key conforming to the - // "db.cosmosdb.client_id" semantic conventions. It represents the unique - // Cosmos client instance id. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '3ba4827d-4422-483f-b59f-85b74211c11d' - DBCosmosDBClientIDKey = attribute.Key("db.cosmosdb.client_id") - - // DBCosmosDBConnectionModeKey is the attribute Key conforming to the - // "db.cosmosdb.connection_mode" semantic conventions. It represents the - // cosmos client connection mode. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBCosmosDBConnectionModeKey = attribute.Key("db.cosmosdb.connection_mode") - - // DBCosmosDBContainerKey is the attribute Key conforming to the - // "db.cosmosdb.container" semantic conventions. It represents the cosmos - // DB container name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'anystring' - DBCosmosDBContainerKey = attribute.Key("db.cosmosdb.container") - - // DBCosmosDBOperationTypeKey is the attribute Key conforming to the - // "db.cosmosdb.operation_type" semantic conventions. It represents the - // cosmosDB Operation Type. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBCosmosDBOperationTypeKey = attribute.Key("db.cosmosdb.operation_type") - - // DBCosmosDBRequestChargeKey is the attribute Key conforming to the - // "db.cosmosdb.request_charge" semantic conventions. It represents the rU - // consumed for that operation - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 46.18, 1.0 - DBCosmosDBRequestChargeKey = attribute.Key("db.cosmosdb.request_charge") - - // DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the - // "db.cosmosdb.request_content_length" semantic conventions. It represents - // the request payload size in bytes - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - DBCosmosDBRequestContentLengthKey = attribute.Key("db.cosmosdb.request_content_length") - - // DBCosmosDBStatusCodeKey is the attribute Key conforming to the - // "db.cosmosdb.status_code" semantic conventions. It represents the cosmos - // DB status code. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 200, 201 - DBCosmosDBStatusCodeKey = attribute.Key("db.cosmosdb.status_code") - - // DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the - // "db.cosmosdb.sub_status_code" semantic conventions. It represents the - // cosmos DB sub status code. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1000, 1002 - DBCosmosDBSubStatusCodeKey = attribute.Key("db.cosmosdb.sub_status_code") - - // DBElasticsearchClusterNameKey is the attribute Key conforming to the - // "db.elasticsearch.cluster.name" semantic conventions. It represents the - // represents the identifier of an Elasticsearch cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'e9106fc68e3044f0b1475b04bf4ffd5f' - DBElasticsearchClusterNameKey = attribute.Key("db.elasticsearch.cluster.name") - - // DBElasticsearchNodeNameKey is the attribute Key conforming to the - // "db.elasticsearch.node.name" semantic conventions. It represents the - // represents the human-readable identifier of the node/instance to which a - // request was routed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'instance-0000000001' - DBElasticsearchNodeNameKey = attribute.Key("db.elasticsearch.node.name") - - // DBInstanceIDKey is the attribute Key conforming to the "db.instance.id" - // semantic conventions. It represents an identifier (address, unique name, - // or any other identifier) of the database instance that is executing - // queries or mutations on the current connection. This is useful in cases - // where the database is running in a clustered environment and the - // instrumentation is able to record the node executing the query. The - // client may obtain this value in databases like MySQL using queries like - // `select @@hostname`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mysql-e26b99z.example.com' - DBInstanceIDKey = attribute.Key("db.instance.id") - - // DBJDBCDriverClassnameKey is the attribute Key conforming to the - // "db.jdbc.driver_classname" semantic conventions. It represents the - // fully-qualified class name of the [Java Database Connectivity - // (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) - // driver used to connect. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'org.postgresql.Driver', - // 'com.microsoft.sqlserver.jdbc.SQLServerDriver' - DBJDBCDriverClassnameKey = attribute.Key("db.jdbc.driver_classname") - - // DBMongoDBCollectionKey is the attribute Key conforming to the - // "db.mongodb.collection" semantic conventions. It represents the MongoDB - // collection being accessed within the database stated in `db.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'customers', 'products' - DBMongoDBCollectionKey = attribute.Key("db.mongodb.collection") - - // DBMSSQLInstanceNameKey is the attribute Key conforming to the - // "db.mssql.instance_name" semantic conventions. It represents the - // Microsoft SQL Server [instance - // name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) - // connecting to. This name is used to determine the port of a named - // instance. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MSSQLSERVER' - // Note: If setting a `db.mssql.instance_name`, `server.port` is no longer - // required (but still recommended if non-standard). - DBMSSQLInstanceNameKey = attribute.Key("db.mssql.instance_name") - - // DBNameKey is the attribute Key conforming to the "db.name" semantic - // conventions. It represents the this attribute is used to report the name - // of the database being accessed. For commands that switch the database, - // this should be set to the target database (even if the command fails). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'customers', 'main' - // Note: In some SQL databases, the database name to be used is called - // "schema name". In case there are multiple layers that could be - // considered for database name (e.g. Oracle instance name and schema - // name), the database name to be used is the more specific layer (e.g. - // Oracle schema name). - DBNameKey = attribute.Key("db.name") - - // DBOperationKey is the attribute Key conforming to the "db.operation" - // semantic conventions. It represents the name of the operation being - // executed, e.g. the [MongoDB command - // name](https://docs.mongodb.com/manual/reference/command/#database-operations) - // such as `findAndModify`, or the SQL keyword. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'findAndModify', 'HMSET', 'SELECT' - // Note: When setting this to an SQL keyword, it is not recommended to - // attempt any client-side parsing of `db.statement` just to get this - // property, but it should be set if the operation name is provided by the - // library being instrumented. If the SQL statement has an ambiguous - // operation, or performs more than one operation, this value may be - // omitted. - DBOperationKey = attribute.Key("db.operation") - - // DBRedisDBIndexKey is the attribute Key conforming to the - // "db.redis.database_index" semantic conventions. It represents the index - // of the database being accessed as used in the [`SELECT` - // command](https://redis.io/commands/select), provided as an integer. To - // be used instead of the generic `db.name` attribute. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 1, 15 - DBRedisDBIndexKey = attribute.Key("db.redis.database_index") - - // DBSQLTableKey is the attribute Key conforming to the "db.sql.table" - // semantic conventions. It represents the name of the primary table that - // the operation is acting upon, including the database name (if - // applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'public.users', 'customers' - // Note: It is not recommended to attempt any client-side parsing of - // `db.statement` just to get this property, but it should be set if it is - // provided by the library being instrumented. If the operation is acting - // upon an anonymous table, or more than one table, this value MUST NOT be - // set. - DBSQLTableKey = attribute.Key("db.sql.table") - - // DBStatementKey is the attribute Key conforming to the "db.statement" - // semantic conventions. It represents the database statement being - // executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'SELECT * FROM wuser_table', 'SET mykey "WuValue"' - DBStatementKey = attribute.Key("db.statement") - - // DBSystemKey is the attribute Key conforming to the "db.system" semantic - // conventions. It represents an identifier for the database management - // system (DBMS) product being used. See below for a list of well-known - // identifiers. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBSystemKey = attribute.Key("db.system") - - // DBUserKey is the attribute Key conforming to the "db.user" semantic - // conventions. It represents the username for accessing the database. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'readonly_user', 'reporting_user' - DBUserKey = attribute.Key("db.user") -) - -var ( - // all - DBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String("all") - // each_quorum - DBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String("each_quorum") - // quorum - DBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String("quorum") - // local_quorum - DBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String("local_quorum") - // one - DBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String("one") - // two - DBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String("two") - // three - DBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String("three") - // local_one - DBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String("local_one") - // any - DBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String("any") - // serial - DBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String("serial") - // local_serial - DBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String("local_serial") -) - -var ( - // Gateway (HTTP) connections mode - DBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String("gateway") - // Direct connection - DBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String("direct") -) - -var ( - // invalid - DBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String("Invalid") - // create - DBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String("Create") - // patch - DBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String("Patch") - // read - DBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String("Read") - // read_feed - DBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String("ReadFeed") - // delete - DBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String("Delete") - // replace - DBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String("Replace") - // execute - DBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String("Execute") - // query - DBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String("Query") - // head - DBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String("Head") - // head_feed - DBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String("HeadFeed") - // upsert - DBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String("Upsert") - // batch - DBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String("Batch") - // query_plan - DBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String("QueryPlan") - // execute_javascript - DBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String("ExecuteJavaScript") -) - -var ( - // Some other SQL database. Fallback only. See notes - DBSystemOtherSQL = DBSystemKey.String("other_sql") - // Microsoft SQL Server - DBSystemMSSQL = DBSystemKey.String("mssql") - // Microsoft SQL Server Compact - DBSystemMssqlcompact = DBSystemKey.String("mssqlcompact") - // MySQL - DBSystemMySQL = DBSystemKey.String("mysql") - // Oracle Database - DBSystemOracle = DBSystemKey.String("oracle") - // IBM DB2 - DBSystemDB2 = DBSystemKey.String("db2") - // PostgreSQL - DBSystemPostgreSQL = DBSystemKey.String("postgresql") - // Amazon Redshift - DBSystemRedshift = DBSystemKey.String("redshift") - // Apache Hive - DBSystemHive = DBSystemKey.String("hive") - // Cloudscape - DBSystemCloudscape = DBSystemKey.String("cloudscape") - // HyperSQL DataBase - DBSystemHSQLDB = DBSystemKey.String("hsqldb") - // Progress Database - DBSystemProgress = DBSystemKey.String("progress") - // SAP MaxDB - DBSystemMaxDB = DBSystemKey.String("maxdb") - // SAP HANA - DBSystemHanaDB = DBSystemKey.String("hanadb") - // Ingres - DBSystemIngres = DBSystemKey.String("ingres") - // FirstSQL - DBSystemFirstSQL = DBSystemKey.String("firstsql") - // EnterpriseDB - DBSystemEDB = DBSystemKey.String("edb") - // InterSystems Caché - DBSystemCache = DBSystemKey.String("cache") - // Adabas (Adaptable Database System) - DBSystemAdabas = DBSystemKey.String("adabas") - // Firebird - DBSystemFirebird = DBSystemKey.String("firebird") - // Apache Derby - DBSystemDerby = DBSystemKey.String("derby") - // FileMaker - DBSystemFilemaker = DBSystemKey.String("filemaker") - // Informix - DBSystemInformix = DBSystemKey.String("informix") - // InstantDB - DBSystemInstantDB = DBSystemKey.String("instantdb") - // InterBase - DBSystemInterbase = DBSystemKey.String("interbase") - // MariaDB - DBSystemMariaDB = DBSystemKey.String("mariadb") - // Netezza - DBSystemNetezza = DBSystemKey.String("netezza") - // Pervasive PSQL - DBSystemPervasive = DBSystemKey.String("pervasive") - // PointBase - DBSystemPointbase = DBSystemKey.String("pointbase") - // SQLite - DBSystemSqlite = DBSystemKey.String("sqlite") - // Sybase - DBSystemSybase = DBSystemKey.String("sybase") - // Teradata - DBSystemTeradata = DBSystemKey.String("teradata") - // Vertica - DBSystemVertica = DBSystemKey.String("vertica") - // H2 - DBSystemH2 = DBSystemKey.String("h2") - // ColdFusion IMQ - DBSystemColdfusion = DBSystemKey.String("coldfusion") - // Apache Cassandra - DBSystemCassandra = DBSystemKey.String("cassandra") - // Apache HBase - DBSystemHBase = DBSystemKey.String("hbase") - // MongoDB - DBSystemMongoDB = DBSystemKey.String("mongodb") - // Redis - DBSystemRedis = DBSystemKey.String("redis") - // Couchbase - DBSystemCouchbase = DBSystemKey.String("couchbase") - // CouchDB - DBSystemCouchDB = DBSystemKey.String("couchdb") - // Microsoft Azure Cosmos DB - DBSystemCosmosDB = DBSystemKey.String("cosmosdb") - // Amazon DynamoDB - DBSystemDynamoDB = DBSystemKey.String("dynamodb") - // Neo4j - DBSystemNeo4j = DBSystemKey.String("neo4j") - // Apache Geode - DBSystemGeode = DBSystemKey.String("geode") - // Elasticsearch - DBSystemElasticsearch = DBSystemKey.String("elasticsearch") - // Memcached - DBSystemMemcached = DBSystemKey.String("memcached") - // CockroachDB - DBSystemCockroachdb = DBSystemKey.String("cockroachdb") - // OpenSearch - DBSystemOpensearch = DBSystemKey.String("opensearch") - // ClickHouse - DBSystemClickhouse = DBSystemKey.String("clickhouse") - // Cloud Spanner - DBSystemSpanner = DBSystemKey.String("spanner") - // Trino - DBSystemTrino = DBSystemKey.String("trino") -) - -// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the -// "db.cassandra.coordinator.dc" semantic conventions. It represents the data -// center of the coordinating node for a query. -func DBCassandraCoordinatorDC(val string) attribute.KeyValue { - return DBCassandraCoordinatorDCKey.String(val) -} - -// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the -// "db.cassandra.coordinator.id" semantic conventions. It represents the ID of -// the coordinating node for a query. -func DBCassandraCoordinatorID(val string) attribute.KeyValue { - return DBCassandraCoordinatorIDKey.String(val) -} - -// DBCassandraIdempotence returns an attribute KeyValue conforming to the -// "db.cassandra.idempotence" semantic conventions. It represents the whether -// or not the query is idempotent. -func DBCassandraIdempotence(val bool) attribute.KeyValue { - return DBCassandraIdempotenceKey.Bool(val) -} - -// DBCassandraPageSize returns an attribute KeyValue conforming to the -// "db.cassandra.page_size" semantic conventions. It represents the fetch size -// used for paging, i.e. how many rows will be returned at once. -func DBCassandraPageSize(val int) attribute.KeyValue { - return DBCassandraPageSizeKey.Int(val) -} - -// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue -// conforming to the "db.cassandra.speculative_execution_count" semantic -// conventions. It represents the number of times a query was speculatively -// executed. Not set or `0` if the query was not executed speculatively. -func DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue { - return DBCassandraSpeculativeExecutionCountKey.Int(val) -} - -// DBCassandraTable returns an attribute KeyValue conforming to the -// "db.cassandra.table" semantic conventions. It represents the name of the -// primary Cassandra table that the operation is acting upon, including the -// keyspace name (if applicable). -func DBCassandraTable(val string) attribute.KeyValue { - return DBCassandraTableKey.String(val) -} - -// DBConnectionString returns an attribute KeyValue conforming to the -// "db.connection_string" semantic conventions. It represents the connection -// string used to connect to the database. It is recommended to remove embedded -// credentials. -func DBConnectionString(val string) attribute.KeyValue { - return DBConnectionStringKey.String(val) -} - -// DBCosmosDBClientID returns an attribute KeyValue conforming to the -// "db.cosmosdb.client_id" semantic conventions. It represents the unique -// Cosmos client instance id. -func DBCosmosDBClientID(val string) attribute.KeyValue { - return DBCosmosDBClientIDKey.String(val) -} - -// DBCosmosDBContainer returns an attribute KeyValue conforming to the -// "db.cosmosdb.container" semantic conventions. It represents the cosmos DB -// container name. -func DBCosmosDBContainer(val string) attribute.KeyValue { - return DBCosmosDBContainerKey.String(val) -} - -// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the -// "db.cosmosdb.request_charge" semantic conventions. It represents the rU -// consumed for that operation -func DBCosmosDBRequestCharge(val float64) attribute.KeyValue { - return DBCosmosDBRequestChargeKey.Float64(val) -} - -// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming -// to the "db.cosmosdb.request_content_length" semantic conventions. It -// represents the request payload size in bytes -func DBCosmosDBRequestContentLength(val int) attribute.KeyValue { - return DBCosmosDBRequestContentLengthKey.Int(val) -} - -// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the -// "db.cosmosdb.status_code" semantic conventions. It represents the cosmos DB -// status code. -func DBCosmosDBStatusCode(val int) attribute.KeyValue { - return DBCosmosDBStatusCodeKey.Int(val) -} - -// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the -// "db.cosmosdb.sub_status_code" semantic conventions. It represents the cosmos -// DB sub status code. -func DBCosmosDBSubStatusCode(val int) attribute.KeyValue { - return DBCosmosDBSubStatusCodeKey.Int(val) -} - -// DBElasticsearchClusterName returns an attribute KeyValue conforming to -// the "db.elasticsearch.cluster.name" semantic conventions. It represents the -// represents the identifier of an Elasticsearch cluster. -func DBElasticsearchClusterName(val string) attribute.KeyValue { - return DBElasticsearchClusterNameKey.String(val) -} - -// DBElasticsearchNodeName returns an attribute KeyValue conforming to the -// "db.elasticsearch.node.name" semantic conventions. It represents the -// represents the human-readable identifier of the node/instance to which a -// request was routed. -func DBElasticsearchNodeName(val string) attribute.KeyValue { - return DBElasticsearchNodeNameKey.String(val) -} - -// DBInstanceID returns an attribute KeyValue conforming to the -// "db.instance.id" semantic conventions. It represents an identifier (address, -// unique name, or any other identifier) of the database instance that is -// executing queries or mutations on the current connection. This is useful in -// cases where the database is running in a clustered environment and the -// instrumentation is able to record the node executing the query. The client -// may obtain this value in databases like MySQL using queries like `select -// @@hostname`. -func DBInstanceID(val string) attribute.KeyValue { - return DBInstanceIDKey.String(val) -} - -// DBJDBCDriverClassname returns an attribute KeyValue conforming to the -// "db.jdbc.driver_classname" semantic conventions. It represents the -// fully-qualified class name of the [Java Database Connectivity -// (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver -// used to connect. -func DBJDBCDriverClassname(val string) attribute.KeyValue { - return DBJDBCDriverClassnameKey.String(val) -} - -// DBMongoDBCollection returns an attribute KeyValue conforming to the -// "db.mongodb.collection" semantic conventions. It represents the MongoDB -// collection being accessed within the database stated in `db.name`. -func DBMongoDBCollection(val string) attribute.KeyValue { - return DBMongoDBCollectionKey.String(val) -} - -// DBMSSQLInstanceName returns an attribute KeyValue conforming to the -// "db.mssql.instance_name" semantic conventions. It represents the Microsoft -// SQL Server [instance -// name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) -// connecting to. This name is used to determine the port of a named instance. -func DBMSSQLInstanceName(val string) attribute.KeyValue { - return DBMSSQLInstanceNameKey.String(val) -} - -// DBName returns an attribute KeyValue conforming to the "db.name" semantic -// conventions. It represents the this attribute is used to report the name of -// the database being accessed. For commands that switch the database, this -// should be set to the target database (even if the command fails). -func DBName(val string) attribute.KeyValue { - return DBNameKey.String(val) -} - -// DBOperation returns an attribute KeyValue conforming to the -// "db.operation" semantic conventions. It represents the name of the operation -// being executed, e.g. the [MongoDB command -// name](https://docs.mongodb.com/manual/reference/command/#database-operations) -// such as `findAndModify`, or the SQL keyword. -func DBOperation(val string) attribute.KeyValue { - return DBOperationKey.String(val) -} - -// DBRedisDBIndex returns an attribute KeyValue conforming to the -// "db.redis.database_index" semantic conventions. It represents the index of -// the database being accessed as used in the [`SELECT` -// command](https://redis.io/commands/select), provided as an integer. To be -// used instead of the generic `db.name` attribute. -func DBRedisDBIndex(val int) attribute.KeyValue { - return DBRedisDBIndexKey.Int(val) -} - -// DBSQLTable returns an attribute KeyValue conforming to the "db.sql.table" -// semantic conventions. It represents the name of the primary table that the -// operation is acting upon, including the database name (if applicable). -func DBSQLTable(val string) attribute.KeyValue { - return DBSQLTableKey.String(val) -} - -// DBStatement returns an attribute KeyValue conforming to the -// "db.statement" semantic conventions. It represents the database statement -// being executed. -func DBStatement(val string) attribute.KeyValue { - return DBStatementKey.String(val) -} - -// DBUser returns an attribute KeyValue conforming to the "db.user" semantic -// conventions. It represents the username for accessing the database. -func DBUser(val string) attribute.KeyValue { - return DBUserKey.String(val) -} - -// Describes deprecated HTTP attributes. -const ( - // HTTPFlavorKey is the attribute Key conforming to the "http.flavor" - // semantic conventions. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: deprecated - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorKey = attribute.Key("http.flavor") - - // HTTPMethodKey is the attribute Key conforming to the "http.method" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'GET', 'POST', 'HEAD' - // Deprecated: use `http.request.method` instead. - HTTPMethodKey = attribute.Key("http.method") - - // HTTPRequestContentLengthKey is the attribute Key conforming to the - // "http.request_content_length" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 3495 - // Deprecated: use `http.request.header.content-length` instead. - HTTPRequestContentLengthKey = attribute.Key("http.request_content_length") - - // HTTPResponseContentLengthKey is the attribute Key conforming to the - // "http.response_content_length" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 3495 - // Deprecated: use `http.response.header.content-length` instead. - HTTPResponseContentLengthKey = attribute.Key("http.response_content_length") - - // HTTPSchemeKey is the attribute Key conforming to the "http.scheme" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'http', 'https' - // Deprecated: use `url.scheme` instead. - HTTPSchemeKey = attribute.Key("http.scheme") - - // HTTPStatusCodeKey is the attribute Key conforming to the - // "http.status_code" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 200 - // Deprecated: use `http.response.status_code` instead. - HTTPStatusCodeKey = attribute.Key("http.status_code") - - // HTTPTargetKey is the attribute Key conforming to the "http.target" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '/search?q=OpenTelemetry#SemConv' - // Deprecated: use `url.path` and `url.query` instead. - HTTPTargetKey = attribute.Key("http.target") - - // HTTPURLKey is the attribute Key conforming to the "http.url" semantic - // conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv' - // Deprecated: use `url.full` instead. - HTTPURLKey = attribute.Key("http.url") - - // HTTPUserAgentKey is the attribute Key conforming to the - // "http.user_agent" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU - // iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) - // Version/14.1.2 Mobile/15E148 Safari/604.1' - // Deprecated: use `user_agent.original` instead. - HTTPUserAgentKey = attribute.Key("http.user_agent") -) - -var ( - // HTTP/1.0 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP10 = HTTPFlavorKey.String("1.0") - // HTTP/1.1 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP11 = HTTPFlavorKey.String("1.1") - // HTTP/2 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP20 = HTTPFlavorKey.String("2.0") - // HTTP/3 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP30 = HTTPFlavorKey.String("3.0") - // SPDY protocol - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorSPDY = HTTPFlavorKey.String("SPDY") - // QUIC protocol - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorQUIC = HTTPFlavorKey.String("QUIC") -) - -// HTTPMethod returns an attribute KeyValue conforming to the "http.method" -// semantic conventions. -// -// Deprecated: use `http.request.method` instead. -func HTTPMethod(val string) attribute.KeyValue { - return HTTPMethodKey.String(val) -} - -// HTTPRequestContentLength returns an attribute KeyValue conforming to the -// "http.request_content_length" semantic conventions. -// -// Deprecated: use `http.request.header.content-length` instead. -func HTTPRequestContentLength(val int) attribute.KeyValue { - return HTTPRequestContentLengthKey.Int(val) -} - -// HTTPResponseContentLength returns an attribute KeyValue conforming to the -// "http.response_content_length" semantic conventions. -// -// Deprecated: use `http.response.header.content-length` instead. -func HTTPResponseContentLength(val int) attribute.KeyValue { - return HTTPResponseContentLengthKey.Int(val) -} - -// HTTPScheme returns an attribute KeyValue conforming to the "http.scheme" -// semantic conventions. -// -// Deprecated: use `url.scheme` instead. -func HTTPScheme(val string) attribute.KeyValue { - return HTTPSchemeKey.String(val) -} - -// HTTPStatusCode returns an attribute KeyValue conforming to the -// "http.status_code" semantic conventions. -// -// Deprecated: use `http.response.status_code` instead. -func HTTPStatusCode(val int) attribute.KeyValue { - return HTTPStatusCodeKey.Int(val) -} - -// HTTPTarget returns an attribute KeyValue conforming to the "http.target" -// semantic conventions. -// -// Deprecated: use `url.path` and `url.query` instead. -func HTTPTarget(val string) attribute.KeyValue { - return HTTPTargetKey.String(val) -} - -// HTTPURL returns an attribute KeyValue conforming to the "http.url" -// semantic conventions. -// -// Deprecated: use `url.full` instead. -func HTTPURL(val string) attribute.KeyValue { - return HTTPURLKey.String(val) -} - -// HTTPUserAgent returns an attribute KeyValue conforming to the -// "http.user_agent" semantic conventions. -// -// Deprecated: use `user_agent.original` instead. -func HTTPUserAgent(val string) attribute.KeyValue { - return HTTPUserAgentKey.String(val) -} - -// These attributes may be used for any network related operation. -const ( - // NetHostNameKey is the attribute Key conforming to the "net.host.name" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'example.com' - // Deprecated: use `server.address`. - NetHostNameKey = attribute.Key("net.host.name") - - // NetHostPortKey is the attribute Key conforming to the "net.host.port" - // semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 8080 - // Deprecated: use `server.port`. - NetHostPortKey = attribute.Key("net.host.port") - - // NetPeerNameKey is the attribute Key conforming to the "net.peer.name" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'example.com' - // Deprecated: use `server.address` on client spans and `client.address` on - // server spans. - NetPeerNameKey = attribute.Key("net.peer.name") - - // NetPeerPortKey is the attribute Key conforming to the "net.peer.port" - // semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 8080 - // Deprecated: use `server.port` on client spans and `client.port` on - // server spans. - NetPeerPortKey = attribute.Key("net.peer.port") - - // NetProtocolNameKey is the attribute Key conforming to the - // "net.protocol.name" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'amqp', 'http', 'mqtt' - // Deprecated: use `network.protocol.name`. - NetProtocolNameKey = attribute.Key("net.protocol.name") - - // NetProtocolVersionKey is the attribute Key conforming to the - // "net.protocol.version" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '3.1.1' - // Deprecated: use `network.protocol.version`. - NetProtocolVersionKey = attribute.Key("net.protocol.version") - - // NetSockFamilyKey is the attribute Key conforming to the - // "net.sock.family" semantic conventions. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: deprecated - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyKey = attribute.Key("net.sock.family") - - // NetSockHostAddrKey is the attribute Key conforming to the - // "net.sock.host.addr" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '/var/my.sock' - // Deprecated: use `network.local.address`. - NetSockHostAddrKey = attribute.Key("net.sock.host.addr") - - // NetSockHostPortKey is the attribute Key conforming to the - // "net.sock.host.port" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 8080 - // Deprecated: use `network.local.port`. - NetSockHostPortKey = attribute.Key("net.sock.host.port") - - // NetSockPeerAddrKey is the attribute Key conforming to the - // "net.sock.peer.addr" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '192.168.0.1' - // Deprecated: use `network.peer.address`. - NetSockPeerAddrKey = attribute.Key("net.sock.peer.addr") - - // NetSockPeerNameKey is the attribute Key conforming to the - // "net.sock.peer.name" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '/var/my.sock' - // Deprecated: no replacement at this time. - NetSockPeerNameKey = attribute.Key("net.sock.peer.name") - - // NetSockPeerPortKey is the attribute Key conforming to the - // "net.sock.peer.port" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 65531 - // Deprecated: use `network.peer.port`. - NetSockPeerPortKey = attribute.Key("net.sock.peer.port") - - // NetTransportKey is the attribute Key conforming to the "net.transport" - // semantic conventions. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: deprecated - // Deprecated: use `network.transport`. - NetTransportKey = attribute.Key("net.transport") -) - -var ( - // IPv4 address - // - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyInet = NetSockFamilyKey.String("inet") - // IPv6 address - // - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyInet6 = NetSockFamilyKey.String("inet6") - // Unix domain socket path - // - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyUnix = NetSockFamilyKey.String("unix") -) - -var ( - // ip_tcp - // - // Deprecated: use `network.transport`. - NetTransportTCP = NetTransportKey.String("ip_tcp") - // ip_udp - // - // Deprecated: use `network.transport`. - NetTransportUDP = NetTransportKey.String("ip_udp") - // Named or anonymous pipe - // - // Deprecated: use `network.transport`. - NetTransportPipe = NetTransportKey.String("pipe") - // In-process communication - // - // Deprecated: use `network.transport`. - NetTransportInProc = NetTransportKey.String("inproc") - // Something else (non IP-based) - // - // Deprecated: use `network.transport`. - NetTransportOther = NetTransportKey.String("other") -) - -// NetHostName returns an attribute KeyValue conforming to the -// "net.host.name" semantic conventions. -// -// Deprecated: use `server.address`. -func NetHostName(val string) attribute.KeyValue { - return NetHostNameKey.String(val) -} - -// NetHostPort returns an attribute KeyValue conforming to the -// "net.host.port" semantic conventions. -// -// Deprecated: use `server.port`. -func NetHostPort(val int) attribute.KeyValue { - return NetHostPortKey.Int(val) -} - -// NetPeerName returns an attribute KeyValue conforming to the -// "net.peer.name" semantic conventions. -// -// Deprecated: use `server.address` on client spans and `client.address` on -// server spans. -func NetPeerName(val string) attribute.KeyValue { - return NetPeerNameKey.String(val) -} - -// NetPeerPort returns an attribute KeyValue conforming to the -// "net.peer.port" semantic conventions. -// -// Deprecated: use `server.port` on client spans and `client.port` on server -// spans. -func NetPeerPort(val int) attribute.KeyValue { - return NetPeerPortKey.Int(val) -} - -// NetProtocolName returns an attribute KeyValue conforming to the -// "net.protocol.name" semantic conventions. -// -// Deprecated: use `network.protocol.name`. -func NetProtocolName(val string) attribute.KeyValue { - return NetProtocolNameKey.String(val) -} - -// NetProtocolVersion returns an attribute KeyValue conforming to the -// "net.protocol.version" semantic conventions. -// -// Deprecated: use `network.protocol.version`. -func NetProtocolVersion(val string) attribute.KeyValue { - return NetProtocolVersionKey.String(val) -} - -// NetSockHostAddr returns an attribute KeyValue conforming to the -// "net.sock.host.addr" semantic conventions. -// -// Deprecated: use `network.local.address`. -func NetSockHostAddr(val string) attribute.KeyValue { - return NetSockHostAddrKey.String(val) -} - -// NetSockHostPort returns an attribute KeyValue conforming to the -// "net.sock.host.port" semantic conventions. -// -// Deprecated: use `network.local.port`. -func NetSockHostPort(val int) attribute.KeyValue { - return NetSockHostPortKey.Int(val) -} - -// NetSockPeerAddr returns an attribute KeyValue conforming to the -// "net.sock.peer.addr" semantic conventions. -// -// Deprecated: use `network.peer.address`. -func NetSockPeerAddr(val string) attribute.KeyValue { - return NetSockPeerAddrKey.String(val) -} - -// NetSockPeerName returns an attribute KeyValue conforming to the -// "net.sock.peer.name" semantic conventions. -// -// Deprecated: no replacement at this time. -func NetSockPeerName(val string) attribute.KeyValue { - return NetSockPeerNameKey.String(val) -} - -// NetSockPeerPort returns an attribute KeyValue conforming to the -// "net.sock.peer.port" semantic conventions. -// -// Deprecated: use `network.peer.port`. -func NetSockPeerPort(val int) attribute.KeyValue { - return NetSockPeerPortKey.Int(val) -} - -// These attributes may be used to describe the receiver of a network -// exchange/packet. These should be used when there is no client/server -// relationship between the two sides, or when that relationship is unknown. -// This covers low-level network interactions (e.g. packet tracing) where you -// don't know if there was a connection or which side initiated it. This also -// covers unidirectional UDP flows and peer-to-peer communication where the -// "user-facing" surface of the protocol / API doesn't expose a clear notion of -// client and server. -const ( - // DestinationAddressKey is the attribute Key conforming to the - // "destination.address" semantic conventions. It represents the - // destination address - domain name if available without reverse DNS - // lookup; otherwise, IP address or Unix domain socket name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'destination.example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the source side, and when communicating through - // an intermediary, `destination.address` SHOULD represent the destination - // address behind any intermediaries, for example proxies, if it's - // available. - DestinationAddressKey = attribute.Key("destination.address") - - // DestinationPortKey is the attribute Key conforming to the - // "destination.port" semantic conventions. It represents the destination - // port number - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3389, 2888 - DestinationPortKey = attribute.Key("destination.port") -) - -// DestinationAddress returns an attribute KeyValue conforming to the -// "destination.address" semantic conventions. It represents the destination -// address - domain name if available without reverse DNS lookup; otherwise, IP -// address or Unix domain socket name. -func DestinationAddress(val string) attribute.KeyValue { - return DestinationAddressKey.String(val) -} - -// DestinationPort returns an attribute KeyValue conforming to the -// "destination.port" semantic conventions. It represents the destination port -// number -func DestinationPort(val int) attribute.KeyValue { - return DestinationPortKey.Int(val) -} - -// These attributes may be used for any disk related operation. -const ( - // DiskIoDirectionKey is the attribute Key conforming to the - // "disk.io.direction" semantic conventions. It represents the disk IO - // operation direction. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'read' - DiskIoDirectionKey = attribute.Key("disk.io.direction") -) - -var ( - // read - DiskIoDirectionRead = DiskIoDirectionKey.String("read") - // write - DiskIoDirectionWrite = DiskIoDirectionKey.String("write") -) - -// The shared attributes used to report an error. -const ( - // ErrorTypeKey is the attribute Key conforming to the "error.type" - // semantic conventions. It represents the describes a class of error the - // operation ended with. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'timeout', 'java.net.UnknownHostException', - // 'server_certificate_invalid', '500' - // Note: The `error.type` SHOULD be predictable and SHOULD have low - // cardinality. - // Instrumentations SHOULD document the list of errors they report. - // - // The cardinality of `error.type` within one instrumentation library - // SHOULD be low. - // Telemetry consumers that aggregate data from multiple instrumentation - // libraries and applications - // should be prepared for `error.type` to have high cardinality at query - // time when no - // additional filters are applied. - // - // If the operation has completed successfully, instrumentations SHOULD NOT - // set `error.type`. - // - // If a specific domain defines its own set of error identifiers (such as - // HTTP or gRPC status codes), - // it's RECOMMENDED to: - // - // * Use a domain-specific attribute - // * Set `error.type` to capture all errors, regardless of whether they are - // defined within the domain-specific set or not. - ErrorTypeKey = attribute.Key("error.type") -) - -var ( - // A fallback error value to be used when the instrumentation doesn't define a custom value - ErrorTypeOther = ErrorTypeKey.String("_OTHER") -) - -// The shared attributes used to report a single exception associated with a -// span or log. -const ( - // ExceptionEscapedKey is the attribute Key conforming to the - // "exception.escaped" semantic conventions. It represents the sHOULD be - // set to true if the exception event is recorded at a point where it is - // known that the exception is escaping the scope of the span. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Note: An exception is considered to have escaped (or left) the scope of - // a span, - // if that span is ended while the exception is still logically "in - // flight". - // This may be actually "in flight" in some languages (e.g. if the - // exception - // is passed to a Context manager's `__exit__` method in Python) but will - // usually be caught at the point of recording the exception in most - // languages. - // - // It is usually not possible to determine at the point where an exception - // is thrown - // whether it will escape the scope of a span. - // However, it is trivial to know that an exception - // will escape, if one checks for an active exception just before ending - // the span, - // as done in the [example for recording span - // exceptions](#recording-an-exception). - // - // It follows that an exception may still escape the scope of the span - // even if the `exception.escaped` attribute was not set or set to false, - // since the event might have been recorded at a time where it was not - // clear whether the exception will escape. - ExceptionEscapedKey = attribute.Key("exception.escaped") - - // ExceptionMessageKey is the attribute Key conforming to the - // "exception.message" semantic conventions. It represents the exception - // message. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Division by zero', "Can't convert 'int' object to str - // implicitly" - ExceptionMessageKey = attribute.Key("exception.message") - - // ExceptionStacktraceKey is the attribute Key conforming to the - // "exception.stacktrace" semantic conventions. It represents a stacktrace - // as a string in the natural representation for the language runtime. The - // representation is to be determined and documented by each language SIG. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Exception in thread "main" java.lang.RuntimeException: Test - // exception\\n at ' - // 'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' - // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' - // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' - ExceptionStacktraceKey = attribute.Key("exception.stacktrace") - - // ExceptionTypeKey is the attribute Key conforming to the "exception.type" - // semantic conventions. It represents the type of the exception (its - // fully-qualified class name, if applicable). The dynamic type of the - // exception should be preferred over the static type in languages that - // support it. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'java.net.ConnectException', 'OSError' - ExceptionTypeKey = attribute.Key("exception.type") -) - -// ExceptionEscaped returns an attribute KeyValue conforming to the -// "exception.escaped" semantic conventions. It represents the sHOULD be set to -// true if the exception event is recorded at a point where it is known that -// the exception is escaping the scope of the span. -func ExceptionEscaped(val bool) attribute.KeyValue { - return ExceptionEscapedKey.Bool(val) -} - -// ExceptionMessage returns an attribute KeyValue conforming to the -// "exception.message" semantic conventions. It represents the exception -// message. -func ExceptionMessage(val string) attribute.KeyValue { - return ExceptionMessageKey.String(val) -} - -// ExceptionStacktrace returns an attribute KeyValue conforming to the -// "exception.stacktrace" semantic conventions. It represents a stacktrace as a -// string in the natural representation for the language runtime. The -// representation is to be determined and documented by each language SIG. -func ExceptionStacktrace(val string) attribute.KeyValue { - return ExceptionStacktraceKey.String(val) -} - -// ExceptionType returns an attribute KeyValue conforming to the -// "exception.type" semantic conventions. It represents the type of the -// exception (its fully-qualified class name, if applicable). The dynamic type -// of the exception should be preferred over the static type in languages that -// support it. -func ExceptionType(val string) attribute.KeyValue { - return ExceptionTypeKey.String(val) -} - -// Semantic convention attributes in the HTTP namespace. -const ( - // HTTPRequestBodySizeKey is the attribute Key conforming to the - // "http.request.body.size" semantic conventions. It represents the size of - // the request payload body in bytes. This is the number of bytes - // transferred excluding headers and is often, but not always, present as - // the - // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) - // header. For requests using transport encoding, this should be the - // compressed size. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3495 - HTTPRequestBodySizeKey = attribute.Key("http.request.body.size") - - // HTTPRequestMethodKey is the attribute Key conforming to the - // "http.request.method" semantic conventions. It represents the hTTP - // request method. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'GET', 'POST', 'HEAD' - // Note: HTTP request method value SHOULD be "known" to the - // instrumentation. - // By default, this convention defines "known" methods as the ones listed - // in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods) - // and the PATCH method defined in - // [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html). - // - // If the HTTP request method is not known to instrumentation, it MUST set - // the `http.request.method` attribute to `_OTHER`. - // - // If the HTTP instrumentation could end up converting valid HTTP request - // methods to `_OTHER`, then it MUST provide a way to override - // the list of known HTTP methods. If this override is done via environment - // variable, then the environment variable MUST be named - // OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated - // list of case-sensitive known HTTP methods - // (this list MUST be a full override of the default known method, it is - // not a list of known methods in addition to the defaults). - // - // HTTP method names are case-sensitive and `http.request.method` attribute - // value MUST match a known HTTP method name exactly. - // Instrumentations for specific web frameworks that consider HTTP methods - // to be case insensitive, SHOULD populate a canonical equivalent. - // Tracing instrumentations that do so, MUST also set - // `http.request.method_original` to the original value. - HTTPRequestMethodKey = attribute.Key("http.request.method") - - // HTTPRequestMethodOriginalKey is the attribute Key conforming to the - // "http.request.method_original" semantic conventions. It represents the - // original HTTP method sent by the client in the request line. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'GeT', 'ACL', 'foo' - HTTPRequestMethodOriginalKey = attribute.Key("http.request.method_original") - - // HTTPRequestResendCountKey is the attribute Key conforming to the - // "http.request.resend_count" semantic conventions. It represents the - // ordinal number of request resending attempt (for any reason, including - // redirects). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 3 - // Note: The resend count SHOULD be updated each time an HTTP request gets - // resent by the client, regardless of what was the cause of the resending - // (e.g. redirection, authorization failure, 503 Server Unavailable, - // network issues, or any other). - HTTPRequestResendCountKey = attribute.Key("http.request.resend_count") - - // HTTPResponseBodySizeKey is the attribute Key conforming to the - // "http.response.body.size" semantic conventions. It represents the size - // of the response payload body in bytes. This is the number of bytes - // transferred excluding headers and is often, but not always, present as - // the - // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) - // header. For requests using transport encoding, this should be the - // compressed size. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3495 - HTTPResponseBodySizeKey = attribute.Key("http.response.body.size") - - // HTTPResponseStatusCodeKey is the attribute Key conforming to the - // "http.response.status_code" semantic conventions. It represents the - // [HTTP response status - // code](https://tools.ietf.org/html/rfc7231#section-6). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 200 - HTTPResponseStatusCodeKey = attribute.Key("http.response.status_code") - - // HTTPRouteKey is the attribute Key conforming to the "http.route" - // semantic conventions. It represents the matched route, that is, the path - // template in the format used by the respective server framework. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/users/:userID?', '{controller}/{action}/{id?}' - // Note: MUST NOT be populated when this is not supported by the HTTP - // server framework as the route attribute should have low-cardinality and - // the URI path can NOT substitute it. - // SHOULD include the [application - // root](/docs/http/http-spans.md#http-server-definitions) if there is one. - HTTPRouteKey = attribute.Key("http.route") -) - -var ( - // CONNECT method - HTTPRequestMethodConnect = HTTPRequestMethodKey.String("CONNECT") - // DELETE method - HTTPRequestMethodDelete = HTTPRequestMethodKey.String("DELETE") - // GET method - HTTPRequestMethodGet = HTTPRequestMethodKey.String("GET") - // HEAD method - HTTPRequestMethodHead = HTTPRequestMethodKey.String("HEAD") - // OPTIONS method - HTTPRequestMethodOptions = HTTPRequestMethodKey.String("OPTIONS") - // PATCH method - HTTPRequestMethodPatch = HTTPRequestMethodKey.String("PATCH") - // POST method - HTTPRequestMethodPost = HTTPRequestMethodKey.String("POST") - // PUT method - HTTPRequestMethodPut = HTTPRequestMethodKey.String("PUT") - // TRACE method - HTTPRequestMethodTrace = HTTPRequestMethodKey.String("TRACE") - // Any HTTP method that the instrumentation has no prior knowledge of - HTTPRequestMethodOther = HTTPRequestMethodKey.String("_OTHER") -) - -// HTTPRequestBodySize returns an attribute KeyValue conforming to the -// "http.request.body.size" semantic conventions. It represents the size of the -// request payload body in bytes. This is the number of bytes transferred -// excluding headers and is often, but not always, present as the -// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) -// header. For requests using transport encoding, this should be the compressed -// size. -func HTTPRequestBodySize(val int) attribute.KeyValue { - return HTTPRequestBodySizeKey.Int(val) -} - -// HTTPRequestMethodOriginal returns an attribute KeyValue conforming to the -// "http.request.method_original" semantic conventions. It represents the -// original HTTP method sent by the client in the request line. -func HTTPRequestMethodOriginal(val string) attribute.KeyValue { - return HTTPRequestMethodOriginalKey.String(val) -} - -// HTTPRequestResendCount returns an attribute KeyValue conforming to the -// "http.request.resend_count" semantic conventions. It represents the ordinal -// number of request resending attempt (for any reason, including redirects). -func HTTPRequestResendCount(val int) attribute.KeyValue { - return HTTPRequestResendCountKey.Int(val) -} - -// HTTPResponseBodySize returns an attribute KeyValue conforming to the -// "http.response.body.size" semantic conventions. It represents the size of -// the response payload body in bytes. This is the number of bytes transferred -// excluding headers and is often, but not always, present as the -// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) -// header. For requests using transport encoding, this should be the compressed -// size. -func HTTPResponseBodySize(val int) attribute.KeyValue { - return HTTPResponseBodySizeKey.Int(val) -} - -// HTTPResponseStatusCode returns an attribute KeyValue conforming to the -// "http.response.status_code" semantic conventions. It represents the [HTTP -// response status code](https://tools.ietf.org/html/rfc7231#section-6). -func HTTPResponseStatusCode(val int) attribute.KeyValue { - return HTTPResponseStatusCodeKey.Int(val) -} - -// HTTPRoute returns an attribute KeyValue conforming to the "http.route" -// semantic conventions. It represents the matched route, that is, the path -// template in the format used by the respective server framework. -func HTTPRoute(val string) attribute.KeyValue { - return HTTPRouteKey.String(val) -} - -// Attributes describing telemetry around messaging systems and messaging -// activities. -const ( - // MessagingBatchMessageCountKey is the attribute Key conforming to the - // "messaging.batch.message_count" semantic conventions. It represents the - // number of messages sent, received, or processed in the scope of the - // batching operation. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 1, 2 - // Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on - // spans that operate with a single message. When a messaging client - // library supports both batch and single-message API for the same - // operation, instrumentations SHOULD use `messaging.batch.message_count` - // for batching APIs and SHOULD NOT use it for single-message APIs. - MessagingBatchMessageCountKey = attribute.Key("messaging.batch.message_count") - - // MessagingClientIDKey is the attribute Key conforming to the - // "messaging.client_id" semantic conventions. It represents a unique - // identifier for the client that consumes or produces a message. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'client-5', 'myhost@8742@s8083jm' - MessagingClientIDKey = attribute.Key("messaging.client_id") - - // MessagingDestinationAnonymousKey is the attribute Key conforming to the - // "messaging.destination.anonymous" semantic conventions. It represents a - // boolean that is true if the message destination is anonymous (could be - // unnamed or have auto-generated name). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingDestinationAnonymousKey = attribute.Key("messaging.destination.anonymous") - - // MessagingDestinationNameKey is the attribute Key conforming to the - // "messaging.destination.name" semantic conventions. It represents the - // message destination name - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MyQueue', 'MyTopic' - // Note: Destination name SHOULD uniquely identify a specific queue, topic - // or other entity within the broker. If - // the broker doesn't have such notion, the destination name SHOULD - // uniquely identify the broker. - MessagingDestinationNameKey = attribute.Key("messaging.destination.name") - - // MessagingDestinationTemplateKey is the attribute Key conforming to the - // "messaging.destination.template" semantic conventions. It represents the - // low cardinality representation of the messaging destination name - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/customers/{customerID}' - // Note: Destination names could be constructed from templates. An example - // would be a destination name involving a user name or product id. - // Although the destination name in this case is of high cardinality, the - // underlying template is of low cardinality and can be effectively used - // for grouping and aggregation. - MessagingDestinationTemplateKey = attribute.Key("messaging.destination.template") - - // MessagingDestinationTemporaryKey is the attribute Key conforming to the - // "messaging.destination.temporary" semantic conventions. It represents a - // boolean that is true if the message destination is temporary and might - // not exist anymore after messages are processed. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary") - - // MessagingDestinationPublishAnonymousKey is the attribute Key conforming - // to the "messaging.destination_publish.anonymous" semantic conventions. - // It represents a boolean that is true if the publish message destination - // is anonymous (could be unnamed or have auto-generated name). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingDestinationPublishAnonymousKey = attribute.Key("messaging.destination_publish.anonymous") - - // MessagingDestinationPublishNameKey is the attribute Key conforming to - // the "messaging.destination_publish.name" semantic conventions. It - // represents the name of the original destination the message was - // published to - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MyQueue', 'MyTopic' - // Note: The name SHOULD uniquely identify a specific queue, topic, or - // other entity within the broker. If - // the broker doesn't have such notion, the original destination name - // SHOULD uniquely identify the broker. - MessagingDestinationPublishNameKey = attribute.Key("messaging.destination_publish.name") - - // MessagingGCPPubsubMessageOrderingKeyKey is the attribute Key conforming - // to the "messaging.gcp_pubsub.message.ordering_key" semantic conventions. - // It represents the ordering key for a given message. If the attribute is - // not present, the message does not have an ordering key. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ordering_key' - MessagingGCPPubsubMessageOrderingKeyKey = attribute.Key("messaging.gcp_pubsub.message.ordering_key") - - // MessagingKafkaConsumerGroupKey is the attribute Key conforming to the - // "messaging.kafka.consumer.group" semantic conventions. It represents the - // name of the Kafka Consumer Group that is handling the message. Only - // applies to consumers, not producers. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'my-group' - MessagingKafkaConsumerGroupKey = attribute.Key("messaging.kafka.consumer.group") - - // MessagingKafkaDestinationPartitionKey is the attribute Key conforming to - // the "messaging.kafka.destination.partition" semantic conventions. It - // represents the partition the message is sent to. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 2 - MessagingKafkaDestinationPartitionKey = attribute.Key("messaging.kafka.destination.partition") - - // MessagingKafkaMessageKeyKey is the attribute Key conforming to the - // "messaging.kafka.message.key" semantic conventions. It represents the - // message keys in Kafka are used for grouping alike messages to ensure - // they're processed on the same partition. They differ from - // `messaging.message.id` in that they're not unique. If the key is `null`, - // the attribute MUST NOT be set. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myKey' - // Note: If the key type is not string, it's string representation has to - // be supplied for the attribute. If the key has no unambiguous, canonical - // string form, don't include its value. - MessagingKafkaMessageKeyKey = attribute.Key("messaging.kafka.message.key") - - // MessagingKafkaMessageOffsetKey is the attribute Key conforming to the - // "messaging.kafka.message.offset" semantic conventions. It represents the - // offset of a record in the corresponding Kafka partition. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 42 - MessagingKafkaMessageOffsetKey = attribute.Key("messaging.kafka.message.offset") - - // MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the - // "messaging.kafka.message.tombstone" semantic conventions. It represents - // a boolean that is true if the message is a tombstone. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone") - - // MessagingMessageBodySizeKey is the attribute Key conforming to the - // "messaging.message.body.size" semantic conventions. It represents the - // size of the message body in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1439 - // Note: This can refer to both the compressed or uncompressed body size. - // If both sizes are known, the uncompressed - // body size should be used. - MessagingMessageBodySizeKey = attribute.Key("messaging.message.body.size") - - // MessagingMessageConversationIDKey is the attribute Key conforming to the - // "messaging.message.conversation_id" semantic conventions. It represents - // the conversation ID identifying the conversation to which the message - // belongs, represented as a string. Sometimes called "Correlation ID". - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MyConversationID' - MessagingMessageConversationIDKey = attribute.Key("messaging.message.conversation_id") - - // MessagingMessageEnvelopeSizeKey is the attribute Key conforming to the - // "messaging.message.envelope.size" semantic conventions. It represents - // the size of the message body and metadata in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 2738 - // Note: This can refer to both the compressed or uncompressed size. If - // both sizes are known, the uncompressed - // size should be used. - MessagingMessageEnvelopeSizeKey = attribute.Key("messaging.message.envelope.size") - - // MessagingMessageIDKey is the attribute Key conforming to the - // "messaging.message.id" semantic conventions. It represents a value used - // by the messaging system as an identifier for the message, represented as - // a string. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '452a7c7c7c7048c2f887f61572b18fc2' - MessagingMessageIDKey = attribute.Key("messaging.message.id") - - // MessagingOperationKey is the attribute Key conforming to the - // "messaging.operation" semantic conventions. It represents a string - // identifying the kind of messaging operation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: If a custom value is used, it MUST be of low cardinality. - MessagingOperationKey = attribute.Key("messaging.operation") - - // MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key - // conforming to the "messaging.rabbitmq.destination.routing_key" semantic - // conventions. It represents the rabbitMQ message routing key. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myKey' - MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key") - - // MessagingRocketmqClientGroupKey is the attribute Key conforming to the - // "messaging.rocketmq.client_group" semantic conventions. It represents - // the name of the RocketMQ producer/consumer group that is handling the - // message. The client type is identified by the SpanKind. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myConsumerGroup' - MessagingRocketmqClientGroupKey = attribute.Key("messaging.rocketmq.client_group") - - // MessagingRocketmqConsumptionModelKey is the attribute Key conforming to - // the "messaging.rocketmq.consumption_model" semantic conventions. It - // represents the model of message consumption. This only applies to - // consumer spans. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingRocketmqConsumptionModelKey = attribute.Key("messaging.rocketmq.consumption_model") - - // MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key - // conforming to the "messaging.rocketmq.message.delay_time_level" semantic - // conventions. It represents the delay time level for delay message, which - // determines the message delay time. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3 - MessagingRocketmqMessageDelayTimeLevelKey = attribute.Key("messaging.rocketmq.message.delay_time_level") - - // MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key - // conforming to the "messaging.rocketmq.message.delivery_timestamp" - // semantic conventions. It represents the timestamp in milliseconds that - // the delay message is expected to be delivered to consumer. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1665987217045 - MessagingRocketmqMessageDeliveryTimestampKey = attribute.Key("messaging.rocketmq.message.delivery_timestamp") - - // MessagingRocketmqMessageGroupKey is the attribute Key conforming to the - // "messaging.rocketmq.message.group" semantic conventions. It represents - // the it is essential for FIFO message. Messages that belong to the same - // message group are always processed one by one within the same consumer - // group. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myMessageGroup' - MessagingRocketmqMessageGroupKey = attribute.Key("messaging.rocketmq.message.group") - - // MessagingRocketmqMessageKeysKey is the attribute Key conforming to the - // "messaging.rocketmq.message.keys" semantic conventions. It represents - // the key(s) of message, another way to mark message besides message id. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'keyA', 'keyB' - MessagingRocketmqMessageKeysKey = attribute.Key("messaging.rocketmq.message.keys") - - // MessagingRocketmqMessageTagKey is the attribute Key conforming to the - // "messaging.rocketmq.message.tag" semantic conventions. It represents the - // secondary classifier of message besides topic. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'tagA' - MessagingRocketmqMessageTagKey = attribute.Key("messaging.rocketmq.message.tag") - - // MessagingRocketmqMessageTypeKey is the attribute Key conforming to the - // "messaging.rocketmq.message.type" semantic conventions. It represents - // the type of message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingRocketmqMessageTypeKey = attribute.Key("messaging.rocketmq.message.type") - - // MessagingRocketmqNamespaceKey is the attribute Key conforming to the - // "messaging.rocketmq.namespace" semantic conventions. It represents the - // namespace of RocketMQ resources, resources in different namespaces are - // individual. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myNamespace' - MessagingRocketmqNamespaceKey = attribute.Key("messaging.rocketmq.namespace") - - // MessagingSystemKey is the attribute Key conforming to the - // "messaging.system" semantic conventions. It represents an identifier for - // the messaging system being used. See below for a list of well-known - // identifiers. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingSystemKey = attribute.Key("messaging.system") -) - -var ( - // One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the "Publish" span can be used as the creation context and no "Create" span needs to be created - MessagingOperationPublish = MessagingOperationKey.String("publish") - // A message is created. "Create" spans always refer to a single message and are used to provide a unique creation context for messages in batch publishing scenarios - MessagingOperationCreate = MessagingOperationKey.String("create") - // One or more messages are requested by a consumer. This operation refers to pull-based scenarios, where consumers explicitly call methods of messaging SDKs to receive messages - MessagingOperationReceive = MessagingOperationKey.String("receive") - // One or more messages are passed to a consumer. This operation refers to push-based scenarios, where consumer register callbacks which get called by messaging SDKs - MessagingOperationDeliver = MessagingOperationKey.String("deliver") -) - -var ( - // Clustering consumption model - MessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String("clustering") - // Broadcasting consumption model - MessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String("broadcasting") -) - -var ( - // Normal message - MessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String("normal") - // FIFO message - MessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String("fifo") - // Delay message - MessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String("delay") - // Transaction message - MessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String("transaction") -) - -var ( - // Apache ActiveMQ - MessagingSystemActivemq = MessagingSystemKey.String("activemq") - // Amazon Simple Queue Service (SQS) - MessagingSystemAWSSqs = MessagingSystemKey.String("aws_sqs") - // Azure Event Grid - MessagingSystemAzureEventgrid = MessagingSystemKey.String("azure_eventgrid") - // Azure Event Hubs - MessagingSystemAzureEventhubs = MessagingSystemKey.String("azure_eventhubs") - // Azure Service Bus - MessagingSystemAzureServicebus = MessagingSystemKey.String("azure_servicebus") - // Google Cloud Pub/Sub - MessagingSystemGCPPubsub = MessagingSystemKey.String("gcp_pubsub") - // Java Message Service - MessagingSystemJms = MessagingSystemKey.String("jms") - // Apache Kafka - MessagingSystemKafka = MessagingSystemKey.String("kafka") - // RabbitMQ - MessagingSystemRabbitmq = MessagingSystemKey.String("rabbitmq") - // Apache RocketMQ - MessagingSystemRocketmq = MessagingSystemKey.String("rocketmq") -) - -// MessagingBatchMessageCount returns an attribute KeyValue conforming to -// the "messaging.batch.message_count" semantic conventions. It represents the -// number of messages sent, received, or processed in the scope of the batching -// operation. -func MessagingBatchMessageCount(val int) attribute.KeyValue { - return MessagingBatchMessageCountKey.Int(val) -} - -// MessagingClientID returns an attribute KeyValue conforming to the -// "messaging.client_id" semantic conventions. It represents a unique -// identifier for the client that consumes or produces a message. -func MessagingClientID(val string) attribute.KeyValue { - return MessagingClientIDKey.String(val) -} - -// MessagingDestinationAnonymous returns an attribute KeyValue conforming to -// the "messaging.destination.anonymous" semantic conventions. It represents a -// boolean that is true if the message destination is anonymous (could be -// unnamed or have auto-generated name). -func MessagingDestinationAnonymous(val bool) attribute.KeyValue { - return MessagingDestinationAnonymousKey.Bool(val) -} - -// MessagingDestinationName returns an attribute KeyValue conforming to the -// "messaging.destination.name" semantic conventions. It represents the message -// destination name -func MessagingDestinationName(val string) attribute.KeyValue { - return MessagingDestinationNameKey.String(val) -} - -// MessagingDestinationTemplate returns an attribute KeyValue conforming to -// the "messaging.destination.template" semantic conventions. It represents the -// low cardinality representation of the messaging destination name -func MessagingDestinationTemplate(val string) attribute.KeyValue { - return MessagingDestinationTemplateKey.String(val) -} - -// MessagingDestinationTemporary returns an attribute KeyValue conforming to -// the "messaging.destination.temporary" semantic conventions. It represents a -// boolean that is true if the message destination is temporary and might not -// exist anymore after messages are processed. -func MessagingDestinationTemporary(val bool) attribute.KeyValue { - return MessagingDestinationTemporaryKey.Bool(val) -} - -// MessagingDestinationPublishAnonymous returns an attribute KeyValue -// conforming to the "messaging.destination_publish.anonymous" semantic -// conventions. It represents a boolean that is true if the publish message -// destination is anonymous (could be unnamed or have auto-generated name). -func MessagingDestinationPublishAnonymous(val bool) attribute.KeyValue { - return MessagingDestinationPublishAnonymousKey.Bool(val) -} - -// MessagingDestinationPublishName returns an attribute KeyValue conforming -// to the "messaging.destination_publish.name" semantic conventions. It -// represents the name of the original destination the message was published to -func MessagingDestinationPublishName(val string) attribute.KeyValue { - return MessagingDestinationPublishNameKey.String(val) -} - -// MessagingGCPPubsubMessageOrderingKey returns an attribute KeyValue -// conforming to the "messaging.gcp_pubsub.message.ordering_key" semantic -// conventions. It represents the ordering key for a given message. If the -// attribute is not present, the message does not have an ordering key. -func MessagingGCPPubsubMessageOrderingKey(val string) attribute.KeyValue { - return MessagingGCPPubsubMessageOrderingKeyKey.String(val) -} - -// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to -// the "messaging.kafka.consumer.group" semantic conventions. It represents the -// name of the Kafka Consumer Group that is handling the message. Only applies -// to consumers, not producers. -func MessagingKafkaConsumerGroup(val string) attribute.KeyValue { - return MessagingKafkaConsumerGroupKey.String(val) -} - -// MessagingKafkaDestinationPartition returns an attribute KeyValue -// conforming to the "messaging.kafka.destination.partition" semantic -// conventions. It represents the partition the message is sent to. -func MessagingKafkaDestinationPartition(val int) attribute.KeyValue { - return MessagingKafkaDestinationPartitionKey.Int(val) -} - -// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the -// "messaging.kafka.message.key" semantic conventions. It represents the -// message keys in Kafka are used for grouping alike messages to ensure they're -// processed on the same partition. They differ from `messaging.message.id` in -// that they're not unique. If the key is `null`, the attribute MUST NOT be -// set. -func MessagingKafkaMessageKey(val string) attribute.KeyValue { - return MessagingKafkaMessageKeyKey.String(val) -} - -// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to -// the "messaging.kafka.message.offset" semantic conventions. It represents the -// offset of a record in the corresponding Kafka partition. -func MessagingKafkaMessageOffset(val int) attribute.KeyValue { - return MessagingKafkaMessageOffsetKey.Int(val) -} - -// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming -// to the "messaging.kafka.message.tombstone" semantic conventions. It -// represents a boolean that is true if the message is a tombstone. -func MessagingKafkaMessageTombstone(val bool) attribute.KeyValue { - return MessagingKafkaMessageTombstoneKey.Bool(val) -} - -// MessagingMessageBodySize returns an attribute KeyValue conforming to the -// "messaging.message.body.size" semantic conventions. It represents the size -// of the message body in bytes. -func MessagingMessageBodySize(val int) attribute.KeyValue { - return MessagingMessageBodySizeKey.Int(val) -} - -// MessagingMessageConversationID returns an attribute KeyValue conforming -// to the "messaging.message.conversation_id" semantic conventions. It -// represents the conversation ID identifying the conversation to which the -// message belongs, represented as a string. Sometimes called "Correlation ID". -func MessagingMessageConversationID(val string) attribute.KeyValue { - return MessagingMessageConversationIDKey.String(val) -} - -// MessagingMessageEnvelopeSize returns an attribute KeyValue conforming to -// the "messaging.message.envelope.size" semantic conventions. It represents -// the size of the message body and metadata in bytes. -func MessagingMessageEnvelopeSize(val int) attribute.KeyValue { - return MessagingMessageEnvelopeSizeKey.Int(val) -} - -// MessagingMessageID returns an attribute KeyValue conforming to the -// "messaging.message.id" semantic conventions. It represents a value used by -// the messaging system as an identifier for the message, represented as a -// string. -func MessagingMessageID(val string) attribute.KeyValue { - return MessagingMessageIDKey.String(val) -} - -// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue -// conforming to the "messaging.rabbitmq.destination.routing_key" semantic -// conventions. It represents the rabbitMQ message routing key. -func MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue { - return MessagingRabbitmqDestinationRoutingKeyKey.String(val) -} - -// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to -// the "messaging.rocketmq.client_group" semantic conventions. It represents -// the name of the RocketMQ producer/consumer group that is handling the -// message. The client type is identified by the SpanKind. -func MessagingRocketmqClientGroup(val string) attribute.KeyValue { - return MessagingRocketmqClientGroupKey.String(val) -} - -// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue -// conforming to the "messaging.rocketmq.message.delay_time_level" semantic -// conventions. It represents the delay time level for delay message, which -// determines the message delay time. -func MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue { - return MessagingRocketmqMessageDelayTimeLevelKey.Int(val) -} - -// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue -// conforming to the "messaging.rocketmq.message.delivery_timestamp" semantic -// conventions. It represents the timestamp in milliseconds that the delay -// message is expected to be delivered to consumer. -func MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue { - return MessagingRocketmqMessageDeliveryTimestampKey.Int(val) -} - -// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.group" semantic conventions. It represents -// the it is essential for FIFO message. Messages that belong to the same -// message group are always processed one by one within the same consumer -// group. -func MessagingRocketmqMessageGroup(val string) attribute.KeyValue { - return MessagingRocketmqMessageGroupKey.String(val) -} - -// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.keys" semantic conventions. It represents -// the key(s) of message, another way to mark message besides message id. -func MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue { - return MessagingRocketmqMessageKeysKey.StringSlice(val) -} - -// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.tag" semantic conventions. It represents the -// secondary classifier of message besides topic. -func MessagingRocketmqMessageTag(val string) attribute.KeyValue { - return MessagingRocketmqMessageTagKey.String(val) -} - -// MessagingRocketmqNamespace returns an attribute KeyValue conforming to -// the "messaging.rocketmq.namespace" semantic conventions. It represents the -// namespace of RocketMQ resources, resources in different namespaces are -// individual. -func MessagingRocketmqNamespace(val string) attribute.KeyValue { - return MessagingRocketmqNamespaceKey.String(val) -} - -// These attributes may be used for any network related operation. -const ( - // NetworkCarrierIccKey is the attribute Key conforming to the - // "network.carrier.icc" semantic conventions. It represents the ISO 3166-1 - // alpha-2 2-character country code associated with the mobile carrier - // network. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'DE' - NetworkCarrierIccKey = attribute.Key("network.carrier.icc") - - // NetworkCarrierMccKey is the attribute Key conforming to the - // "network.carrier.mcc" semantic conventions. It represents the mobile - // carrier country code. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '310' - NetworkCarrierMccKey = attribute.Key("network.carrier.mcc") - - // NetworkCarrierMncKey is the attribute Key conforming to the - // "network.carrier.mnc" semantic conventions. It represents the mobile - // carrier network code. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '001' - NetworkCarrierMncKey = attribute.Key("network.carrier.mnc") - - // NetworkCarrierNameKey is the attribute Key conforming to the - // "network.carrier.name" semantic conventions. It represents the name of - // the mobile carrier. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'sprint' - NetworkCarrierNameKey = attribute.Key("network.carrier.name") - - // NetworkConnectionSubtypeKey is the attribute Key conforming to the - // "network.connection.subtype" semantic conventions. It represents the - // this describes more details regarding the connection.type. It may be the - // type of cell technology connection, but it could be used for describing - // details about a wifi connection. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'LTE' - NetworkConnectionSubtypeKey = attribute.Key("network.connection.subtype") - - // NetworkConnectionTypeKey is the attribute Key conforming to the - // "network.connection.type" semantic conventions. It represents the - // internet connection type. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'wifi' - NetworkConnectionTypeKey = attribute.Key("network.connection.type") - - // NetworkIoDirectionKey is the attribute Key conforming to the - // "network.io.direction" semantic conventions. It represents the network - // IO operation direction. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'transmit' - NetworkIoDirectionKey = attribute.Key("network.io.direction") - - // NetworkLocalAddressKey is the attribute Key conforming to the - // "network.local.address" semantic conventions. It represents the local - // address of the network connection - IP address or Unix domain socket - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '10.1.2.80', '/tmp/my.sock' - NetworkLocalAddressKey = attribute.Key("network.local.address") - - // NetworkLocalPortKey is the attribute Key conforming to the - // "network.local.port" semantic conventions. It represents the local port - // number of the network connection. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 65123 - NetworkLocalPortKey = attribute.Key("network.local.port") - - // NetworkPeerAddressKey is the attribute Key conforming to the - // "network.peer.address" semantic conventions. It represents the peer - // address of the network connection - IP address or Unix domain socket - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '10.1.2.80', '/tmp/my.sock' - NetworkPeerAddressKey = attribute.Key("network.peer.address") - - // NetworkPeerPortKey is the attribute Key conforming to the - // "network.peer.port" semantic conventions. It represents the peer port - // number of the network connection. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 65123 - NetworkPeerPortKey = attribute.Key("network.peer.port") - - // NetworkProtocolNameKey is the attribute Key conforming to the - // "network.protocol.name" semantic conventions. It represents the [OSI - // application layer](https://osi-model.com/application-layer/) or non-OSI - // equivalent. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'amqp', 'http', 'mqtt' - // Note: The value SHOULD be normalized to lowercase. - NetworkProtocolNameKey = attribute.Key("network.protocol.name") - - // NetworkProtocolVersionKey is the attribute Key conforming to the - // "network.protocol.version" semantic conventions. It represents the - // version of the protocol specified in `network.protocol.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '3.1.1' - // Note: `network.protocol.version` refers to the version of the protocol - // used and might be different from the protocol client's version. If the - // HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, - // this attribute should be set to `1.1`. - NetworkProtocolVersionKey = attribute.Key("network.protocol.version") - - // NetworkTransportKey is the attribute Key conforming to the - // "network.transport" semantic conventions. It represents the [OSI - // transport layer](https://osi-model.com/transport-layer/) or - // [inter-process communication - // method](https://wikipedia.org/wiki/Inter-process_communication). - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'tcp', 'udp' - // Note: The value SHOULD be normalized to lowercase. - // - // Consider always setting the transport when setting a port number, since - // a port number is ambiguous without knowing the transport. For example - // different processes could be listening on TCP port 12345 and UDP port - // 12345. - NetworkTransportKey = attribute.Key("network.transport") - - // NetworkTypeKey is the attribute Key conforming to the "network.type" - // semantic conventions. It represents the [OSI network - // layer](https://osi-model.com/network-layer/) or non-OSI equivalent. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'ipv4', 'ipv6' - // Note: The value SHOULD be normalized to lowercase. - NetworkTypeKey = attribute.Key("network.type") -) - -var ( - // GPRS - NetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String("gprs") - // EDGE - NetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String("edge") - // UMTS - NetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String("umts") - // CDMA - NetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String("cdma") - // EVDO Rel. 0 - NetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String("evdo_0") - // EVDO Rev. A - NetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String("evdo_a") - // CDMA2000 1XRTT - NetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String("cdma2000_1xrtt") - // HSDPA - NetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String("hsdpa") - // HSUPA - NetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String("hsupa") - // HSPA - NetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String("hspa") - // IDEN - NetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String("iden") - // EVDO Rev. B - NetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String("evdo_b") - // LTE - NetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String("lte") - // EHRPD - NetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String("ehrpd") - // HSPAP - NetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String("hspap") - // GSM - NetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String("gsm") - // TD-SCDMA - NetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String("td_scdma") - // IWLAN - NetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String("iwlan") - // 5G NR (New Radio) - NetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String("nr") - // 5G NRNSA (New Radio Non-Standalone) - NetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String("nrnsa") - // LTE CA - NetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String("lte_ca") -) - -var ( - // wifi - NetworkConnectionTypeWifi = NetworkConnectionTypeKey.String("wifi") - // wired - NetworkConnectionTypeWired = NetworkConnectionTypeKey.String("wired") - // cell - NetworkConnectionTypeCell = NetworkConnectionTypeKey.String("cell") - // unavailable - NetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String("unavailable") - // unknown - NetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String("unknown") -) - -var ( - // transmit - NetworkIoDirectionTransmit = NetworkIoDirectionKey.String("transmit") - // receive - NetworkIoDirectionReceive = NetworkIoDirectionKey.String("receive") -) - -var ( - // TCP - NetworkTransportTCP = NetworkTransportKey.String("tcp") - // UDP - NetworkTransportUDP = NetworkTransportKey.String("udp") - // Named or anonymous pipe - NetworkTransportPipe = NetworkTransportKey.String("pipe") - // Unix domain socket - NetworkTransportUnix = NetworkTransportKey.String("unix") -) - -var ( - // IPv4 - NetworkTypeIpv4 = NetworkTypeKey.String("ipv4") - // IPv6 - NetworkTypeIpv6 = NetworkTypeKey.String("ipv6") -) - -// NetworkCarrierIcc returns an attribute KeyValue conforming to the -// "network.carrier.icc" semantic conventions. It represents the ISO 3166-1 -// alpha-2 2-character country code associated with the mobile carrier network. -func NetworkCarrierIcc(val string) attribute.KeyValue { - return NetworkCarrierIccKey.String(val) -} - -// NetworkCarrierMcc returns an attribute KeyValue conforming to the -// "network.carrier.mcc" semantic conventions. It represents the mobile carrier -// country code. -func NetworkCarrierMcc(val string) attribute.KeyValue { - return NetworkCarrierMccKey.String(val) -} - -// NetworkCarrierMnc returns an attribute KeyValue conforming to the -// "network.carrier.mnc" semantic conventions. It represents the mobile carrier -// network code. -func NetworkCarrierMnc(val string) attribute.KeyValue { - return NetworkCarrierMncKey.String(val) -} - -// NetworkCarrierName returns an attribute KeyValue conforming to the -// "network.carrier.name" semantic conventions. It represents the name of the -// mobile carrier. -func NetworkCarrierName(val string) attribute.KeyValue { - return NetworkCarrierNameKey.String(val) -} - -// NetworkLocalAddress returns an attribute KeyValue conforming to the -// "network.local.address" semantic conventions. It represents the local -// address of the network connection - IP address or Unix domain socket name. -func NetworkLocalAddress(val string) attribute.KeyValue { - return NetworkLocalAddressKey.String(val) -} - -// NetworkLocalPort returns an attribute KeyValue conforming to the -// "network.local.port" semantic conventions. It represents the local port -// number of the network connection. -func NetworkLocalPort(val int) attribute.KeyValue { - return NetworkLocalPortKey.Int(val) -} - -// NetworkPeerAddress returns an attribute KeyValue conforming to the -// "network.peer.address" semantic conventions. It represents the peer address -// of the network connection - IP address or Unix domain socket name. -func NetworkPeerAddress(val string) attribute.KeyValue { - return NetworkPeerAddressKey.String(val) -} - -// NetworkPeerPort returns an attribute KeyValue conforming to the -// "network.peer.port" semantic conventions. It represents the peer port number -// of the network connection. -func NetworkPeerPort(val int) attribute.KeyValue { - return NetworkPeerPortKey.Int(val) -} - -// NetworkProtocolName returns an attribute KeyValue conforming to the -// "network.protocol.name" semantic conventions. It represents the [OSI -// application layer](https://osi-model.com/application-layer/) or non-OSI -// equivalent. -func NetworkProtocolName(val string) attribute.KeyValue { - return NetworkProtocolNameKey.String(val) -} - -// NetworkProtocolVersion returns an attribute KeyValue conforming to the -// "network.protocol.version" semantic conventions. It represents the version -// of the protocol specified in `network.protocol.name`. -func NetworkProtocolVersion(val string) attribute.KeyValue { - return NetworkProtocolVersionKey.String(val) -} - -// Attributes for remote procedure calls. -const ( - // RPCConnectRPCErrorCodeKey is the attribute Key conforming to the - // "rpc.connect_rpc.error_code" semantic conventions. It represents the - // [error codes](https://connect.build/docs/protocol/#error-codes) of the - // Connect request. Error codes are always string values. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCConnectRPCErrorCodeKey = attribute.Key("rpc.connect_rpc.error_code") - - // RPCGRPCStatusCodeKey is the attribute Key conforming to the - // "rpc.grpc.status_code" semantic conventions. It represents the [numeric - // status - // code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of - // the gRPC request. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCGRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code") - - // RPCJsonrpcErrorCodeKey is the attribute Key conforming to the - // "rpc.jsonrpc.error_code" semantic conventions. It represents the - // `error.code` property of response if it is an error response. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: -32700, 100 - RPCJsonrpcErrorCodeKey = attribute.Key("rpc.jsonrpc.error_code") - - // RPCJsonrpcErrorMessageKey is the attribute Key conforming to the - // "rpc.jsonrpc.error_message" semantic conventions. It represents the - // `error.message` property of response if it is an error response. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Parse error', 'User already exists' - RPCJsonrpcErrorMessageKey = attribute.Key("rpc.jsonrpc.error_message") - - // RPCJsonrpcRequestIDKey is the attribute Key conforming to the - // "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` - // property of request or response. Since protocol allows id to be int, - // string, `null` or missing (for notifications), value is expected to be - // cast to string for simplicity. Use empty string in case of `null` value. - // Omit entirely if this is a notification. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '10', 'request-7', '' - RPCJsonrpcRequestIDKey = attribute.Key("rpc.jsonrpc.request_id") - - // RPCJsonrpcVersionKey is the attribute Key conforming to the - // "rpc.jsonrpc.version" semantic conventions. It represents the protocol - // version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 - // doesn't specify this, the value can be omitted. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2.0', '1.0' - RPCJsonrpcVersionKey = attribute.Key("rpc.jsonrpc.version") - - // RPCMethodKey is the attribute Key conforming to the "rpc.method" - // semantic conventions. It represents the name of the (logical) method - // being called, must be equal to the $method part in the span name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'exampleMethod' - // Note: This is the logical name of the method from the RPC interface - // perspective, which can be different from the name of any implementing - // method/function. The `code.function` attribute may be used to store the - // latter (e.g., method actually executing the call on the server side, RPC - // client stub method on the client side). - RPCMethodKey = attribute.Key("rpc.method") - - // RPCServiceKey is the attribute Key conforming to the "rpc.service" - // semantic conventions. It represents the full (logical) name of the - // service being called, including its package name, if applicable. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myservice.EchoService' - // Note: This is the logical name of the service from the RPC interface - // perspective, which can be different from the name of any implementing - // class. The `code.namespace` attribute may be used to store the latter - // (despite the attribute name, it may include a class name; e.g., class - // with method actually executing the call on the server side, RPC client - // stub class on the client side). - RPCServiceKey = attribute.Key("rpc.service") - - // RPCSystemKey is the attribute Key conforming to the "rpc.system" - // semantic conventions. It represents a string identifying the remoting - // system. See below for a list of well-known identifiers. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCSystemKey = attribute.Key("rpc.system") -) - -var ( - // cancelled - RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled") - // unknown - RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown") - // invalid_argument - RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument") - // deadline_exceeded - RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded") - // not_found - RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found") - // already_exists - RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists") - // permission_denied - RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied") - // resource_exhausted - RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted") - // failed_precondition - RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition") - // aborted - RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted") - // out_of_range - RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range") - // unimplemented - RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented") - // internal - RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal") - // unavailable - RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable") - // data_loss - RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss") - // unauthenticated - RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated") -) - -var ( - // OK - RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0) - // CANCELLED - RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1) - // UNKNOWN - RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2) - // INVALID_ARGUMENT - RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3) - // DEADLINE_EXCEEDED - RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4) - // NOT_FOUND - RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5) - // ALREADY_EXISTS - RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6) - // PERMISSION_DENIED - RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7) - // RESOURCE_EXHAUSTED - RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8) - // FAILED_PRECONDITION - RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9) - // ABORTED - RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10) - // OUT_OF_RANGE - RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11) - // UNIMPLEMENTED - RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12) - // INTERNAL - RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13) - // UNAVAILABLE - RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14) - // DATA_LOSS - RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15) - // UNAUTHENTICATED - RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16) -) - -var ( - // gRPC - RPCSystemGRPC = RPCSystemKey.String("grpc") - // Java RMI - RPCSystemJavaRmi = RPCSystemKey.String("java_rmi") - // .NET WCF - RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf") - // Apache Dubbo - RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo") - // Connect RPC - RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc") -) - -// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.error_code" semantic conventions. It represents the -// `error.code` property of response if it is an error response. -func RPCJsonrpcErrorCode(val int) attribute.KeyValue { - return RPCJsonrpcErrorCodeKey.Int(val) -} - -// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.error_message" semantic conventions. It represents the -// `error.message` property of response if it is an error response. -func RPCJsonrpcErrorMessage(val string) attribute.KeyValue { - return RPCJsonrpcErrorMessageKey.String(val) -} - -// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` -// property of request or response. Since protocol allows id to be int, string, -// `null` or missing (for notifications), value is expected to be cast to -// string for simplicity. Use empty string in case of `null` value. Omit -// entirely if this is a notification. -func RPCJsonrpcRequestID(val string) attribute.KeyValue { - return RPCJsonrpcRequestIDKey.String(val) -} - -// RPCJsonrpcVersion returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.version" semantic conventions. It represents the protocol -// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 -// doesn't specify this, the value can be omitted. -func RPCJsonrpcVersion(val string) attribute.KeyValue { - return RPCJsonrpcVersionKey.String(val) -} - -// RPCMethod returns an attribute KeyValue conforming to the "rpc.method" -// semantic conventions. It represents the name of the (logical) method being -// called, must be equal to the $method part in the span name. -func RPCMethod(val string) attribute.KeyValue { - return RPCMethodKey.String(val) -} - -// RPCService returns an attribute KeyValue conforming to the "rpc.service" -// semantic conventions. It represents the full (logical) name of the service -// being called, including its package name, if applicable. -func RPCService(val string) attribute.KeyValue { - return RPCServiceKey.String(val) -} - -// These attributes may be used to describe the server in a connection-based -// network interaction where there is one side that initiates the connection -// (the client is the side that initiates the connection). This covers all TCP -// network interactions since TCP is connection-based and one side initiates -// the connection (an exception is made for peer-to-peer communication over TCP -// where the "user-facing" surface of the protocol / API doesn't expose a clear -// notion of client and server). This also covers UDP network interactions -// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS. -const ( - // ServerAddressKey is the attribute Key conforming to the "server.address" - // semantic conventions. It represents the server domain name if available - // without reverse DNS lookup; otherwise, IP address or Unix domain socket - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the client side, and when communicating through - // an intermediary, `server.address` SHOULD represent the server address - // behind any intermediaries, for example proxies, if it's available. - ServerAddressKey = attribute.Key("server.address") - - // ServerPortKey is the attribute Key conforming to the "server.port" - // semantic conventions. It represents the server port number. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 80, 8080, 443 - // Note: When observed from the client side, and when communicating through - // an intermediary, `server.port` SHOULD represent the server port behind - // any intermediaries, for example proxies, if it's available. - ServerPortKey = attribute.Key("server.port") -) - -// ServerAddress returns an attribute KeyValue conforming to the -// "server.address" semantic conventions. It represents the server domain name -// if available without reverse DNS lookup; otherwise, IP address or Unix -// domain socket name. -func ServerAddress(val string) attribute.KeyValue { - return ServerAddressKey.String(val) -} - -// ServerPort returns an attribute KeyValue conforming to the "server.port" -// semantic conventions. It represents the server port number. -func ServerPort(val int) attribute.KeyValue { - return ServerPortKey.Int(val) -} - -// These attributes may be used to describe the sender of a network -// exchange/packet. These should be used when there is no client/server -// relationship between the two sides, or when that relationship is unknown. -// This covers low-level network interactions (e.g. packet tracing) where you -// don't know if there was a connection or which side initiated it. This also -// covers unidirectional UDP flows and peer-to-peer communication where the -// "user-facing" surface of the protocol / API doesn't expose a clear notion of -// client and server. -const ( - // SourceAddressKey is the attribute Key conforming to the "source.address" - // semantic conventions. It represents the source address - domain name if - // available without reverse DNS lookup; otherwise, IP address or Unix - // domain socket name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'source.example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the destination side, and when communicating - // through an intermediary, `source.address` SHOULD represent the source - // address behind any intermediaries, for example proxies, if it's - // available. - SourceAddressKey = attribute.Key("source.address") - - // SourcePortKey is the attribute Key conforming to the "source.port" - // semantic conventions. It represents the source port number - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3389, 2888 - SourcePortKey = attribute.Key("source.port") -) - -// SourceAddress returns an attribute KeyValue conforming to the -// "source.address" semantic conventions. It represents the source address - -// domain name if available without reverse DNS lookup; otherwise, IP address -// or Unix domain socket name. -func SourceAddress(val string) attribute.KeyValue { - return SourceAddressKey.String(val) -} - -// SourcePort returns an attribute KeyValue conforming to the "source.port" -// semantic conventions. It represents the source port number -func SourcePort(val int) attribute.KeyValue { - return SourcePortKey.Int(val) -} - -// Semantic convention attributes in the TLS namespace. -const ( - // TLSCipherKey is the attribute Key conforming to the "tls.cipher" - // semantic conventions. It represents the string indicating the - // [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) - // used during the current connection. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'TLS_RSA_WITH_3DES_EDE_CBC_SHA', - // 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256' - // Note: The values allowed for `tls.cipher` MUST be one of the - // `Descriptions` of the [registered TLS Cipher - // Suits](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4). - TLSCipherKey = attribute.Key("tls.cipher") - - // TLSClientCertificateKey is the attribute Key conforming to the - // "tls.client.certificate" semantic conventions. It represents the - // pEM-encoded stand-alone certificate offered by the client. This is - // usually mutually-exclusive of `client.certificate_chain` since this - // value also exists in that list. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...' - TLSClientCertificateKey = attribute.Key("tls.client.certificate") - - // TLSClientCertificateChainKey is the attribute Key conforming to the - // "tls.client.certificate_chain" semantic conventions. It represents the - // array of PEM-encoded certificates that make up the certificate chain - // offered by the client. This is usually mutually-exclusive of - // `client.certificate` since that value should be the first certificate in - // the chain. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...', 'MI...' - TLSClientCertificateChainKey = attribute.Key("tls.client.certificate_chain") - - // TLSClientHashMd5Key is the attribute Key conforming to the - // "tls.client.hash.md5" semantic conventions. It represents the - // certificate fingerprint using the MD5 digest of DER-encoded version of - // certificate offered by the client. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC' - TLSClientHashMd5Key = attribute.Key("tls.client.hash.md5") - - // TLSClientHashSha1Key is the attribute Key conforming to the - // "tls.client.hash.sha1" semantic conventions. It represents the - // certificate fingerprint using the SHA1 digest of DER-encoded version of - // certificate offered by the client. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A' - TLSClientHashSha1Key = attribute.Key("tls.client.hash.sha1") - - // TLSClientHashSha256Key is the attribute Key conforming to the - // "tls.client.hash.sha256" semantic conventions. It represents the - // certificate fingerprint using the SHA256 digest of DER-encoded version - // of certificate offered by the client. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0' - TLSClientHashSha256Key = attribute.Key("tls.client.hash.sha256") - - // TLSClientIssuerKey is the attribute Key conforming to the - // "tls.client.issuer" semantic conventions. It represents the - // distinguished name of - // [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) - // of the issuer of the x.509 certificate presented by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, - // DC=com' - TLSClientIssuerKey = attribute.Key("tls.client.issuer") - - // TLSClientJa3Key is the attribute Key conforming to the "tls.client.ja3" - // semantic conventions. It represents a hash that identifies clients based - // on how they perform an SSL/TLS handshake. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'd4e5b18d6b55c71272893221c96ba240' - TLSClientJa3Key = attribute.Key("tls.client.ja3") - - // TLSClientNotAfterKey is the attribute Key conforming to the - // "tls.client.not_after" semantic conventions. It represents the date/Time - // indicating when client certificate is no longer considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2021-01-01T00:00:00.000Z' - TLSClientNotAfterKey = attribute.Key("tls.client.not_after") - - // TLSClientNotBeforeKey is the attribute Key conforming to the - // "tls.client.not_before" semantic conventions. It represents the - // date/Time indicating when client certificate is first considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1970-01-01T00:00:00.000Z' - TLSClientNotBeforeKey = attribute.Key("tls.client.not_before") - - // TLSClientServerNameKey is the attribute Key conforming to the - // "tls.client.server_name" semantic conventions. It represents the also - // called an SNI, this tells the server which hostname to which the client - // is attempting to connect to. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry.io' - TLSClientServerNameKey = attribute.Key("tls.client.server_name") - - // TLSClientSubjectKey is the attribute Key conforming to the - // "tls.client.subject" semantic conventions. It represents the - // distinguished name of subject of the x.509 certificate presented by the - // client. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=myclient, OU=Documentation Team, DC=example, DC=com' - TLSClientSubjectKey = attribute.Key("tls.client.subject") - - // TLSClientSupportedCiphersKey is the attribute Key conforming to the - // "tls.client.supported_ciphers" semantic conventions. It represents the - // array of ciphers offered by the client during the client hello. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", - // "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."' - TLSClientSupportedCiphersKey = attribute.Key("tls.client.supported_ciphers") - - // TLSCurveKey is the attribute Key conforming to the "tls.curve" semantic - // conventions. It represents the string indicating the curve used for the - // given cipher, when applicable - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'secp256r1' - TLSCurveKey = attribute.Key("tls.curve") - - // TLSEstablishedKey is the attribute Key conforming to the - // "tls.established" semantic conventions. It represents the boolean flag - // indicating if the TLS negotiation was successful and transitioned to an - // encrypted tunnel. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Examples: True - TLSEstablishedKey = attribute.Key("tls.established") - - // TLSNextProtocolKey is the attribute Key conforming to the - // "tls.next_protocol" semantic conventions. It represents the string - // indicating the protocol being tunneled. Per the values in the [IANA - // registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), - // this string should be lower case. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'http/1.1' - TLSNextProtocolKey = attribute.Key("tls.next_protocol") - - // TLSProtocolNameKey is the attribute Key conforming to the - // "tls.protocol.name" semantic conventions. It represents the normalized - // lowercase protocol name parsed from original string of the negotiated - // [SSL/TLS protocol - // version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - TLSProtocolNameKey = attribute.Key("tls.protocol.name") - - // TLSProtocolVersionKey is the attribute Key conforming to the - // "tls.protocol.version" semantic conventions. It represents the numeric - // part of the version parsed from the original string of the negotiated - // [SSL/TLS protocol - // version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.2', '3' - TLSProtocolVersionKey = attribute.Key("tls.protocol.version") - - // TLSResumedKey is the attribute Key conforming to the "tls.resumed" - // semantic conventions. It represents the boolean flag indicating if this - // TLS connection was resumed from an existing TLS negotiation. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Examples: True - TLSResumedKey = attribute.Key("tls.resumed") - - // TLSServerCertificateKey is the attribute Key conforming to the - // "tls.server.certificate" semantic conventions. It represents the - // pEM-encoded stand-alone certificate offered by the server. This is - // usually mutually-exclusive of `server.certificate_chain` since this - // value also exists in that list. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...' - TLSServerCertificateKey = attribute.Key("tls.server.certificate") - - // TLSServerCertificateChainKey is the attribute Key conforming to the - // "tls.server.certificate_chain" semantic conventions. It represents the - // array of PEM-encoded certificates that make up the certificate chain - // offered by the server. This is usually mutually-exclusive of - // `server.certificate` since that value should be the first certificate in - // the chain. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...', 'MI...' - TLSServerCertificateChainKey = attribute.Key("tls.server.certificate_chain") - - // TLSServerHashMd5Key is the attribute Key conforming to the - // "tls.server.hash.md5" semantic conventions. It represents the - // certificate fingerprint using the MD5 digest of DER-encoded version of - // certificate offered by the server. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC' - TLSServerHashMd5Key = attribute.Key("tls.server.hash.md5") - - // TLSServerHashSha1Key is the attribute Key conforming to the - // "tls.server.hash.sha1" semantic conventions. It represents the - // certificate fingerprint using the SHA1 digest of DER-encoded version of - // certificate offered by the server. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A' - TLSServerHashSha1Key = attribute.Key("tls.server.hash.sha1") - - // TLSServerHashSha256Key is the attribute Key conforming to the - // "tls.server.hash.sha256" semantic conventions. It represents the - // certificate fingerprint using the SHA256 digest of DER-encoded version - // of certificate offered by the server. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0' - TLSServerHashSha256Key = attribute.Key("tls.server.hash.sha256") - - // TLSServerIssuerKey is the attribute Key conforming to the - // "tls.server.issuer" semantic conventions. It represents the - // distinguished name of - // [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) - // of the issuer of the x.509 certificate presented by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, - // DC=com' - TLSServerIssuerKey = attribute.Key("tls.server.issuer") - - // TLSServerJa3sKey is the attribute Key conforming to the - // "tls.server.ja3s" semantic conventions. It represents a hash that - // identifies servers based on how they perform an SSL/TLS handshake. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'd4e5b18d6b55c71272893221c96ba240' - TLSServerJa3sKey = attribute.Key("tls.server.ja3s") - - // TLSServerNotAfterKey is the attribute Key conforming to the - // "tls.server.not_after" semantic conventions. It represents the date/Time - // indicating when server certificate is no longer considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2021-01-01T00:00:00.000Z' - TLSServerNotAfterKey = attribute.Key("tls.server.not_after") - - // TLSServerNotBeforeKey is the attribute Key conforming to the - // "tls.server.not_before" semantic conventions. It represents the - // date/Time indicating when server certificate is first considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1970-01-01T00:00:00.000Z' - TLSServerNotBeforeKey = attribute.Key("tls.server.not_before") - - // TLSServerSubjectKey is the attribute Key conforming to the - // "tls.server.subject" semantic conventions. It represents the - // distinguished name of subject of the x.509 certificate presented by the - // server. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=myserver, OU=Documentation Team, DC=example, DC=com' - TLSServerSubjectKey = attribute.Key("tls.server.subject") -) - -var ( - // ssl - TLSProtocolNameSsl = TLSProtocolNameKey.String("ssl") - // tls - TLSProtocolNameTLS = TLSProtocolNameKey.String("tls") -) - -// TLSCipher returns an attribute KeyValue conforming to the "tls.cipher" -// semantic conventions. It represents the string indicating the -// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) used -// during the current connection. -func TLSCipher(val string) attribute.KeyValue { - return TLSCipherKey.String(val) -} - -// TLSClientCertificate returns an attribute KeyValue conforming to the -// "tls.client.certificate" semantic conventions. It represents the pEM-encoded -// stand-alone certificate offered by the client. This is usually -// mutually-exclusive of `client.certificate_chain` since this value also -// exists in that list. -func TLSClientCertificate(val string) attribute.KeyValue { - return TLSClientCertificateKey.String(val) -} - -// TLSClientCertificateChain returns an attribute KeyValue conforming to the -// "tls.client.certificate_chain" semantic conventions. It represents the array -// of PEM-encoded certificates that make up the certificate chain offered by -// the client. This is usually mutually-exclusive of `client.certificate` since -// that value should be the first certificate in the chain. -func TLSClientCertificateChain(val ...string) attribute.KeyValue { - return TLSClientCertificateChainKey.StringSlice(val) -} - -// TLSClientHashMd5 returns an attribute KeyValue conforming to the -// "tls.client.hash.md5" semantic conventions. It represents the certificate -// fingerprint using the MD5 digest of DER-encoded version of certificate -// offered by the client. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSClientHashMd5(val string) attribute.KeyValue { - return TLSClientHashMd5Key.String(val) -} - -// TLSClientHashSha1 returns an attribute KeyValue conforming to the -// "tls.client.hash.sha1" semantic conventions. It represents the certificate -// fingerprint using the SHA1 digest of DER-encoded version of certificate -// offered by the client. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSClientHashSha1(val string) attribute.KeyValue { - return TLSClientHashSha1Key.String(val) -} - -// TLSClientHashSha256 returns an attribute KeyValue conforming to the -// "tls.client.hash.sha256" semantic conventions. It represents the certificate -// fingerprint using the SHA256 digest of DER-encoded version of certificate -// offered by the client. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSClientHashSha256(val string) attribute.KeyValue { - return TLSClientHashSha256Key.String(val) -} - -// TLSClientIssuer returns an attribute KeyValue conforming to the -// "tls.client.issuer" semantic conventions. It represents the distinguished -// name of -// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of -// the issuer of the x.509 certificate presented by the client. -func TLSClientIssuer(val string) attribute.KeyValue { - return TLSClientIssuerKey.String(val) -} - -// TLSClientJa3 returns an attribute KeyValue conforming to the -// "tls.client.ja3" semantic conventions. It represents a hash that identifies -// clients based on how they perform an SSL/TLS handshake. -func TLSClientJa3(val string) attribute.KeyValue { - return TLSClientJa3Key.String(val) -} - -// TLSClientNotAfter returns an attribute KeyValue conforming to the -// "tls.client.not_after" semantic conventions. It represents the date/Time -// indicating when client certificate is no longer considered valid. -func TLSClientNotAfter(val string) attribute.KeyValue { - return TLSClientNotAfterKey.String(val) -} - -// TLSClientNotBefore returns an attribute KeyValue conforming to the -// "tls.client.not_before" semantic conventions. It represents the date/Time -// indicating when client certificate is first considered valid. -func TLSClientNotBefore(val string) attribute.KeyValue { - return TLSClientNotBeforeKey.String(val) -} - -// TLSClientServerName returns an attribute KeyValue conforming to the -// "tls.client.server_name" semantic conventions. It represents the also called -// an SNI, this tells the server which hostname to which the client is -// attempting to connect to. -func TLSClientServerName(val string) attribute.KeyValue { - return TLSClientServerNameKey.String(val) -} - -// TLSClientSubject returns an attribute KeyValue conforming to the -// "tls.client.subject" semantic conventions. It represents the distinguished -// name of subject of the x.509 certificate presented by the client. -func TLSClientSubject(val string) attribute.KeyValue { - return TLSClientSubjectKey.String(val) -} - -// TLSClientSupportedCiphers returns an attribute KeyValue conforming to the -// "tls.client.supported_ciphers" semantic conventions. It represents the array -// of ciphers offered by the client during the client hello. -func TLSClientSupportedCiphers(val ...string) attribute.KeyValue { - return TLSClientSupportedCiphersKey.StringSlice(val) -} - -// TLSCurve returns an attribute KeyValue conforming to the "tls.curve" -// semantic conventions. It represents the string indicating the curve used for -// the given cipher, when applicable -func TLSCurve(val string) attribute.KeyValue { - return TLSCurveKey.String(val) -} - -// TLSEstablished returns an attribute KeyValue conforming to the -// "tls.established" semantic conventions. It represents the boolean flag -// indicating if the TLS negotiation was successful and transitioned to an -// encrypted tunnel. -func TLSEstablished(val bool) attribute.KeyValue { - return TLSEstablishedKey.Bool(val) -} - -// TLSNextProtocol returns an attribute KeyValue conforming to the -// "tls.next_protocol" semantic conventions. It represents the string -// indicating the protocol being tunneled. Per the values in the [IANA -// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), -// this string should be lower case. -func TLSNextProtocol(val string) attribute.KeyValue { - return TLSNextProtocolKey.String(val) -} - -// TLSProtocolVersion returns an attribute KeyValue conforming to the -// "tls.protocol.version" semantic conventions. It represents the numeric part -// of the version parsed from the original string of the negotiated [SSL/TLS -// protocol -// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) -func TLSProtocolVersion(val string) attribute.KeyValue { - return TLSProtocolVersionKey.String(val) -} - -// TLSResumed returns an attribute KeyValue conforming to the "tls.resumed" -// semantic conventions. It represents the boolean flag indicating if this TLS -// connection was resumed from an existing TLS negotiation. -func TLSResumed(val bool) attribute.KeyValue { - return TLSResumedKey.Bool(val) -} - -// TLSServerCertificate returns an attribute KeyValue conforming to the -// "tls.server.certificate" semantic conventions. It represents the pEM-encoded -// stand-alone certificate offered by the server. This is usually -// mutually-exclusive of `server.certificate_chain` since this value also -// exists in that list. -func TLSServerCertificate(val string) attribute.KeyValue { - return TLSServerCertificateKey.String(val) -} - -// TLSServerCertificateChain returns an attribute KeyValue conforming to the -// "tls.server.certificate_chain" semantic conventions. It represents the array -// of PEM-encoded certificates that make up the certificate chain offered by -// the server. This is usually mutually-exclusive of `server.certificate` since -// that value should be the first certificate in the chain. -func TLSServerCertificateChain(val ...string) attribute.KeyValue { - return TLSServerCertificateChainKey.StringSlice(val) -} - -// TLSServerHashMd5 returns an attribute KeyValue conforming to the -// "tls.server.hash.md5" semantic conventions. It represents the certificate -// fingerprint using the MD5 digest of DER-encoded version of certificate -// offered by the server. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSServerHashMd5(val string) attribute.KeyValue { - return TLSServerHashMd5Key.String(val) -} - -// TLSServerHashSha1 returns an attribute KeyValue conforming to the -// "tls.server.hash.sha1" semantic conventions. It represents the certificate -// fingerprint using the SHA1 digest of DER-encoded version of certificate -// offered by the server. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSServerHashSha1(val string) attribute.KeyValue { - return TLSServerHashSha1Key.String(val) -} - -// TLSServerHashSha256 returns an attribute KeyValue conforming to the -// "tls.server.hash.sha256" semantic conventions. It represents the certificate -// fingerprint using the SHA256 digest of DER-encoded version of certificate -// offered by the server. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSServerHashSha256(val string) attribute.KeyValue { - return TLSServerHashSha256Key.String(val) -} - -// TLSServerIssuer returns an attribute KeyValue conforming to the -// "tls.server.issuer" semantic conventions. It represents the distinguished -// name of -// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of -// the issuer of the x.509 certificate presented by the client. -func TLSServerIssuer(val string) attribute.KeyValue { - return TLSServerIssuerKey.String(val) -} - -// TLSServerJa3s returns an attribute KeyValue conforming to the -// "tls.server.ja3s" semantic conventions. It represents a hash that identifies -// servers based on how they perform an SSL/TLS handshake. -func TLSServerJa3s(val string) attribute.KeyValue { - return TLSServerJa3sKey.String(val) -} - -// TLSServerNotAfter returns an attribute KeyValue conforming to the -// "tls.server.not_after" semantic conventions. It represents the date/Time -// indicating when server certificate is no longer considered valid. -func TLSServerNotAfter(val string) attribute.KeyValue { - return TLSServerNotAfterKey.String(val) -} - -// TLSServerNotBefore returns an attribute KeyValue conforming to the -// "tls.server.not_before" semantic conventions. It represents the date/Time -// indicating when server certificate is first considered valid. -func TLSServerNotBefore(val string) attribute.KeyValue { - return TLSServerNotBeforeKey.String(val) -} - -// TLSServerSubject returns an attribute KeyValue conforming to the -// "tls.server.subject" semantic conventions. It represents the distinguished -// name of subject of the x.509 certificate presented by the server. -func TLSServerSubject(val string) attribute.KeyValue { - return TLSServerSubjectKey.String(val) -} - -// Attributes describing URL. -const ( - // URLFragmentKey is the attribute Key conforming to the "url.fragment" - // semantic conventions. It represents the [URI - // fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'SemConv' - URLFragmentKey = attribute.Key("url.fragment") - - // URLFullKey is the attribute Key conforming to the "url.full" semantic - // conventions. It represents the absolute URL describing a network - // resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv', - // '//localhost' - // Note: For network calls, URL usually has - // `scheme://host[:port][path][?query][#fragment]` format, where the - // fragment is not transmitted over HTTP, but if it is known, it SHOULD be - // included nevertheless. - // `url.full` MUST NOT contain credentials passed via URL in form of - // `https://username:password@www.example.com/`. In such case username and - // password SHOULD be redacted and attribute's value SHOULD be - // `https://REDACTED:REDACTED@www.example.com/`. - // `url.full` SHOULD capture the absolute URL when it is available (or can - // be reconstructed) and SHOULD NOT be validated or modified except for - // sanitizing purposes. - URLFullKey = attribute.Key("url.full") - - // URLPathKey is the attribute Key conforming to the "url.path" semantic - // conventions. It represents the [URI - // path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/search' - URLPathKey = attribute.Key("url.path") - - // URLQueryKey is the attribute Key conforming to the "url.query" semantic - // conventions. It represents the [URI - // query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'q=OpenTelemetry' - // Note: Sensitive content provided in query string SHOULD be scrubbed when - // instrumentations can identify it. - URLQueryKey = attribute.Key("url.query") - - // URLSchemeKey is the attribute Key conforming to the "url.scheme" - // semantic conventions. It represents the [URI - // scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component - // identifying the used protocol. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'https', 'ftp', 'telnet' - URLSchemeKey = attribute.Key("url.scheme") -) - -// URLFragment returns an attribute KeyValue conforming to the -// "url.fragment" semantic conventions. It represents the [URI -// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component -func URLFragment(val string) attribute.KeyValue { - return URLFragmentKey.String(val) -} - -// URLFull returns an attribute KeyValue conforming to the "url.full" -// semantic conventions. It represents the absolute URL describing a network -// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) -func URLFull(val string) attribute.KeyValue { - return URLFullKey.String(val) -} - -// URLPath returns an attribute KeyValue conforming to the "url.path" -// semantic conventions. It represents the [URI -// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component -func URLPath(val string) attribute.KeyValue { - return URLPathKey.String(val) -} - -// URLQuery returns an attribute KeyValue conforming to the "url.query" -// semantic conventions. It represents the [URI -// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component -func URLQuery(val string) attribute.KeyValue { - return URLQueryKey.String(val) -} - -// URLScheme returns an attribute KeyValue conforming to the "url.scheme" -// semantic conventions. It represents the [URI -// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component -// identifying the used protocol. -func URLScheme(val string) attribute.KeyValue { - return URLSchemeKey.String(val) -} - -// Describes user-agent attributes. -const ( - // UserAgentOriginalKey is the attribute Key conforming to the - // "user_agent.original" semantic conventions. It represents the value of - // the [HTTP - // User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) - // header sent by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU - // iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) - // Version/14.1.2 Mobile/15E148 Safari/604.1' - UserAgentOriginalKey = attribute.Key("user_agent.original") -) - -// UserAgentOriginal returns an attribute KeyValue conforming to the -// "user_agent.original" semantic conventions. It represents the value of the -// [HTTP -// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) -// header sent by the client. -func UserAgentOriginal(val string) attribute.KeyValue { - return UserAgentOriginalKey.String(val) -} - -// Session is defined as the period of time encompassing all activities -// performed by the application and the actions executed by the end user. -// Consequently, a Session is represented as a collection of Logs, Events, and -// Spans emitted by the Client Application throughout the Session's duration. -// Each Session is assigned a unique identifier, which is included as an -// attribute in the Logs, Events, and Spans generated during the Session's -// lifecycle. -// When a session reaches end of life, typically due to user inactivity or -// session timeout, a new session identifier will be assigned. The previous -// session identifier may be provided by the instrumentation so that telemetry -// backends can link the two sessions. -const ( - // SessionIDKey is the attribute Key conforming to the "session.id" - // semantic conventions. It represents a unique id to identify a session. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '00112233-4455-6677-8899-aabbccddeeff' - SessionIDKey = attribute.Key("session.id") - - // SessionPreviousIDKey is the attribute Key conforming to the - // "session.previous_id" semantic conventions. It represents the previous - // `session.id` for this user, when known. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '00112233-4455-6677-8899-aabbccddeeff' - SessionPreviousIDKey = attribute.Key("session.previous_id") -) - -// SessionID returns an attribute KeyValue conforming to the "session.id" -// semantic conventions. It represents a unique id to identify a session. -func SessionID(val string) attribute.KeyValue { - return SessionIDKey.String(val) -} - -// SessionPreviousID returns an attribute KeyValue conforming to the -// "session.previous_id" semantic conventions. It represents the previous -// `session.id` for this user, when known. -func SessionPreviousID(val string) attribute.KeyValue { - return SessionPreviousIDKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go deleted file mode 100644 index 6c019aafc3..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// This event represents an occurrence of a lifecycle transition on the iOS -// platform. -const ( - // IosStateKey is the attribute Key conforming to the "ios.state" semantic - // conventions. It represents the this attribute represents the state the - // application has transitioned into at the occurrence of the event. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Note: The iOS lifecycle states are defined in the [UIApplicationDelegate - // documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate#1656902), - // and from which the `OS terminology` column values are derived. - IosStateKey = attribute.Key("ios.state") -) - -var ( - // The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive` - IosStateActive = IosStateKey.String("active") - // The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive` - IosStateInactive = IosStateKey.String("inactive") - // The app is now in the background. This value is associated with UIKit notification `applicationDidEnterBackground` - IosStateBackground = IosStateKey.String("background") - // The app is now in the foreground. This value is associated with UIKit notification `applicationWillEnterForeground` - IosStateForeground = IosStateKey.String("foreground") - // The app is about to terminate. Associated with UIKit notification `applicationWillTerminate` - IosStateTerminate = IosStateKey.String("terminate") -) - -// This event represents an occurrence of a lifecycle transition on the Android -// platform. -const ( - // AndroidStateKey is the attribute Key conforming to the "android.state" - // semantic conventions. It represents the this attribute represents the - // state the application has transitioned into at the occurrence of the - // event. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Note: The Android lifecycle states are defined in [Activity lifecycle - // callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc), - // and from which the `OS identifiers` are derived. - AndroidStateKey = attribute.Key("android.state") -) - -var ( - // Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time - AndroidStateCreated = AndroidStateKey.String("created") - // Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state - AndroidStateBackground = AndroidStateKey.String("background") - // Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states - AndroidStateForeground = AndroidStateKey.String("foreground") -) - -// This semantic convention defines the attributes used to represent a feature -// flag evaluation as an event. -const ( - // FeatureFlagKeyKey is the attribute Key conforming to the - // "feature_flag.key" semantic conventions. It represents the unique - // identifier of the feature flag. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'logo-color' - FeatureFlagKeyKey = attribute.Key("feature_flag.key") - - // FeatureFlagProviderNameKey is the attribute Key conforming to the - // "feature_flag.provider_name" semantic conventions. It represents the - // name of the service provider that performs the flag evaluation. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'Flag Manager' - FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name") - - // FeatureFlagVariantKey is the attribute Key conforming to the - // "feature_flag.variant" semantic conventions. It represents the sHOULD be - // a semantic identifier for a value. If one is unavailable, a stringified - // version of the value can be used. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'red', 'true', 'on' - // Note: A semantic identifier, commonly referred to as a variant, provides - // a means - // for referring to a value without including the value itself. This can - // provide additional context for understanding the meaning behind a value. - // For example, the variant `red` maybe be used for the value `#c05543`. - // - // A stringified version of the value can be used in situations where a - // semantic identifier is unavailable. String representation of the value - // should be determined by the implementer. - FeatureFlagVariantKey = attribute.Key("feature_flag.variant") -) - -// FeatureFlagKey returns an attribute KeyValue conforming to the -// "feature_flag.key" semantic conventions. It represents the unique identifier -// of the feature flag. -func FeatureFlagKey(val string) attribute.KeyValue { - return FeatureFlagKeyKey.String(val) -} - -// FeatureFlagProviderName returns an attribute KeyValue conforming to the -// "feature_flag.provider_name" semantic conventions. It represents the name of -// the service provider that performs the flag evaluation. -func FeatureFlagProviderName(val string) attribute.KeyValue { - return FeatureFlagProviderNameKey.String(val) -} - -// FeatureFlagVariant returns an attribute KeyValue conforming to the -// "feature_flag.variant" semantic conventions. It represents the sHOULD be a -// semantic identifier for a value. If one is unavailable, a stringified -// version of the value can be used. -func FeatureFlagVariant(val string) attribute.KeyValue { - return FeatureFlagVariantKey.String(val) -} - -// RPC received/sent message. -const ( - // MessageCompressedSizeKey is the attribute Key conforming to the - // "message.compressed_size" semantic conventions. It represents the - // compressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - MessageCompressedSizeKey = attribute.Key("message.compressed_size") - - // MessageIDKey is the attribute Key conforming to the "message.id" - // semantic conventions. It represents the mUST be calculated as two - // different counters starting from `1` one for sent messages and one for - // received message. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Note: This way we guarantee that the values will be consistent between - // different implementations. - MessageIDKey = attribute.Key("message.id") - - // MessageTypeKey is the attribute Key conforming to the "message.type" - // semantic conventions. It represents the whether this is a received or - // sent message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessageTypeKey = attribute.Key("message.type") - - // MessageUncompressedSizeKey is the attribute Key conforming to the - // "message.uncompressed_size" semantic conventions. It represents the - // uncompressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - MessageUncompressedSizeKey = attribute.Key("message.uncompressed_size") -) - -var ( - // sent - MessageTypeSent = MessageTypeKey.String("SENT") - // received - MessageTypeReceived = MessageTypeKey.String("RECEIVED") -) - -// MessageCompressedSize returns an attribute KeyValue conforming to the -// "message.compressed_size" semantic conventions. It represents the compressed -// size of the message in bytes. -func MessageCompressedSize(val int) attribute.KeyValue { - return MessageCompressedSizeKey.Int(val) -} - -// MessageID returns an attribute KeyValue conforming to the "message.id" -// semantic conventions. It represents the mUST be calculated as two different -// counters starting from `1` one for sent messages and one for received -// message. -func MessageID(val int) attribute.KeyValue { - return MessageIDKey.Int(val) -} - -// MessageUncompressedSize returns an attribute KeyValue conforming to the -// "message.uncompressed_size" semantic conventions. It represents the -// uncompressed size of the message in bytes. -func MessageUncompressedSize(val int) attribute.KeyValue { - return MessageUncompressedSizeKey.Int(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go deleted file mode 100644 index d66bbe9c23..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go +++ /dev/null @@ -1,2545 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// A cloud environment (e.g. GCP, Azure, AWS). -const ( - // CloudAccountIDKey is the attribute Key conforming to the - // "cloud.account.id" semantic conventions. It represents the cloud account - // ID the resource is assigned to. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '111111111111', 'opentelemetry' - CloudAccountIDKey = attribute.Key("cloud.account.id") - - // CloudAvailabilityZoneKey is the attribute Key conforming to the - // "cloud.availability_zone" semantic conventions. It represents the cloud - // regions often have multiple, isolated locations known as zones to - // increase availability. Availability zone represents the zone where the - // resource is running. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'us-east-1c' - // Note: Availability zones are called "zones" on Alibaba Cloud and Google - // Cloud. - CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone") - - // CloudPlatformKey is the attribute Key conforming to the "cloud.platform" - // semantic conventions. It represents the cloud platform in use. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: The prefix of the service SHOULD match the one specified in - // `cloud.provider`. - CloudPlatformKey = attribute.Key("cloud.platform") - - // CloudProviderKey is the attribute Key conforming to the "cloud.provider" - // semantic conventions. It represents the name of the cloud provider. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - CloudProviderKey = attribute.Key("cloud.provider") - - // CloudRegionKey is the attribute Key conforming to the "cloud.region" - // semantic conventions. It represents the geographical region the resource - // is running. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'us-central1', 'us-east-1' - // Note: Refer to your provider's docs to see the available regions, for - // example [Alibaba Cloud - // regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS - // regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), - // [Azure - // regions](https://azure.microsoft.com/global-infrastructure/geographies/), - // [Google Cloud regions](https://cloud.google.com/about/locations), or - // [Tencent Cloud - // regions](https://www.tencentcloud.com/document/product/213/6091). - CloudRegionKey = attribute.Key("cloud.region") - - // CloudResourceIDKey is the attribute Key conforming to the - // "cloud.resource_id" semantic conventions. It represents the cloud - // provider-specific native identifier of the monitored cloud resource - // (e.g. an - // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // on AWS, a [fully qualified resource - // ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) - // on Azure, a [full resource - // name](https://cloud.google.com/apis/design/resource_names#full_resource_name) - // on GCP) - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function', - // '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID', - // '/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/' - // Note: On some cloud providers, it may not be possible to determine the - // full ID at startup, - // so it may be necessary to set `cloud.resource_id` as a span attribute - // instead. - // - // The exact value to use for `cloud.resource_id` depends on the cloud - // provider. - // The following well-known definitions MUST be used if you set this - // attribute and they apply: - // - // * **AWS Lambda:** The function - // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html). - // Take care not to use the "invoked ARN" directly but replace any - // [alias - // suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) - // with the resolved function version, as the same runtime instance may - // be invokable with - // multiple different aliases. - // * **GCP:** The [URI of the - // resource](https://cloud.google.com/iam/docs/full-resource-names) - // * **Azure:** The [Fully Qualified Resource - // ID](https://docs.microsoft.com/rest/api/resources/resources/get-by-id) - // of the invoked function, - // *not* the function app, having the form - // `/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/`. - // This means that a span attribute MUST be used, as an Azure function - // app can host multiple functions that would usually share - // a TracerProvider. - CloudResourceIDKey = attribute.Key("cloud.resource_id") -) - -var ( - // Alibaba Cloud Elastic Compute Service - CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs") - // Alibaba Cloud Function Compute - CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc") - // Red Hat OpenShift on Alibaba Cloud - CloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String("alibaba_cloud_openshift") - // AWS Elastic Compute Cloud - CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2") - // AWS Elastic Container Service - CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs") - // AWS Elastic Kubernetes Service - CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks") - // AWS Lambda - CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda") - // AWS Elastic Beanstalk - CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk") - // AWS App Runner - CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner") - // Red Hat OpenShift on AWS (ROSA) - CloudPlatformAWSOpenshift = CloudPlatformKey.String("aws_openshift") - // Azure Virtual Machines - CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm") - // Azure Container Instances - CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances") - // Azure Kubernetes Service - CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks") - // Azure Functions - CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions") - // Azure App Service - CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service") - // Azure Red Hat OpenShift - CloudPlatformAzureOpenshift = CloudPlatformKey.String("azure_openshift") - // Google Bare Metal Solution (BMS) - CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution") - // Google Cloud Compute Engine (GCE) - CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine") - // Google Cloud Run - CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run") - // Google Cloud Kubernetes Engine (GKE) - CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine") - // Google Cloud Functions (GCF) - CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions") - // Google Cloud App Engine (GAE) - CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine") - // Red Hat OpenShift on Google Cloud - CloudPlatformGCPOpenshift = CloudPlatformKey.String("gcp_openshift") - // Red Hat OpenShift on IBM Cloud - CloudPlatformIbmCloudOpenshift = CloudPlatformKey.String("ibm_cloud_openshift") - // Tencent Cloud Cloud Virtual Machine (CVM) - CloudPlatformTencentCloudCvm = CloudPlatformKey.String("tencent_cloud_cvm") - // Tencent Cloud Elastic Kubernetes Service (EKS) - CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks") - // Tencent Cloud Serverless Cloud Function (SCF) - CloudPlatformTencentCloudScf = CloudPlatformKey.String("tencent_cloud_scf") -) - -var ( - // Alibaba Cloud - CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud") - // Amazon Web Services - CloudProviderAWS = CloudProviderKey.String("aws") - // Microsoft Azure - CloudProviderAzure = CloudProviderKey.String("azure") - // Google Cloud Platform - CloudProviderGCP = CloudProviderKey.String("gcp") - // Heroku Platform as a Service - CloudProviderHeroku = CloudProviderKey.String("heroku") - // IBM Cloud - CloudProviderIbmCloud = CloudProviderKey.String("ibm_cloud") - // Tencent Cloud - CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud") -) - -// CloudAccountID returns an attribute KeyValue conforming to the -// "cloud.account.id" semantic conventions. It represents the cloud account ID -// the resource is assigned to. -func CloudAccountID(val string) attribute.KeyValue { - return CloudAccountIDKey.String(val) -} - -// CloudAvailabilityZone returns an attribute KeyValue conforming to the -// "cloud.availability_zone" semantic conventions. It represents the cloud -// regions often have multiple, isolated locations known as zones to increase -// availability. Availability zone represents the zone where the resource is -// running. -func CloudAvailabilityZone(val string) attribute.KeyValue { - return CloudAvailabilityZoneKey.String(val) -} - -// CloudRegion returns an attribute KeyValue conforming to the -// "cloud.region" semantic conventions. It represents the geographical region -// the resource is running. -func CloudRegion(val string) attribute.KeyValue { - return CloudRegionKey.String(val) -} - -// CloudResourceID returns an attribute KeyValue conforming to the -// "cloud.resource_id" semantic conventions. It represents the cloud -// provider-specific native identifier of the monitored cloud resource (e.g. an -// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) -// on AWS, a [fully qualified resource -// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on -// Azure, a [full resource -// name](https://cloud.google.com/apis/design/resource_names#full_resource_name) -// on GCP) -func CloudResourceID(val string) attribute.KeyValue { - return CloudResourceIDKey.String(val) -} - -// A container instance. -const ( - // ContainerCommandKey is the attribute Key conforming to the - // "container.command" semantic conventions. It represents the command used - // to run the container (i.e. the command name). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcontribcol' - // Note: If using embedded credentials or sensitive data, it is recommended - // to remove them to prevent potential leakage. - ContainerCommandKey = attribute.Key("container.command") - - // ContainerCommandArgsKey is the attribute Key conforming to the - // "container.command_args" semantic conventions. It represents the all the - // command arguments (including the command/executable itself) run by the - // container. [2] - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcontribcol, --config, config.yaml' - ContainerCommandArgsKey = attribute.Key("container.command_args") - - // ContainerCommandLineKey is the attribute Key conforming to the - // "container.command_line" semantic conventions. It represents the full - // command run by the container as a single string representing the full - // command. [2] - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcontribcol --config config.yaml' - ContainerCommandLineKey = attribute.Key("container.command_line") - - // ContainerIDKey is the attribute Key conforming to the "container.id" - // semantic conventions. It represents the container ID. Usually a UUID, as - // for example used to [identify Docker - // containers](https://docs.docker.com/engine/reference/run/#container-identification). - // The UUID might be abbreviated. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'a3bf90e006b2' - ContainerIDKey = attribute.Key("container.id") - - // ContainerImageIDKey is the attribute Key conforming to the - // "container.image.id" semantic conventions. It represents the runtime - // specific image identifier. Usually a hash algorithm followed by a UUID. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f' - // Note: Docker defines a sha256 of the image id; `container.image.id` - // corresponds to the `Image` field from the Docker container inspect - // [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect) - // endpoint. - // K8S defines a link to the container registry repository with digest - // `"imageID": "registry.azurecr.io - // /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`. - // The ID is assinged by the container runtime and can vary in different - // environments. Consider using `oci.manifest.digest` if it is important to - // identify the same image in different environments/runtimes. - ContainerImageIDKey = attribute.Key("container.image.id") - - // ContainerImageNameKey is the attribute Key conforming to the - // "container.image.name" semantic conventions. It represents the name of - // the image the container was built on. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'gcr.io/opentelemetry/operator' - ContainerImageNameKey = attribute.Key("container.image.name") - - // ContainerImageRepoDigestsKey is the attribute Key conforming to the - // "container.image.repo_digests" semantic conventions. It represents the - // repo digests of the container image as provided by the container - // runtime. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb', - // 'internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578' - // Note: - // [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect) - // and - // [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) - // report those under the `RepoDigests` field. - ContainerImageRepoDigestsKey = attribute.Key("container.image.repo_digests") - - // ContainerImageTagsKey is the attribute Key conforming to the - // "container.image.tags" semantic conventions. It represents the container - // image tags. An example can be found in [Docker Image - // Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). - // Should be only the `` section of the full name for example from - // `registry.example.com/my-org/my-image:`. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'v1.27.1', '3.5.7-0' - ContainerImageTagsKey = attribute.Key("container.image.tags") - - // ContainerNameKey is the attribute Key conforming to the "container.name" - // semantic conventions. It represents the container name used by container - // runtime. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-autoconf' - ContainerNameKey = attribute.Key("container.name") - - // ContainerRuntimeKey is the attribute Key conforming to the - // "container.runtime" semantic conventions. It represents the container - // runtime managing this container. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'docker', 'containerd', 'rkt' - ContainerRuntimeKey = attribute.Key("container.runtime") -) - -// ContainerCommand returns an attribute KeyValue conforming to the -// "container.command" semantic conventions. It represents the command used to -// run the container (i.e. the command name). -func ContainerCommand(val string) attribute.KeyValue { - return ContainerCommandKey.String(val) -} - -// ContainerCommandArgs returns an attribute KeyValue conforming to the -// "container.command_args" semantic conventions. It represents the all the -// command arguments (including the command/executable itself) run by the -// container. [2] -func ContainerCommandArgs(val ...string) attribute.KeyValue { - return ContainerCommandArgsKey.StringSlice(val) -} - -// ContainerCommandLine returns an attribute KeyValue conforming to the -// "container.command_line" semantic conventions. It represents the full -// command run by the container as a single string representing the full -// command. [2] -func ContainerCommandLine(val string) attribute.KeyValue { - return ContainerCommandLineKey.String(val) -} - -// ContainerID returns an attribute KeyValue conforming to the -// "container.id" semantic conventions. It represents the container ID. Usually -// a UUID, as for example used to [identify Docker -// containers](https://docs.docker.com/engine/reference/run/#container-identification). -// The UUID might be abbreviated. -func ContainerID(val string) attribute.KeyValue { - return ContainerIDKey.String(val) -} - -// ContainerImageID returns an attribute KeyValue conforming to the -// "container.image.id" semantic conventions. It represents the runtime -// specific image identifier. Usually a hash algorithm followed by a UUID. -func ContainerImageID(val string) attribute.KeyValue { - return ContainerImageIDKey.String(val) -} - -// ContainerImageName returns an attribute KeyValue conforming to the -// "container.image.name" semantic conventions. It represents the name of the -// image the container was built on. -func ContainerImageName(val string) attribute.KeyValue { - return ContainerImageNameKey.String(val) -} - -// ContainerImageRepoDigests returns an attribute KeyValue conforming to the -// "container.image.repo_digests" semantic conventions. It represents the repo -// digests of the container image as provided by the container runtime. -func ContainerImageRepoDigests(val ...string) attribute.KeyValue { - return ContainerImageRepoDigestsKey.StringSlice(val) -} - -// ContainerImageTags returns an attribute KeyValue conforming to the -// "container.image.tags" semantic conventions. It represents the container -// image tags. An example can be found in [Docker Image -// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). -// Should be only the `` section of the full name for example from -// `registry.example.com/my-org/my-image:`. -func ContainerImageTags(val ...string) attribute.KeyValue { - return ContainerImageTagsKey.StringSlice(val) -} - -// ContainerName returns an attribute KeyValue conforming to the -// "container.name" semantic conventions. It represents the container name used -// by container runtime. -func ContainerName(val string) attribute.KeyValue { - return ContainerNameKey.String(val) -} - -// ContainerRuntime returns an attribute KeyValue conforming to the -// "container.runtime" semantic conventions. It represents the container -// runtime managing this container. -func ContainerRuntime(val string) attribute.KeyValue { - return ContainerRuntimeKey.String(val) -} - -// Describes device attributes. -const ( - // DeviceIDKey is the attribute Key conforming to the "device.id" semantic - // conventions. It represents a unique identifier representing the device - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092' - // Note: The device identifier MUST only be defined using the values - // outlined below. This value is not an advertising identifier and MUST NOT - // be used as such. On iOS (Swift or Objective-C), this value MUST be equal - // to the [vendor - // identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). - // On Android (Java or Kotlin), this value MUST be equal to the Firebase - // Installation ID or a globally unique UUID which is persisted across - // sessions in your application. More information can be found - // [here](https://developer.android.com/training/articles/user-data-ids) on - // best practices and exact implementation details. Caution should be taken - // when storing personal data or anything which can identify a user. GDPR - // and data protection laws may apply, ensure you do your own due - // diligence. - DeviceIDKey = attribute.Key("device.id") - - // DeviceManufacturerKey is the attribute Key conforming to the - // "device.manufacturer" semantic conventions. It represents the name of - // the device manufacturer - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Apple', 'Samsung' - // Note: The Android OS provides this field via - // [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER). - // iOS apps SHOULD hardcode the value `Apple`. - DeviceManufacturerKey = attribute.Key("device.manufacturer") - - // DeviceModelIdentifierKey is the attribute Key conforming to the - // "device.model.identifier" semantic conventions. It represents the model - // identifier for the device - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'iPhone3,4', 'SM-G920F' - // Note: It's recommended this value represents a machine-readable version - // of the model identifier rather than the market or consumer-friendly name - // of the device. - DeviceModelIdentifierKey = attribute.Key("device.model.identifier") - - // DeviceModelNameKey is the attribute Key conforming to the - // "device.model.name" semantic conventions. It represents the marketing - // name for the device model - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6' - // Note: It's recommended this value represents a human-readable version of - // the device model rather than a machine-readable alternative. - DeviceModelNameKey = attribute.Key("device.model.name") -) - -// DeviceID returns an attribute KeyValue conforming to the "device.id" -// semantic conventions. It represents a unique identifier representing the -// device -func DeviceID(val string) attribute.KeyValue { - return DeviceIDKey.String(val) -} - -// DeviceManufacturer returns an attribute KeyValue conforming to the -// "device.manufacturer" semantic conventions. It represents the name of the -// device manufacturer -func DeviceManufacturer(val string) attribute.KeyValue { - return DeviceManufacturerKey.String(val) -} - -// DeviceModelIdentifier returns an attribute KeyValue conforming to the -// "device.model.identifier" semantic conventions. It represents the model -// identifier for the device -func DeviceModelIdentifier(val string) attribute.KeyValue { - return DeviceModelIdentifierKey.String(val) -} - -// DeviceModelName returns an attribute KeyValue conforming to the -// "device.model.name" semantic conventions. It represents the marketing name -// for the device model -func DeviceModelName(val string) attribute.KeyValue { - return DeviceModelNameKey.String(val) -} - -// A host is defined as a computing instance. For example, physical servers, -// virtual machines, switches or disk array. -const ( - // HostArchKey is the attribute Key conforming to the "host.arch" semantic - // conventions. It represents the CPU architecture the host system is - // running on. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - HostArchKey = attribute.Key("host.arch") - - // HostCPUCacheL2SizeKey is the attribute Key conforming to the - // "host.cpu.cache.l2.size" semantic conventions. It represents the amount - // of level 2 memory cache available to the processor (in Bytes). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 12288000 - HostCPUCacheL2SizeKey = attribute.Key("host.cpu.cache.l2.size") - - // HostCPUFamilyKey is the attribute Key conforming to the - // "host.cpu.family" semantic conventions. It represents the family or - // generation of the CPU. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '6', 'PA-RISC 1.1e' - HostCPUFamilyKey = attribute.Key("host.cpu.family") - - // HostCPUModelIDKey is the attribute Key conforming to the - // "host.cpu.model.id" semantic conventions. It represents the model - // identifier. It provides more granular information about the CPU, - // distinguishing it from other CPUs within the same family. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '6', '9000/778/B180L' - HostCPUModelIDKey = attribute.Key("host.cpu.model.id") - - // HostCPUModelNameKey is the attribute Key conforming to the - // "host.cpu.model.name" semantic conventions. It represents the model - // designation of the processor. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz' - HostCPUModelNameKey = attribute.Key("host.cpu.model.name") - - // HostCPUSteppingKey is the attribute Key conforming to the - // "host.cpu.stepping" semantic conventions. It represents the stepping or - // core revisions. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1 - HostCPUSteppingKey = attribute.Key("host.cpu.stepping") - - // HostCPUVendorIDKey is the attribute Key conforming to the - // "host.cpu.vendor.id" semantic conventions. It represents the processor - // manufacturer identifier. A maximum 12-character string. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'GenuineIntel' - // Note: [CPUID](https://wiki.osdev.org/CPUID) command returns the vendor - // ID string in EBX, EDX and ECX registers. Writing these to memory in this - // order results in a 12-character string. - HostCPUVendorIDKey = attribute.Key("host.cpu.vendor.id") - - // HostIDKey is the attribute Key conforming to the "host.id" semantic - // conventions. It represents the unique host ID. For Cloud, this must be - // the instance_id assigned by the cloud provider. For non-containerized - // systems, this should be the `machine-id`. See the table below for the - // sources to use to determine the `machine-id` based on operating system. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'fdbf79e8af94cb7f9e8df36789187052' - HostIDKey = attribute.Key("host.id") - - // HostImageIDKey is the attribute Key conforming to the "host.image.id" - // semantic conventions. It represents the vM image ID or host OS image ID. - // For Cloud, this value is from the provider. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ami-07b06b442921831e5' - HostImageIDKey = attribute.Key("host.image.id") - - // HostImageNameKey is the attribute Key conforming to the - // "host.image.name" semantic conventions. It represents the name of the VM - // image or OS install the host was instantiated from. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905' - HostImageNameKey = attribute.Key("host.image.name") - - // HostImageVersionKey is the attribute Key conforming to the - // "host.image.version" semantic conventions. It represents the version - // string of the VM image or host OS as defined in [Version - // Attributes](/docs/resource/README.md#version-attributes). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0.1' - HostImageVersionKey = attribute.Key("host.image.version") - - // HostIPKey is the attribute Key conforming to the "host.ip" semantic - // conventions. It represents the available IP addresses of the host, - // excluding loopback interfaces. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '192.168.1.140', 'fe80::abc2:4a28:737a:609e' - // Note: IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 - // addresses MUST be specified in the [RFC - // 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format. - HostIPKey = attribute.Key("host.ip") - - // HostMacKey is the attribute Key conforming to the "host.mac" semantic - // conventions. It represents the available MAC addresses of the host, - // excluding loopback interfaces. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'AC-DE-48-23-45-67', 'AC-DE-48-23-45-67-01-9F' - // Note: MAC Addresses MUST be represented in [IEEE RA hexadecimal - // form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): - // as hyphen-separated octets in uppercase hexadecimal form from most to - // least significant. - HostMacKey = attribute.Key("host.mac") - - // HostNameKey is the attribute Key conforming to the "host.name" semantic - // conventions. It represents the name of the host. On Unix systems, it may - // contain what the hostname command returns, or the fully qualified - // hostname, or another name specified by the user. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-test' - HostNameKey = attribute.Key("host.name") - - // HostTypeKey is the attribute Key conforming to the "host.type" semantic - // conventions. It represents the type of host. For Cloud, this must be the - // machine type. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'n1-standard-1' - HostTypeKey = attribute.Key("host.type") -) - -var ( - // AMD64 - HostArchAMD64 = HostArchKey.String("amd64") - // ARM32 - HostArchARM32 = HostArchKey.String("arm32") - // ARM64 - HostArchARM64 = HostArchKey.String("arm64") - // Itanium - HostArchIA64 = HostArchKey.String("ia64") - // 32-bit PowerPC - HostArchPPC32 = HostArchKey.String("ppc32") - // 64-bit PowerPC - HostArchPPC64 = HostArchKey.String("ppc64") - // IBM z/Architecture - HostArchS390x = HostArchKey.String("s390x") - // 32-bit x86 - HostArchX86 = HostArchKey.String("x86") -) - -// HostCPUCacheL2Size returns an attribute KeyValue conforming to the -// "host.cpu.cache.l2.size" semantic conventions. It represents the amount of -// level 2 memory cache available to the processor (in Bytes). -func HostCPUCacheL2Size(val int) attribute.KeyValue { - return HostCPUCacheL2SizeKey.Int(val) -} - -// HostCPUFamily returns an attribute KeyValue conforming to the -// "host.cpu.family" semantic conventions. It represents the family or -// generation of the CPU. -func HostCPUFamily(val string) attribute.KeyValue { - return HostCPUFamilyKey.String(val) -} - -// HostCPUModelID returns an attribute KeyValue conforming to the -// "host.cpu.model.id" semantic conventions. It represents the model -// identifier. It provides more granular information about the CPU, -// distinguishing it from other CPUs within the same family. -func HostCPUModelID(val string) attribute.KeyValue { - return HostCPUModelIDKey.String(val) -} - -// HostCPUModelName returns an attribute KeyValue conforming to the -// "host.cpu.model.name" semantic conventions. It represents the model -// designation of the processor. -func HostCPUModelName(val string) attribute.KeyValue { - return HostCPUModelNameKey.String(val) -} - -// HostCPUStepping returns an attribute KeyValue conforming to the -// "host.cpu.stepping" semantic conventions. It represents the stepping or core -// revisions. -func HostCPUStepping(val int) attribute.KeyValue { - return HostCPUSteppingKey.Int(val) -} - -// HostCPUVendorID returns an attribute KeyValue conforming to the -// "host.cpu.vendor.id" semantic conventions. It represents the processor -// manufacturer identifier. A maximum 12-character string. -func HostCPUVendorID(val string) attribute.KeyValue { - return HostCPUVendorIDKey.String(val) -} - -// HostID returns an attribute KeyValue conforming to the "host.id" semantic -// conventions. It represents the unique host ID. For Cloud, this must be the -// instance_id assigned by the cloud provider. For non-containerized systems, -// this should be the `machine-id`. See the table below for the sources to use -// to determine the `machine-id` based on operating system. -func HostID(val string) attribute.KeyValue { - return HostIDKey.String(val) -} - -// HostImageID returns an attribute KeyValue conforming to the -// "host.image.id" semantic conventions. It represents the vM image ID or host -// OS image ID. For Cloud, this value is from the provider. -func HostImageID(val string) attribute.KeyValue { - return HostImageIDKey.String(val) -} - -// HostImageName returns an attribute KeyValue conforming to the -// "host.image.name" semantic conventions. It represents the name of the VM -// image or OS install the host was instantiated from. -func HostImageName(val string) attribute.KeyValue { - return HostImageNameKey.String(val) -} - -// HostImageVersion returns an attribute KeyValue conforming to the -// "host.image.version" semantic conventions. It represents the version string -// of the VM image or host OS as defined in [Version -// Attributes](/docs/resource/README.md#version-attributes). -func HostImageVersion(val string) attribute.KeyValue { - return HostImageVersionKey.String(val) -} - -// HostIP returns an attribute KeyValue conforming to the "host.ip" semantic -// conventions. It represents the available IP addresses of the host, excluding -// loopback interfaces. -func HostIP(val ...string) attribute.KeyValue { - return HostIPKey.StringSlice(val) -} - -// HostMac returns an attribute KeyValue conforming to the "host.mac" -// semantic conventions. It represents the available MAC addresses of the host, -// excluding loopback interfaces. -func HostMac(val ...string) attribute.KeyValue { - return HostMacKey.StringSlice(val) -} - -// HostName returns an attribute KeyValue conforming to the "host.name" -// semantic conventions. It represents the name of the host. On Unix systems, -// it may contain what the hostname command returns, or the fully qualified -// hostname, or another name specified by the user. -func HostName(val string) attribute.KeyValue { - return HostNameKey.String(val) -} - -// HostType returns an attribute KeyValue conforming to the "host.type" -// semantic conventions. It represents the type of host. For Cloud, this must -// be the machine type. -func HostType(val string) attribute.KeyValue { - return HostTypeKey.String(val) -} - -// Kubernetes resource attributes. -const ( - // K8SClusterNameKey is the attribute Key conforming to the - // "k8s.cluster.name" semantic conventions. It represents the name of the - // cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-cluster' - K8SClusterNameKey = attribute.Key("k8s.cluster.name") - - // K8SClusterUIDKey is the attribute Key conforming to the - // "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for - // the cluster, set to the UID of the `kube-system` namespace. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '218fc5a9-a5f1-4b54-aa05-46717d0ab26d' - // Note: K8S doesn't have support for obtaining a cluster ID. If this is - // ever - // added, we will recommend collecting the `k8s.cluster.uid` through the - // official APIs. In the meantime, we are able to use the `uid` of the - // `kube-system` namespace as a proxy for cluster ID. Read on for the - // rationale. - // - // Every object created in a K8S cluster is assigned a distinct UID. The - // `kube-system` namespace is used by Kubernetes itself and will exist - // for the lifetime of the cluster. Using the `uid` of the `kube-system` - // namespace is a reasonable proxy for the K8S ClusterID as it will only - // change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are - // UUIDs as standardized by - // [ISO/IEC 9834-8 and ITU-T - // X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html). - // Which states: - // - // > If generated according to one of the mechanisms defined in Rec. - // ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be - // different from all other UUIDs generated before 3603 A.D., or is - // extremely likely to be different (depending on the mechanism chosen). - // - // Therefore, UIDs between clusters should be extremely unlikely to - // conflict. - K8SClusterUIDKey = attribute.Key("k8s.cluster.uid") - - // K8SContainerNameKey is the attribute Key conforming to the - // "k8s.container.name" semantic conventions. It represents the name of the - // Container from Pod specification, must be unique within a Pod. Container - // runtime usually uses different globally unique name (`container.name`). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'redis' - K8SContainerNameKey = attribute.Key("k8s.container.name") - - // K8SContainerRestartCountKey is the attribute Key conforming to the - // "k8s.container.restart_count" semantic conventions. It represents the - // number of times the container was restarted. This attribute can be used - // to identify a particular container (running or stopped) within a - // container spec. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 2 - K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count") - - // K8SCronJobNameKey is the attribute Key conforming to the - // "k8s.cronjob.name" semantic conventions. It represents the name of the - // CronJob. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SCronJobNameKey = attribute.Key("k8s.cronjob.name") - - // K8SCronJobUIDKey is the attribute Key conforming to the - // "k8s.cronjob.uid" semantic conventions. It represents the UID of the - // CronJob. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid") - - // K8SDaemonSetNameKey is the attribute Key conforming to the - // "k8s.daemonset.name" semantic conventions. It represents the name of the - // DaemonSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name") - - // K8SDaemonSetUIDKey is the attribute Key conforming to the - // "k8s.daemonset.uid" semantic conventions. It represents the UID of the - // DaemonSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid") - - // K8SDeploymentNameKey is the attribute Key conforming to the - // "k8s.deployment.name" semantic conventions. It represents the name of - // the Deployment. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SDeploymentNameKey = attribute.Key("k8s.deployment.name") - - // K8SDeploymentUIDKey is the attribute Key conforming to the - // "k8s.deployment.uid" semantic conventions. It represents the UID of the - // Deployment. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid") - - // K8SJobNameKey is the attribute Key conforming to the "k8s.job.name" - // semantic conventions. It represents the name of the Job. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SJobNameKey = attribute.Key("k8s.job.name") - - // K8SJobUIDKey is the attribute Key conforming to the "k8s.job.uid" - // semantic conventions. It represents the UID of the Job. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SJobUIDKey = attribute.Key("k8s.job.uid") - - // K8SNamespaceNameKey is the attribute Key conforming to the - // "k8s.namespace.name" semantic conventions. It represents the name of the - // namespace that the pod is running in. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'default' - K8SNamespaceNameKey = attribute.Key("k8s.namespace.name") - - // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name" - // semantic conventions. It represents the name of the Node. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'node-1' - K8SNodeNameKey = attribute.Key("k8s.node.name") - - // K8SNodeUIDKey is the attribute Key conforming to the "k8s.node.uid" - // semantic conventions. It represents the UID of the Node. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2' - K8SNodeUIDKey = attribute.Key("k8s.node.uid") - - // K8SPodNameKey is the attribute Key conforming to the "k8s.pod.name" - // semantic conventions. It represents the name of the Pod. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-pod-autoconf' - K8SPodNameKey = attribute.Key("k8s.pod.name") - - // K8SPodUIDKey is the attribute Key conforming to the "k8s.pod.uid" - // semantic conventions. It represents the UID of the Pod. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SPodUIDKey = attribute.Key("k8s.pod.uid") - - // K8SReplicaSetNameKey is the attribute Key conforming to the - // "k8s.replicaset.name" semantic conventions. It represents the name of - // the ReplicaSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name") - - // K8SReplicaSetUIDKey is the attribute Key conforming to the - // "k8s.replicaset.uid" semantic conventions. It represents the UID of the - // ReplicaSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid") - - // K8SStatefulSetNameKey is the attribute Key conforming to the - // "k8s.statefulset.name" semantic conventions. It represents the name of - // the StatefulSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name") - - // K8SStatefulSetUIDKey is the attribute Key conforming to the - // "k8s.statefulset.uid" semantic conventions. It represents the UID of the - // StatefulSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid") -) - -// K8SClusterName returns an attribute KeyValue conforming to the -// "k8s.cluster.name" semantic conventions. It represents the name of the -// cluster. -func K8SClusterName(val string) attribute.KeyValue { - return K8SClusterNameKey.String(val) -} - -// K8SClusterUID returns an attribute KeyValue conforming to the -// "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for the -// cluster, set to the UID of the `kube-system` namespace. -func K8SClusterUID(val string) attribute.KeyValue { - return K8SClusterUIDKey.String(val) -} - -// K8SContainerName returns an attribute KeyValue conforming to the -// "k8s.container.name" semantic conventions. It represents the name of the -// Container from Pod specification, must be unique within a Pod. Container -// runtime usually uses different globally unique name (`container.name`). -func K8SContainerName(val string) attribute.KeyValue { - return K8SContainerNameKey.String(val) -} - -// K8SContainerRestartCount returns an attribute KeyValue conforming to the -// "k8s.container.restart_count" semantic conventions. It represents the number -// of times the container was restarted. This attribute can be used to identify -// a particular container (running or stopped) within a container spec. -func K8SContainerRestartCount(val int) attribute.KeyValue { - return K8SContainerRestartCountKey.Int(val) -} - -// K8SCronJobName returns an attribute KeyValue conforming to the -// "k8s.cronjob.name" semantic conventions. It represents the name of the -// CronJob. -func K8SCronJobName(val string) attribute.KeyValue { - return K8SCronJobNameKey.String(val) -} - -// K8SCronJobUID returns an attribute KeyValue conforming to the -// "k8s.cronjob.uid" semantic conventions. It represents the UID of the -// CronJob. -func K8SCronJobUID(val string) attribute.KeyValue { - return K8SCronJobUIDKey.String(val) -} - -// K8SDaemonSetName returns an attribute KeyValue conforming to the -// "k8s.daemonset.name" semantic conventions. It represents the name of the -// DaemonSet. -func K8SDaemonSetName(val string) attribute.KeyValue { - return K8SDaemonSetNameKey.String(val) -} - -// K8SDaemonSetUID returns an attribute KeyValue conforming to the -// "k8s.daemonset.uid" semantic conventions. It represents the UID of the -// DaemonSet. -func K8SDaemonSetUID(val string) attribute.KeyValue { - return K8SDaemonSetUIDKey.String(val) -} - -// K8SDeploymentName returns an attribute KeyValue conforming to the -// "k8s.deployment.name" semantic conventions. It represents the name of the -// Deployment. -func K8SDeploymentName(val string) attribute.KeyValue { - return K8SDeploymentNameKey.String(val) -} - -// K8SDeploymentUID returns an attribute KeyValue conforming to the -// "k8s.deployment.uid" semantic conventions. It represents the UID of the -// Deployment. -func K8SDeploymentUID(val string) attribute.KeyValue { - return K8SDeploymentUIDKey.String(val) -} - -// K8SJobName returns an attribute KeyValue conforming to the "k8s.job.name" -// semantic conventions. It represents the name of the Job. -func K8SJobName(val string) attribute.KeyValue { - return K8SJobNameKey.String(val) -} - -// K8SJobUID returns an attribute KeyValue conforming to the "k8s.job.uid" -// semantic conventions. It represents the UID of the Job. -func K8SJobUID(val string) attribute.KeyValue { - return K8SJobUIDKey.String(val) -} - -// K8SNamespaceName returns an attribute KeyValue conforming to the -// "k8s.namespace.name" semantic conventions. It represents the name of the -// namespace that the pod is running in. -func K8SNamespaceName(val string) attribute.KeyValue { - return K8SNamespaceNameKey.String(val) -} - -// K8SNodeName returns an attribute KeyValue conforming to the -// "k8s.node.name" semantic conventions. It represents the name of the Node. -func K8SNodeName(val string) attribute.KeyValue { - return K8SNodeNameKey.String(val) -} - -// K8SNodeUID returns an attribute KeyValue conforming to the "k8s.node.uid" -// semantic conventions. It represents the UID of the Node. -func K8SNodeUID(val string) attribute.KeyValue { - return K8SNodeUIDKey.String(val) -} - -// K8SPodName returns an attribute KeyValue conforming to the "k8s.pod.name" -// semantic conventions. It represents the name of the Pod. -func K8SPodName(val string) attribute.KeyValue { - return K8SPodNameKey.String(val) -} - -// K8SPodUID returns an attribute KeyValue conforming to the "k8s.pod.uid" -// semantic conventions. It represents the UID of the Pod. -func K8SPodUID(val string) attribute.KeyValue { - return K8SPodUIDKey.String(val) -} - -// K8SReplicaSetName returns an attribute KeyValue conforming to the -// "k8s.replicaset.name" semantic conventions. It represents the name of the -// ReplicaSet. -func K8SReplicaSetName(val string) attribute.KeyValue { - return K8SReplicaSetNameKey.String(val) -} - -// K8SReplicaSetUID returns an attribute KeyValue conforming to the -// "k8s.replicaset.uid" semantic conventions. It represents the UID of the -// ReplicaSet. -func K8SReplicaSetUID(val string) attribute.KeyValue { - return K8SReplicaSetUIDKey.String(val) -} - -// K8SStatefulSetName returns an attribute KeyValue conforming to the -// "k8s.statefulset.name" semantic conventions. It represents the name of the -// StatefulSet. -func K8SStatefulSetName(val string) attribute.KeyValue { - return K8SStatefulSetNameKey.String(val) -} - -// K8SStatefulSetUID returns an attribute KeyValue conforming to the -// "k8s.statefulset.uid" semantic conventions. It represents the UID of the -// StatefulSet. -func K8SStatefulSetUID(val string) attribute.KeyValue { - return K8SStatefulSetUIDKey.String(val) -} - -// An OCI image manifest. -const ( - // OciManifestDigestKey is the attribute Key conforming to the - // "oci.manifest.digest" semantic conventions. It represents the digest of - // the OCI image manifest. For container images specifically is the digest - // by which the container image is known. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4' - // Note: Follows [OCI Image Manifest - // Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), - // and specifically the [Digest - // property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests). - // An example can be found in [Example Image - // Manifest](https://docs.docker.com/registry/spec/manifest-v2-2/#example-image-manifest). - OciManifestDigestKey = attribute.Key("oci.manifest.digest") -) - -// OciManifestDigest returns an attribute KeyValue conforming to the -// "oci.manifest.digest" semantic conventions. It represents the digest of the -// OCI image manifest. For container images specifically is the digest by which -// the container image is known. -func OciManifestDigest(val string) attribute.KeyValue { - return OciManifestDigestKey.String(val) -} - -// The operating system (OS) on which the process represented by this resource -// is running. -const ( - // OSBuildIDKey is the attribute Key conforming to the "os.build_id" - // semantic conventions. It represents the unique identifier for a - // particular build or compilation of the operating system. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'TQ3C.230805.001.B2', '20E247', '22621' - OSBuildIDKey = attribute.Key("os.build_id") - - // OSDescriptionKey is the attribute Key conforming to the "os.description" - // semantic conventions. It represents the human readable (not intended to - // be parsed) OS version information, like e.g. reported by `ver` or - // `lsb_release -a` commands. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1 - // LTS' - OSDescriptionKey = attribute.Key("os.description") - - // OSNameKey is the attribute Key conforming to the "os.name" semantic - // conventions. It represents the human readable operating system name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'iOS', 'Android', 'Ubuntu' - OSNameKey = attribute.Key("os.name") - - // OSTypeKey is the attribute Key conforming to the "os.type" semantic - // conventions. It represents the operating system type. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - OSTypeKey = attribute.Key("os.type") - - // OSVersionKey is the attribute Key conforming to the "os.version" - // semantic conventions. It represents the version string of the operating - // system as defined in [Version - // Attributes](/docs/resource/README.md#version-attributes). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '14.2.1', '18.04.1' - OSVersionKey = attribute.Key("os.version") -) - -var ( - // Microsoft Windows - OSTypeWindows = OSTypeKey.String("windows") - // Linux - OSTypeLinux = OSTypeKey.String("linux") - // Apple Darwin - OSTypeDarwin = OSTypeKey.String("darwin") - // FreeBSD - OSTypeFreeBSD = OSTypeKey.String("freebsd") - // NetBSD - OSTypeNetBSD = OSTypeKey.String("netbsd") - // OpenBSD - OSTypeOpenBSD = OSTypeKey.String("openbsd") - // DragonFly BSD - OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd") - // HP-UX (Hewlett Packard Unix) - OSTypeHPUX = OSTypeKey.String("hpux") - // AIX (Advanced Interactive eXecutive) - OSTypeAIX = OSTypeKey.String("aix") - // SunOS, Oracle Solaris - OSTypeSolaris = OSTypeKey.String("solaris") - // IBM z/OS - OSTypeZOS = OSTypeKey.String("z_os") -) - -// OSBuildID returns an attribute KeyValue conforming to the "os.build_id" -// semantic conventions. It represents the unique identifier for a particular -// build or compilation of the operating system. -func OSBuildID(val string) attribute.KeyValue { - return OSBuildIDKey.String(val) -} - -// OSDescription returns an attribute KeyValue conforming to the -// "os.description" semantic conventions. It represents the human readable (not -// intended to be parsed) OS version information, like e.g. reported by `ver` -// or `lsb_release -a` commands. -func OSDescription(val string) attribute.KeyValue { - return OSDescriptionKey.String(val) -} - -// OSName returns an attribute KeyValue conforming to the "os.name" semantic -// conventions. It represents the human readable operating system name. -func OSName(val string) attribute.KeyValue { - return OSNameKey.String(val) -} - -// OSVersion returns an attribute KeyValue conforming to the "os.version" -// semantic conventions. It represents the version string of the operating -// system as defined in [Version -// Attributes](/docs/resource/README.md#version-attributes). -func OSVersion(val string) attribute.KeyValue { - return OSVersionKey.String(val) -} - -// An operating system process. -const ( - // ProcessCommandKey is the attribute Key conforming to the - // "process.command" semantic conventions. It represents the command used - // to launch the process (i.e. the command name). On Linux based systems, - // can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can - // be set to the first parameter extracted from `GetCommandLineW`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'cmd/otelcol' - ProcessCommandKey = attribute.Key("process.command") - - // ProcessCommandArgsKey is the attribute Key conforming to the - // "process.command_args" semantic conventions. It represents the all the - // command arguments (including the command/executable itself) as received - // by the process. On Linux-based systems (and some other Unixoid systems - // supporting procfs), can be set according to the list of null-delimited - // strings extracted from `proc/[pid]/cmdline`. For libc-based executables, - // this would be the full argv vector passed to `main`. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'cmd/otecol', '--config=config.yaml' - ProcessCommandArgsKey = attribute.Key("process.command_args") - - // ProcessCommandLineKey is the attribute Key conforming to the - // "process.command_line" semantic conventions. It represents the full - // command used to launch the process as a single string representing the - // full command. On Windows, can be set to the result of `GetCommandLineW`. - // Do not set this if you have to assemble it just for monitoring; use - // `process.command_args` instead. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'C:\\cmd\\otecol --config="my directory\\config.yaml"' - ProcessCommandLineKey = attribute.Key("process.command_line") - - // ProcessExecutableNameKey is the attribute Key conforming to the - // "process.executable.name" semantic conventions. It represents the name - // of the process executable. On Linux based systems, can be set to the - // `Name` in `proc/[pid]/status`. On Windows, can be set to the base name - // of `GetProcessImageFileNameW`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcol' - ProcessExecutableNameKey = attribute.Key("process.executable.name") - - // ProcessExecutablePathKey is the attribute Key conforming to the - // "process.executable.path" semantic conventions. It represents the full - // path to the process executable. On Linux based systems, can be set to - // the target of `proc/[pid]/exe`. On Windows, can be set to the result of - // `GetProcessImageFileNameW`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/usr/bin/cmd/otelcol' - ProcessExecutablePathKey = attribute.Key("process.executable.path") - - // ProcessOwnerKey is the attribute Key conforming to the "process.owner" - // semantic conventions. It represents the username of the user that owns - // the process. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'root' - ProcessOwnerKey = attribute.Key("process.owner") - - // ProcessParentPIDKey is the attribute Key conforming to the - // "process.parent_pid" semantic conventions. It represents the parent - // Process identifier (PPID). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 111 - ProcessParentPIDKey = attribute.Key("process.parent_pid") - - // ProcessPIDKey is the attribute Key conforming to the "process.pid" - // semantic conventions. It represents the process identifier (PID). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1234 - ProcessPIDKey = attribute.Key("process.pid") - - // ProcessRuntimeDescriptionKey is the attribute Key conforming to the - // "process.runtime.description" semantic conventions. It represents an - // additional description about the runtime of the process, for example a - // specific vendor customization of the runtime environment. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0' - ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description") - - // ProcessRuntimeNameKey is the attribute Key conforming to the - // "process.runtime.name" semantic conventions. It represents the name of - // the runtime of this process. For compiled native binaries, this SHOULD - // be the name of the compiler. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'OpenJDK Runtime Environment' - ProcessRuntimeNameKey = attribute.Key("process.runtime.name") - - // ProcessRuntimeVersionKey is the attribute Key conforming to the - // "process.runtime.version" semantic conventions. It represents the - // version of the runtime of this process, as returned by the runtime - // without modification. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '14.0.2' - ProcessRuntimeVersionKey = attribute.Key("process.runtime.version") -) - -// ProcessCommand returns an attribute KeyValue conforming to the -// "process.command" semantic conventions. It represents the command used to -// launch the process (i.e. the command name). On Linux based systems, can be -// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to -// the first parameter extracted from `GetCommandLineW`. -func ProcessCommand(val string) attribute.KeyValue { - return ProcessCommandKey.String(val) -} - -// ProcessCommandArgs returns an attribute KeyValue conforming to the -// "process.command_args" semantic conventions. It represents the all the -// command arguments (including the command/executable itself) as received by -// the process. On Linux-based systems (and some other Unixoid systems -// supporting procfs), can be set according to the list of null-delimited -// strings extracted from `proc/[pid]/cmdline`. For libc-based executables, -// this would be the full argv vector passed to `main`. -func ProcessCommandArgs(val ...string) attribute.KeyValue { - return ProcessCommandArgsKey.StringSlice(val) -} - -// ProcessCommandLine returns an attribute KeyValue conforming to the -// "process.command_line" semantic conventions. It represents the full command -// used to launch the process as a single string representing the full command. -// On Windows, can be set to the result of `GetCommandLineW`. Do not set this -// if you have to assemble it just for monitoring; use `process.command_args` -// instead. -func ProcessCommandLine(val string) attribute.KeyValue { - return ProcessCommandLineKey.String(val) -} - -// ProcessExecutableName returns an attribute KeyValue conforming to the -// "process.executable.name" semantic conventions. It represents the name of -// the process executable. On Linux based systems, can be set to the `Name` in -// `proc/[pid]/status`. On Windows, can be set to the base name of -// `GetProcessImageFileNameW`. -func ProcessExecutableName(val string) attribute.KeyValue { - return ProcessExecutableNameKey.String(val) -} - -// ProcessExecutablePath returns an attribute KeyValue conforming to the -// "process.executable.path" semantic conventions. It represents the full path -// to the process executable. On Linux based systems, can be set to the target -// of `proc/[pid]/exe`. On Windows, can be set to the result of -// `GetProcessImageFileNameW`. -func ProcessExecutablePath(val string) attribute.KeyValue { - return ProcessExecutablePathKey.String(val) -} - -// ProcessOwner returns an attribute KeyValue conforming to the -// "process.owner" semantic conventions. It represents the username of the user -// that owns the process. -func ProcessOwner(val string) attribute.KeyValue { - return ProcessOwnerKey.String(val) -} - -// ProcessParentPID returns an attribute KeyValue conforming to the -// "process.parent_pid" semantic conventions. It represents the parent Process -// identifier (PPID). -func ProcessParentPID(val int) attribute.KeyValue { - return ProcessParentPIDKey.Int(val) -} - -// ProcessPID returns an attribute KeyValue conforming to the "process.pid" -// semantic conventions. It represents the process identifier (PID). -func ProcessPID(val int) attribute.KeyValue { - return ProcessPIDKey.Int(val) -} - -// ProcessRuntimeDescription returns an attribute KeyValue conforming to the -// "process.runtime.description" semantic conventions. It represents an -// additional description about the runtime of the process, for example a -// specific vendor customization of the runtime environment. -func ProcessRuntimeDescription(val string) attribute.KeyValue { - return ProcessRuntimeDescriptionKey.String(val) -} - -// ProcessRuntimeName returns an attribute KeyValue conforming to the -// "process.runtime.name" semantic conventions. It represents the name of the -// runtime of this process. For compiled native binaries, this SHOULD be the -// name of the compiler. -func ProcessRuntimeName(val string) attribute.KeyValue { - return ProcessRuntimeNameKey.String(val) -} - -// ProcessRuntimeVersion returns an attribute KeyValue conforming to the -// "process.runtime.version" semantic conventions. It represents the version of -// the runtime of this process, as returned by the runtime without -// modification. -func ProcessRuntimeVersion(val string) attribute.KeyValue { - return ProcessRuntimeVersionKey.String(val) -} - -// The Android platform on which the Android application is running. -const ( - // AndroidOSAPILevelKey is the attribute Key conforming to the - // "android.os.api_level" semantic conventions. It represents the uniquely - // identifies the framework API revision offered by a version - // (`os.version`) of the android operating system. More information can be - // found - // [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '33', '32' - AndroidOSAPILevelKey = attribute.Key("android.os.api_level") -) - -// AndroidOSAPILevel returns an attribute KeyValue conforming to the -// "android.os.api_level" semantic conventions. It represents the uniquely -// identifies the framework API revision offered by a version (`os.version`) of -// the android operating system. More information can be found -// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels). -func AndroidOSAPILevel(val string) attribute.KeyValue { - return AndroidOSAPILevelKey.String(val) -} - -// The web browser in which the application represented by the resource is -// running. The `browser.*` attributes MUST be used only for resources that -// represent applications running in a web browser (regardless of whether -// running on a mobile or desktop device). -const ( - // BrowserBrandsKey is the attribute Key conforming to the "browser.brands" - // semantic conventions. It represents the array of brand name and version - // separated by a space - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99' - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.brands`). - BrowserBrandsKey = attribute.Key("browser.brands") - - // BrowserLanguageKey is the attribute Key conforming to the - // "browser.language" semantic conventions. It represents the preferred - // language of the user using the browser - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'en', 'en-US', 'fr', 'fr-FR' - // Note: This value is intended to be taken from the Navigator API - // `navigator.language`. - BrowserLanguageKey = attribute.Key("browser.language") - - // BrowserMobileKey is the attribute Key conforming to the "browser.mobile" - // semantic conventions. It represents a boolean that is true if the - // browser is running on a mobile device - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.mobile`). If unavailable, this attribute - // SHOULD be left unset. - BrowserMobileKey = attribute.Key("browser.mobile") - - // BrowserPlatformKey is the attribute Key conforming to the - // "browser.platform" semantic conventions. It represents the platform on - // which the browser is running - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Windows', 'macOS', 'Android' - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.platform`). If unavailable, the legacy - // `navigator.platform` API SHOULD NOT be used instead and this attribute - // SHOULD be left unset in order for the values to be consistent. - // The list of possible values is defined in the [W3C User-Agent Client - // Hints - // specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform). - // Note that some (but not all) of these values can overlap with values in - // the [`os.type` and `os.name` attributes](./os.md). However, for - // consistency, the values in the `browser.platform` attribute should - // capture the exact value that the user agent provides. - BrowserPlatformKey = attribute.Key("browser.platform") -) - -// BrowserBrands returns an attribute KeyValue conforming to the -// "browser.brands" semantic conventions. It represents the array of brand name -// and version separated by a space -func BrowserBrands(val ...string) attribute.KeyValue { - return BrowserBrandsKey.StringSlice(val) -} - -// BrowserLanguage returns an attribute KeyValue conforming to the -// "browser.language" semantic conventions. It represents the preferred -// language of the user using the browser -func BrowserLanguage(val string) attribute.KeyValue { - return BrowserLanguageKey.String(val) -} - -// BrowserMobile returns an attribute KeyValue conforming to the -// "browser.mobile" semantic conventions. It represents a boolean that is true -// if the browser is running on a mobile device -func BrowserMobile(val bool) attribute.KeyValue { - return BrowserMobileKey.Bool(val) -} - -// BrowserPlatform returns an attribute KeyValue conforming to the -// "browser.platform" semantic conventions. It represents the platform on which -// the browser is running -func BrowserPlatform(val string) attribute.KeyValue { - return BrowserPlatformKey.String(val) -} - -// Resources used by AWS Elastic Container Service (ECS). -const ( - // AWSECSClusterARNKey is the attribute Key conforming to the - // "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an - // [ECS - // cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' - AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn") - - // AWSECSContainerARNKey is the attribute Key conforming to the - // "aws.ecs.container.arn" semantic conventions. It represents the Amazon - // Resource Name (ARN) of an [ECS container - // instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9' - AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn") - - // AWSECSLaunchtypeKey is the attribute Key conforming to the - // "aws.ecs.launchtype" semantic conventions. It represents the [launch - // type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) - // for an ECS task. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype") - - // AWSECSTaskARNKey is the attribute Key conforming to the - // "aws.ecs.task.arn" semantic conventions. It represents the ARN of an - // [ECS task - // definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b' - AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn") - - // AWSECSTaskFamilyKey is the attribute Key conforming to the - // "aws.ecs.task.family" semantic conventions. It represents the task - // definition family this task definition is a member of. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-family' - AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family") - - // AWSECSTaskRevisionKey is the attribute Key conforming to the - // "aws.ecs.task.revision" semantic conventions. It represents the revision - // for this task definition. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '8', '26' - AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision") -) - -var ( - // ec2 - AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2") - // fargate - AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate") -) - -// AWSECSClusterARN returns an attribute KeyValue conforming to the -// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an [ECS -// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). -func AWSECSClusterARN(val string) attribute.KeyValue { - return AWSECSClusterARNKey.String(val) -} - -// AWSECSContainerARN returns an attribute KeyValue conforming to the -// "aws.ecs.container.arn" semantic conventions. It represents the Amazon -// Resource Name (ARN) of an [ECS container -// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). -func AWSECSContainerARN(val string) attribute.KeyValue { - return AWSECSContainerARNKey.String(val) -} - -// AWSECSTaskARN returns an attribute KeyValue conforming to the -// "aws.ecs.task.arn" semantic conventions. It represents the ARN of an [ECS -// task -// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html). -func AWSECSTaskARN(val string) attribute.KeyValue { - return AWSECSTaskARNKey.String(val) -} - -// AWSECSTaskFamily returns an attribute KeyValue conforming to the -// "aws.ecs.task.family" semantic conventions. It represents the task -// definition family this task definition is a member of. -func AWSECSTaskFamily(val string) attribute.KeyValue { - return AWSECSTaskFamilyKey.String(val) -} - -// AWSECSTaskRevision returns an attribute KeyValue conforming to the -// "aws.ecs.task.revision" semantic conventions. It represents the revision for -// this task definition. -func AWSECSTaskRevision(val string) attribute.KeyValue { - return AWSECSTaskRevisionKey.String(val) -} - -// Resources used by AWS Elastic Kubernetes Service (EKS). -const ( - // AWSEKSClusterARNKey is the attribute Key conforming to the - // "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an - // EKS cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' - AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn") -) - -// AWSEKSClusterARN returns an attribute KeyValue conforming to the -// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS -// cluster. -func AWSEKSClusterARN(val string) attribute.KeyValue { - return AWSEKSClusterARNKey.String(val) -} - -// Resources specific to Amazon Web Services. -const ( - // AWSLogGroupARNsKey is the attribute Key conforming to the - // "aws.log.group.arns" semantic conventions. It represents the Amazon - // Resource Name(s) (ARN) of the AWS log group(s). - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*' - // Note: See the [log group ARN format - // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). - AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns") - - // AWSLogGroupNamesKey is the attribute Key conforming to the - // "aws.log.group.names" semantic conventions. It represents the name(s) of - // the AWS log group(s) an application is writing to. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/aws/lambda/my-function', 'opentelemetry-service' - // Note: Multiple log groups must be supported for cases like - // multi-container applications, where a single application has sidecar - // containers, and each write to their own log group. - AWSLogGroupNamesKey = attribute.Key("aws.log.group.names") - - // AWSLogStreamARNsKey is the attribute Key conforming to the - // "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of - // the AWS log stream(s). - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' - // Note: See the [log stream ARN format - // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). - // One log group can contain several log streams, so these ARNs necessarily - // identify both a log group and a log stream. - AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns") - - // AWSLogStreamNamesKey is the attribute Key conforming to the - // "aws.log.stream.names" semantic conventions. It represents the name(s) - // of the AWS log stream(s) an application is writing to. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' - AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names") -) - -// AWSLogGroupARNs returns an attribute KeyValue conforming to the -// "aws.log.group.arns" semantic conventions. It represents the Amazon Resource -// Name(s) (ARN) of the AWS log group(s). -func AWSLogGroupARNs(val ...string) attribute.KeyValue { - return AWSLogGroupARNsKey.StringSlice(val) -} - -// AWSLogGroupNames returns an attribute KeyValue conforming to the -// "aws.log.group.names" semantic conventions. It represents the name(s) of the -// AWS log group(s) an application is writing to. -func AWSLogGroupNames(val ...string) attribute.KeyValue { - return AWSLogGroupNamesKey.StringSlice(val) -} - -// AWSLogStreamARNs returns an attribute KeyValue conforming to the -// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the -// AWS log stream(s). -func AWSLogStreamARNs(val ...string) attribute.KeyValue { - return AWSLogStreamARNsKey.StringSlice(val) -} - -// AWSLogStreamNames returns an attribute KeyValue conforming to the -// "aws.log.stream.names" semantic conventions. It represents the name(s) of -// the AWS log stream(s) an application is writing to. -func AWSLogStreamNames(val ...string) attribute.KeyValue { - return AWSLogStreamNamesKey.StringSlice(val) -} - -// Resource used by Google Cloud Run. -const ( - // GCPCloudRunJobExecutionKey is the attribute Key conforming to the - // "gcp.cloud_run.job.execution" semantic conventions. It represents the - // name of the Cloud Run - // [execution](https://cloud.google.com/run/docs/managing/job-executions) - // being run for the Job, as set by the - // [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) - // environment variable. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'job-name-xxxx', 'sample-job-mdw84' - GCPCloudRunJobExecutionKey = attribute.Key("gcp.cloud_run.job.execution") - - // GCPCloudRunJobTaskIndexKey is the attribute Key conforming to the - // "gcp.cloud_run.job.task_index" semantic conventions. It represents the - // index for a task within an execution as provided by the - // [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) - // environment variable. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 1 - GCPCloudRunJobTaskIndexKey = attribute.Key("gcp.cloud_run.job.task_index") -) - -// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the -// "gcp.cloud_run.job.execution" semantic conventions. It represents the name -// of the Cloud Run -// [execution](https://cloud.google.com/run/docs/managing/job-executions) being -// run for the Job, as set by the -// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) -// environment variable. -func GCPCloudRunJobExecution(val string) attribute.KeyValue { - return GCPCloudRunJobExecutionKey.String(val) -} - -// GCPCloudRunJobTaskIndex returns an attribute KeyValue conforming to the -// "gcp.cloud_run.job.task_index" semantic conventions. It represents the index -// for a task within an execution as provided by the -// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) -// environment variable. -func GCPCloudRunJobTaskIndex(val int) attribute.KeyValue { - return GCPCloudRunJobTaskIndexKey.Int(val) -} - -// Resources used by Google Compute Engine (GCE). -const ( - // GCPGceInstanceHostnameKey is the attribute Key conforming to the - // "gcp.gce.instance.hostname" semantic conventions. It represents the - // hostname of a GCE instance. This is the full value of the default or - // [custom - // hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'my-host1234.example.com', - // 'sample-vm.us-west1-b.c.my-project.internal' - GCPGceInstanceHostnameKey = attribute.Key("gcp.gce.instance.hostname") - - // GCPGceInstanceNameKey is the attribute Key conforming to the - // "gcp.gce.instance.name" semantic conventions. It represents the instance - // name of a GCE instance. This is the value provided by `host.name`, the - // visible name of the instance in the Cloud Console UI, and the prefix for - // the default hostname of the instance as defined by the [default internal - // DNS - // name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'instance-1', 'my-vm-name' - GCPGceInstanceNameKey = attribute.Key("gcp.gce.instance.name") -) - -// GCPGceInstanceHostname returns an attribute KeyValue conforming to the -// "gcp.gce.instance.hostname" semantic conventions. It represents the hostname -// of a GCE instance. This is the full value of the default or [custom -// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm). -func GCPGceInstanceHostname(val string) attribute.KeyValue { - return GCPGceInstanceHostnameKey.String(val) -} - -// GCPGceInstanceName returns an attribute KeyValue conforming to the -// "gcp.gce.instance.name" semantic conventions. It represents the instance -// name of a GCE instance. This is the value provided by `host.name`, the -// visible name of the instance in the Cloud Console UI, and the prefix for the -// default hostname of the instance as defined by the [default internal DNS -// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names). -func GCPGceInstanceName(val string) attribute.KeyValue { - return GCPGceInstanceNameKey.String(val) -} - -// Heroku dyno metadata -const ( - // HerokuAppIDKey is the attribute Key conforming to the "heroku.app.id" - // semantic conventions. It represents the unique identifier for the - // application - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2daa2797-e42b-4624-9322-ec3f968df4da' - HerokuAppIDKey = attribute.Key("heroku.app.id") - - // HerokuReleaseCommitKey is the attribute Key conforming to the - // "heroku.release.commit" semantic conventions. It represents the commit - // hash for the current release - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'e6134959463efd8966b20e75b913cafe3f5ec' - HerokuReleaseCommitKey = attribute.Key("heroku.release.commit") - - // HerokuReleaseCreationTimestampKey is the attribute Key conforming to the - // "heroku.release.creation_timestamp" semantic conventions. It represents - // the time and date the release was created - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2022-10-23T18:00:42Z' - HerokuReleaseCreationTimestampKey = attribute.Key("heroku.release.creation_timestamp") -) - -// HerokuAppID returns an attribute KeyValue conforming to the -// "heroku.app.id" semantic conventions. It represents the unique identifier -// for the application -func HerokuAppID(val string) attribute.KeyValue { - return HerokuAppIDKey.String(val) -} - -// HerokuReleaseCommit returns an attribute KeyValue conforming to the -// "heroku.release.commit" semantic conventions. It represents the commit hash -// for the current release -func HerokuReleaseCommit(val string) attribute.KeyValue { - return HerokuReleaseCommitKey.String(val) -} - -// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming -// to the "heroku.release.creation_timestamp" semantic conventions. It -// represents the time and date the release was created -func HerokuReleaseCreationTimestamp(val string) attribute.KeyValue { - return HerokuReleaseCreationTimestampKey.String(val) -} - -// The software deployment. -const ( - // DeploymentEnvironmentKey is the attribute Key conforming to the - // "deployment.environment" semantic conventions. It represents the name of - // the [deployment - // environment](https://wikipedia.org/wiki/Deployment_environment) (aka - // deployment tier). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'staging', 'production' - // Note: `deployment.environment` does not affect the uniqueness - // constraints defined through - // the `service.namespace`, `service.name` and `service.instance.id` - // resource attributes. - // This implies that resources carrying the following attribute - // combinations MUST be - // considered to be identifying the same service: - // - // * `service.name=frontend`, `deployment.environment=production` - // * `service.name=frontend`, `deployment.environment=staging`. - DeploymentEnvironmentKey = attribute.Key("deployment.environment") -) - -// DeploymentEnvironment returns an attribute KeyValue conforming to the -// "deployment.environment" semantic conventions. It represents the name of the -// [deployment environment](https://wikipedia.org/wiki/Deployment_environment) -// (aka deployment tier). -func DeploymentEnvironment(val string) attribute.KeyValue { - return DeploymentEnvironmentKey.String(val) -} - -// A serverless instance. -const ( - // FaaSInstanceKey is the attribute Key conforming to the "faas.instance" - // semantic conventions. It represents the execution environment ID as a - // string, that will be potentially reused for other invocations to the - // same function/function version. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de' - // Note: * **AWS Lambda:** Use the (full) log stream name. - FaaSInstanceKey = attribute.Key("faas.instance") - - // FaaSMaxMemoryKey is the attribute Key conforming to the - // "faas.max_memory" semantic conventions. It represents the amount of - // memory available to the serverless function converted to Bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 134217728 - // Note: It's recommended to set this attribute since e.g. too little - // memory can easily stop a Java AWS Lambda function from working - // correctly. On AWS Lambda, the environment variable - // `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must - // be multiplied by 1,048,576). - FaaSMaxMemoryKey = attribute.Key("faas.max_memory") - - // FaaSNameKey is the attribute Key conforming to the "faas.name" semantic - // conventions. It represents the name of the single function that this - // runtime instance executes. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'my-function', 'myazurefunctionapp/some-function-name' - // Note: This is the name of the function as configured/deployed on the - // FaaS - // platform and is usually different from the name of the callback - // function (which may be stored in the - // [`code.namespace`/`code.function`](/docs/general/attributes.md#source-code-attributes) - // span attributes). - // - // For some cloud providers, the above definition is ambiguous. The - // following - // definition of function name MUST be used for this attribute - // (and consequently the span name) for the listed cloud - // providers/products: - // - // * **Azure:** The full name `/`, i.e., function app name - // followed by a forward slash followed by the function name (this form - // can also be seen in the resource JSON for the function). - // This means that a span attribute MUST be used, as an Azure function - // app can host multiple functions that would usually share - // a TracerProvider (see also the `cloud.resource_id` attribute). - FaaSNameKey = attribute.Key("faas.name") - - // FaaSVersionKey is the attribute Key conforming to the "faas.version" - // semantic conventions. It represents the immutable version of the - // function being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '26', 'pinkfroid-00002' - // Note: Depending on the cloud provider and platform, use: - // - // * **AWS Lambda:** The [function - // version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) - // (an integer represented as a decimal string). - // * **Google Cloud Run (Services):** The - // [revision](https://cloud.google.com/run/docs/managing/revisions) - // (i.e., the function name plus the revision suffix). - // * **Google Cloud Functions:** The value of the - // [`K_REVISION` environment - // variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically). - // * **Azure Functions:** Not applicable. Do not set this attribute. - FaaSVersionKey = attribute.Key("faas.version") -) - -// FaaSInstance returns an attribute KeyValue conforming to the -// "faas.instance" semantic conventions. It represents the execution -// environment ID as a string, that will be potentially reused for other -// invocations to the same function/function version. -func FaaSInstance(val string) attribute.KeyValue { - return FaaSInstanceKey.String(val) -} - -// FaaSMaxMemory returns an attribute KeyValue conforming to the -// "faas.max_memory" semantic conventions. It represents the amount of memory -// available to the serverless function converted to Bytes. -func FaaSMaxMemory(val int) attribute.KeyValue { - return FaaSMaxMemoryKey.Int(val) -} - -// FaaSName returns an attribute KeyValue conforming to the "faas.name" -// semantic conventions. It represents the name of the single function that -// this runtime instance executes. -func FaaSName(val string) attribute.KeyValue { - return FaaSNameKey.String(val) -} - -// FaaSVersion returns an attribute KeyValue conforming to the -// "faas.version" semantic conventions. It represents the immutable version of -// the function being executed. -func FaaSVersion(val string) attribute.KeyValue { - return FaaSVersionKey.String(val) -} - -// A service instance. -const ( - // ServiceNameKey is the attribute Key conforming to the "service.name" - // semantic conventions. It represents the logical name of the service. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'shoppingcart' - // Note: MUST be the same for all instances of horizontally scaled - // services. If the value was not specified, SDKs MUST fallback to - // `unknown_service:` concatenated with - // [`process.executable.name`](process.md#process), e.g. - // `unknown_service:bash`. If `process.executable.name` is not available, - // the value MUST be set to `unknown_service`. - ServiceNameKey = attribute.Key("service.name") - - // ServiceVersionKey is the attribute Key conforming to the - // "service.version" semantic conventions. It represents the version string - // of the service API or implementation. The format is not defined by these - // conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2.0.0', 'a01dbef8a' - ServiceVersionKey = attribute.Key("service.version") -) - -// ServiceName returns an attribute KeyValue conforming to the -// "service.name" semantic conventions. It represents the logical name of the -// service. -func ServiceName(val string) attribute.KeyValue { - return ServiceNameKey.String(val) -} - -// ServiceVersion returns an attribute KeyValue conforming to the -// "service.version" semantic conventions. It represents the version string of -// the service API or implementation. The format is not defined by these -// conventions. -func ServiceVersion(val string) attribute.KeyValue { - return ServiceVersionKey.String(val) -} - -// A service instance. -const ( - // ServiceInstanceIDKey is the attribute Key conforming to the - // "service.instance.id" semantic conventions. It represents the string ID - // of the service instance. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'my-k8s-pod-deployment-1', - // '627cc493-f310-47de-96bd-71410b7dec09' - // Note: MUST be unique for each instance of the same - // `service.namespace,service.name` pair (in other words - // `service.namespace,service.name,service.instance.id` triplet MUST be - // globally unique). The ID helps to distinguish instances of the same - // service that exist at the same time (e.g. instances of a horizontally - // scaled service). It is preferable for the ID to be persistent and stay - // the same for the lifetime of the service instance, however it is - // acceptable that the ID is ephemeral and changes during important - // lifetime events for the service (e.g. service restarts). If the service - // has no inherent unique ID that can be used as the value of this - // attribute it is recommended to generate a random Version 1 or Version 4 - // RFC 4122 UUID (services aiming for reproducible UUIDs may also use - // Version 5, see RFC 4122 for more recommendations). - ServiceInstanceIDKey = attribute.Key("service.instance.id") - - // ServiceNamespaceKey is the attribute Key conforming to the - // "service.namespace" semantic conventions. It represents a namespace for - // `service.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Shop' - // Note: A string value having a meaning that helps to distinguish a group - // of services, for example the team name that owns a group of services. - // `service.name` is expected to be unique within the same namespace. If - // `service.namespace` is not specified in the Resource then `service.name` - // is expected to be unique for all services that have no explicit - // namespace defined (so the empty/unspecified namespace is simply one more - // valid namespace). Zero-length namespace string is assumed equal to - // unspecified namespace. - ServiceNamespaceKey = attribute.Key("service.namespace") -) - -// ServiceInstanceID returns an attribute KeyValue conforming to the -// "service.instance.id" semantic conventions. It represents the string ID of -// the service instance. -func ServiceInstanceID(val string) attribute.KeyValue { - return ServiceInstanceIDKey.String(val) -} - -// ServiceNamespace returns an attribute KeyValue conforming to the -// "service.namespace" semantic conventions. It represents a namespace for -// `service.name`. -func ServiceNamespace(val string) attribute.KeyValue { - return ServiceNamespaceKey.String(val) -} - -// The telemetry SDK used to capture data recorded by the instrumentation -// libraries. -const ( - // TelemetrySDKLanguageKey is the attribute Key conforming to the - // "telemetry.sdk.language" semantic conventions. It represents the - // language of the telemetry SDK. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language") - - // TelemetrySDKNameKey is the attribute Key conforming to the - // "telemetry.sdk.name" semantic conventions. It represents the name of the - // telemetry SDK as defined above. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'opentelemetry' - // Note: The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute - // to `opentelemetry`. - // If another SDK, like a fork or a vendor-provided implementation, is - // used, this SDK MUST set the - // `telemetry.sdk.name` attribute to the fully-qualified class or module - // name of this SDK's main entry point - // or another suitable identifier depending on the language. - // The identifier `opentelemetry` is reserved and MUST NOT be used in this - // case. - // All custom identifiers SHOULD be stable across different versions of an - // implementation. - TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name") - - // TelemetrySDKVersionKey is the attribute Key conforming to the - // "telemetry.sdk.version" semantic conventions. It represents the version - // string of the telemetry SDK. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: '1.2.3' - TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version") -) - -var ( - // cpp - TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp") - // dotnet - TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet") - // erlang - TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang") - // go - TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go") - // java - TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java") - // nodejs - TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs") - // php - TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php") - // python - TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python") - // ruby - TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby") - // rust - TelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String("rust") - // swift - TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift") - // webjs - TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs") -) - -// TelemetrySDKName returns an attribute KeyValue conforming to the -// "telemetry.sdk.name" semantic conventions. It represents the name of the -// telemetry SDK as defined above. -func TelemetrySDKName(val string) attribute.KeyValue { - return TelemetrySDKNameKey.String(val) -} - -// TelemetrySDKVersion returns an attribute KeyValue conforming to the -// "telemetry.sdk.version" semantic conventions. It represents the version -// string of the telemetry SDK. -func TelemetrySDKVersion(val string) attribute.KeyValue { - return TelemetrySDKVersionKey.String(val) -} - -// The telemetry SDK used to capture data recorded by the instrumentation -// libraries. -const ( - // TelemetryDistroNameKey is the attribute Key conforming to the - // "telemetry.distro.name" semantic conventions. It represents the name of - // the auto instrumentation agent or distribution, if used. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'parts-unlimited-java' - // Note: Official auto instrumentation agents and distributions SHOULD set - // the `telemetry.distro.name` attribute to - // a string starting with `opentelemetry-`, e.g. - // `opentelemetry-java-instrumentation`. - TelemetryDistroNameKey = attribute.Key("telemetry.distro.name") - - // TelemetryDistroVersionKey is the attribute Key conforming to the - // "telemetry.distro.version" semantic conventions. It represents the - // version string of the auto instrumentation agent or distribution, if - // used. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.2.3' - TelemetryDistroVersionKey = attribute.Key("telemetry.distro.version") -) - -// TelemetryDistroName returns an attribute KeyValue conforming to the -// "telemetry.distro.name" semantic conventions. It represents the name of the -// auto instrumentation agent or distribution, if used. -func TelemetryDistroName(val string) attribute.KeyValue { - return TelemetryDistroNameKey.String(val) -} - -// TelemetryDistroVersion returns an attribute KeyValue conforming to the -// "telemetry.distro.version" semantic conventions. It represents the version -// string of the auto instrumentation agent or distribution, if used. -func TelemetryDistroVersion(val string) attribute.KeyValue { - return TelemetryDistroVersionKey.String(val) -} - -// Resource describing the packaged software running the application code. Web -// engines are typically executed using process.runtime. -const ( - // WebEngineDescriptionKey is the attribute Key conforming to the - // "webengine.description" semantic conventions. It represents the - // additional description of the web engine (e.g. detailed version and - // edition information). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - - // 2.2.2.Final' - WebEngineDescriptionKey = attribute.Key("webengine.description") - - // WebEngineNameKey is the attribute Key conforming to the "webengine.name" - // semantic conventions. It represents the name of the web engine. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'WildFly' - WebEngineNameKey = attribute.Key("webengine.name") - - // WebEngineVersionKey is the attribute Key conforming to the - // "webengine.version" semantic conventions. It represents the version of - // the web engine. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '21.0.0' - WebEngineVersionKey = attribute.Key("webengine.version") -) - -// WebEngineDescription returns an attribute KeyValue conforming to the -// "webengine.description" semantic conventions. It represents the additional -// description of the web engine (e.g. detailed version and edition -// information). -func WebEngineDescription(val string) attribute.KeyValue { - return WebEngineDescriptionKey.String(val) -} - -// WebEngineName returns an attribute KeyValue conforming to the -// "webengine.name" semantic conventions. It represents the name of the web -// engine. -func WebEngineName(val string) attribute.KeyValue { - return WebEngineNameKey.String(val) -} - -// WebEngineVersion returns an attribute KeyValue conforming to the -// "webengine.version" semantic conventions. It represents the version of the -// web engine. -func WebEngineVersion(val string) attribute.KeyValue { - return WebEngineVersionKey.String(val) -} - -// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's -// concepts. -const ( - // OTelScopeNameKey is the attribute Key conforming to the - // "otel.scope.name" semantic conventions. It represents the name of the - // instrumentation scope - (`InstrumentationScope.Name` in OTLP). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'io.opentelemetry.contrib.mongodb' - OTelScopeNameKey = attribute.Key("otel.scope.name") - - // OTelScopeVersionKey is the attribute Key conforming to the - // "otel.scope.version" semantic conventions. It represents the version of - // the instrumentation scope - (`InstrumentationScope.Version` in OTLP). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.0.0' - OTelScopeVersionKey = attribute.Key("otel.scope.version") -) - -// OTelScopeName returns an attribute KeyValue conforming to the -// "otel.scope.name" semantic conventions. It represents the name of the -// instrumentation scope - (`InstrumentationScope.Name` in OTLP). -func OTelScopeName(val string) attribute.KeyValue { - return OTelScopeNameKey.String(val) -} - -// OTelScopeVersion returns an attribute KeyValue conforming to the -// "otel.scope.version" semantic conventions. It represents the version of the -// instrumentation scope - (`InstrumentationScope.Version` in OTLP). -func OTelScopeVersion(val string) attribute.KeyValue { - return OTelScopeVersionKey.String(val) -} - -// Span attributes used by non-OTLP exporters to represent OpenTelemetry -// Scope's concepts. -const ( - // OTelLibraryNameKey is the attribute Key conforming to the - // "otel.library.name" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'io.opentelemetry.contrib.mongodb' - // Deprecated: use the `otel.scope.name` attribute. - OTelLibraryNameKey = attribute.Key("otel.library.name") - - // OTelLibraryVersionKey is the attribute Key conforming to the - // "otel.library.version" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '1.0.0' - // Deprecated: use the `otel.scope.version` attribute. - OTelLibraryVersionKey = attribute.Key("otel.library.version") -) - -// OTelLibraryName returns an attribute KeyValue conforming to the -// "otel.library.name" semantic conventions. -// -// Deprecated: use the `otel.scope.name` attribute. -func OTelLibraryName(val string) attribute.KeyValue { - return OTelLibraryNameKey.String(val) -} - -// OTelLibraryVersion returns an attribute KeyValue conforming to the -// "otel.library.version" semantic conventions. -// -// Deprecated: use the `otel.scope.version` attribute. -func OTelLibraryVersion(val string) attribute.KeyValue { - return OTelLibraryVersionKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go deleted file mode 100644 index c1718234e5..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go +++ /dev/null @@ -1,1323 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// Operations that access some remote service. -const ( - // PeerServiceKey is the attribute Key conforming to the "peer.service" - // semantic conventions. It represents the - // [`service.name`](/docs/resource/README.md#service) of the remote - // service. SHOULD be equal to the actual `service.name` resource attribute - // of the remote service if any. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'AuthTokenCache' - PeerServiceKey = attribute.Key("peer.service") -) - -// PeerService returns an attribute KeyValue conforming to the -// "peer.service" semantic conventions. It represents the -// [`service.name`](/docs/resource/README.md#service) of the remote service. -// SHOULD be equal to the actual `service.name` resource attribute of the -// remote service if any. -func PeerService(val string) attribute.KeyValue { - return PeerServiceKey.String(val) -} - -// These attributes may be used for any operation with an authenticated and/or -// authorized enduser. -const ( - // EnduserIDKey is the attribute Key conforming to the "enduser.id" - // semantic conventions. It represents the username or client_id extracted - // from the access token or - // [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header - // in the inbound request from outside the system. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'username' - EnduserIDKey = attribute.Key("enduser.id") - - // EnduserRoleKey is the attribute Key conforming to the "enduser.role" - // semantic conventions. It represents the actual/assumed role the client - // is making the request under extracted from token or application security - // context. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'admin' - EnduserRoleKey = attribute.Key("enduser.role") - - // EnduserScopeKey is the attribute Key conforming to the "enduser.scope" - // semantic conventions. It represents the scopes or granted authorities - // the client currently possesses extracted from token or application - // security context. The value would come from the scope associated with an - // [OAuth 2.0 Access - // Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute - // value in a [SAML 2.0 - // Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'read:message, write:files' - EnduserScopeKey = attribute.Key("enduser.scope") -) - -// EnduserID returns an attribute KeyValue conforming to the "enduser.id" -// semantic conventions. It represents the username or client_id extracted from -// the access token or -// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in -// the inbound request from outside the system. -func EnduserID(val string) attribute.KeyValue { - return EnduserIDKey.String(val) -} - -// EnduserRole returns an attribute KeyValue conforming to the -// "enduser.role" semantic conventions. It represents the actual/assumed role -// the client is making the request under extracted from token or application -// security context. -func EnduserRole(val string) attribute.KeyValue { - return EnduserRoleKey.String(val) -} - -// EnduserScope returns an attribute KeyValue conforming to the -// "enduser.scope" semantic conventions. It represents the scopes or granted -// authorities the client currently possesses extracted from token or -// application security context. The value would come from the scope associated -// with an [OAuth 2.0 Access -// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute -// value in a [SAML 2.0 -// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). -func EnduserScope(val string) attribute.KeyValue { - return EnduserScopeKey.String(val) -} - -// These attributes allow to report this unit of code and therefore to provide -// more context about the span. -const ( - // CodeColumnKey is the attribute Key conforming to the "code.column" - // semantic conventions. It represents the column number in `code.filepath` - // best representing the operation. It SHOULD point within the code unit - // named in `code.function`. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 16 - CodeColumnKey = attribute.Key("code.column") - - // CodeFilepathKey is the attribute Key conforming to the "code.filepath" - // semantic conventions. It represents the source code file name that - // identifies the code unit as uniquely as possible (preferably an absolute - // file path). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/usr/local/MyApplication/content_root/app/index.php' - CodeFilepathKey = attribute.Key("code.filepath") - - // CodeFunctionKey is the attribute Key conforming to the "code.function" - // semantic conventions. It represents the method or function name, or - // equivalent (usually rightmost part of the code unit's name). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'serveRequest' - CodeFunctionKey = attribute.Key("code.function") - - // CodeLineNumberKey is the attribute Key conforming to the "code.lineno" - // semantic conventions. It represents the line number in `code.filepath` - // best representing the operation. It SHOULD point within the code unit - // named in `code.function`. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 42 - CodeLineNumberKey = attribute.Key("code.lineno") - - // CodeNamespaceKey is the attribute Key conforming to the "code.namespace" - // semantic conventions. It represents the "namespace" within which - // `code.function` is defined. Usually the qualified class or module name, - // such that `code.namespace` + some separator + `code.function` form a - // unique identifier for the code unit. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'com.example.MyHTTPService' - CodeNamespaceKey = attribute.Key("code.namespace") - - // CodeStacktraceKey is the attribute Key conforming to the - // "code.stacktrace" semantic conventions. It represents a stacktrace as a - // string in the natural representation for the language runtime. The - // representation is to be determined and documented by each language SIG. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'at - // com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' - // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' - // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' - CodeStacktraceKey = attribute.Key("code.stacktrace") -) - -// CodeColumn returns an attribute KeyValue conforming to the "code.column" -// semantic conventions. It represents the column number in `code.filepath` -// best representing the operation. It SHOULD point within the code unit named -// in `code.function`. -func CodeColumn(val int) attribute.KeyValue { - return CodeColumnKey.Int(val) -} - -// CodeFilepath returns an attribute KeyValue conforming to the -// "code.filepath" semantic conventions. It represents the source code file -// name that identifies the code unit as uniquely as possible (preferably an -// absolute file path). -func CodeFilepath(val string) attribute.KeyValue { - return CodeFilepathKey.String(val) -} - -// CodeFunction returns an attribute KeyValue conforming to the -// "code.function" semantic conventions. It represents the method or function -// name, or equivalent (usually rightmost part of the code unit's name). -func CodeFunction(val string) attribute.KeyValue { - return CodeFunctionKey.String(val) -} - -// CodeLineNumber returns an attribute KeyValue conforming to the "code.lineno" -// semantic conventions. It represents the line number in `code.filepath` best -// representing the operation. It SHOULD point within the code unit named in -// `code.function`. -func CodeLineNumber(val int) attribute.KeyValue { - return CodeLineNumberKey.Int(val) -} - -// CodeNamespace returns an attribute KeyValue conforming to the -// "code.namespace" semantic conventions. It represents the "namespace" within -// which `code.function` is defined. Usually the qualified class or module -// name, such that `code.namespace` + some separator + `code.function` form a -// unique identifier for the code unit. -func CodeNamespace(val string) attribute.KeyValue { - return CodeNamespaceKey.String(val) -} - -// CodeStacktrace returns an attribute KeyValue conforming to the -// "code.stacktrace" semantic conventions. It represents a stacktrace as a -// string in the natural representation for the language runtime. The -// representation is to be determined and documented by each language SIG. -func CodeStacktrace(val string) attribute.KeyValue { - return CodeStacktraceKey.String(val) -} - -// These attributes may be used for any operation to store information about a -// thread that started a span. -const ( - // ThreadIDKey is the attribute Key conforming to the "thread.id" semantic - // conventions. It represents the current "managed" thread ID (as opposed - // to OS thread ID). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 42 - ThreadIDKey = attribute.Key("thread.id") - - // ThreadNameKey is the attribute Key conforming to the "thread.name" - // semantic conventions. It represents the current thread name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'main' - ThreadNameKey = attribute.Key("thread.name") -) - -// ThreadID returns an attribute KeyValue conforming to the "thread.id" -// semantic conventions. It represents the current "managed" thread ID (as -// opposed to OS thread ID). -func ThreadID(val int) attribute.KeyValue { - return ThreadIDKey.Int(val) -} - -// ThreadName returns an attribute KeyValue conforming to the "thread.name" -// semantic conventions. It represents the current thread name. -func ThreadName(val string) attribute.KeyValue { - return ThreadNameKey.String(val) -} - -// Span attributes used by AWS Lambda (in addition to general `faas` -// attributes). -const ( - // AWSLambdaInvokedARNKey is the attribute Key conforming to the - // "aws.lambda.invoked_arn" semantic conventions. It represents the full - // invoked ARN as provided on the `Context` passed to the function - // (`Lambda-Runtime-Invoked-Function-ARN` header on the - // `/runtime/invocation/next` applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias' - // Note: This may be different from `cloud.resource_id` if an alias is - // involved. - AWSLambdaInvokedARNKey = attribute.Key("aws.lambda.invoked_arn") -) - -// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the -// "aws.lambda.invoked_arn" semantic conventions. It represents the full -// invoked ARN as provided on the `Context` passed to the function -// (`Lambda-Runtime-Invoked-Function-ARN` header on the -// `/runtime/invocation/next` applicable). -func AWSLambdaInvokedARN(val string) attribute.KeyValue { - return AWSLambdaInvokedARNKey.String(val) -} - -// Attributes for CloudEvents. CloudEvents is a specification on how to define -// event data in a standard way. These attributes can be attached to spans when -// performing operations with CloudEvents, regardless of the protocol being -// used. -const ( - // CloudeventsEventIDKey is the attribute Key conforming to the - // "cloudevents.event_id" semantic conventions. It represents the - // [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) - // uniquely identifies the event. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: '123e4567-e89b-12d3-a456-426614174000', '0001' - CloudeventsEventIDKey = attribute.Key("cloudevents.event_id") - - // CloudeventsEventSourceKey is the attribute Key conforming to the - // "cloudevents.event_source" semantic conventions. It represents the - // [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) - // identifies the context in which an event happened. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'https://github.com/cloudevents', - // '/cloudevents/spec/pull/123', 'my-service' - CloudeventsEventSourceKey = attribute.Key("cloudevents.event_source") - - // CloudeventsEventSpecVersionKey is the attribute Key conforming to the - // "cloudevents.event_spec_version" semantic conventions. It represents the - // [version of the CloudEvents - // specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) - // which the event uses. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.0' - CloudeventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version") - - // CloudeventsEventSubjectKey is the attribute Key conforming to the - // "cloudevents.event_subject" semantic conventions. It represents the - // [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) - // of the event in the context of the event producer (identified by - // source). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mynewfile.jpg' - CloudeventsEventSubjectKey = attribute.Key("cloudevents.event_subject") - - // CloudeventsEventTypeKey is the attribute Key conforming to the - // "cloudevents.event_type" semantic conventions. It represents the - // [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) - // contains a value describing the type of event related to the originating - // occurrence. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'com.github.pull_request.opened', - // 'com.example.object.deleted.v2' - CloudeventsEventTypeKey = attribute.Key("cloudevents.event_type") -) - -// CloudeventsEventID returns an attribute KeyValue conforming to the -// "cloudevents.event_id" semantic conventions. It represents the -// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) -// uniquely identifies the event. -func CloudeventsEventID(val string) attribute.KeyValue { - return CloudeventsEventIDKey.String(val) -} - -// CloudeventsEventSource returns an attribute KeyValue conforming to the -// "cloudevents.event_source" semantic conventions. It represents the -// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) -// identifies the context in which an event happened. -func CloudeventsEventSource(val string) attribute.KeyValue { - return CloudeventsEventSourceKey.String(val) -} - -// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to -// the "cloudevents.event_spec_version" semantic conventions. It represents the -// [version of the CloudEvents -// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) -// which the event uses. -func CloudeventsEventSpecVersion(val string) attribute.KeyValue { - return CloudeventsEventSpecVersionKey.String(val) -} - -// CloudeventsEventSubject returns an attribute KeyValue conforming to the -// "cloudevents.event_subject" semantic conventions. It represents the -// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) -// of the event in the context of the event producer (identified by source). -func CloudeventsEventSubject(val string) attribute.KeyValue { - return CloudeventsEventSubjectKey.String(val) -} - -// CloudeventsEventType returns an attribute KeyValue conforming to the -// "cloudevents.event_type" semantic conventions. It represents the -// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) -// contains a value describing the type of event related to the originating -// occurrence. -func CloudeventsEventType(val string) attribute.KeyValue { - return CloudeventsEventTypeKey.String(val) -} - -// Semantic conventions for the OpenTracing Shim -const ( - // OpentracingRefTypeKey is the attribute Key conforming to the - // "opentracing.ref_type" semantic conventions. It represents the - // parent-child Reference type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: The causal relationship between a child Span and a parent Span. - OpentracingRefTypeKey = attribute.Key("opentracing.ref_type") -) - -var ( - // The parent Span depends on the child Span in some capacity - OpentracingRefTypeChildOf = OpentracingRefTypeKey.String("child_of") - // The parent Span doesn't depend in any way on the result of the child Span - OpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String("follows_from") -) - -// Span attributes used by non-OTLP exporters to represent OpenTelemetry Span's -// concepts. -const ( - // OTelStatusCodeKey is the attribute Key conforming to the - // "otel.status_code" semantic conventions. It represents the name of the - // code, either "OK" or "ERROR". MUST NOT be set if the status code is - // UNSET. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - OTelStatusCodeKey = attribute.Key("otel.status_code") - - // OTelStatusDescriptionKey is the attribute Key conforming to the - // "otel.status_description" semantic conventions. It represents the - // description of the Status if it has a value, otherwise not set. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'resource not found' - OTelStatusDescriptionKey = attribute.Key("otel.status_description") -) - -var ( - // The operation has been validated by an Application developer or Operator to have completed successfully - OTelStatusCodeOk = OTelStatusCodeKey.String("OK") - // The operation contains an error - OTelStatusCodeError = OTelStatusCodeKey.String("ERROR") -) - -// OTelStatusDescription returns an attribute KeyValue conforming to the -// "otel.status_description" semantic conventions. It represents the -// description of the Status if it has a value, otherwise not set. -func OTelStatusDescription(val string) attribute.KeyValue { - return OTelStatusDescriptionKey.String(val) -} - -// This semantic convention describes an instance of a function that runs -// without provisioning or managing of servers (also known as serverless -// functions or Function as a Service (FaaS)) with spans. -const ( - // FaaSInvocationIDKey is the attribute Key conforming to the - // "faas.invocation_id" semantic conventions. It represents the invocation - // ID of the current function invocation. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' - FaaSInvocationIDKey = attribute.Key("faas.invocation_id") -) - -// FaaSInvocationID returns an attribute KeyValue conforming to the -// "faas.invocation_id" semantic conventions. It represents the invocation ID -// of the current function invocation. -func FaaSInvocationID(val string) attribute.KeyValue { - return FaaSInvocationIDKey.String(val) -} - -// Semantic Convention for FaaS triggered as a response to some data source -// operation such as a database or filesystem read/write. -const ( - // FaaSDocumentCollectionKey is the attribute Key conforming to the - // "faas.document.collection" semantic conventions. It represents the name - // of the source on which the triggering operation was performed. For - // example, in Cloud Storage or S3 corresponds to the bucket name, and in - // Cosmos DB to the database name. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'myBucketName', 'myDBName' - FaaSDocumentCollectionKey = attribute.Key("faas.document.collection") - - // FaaSDocumentNameKey is the attribute Key conforming to the - // "faas.document.name" semantic conventions. It represents the document - // name/table subjected to the operation. For example, in Cloud Storage or - // S3 is the name of the file, and in Cosmos DB the table name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myFile.txt', 'myTableName' - FaaSDocumentNameKey = attribute.Key("faas.document.name") - - // FaaSDocumentOperationKey is the attribute Key conforming to the - // "faas.document.operation" semantic conventions. It represents the - // describes the type of the operation that was performed on the data. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - FaaSDocumentOperationKey = attribute.Key("faas.document.operation") - - // FaaSDocumentTimeKey is the attribute Key conforming to the - // "faas.document.time" semantic conventions. It represents a string - // containing the time when the data was accessed in the [ISO - // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format - // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2020-01-23T13:47:06Z' - FaaSDocumentTimeKey = attribute.Key("faas.document.time") -) - -var ( - // When a new object is created - FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert") - // When an object is modified - FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit") - // When an object is deleted - FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete") -) - -// FaaSDocumentCollection returns an attribute KeyValue conforming to the -// "faas.document.collection" semantic conventions. It represents the name of -// the source on which the triggering operation was performed. For example, in -// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the -// database name. -func FaaSDocumentCollection(val string) attribute.KeyValue { - return FaaSDocumentCollectionKey.String(val) -} - -// FaaSDocumentName returns an attribute KeyValue conforming to the -// "faas.document.name" semantic conventions. It represents the document -// name/table subjected to the operation. For example, in Cloud Storage or S3 -// is the name of the file, and in Cosmos DB the table name. -func FaaSDocumentName(val string) attribute.KeyValue { - return FaaSDocumentNameKey.String(val) -} - -// FaaSDocumentTime returns an attribute KeyValue conforming to the -// "faas.document.time" semantic conventions. It represents a string containing -// the time when the data was accessed in the [ISO -// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format -// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). -func FaaSDocumentTime(val string) attribute.KeyValue { - return FaaSDocumentTimeKey.String(val) -} - -// Semantic Convention for FaaS scheduled to be executed regularly. -const ( - // FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic - // conventions. It represents a string containing the schedule period as - // [Cron - // Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0/5 * * * ? *' - FaaSCronKey = attribute.Key("faas.cron") - - // FaaSTimeKey is the attribute Key conforming to the "faas.time" semantic - // conventions. It represents a string containing the function invocation - // time in the [ISO - // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format - // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2020-01-23T13:47:06Z' - FaaSTimeKey = attribute.Key("faas.time") -) - -// FaaSCron returns an attribute KeyValue conforming to the "faas.cron" -// semantic conventions. It represents a string containing the schedule period -// as [Cron -// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). -func FaaSCron(val string) attribute.KeyValue { - return FaaSCronKey.String(val) -} - -// FaaSTime returns an attribute KeyValue conforming to the "faas.time" -// semantic conventions. It represents a string containing the function -// invocation time in the [ISO -// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format -// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). -func FaaSTime(val string) attribute.KeyValue { - return FaaSTimeKey.String(val) -} - -// Contains additional attributes for incoming FaaS spans. -const ( - // FaaSColdstartKey is the attribute Key conforming to the "faas.coldstart" - // semantic conventions. It represents a boolean that is true if the - // serverless function is executed for the first time (aka cold-start). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - FaaSColdstartKey = attribute.Key("faas.coldstart") -) - -// FaaSColdstart returns an attribute KeyValue conforming to the -// "faas.coldstart" semantic conventions. It represents a boolean that is true -// if the serverless function is executed for the first time (aka cold-start). -func FaaSColdstart(val bool) attribute.KeyValue { - return FaaSColdstartKey.Bool(val) -} - -// The `aws` conventions apply to operations using the AWS SDK. They map -// request or response parameters in AWS SDK API calls to attributes on a Span. -// The conventions have been collected over time based on feedback from AWS -// users of tracing and will continue to evolve as new interesting conventions -// are found. -// Some descriptions are also provided for populating general OpenTelemetry -// semantic conventions based on these APIs. -const ( - // AWSRequestIDKey is the attribute Key conforming to the "aws.request_id" - // semantic conventions. It represents the AWS request ID as returned in - // the response headers `x-amz-request-id` or `x-amz-requestid`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ' - AWSRequestIDKey = attribute.Key("aws.request_id") -) - -// AWSRequestID returns an attribute KeyValue conforming to the -// "aws.request_id" semantic conventions. It represents the AWS request ID as -// returned in the response headers `x-amz-request-id` or `x-amz-requestid`. -func AWSRequestID(val string) attribute.KeyValue { - return AWSRequestIDKey.String(val) -} - -// Attributes that exist for multiple DynamoDB request types. -const ( - // AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the - // "aws.dynamodb.attributes_to_get" semantic conventions. It represents the - // value of the `AttributesToGet` request parameter. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'lives', 'id' - AWSDynamoDBAttributesToGetKey = attribute.Key("aws.dynamodb.attributes_to_get") - - // AWSDynamoDBConsistentReadKey is the attribute Key conforming to the - // "aws.dynamodb.consistent_read" semantic conventions. It represents the - // value of the `ConsistentRead` request parameter. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - AWSDynamoDBConsistentReadKey = attribute.Key("aws.dynamodb.consistent_read") - - // AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the - // "aws.dynamodb.consumed_capacity" semantic conventions. It represents the - // JSON-serialized value of each item in the `ConsumedCapacity` response - // field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "CapacityUnits": number, "GlobalSecondaryIndexes": { - // "string" : { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }, "LocalSecondaryIndexes": { "string" : - // { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }, "ReadCapacityUnits": number, "Table": - // { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number }, "TableName": "string", - // "WriteCapacityUnits": number }' - AWSDynamoDBConsumedCapacityKey = attribute.Key("aws.dynamodb.consumed_capacity") - - // AWSDynamoDBIndexNameKey is the attribute Key conforming to the - // "aws.dynamodb.index_name" semantic conventions. It represents the value - // of the `IndexName` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'name_to_group' - AWSDynamoDBIndexNameKey = attribute.Key("aws.dynamodb.index_name") - - // AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to - // the "aws.dynamodb.item_collection_metrics" semantic conventions. It - // represents the JSON-serialized value of the `ItemCollectionMetrics` - // response field. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "string" : [ { "ItemCollectionKey": { "string" : { "B": - // blob, "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": { - // "string" : "AttributeValue" }, "N": "string", "NS": [ "string" ], - // "NULL": boolean, "S": "string", "SS": [ "string" ] } }, - // "SizeEstimateRangeGB": [ number ] } ] }' - AWSDynamoDBItemCollectionMetricsKey = attribute.Key("aws.dynamodb.item_collection_metrics") - - // AWSDynamoDBLimitKey is the attribute Key conforming to the - // "aws.dynamodb.limit" semantic conventions. It represents the value of - // the `Limit` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit") - - // AWSDynamoDBProjectionKey is the attribute Key conforming to the - // "aws.dynamodb.projection" semantic conventions. It represents the value - // of the `ProjectionExpression` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Title', 'Title, Price, Color', 'Title, Description, - // RelatedItems, ProductReviews' - AWSDynamoDBProjectionKey = attribute.Key("aws.dynamodb.projection") - - // AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to - // the "aws.dynamodb.provisioned_read_capacity" semantic conventions. It - // represents the value of the `ProvisionedThroughput.ReadCapacityUnits` - // request parameter. - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedReadCapacityKey = attribute.Key("aws.dynamodb.provisioned_read_capacity") - - // AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming - // to the "aws.dynamodb.provisioned_write_capacity" semantic conventions. - // It represents the value of the - // `ProvisionedThroughput.WriteCapacityUnits` request parameter. - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity") - - // AWSDynamoDBSelectKey is the attribute Key conforming to the - // "aws.dynamodb.select" semantic conventions. It represents the value of - // the `Select` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ALL_ATTRIBUTES', 'COUNT' - AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select") - - // AWSDynamoDBTableNamesKey is the attribute Key conforming to the - // "aws.dynamodb.table_names" semantic conventions. It represents the keys - // in the `RequestItems` object field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Users', 'Cats' - AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names") -) - -// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to -// the "aws.dynamodb.attributes_to_get" semantic conventions. It represents the -// value of the `AttributesToGet` request parameter. -func AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue { - return AWSDynamoDBAttributesToGetKey.StringSlice(val) -} - -// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the -// "aws.dynamodb.consistent_read" semantic conventions. It represents the value -// of the `ConsistentRead` request parameter. -func AWSDynamoDBConsistentRead(val bool) attribute.KeyValue { - return AWSDynamoDBConsistentReadKey.Bool(val) -} - -// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to -// the "aws.dynamodb.consumed_capacity" semantic conventions. It represents the -// JSON-serialized value of each item in the `ConsumedCapacity` response field. -func AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue { - return AWSDynamoDBConsumedCapacityKey.StringSlice(val) -} - -// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the -// "aws.dynamodb.index_name" semantic conventions. It represents the value of -// the `IndexName` request parameter. -func AWSDynamoDBIndexName(val string) attribute.KeyValue { - return AWSDynamoDBIndexNameKey.String(val) -} - -// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming -// to the "aws.dynamodb.item_collection_metrics" semantic conventions. It -// represents the JSON-serialized value of the `ItemCollectionMetrics` response -// field. -func AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue { - return AWSDynamoDBItemCollectionMetricsKey.String(val) -} - -// AWSDynamoDBLimit returns an attribute KeyValue conforming to the -// "aws.dynamodb.limit" semantic conventions. It represents the value of the -// `Limit` request parameter. -func AWSDynamoDBLimit(val int) attribute.KeyValue { - return AWSDynamoDBLimitKey.Int(val) -} - -// AWSDynamoDBProjection returns an attribute KeyValue conforming to the -// "aws.dynamodb.projection" semantic conventions. It represents the value of -// the `ProjectionExpression` request parameter. -func AWSDynamoDBProjection(val string) attribute.KeyValue { - return AWSDynamoDBProjectionKey.String(val) -} - -// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue -// conforming to the "aws.dynamodb.provisioned_read_capacity" semantic -// conventions. It represents the value of the -// `ProvisionedThroughput.ReadCapacityUnits` request parameter. -func AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue { - return AWSDynamoDBProvisionedReadCapacityKey.Float64(val) -} - -// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue -// conforming to the "aws.dynamodb.provisioned_write_capacity" semantic -// conventions. It represents the value of the -// `ProvisionedThroughput.WriteCapacityUnits` request parameter. -func AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue { - return AWSDynamoDBProvisionedWriteCapacityKey.Float64(val) -} - -// AWSDynamoDBSelect returns an attribute KeyValue conforming to the -// "aws.dynamodb.select" semantic conventions. It represents the value of the -// `Select` request parameter. -func AWSDynamoDBSelect(val string) attribute.KeyValue { - return AWSDynamoDBSelectKey.String(val) -} - -// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_names" semantic conventions. It represents the keys in -// the `RequestItems` object field. -func AWSDynamoDBTableNames(val ...string) attribute.KeyValue { - return AWSDynamoDBTableNamesKey.StringSlice(val) -} - -// DynamoDB.CreateTable -const ( - // AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to - // the "aws.dynamodb.global_secondary_indexes" semantic conventions. It - // represents the JSON-serialized value of each item of the - // `GlobalSecondaryIndexes` request field - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "IndexName": "string", "KeySchema": [ { "AttributeName": - // "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ - // "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { - // "ReadCapacityUnits": number, "WriteCapacityUnits": number } }' - AWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key("aws.dynamodb.global_secondary_indexes") - - // AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to - // the "aws.dynamodb.local_secondary_indexes" semantic conventions. It - // represents the JSON-serialized value of each item of the - // `LocalSecondaryIndexes` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "IndexARN": "string", "IndexName": "string", - // "IndexSizeBytes": number, "ItemCount": number, "KeySchema": [ { - // "AttributeName": "string", "KeyType": "string" } ], "Projection": { - // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } }' - AWSDynamoDBLocalSecondaryIndexesKey = attribute.Key("aws.dynamodb.local_secondary_indexes") -) - -// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue -// conforming to the "aws.dynamodb.global_secondary_indexes" semantic -// conventions. It represents the JSON-serialized value of each item of the -// `GlobalSecondaryIndexes` request field -func AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val) -} - -// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming -// to the "aws.dynamodb.local_secondary_indexes" semantic conventions. It -// represents the JSON-serialized value of each item of the -// `LocalSecondaryIndexes` request field. -func AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue { - return AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val) -} - -// DynamoDB.ListTables -const ( - // AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the - // "aws.dynamodb.exclusive_start_table" semantic conventions. It represents - // the value of the `ExclusiveStartTableName` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Users', 'CatsTable' - AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table") - - // AWSDynamoDBTableCountKey is the attribute Key conforming to the - // "aws.dynamodb.table_count" semantic conventions. It represents the the - // number of items in the `TableNames` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 20 - AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count") -) - -// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming -// to the "aws.dynamodb.exclusive_start_table" semantic conventions. It -// represents the value of the `ExclusiveStartTableName` request parameter. -func AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue { - return AWSDynamoDBExclusiveStartTableKey.String(val) -} - -// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_count" semantic conventions. It represents the the -// number of items in the `TableNames` response parameter. -func AWSDynamoDBTableCount(val int) attribute.KeyValue { - return AWSDynamoDBTableCountKey.Int(val) -} - -// DynamoDB.Query -const ( - // AWSDynamoDBScanForwardKey is the attribute Key conforming to the - // "aws.dynamodb.scan_forward" semantic conventions. It represents the - // value of the `ScanIndexForward` request parameter. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward") -) - -// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the -// "aws.dynamodb.scan_forward" semantic conventions. It represents the value of -// the `ScanIndexForward` request parameter. -func AWSDynamoDBScanForward(val bool) attribute.KeyValue { - return AWSDynamoDBScanForwardKey.Bool(val) -} - -// DynamoDB.Scan -const ( - // AWSDynamoDBCountKey is the attribute Key conforming to the - // "aws.dynamodb.count" semantic conventions. It represents the value of - // the `Count` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count") - - // AWSDynamoDBScannedCountKey is the attribute Key conforming to the - // "aws.dynamodb.scanned_count" semantic conventions. It represents the - // value of the `ScannedCount` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 50 - AWSDynamoDBScannedCountKey = attribute.Key("aws.dynamodb.scanned_count") - - // AWSDynamoDBSegmentKey is the attribute Key conforming to the - // "aws.dynamodb.segment" semantic conventions. It represents the value of - // the `Segment` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment") - - // AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the - // "aws.dynamodb.total_segments" semantic conventions. It represents the - // value of the `TotalSegments` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 100 - AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments") -) - -// AWSDynamoDBCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.count" semantic conventions. It represents the value of the -// `Count` response parameter. -func AWSDynamoDBCount(val int) attribute.KeyValue { - return AWSDynamoDBCountKey.Int(val) -} - -// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.scanned_count" semantic conventions. It represents the value -// of the `ScannedCount` response parameter. -func AWSDynamoDBScannedCount(val int) attribute.KeyValue { - return AWSDynamoDBScannedCountKey.Int(val) -} - -// AWSDynamoDBSegment returns an attribute KeyValue conforming to the -// "aws.dynamodb.segment" semantic conventions. It represents the value of the -// `Segment` request parameter. -func AWSDynamoDBSegment(val int) attribute.KeyValue { - return AWSDynamoDBSegmentKey.Int(val) -} - -// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the -// "aws.dynamodb.total_segments" semantic conventions. It represents the value -// of the `TotalSegments` request parameter. -func AWSDynamoDBTotalSegments(val int) attribute.KeyValue { - return AWSDynamoDBTotalSegmentsKey.Int(val) -} - -// DynamoDB.UpdateTable -const ( - // AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to - // the "aws.dynamodb.attribute_definitions" semantic conventions. It - // represents the JSON-serialized value of each item in the - // `AttributeDefinitions` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "AttributeName": "string", "AttributeType": "string" }' - AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions") - - // AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key - // conforming to the "aws.dynamodb.global_secondary_index_updates" semantic - // conventions. It represents the JSON-serialized value of each item in the - // the `GlobalSecondaryIndexUpdates` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "Create": { "IndexName": "string", "KeySchema": [ { - // "AttributeName": "string", "KeyType": "string" } ], "Projection": { - // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, - // "ProvisionedThroughput": { "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }' - AWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key("aws.dynamodb.global_secondary_index_updates") -) - -// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming -// to the "aws.dynamodb.attribute_definitions" semantic conventions. It -// represents the JSON-serialized value of each item in the -// `AttributeDefinitions` request field. -func AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue { - return AWSDynamoDBAttributeDefinitionsKey.StringSlice(val) -} - -// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue -// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic -// conventions. It represents the JSON-serialized value of each item in the the -// `GlobalSecondaryIndexUpdates` request field. -func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val) -} - -// Attributes that exist for S3 request types. -const ( - // AWSS3BucketKey is the attribute Key conforming to the "aws.s3.bucket" - // semantic conventions. It represents the S3 bucket name the request - // refers to. Corresponds to the `--bucket` parameter of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // operations. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'some-bucket-name' - // Note: The `bucket` attribute is applicable to all S3 operations that - // reference a bucket, i.e. that require the bucket name as a mandatory - // parameter. - // This applies to almost all S3 operations except `list-buckets`. - AWSS3BucketKey = attribute.Key("aws.s3.bucket") - - // AWSS3CopySourceKey is the attribute Key conforming to the - // "aws.s3.copy_source" semantic conventions. It represents the source - // object (in the form `bucket`/`key`) for the copy operation. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'someFile.yml' - // Note: The `copy_source` attribute applies to S3 copy operations and - // corresponds to the `--copy-source` parameter - // of the [copy-object operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html). - // This applies in particular to the following operations: - // - // - - // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3CopySourceKey = attribute.Key("aws.s3.copy_source") - - // AWSS3DeleteKey is the attribute Key conforming to the "aws.s3.delete" - // semantic conventions. It represents the delete request container that - // specifies the objects to be deleted. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean' - // Note: The `delete` attribute is only applicable to the - // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) - // operation. - // The `delete` attribute corresponds to the `--delete` parameter of the - // [delete-objects operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html). - AWSS3DeleteKey = attribute.Key("aws.s3.delete") - - // AWSS3KeyKey is the attribute Key conforming to the "aws.s3.key" semantic - // conventions. It represents the S3 object key the request refers to. - // Corresponds to the `--key` parameter of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // operations. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'someFile.yml' - // Note: The `key` attribute is applicable to all object-related S3 - // operations, i.e. that require the object key as a mandatory parameter. - // This applies in particular to the following operations: - // - // - - // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) - // - - // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) - // - - // [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html) - // - - // [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html) - // - - // [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html) - // - - // [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html) - // - - // [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html) - // - - // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) - // - - // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) - // - - // [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html) - // - - // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) - // - - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3KeyKey = attribute.Key("aws.s3.key") - - // AWSS3PartNumberKey is the attribute Key conforming to the - // "aws.s3.part_number" semantic conventions. It represents the part number - // of the part being uploaded in a multipart-upload operation. This is a - // positive integer between 1 and 10,000. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3456 - // Note: The `part_number` attribute is only applicable to the - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // and - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - // operations. - // The `part_number` attribute corresponds to the `--part-number` parameter - // of the - // [upload-part operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html). - AWSS3PartNumberKey = attribute.Key("aws.s3.part_number") - - // AWSS3UploadIDKey is the attribute Key conforming to the - // "aws.s3.upload_id" semantic conventions. It represents the upload ID - // that identifies the multipart upload. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ' - // Note: The `upload_id` attribute applies to S3 multipart-upload - // operations and corresponds to the `--upload-id` parameter - // of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // multipart operations. - // This applies in particular to the following operations: - // - // - - // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) - // - - // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) - // - - // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) - // - - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3UploadIDKey = attribute.Key("aws.s3.upload_id") -) - -// AWSS3Bucket returns an attribute KeyValue conforming to the -// "aws.s3.bucket" semantic conventions. It represents the S3 bucket name the -// request refers to. Corresponds to the `--bucket` parameter of the [S3 -// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) -// operations. -func AWSS3Bucket(val string) attribute.KeyValue { - return AWSS3BucketKey.String(val) -} - -// AWSS3CopySource returns an attribute KeyValue conforming to the -// "aws.s3.copy_source" semantic conventions. It represents the source object -// (in the form `bucket`/`key`) for the copy operation. -func AWSS3CopySource(val string) attribute.KeyValue { - return AWSS3CopySourceKey.String(val) -} - -// AWSS3Delete returns an attribute KeyValue conforming to the -// "aws.s3.delete" semantic conventions. It represents the delete request -// container that specifies the objects to be deleted. -func AWSS3Delete(val string) attribute.KeyValue { - return AWSS3DeleteKey.String(val) -} - -// AWSS3Key returns an attribute KeyValue conforming to the "aws.s3.key" -// semantic conventions. It represents the S3 object key the request refers to. -// Corresponds to the `--key` parameter of the [S3 -// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) -// operations. -func AWSS3Key(val string) attribute.KeyValue { - return AWSS3KeyKey.String(val) -} - -// AWSS3PartNumber returns an attribute KeyValue conforming to the -// "aws.s3.part_number" semantic conventions. It represents the part number of -// the part being uploaded in a multipart-upload operation. This is a positive -// integer between 1 and 10,000. -func AWSS3PartNumber(val int) attribute.KeyValue { - return AWSS3PartNumberKey.Int(val) -} - -// AWSS3UploadID returns an attribute KeyValue conforming to the -// "aws.s3.upload_id" semantic conventions. It represents the upload ID that -// identifies the multipart upload. -func AWSS3UploadID(val string) attribute.KeyValue { - return AWSS3UploadIDKey.String(val) -} - -// Semantic conventions to apply when instrumenting the GraphQL implementation. -// They map GraphQL operations to attributes on a Span. -const ( - // GraphqlDocumentKey is the attribute Key conforming to the - // "graphql.document" semantic conventions. It represents the GraphQL - // document being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'query findBookByID { bookByID(id: ?) { name } }' - // Note: The value may be sanitized to exclude sensitive information. - GraphqlDocumentKey = attribute.Key("graphql.document") - - // GraphqlOperationNameKey is the attribute Key conforming to the - // "graphql.operation.name" semantic conventions. It represents the name of - // the operation being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'findBookByID' - GraphqlOperationNameKey = attribute.Key("graphql.operation.name") - - // GraphqlOperationTypeKey is the attribute Key conforming to the - // "graphql.operation.type" semantic conventions. It represents the type of - // the operation being executed. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'query', 'mutation', 'subscription' - GraphqlOperationTypeKey = attribute.Key("graphql.operation.type") -) - -var ( - // GraphQL query - GraphqlOperationTypeQuery = GraphqlOperationTypeKey.String("query") - // GraphQL mutation - GraphqlOperationTypeMutation = GraphqlOperationTypeKey.String("mutation") - // GraphQL subscription - GraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String("subscription") -) - -// GraphqlDocument returns an attribute KeyValue conforming to the -// "graphql.document" semantic conventions. It represents the GraphQL document -// being executed. -func GraphqlDocument(val string) attribute.KeyValue { - return GraphqlDocumentKey.String(val) -} - -// GraphqlOperationName returns an attribute KeyValue conforming to the -// "graphql.operation.name" semantic conventions. It represents the name of the -// operation being executed. -func GraphqlOperationName(val string) attribute.KeyValue { - return GraphqlOperationNameKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md new file mode 100644 index 0000000000..2de1fc3c6b --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md @@ -0,0 +1,3 @@ +# Semconv v1.26.0 + +[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.26.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.26.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go new file mode 100644 index 0000000000..d8dc822b26 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go @@ -0,0 +1,8996 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated from semantic convention specification. DO NOT EDIT. + +package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0" + +import "go.opentelemetry.io/otel/attribute" + +// The Android platform on which the Android application is running. +const ( + // AndroidOSAPILevelKey is the attribute Key conforming to the + // "android.os.api_level" semantic conventions. It represents the uniquely + // identifies the framework API revision offered by a version + // (`os.version`) of the android operating system. More information can be + // found + // [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '33', '32' + AndroidOSAPILevelKey = attribute.Key("android.os.api_level") +) + +// AndroidOSAPILevel returns an attribute KeyValue conforming to the +// "android.os.api_level" semantic conventions. It represents the uniquely +// identifies the framework API revision offered by a version (`os.version`) of +// the android operating system. More information can be found +// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels). +func AndroidOSAPILevel(val string) attribute.KeyValue { + return AndroidOSAPILevelKey.String(val) +} + +// ASP.NET Core attributes +const ( + // AspnetcoreRateLimitingResultKey is the attribute Key conforming to the + // "aspnetcore.rate_limiting.result" semantic conventions. It represents + // the rate-limiting result, shows whether the lease was acquired or + // contains a rejection reason + // + // Type: Enum + // RequirementLevel: Required + // Stability: stable + // Examples: 'acquired', 'request_canceled' + AspnetcoreRateLimitingResultKey = attribute.Key("aspnetcore.rate_limiting.result") + + // AspnetcoreDiagnosticsHandlerTypeKey is the attribute Key conforming to + // the "aspnetcore.diagnostics.handler.type" semantic conventions. It + // represents the full type name of the + // [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) + // implementation that handled the exception. + // + // Type: string + // RequirementLevel: ConditionallyRequired (if and only if the exception + // was handled by this handler.) + // Stability: stable + // Examples: 'Contoso.MyHandler' + AspnetcoreDiagnosticsHandlerTypeKey = attribute.Key("aspnetcore.diagnostics.handler.type") + + // AspnetcoreDiagnosticsExceptionResultKey is the attribute Key conforming + // to the "aspnetcore.diagnostics.exception.result" semantic conventions. + // It represents the aSP.NET Core exception middleware handling result + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'handled', 'unhandled' + AspnetcoreDiagnosticsExceptionResultKey = attribute.Key("aspnetcore.diagnostics.exception.result") + + // AspnetcoreRateLimitingPolicyKey is the attribute Key conforming to the + // "aspnetcore.rate_limiting.policy" semantic conventions. It represents + // the rate limiting policy name. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'fixed', 'sliding', 'token' + AspnetcoreRateLimitingPolicyKey = attribute.Key("aspnetcore.rate_limiting.policy") + + // AspnetcoreRequestIsUnhandledKey is the attribute Key conforming to the + // "aspnetcore.request.is_unhandled" semantic conventions. It represents + // the flag indicating if request was handled by the application pipeline. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: stable + // Examples: True + AspnetcoreRequestIsUnhandledKey = attribute.Key("aspnetcore.request.is_unhandled") + + // AspnetcoreRoutingIsFallbackKey is the attribute Key conforming to the + // "aspnetcore.routing.is_fallback" semantic conventions. It represents a + // value that indicates whether the matched route is a fallback route. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: stable + // Examples: True + AspnetcoreRoutingIsFallbackKey = attribute.Key("aspnetcore.routing.is_fallback") + + // AspnetcoreRoutingMatchStatusKey is the attribute Key conforming to the + // "aspnetcore.routing.match_status" semantic conventions. It represents + // the match result - success or failure + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'success', 'failure' + AspnetcoreRoutingMatchStatusKey = attribute.Key("aspnetcore.routing.match_status") +) + +var ( + // Lease was acquired + AspnetcoreRateLimitingResultAcquired = AspnetcoreRateLimitingResultKey.String("acquired") + // Lease request was rejected by the endpoint limiter + AspnetcoreRateLimitingResultEndpointLimiter = AspnetcoreRateLimitingResultKey.String("endpoint_limiter") + // Lease request was rejected by the global limiter + AspnetcoreRateLimitingResultGlobalLimiter = AspnetcoreRateLimitingResultKey.String("global_limiter") + // Lease request was canceled + AspnetcoreRateLimitingResultRequestCanceled = AspnetcoreRateLimitingResultKey.String("request_canceled") +) + +var ( + // Exception was handled by the exception handling middleware + AspnetcoreDiagnosticsExceptionResultHandled = AspnetcoreDiagnosticsExceptionResultKey.String("handled") + // Exception was not handled by the exception handling middleware + AspnetcoreDiagnosticsExceptionResultUnhandled = AspnetcoreDiagnosticsExceptionResultKey.String("unhandled") + // Exception handling was skipped because the response had started + AspnetcoreDiagnosticsExceptionResultSkipped = AspnetcoreDiagnosticsExceptionResultKey.String("skipped") + // Exception handling didn't run because the request was aborted + AspnetcoreDiagnosticsExceptionResultAborted = AspnetcoreDiagnosticsExceptionResultKey.String("aborted") +) + +var ( + // Match succeeded + AspnetcoreRoutingMatchStatusSuccess = AspnetcoreRoutingMatchStatusKey.String("success") + // Match failed + AspnetcoreRoutingMatchStatusFailure = AspnetcoreRoutingMatchStatusKey.String("failure") +) + +// AspnetcoreDiagnosticsHandlerType returns an attribute KeyValue conforming +// to the "aspnetcore.diagnostics.handler.type" semantic conventions. It +// represents the full type name of the +// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) +// implementation that handled the exception. +func AspnetcoreDiagnosticsHandlerType(val string) attribute.KeyValue { + return AspnetcoreDiagnosticsHandlerTypeKey.String(val) +} + +// AspnetcoreRateLimitingPolicy returns an attribute KeyValue conforming to +// the "aspnetcore.rate_limiting.policy" semantic conventions. It represents +// the rate limiting policy name. +func AspnetcoreRateLimitingPolicy(val string) attribute.KeyValue { + return AspnetcoreRateLimitingPolicyKey.String(val) +} + +// AspnetcoreRequestIsUnhandled returns an attribute KeyValue conforming to +// the "aspnetcore.request.is_unhandled" semantic conventions. It represents +// the flag indicating if request was handled by the application pipeline. +func AspnetcoreRequestIsUnhandled(val bool) attribute.KeyValue { + return AspnetcoreRequestIsUnhandledKey.Bool(val) +} + +// AspnetcoreRoutingIsFallback returns an attribute KeyValue conforming to +// the "aspnetcore.routing.is_fallback" semantic conventions. It represents a +// value that indicates whether the matched route is a fallback route. +func AspnetcoreRoutingIsFallback(val bool) attribute.KeyValue { + return AspnetcoreRoutingIsFallbackKey.Bool(val) +} + +// Generic attributes for AWS services. +const ( + // AWSRequestIDKey is the attribute Key conforming to the "aws.request_id" + // semantic conventions. It represents the AWS request ID as returned in + // the response headers `x-amz-request-id` or `x-amz-requestid`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ' + AWSRequestIDKey = attribute.Key("aws.request_id") +) + +// AWSRequestID returns an attribute KeyValue conforming to the +// "aws.request_id" semantic conventions. It represents the AWS request ID as +// returned in the response headers `x-amz-request-id` or `x-amz-requestid`. +func AWSRequestID(val string) attribute.KeyValue { + return AWSRequestIDKey.String(val) +} + +// Attributes for AWS DynamoDB. +const ( + // AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to + // the "aws.dynamodb.attribute_definitions" semantic conventions. It + // represents the JSON-serialized value of each item in the + // `AttributeDefinitions` request field. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '{ "AttributeName": "string", "AttributeType": "string" }' + AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions") + + // AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the + // "aws.dynamodb.attributes_to_get" semantic conventions. It represents the + // value of the `AttributesToGet` request parameter. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'lives', 'id' + AWSDynamoDBAttributesToGetKey = attribute.Key("aws.dynamodb.attributes_to_get") + + // AWSDynamoDBConsistentReadKey is the attribute Key conforming to the + // "aws.dynamodb.consistent_read" semantic conventions. It represents the + // value of the `ConsistentRead` request parameter. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + AWSDynamoDBConsistentReadKey = attribute.Key("aws.dynamodb.consistent_read") + + // AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the + // "aws.dynamodb.consumed_capacity" semantic conventions. It represents the + // JSON-serialized value of each item in the `ConsumedCapacity` response + // field. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '{ "CapacityUnits": number, "GlobalSecondaryIndexes": { + // "string" : { "CapacityUnits": number, "ReadCapacityUnits": number, + // "WriteCapacityUnits": number } }, "LocalSecondaryIndexes": { "string" : + // { "CapacityUnits": number, "ReadCapacityUnits": number, + // "WriteCapacityUnits": number } }, "ReadCapacityUnits": number, "Table": + // { "CapacityUnits": number, "ReadCapacityUnits": number, + // "WriteCapacityUnits": number }, "TableName": "string", + // "WriteCapacityUnits": number }' + AWSDynamoDBConsumedCapacityKey = attribute.Key("aws.dynamodb.consumed_capacity") + + // AWSDynamoDBCountKey is the attribute Key conforming to the + // "aws.dynamodb.count" semantic conventions. It represents the value of + // the `Count` response parameter. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 10 + AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count") + + // AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the + // "aws.dynamodb.exclusive_start_table" semantic conventions. It represents + // the value of the `ExclusiveStartTableName` request parameter. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Users', 'CatsTable' + AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table") + + // AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key + // conforming to the "aws.dynamodb.global_secondary_index_updates" semantic + // conventions. It represents the JSON-serialized value of each item in the + // `GlobalSecondaryIndexUpdates` request field. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '{ "Create": { "IndexName": "string", "KeySchema": [ { + // "AttributeName": "string", "KeyType": "string" } ], "Projection": { + // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, + // "ProvisionedThroughput": { "ReadCapacityUnits": number, + // "WriteCapacityUnits": number } }' + AWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key("aws.dynamodb.global_secondary_index_updates") + + // AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to + // the "aws.dynamodb.global_secondary_indexes" semantic conventions. It + // represents the JSON-serialized value of each item of the + // `GlobalSecondaryIndexes` request field + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '{ "IndexName": "string", "KeySchema": [ { "AttributeName": + // "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ + // "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { + // "ReadCapacityUnits": number, "WriteCapacityUnits": number } }' + AWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key("aws.dynamodb.global_secondary_indexes") + + // AWSDynamoDBIndexNameKey is the attribute Key conforming to the + // "aws.dynamodb.index_name" semantic conventions. It represents the value + // of the `IndexName` request parameter. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'name_to_group' + AWSDynamoDBIndexNameKey = attribute.Key("aws.dynamodb.index_name") + + // AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to + // the "aws.dynamodb.item_collection_metrics" semantic conventions. It + // represents the JSON-serialized value of the `ItemCollectionMetrics` + // response field. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '{ "string" : [ { "ItemCollectionKey": { "string" : { "B": + // blob, "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": { + // "string" : "AttributeValue" }, "N": "string", "NS": [ "string" ], + // "NULL": boolean, "S": "string", "SS": [ "string" ] } }, + // "SizeEstimateRangeGB": [ number ] } ] }' + AWSDynamoDBItemCollectionMetricsKey = attribute.Key("aws.dynamodb.item_collection_metrics") + + // AWSDynamoDBLimitKey is the attribute Key conforming to the + // "aws.dynamodb.limit" semantic conventions. It represents the value of + // the `Limit` request parameter. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 10 + AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit") + + // AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to + // the "aws.dynamodb.local_secondary_indexes" semantic conventions. It + // represents the JSON-serialized value of each item of the + // `LocalSecondaryIndexes` request field. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '{ "IndexARN": "string", "IndexName": "string", + // "IndexSizeBytes": number, "ItemCount": number, "KeySchema": [ { + // "AttributeName": "string", "KeyType": "string" } ], "Projection": { + // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } }' + AWSDynamoDBLocalSecondaryIndexesKey = attribute.Key("aws.dynamodb.local_secondary_indexes") + + // AWSDynamoDBProjectionKey is the attribute Key conforming to the + // "aws.dynamodb.projection" semantic conventions. It represents the value + // of the `ProjectionExpression` request parameter. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Title', 'Title, Price, Color', 'Title, Description, + // RelatedItems, ProductReviews' + AWSDynamoDBProjectionKey = attribute.Key("aws.dynamodb.projection") + + // AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to + // the "aws.dynamodb.provisioned_read_capacity" semantic conventions. It + // represents the value of the `ProvisionedThroughput.ReadCapacityUnits` + // request parameter. + // + // Type: double + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1.0, 2.0 + AWSDynamoDBProvisionedReadCapacityKey = attribute.Key("aws.dynamodb.provisioned_read_capacity") + + // AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming + // to the "aws.dynamodb.provisioned_write_capacity" semantic conventions. + // It represents the value of the + // `ProvisionedThroughput.WriteCapacityUnits` request parameter. + // + // Type: double + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1.0, 2.0 + AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity") + + // AWSDynamoDBScanForwardKey is the attribute Key conforming to the + // "aws.dynamodb.scan_forward" semantic conventions. It represents the + // value of the `ScanIndexForward` request parameter. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward") + + // AWSDynamoDBScannedCountKey is the attribute Key conforming to the + // "aws.dynamodb.scanned_count" semantic conventions. It represents the + // value of the `ScannedCount` response parameter. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 50 + AWSDynamoDBScannedCountKey = attribute.Key("aws.dynamodb.scanned_count") + + // AWSDynamoDBSegmentKey is the attribute Key conforming to the + // "aws.dynamodb.segment" semantic conventions. It represents the value of + // the `Segment` request parameter. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 10 + AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment") + + // AWSDynamoDBSelectKey is the attribute Key conforming to the + // "aws.dynamodb.select" semantic conventions. It represents the value of + // the `Select` request parameter. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'ALL_ATTRIBUTES', 'COUNT' + AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select") + + // AWSDynamoDBTableCountKey is the attribute Key conforming to the + // "aws.dynamodb.table_count" semantic conventions. It represents the + // number of items in the `TableNames` response parameter. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 20 + AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count") + + // AWSDynamoDBTableNamesKey is the attribute Key conforming to the + // "aws.dynamodb.table_names" semantic conventions. It represents the keys + // in the `RequestItems` object field. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Users', 'Cats' + AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names") + + // AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the + // "aws.dynamodb.total_segments" semantic conventions. It represents the + // value of the `TotalSegments` request parameter. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 100 + AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments") +) + +// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming +// to the "aws.dynamodb.attribute_definitions" semantic conventions. It +// represents the JSON-serialized value of each item in the +// `AttributeDefinitions` request field. +func AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue { + return AWSDynamoDBAttributeDefinitionsKey.StringSlice(val) +} + +// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to +// the "aws.dynamodb.attributes_to_get" semantic conventions. It represents the +// value of the `AttributesToGet` request parameter. +func AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue { + return AWSDynamoDBAttributesToGetKey.StringSlice(val) +} + +// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the +// "aws.dynamodb.consistent_read" semantic conventions. It represents the value +// of the `ConsistentRead` request parameter. +func AWSDynamoDBConsistentRead(val bool) attribute.KeyValue { + return AWSDynamoDBConsistentReadKey.Bool(val) +} + +// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to +// the "aws.dynamodb.consumed_capacity" semantic conventions. It represents the +// JSON-serialized value of each item in the `ConsumedCapacity` response field. +func AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue { + return AWSDynamoDBConsumedCapacityKey.StringSlice(val) +} + +// AWSDynamoDBCount returns an attribute KeyValue conforming to the +// "aws.dynamodb.count" semantic conventions. It represents the value of the +// `Count` response parameter. +func AWSDynamoDBCount(val int) attribute.KeyValue { + return AWSDynamoDBCountKey.Int(val) +} + +// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming +// to the "aws.dynamodb.exclusive_start_table" semantic conventions. It +// represents the value of the `ExclusiveStartTableName` request parameter. +func AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue { + return AWSDynamoDBExclusiveStartTableKey.String(val) +} + +// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue +// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic +// conventions. It represents the JSON-serialized value of each item in the +// `GlobalSecondaryIndexUpdates` request field. +func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue { + return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val) +} + +// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue +// conforming to the "aws.dynamodb.global_secondary_indexes" semantic +// conventions. It represents the JSON-serialized value of each item of the +// `GlobalSecondaryIndexes` request field +func AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue { + return AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val) +} + +// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the +// "aws.dynamodb.index_name" semantic conventions. It represents the value of +// the `IndexName` request parameter. +func AWSDynamoDBIndexName(val string) attribute.KeyValue { + return AWSDynamoDBIndexNameKey.String(val) +} + +// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming +// to the "aws.dynamodb.item_collection_metrics" semantic conventions. It +// represents the JSON-serialized value of the `ItemCollectionMetrics` response +// field. +func AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue { + return AWSDynamoDBItemCollectionMetricsKey.String(val) +} + +// AWSDynamoDBLimit returns an attribute KeyValue conforming to the +// "aws.dynamodb.limit" semantic conventions. It represents the value of the +// `Limit` request parameter. +func AWSDynamoDBLimit(val int) attribute.KeyValue { + return AWSDynamoDBLimitKey.Int(val) +} + +// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming +// to the "aws.dynamodb.local_secondary_indexes" semantic conventions. It +// represents the JSON-serialized value of each item of the +// `LocalSecondaryIndexes` request field. +func AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue { + return AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val) +} + +// AWSDynamoDBProjection returns an attribute KeyValue conforming to the +// "aws.dynamodb.projection" semantic conventions. It represents the value of +// the `ProjectionExpression` request parameter. +func AWSDynamoDBProjection(val string) attribute.KeyValue { + return AWSDynamoDBProjectionKey.String(val) +} + +// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue +// conforming to the "aws.dynamodb.provisioned_read_capacity" semantic +// conventions. It represents the value of the +// `ProvisionedThroughput.ReadCapacityUnits` request parameter. +func AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue { + return AWSDynamoDBProvisionedReadCapacityKey.Float64(val) +} + +// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue +// conforming to the "aws.dynamodb.provisioned_write_capacity" semantic +// conventions. It represents the value of the +// `ProvisionedThroughput.WriteCapacityUnits` request parameter. +func AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue { + return AWSDynamoDBProvisionedWriteCapacityKey.Float64(val) +} + +// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the +// "aws.dynamodb.scan_forward" semantic conventions. It represents the value of +// the `ScanIndexForward` request parameter. +func AWSDynamoDBScanForward(val bool) attribute.KeyValue { + return AWSDynamoDBScanForwardKey.Bool(val) +} + +// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the +// "aws.dynamodb.scanned_count" semantic conventions. It represents the value +// of the `ScannedCount` response parameter. +func AWSDynamoDBScannedCount(val int) attribute.KeyValue { + return AWSDynamoDBScannedCountKey.Int(val) +} + +// AWSDynamoDBSegment returns an attribute KeyValue conforming to the +// "aws.dynamodb.segment" semantic conventions. It represents the value of the +// `Segment` request parameter. +func AWSDynamoDBSegment(val int) attribute.KeyValue { + return AWSDynamoDBSegmentKey.Int(val) +} + +// AWSDynamoDBSelect returns an attribute KeyValue conforming to the +// "aws.dynamodb.select" semantic conventions. It represents the value of the +// `Select` request parameter. +func AWSDynamoDBSelect(val string) attribute.KeyValue { + return AWSDynamoDBSelectKey.String(val) +} + +// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the +// "aws.dynamodb.table_count" semantic conventions. It represents the number of +// items in the `TableNames` response parameter. +func AWSDynamoDBTableCount(val int) attribute.KeyValue { + return AWSDynamoDBTableCountKey.Int(val) +} + +// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the +// "aws.dynamodb.table_names" semantic conventions. It represents the keys in +// the `RequestItems` object field. +func AWSDynamoDBTableNames(val ...string) attribute.KeyValue { + return AWSDynamoDBTableNamesKey.StringSlice(val) +} + +// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the +// "aws.dynamodb.total_segments" semantic conventions. It represents the value +// of the `TotalSegments` request parameter. +func AWSDynamoDBTotalSegments(val int) attribute.KeyValue { + return AWSDynamoDBTotalSegmentsKey.Int(val) +} + +// Attributes for AWS Elastic Container Service (ECS). +const ( + // AWSECSTaskIDKey is the attribute Key conforming to the "aws.ecs.task.id" + // semantic conventions. It represents the ID of a running ECS task. The ID + // MUST be extracted from `task.arn`. + // + // Type: string + // RequirementLevel: ConditionallyRequired (If and only if `task.arn` is + // populated.) + // Stability: experimental + // Examples: '10838bed-421f-43ef-870a-f43feacbbb5b', + // '23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd' + AWSECSTaskIDKey = attribute.Key("aws.ecs.task.id") + + // AWSECSClusterARNKey is the attribute Key conforming to the + // "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an + // [ECS + // cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' + AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn") + + // AWSECSContainerARNKey is the attribute Key conforming to the + // "aws.ecs.container.arn" semantic conventions. It represents the Amazon + // Resource Name (ARN) of an [ECS container + // instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9' + AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn") + + // AWSECSLaunchtypeKey is the attribute Key conforming to the + // "aws.ecs.launchtype" semantic conventions. It represents the [launch + // type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) + // for an ECS task. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype") + + // AWSECSTaskARNKey is the attribute Key conforming to the + // "aws.ecs.task.arn" semantic conventions. It represents the ARN of a + // running [ECS + // task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b', + // 'arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd' + AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn") + + // AWSECSTaskFamilyKey is the attribute Key conforming to the + // "aws.ecs.task.family" semantic conventions. It represents the family + // name of the [ECS task + // definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) + // used to create the ECS task. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry-family' + AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family") + + // AWSECSTaskRevisionKey is the attribute Key conforming to the + // "aws.ecs.task.revision" semantic conventions. It represents the revision + // for the task definition used to create the ECS task. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '8', '26' + AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision") +) + +var ( + // ec2 + AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2") + // fargate + AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate") +) + +// AWSECSTaskID returns an attribute KeyValue conforming to the +// "aws.ecs.task.id" semantic conventions. It represents the ID of a running +// ECS task. The ID MUST be extracted from `task.arn`. +func AWSECSTaskID(val string) attribute.KeyValue { + return AWSECSTaskIDKey.String(val) +} + +// AWSECSClusterARN returns an attribute KeyValue conforming to the +// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an [ECS +// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). +func AWSECSClusterARN(val string) attribute.KeyValue { + return AWSECSClusterARNKey.String(val) +} + +// AWSECSContainerARN returns an attribute KeyValue conforming to the +// "aws.ecs.container.arn" semantic conventions. It represents the Amazon +// Resource Name (ARN) of an [ECS container +// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). +func AWSECSContainerARN(val string) attribute.KeyValue { + return AWSECSContainerARNKey.String(val) +} + +// AWSECSTaskARN returns an attribute KeyValue conforming to the +// "aws.ecs.task.arn" semantic conventions. It represents the ARN of a running +// [ECS +// task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids). +func AWSECSTaskARN(val string) attribute.KeyValue { + return AWSECSTaskARNKey.String(val) +} + +// AWSECSTaskFamily returns an attribute KeyValue conforming to the +// "aws.ecs.task.family" semantic conventions. It represents the family name of +// the [ECS task +// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) +// used to create the ECS task. +func AWSECSTaskFamily(val string) attribute.KeyValue { + return AWSECSTaskFamilyKey.String(val) +} + +// AWSECSTaskRevision returns an attribute KeyValue conforming to the +// "aws.ecs.task.revision" semantic conventions. It represents the revision for +// the task definition used to create the ECS task. +func AWSECSTaskRevision(val string) attribute.KeyValue { + return AWSECSTaskRevisionKey.String(val) +} + +// Attributes for AWS Elastic Kubernetes Service (EKS). +const ( + // AWSEKSClusterARNKey is the attribute Key conforming to the + // "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an + // EKS cluster. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' + AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn") +) + +// AWSEKSClusterARN returns an attribute KeyValue conforming to the +// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS +// cluster. +func AWSEKSClusterARN(val string) attribute.KeyValue { + return AWSEKSClusterARNKey.String(val) +} + +// Attributes for AWS Logs. +const ( + // AWSLogGroupARNsKey is the attribute Key conforming to the + // "aws.log.group.arns" semantic conventions. It represents the Amazon + // Resource Name(s) (ARN) of the AWS log group(s). + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*' + // Note: See the [log group ARN format + // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). + AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns") + + // AWSLogGroupNamesKey is the attribute Key conforming to the + // "aws.log.group.names" semantic conventions. It represents the name(s) of + // the AWS log group(s) an application is writing to. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/aws/lambda/my-function', 'opentelemetry-service' + // Note: Multiple log groups must be supported for cases like + // multi-container applications, where a single application has sidecar + // containers, and each write to their own log group. + AWSLogGroupNamesKey = attribute.Key("aws.log.group.names") + + // AWSLogStreamARNsKey is the attribute Key conforming to the + // "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of + // the AWS log stream(s). + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' + // Note: See the [log stream ARN format + // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). + // One log group can contain several log streams, so these ARNs necessarily + // identify both a log group and a log stream. + AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns") + + // AWSLogStreamNamesKey is the attribute Key conforming to the + // "aws.log.stream.names" semantic conventions. It represents the name(s) + // of the AWS log stream(s) an application is writing to. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' + AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names") +) + +// AWSLogGroupARNs returns an attribute KeyValue conforming to the +// "aws.log.group.arns" semantic conventions. It represents the Amazon Resource +// Name(s) (ARN) of the AWS log group(s). +func AWSLogGroupARNs(val ...string) attribute.KeyValue { + return AWSLogGroupARNsKey.StringSlice(val) +} + +// AWSLogGroupNames returns an attribute KeyValue conforming to the +// "aws.log.group.names" semantic conventions. It represents the name(s) of the +// AWS log group(s) an application is writing to. +func AWSLogGroupNames(val ...string) attribute.KeyValue { + return AWSLogGroupNamesKey.StringSlice(val) +} + +// AWSLogStreamARNs returns an attribute KeyValue conforming to the +// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the +// AWS log stream(s). +func AWSLogStreamARNs(val ...string) attribute.KeyValue { + return AWSLogStreamARNsKey.StringSlice(val) +} + +// AWSLogStreamNames returns an attribute KeyValue conforming to the +// "aws.log.stream.names" semantic conventions. It represents the name(s) of +// the AWS log stream(s) an application is writing to. +func AWSLogStreamNames(val ...string) attribute.KeyValue { + return AWSLogStreamNamesKey.StringSlice(val) +} + +// Attributes for AWS Lambda. +const ( + // AWSLambdaInvokedARNKey is the attribute Key conforming to the + // "aws.lambda.invoked_arn" semantic conventions. It represents the full + // invoked ARN as provided on the `Context` passed to the function + // (`Lambda-Runtime-Invoked-Function-ARN` header on the + // `/runtime/invocation/next` applicable). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias' + // Note: This may be different from `cloud.resource_id` if an alias is + // involved. + AWSLambdaInvokedARNKey = attribute.Key("aws.lambda.invoked_arn") +) + +// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the +// "aws.lambda.invoked_arn" semantic conventions. It represents the full +// invoked ARN as provided on the `Context` passed to the function +// (`Lambda-Runtime-Invoked-Function-ARN` header on the +// `/runtime/invocation/next` applicable). +func AWSLambdaInvokedARN(val string) attribute.KeyValue { + return AWSLambdaInvokedARNKey.String(val) +} + +// Attributes for AWS S3. +const ( + // AWSS3BucketKey is the attribute Key conforming to the "aws.s3.bucket" + // semantic conventions. It represents the S3 bucket name the request + // refers to. Corresponds to the `--bucket` parameter of the [S3 + // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) + // operations. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'some-bucket-name' + // Note: The `bucket` attribute is applicable to all S3 operations that + // reference a bucket, i.e. that require the bucket name as a mandatory + // parameter. + // This applies to almost all S3 operations except `list-buckets`. + AWSS3BucketKey = attribute.Key("aws.s3.bucket") + + // AWSS3CopySourceKey is the attribute Key conforming to the + // "aws.s3.copy_source" semantic conventions. It represents the source + // object (in the form `bucket`/`key`) for the copy operation. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'someFile.yml' + // Note: The `copy_source` attribute applies to S3 copy operations and + // corresponds to the `--copy-source` parameter + // of the [copy-object operation within the S3 + // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html). + // This applies in particular to the following operations: + // + // - + // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) + // - + // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) + AWSS3CopySourceKey = attribute.Key("aws.s3.copy_source") + + // AWSS3DeleteKey is the attribute Key conforming to the "aws.s3.delete" + // semantic conventions. It represents the delete request container that + // specifies the objects to be deleted. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean' + // Note: The `delete` attribute is only applicable to the + // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) + // operation. + // The `delete` attribute corresponds to the `--delete` parameter of the + // [delete-objects operation within the S3 + // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html). + AWSS3DeleteKey = attribute.Key("aws.s3.delete") + + // AWSS3KeyKey is the attribute Key conforming to the "aws.s3.key" semantic + // conventions. It represents the S3 object key the request refers to. + // Corresponds to the `--key` parameter of the [S3 + // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) + // operations. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'someFile.yml' + // Note: The `key` attribute is applicable to all object-related S3 + // operations, i.e. that require the object key as a mandatory parameter. + // This applies in particular to the following operations: + // + // - + // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) + // - + // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) + // - + // [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html) + // - + // [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html) + // - + // [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html) + // - + // [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html) + // - + // [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html) + // - + // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) + // - + // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) + // - + // [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html) + // - + // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) + // - + // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) + // - + // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) + AWSS3KeyKey = attribute.Key("aws.s3.key") + + // AWSS3PartNumberKey is the attribute Key conforming to the + // "aws.s3.part_number" semantic conventions. It represents the part number + // of the part being uploaded in a multipart-upload operation. This is a + // positive integer between 1 and 10,000. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 3456 + // Note: The `part_number` attribute is only applicable to the + // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) + // and + // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) + // operations. + // The `part_number` attribute corresponds to the `--part-number` parameter + // of the + // [upload-part operation within the S3 + // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html). + AWSS3PartNumberKey = attribute.Key("aws.s3.part_number") + + // AWSS3UploadIDKey is the attribute Key conforming to the + // "aws.s3.upload_id" semantic conventions. It represents the upload ID + // that identifies the multipart upload. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ' + // Note: The `upload_id` attribute applies to S3 multipart-upload + // operations and corresponds to the `--upload-id` parameter + // of the [S3 + // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) + // multipart operations. + // This applies in particular to the following operations: + // + // - + // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) + // - + // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) + // - + // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) + // - + // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) + // - + // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) + AWSS3UploadIDKey = attribute.Key("aws.s3.upload_id") +) + +// AWSS3Bucket returns an attribute KeyValue conforming to the +// "aws.s3.bucket" semantic conventions. It represents the S3 bucket name the +// request refers to. Corresponds to the `--bucket` parameter of the [S3 +// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) +// operations. +func AWSS3Bucket(val string) attribute.KeyValue { + return AWSS3BucketKey.String(val) +} + +// AWSS3CopySource returns an attribute KeyValue conforming to the +// "aws.s3.copy_source" semantic conventions. It represents the source object +// (in the form `bucket`/`key`) for the copy operation. +func AWSS3CopySource(val string) attribute.KeyValue { + return AWSS3CopySourceKey.String(val) +} + +// AWSS3Delete returns an attribute KeyValue conforming to the +// "aws.s3.delete" semantic conventions. It represents the delete request +// container that specifies the objects to be deleted. +func AWSS3Delete(val string) attribute.KeyValue { + return AWSS3DeleteKey.String(val) +} + +// AWSS3Key returns an attribute KeyValue conforming to the "aws.s3.key" +// semantic conventions. It represents the S3 object key the request refers to. +// Corresponds to the `--key` parameter of the [S3 +// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) +// operations. +func AWSS3Key(val string) attribute.KeyValue { + return AWSS3KeyKey.String(val) +} + +// AWSS3PartNumber returns an attribute KeyValue conforming to the +// "aws.s3.part_number" semantic conventions. It represents the part number of +// the part being uploaded in a multipart-upload operation. This is a positive +// integer between 1 and 10,000. +func AWSS3PartNumber(val int) attribute.KeyValue { + return AWSS3PartNumberKey.Int(val) +} + +// AWSS3UploadID returns an attribute KeyValue conforming to the +// "aws.s3.upload_id" semantic conventions. It represents the upload ID that +// identifies the multipart upload. +func AWSS3UploadID(val string) attribute.KeyValue { + return AWSS3UploadIDKey.String(val) +} + +// The web browser attributes +const ( + // BrowserBrandsKey is the attribute Key conforming to the "browser.brands" + // semantic conventions. It represents the array of brand name and version + // separated by a space + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99' + // Note: This value is intended to be taken from the [UA client hints + // API](https://wicg.github.io/ua-client-hints/#interface) + // (`navigator.userAgentData.brands`). + BrowserBrandsKey = attribute.Key("browser.brands") + + // BrowserLanguageKey is the attribute Key conforming to the + // "browser.language" semantic conventions. It represents the preferred + // language of the user using the browser + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'en', 'en-US', 'fr', 'fr-FR' + // Note: This value is intended to be taken from the Navigator API + // `navigator.language`. + BrowserLanguageKey = attribute.Key("browser.language") + + // BrowserMobileKey is the attribute Key conforming to the "browser.mobile" + // semantic conventions. It represents a boolean that is true if the + // browser is running on a mobile device + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + // Note: This value is intended to be taken from the [UA client hints + // API](https://wicg.github.io/ua-client-hints/#interface) + // (`navigator.userAgentData.mobile`). If unavailable, this attribute + // SHOULD be left unset. + BrowserMobileKey = attribute.Key("browser.mobile") + + // BrowserPlatformKey is the attribute Key conforming to the + // "browser.platform" semantic conventions. It represents the platform on + // which the browser is running + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Windows', 'macOS', 'Android' + // Note: This value is intended to be taken from the [UA client hints + // API](https://wicg.github.io/ua-client-hints/#interface) + // (`navigator.userAgentData.platform`). If unavailable, the legacy + // `navigator.platform` API SHOULD NOT be used instead and this attribute + // SHOULD be left unset in order for the values to be consistent. + // The list of possible values is defined in the [W3C User-Agent Client + // Hints + // specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform). + // Note that some (but not all) of these values can overlap with values in + // the [`os.type` and `os.name` attributes](./os.md). However, for + // consistency, the values in the `browser.platform` attribute should + // capture the exact value that the user agent provides. + BrowserPlatformKey = attribute.Key("browser.platform") +) + +// BrowserBrands returns an attribute KeyValue conforming to the +// "browser.brands" semantic conventions. It represents the array of brand name +// and version separated by a space +func BrowserBrands(val ...string) attribute.KeyValue { + return BrowserBrandsKey.StringSlice(val) +} + +// BrowserLanguage returns an attribute KeyValue conforming to the +// "browser.language" semantic conventions. It represents the preferred +// language of the user using the browser +func BrowserLanguage(val string) attribute.KeyValue { + return BrowserLanguageKey.String(val) +} + +// BrowserMobile returns an attribute KeyValue conforming to the +// "browser.mobile" semantic conventions. It represents a boolean that is true +// if the browser is running on a mobile device +func BrowserMobile(val bool) attribute.KeyValue { + return BrowserMobileKey.Bool(val) +} + +// BrowserPlatform returns an attribute KeyValue conforming to the +// "browser.platform" semantic conventions. It represents the platform on which +// the browser is running +func BrowserPlatform(val string) attribute.KeyValue { + return BrowserPlatformKey.String(val) +} + +// These attributes may be used to describe the client in a connection-based +// network interaction where there is one side that initiates the connection +// (the client is the side that initiates the connection). This covers all TCP +// network interactions since TCP is connection-based and one side initiates +// the connection (an exception is made for peer-to-peer communication over TCP +// where the "user-facing" surface of the protocol / API doesn't expose a clear +// notion of client and server). This also covers UDP network interactions +// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS. +const ( + // ClientAddressKey is the attribute Key conforming to the "client.address" + // semantic conventions. It represents the client address - domain name if + // available without reverse DNS lookup; otherwise, IP address or Unix + // domain socket name. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'client.example.com', '10.1.2.80', '/tmp/my.sock' + // Note: When observed from the server side, and when communicating through + // an intermediary, `client.address` SHOULD represent the client address + // behind any intermediaries, for example proxies, if it's available. + ClientAddressKey = attribute.Key("client.address") + + // ClientPortKey is the attribute Key conforming to the "client.port" + // semantic conventions. It represents the client port number. + // + // Type: int + // RequirementLevel: Optional + // Stability: stable + // Examples: 65123 + // Note: When observed from the server side, and when communicating through + // an intermediary, `client.port` SHOULD represent the client port behind + // any intermediaries, for example proxies, if it's available. + ClientPortKey = attribute.Key("client.port") +) + +// ClientAddress returns an attribute KeyValue conforming to the +// "client.address" semantic conventions. It represents the client address - +// domain name if available without reverse DNS lookup; otherwise, IP address +// or Unix domain socket name. +func ClientAddress(val string) attribute.KeyValue { + return ClientAddressKey.String(val) +} + +// ClientPort returns an attribute KeyValue conforming to the "client.port" +// semantic conventions. It represents the client port number. +func ClientPort(val int) attribute.KeyValue { + return ClientPortKey.Int(val) +} + +// A cloud environment (e.g. GCP, Azure, AWS). +const ( + // CloudAccountIDKey is the attribute Key conforming to the + // "cloud.account.id" semantic conventions. It represents the cloud account + // ID the resource is assigned to. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '111111111111', 'opentelemetry' + CloudAccountIDKey = attribute.Key("cloud.account.id") + + // CloudAvailabilityZoneKey is the attribute Key conforming to the + // "cloud.availability_zone" semantic conventions. It represents the cloud + // regions often have multiple, isolated locations known as zones to + // increase availability. Availability zone represents the zone where the + // resource is running. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'us-east-1c' + // Note: Availability zones are called "zones" on Alibaba Cloud and Google + // Cloud. + CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone") + + // CloudPlatformKey is the attribute Key conforming to the "cloud.platform" + // semantic conventions. It represents the cloud platform in use. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: The prefix of the service SHOULD match the one specified in + // `cloud.provider`. + CloudPlatformKey = attribute.Key("cloud.platform") + + // CloudProviderKey is the attribute Key conforming to the "cloud.provider" + // semantic conventions. It represents the name of the cloud provider. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + CloudProviderKey = attribute.Key("cloud.provider") + + // CloudRegionKey is the attribute Key conforming to the "cloud.region" + // semantic conventions. It represents the geographical region the resource + // is running. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'us-central1', 'us-east-1' + // Note: Refer to your provider's docs to see the available regions, for + // example [Alibaba Cloud + // regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS + // regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), + // [Azure + // regions](https://azure.microsoft.com/global-infrastructure/geographies/), + // [Google Cloud regions](https://cloud.google.com/about/locations), or + // [Tencent Cloud + // regions](https://www.tencentcloud.com/document/product/213/6091). + CloudRegionKey = attribute.Key("cloud.region") + + // CloudResourceIDKey is the attribute Key conforming to the + // "cloud.resource_id" semantic conventions. It represents the cloud + // provider-specific native identifier of the monitored cloud resource + // (e.g. an + // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // on AWS, a [fully qualified resource + // ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) + // on Azure, a [full resource + // name](https://cloud.google.com/apis/design/resource_names#full_resource_name) + // on GCP) + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function', + // '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID', + // '/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/' + // Note: On some cloud providers, it may not be possible to determine the + // full ID at startup, + // so it may be necessary to set `cloud.resource_id` as a span attribute + // instead. + // + // The exact value to use for `cloud.resource_id` depends on the cloud + // provider. + // The following well-known definitions MUST be used if you set this + // attribute and they apply: + // + // * **AWS Lambda:** The function + // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html). + // Take care not to use the "invoked ARN" directly but replace any + // [alias + // suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) + // with the resolved function version, as the same runtime instance may + // be invokable with + // multiple different aliases. + // * **GCP:** The [URI of the + // resource](https://cloud.google.com/iam/docs/full-resource-names) + // * **Azure:** The [Fully Qualified Resource + // ID](https://docs.microsoft.com/rest/api/resources/resources/get-by-id) + // of the invoked function, + // *not* the function app, having the form + // `/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/`. + // This means that a span attribute MUST be used, as an Azure function + // app can host multiple functions that would usually share + // a TracerProvider. + CloudResourceIDKey = attribute.Key("cloud.resource_id") +) + +var ( + // Alibaba Cloud Elastic Compute Service + CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs") + // Alibaba Cloud Function Compute + CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc") + // Red Hat OpenShift on Alibaba Cloud + CloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String("alibaba_cloud_openshift") + // AWS Elastic Compute Cloud + CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2") + // AWS Elastic Container Service + CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs") + // AWS Elastic Kubernetes Service + CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks") + // AWS Lambda + CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda") + // AWS Elastic Beanstalk + CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk") + // AWS App Runner + CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner") + // Red Hat OpenShift on AWS (ROSA) + CloudPlatformAWSOpenshift = CloudPlatformKey.String("aws_openshift") + // Azure Virtual Machines + CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm") + // Azure Container Apps + CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure_container_apps") + // Azure Container Instances + CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances") + // Azure Kubernetes Service + CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks") + // Azure Functions + CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions") + // Azure App Service + CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service") + // Azure Red Hat OpenShift + CloudPlatformAzureOpenshift = CloudPlatformKey.String("azure_openshift") + // Google Bare Metal Solution (BMS) + CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution") + // Google Cloud Compute Engine (GCE) + CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine") + // Google Cloud Run + CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run") + // Google Cloud Kubernetes Engine (GKE) + CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine") + // Google Cloud Functions (GCF) + CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions") + // Google Cloud App Engine (GAE) + CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine") + // Red Hat OpenShift on Google Cloud + CloudPlatformGCPOpenshift = CloudPlatformKey.String("gcp_openshift") + // Red Hat OpenShift on IBM Cloud + CloudPlatformIbmCloudOpenshift = CloudPlatformKey.String("ibm_cloud_openshift") + // Tencent Cloud Cloud Virtual Machine (CVM) + CloudPlatformTencentCloudCvm = CloudPlatformKey.String("tencent_cloud_cvm") + // Tencent Cloud Elastic Kubernetes Service (EKS) + CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks") + // Tencent Cloud Serverless Cloud Function (SCF) + CloudPlatformTencentCloudScf = CloudPlatformKey.String("tencent_cloud_scf") +) + +var ( + // Alibaba Cloud + CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud") + // Amazon Web Services + CloudProviderAWS = CloudProviderKey.String("aws") + // Microsoft Azure + CloudProviderAzure = CloudProviderKey.String("azure") + // Google Cloud Platform + CloudProviderGCP = CloudProviderKey.String("gcp") + // Heroku Platform as a Service + CloudProviderHeroku = CloudProviderKey.String("heroku") + // IBM Cloud + CloudProviderIbmCloud = CloudProviderKey.String("ibm_cloud") + // Tencent Cloud + CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud") +) + +// CloudAccountID returns an attribute KeyValue conforming to the +// "cloud.account.id" semantic conventions. It represents the cloud account ID +// the resource is assigned to. +func CloudAccountID(val string) attribute.KeyValue { + return CloudAccountIDKey.String(val) +} + +// CloudAvailabilityZone returns an attribute KeyValue conforming to the +// "cloud.availability_zone" semantic conventions. It represents the cloud +// regions often have multiple, isolated locations known as zones to increase +// availability. Availability zone represents the zone where the resource is +// running. +func CloudAvailabilityZone(val string) attribute.KeyValue { + return CloudAvailabilityZoneKey.String(val) +} + +// CloudRegion returns an attribute KeyValue conforming to the +// "cloud.region" semantic conventions. It represents the geographical region +// the resource is running. +func CloudRegion(val string) attribute.KeyValue { + return CloudRegionKey.String(val) +} + +// CloudResourceID returns an attribute KeyValue conforming to the +// "cloud.resource_id" semantic conventions. It represents the cloud +// provider-specific native identifier of the monitored cloud resource (e.g. an +// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) +// on AWS, a [fully qualified resource +// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on +// Azure, a [full resource +// name](https://cloud.google.com/apis/design/resource_names#full_resource_name) +// on GCP) +func CloudResourceID(val string) attribute.KeyValue { + return CloudResourceIDKey.String(val) +} + +// Attributes for CloudEvents. +const ( + // CloudeventsEventIDKey is the attribute Key conforming to the + // "cloudevents.event_id" semantic conventions. It represents the + // [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) + // uniquely identifies the event. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '123e4567-e89b-12d3-a456-426614174000', '0001' + CloudeventsEventIDKey = attribute.Key("cloudevents.event_id") + + // CloudeventsEventSourceKey is the attribute Key conforming to the + // "cloudevents.event_source" semantic conventions. It represents the + // [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) + // identifies the context in which an event happened. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'https://github.com/cloudevents', + // '/cloudevents/spec/pull/123', 'my-service' + CloudeventsEventSourceKey = attribute.Key("cloudevents.event_source") + + // CloudeventsEventSpecVersionKey is the attribute Key conforming to the + // "cloudevents.event_spec_version" semantic conventions. It represents the + // [version of the CloudEvents + // specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) + // which the event uses. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1.0' + CloudeventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version") + + // CloudeventsEventSubjectKey is the attribute Key conforming to the + // "cloudevents.event_subject" semantic conventions. It represents the + // [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) + // of the event in the context of the event producer (identified by + // source). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'mynewfile.jpg' + CloudeventsEventSubjectKey = attribute.Key("cloudevents.event_subject") + + // CloudeventsEventTypeKey is the attribute Key conforming to the + // "cloudevents.event_type" semantic conventions. It represents the + // [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) + // contains a value describing the type of event related to the originating + // occurrence. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'com.github.pull_request.opened', + // 'com.example.object.deleted.v2' + CloudeventsEventTypeKey = attribute.Key("cloudevents.event_type") +) + +// CloudeventsEventID returns an attribute KeyValue conforming to the +// "cloudevents.event_id" semantic conventions. It represents the +// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) +// uniquely identifies the event. +func CloudeventsEventID(val string) attribute.KeyValue { + return CloudeventsEventIDKey.String(val) +} + +// CloudeventsEventSource returns an attribute KeyValue conforming to the +// "cloudevents.event_source" semantic conventions. It represents the +// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) +// identifies the context in which an event happened. +func CloudeventsEventSource(val string) attribute.KeyValue { + return CloudeventsEventSourceKey.String(val) +} + +// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to +// the "cloudevents.event_spec_version" semantic conventions. It represents the +// [version of the CloudEvents +// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) +// which the event uses. +func CloudeventsEventSpecVersion(val string) attribute.KeyValue { + return CloudeventsEventSpecVersionKey.String(val) +} + +// CloudeventsEventSubject returns an attribute KeyValue conforming to the +// "cloudevents.event_subject" semantic conventions. It represents the +// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) +// of the event in the context of the event producer (identified by source). +func CloudeventsEventSubject(val string) attribute.KeyValue { + return CloudeventsEventSubjectKey.String(val) +} + +// CloudeventsEventType returns an attribute KeyValue conforming to the +// "cloudevents.event_type" semantic conventions. It represents the +// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) +// contains a value describing the type of event related to the originating +// occurrence. +func CloudeventsEventType(val string) attribute.KeyValue { + return CloudeventsEventTypeKey.String(val) +} + +// These attributes allow to report this unit of code and therefore to provide +// more context about the span. +const ( + // CodeColumnKey is the attribute Key conforming to the "code.column" + // semantic conventions. It represents the column number in `code.filepath` + // best representing the operation. It SHOULD point within the code unit + // named in `code.function`. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 16 + CodeColumnKey = attribute.Key("code.column") + + // CodeFilepathKey is the attribute Key conforming to the "code.filepath" + // semantic conventions. It represents the source code file name that + // identifies the code unit as uniquely as possible (preferably an absolute + // file path). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/usr/local/MyApplication/content_root/app/index.php' + CodeFilepathKey = attribute.Key("code.filepath") + + // CodeFunctionKey is the attribute Key conforming to the "code.function" + // semantic conventions. It represents the method or function name, or + // equivalent (usually rightmost part of the code unit's name). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'serveRequest' + CodeFunctionKey = attribute.Key("code.function") + + // CodeLineNumberKey is the attribute Key conforming to the "code.lineno" + // semantic conventions. It represents the line number in `code.filepath` + // best representing the operation. It SHOULD point within the code unit + // named in `code.function`. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 42 + CodeLineNumberKey = attribute.Key("code.lineno") + + // CodeNamespaceKey is the attribute Key conforming to the "code.namespace" + // semantic conventions. It represents the "namespace" within which + // `code.function` is defined. Usually the qualified class or module name, + // such that `code.namespace` + some separator + `code.function` form a + // unique identifier for the code unit. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'com.example.MyHTTPService' + CodeNamespaceKey = attribute.Key("code.namespace") + + // CodeStacktraceKey is the attribute Key conforming to the + // "code.stacktrace" semantic conventions. It represents a stacktrace as a + // string in the natural representation for the language runtime. The + // representation is to be determined and documented by each language SIG. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'at + // com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' + // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' + // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' + CodeStacktraceKey = attribute.Key("code.stacktrace") +) + +// CodeColumn returns an attribute KeyValue conforming to the "code.column" +// semantic conventions. It represents the column number in `code.filepath` +// best representing the operation. It SHOULD point within the code unit named +// in `code.function`. +func CodeColumn(val int) attribute.KeyValue { + return CodeColumnKey.Int(val) +} + +// CodeFilepath returns an attribute KeyValue conforming to the +// "code.filepath" semantic conventions. It represents the source code file +// name that identifies the code unit as uniquely as possible (preferably an +// absolute file path). +func CodeFilepath(val string) attribute.KeyValue { + return CodeFilepathKey.String(val) +} + +// CodeFunction returns an attribute KeyValue conforming to the +// "code.function" semantic conventions. It represents the method or function +// name, or equivalent (usually rightmost part of the code unit's name). +func CodeFunction(val string) attribute.KeyValue { + return CodeFunctionKey.String(val) +} + +// CodeLineNumber returns an attribute KeyValue conforming to the "code.lineno" +// semantic conventions. It represents the line number in `code.filepath` best +// representing the operation. It SHOULD point within the code unit named in +// `code.function`. +func CodeLineNumber(val int) attribute.KeyValue { + return CodeLineNumberKey.Int(val) +} + +// CodeNamespace returns an attribute KeyValue conforming to the +// "code.namespace" semantic conventions. It represents the "namespace" within +// which `code.function` is defined. Usually the qualified class or module +// name, such that `code.namespace` + some separator + `code.function` form a +// unique identifier for the code unit. +func CodeNamespace(val string) attribute.KeyValue { + return CodeNamespaceKey.String(val) +} + +// CodeStacktrace returns an attribute KeyValue conforming to the +// "code.stacktrace" semantic conventions. It represents a stacktrace as a +// string in the natural representation for the language runtime. The +// representation is to be determined and documented by each language SIG. +func CodeStacktrace(val string) attribute.KeyValue { + return CodeStacktraceKey.String(val) +} + +// A container instance. +const ( + // ContainerCommandKey is the attribute Key conforming to the + // "container.command" semantic conventions. It represents the command used + // to run the container (i.e. the command name). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'otelcontribcol' + // Note: If using embedded credentials or sensitive data, it is recommended + // to remove them to prevent potential leakage. + ContainerCommandKey = attribute.Key("container.command") + + // ContainerCommandArgsKey is the attribute Key conforming to the + // "container.command_args" semantic conventions. It represents the all the + // command arguments (including the command/executable itself) run by the + // container. [2] + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'otelcontribcol, --config, config.yaml' + ContainerCommandArgsKey = attribute.Key("container.command_args") + + // ContainerCommandLineKey is the attribute Key conforming to the + // "container.command_line" semantic conventions. It represents the full + // command run by the container as a single string representing the full + // command. [2] + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'otelcontribcol --config config.yaml' + ContainerCommandLineKey = attribute.Key("container.command_line") + + // ContainerCPUStateKey is the attribute Key conforming to the + // "container.cpu.state" semantic conventions. It represents the CPU state + // for this data point. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'user', 'kernel' + ContainerCPUStateKey = attribute.Key("container.cpu.state") + + // ContainerIDKey is the attribute Key conforming to the "container.id" + // semantic conventions. It represents the container ID. Usually a UUID, as + // for example used to [identify Docker + // containers](https://docs.docker.com/engine/reference/run/#container-identification). + // The UUID might be abbreviated. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'a3bf90e006b2' + ContainerIDKey = attribute.Key("container.id") + + // ContainerImageIDKey is the attribute Key conforming to the + // "container.image.id" semantic conventions. It represents the runtime + // specific image identifier. Usually a hash algorithm followed by a UUID. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f' + // Note: Docker defines a sha256 of the image id; `container.image.id` + // corresponds to the `Image` field from the Docker container inspect + // [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect) + // endpoint. + // K8S defines a link to the container registry repository with digest + // `"imageID": "registry.azurecr.io + // /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`. + // The ID is assigned by the container runtime and can vary in different + // environments. Consider using `oci.manifest.digest` if it is important to + // identify the same image in different environments/runtimes. + ContainerImageIDKey = attribute.Key("container.image.id") + + // ContainerImageNameKey is the attribute Key conforming to the + // "container.image.name" semantic conventions. It represents the name of + // the image the container was built on. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'gcr.io/opentelemetry/operator' + ContainerImageNameKey = attribute.Key("container.image.name") + + // ContainerImageRepoDigestsKey is the attribute Key conforming to the + // "container.image.repo_digests" semantic conventions. It represents the + // repo digests of the container image as provided by the container + // runtime. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb', + // 'internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578' + // Note: + // [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect) + // and + // [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) + // report those under the `RepoDigests` field. + ContainerImageRepoDigestsKey = attribute.Key("container.image.repo_digests") + + // ContainerImageTagsKey is the attribute Key conforming to the + // "container.image.tags" semantic conventions. It represents the container + // image tags. An example can be found in [Docker Image + // Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). + // Should be only the `` section of the full name for example from + // `registry.example.com/my-org/my-image:`. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'v1.27.1', '3.5.7-0' + ContainerImageTagsKey = attribute.Key("container.image.tags") + + // ContainerNameKey is the attribute Key conforming to the "container.name" + // semantic conventions. It represents the container name used by container + // runtime. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry-autoconf' + ContainerNameKey = attribute.Key("container.name") + + // ContainerRuntimeKey is the attribute Key conforming to the + // "container.runtime" semantic conventions. It represents the container + // runtime managing this container. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'docker', 'containerd', 'rkt' + ContainerRuntimeKey = attribute.Key("container.runtime") +) + +var ( + // When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode (Windows) + ContainerCPUStateUser = ContainerCPUStateKey.String("user") + // When CPU is used by the system (host OS) + ContainerCPUStateSystem = ContainerCPUStateKey.String("system") + // When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel mode (Windows) + ContainerCPUStateKernel = ContainerCPUStateKey.String("kernel") +) + +// ContainerCommand returns an attribute KeyValue conforming to the +// "container.command" semantic conventions. It represents the command used to +// run the container (i.e. the command name). +func ContainerCommand(val string) attribute.KeyValue { + return ContainerCommandKey.String(val) +} + +// ContainerCommandArgs returns an attribute KeyValue conforming to the +// "container.command_args" semantic conventions. It represents the all the +// command arguments (including the command/executable itself) run by the +// container. [2] +func ContainerCommandArgs(val ...string) attribute.KeyValue { + return ContainerCommandArgsKey.StringSlice(val) +} + +// ContainerCommandLine returns an attribute KeyValue conforming to the +// "container.command_line" semantic conventions. It represents the full +// command run by the container as a single string representing the full +// command. [2] +func ContainerCommandLine(val string) attribute.KeyValue { + return ContainerCommandLineKey.String(val) +} + +// ContainerID returns an attribute KeyValue conforming to the +// "container.id" semantic conventions. It represents the container ID. Usually +// a UUID, as for example used to [identify Docker +// containers](https://docs.docker.com/engine/reference/run/#container-identification). +// The UUID might be abbreviated. +func ContainerID(val string) attribute.KeyValue { + return ContainerIDKey.String(val) +} + +// ContainerImageID returns an attribute KeyValue conforming to the +// "container.image.id" semantic conventions. It represents the runtime +// specific image identifier. Usually a hash algorithm followed by a UUID. +func ContainerImageID(val string) attribute.KeyValue { + return ContainerImageIDKey.String(val) +} + +// ContainerImageName returns an attribute KeyValue conforming to the +// "container.image.name" semantic conventions. It represents the name of the +// image the container was built on. +func ContainerImageName(val string) attribute.KeyValue { + return ContainerImageNameKey.String(val) +} + +// ContainerImageRepoDigests returns an attribute KeyValue conforming to the +// "container.image.repo_digests" semantic conventions. It represents the repo +// digests of the container image as provided by the container runtime. +func ContainerImageRepoDigests(val ...string) attribute.KeyValue { + return ContainerImageRepoDigestsKey.StringSlice(val) +} + +// ContainerImageTags returns an attribute KeyValue conforming to the +// "container.image.tags" semantic conventions. It represents the container +// image tags. An example can be found in [Docker Image +// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). +// Should be only the `` section of the full name for example from +// `registry.example.com/my-org/my-image:`. +func ContainerImageTags(val ...string) attribute.KeyValue { + return ContainerImageTagsKey.StringSlice(val) +} + +// ContainerName returns an attribute KeyValue conforming to the +// "container.name" semantic conventions. It represents the container name used +// by container runtime. +func ContainerName(val string) attribute.KeyValue { + return ContainerNameKey.String(val) +} + +// ContainerRuntime returns an attribute KeyValue conforming to the +// "container.runtime" semantic conventions. It represents the container +// runtime managing this container. +func ContainerRuntime(val string) attribute.KeyValue { + return ContainerRuntimeKey.String(val) +} + +// This group defines the attributes used to describe telemetry in the context +// of databases. +const ( + // DBClientConnectionsPoolNameKey is the attribute Key conforming to the + // "db.client.connections.pool.name" semantic conventions. It represents + // the name of the connection pool; unique within the instrumented + // application. In case the connection pool implementation doesn't provide + // a name, instrumentation should use a combination of `server.address` and + // `server.port` attributes formatted as `server.address:server.port`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myDataSource' + DBClientConnectionsPoolNameKey = attribute.Key("db.client.connections.pool.name") + + // DBClientConnectionsStateKey is the attribute Key conforming to the + // "db.client.connections.state" semantic conventions. It represents the + // state of a connection in the pool + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'idle' + DBClientConnectionsStateKey = attribute.Key("db.client.connections.state") + + // DBCollectionNameKey is the attribute Key conforming to the + // "db.collection.name" semantic conventions. It represents the name of a + // collection (table, container) within the database. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'public.users', 'customers' + // Note: If the collection name is parsed from the query, it SHOULD match + // the value provided in the query and may be qualified with the schema and + // database name. + // It is RECOMMENDED to capture the value as provided by the application + // without attempting to do any case normalization. + DBCollectionNameKey = attribute.Key("db.collection.name") + + // DBNamespaceKey is the attribute Key conforming to the "db.namespace" + // semantic conventions. It represents the name of the database, fully + // qualified within the server address and port. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'customers', 'test.users' + // Note: If a database system has multiple namespace components, they + // SHOULD be concatenated (potentially using database system specific + // conventions) from most general to most specific namespace component, and + // more specific namespaces SHOULD NOT be captured without the more general + // namespaces, to ensure that "startswith" queries for the more general + // namespaces will be valid. + // Semantic conventions for individual database systems SHOULD document + // what `db.namespace` means in the context of that system. + // It is RECOMMENDED to capture the value as provided by the application + // without attempting to do any case normalization. + DBNamespaceKey = attribute.Key("db.namespace") + + // DBOperationNameKey is the attribute Key conforming to the + // "db.operation.name" semantic conventions. It represents the name of the + // operation or command being executed. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'findAndModify', 'HMSET', 'SELECT' + // Note: It is RECOMMENDED to capture the value as provided by the + // application without attempting to do any case normalization. + DBOperationNameKey = attribute.Key("db.operation.name") + + // DBQueryTextKey is the attribute Key conforming to the "db.query.text" + // semantic conventions. It represents the database query being executed. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'SELECT * FROM wuser_table where username = ?', 'SET mykey + // "WuValue"' + DBQueryTextKey = attribute.Key("db.query.text") + + // DBSystemKey is the attribute Key conforming to the "db.system" semantic + // conventions. It represents the database management system (DBMS) product + // as identified by the client instrumentation. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: The actual DBMS may differ from the one identified by the client. + // For example, when using PostgreSQL client libraries to connect to a + // CockroachDB, the `db.system` is set to `postgresql` based on the + // instrumentation's best knowledge. + DBSystemKey = attribute.Key("db.system") +) + +var ( + // idle + DBClientConnectionsStateIdle = DBClientConnectionsStateKey.String("idle") + // used + DBClientConnectionsStateUsed = DBClientConnectionsStateKey.String("used") +) + +var ( + // Some other SQL database. Fallback only. See notes + DBSystemOtherSQL = DBSystemKey.String("other_sql") + // Microsoft SQL Server + DBSystemMSSQL = DBSystemKey.String("mssql") + // Microsoft SQL Server Compact + DBSystemMssqlcompact = DBSystemKey.String("mssqlcompact") + // MySQL + DBSystemMySQL = DBSystemKey.String("mysql") + // Oracle Database + DBSystemOracle = DBSystemKey.String("oracle") + // IBM DB2 + DBSystemDB2 = DBSystemKey.String("db2") + // PostgreSQL + DBSystemPostgreSQL = DBSystemKey.String("postgresql") + // Amazon Redshift + DBSystemRedshift = DBSystemKey.String("redshift") + // Apache Hive + DBSystemHive = DBSystemKey.String("hive") + // Cloudscape + DBSystemCloudscape = DBSystemKey.String("cloudscape") + // HyperSQL DataBase + DBSystemHSQLDB = DBSystemKey.String("hsqldb") + // Progress Database + DBSystemProgress = DBSystemKey.String("progress") + // SAP MaxDB + DBSystemMaxDB = DBSystemKey.String("maxdb") + // SAP HANA + DBSystemHanaDB = DBSystemKey.String("hanadb") + // Ingres + DBSystemIngres = DBSystemKey.String("ingres") + // FirstSQL + DBSystemFirstSQL = DBSystemKey.String("firstsql") + // EnterpriseDB + DBSystemEDB = DBSystemKey.String("edb") + // InterSystems Caché + DBSystemCache = DBSystemKey.String("cache") + // Adabas (Adaptable Database System) + DBSystemAdabas = DBSystemKey.String("adabas") + // Firebird + DBSystemFirebird = DBSystemKey.String("firebird") + // Apache Derby + DBSystemDerby = DBSystemKey.String("derby") + // FileMaker + DBSystemFilemaker = DBSystemKey.String("filemaker") + // Informix + DBSystemInformix = DBSystemKey.String("informix") + // InstantDB + DBSystemInstantDB = DBSystemKey.String("instantdb") + // InterBase + DBSystemInterbase = DBSystemKey.String("interbase") + // MariaDB + DBSystemMariaDB = DBSystemKey.String("mariadb") + // Netezza + DBSystemNetezza = DBSystemKey.String("netezza") + // Pervasive PSQL + DBSystemPervasive = DBSystemKey.String("pervasive") + // PointBase + DBSystemPointbase = DBSystemKey.String("pointbase") + // SQLite + DBSystemSqlite = DBSystemKey.String("sqlite") + // Sybase + DBSystemSybase = DBSystemKey.String("sybase") + // Teradata + DBSystemTeradata = DBSystemKey.String("teradata") + // Vertica + DBSystemVertica = DBSystemKey.String("vertica") + // H2 + DBSystemH2 = DBSystemKey.String("h2") + // ColdFusion IMQ + DBSystemColdfusion = DBSystemKey.String("coldfusion") + // Apache Cassandra + DBSystemCassandra = DBSystemKey.String("cassandra") + // Apache HBase + DBSystemHBase = DBSystemKey.String("hbase") + // MongoDB + DBSystemMongoDB = DBSystemKey.String("mongodb") + // Redis + DBSystemRedis = DBSystemKey.String("redis") + // Couchbase + DBSystemCouchbase = DBSystemKey.String("couchbase") + // CouchDB + DBSystemCouchDB = DBSystemKey.String("couchdb") + // Microsoft Azure Cosmos DB + DBSystemCosmosDB = DBSystemKey.String("cosmosdb") + // Amazon DynamoDB + DBSystemDynamoDB = DBSystemKey.String("dynamodb") + // Neo4j + DBSystemNeo4j = DBSystemKey.String("neo4j") + // Apache Geode + DBSystemGeode = DBSystemKey.String("geode") + // Elasticsearch + DBSystemElasticsearch = DBSystemKey.String("elasticsearch") + // Memcached + DBSystemMemcached = DBSystemKey.String("memcached") + // CockroachDB + DBSystemCockroachdb = DBSystemKey.String("cockroachdb") + // OpenSearch + DBSystemOpensearch = DBSystemKey.String("opensearch") + // ClickHouse + DBSystemClickhouse = DBSystemKey.String("clickhouse") + // Cloud Spanner + DBSystemSpanner = DBSystemKey.String("spanner") + // Trino + DBSystemTrino = DBSystemKey.String("trino") +) + +// DBClientConnectionsPoolName returns an attribute KeyValue conforming to +// the "db.client.connections.pool.name" semantic conventions. It represents +// the name of the connection pool; unique within the instrumented application. +// In case the connection pool implementation doesn't provide a name, +// instrumentation should use a combination of `server.address` and +// `server.port` attributes formatted as `server.address:server.port`. +func DBClientConnectionsPoolName(val string) attribute.KeyValue { + return DBClientConnectionsPoolNameKey.String(val) +} + +// DBCollectionName returns an attribute KeyValue conforming to the +// "db.collection.name" semantic conventions. It represents the name of a +// collection (table, container) within the database. +func DBCollectionName(val string) attribute.KeyValue { + return DBCollectionNameKey.String(val) +} + +// DBNamespace returns an attribute KeyValue conforming to the +// "db.namespace" semantic conventions. It represents the name of the database, +// fully qualified within the server address and port. +func DBNamespace(val string) attribute.KeyValue { + return DBNamespaceKey.String(val) +} + +// DBOperationName returns an attribute KeyValue conforming to the +// "db.operation.name" semantic conventions. It represents the name of the +// operation or command being executed. +func DBOperationName(val string) attribute.KeyValue { + return DBOperationNameKey.String(val) +} + +// DBQueryText returns an attribute KeyValue conforming to the +// "db.query.text" semantic conventions. It represents the database query being +// executed. +func DBQueryText(val string) attribute.KeyValue { + return DBQueryTextKey.String(val) +} + +// This group defines attributes for Cassandra. +const ( + // DBCassandraConsistencyLevelKey is the attribute Key conforming to the + // "db.cassandra.consistency_level" semantic conventions. It represents the + // consistency level of the query. Based on consistency values from + // [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html). + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + DBCassandraConsistencyLevelKey = attribute.Key("db.cassandra.consistency_level") + + // DBCassandraCoordinatorDCKey is the attribute Key conforming to the + // "db.cassandra.coordinator.dc" semantic conventions. It represents the + // data center of the coordinating node for a query. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'us-west-2' + DBCassandraCoordinatorDCKey = attribute.Key("db.cassandra.coordinator.dc") + + // DBCassandraCoordinatorIDKey is the attribute Key conforming to the + // "db.cassandra.coordinator.id" semantic conventions. It represents the ID + // of the coordinating node for a query. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af' + DBCassandraCoordinatorIDKey = attribute.Key("db.cassandra.coordinator.id") + + // DBCassandraIdempotenceKey is the attribute Key conforming to the + // "db.cassandra.idempotence" semantic conventions. It represents the + // whether or not the query is idempotent. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + DBCassandraIdempotenceKey = attribute.Key("db.cassandra.idempotence") + + // DBCassandraPageSizeKey is the attribute Key conforming to the + // "db.cassandra.page_size" semantic conventions. It represents the fetch + // size used for paging, i.e. how many rows will be returned at once. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 5000 + DBCassandraPageSizeKey = attribute.Key("db.cassandra.page_size") + + // DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming + // to the "db.cassandra.speculative_execution_count" semantic conventions. + // It represents the number of times a query was speculatively executed. + // Not set or `0` if the query was not executed speculatively. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 0, 2 + DBCassandraSpeculativeExecutionCountKey = attribute.Key("db.cassandra.speculative_execution_count") +) + +var ( + // all + DBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String("all") + // each_quorum + DBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String("each_quorum") + // quorum + DBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String("quorum") + // local_quorum + DBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String("local_quorum") + // one + DBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String("one") + // two + DBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String("two") + // three + DBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String("three") + // local_one + DBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String("local_one") + // any + DBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String("any") + // serial + DBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String("serial") + // local_serial + DBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String("local_serial") +) + +// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the +// "db.cassandra.coordinator.dc" semantic conventions. It represents the data +// center of the coordinating node for a query. +func DBCassandraCoordinatorDC(val string) attribute.KeyValue { + return DBCassandraCoordinatorDCKey.String(val) +} + +// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the +// "db.cassandra.coordinator.id" semantic conventions. It represents the ID of +// the coordinating node for a query. +func DBCassandraCoordinatorID(val string) attribute.KeyValue { + return DBCassandraCoordinatorIDKey.String(val) +} + +// DBCassandraIdempotence returns an attribute KeyValue conforming to the +// "db.cassandra.idempotence" semantic conventions. It represents the whether +// or not the query is idempotent. +func DBCassandraIdempotence(val bool) attribute.KeyValue { + return DBCassandraIdempotenceKey.Bool(val) +} + +// DBCassandraPageSize returns an attribute KeyValue conforming to the +// "db.cassandra.page_size" semantic conventions. It represents the fetch size +// used for paging, i.e. how many rows will be returned at once. +func DBCassandraPageSize(val int) attribute.KeyValue { + return DBCassandraPageSizeKey.Int(val) +} + +// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue +// conforming to the "db.cassandra.speculative_execution_count" semantic +// conventions. It represents the number of times a query was speculatively +// executed. Not set or `0` if the query was not executed speculatively. +func DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue { + return DBCassandraSpeculativeExecutionCountKey.Int(val) +} + +// This group defines attributes for Azure Cosmos DB. +const ( + // DBCosmosDBClientIDKey is the attribute Key conforming to the + // "db.cosmosdb.client_id" semantic conventions. It represents the unique + // Cosmos client instance id. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '3ba4827d-4422-483f-b59f-85b74211c11d' + DBCosmosDBClientIDKey = attribute.Key("db.cosmosdb.client_id") + + // DBCosmosDBConnectionModeKey is the attribute Key conforming to the + // "db.cosmosdb.connection_mode" semantic conventions. It represents the + // cosmos client connection mode. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + DBCosmosDBConnectionModeKey = attribute.Key("db.cosmosdb.connection_mode") + + // DBCosmosDBOperationTypeKey is the attribute Key conforming to the + // "db.cosmosdb.operation_type" semantic conventions. It represents the + // cosmosDB Operation Type. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + DBCosmosDBOperationTypeKey = attribute.Key("db.cosmosdb.operation_type") + + // DBCosmosDBRequestChargeKey is the attribute Key conforming to the + // "db.cosmosdb.request_charge" semantic conventions. It represents the rU + // consumed for that operation + // + // Type: double + // RequirementLevel: Optional + // Stability: experimental + // Examples: 46.18, 1.0 + DBCosmosDBRequestChargeKey = attribute.Key("db.cosmosdb.request_charge") + + // DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the + // "db.cosmosdb.request_content_length" semantic conventions. It represents + // the request payload size in bytes + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + DBCosmosDBRequestContentLengthKey = attribute.Key("db.cosmosdb.request_content_length") + + // DBCosmosDBStatusCodeKey is the attribute Key conforming to the + // "db.cosmosdb.status_code" semantic conventions. It represents the cosmos + // DB status code. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 200, 201 + DBCosmosDBStatusCodeKey = attribute.Key("db.cosmosdb.status_code") + + // DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the + // "db.cosmosdb.sub_status_code" semantic conventions. It represents the + // cosmos DB sub status code. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1000, 1002 + DBCosmosDBSubStatusCodeKey = attribute.Key("db.cosmosdb.sub_status_code") +) + +var ( + // Gateway (HTTP) connections mode + DBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String("gateway") + // Direct connection + DBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String("direct") +) + +var ( + // invalid + DBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String("Invalid") + // create + DBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String("Create") + // patch + DBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String("Patch") + // read + DBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String("Read") + // read_feed + DBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String("ReadFeed") + // delete + DBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String("Delete") + // replace + DBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String("Replace") + // execute + DBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String("Execute") + // query + DBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String("Query") + // head + DBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String("Head") + // head_feed + DBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String("HeadFeed") + // upsert + DBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String("Upsert") + // batch + DBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String("Batch") + // query_plan + DBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String("QueryPlan") + // execute_javascript + DBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String("ExecuteJavaScript") +) + +// DBCosmosDBClientID returns an attribute KeyValue conforming to the +// "db.cosmosdb.client_id" semantic conventions. It represents the unique +// Cosmos client instance id. +func DBCosmosDBClientID(val string) attribute.KeyValue { + return DBCosmosDBClientIDKey.String(val) +} + +// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the +// "db.cosmosdb.request_charge" semantic conventions. It represents the rU +// consumed for that operation +func DBCosmosDBRequestCharge(val float64) attribute.KeyValue { + return DBCosmosDBRequestChargeKey.Float64(val) +} + +// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming +// to the "db.cosmosdb.request_content_length" semantic conventions. It +// represents the request payload size in bytes +func DBCosmosDBRequestContentLength(val int) attribute.KeyValue { + return DBCosmosDBRequestContentLengthKey.Int(val) +} + +// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the +// "db.cosmosdb.status_code" semantic conventions. It represents the cosmos DB +// status code. +func DBCosmosDBStatusCode(val int) attribute.KeyValue { + return DBCosmosDBStatusCodeKey.Int(val) +} + +// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the +// "db.cosmosdb.sub_status_code" semantic conventions. It represents the cosmos +// DB sub status code. +func DBCosmosDBSubStatusCode(val int) attribute.KeyValue { + return DBCosmosDBSubStatusCodeKey.Int(val) +} + +// This group defines attributes for Elasticsearch. +const ( + // DBElasticsearchClusterNameKey is the attribute Key conforming to the + // "db.elasticsearch.cluster.name" semantic conventions. It represents the + // represents the identifier of an Elasticsearch cluster. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'e9106fc68e3044f0b1475b04bf4ffd5f' + DBElasticsearchClusterNameKey = attribute.Key("db.elasticsearch.cluster.name") + + // DBElasticsearchNodeNameKey is the attribute Key conforming to the + // "db.elasticsearch.node.name" semantic conventions. It represents the + // represents the human-readable identifier of the node/instance to which a + // request was routed. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'instance-0000000001' + DBElasticsearchNodeNameKey = attribute.Key("db.elasticsearch.node.name") +) + +// DBElasticsearchClusterName returns an attribute KeyValue conforming to +// the "db.elasticsearch.cluster.name" semantic conventions. It represents the +// represents the identifier of an Elasticsearch cluster. +func DBElasticsearchClusterName(val string) attribute.KeyValue { + return DBElasticsearchClusterNameKey.String(val) +} + +// DBElasticsearchNodeName returns an attribute KeyValue conforming to the +// "db.elasticsearch.node.name" semantic conventions. It represents the +// represents the human-readable identifier of the node/instance to which a +// request was routed. +func DBElasticsearchNodeName(val string) attribute.KeyValue { + return DBElasticsearchNodeNameKey.String(val) +} + +// Attributes for software deployments. +const ( + // DeploymentEnvironmentKey is the attribute Key conforming to the + // "deployment.environment" semantic conventions. It represents the name of + // the [deployment + // environment](https://wikipedia.org/wiki/Deployment_environment) (aka + // deployment tier). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'staging', 'production' + // Note: `deployment.environment` does not affect the uniqueness + // constraints defined through + // the `service.namespace`, `service.name` and `service.instance.id` + // resource attributes. + // This implies that resources carrying the following attribute + // combinations MUST be + // considered to be identifying the same service: + // + // * `service.name=frontend`, `deployment.environment=production` + // * `service.name=frontend`, `deployment.environment=staging`. + DeploymentEnvironmentKey = attribute.Key("deployment.environment") +) + +// DeploymentEnvironment returns an attribute KeyValue conforming to the +// "deployment.environment" semantic conventions. It represents the name of the +// [deployment environment](https://wikipedia.org/wiki/Deployment_environment) +// (aka deployment tier). +func DeploymentEnvironment(val string) attribute.KeyValue { + return DeploymentEnvironmentKey.String(val) +} + +// Attributes that represents an occurrence of a lifecycle transition on the +// Android platform. +const ( + // AndroidStateKey is the attribute Key conforming to the "android.state" + // semantic conventions. It represents the deprecated use the + // `device.app.lifecycle` event definition including `android.state` as a + // payload field instead. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: The Android lifecycle states are defined in [Activity lifecycle + // callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc), + // and from which the `OS identifiers` are derived. + AndroidStateKey = attribute.Key("android.state") +) + +var ( + // Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time + AndroidStateCreated = AndroidStateKey.String("created") + // Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state + AndroidStateBackground = AndroidStateKey.String("background") + // Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states + AndroidStateForeground = AndroidStateKey.String("foreground") +) + +// These attributes may be used to describe the receiver of a network +// exchange/packet. These should be used when there is no client/server +// relationship between the two sides, or when that relationship is unknown. +// This covers low-level network interactions (e.g. packet tracing) where you +// don't know if there was a connection or which side initiated it. This also +// covers unidirectional UDP flows and peer-to-peer communication where the +// "user-facing" surface of the protocol / API doesn't expose a clear notion of +// client and server. +const ( + // DestinationAddressKey is the attribute Key conforming to the + // "destination.address" semantic conventions. It represents the + // destination address - domain name if available without reverse DNS + // lookup; otherwise, IP address or Unix domain socket name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'destination.example.com', '10.1.2.80', '/tmp/my.sock' + // Note: When observed from the source side, and when communicating through + // an intermediary, `destination.address` SHOULD represent the destination + // address behind any intermediaries, for example proxies, if it's + // available. + DestinationAddressKey = attribute.Key("destination.address") + + // DestinationPortKey is the attribute Key conforming to the + // "destination.port" semantic conventions. It represents the destination + // port number + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 3389, 2888 + DestinationPortKey = attribute.Key("destination.port") +) + +// DestinationAddress returns an attribute KeyValue conforming to the +// "destination.address" semantic conventions. It represents the destination +// address - domain name if available without reverse DNS lookup; otherwise, IP +// address or Unix domain socket name. +func DestinationAddress(val string) attribute.KeyValue { + return DestinationAddressKey.String(val) +} + +// DestinationPort returns an attribute KeyValue conforming to the +// "destination.port" semantic conventions. It represents the destination port +// number +func DestinationPort(val int) attribute.KeyValue { + return DestinationPortKey.Int(val) +} + +// Describes device attributes. +const ( + // DeviceIDKey is the attribute Key conforming to the "device.id" semantic + // conventions. It represents a unique identifier representing the device + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092' + // Note: The device identifier MUST only be defined using the values + // outlined below. This value is not an advertising identifier and MUST NOT + // be used as such. On iOS (Swift or Objective-C), this value MUST be equal + // to the [vendor + // identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). + // On Android (Java or Kotlin), this value MUST be equal to the Firebase + // Installation ID or a globally unique UUID which is persisted across + // sessions in your application. More information can be found + // [here](https://developer.android.com/training/articles/user-data-ids) on + // best practices and exact implementation details. Caution should be taken + // when storing personal data or anything which can identify a user. GDPR + // and data protection laws may apply, ensure you do your own due + // diligence. + DeviceIDKey = attribute.Key("device.id") + + // DeviceManufacturerKey is the attribute Key conforming to the + // "device.manufacturer" semantic conventions. It represents the name of + // the device manufacturer + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Apple', 'Samsung' + // Note: The Android OS provides this field via + // [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER). + // iOS apps SHOULD hardcode the value `Apple`. + DeviceManufacturerKey = attribute.Key("device.manufacturer") + + // DeviceModelIdentifierKey is the attribute Key conforming to the + // "device.model.identifier" semantic conventions. It represents the model + // identifier for the device + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'iPhone3,4', 'SM-G920F' + // Note: It's recommended this value represents a machine-readable version + // of the model identifier rather than the market or consumer-friendly name + // of the device. + DeviceModelIdentifierKey = attribute.Key("device.model.identifier") + + // DeviceModelNameKey is the attribute Key conforming to the + // "device.model.name" semantic conventions. It represents the marketing + // name for the device model + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6' + // Note: It's recommended this value represents a human-readable version of + // the device model rather than a machine-readable alternative. + DeviceModelNameKey = attribute.Key("device.model.name") +) + +// DeviceID returns an attribute KeyValue conforming to the "device.id" +// semantic conventions. It represents a unique identifier representing the +// device +func DeviceID(val string) attribute.KeyValue { + return DeviceIDKey.String(val) +} + +// DeviceManufacturer returns an attribute KeyValue conforming to the +// "device.manufacturer" semantic conventions. It represents the name of the +// device manufacturer +func DeviceManufacturer(val string) attribute.KeyValue { + return DeviceManufacturerKey.String(val) +} + +// DeviceModelIdentifier returns an attribute KeyValue conforming to the +// "device.model.identifier" semantic conventions. It represents the model +// identifier for the device +func DeviceModelIdentifier(val string) attribute.KeyValue { + return DeviceModelIdentifierKey.String(val) +} + +// DeviceModelName returns an attribute KeyValue conforming to the +// "device.model.name" semantic conventions. It represents the marketing name +// for the device model +func DeviceModelName(val string) attribute.KeyValue { + return DeviceModelNameKey.String(val) +} + +// These attributes may be used for any disk related operation. +const ( + // DiskIoDirectionKey is the attribute Key conforming to the + // "disk.io.direction" semantic conventions. It represents the disk IO + // operation direction. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'read' + DiskIoDirectionKey = attribute.Key("disk.io.direction") +) + +var ( + // read + DiskIoDirectionRead = DiskIoDirectionKey.String("read") + // write + DiskIoDirectionWrite = DiskIoDirectionKey.String("write") +) + +// The shared attributes used to report a DNS query. +const ( + // DNSQuestionNameKey is the attribute Key conforming to the + // "dns.question.name" semantic conventions. It represents the name being + // queried. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'www.example.com', 'opentelemetry.io' + // Note: If the name field contains non-printable characters (below 32 or + // above 126), those characters should be represented as escaped base 10 + // integers (\DDD). Back slashes and quotes should be escaped. Tabs, + // carriage returns, and line feeds should be converted to \t, \r, and \n + // respectively. + DNSQuestionNameKey = attribute.Key("dns.question.name") +) + +// DNSQuestionName returns an attribute KeyValue conforming to the +// "dns.question.name" semantic conventions. It represents the name being +// queried. +func DNSQuestionName(val string) attribute.KeyValue { + return DNSQuestionNameKey.String(val) +} + +// Attributes for operations with an authenticated and/or authorized enduser. +const ( + // EnduserIDKey is the attribute Key conforming to the "enduser.id" + // semantic conventions. It represents the username or client_id extracted + // from the access token or + // [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header + // in the inbound request from outside the system. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'username' + EnduserIDKey = attribute.Key("enduser.id") + + // EnduserRoleKey is the attribute Key conforming to the "enduser.role" + // semantic conventions. It represents the actual/assumed role the client + // is making the request under extracted from token or application security + // context. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'admin' + EnduserRoleKey = attribute.Key("enduser.role") + + // EnduserScopeKey is the attribute Key conforming to the "enduser.scope" + // semantic conventions. It represents the scopes or granted authorities + // the client currently possesses extracted from token or application + // security context. The value would come from the scope associated with an + // [OAuth 2.0 Access + // Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute + // value in a [SAML 2.0 + // Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'read:message, write:files' + EnduserScopeKey = attribute.Key("enduser.scope") +) + +// EnduserID returns an attribute KeyValue conforming to the "enduser.id" +// semantic conventions. It represents the username or client_id extracted from +// the access token or +// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in +// the inbound request from outside the system. +func EnduserID(val string) attribute.KeyValue { + return EnduserIDKey.String(val) +} + +// EnduserRole returns an attribute KeyValue conforming to the +// "enduser.role" semantic conventions. It represents the actual/assumed role +// the client is making the request under extracted from token or application +// security context. +func EnduserRole(val string) attribute.KeyValue { + return EnduserRoleKey.String(val) +} + +// EnduserScope returns an attribute KeyValue conforming to the +// "enduser.scope" semantic conventions. It represents the scopes or granted +// authorities the client currently possesses extracted from token or +// application security context. The value would come from the scope associated +// with an [OAuth 2.0 Access +// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute +// value in a [SAML 2.0 +// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). +func EnduserScope(val string) attribute.KeyValue { + return EnduserScopeKey.String(val) +} + +// The shared attributes used to report an error. +const ( + // ErrorTypeKey is the attribute Key conforming to the "error.type" + // semantic conventions. It represents the describes a class of error the + // operation ended with. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'timeout', 'java.net.UnknownHostException', + // 'server_certificate_invalid', '500' + // Note: The `error.type` SHOULD be predictable, and SHOULD have low + // cardinality. + // + // When `error.type` is set to a type (e.g., an exception type), its + // canonical class name identifying the type within the artifact SHOULD be + // used. + // + // Instrumentations SHOULD document the list of errors they report. + // + // The cardinality of `error.type` within one instrumentation library + // SHOULD be low. + // Telemetry consumers that aggregate data from multiple instrumentation + // libraries and applications + // should be prepared for `error.type` to have high cardinality at query + // time when no + // additional filters are applied. + // + // If the operation has completed successfully, instrumentations SHOULD NOT + // set `error.type`. + // + // If a specific domain defines its own set of error identifiers (such as + // HTTP or gRPC status codes), + // it's RECOMMENDED to: + // + // * Use a domain-specific attribute + // * Set `error.type` to capture all errors, regardless of whether they are + // defined within the domain-specific set or not. + ErrorTypeKey = attribute.Key("error.type") +) + +var ( + // A fallback error value to be used when the instrumentation doesn't define a custom value + ErrorTypeOther = ErrorTypeKey.String("_OTHER") +) + +// Attributes for Events represented using Log Records. +const ( + // EventNameKey is the attribute Key conforming to the "event.name" + // semantic conventions. It represents the identifies the class / type of + // event. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'browser.mouse.click', 'device.app.lifecycle' + // Note: Event names are subject to the same rules as [attribute + // names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.33.0/specification/common/attribute-naming.md). + // Notably, event names are namespaced to avoid collisions and provide a + // clean separation of semantics for events in separate domains like + // browser, mobile, and kubernetes. + EventNameKey = attribute.Key("event.name") +) + +// EventName returns an attribute KeyValue conforming to the "event.name" +// semantic conventions. It represents the identifies the class / type of +// event. +func EventName(val string) attribute.KeyValue { + return EventNameKey.String(val) +} + +// The shared attributes used to report a single exception associated with a +// span or log. +const ( + // ExceptionEscapedKey is the attribute Key conforming to the + // "exception.escaped" semantic conventions. It represents the sHOULD be + // set to true if the exception event is recorded at a point where it is + // known that the exception is escaping the scope of the span. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: stable + // Note: An exception is considered to have escaped (or left) the scope of + // a span, + // if that span is ended while the exception is still logically "in + // flight". + // This may be actually "in flight" in some languages (e.g. if the + // exception + // is passed to a Context manager's `__exit__` method in Python) but will + // usually be caught at the point of recording the exception in most + // languages. + // + // It is usually not possible to determine at the point where an exception + // is thrown + // whether it will escape the scope of a span. + // However, it is trivial to know that an exception + // will escape, if one checks for an active exception just before ending + // the span, + // as done in the [example for recording span + // exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception). + // + // It follows that an exception may still escape the scope of the span + // even if the `exception.escaped` attribute was not set or set to false, + // since the event might have been recorded at a time where it was not + // clear whether the exception will escape. + ExceptionEscapedKey = attribute.Key("exception.escaped") + + // ExceptionMessageKey is the attribute Key conforming to the + // "exception.message" semantic conventions. It represents the exception + // message. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'Division by zero', "Can't convert 'int' object to str + // implicitly" + ExceptionMessageKey = attribute.Key("exception.message") + + // ExceptionStacktraceKey is the attribute Key conforming to the + // "exception.stacktrace" semantic conventions. It represents a stacktrace + // as a string in the natural representation for the language runtime. The + // representation is to be determined and documented by each language SIG. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'Exception in thread "main" java.lang.RuntimeException: Test + // exception\\n at ' + // 'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' + // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' + // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' + ExceptionStacktraceKey = attribute.Key("exception.stacktrace") + + // ExceptionTypeKey is the attribute Key conforming to the "exception.type" + // semantic conventions. It represents the type of the exception (its + // fully-qualified class name, if applicable). The dynamic type of the + // exception should be preferred over the static type in languages that + // support it. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'java.net.ConnectException', 'OSError' + ExceptionTypeKey = attribute.Key("exception.type") +) + +// ExceptionEscaped returns an attribute KeyValue conforming to the +// "exception.escaped" semantic conventions. It represents the sHOULD be set to +// true if the exception event is recorded at a point where it is known that +// the exception is escaping the scope of the span. +func ExceptionEscaped(val bool) attribute.KeyValue { + return ExceptionEscapedKey.Bool(val) +} + +// ExceptionMessage returns an attribute KeyValue conforming to the +// "exception.message" semantic conventions. It represents the exception +// message. +func ExceptionMessage(val string) attribute.KeyValue { + return ExceptionMessageKey.String(val) +} + +// ExceptionStacktrace returns an attribute KeyValue conforming to the +// "exception.stacktrace" semantic conventions. It represents a stacktrace as a +// string in the natural representation for the language runtime. The +// representation is to be determined and documented by each language SIG. +func ExceptionStacktrace(val string) attribute.KeyValue { + return ExceptionStacktraceKey.String(val) +} + +// ExceptionType returns an attribute KeyValue conforming to the +// "exception.type" semantic conventions. It represents the type of the +// exception (its fully-qualified class name, if applicable). The dynamic type +// of the exception should be preferred over the static type in languages that +// support it. +func ExceptionType(val string) attribute.KeyValue { + return ExceptionTypeKey.String(val) +} + +// FaaS attributes +const ( + // FaaSColdstartKey is the attribute Key conforming to the "faas.coldstart" + // semantic conventions. It represents a boolean that is true if the + // serverless function is executed for the first time (aka cold-start). + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + FaaSColdstartKey = attribute.Key("faas.coldstart") + + // FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic + // conventions. It represents a string containing the schedule period as + // [Cron + // Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '0/5 * * * ? *' + FaaSCronKey = attribute.Key("faas.cron") + + // FaaSDocumentCollectionKey is the attribute Key conforming to the + // "faas.document.collection" semantic conventions. It represents the name + // of the source on which the triggering operation was performed. For + // example, in Cloud Storage or S3 corresponds to the bucket name, and in + // Cosmos DB to the database name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myBucketName', 'myDBName' + FaaSDocumentCollectionKey = attribute.Key("faas.document.collection") + + // FaaSDocumentNameKey is the attribute Key conforming to the + // "faas.document.name" semantic conventions. It represents the document + // name/table subjected to the operation. For example, in Cloud Storage or + // S3 is the name of the file, and in Cosmos DB the table name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myFile.txt', 'myTableName' + FaaSDocumentNameKey = attribute.Key("faas.document.name") + + // FaaSDocumentOperationKey is the attribute Key conforming to the + // "faas.document.operation" semantic conventions. It represents the + // describes the type of the operation that was performed on the data. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + FaaSDocumentOperationKey = attribute.Key("faas.document.operation") + + // FaaSDocumentTimeKey is the attribute Key conforming to the + // "faas.document.time" semantic conventions. It represents a string + // containing the time when the data was accessed in the [ISO + // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format + // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2020-01-23T13:47:06Z' + FaaSDocumentTimeKey = attribute.Key("faas.document.time") + + // FaaSInstanceKey is the attribute Key conforming to the "faas.instance" + // semantic conventions. It represents the execution environment ID as a + // string, that will be potentially reused for other invocations to the + // same function/function version. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de' + // Note: * **AWS Lambda:** Use the (full) log stream name. + FaaSInstanceKey = attribute.Key("faas.instance") + + // FaaSInvocationIDKey is the attribute Key conforming to the + // "faas.invocation_id" semantic conventions. It represents the invocation + // ID of the current function invocation. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' + FaaSInvocationIDKey = attribute.Key("faas.invocation_id") + + // FaaSInvokedNameKey is the attribute Key conforming to the + // "faas.invoked_name" semantic conventions. It represents the name of the + // invoked function. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'my-function' + // Note: SHOULD be equal to the `faas.name` resource attribute of the + // invoked function. + FaaSInvokedNameKey = attribute.Key("faas.invoked_name") + + // FaaSInvokedProviderKey is the attribute Key conforming to the + // "faas.invoked_provider" semantic conventions. It represents the cloud + // provider of the invoked function. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: SHOULD be equal to the `cloud.provider` resource attribute of the + // invoked function. + FaaSInvokedProviderKey = attribute.Key("faas.invoked_provider") + + // FaaSInvokedRegionKey is the attribute Key conforming to the + // "faas.invoked_region" semantic conventions. It represents the cloud + // region of the invoked function. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'eu-central-1' + // Note: SHOULD be equal to the `cloud.region` resource attribute of the + // invoked function. + FaaSInvokedRegionKey = attribute.Key("faas.invoked_region") + + // FaaSMaxMemoryKey is the attribute Key conforming to the + // "faas.max_memory" semantic conventions. It represents the amount of + // memory available to the serverless function converted to Bytes. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 134217728 + // Note: It's recommended to set this attribute since e.g. too little + // memory can easily stop a Java AWS Lambda function from working + // correctly. On AWS Lambda, the environment variable + // `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must + // be multiplied by 1,048,576). + FaaSMaxMemoryKey = attribute.Key("faas.max_memory") + + // FaaSNameKey is the attribute Key conforming to the "faas.name" semantic + // conventions. It represents the name of the single function that this + // runtime instance executes. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'my-function', 'myazurefunctionapp/some-function-name' + // Note: This is the name of the function as configured/deployed on the + // FaaS + // platform and is usually different from the name of the callback + // function (which may be stored in the + // [`code.namespace`/`code.function`](/docs/general/attributes.md#source-code-attributes) + // span attributes). + // + // For some cloud providers, the above definition is ambiguous. The + // following + // definition of function name MUST be used for this attribute + // (and consequently the span name) for the listed cloud + // providers/products: + // + // * **Azure:** The full name `/`, i.e., function app name + // followed by a forward slash followed by the function name (this form + // can also be seen in the resource JSON for the function). + // This means that a span attribute MUST be used, as an Azure function + // app can host multiple functions that would usually share + // a TracerProvider (see also the `cloud.resource_id` attribute). + FaaSNameKey = attribute.Key("faas.name") + + // FaaSTimeKey is the attribute Key conforming to the "faas.time" semantic + // conventions. It represents a string containing the function invocation + // time in the [ISO + // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format + // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2020-01-23T13:47:06Z' + FaaSTimeKey = attribute.Key("faas.time") + + // FaaSTriggerKey is the attribute Key conforming to the "faas.trigger" + // semantic conventions. It represents the type of the trigger which caused + // this function invocation. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + FaaSTriggerKey = attribute.Key("faas.trigger") + + // FaaSVersionKey is the attribute Key conforming to the "faas.version" + // semantic conventions. It represents the immutable version of the + // function being executed. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '26', 'pinkfroid-00002' + // Note: Depending on the cloud provider and platform, use: + // + // * **AWS Lambda:** The [function + // version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) + // (an integer represented as a decimal string). + // * **Google Cloud Run (Services):** The + // [revision](https://cloud.google.com/run/docs/managing/revisions) + // (i.e., the function name plus the revision suffix). + // * **Google Cloud Functions:** The value of the + // [`K_REVISION` environment + // variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically). + // * **Azure Functions:** Not applicable. Do not set this attribute. + FaaSVersionKey = attribute.Key("faas.version") +) + +var ( + // When a new object is created + FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert") + // When an object is modified + FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit") + // When an object is deleted + FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete") +) + +var ( + // Alibaba Cloud + FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud") + // Amazon Web Services + FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws") + // Microsoft Azure + FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure") + // Google Cloud Platform + FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp") + // Tencent Cloud + FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud") +) + +var ( + // A response to some data source operation such as a database or filesystem read/write + FaaSTriggerDatasource = FaaSTriggerKey.String("datasource") + // To provide an answer to an inbound HTTP request + FaaSTriggerHTTP = FaaSTriggerKey.String("http") + // A function is set to be executed when messages are sent to a messaging system + FaaSTriggerPubsub = FaaSTriggerKey.String("pubsub") + // A function is scheduled to be executed regularly + FaaSTriggerTimer = FaaSTriggerKey.String("timer") + // If none of the others apply + FaaSTriggerOther = FaaSTriggerKey.String("other") +) + +// FaaSColdstart returns an attribute KeyValue conforming to the +// "faas.coldstart" semantic conventions. It represents a boolean that is true +// if the serverless function is executed for the first time (aka cold-start). +func FaaSColdstart(val bool) attribute.KeyValue { + return FaaSColdstartKey.Bool(val) +} + +// FaaSCron returns an attribute KeyValue conforming to the "faas.cron" +// semantic conventions. It represents a string containing the schedule period +// as [Cron +// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). +func FaaSCron(val string) attribute.KeyValue { + return FaaSCronKey.String(val) +} + +// FaaSDocumentCollection returns an attribute KeyValue conforming to the +// "faas.document.collection" semantic conventions. It represents the name of +// the source on which the triggering operation was performed. For example, in +// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the +// database name. +func FaaSDocumentCollection(val string) attribute.KeyValue { + return FaaSDocumentCollectionKey.String(val) +} + +// FaaSDocumentName returns an attribute KeyValue conforming to the +// "faas.document.name" semantic conventions. It represents the document +// name/table subjected to the operation. For example, in Cloud Storage or S3 +// is the name of the file, and in Cosmos DB the table name. +func FaaSDocumentName(val string) attribute.KeyValue { + return FaaSDocumentNameKey.String(val) +} + +// FaaSDocumentTime returns an attribute KeyValue conforming to the +// "faas.document.time" semantic conventions. It represents a string containing +// the time when the data was accessed in the [ISO +// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format +// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). +func FaaSDocumentTime(val string) attribute.KeyValue { + return FaaSDocumentTimeKey.String(val) +} + +// FaaSInstance returns an attribute KeyValue conforming to the +// "faas.instance" semantic conventions. It represents the execution +// environment ID as a string, that will be potentially reused for other +// invocations to the same function/function version. +func FaaSInstance(val string) attribute.KeyValue { + return FaaSInstanceKey.String(val) +} + +// FaaSInvocationID returns an attribute KeyValue conforming to the +// "faas.invocation_id" semantic conventions. It represents the invocation ID +// of the current function invocation. +func FaaSInvocationID(val string) attribute.KeyValue { + return FaaSInvocationIDKey.String(val) +} + +// FaaSInvokedName returns an attribute KeyValue conforming to the +// "faas.invoked_name" semantic conventions. It represents the name of the +// invoked function. +func FaaSInvokedName(val string) attribute.KeyValue { + return FaaSInvokedNameKey.String(val) +} + +// FaaSInvokedRegion returns an attribute KeyValue conforming to the +// "faas.invoked_region" semantic conventions. It represents the cloud region +// of the invoked function. +func FaaSInvokedRegion(val string) attribute.KeyValue { + return FaaSInvokedRegionKey.String(val) +} + +// FaaSMaxMemory returns an attribute KeyValue conforming to the +// "faas.max_memory" semantic conventions. It represents the amount of memory +// available to the serverless function converted to Bytes. +func FaaSMaxMemory(val int) attribute.KeyValue { + return FaaSMaxMemoryKey.Int(val) +} + +// FaaSName returns an attribute KeyValue conforming to the "faas.name" +// semantic conventions. It represents the name of the single function that +// this runtime instance executes. +func FaaSName(val string) attribute.KeyValue { + return FaaSNameKey.String(val) +} + +// FaaSTime returns an attribute KeyValue conforming to the "faas.time" +// semantic conventions. It represents a string containing the function +// invocation time in the [ISO +// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format +// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). +func FaaSTime(val string) attribute.KeyValue { + return FaaSTimeKey.String(val) +} + +// FaaSVersion returns an attribute KeyValue conforming to the +// "faas.version" semantic conventions. It represents the immutable version of +// the function being executed. +func FaaSVersion(val string) attribute.KeyValue { + return FaaSVersionKey.String(val) +} + +// Attributes for Feature Flags. +const ( + // FeatureFlagKeyKey is the attribute Key conforming to the + // "feature_flag.key" semantic conventions. It represents the unique + // identifier of the feature flag. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'logo-color' + FeatureFlagKeyKey = attribute.Key("feature_flag.key") + + // FeatureFlagProviderNameKey is the attribute Key conforming to the + // "feature_flag.provider_name" semantic conventions. It represents the + // name of the service provider that performs the flag evaluation. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Flag Manager' + FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name") + + // FeatureFlagVariantKey is the attribute Key conforming to the + // "feature_flag.variant" semantic conventions. It represents the sHOULD be + // a semantic identifier for a value. If one is unavailable, a stringified + // version of the value can be used. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'red', 'true', 'on' + // Note: A semantic identifier, commonly referred to as a variant, provides + // a means + // for referring to a value without including the value itself. This can + // provide additional context for understanding the meaning behind a value. + // For example, the variant `red` maybe be used for the value `#c05543`. + // + // A stringified version of the value can be used in situations where a + // semantic identifier is unavailable. String representation of the value + // should be determined by the implementer. + FeatureFlagVariantKey = attribute.Key("feature_flag.variant") +) + +// FeatureFlagKey returns an attribute KeyValue conforming to the +// "feature_flag.key" semantic conventions. It represents the unique identifier +// of the feature flag. +func FeatureFlagKey(val string) attribute.KeyValue { + return FeatureFlagKeyKey.String(val) +} + +// FeatureFlagProviderName returns an attribute KeyValue conforming to the +// "feature_flag.provider_name" semantic conventions. It represents the name of +// the service provider that performs the flag evaluation. +func FeatureFlagProviderName(val string) attribute.KeyValue { + return FeatureFlagProviderNameKey.String(val) +} + +// FeatureFlagVariant returns an attribute KeyValue conforming to the +// "feature_flag.variant" semantic conventions. It represents the sHOULD be a +// semantic identifier for a value. If one is unavailable, a stringified +// version of the value can be used. +func FeatureFlagVariant(val string) attribute.KeyValue { + return FeatureFlagVariantKey.String(val) +} + +// Describes file attributes. +const ( + // FileDirectoryKey is the attribute Key conforming to the "file.directory" + // semantic conventions. It represents the directory where the file is + // located. It should include the drive letter, when appropriate. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/home/user', 'C:\\Program Files\\MyApp' + FileDirectoryKey = attribute.Key("file.directory") + + // FileExtensionKey is the attribute Key conforming to the "file.extension" + // semantic conventions. It represents the file extension, excluding the + // leading dot. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'png', 'gz' + // Note: When the file name has multiple extensions (example.tar.gz), only + // the last one should be captured ("gz", not "tar.gz"). + FileExtensionKey = attribute.Key("file.extension") + + // FileNameKey is the attribute Key conforming to the "file.name" semantic + // conventions. It represents the name of the file including the extension, + // without the directory. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'example.png' + FileNameKey = attribute.Key("file.name") + + // FilePathKey is the attribute Key conforming to the "file.path" semantic + // conventions. It represents the full path to the file, including the file + // name. It should include the drive letter, when appropriate. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/home/alice/example.png', 'C:\\Program + // Files\\MyApp\\myapp.exe' + FilePathKey = attribute.Key("file.path") + + // FileSizeKey is the attribute Key conforming to the "file.size" semantic + // conventions. It represents the file size in bytes. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + FileSizeKey = attribute.Key("file.size") +) + +// FileDirectory returns an attribute KeyValue conforming to the +// "file.directory" semantic conventions. It represents the directory where the +// file is located. It should include the drive letter, when appropriate. +func FileDirectory(val string) attribute.KeyValue { + return FileDirectoryKey.String(val) +} + +// FileExtension returns an attribute KeyValue conforming to the +// "file.extension" semantic conventions. It represents the file extension, +// excluding the leading dot. +func FileExtension(val string) attribute.KeyValue { + return FileExtensionKey.String(val) +} + +// FileName returns an attribute KeyValue conforming to the "file.name" +// semantic conventions. It represents the name of the file including the +// extension, without the directory. +func FileName(val string) attribute.KeyValue { + return FileNameKey.String(val) +} + +// FilePath returns an attribute KeyValue conforming to the "file.path" +// semantic conventions. It represents the full path to the file, including the +// file name. It should include the drive letter, when appropriate. +func FilePath(val string) attribute.KeyValue { + return FilePathKey.String(val) +} + +// FileSize returns an attribute KeyValue conforming to the "file.size" +// semantic conventions. It represents the file size in bytes. +func FileSize(val int) attribute.KeyValue { + return FileSizeKey.Int(val) +} + +// Attributes for Google Cloud Run. +const ( + // GCPCloudRunJobExecutionKey is the attribute Key conforming to the + // "gcp.cloud_run.job.execution" semantic conventions. It represents the + // name of the Cloud Run + // [execution](https://cloud.google.com/run/docs/managing/job-executions) + // being run for the Job, as set by the + // [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) + // environment variable. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'job-name-xxxx', 'sample-job-mdw84' + GCPCloudRunJobExecutionKey = attribute.Key("gcp.cloud_run.job.execution") + + // GCPCloudRunJobTaskIndexKey is the attribute Key conforming to the + // "gcp.cloud_run.job.task_index" semantic conventions. It represents the + // index for a task within an execution as provided by the + // [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) + // environment variable. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 0, 1 + GCPCloudRunJobTaskIndexKey = attribute.Key("gcp.cloud_run.job.task_index") +) + +// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the +// "gcp.cloud_run.job.execution" semantic conventions. It represents the name +// of the Cloud Run +// [execution](https://cloud.google.com/run/docs/managing/job-executions) being +// run for the Job, as set by the +// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) +// environment variable. +func GCPCloudRunJobExecution(val string) attribute.KeyValue { + return GCPCloudRunJobExecutionKey.String(val) +} + +// GCPCloudRunJobTaskIndex returns an attribute KeyValue conforming to the +// "gcp.cloud_run.job.task_index" semantic conventions. It represents the index +// for a task within an execution as provided by the +// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) +// environment variable. +func GCPCloudRunJobTaskIndex(val int) attribute.KeyValue { + return GCPCloudRunJobTaskIndexKey.Int(val) +} + +// Attributes for Google Compute Engine (GCE). +const ( + // GCPGceInstanceHostnameKey is the attribute Key conforming to the + // "gcp.gce.instance.hostname" semantic conventions. It represents the + // hostname of a GCE instance. This is the full value of the default or + // [custom + // hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'my-host1234.example.com', + // 'sample-vm.us-west1-b.c.my-project.internal' + GCPGceInstanceHostnameKey = attribute.Key("gcp.gce.instance.hostname") + + // GCPGceInstanceNameKey is the attribute Key conforming to the + // "gcp.gce.instance.name" semantic conventions. It represents the instance + // name of a GCE instance. This is the value provided by `host.name`, the + // visible name of the instance in the Cloud Console UI, and the prefix for + // the default hostname of the instance as defined by the [default internal + // DNS + // name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'instance-1', 'my-vm-name' + GCPGceInstanceNameKey = attribute.Key("gcp.gce.instance.name") +) + +// GCPGceInstanceHostname returns an attribute KeyValue conforming to the +// "gcp.gce.instance.hostname" semantic conventions. It represents the hostname +// of a GCE instance. This is the full value of the default or [custom +// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm). +func GCPGceInstanceHostname(val string) attribute.KeyValue { + return GCPGceInstanceHostnameKey.String(val) +} + +// GCPGceInstanceName returns an attribute KeyValue conforming to the +// "gcp.gce.instance.name" semantic conventions. It represents the instance +// name of a GCE instance. This is the value provided by `host.name`, the +// visible name of the instance in the Cloud Console UI, and the prefix for the +// default hostname of the instance as defined by the [default internal DNS +// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names). +func GCPGceInstanceName(val string) attribute.KeyValue { + return GCPGceInstanceNameKey.String(val) +} + +// The attributes used to describe telemetry in the context of LLM (Large +// Language Models) requests and responses. +const ( + // GenAiCompletionKey is the attribute Key conforming to the + // "gen_ai.completion" semantic conventions. It represents the full + // response received from the LLM. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: "[{'role': 'assistant', 'content': 'The capital of France is + // Paris.'}]" + // Note: It's RECOMMENDED to format completions as JSON string matching + // [OpenAI messages + // format](https://platform.openai.com/docs/guides/text-generation) + GenAiCompletionKey = attribute.Key("gen_ai.completion") + + // GenAiPromptKey is the attribute Key conforming to the "gen_ai.prompt" + // semantic conventions. It represents the full prompt sent to an LLM. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: "[{'role': 'user', 'content': 'What is the capital of + // France?'}]" + // Note: It's RECOMMENDED to format prompts as JSON string matching [OpenAI + // messages + // format](https://platform.openai.com/docs/guides/text-generation) + GenAiPromptKey = attribute.Key("gen_ai.prompt") + + // GenAiRequestMaxTokensKey is the attribute Key conforming to the + // "gen_ai.request.max_tokens" semantic conventions. It represents the + // maximum number of tokens the LLM generates for a request. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 100 + GenAiRequestMaxTokensKey = attribute.Key("gen_ai.request.max_tokens") + + // GenAiRequestModelKey is the attribute Key conforming to the + // "gen_ai.request.model" semantic conventions. It represents the name of + // the LLM a request is being made to. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'gpt-4' + GenAiRequestModelKey = attribute.Key("gen_ai.request.model") + + // GenAiRequestTemperatureKey is the attribute Key conforming to the + // "gen_ai.request.temperature" semantic conventions. It represents the + // temperature setting for the LLM request. + // + // Type: double + // RequirementLevel: Optional + // Stability: experimental + // Examples: 0.0 + GenAiRequestTemperatureKey = attribute.Key("gen_ai.request.temperature") + + // GenAiRequestTopPKey is the attribute Key conforming to the + // "gen_ai.request.top_p" semantic conventions. It represents the top_p + // sampling setting for the LLM request. + // + // Type: double + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1.0 + GenAiRequestTopPKey = attribute.Key("gen_ai.request.top_p") + + // GenAiResponseFinishReasonsKey is the attribute Key conforming to the + // "gen_ai.response.finish_reasons" semantic conventions. It represents the + // array of reasons the model stopped generating tokens, corresponding to + // each generation received. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'stop' + GenAiResponseFinishReasonsKey = attribute.Key("gen_ai.response.finish_reasons") + + // GenAiResponseIDKey is the attribute Key conforming to the + // "gen_ai.response.id" semantic conventions. It represents the unique + // identifier for the completion. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'chatcmpl-123' + GenAiResponseIDKey = attribute.Key("gen_ai.response.id") + + // GenAiResponseModelKey is the attribute Key conforming to the + // "gen_ai.response.model" semantic conventions. It represents the name of + // the LLM a response was generated from. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'gpt-4-0613' + GenAiResponseModelKey = attribute.Key("gen_ai.response.model") + + // GenAiSystemKey is the attribute Key conforming to the "gen_ai.system" + // semantic conventions. It represents the Generative AI product as + // identified by the client instrumentation. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'openai' + // Note: The actual GenAI product may differ from the one identified by the + // client. For example, when using OpenAI client libraries to communicate + // with Mistral, the `gen_ai.system` is set to `openai` based on the + // instrumentation's best knowledge. + GenAiSystemKey = attribute.Key("gen_ai.system") + + // GenAiUsageCompletionTokensKey is the attribute Key conforming to the + // "gen_ai.usage.completion_tokens" semantic conventions. It represents the + // number of tokens used in the LLM response (completion). + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 180 + GenAiUsageCompletionTokensKey = attribute.Key("gen_ai.usage.completion_tokens") + + // GenAiUsagePromptTokensKey is the attribute Key conforming to the + // "gen_ai.usage.prompt_tokens" semantic conventions. It represents the + // number of tokens used in the LLM prompt. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 100 + GenAiUsagePromptTokensKey = attribute.Key("gen_ai.usage.prompt_tokens") +) + +var ( + // OpenAI + GenAiSystemOpenai = GenAiSystemKey.String("openai") +) + +// GenAiCompletion returns an attribute KeyValue conforming to the +// "gen_ai.completion" semantic conventions. It represents the full response +// received from the LLM. +func GenAiCompletion(val string) attribute.KeyValue { + return GenAiCompletionKey.String(val) +} + +// GenAiPrompt returns an attribute KeyValue conforming to the +// "gen_ai.prompt" semantic conventions. It represents the full prompt sent to +// an LLM. +func GenAiPrompt(val string) attribute.KeyValue { + return GenAiPromptKey.String(val) +} + +// GenAiRequestMaxTokens returns an attribute KeyValue conforming to the +// "gen_ai.request.max_tokens" semantic conventions. It represents the maximum +// number of tokens the LLM generates for a request. +func GenAiRequestMaxTokens(val int) attribute.KeyValue { + return GenAiRequestMaxTokensKey.Int(val) +} + +// GenAiRequestModel returns an attribute KeyValue conforming to the +// "gen_ai.request.model" semantic conventions. It represents the name of the +// LLM a request is being made to. +func GenAiRequestModel(val string) attribute.KeyValue { + return GenAiRequestModelKey.String(val) +} + +// GenAiRequestTemperature returns an attribute KeyValue conforming to the +// "gen_ai.request.temperature" semantic conventions. It represents the +// temperature setting for the LLM request. +func GenAiRequestTemperature(val float64) attribute.KeyValue { + return GenAiRequestTemperatureKey.Float64(val) +} + +// GenAiRequestTopP returns an attribute KeyValue conforming to the +// "gen_ai.request.top_p" semantic conventions. It represents the top_p +// sampling setting for the LLM request. +func GenAiRequestTopP(val float64) attribute.KeyValue { + return GenAiRequestTopPKey.Float64(val) +} + +// GenAiResponseFinishReasons returns an attribute KeyValue conforming to +// the "gen_ai.response.finish_reasons" semantic conventions. It represents the +// array of reasons the model stopped generating tokens, corresponding to each +// generation received. +func GenAiResponseFinishReasons(val ...string) attribute.KeyValue { + return GenAiResponseFinishReasonsKey.StringSlice(val) +} + +// GenAiResponseID returns an attribute KeyValue conforming to the +// "gen_ai.response.id" semantic conventions. It represents the unique +// identifier for the completion. +func GenAiResponseID(val string) attribute.KeyValue { + return GenAiResponseIDKey.String(val) +} + +// GenAiResponseModel returns an attribute KeyValue conforming to the +// "gen_ai.response.model" semantic conventions. It represents the name of the +// LLM a response was generated from. +func GenAiResponseModel(val string) attribute.KeyValue { + return GenAiResponseModelKey.String(val) +} + +// GenAiUsageCompletionTokens returns an attribute KeyValue conforming to +// the "gen_ai.usage.completion_tokens" semantic conventions. It represents the +// number of tokens used in the LLM response (completion). +func GenAiUsageCompletionTokens(val int) attribute.KeyValue { + return GenAiUsageCompletionTokensKey.Int(val) +} + +// GenAiUsagePromptTokens returns an attribute KeyValue conforming to the +// "gen_ai.usage.prompt_tokens" semantic conventions. It represents the number +// of tokens used in the LLM prompt. +func GenAiUsagePromptTokens(val int) attribute.KeyValue { + return GenAiUsagePromptTokensKey.Int(val) +} + +// Attributes for GraphQL. +const ( + // GraphqlDocumentKey is the attribute Key conforming to the + // "graphql.document" semantic conventions. It represents the GraphQL + // document being executed. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'query findBookByID { bookByID(id: ?) { name } }' + // Note: The value may be sanitized to exclude sensitive information. + GraphqlDocumentKey = attribute.Key("graphql.document") + + // GraphqlOperationNameKey is the attribute Key conforming to the + // "graphql.operation.name" semantic conventions. It represents the name of + // the operation being executed. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'findBookByID' + GraphqlOperationNameKey = attribute.Key("graphql.operation.name") + + // GraphqlOperationTypeKey is the attribute Key conforming to the + // "graphql.operation.type" semantic conventions. It represents the type of + // the operation being executed. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'query', 'mutation', 'subscription' + GraphqlOperationTypeKey = attribute.Key("graphql.operation.type") +) + +var ( + // GraphQL query + GraphqlOperationTypeQuery = GraphqlOperationTypeKey.String("query") + // GraphQL mutation + GraphqlOperationTypeMutation = GraphqlOperationTypeKey.String("mutation") + // GraphQL subscription + GraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String("subscription") +) + +// GraphqlDocument returns an attribute KeyValue conforming to the +// "graphql.document" semantic conventions. It represents the GraphQL document +// being executed. +func GraphqlDocument(val string) attribute.KeyValue { + return GraphqlDocumentKey.String(val) +} + +// GraphqlOperationName returns an attribute KeyValue conforming to the +// "graphql.operation.name" semantic conventions. It represents the name of the +// operation being executed. +func GraphqlOperationName(val string) attribute.KeyValue { + return GraphqlOperationNameKey.String(val) +} + +// Attributes for the Android platform on which the Android application is +// running. +const ( + // HerokuAppIDKey is the attribute Key conforming to the "heroku.app.id" + // semantic conventions. It represents the unique identifier for the + // application + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2daa2797-e42b-4624-9322-ec3f968df4da' + HerokuAppIDKey = attribute.Key("heroku.app.id") + + // HerokuReleaseCommitKey is the attribute Key conforming to the + // "heroku.release.commit" semantic conventions. It represents the commit + // hash for the current release + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'e6134959463efd8966b20e75b913cafe3f5ec' + HerokuReleaseCommitKey = attribute.Key("heroku.release.commit") + + // HerokuReleaseCreationTimestampKey is the attribute Key conforming to the + // "heroku.release.creation_timestamp" semantic conventions. It represents + // the time and date the release was created + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2022-10-23T18:00:42Z' + HerokuReleaseCreationTimestampKey = attribute.Key("heroku.release.creation_timestamp") +) + +// HerokuAppID returns an attribute KeyValue conforming to the +// "heroku.app.id" semantic conventions. It represents the unique identifier +// for the application +func HerokuAppID(val string) attribute.KeyValue { + return HerokuAppIDKey.String(val) +} + +// HerokuReleaseCommit returns an attribute KeyValue conforming to the +// "heroku.release.commit" semantic conventions. It represents the commit hash +// for the current release +func HerokuReleaseCommit(val string) attribute.KeyValue { + return HerokuReleaseCommitKey.String(val) +} + +// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming +// to the "heroku.release.creation_timestamp" semantic conventions. It +// represents the time and date the release was created +func HerokuReleaseCreationTimestamp(val string) attribute.KeyValue { + return HerokuReleaseCreationTimestampKey.String(val) +} + +// A host is defined as a computing instance. For example, physical servers, +// virtual machines, switches or disk array. +const ( + // HostArchKey is the attribute Key conforming to the "host.arch" semantic + // conventions. It represents the CPU architecture the host system is + // running on. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + HostArchKey = attribute.Key("host.arch") + + // HostCPUCacheL2SizeKey is the attribute Key conforming to the + // "host.cpu.cache.l2.size" semantic conventions. It represents the amount + // of level 2 memory cache available to the processor (in Bytes). + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 12288000 + HostCPUCacheL2SizeKey = attribute.Key("host.cpu.cache.l2.size") + + // HostCPUFamilyKey is the attribute Key conforming to the + // "host.cpu.family" semantic conventions. It represents the family or + // generation of the CPU. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '6', 'PA-RISC 1.1e' + HostCPUFamilyKey = attribute.Key("host.cpu.family") + + // HostCPUModelIDKey is the attribute Key conforming to the + // "host.cpu.model.id" semantic conventions. It represents the model + // identifier. It provides more granular information about the CPU, + // distinguishing it from other CPUs within the same family. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '6', '9000/778/B180L' + HostCPUModelIDKey = attribute.Key("host.cpu.model.id") + + // HostCPUModelNameKey is the attribute Key conforming to the + // "host.cpu.model.name" semantic conventions. It represents the model + // designation of the processor. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz' + HostCPUModelNameKey = attribute.Key("host.cpu.model.name") + + // HostCPUSteppingKey is the attribute Key conforming to the + // "host.cpu.stepping" semantic conventions. It represents the stepping or + // core revisions. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1', 'r1p1' + HostCPUSteppingKey = attribute.Key("host.cpu.stepping") + + // HostCPUVendorIDKey is the attribute Key conforming to the + // "host.cpu.vendor.id" semantic conventions. It represents the processor + // manufacturer identifier. A maximum 12-character string. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'GenuineIntel' + // Note: [CPUID](https://wiki.osdev.org/CPUID) command returns the vendor + // ID string in EBX, EDX and ECX registers. Writing these to memory in this + // order results in a 12-character string. + HostCPUVendorIDKey = attribute.Key("host.cpu.vendor.id") + + // HostIDKey is the attribute Key conforming to the "host.id" semantic + // conventions. It represents the unique host ID. For Cloud, this must be + // the instance_id assigned by the cloud provider. For non-containerized + // systems, this should be the `machine-id`. See the table below for the + // sources to use to determine the `machine-id` based on operating system. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'fdbf79e8af94cb7f9e8df36789187052' + HostIDKey = attribute.Key("host.id") + + // HostImageIDKey is the attribute Key conforming to the "host.image.id" + // semantic conventions. It represents the vM image ID or host OS image ID. + // For Cloud, this value is from the provider. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'ami-07b06b442921831e5' + HostImageIDKey = attribute.Key("host.image.id") + + // HostImageNameKey is the attribute Key conforming to the + // "host.image.name" semantic conventions. It represents the name of the VM + // image or OS install the host was instantiated from. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905' + HostImageNameKey = attribute.Key("host.image.name") + + // HostImageVersionKey is the attribute Key conforming to the + // "host.image.version" semantic conventions. It represents the version + // string of the VM image or host OS as defined in [Version + // Attributes](/docs/resource/README.md#version-attributes). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '0.1' + HostImageVersionKey = attribute.Key("host.image.version") + + // HostIPKey is the attribute Key conforming to the "host.ip" semantic + // conventions. It represents the available IP addresses of the host, + // excluding loopback interfaces. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '192.168.1.140', 'fe80::abc2:4a28:737a:609e' + // Note: IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 + // addresses MUST be specified in the [RFC + // 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format. + HostIPKey = attribute.Key("host.ip") + + // HostMacKey is the attribute Key conforming to the "host.mac" semantic + // conventions. It represents the available MAC addresses of the host, + // excluding loopback interfaces. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'AC-DE-48-23-45-67', 'AC-DE-48-23-45-67-01-9F' + // Note: MAC Addresses MUST be represented in [IEEE RA hexadecimal + // form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): + // as hyphen-separated octets in uppercase hexadecimal form from most to + // least significant. + HostMacKey = attribute.Key("host.mac") + + // HostNameKey is the attribute Key conforming to the "host.name" semantic + // conventions. It represents the name of the host. On Unix systems, it may + // contain what the hostname command returns, or the fully qualified + // hostname, or another name specified by the user. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry-test' + HostNameKey = attribute.Key("host.name") + + // HostTypeKey is the attribute Key conforming to the "host.type" semantic + // conventions. It represents the type of host. For Cloud, this must be the + // machine type. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'n1-standard-1' + HostTypeKey = attribute.Key("host.type") +) + +var ( + // AMD64 + HostArchAMD64 = HostArchKey.String("amd64") + // ARM32 + HostArchARM32 = HostArchKey.String("arm32") + // ARM64 + HostArchARM64 = HostArchKey.String("arm64") + // Itanium + HostArchIA64 = HostArchKey.String("ia64") + // 32-bit PowerPC + HostArchPPC32 = HostArchKey.String("ppc32") + // 64-bit PowerPC + HostArchPPC64 = HostArchKey.String("ppc64") + // IBM z/Architecture + HostArchS390x = HostArchKey.String("s390x") + // 32-bit x86 + HostArchX86 = HostArchKey.String("x86") +) + +// HostCPUCacheL2Size returns an attribute KeyValue conforming to the +// "host.cpu.cache.l2.size" semantic conventions. It represents the amount of +// level 2 memory cache available to the processor (in Bytes). +func HostCPUCacheL2Size(val int) attribute.KeyValue { + return HostCPUCacheL2SizeKey.Int(val) +} + +// HostCPUFamily returns an attribute KeyValue conforming to the +// "host.cpu.family" semantic conventions. It represents the family or +// generation of the CPU. +func HostCPUFamily(val string) attribute.KeyValue { + return HostCPUFamilyKey.String(val) +} + +// HostCPUModelID returns an attribute KeyValue conforming to the +// "host.cpu.model.id" semantic conventions. It represents the model +// identifier. It provides more granular information about the CPU, +// distinguishing it from other CPUs within the same family. +func HostCPUModelID(val string) attribute.KeyValue { + return HostCPUModelIDKey.String(val) +} + +// HostCPUModelName returns an attribute KeyValue conforming to the +// "host.cpu.model.name" semantic conventions. It represents the model +// designation of the processor. +func HostCPUModelName(val string) attribute.KeyValue { + return HostCPUModelNameKey.String(val) +} + +// HostCPUStepping returns an attribute KeyValue conforming to the +// "host.cpu.stepping" semantic conventions. It represents the stepping or core +// revisions. +func HostCPUStepping(val string) attribute.KeyValue { + return HostCPUSteppingKey.String(val) +} + +// HostCPUVendorID returns an attribute KeyValue conforming to the +// "host.cpu.vendor.id" semantic conventions. It represents the processor +// manufacturer identifier. A maximum 12-character string. +func HostCPUVendorID(val string) attribute.KeyValue { + return HostCPUVendorIDKey.String(val) +} + +// HostID returns an attribute KeyValue conforming to the "host.id" semantic +// conventions. It represents the unique host ID. For Cloud, this must be the +// instance_id assigned by the cloud provider. For non-containerized systems, +// this should be the `machine-id`. See the table below for the sources to use +// to determine the `machine-id` based on operating system. +func HostID(val string) attribute.KeyValue { + return HostIDKey.String(val) +} + +// HostImageID returns an attribute KeyValue conforming to the +// "host.image.id" semantic conventions. It represents the vM image ID or host +// OS image ID. For Cloud, this value is from the provider. +func HostImageID(val string) attribute.KeyValue { + return HostImageIDKey.String(val) +} + +// HostImageName returns an attribute KeyValue conforming to the +// "host.image.name" semantic conventions. It represents the name of the VM +// image or OS install the host was instantiated from. +func HostImageName(val string) attribute.KeyValue { + return HostImageNameKey.String(val) +} + +// HostImageVersion returns an attribute KeyValue conforming to the +// "host.image.version" semantic conventions. It represents the version string +// of the VM image or host OS as defined in [Version +// Attributes](/docs/resource/README.md#version-attributes). +func HostImageVersion(val string) attribute.KeyValue { + return HostImageVersionKey.String(val) +} + +// HostIP returns an attribute KeyValue conforming to the "host.ip" semantic +// conventions. It represents the available IP addresses of the host, excluding +// loopback interfaces. +func HostIP(val ...string) attribute.KeyValue { + return HostIPKey.StringSlice(val) +} + +// HostMac returns an attribute KeyValue conforming to the "host.mac" +// semantic conventions. It represents the available MAC addresses of the host, +// excluding loopback interfaces. +func HostMac(val ...string) attribute.KeyValue { + return HostMacKey.StringSlice(val) +} + +// HostName returns an attribute KeyValue conforming to the "host.name" +// semantic conventions. It represents the name of the host. On Unix systems, +// it may contain what the hostname command returns, or the fully qualified +// hostname, or another name specified by the user. +func HostName(val string) attribute.KeyValue { + return HostNameKey.String(val) +} + +// HostType returns an attribute KeyValue conforming to the "host.type" +// semantic conventions. It represents the type of host. For Cloud, this must +// be the machine type. +func HostType(val string) attribute.KeyValue { + return HostTypeKey.String(val) +} + +// Semantic convention attributes in the HTTP namespace. +const ( + // HTTPConnectionStateKey is the attribute Key conforming to the + // "http.connection.state" semantic conventions. It represents the state of + // the HTTP connection in the HTTP connection pool. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'active', 'idle' + HTTPConnectionStateKey = attribute.Key("http.connection.state") + + // HTTPRequestBodySizeKey is the attribute Key conforming to the + // "http.request.body.size" semantic conventions. It represents the size of + // the request payload body in bytes. This is the number of bytes + // transferred excluding headers and is often, but not always, present as + // the + // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) + // header. For requests using transport encoding, this should be the + // compressed size. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 3495 + HTTPRequestBodySizeKey = attribute.Key("http.request.body.size") + + // HTTPRequestMethodKey is the attribute Key conforming to the + // "http.request.method" semantic conventions. It represents the hTTP + // request method. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'GET', 'POST', 'HEAD' + // Note: HTTP request method value SHOULD be "known" to the + // instrumentation. + // By default, this convention defines "known" methods as the ones listed + // in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods) + // and the PATCH method defined in + // [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html). + // + // If the HTTP request method is not known to instrumentation, it MUST set + // the `http.request.method` attribute to `_OTHER`. + // + // If the HTTP instrumentation could end up converting valid HTTP request + // methods to `_OTHER`, then it MUST provide a way to override + // the list of known HTTP methods. If this override is done via environment + // variable, then the environment variable MUST be named + // OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated + // list of case-sensitive known HTTP methods + // (this list MUST be a full override of the default known method, it is + // not a list of known methods in addition to the defaults). + // + // HTTP method names are case-sensitive and `http.request.method` attribute + // value MUST match a known HTTP method name exactly. + // Instrumentations for specific web frameworks that consider HTTP methods + // to be case insensitive, SHOULD populate a canonical equivalent. + // Tracing instrumentations that do so, MUST also set + // `http.request.method_original` to the original value. + HTTPRequestMethodKey = attribute.Key("http.request.method") + + // HTTPRequestMethodOriginalKey is the attribute Key conforming to the + // "http.request.method_original" semantic conventions. It represents the + // original HTTP method sent by the client in the request line. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'GeT', 'ACL', 'foo' + HTTPRequestMethodOriginalKey = attribute.Key("http.request.method_original") + + // HTTPRequestResendCountKey is the attribute Key conforming to the + // "http.request.resend_count" semantic conventions. It represents the + // ordinal number of request resending attempt (for any reason, including + // redirects). + // + // Type: int + // RequirementLevel: Optional + // Stability: stable + // Examples: 3 + // Note: The resend count SHOULD be updated each time an HTTP request gets + // resent by the client, regardless of what was the cause of the resending + // (e.g. redirection, authorization failure, 503 Server Unavailable, + // network issues, or any other). + HTTPRequestResendCountKey = attribute.Key("http.request.resend_count") + + // HTTPRequestSizeKey is the attribute Key conforming to the + // "http.request.size" semantic conventions. It represents the total size + // of the request in bytes. This should be the total number of bytes sent + // over the wire, including the request line (HTTP/1.1), framing (HTTP/2 + // and HTTP/3), headers, and request body if any. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1437 + HTTPRequestSizeKey = attribute.Key("http.request.size") + + // HTTPResponseBodySizeKey is the attribute Key conforming to the + // "http.response.body.size" semantic conventions. It represents the size + // of the response payload body in bytes. This is the number of bytes + // transferred excluding headers and is often, but not always, present as + // the + // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) + // header. For requests using transport encoding, this should be the + // compressed size. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 3495 + HTTPResponseBodySizeKey = attribute.Key("http.response.body.size") + + // HTTPResponseSizeKey is the attribute Key conforming to the + // "http.response.size" semantic conventions. It represents the total size + // of the response in bytes. This should be the total number of bytes sent + // over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and + // HTTP/3), headers, and response body and trailers if any. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1437 + HTTPResponseSizeKey = attribute.Key("http.response.size") + + // HTTPResponseStatusCodeKey is the attribute Key conforming to the + // "http.response.status_code" semantic conventions. It represents the + // [HTTP response status + // code](https://tools.ietf.org/html/rfc7231#section-6). + // + // Type: int + // RequirementLevel: Optional + // Stability: stable + // Examples: 200 + HTTPResponseStatusCodeKey = attribute.Key("http.response.status_code") + + // HTTPRouteKey is the attribute Key conforming to the "http.route" + // semantic conventions. It represents the matched route, that is, the path + // template in the format used by the respective server framework. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '/users/:userID?', '{controller}/{action}/{id?}' + // Note: MUST NOT be populated when this is not supported by the HTTP + // server framework as the route attribute should have low-cardinality and + // the URI path can NOT substitute it. + // SHOULD include the [application + // root](/docs/http/http-spans.md#http-server-definitions) if there is one. + HTTPRouteKey = attribute.Key("http.route") +) + +var ( + // active state + HTTPConnectionStateActive = HTTPConnectionStateKey.String("active") + // idle state + HTTPConnectionStateIdle = HTTPConnectionStateKey.String("idle") +) + +var ( + // CONNECT method + HTTPRequestMethodConnect = HTTPRequestMethodKey.String("CONNECT") + // DELETE method + HTTPRequestMethodDelete = HTTPRequestMethodKey.String("DELETE") + // GET method + HTTPRequestMethodGet = HTTPRequestMethodKey.String("GET") + // HEAD method + HTTPRequestMethodHead = HTTPRequestMethodKey.String("HEAD") + // OPTIONS method + HTTPRequestMethodOptions = HTTPRequestMethodKey.String("OPTIONS") + // PATCH method + HTTPRequestMethodPatch = HTTPRequestMethodKey.String("PATCH") + // POST method + HTTPRequestMethodPost = HTTPRequestMethodKey.String("POST") + // PUT method + HTTPRequestMethodPut = HTTPRequestMethodKey.String("PUT") + // TRACE method + HTTPRequestMethodTrace = HTTPRequestMethodKey.String("TRACE") + // Any HTTP method that the instrumentation has no prior knowledge of + HTTPRequestMethodOther = HTTPRequestMethodKey.String("_OTHER") +) + +// HTTPRequestBodySize returns an attribute KeyValue conforming to the +// "http.request.body.size" semantic conventions. It represents the size of the +// request payload body in bytes. This is the number of bytes transferred +// excluding headers and is often, but not always, present as the +// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) +// header. For requests using transport encoding, this should be the compressed +// size. +func HTTPRequestBodySize(val int) attribute.KeyValue { + return HTTPRequestBodySizeKey.Int(val) +} + +// HTTPRequestMethodOriginal returns an attribute KeyValue conforming to the +// "http.request.method_original" semantic conventions. It represents the +// original HTTP method sent by the client in the request line. +func HTTPRequestMethodOriginal(val string) attribute.KeyValue { + return HTTPRequestMethodOriginalKey.String(val) +} + +// HTTPRequestResendCount returns an attribute KeyValue conforming to the +// "http.request.resend_count" semantic conventions. It represents the ordinal +// number of request resending attempt (for any reason, including redirects). +func HTTPRequestResendCount(val int) attribute.KeyValue { + return HTTPRequestResendCountKey.Int(val) +} + +// HTTPRequestSize returns an attribute KeyValue conforming to the +// "http.request.size" semantic conventions. It represents the total size of +// the request in bytes. This should be the total number of bytes sent over the +// wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), +// headers, and request body if any. +func HTTPRequestSize(val int) attribute.KeyValue { + return HTTPRequestSizeKey.Int(val) +} + +// HTTPResponseBodySize returns an attribute KeyValue conforming to the +// "http.response.body.size" semantic conventions. It represents the size of +// the response payload body in bytes. This is the number of bytes transferred +// excluding headers and is often, but not always, present as the +// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) +// header. For requests using transport encoding, this should be the compressed +// size. +func HTTPResponseBodySize(val int) attribute.KeyValue { + return HTTPResponseBodySizeKey.Int(val) +} + +// HTTPResponseSize returns an attribute KeyValue conforming to the +// "http.response.size" semantic conventions. It represents the total size of +// the response in bytes. This should be the total number of bytes sent over +// the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), +// headers, and response body and trailers if any. +func HTTPResponseSize(val int) attribute.KeyValue { + return HTTPResponseSizeKey.Int(val) +} + +// HTTPResponseStatusCode returns an attribute KeyValue conforming to the +// "http.response.status_code" semantic conventions. It represents the [HTTP +// response status code](https://tools.ietf.org/html/rfc7231#section-6). +func HTTPResponseStatusCode(val int) attribute.KeyValue { + return HTTPResponseStatusCodeKey.Int(val) +} + +// HTTPRoute returns an attribute KeyValue conforming to the "http.route" +// semantic conventions. It represents the matched route, that is, the path +// template in the format used by the respective server framework. +func HTTPRoute(val string) attribute.KeyValue { + return HTTPRouteKey.String(val) +} + +// Java Virtual machine related attributes. +const ( + // JvmBufferPoolNameKey is the attribute Key conforming to the + // "jvm.buffer.pool.name" semantic conventions. It represents the name of + // the buffer pool. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'mapped', 'direct' + // Note: Pool names are generally obtained via + // [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). + JvmBufferPoolNameKey = attribute.Key("jvm.buffer.pool.name") + + // JvmGcActionKey is the attribute Key conforming to the "jvm.gc.action" + // semantic conventions. It represents the name of the garbage collector + // action. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'end of minor GC', 'end of major GC' + // Note: Garbage collector action is generally obtained via + // [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()). + JvmGcActionKey = attribute.Key("jvm.gc.action") + + // JvmGcNameKey is the attribute Key conforming to the "jvm.gc.name" + // semantic conventions. It represents the name of the garbage collector. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'G1 Young Generation', 'G1 Old Generation' + // Note: Garbage collector name is generally obtained via + // [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()). + JvmGcNameKey = attribute.Key("jvm.gc.name") + + // JvmMemoryPoolNameKey is the attribute Key conforming to the + // "jvm.memory.pool.name" semantic conventions. It represents the name of + // the memory pool. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'G1 Old Gen', 'G1 Eden space', 'G1 Survivor Space' + // Note: Pool names are generally obtained via + // [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + JvmMemoryPoolNameKey = attribute.Key("jvm.memory.pool.name") + + // JvmMemoryTypeKey is the attribute Key conforming to the + // "jvm.memory.type" semantic conventions. It represents the type of + // memory. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'heap', 'non_heap' + JvmMemoryTypeKey = attribute.Key("jvm.memory.type") + + // JvmThreadDaemonKey is the attribute Key conforming to the + // "jvm.thread.daemon" semantic conventions. It represents the whether the + // thread is daemon or not. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: stable + JvmThreadDaemonKey = attribute.Key("jvm.thread.daemon") + + // JvmThreadStateKey is the attribute Key conforming to the + // "jvm.thread.state" semantic conventions. It represents the state of the + // thread. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'runnable', 'blocked' + JvmThreadStateKey = attribute.Key("jvm.thread.state") +) + +var ( + // Heap memory + JvmMemoryTypeHeap = JvmMemoryTypeKey.String("heap") + // Non-heap memory + JvmMemoryTypeNonHeap = JvmMemoryTypeKey.String("non_heap") +) + +var ( + // A thread that has not yet started is in this state + JvmThreadStateNew = JvmThreadStateKey.String("new") + // A thread executing in the Java virtual machine is in this state + JvmThreadStateRunnable = JvmThreadStateKey.String("runnable") + // A thread that is blocked waiting for a monitor lock is in this state + JvmThreadStateBlocked = JvmThreadStateKey.String("blocked") + // A thread that is waiting indefinitely for another thread to perform a particular action is in this state + JvmThreadStateWaiting = JvmThreadStateKey.String("waiting") + // A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state + JvmThreadStateTimedWaiting = JvmThreadStateKey.String("timed_waiting") + // A thread that has exited is in this state + JvmThreadStateTerminated = JvmThreadStateKey.String("terminated") +) + +// JvmBufferPoolName returns an attribute KeyValue conforming to the +// "jvm.buffer.pool.name" semantic conventions. It represents the name of the +// buffer pool. +func JvmBufferPoolName(val string) attribute.KeyValue { + return JvmBufferPoolNameKey.String(val) +} + +// JvmGcAction returns an attribute KeyValue conforming to the +// "jvm.gc.action" semantic conventions. It represents the name of the garbage +// collector action. +func JvmGcAction(val string) attribute.KeyValue { + return JvmGcActionKey.String(val) +} + +// JvmGcName returns an attribute KeyValue conforming to the "jvm.gc.name" +// semantic conventions. It represents the name of the garbage collector. +func JvmGcName(val string) attribute.KeyValue { + return JvmGcNameKey.String(val) +} + +// JvmMemoryPoolName returns an attribute KeyValue conforming to the +// "jvm.memory.pool.name" semantic conventions. It represents the name of the +// memory pool. +func JvmMemoryPoolName(val string) attribute.KeyValue { + return JvmMemoryPoolNameKey.String(val) +} + +// JvmThreadDaemon returns an attribute KeyValue conforming to the +// "jvm.thread.daemon" semantic conventions. It represents the whether the +// thread is daemon or not. +func JvmThreadDaemon(val bool) attribute.KeyValue { + return JvmThreadDaemonKey.Bool(val) +} + +// Kubernetes resource attributes. +const ( + // K8SClusterNameKey is the attribute Key conforming to the + // "k8s.cluster.name" semantic conventions. It represents the name of the + // cluster. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry-cluster' + K8SClusterNameKey = attribute.Key("k8s.cluster.name") + + // K8SClusterUIDKey is the attribute Key conforming to the + // "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for + // the cluster, set to the UID of the `kube-system` namespace. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '218fc5a9-a5f1-4b54-aa05-46717d0ab26d' + // Note: K8S doesn't have support for obtaining a cluster ID. If this is + // ever + // added, we will recommend collecting the `k8s.cluster.uid` through the + // official APIs. In the meantime, we are able to use the `uid` of the + // `kube-system` namespace as a proxy for cluster ID. Read on for the + // rationale. + // + // Every object created in a K8S cluster is assigned a distinct UID. The + // `kube-system` namespace is used by Kubernetes itself and will exist + // for the lifetime of the cluster. Using the `uid` of the `kube-system` + // namespace is a reasonable proxy for the K8S ClusterID as it will only + // change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are + // UUIDs as standardized by + // [ISO/IEC 9834-8 and ITU-T + // X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html). + // Which states: + // + // > If generated according to one of the mechanisms defined in Rec. + // ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be + // different from all other UUIDs generated before 3603 A.D., or is + // extremely likely to be different (depending on the mechanism chosen). + // + // Therefore, UIDs between clusters should be extremely unlikely to + // conflict. + K8SClusterUIDKey = attribute.Key("k8s.cluster.uid") + + // K8SContainerNameKey is the attribute Key conforming to the + // "k8s.container.name" semantic conventions. It represents the name of the + // Container from Pod specification, must be unique within a Pod. Container + // runtime usually uses different globally unique name (`container.name`). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'redis' + K8SContainerNameKey = attribute.Key("k8s.container.name") + + // K8SContainerRestartCountKey is the attribute Key conforming to the + // "k8s.container.restart_count" semantic conventions. It represents the + // number of times the container was restarted. This attribute can be used + // to identify a particular container (running or stopped) within a + // container spec. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count") + + // K8SContainerStatusLastTerminatedReasonKey is the attribute Key + // conforming to the "k8s.container.status.last_terminated_reason" semantic + // conventions. It represents the last terminated reason of the Container. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Evicted', 'Error' + K8SContainerStatusLastTerminatedReasonKey = attribute.Key("k8s.container.status.last_terminated_reason") + + // K8SCronJobNameKey is the attribute Key conforming to the + // "k8s.cronjob.name" semantic conventions. It represents the name of the + // CronJob. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry' + K8SCronJobNameKey = attribute.Key("k8s.cronjob.name") + + // K8SCronJobUIDKey is the attribute Key conforming to the + // "k8s.cronjob.uid" semantic conventions. It represents the UID of the + // CronJob. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid") + + // K8SDaemonSetNameKey is the attribute Key conforming to the + // "k8s.daemonset.name" semantic conventions. It represents the name of the + // DaemonSet. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry' + K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name") + + // K8SDaemonSetUIDKey is the attribute Key conforming to the + // "k8s.daemonset.uid" semantic conventions. It represents the UID of the + // DaemonSet. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid") + + // K8SDeploymentNameKey is the attribute Key conforming to the + // "k8s.deployment.name" semantic conventions. It represents the name of + // the Deployment. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry' + K8SDeploymentNameKey = attribute.Key("k8s.deployment.name") + + // K8SDeploymentUIDKey is the attribute Key conforming to the + // "k8s.deployment.uid" semantic conventions. It represents the UID of the + // Deployment. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid") + + // K8SJobNameKey is the attribute Key conforming to the "k8s.job.name" + // semantic conventions. It represents the name of the Job. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry' + K8SJobNameKey = attribute.Key("k8s.job.name") + + // K8SJobUIDKey is the attribute Key conforming to the "k8s.job.uid" + // semantic conventions. It represents the UID of the Job. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SJobUIDKey = attribute.Key("k8s.job.uid") + + // K8SNamespaceNameKey is the attribute Key conforming to the + // "k8s.namespace.name" semantic conventions. It represents the name of the + // namespace that the pod is running in. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'default' + K8SNamespaceNameKey = attribute.Key("k8s.namespace.name") + + // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name" + // semantic conventions. It represents the name of the Node. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'node-1' + K8SNodeNameKey = attribute.Key("k8s.node.name") + + // K8SNodeUIDKey is the attribute Key conforming to the "k8s.node.uid" + // semantic conventions. It represents the UID of the Node. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2' + K8SNodeUIDKey = attribute.Key("k8s.node.uid") + + // K8SPodNameKey is the attribute Key conforming to the "k8s.pod.name" + // semantic conventions. It represents the name of the Pod. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry-pod-autoconf' + K8SPodNameKey = attribute.Key("k8s.pod.name") + + // K8SPodUIDKey is the attribute Key conforming to the "k8s.pod.uid" + // semantic conventions. It represents the UID of the Pod. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SPodUIDKey = attribute.Key("k8s.pod.uid") + + // K8SReplicaSetNameKey is the attribute Key conforming to the + // "k8s.replicaset.name" semantic conventions. It represents the name of + // the ReplicaSet. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry' + K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name") + + // K8SReplicaSetUIDKey is the attribute Key conforming to the + // "k8s.replicaset.uid" semantic conventions. It represents the UID of the + // ReplicaSet. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid") + + // K8SStatefulSetNameKey is the attribute Key conforming to the + // "k8s.statefulset.name" semantic conventions. It represents the name of + // the StatefulSet. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry' + K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name") + + // K8SStatefulSetUIDKey is the attribute Key conforming to the + // "k8s.statefulset.uid" semantic conventions. It represents the UID of the + // StatefulSet. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' + K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid") +) + +// K8SClusterName returns an attribute KeyValue conforming to the +// "k8s.cluster.name" semantic conventions. It represents the name of the +// cluster. +func K8SClusterName(val string) attribute.KeyValue { + return K8SClusterNameKey.String(val) +} + +// K8SClusterUID returns an attribute KeyValue conforming to the +// "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for the +// cluster, set to the UID of the `kube-system` namespace. +func K8SClusterUID(val string) attribute.KeyValue { + return K8SClusterUIDKey.String(val) +} + +// K8SContainerName returns an attribute KeyValue conforming to the +// "k8s.container.name" semantic conventions. It represents the name of the +// Container from Pod specification, must be unique within a Pod. Container +// runtime usually uses different globally unique name (`container.name`). +func K8SContainerName(val string) attribute.KeyValue { + return K8SContainerNameKey.String(val) +} + +// K8SContainerRestartCount returns an attribute KeyValue conforming to the +// "k8s.container.restart_count" semantic conventions. It represents the number +// of times the container was restarted. This attribute can be used to identify +// a particular container (running or stopped) within a container spec. +func K8SContainerRestartCount(val int) attribute.KeyValue { + return K8SContainerRestartCountKey.Int(val) +} + +// K8SContainerStatusLastTerminatedReason returns an attribute KeyValue +// conforming to the "k8s.container.status.last_terminated_reason" semantic +// conventions. It represents the last terminated reason of the Container. +func K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue { + return K8SContainerStatusLastTerminatedReasonKey.String(val) +} + +// K8SCronJobName returns an attribute KeyValue conforming to the +// "k8s.cronjob.name" semantic conventions. It represents the name of the +// CronJob. +func K8SCronJobName(val string) attribute.KeyValue { + return K8SCronJobNameKey.String(val) +} + +// K8SCronJobUID returns an attribute KeyValue conforming to the +// "k8s.cronjob.uid" semantic conventions. It represents the UID of the +// CronJob. +func K8SCronJobUID(val string) attribute.KeyValue { + return K8SCronJobUIDKey.String(val) +} + +// K8SDaemonSetName returns an attribute KeyValue conforming to the +// "k8s.daemonset.name" semantic conventions. It represents the name of the +// DaemonSet. +func K8SDaemonSetName(val string) attribute.KeyValue { + return K8SDaemonSetNameKey.String(val) +} + +// K8SDaemonSetUID returns an attribute KeyValue conforming to the +// "k8s.daemonset.uid" semantic conventions. It represents the UID of the +// DaemonSet. +func K8SDaemonSetUID(val string) attribute.KeyValue { + return K8SDaemonSetUIDKey.String(val) +} + +// K8SDeploymentName returns an attribute KeyValue conforming to the +// "k8s.deployment.name" semantic conventions. It represents the name of the +// Deployment. +func K8SDeploymentName(val string) attribute.KeyValue { + return K8SDeploymentNameKey.String(val) +} + +// K8SDeploymentUID returns an attribute KeyValue conforming to the +// "k8s.deployment.uid" semantic conventions. It represents the UID of the +// Deployment. +func K8SDeploymentUID(val string) attribute.KeyValue { + return K8SDeploymentUIDKey.String(val) +} + +// K8SJobName returns an attribute KeyValue conforming to the "k8s.job.name" +// semantic conventions. It represents the name of the Job. +func K8SJobName(val string) attribute.KeyValue { + return K8SJobNameKey.String(val) +} + +// K8SJobUID returns an attribute KeyValue conforming to the "k8s.job.uid" +// semantic conventions. It represents the UID of the Job. +func K8SJobUID(val string) attribute.KeyValue { + return K8SJobUIDKey.String(val) +} + +// K8SNamespaceName returns an attribute KeyValue conforming to the +// "k8s.namespace.name" semantic conventions. It represents the name of the +// namespace that the pod is running in. +func K8SNamespaceName(val string) attribute.KeyValue { + return K8SNamespaceNameKey.String(val) +} + +// K8SNodeName returns an attribute KeyValue conforming to the +// "k8s.node.name" semantic conventions. It represents the name of the Node. +func K8SNodeName(val string) attribute.KeyValue { + return K8SNodeNameKey.String(val) +} + +// K8SNodeUID returns an attribute KeyValue conforming to the "k8s.node.uid" +// semantic conventions. It represents the UID of the Node. +func K8SNodeUID(val string) attribute.KeyValue { + return K8SNodeUIDKey.String(val) +} + +// K8SPodName returns an attribute KeyValue conforming to the "k8s.pod.name" +// semantic conventions. It represents the name of the Pod. +func K8SPodName(val string) attribute.KeyValue { + return K8SPodNameKey.String(val) +} + +// K8SPodUID returns an attribute KeyValue conforming to the "k8s.pod.uid" +// semantic conventions. It represents the UID of the Pod. +func K8SPodUID(val string) attribute.KeyValue { + return K8SPodUIDKey.String(val) +} + +// K8SReplicaSetName returns an attribute KeyValue conforming to the +// "k8s.replicaset.name" semantic conventions. It represents the name of the +// ReplicaSet. +func K8SReplicaSetName(val string) attribute.KeyValue { + return K8SReplicaSetNameKey.String(val) +} + +// K8SReplicaSetUID returns an attribute KeyValue conforming to the +// "k8s.replicaset.uid" semantic conventions. It represents the UID of the +// ReplicaSet. +func K8SReplicaSetUID(val string) attribute.KeyValue { + return K8SReplicaSetUIDKey.String(val) +} + +// K8SStatefulSetName returns an attribute KeyValue conforming to the +// "k8s.statefulset.name" semantic conventions. It represents the name of the +// StatefulSet. +func K8SStatefulSetName(val string) attribute.KeyValue { + return K8SStatefulSetNameKey.String(val) +} + +// K8SStatefulSetUID returns an attribute KeyValue conforming to the +// "k8s.statefulset.uid" semantic conventions. It represents the UID of the +// StatefulSet. +func K8SStatefulSetUID(val string) attribute.KeyValue { + return K8SStatefulSetUIDKey.String(val) +} + +// Log attributes +const ( + // LogIostreamKey is the attribute Key conforming to the "log.iostream" + // semantic conventions. It represents the stream associated with the log. + // See below for a list of well-known values. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + LogIostreamKey = attribute.Key("log.iostream") +) + +var ( + // Logs from stdout stream + LogIostreamStdout = LogIostreamKey.String("stdout") + // Events from stderr stream + LogIostreamStderr = LogIostreamKey.String("stderr") +) + +// Attributes for a file to which log was emitted. +const ( + // LogFileNameKey is the attribute Key conforming to the "log.file.name" + // semantic conventions. It represents the basename of the file. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'audit.log' + LogFileNameKey = attribute.Key("log.file.name") + + // LogFileNameResolvedKey is the attribute Key conforming to the + // "log.file.name_resolved" semantic conventions. It represents the + // basename of the file, with symlinks resolved. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'uuid.log' + LogFileNameResolvedKey = attribute.Key("log.file.name_resolved") + + // LogFilePathKey is the attribute Key conforming to the "log.file.path" + // semantic conventions. It represents the full path to the file. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/var/log/mysql/audit.log' + LogFilePathKey = attribute.Key("log.file.path") + + // LogFilePathResolvedKey is the attribute Key conforming to the + // "log.file.path_resolved" semantic conventions. It represents the full + // path to the file, with symlinks resolved. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/var/lib/docker/uuid.log' + LogFilePathResolvedKey = attribute.Key("log.file.path_resolved") +) + +// LogFileName returns an attribute KeyValue conforming to the +// "log.file.name" semantic conventions. It represents the basename of the +// file. +func LogFileName(val string) attribute.KeyValue { + return LogFileNameKey.String(val) +} + +// LogFileNameResolved returns an attribute KeyValue conforming to the +// "log.file.name_resolved" semantic conventions. It represents the basename of +// the file, with symlinks resolved. +func LogFileNameResolved(val string) attribute.KeyValue { + return LogFileNameResolvedKey.String(val) +} + +// LogFilePath returns an attribute KeyValue conforming to the +// "log.file.path" semantic conventions. It represents the full path to the +// file. +func LogFilePath(val string) attribute.KeyValue { + return LogFilePathKey.String(val) +} + +// LogFilePathResolved returns an attribute KeyValue conforming to the +// "log.file.path_resolved" semantic conventions. It represents the full path +// to the file, with symlinks resolved. +func LogFilePathResolved(val string) attribute.KeyValue { + return LogFilePathResolvedKey.String(val) +} + +// The generic attributes that may be used in any Log Record. +const ( + // LogRecordUIDKey is the attribute Key conforming to the "log.record.uid" + // semantic conventions. It represents a unique identifier for the Log + // Record. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV' + // Note: If an id is provided, other log records with the same id will be + // considered duplicates and can be removed safely. This means, that two + // distinguishable log records MUST have different values. + // The id MAY be an [Universally Unique Lexicographically Sortable + // Identifier (ULID)](https://github.com/ulid/spec), but other identifiers + // (e.g. UUID) may be used as needed. + LogRecordUIDKey = attribute.Key("log.record.uid") +) + +// LogRecordUID returns an attribute KeyValue conforming to the +// "log.record.uid" semantic conventions. It represents a unique identifier for +// the Log Record. +func LogRecordUID(val string) attribute.KeyValue { + return LogRecordUIDKey.String(val) +} + +// Attributes describing telemetry around messaging systems and messaging +// activities. +const ( + // MessagingBatchMessageCountKey is the attribute Key conforming to the + // "messaging.batch.message_count" semantic conventions. It represents the + // number of messages sent, received, or processed in the scope of the + // batching operation. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 0, 1, 2 + // Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on + // spans that operate with a single message. When a messaging client + // library supports both batch and single-message API for the same + // operation, instrumentations SHOULD use `messaging.batch.message_count` + // for batching APIs and SHOULD NOT use it for single-message APIs. + MessagingBatchMessageCountKey = attribute.Key("messaging.batch.message_count") + + // MessagingClientIDKey is the attribute Key conforming to the + // "messaging.client.id" semantic conventions. It represents a unique + // identifier for the client that consumes or produces a message. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'client-5', 'myhost@8742@s8083jm' + MessagingClientIDKey = attribute.Key("messaging.client.id") + + // MessagingDestinationAnonymousKey is the attribute Key conforming to the + // "messaging.destination.anonymous" semantic conventions. It represents a + // boolean that is true if the message destination is anonymous (could be + // unnamed or have auto-generated name). + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + MessagingDestinationAnonymousKey = attribute.Key("messaging.destination.anonymous") + + // MessagingDestinationNameKey is the attribute Key conforming to the + // "messaging.destination.name" semantic conventions. It represents the + // message destination name + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MyQueue', 'MyTopic' + // Note: Destination name SHOULD uniquely identify a specific queue, topic + // or other entity within the broker. If + // the broker doesn't have such notion, the destination name SHOULD + // uniquely identify the broker. + MessagingDestinationNameKey = attribute.Key("messaging.destination.name") + + // MessagingDestinationPartitionIDKey is the attribute Key conforming to + // the "messaging.destination.partition.id" semantic conventions. It + // represents the identifier of the partition messages are sent to or + // received from, unique within the `messaging.destination.name`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1' + MessagingDestinationPartitionIDKey = attribute.Key("messaging.destination.partition.id") + + // MessagingDestinationTemplateKey is the attribute Key conforming to the + // "messaging.destination.template" semantic conventions. It represents the + // low cardinality representation of the messaging destination name + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/customers/{customerID}' + // Note: Destination names could be constructed from templates. An example + // would be a destination name involving a user name or product id. + // Although the destination name in this case is of high cardinality, the + // underlying template is of low cardinality and can be effectively used + // for grouping and aggregation. + MessagingDestinationTemplateKey = attribute.Key("messaging.destination.template") + + // MessagingDestinationTemporaryKey is the attribute Key conforming to the + // "messaging.destination.temporary" semantic conventions. It represents a + // boolean that is true if the message destination is temporary and might + // not exist anymore after messages are processed. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary") + + // MessagingDestinationPublishAnonymousKey is the attribute Key conforming + // to the "messaging.destination_publish.anonymous" semantic conventions. + // It represents a boolean that is true if the publish message destination + // is anonymous (could be unnamed or have auto-generated name). + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + MessagingDestinationPublishAnonymousKey = attribute.Key("messaging.destination_publish.anonymous") + + // MessagingDestinationPublishNameKey is the attribute Key conforming to + // the "messaging.destination_publish.name" semantic conventions. It + // represents the name of the original destination the message was + // published to + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MyQueue', 'MyTopic' + // Note: The name SHOULD uniquely identify a specific queue, topic, or + // other entity within the broker. If + // the broker doesn't have such notion, the original destination name + // SHOULD uniquely identify the broker. + MessagingDestinationPublishNameKey = attribute.Key("messaging.destination_publish.name") + + // MessagingMessageBodySizeKey is the attribute Key conforming to the + // "messaging.message.body.size" semantic conventions. It represents the + // size of the message body in bytes. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1439 + // Note: This can refer to both the compressed or uncompressed body size. + // If both sizes are known, the uncompressed + // body size should be used. + MessagingMessageBodySizeKey = attribute.Key("messaging.message.body.size") + + // MessagingMessageConversationIDKey is the attribute Key conforming to the + // "messaging.message.conversation_id" semantic conventions. It represents + // the conversation ID identifying the conversation to which the message + // belongs, represented as a string. Sometimes called "Correlation ID". + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MyConversationID' + MessagingMessageConversationIDKey = attribute.Key("messaging.message.conversation_id") + + // MessagingMessageEnvelopeSizeKey is the attribute Key conforming to the + // "messaging.message.envelope.size" semantic conventions. It represents + // the size of the message body and metadata in bytes. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 2738 + // Note: This can refer to both the compressed or uncompressed size. If + // both sizes are known, the uncompressed + // size should be used. + MessagingMessageEnvelopeSizeKey = attribute.Key("messaging.message.envelope.size") + + // MessagingMessageIDKey is the attribute Key conforming to the + // "messaging.message.id" semantic conventions. It represents a value used + // by the messaging system as an identifier for the message, represented as + // a string. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '452a7c7c7c7048c2f887f61572b18fc2' + MessagingMessageIDKey = attribute.Key("messaging.message.id") + + // MessagingOperationNameKey is the attribute Key conforming to the + // "messaging.operation.name" semantic conventions. It represents the + // system-specific name of the messaging operation. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'ack', 'nack', 'send' + MessagingOperationNameKey = attribute.Key("messaging.operation.name") + + // MessagingOperationTypeKey is the attribute Key conforming to the + // "messaging.operation.type" semantic conventions. It represents a string + // identifying the type of the messaging operation. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: If a custom value is used, it MUST be of low cardinality. + MessagingOperationTypeKey = attribute.Key("messaging.operation.type") + + // MessagingSystemKey is the attribute Key conforming to the + // "messaging.system" semantic conventions. It represents the messaging + // system as identified by the client instrumentation. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: The actual messaging system may differ from the one known by the + // client. For example, when using Kafka client libraries to communicate + // with Azure Event Hubs, the `messaging.system` is set to `kafka` based on + // the instrumentation's best knowledge. + MessagingSystemKey = attribute.Key("messaging.system") +) + +var ( + // One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the "Publish" span can be used as the creation context and no "Create" span needs to be created + MessagingOperationTypePublish = MessagingOperationTypeKey.String("publish") + // A message is created. "Create" spans always refer to a single message and are used to provide a unique creation context for messages in batch publishing scenarios + MessagingOperationTypeCreate = MessagingOperationTypeKey.String("create") + // One or more messages are requested by a consumer. This operation refers to pull-based scenarios, where consumers explicitly call methods of messaging SDKs to receive messages + MessagingOperationTypeReceive = MessagingOperationTypeKey.String("receive") + // One or more messages are delivered to or processed by a consumer + MessagingOperationTypeDeliver = MessagingOperationTypeKey.String("process") + // One or more messages are settled + MessagingOperationTypeSettle = MessagingOperationTypeKey.String("settle") +) + +var ( + // Apache ActiveMQ + MessagingSystemActivemq = MessagingSystemKey.String("activemq") + // Amazon Simple Queue Service (SQS) + MessagingSystemAWSSqs = MessagingSystemKey.String("aws_sqs") + // Azure Event Grid + MessagingSystemEventgrid = MessagingSystemKey.String("eventgrid") + // Azure Event Hubs + MessagingSystemEventhubs = MessagingSystemKey.String("eventhubs") + // Azure Service Bus + MessagingSystemServicebus = MessagingSystemKey.String("servicebus") + // Google Cloud Pub/Sub + MessagingSystemGCPPubsub = MessagingSystemKey.String("gcp_pubsub") + // Java Message Service + MessagingSystemJms = MessagingSystemKey.String("jms") + // Apache Kafka + MessagingSystemKafka = MessagingSystemKey.String("kafka") + // RabbitMQ + MessagingSystemRabbitmq = MessagingSystemKey.String("rabbitmq") + // Apache RocketMQ + MessagingSystemRocketmq = MessagingSystemKey.String("rocketmq") +) + +// MessagingBatchMessageCount returns an attribute KeyValue conforming to +// the "messaging.batch.message_count" semantic conventions. It represents the +// number of messages sent, received, or processed in the scope of the batching +// operation. +func MessagingBatchMessageCount(val int) attribute.KeyValue { + return MessagingBatchMessageCountKey.Int(val) +} + +// MessagingClientID returns an attribute KeyValue conforming to the +// "messaging.client.id" semantic conventions. It represents a unique +// identifier for the client that consumes or produces a message. +func MessagingClientID(val string) attribute.KeyValue { + return MessagingClientIDKey.String(val) +} + +// MessagingDestinationAnonymous returns an attribute KeyValue conforming to +// the "messaging.destination.anonymous" semantic conventions. It represents a +// boolean that is true if the message destination is anonymous (could be +// unnamed or have auto-generated name). +func MessagingDestinationAnonymous(val bool) attribute.KeyValue { + return MessagingDestinationAnonymousKey.Bool(val) +} + +// MessagingDestinationName returns an attribute KeyValue conforming to the +// "messaging.destination.name" semantic conventions. It represents the message +// destination name +func MessagingDestinationName(val string) attribute.KeyValue { + return MessagingDestinationNameKey.String(val) +} + +// MessagingDestinationPartitionID returns an attribute KeyValue conforming +// to the "messaging.destination.partition.id" semantic conventions. It +// represents the identifier of the partition messages are sent to or received +// from, unique within the `messaging.destination.name`. +func MessagingDestinationPartitionID(val string) attribute.KeyValue { + return MessagingDestinationPartitionIDKey.String(val) +} + +// MessagingDestinationTemplate returns an attribute KeyValue conforming to +// the "messaging.destination.template" semantic conventions. It represents the +// low cardinality representation of the messaging destination name +func MessagingDestinationTemplate(val string) attribute.KeyValue { + return MessagingDestinationTemplateKey.String(val) +} + +// MessagingDestinationTemporary returns an attribute KeyValue conforming to +// the "messaging.destination.temporary" semantic conventions. It represents a +// boolean that is true if the message destination is temporary and might not +// exist anymore after messages are processed. +func MessagingDestinationTemporary(val bool) attribute.KeyValue { + return MessagingDestinationTemporaryKey.Bool(val) +} + +// MessagingDestinationPublishAnonymous returns an attribute KeyValue +// conforming to the "messaging.destination_publish.anonymous" semantic +// conventions. It represents a boolean that is true if the publish message +// destination is anonymous (could be unnamed or have auto-generated name). +func MessagingDestinationPublishAnonymous(val bool) attribute.KeyValue { + return MessagingDestinationPublishAnonymousKey.Bool(val) +} + +// MessagingDestinationPublishName returns an attribute KeyValue conforming +// to the "messaging.destination_publish.name" semantic conventions. It +// represents the name of the original destination the message was published to +func MessagingDestinationPublishName(val string) attribute.KeyValue { + return MessagingDestinationPublishNameKey.String(val) +} + +// MessagingMessageBodySize returns an attribute KeyValue conforming to the +// "messaging.message.body.size" semantic conventions. It represents the size +// of the message body in bytes. +func MessagingMessageBodySize(val int) attribute.KeyValue { + return MessagingMessageBodySizeKey.Int(val) +} + +// MessagingMessageConversationID returns an attribute KeyValue conforming +// to the "messaging.message.conversation_id" semantic conventions. It +// represents the conversation ID identifying the conversation to which the +// message belongs, represented as a string. Sometimes called "Correlation ID". +func MessagingMessageConversationID(val string) attribute.KeyValue { + return MessagingMessageConversationIDKey.String(val) +} + +// MessagingMessageEnvelopeSize returns an attribute KeyValue conforming to +// the "messaging.message.envelope.size" semantic conventions. It represents +// the size of the message body and metadata in bytes. +func MessagingMessageEnvelopeSize(val int) attribute.KeyValue { + return MessagingMessageEnvelopeSizeKey.Int(val) +} + +// MessagingMessageID returns an attribute KeyValue conforming to the +// "messaging.message.id" semantic conventions. It represents a value used by +// the messaging system as an identifier for the message, represented as a +// string. +func MessagingMessageID(val string) attribute.KeyValue { + return MessagingMessageIDKey.String(val) +} + +// MessagingOperationName returns an attribute KeyValue conforming to the +// "messaging.operation.name" semantic conventions. It represents the +// system-specific name of the messaging operation. +func MessagingOperationName(val string) attribute.KeyValue { + return MessagingOperationNameKey.String(val) +} + +// This group describes attributes specific to Apache Kafka. +const ( + // MessagingKafkaConsumerGroupKey is the attribute Key conforming to the + // "messaging.kafka.consumer.group" semantic conventions. It represents the + // name of the Kafka Consumer Group that is handling the message. Only + // applies to consumers, not producers. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'my-group' + MessagingKafkaConsumerGroupKey = attribute.Key("messaging.kafka.consumer.group") + + // MessagingKafkaMessageKeyKey is the attribute Key conforming to the + // "messaging.kafka.message.key" semantic conventions. It represents the + // message keys in Kafka are used for grouping alike messages to ensure + // they're processed on the same partition. They differ from + // `messaging.message.id` in that they're not unique. If the key is `null`, + // the attribute MUST NOT be set. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myKey' + // Note: If the key type is not string, it's string representation has to + // be supplied for the attribute. If the key has no unambiguous, canonical + // string form, don't include its value. + MessagingKafkaMessageKeyKey = attribute.Key("messaging.kafka.message.key") + + // MessagingKafkaMessageOffsetKey is the attribute Key conforming to the + // "messaging.kafka.message.offset" semantic conventions. It represents the + // offset of a record in the corresponding Kafka partition. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 42 + MessagingKafkaMessageOffsetKey = attribute.Key("messaging.kafka.message.offset") + + // MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the + // "messaging.kafka.message.tombstone" semantic conventions. It represents + // a boolean that is true if the message is a tombstone. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone") +) + +// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to +// the "messaging.kafka.consumer.group" semantic conventions. It represents the +// name of the Kafka Consumer Group that is handling the message. Only applies +// to consumers, not producers. +func MessagingKafkaConsumerGroup(val string) attribute.KeyValue { + return MessagingKafkaConsumerGroupKey.String(val) +} + +// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the +// "messaging.kafka.message.key" semantic conventions. It represents the +// message keys in Kafka are used for grouping alike messages to ensure they're +// processed on the same partition. They differ from `messaging.message.id` in +// that they're not unique. If the key is `null`, the attribute MUST NOT be +// set. +func MessagingKafkaMessageKey(val string) attribute.KeyValue { + return MessagingKafkaMessageKeyKey.String(val) +} + +// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to +// the "messaging.kafka.message.offset" semantic conventions. It represents the +// offset of a record in the corresponding Kafka partition. +func MessagingKafkaMessageOffset(val int) attribute.KeyValue { + return MessagingKafkaMessageOffsetKey.Int(val) +} + +// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming +// to the "messaging.kafka.message.tombstone" semantic conventions. It +// represents a boolean that is true if the message is a tombstone. +func MessagingKafkaMessageTombstone(val bool) attribute.KeyValue { + return MessagingKafkaMessageTombstoneKey.Bool(val) +} + +// This group describes attributes specific to RabbitMQ. +const ( + // MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key + // conforming to the "messaging.rabbitmq.destination.routing_key" semantic + // conventions. It represents the rabbitMQ message routing key. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myKey' + MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key") + + // MessagingRabbitmqMessageDeliveryTagKey is the attribute Key conforming + // to the "messaging.rabbitmq.message.delivery_tag" semantic conventions. + // It represents the rabbitMQ message delivery tag + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 123 + MessagingRabbitmqMessageDeliveryTagKey = attribute.Key("messaging.rabbitmq.message.delivery_tag") +) + +// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue +// conforming to the "messaging.rabbitmq.destination.routing_key" semantic +// conventions. It represents the rabbitMQ message routing key. +func MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue { + return MessagingRabbitmqDestinationRoutingKeyKey.String(val) +} + +// MessagingRabbitmqMessageDeliveryTag returns an attribute KeyValue +// conforming to the "messaging.rabbitmq.message.delivery_tag" semantic +// conventions. It represents the rabbitMQ message delivery tag +func MessagingRabbitmqMessageDeliveryTag(val int) attribute.KeyValue { + return MessagingRabbitmqMessageDeliveryTagKey.Int(val) +} + +// This group describes attributes specific to RocketMQ. +const ( + // MessagingRocketmqClientGroupKey is the attribute Key conforming to the + // "messaging.rocketmq.client_group" semantic conventions. It represents + // the name of the RocketMQ producer/consumer group that is handling the + // message. The client type is identified by the SpanKind. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myConsumerGroup' + MessagingRocketmqClientGroupKey = attribute.Key("messaging.rocketmq.client_group") + + // MessagingRocketmqConsumptionModelKey is the attribute Key conforming to + // the "messaging.rocketmq.consumption_model" semantic conventions. It + // represents the model of message consumption. This only applies to + // consumer spans. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + MessagingRocketmqConsumptionModelKey = attribute.Key("messaging.rocketmq.consumption_model") + + // MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key + // conforming to the "messaging.rocketmq.message.delay_time_level" semantic + // conventions. It represents the delay time level for delay message, which + // determines the message delay time. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 3 + MessagingRocketmqMessageDelayTimeLevelKey = attribute.Key("messaging.rocketmq.message.delay_time_level") + + // MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key + // conforming to the "messaging.rocketmq.message.delivery_timestamp" + // semantic conventions. It represents the timestamp in milliseconds that + // the delay message is expected to be delivered to consumer. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1665987217045 + MessagingRocketmqMessageDeliveryTimestampKey = attribute.Key("messaging.rocketmq.message.delivery_timestamp") + + // MessagingRocketmqMessageGroupKey is the attribute Key conforming to the + // "messaging.rocketmq.message.group" semantic conventions. It represents + // the it is essential for FIFO message. Messages that belong to the same + // message group are always processed one by one within the same consumer + // group. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myMessageGroup' + MessagingRocketmqMessageGroupKey = attribute.Key("messaging.rocketmq.message.group") + + // MessagingRocketmqMessageKeysKey is the attribute Key conforming to the + // "messaging.rocketmq.message.keys" semantic conventions. It represents + // the key(s) of message, another way to mark message besides message id. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'keyA', 'keyB' + MessagingRocketmqMessageKeysKey = attribute.Key("messaging.rocketmq.message.keys") + + // MessagingRocketmqMessageTagKey is the attribute Key conforming to the + // "messaging.rocketmq.message.tag" semantic conventions. It represents the + // secondary classifier of message besides topic. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'tagA' + MessagingRocketmqMessageTagKey = attribute.Key("messaging.rocketmq.message.tag") + + // MessagingRocketmqMessageTypeKey is the attribute Key conforming to the + // "messaging.rocketmq.message.type" semantic conventions. It represents + // the type of message. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + MessagingRocketmqMessageTypeKey = attribute.Key("messaging.rocketmq.message.type") + + // MessagingRocketmqNamespaceKey is the attribute Key conforming to the + // "messaging.rocketmq.namespace" semantic conventions. It represents the + // namespace of RocketMQ resources, resources in different namespaces are + // individual. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myNamespace' + MessagingRocketmqNamespaceKey = attribute.Key("messaging.rocketmq.namespace") +) + +var ( + // Clustering consumption model + MessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String("clustering") + // Broadcasting consumption model + MessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String("broadcasting") +) + +var ( + // Normal message + MessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String("normal") + // FIFO message + MessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String("fifo") + // Delay message + MessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String("delay") + // Transaction message + MessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String("transaction") +) + +// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to +// the "messaging.rocketmq.client_group" semantic conventions. It represents +// the name of the RocketMQ producer/consumer group that is handling the +// message. The client type is identified by the SpanKind. +func MessagingRocketmqClientGroup(val string) attribute.KeyValue { + return MessagingRocketmqClientGroupKey.String(val) +} + +// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue +// conforming to the "messaging.rocketmq.message.delay_time_level" semantic +// conventions. It represents the delay time level for delay message, which +// determines the message delay time. +func MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue { + return MessagingRocketmqMessageDelayTimeLevelKey.Int(val) +} + +// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue +// conforming to the "messaging.rocketmq.message.delivery_timestamp" semantic +// conventions. It represents the timestamp in milliseconds that the delay +// message is expected to be delivered to consumer. +func MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue { + return MessagingRocketmqMessageDeliveryTimestampKey.Int(val) +} + +// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to +// the "messaging.rocketmq.message.group" semantic conventions. It represents +// the it is essential for FIFO message. Messages that belong to the same +// message group are always processed one by one within the same consumer +// group. +func MessagingRocketmqMessageGroup(val string) attribute.KeyValue { + return MessagingRocketmqMessageGroupKey.String(val) +} + +// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to +// the "messaging.rocketmq.message.keys" semantic conventions. It represents +// the key(s) of message, another way to mark message besides message id. +func MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue { + return MessagingRocketmqMessageKeysKey.StringSlice(val) +} + +// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to +// the "messaging.rocketmq.message.tag" semantic conventions. It represents the +// secondary classifier of message besides topic. +func MessagingRocketmqMessageTag(val string) attribute.KeyValue { + return MessagingRocketmqMessageTagKey.String(val) +} + +// MessagingRocketmqNamespace returns an attribute KeyValue conforming to +// the "messaging.rocketmq.namespace" semantic conventions. It represents the +// namespace of RocketMQ resources, resources in different namespaces are +// individual. +func MessagingRocketmqNamespace(val string) attribute.KeyValue { + return MessagingRocketmqNamespaceKey.String(val) +} + +// This group describes attributes specific to GCP Pub/Sub. +const ( + // MessagingGCPPubsubMessageAckDeadlineKey is the attribute Key conforming + // to the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions. + // It represents the ack deadline in seconds set for the modify ack + // deadline request. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 10 + MessagingGCPPubsubMessageAckDeadlineKey = attribute.Key("messaging.gcp_pubsub.message.ack_deadline") + + // MessagingGCPPubsubMessageAckIDKey is the attribute Key conforming to the + // "messaging.gcp_pubsub.message.ack_id" semantic conventions. It + // represents the ack id for a given message. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'ack_id' + MessagingGCPPubsubMessageAckIDKey = attribute.Key("messaging.gcp_pubsub.message.ack_id") + + // MessagingGCPPubsubMessageDeliveryAttemptKey is the attribute Key + // conforming to the "messaging.gcp_pubsub.message.delivery_attempt" + // semantic conventions. It represents the delivery attempt for a given + // message. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 2 + MessagingGCPPubsubMessageDeliveryAttemptKey = attribute.Key("messaging.gcp_pubsub.message.delivery_attempt") + + // MessagingGCPPubsubMessageOrderingKeyKey is the attribute Key conforming + // to the "messaging.gcp_pubsub.message.ordering_key" semantic conventions. + // It represents the ordering key for a given message. If the attribute is + // not present, the message does not have an ordering key. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'ordering_key' + MessagingGCPPubsubMessageOrderingKeyKey = attribute.Key("messaging.gcp_pubsub.message.ordering_key") +) + +// MessagingGCPPubsubMessageAckDeadline returns an attribute KeyValue +// conforming to the "messaging.gcp_pubsub.message.ack_deadline" semantic +// conventions. It represents the ack deadline in seconds set for the modify +// ack deadline request. +func MessagingGCPPubsubMessageAckDeadline(val int) attribute.KeyValue { + return MessagingGCPPubsubMessageAckDeadlineKey.Int(val) +} + +// MessagingGCPPubsubMessageAckID returns an attribute KeyValue conforming +// to the "messaging.gcp_pubsub.message.ack_id" semantic conventions. It +// represents the ack id for a given message. +func MessagingGCPPubsubMessageAckID(val string) attribute.KeyValue { + return MessagingGCPPubsubMessageAckIDKey.String(val) +} + +// MessagingGCPPubsubMessageDeliveryAttempt returns an attribute KeyValue +// conforming to the "messaging.gcp_pubsub.message.delivery_attempt" semantic +// conventions. It represents the delivery attempt for a given message. +func MessagingGCPPubsubMessageDeliveryAttempt(val int) attribute.KeyValue { + return MessagingGCPPubsubMessageDeliveryAttemptKey.Int(val) +} + +// MessagingGCPPubsubMessageOrderingKey returns an attribute KeyValue +// conforming to the "messaging.gcp_pubsub.message.ordering_key" semantic +// conventions. It represents the ordering key for a given message. If the +// attribute is not present, the message does not have an ordering key. +func MessagingGCPPubsubMessageOrderingKey(val string) attribute.KeyValue { + return MessagingGCPPubsubMessageOrderingKeyKey.String(val) +} + +// This group describes attributes specific to Azure Service Bus. +const ( + // MessagingServicebusDestinationSubscriptionNameKey is the attribute Key + // conforming to the "messaging.servicebus.destination.subscription_name" + // semantic conventions. It represents the name of the subscription in the + // topic messages are received from. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'mySubscription' + MessagingServicebusDestinationSubscriptionNameKey = attribute.Key("messaging.servicebus.destination.subscription_name") + + // MessagingServicebusDispositionStatusKey is the attribute Key conforming + // to the "messaging.servicebus.disposition_status" semantic conventions. + // It represents the describes the [settlement + // type](https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock). + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + MessagingServicebusDispositionStatusKey = attribute.Key("messaging.servicebus.disposition_status") + + // MessagingServicebusMessageDeliveryCountKey is the attribute Key + // conforming to the "messaging.servicebus.message.delivery_count" semantic + // conventions. It represents the number of deliveries that have been + // attempted for this message. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 2 + MessagingServicebusMessageDeliveryCountKey = attribute.Key("messaging.servicebus.message.delivery_count") + + // MessagingServicebusMessageEnqueuedTimeKey is the attribute Key + // conforming to the "messaging.servicebus.message.enqueued_time" semantic + // conventions. It represents the UTC epoch seconds at which the message + // has been accepted and stored in the entity. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1701393730 + MessagingServicebusMessageEnqueuedTimeKey = attribute.Key("messaging.servicebus.message.enqueued_time") +) + +var ( + // Message is completed + MessagingServicebusDispositionStatusComplete = MessagingServicebusDispositionStatusKey.String("complete") + // Message is abandoned + MessagingServicebusDispositionStatusAbandon = MessagingServicebusDispositionStatusKey.String("abandon") + // Message is sent to dead letter queue + MessagingServicebusDispositionStatusDeadLetter = MessagingServicebusDispositionStatusKey.String("dead_letter") + // Message is deferred + MessagingServicebusDispositionStatusDefer = MessagingServicebusDispositionStatusKey.String("defer") +) + +// MessagingServicebusDestinationSubscriptionName returns an attribute +// KeyValue conforming to the +// "messaging.servicebus.destination.subscription_name" semantic conventions. +// It represents the name of the subscription in the topic messages are +// received from. +func MessagingServicebusDestinationSubscriptionName(val string) attribute.KeyValue { + return MessagingServicebusDestinationSubscriptionNameKey.String(val) +} + +// MessagingServicebusMessageDeliveryCount returns an attribute KeyValue +// conforming to the "messaging.servicebus.message.delivery_count" semantic +// conventions. It represents the number of deliveries that have been attempted +// for this message. +func MessagingServicebusMessageDeliveryCount(val int) attribute.KeyValue { + return MessagingServicebusMessageDeliveryCountKey.Int(val) +} + +// MessagingServicebusMessageEnqueuedTime returns an attribute KeyValue +// conforming to the "messaging.servicebus.message.enqueued_time" semantic +// conventions. It represents the UTC epoch seconds at which the message has +// been accepted and stored in the entity. +func MessagingServicebusMessageEnqueuedTime(val int) attribute.KeyValue { + return MessagingServicebusMessageEnqueuedTimeKey.Int(val) +} + +// This group describes attributes specific to Azure Event Hubs. +const ( + // MessagingEventhubsConsumerGroupKey is the attribute Key conforming to + // the "messaging.eventhubs.consumer.group" semantic conventions. It + // represents the name of the consumer group the event consumer is + // associated with. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'indexer' + MessagingEventhubsConsumerGroupKey = attribute.Key("messaging.eventhubs.consumer.group") + + // MessagingEventhubsMessageEnqueuedTimeKey is the attribute Key conforming + // to the "messaging.eventhubs.message.enqueued_time" semantic conventions. + // It represents the UTC epoch seconds at which the message has been + // accepted and stored in the entity. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1701393730 + MessagingEventhubsMessageEnqueuedTimeKey = attribute.Key("messaging.eventhubs.message.enqueued_time") +) + +// MessagingEventhubsConsumerGroup returns an attribute KeyValue conforming +// to the "messaging.eventhubs.consumer.group" semantic conventions. It +// represents the name of the consumer group the event consumer is associated +// with. +func MessagingEventhubsConsumerGroup(val string) attribute.KeyValue { + return MessagingEventhubsConsumerGroupKey.String(val) +} + +// MessagingEventhubsMessageEnqueuedTime returns an attribute KeyValue +// conforming to the "messaging.eventhubs.message.enqueued_time" semantic +// conventions. It represents the UTC epoch seconds at which the message has +// been accepted and stored in the entity. +func MessagingEventhubsMessageEnqueuedTime(val int) attribute.KeyValue { + return MessagingEventhubsMessageEnqueuedTimeKey.Int(val) +} + +// These attributes may be used for any network related operation. +const ( + // NetworkCarrierIccKey is the attribute Key conforming to the + // "network.carrier.icc" semantic conventions. It represents the ISO 3166-1 + // alpha-2 2-character country code associated with the mobile carrier + // network. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'DE' + NetworkCarrierIccKey = attribute.Key("network.carrier.icc") + + // NetworkCarrierMccKey is the attribute Key conforming to the + // "network.carrier.mcc" semantic conventions. It represents the mobile + // carrier country code. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '310' + NetworkCarrierMccKey = attribute.Key("network.carrier.mcc") + + // NetworkCarrierMncKey is the attribute Key conforming to the + // "network.carrier.mnc" semantic conventions. It represents the mobile + // carrier network code. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '001' + NetworkCarrierMncKey = attribute.Key("network.carrier.mnc") + + // NetworkCarrierNameKey is the attribute Key conforming to the + // "network.carrier.name" semantic conventions. It represents the name of + // the mobile carrier. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'sprint' + NetworkCarrierNameKey = attribute.Key("network.carrier.name") + + // NetworkConnectionSubtypeKey is the attribute Key conforming to the + // "network.connection.subtype" semantic conventions. It represents the + // this describes more details regarding the connection.type. It may be the + // type of cell technology connection, but it could be used for describing + // details about a wifi connection. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'LTE' + NetworkConnectionSubtypeKey = attribute.Key("network.connection.subtype") + + // NetworkConnectionTypeKey is the attribute Key conforming to the + // "network.connection.type" semantic conventions. It represents the + // internet connection type. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'wifi' + NetworkConnectionTypeKey = attribute.Key("network.connection.type") + + // NetworkIoDirectionKey is the attribute Key conforming to the + // "network.io.direction" semantic conventions. It represents the network + // IO operation direction. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'transmit' + NetworkIoDirectionKey = attribute.Key("network.io.direction") + + // NetworkLocalAddressKey is the attribute Key conforming to the + // "network.local.address" semantic conventions. It represents the local + // address of the network connection - IP address or Unix domain socket + // name. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '10.1.2.80', '/tmp/my.sock' + NetworkLocalAddressKey = attribute.Key("network.local.address") + + // NetworkLocalPortKey is the attribute Key conforming to the + // "network.local.port" semantic conventions. It represents the local port + // number of the network connection. + // + // Type: int + // RequirementLevel: Optional + // Stability: stable + // Examples: 65123 + NetworkLocalPortKey = attribute.Key("network.local.port") + + // NetworkPeerAddressKey is the attribute Key conforming to the + // "network.peer.address" semantic conventions. It represents the peer + // address of the network connection - IP address or Unix domain socket + // name. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '10.1.2.80', '/tmp/my.sock' + NetworkPeerAddressKey = attribute.Key("network.peer.address") + + // NetworkPeerPortKey is the attribute Key conforming to the + // "network.peer.port" semantic conventions. It represents the peer port + // number of the network connection. + // + // Type: int + // RequirementLevel: Optional + // Stability: stable + // Examples: 65123 + NetworkPeerPortKey = attribute.Key("network.peer.port") + + // NetworkProtocolNameKey is the attribute Key conforming to the + // "network.protocol.name" semantic conventions. It represents the [OSI + // application layer](https://osi-model.com/application-layer/) or non-OSI + // equivalent. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'amqp', 'http', 'mqtt' + // Note: The value SHOULD be normalized to lowercase. + NetworkProtocolNameKey = attribute.Key("network.protocol.name") + + // NetworkProtocolVersionKey is the attribute Key conforming to the + // "network.protocol.version" semantic conventions. It represents the + // actual version of the protocol used for network communication. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '1.1', '2' + // Note: If protocol version is subject to negotiation (for example using + // [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute + // SHOULD be set to the negotiated version. If the actual protocol version + // is not known, this attribute SHOULD NOT be set. + NetworkProtocolVersionKey = attribute.Key("network.protocol.version") + + // NetworkTransportKey is the attribute Key conforming to the + // "network.transport" semantic conventions. It represents the [OSI + // transport layer](https://osi-model.com/transport-layer/) or + // [inter-process communication + // method](https://wikipedia.org/wiki/Inter-process_communication). + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'tcp', 'udp' + // Note: The value SHOULD be normalized to lowercase. + // + // Consider always setting the transport when setting a port number, since + // a port number is ambiguous without knowing the transport. For example + // different processes could be listening on TCP port 12345 and UDP port + // 12345. + NetworkTransportKey = attribute.Key("network.transport") + + // NetworkTypeKey is the attribute Key conforming to the "network.type" + // semantic conventions. It represents the [OSI network + // layer](https://osi-model.com/network-layer/) or non-OSI equivalent. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'ipv4', 'ipv6' + // Note: The value SHOULD be normalized to lowercase. + NetworkTypeKey = attribute.Key("network.type") +) + +var ( + // GPRS + NetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String("gprs") + // EDGE + NetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String("edge") + // UMTS + NetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String("umts") + // CDMA + NetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String("cdma") + // EVDO Rel. 0 + NetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String("evdo_0") + // EVDO Rev. A + NetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String("evdo_a") + // CDMA2000 1XRTT + NetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String("cdma2000_1xrtt") + // HSDPA + NetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String("hsdpa") + // HSUPA + NetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String("hsupa") + // HSPA + NetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String("hspa") + // IDEN + NetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String("iden") + // EVDO Rev. B + NetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String("evdo_b") + // LTE + NetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String("lte") + // EHRPD + NetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String("ehrpd") + // HSPAP + NetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String("hspap") + // GSM + NetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String("gsm") + // TD-SCDMA + NetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String("td_scdma") + // IWLAN + NetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String("iwlan") + // 5G NR (New Radio) + NetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String("nr") + // 5G NRNSA (New Radio Non-Standalone) + NetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String("nrnsa") + // LTE CA + NetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String("lte_ca") +) + +var ( + // wifi + NetworkConnectionTypeWifi = NetworkConnectionTypeKey.String("wifi") + // wired + NetworkConnectionTypeWired = NetworkConnectionTypeKey.String("wired") + // cell + NetworkConnectionTypeCell = NetworkConnectionTypeKey.String("cell") + // unavailable + NetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String("unavailable") + // unknown + NetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String("unknown") +) + +var ( + // transmit + NetworkIoDirectionTransmit = NetworkIoDirectionKey.String("transmit") + // receive + NetworkIoDirectionReceive = NetworkIoDirectionKey.String("receive") +) + +var ( + // TCP + NetworkTransportTCP = NetworkTransportKey.String("tcp") + // UDP + NetworkTransportUDP = NetworkTransportKey.String("udp") + // Named or anonymous pipe + NetworkTransportPipe = NetworkTransportKey.String("pipe") + // Unix domain socket + NetworkTransportUnix = NetworkTransportKey.String("unix") +) + +var ( + // IPv4 + NetworkTypeIpv4 = NetworkTypeKey.String("ipv4") + // IPv6 + NetworkTypeIpv6 = NetworkTypeKey.String("ipv6") +) + +// NetworkCarrierIcc returns an attribute KeyValue conforming to the +// "network.carrier.icc" semantic conventions. It represents the ISO 3166-1 +// alpha-2 2-character country code associated with the mobile carrier network. +func NetworkCarrierIcc(val string) attribute.KeyValue { + return NetworkCarrierIccKey.String(val) +} + +// NetworkCarrierMcc returns an attribute KeyValue conforming to the +// "network.carrier.mcc" semantic conventions. It represents the mobile carrier +// country code. +func NetworkCarrierMcc(val string) attribute.KeyValue { + return NetworkCarrierMccKey.String(val) +} + +// NetworkCarrierMnc returns an attribute KeyValue conforming to the +// "network.carrier.mnc" semantic conventions. It represents the mobile carrier +// network code. +func NetworkCarrierMnc(val string) attribute.KeyValue { + return NetworkCarrierMncKey.String(val) +} + +// NetworkCarrierName returns an attribute KeyValue conforming to the +// "network.carrier.name" semantic conventions. It represents the name of the +// mobile carrier. +func NetworkCarrierName(val string) attribute.KeyValue { + return NetworkCarrierNameKey.String(val) +} + +// NetworkLocalAddress returns an attribute KeyValue conforming to the +// "network.local.address" semantic conventions. It represents the local +// address of the network connection - IP address or Unix domain socket name. +func NetworkLocalAddress(val string) attribute.KeyValue { + return NetworkLocalAddressKey.String(val) +} + +// NetworkLocalPort returns an attribute KeyValue conforming to the +// "network.local.port" semantic conventions. It represents the local port +// number of the network connection. +func NetworkLocalPort(val int) attribute.KeyValue { + return NetworkLocalPortKey.Int(val) +} + +// NetworkPeerAddress returns an attribute KeyValue conforming to the +// "network.peer.address" semantic conventions. It represents the peer address +// of the network connection - IP address or Unix domain socket name. +func NetworkPeerAddress(val string) attribute.KeyValue { + return NetworkPeerAddressKey.String(val) +} + +// NetworkPeerPort returns an attribute KeyValue conforming to the +// "network.peer.port" semantic conventions. It represents the peer port number +// of the network connection. +func NetworkPeerPort(val int) attribute.KeyValue { + return NetworkPeerPortKey.Int(val) +} + +// NetworkProtocolName returns an attribute KeyValue conforming to the +// "network.protocol.name" semantic conventions. It represents the [OSI +// application layer](https://osi-model.com/application-layer/) or non-OSI +// equivalent. +func NetworkProtocolName(val string) attribute.KeyValue { + return NetworkProtocolNameKey.String(val) +} + +// NetworkProtocolVersion returns an attribute KeyValue conforming to the +// "network.protocol.version" semantic conventions. It represents the actual +// version of the protocol used for network communication. +func NetworkProtocolVersion(val string) attribute.KeyValue { + return NetworkProtocolVersionKey.String(val) +} + +// An OCI image manifest. +const ( + // OciManifestDigestKey is the attribute Key conforming to the + // "oci.manifest.digest" semantic conventions. It represents the digest of + // the OCI image manifest. For container images specifically is the digest + // by which the container image is known. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // 'sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4' + // Note: Follows [OCI Image Manifest + // Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), + // and specifically the [Digest + // property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests). + // An example can be found in [Example Image + // Manifest](https://docs.docker.com/registry/spec/manifest-v2-2/#example-image-manifest). + OciManifestDigestKey = attribute.Key("oci.manifest.digest") +) + +// OciManifestDigest returns an attribute KeyValue conforming to the +// "oci.manifest.digest" semantic conventions. It represents the digest of the +// OCI image manifest. For container images specifically is the digest by which +// the container image is known. +func OciManifestDigest(val string) attribute.KeyValue { + return OciManifestDigestKey.String(val) +} + +// Attributes used by the OpenTracing Shim layer. +const ( + // OpentracingRefTypeKey is the attribute Key conforming to the + // "opentracing.ref_type" semantic conventions. It represents the + // parent-child Reference type + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Note: The causal relationship between a child Span and a parent Span. + OpentracingRefTypeKey = attribute.Key("opentracing.ref_type") +) + +var ( + // The parent Span depends on the child Span in some capacity + OpentracingRefTypeChildOf = OpentracingRefTypeKey.String("child_of") + // The parent Span doesn't depend in any way on the result of the child Span + OpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String("follows_from") +) + +// The operating system (OS) on which the process represented by this resource +// is running. +const ( + // OSBuildIDKey is the attribute Key conforming to the "os.build_id" + // semantic conventions. It represents the unique identifier for a + // particular build or compilation of the operating system. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'TQ3C.230805.001.B2', '20E247', '22621' + OSBuildIDKey = attribute.Key("os.build_id") + + // OSDescriptionKey is the attribute Key conforming to the "os.description" + // semantic conventions. It represents the human readable (not intended to + // be parsed) OS version information, like e.g. reported by `ver` or + // `lsb_release -a` commands. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1 + // LTS' + OSDescriptionKey = attribute.Key("os.description") + + // OSNameKey is the attribute Key conforming to the "os.name" semantic + // conventions. It represents the human readable operating system name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'iOS', 'Android', 'Ubuntu' + OSNameKey = attribute.Key("os.name") + + // OSTypeKey is the attribute Key conforming to the "os.type" semantic + // conventions. It represents the operating system type. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + OSTypeKey = attribute.Key("os.type") + + // OSVersionKey is the attribute Key conforming to the "os.version" + // semantic conventions. It represents the version string of the operating + // system as defined in [Version + // Attributes](/docs/resource/README.md#version-attributes). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '14.2.1', '18.04.1' + OSVersionKey = attribute.Key("os.version") +) + +var ( + // Microsoft Windows + OSTypeWindows = OSTypeKey.String("windows") + // Linux + OSTypeLinux = OSTypeKey.String("linux") + // Apple Darwin + OSTypeDarwin = OSTypeKey.String("darwin") + // FreeBSD + OSTypeFreeBSD = OSTypeKey.String("freebsd") + // NetBSD + OSTypeNetBSD = OSTypeKey.String("netbsd") + // OpenBSD + OSTypeOpenBSD = OSTypeKey.String("openbsd") + // DragonFly BSD + OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd") + // HP-UX (Hewlett Packard Unix) + OSTypeHPUX = OSTypeKey.String("hpux") + // AIX (Advanced Interactive eXecutive) + OSTypeAIX = OSTypeKey.String("aix") + // SunOS, Oracle Solaris + OSTypeSolaris = OSTypeKey.String("solaris") + // IBM z/OS + OSTypeZOS = OSTypeKey.String("z_os") +) + +// OSBuildID returns an attribute KeyValue conforming to the "os.build_id" +// semantic conventions. It represents the unique identifier for a particular +// build or compilation of the operating system. +func OSBuildID(val string) attribute.KeyValue { + return OSBuildIDKey.String(val) +} + +// OSDescription returns an attribute KeyValue conforming to the +// "os.description" semantic conventions. It represents the human readable (not +// intended to be parsed) OS version information, like e.g. reported by `ver` +// or `lsb_release -a` commands. +func OSDescription(val string) attribute.KeyValue { + return OSDescriptionKey.String(val) +} + +// OSName returns an attribute KeyValue conforming to the "os.name" semantic +// conventions. It represents the human readable operating system name. +func OSName(val string) attribute.KeyValue { + return OSNameKey.String(val) +} + +// OSVersion returns an attribute KeyValue conforming to the "os.version" +// semantic conventions. It represents the version string of the operating +// system as defined in [Version +// Attributes](/docs/resource/README.md#version-attributes). +func OSVersion(val string) attribute.KeyValue { + return OSVersionKey.String(val) +} + +// Attributes reserved for OpenTelemetry +const ( + // OTelStatusCodeKey is the attribute Key conforming to the + // "otel.status_code" semantic conventions. It represents the name of the + // code, either "OK" or "ERROR". MUST NOT be set if the status code is + // UNSET. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + OTelStatusCodeKey = attribute.Key("otel.status_code") + + // OTelStatusDescriptionKey is the attribute Key conforming to the + // "otel.status_description" semantic conventions. It represents the + // description of the Status if it has a value, otherwise not set. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'resource not found' + OTelStatusDescriptionKey = attribute.Key("otel.status_description") +) + +var ( + // The operation has been validated by an Application developer or Operator to have completed successfully + OTelStatusCodeOk = OTelStatusCodeKey.String("OK") + // The operation contains an error + OTelStatusCodeError = OTelStatusCodeKey.String("ERROR") +) + +// OTelStatusDescription returns an attribute KeyValue conforming to the +// "otel.status_description" semantic conventions. It represents the +// description of the Status if it has a value, otherwise not set. +func OTelStatusDescription(val string) attribute.KeyValue { + return OTelStatusDescriptionKey.String(val) +} + +// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's +// concepts. +const ( + // OTelScopeNameKey is the attribute Key conforming to the + // "otel.scope.name" semantic conventions. It represents the name of the + // instrumentation scope - (`InstrumentationScope.Name` in OTLP). + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'io.opentelemetry.contrib.mongodb' + OTelScopeNameKey = attribute.Key("otel.scope.name") + + // OTelScopeVersionKey is the attribute Key conforming to the + // "otel.scope.version" semantic conventions. It represents the version of + // the instrumentation scope - (`InstrumentationScope.Version` in OTLP). + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '1.0.0' + OTelScopeVersionKey = attribute.Key("otel.scope.version") +) + +// OTelScopeName returns an attribute KeyValue conforming to the +// "otel.scope.name" semantic conventions. It represents the name of the +// instrumentation scope - (`InstrumentationScope.Name` in OTLP). +func OTelScopeName(val string) attribute.KeyValue { + return OTelScopeNameKey.String(val) +} + +// OTelScopeVersion returns an attribute KeyValue conforming to the +// "otel.scope.version" semantic conventions. It represents the version of the +// instrumentation scope - (`InstrumentationScope.Version` in OTLP). +func OTelScopeVersion(val string) attribute.KeyValue { + return OTelScopeVersionKey.String(val) +} + +// Operations that access some remote service. +const ( + // PeerServiceKey is the attribute Key conforming to the "peer.service" + // semantic conventions. It represents the + // [`service.name`](/docs/resource/README.md#service) of the remote + // service. SHOULD be equal to the actual `service.name` resource attribute + // of the remote service if any. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'AuthTokenCache' + PeerServiceKey = attribute.Key("peer.service") +) + +// PeerService returns an attribute KeyValue conforming to the +// "peer.service" semantic conventions. It represents the +// [`service.name`](/docs/resource/README.md#service) of the remote service. +// SHOULD be equal to the actual `service.name` resource attribute of the +// remote service if any. +func PeerService(val string) attribute.KeyValue { + return PeerServiceKey.String(val) +} + +// An operating system process. +const ( + // ProcessCommandKey is the attribute Key conforming to the + // "process.command" semantic conventions. It represents the command used + // to launch the process (i.e. the command name). On Linux based systems, + // can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can + // be set to the first parameter extracted from `GetCommandLineW`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'cmd/otelcol' + ProcessCommandKey = attribute.Key("process.command") + + // ProcessCommandArgsKey is the attribute Key conforming to the + // "process.command_args" semantic conventions. It represents the all the + // command arguments (including the command/executable itself) as received + // by the process. On Linux-based systems (and some other Unixoid systems + // supporting procfs), can be set according to the list of null-delimited + // strings extracted from `proc/[pid]/cmdline`. For libc-based executables, + // this would be the full argv vector passed to `main`. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'cmd/otecol', '--config=config.yaml' + ProcessCommandArgsKey = attribute.Key("process.command_args") + + // ProcessCommandLineKey is the attribute Key conforming to the + // "process.command_line" semantic conventions. It represents the full + // command used to launch the process as a single string representing the + // full command. On Windows, can be set to the result of `GetCommandLineW`. + // Do not set this if you have to assemble it just for monitoring; use + // `process.command_args` instead. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'C:\\cmd\\otecol --config="my directory\\config.yaml"' + ProcessCommandLineKey = attribute.Key("process.command_line") + + // ProcessContextSwitchTypeKey is the attribute Key conforming to the + // "process.context_switch_type" semantic conventions. It represents the + // specifies whether the context switches for this data point were + // voluntary or involuntary. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + ProcessContextSwitchTypeKey = attribute.Key("process.context_switch_type") + + // ProcessCreationTimeKey is the attribute Key conforming to the + // "process.creation.time" semantic conventions. It represents the date and + // time the process was created, in ISO 8601 format. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2023-11-21T09:25:34.853Z' + ProcessCreationTimeKey = attribute.Key("process.creation.time") + + // ProcessExecutableNameKey is the attribute Key conforming to the + // "process.executable.name" semantic conventions. It represents the name + // of the process executable. On Linux based systems, can be set to the + // `Name` in `proc/[pid]/status`. On Windows, can be set to the base name + // of `GetProcessImageFileNameW`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'otelcol' + ProcessExecutableNameKey = attribute.Key("process.executable.name") + + // ProcessExecutablePathKey is the attribute Key conforming to the + // "process.executable.path" semantic conventions. It represents the full + // path to the process executable. On Linux based systems, can be set to + // the target of `proc/[pid]/exe`. On Windows, can be set to the result of + // `GetProcessImageFileNameW`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/usr/bin/cmd/otelcol' + ProcessExecutablePathKey = attribute.Key("process.executable.path") + + // ProcessExitCodeKey is the attribute Key conforming to the + // "process.exit.code" semantic conventions. It represents the exit code of + // the process. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 127 + ProcessExitCodeKey = attribute.Key("process.exit.code") + + // ProcessExitTimeKey is the attribute Key conforming to the + // "process.exit.time" semantic conventions. It represents the date and + // time the process exited, in ISO 8601 format. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2023-11-21T09:26:12.315Z' + ProcessExitTimeKey = attribute.Key("process.exit.time") + + // ProcessGroupLeaderPIDKey is the attribute Key conforming to the + // "process.group_leader.pid" semantic conventions. It represents the PID + // of the process's group leader. This is also the process group ID (PGID) + // of the process. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 23 + ProcessGroupLeaderPIDKey = attribute.Key("process.group_leader.pid") + + // ProcessInteractiveKey is the attribute Key conforming to the + // "process.interactive" semantic conventions. It represents the whether + // the process is connected to an interactive shell. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + ProcessInteractiveKey = attribute.Key("process.interactive") + + // ProcessOwnerKey is the attribute Key conforming to the "process.owner" + // semantic conventions. It represents the username of the user that owns + // the process. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'root' + ProcessOwnerKey = attribute.Key("process.owner") + + // ProcessPagingFaultTypeKey is the attribute Key conforming to the + // "process.paging.fault_type" semantic conventions. It represents the type + // of page fault for this data point. Type `major` is for major/hard page + // faults, and `minor` is for minor/soft page faults. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + ProcessPagingFaultTypeKey = attribute.Key("process.paging.fault_type") + + // ProcessParentPIDKey is the attribute Key conforming to the + // "process.parent_pid" semantic conventions. It represents the parent + // Process identifier (PPID). + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 111 + ProcessParentPIDKey = attribute.Key("process.parent_pid") + + // ProcessPIDKey is the attribute Key conforming to the "process.pid" + // semantic conventions. It represents the process identifier (PID). + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1234 + ProcessPIDKey = attribute.Key("process.pid") + + // ProcessRealUserIDKey is the attribute Key conforming to the + // "process.real_user.id" semantic conventions. It represents the real user + // ID (RUID) of the process. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1000 + ProcessRealUserIDKey = attribute.Key("process.real_user.id") + + // ProcessRealUserNameKey is the attribute Key conforming to the + // "process.real_user.name" semantic conventions. It represents the + // username of the real user of the process. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'operator' + ProcessRealUserNameKey = attribute.Key("process.real_user.name") + + // ProcessRuntimeDescriptionKey is the attribute Key conforming to the + // "process.runtime.description" semantic conventions. It represents an + // additional description about the runtime of the process, for example a + // specific vendor customization of the runtime environment. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0' + ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description") + + // ProcessRuntimeNameKey is the attribute Key conforming to the + // "process.runtime.name" semantic conventions. It represents the name of + // the runtime of this process. For compiled native binaries, this SHOULD + // be the name of the compiler. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'OpenJDK Runtime Environment' + ProcessRuntimeNameKey = attribute.Key("process.runtime.name") + + // ProcessRuntimeVersionKey is the attribute Key conforming to the + // "process.runtime.version" semantic conventions. It represents the + // version of the runtime of this process, as returned by the runtime + // without modification. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '14.0.2' + ProcessRuntimeVersionKey = attribute.Key("process.runtime.version") + + // ProcessSavedUserIDKey is the attribute Key conforming to the + // "process.saved_user.id" semantic conventions. It represents the saved + // user ID (SUID) of the process. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1002 + ProcessSavedUserIDKey = attribute.Key("process.saved_user.id") + + // ProcessSavedUserNameKey is the attribute Key conforming to the + // "process.saved_user.name" semantic conventions. It represents the + // username of the saved user. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'operator' + ProcessSavedUserNameKey = attribute.Key("process.saved_user.name") + + // ProcessSessionLeaderPIDKey is the attribute Key conforming to the + // "process.session_leader.pid" semantic conventions. It represents the PID + // of the process's session leader. This is also the session ID (SID) of + // the process. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 14 + ProcessSessionLeaderPIDKey = attribute.Key("process.session_leader.pid") + + // ProcessUserIDKey is the attribute Key conforming to the + // "process.user.id" semantic conventions. It represents the effective user + // ID (EUID) of the process. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1001 + ProcessUserIDKey = attribute.Key("process.user.id") + + // ProcessUserNameKey is the attribute Key conforming to the + // "process.user.name" semantic conventions. It represents the username of + // the effective user of the process. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'root' + ProcessUserNameKey = attribute.Key("process.user.name") + + // ProcessVpidKey is the attribute Key conforming to the "process.vpid" + // semantic conventions. It represents the virtual process identifier. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 12 + // Note: The process ID within a PID namespace. This is not necessarily + // unique across all processes on the host but it is unique within the + // process namespace that the process exists within. + ProcessVpidKey = attribute.Key("process.vpid") +) + +var ( + // voluntary + ProcessContextSwitchTypeVoluntary = ProcessContextSwitchTypeKey.String("voluntary") + // involuntary + ProcessContextSwitchTypeInvoluntary = ProcessContextSwitchTypeKey.String("involuntary") +) + +var ( + // major + ProcessPagingFaultTypeMajor = ProcessPagingFaultTypeKey.String("major") + // minor + ProcessPagingFaultTypeMinor = ProcessPagingFaultTypeKey.String("minor") +) + +// ProcessCommand returns an attribute KeyValue conforming to the +// "process.command" semantic conventions. It represents the command used to +// launch the process (i.e. the command name). On Linux based systems, can be +// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to +// the first parameter extracted from `GetCommandLineW`. +func ProcessCommand(val string) attribute.KeyValue { + return ProcessCommandKey.String(val) +} + +// ProcessCommandArgs returns an attribute KeyValue conforming to the +// "process.command_args" semantic conventions. It represents the all the +// command arguments (including the command/executable itself) as received by +// the process. On Linux-based systems (and some other Unixoid systems +// supporting procfs), can be set according to the list of null-delimited +// strings extracted from `proc/[pid]/cmdline`. For libc-based executables, +// this would be the full argv vector passed to `main`. +func ProcessCommandArgs(val ...string) attribute.KeyValue { + return ProcessCommandArgsKey.StringSlice(val) +} + +// ProcessCommandLine returns an attribute KeyValue conforming to the +// "process.command_line" semantic conventions. It represents the full command +// used to launch the process as a single string representing the full command. +// On Windows, can be set to the result of `GetCommandLineW`. Do not set this +// if you have to assemble it just for monitoring; use `process.command_args` +// instead. +func ProcessCommandLine(val string) attribute.KeyValue { + return ProcessCommandLineKey.String(val) +} + +// ProcessCreationTime returns an attribute KeyValue conforming to the +// "process.creation.time" semantic conventions. It represents the date and +// time the process was created, in ISO 8601 format. +func ProcessCreationTime(val string) attribute.KeyValue { + return ProcessCreationTimeKey.String(val) +} + +// ProcessExecutableName returns an attribute KeyValue conforming to the +// "process.executable.name" semantic conventions. It represents the name of +// the process executable. On Linux based systems, can be set to the `Name` in +// `proc/[pid]/status`. On Windows, can be set to the base name of +// `GetProcessImageFileNameW`. +func ProcessExecutableName(val string) attribute.KeyValue { + return ProcessExecutableNameKey.String(val) +} + +// ProcessExecutablePath returns an attribute KeyValue conforming to the +// "process.executable.path" semantic conventions. It represents the full path +// to the process executable. On Linux based systems, can be set to the target +// of `proc/[pid]/exe`. On Windows, can be set to the result of +// `GetProcessImageFileNameW`. +func ProcessExecutablePath(val string) attribute.KeyValue { + return ProcessExecutablePathKey.String(val) +} + +// ProcessExitCode returns an attribute KeyValue conforming to the +// "process.exit.code" semantic conventions. It represents the exit code of the +// process. +func ProcessExitCode(val int) attribute.KeyValue { + return ProcessExitCodeKey.Int(val) +} + +// ProcessExitTime returns an attribute KeyValue conforming to the +// "process.exit.time" semantic conventions. It represents the date and time +// the process exited, in ISO 8601 format. +func ProcessExitTime(val string) attribute.KeyValue { + return ProcessExitTimeKey.String(val) +} + +// ProcessGroupLeaderPID returns an attribute KeyValue conforming to the +// "process.group_leader.pid" semantic conventions. It represents the PID of +// the process's group leader. This is also the process group ID (PGID) of the +// process. +func ProcessGroupLeaderPID(val int) attribute.KeyValue { + return ProcessGroupLeaderPIDKey.Int(val) +} + +// ProcessInteractive returns an attribute KeyValue conforming to the +// "process.interactive" semantic conventions. It represents the whether the +// process is connected to an interactive shell. +func ProcessInteractive(val bool) attribute.KeyValue { + return ProcessInteractiveKey.Bool(val) +} + +// ProcessOwner returns an attribute KeyValue conforming to the +// "process.owner" semantic conventions. It represents the username of the user +// that owns the process. +func ProcessOwner(val string) attribute.KeyValue { + return ProcessOwnerKey.String(val) +} + +// ProcessParentPID returns an attribute KeyValue conforming to the +// "process.parent_pid" semantic conventions. It represents the parent Process +// identifier (PPID). +func ProcessParentPID(val int) attribute.KeyValue { + return ProcessParentPIDKey.Int(val) +} + +// ProcessPID returns an attribute KeyValue conforming to the "process.pid" +// semantic conventions. It represents the process identifier (PID). +func ProcessPID(val int) attribute.KeyValue { + return ProcessPIDKey.Int(val) +} + +// ProcessRealUserID returns an attribute KeyValue conforming to the +// "process.real_user.id" semantic conventions. It represents the real user ID +// (RUID) of the process. +func ProcessRealUserID(val int) attribute.KeyValue { + return ProcessRealUserIDKey.Int(val) +} + +// ProcessRealUserName returns an attribute KeyValue conforming to the +// "process.real_user.name" semantic conventions. It represents the username of +// the real user of the process. +func ProcessRealUserName(val string) attribute.KeyValue { + return ProcessRealUserNameKey.String(val) +} + +// ProcessRuntimeDescription returns an attribute KeyValue conforming to the +// "process.runtime.description" semantic conventions. It represents an +// additional description about the runtime of the process, for example a +// specific vendor customization of the runtime environment. +func ProcessRuntimeDescription(val string) attribute.KeyValue { + return ProcessRuntimeDescriptionKey.String(val) +} + +// ProcessRuntimeName returns an attribute KeyValue conforming to the +// "process.runtime.name" semantic conventions. It represents the name of the +// runtime of this process. For compiled native binaries, this SHOULD be the +// name of the compiler. +func ProcessRuntimeName(val string) attribute.KeyValue { + return ProcessRuntimeNameKey.String(val) +} + +// ProcessRuntimeVersion returns an attribute KeyValue conforming to the +// "process.runtime.version" semantic conventions. It represents the version of +// the runtime of this process, as returned by the runtime without +// modification. +func ProcessRuntimeVersion(val string) attribute.KeyValue { + return ProcessRuntimeVersionKey.String(val) +} + +// ProcessSavedUserID returns an attribute KeyValue conforming to the +// "process.saved_user.id" semantic conventions. It represents the saved user +// ID (SUID) of the process. +func ProcessSavedUserID(val int) attribute.KeyValue { + return ProcessSavedUserIDKey.Int(val) +} + +// ProcessSavedUserName returns an attribute KeyValue conforming to the +// "process.saved_user.name" semantic conventions. It represents the username +// of the saved user. +func ProcessSavedUserName(val string) attribute.KeyValue { + return ProcessSavedUserNameKey.String(val) +} + +// ProcessSessionLeaderPID returns an attribute KeyValue conforming to the +// "process.session_leader.pid" semantic conventions. It represents the PID of +// the process's session leader. This is also the session ID (SID) of the +// process. +func ProcessSessionLeaderPID(val int) attribute.KeyValue { + return ProcessSessionLeaderPIDKey.Int(val) +} + +// ProcessUserID returns an attribute KeyValue conforming to the +// "process.user.id" semantic conventions. It represents the effective user ID +// (EUID) of the process. +func ProcessUserID(val int) attribute.KeyValue { + return ProcessUserIDKey.Int(val) +} + +// ProcessUserName returns an attribute KeyValue conforming to the +// "process.user.name" semantic conventions. It represents the username of the +// effective user of the process. +func ProcessUserName(val string) attribute.KeyValue { + return ProcessUserNameKey.String(val) +} + +// ProcessVpid returns an attribute KeyValue conforming to the +// "process.vpid" semantic conventions. It represents the virtual process +// identifier. +func ProcessVpid(val int) attribute.KeyValue { + return ProcessVpidKey.Int(val) +} + +// Attributes for process CPU +const ( + // ProcessCPUStateKey is the attribute Key conforming to the + // "process.cpu.state" semantic conventions. It represents the CPU state of + // the process. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + ProcessCPUStateKey = attribute.Key("process.cpu.state") +) + +var ( + // system + ProcessCPUStateSystem = ProcessCPUStateKey.String("system") + // user + ProcessCPUStateUser = ProcessCPUStateKey.String("user") + // wait + ProcessCPUStateWait = ProcessCPUStateKey.String("wait") +) + +// Attributes for remote procedure calls. +const ( + // RPCConnectRPCErrorCodeKey is the attribute Key conforming to the + // "rpc.connect_rpc.error_code" semantic conventions. It represents the + // [error codes](https://connect.build/docs/protocol/#error-codes) of the + // Connect request. Error codes are always string values. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + RPCConnectRPCErrorCodeKey = attribute.Key("rpc.connect_rpc.error_code") + + // RPCGRPCStatusCodeKey is the attribute Key conforming to the + // "rpc.grpc.status_code" semantic conventions. It represents the [numeric + // status + // code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of + // the gRPC request. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + RPCGRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code") + + // RPCJsonrpcErrorCodeKey is the attribute Key conforming to the + // "rpc.jsonrpc.error_code" semantic conventions. It represents the + // `error.code` property of response if it is an error response. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: -32700, 100 + RPCJsonrpcErrorCodeKey = attribute.Key("rpc.jsonrpc.error_code") + + // RPCJsonrpcErrorMessageKey is the attribute Key conforming to the + // "rpc.jsonrpc.error_message" semantic conventions. It represents the + // `error.message` property of response if it is an error response. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Parse error', 'User already exists' + RPCJsonrpcErrorMessageKey = attribute.Key("rpc.jsonrpc.error_message") + + // RPCJsonrpcRequestIDKey is the attribute Key conforming to the + // "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` + // property of request or response. Since protocol allows id to be int, + // string, `null` or missing (for notifications), value is expected to be + // cast to string for simplicity. Use empty string in case of `null` value. + // Omit entirely if this is a notification. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '10', 'request-7', '' + RPCJsonrpcRequestIDKey = attribute.Key("rpc.jsonrpc.request_id") + + // RPCJsonrpcVersionKey is the attribute Key conforming to the + // "rpc.jsonrpc.version" semantic conventions. It represents the protocol + // version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 + // doesn't specify this, the value can be omitted. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2.0', '1.0' + RPCJsonrpcVersionKey = attribute.Key("rpc.jsonrpc.version") + + // RPCMessageCompressedSizeKey is the attribute Key conforming to the + // "rpc.message.compressed_size" semantic conventions. It represents the + // compressed size of the message in bytes. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + RPCMessageCompressedSizeKey = attribute.Key("rpc.message.compressed_size") + + // RPCMessageIDKey is the attribute Key conforming to the "rpc.message.id" + // semantic conventions. It represents the mUST be calculated as two + // different counters starting from `1` one for sent messages and one for + // received message. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Note: This way we guarantee that the values will be consistent between + // different implementations. + RPCMessageIDKey = attribute.Key("rpc.message.id") + + // RPCMessageTypeKey is the attribute Key conforming to the + // "rpc.message.type" semantic conventions. It represents the whether this + // is a received or sent message. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + RPCMessageTypeKey = attribute.Key("rpc.message.type") + + // RPCMessageUncompressedSizeKey is the attribute Key conforming to the + // "rpc.message.uncompressed_size" semantic conventions. It represents the + // uncompressed size of the message in bytes. + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + RPCMessageUncompressedSizeKey = attribute.Key("rpc.message.uncompressed_size") + + // RPCMethodKey is the attribute Key conforming to the "rpc.method" + // semantic conventions. It represents the name of the (logical) method + // being called, must be equal to the $method part in the span name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'exampleMethod' + // Note: This is the logical name of the method from the RPC interface + // perspective, which can be different from the name of any implementing + // method/function. The `code.function` attribute may be used to store the + // latter (e.g., method actually executing the call on the server side, RPC + // client stub method on the client side). + RPCMethodKey = attribute.Key("rpc.method") + + // RPCServiceKey is the attribute Key conforming to the "rpc.service" + // semantic conventions. It represents the full (logical) name of the + // service being called, including its package name, if applicable. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'myservice.EchoService' + // Note: This is the logical name of the service from the RPC interface + // perspective, which can be different from the name of any implementing + // class. The `code.namespace` attribute may be used to store the latter + // (despite the attribute name, it may include a class name; e.g., class + // with method actually executing the call on the server side, RPC client + // stub class on the client side). + RPCServiceKey = attribute.Key("rpc.service") + + // RPCSystemKey is the attribute Key conforming to the "rpc.system" + // semantic conventions. It represents a string identifying the remoting + // system. See below for a list of well-known identifiers. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + RPCSystemKey = attribute.Key("rpc.system") +) + +var ( + // cancelled + RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled") + // unknown + RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown") + // invalid_argument + RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument") + // deadline_exceeded + RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded") + // not_found + RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found") + // already_exists + RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists") + // permission_denied + RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied") + // resource_exhausted + RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted") + // failed_precondition + RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition") + // aborted + RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted") + // out_of_range + RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range") + // unimplemented + RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented") + // internal + RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal") + // unavailable + RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable") + // data_loss + RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss") + // unauthenticated + RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated") +) + +var ( + // OK + RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0) + // CANCELLED + RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1) + // UNKNOWN + RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2) + // INVALID_ARGUMENT + RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3) + // DEADLINE_EXCEEDED + RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4) + // NOT_FOUND + RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5) + // ALREADY_EXISTS + RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6) + // PERMISSION_DENIED + RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7) + // RESOURCE_EXHAUSTED + RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8) + // FAILED_PRECONDITION + RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9) + // ABORTED + RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10) + // OUT_OF_RANGE + RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11) + // UNIMPLEMENTED + RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12) + // INTERNAL + RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13) + // UNAVAILABLE + RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14) + // DATA_LOSS + RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15) + // UNAUTHENTICATED + RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16) +) + +var ( + // sent + RPCMessageTypeSent = RPCMessageTypeKey.String("SENT") + // received + RPCMessageTypeReceived = RPCMessageTypeKey.String("RECEIVED") +) + +var ( + // gRPC + RPCSystemGRPC = RPCSystemKey.String("grpc") + // Java RMI + RPCSystemJavaRmi = RPCSystemKey.String("java_rmi") + // .NET WCF + RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf") + // Apache Dubbo + RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo") + // Connect RPC + RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc") +) + +// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the +// "rpc.jsonrpc.error_code" semantic conventions. It represents the +// `error.code` property of response if it is an error response. +func RPCJsonrpcErrorCode(val int) attribute.KeyValue { + return RPCJsonrpcErrorCodeKey.Int(val) +} + +// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the +// "rpc.jsonrpc.error_message" semantic conventions. It represents the +// `error.message` property of response if it is an error response. +func RPCJsonrpcErrorMessage(val string) attribute.KeyValue { + return RPCJsonrpcErrorMessageKey.String(val) +} + +// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the +// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` +// property of request or response. Since protocol allows id to be int, string, +// `null` or missing (for notifications), value is expected to be cast to +// string for simplicity. Use empty string in case of `null` value. Omit +// entirely if this is a notification. +func RPCJsonrpcRequestID(val string) attribute.KeyValue { + return RPCJsonrpcRequestIDKey.String(val) +} + +// RPCJsonrpcVersion returns an attribute KeyValue conforming to the +// "rpc.jsonrpc.version" semantic conventions. It represents the protocol +// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 +// doesn't specify this, the value can be omitted. +func RPCJsonrpcVersion(val string) attribute.KeyValue { + return RPCJsonrpcVersionKey.String(val) +} + +// RPCMessageCompressedSize returns an attribute KeyValue conforming to the +// "rpc.message.compressed_size" semantic conventions. It represents the +// compressed size of the message in bytes. +func RPCMessageCompressedSize(val int) attribute.KeyValue { + return RPCMessageCompressedSizeKey.Int(val) +} + +// RPCMessageID returns an attribute KeyValue conforming to the +// "rpc.message.id" semantic conventions. It represents the mUST be calculated +// as two different counters starting from `1` one for sent messages and one +// for received message. +func RPCMessageID(val int) attribute.KeyValue { + return RPCMessageIDKey.Int(val) +} + +// RPCMessageUncompressedSize returns an attribute KeyValue conforming to +// the "rpc.message.uncompressed_size" semantic conventions. It represents the +// uncompressed size of the message in bytes. +func RPCMessageUncompressedSize(val int) attribute.KeyValue { + return RPCMessageUncompressedSizeKey.Int(val) +} + +// RPCMethod returns an attribute KeyValue conforming to the "rpc.method" +// semantic conventions. It represents the name of the (logical) method being +// called, must be equal to the $method part in the span name. +func RPCMethod(val string) attribute.KeyValue { + return RPCMethodKey.String(val) +} + +// RPCService returns an attribute KeyValue conforming to the "rpc.service" +// semantic conventions. It represents the full (logical) name of the service +// being called, including its package name, if applicable. +func RPCService(val string) attribute.KeyValue { + return RPCServiceKey.String(val) +} + +// These attributes may be used to describe the server in a connection-based +// network interaction where there is one side that initiates the connection +// (the client is the side that initiates the connection). This covers all TCP +// network interactions since TCP is connection-based and one side initiates +// the connection (an exception is made for peer-to-peer communication over TCP +// where the "user-facing" surface of the protocol / API doesn't expose a clear +// notion of client and server). This also covers UDP network interactions +// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS. +const ( + // ServerAddressKey is the attribute Key conforming to the "server.address" + // semantic conventions. It represents the server domain name if available + // without reverse DNS lookup; otherwise, IP address or Unix domain socket + // name. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'example.com', '10.1.2.80', '/tmp/my.sock' + // Note: When observed from the client side, and when communicating through + // an intermediary, `server.address` SHOULD represent the server address + // behind any intermediaries, for example proxies, if it's available. + ServerAddressKey = attribute.Key("server.address") + + // ServerPortKey is the attribute Key conforming to the "server.port" + // semantic conventions. It represents the server port number. + // + // Type: int + // RequirementLevel: Optional + // Stability: stable + // Examples: 80, 8080, 443 + // Note: When observed from the client side, and when communicating through + // an intermediary, `server.port` SHOULD represent the server port behind + // any intermediaries, for example proxies, if it's available. + ServerPortKey = attribute.Key("server.port") +) + +// ServerAddress returns an attribute KeyValue conforming to the +// "server.address" semantic conventions. It represents the server domain name +// if available without reverse DNS lookup; otherwise, IP address or Unix +// domain socket name. +func ServerAddress(val string) attribute.KeyValue { + return ServerAddressKey.String(val) +} + +// ServerPort returns an attribute KeyValue conforming to the "server.port" +// semantic conventions. It represents the server port number. +func ServerPort(val int) attribute.KeyValue { + return ServerPortKey.Int(val) +} + +// A service instance. +const ( + // ServiceInstanceIDKey is the attribute Key conforming to the + // "service.instance.id" semantic conventions. It represents the string ID + // of the service instance. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '627cc493-f310-47de-96bd-71410b7dec09' + // Note: MUST be unique for each instance of the same + // `service.namespace,service.name` pair (in other words + // `service.namespace,service.name,service.instance.id` triplet MUST be + // globally unique). The ID helps to + // distinguish instances of the same service that exist at the same time + // (e.g. instances of a horizontally scaled + // service). + // + // Implementations, such as SDKs, are recommended to generate a random + // Version 1 or Version 4 [RFC + // 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an + // inherent unique ID as the source of + // this value if stability is desirable. In that case, the ID SHOULD be + // used as source of a UUID Version 5 and + // SHOULD use the following UUID as the namespace: + // `4d63009a-8d0f-11ee-aad7-4c796ed8e320`. + // + // UUIDs are typically recommended, as only an opaque value for the + // purposes of identifying a service instance is + // needed. Similar to what can be seen in the man page for the + // [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html) + // file, the underlying + // data, such as pod name and namespace should be treated as confidential, + // being the user's choice to expose it + // or not via another resource attribute. + // + // For applications running behind an application server (like unicorn), we + // do not recommend using one identifier + // for all processes participating in the application. Instead, it's + // recommended each division (e.g. a worker + // thread in unicorn) to have its own instance.id. + // + // It's not recommended for a Collector to set `service.instance.id` if it + // can't unambiguously determine the + // service instance that is generating that telemetry. For instance, + // creating an UUID based on `pod.name` will + // likely be wrong, as the Collector might not know from which container + // within that pod the telemetry originated. + // However, Collectors can set the `service.instance.id` if they can + // unambiguously determine the service instance + // for that telemetry. This is typically the case for scraping receivers, + // as they know the target address and + // port. + ServiceInstanceIDKey = attribute.Key("service.instance.id") + + // ServiceNameKey is the attribute Key conforming to the "service.name" + // semantic conventions. It represents the logical name of the service. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'shoppingcart' + // Note: MUST be the same for all instances of horizontally scaled + // services. If the value was not specified, SDKs MUST fallback to + // `unknown_service:` concatenated with + // [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If + // `process.executable.name` is not available, the value MUST be set to + // `unknown_service`. + ServiceNameKey = attribute.Key("service.name") + + // ServiceNamespaceKey is the attribute Key conforming to the + // "service.namespace" semantic conventions. It represents a namespace for + // `service.name`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Shop' + // Note: A string value having a meaning that helps to distinguish a group + // of services, for example the team name that owns a group of services. + // `service.name` is expected to be unique within the same namespace. If + // `service.namespace` is not specified in the Resource then `service.name` + // is expected to be unique for all services that have no explicit + // namespace defined (so the empty/unspecified namespace is simply one more + // valid namespace). Zero-length namespace string is assumed equal to + // unspecified namespace. + ServiceNamespaceKey = attribute.Key("service.namespace") + + // ServiceVersionKey is the attribute Key conforming to the + // "service.version" semantic conventions. It represents the version string + // of the service API or implementation. The format is not defined by these + // conventions. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '2.0.0', 'a01dbef8a' + ServiceVersionKey = attribute.Key("service.version") +) + +// ServiceInstanceID returns an attribute KeyValue conforming to the +// "service.instance.id" semantic conventions. It represents the string ID of +// the service instance. +func ServiceInstanceID(val string) attribute.KeyValue { + return ServiceInstanceIDKey.String(val) +} + +// ServiceName returns an attribute KeyValue conforming to the +// "service.name" semantic conventions. It represents the logical name of the +// service. +func ServiceName(val string) attribute.KeyValue { + return ServiceNameKey.String(val) +} + +// ServiceNamespace returns an attribute KeyValue conforming to the +// "service.namespace" semantic conventions. It represents a namespace for +// `service.name`. +func ServiceNamespace(val string) attribute.KeyValue { + return ServiceNamespaceKey.String(val) +} + +// ServiceVersion returns an attribute KeyValue conforming to the +// "service.version" semantic conventions. It represents the version string of +// the service API or implementation. The format is not defined by these +// conventions. +func ServiceVersion(val string) attribute.KeyValue { + return ServiceVersionKey.String(val) +} + +// Session is defined as the period of time encompassing all activities +// performed by the application and the actions executed by the end user. +// Consequently, a Session is represented as a collection of Logs, Events, and +// Spans emitted by the Client Application throughout the Session's duration. +// Each Session is assigned a unique identifier, which is included as an +// attribute in the Logs, Events, and Spans generated during the Session's +// lifecycle. +// When a session reaches end of life, typically due to user inactivity or +// session timeout, a new session identifier will be assigned. The previous +// session identifier may be provided by the instrumentation so that telemetry +// backends can link the two sessions. +const ( + // SessionIDKey is the attribute Key conforming to the "session.id" + // semantic conventions. It represents a unique id to identify a session. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '00112233-4455-6677-8899-aabbccddeeff' + SessionIDKey = attribute.Key("session.id") + + // SessionPreviousIDKey is the attribute Key conforming to the + // "session.previous_id" semantic conventions. It represents the previous + // `session.id` for this user, when known. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '00112233-4455-6677-8899-aabbccddeeff' + SessionPreviousIDKey = attribute.Key("session.previous_id") +) + +// SessionID returns an attribute KeyValue conforming to the "session.id" +// semantic conventions. It represents a unique id to identify a session. +func SessionID(val string) attribute.KeyValue { + return SessionIDKey.String(val) +} + +// SessionPreviousID returns an attribute KeyValue conforming to the +// "session.previous_id" semantic conventions. It represents the previous +// `session.id` for this user, when known. +func SessionPreviousID(val string) attribute.KeyValue { + return SessionPreviousIDKey.String(val) +} + +// SignalR attributes +const ( + // SignalrConnectionStatusKey is the attribute Key conforming to the + // "signalr.connection.status" semantic conventions. It represents the + // signalR HTTP connection closure status. + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'app_shutdown', 'timeout' + SignalrConnectionStatusKey = attribute.Key("signalr.connection.status") + + // SignalrTransportKey is the attribute Key conforming to the + // "signalr.transport" semantic conventions. It represents the [SignalR + // transport + // type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md) + // + // Type: Enum + // RequirementLevel: Optional + // Stability: stable + // Examples: 'web_sockets', 'long_polling' + SignalrTransportKey = attribute.Key("signalr.transport") +) + +var ( + // The connection was closed normally + SignalrConnectionStatusNormalClosure = SignalrConnectionStatusKey.String("normal_closure") + // The connection was closed due to a timeout + SignalrConnectionStatusTimeout = SignalrConnectionStatusKey.String("timeout") + // The connection was closed because the app is shutting down + SignalrConnectionStatusAppShutdown = SignalrConnectionStatusKey.String("app_shutdown") +) + +var ( + // ServerSentEvents protocol + SignalrTransportServerSentEvents = SignalrTransportKey.String("server_sent_events") + // LongPolling protocol + SignalrTransportLongPolling = SignalrTransportKey.String("long_polling") + // WebSockets protocol + SignalrTransportWebSockets = SignalrTransportKey.String("web_sockets") +) + +// These attributes may be used to describe the sender of a network +// exchange/packet. These should be used when there is no client/server +// relationship between the two sides, or when that relationship is unknown. +// This covers low-level network interactions (e.g. packet tracing) where you +// don't know if there was a connection or which side initiated it. This also +// covers unidirectional UDP flows and peer-to-peer communication where the +// "user-facing" surface of the protocol / API doesn't expose a clear notion of +// client and server. +const ( + // SourceAddressKey is the attribute Key conforming to the "source.address" + // semantic conventions. It represents the source address - domain name if + // available without reverse DNS lookup; otherwise, IP address or Unix + // domain socket name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'source.example.com', '10.1.2.80', '/tmp/my.sock' + // Note: When observed from the destination side, and when communicating + // through an intermediary, `source.address` SHOULD represent the source + // address behind any intermediaries, for example proxies, if it's + // available. + SourceAddressKey = attribute.Key("source.address") + + // SourcePortKey is the attribute Key conforming to the "source.port" + // semantic conventions. It represents the source port number + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 3389, 2888 + SourcePortKey = attribute.Key("source.port") +) + +// SourceAddress returns an attribute KeyValue conforming to the +// "source.address" semantic conventions. It represents the source address - +// domain name if available without reverse DNS lookup; otherwise, IP address +// or Unix domain socket name. +func SourceAddress(val string) attribute.KeyValue { + return SourceAddressKey.String(val) +} + +// SourcePort returns an attribute KeyValue conforming to the "source.port" +// semantic conventions. It represents the source port number +func SourcePort(val int) attribute.KeyValue { + return SourcePortKey.Int(val) +} + +// Describes System attributes +const ( + // SystemDeviceKey is the attribute Key conforming to the "system.device" + // semantic conventions. It represents the device identifier + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '(identifier)' + SystemDeviceKey = attribute.Key("system.device") +) + +// SystemDevice returns an attribute KeyValue conforming to the +// "system.device" semantic conventions. It represents the device identifier +func SystemDevice(val string) attribute.KeyValue { + return SystemDeviceKey.String(val) +} + +// Describes System CPU attributes +const ( + // SystemCPULogicalNumberKey is the attribute Key conforming to the + // "system.cpu.logical_number" semantic conventions. It represents the + // logical CPU number [0..n-1] + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 1 + SystemCPULogicalNumberKey = attribute.Key("system.cpu.logical_number") + + // SystemCPUStateKey is the attribute Key conforming to the + // "system.cpu.state" semantic conventions. It represents the state of the + // CPU + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'idle', 'interrupt' + SystemCPUStateKey = attribute.Key("system.cpu.state") +) + +var ( + // user + SystemCPUStateUser = SystemCPUStateKey.String("user") + // system + SystemCPUStateSystem = SystemCPUStateKey.String("system") + // nice + SystemCPUStateNice = SystemCPUStateKey.String("nice") + // idle + SystemCPUStateIdle = SystemCPUStateKey.String("idle") + // iowait + SystemCPUStateIowait = SystemCPUStateKey.String("iowait") + // interrupt + SystemCPUStateInterrupt = SystemCPUStateKey.String("interrupt") + // steal + SystemCPUStateSteal = SystemCPUStateKey.String("steal") +) + +// SystemCPULogicalNumber returns an attribute KeyValue conforming to the +// "system.cpu.logical_number" semantic conventions. It represents the logical +// CPU number [0..n-1] +func SystemCPULogicalNumber(val int) attribute.KeyValue { + return SystemCPULogicalNumberKey.Int(val) +} + +// Describes System Memory attributes +const ( + // SystemMemoryStateKey is the attribute Key conforming to the + // "system.memory.state" semantic conventions. It represents the memory + // state + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'free', 'cached' + SystemMemoryStateKey = attribute.Key("system.memory.state") +) + +var ( + // used + SystemMemoryStateUsed = SystemMemoryStateKey.String("used") + // free + SystemMemoryStateFree = SystemMemoryStateKey.String("free") + // shared + SystemMemoryStateShared = SystemMemoryStateKey.String("shared") + // buffers + SystemMemoryStateBuffers = SystemMemoryStateKey.String("buffers") + // cached + SystemMemoryStateCached = SystemMemoryStateKey.String("cached") +) + +// Describes System Memory Paging attributes +const ( + // SystemPagingDirectionKey is the attribute Key conforming to the + // "system.paging.direction" semantic conventions. It represents the paging + // access direction + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'in' + SystemPagingDirectionKey = attribute.Key("system.paging.direction") + + // SystemPagingStateKey is the attribute Key conforming to the + // "system.paging.state" semantic conventions. It represents the memory + // paging state + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'free' + SystemPagingStateKey = attribute.Key("system.paging.state") + + // SystemPagingTypeKey is the attribute Key conforming to the + // "system.paging.type" semantic conventions. It represents the memory + // paging type + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'minor' + SystemPagingTypeKey = attribute.Key("system.paging.type") +) + +var ( + // in + SystemPagingDirectionIn = SystemPagingDirectionKey.String("in") + // out + SystemPagingDirectionOut = SystemPagingDirectionKey.String("out") +) + +var ( + // used + SystemPagingStateUsed = SystemPagingStateKey.String("used") + // free + SystemPagingStateFree = SystemPagingStateKey.String("free") +) + +var ( + // major + SystemPagingTypeMajor = SystemPagingTypeKey.String("major") + // minor + SystemPagingTypeMinor = SystemPagingTypeKey.String("minor") +) + +// Describes Filesystem attributes +const ( + // SystemFilesystemModeKey is the attribute Key conforming to the + // "system.filesystem.mode" semantic conventions. It represents the + // filesystem mode + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'rw, ro' + SystemFilesystemModeKey = attribute.Key("system.filesystem.mode") + + // SystemFilesystemMountpointKey is the attribute Key conforming to the + // "system.filesystem.mountpoint" semantic conventions. It represents the + // filesystem mount path + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/mnt/data' + SystemFilesystemMountpointKey = attribute.Key("system.filesystem.mountpoint") + + // SystemFilesystemStateKey is the attribute Key conforming to the + // "system.filesystem.state" semantic conventions. It represents the + // filesystem state + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'used' + SystemFilesystemStateKey = attribute.Key("system.filesystem.state") + + // SystemFilesystemTypeKey is the attribute Key conforming to the + // "system.filesystem.type" semantic conventions. It represents the + // filesystem type + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'ext4' + SystemFilesystemTypeKey = attribute.Key("system.filesystem.type") +) + +var ( + // used + SystemFilesystemStateUsed = SystemFilesystemStateKey.String("used") + // free + SystemFilesystemStateFree = SystemFilesystemStateKey.String("free") + // reserved + SystemFilesystemStateReserved = SystemFilesystemStateKey.String("reserved") +) + +var ( + // fat32 + SystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String("fat32") + // exfat + SystemFilesystemTypeExfat = SystemFilesystemTypeKey.String("exfat") + // ntfs + SystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String("ntfs") + // refs + SystemFilesystemTypeRefs = SystemFilesystemTypeKey.String("refs") + // hfsplus + SystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String("hfsplus") + // ext4 + SystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String("ext4") +) + +// SystemFilesystemMode returns an attribute KeyValue conforming to the +// "system.filesystem.mode" semantic conventions. It represents the filesystem +// mode +func SystemFilesystemMode(val string) attribute.KeyValue { + return SystemFilesystemModeKey.String(val) +} + +// SystemFilesystemMountpoint returns an attribute KeyValue conforming to +// the "system.filesystem.mountpoint" semantic conventions. It represents the +// filesystem mount path +func SystemFilesystemMountpoint(val string) attribute.KeyValue { + return SystemFilesystemMountpointKey.String(val) +} + +// Describes Network attributes +const ( + // SystemNetworkStateKey is the attribute Key conforming to the + // "system.network.state" semantic conventions. It represents a stateless + // protocol MUST NOT set this attribute + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'close_wait' + SystemNetworkStateKey = attribute.Key("system.network.state") +) + +var ( + // close + SystemNetworkStateClose = SystemNetworkStateKey.String("close") + // close_wait + SystemNetworkStateCloseWait = SystemNetworkStateKey.String("close_wait") + // closing + SystemNetworkStateClosing = SystemNetworkStateKey.String("closing") + // delete + SystemNetworkStateDelete = SystemNetworkStateKey.String("delete") + // established + SystemNetworkStateEstablished = SystemNetworkStateKey.String("established") + // fin_wait_1 + SystemNetworkStateFinWait1 = SystemNetworkStateKey.String("fin_wait_1") + // fin_wait_2 + SystemNetworkStateFinWait2 = SystemNetworkStateKey.String("fin_wait_2") + // last_ack + SystemNetworkStateLastAck = SystemNetworkStateKey.String("last_ack") + // listen + SystemNetworkStateListen = SystemNetworkStateKey.String("listen") + // syn_recv + SystemNetworkStateSynRecv = SystemNetworkStateKey.String("syn_recv") + // syn_sent + SystemNetworkStateSynSent = SystemNetworkStateKey.String("syn_sent") + // time_wait + SystemNetworkStateTimeWait = SystemNetworkStateKey.String("time_wait") +) + +// Describes System Process attributes +const ( + // SystemProcessStatusKey is the attribute Key conforming to the + // "system.process.status" semantic conventions. It represents the process + // state, e.g., [Linux Process State + // Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES) + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'running' + SystemProcessStatusKey = attribute.Key("system.process.status") +) + +var ( + // running + SystemProcessStatusRunning = SystemProcessStatusKey.String("running") + // sleeping + SystemProcessStatusSleeping = SystemProcessStatusKey.String("sleeping") + // stopped + SystemProcessStatusStopped = SystemProcessStatusKey.String("stopped") + // defunct + SystemProcessStatusDefunct = SystemProcessStatusKey.String("defunct") +) + +// Attributes for telemetry SDK. +const ( + // TelemetrySDKLanguageKey is the attribute Key conforming to the + // "telemetry.sdk.language" semantic conventions. It represents the + // language of the telemetry SDK. + // + // Type: Enum + // RequirementLevel: Required + // Stability: stable + TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language") + + // TelemetrySDKNameKey is the attribute Key conforming to the + // "telemetry.sdk.name" semantic conventions. It represents the name of the + // telemetry SDK as defined above. + // + // Type: string + // RequirementLevel: Required + // Stability: stable + // Examples: 'opentelemetry' + // Note: The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute + // to `opentelemetry`. + // If another SDK, like a fork or a vendor-provided implementation, is + // used, this SDK MUST set the + // `telemetry.sdk.name` attribute to the fully-qualified class or module + // name of this SDK's main entry point + // or another suitable identifier depending on the language. + // The identifier `opentelemetry` is reserved and MUST NOT be used in this + // case. + // All custom identifiers SHOULD be stable across different versions of an + // implementation. + TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name") + + // TelemetrySDKVersionKey is the attribute Key conforming to the + // "telemetry.sdk.version" semantic conventions. It represents the version + // string of the telemetry SDK. + // + // Type: string + // RequirementLevel: Required + // Stability: stable + // Examples: '1.2.3' + TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version") + + // TelemetryDistroNameKey is the attribute Key conforming to the + // "telemetry.distro.name" semantic conventions. It represents the name of + // the auto instrumentation agent or distribution, if used. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'parts-unlimited-java' + // Note: Official auto instrumentation agents and distributions SHOULD set + // the `telemetry.distro.name` attribute to + // a string starting with `opentelemetry-`, e.g. + // `opentelemetry-java-instrumentation`. + TelemetryDistroNameKey = attribute.Key("telemetry.distro.name") + + // TelemetryDistroVersionKey is the attribute Key conforming to the + // "telemetry.distro.version" semantic conventions. It represents the + // version string of the auto instrumentation agent or distribution, if + // used. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1.2.3' + TelemetryDistroVersionKey = attribute.Key("telemetry.distro.version") +) + +var ( + // cpp + TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp") + // dotnet + TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet") + // erlang + TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang") + // go + TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go") + // java + TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java") + // nodejs + TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs") + // php + TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php") + // python + TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python") + // ruby + TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby") + // rust + TelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String("rust") + // swift + TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift") + // webjs + TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs") +) + +// TelemetrySDKName returns an attribute KeyValue conforming to the +// "telemetry.sdk.name" semantic conventions. It represents the name of the +// telemetry SDK as defined above. +func TelemetrySDKName(val string) attribute.KeyValue { + return TelemetrySDKNameKey.String(val) +} + +// TelemetrySDKVersion returns an attribute KeyValue conforming to the +// "telemetry.sdk.version" semantic conventions. It represents the version +// string of the telemetry SDK. +func TelemetrySDKVersion(val string) attribute.KeyValue { + return TelemetrySDKVersionKey.String(val) +} + +// TelemetryDistroName returns an attribute KeyValue conforming to the +// "telemetry.distro.name" semantic conventions. It represents the name of the +// auto instrumentation agent or distribution, if used. +func TelemetryDistroName(val string) attribute.KeyValue { + return TelemetryDistroNameKey.String(val) +} + +// TelemetryDistroVersion returns an attribute KeyValue conforming to the +// "telemetry.distro.version" semantic conventions. It represents the version +// string of the auto instrumentation agent or distribution, if used. +func TelemetryDistroVersion(val string) attribute.KeyValue { + return TelemetryDistroVersionKey.String(val) +} + +// These attributes may be used for any operation to store information about a +// thread that started a span. +const ( + // ThreadIDKey is the attribute Key conforming to the "thread.id" semantic + // conventions. It represents the current "managed" thread ID (as opposed + // to OS thread ID). + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 42 + ThreadIDKey = attribute.Key("thread.id") + + // ThreadNameKey is the attribute Key conforming to the "thread.name" + // semantic conventions. It represents the current thread name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'main' + ThreadNameKey = attribute.Key("thread.name") +) + +// ThreadID returns an attribute KeyValue conforming to the "thread.id" +// semantic conventions. It represents the current "managed" thread ID (as +// opposed to OS thread ID). +func ThreadID(val int) attribute.KeyValue { + return ThreadIDKey.Int(val) +} + +// ThreadName returns an attribute KeyValue conforming to the "thread.name" +// semantic conventions. It represents the current thread name. +func ThreadName(val string) attribute.KeyValue { + return ThreadNameKey.String(val) +} + +// Semantic convention attributes in the TLS namespace. +const ( + // TLSCipherKey is the attribute Key conforming to the "tls.cipher" + // semantic conventions. It represents the string indicating the + // [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) + // used during the current connection. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'TLS_RSA_WITH_3DES_EDE_CBC_SHA', + // 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256' + // Note: The values allowed for `tls.cipher` MUST be one of the + // `Descriptions` of the [registered TLS Cipher + // Suits](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4). + TLSCipherKey = attribute.Key("tls.cipher") + + // TLSClientCertificateKey is the attribute Key conforming to the + // "tls.client.certificate" semantic conventions. It represents the + // pEM-encoded stand-alone certificate offered by the client. This is + // usually mutually-exclusive of `client.certificate_chain` since this + // value also exists in that list. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MII...' + TLSClientCertificateKey = attribute.Key("tls.client.certificate") + + // TLSClientCertificateChainKey is the attribute Key conforming to the + // "tls.client.certificate_chain" semantic conventions. It represents the + // array of PEM-encoded certificates that make up the certificate chain + // offered by the client. This is usually mutually-exclusive of + // `client.certificate` since that value should be the first certificate in + // the chain. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MII...', 'MI...' + TLSClientCertificateChainKey = attribute.Key("tls.client.certificate_chain") + + // TLSClientHashMd5Key is the attribute Key conforming to the + // "tls.client.hash.md5" semantic conventions. It represents the + // certificate fingerprint using the MD5 digest of DER-encoded version of + // certificate offered by the client. For consistency with other hash + // values, this value should be formatted as an uppercase hash. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC' + TLSClientHashMd5Key = attribute.Key("tls.client.hash.md5") + + // TLSClientHashSha1Key is the attribute Key conforming to the + // "tls.client.hash.sha1" semantic conventions. It represents the + // certificate fingerprint using the SHA1 digest of DER-encoded version of + // certificate offered by the client. For consistency with other hash + // values, this value should be formatted as an uppercase hash. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A' + TLSClientHashSha1Key = attribute.Key("tls.client.hash.sha1") + + // TLSClientHashSha256Key is the attribute Key conforming to the + // "tls.client.hash.sha256" semantic conventions. It represents the + // certificate fingerprint using the SHA256 digest of DER-encoded version + // of certificate offered by the client. For consistency with other hash + // values, this value should be formatted as an uppercase hash. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0' + TLSClientHashSha256Key = attribute.Key("tls.client.hash.sha256") + + // TLSClientIssuerKey is the attribute Key conforming to the + // "tls.client.issuer" semantic conventions. It represents the + // distinguished name of + // [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) + // of the issuer of the x.509 certificate presented by the client. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, + // DC=com' + TLSClientIssuerKey = attribute.Key("tls.client.issuer") + + // TLSClientJa3Key is the attribute Key conforming to the "tls.client.ja3" + // semantic conventions. It represents a hash that identifies clients based + // on how they perform an SSL/TLS handshake. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'd4e5b18d6b55c71272893221c96ba240' + TLSClientJa3Key = attribute.Key("tls.client.ja3") + + // TLSClientNotAfterKey is the attribute Key conforming to the + // "tls.client.not_after" semantic conventions. It represents the date/Time + // indicating when client certificate is no longer considered valid. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2021-01-01T00:00:00.000Z' + TLSClientNotAfterKey = attribute.Key("tls.client.not_after") + + // TLSClientNotBeforeKey is the attribute Key conforming to the + // "tls.client.not_before" semantic conventions. It represents the + // date/Time indicating when client certificate is first considered valid. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1970-01-01T00:00:00.000Z' + TLSClientNotBeforeKey = attribute.Key("tls.client.not_before") + + // TLSClientServerNameKey is the attribute Key conforming to the + // "tls.client.server_name" semantic conventions. It represents the also + // called an SNI, this tells the server which hostname to which the client + // is attempting to connect to. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'opentelemetry.io' + TLSClientServerNameKey = attribute.Key("tls.client.server_name") + + // TLSClientSubjectKey is the attribute Key conforming to the + // "tls.client.subject" semantic conventions. It represents the + // distinguished name of subject of the x.509 certificate presented by the + // client. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'CN=myclient, OU=Documentation Team, DC=example, DC=com' + TLSClientSubjectKey = attribute.Key("tls.client.subject") + + // TLSClientSupportedCiphersKey is the attribute Key conforming to the + // "tls.client.supported_ciphers" semantic conventions. It represents the + // array of ciphers offered by the client during the client hello. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: '"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + // "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."' + TLSClientSupportedCiphersKey = attribute.Key("tls.client.supported_ciphers") + + // TLSCurveKey is the attribute Key conforming to the "tls.curve" semantic + // conventions. It represents the string indicating the curve used for the + // given cipher, when applicable + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'secp256r1' + TLSCurveKey = attribute.Key("tls.curve") + + // TLSEstablishedKey is the attribute Key conforming to the + // "tls.established" semantic conventions. It represents the boolean flag + // indicating if the TLS negotiation was successful and transitioned to an + // encrypted tunnel. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + // Examples: True + TLSEstablishedKey = attribute.Key("tls.established") + + // TLSNextProtocolKey is the attribute Key conforming to the + // "tls.next_protocol" semantic conventions. It represents the string + // indicating the protocol being tunneled. Per the values in the [IANA + // registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), + // this string should be lower case. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'http/1.1' + TLSNextProtocolKey = attribute.Key("tls.next_protocol") + + // TLSProtocolNameKey is the attribute Key conforming to the + // "tls.protocol.name" semantic conventions. It represents the normalized + // lowercase protocol name parsed from original string of the negotiated + // [SSL/TLS protocol + // version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) + // + // Type: Enum + // RequirementLevel: Optional + // Stability: experimental + TLSProtocolNameKey = attribute.Key("tls.protocol.name") + + // TLSProtocolVersionKey is the attribute Key conforming to the + // "tls.protocol.version" semantic conventions. It represents the numeric + // part of the version parsed from the original string of the negotiated + // [SSL/TLS protocol + // version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1.2', '3' + TLSProtocolVersionKey = attribute.Key("tls.protocol.version") + + // TLSResumedKey is the attribute Key conforming to the "tls.resumed" + // semantic conventions. It represents the boolean flag indicating if this + // TLS connection was resumed from an existing TLS negotiation. + // + // Type: boolean + // RequirementLevel: Optional + // Stability: experimental + // Examples: True + TLSResumedKey = attribute.Key("tls.resumed") + + // TLSServerCertificateKey is the attribute Key conforming to the + // "tls.server.certificate" semantic conventions. It represents the + // pEM-encoded stand-alone certificate offered by the server. This is + // usually mutually-exclusive of `server.certificate_chain` since this + // value also exists in that list. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MII...' + TLSServerCertificateKey = attribute.Key("tls.server.certificate") + + // TLSServerCertificateChainKey is the attribute Key conforming to the + // "tls.server.certificate_chain" semantic conventions. It represents the + // array of PEM-encoded certificates that make up the certificate chain + // offered by the server. This is usually mutually-exclusive of + // `server.certificate` since that value should be the first certificate in + // the chain. + // + // Type: string[] + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'MII...', 'MI...' + TLSServerCertificateChainKey = attribute.Key("tls.server.certificate_chain") + + // TLSServerHashMd5Key is the attribute Key conforming to the + // "tls.server.hash.md5" semantic conventions. It represents the + // certificate fingerprint using the MD5 digest of DER-encoded version of + // certificate offered by the server. For consistency with other hash + // values, this value should be formatted as an uppercase hash. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC' + TLSServerHashMd5Key = attribute.Key("tls.server.hash.md5") + + // TLSServerHashSha1Key is the attribute Key conforming to the + // "tls.server.hash.sha1" semantic conventions. It represents the + // certificate fingerprint using the SHA1 digest of DER-encoded version of + // certificate offered by the server. For consistency with other hash + // values, this value should be formatted as an uppercase hash. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A' + TLSServerHashSha1Key = attribute.Key("tls.server.hash.sha1") + + // TLSServerHashSha256Key is the attribute Key conforming to the + // "tls.server.hash.sha256" semantic conventions. It represents the + // certificate fingerprint using the SHA256 digest of DER-encoded version + // of certificate offered by the server. For consistency with other hash + // values, this value should be formatted as an uppercase hash. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: + // '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0' + TLSServerHashSha256Key = attribute.Key("tls.server.hash.sha256") + + // TLSServerIssuerKey is the attribute Key conforming to the + // "tls.server.issuer" semantic conventions. It represents the + // distinguished name of + // [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) + // of the issuer of the x.509 certificate presented by the client. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, + // DC=com' + TLSServerIssuerKey = attribute.Key("tls.server.issuer") + + // TLSServerJa3sKey is the attribute Key conforming to the + // "tls.server.ja3s" semantic conventions. It represents a hash that + // identifies servers based on how they perform an SSL/TLS handshake. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'd4e5b18d6b55c71272893221c96ba240' + TLSServerJa3sKey = attribute.Key("tls.server.ja3s") + + // TLSServerNotAfterKey is the attribute Key conforming to the + // "tls.server.not_after" semantic conventions. It represents the date/Time + // indicating when server certificate is no longer considered valid. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '2021-01-01T00:00:00.000Z' + TLSServerNotAfterKey = attribute.Key("tls.server.not_after") + + // TLSServerNotBeforeKey is the attribute Key conforming to the + // "tls.server.not_before" semantic conventions. It represents the + // date/Time indicating when server certificate is first considered valid. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '1970-01-01T00:00:00.000Z' + TLSServerNotBeforeKey = attribute.Key("tls.server.not_before") + + // TLSServerSubjectKey is the attribute Key conforming to the + // "tls.server.subject" semantic conventions. It represents the + // distinguished name of subject of the x.509 certificate presented by the + // server. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'CN=myserver, OU=Documentation Team, DC=example, DC=com' + TLSServerSubjectKey = attribute.Key("tls.server.subject") +) + +var ( + // ssl + TLSProtocolNameSsl = TLSProtocolNameKey.String("ssl") + // tls + TLSProtocolNameTLS = TLSProtocolNameKey.String("tls") +) + +// TLSCipher returns an attribute KeyValue conforming to the "tls.cipher" +// semantic conventions. It represents the string indicating the +// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) used +// during the current connection. +func TLSCipher(val string) attribute.KeyValue { + return TLSCipherKey.String(val) +} + +// TLSClientCertificate returns an attribute KeyValue conforming to the +// "tls.client.certificate" semantic conventions. It represents the pEM-encoded +// stand-alone certificate offered by the client. This is usually +// mutually-exclusive of `client.certificate_chain` since this value also +// exists in that list. +func TLSClientCertificate(val string) attribute.KeyValue { + return TLSClientCertificateKey.String(val) +} + +// TLSClientCertificateChain returns an attribute KeyValue conforming to the +// "tls.client.certificate_chain" semantic conventions. It represents the array +// of PEM-encoded certificates that make up the certificate chain offered by +// the client. This is usually mutually-exclusive of `client.certificate` since +// that value should be the first certificate in the chain. +func TLSClientCertificateChain(val ...string) attribute.KeyValue { + return TLSClientCertificateChainKey.StringSlice(val) +} + +// TLSClientHashMd5 returns an attribute KeyValue conforming to the +// "tls.client.hash.md5" semantic conventions. It represents the certificate +// fingerprint using the MD5 digest of DER-encoded version of certificate +// offered by the client. For consistency with other hash values, this value +// should be formatted as an uppercase hash. +func TLSClientHashMd5(val string) attribute.KeyValue { + return TLSClientHashMd5Key.String(val) +} + +// TLSClientHashSha1 returns an attribute KeyValue conforming to the +// "tls.client.hash.sha1" semantic conventions. It represents the certificate +// fingerprint using the SHA1 digest of DER-encoded version of certificate +// offered by the client. For consistency with other hash values, this value +// should be formatted as an uppercase hash. +func TLSClientHashSha1(val string) attribute.KeyValue { + return TLSClientHashSha1Key.String(val) +} + +// TLSClientHashSha256 returns an attribute KeyValue conforming to the +// "tls.client.hash.sha256" semantic conventions. It represents the certificate +// fingerprint using the SHA256 digest of DER-encoded version of certificate +// offered by the client. For consistency with other hash values, this value +// should be formatted as an uppercase hash. +func TLSClientHashSha256(val string) attribute.KeyValue { + return TLSClientHashSha256Key.String(val) +} + +// TLSClientIssuer returns an attribute KeyValue conforming to the +// "tls.client.issuer" semantic conventions. It represents the distinguished +// name of +// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of +// the issuer of the x.509 certificate presented by the client. +func TLSClientIssuer(val string) attribute.KeyValue { + return TLSClientIssuerKey.String(val) +} + +// TLSClientJa3 returns an attribute KeyValue conforming to the +// "tls.client.ja3" semantic conventions. It represents a hash that identifies +// clients based on how they perform an SSL/TLS handshake. +func TLSClientJa3(val string) attribute.KeyValue { + return TLSClientJa3Key.String(val) +} + +// TLSClientNotAfter returns an attribute KeyValue conforming to the +// "tls.client.not_after" semantic conventions. It represents the date/Time +// indicating when client certificate is no longer considered valid. +func TLSClientNotAfter(val string) attribute.KeyValue { + return TLSClientNotAfterKey.String(val) +} + +// TLSClientNotBefore returns an attribute KeyValue conforming to the +// "tls.client.not_before" semantic conventions. It represents the date/Time +// indicating when client certificate is first considered valid. +func TLSClientNotBefore(val string) attribute.KeyValue { + return TLSClientNotBeforeKey.String(val) +} + +// TLSClientServerName returns an attribute KeyValue conforming to the +// "tls.client.server_name" semantic conventions. It represents the also called +// an SNI, this tells the server which hostname to which the client is +// attempting to connect to. +func TLSClientServerName(val string) attribute.KeyValue { + return TLSClientServerNameKey.String(val) +} + +// TLSClientSubject returns an attribute KeyValue conforming to the +// "tls.client.subject" semantic conventions. It represents the distinguished +// name of subject of the x.509 certificate presented by the client. +func TLSClientSubject(val string) attribute.KeyValue { + return TLSClientSubjectKey.String(val) +} + +// TLSClientSupportedCiphers returns an attribute KeyValue conforming to the +// "tls.client.supported_ciphers" semantic conventions. It represents the array +// of ciphers offered by the client during the client hello. +func TLSClientSupportedCiphers(val ...string) attribute.KeyValue { + return TLSClientSupportedCiphersKey.StringSlice(val) +} + +// TLSCurve returns an attribute KeyValue conforming to the "tls.curve" +// semantic conventions. It represents the string indicating the curve used for +// the given cipher, when applicable +func TLSCurve(val string) attribute.KeyValue { + return TLSCurveKey.String(val) +} + +// TLSEstablished returns an attribute KeyValue conforming to the +// "tls.established" semantic conventions. It represents the boolean flag +// indicating if the TLS negotiation was successful and transitioned to an +// encrypted tunnel. +func TLSEstablished(val bool) attribute.KeyValue { + return TLSEstablishedKey.Bool(val) +} + +// TLSNextProtocol returns an attribute KeyValue conforming to the +// "tls.next_protocol" semantic conventions. It represents the string +// indicating the protocol being tunneled. Per the values in the [IANA +// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), +// this string should be lower case. +func TLSNextProtocol(val string) attribute.KeyValue { + return TLSNextProtocolKey.String(val) +} + +// TLSProtocolVersion returns an attribute KeyValue conforming to the +// "tls.protocol.version" semantic conventions. It represents the numeric part +// of the version parsed from the original string of the negotiated [SSL/TLS +// protocol +// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) +func TLSProtocolVersion(val string) attribute.KeyValue { + return TLSProtocolVersionKey.String(val) +} + +// TLSResumed returns an attribute KeyValue conforming to the "tls.resumed" +// semantic conventions. It represents the boolean flag indicating if this TLS +// connection was resumed from an existing TLS negotiation. +func TLSResumed(val bool) attribute.KeyValue { + return TLSResumedKey.Bool(val) +} + +// TLSServerCertificate returns an attribute KeyValue conforming to the +// "tls.server.certificate" semantic conventions. It represents the pEM-encoded +// stand-alone certificate offered by the server. This is usually +// mutually-exclusive of `server.certificate_chain` since this value also +// exists in that list. +func TLSServerCertificate(val string) attribute.KeyValue { + return TLSServerCertificateKey.String(val) +} + +// TLSServerCertificateChain returns an attribute KeyValue conforming to the +// "tls.server.certificate_chain" semantic conventions. It represents the array +// of PEM-encoded certificates that make up the certificate chain offered by +// the server. This is usually mutually-exclusive of `server.certificate` since +// that value should be the first certificate in the chain. +func TLSServerCertificateChain(val ...string) attribute.KeyValue { + return TLSServerCertificateChainKey.StringSlice(val) +} + +// TLSServerHashMd5 returns an attribute KeyValue conforming to the +// "tls.server.hash.md5" semantic conventions. It represents the certificate +// fingerprint using the MD5 digest of DER-encoded version of certificate +// offered by the server. For consistency with other hash values, this value +// should be formatted as an uppercase hash. +func TLSServerHashMd5(val string) attribute.KeyValue { + return TLSServerHashMd5Key.String(val) +} + +// TLSServerHashSha1 returns an attribute KeyValue conforming to the +// "tls.server.hash.sha1" semantic conventions. It represents the certificate +// fingerprint using the SHA1 digest of DER-encoded version of certificate +// offered by the server. For consistency with other hash values, this value +// should be formatted as an uppercase hash. +func TLSServerHashSha1(val string) attribute.KeyValue { + return TLSServerHashSha1Key.String(val) +} + +// TLSServerHashSha256 returns an attribute KeyValue conforming to the +// "tls.server.hash.sha256" semantic conventions. It represents the certificate +// fingerprint using the SHA256 digest of DER-encoded version of certificate +// offered by the server. For consistency with other hash values, this value +// should be formatted as an uppercase hash. +func TLSServerHashSha256(val string) attribute.KeyValue { + return TLSServerHashSha256Key.String(val) +} + +// TLSServerIssuer returns an attribute KeyValue conforming to the +// "tls.server.issuer" semantic conventions. It represents the distinguished +// name of +// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of +// the issuer of the x.509 certificate presented by the client. +func TLSServerIssuer(val string) attribute.KeyValue { + return TLSServerIssuerKey.String(val) +} + +// TLSServerJa3s returns an attribute KeyValue conforming to the +// "tls.server.ja3s" semantic conventions. It represents a hash that identifies +// servers based on how they perform an SSL/TLS handshake. +func TLSServerJa3s(val string) attribute.KeyValue { + return TLSServerJa3sKey.String(val) +} + +// TLSServerNotAfter returns an attribute KeyValue conforming to the +// "tls.server.not_after" semantic conventions. It represents the date/Time +// indicating when server certificate is no longer considered valid. +func TLSServerNotAfter(val string) attribute.KeyValue { + return TLSServerNotAfterKey.String(val) +} + +// TLSServerNotBefore returns an attribute KeyValue conforming to the +// "tls.server.not_before" semantic conventions. It represents the date/Time +// indicating when server certificate is first considered valid. +func TLSServerNotBefore(val string) attribute.KeyValue { + return TLSServerNotBeforeKey.String(val) +} + +// TLSServerSubject returns an attribute KeyValue conforming to the +// "tls.server.subject" semantic conventions. It represents the distinguished +// name of subject of the x.509 certificate presented by the server. +func TLSServerSubject(val string) attribute.KeyValue { + return TLSServerSubjectKey.String(val) +} + +// Attributes describing URL. +const ( + // URLDomainKey is the attribute Key conforming to the "url.domain" + // semantic conventions. It represents the domain extracted from the + // `url.full`, such as "opentelemetry.io". + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'www.foo.bar', 'opentelemetry.io', '3.12.167.2', + // '[1080:0:0:0:8:800:200C:417A]' + // Note: In some cases a URL may refer to an IP and/or port directly, + // without a domain name. In this case, the IP address would go to the + // domain field. If the URL contains a [literal IPv6 + // address](https://www.rfc-editor.org/rfc/rfc2732#section-2) enclosed by + // `[` and `]`, the `[` and `]` characters should also be captured in the + // domain field. + URLDomainKey = attribute.Key("url.domain") + + // URLExtensionKey is the attribute Key conforming to the "url.extension" + // semantic conventions. It represents the file extension extracted from + // the `url.full`, excluding the leading dot. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'png', 'gz' + // Note: The file extension is only set if it exists, as not every url has + // a file extension. When the file name has multiple extensions + // `example.tar.gz`, only the last one should be captured `gz`, not + // `tar.gz`. + URLExtensionKey = attribute.Key("url.extension") + + // URLFragmentKey is the attribute Key conforming to the "url.fragment" + // semantic conventions. It represents the [URI + // fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'SemConv' + URLFragmentKey = attribute.Key("url.fragment") + + // URLFullKey is the attribute Key conforming to the "url.full" semantic + // conventions. It represents the absolute URL describing a network + // resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv', + // '//localhost' + // Note: For network calls, URL usually has + // `scheme://host[:port][path][?query][#fragment]` format, where the + // fragment is not transmitted over HTTP, but if it is known, it SHOULD be + // included nevertheless. + // `url.full` MUST NOT contain credentials passed via URL in form of + // `https://username:password@www.example.com/`. In such case username and + // password SHOULD be redacted and attribute's value SHOULD be + // `https://REDACTED:REDACTED@www.example.com/`. + // `url.full` SHOULD capture the absolute URL when it is available (or can + // be reconstructed). Sensitive content provided in `url.full` SHOULD be + // scrubbed when instrumentations can identify it. + URLFullKey = attribute.Key("url.full") + + // URLOriginalKey is the attribute Key conforming to the "url.original" + // semantic conventions. It represents the unmodified original URL as seen + // in the event source. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv', + // 'search?q=OpenTelemetry' + // Note: In network monitoring, the observed URL may be a full URL, whereas + // in access logs, the URL is often just represented as a path. This field + // is meant to represent the URL as it was observed, complete or not. + // `url.original` might contain credentials passed via URL in form of + // `https://username:password@www.example.com/`. In such case password and + // username SHOULD NOT be redacted and attribute's value SHOULD remain the + // same. + URLOriginalKey = attribute.Key("url.original") + + // URLPathKey is the attribute Key conforming to the "url.path" semantic + // conventions. It represents the [URI + // path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: '/search' + // Note: Sensitive content provided in `url.path` SHOULD be scrubbed when + // instrumentations can identify it. + URLPathKey = attribute.Key("url.path") + + // URLPortKey is the attribute Key conforming to the "url.port" semantic + // conventions. It represents the port extracted from the `url.full` + // + // Type: int + // RequirementLevel: Optional + // Stability: experimental + // Examples: 443 + URLPortKey = attribute.Key("url.port") + + // URLQueryKey is the attribute Key conforming to the "url.query" semantic + // conventions. It represents the [URI + // query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'q=OpenTelemetry' + // Note: Sensitive content provided in `url.query` SHOULD be scrubbed when + // instrumentations can identify it. + URLQueryKey = attribute.Key("url.query") + + // URLRegisteredDomainKey is the attribute Key conforming to the + // "url.registered_domain" semantic conventions. It represents the highest + // registered url domain, stripped of the subdomain. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'example.com', 'foo.co.uk' + // Note: This value can be determined precisely with the [public suffix + // list](http://publicsuffix.org). For example, the registered domain for + // `foo.example.com` is `example.com`. Trying to approximate this by simply + // taking the last two labels will not work well for TLDs such as `co.uk`. + URLRegisteredDomainKey = attribute.Key("url.registered_domain") + + // URLSchemeKey is the attribute Key conforming to the "url.scheme" + // semantic conventions. It represents the [URI + // scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component + // identifying the used protocol. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'https', 'ftp', 'telnet' + URLSchemeKey = attribute.Key("url.scheme") + + // URLSubdomainKey is the attribute Key conforming to the "url.subdomain" + // semantic conventions. It represents the subdomain portion of a fully + // qualified domain name includes all of the names except the host name + // under the registered_domain. In a partially qualified domain, or if the + // qualification level of the full name cannot be determined, subdomain + // contains all of the names below the registered domain. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'east', 'sub2.sub1' + // Note: The subdomain portion of `www.east.mydomain.co.uk` is `east`. If + // the domain has multiple levels of subdomain, such as + // `sub2.sub1.example.com`, the subdomain field should contain `sub2.sub1`, + // with no trailing period. + URLSubdomainKey = attribute.Key("url.subdomain") + + // URLTemplateKey is the attribute Key conforming to the "url.template" + // semantic conventions. It represents the low-cardinality template of an + // [absolute path + // reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '/users/{id}', '/users/:id', '/users?id={id}' + URLTemplateKey = attribute.Key("url.template") + + // URLTopLevelDomainKey is the attribute Key conforming to the + // "url.top_level_domain" semantic conventions. It represents the effective + // top level domain (eTLD), also known as the domain suffix, is the last + // part of the domain name. For example, the top level domain for + // example.com is `com`. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'com', 'co.uk' + // Note: This value can be determined precisely with the [public suffix + // list](http://publicsuffix.org). + URLTopLevelDomainKey = attribute.Key("url.top_level_domain") +) + +// URLDomain returns an attribute KeyValue conforming to the "url.domain" +// semantic conventions. It represents the domain extracted from the +// `url.full`, such as "opentelemetry.io". +func URLDomain(val string) attribute.KeyValue { + return URLDomainKey.String(val) +} + +// URLExtension returns an attribute KeyValue conforming to the +// "url.extension" semantic conventions. It represents the file extension +// extracted from the `url.full`, excluding the leading dot. +func URLExtension(val string) attribute.KeyValue { + return URLExtensionKey.String(val) +} + +// URLFragment returns an attribute KeyValue conforming to the +// "url.fragment" semantic conventions. It represents the [URI +// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component +func URLFragment(val string) attribute.KeyValue { + return URLFragmentKey.String(val) +} + +// URLFull returns an attribute KeyValue conforming to the "url.full" +// semantic conventions. It represents the absolute URL describing a network +// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) +func URLFull(val string) attribute.KeyValue { + return URLFullKey.String(val) +} + +// URLOriginal returns an attribute KeyValue conforming to the +// "url.original" semantic conventions. It represents the unmodified original +// URL as seen in the event source. +func URLOriginal(val string) attribute.KeyValue { + return URLOriginalKey.String(val) +} + +// URLPath returns an attribute KeyValue conforming to the "url.path" +// semantic conventions. It represents the [URI +// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component +func URLPath(val string) attribute.KeyValue { + return URLPathKey.String(val) +} + +// URLPort returns an attribute KeyValue conforming to the "url.port" +// semantic conventions. It represents the port extracted from the `url.full` +func URLPort(val int) attribute.KeyValue { + return URLPortKey.Int(val) +} + +// URLQuery returns an attribute KeyValue conforming to the "url.query" +// semantic conventions. It represents the [URI +// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component +func URLQuery(val string) attribute.KeyValue { + return URLQueryKey.String(val) +} + +// URLRegisteredDomain returns an attribute KeyValue conforming to the +// "url.registered_domain" semantic conventions. It represents the highest +// registered url domain, stripped of the subdomain. +func URLRegisteredDomain(val string) attribute.KeyValue { + return URLRegisteredDomainKey.String(val) +} + +// URLScheme returns an attribute KeyValue conforming to the "url.scheme" +// semantic conventions. It represents the [URI +// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component +// identifying the used protocol. +func URLScheme(val string) attribute.KeyValue { + return URLSchemeKey.String(val) +} + +// URLSubdomain returns an attribute KeyValue conforming to the +// "url.subdomain" semantic conventions. It represents the subdomain portion of +// a fully qualified domain name includes all of the names except the host name +// under the registered_domain. In a partially qualified domain, or if the +// qualification level of the full name cannot be determined, subdomain +// contains all of the names below the registered domain. +func URLSubdomain(val string) attribute.KeyValue { + return URLSubdomainKey.String(val) +} + +// URLTemplate returns an attribute KeyValue conforming to the +// "url.template" semantic conventions. It represents the low-cardinality +// template of an [absolute path +// reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). +func URLTemplate(val string) attribute.KeyValue { + return URLTemplateKey.String(val) +} + +// URLTopLevelDomain returns an attribute KeyValue conforming to the +// "url.top_level_domain" semantic conventions. It represents the effective top +// level domain (eTLD), also known as the domain suffix, is the last part of +// the domain name. For example, the top level domain for example.com is `com`. +func URLTopLevelDomain(val string) attribute.KeyValue { + return URLTopLevelDomainKey.String(val) +} + +// Describes user-agent attributes. +const ( + // UserAgentNameKey is the attribute Key conforming to the + // "user_agent.name" semantic conventions. It represents the name of the + // user-agent extracted from original. Usually refers to the browser's + // name. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'Safari', 'YourApp' + // Note: [Example](https://www.whatsmyua.info) of extracting browser's name + // from original string. In the case of using a user-agent for non-browser + // products, such as microservices with multiple names/versions inside the + // `user_agent.original`, the most significant name SHOULD be selected. In + // such a scenario it should align with `user_agent.version` + UserAgentNameKey = attribute.Key("user_agent.name") + + // UserAgentOriginalKey is the attribute Key conforming to the + // "user_agent.original" semantic conventions. It represents the value of + // the [HTTP + // User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) + // header sent by the client. + // + // Type: string + // RequirementLevel: Optional + // Stability: stable + // Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU + // iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) + // Version/14.1.2 Mobile/15E148 Safari/604.1', 'YourApp/1.0.0 + // grpc-java-okhttp/1.27.2' + UserAgentOriginalKey = attribute.Key("user_agent.original") + + // UserAgentVersionKey is the attribute Key conforming to the + // "user_agent.version" semantic conventions. It represents the version of + // the user-agent extracted from original. Usually refers to the browser's + // version + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '14.1.2', '1.0.0' + // Note: [Example](https://www.whatsmyua.info) of extracting browser's + // version from original string. In the case of using a user-agent for + // non-browser products, such as microservices with multiple names/versions + // inside the `user_agent.original`, the most significant version SHOULD be + // selected. In such a scenario it should align with `user_agent.name` + UserAgentVersionKey = attribute.Key("user_agent.version") +) + +// UserAgentName returns an attribute KeyValue conforming to the +// "user_agent.name" semantic conventions. It represents the name of the +// user-agent extracted from original. Usually refers to the browser's name. +func UserAgentName(val string) attribute.KeyValue { + return UserAgentNameKey.String(val) +} + +// UserAgentOriginal returns an attribute KeyValue conforming to the +// "user_agent.original" semantic conventions. It represents the value of the +// [HTTP +// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) +// header sent by the client. +func UserAgentOriginal(val string) attribute.KeyValue { + return UserAgentOriginalKey.String(val) +} + +// UserAgentVersion returns an attribute KeyValue conforming to the +// "user_agent.version" semantic conventions. It represents the version of the +// user-agent extracted from original. Usually refers to the browser's version +func UserAgentVersion(val string) attribute.KeyValue { + return UserAgentVersionKey.String(val) +} + +// The attributes used to describe the packaged software running the +// application code. +const ( + // WebEngineDescriptionKey is the attribute Key conforming to the + // "webengine.description" semantic conventions. It represents the + // additional description of the web engine (e.g. detailed version and + // edition information). + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - + // 2.2.2.Final' + WebEngineDescriptionKey = attribute.Key("webengine.description") + + // WebEngineNameKey is the attribute Key conforming to the "webengine.name" + // semantic conventions. It represents the name of the web engine. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: 'WildFly' + WebEngineNameKey = attribute.Key("webengine.name") + + // WebEngineVersionKey is the attribute Key conforming to the + // "webengine.version" semantic conventions. It represents the version of + // the web engine. + // + // Type: string + // RequirementLevel: Optional + // Stability: experimental + // Examples: '21.0.0' + WebEngineVersionKey = attribute.Key("webengine.version") +) + +// WebEngineDescription returns an attribute KeyValue conforming to the +// "webengine.description" semantic conventions. It represents the additional +// description of the web engine (e.g. detailed version and edition +// information). +func WebEngineDescription(val string) attribute.KeyValue { + return WebEngineDescriptionKey.String(val) +} + +// WebEngineName returns an attribute KeyValue conforming to the +// "webengine.name" semantic conventions. It represents the name of the web +// engine. +func WebEngineName(val string) attribute.KeyValue { + return WebEngineNameKey.String(val) +} + +// WebEngineVersion returns an attribute KeyValue conforming to the +// "webengine.version" semantic conventions. It represents the version of the +// web engine. +func WebEngineVersion(val string) attribute.KeyValue { + return WebEngineVersionKey.String(val) +} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go similarity index 96% rename from vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go index d27e8a8f8b..d031bbea78 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go @@ -4,6 +4,6 @@ // Package semconv implements OpenTelemetry semantic conventions. // // OpenTelemetry semantic conventions are agreed standardized naming -// patterns for OpenTelemetry things. This package represents the v1.24.0 +// patterns for OpenTelemetry things. This package represents the v1.26.0 // version of the OpenTelemetry semantic conventions. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go similarity index 98% rename from vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go index 7235bb51d9..bfaee0d56e 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0" const ( // ExceptionEventName is the name of the Span event representing an exception. diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go similarity index 77% rename from vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go index a6b953f625..fcdb9f4859 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go @@ -3,176 +3,242 @@ // Code generated from semantic convention specification. DO NOT EDIT. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0" const ( - // DBClientConnectionsUsage is the metric conforming to the - // "db.client.connections.usage" semantic conventions. It represents the number + // ContainerCPUTime is the metric conforming to the "container.cpu.time" + // semantic conventions. It represents the total CPU time consumed. + // Instrument: counter + // Unit: s + // Stability: Experimental + ContainerCPUTimeName = "container.cpu.time" + ContainerCPUTimeUnit = "s" + ContainerCPUTimeDescription = "Total CPU time consumed" + + // ContainerMemoryUsage is the metric conforming to the + // "container.memory.usage" semantic conventions. It represents the memory + // usage of the container. + // Instrument: counter + // Unit: By + // Stability: Experimental + ContainerMemoryUsageName = "container.memory.usage" + ContainerMemoryUsageUnit = "By" + ContainerMemoryUsageDescription = "Memory usage of the container." + + // ContainerDiskIo is the metric conforming to the "container.disk.io" semantic + // conventions. It represents the disk bytes for the container. + // Instrument: counter + // Unit: By + // Stability: Experimental + ContainerDiskIoName = "container.disk.io" + ContainerDiskIoUnit = "By" + ContainerDiskIoDescription = "Disk bytes for the container." + + // ContainerNetworkIo is the metric conforming to the "container.network.io" + // semantic conventions. It represents the network bytes for the container. + // Instrument: counter + // Unit: By + // Stability: Experimental + ContainerNetworkIoName = "container.network.io" + ContainerNetworkIoUnit = "By" + ContainerNetworkIoDescription = "Network bytes for the container." + + // DBClientOperationDuration is the metric conforming to the + // "db.client.operation.duration" semantic conventions. It represents the + // duration of database client operations. + // Instrument: histogram + // Unit: s + // Stability: Experimental + DBClientOperationDurationName = "db.client.operation.duration" + DBClientOperationDurationUnit = "s" + DBClientOperationDurationDescription = "Duration of database client operations." + + // DBClientConnectionCount is the metric conforming to the + // "db.client.connection.count" semantic conventions. It represents the number // of connections that are currently in state described by the `state` // attribute. // Instrument: updowncounter // Unit: {connection} // Stability: Experimental - DBClientConnectionsUsageName = "db.client.connections.usage" - DBClientConnectionsUsageUnit = "{connection}" - DBClientConnectionsUsageDescription = "The number of connections that are currently in state described by the `state` attribute" + DBClientConnectionCountName = "db.client.connection.count" + DBClientConnectionCountUnit = "{connection}" + DBClientConnectionCountDescription = "The number of connections that are currently in state described by the `state` attribute" - // DBClientConnectionsIdleMax is the metric conforming to the - // "db.client.connections.idle.max" semantic conventions. It represents the + // DBClientConnectionIdleMax is the metric conforming to the + // "db.client.connection.idle.max" semantic conventions. It represents the // maximum number of idle open connections allowed. // Instrument: updowncounter // Unit: {connection} // Stability: Experimental - DBClientConnectionsIdleMaxName = "db.client.connections.idle.max" - DBClientConnectionsIdleMaxUnit = "{connection}" - DBClientConnectionsIdleMaxDescription = "The maximum number of idle open connections allowed" + DBClientConnectionIdleMaxName = "db.client.connection.idle.max" + DBClientConnectionIdleMaxUnit = "{connection}" + DBClientConnectionIdleMaxDescription = "The maximum number of idle open connections allowed" - // DBClientConnectionsIdleMin is the metric conforming to the - // "db.client.connections.idle.min" semantic conventions. It represents the + // DBClientConnectionIdleMin is the metric conforming to the + // "db.client.connection.idle.min" semantic conventions. It represents the // minimum number of idle open connections allowed. // Instrument: updowncounter // Unit: {connection} // Stability: Experimental - DBClientConnectionsIdleMinName = "db.client.connections.idle.min" - DBClientConnectionsIdleMinUnit = "{connection}" - DBClientConnectionsIdleMinDescription = "The minimum number of idle open connections allowed" + DBClientConnectionIdleMinName = "db.client.connection.idle.min" + DBClientConnectionIdleMinUnit = "{connection}" + DBClientConnectionIdleMinDescription = "The minimum number of idle open connections allowed" - // DBClientConnectionsMax is the metric conforming to the - // "db.client.connections.max" semantic conventions. It represents the maximum + // DBClientConnectionMax is the metric conforming to the + // "db.client.connection.max" semantic conventions. It represents the maximum // number of open connections allowed. // Instrument: updowncounter // Unit: {connection} // Stability: Experimental - DBClientConnectionsMaxName = "db.client.connections.max" - DBClientConnectionsMaxUnit = "{connection}" - DBClientConnectionsMaxDescription = "The maximum number of open connections allowed" + DBClientConnectionMaxName = "db.client.connection.max" + DBClientConnectionMaxUnit = "{connection}" + DBClientConnectionMaxDescription = "The maximum number of open connections allowed" - // DBClientConnectionsPendingRequests is the metric conforming to the - // "db.client.connections.pending_requests" semantic conventions. It represents + // DBClientConnectionPendingRequests is the metric conforming to the + // "db.client.connection.pending_requests" semantic conventions. It represents // the number of pending requests for an open connection, cumulative for the // entire pool. // Instrument: updowncounter // Unit: {request} // Stability: Experimental - DBClientConnectionsPendingRequestsName = "db.client.connections.pending_requests" - DBClientConnectionsPendingRequestsUnit = "{request}" - DBClientConnectionsPendingRequestsDescription = "The number of pending requests for an open connection, cumulative for the entire pool" + DBClientConnectionPendingRequestsName = "db.client.connection.pending_requests" + DBClientConnectionPendingRequestsUnit = "{request}" + DBClientConnectionPendingRequestsDescription = "The number of pending requests for an open connection, cumulative for the entire pool" - // DBClientConnectionsTimeouts is the metric conforming to the - // "db.client.connections.timeouts" semantic conventions. It represents the + // DBClientConnectionTimeouts is the metric conforming to the + // "db.client.connection.timeouts" semantic conventions. It represents the // number of connection timeouts that have occurred trying to obtain a // connection from the pool. // Instrument: counter // Unit: {timeout} // Stability: Experimental + DBClientConnectionTimeoutsName = "db.client.connection.timeouts" + DBClientConnectionTimeoutsUnit = "{timeout}" + DBClientConnectionTimeoutsDescription = "The number of connection timeouts that have occurred trying to obtain a connection from the pool" + + // DBClientConnectionCreateTime is the metric conforming to the + // "db.client.connection.create_time" semantic conventions. It represents the + // time it took to create a new connection. + // Instrument: histogram + // Unit: s + // Stability: Experimental + DBClientConnectionCreateTimeName = "db.client.connection.create_time" + DBClientConnectionCreateTimeUnit = "s" + DBClientConnectionCreateTimeDescription = "The time it took to create a new connection" + + // DBClientConnectionWaitTime is the metric conforming to the + // "db.client.connection.wait_time" semantic conventions. It represents the + // time it took to obtain an open connection from the pool. + // Instrument: histogram + // Unit: s + // Stability: Experimental + DBClientConnectionWaitTimeName = "db.client.connection.wait_time" + DBClientConnectionWaitTimeUnit = "s" + DBClientConnectionWaitTimeDescription = "The time it took to obtain an open connection from the pool" + + // DBClientConnectionUseTime is the metric conforming to the + // "db.client.connection.use_time" semantic conventions. It represents the time + // between borrowing a connection and returning it to the pool. + // Instrument: histogram + // Unit: s + // Stability: Experimental + DBClientConnectionUseTimeName = "db.client.connection.use_time" + DBClientConnectionUseTimeUnit = "s" + DBClientConnectionUseTimeDescription = "The time between borrowing a connection and returning it to the pool" + + // DBClientConnectionsUsage is the metric conforming to the + // "db.client.connections.usage" semantic conventions. It represents the + // deprecated, use `db.client.connection.count` instead. + // Instrument: updowncounter + // Unit: {connection} + // Stability: Experimental + DBClientConnectionsUsageName = "db.client.connections.usage" + DBClientConnectionsUsageUnit = "{connection}" + DBClientConnectionsUsageDescription = "Deprecated, use `db.client.connection.count` instead." + + // DBClientConnectionsIdleMax is the metric conforming to the + // "db.client.connections.idle.max" semantic conventions. It represents the + // deprecated, use `db.client.connection.idle.max` instead. + // Instrument: updowncounter + // Unit: {connection} + // Stability: Experimental + DBClientConnectionsIdleMaxName = "db.client.connections.idle.max" + DBClientConnectionsIdleMaxUnit = "{connection}" + DBClientConnectionsIdleMaxDescription = "Deprecated, use `db.client.connection.idle.max` instead." + + // DBClientConnectionsIdleMin is the metric conforming to the + // "db.client.connections.idle.min" semantic conventions. It represents the + // deprecated, use `db.client.connection.idle.min` instead. + // Instrument: updowncounter + // Unit: {connection} + // Stability: Experimental + DBClientConnectionsIdleMinName = "db.client.connections.idle.min" + DBClientConnectionsIdleMinUnit = "{connection}" + DBClientConnectionsIdleMinDescription = "Deprecated, use `db.client.connection.idle.min` instead." + + // DBClientConnectionsMax is the metric conforming to the + // "db.client.connections.max" semantic conventions. It represents the + // deprecated, use `db.client.connection.max` instead. + // Instrument: updowncounter + // Unit: {connection} + // Stability: Experimental + DBClientConnectionsMaxName = "db.client.connections.max" + DBClientConnectionsMaxUnit = "{connection}" + DBClientConnectionsMaxDescription = "Deprecated, use `db.client.connection.max` instead." + + // DBClientConnectionsPendingRequests is the metric conforming to the + // "db.client.connections.pending_requests" semantic conventions. It represents + // the deprecated, use `db.client.connection.pending_requests` instead. + // Instrument: updowncounter + // Unit: {request} + // Stability: Experimental + DBClientConnectionsPendingRequestsName = "db.client.connections.pending_requests" + DBClientConnectionsPendingRequestsUnit = "{request}" + DBClientConnectionsPendingRequestsDescription = "Deprecated, use `db.client.connection.pending_requests` instead." + + // DBClientConnectionsTimeouts is the metric conforming to the + // "db.client.connections.timeouts" semantic conventions. It represents the + // deprecated, use `db.client.connection.timeouts` instead. + // Instrument: counter + // Unit: {timeout} + // Stability: Experimental DBClientConnectionsTimeoutsName = "db.client.connections.timeouts" DBClientConnectionsTimeoutsUnit = "{timeout}" - DBClientConnectionsTimeoutsDescription = "The number of connection timeouts that have occurred trying to obtain a connection from the pool" + DBClientConnectionsTimeoutsDescription = "Deprecated, use `db.client.connection.timeouts` instead." // DBClientConnectionsCreateTime is the metric conforming to the // "db.client.connections.create_time" semantic conventions. It represents the - // time it took to create a new connection. + // deprecated, use `db.client.connection.create_time` instead. Note: the unit + // also changed from `ms` to `s`. // Instrument: histogram // Unit: ms // Stability: Experimental DBClientConnectionsCreateTimeName = "db.client.connections.create_time" DBClientConnectionsCreateTimeUnit = "ms" - DBClientConnectionsCreateTimeDescription = "The time it took to create a new connection" + DBClientConnectionsCreateTimeDescription = "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from `ms` to `s`." // DBClientConnectionsWaitTime is the metric conforming to the // "db.client.connections.wait_time" semantic conventions. It represents the - // time it took to obtain an open connection from the pool. + // deprecated, use `db.client.connection.wait_time` instead. Note: the unit + // also changed from `ms` to `s`. // Instrument: histogram // Unit: ms // Stability: Experimental DBClientConnectionsWaitTimeName = "db.client.connections.wait_time" DBClientConnectionsWaitTimeUnit = "ms" - DBClientConnectionsWaitTimeDescription = "The time it took to obtain an open connection from the pool" + DBClientConnectionsWaitTimeDescription = "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from `ms` to `s`." // DBClientConnectionsUseTime is the metric conforming to the // "db.client.connections.use_time" semantic conventions. It represents the - // time between borrowing a connection and returning it to the pool. + // deprecated, use `db.client.connection.use_time` instead. Note: the unit also + // changed from `ms` to `s`. // Instrument: histogram // Unit: ms // Stability: Experimental DBClientConnectionsUseTimeName = "db.client.connections.use_time" DBClientConnectionsUseTimeUnit = "ms" - DBClientConnectionsUseTimeDescription = "The time between borrowing a connection and returning it to the pool" - - // AspnetcoreRoutingMatchAttempts is the metric conforming to the - // "aspnetcore.routing.match_attempts" semantic conventions. It represents the - // number of requests that were attempted to be matched to an endpoint. - // Instrument: counter - // Unit: {match_attempt} - // Stability: Experimental - AspnetcoreRoutingMatchAttemptsName = "aspnetcore.routing.match_attempts" - AspnetcoreRoutingMatchAttemptsUnit = "{match_attempt}" - AspnetcoreRoutingMatchAttemptsDescription = "Number of requests that were attempted to be matched to an endpoint." - - // AspnetcoreDiagnosticsExceptions is the metric conforming to the - // "aspnetcore.diagnostics.exceptions" semantic conventions. It represents the - // number of exceptions caught by exception handling middleware. - // Instrument: counter - // Unit: {exception} - // Stability: Experimental - AspnetcoreDiagnosticsExceptionsName = "aspnetcore.diagnostics.exceptions" - AspnetcoreDiagnosticsExceptionsUnit = "{exception}" - AspnetcoreDiagnosticsExceptionsDescription = "Number of exceptions caught by exception handling middleware." - - // AspnetcoreRateLimitingActiveRequestLeases is the metric conforming to the - // "aspnetcore.rate_limiting.active_request_leases" semantic conventions. It - // represents the number of requests that are currently active on the server - // that hold a rate limiting lease. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - AspnetcoreRateLimitingActiveRequestLeasesName = "aspnetcore.rate_limiting.active_request_leases" - AspnetcoreRateLimitingActiveRequestLeasesUnit = "{request}" - AspnetcoreRateLimitingActiveRequestLeasesDescription = "Number of requests that are currently active on the server that hold a rate limiting lease." - - // AspnetcoreRateLimitingRequestLeaseDuration is the metric conforming to the - // "aspnetcore.rate_limiting.request_lease.duration" semantic conventions. It - // represents the duration of rate limiting lease held by requests on the - // server. - // Instrument: histogram - // Unit: s - // Stability: Experimental - AspnetcoreRateLimitingRequestLeaseDurationName = "aspnetcore.rate_limiting.request_lease.duration" - AspnetcoreRateLimitingRequestLeaseDurationUnit = "s" - AspnetcoreRateLimitingRequestLeaseDurationDescription = "The duration of rate limiting lease held by requests on the server." - - // AspnetcoreRateLimitingRequestTimeInQueue is the metric conforming to the - // "aspnetcore.rate_limiting.request.time_in_queue" semantic conventions. It - // represents the time the request spent in a queue waiting to acquire a rate - // limiting lease. - // Instrument: histogram - // Unit: s - // Stability: Experimental - AspnetcoreRateLimitingRequestTimeInQueueName = "aspnetcore.rate_limiting.request.time_in_queue" - AspnetcoreRateLimitingRequestTimeInQueueUnit = "s" - AspnetcoreRateLimitingRequestTimeInQueueDescription = "The time the request spent in a queue waiting to acquire a rate limiting lease." - - // AspnetcoreRateLimitingQueuedRequests is the metric conforming to the - // "aspnetcore.rate_limiting.queued_requests" semantic conventions. It - // represents the number of requests that are currently queued, waiting to - // acquire a rate limiting lease. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - AspnetcoreRateLimitingQueuedRequestsName = "aspnetcore.rate_limiting.queued_requests" - AspnetcoreRateLimitingQueuedRequestsUnit = "{request}" - AspnetcoreRateLimitingQueuedRequestsDescription = "Number of requests that are currently queued, waiting to acquire a rate limiting lease." - - // AspnetcoreRateLimitingRequests is the metric conforming to the - // "aspnetcore.rate_limiting.requests" semantic conventions. It represents the - // number of requests that tried to acquire a rate limiting lease. - // Instrument: counter - // Unit: {request} - // Stability: Experimental - AspnetcoreRateLimitingRequestsName = "aspnetcore.rate_limiting.requests" - AspnetcoreRateLimitingRequestsUnit = "{request}" - AspnetcoreRateLimitingRequestsDescription = "Number of requests that tried to acquire a rate limiting lease." + DBClientConnectionsUseTimeDescription = "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from `ms` to `s`." // DNSLookupDuration is the metric conforming to the "dns.lookup.duration" // semantic conventions. It represents the measures the time taken to perform a @@ -184,54 +250,86 @@ const ( DNSLookupDurationUnit = "s" DNSLookupDurationDescription = "Measures the time taken to perform a DNS lookup." - // HTTPClientOpenConnections is the metric conforming to the - // "http.client.open_connections" semantic conventions. It represents the - // number of outbound HTTP connections that are currently active or idle on the - // client. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - HTTPClientOpenConnectionsName = "http.client.open_connections" - HTTPClientOpenConnectionsUnit = "{connection}" - HTTPClientOpenConnectionsDescription = "Number of outbound HTTP connections that are currently active or idle on the client." + // AspnetcoreRoutingMatchAttempts is the metric conforming to the + // "aspnetcore.routing.match_attempts" semantic conventions. It represents the + // number of requests that were attempted to be matched to an endpoint. + // Instrument: counter + // Unit: {match_attempt} + // Stability: Stable + AspnetcoreRoutingMatchAttemptsName = "aspnetcore.routing.match_attempts" + AspnetcoreRoutingMatchAttemptsUnit = "{match_attempt}" + AspnetcoreRoutingMatchAttemptsDescription = "Number of requests that were attempted to be matched to an endpoint." - // HTTPClientConnectionDuration is the metric conforming to the - // "http.client.connection.duration" semantic conventions. It represents the - // duration of the successfully established outbound HTTP connections. - // Instrument: histogram - // Unit: s - // Stability: Experimental - HTTPClientConnectionDurationName = "http.client.connection.duration" - HTTPClientConnectionDurationUnit = "s" - HTTPClientConnectionDurationDescription = "The duration of the successfully established outbound HTTP connections." + // AspnetcoreDiagnosticsExceptions is the metric conforming to the + // "aspnetcore.diagnostics.exceptions" semantic conventions. It represents the + // number of exceptions caught by exception handling middleware. + // Instrument: counter + // Unit: {exception} + // Stability: Stable + AspnetcoreDiagnosticsExceptionsName = "aspnetcore.diagnostics.exceptions" + AspnetcoreDiagnosticsExceptionsUnit = "{exception}" + AspnetcoreDiagnosticsExceptionsDescription = "Number of exceptions caught by exception handling middleware." - // HTTPClientActiveRequests is the metric conforming to the - // "http.client.active_requests" semantic conventions. It represents the number - // of active HTTP requests. + // AspnetcoreRateLimitingActiveRequestLeases is the metric conforming to the + // "aspnetcore.rate_limiting.active_request_leases" semantic conventions. It + // represents the number of requests that are currently active on the server + // that hold a rate limiting lease. // Instrument: updowncounter // Unit: {request} - // Stability: Experimental - HTTPClientActiveRequestsName = "http.client.active_requests" - HTTPClientActiveRequestsUnit = "{request}" - HTTPClientActiveRequestsDescription = "Number of active HTTP requests." + // Stability: Stable + AspnetcoreRateLimitingActiveRequestLeasesName = "aspnetcore.rate_limiting.active_request_leases" + AspnetcoreRateLimitingActiveRequestLeasesUnit = "{request}" + AspnetcoreRateLimitingActiveRequestLeasesDescription = "Number of requests that are currently active on the server that hold a rate limiting lease." - // HTTPClientRequestTimeInQueue is the metric conforming to the - // "http.client.request.time_in_queue" semantic conventions. It represents the - // amount of time requests spent on a queue waiting for an available - // connection. + // AspnetcoreRateLimitingRequestLeaseDuration is the metric conforming to the + // "aspnetcore.rate_limiting.request_lease.duration" semantic conventions. It + // represents the duration of rate limiting lease held by requests on the + // server. // Instrument: histogram // Unit: s - // Stability: Experimental - HTTPClientRequestTimeInQueueName = "http.client.request.time_in_queue" - HTTPClientRequestTimeInQueueUnit = "s" - HTTPClientRequestTimeInQueueDescription = "The amount of time requests spent on a queue waiting for an available connection." + // Stability: Stable + AspnetcoreRateLimitingRequestLeaseDurationName = "aspnetcore.rate_limiting.request_lease.duration" + AspnetcoreRateLimitingRequestLeaseDurationUnit = "s" + AspnetcoreRateLimitingRequestLeaseDurationDescription = "The duration of rate limiting lease held by requests on the server." + + // AspnetcoreRateLimitingRequestTimeInQueue is the metric conforming to the + // "aspnetcore.rate_limiting.request.time_in_queue" semantic conventions. It + // represents the time the request spent in a queue waiting to acquire a rate + // limiting lease. + // Instrument: histogram + // Unit: s + // Stability: Stable + AspnetcoreRateLimitingRequestTimeInQueueName = "aspnetcore.rate_limiting.request.time_in_queue" + AspnetcoreRateLimitingRequestTimeInQueueUnit = "s" + AspnetcoreRateLimitingRequestTimeInQueueDescription = "The time the request spent in a queue waiting to acquire a rate limiting lease." + + // AspnetcoreRateLimitingQueuedRequests is the metric conforming to the + // "aspnetcore.rate_limiting.queued_requests" semantic conventions. It + // represents the number of requests that are currently queued, waiting to + // acquire a rate limiting lease. + // Instrument: updowncounter + // Unit: {request} + // Stability: Stable + AspnetcoreRateLimitingQueuedRequestsName = "aspnetcore.rate_limiting.queued_requests" + AspnetcoreRateLimitingQueuedRequestsUnit = "{request}" + AspnetcoreRateLimitingQueuedRequestsDescription = "Number of requests that are currently queued, waiting to acquire a rate limiting lease." + + // AspnetcoreRateLimitingRequests is the metric conforming to the + // "aspnetcore.rate_limiting.requests" semantic conventions. It represents the + // number of requests that tried to acquire a rate limiting lease. + // Instrument: counter + // Unit: {request} + // Stability: Stable + AspnetcoreRateLimitingRequestsName = "aspnetcore.rate_limiting.requests" + AspnetcoreRateLimitingRequestsUnit = "{request}" + AspnetcoreRateLimitingRequestsDescription = "Number of requests that tried to acquire a rate limiting lease." // KestrelActiveConnections is the metric conforming to the // "kestrel.active_connections" semantic conventions. It represents the number // of connections that are currently active on the server. // Instrument: updowncounter // Unit: {connection} - // Stability: Experimental + // Stability: Stable KestrelActiveConnectionsName = "kestrel.active_connections" KestrelActiveConnectionsUnit = "{connection}" KestrelActiveConnectionsDescription = "Number of connections that are currently active on the server." @@ -241,7 +339,7 @@ const ( // duration of connections on the server. // Instrument: histogram // Unit: s - // Stability: Experimental + // Stability: Stable KestrelConnectionDurationName = "kestrel.connection.duration" KestrelConnectionDurationUnit = "s" KestrelConnectionDurationDescription = "The duration of connections on the server." @@ -251,7 +349,7 @@ const ( // number of connections rejected by the server. // Instrument: counter // Unit: {connection} - // Stability: Experimental + // Stability: Stable KestrelRejectedConnectionsName = "kestrel.rejected_connections" KestrelRejectedConnectionsUnit = "{connection}" KestrelRejectedConnectionsDescription = "Number of connections rejected by the server." @@ -261,7 +359,7 @@ const ( // of connections that are currently queued and are waiting to start. // Instrument: updowncounter // Unit: {connection} - // Stability: Experimental + // Stability: Stable KestrelQueuedConnectionsName = "kestrel.queued_connections" KestrelQueuedConnectionsUnit = "{connection}" KestrelQueuedConnectionsDescription = "Number of connections that are currently queued and are waiting to start." @@ -272,7 +370,7 @@ const ( // currently queued and are waiting to start. // Instrument: updowncounter // Unit: {request} - // Stability: Experimental + // Stability: Stable KestrelQueuedRequestsName = "kestrel.queued_requests" KestrelQueuedRequestsUnit = "{request}" KestrelQueuedRequestsDescription = "Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start." @@ -282,7 +380,7 @@ const ( // number of connections that are currently upgraded (WebSockets). . // Instrument: updowncounter // Unit: {connection} - // Stability: Experimental + // Stability: Stable KestrelUpgradedConnectionsName = "kestrel.upgraded_connections" KestrelUpgradedConnectionsUnit = "{connection}" KestrelUpgradedConnectionsDescription = "Number of connections that are currently upgraded (WebSockets). ." @@ -292,7 +390,7 @@ const ( // duration of TLS handshakes on the server. // Instrument: histogram // Unit: s - // Stability: Experimental + // Stability: Stable KestrelTLSHandshakeDurationName = "kestrel.tls_handshake.duration" KestrelTLSHandshakeDurationUnit = "s" KestrelTLSHandshakeDurationDescription = "The duration of TLS handshakes on the server." @@ -302,7 +400,7 @@ const ( // number of TLS handshakes that are currently in progress on the server. // Instrument: updowncounter // Unit: {handshake} - // Stability: Experimental + // Stability: Stable KestrelActiveTLSHandshakesName = "kestrel.active_tls_handshakes" KestrelActiveTLSHandshakesUnit = "{handshake}" KestrelActiveTLSHandshakesDescription = "Number of TLS handshakes that are currently in progress on the server." @@ -312,7 +410,7 @@ const ( // duration of connections on the server. // Instrument: histogram // Unit: s - // Stability: Experimental + // Stability: Stable SignalrServerConnectionDurationName = "signalr.server.connection.duration" SignalrServerConnectionDurationUnit = "s" SignalrServerConnectionDurationDescription = "The duration of connections on the server." @@ -322,7 +420,7 @@ const ( // number of connections that are currently active on the server. // Instrument: updowncounter // Unit: {connection} - // Stability: Experimental + // Stability: Stable SignalrServerActiveConnectionsName = "signalr.server.active_connections" SignalrServerActiveConnectionsUnit = "{connection}" SignalrServerActiveConnectionsDescription = "Number of connections that are currently active on the server." @@ -481,6 +579,37 @@ const ( HTTPClientResponseBodySizeUnit = "By" HTTPClientResponseBodySizeDescription = "Size of HTTP client response bodies." + // HTTPClientOpenConnections is the metric conforming to the + // "http.client.open_connections" semantic conventions. It represents the + // number of outbound HTTP connections that are currently active or idle on the + // client. + // Instrument: updowncounter + // Unit: {connection} + // Stability: Experimental + HTTPClientOpenConnectionsName = "http.client.open_connections" + HTTPClientOpenConnectionsUnit = "{connection}" + HTTPClientOpenConnectionsDescription = "Number of outbound HTTP connections that are currently active or idle on the client." + + // HTTPClientConnectionDuration is the metric conforming to the + // "http.client.connection.duration" semantic conventions. It represents the + // duration of the successfully established outbound HTTP connections. + // Instrument: histogram + // Unit: s + // Stability: Experimental + HTTPClientConnectionDurationName = "http.client.connection.duration" + HTTPClientConnectionDurationUnit = "s" + HTTPClientConnectionDurationDescription = "The duration of the successfully established outbound HTTP connections." + + // HTTPClientActiveRequests is the metric conforming to the + // "http.client.active_requests" semantic conventions. It represents the number + // of active HTTP requests. + // Instrument: updowncounter + // Unit: {request} + // Stability: Experimental + HTTPClientActiveRequestsName = "http.client.active_requests" + HTTPClientActiveRequestsUnit = "{request}" + HTTPClientActiveRequestsDescription = "Number of active HTTP requests." + // JvmMemoryInit is the metric conforming to the "jvm.memory.init" semantic // conventions. It represents the measure of initial memory requested. // Instrument: updowncounter @@ -673,15 +802,15 @@ const ( MessagingReceiveDurationUnit = "s" MessagingReceiveDurationDescription = "Measures the duration of receive operation." - // MessagingDeliverDuration is the metric conforming to the - // "messaging.deliver.duration" semantic conventions. It represents the - // measures the duration of deliver operation. + // MessagingProcessDuration is the metric conforming to the + // "messaging.process.duration" semantic conventions. It represents the + // measures the duration of process operation. // Instrument: histogram // Unit: s // Stability: Experimental - MessagingDeliverDurationName = "messaging.deliver.duration" - MessagingDeliverDurationUnit = "s" - MessagingDeliverDurationDescription = "Measures the duration of deliver operation." + MessagingProcessDurationName = "messaging.process.duration" + MessagingProcessDurationUnit = "s" + MessagingProcessDurationDescription = "Measures the duration of process operation." // MessagingPublishMessages is the metric conforming to the // "messaging.publish.messages" semantic conventions. It represents the @@ -703,15 +832,112 @@ const ( MessagingReceiveMessagesUnit = "{message}" MessagingReceiveMessagesDescription = "Measures the number of received messages." - // MessagingDeliverMessages is the metric conforming to the - // "messaging.deliver.messages" semantic conventions. It represents the - // measures the number of delivered messages. + // MessagingProcessMessages is the metric conforming to the + // "messaging.process.messages" semantic conventions. It represents the + // measures the number of processed messages. // Instrument: counter // Unit: {message} // Stability: Experimental - MessagingDeliverMessagesName = "messaging.deliver.messages" - MessagingDeliverMessagesUnit = "{message}" - MessagingDeliverMessagesDescription = "Measures the number of delivered messages." + MessagingProcessMessagesName = "messaging.process.messages" + MessagingProcessMessagesUnit = "{message}" + MessagingProcessMessagesDescription = "Measures the number of processed messages." + + // ProcessCPUTime is the metric conforming to the "process.cpu.time" semantic + // conventions. It represents the total CPU seconds broken down by different + // states. + // Instrument: counter + // Unit: s + // Stability: Experimental + ProcessCPUTimeName = "process.cpu.time" + ProcessCPUTimeUnit = "s" + ProcessCPUTimeDescription = "Total CPU seconds broken down by different states." + + // ProcessCPUUtilization is the metric conforming to the + // "process.cpu.utilization" semantic conventions. It represents the difference + // in process.cpu.time since the last measurement, divided by the elapsed time + // and number of CPUs available to the process. + // Instrument: gauge + // Unit: 1 + // Stability: Experimental + ProcessCPUUtilizationName = "process.cpu.utilization" + ProcessCPUUtilizationUnit = "1" + ProcessCPUUtilizationDescription = "Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process." + + // ProcessMemoryUsage is the metric conforming to the "process.memory.usage" + // semantic conventions. It represents the amount of physical memory in use. + // Instrument: updowncounter + // Unit: By + // Stability: Experimental + ProcessMemoryUsageName = "process.memory.usage" + ProcessMemoryUsageUnit = "By" + ProcessMemoryUsageDescription = "The amount of physical memory in use." + + // ProcessMemoryVirtual is the metric conforming to the + // "process.memory.virtual" semantic conventions. It represents the amount of + // committed virtual memory. + // Instrument: updowncounter + // Unit: By + // Stability: Experimental + ProcessMemoryVirtualName = "process.memory.virtual" + ProcessMemoryVirtualUnit = "By" + ProcessMemoryVirtualDescription = "The amount of committed virtual memory." + + // ProcessDiskIo is the metric conforming to the "process.disk.io" semantic + // conventions. It represents the disk bytes transferred. + // Instrument: counter + // Unit: By + // Stability: Experimental + ProcessDiskIoName = "process.disk.io" + ProcessDiskIoUnit = "By" + ProcessDiskIoDescription = "Disk bytes transferred." + + // ProcessNetworkIo is the metric conforming to the "process.network.io" + // semantic conventions. It represents the network bytes transferred. + // Instrument: counter + // Unit: By + // Stability: Experimental + ProcessNetworkIoName = "process.network.io" + ProcessNetworkIoUnit = "By" + ProcessNetworkIoDescription = "Network bytes transferred." + + // ProcessThreadCount is the metric conforming to the "process.thread.count" + // semantic conventions. It represents the process threads count. + // Instrument: updowncounter + // Unit: {thread} + // Stability: Experimental + ProcessThreadCountName = "process.thread.count" + ProcessThreadCountUnit = "{thread}" + ProcessThreadCountDescription = "Process threads count." + + // ProcessOpenFileDescriptorCount is the metric conforming to the + // "process.open_file_descriptor.count" semantic conventions. It represents the + // number of file descriptors in use by the process. + // Instrument: updowncounter + // Unit: {count} + // Stability: Experimental + ProcessOpenFileDescriptorCountName = "process.open_file_descriptor.count" + ProcessOpenFileDescriptorCountUnit = "{count}" + ProcessOpenFileDescriptorCountDescription = "Number of file descriptors in use by the process." + + // ProcessContextSwitches is the metric conforming to the + // "process.context_switches" semantic conventions. It represents the number of + // times the process has been context switched. + // Instrument: counter + // Unit: {count} + // Stability: Experimental + ProcessContextSwitchesName = "process.context_switches" + ProcessContextSwitchesUnit = "{count}" + ProcessContextSwitchesDescription = "Number of times the process has been context switched." + + // ProcessPagingFaults is the metric conforming to the "process.paging.faults" + // semantic conventions. It represents the number of page faults the process + // has made. + // Instrument: counter + // Unit: {fault} + // Stability: Experimental + ProcessPagingFaultsName = "process.paging.faults" + ProcessPagingFaultsUnit = "{fault}" + ProcessPagingFaultsDescription = "Number of page faults the process has made." // RPCServerDuration is the metric conforming to the "rpc.server.duration" // semantic conventions. It represents the measures the duration of inbound @@ -883,6 +1109,16 @@ const ( SystemMemoryLimitUnit = "By" SystemMemoryLimitDescription = "Total memory available in the system." + // SystemMemoryShared is the metric conforming to the "system.memory.shared" + // semantic conventions. It represents the shared memory used (mostly by + // tmpfs). + // Instrument: updowncounter + // Unit: By + // Stability: Experimental + SystemMemorySharedName = "system.memory.shared" + SystemMemorySharedUnit = "By" + SystemMemorySharedDescription = "Shared memory used (mostly by tmpfs)." + // SystemMemoryUtilization is the metric conforming to the // "system.memory.utilization" semantic conventions. // Instrument: gauge @@ -1038,25 +1274,25 @@ const ( SystemNetworkConnectionsName = "system.network.connections" SystemNetworkConnectionsUnit = "{connection}" - // SystemProcessesCount is the metric conforming to the - // "system.processes.count" semantic conventions. It represents the total - // number of processes in each state. + // SystemProcessCount is the metric conforming to the "system.process.count" + // semantic conventions. It represents the total number of processes in each + // state. // Instrument: updowncounter // Unit: {process} // Stability: Experimental - SystemProcessesCountName = "system.processes.count" - SystemProcessesCountUnit = "{process}" - SystemProcessesCountDescription = "Total number of processes in each state" + SystemProcessCountName = "system.process.count" + SystemProcessCountUnit = "{process}" + SystemProcessCountDescription = "Total number of processes in each state" - // SystemProcessesCreated is the metric conforming to the - // "system.processes.created" semantic conventions. It represents the total + // SystemProcessCreated is the metric conforming to the + // "system.process.created" semantic conventions. It represents the total // number of processes created over uptime of the host. // Instrument: counter // Unit: {process} // Stability: Experimental - SystemProcessesCreatedName = "system.processes.created" - SystemProcessesCreatedUnit = "{process}" - SystemProcessesCreatedDescription = "Total number of processes created over uptime of the host" + SystemProcessCreatedName = "system.process.created" + SystemProcessCreatedUnit = "{process}" + SystemProcessCreatedDescription = "Total number of processes created over uptime of the host" // SystemLinuxMemoryAvailable is the metric conforming to the // "system.linux.memory.available" semantic conventions. It represents an diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go similarity index 85% rename from vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go index fe80b1731d..4c87c7adcc 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go @@ -1,9 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0" // SchemaURL is the schema URL that matches the version of the semantic conventions // that this package defines. Semconv packages starting from v1.4.0 must declare // non-empty schema URL in the form https://opentelemetry.io/schemas/ -const SchemaURL = "https://opentelemetry.io/schemas/1.24.0" +const SchemaURL = "https://opentelemetry.io/schemas/1.26.0" diff --git a/vendor/go.opentelemetry.io/otel/trace/provider.go b/vendor/go.opentelemetry.io/otel/trace/provider.go new file mode 100644 index 0000000000..ef85cb70c6 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/provider.go @@ -0,0 +1,59 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package trace // import "go.opentelemetry.io/otel/trace" + +import "go.opentelemetry.io/otel/trace/embedded" + +// TracerProvider provides Tracers that are used by instrumentation code to +// trace computational workflows. +// +// A TracerProvider is the collection destination of all Spans from Tracers it +// provides, it represents a unique telemetry collection pipeline. How that +// pipeline is defined, meaning how those Spans are collected, processed, and +// where they are exported, depends on its implementation. Instrumentation +// authors do not need to define this implementation, rather just use the +// provided Tracers to instrument code. +// +// Commonly, instrumentation code will accept a TracerProvider implementation +// at runtime from its users or it can simply use the globally registered one +// (see https://pkg.go.dev/go.opentelemetry.io/otel#GetTracerProvider). +// +// Warning: Methods may be added to this interface in minor releases. See +// package documentation on API implementation for information on how to set +// default behavior for unimplemented methods. +type TracerProvider interface { + // Users of the interface can ignore this. This embedded type is only used + // by implementations of this interface. See the "API Implementations" + // section of the package documentation for more information. + embedded.TracerProvider + + // Tracer returns a unique Tracer scoped to be used by instrumentation code + // to trace computational workflows. The scope and identity of that + // instrumentation code is uniquely defined by the name and options passed. + // + // The passed name needs to uniquely identify instrumentation code. + // Therefore, it is recommended that name is the Go package name of the + // library providing instrumentation (note: not the code being + // instrumented). Instrumentation libraries can have multiple versions, + // therefore, the WithInstrumentationVersion option should be used to + // distinguish these different codebases. Additionally, instrumentation + // libraries may sometimes use traces to communicate different domains of + // workflow data (i.e. using spans to communicate workflow events only). If + // this is the case, the WithScopeAttributes option should be used to + // uniquely identify Tracers that handle the different domains of workflow + // data. + // + // If the same name and options are passed multiple times, the same Tracer + // will be returned (it is up to the implementation if this will be the + // same underlying instance of that Tracer or not). It is not necessary to + // call this multiple times with the same name and options to get an + // up-to-date Tracer. All implementations will ensure any TracerProvider + // configuration changes are propagated to all provided Tracers. + // + // If name is empty, then an implementation defined default name will be + // used instead. + // + // This method is safe to call concurrently. + Tracer(name string, options ...TracerOption) Tracer +} diff --git a/vendor/go.opentelemetry.io/otel/trace/span.go b/vendor/go.opentelemetry.io/otel/trace/span.go new file mode 100644 index 0000000000..d3aa476ee1 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/span.go @@ -0,0 +1,177 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package trace // import "go.opentelemetry.io/otel/trace" + +import ( + "context" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/trace/embedded" +) + +// Span is the individual component of a trace. It represents a single named +// and timed operation of a workflow that is traced. A Tracer is used to +// create a Span and it is then up to the operation the Span represents to +// properly end the Span when the operation itself ends. +// +// Warning: Methods may be added to this interface in minor releases. See +// package documentation on API implementation for information on how to set +// default behavior for unimplemented methods. +type Span interface { + // Users of the interface can ignore this. This embedded type is only used + // by implementations of this interface. See the "API Implementations" + // section of the package documentation for more information. + embedded.Span + + // End completes the Span. The Span is considered complete and ready to be + // delivered through the rest of the telemetry pipeline after this method + // is called. Therefore, updates to the Span are not allowed after this + // method has been called. + End(options ...SpanEndOption) + + // AddEvent adds an event with the provided name and options. + AddEvent(name string, options ...EventOption) + + // AddLink adds a link. + // Adding links at span creation using WithLinks is preferred to calling AddLink + // later, for contexts that are available during span creation, because head + // sampling decisions can only consider information present during span creation. + AddLink(link Link) + + // IsRecording returns the recording state of the Span. It will return + // true if the Span is active and events can be recorded. + IsRecording() bool + + // RecordError will record err as an exception span event for this span. An + // additional call to SetStatus is required if the Status of the Span should + // be set to Error, as this method does not change the Span status. If this + // span is not being recorded or err is nil then this method does nothing. + RecordError(err error, options ...EventOption) + + // SpanContext returns the SpanContext of the Span. The returned SpanContext + // is usable even after the End method has been called for the Span. + SpanContext() SpanContext + + // SetStatus sets the status of the Span in the form of a code and a + // description, provided the status hasn't already been set to a higher + // value before (OK > Error > Unset). The description is only included in a + // status when the code is for an error. + SetStatus(code codes.Code, description string) + + // SetName sets the Span name. + SetName(name string) + + // SetAttributes sets kv as attributes of the Span. If a key from kv + // already exists for an attribute of the Span it will be overwritten with + // the value contained in kv. + SetAttributes(kv ...attribute.KeyValue) + + // TracerProvider returns a TracerProvider that can be used to generate + // additional Spans on the same telemetry pipeline as the current Span. + TracerProvider() TracerProvider +} + +// Link is the relationship between two Spans. The relationship can be within +// the same Trace or across different Traces. +// +// For example, a Link is used in the following situations: +// +// 1. Batch Processing: A batch of operations may contain operations +// associated with one or more traces/spans. Since there can only be one +// parent SpanContext, a Link is used to keep reference to the +// SpanContext of all operations in the batch. +// 2. Public Endpoint: A SpanContext for an in incoming client request on a +// public endpoint should be considered untrusted. In such a case, a new +// trace with its own identity and sampling decision needs to be created, +// but this new trace needs to be related to the original trace in some +// form. A Link is used to keep reference to the original SpanContext and +// track the relationship. +type Link struct { + // SpanContext of the linked Span. + SpanContext SpanContext + + // Attributes describe the aspects of the link. + Attributes []attribute.KeyValue +} + +// LinkFromContext returns a link encapsulating the SpanContext in the provided +// ctx. +func LinkFromContext(ctx context.Context, attrs ...attribute.KeyValue) Link { + return Link{ + SpanContext: SpanContextFromContext(ctx), + Attributes: attrs, + } +} + +// SpanKind is the role a Span plays in a Trace. +type SpanKind int + +// As a convenience, these match the proto definition, see +// https://github.com/open-telemetry/opentelemetry-proto/blob/30d237e1ff3ab7aa50e0922b5bebdd93505090af/opentelemetry/proto/trace/v1/trace.proto#L101-L129 +// +// The unspecified value is not a valid `SpanKind`. Use `ValidateSpanKind()` +// to coerce a span kind to a valid value. +const ( + // SpanKindUnspecified is an unspecified SpanKind and is not a valid + // SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal + // if it is received. + SpanKindUnspecified SpanKind = 0 + // SpanKindInternal is a SpanKind for a Span that represents an internal + // operation within an application. + SpanKindInternal SpanKind = 1 + // SpanKindServer is a SpanKind for a Span that represents the operation + // of handling a request from a client. + SpanKindServer SpanKind = 2 + // SpanKindClient is a SpanKind for a Span that represents the operation + // of client making a request to a server. + SpanKindClient SpanKind = 3 + // SpanKindProducer is a SpanKind for a Span that represents the operation + // of a producer sending a message to a message broker. Unlike + // SpanKindClient and SpanKindServer, there is often no direct + // relationship between this kind of Span and a SpanKindConsumer kind. A + // SpanKindProducer Span will end once the message is accepted by the + // message broker which might not overlap with the processing of that + // message. + SpanKindProducer SpanKind = 4 + // SpanKindConsumer is a SpanKind for a Span that represents the operation + // of a consumer receiving a message from a message broker. Like + // SpanKindProducer Spans, there is often no direct relationship between + // this Span and the Span that produced the message. + SpanKindConsumer SpanKind = 5 +) + +// ValidateSpanKind returns a valid span kind value. This will coerce +// invalid values into the default value, SpanKindInternal. +func ValidateSpanKind(spanKind SpanKind) SpanKind { + switch spanKind { + case SpanKindInternal, + SpanKindServer, + SpanKindClient, + SpanKindProducer, + SpanKindConsumer: + // valid + return spanKind + default: + return SpanKindInternal + } +} + +// String returns the specified name of the SpanKind in lower-case. +func (sk SpanKind) String() string { + switch sk { + case SpanKindInternal: + return "internal" + case SpanKindServer: + return "server" + case SpanKindClient: + return "client" + case SpanKindProducer: + return "producer" + case SpanKindConsumer: + return "consumer" + default: + return "unspecified" + } +} diff --git a/vendor/go.opentelemetry.io/otel/trace/trace.go b/vendor/go.opentelemetry.io/otel/trace/trace.go index 28877d4ab4..d49adf671b 100644 --- a/vendor/go.opentelemetry.io/otel/trace/trace.go +++ b/vendor/go.opentelemetry.io/otel/trace/trace.go @@ -5,13 +5,8 @@ package trace // import "go.opentelemetry.io/otel/trace" import ( "bytes" - "context" "encoding/hex" "encoding/json" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - "go.opentelemetry.io/otel/trace/embedded" ) const ( @@ -326,247 +321,3 @@ func (sc SpanContext) MarshalJSON() ([]byte, error) { Remote: sc.remote, }) } - -// Span is the individual component of a trace. It represents a single named -// and timed operation of a workflow that is traced. A Tracer is used to -// create a Span and it is then up to the operation the Span represents to -// properly end the Span when the operation itself ends. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Span interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Span - - // End completes the Span. The Span is considered complete and ready to be - // delivered through the rest of the telemetry pipeline after this method - // is called. Therefore, updates to the Span are not allowed after this - // method has been called. - End(options ...SpanEndOption) - - // AddEvent adds an event with the provided name and options. - AddEvent(name string, options ...EventOption) - - // AddLink adds a link. - // Adding links at span creation using WithLinks is preferred to calling AddLink - // later, for contexts that are available during span creation, because head - // sampling decisions can only consider information present during span creation. - AddLink(link Link) - - // IsRecording returns the recording state of the Span. It will return - // true if the Span is active and events can be recorded. - IsRecording() bool - - // RecordError will record err as an exception span event for this span. An - // additional call to SetStatus is required if the Status of the Span should - // be set to Error, as this method does not change the Span status. If this - // span is not being recorded or err is nil then this method does nothing. - RecordError(err error, options ...EventOption) - - // SpanContext returns the SpanContext of the Span. The returned SpanContext - // is usable even after the End method has been called for the Span. - SpanContext() SpanContext - - // SetStatus sets the status of the Span in the form of a code and a - // description, provided the status hasn't already been set to a higher - // value before (OK > Error > Unset). The description is only included in a - // status when the code is for an error. - SetStatus(code codes.Code, description string) - - // SetName sets the Span name. - SetName(name string) - - // SetAttributes sets kv as attributes of the Span. If a key from kv - // already exists for an attribute of the Span it will be overwritten with - // the value contained in kv. - SetAttributes(kv ...attribute.KeyValue) - - // TracerProvider returns a TracerProvider that can be used to generate - // additional Spans on the same telemetry pipeline as the current Span. - TracerProvider() TracerProvider -} - -// Link is the relationship between two Spans. The relationship can be within -// the same Trace or across different Traces. -// -// For example, a Link is used in the following situations: -// -// 1. Batch Processing: A batch of operations may contain operations -// associated with one or more traces/spans. Since there can only be one -// parent SpanContext, a Link is used to keep reference to the -// SpanContext of all operations in the batch. -// 2. Public Endpoint: A SpanContext for an in incoming client request on a -// public endpoint should be considered untrusted. In such a case, a new -// trace with its own identity and sampling decision needs to be created, -// but this new trace needs to be related to the original trace in some -// form. A Link is used to keep reference to the original SpanContext and -// track the relationship. -type Link struct { - // SpanContext of the linked Span. - SpanContext SpanContext - - // Attributes describe the aspects of the link. - Attributes []attribute.KeyValue -} - -// LinkFromContext returns a link encapsulating the SpanContext in the provided ctx. -func LinkFromContext(ctx context.Context, attrs ...attribute.KeyValue) Link { - return Link{ - SpanContext: SpanContextFromContext(ctx), - Attributes: attrs, - } -} - -// SpanKind is the role a Span plays in a Trace. -type SpanKind int - -// As a convenience, these match the proto definition, see -// https://github.com/open-telemetry/opentelemetry-proto/blob/30d237e1ff3ab7aa50e0922b5bebdd93505090af/opentelemetry/proto/trace/v1/trace.proto#L101-L129 -// -// The unspecified value is not a valid `SpanKind`. Use `ValidateSpanKind()` -// to coerce a span kind to a valid value. -const ( - // SpanKindUnspecified is an unspecified SpanKind and is not a valid - // SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal - // if it is received. - SpanKindUnspecified SpanKind = 0 - // SpanKindInternal is a SpanKind for a Span that represents an internal - // operation within an application. - SpanKindInternal SpanKind = 1 - // SpanKindServer is a SpanKind for a Span that represents the operation - // of handling a request from a client. - SpanKindServer SpanKind = 2 - // SpanKindClient is a SpanKind for a Span that represents the operation - // of client making a request to a server. - SpanKindClient SpanKind = 3 - // SpanKindProducer is a SpanKind for a Span that represents the operation - // of a producer sending a message to a message broker. Unlike - // SpanKindClient and SpanKindServer, there is often no direct - // relationship between this kind of Span and a SpanKindConsumer kind. A - // SpanKindProducer Span will end once the message is accepted by the - // message broker which might not overlap with the processing of that - // message. - SpanKindProducer SpanKind = 4 - // SpanKindConsumer is a SpanKind for a Span that represents the operation - // of a consumer receiving a message from a message broker. Like - // SpanKindProducer Spans, there is often no direct relationship between - // this Span and the Span that produced the message. - SpanKindConsumer SpanKind = 5 -) - -// ValidateSpanKind returns a valid span kind value. This will coerce -// invalid values into the default value, SpanKindInternal. -func ValidateSpanKind(spanKind SpanKind) SpanKind { - switch spanKind { - case SpanKindInternal, - SpanKindServer, - SpanKindClient, - SpanKindProducer, - SpanKindConsumer: - // valid - return spanKind - default: - return SpanKindInternal - } -} - -// String returns the specified name of the SpanKind in lower-case. -func (sk SpanKind) String() string { - switch sk { - case SpanKindInternal: - return "internal" - case SpanKindServer: - return "server" - case SpanKindClient: - return "client" - case SpanKindProducer: - return "producer" - case SpanKindConsumer: - return "consumer" - default: - return "unspecified" - } -} - -// Tracer is the creator of Spans. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Tracer interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Tracer - - // Start creates a span and a context.Context containing the newly-created span. - // - // If the context.Context provided in `ctx` contains a Span then the newly-created - // Span will be a child of that span, otherwise it will be a root span. This behavior - // can be overridden by providing `WithNewRoot()` as a SpanOption, causing the - // newly-created Span to be a root span even if `ctx` contains a Span. - // - // When creating a Span it is recommended to provide all known span attributes using - // the `WithAttributes()` SpanOption as samplers will only have access to the - // attributes provided when a Span is created. - // - // Any Span that is created MUST also be ended. This is the responsibility of the user. - // Implementations of this API may leak memory or other resources if Spans are not ended. - Start(ctx context.Context, spanName string, opts ...SpanStartOption) (context.Context, Span) -} - -// TracerProvider provides Tracers that are used by instrumentation code to -// trace computational workflows. -// -// A TracerProvider is the collection destination of all Spans from Tracers it -// provides, it represents a unique telemetry collection pipeline. How that -// pipeline is defined, meaning how those Spans are collected, processed, and -// where they are exported, depends on its implementation. Instrumentation -// authors do not need to define this implementation, rather just use the -// provided Tracers to instrument code. -// -// Commonly, instrumentation code will accept a TracerProvider implementation -// at runtime from its users or it can simply use the globally registered one -// (see https://pkg.go.dev/go.opentelemetry.io/otel#GetTracerProvider). -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type TracerProvider interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.TracerProvider - - // Tracer returns a unique Tracer scoped to be used by instrumentation code - // to trace computational workflows. The scope and identity of that - // instrumentation code is uniquely defined by the name and options passed. - // - // The passed name needs to uniquely identify instrumentation code. - // Therefore, it is recommended that name is the Go package name of the - // library providing instrumentation (note: not the code being - // instrumented). Instrumentation libraries can have multiple versions, - // therefore, the WithInstrumentationVersion option should be used to - // distinguish these different codebases. Additionally, instrumentation - // libraries may sometimes use traces to communicate different domains of - // workflow data (i.e. using spans to communicate workflow events only). If - // this is the case, the WithScopeAttributes option should be used to - // uniquely identify Tracers that handle the different domains of workflow - // data. - // - // If the same name and options are passed multiple times, the same Tracer - // will be returned (it is up to the implementation if this will be the - // same underlying instance of that Tracer or not). It is not necessary to - // call this multiple times with the same name and options to get an - // up-to-date Tracer. All implementations will ensure any TracerProvider - // configuration changes are propagated to all provided Tracers. - // - // If name is empty, then an implementation defined default name will be - // used instead. - // - // This method is safe to call concurrently. - Tracer(name string, options ...TracerOption) Tracer -} diff --git a/vendor/go.opentelemetry.io/otel/trace/tracer.go b/vendor/go.opentelemetry.io/otel/trace/tracer.go new file mode 100644 index 0000000000..77952d2a0b --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/tracer.go @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package trace // import "go.opentelemetry.io/otel/trace" + +import ( + "context" + + "go.opentelemetry.io/otel/trace/embedded" +) + +// Tracer is the creator of Spans. +// +// Warning: Methods may be added to this interface in minor releases. See +// package documentation on API implementation for information on how to set +// default behavior for unimplemented methods. +type Tracer interface { + // Users of the interface can ignore this. This embedded type is only used + // by implementations of this interface. See the "API Implementations" + // section of the package documentation for more information. + embedded.Tracer + + // Start creates a span and a context.Context containing the newly-created span. + // + // If the context.Context provided in `ctx` contains a Span then the newly-created + // Span will be a child of that span, otherwise it will be a root span. This behavior + // can be overridden by providing `WithNewRoot()` as a SpanOption, causing the + // newly-created Span to be a root span even if `ctx` contains a Span. + // + // When creating a Span it is recommended to provide all known span attributes using + // the `WithAttributes()` SpanOption as samplers will only have access to the + // attributes provided when a Span is created. + // + // Any Span that is created MUST also be ended. This is the responsibility of the user. + // Implementations of this API may leak memory or other resources if Spans are not ended. + Start(ctx context.Context, spanName string, opts ...SpanStartOption) (context.Context, Span) +} diff --git a/vendor/go.opentelemetry.io/otel/trace/tracestate.go b/vendor/go.opentelemetry.io/otel/trace/tracestate.go index 20b5cf2433..dc5e34cad0 100644 --- a/vendor/go.opentelemetry.io/otel/trace/tracestate.go +++ b/vendor/go.opentelemetry.io/otel/trace/tracestate.go @@ -260,6 +260,16 @@ func (ts TraceState) Get(key string) string { return "" } +// Walk walks all key value pairs in the TraceState by calling f +// Iteration stops if f returns false. +func (ts TraceState) Walk(f func(key, value string) bool) { + for _, m := range ts.list { + if !f(m.Key, m.Value) { + break + } + } +} + // Insert adds a new list-member defined by the key/value pair to the // TraceState. If a list-member already exists for the given key, that // list-member's value is updated. The new or updated list-member is always diff --git a/vendor/go.opentelemetry.io/otel/verify_released_changelog.sh b/vendor/go.opentelemetry.io/otel/verify_released_changelog.sh new file mode 100644 index 0000000000..c9b7cdbbfe --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/verify_released_changelog.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +set -euo pipefail + +TARGET="${1:?Must provide target ref}" + +FILE="CHANGELOG.md" +TEMP_DIR=$(mktemp -d) +echo "Temp folder: $TEMP_DIR" + +# Only the latest commit of the feature branch is available +# automatically. To diff with the base branch, we need to +# fetch that too (and we only need its latest commit). +git fetch origin "${TARGET}" --depth=1 + +# Checkout the previous version on the base branch of the changelog to tmpfolder +git --work-tree="$TEMP_DIR" checkout FETCH_HEAD $FILE + +PREVIOUS_FILE="$TEMP_DIR/$FILE" +CURRENT_FILE="$FILE" +PREVIOUS_LOCKED_FILE="$TEMP_DIR/previous_locked_section.md" +CURRENT_LOCKED_FILE="$TEMP_DIR/current_locked_section.md" + +# Extract released sections from the previous version +awk '/^/ {flag=1} /^/ {flag=0} flag' "$PREVIOUS_FILE" > "$PREVIOUS_LOCKED_FILE" + +# Extract released sections from the current version +awk '/^/ {flag=1} /^/ {flag=0} flag' "$CURRENT_FILE" > "$CURRENT_LOCKED_FILE" + +# Compare the released sections +if ! diff -q "$PREVIOUS_LOCKED_FILE" "$CURRENT_LOCKED_FILE"; then + echo "Error: The released sections of the changelog file have been modified." + diff "$PREVIOUS_LOCKED_FILE" "$CURRENT_LOCKED_FILE" + rm -rf "$TEMP_DIR" + false +fi + +rm -rf "$TEMP_DIR" +echo "The released sections remain unchanged." diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go index ab28960524..f67039ed1f 100644 --- a/vendor/go.opentelemetry.io/otel/version.go +++ b/vendor/go.opentelemetry.io/otel/version.go @@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel" // Version is the current release version of OpenTelemetry in use. func Version() string { - return "1.28.0" + return "1.29.0" } diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml index 241cfc82a8..3ba611d713 100644 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ b/vendor/go.opentelemetry.io/otel/versions.yaml @@ -3,7 +3,7 @@ module-sets: stable-v1: - version: v1.28.0 + version: v1.29.0 modules: - go.opentelemetry.io/otel - go.opentelemetry.io/otel/bridge/opencensus @@ -29,15 +29,16 @@ module-sets: - go.opentelemetry.io/otel/sdk/metric - go.opentelemetry.io/otel/trace experimental-metrics: - version: v0.50.0 + version: v0.51.0 modules: - go.opentelemetry.io/otel/example/prometheus - go.opentelemetry.io/otel/exporters/prometheus experimental-logs: - version: v0.4.0 + version: v0.5.0 modules: - go.opentelemetry.io/otel/log - go.opentelemetry.io/otel/sdk/log + - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp - go.opentelemetry.io/otel/exporters/stdout/stdoutlog experimental-schema: @@ -46,4 +47,3 @@ module-sets: - go.opentelemetry.io/otel/schema excluded-modules: - go.opentelemetry.io/otel/internal/tools - - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s index 731d2ac6db..fd5ee845f9 100644 --- a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s @@ -1,2715 +1,9762 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file was originally from https://golang.org/cl/24717 by Vlad Krasnov of CloudFlare. +// Code generated by command: go run chacha20poly1305_amd64_asm.go -out ../chacha20poly1305_amd64.s -pkg chacha20poly1305. DO NOT EDIT. //go:build gc && !purego #include "textflag.h" -// General register allocation -#define oup DI -#define inp SI -#define inl BX -#define adp CX // free to reuse, after we hash the additional data -#define keyp R8 // free to reuse, when we copy the key to stack -#define itr2 R9 // general iterator -#define itr1 CX // general iterator -#define acc0 R10 -#define acc1 R11 -#define acc2 R12 -#define t0 R13 -#define t1 R14 -#define t2 R15 -#define t3 R8 -// Register and stack allocation for the SSE code -#define rStore (0*16)(BP) -#define sStore (1*16)(BP) -#define state1Store (2*16)(BP) -#define state2Store (3*16)(BP) -#define tmpStore (4*16)(BP) -#define ctr0Store (5*16)(BP) -#define ctr1Store (6*16)(BP) -#define ctr2Store (7*16)(BP) -#define ctr3Store (8*16)(BP) -#define A0 X0 -#define A1 X1 -#define A2 X2 -#define B0 X3 -#define B1 X4 -#define B2 X5 -#define C0 X6 -#define C1 X7 -#define C2 X8 -#define D0 X9 -#define D1 X10 -#define D2 X11 -#define T0 X12 -#define T1 X13 -#define T2 X14 -#define T3 X15 -#define A3 T0 -#define B3 T1 -#define C3 T2 -#define D3 T3 -// Register and stack allocation for the AVX2 code -#define rsStoreAVX2 (0*32)(BP) -#define state1StoreAVX2 (1*32)(BP) -#define state2StoreAVX2 (2*32)(BP) -#define ctr0StoreAVX2 (3*32)(BP) -#define ctr1StoreAVX2 (4*32)(BP) -#define ctr2StoreAVX2 (5*32)(BP) -#define ctr3StoreAVX2 (6*32)(BP) -#define tmpStoreAVX2 (7*32)(BP) // 256 bytes on stack -#define AA0 Y0 -#define AA1 Y5 -#define AA2 Y6 -#define AA3 Y7 -#define BB0 Y14 -#define BB1 Y9 -#define BB2 Y10 -#define BB3 Y11 -#define CC0 Y12 -#define CC1 Y13 -#define CC2 Y8 -#define CC3 Y15 -#define DD0 Y4 -#define DD1 Y1 -#define DD2 Y2 -#define DD3 Y3 -#define TT0 DD3 -#define TT1 AA3 -#define TT2 BB3 -#define TT3 CC3 -// ChaCha20 constants -DATA ·chacha20Constants<>+0x00(SB)/4, $0x61707865 -DATA ·chacha20Constants<>+0x04(SB)/4, $0x3320646e -DATA ·chacha20Constants<>+0x08(SB)/4, $0x79622d32 -DATA ·chacha20Constants<>+0x0c(SB)/4, $0x6b206574 -DATA ·chacha20Constants<>+0x10(SB)/4, $0x61707865 -DATA ·chacha20Constants<>+0x14(SB)/4, $0x3320646e -DATA ·chacha20Constants<>+0x18(SB)/4, $0x79622d32 -DATA ·chacha20Constants<>+0x1c(SB)/4, $0x6b206574 -// <<< 16 with PSHUFB -DATA ·rol16<>+0x00(SB)/8, $0x0504070601000302 -DATA ·rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A -DATA ·rol16<>+0x10(SB)/8, $0x0504070601000302 -DATA ·rol16<>+0x18(SB)/8, $0x0D0C0F0E09080B0A -// <<< 8 with PSHUFB -DATA ·rol8<>+0x00(SB)/8, $0x0605040702010003 -DATA ·rol8<>+0x08(SB)/8, $0x0E0D0C0F0A09080B -DATA ·rol8<>+0x10(SB)/8, $0x0605040702010003 -DATA ·rol8<>+0x18(SB)/8, $0x0E0D0C0F0A09080B -DATA ·avx2InitMask<>+0x00(SB)/8, $0x0 -DATA ·avx2InitMask<>+0x08(SB)/8, $0x0 -DATA ·avx2InitMask<>+0x10(SB)/8, $0x1 -DATA ·avx2InitMask<>+0x18(SB)/8, $0x0 - -DATA ·avx2IncMask<>+0x00(SB)/8, $0x2 -DATA ·avx2IncMask<>+0x08(SB)/8, $0x0 -DATA ·avx2IncMask<>+0x10(SB)/8, $0x2 -DATA ·avx2IncMask<>+0x18(SB)/8, $0x0 -// Poly1305 key clamp -DATA ·polyClampMask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF -DATA ·polyClampMask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC -DATA ·polyClampMask<>+0x10(SB)/8, $0xFFFFFFFFFFFFFFFF -DATA ·polyClampMask<>+0x18(SB)/8, $0xFFFFFFFFFFFFFFFF - -DATA ·sseIncMask<>+0x00(SB)/8, $0x1 -DATA ·sseIncMask<>+0x08(SB)/8, $0x0 -// To load/store the last < 16 bytes in a buffer -DATA ·andMask<>+0x00(SB)/8, $0x00000000000000ff -DATA ·andMask<>+0x08(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x10(SB)/8, $0x000000000000ffff -DATA ·andMask<>+0x18(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x20(SB)/8, $0x0000000000ffffff -DATA ·andMask<>+0x28(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x30(SB)/8, $0x00000000ffffffff -DATA ·andMask<>+0x38(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x40(SB)/8, $0x000000ffffffffff -DATA ·andMask<>+0x48(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x50(SB)/8, $0x0000ffffffffffff -DATA ·andMask<>+0x58(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x60(SB)/8, $0x00ffffffffffffff -DATA ·andMask<>+0x68(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x70(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0x78(SB)/8, $0x0000000000000000 -DATA ·andMask<>+0x80(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0x88(SB)/8, $0x00000000000000ff -DATA ·andMask<>+0x90(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0x98(SB)/8, $0x000000000000ffff -DATA ·andMask<>+0xa0(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0xa8(SB)/8, $0x0000000000ffffff -DATA ·andMask<>+0xb0(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0xb8(SB)/8, $0x00000000ffffffff -DATA ·andMask<>+0xc0(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0xc8(SB)/8, $0x000000ffffffffff -DATA ·andMask<>+0xd0(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0xd8(SB)/8, $0x0000ffffffffffff -DATA ·andMask<>+0xe0(SB)/8, $0xffffffffffffffff -DATA ·andMask<>+0xe8(SB)/8, $0x00ffffffffffffff - -GLOBL ·chacha20Constants<>(SB), (NOPTR+RODATA), $32 -GLOBL ·rol16<>(SB), (NOPTR+RODATA), $32 -GLOBL ·rol8<>(SB), (NOPTR+RODATA), $32 -GLOBL ·sseIncMask<>(SB), (NOPTR+RODATA), $16 -GLOBL ·avx2IncMask<>(SB), (NOPTR+RODATA), $32 -GLOBL ·avx2InitMask<>(SB), (NOPTR+RODATA), $32 -GLOBL ·polyClampMask<>(SB), (NOPTR+RODATA), $32 -GLOBL ·andMask<>(SB), (NOPTR+RODATA), $240 -// No PALIGNR in Go ASM yet (but VPALIGNR is present). -#define shiftB0Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X3, X3 -#define shiftB1Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xe4; BYTE $0x04 // PALIGNR $4, X4, X4 -#define shiftB2Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x04 // PALIGNR $4, X5, X5 -#define shiftB3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x04 // PALIGNR $4, X13, X13 -#define shiftC0Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xf6; BYTE $0x08 // PALIGNR $8, X6, X6 -#define shiftC1Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x08 // PALIGNR $8, X7, X7 -#define shiftC2Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc0; BYTE $0x08 // PALIGNR $8, X8, X8 -#define shiftC3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xf6; BYTE $0x08 // PALIGNR $8, X14, X14 -#define shiftD0Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc9; BYTE $0x0c // PALIGNR $12, X9, X9 -#define shiftD1Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x0c // PALIGNR $12, X10, X10 -#define shiftD2Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x0c // PALIGNR $12, X11, X11 -#define shiftD3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x0c // PALIGNR $12, X15, X15 -#define shiftB0Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x0c // PALIGNR $12, X3, X3 -#define shiftB1Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xe4; BYTE $0x0c // PALIGNR $12, X4, X4 -#define shiftB2Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x0c // PALIGNR $12, X5, X5 -#define shiftB3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x0c // PALIGNR $12, X13, X13 -#define shiftC0Right shiftC0Left -#define shiftC1Right shiftC1Left -#define shiftC2Right shiftC2Left -#define shiftC3Right shiftC3Left -#define shiftD0Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc9; BYTE $0x04 // PALIGNR $4, X9, X9 -#define shiftD1Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x04 // PALIGNR $4, X10, X10 -#define shiftD2Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X11, X11 -#define shiftD3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x04 // PALIGNR $4, X15, X15 - -// Some macros - -// ROL rotates the uint32s in register R left by N bits, using temporary T. -#define ROL(N, R, T) \ - MOVO R, T; PSLLL $(N), T; PSRLL $(32-(N)), R; PXOR T, R - -// ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. -#ifdef GOAMD64_v2 -#define ROL16(R, T) PSHUFB ·rol16<>(SB), R -#else -#define ROL16(R, T) ROL(16, R, T) -#endif - -// ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. -#ifdef GOAMD64_v2 -#define ROL8(R, T) PSHUFB ·rol8<>(SB), R -#else -#define ROL8(R, T) ROL(8, R, T) -#endif - -#define chachaQR(A, B, C, D, T) \ - PADDD B, A; PXOR A, D; ROL16(D, T) \ - PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B \ - PADDD B, A; PXOR A, D; ROL8(D, T) \ - PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B - -#define chachaQR_AVX2(A, B, C, D, T) \ - VPADDD B, A, A; VPXOR A, D, D; VPSHUFB ·rol16<>(SB), D, D \ - VPADDD D, C, C; VPXOR C, B, B; VPSLLD $12, B, T; VPSRLD $20, B, B; VPXOR T, B, B \ - VPADDD B, A, A; VPXOR A, D, D; VPSHUFB ·rol8<>(SB), D, D \ - VPADDD D, C, C; VPXOR C, B, B; VPSLLD $7, B, T; VPSRLD $25, B, B; VPXOR T, B, B - -#define polyAdd(S) ADDQ S, acc0; ADCQ 8+S, acc1; ADCQ $1, acc2 -#define polyMulStage1 MOVQ (0*8)(BP), AX; MOVQ AX, t2; MULQ acc0; MOVQ AX, t0; MOVQ DX, t1; MOVQ (0*8)(BP), AX; MULQ acc1; IMULQ acc2, t2; ADDQ AX, t1; ADCQ DX, t2 -#define polyMulStage2 MOVQ (1*8)(BP), AX; MOVQ AX, t3; MULQ acc0; ADDQ AX, t1; ADCQ $0, DX; MOVQ DX, acc0; MOVQ (1*8)(BP), AX; MULQ acc1; ADDQ AX, t2; ADCQ $0, DX -#define polyMulStage3 IMULQ acc2, t3; ADDQ acc0, t2; ADCQ DX, t3 -#define polyMulReduceStage MOVQ t0, acc0; MOVQ t1, acc1; MOVQ t2, acc2; ANDQ $3, acc2; MOVQ t2, t0; ANDQ $-4, t0; MOVQ t3, t1; SHRQ $2, t3, t2; SHRQ $2, t3; ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $0, acc2; ADDQ t2, acc0; ADCQ t3, acc1; ADCQ $0, acc2 - -#define polyMulStage1_AVX2 MOVQ (0*8)(BP), DX; MOVQ DX, t2; MULXQ acc0, t0, t1; IMULQ acc2, t2; MULXQ acc1, AX, DX; ADDQ AX, t1; ADCQ DX, t2 -#define polyMulStage2_AVX2 MOVQ (1*8)(BP), DX; MULXQ acc0, acc0, AX; ADDQ acc0, t1; MULXQ acc1, acc1, t3; ADCQ acc1, t2; ADCQ $0, t3 -#define polyMulStage3_AVX2 IMULQ acc2, DX; ADDQ AX, t2; ADCQ DX, t3 - -#define polyMul polyMulStage1; polyMulStage2; polyMulStage3; polyMulReduceStage -#define polyMulAVX2 polyMulStage1_AVX2; polyMulStage2_AVX2; polyMulStage3_AVX2; polyMulReduceStage -// ---------------------------------------------------------------------------- +// func polyHashADInternal<>() TEXT polyHashADInternal<>(SB), NOSPLIT, $0 - // adp points to beginning of additional data - // itr2 holds ad length - XORQ acc0, acc0 - XORQ acc1, acc1 - XORQ acc2, acc2 - CMPQ itr2, $13 - JNE hashADLoop + // Hack: Must declare #define macros inside of a function due to Avo constraints + // ROL rotates the uint32s in register R left by N bits, using temporary T. + #define ROL(N, R, T) \ + MOVO R, T; \ + PSLLL $(N), T; \ + PSRLL $(32-(N)), R; \ + PXOR T, R -openFastTLSAD: - // Special treatment for the TLS case of 13 bytes - MOVQ (adp), acc0 - MOVQ 5(adp), acc1 - SHRQ $24, acc1 - MOVQ $1, acc2 - polyMul + // ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. + #ifdef GOAMD64_v2 + #define ROL8(R, T) PSHUFB ·rol8<>(SB), R + #else + #define ROL8(R, T) ROL(8, R, T) + #endif + + // ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. + #ifdef GOAMD64_v2 + #define ROL16(R, T) PSHUFB ·rol16<>(SB), R + #else + #define ROL16(R, T) ROL(16, R, T) + #endif + XORQ R10, R10 + XORQ R11, R11 + XORQ R12, R12 + CMPQ R9, $0x0d + JNE hashADLoop + MOVQ (CX), R10 + MOVQ 5(CX), R11 + SHRQ $0x18, R11 + MOVQ $0x00000001, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 RET hashADLoop: // Hash in 16 byte chunks - CMPQ itr2, $16 - JB hashADTail - polyAdd(0(adp)) - LEAQ (1*16)(adp), adp - SUBQ $16, itr2 - polyMul - JMP hashADLoop + CMPQ R9, $0x10 + JB hashADTail + ADDQ (CX), R10 + ADCQ 8(CX), R11 + ADCQ $0x01, R12 + LEAQ 16(CX), CX + SUBQ $0x10, R9 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + JMP hashADLoop hashADTail: - CMPQ itr2, $0 + CMPQ R9, $0x00 JE hashADDone // Hash last < 16 byte tail - XORQ t0, t0 - XORQ t1, t1 - XORQ t2, t2 - ADDQ itr2, adp + XORQ R13, R13 + XORQ R14, R14 + XORQ R15, R15 + ADDQ R9, CX hashADTailLoop: - SHLQ $8, t0, t1 - SHLQ $8, t0 - MOVB -1(adp), t2 - XORQ t2, t0 - DECQ adp - DECQ itr2 - JNE hashADTailLoop + SHLQ $0x08, R13, R14 + SHLQ $0x08, R13 + MOVB -1(CX), R15 + XORQ R15, R13 + DECQ CX + DECQ R9 + JNE hashADTailLoop + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 -hashADTailFinish: - ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 - polyMul - - // Finished AD hashADDone: RET -// ---------------------------------------------------------------------------- -// func chacha20Poly1305Open(dst, key, src, ad []byte) bool -TEXT ·chacha20Poly1305Open(SB), 0, $288-97 +// func chacha20Poly1305Open(dst []byte, key []uint32, src []byte, ad []byte) bool +// Requires: AVX, AVX2, BMI2, CMOV, SSE2 +TEXT ·chacha20Poly1305Open(SB), $288-97 // For aligned stack access MOVQ SP, BP - ADDQ $32, BP + ADDQ $0x20, BP ANDQ $-32, BP - MOVQ dst+0(FP), oup - MOVQ key+24(FP), keyp - MOVQ src+48(FP), inp - MOVQ src_len+56(FP), inl - MOVQ ad+72(FP), adp + MOVQ dst_base+0(FP), DI + MOVQ key_base+24(FP), R8 + MOVQ src_base+48(FP), SI + MOVQ src_len+56(FP), BX + MOVQ ad_base+72(FP), CX // Check for AVX2 support - CMPB ·useAVX2(SB), $1 + CMPB ·useAVX2+0(SB), $0x01 JE chacha20Poly1305Open_AVX2 // Special optimization, for very short buffers - CMPQ inl, $128 - JBE openSSE128 // About 16% faster + CMPQ BX, $0x80 + JBE openSSE128 // For long buffers, prepare the poly key first - MOVOU ·chacha20Constants<>(SB), A0 - MOVOU (1*16)(keyp), B0 - MOVOU (2*16)(keyp), C0 - MOVOU (3*16)(keyp), D0 - MOVO D0, T1 + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + MOVO X9, X13 // Store state on stack for future use - MOVO B0, state1Store - MOVO C0, state2Store - MOVO D0, ctr3Store - MOVQ $10, itr2 + MOVO X3, 32(BP) + MOVO X6, 48(BP) + MOVO X9, 128(BP) + MOVQ $0x0000000a, R9 openSSEPreparePolyKey: - chachaQR(A0, B0, C0, D0, T0) - shiftB0Left; shiftC0Left; shiftD0Left - chachaQR(A0, B0, C0, D0, T0) - shiftB0Right; shiftC0Right; shiftD0Right - DECQ itr2 - JNE openSSEPreparePolyKey + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + DECQ R9 + JNE openSSEPreparePolyKey // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded - PADDL ·chacha20Constants<>(SB), A0; PADDL state1Store, B0 + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL 32(BP), X3 // Clamp and store the key - PAND ·polyClampMask<>(SB), A0 - MOVO A0, rStore; MOVO B0, sStore + PAND ·polyClampMask<>+0(SB), X0 + MOVO X0, (BP) + MOVO X3, 16(BP) // Hash AAD - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) openSSEMainLoop: - CMPQ inl, $256 + CMPQ BX, $0x00000100 JB openSSEMainLoopDone // Load state, increment counter blocks - MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 - MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 // Store counters - MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) - // There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we hash 2 blocks, and for the remaining 4 only 1 block - for a total of 16 - MOVQ $4, itr1 - MOVQ inp, itr2 + // There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we hash + // 2 blocks, and for the remaining 4 only 1 block - for a total of 16 + MOVQ $0x00000004, CX + MOVQ SI, R9 openSSEInternalLoop: - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - polyAdd(0(itr2)) - shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left - shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left - shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left - polyMulStage1 - polyMulStage2 - LEAQ (2*8)(itr2), itr2 - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - polyMulStage3 - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - polyMulReduceStage - shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right - shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right - shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right - DECQ itr1 - JGE openSSEInternalLoop - - polyAdd(0(itr2)) - polyMul - LEAQ (2*8)(itr2), itr2 - - CMPQ itr1, $-6 - JG openSSEInternalLoop + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + LEAQ 16(R9), R9 + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + DECQ CX + JGE openSSEInternalLoop + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + CMPQ CX, $-6 + JG openSSEInternalLoop // Add in the state - PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 - PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 - PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 - PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X6 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 80(BP), X9 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 // Load - xor - store - MOVO D3, tmpStore - MOVOU (0*16)(inp), D3; PXOR D3, A0; MOVOU A0, (0*16)(oup) - MOVOU (1*16)(inp), D3; PXOR D3, B0; MOVOU B0, (1*16)(oup) - MOVOU (2*16)(inp), D3; PXOR D3, C0; MOVOU C0, (2*16)(oup) - MOVOU (3*16)(inp), D3; PXOR D3, D0; MOVOU D0, (3*16)(oup) - MOVOU (4*16)(inp), D0; PXOR D0, A1; MOVOU A1, (4*16)(oup) - MOVOU (5*16)(inp), D0; PXOR D0, B1; MOVOU B1, (5*16)(oup) - MOVOU (6*16)(inp), D0; PXOR D0, C1; MOVOU C1, (6*16)(oup) - MOVOU (7*16)(inp), D0; PXOR D0, D1; MOVOU D1, (7*16)(oup) - MOVOU (8*16)(inp), D0; PXOR D0, A2; MOVOU A2, (8*16)(oup) - MOVOU (9*16)(inp), D0; PXOR D0, B2; MOVOU B2, (9*16)(oup) - MOVOU (10*16)(inp), D0; PXOR D0, C2; MOVOU C2, (10*16)(oup) - MOVOU (11*16)(inp), D0; PXOR D0, D2; MOVOU D2, (11*16)(oup) - MOVOU (12*16)(inp), D0; PXOR D0, A3; MOVOU A3, (12*16)(oup) - MOVOU (13*16)(inp), D0; PXOR D0, B3; MOVOU B3, (13*16)(oup) - MOVOU (14*16)(inp), D0; PXOR D0, C3; MOVOU C3, (14*16)(oup) - MOVOU (15*16)(inp), D0; PXOR tmpStore, D0; MOVOU D0, (15*16)(oup) - LEAQ 256(inp), inp - LEAQ 256(oup), oup - SUBQ $256, inl + MOVO X15, 64(BP) + MOVOU (SI), X15 + PXOR X15, X0 + MOVOU X0, (DI) + MOVOU 16(SI), X15 + PXOR X15, X3 + MOVOU X3, 16(DI) + MOVOU 32(SI), X15 + PXOR X15, X6 + MOVOU X6, 32(DI) + MOVOU 48(SI), X15 + PXOR X15, X9 + MOVOU X9, 48(DI) + MOVOU 64(SI), X9 + PXOR X9, X1 + MOVOU X1, 64(DI) + MOVOU 80(SI), X9 + PXOR X9, X4 + MOVOU X4, 80(DI) + MOVOU 96(SI), X9 + PXOR X9, X7 + MOVOU X7, 96(DI) + MOVOU 112(SI), X9 + PXOR X9, X10 + MOVOU X10, 112(DI) + MOVOU 128(SI), X9 + PXOR X9, X2 + MOVOU X2, 128(DI) + MOVOU 144(SI), X9 + PXOR X9, X5 + MOVOU X5, 144(DI) + MOVOU 160(SI), X9 + PXOR X9, X8 + MOVOU X8, 160(DI) + MOVOU 176(SI), X9 + PXOR X9, X11 + MOVOU X11, 176(DI) + MOVOU 192(SI), X9 + PXOR X9, X12 + MOVOU X12, 192(DI) + MOVOU 208(SI), X9 + PXOR X9, X13 + MOVOU X13, 208(DI) + MOVOU 224(SI), X9 + PXOR X9, X14 + MOVOU X14, 224(DI) + MOVOU 240(SI), X9 + PXOR 64(BP), X9 + MOVOU X9, 240(DI) + LEAQ 256(SI), SI + LEAQ 256(DI), DI + SUBQ $0x00000100, BX JMP openSSEMainLoop openSSEMainLoopDone: // Handle the various tail sizes efficiently - TESTQ inl, inl + TESTQ BX, BX JE openSSEFinalize - CMPQ inl, $64 + CMPQ BX, $0x40 JBE openSSETail64 - CMPQ inl, $128 + CMPQ BX, $0x80 JBE openSSETail128 - CMPQ inl, $192 + CMPQ BX, $0xc0 JBE openSSETail192 JMP openSSETail256 openSSEFinalize: // Hash in the PT, AAD lengths - ADDQ ad_len+80(FP), acc0; ADCQ src_len+56(FP), acc1; ADCQ $1, acc2 - polyMul + ADDQ ad_len+80(FP), R10 + ADCQ src_len+56(FP), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 // Final reduce - MOVQ acc0, t0 - MOVQ acc1, t1 - MOVQ acc2, t2 - SUBQ $-5, acc0 - SBBQ $-1, acc1 - SBBQ $3, acc2 - CMOVQCS t0, acc0 - CMOVQCS t1, acc1 - CMOVQCS t2, acc2 + MOVQ R10, R13 + MOVQ R11, R14 + MOVQ R12, R15 + SUBQ $-5, R10 + SBBQ $-1, R11 + SBBQ $0x03, R12 + CMOVQCS R13, R10 + CMOVQCS R14, R11 + CMOVQCS R15, R12 // Add in the "s" part of the key - ADDQ 0+sStore, acc0 - ADCQ 8+sStore, acc1 + ADDQ 16(BP), R10 + ADCQ 24(BP), R11 // Finally, constant time compare to the tag at the end of the message XORQ AX, AX - MOVQ $1, DX - XORQ (0*8)(inp), acc0 - XORQ (1*8)(inp), acc1 - ORQ acc1, acc0 + MOVQ $0x00000001, DX + XORQ (SI), R10 + XORQ 8(SI), R11 + ORQ R11, R10 CMOVQEQ DX, AX // Return true iff tags are equal MOVB AX, ret+96(FP) RET -// ---------------------------------------------------------------------------- -// Special optimization for buffers smaller than 129 bytes openSSE128: - // For up to 128 bytes of ciphertext and 64 bytes for the poly key, we require to process three blocks - MOVOU ·chacha20Constants<>(SB), A0; MOVOU (1*16)(keyp), B0; MOVOU (2*16)(keyp), C0; MOVOU (3*16)(keyp), D0 - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 - MOVO B0, T1; MOVO C0, T2; MOVO D1, T3 - MOVQ $10, itr2 + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X3, X13 + MOVO X6, X14 + MOVO X10, X15 + MOVQ $0x0000000a, R9 openSSE128InnerCipherLoop: - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Left; shiftB1Left; shiftB2Left - shiftC0Left; shiftC1Left; shiftC2Left - shiftD0Left; shiftD1Left; shiftD2Left - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Right; shiftB1Right; shiftB2Right - shiftC0Right; shiftC1Right; shiftC2Right - shiftD0Right; shiftD1Right; shiftD2Right - DECQ itr2 - JNE openSSE128InnerCipherLoop + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + DECQ R9 + JNE openSSE128InnerCipherLoop // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded - PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 - PADDL T1, B0; PADDL T1, B1; PADDL T1, B2 - PADDL T2, C1; PADDL T2, C2 - PADDL T3, D1; PADDL ·sseIncMask<>(SB), T3; PADDL T3, D2 + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL X13, X3 + PADDL X13, X4 + PADDL X13, X5 + PADDL X14, X7 + PADDL X14, X8 + PADDL X15, X10 + PADDL ·sseIncMask<>+0(SB), X15 + PADDL X15, X11 // Clamp and store the key - PAND ·polyClampMask<>(SB), A0 - MOVOU A0, rStore; MOVOU B0, sStore + PAND ·polyClampMask<>+0(SB), X0 + MOVOU X0, (BP) + MOVOU X3, 16(BP) // Hash - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) openSSE128Open: - CMPQ inl, $16 + CMPQ BX, $0x10 JB openSSETail16 - SUBQ $16, inl + SUBQ $0x10, BX // Load for hashing - polyAdd(0(inp)) + ADDQ (SI), R10 + ADCQ 8(SI), R11 + ADCQ $0x01, R12 // Load for decryption - MOVOU (inp), T0; PXOR T0, A1; MOVOU A1, (oup) - LEAQ (1*16)(inp), inp - LEAQ (1*16)(oup), oup - polyMul + MOVOU (SI), X12 + PXOR X12, X1 + MOVOU X1, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 // Shift the stream "left" - MOVO B1, A1 - MOVO C1, B1 - MOVO D1, C1 - MOVO A2, D1 - MOVO B2, A2 - MOVO C2, B2 - MOVO D2, C2 + MOVO X4, X1 + MOVO X7, X4 + MOVO X10, X7 + MOVO X2, X10 + MOVO X5, X2 + MOVO X8, X5 + MOVO X11, X8 JMP openSSE128Open openSSETail16: - TESTQ inl, inl + TESTQ BX, BX JE openSSEFinalize // We can safely load the CT from the end, because it is padded with the MAC - MOVQ inl, itr2 - SHLQ $4, itr2 - LEAQ ·andMask<>(SB), t0 - MOVOU (inp), T0 - ADDQ inl, inp - PAND -16(t0)(itr2*1), T0 - MOVO T0, 0+tmpStore - MOVQ T0, t0 - MOVQ 8+tmpStore, t1 - PXOR A1, T0 + MOVQ BX, R9 + SHLQ $0x04, R9 + LEAQ ·andMask<>+0(SB), R13 + MOVOU (SI), X12 + ADDQ BX, SI + PAND -16(R13)(R9*1), X12 + MOVO X12, 64(BP) + MOVQ X12, R13 + MOVQ 72(BP), R14 + PXOR X1, X12 // We can only store one byte at a time, since plaintext can be shorter than 16 bytes openSSETail16Store: - MOVQ T0, t3 - MOVB t3, (oup) - PSRLDQ $1, T0 - INCQ oup - DECQ inl + MOVQ X12, R8 + MOVB R8, (DI) + PSRLDQ $0x01, X12 + INCQ DI + DECQ BX JNE openSSETail16Store - ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 - polyMul + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 JMP openSSEFinalize -// ---------------------------------------------------------------------------- -// Special optimization for the last 64 bytes of ciphertext openSSETail64: - // Need to decrypt up to 64 bytes - prepare single block - MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store - XORQ itr2, itr2 - MOVQ inl, itr1 - CMPQ itr1, $16 - JB openSSETail64LoopB + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 80(BP) + XORQ R9, R9 + MOVQ BX, CX + CMPQ CX, $0x10 + JB openSSETail64LoopB openSSETail64LoopA: - // Perform ChaCha rounds, while hashing the remaining input - polyAdd(0(inp)(itr2*1)) - polyMul - SUBQ $16, itr1 + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + SUBQ $0x10, CX openSSETail64LoopB: - ADDQ $16, itr2 - chachaQR(A0, B0, C0, D0, T0) - shiftB0Left; shiftC0Left; shiftD0Left - chachaQR(A0, B0, C0, D0, T0) - shiftB0Right; shiftC0Right; shiftD0Right - - CMPQ itr1, $16 - JAE openSSETail64LoopA - - CMPQ itr2, $160 - JNE openSSETail64LoopB - - PADDL ·chacha20Constants<>(SB), A0; PADDL state1Store, B0; PADDL state2Store, C0; PADDL ctr0Store, D0 + ADDQ $0x10, R9 + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + CMPQ CX, $0x10 + JAE openSSETail64LoopA + CMPQ R9, $0xa0 + JNE openSSETail64LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL 32(BP), X3 + PADDL 48(BP), X6 + PADDL 80(BP), X9 openSSETail64DecLoop: - CMPQ inl, $16 + CMPQ BX, $0x10 JB openSSETail64DecLoopDone - SUBQ $16, inl - MOVOU (inp), T0 - PXOR T0, A0 - MOVOU A0, (oup) - LEAQ 16(inp), inp - LEAQ 16(oup), oup - MOVO B0, A0 - MOVO C0, B0 - MOVO D0, C0 + SUBQ $0x10, BX + MOVOU (SI), X12 + PXOR X12, X0 + MOVOU X0, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + MOVO X3, X0 + MOVO X6, X3 + MOVO X9, X6 JMP openSSETail64DecLoop openSSETail64DecLoopDone: - MOVO A0, A1 + MOVO X0, X1 JMP openSSETail16 -// ---------------------------------------------------------------------------- -// Special optimization for the last 128 bytes of ciphertext openSSETail128: - // Need to decrypt up to 128 bytes - prepare two blocks - MOVO ·chacha20Constants<>(SB), A1; MOVO state1Store, B1; MOVO state2Store, C1; MOVO ctr3Store, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr0Store - MOVO A1, A0; MOVO B1, B0; MOVO C1, C0; MOVO D1, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr1Store - XORQ itr2, itr2 - MOVQ inl, itr1 - ANDQ $-16, itr1 + MOVO ·chacha20Constants<>+0(SB), X1 + MOVO 32(BP), X4 + MOVO 48(BP), X7 + MOVO 128(BP), X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 80(BP) + MOVO X1, X0 + MOVO X4, X3 + MOVO X7, X6 + MOVO X10, X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 96(BP) + XORQ R9, R9 + MOVQ BX, CX + ANDQ $-16, CX openSSETail128LoopA: - // Perform ChaCha rounds, while hashing the remaining input - polyAdd(0(inp)(itr2*1)) - polyMul + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 openSSETail128LoopB: - ADDQ $16, itr2 - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) - shiftB0Left; shiftC0Left; shiftD0Left - shiftB1Left; shiftC1Left; shiftD1Left - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) - shiftB0Right; shiftC0Right; shiftD0Right - shiftB1Right; shiftC1Right; shiftD1Right + ADDQ $0x10, R9 + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + CMPQ R9, CX + JB openSSETail128LoopA + CMPQ R9, $0xa0 + JNE openSSETail128LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 96(BP), X9 + PADDL 80(BP), X10 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X1 + PXOR X13, X4 + PXOR X14, X7 + PXOR X15, X10 + MOVOU X1, (DI) + MOVOU X4, 16(DI) + MOVOU X7, 32(DI) + MOVOU X10, 48(DI) + SUBQ $0x40, BX + LEAQ 64(SI), SI + LEAQ 64(DI), DI + JMP openSSETail64DecLoop - CMPQ itr2, itr1 - JB openSSETail128LoopA - - CMPQ itr2, $160 - JNE openSSETail128LoopB - - PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1 - PADDL state1Store, B0; PADDL state1Store, B1 - PADDL state2Store, C0; PADDL state2Store, C1 - PADDL ctr1Store, D0; PADDL ctr0Store, D1 - - MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 - PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 - MOVOU A1, (0*16)(oup); MOVOU B1, (1*16)(oup); MOVOU C1, (2*16)(oup); MOVOU D1, (3*16)(oup) - - SUBQ $64, inl - LEAQ 64(inp), inp - LEAQ 64(oup), oup - JMP openSSETail64DecLoop - -// ---------------------------------------------------------------------------- -// Special optimization for the last 192 bytes of ciphertext openSSETail192: - // Need to decrypt up to 192 bytes - prepare three blocks - MOVO ·chacha20Constants<>(SB), A2; MOVO state1Store, B2; MOVO state2Store, C2; MOVO ctr3Store, D2; PADDL ·sseIncMask<>(SB), D2; MOVO D2, ctr0Store - MOVO A2, A1; MOVO B2, B1; MOVO C2, C1; MOVO D2, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store - MOVO A1, A0; MOVO B1, B0; MOVO C1, C0; MOVO D1, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr2Store - - MOVQ inl, itr1 - MOVQ $160, itr2 - CMPQ itr1, $160 - CMOVQGT itr2, itr1 - ANDQ $-16, itr1 - XORQ itr2, itr2 + MOVO ·chacha20Constants<>+0(SB), X2 + MOVO 32(BP), X5 + MOVO 48(BP), X8 + MOVO 128(BP), X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X11, 80(BP) + MOVO X2, X1 + MOVO X5, X4 + MOVO X8, X7 + MOVO X11, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 96(BP) + MOVO X1, X0 + MOVO X4, X3 + MOVO X7, X6 + MOVO X10, X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 112(BP) + MOVQ BX, CX + MOVQ $0x000000a0, R9 + CMPQ CX, $0xa0 + CMOVQGT R9, CX + ANDQ $-16, CX + XORQ R9, R9 openSSLTail192LoopA: - // Perform ChaCha rounds, while hashing the remaining input - polyAdd(0(inp)(itr2*1)) - polyMul + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 openSSLTail192LoopB: - ADDQ $16, itr2 - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Left; shiftC0Left; shiftD0Left - shiftB1Left; shiftC1Left; shiftD1Left - shiftB2Left; shiftC2Left; shiftD2Left - - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Right; shiftC0Right; shiftD0Right - shiftB1Right; shiftC1Right; shiftD1Right - shiftB2Right; shiftC2Right; shiftD2Right - - CMPQ itr2, itr1 - JB openSSLTail192LoopA - - CMPQ itr2, $160 - JNE openSSLTail192LoopB - - CMPQ inl, $176 - JB openSSLTail192Store - - polyAdd(160(inp)) - polyMul - - CMPQ inl, $192 - JB openSSLTail192Store - - polyAdd(176(inp)) - polyMul + ADDQ $0x10, R9 + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + CMPQ R9, CX + JB openSSLTail192LoopA + CMPQ R9, $0xa0 + JNE openSSLTail192LoopB + CMPQ BX, $0xb0 + JB openSSLTail192Store + ADDQ 160(SI), R10 + ADCQ 168(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + CMPQ BX, $0xc0 + JB openSSLTail192Store + ADDQ 176(SI), R10 + ADCQ 184(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 openSSLTail192Store: - PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 - PADDL state1Store, B0; PADDL state1Store, B1; PADDL state1Store, B2 - PADDL state2Store, C0; PADDL state2Store, C1; PADDL state2Store, C2 - PADDL ctr2Store, D0; PADDL ctr1Store, D1; PADDL ctr0Store, D2 + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 32(BP), X5 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 48(BP), X8 + PADDL 112(BP), X9 + PADDL 96(BP), X10 + PADDL 80(BP), X11 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X2 + PXOR X13, X5 + PXOR X14, X8 + PXOR X15, X11 + MOVOU X2, (DI) + MOVOU X5, 16(DI) + MOVOU X8, 32(DI) + MOVOU X11, 48(DI) + MOVOU 64(SI), X12 + MOVOU 80(SI), X13 + MOVOU 96(SI), X14 + MOVOU 112(SI), X15 + PXOR X12, X1 + PXOR X13, X4 + PXOR X14, X7 + PXOR X15, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + SUBQ $0x80, BX + LEAQ 128(SI), SI + LEAQ 128(DI), DI + JMP openSSETail64DecLoop - MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 - PXOR T0, A2; PXOR T1, B2; PXOR T2, C2; PXOR T3, D2 - MOVOU A2, (0*16)(oup); MOVOU B2, (1*16)(oup); MOVOU C2, (2*16)(oup); MOVOU D2, (3*16)(oup) - - MOVOU (4*16)(inp), T0; MOVOU (5*16)(inp), T1; MOVOU (6*16)(inp), T2; MOVOU (7*16)(inp), T3 - PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 - MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) - - SUBQ $128, inl - LEAQ 128(inp), inp - LEAQ 128(oup), oup - JMP openSSETail64DecLoop - -// ---------------------------------------------------------------------------- -// Special optimization for the last 256 bytes of ciphertext openSSETail256: - // Need to decrypt up to 256 bytes - prepare four blocks - MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 - MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 // Store counters - MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store - XORQ itr2, itr2 + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) + XORQ R9, R9 openSSETail256Loop: - // This loop inteleaves 8 ChaCha quarter rounds with 1 poly multiplication - polyAdd(0(inp)(itr2*1)) - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left - shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left - shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left - polyMulStage1 - polyMulStage2 - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - polyMulStage3 - polyMulReduceStage - shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right - shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right - shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right - ADDQ $2*8, itr2 - CMPQ itr2, $160 - JB openSSETail256Loop - MOVQ inl, itr1 - ANDQ $-16, itr1 + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + ADDQ $0x10, R9 + CMPQ R9, $0xa0 + JB openSSETail256Loop + MOVQ BX, CX + ANDQ $-16, CX openSSETail256HashLoop: - polyAdd(0(inp)(itr2*1)) - polyMul - ADDQ $2*8, itr2 - CMPQ itr2, itr1 - JB openSSETail256HashLoop + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ $0x10, R9 + CMPQ R9, CX + JB openSSETail256HashLoop // Add in the state - PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 - PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 - PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 - PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 - MOVO D3, tmpStore + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X6 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 80(BP), X9 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 + MOVO X15, 64(BP) // Load - xor - store - MOVOU (0*16)(inp), D3; PXOR D3, A0 - MOVOU (1*16)(inp), D3; PXOR D3, B0 - MOVOU (2*16)(inp), D3; PXOR D3, C0 - MOVOU (3*16)(inp), D3; PXOR D3, D0 - MOVOU A0, (0*16)(oup) - MOVOU B0, (1*16)(oup) - MOVOU C0, (2*16)(oup) - MOVOU D0, (3*16)(oup) - MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 - PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 - MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) - MOVOU (8*16)(inp), A0; MOVOU (9*16)(inp), B0; MOVOU (10*16)(inp), C0; MOVOU (11*16)(inp), D0 - PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 - MOVOU A2, (8*16)(oup); MOVOU B2, (9*16)(oup); MOVOU C2, (10*16)(oup); MOVOU D2, (11*16)(oup) - LEAQ 192(inp), inp - LEAQ 192(oup), oup - SUBQ $192, inl - MOVO A3, A0 - MOVO B3, B0 - MOVO C3, C0 - MOVO tmpStore, D0 + MOVOU (SI), X15 + PXOR X15, X0 + MOVOU 16(SI), X15 + PXOR X15, X3 + MOVOU 32(SI), X15 + PXOR X15, X6 + MOVOU 48(SI), X15 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVOU 64(SI), X0 + MOVOU 80(SI), X3 + MOVOU 96(SI), X6 + MOVOU 112(SI), X9 + PXOR X0, X1 + PXOR X3, X4 + PXOR X6, X7 + PXOR X9, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + MOVOU 128(SI), X0 + MOVOU 144(SI), X3 + MOVOU 160(SI), X6 + MOVOU 176(SI), X9 + PXOR X0, X2 + PXOR X3, X5 + PXOR X6, X8 + PXOR X9, X11 + MOVOU X2, 128(DI) + MOVOU X5, 144(DI) + MOVOU X8, 160(DI) + MOVOU X11, 176(DI) + LEAQ 192(SI), SI + LEAQ 192(DI), DI + SUBQ $0xc0, BX + MOVO X12, X0 + MOVO X13, X3 + MOVO X14, X6 + MOVO 64(BP), X9 + JMP openSSETail64DecLoop - JMP openSSETail64DecLoop - -// ---------------------------------------------------------------------------- -// ------------------------- AVX2 Code ---------------------------------------- chacha20Poly1305Open_AVX2: VZEROUPPER - VMOVDQU ·chacha20Constants<>(SB), AA0 - BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x70; BYTE $0x10 // broadcasti128 16(r8), ymm14 - BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x20 // broadcasti128 32(r8), ymm12 - BYTE $0xc4; BYTE $0xc2; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x30 // broadcasti128 48(r8), ymm4 - VPADDD ·avx2InitMask<>(SB), DD0, DD0 + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x70 + BYTE $0x10 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x20 + BYTE $0xc4 + BYTE $0xc2 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x30 + VPADDD ·avx2InitMask<>+0(SB), Y4, Y4 // Special optimization, for very short buffers - CMPQ inl, $192 + CMPQ BX, $0xc0 JBE openAVX2192 - CMPQ inl, $320 + CMPQ BX, $0x00000140 JBE openAVX2320 // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream - VMOVDQA BB0, state1StoreAVX2 - VMOVDQA CC0, state2StoreAVX2 - VMOVDQA DD0, ctr3StoreAVX2 - MOVQ $10, itr2 + VMOVDQA Y14, 32(BP) + VMOVDQA Y12, 64(BP) + VMOVDQA Y4, 192(BP) + MOVQ $0x0000000a, R9 openAVX2PreparePolyKey: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 - DECQ itr2 - JNE openAVX2PreparePolyKey - - VPADDD ·chacha20Constants<>(SB), AA0, AA0 - VPADDD state1StoreAVX2, BB0, BB0 - VPADDD state2StoreAVX2, CC0, CC0 - VPADDD ctr3StoreAVX2, DD0, DD0 - - VPERM2I128 $0x02, AA0, BB0, TT0 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + DECQ R9 + JNE openAVX2PreparePolyKey + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD 32(BP), Y14, Y14 + VPADDD 64(BP), Y12, Y12 + VPADDD 192(BP), Y4, Y4 + VPERM2I128 $0x02, Y0, Y14, Y3 // Clamp and store poly key - VPAND ·polyClampMask<>(SB), TT0, TT0 - VMOVDQA TT0, rsStoreAVX2 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) // Stream for the first 64 bytes - VPERM2I128 $0x13, AA0, BB0, AA0 - VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 // Hash AD + first 64 bytes - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) - XORQ itr1, itr1 + XORQ CX, CX openAVX2InitialHash64: - polyAdd(0(inp)(itr1*1)) - polyMulAVX2 - ADDQ $16, itr1 - CMPQ itr1, $64 - JNE openAVX2InitialHash64 + ADDQ (SI)(CX*1), R10 + ADCQ 8(SI)(CX*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ $0x10, CX + CMPQ CX, $0x40 + JNE openAVX2InitialHash64 // Decrypt the first 64 bytes - VPXOR (0*32)(inp), AA0, AA0 - VPXOR (1*32)(inp), BB0, BB0 - VMOVDQU AA0, (0*32)(oup) - VMOVDQU BB0, (1*32)(oup) - LEAQ (2*32)(inp), inp - LEAQ (2*32)(oup), oup - SUBQ $64, inl + VPXOR (SI), Y0, Y0 + VPXOR 32(SI), Y14, Y14 + VMOVDQU Y0, (DI) + VMOVDQU Y14, 32(DI) + LEAQ 64(SI), SI + LEAQ 64(DI), DI + SUBQ $0x40, BX openAVX2MainLoop: - CMPQ inl, $512 + CMPQ BX, $0x00000200 JB openAVX2MainLoopDone // Load state, increment counter blocks, store the incremented counters - VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 - VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 - VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 - XORQ itr1, itr1 + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + XORQ CX, CX openAVX2InternalLoop: - // Lets just say this spaghetti loop interleaves 2 quarter rounds with 3 poly multiplications - // Effectively per 512 bytes of stream we hash 480 bytes of ciphertext - polyAdd(0*8(inp)(itr1*1)) - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - polyMulStage1_AVX2 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - polyMulStage2_AVX2 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - polyMulStage3_AVX2 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulReduceStage - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - polyAdd(2*8(inp)(itr1*1)) - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - polyMulStage1_AVX2 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulStage2_AVX2 - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - polyMulStage3_AVX2 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - polyMulReduceStage - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - polyAdd(4*8(inp)(itr1*1)) - LEAQ (6*8)(itr1), itr1 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulStage1_AVX2 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - polyMulStage2_AVX2 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - polyMulStage3_AVX2 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulReduceStage - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 - CMPQ itr1, $480 + ADDQ (SI)(CX*1), R10 + ADCQ 8(SI)(CX*1), R11 + ADCQ $0x01, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + ADDQ 16(SI)(CX*1), R10 + ADCQ 24(SI)(CX*1), R11 + ADCQ $0x01, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 32(SI)(CX*1), R10 + ADCQ 40(SI)(CX*1), R11 + ADCQ $0x01, R12 + LEAQ 48(CX), CX + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + CMPQ CX, $0x000001e0 JNE openAVX2InternalLoop - - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 - VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 - VMOVDQA CC3, tmpStoreAVX2 + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) // We only hashed 480 of the 512 bytes available - hash the remaining 32 here - polyAdd(480(inp)) - polyMulAVX2 - VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 - VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 - VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) - VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 - VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 - VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + ADDQ 480(SI), R10 + ADCQ 488(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPERM2I128 $0x02, Y0, Y14, Y15 + VPERM2I128 $0x13, Y0, Y14, Y14 + VPERM2I128 $0x02, Y12, Y4, Y0 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPXOR (SI), Y15, Y15 + VPXOR 32(SI), Y0, Y0 + VPXOR 64(SI), Y14, Y14 + VPXOR 96(SI), Y12, Y12 + VMOVDQU Y15, (DI) + VMOVDQU Y0, 32(DI) + VMOVDQU Y14, 64(DI) + VMOVDQU Y12, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) // and here - polyAdd(496(inp)) - polyMulAVX2 - VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 - VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 - VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) - VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 - VPXOR (12*32)(inp), AA0, AA0; VPXOR (13*32)(inp), BB0, BB0; VPXOR (14*32)(inp), CC0, CC0; VPXOR (15*32)(inp), DD0, DD0 - VMOVDQU AA0, (12*32)(oup); VMOVDQU BB0, (13*32)(oup); VMOVDQU CC0, (14*32)(oup); VMOVDQU DD0, (15*32)(oup) - LEAQ (32*16)(inp), inp - LEAQ (32*16)(oup), oup - SUBQ $(32*16), inl + ADDQ 496(SI), R10 + ADCQ 504(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + VPXOR 384(SI), Y0, Y0 + VPXOR 416(SI), Y14, Y14 + VPXOR 448(SI), Y12, Y12 + VPXOR 480(SI), Y4, Y4 + VMOVDQU Y0, 384(DI) + VMOVDQU Y14, 416(DI) + VMOVDQU Y12, 448(DI) + VMOVDQU Y4, 480(DI) + LEAQ 512(SI), SI + LEAQ 512(DI), DI + SUBQ $0x00000200, BX JMP openAVX2MainLoop openAVX2MainLoopDone: // Handle the various tail sizes efficiently - TESTQ inl, inl + TESTQ BX, BX JE openSSEFinalize - CMPQ inl, $128 + CMPQ BX, $0x80 JBE openAVX2Tail128 - CMPQ inl, $256 + CMPQ BX, $0x00000100 JBE openAVX2Tail256 - CMPQ inl, $384 + CMPQ BX, $0x00000180 JBE openAVX2Tail384 JMP openAVX2Tail512 -// ---------------------------------------------------------------------------- -// Special optimization for buffers smaller than 193 bytes openAVX2192: - // For up to 192 bytes of ciphertext and 64 bytes for the poly key, we process four blocks - VMOVDQA AA0, AA1 - VMOVDQA BB0, BB1 - VMOVDQA CC0, CC1 - VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VMOVDQA AA0, AA2 - VMOVDQA BB0, BB2 - VMOVDQA CC0, CC2 - VMOVDQA DD0, DD2 - VMOVDQA DD1, TT3 - MOVQ $10, itr2 + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VMOVDQA Y4, Y2 + VMOVDQA Y1, Y15 + MOVQ $0x0000000a, R9 openAVX2192InnerCipherLoop: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 - DECQ itr2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + DECQ R9 JNE openAVX2192InnerCipherLoop - VPADDD AA2, AA0, AA0; VPADDD AA2, AA1, AA1 - VPADDD BB2, BB0, BB0; VPADDD BB2, BB1, BB1 - VPADDD CC2, CC0, CC0; VPADDD CC2, CC1, CC1 - VPADDD DD2, DD0, DD0; VPADDD TT3, DD1, DD1 - VPERM2I128 $0x02, AA0, BB0, TT0 + VPADDD Y6, Y0, Y0 + VPADDD Y6, Y5, Y5 + VPADDD Y10, Y14, Y14 + VPADDD Y10, Y9, Y9 + VPADDD Y8, Y12, Y12 + VPADDD Y8, Y13, Y13 + VPADDD Y2, Y4, Y4 + VPADDD Y15, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y3 // Clamp and store poly key - VPAND ·polyClampMask<>(SB), TT0, TT0 - VMOVDQA TT0, rsStoreAVX2 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) // Stream for up to 192 bytes - VPERM2I128 $0x13, AA0, BB0, AA0 - VPERM2I128 $0x13, CC0, DD0, BB0 - VPERM2I128 $0x02, AA1, BB1, CC0 - VPERM2I128 $0x02, CC1, DD1, DD0 - VPERM2I128 $0x13, AA1, BB1, AA1 - VPERM2I128 $0x13, CC1, DD1, BB1 + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 openAVX2ShortOpen: // Hash - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) openAVX2ShortOpenLoop: - CMPQ inl, $32 + CMPQ BX, $0x20 JB openAVX2ShortTail32 - SUBQ $32, inl + SUBQ $0x20, BX // Load for hashing - polyAdd(0*8(inp)) - polyMulAVX2 - polyAdd(2*8(inp)) - polyMulAVX2 + ADDQ (SI), R10 + ADCQ 8(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ 16(SI), R10 + ADCQ 24(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 // Load for decryption - VPXOR (inp), AA0, AA0 - VMOVDQU AA0, (oup) - LEAQ (1*32)(inp), inp - LEAQ (1*32)(oup), oup + VPXOR (SI), Y0, Y0 + VMOVDQU Y0, (DI) + LEAQ 32(SI), SI + LEAQ 32(DI), DI // Shift stream left - VMOVDQA BB0, AA0 - VMOVDQA CC0, BB0 - VMOVDQA DD0, CC0 - VMOVDQA AA1, DD0 - VMOVDQA BB1, AA1 - VMOVDQA CC1, BB1 - VMOVDQA DD1, CC1 - VMOVDQA AA2, DD1 - VMOVDQA BB2, AA2 + VMOVDQA Y14, Y0 + VMOVDQA Y12, Y14 + VMOVDQA Y4, Y12 + VMOVDQA Y5, Y4 + VMOVDQA Y9, Y5 + VMOVDQA Y13, Y9 + VMOVDQA Y1, Y13 + VMOVDQA Y6, Y1 + VMOVDQA Y10, Y6 JMP openAVX2ShortOpenLoop openAVX2ShortTail32: - CMPQ inl, $16 - VMOVDQA A0, A1 + CMPQ BX, $0x10 + VMOVDQA X0, X1 JB openAVX2ShortDone - - SUBQ $16, inl + SUBQ $0x10, BX // Load for hashing - polyAdd(0*8(inp)) - polyMulAVX2 + ADDQ (SI), R10 + ADCQ 8(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 // Load for decryption - VPXOR (inp), A0, T0 - VMOVDQU T0, (oup) - LEAQ (1*16)(inp), inp - LEAQ (1*16)(oup), oup - VPERM2I128 $0x11, AA0, AA0, AA0 - VMOVDQA A0, A1 + VPXOR (SI), X0, X12 + VMOVDQU X12, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + VPERM2I128 $0x11, Y0, Y0, Y0 + VMOVDQA X0, X1 openAVX2ShortDone: VZEROUPPER JMP openSSETail16 -// ---------------------------------------------------------------------------- -// Special optimization for buffers smaller than 321 bytes openAVX2320: - // For up to 320 bytes of ciphertext and 64 bytes for the poly key, we process six blocks - VMOVDQA AA0, AA1; VMOVDQA BB0, BB1; VMOVDQA CC0, CC1; VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VMOVDQA AA0, AA2; VMOVDQA BB0, BB2; VMOVDQA CC0, CC2; VPADDD ·avx2IncMask<>(SB), DD1, DD2 - VMOVDQA BB0, TT1; VMOVDQA CC0, TT2; VMOVDQA DD0, TT3 - MOVQ $10, itr2 + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y14, Y7 + VMOVDQA Y12, Y11 + VMOVDQA Y4, Y15 + MOVQ $0x0000000a, R9 openAVX2320InnerCipherLoop: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 - DECQ itr2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + DECQ R9 JNE openAVX2320InnerCipherLoop - - VMOVDQA ·chacha20Constants<>(SB), TT0 - VPADDD TT0, AA0, AA0; VPADDD TT0, AA1, AA1; VPADDD TT0, AA2, AA2 - VPADDD TT1, BB0, BB0; VPADDD TT1, BB1, BB1; VPADDD TT1, BB2, BB2 - VPADDD TT2, CC0, CC0; VPADDD TT2, CC1, CC1; VPADDD TT2, CC2, CC2 - VMOVDQA ·avx2IncMask<>(SB), TT0 - VPADDD TT3, DD0, DD0; VPADDD TT0, TT3, TT3 - VPADDD TT3, DD1, DD1; VPADDD TT0, TT3, TT3 - VPADDD TT3, DD2, DD2 + VMOVDQA ·chacha20Constants<>+0(SB), Y3 + VPADDD Y3, Y0, Y0 + VPADDD Y3, Y5, Y5 + VPADDD Y3, Y6, Y6 + VPADDD Y7, Y14, Y14 + VPADDD Y7, Y9, Y9 + VPADDD Y7, Y10, Y10 + VPADDD Y11, Y12, Y12 + VPADDD Y11, Y13, Y13 + VPADDD Y11, Y8, Y8 + VMOVDQA ·avx2IncMask<>+0(SB), Y3 + VPADDD Y15, Y4, Y4 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y1, Y1 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y2, Y2 // Clamp and store poly key - VPERM2I128 $0x02, AA0, BB0, TT0 - VPAND ·polyClampMask<>(SB), TT0, TT0 - VMOVDQA TT0, rsStoreAVX2 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) // Stream for up to 320 bytes - VPERM2I128 $0x13, AA0, BB0, AA0 - VPERM2I128 $0x13, CC0, DD0, BB0 - VPERM2I128 $0x02, AA1, BB1, CC0 - VPERM2I128 $0x02, CC1, DD1, DD0 - VPERM2I128 $0x13, AA1, BB1, AA1 - VPERM2I128 $0x13, CC1, DD1, BB1 - VPERM2I128 $0x02, AA2, BB2, CC1 - VPERM2I128 $0x02, CC2, DD2, DD1 - VPERM2I128 $0x13, AA2, BB2, AA2 - VPERM2I128 $0x13, CC2, DD2, BB2 + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 + VPERM2I128 $0x02, Y6, Y10, Y13 + VPERM2I128 $0x02, Y8, Y2, Y1 + VPERM2I128 $0x13, Y6, Y10, Y6 + VPERM2I128 $0x13, Y8, Y2, Y10 JMP openAVX2ShortOpen -// ---------------------------------------------------------------------------- -// Special optimization for the last 128 bytes of ciphertext openAVX2Tail128: // Need to decrypt up to 128 bytes - prepare two blocks - VMOVDQA ·chacha20Constants<>(SB), AA1 - VMOVDQA state1StoreAVX2, BB1 - VMOVDQA state2StoreAVX2, CC1 - VMOVDQA ctr3StoreAVX2, DD1 - VPADDD ·avx2IncMask<>(SB), DD1, DD1 - VMOVDQA DD1, DD0 - - XORQ itr2, itr2 - MOVQ inl, itr1 - ANDQ $-16, itr1 - TESTQ itr1, itr1 - JE openAVX2Tail128LoopB + VMOVDQA ·chacha20Constants<>+0(SB), Y5 + VMOVDQA 32(BP), Y9 + VMOVDQA 64(BP), Y13 + VMOVDQA 192(BP), Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y1 + VMOVDQA Y1, Y4 + XORQ R9, R9 + MOVQ BX, CX + ANDQ $-16, CX + TESTQ CX, CX + JE openAVX2Tail128LoopB openAVX2Tail128LoopA: - // Perform ChaCha rounds, while hashing the remaining input - polyAdd(0(inp)(itr2*1)) - polyMulAVX2 + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 openAVX2Tail128LoopB: - ADDQ $16, itr2 - chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $4, BB1, BB1, BB1 - VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $12, DD1, DD1, DD1 - chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $12, BB1, BB1, BB1 - VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $4, DD1, DD1, DD1 - CMPQ itr2, itr1 - JB openAVX2Tail128LoopA - CMPQ itr2, $160 - JNE openAVX2Tail128LoopB - - VPADDD ·chacha20Constants<>(SB), AA1, AA1 - VPADDD state1StoreAVX2, BB1, BB1 - VPADDD state2StoreAVX2, CC1, CC1 - VPADDD DD0, DD1, DD1 - VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + ADDQ $0x10, R9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y1, Y1, Y1 + CMPQ R9, CX + JB openAVX2Tail128LoopA + CMPQ R9, $0xa0 + JNE openAVX2Tail128LoopB + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD 32(BP), Y9, Y9 + VPADDD 64(BP), Y13, Y13 + VPADDD Y4, Y1, Y1 + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 openAVX2TailLoop: - CMPQ inl, $32 + CMPQ BX, $0x20 JB openAVX2Tail - SUBQ $32, inl + SUBQ $0x20, BX // Load for decryption - VPXOR (inp), AA0, AA0 - VMOVDQU AA0, (oup) - LEAQ (1*32)(inp), inp - LEAQ (1*32)(oup), oup - VMOVDQA BB0, AA0 - VMOVDQA CC0, BB0 - VMOVDQA DD0, CC0 + VPXOR (SI), Y0, Y0 + VMOVDQU Y0, (DI) + LEAQ 32(SI), SI + LEAQ 32(DI), DI + VMOVDQA Y14, Y0 + VMOVDQA Y12, Y14 + VMOVDQA Y4, Y12 JMP openAVX2TailLoop openAVX2Tail: - CMPQ inl, $16 - VMOVDQA A0, A1 + CMPQ BX, $0x10 + VMOVDQA X0, X1 JB openAVX2TailDone - SUBQ $16, inl + SUBQ $0x10, BX // Load for decryption - VPXOR (inp), A0, T0 - VMOVDQU T0, (oup) - LEAQ (1*16)(inp), inp - LEAQ (1*16)(oup), oup - VPERM2I128 $0x11, AA0, AA0, AA0 - VMOVDQA A0, A1 + VPXOR (SI), X0, X12 + VMOVDQU X12, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + VPERM2I128 $0x11, Y0, Y0, Y0 + VMOVDQA X0, X1 openAVX2TailDone: VZEROUPPER JMP openSSETail16 -// ---------------------------------------------------------------------------- -// Special optimization for the last 256 bytes of ciphertext openAVX2Tail256: - // Need to decrypt up to 256 bytes - prepare four blocks - VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VMOVDQA DD0, TT1 - VMOVDQA DD1, TT2 + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y4, Y7 + VMOVDQA Y1, Y11 // Compute the number of iterations that will hash data - MOVQ inl, tmpStoreAVX2 - MOVQ inl, itr1 - SUBQ $128, itr1 - SHRQ $4, itr1 - MOVQ $10, itr2 - CMPQ itr1, $10 - CMOVQGT itr2, itr1 - MOVQ inp, inl - XORQ itr2, itr2 + MOVQ BX, 224(BP) + MOVQ BX, CX + SUBQ $0x80, CX + SHRQ $0x04, CX + MOVQ $0x0000000a, R9 + CMPQ CX, $0x0a + CMOVQGT R9, CX + MOVQ SI, BX + XORQ R9, R9 openAVX2Tail256LoopA: - polyAdd(0(inl)) - polyMulAVX2 - LEAQ 16(inl), inl + ADDQ (BX), R10 + ADCQ 8(BX), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(BX), BX - // Perform ChaCha rounds, while hashing the remaining input openAVX2Tail256LoopB: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 - INCQ itr2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 - CMPQ itr2, itr1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + INCQ R9 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + CMPQ R9, CX JB openAVX2Tail256LoopA + CMPQ R9, $0x0a + JNE openAVX2Tail256LoopB + MOVQ BX, R9 + SUBQ SI, BX + MOVQ BX, CX + MOVQ 224(BP), BX - CMPQ itr2, $10 - JNE openAVX2Tail256LoopB - - MOVQ inl, itr2 - SUBQ inp, inl - MOVQ inl, itr1 - MOVQ tmpStoreAVX2, inl - - // Hash the remainder of data (if any) openAVX2Tail256Hash: - ADDQ $16, itr1 - CMPQ itr1, inl - JGT openAVX2Tail256HashEnd - polyAdd (0(itr2)) - polyMulAVX2 - LEAQ 16(itr2), itr2 - JMP openAVX2Tail256Hash + ADDQ $0x10, CX + CMPQ CX, BX + JGT openAVX2Tail256HashEnd + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + JMP openAVX2Tail256Hash -// Store 128 bytes safely, then go to store loop openAVX2Tail256HashEnd: - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1 - VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1 - VPERM2I128 $0x02, AA0, BB0, AA2; VPERM2I128 $0x02, CC0, DD0, BB2; VPERM2I128 $0x13, AA0, BB0, CC2; VPERM2I128 $0x13, CC0, DD0, DD2 - VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 - - VPXOR (0*32)(inp), AA2, AA2; VPXOR (1*32)(inp), BB2, BB2; VPXOR (2*32)(inp), CC2, CC2; VPXOR (3*32)(inp), DD2, DD2 - VMOVDQU AA2, (0*32)(oup); VMOVDQU BB2, (1*32)(oup); VMOVDQU CC2, (2*32)(oup); VMOVDQU DD2, (3*32)(oup) - LEAQ (4*32)(inp), inp - LEAQ (4*32)(oup), oup - SUBQ $4*32, inl - - JMP openAVX2TailLoop - -// ---------------------------------------------------------------------------- -// Special optimization for the last 384 bytes of ciphertext -openAVX2Tail384: - // Need to decrypt up to 384 bytes - prepare six blocks - VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VPADDD ·avx2IncMask<>(SB), DD1, DD2 - VMOVDQA DD0, ctr0StoreAVX2 - VMOVDQA DD1, ctr1StoreAVX2 - VMOVDQA DD2, ctr2StoreAVX2 - - // Compute the number of iterations that will hash two blocks of data - MOVQ inl, tmpStoreAVX2 - MOVQ inl, itr1 - SUBQ $256, itr1 - SHRQ $4, itr1 - ADDQ $6, itr1 - MOVQ $10, itr2 - CMPQ itr1, $10 - CMOVQGT itr2, itr1 - MOVQ inp, inl - XORQ itr2, itr2 - - // Perform ChaCha rounds, while hashing the remaining input -openAVX2Tail384LoopB: - polyAdd(0(inl)) - polyMulAVX2 - LEAQ 16(inl), inl - -openAVX2Tail384LoopA: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 - polyAdd(0(inl)) - polyMulAVX2 - LEAQ 16(inl), inl - INCQ itr2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 - - CMPQ itr2, itr1 - JB openAVX2Tail384LoopB - - CMPQ itr2, $10 - JNE openAVX2Tail384LoopA - - MOVQ inl, itr2 - SUBQ inp, inl - MOVQ inl, itr1 - MOVQ tmpStoreAVX2, inl - -openAVX2Tail384Hash: - ADDQ $16, itr1 - CMPQ itr1, inl - JGT openAVX2Tail384HashEnd - polyAdd(0(itr2)) - polyMulAVX2 - LEAQ 16(itr2), itr2 - JMP openAVX2Tail384Hash - -// Store 256 bytes safely, then go to store loop -openAVX2Tail384HashEnd: - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2 - VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2 - VPERM2I128 $0x02, AA0, BB0, TT0; VPERM2I128 $0x02, CC0, DD0, TT1; VPERM2I128 $0x13, AA0, BB0, TT2; VPERM2I128 $0x13, CC0, DD0, TT3 - VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 - VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) - VPERM2I128 $0x02, AA1, BB1, TT0; VPERM2I128 $0x02, CC1, DD1, TT1; VPERM2I128 $0x13, AA1, BB1, TT2; VPERM2I128 $0x13, CC1, DD1, TT3 - VPXOR (4*32)(inp), TT0, TT0; VPXOR (5*32)(inp), TT1, TT1; VPXOR (6*32)(inp), TT2, TT2; VPXOR (7*32)(inp), TT3, TT3 - VMOVDQU TT0, (4*32)(oup); VMOVDQU TT1, (5*32)(oup); VMOVDQU TT2, (6*32)(oup); VMOVDQU TT3, (7*32)(oup) - VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 - LEAQ (8*32)(inp), inp - LEAQ (8*32)(oup), oup - SUBQ $8*32, inl + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD Y7, Y4, Y4 + VPADDD Y11, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y6 + VPERM2I128 $0x02, Y12, Y4, Y10 + VPERM2I128 $0x13, Y0, Y14, Y8 + VPERM2I128 $0x13, Y12, Y4, Y2 + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR (SI), Y6, Y6 + VPXOR 32(SI), Y10, Y10 + VPXOR 64(SI), Y8, Y8 + VPXOR 96(SI), Y2, Y2 + VMOVDQU Y6, (DI) + VMOVDQU Y10, 32(DI) + VMOVDQU Y8, 64(DI) + VMOVDQU Y2, 96(DI) + LEAQ 128(SI), SI + LEAQ 128(DI), DI + SUBQ $0x80, BX + JMP openAVX2TailLoop + +openAVX2Tail384: + // Need to decrypt up to 384 bytes - prepare six blocks + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + + // Compute the number of iterations that will hash two blocks of data + MOVQ BX, 224(BP) + MOVQ BX, CX + SUBQ $0x00000100, CX + SHRQ $0x04, CX + ADDQ $0x06, CX + MOVQ $0x0000000a, R9 + CMPQ CX, $0x0a + CMOVQGT R9, CX + MOVQ SI, BX + XORQ R9, R9 + +openAVX2Tail384LoopB: + ADDQ (BX), R10 + ADCQ 8(BX), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(BX), BX + +openAVX2Tail384LoopA: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + ADDQ (BX), R10 + ADCQ 8(BX), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(BX), BX + INCQ R9 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + CMPQ R9, CX + JB openAVX2Tail384LoopB + CMPQ R9, $0x0a + JNE openAVX2Tail384LoopA + MOVQ BX, R9 + SUBQ SI, BX + MOVQ BX, CX + MOVQ 224(BP), BX + +openAVX2Tail384Hash: + ADDQ $0x10, CX + CMPQ CX, BX + JGT openAVX2Tail384HashEnd + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + JMP openAVX2Tail384Hash + +openAVX2Tail384HashEnd: + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPERM2I128 $0x02, Y12, Y4, Y7 + VPERM2I128 $0x13, Y0, Y14, Y11 + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR (SI), Y3, Y3 + VPXOR 32(SI), Y7, Y7 + VPXOR 64(SI), Y11, Y11 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y3, (DI) + VMOVDQU Y7, 32(DI) + VMOVDQU Y11, 64(DI) + VMOVDQU Y15, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y3 + VPERM2I128 $0x02, Y13, Y1, Y7 + VPERM2I128 $0x13, Y5, Y9, Y11 + VPERM2I128 $0x13, Y13, Y1, Y15 + VPXOR 128(SI), Y3, Y3 + VPXOR 160(SI), Y7, Y7 + VPXOR 192(SI), Y11, Y11 + VPXOR 224(SI), Y15, Y15 + VMOVDQU Y3, 128(DI) + VMOVDQU Y7, 160(DI) + VMOVDQU Y11, 192(DI) + VMOVDQU Y15, 224(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + LEAQ 256(SI), SI + LEAQ 256(DI), DI + SUBQ $0x00000100, BX JMP openAVX2TailLoop -// ---------------------------------------------------------------------------- -// Special optimization for the last 512 bytes of ciphertext openAVX2Tail512: - VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 - VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 - VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 - XORQ itr1, itr1 - MOVQ inp, itr2 + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + XORQ CX, CX + MOVQ SI, R9 openAVX2Tail512LoopB: - polyAdd(0(itr2)) - polyMulAVX2 - LEAQ (2*8)(itr2), itr2 + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 openAVX2Tail512LoopA: - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyAdd(0*8(itr2)) - polyMulAVX2 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - polyAdd(2*8(itr2)) - polyMulAVX2 - LEAQ (4*8)(itr2), itr2 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 - INCQ itr1 - CMPQ itr1, $4 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 16(R9), R10 + ADCQ 24(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(R9), R9 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + INCQ CX + CMPQ CX, $0x04 JLT openAVX2Tail512LoopB - - CMPQ itr1, $10 - JNE openAVX2Tail512LoopA - - MOVQ inl, itr1 - SUBQ $384, itr1 - ANDQ $-16, itr1 + CMPQ CX, $0x0a + JNE openAVX2Tail512LoopA + MOVQ BX, CX + SUBQ $0x00000180, CX + ANDQ $-16, CX openAVX2Tail512HashLoop: - TESTQ itr1, itr1 + TESTQ CX, CX JE openAVX2Tail512HashEnd - polyAdd(0(itr2)) - polyMulAVX2 - LEAQ 16(itr2), itr2 - SUBQ $16, itr1 + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + SUBQ $0x10, CX JMP openAVX2Tail512HashLoop openAVX2Tail512HashEnd: - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 - VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 - VMOVDQA CC3, tmpStoreAVX2 - VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 - VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 - VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) - VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 - VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 - VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) - VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 - VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 - VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) - VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) + VPERM2I128 $0x02, Y0, Y14, Y15 + VPERM2I128 $0x13, Y0, Y14, Y14 + VPERM2I128 $0x02, Y12, Y4, Y0 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPXOR (SI), Y15, Y15 + VPXOR 32(SI), Y0, Y0 + VPXOR 64(SI), Y14, Y14 + VPXOR 96(SI), Y12, Y12 + VMOVDQU Y15, (DI) + VMOVDQU Y0, 32(DI) + VMOVDQU Y14, 64(DI) + VMOVDQU Y12, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + LEAQ 384(SI), SI + LEAQ 384(DI), DI + SUBQ $0x00000180, BX + JMP openAVX2TailLoop - LEAQ (12*32)(inp), inp - LEAQ (12*32)(oup), oup - SUBQ $12*32, inl +DATA ·chacha20Constants<>+0(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+4(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+8(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+12(SB)/4, $0x6b206574 +DATA ·chacha20Constants<>+16(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+20(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+24(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+28(SB)/4, $0x6b206574 +GLOBL ·chacha20Constants<>(SB), RODATA|NOPTR, $32 - JMP openAVX2TailLoop +DATA ·polyClampMask<>+0(SB)/8, $0x0ffffffc0fffffff +DATA ·polyClampMask<>+8(SB)/8, $0x0ffffffc0ffffffc +DATA ·polyClampMask<>+16(SB)/8, $0xffffffffffffffff +DATA ·polyClampMask<>+24(SB)/8, $0xffffffffffffffff +GLOBL ·polyClampMask<>(SB), RODATA|NOPTR, $32 -// ---------------------------------------------------------------------------- -// ---------------------------------------------------------------------------- -// func chacha20Poly1305Seal(dst, key, src, ad []byte) -TEXT ·chacha20Poly1305Seal(SB), 0, $288-96 - // For aligned stack access +DATA ·sseIncMask<>+0(SB)/8, $0x0000000000000001 +DATA ·sseIncMask<>+8(SB)/8, $0x0000000000000000 +GLOBL ·sseIncMask<>(SB), RODATA|NOPTR, $16 + +DATA ·andMask<>+0(SB)/8, $0x00000000000000ff +DATA ·andMask<>+8(SB)/8, $0x0000000000000000 +DATA ·andMask<>+16(SB)/8, $0x000000000000ffff +DATA ·andMask<>+24(SB)/8, $0x0000000000000000 +DATA ·andMask<>+32(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+40(SB)/8, $0x0000000000000000 +DATA ·andMask<>+48(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+56(SB)/8, $0x0000000000000000 +DATA ·andMask<>+64(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+72(SB)/8, $0x0000000000000000 +DATA ·andMask<>+80(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+88(SB)/8, $0x0000000000000000 +DATA ·andMask<>+96(SB)/8, $0x00ffffffffffffff +DATA ·andMask<>+104(SB)/8, $0x0000000000000000 +DATA ·andMask<>+112(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+120(SB)/8, $0x0000000000000000 +DATA ·andMask<>+128(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+136(SB)/8, $0x00000000000000ff +DATA ·andMask<>+144(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+152(SB)/8, $0x000000000000ffff +DATA ·andMask<>+160(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+168(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+176(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+184(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+192(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+200(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+208(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+216(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+224(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+232(SB)/8, $0x00ffffffffffffff +GLOBL ·andMask<>(SB), RODATA|NOPTR, $240 + +DATA ·avx2InitMask<>+0(SB)/8, $0x0000000000000000 +DATA ·avx2InitMask<>+8(SB)/8, $0x0000000000000000 +DATA ·avx2InitMask<>+16(SB)/8, $0x0000000000000001 +DATA ·avx2InitMask<>+24(SB)/8, $0x0000000000000000 +GLOBL ·avx2InitMask<>(SB), RODATA|NOPTR, $32 + +DATA ·rol16<>+0(SB)/8, $0x0504070601000302 +DATA ·rol16<>+8(SB)/8, $0x0d0c0f0e09080b0a +DATA ·rol16<>+16(SB)/8, $0x0504070601000302 +DATA ·rol16<>+24(SB)/8, $0x0d0c0f0e09080b0a +GLOBL ·rol16<>(SB), RODATA|NOPTR, $32 + +DATA ·rol8<>+0(SB)/8, $0x0605040702010003 +DATA ·rol8<>+8(SB)/8, $0x0e0d0c0f0a09080b +DATA ·rol8<>+16(SB)/8, $0x0605040702010003 +DATA ·rol8<>+24(SB)/8, $0x0e0d0c0f0a09080b +GLOBL ·rol8<>(SB), RODATA|NOPTR, $32 + +DATA ·avx2IncMask<>+0(SB)/8, $0x0000000000000002 +DATA ·avx2IncMask<>+8(SB)/8, $0x0000000000000000 +DATA ·avx2IncMask<>+16(SB)/8, $0x0000000000000002 +DATA ·avx2IncMask<>+24(SB)/8, $0x0000000000000000 +GLOBL ·avx2IncMask<>(SB), RODATA|NOPTR, $32 + +// func chacha20Poly1305Seal(dst []byte, key []uint32, src []byte, ad []byte) +// Requires: AVX, AVX2, BMI2, CMOV, SSE2 +TEXT ·chacha20Poly1305Seal(SB), $288-96 MOVQ SP, BP - ADDQ $32, BP + ADDQ $0x20, BP ANDQ $-32, BP - MOVQ dst+0(FP), oup - MOVQ key+24(FP), keyp - MOVQ src+48(FP), inp - MOVQ src_len+56(FP), inl - MOVQ ad+72(FP), adp - - CMPB ·useAVX2(SB), $1 + MOVQ dst_base+0(FP), DI + MOVQ key_base+24(FP), R8 + MOVQ src_base+48(FP), SI + MOVQ src_len+56(FP), BX + MOVQ ad_base+72(FP), CX + CMPB ·useAVX2+0(SB), $0x01 JE chacha20Poly1305Seal_AVX2 // Special optimization, for very short buffers - CMPQ inl, $128 - JBE sealSSE128 // About 15% faster + CMPQ BX, $0x80 + JBE sealSSE128 // In the seal case - prepare the poly key + 3 blocks of stream in the first iteration - MOVOU ·chacha20Constants<>(SB), A0 - MOVOU (1*16)(keyp), B0 - MOVOU (2*16)(keyp), C0 - MOVOU (3*16)(keyp), D0 + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 // Store state on stack for future use - MOVO B0, state1Store - MOVO C0, state2Store + MOVO X3, 32(BP) + MOVO X6, 48(BP) // Load state, increment counter blocks - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 - MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 // Store counters - MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store - MOVQ $10, itr2 + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) + MOVQ $0x0000000a, R9 sealSSEIntroLoop: - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left - shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left - shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left - - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right - shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right - shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right - DECQ itr2 - JNE sealSSEIntroLoop + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + DECQ R9 + JNE sealSSEIntroLoop // Add in the state - PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 - PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 - PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 - PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 // Clamp and store the key - PAND ·polyClampMask<>(SB), A0 - MOVO A0, rStore - MOVO B0, sStore + PAND ·polyClampMask<>+0(SB), X0 + MOVO X0, (BP) + MOVO X3, 16(BP) // Hash AAD - MOVQ ad_len+80(FP), itr2 - CALL polyHashADInternal<>(SB) - - MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 - PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 - MOVOU A1, (0*16)(oup); MOVOU B1, (1*16)(oup); MOVOU C1, (2*16)(oup); MOVOU D1, (3*16)(oup) - MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 - PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 - MOVOU A2, (4*16)(oup); MOVOU B2, (5*16)(oup); MOVOU C2, (6*16)(oup); MOVOU D2, (7*16)(oup) - - MOVQ $128, itr1 - SUBQ $128, inl - LEAQ 128(inp), inp - - MOVO A3, A1; MOVO B3, B1; MOVO C3, C1; MOVO D3, D1 - - CMPQ inl, $64 - JBE sealSSE128SealHash - - MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 - PXOR A0, A3; PXOR B0, B3; PXOR C0, C3; PXOR D0, D3 - MOVOU A3, (8*16)(oup); MOVOU B3, (9*16)(oup); MOVOU C3, (10*16)(oup); MOVOU D3, (11*16)(oup) - - ADDQ $64, itr1 - SUBQ $64, inl - LEAQ 64(inp), inp - - MOVQ $2, itr1 - MOVQ $8, itr2 - - CMPQ inl, $64 - JBE sealSSETail64 - CMPQ inl, $128 - JBE sealSSETail128 - CMPQ inl, $192 - JBE sealSSETail192 + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + MOVOU (SI), X0 + MOVOU 16(SI), X3 + MOVOU 32(SI), X6 + MOVOU 48(SI), X9 + PXOR X0, X1 + PXOR X3, X4 + PXOR X6, X7 + PXOR X9, X10 + MOVOU X1, (DI) + MOVOU X4, 16(DI) + MOVOU X7, 32(DI) + MOVOU X10, 48(DI) + MOVOU 64(SI), X0 + MOVOU 80(SI), X3 + MOVOU 96(SI), X6 + MOVOU 112(SI), X9 + PXOR X0, X2 + PXOR X3, X5 + PXOR X6, X8 + PXOR X9, X11 + MOVOU X2, 64(DI) + MOVOU X5, 80(DI) + MOVOU X8, 96(DI) + MOVOU X11, 112(DI) + MOVQ $0x00000080, CX + SUBQ $0x80, BX + LEAQ 128(SI), SI + MOVO X12, X1 + MOVO X13, X4 + MOVO X14, X7 + MOVO X15, X10 + CMPQ BX, $0x40 + JBE sealSSE128SealHash + MOVOU (SI), X0 + MOVOU 16(SI), X3 + MOVOU 32(SI), X6 + MOVOU 48(SI), X9 + PXOR X0, X12 + PXOR X3, X13 + PXOR X6, X14 + PXOR X9, X15 + MOVOU X12, 128(DI) + MOVOU X13, 144(DI) + MOVOU X14, 160(DI) + MOVOU X15, 176(DI) + ADDQ $0x40, CX + SUBQ $0x40, BX + LEAQ 64(SI), SI + MOVQ $0x00000002, CX + MOVQ $0x00000008, R9 + CMPQ BX, $0x40 + JBE sealSSETail64 + CMPQ BX, $0x80 + JBE sealSSETail128 + CMPQ BX, $0xc0 + JBE sealSSETail192 sealSSEMainLoop: // Load state, increment counter blocks - MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 - MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 // Store counters - MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) sealSSEInnerLoop: - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - polyAdd(0(oup)) - shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left - shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left - shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left - polyMulStage1 - polyMulStage2 - LEAQ (2*8)(oup), oup - MOVO C3, tmpStore - chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) - MOVO tmpStore, C3 - MOVO C1, tmpStore - polyMulStage3 - chachaQR(A3, B3, C3, D3, C1) - MOVO tmpStore, C1 - polyMulReduceStage - shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right - shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right - shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right - DECQ itr2 - JGE sealSSEInnerLoop - polyAdd(0(oup)) - polyMul - LEAQ (2*8)(oup), oup - DECQ itr1 - JG sealSSEInnerLoop + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + LEAQ 16(DI), DI + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + DECQ R9 + JGE sealSSEInnerLoop + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + DECQ CX + JG sealSSEInnerLoop // Add in the state - PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 - PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 - PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 - PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 - MOVO D3, tmpStore + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X6 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 80(BP), X9 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 + MOVO X15, 64(BP) // Load - xor - store - MOVOU (0*16)(inp), D3; PXOR D3, A0 - MOVOU (1*16)(inp), D3; PXOR D3, B0 - MOVOU (2*16)(inp), D3; PXOR D3, C0 - MOVOU (3*16)(inp), D3; PXOR D3, D0 - MOVOU A0, (0*16)(oup) - MOVOU B0, (1*16)(oup) - MOVOU C0, (2*16)(oup) - MOVOU D0, (3*16)(oup) - MOVO tmpStore, D3 - - MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 - PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 - MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) - MOVOU (8*16)(inp), A0; MOVOU (9*16)(inp), B0; MOVOU (10*16)(inp), C0; MOVOU (11*16)(inp), D0 - PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 - MOVOU A2, (8*16)(oup); MOVOU B2, (9*16)(oup); MOVOU C2, (10*16)(oup); MOVOU D2, (11*16)(oup) - ADDQ $192, inp - MOVQ $192, itr1 - SUBQ $192, inl - MOVO A3, A1 - MOVO B3, B1 - MOVO C3, C1 - MOVO D3, D1 - CMPQ inl, $64 + MOVOU (SI), X15 + PXOR X15, X0 + MOVOU 16(SI), X15 + PXOR X15, X3 + MOVOU 32(SI), X15 + PXOR X15, X6 + MOVOU 48(SI), X15 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVO 64(BP), X15 + MOVOU 64(SI), X0 + MOVOU 80(SI), X3 + MOVOU 96(SI), X6 + MOVOU 112(SI), X9 + PXOR X0, X1 + PXOR X3, X4 + PXOR X6, X7 + PXOR X9, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + MOVOU 128(SI), X0 + MOVOU 144(SI), X3 + MOVOU 160(SI), X6 + MOVOU 176(SI), X9 + PXOR X0, X2 + PXOR X3, X5 + PXOR X6, X8 + PXOR X9, X11 + MOVOU X2, 128(DI) + MOVOU X5, 144(DI) + MOVOU X8, 160(DI) + MOVOU X11, 176(DI) + ADDQ $0xc0, SI + MOVQ $0x000000c0, CX + SUBQ $0xc0, BX + MOVO X12, X1 + MOVO X13, X4 + MOVO X14, X7 + MOVO X15, X10 + CMPQ BX, $0x40 JBE sealSSE128SealHash - MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 - PXOR A0, A3; PXOR B0, B3; PXOR C0, C3; PXOR D0, D3 - MOVOU A3, (12*16)(oup); MOVOU B3, (13*16)(oup); MOVOU C3, (14*16)(oup); MOVOU D3, (15*16)(oup) - LEAQ 64(inp), inp - SUBQ $64, inl - MOVQ $6, itr1 - MOVQ $4, itr2 - CMPQ inl, $192 + MOVOU (SI), X0 + MOVOU 16(SI), X3 + MOVOU 32(SI), X6 + MOVOU 48(SI), X9 + PXOR X0, X12 + PXOR X3, X13 + PXOR X6, X14 + PXOR X9, X15 + MOVOU X12, 192(DI) + MOVOU X13, 208(DI) + MOVOU X14, 224(DI) + MOVOU X15, 240(DI) + LEAQ 64(SI), SI + SUBQ $0x40, BX + MOVQ $0x00000006, CX + MOVQ $0x00000004, R9 + CMPQ BX, $0xc0 JG sealSSEMainLoop - - MOVQ inl, itr1 - TESTQ inl, inl + MOVQ BX, CX + TESTQ BX, BX JE sealSSE128SealHash - MOVQ $6, itr1 - CMPQ inl, $64 + MOVQ $0x00000006, CX + CMPQ BX, $0x40 JBE sealSSETail64 - CMPQ inl, $128 + CMPQ BX, $0x80 JBE sealSSETail128 JMP sealSSETail192 -// ---------------------------------------------------------------------------- -// Special optimization for the last 64 bytes of plaintext sealSSETail64: - // Need to encrypt up to 64 bytes - prepare single block, hash 192 or 256 bytes - MOVO ·chacha20Constants<>(SB), A1 - MOVO state1Store, B1 - MOVO state2Store, C1 - MOVO ctr3Store, D1 - PADDL ·sseIncMask<>(SB), D1 - MOVO D1, ctr0Store + MOVO ·chacha20Constants<>+0(SB), X1 + MOVO 32(BP), X4 + MOVO 48(BP), X7 + MOVO 128(BP), X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 80(BP) sealSSETail64LoopA: - // Perform ChaCha rounds, while hashing the previously encrypted ciphertext - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealSSETail64LoopB: - chachaQR(A1, B1, C1, D1, T1) - shiftB1Left; shiftC1Left; shiftD1Left - chachaQR(A1, B1, C1, D1, T1) - shiftB1Right; shiftC1Right; shiftD1Right - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup - - DECQ itr1 - JG sealSSETail64LoopA - - DECQ itr2 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x0c, X13 + PSRLL $0x14, X4 + PXOR X13, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x07, X13 + PSRLL $0x19, X4 + PXOR X13, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x0c, X13 + PSRLL $0x14, X4 + PXOR X13, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x07, X13 + PSRLL $0x19, X4 + PXOR X13, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + DECQ CX + JG sealSSETail64LoopA + DECQ R9 JGE sealSSETail64LoopB - PADDL ·chacha20Constants<>(SB), A1 - PADDL state1Store, B1 - PADDL state2Store, C1 - PADDL ctr0Store, D1 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL 32(BP), X4 + PADDL 48(BP), X7 + PADDL 80(BP), X10 + JMP sealSSE128Seal - JMP sealSSE128Seal - -// ---------------------------------------------------------------------------- -// Special optimization for the last 128 bytes of plaintext sealSSETail128: - // Need to encrypt up to 128 bytes - prepare two blocks, hash 192 or 256 bytes - MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 80(BP) + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 96(BP) sealSSETail128LoopA: - // Perform ChaCha rounds, while hashing the previously encrypted ciphertext - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealSSETail128LoopB: - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) - shiftB0Left; shiftC0Left; shiftD0Left - shiftB1Left; shiftC1Left; shiftD1Left - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) - shiftB0Right; shiftC0Right; shiftD0Right - shiftB1Right; shiftC1Right; shiftD1Right + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + DECQ CX + JG sealSSETail128LoopA + DECQ R9 + JGE sealSSETail128LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 80(BP), X9 + PADDL 96(BP), X10 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X0 + PXOR X13, X3 + PXOR X14, X6 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVQ $0x00000040, CX + LEAQ 64(SI), SI + SUBQ $0x40, BX + JMP sealSSE128SealHash - DECQ itr1 - JG sealSSETail128LoopA - - DECQ itr2 - JGE sealSSETail128LoopB - - PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1 - PADDL state1Store, B0; PADDL state1Store, B1 - PADDL state2Store, C0; PADDL state2Store, C1 - PADDL ctr0Store, D0; PADDL ctr1Store, D1 - - MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 - PXOR T0, A0; PXOR T1, B0; PXOR T2, C0; PXOR T3, D0 - MOVOU A0, (0*16)(oup); MOVOU B0, (1*16)(oup); MOVOU C0, (2*16)(oup); MOVOU D0, (3*16)(oup) - - MOVQ $64, itr1 - LEAQ 64(inp), inp - SUBQ $64, inl - - JMP sealSSE128SealHash - -// ---------------------------------------------------------------------------- -// Special optimization for the last 192 bytes of plaintext sealSSETail192: - // Need to encrypt up to 192 bytes - prepare three blocks, hash 192 or 256 bytes - MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2; MOVO D2, ctr2Store + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 80(BP) + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 96(BP) + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X11, 112(BP) sealSSETail192LoopA: - // Perform ChaCha rounds, while hashing the previously encrypted ciphertext - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealSSETail192LoopB: - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Left; shiftC0Left; shiftD0Left - shiftB1Left; shiftC1Left; shiftD1Left - shiftB2Left; shiftC2Left; shiftD2Left + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + DECQ CX + JG sealSSETail192LoopA + DECQ R9 + JGE sealSSETail192LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 32(BP), X5 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 48(BP), X8 + PADDL 80(BP), X9 + PADDL 96(BP), X10 + PADDL 112(BP), X11 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X0 + PXOR X13, X3 + PXOR X14, X6 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVOU 64(SI), X12 + MOVOU 80(SI), X13 + MOVOU 96(SI), X14 + MOVOU 112(SI), X15 + PXOR X12, X1 + PXOR X13, X4 + PXOR X14, X7 + PXOR X15, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + MOVO X2, X1 + MOVO X5, X4 + MOVO X8, X7 + MOVO X11, X10 + MOVQ $0x00000080, CX + LEAQ 128(SI), SI + SUBQ $0x80, BX + JMP sealSSE128SealHash - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup - - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Right; shiftC0Right; shiftD0Right - shiftB1Right; shiftC1Right; shiftD1Right - shiftB2Right; shiftC2Right; shiftD2Right - - DECQ itr1 - JG sealSSETail192LoopA - - DECQ itr2 - JGE sealSSETail192LoopB - - PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 - PADDL state1Store, B0; PADDL state1Store, B1; PADDL state1Store, B2 - PADDL state2Store, C0; PADDL state2Store, C1; PADDL state2Store, C2 - PADDL ctr0Store, D0; PADDL ctr1Store, D1; PADDL ctr2Store, D2 - - MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 - PXOR T0, A0; PXOR T1, B0; PXOR T2, C0; PXOR T3, D0 - MOVOU A0, (0*16)(oup); MOVOU B0, (1*16)(oup); MOVOU C0, (2*16)(oup); MOVOU D0, (3*16)(oup) - MOVOU (4*16)(inp), T0; MOVOU (5*16)(inp), T1; MOVOU (6*16)(inp), T2; MOVOU (7*16)(inp), T3 - PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 - MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) - - MOVO A2, A1 - MOVO B2, B1 - MOVO C2, C1 - MOVO D2, D1 - MOVQ $128, itr1 - LEAQ 128(inp), inp - SUBQ $128, inl - - JMP sealSSE128SealHash - -// ---------------------------------------------------------------------------- -// Special seal optimization for buffers smaller than 129 bytes sealSSE128: - // For up to 128 bytes of ciphertext and 64 bytes for the poly key, we require to process three blocks - MOVOU ·chacha20Constants<>(SB), A0; MOVOU (1*16)(keyp), B0; MOVOU (2*16)(keyp), C0; MOVOU (3*16)(keyp), D0 - MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 - MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 - MOVO B0, T1; MOVO C0, T2; MOVO D1, T3 - MOVQ $10, itr2 + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X3, X13 + MOVO X6, X14 + MOVO X10, X15 + MOVQ $0x0000000a, R9 sealSSE128InnerCipherLoop: - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Left; shiftB1Left; shiftB2Left - shiftC0Left; shiftC1Left; shiftC2Left - shiftD0Left; shiftD1Left; shiftD2Left - chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) - shiftB0Right; shiftB1Right; shiftB2Right - shiftC0Right; shiftC1Right; shiftC2Right - shiftD0Right; shiftD1Right; shiftD2Right - DECQ itr2 - JNE sealSSE128InnerCipherLoop + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + DECQ R9 + JNE sealSSE128InnerCipherLoop // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded - PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 - PADDL T1, B0; PADDL T1, B1; PADDL T1, B2 - PADDL T2, C1; PADDL T2, C2 - PADDL T3, D1; PADDL ·sseIncMask<>(SB), T3; PADDL T3, D2 - PAND ·polyClampMask<>(SB), A0 - MOVOU A0, rStore - MOVOU B0, sStore + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL X13, X3 + PADDL X13, X4 + PADDL X13, X5 + PADDL X14, X7 + PADDL X14, X8 + PADDL X15, X10 + PADDL ·sseIncMask<>+0(SB), X15 + PADDL X15, X11 + PAND ·polyClampMask<>+0(SB), X0 + MOVOU X0, (BP) + MOVOU X3, 16(BP) // Hash - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) - XORQ itr1, itr1 + XORQ CX, CX sealSSE128SealHash: - // itr1 holds the number of bytes encrypted but not yet hashed - CMPQ itr1, $16 - JB sealSSE128Seal - polyAdd(0(oup)) - polyMul - - SUBQ $16, itr1 - ADDQ $16, oup - - JMP sealSSE128SealHash + CMPQ CX, $0x10 + JB sealSSE128Seal + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + SUBQ $0x10, CX + ADDQ $0x10, DI + JMP sealSSE128SealHash sealSSE128Seal: - CMPQ inl, $16 + CMPQ BX, $0x10 JB sealSSETail - SUBQ $16, inl + SUBQ $0x10, BX // Load for decryption - MOVOU (inp), T0 - PXOR T0, A1 - MOVOU A1, (oup) - LEAQ (1*16)(inp), inp - LEAQ (1*16)(oup), oup + MOVOU (SI), X12 + PXOR X12, X1 + MOVOU X1, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI // Extract for hashing - MOVQ A1, t0 - PSRLDQ $8, A1 - MOVQ A1, t1 - ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 - polyMul + MOVQ X1, R13 + PSRLDQ $0x08, X1 + MOVQ X1, R14 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 // Shift the stream "left" - MOVO B1, A1 - MOVO C1, B1 - MOVO D1, C1 - MOVO A2, D1 - MOVO B2, A2 - MOVO C2, B2 - MOVO D2, C2 + MOVO X4, X1 + MOVO X7, X4 + MOVO X10, X7 + MOVO X2, X10 + MOVO X5, X2 + MOVO X8, X5 + MOVO X11, X8 JMP sealSSE128Seal sealSSETail: - TESTQ inl, inl + TESTQ BX, BX JE sealSSEFinalize // We can only load the PT one byte at a time to avoid read after end of buffer - MOVQ inl, itr2 - SHLQ $4, itr2 - LEAQ ·andMask<>(SB), t0 - MOVQ inl, itr1 - LEAQ -1(inp)(inl*1), inp - XORQ t2, t2 - XORQ t3, t3 + MOVQ BX, R9 + SHLQ $0x04, R9 + LEAQ ·andMask<>+0(SB), R13 + MOVQ BX, CX + LEAQ -1(SI)(BX*1), SI + XORQ R15, R15 + XORQ R8, R8 XORQ AX, AX sealSSETailLoadLoop: - SHLQ $8, t2, t3 - SHLQ $8, t2 - MOVB (inp), AX - XORQ AX, t2 - LEAQ -1(inp), inp - DECQ itr1 + SHLQ $0x08, R15, R8 + SHLQ $0x08, R15 + MOVB (SI), AX + XORQ AX, R15 + LEAQ -1(SI), SI + DECQ CX JNE sealSSETailLoadLoop - MOVQ t2, 0+tmpStore - MOVQ t3, 8+tmpStore - PXOR 0+tmpStore, A1 - MOVOU A1, (oup) - MOVOU -16(t0)(itr2*1), T0 - PAND T0, A1 - MOVQ A1, t0 - PSRLDQ $8, A1 - MOVQ A1, t1 - ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 - polyMul - - ADDQ inl, oup + MOVQ R15, 64(BP) + MOVQ R8, 72(BP) + PXOR 64(BP), X1 + MOVOU X1, (DI) + MOVOU -16(R13)(R9*1), X12 + PAND X12, X1 + MOVQ X1, R13 + PSRLDQ $0x08, X1 + MOVQ X1, R14 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ BX, DI sealSSEFinalize: // Hash in the buffer lengths - ADDQ ad_len+80(FP), acc0 - ADCQ src_len+56(FP), acc1 - ADCQ $1, acc2 - polyMul + ADDQ ad_len+80(FP), R10 + ADCQ src_len+56(FP), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 // Final reduce - MOVQ acc0, t0 - MOVQ acc1, t1 - MOVQ acc2, t2 - SUBQ $-5, acc0 - SBBQ $-1, acc1 - SBBQ $3, acc2 - CMOVQCS t0, acc0 - CMOVQCS t1, acc1 - CMOVQCS t2, acc2 + MOVQ R10, R13 + MOVQ R11, R14 + MOVQ R12, R15 + SUBQ $-5, R10 + SBBQ $-1, R11 + SBBQ $0x03, R12 + CMOVQCS R13, R10 + CMOVQCS R14, R11 + CMOVQCS R15, R12 // Add in the "s" part of the key - ADDQ 0+sStore, acc0 - ADCQ 8+sStore, acc1 + ADDQ 16(BP), R10 + ADCQ 24(BP), R11 // Finally store the tag at the end of the message - MOVQ acc0, (0*8)(oup) - MOVQ acc1, (1*8)(oup) + MOVQ R10, (DI) + MOVQ R11, 8(DI) RET -// ---------------------------------------------------------------------------- -// ------------------------- AVX2 Code ---------------------------------------- chacha20Poly1305Seal_AVX2: VZEROUPPER - VMOVDQU ·chacha20Constants<>(SB), AA0 - BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x70; BYTE $0x10 // broadcasti128 16(r8), ymm14 - BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x20 // broadcasti128 32(r8), ymm12 - BYTE $0xc4; BYTE $0xc2; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x30 // broadcasti128 48(r8), ymm4 - VPADDD ·avx2InitMask<>(SB), DD0, DD0 + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x70 + BYTE $0x10 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x20 + BYTE $0xc4 + BYTE $0xc2 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x30 + VPADDD ·avx2InitMask<>+0(SB), Y4, Y4 // Special optimizations, for very short buffers - CMPQ inl, $192 - JBE seal192AVX2 // 33% faster - CMPQ inl, $320 - JBE seal320AVX2 // 17% faster + CMPQ BX, $0x000000c0 + JBE seal192AVX2 + CMPQ BX, $0x00000140 + JBE seal320AVX2 // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream - VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 - VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3; VMOVDQA BB0, state1StoreAVX2 - VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3; VMOVDQA CC0, state2StoreAVX2 - VPADDD ·avx2IncMask<>(SB), DD0, DD1; VMOVDQA DD0, ctr0StoreAVX2 - VPADDD ·avx2IncMask<>(SB), DD1, DD2; VMOVDQA DD1, ctr1StoreAVX2 - VPADDD ·avx2IncMask<>(SB), DD2, DD3; VMOVDQA DD2, ctr2StoreAVX2 - VMOVDQA DD3, ctr3StoreAVX2 - MOVQ $10, itr2 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA Y14, 32(BP) + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA Y12, 64(BP) + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y4, 96(BP) + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y1, 128(BP) + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + MOVQ $0x0000000a, R9 sealAVX2IntroLoop: - VMOVDQA CC3, tmpStoreAVX2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) - VMOVDQA tmpStoreAVX2, CC3 - VMOVDQA CC1, tmpStoreAVX2 - chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) - VMOVDQA tmpStoreAVX2, CC1 - - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 - VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $12, DD1, DD1, DD1 - VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $12, DD2, DD2, DD2 - VPALIGNR $4, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $12, DD3, DD3, DD3 - - VMOVDQA CC3, tmpStoreAVX2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) - VMOVDQA tmpStoreAVX2, CC3 - VMOVDQA CC1, tmpStoreAVX2 - chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) - VMOVDQA tmpStoreAVX2, CC1 - - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 - VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $4, DD1, DD1, DD1 - VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $4, DD2, DD2, DD2 - VPALIGNR $12, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $4, DD3, DD3, DD3 - DECQ itr2 - JNE sealAVX2IntroLoop - - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 - VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 - - VPERM2I128 $0x13, CC0, DD0, CC0 // Stream bytes 96 - 127 - VPERM2I128 $0x02, AA0, BB0, DD0 // The Poly1305 key - VPERM2I128 $0x13, AA0, BB0, AA0 // Stream bytes 64 - 95 + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y3, Y3, Y3 + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y3, Y3, Y3 + DECQ R9 + JNE sealAVX2IntroLoop + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPERM2I128 $0x02, Y0, Y14, Y4 + VPERM2I128 $0x13, Y0, Y14, Y0 // Clamp and store poly key - VPAND ·polyClampMask<>(SB), DD0, DD0 - VMOVDQA DD0, rsStoreAVX2 + VPAND ·polyClampMask<>+0(SB), Y4, Y4 + VMOVDQA Y4, (BP) // Hash AD - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) // Can store at least 320 bytes - VPXOR (0*32)(inp), AA0, AA0 - VPXOR (1*32)(inp), CC0, CC0 - VMOVDQU AA0, (0*32)(oup) - VMOVDQU CC0, (1*32)(oup) - - VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 - VPXOR (2*32)(inp), AA0, AA0; VPXOR (3*32)(inp), BB0, BB0; VPXOR (4*32)(inp), CC0, CC0; VPXOR (5*32)(inp), DD0, DD0 - VMOVDQU AA0, (2*32)(oup); VMOVDQU BB0, (3*32)(oup); VMOVDQU CC0, (4*32)(oup); VMOVDQU DD0, (5*32)(oup) - VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 - VPXOR (6*32)(inp), AA0, AA0; VPXOR (7*32)(inp), BB0, BB0; VPXOR (8*32)(inp), CC0, CC0; VPXOR (9*32)(inp), DD0, DD0 - VMOVDQU AA0, (6*32)(oup); VMOVDQU BB0, (7*32)(oup); VMOVDQU CC0, (8*32)(oup); VMOVDQU DD0, (9*32)(oup) - - MOVQ $320, itr1 - SUBQ $320, inl - LEAQ 320(inp), inp - - VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, CC3, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, CC3, DD3, DD0 - CMPQ inl, $128 + VPXOR (SI), Y0, Y0 + VPXOR 32(SI), Y12, Y12 + VMOVDQU Y0, (DI) + VMOVDQU Y12, 32(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 64(SI), Y0, Y0 + VPXOR 96(SI), Y14, Y14 + VPXOR 128(SI), Y12, Y12 + VPXOR 160(SI), Y4, Y4 + VMOVDQU Y0, 64(DI) + VMOVDQU Y14, 96(DI) + VMOVDQU Y12, 128(DI) + VMOVDQU Y4, 160(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 192(SI), Y0, Y0 + VPXOR 224(SI), Y14, Y14 + VPXOR 256(SI), Y12, Y12 + VPXOR 288(SI), Y4, Y4 + VMOVDQU Y0, 192(DI) + VMOVDQU Y14, 224(DI) + VMOVDQU Y12, 256(DI) + VMOVDQU Y4, 288(DI) + MOVQ $0x00000140, CX + SUBQ $0x00000140, BX + LEAQ 320(SI), SI + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, Y15, Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, Y15, Y3, Y4 + CMPQ BX, $0x80 JBE sealAVX2SealHash - - VPXOR (0*32)(inp), AA0, AA0; VPXOR (1*32)(inp), BB0, BB0; VPXOR (2*32)(inp), CC0, CC0; VPXOR (3*32)(inp), DD0, DD0 - VMOVDQU AA0, (10*32)(oup); VMOVDQU BB0, (11*32)(oup); VMOVDQU CC0, (12*32)(oup); VMOVDQU DD0, (13*32)(oup) - SUBQ $128, inl - LEAQ 128(inp), inp - - MOVQ $8, itr1 - MOVQ $2, itr2 - - CMPQ inl, $128 - JBE sealAVX2Tail128 - CMPQ inl, $256 - JBE sealAVX2Tail256 - CMPQ inl, $384 - JBE sealAVX2Tail384 - CMPQ inl, $512 - JBE sealAVX2Tail512 + VPXOR (SI), Y0, Y0 + VPXOR 32(SI), Y14, Y14 + VPXOR 64(SI), Y12, Y12 + VPXOR 96(SI), Y4, Y4 + VMOVDQU Y0, 320(DI) + VMOVDQU Y14, 352(DI) + VMOVDQU Y12, 384(DI) + VMOVDQU Y4, 416(DI) + SUBQ $0x80, BX + LEAQ 128(SI), SI + MOVQ $0x00000008, CX + MOVQ $0x00000002, R9 + CMPQ BX, $0x80 + JBE sealAVX2Tail128 + CMPQ BX, $0x00000100 + JBE sealAVX2Tail256 + CMPQ BX, $0x00000180 + JBE sealAVX2Tail384 + CMPQ BX, $0x00000200 + JBE sealAVX2Tail512 // We have 448 bytes to hash, but main loop hashes 512 bytes at a time - perform some rounds, before the main loop - VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 - VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 - - VMOVDQA CC3, tmpStoreAVX2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) - VMOVDQA tmpStoreAVX2, CC3 - VMOVDQA CC1, tmpStoreAVX2 - chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) - VMOVDQA tmpStoreAVX2, CC1 - - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 - VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $12, DD1, DD1, DD1 - VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $12, DD2, DD2, DD2 - VPALIGNR $4, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $12, DD3, DD3, DD3 - - VMOVDQA CC3, tmpStoreAVX2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) - VMOVDQA tmpStoreAVX2, CC3 - VMOVDQA CC1, tmpStoreAVX2 - chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) - VMOVDQA tmpStoreAVX2, CC1 - - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 - VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $4, DD1, DD1, DD1 - VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $4, DD2, DD2, DD2 - VPALIGNR $12, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $4, DD3, DD3, DD3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - - SUBQ $16, oup // Adjust the pointer - MOVQ $9, itr1 - JMP sealAVX2InternalLoopStart + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y3, Y3, Y3 + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + SUBQ $0x10, DI + MOVQ $0x00000009, CX + JMP sealAVX2InternalLoopStart sealAVX2MainLoop: - // Load state, increment counter blocks, store the incremented counters - VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 - VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 - VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 - MOVQ $10, itr1 + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + MOVQ $0x0000000a, CX sealAVX2InternalLoop: - polyAdd(0*8(oup)) - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - polyMulStage1_AVX2 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - polyMulStage2_AVX2 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - polyMulStage3_AVX2 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulReduceStage + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 sealAVX2InternalLoopStart: - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - polyAdd(2*8(oup)) - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - polyMulStage1_AVX2 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulStage2_AVX2 - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - polyMulStage3_AVX2 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - polyMulReduceStage - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - polyAdd(4*8(oup)) - LEAQ (6*8)(oup), oup - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulStage1_AVX2 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - polyMulStage2_AVX2 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - polyMulStage3_AVX2 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyMulReduceStage - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 - DECQ itr1 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 32(DI), R10 + ADCQ 40(DI), R11 + ADCQ $0x01, R12 + LEAQ 48(DI), DI + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + DECQ CX JNE sealAVX2InternalLoop - - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 - VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 - VMOVDQA CC3, tmpStoreAVX2 + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) // We only hashed 480 of the 512 bytes available - hash the remaining 32 here - polyAdd(0*8(oup)) - polyMulAVX2 - LEAQ (4*8)(oup), oup - VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 - VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 - VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) - VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 - VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 - VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPERM2I128 $0x02, Y0, Y14, Y15 + VPERM2I128 $0x13, Y0, Y14, Y14 + VPERM2I128 $0x02, Y12, Y4, Y0 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPXOR (SI), Y15, Y15 + VPXOR 32(SI), Y0, Y0 + VPXOR 64(SI), Y14, Y14 + VPXOR 96(SI), Y12, Y12 + VMOVDQU Y15, (DI) + VMOVDQU Y0, 32(DI) + VMOVDQU Y14, 64(DI) + VMOVDQU Y12, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) // and here - polyAdd(-2*8(oup)) - polyMulAVX2 - VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 - VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 - VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) - VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 - VPXOR (12*32)(inp), AA0, AA0; VPXOR (13*32)(inp), BB0, BB0; VPXOR (14*32)(inp), CC0, CC0; VPXOR (15*32)(inp), DD0, DD0 - VMOVDQU AA0, (12*32)(oup); VMOVDQU BB0, (13*32)(oup); VMOVDQU CC0, (14*32)(oup); VMOVDQU DD0, (15*32)(oup) - LEAQ (32*16)(inp), inp - SUBQ $(32*16), inl - CMPQ inl, $512 + ADDQ -16(DI), R10 + ADCQ -8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + VPXOR 384(SI), Y0, Y0 + VPXOR 416(SI), Y14, Y14 + VPXOR 448(SI), Y12, Y12 + VPXOR 480(SI), Y4, Y4 + VMOVDQU Y0, 384(DI) + VMOVDQU Y14, 416(DI) + VMOVDQU Y12, 448(DI) + VMOVDQU Y4, 480(DI) + LEAQ 512(SI), SI + SUBQ $0x00000200, BX + CMPQ BX, $0x00000200 JG sealAVX2MainLoop // Tail can only hash 480 bytes - polyAdd(0*8(oup)) - polyMulAVX2 - polyAdd(2*8(oup)) - polyMulAVX2 - LEAQ 32(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + MOVQ $0x0000000a, CX + MOVQ $0x00000000, R9 + CMPQ BX, $0x80 + JBE sealAVX2Tail128 + CMPQ BX, $0x00000100 + JBE sealAVX2Tail256 + CMPQ BX, $0x00000180 + JBE sealAVX2Tail384 + JMP sealAVX2Tail512 - MOVQ $10, itr1 - MOVQ $0, itr2 - CMPQ inl, $128 - JBE sealAVX2Tail128 - CMPQ inl, $256 - JBE sealAVX2Tail256 - CMPQ inl, $384 - JBE sealAVX2Tail384 - JMP sealAVX2Tail512 - -// ---------------------------------------------------------------------------- -// Special optimization for buffers smaller than 193 bytes seal192AVX2: - // For up to 192 bytes of ciphertext and 64 bytes for the poly key, we process four blocks - VMOVDQA AA0, AA1 - VMOVDQA BB0, BB1 - VMOVDQA CC0, CC1 - VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VMOVDQA AA0, AA2 - VMOVDQA BB0, BB2 - VMOVDQA CC0, CC2 - VMOVDQA DD0, DD2 - VMOVDQA DD1, TT3 - MOVQ $10, itr2 + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VMOVDQA Y4, Y2 + VMOVDQA Y1, Y15 + MOVQ $0x0000000a, R9 sealAVX2192InnerCipherLoop: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 - DECQ itr2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + DECQ R9 JNE sealAVX2192InnerCipherLoop - VPADDD AA2, AA0, AA0; VPADDD AA2, AA1, AA1 - VPADDD BB2, BB0, BB0; VPADDD BB2, BB1, BB1 - VPADDD CC2, CC0, CC0; VPADDD CC2, CC1, CC1 - VPADDD DD2, DD0, DD0; VPADDD TT3, DD1, DD1 - VPERM2I128 $0x02, AA0, BB0, TT0 + VPADDD Y6, Y0, Y0 + VPADDD Y6, Y5, Y5 + VPADDD Y10, Y14, Y14 + VPADDD Y10, Y9, Y9 + VPADDD Y8, Y12, Y12 + VPADDD Y8, Y13, Y13 + VPADDD Y2, Y4, Y4 + VPADDD Y15, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y3 // Clamp and store poly key - VPAND ·polyClampMask<>(SB), TT0, TT0 - VMOVDQA TT0, rsStoreAVX2 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) // Stream for up to 192 bytes - VPERM2I128 $0x13, AA0, BB0, AA0 - VPERM2I128 $0x13, CC0, DD0, BB0 - VPERM2I128 $0x02, AA1, BB1, CC0 - VPERM2I128 $0x02, CC1, DD1, DD0 - VPERM2I128 $0x13, AA1, BB1, AA1 - VPERM2I128 $0x13, CC1, DD1, BB1 + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 sealAVX2ShortSeal: // Hash aad - MOVQ ad_len+80(FP), itr2 + MOVQ ad_len+80(FP), R9 CALL polyHashADInternal<>(SB) - XORQ itr1, itr1 + XORQ CX, CX sealAVX2SealHash: // itr1 holds the number of bytes encrypted but not yet hashed - CMPQ itr1, $16 - JB sealAVX2ShortSealLoop - polyAdd(0(oup)) - polyMul - SUBQ $16, itr1 - ADDQ $16, oup - JMP sealAVX2SealHash + CMPQ CX, $0x10 + JB sealAVX2ShortSealLoop + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + SUBQ $0x10, CX + ADDQ $0x10, DI + JMP sealAVX2SealHash sealAVX2ShortSealLoop: - CMPQ inl, $32 + CMPQ BX, $0x20 JB sealAVX2ShortTail32 - SUBQ $32, inl + SUBQ $0x20, BX // Load for encryption - VPXOR (inp), AA0, AA0 - VMOVDQU AA0, (oup) - LEAQ (1*32)(inp), inp + VPXOR (SI), Y0, Y0 + VMOVDQU Y0, (DI) + LEAQ 32(SI), SI // Now can hash - polyAdd(0*8(oup)) - polyMulAVX2 - polyAdd(2*8(oup)) - polyMulAVX2 - LEAQ (1*32)(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI // Shift stream left - VMOVDQA BB0, AA0 - VMOVDQA CC0, BB0 - VMOVDQA DD0, CC0 - VMOVDQA AA1, DD0 - VMOVDQA BB1, AA1 - VMOVDQA CC1, BB1 - VMOVDQA DD1, CC1 - VMOVDQA AA2, DD1 - VMOVDQA BB2, AA2 + VMOVDQA Y14, Y0 + VMOVDQA Y12, Y14 + VMOVDQA Y4, Y12 + VMOVDQA Y5, Y4 + VMOVDQA Y9, Y5 + VMOVDQA Y13, Y9 + VMOVDQA Y1, Y13 + VMOVDQA Y6, Y1 + VMOVDQA Y10, Y6 JMP sealAVX2ShortSealLoop sealAVX2ShortTail32: - CMPQ inl, $16 - VMOVDQA A0, A1 + CMPQ BX, $0x10 + VMOVDQA X0, X1 JB sealAVX2ShortDone - - SUBQ $16, inl + SUBQ $0x10, BX // Load for encryption - VPXOR (inp), A0, T0 - VMOVDQU T0, (oup) - LEAQ (1*16)(inp), inp + VPXOR (SI), X0, X12 + VMOVDQU X12, (DI) + LEAQ 16(SI), SI // Hash - polyAdd(0*8(oup)) - polyMulAVX2 - LEAQ (1*16)(oup), oup - VPERM2I128 $0x11, AA0, AA0, AA0 - VMOVDQA A0, A1 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + VPERM2I128 $0x11, Y0, Y0, Y0 + VMOVDQA X0, X1 sealAVX2ShortDone: VZEROUPPER JMP sealSSETail -// ---------------------------------------------------------------------------- -// Special optimization for buffers smaller than 321 bytes seal320AVX2: - // For up to 320 bytes of ciphertext and 64 bytes for the poly key, we process six blocks - VMOVDQA AA0, AA1; VMOVDQA BB0, BB1; VMOVDQA CC0, CC1; VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VMOVDQA AA0, AA2; VMOVDQA BB0, BB2; VMOVDQA CC0, CC2; VPADDD ·avx2IncMask<>(SB), DD1, DD2 - VMOVDQA BB0, TT1; VMOVDQA CC0, TT2; VMOVDQA DD0, TT3 - MOVQ $10, itr2 + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y14, Y7 + VMOVDQA Y12, Y11 + VMOVDQA Y4, Y15 + MOVQ $0x0000000a, R9 sealAVX2320InnerCipherLoop: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 - DECQ itr2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + DECQ R9 JNE sealAVX2320InnerCipherLoop - - VMOVDQA ·chacha20Constants<>(SB), TT0 - VPADDD TT0, AA0, AA0; VPADDD TT0, AA1, AA1; VPADDD TT0, AA2, AA2 - VPADDD TT1, BB0, BB0; VPADDD TT1, BB1, BB1; VPADDD TT1, BB2, BB2 - VPADDD TT2, CC0, CC0; VPADDD TT2, CC1, CC1; VPADDD TT2, CC2, CC2 - VMOVDQA ·avx2IncMask<>(SB), TT0 - VPADDD TT3, DD0, DD0; VPADDD TT0, TT3, TT3 - VPADDD TT3, DD1, DD1; VPADDD TT0, TT3, TT3 - VPADDD TT3, DD2, DD2 + VMOVDQA ·chacha20Constants<>+0(SB), Y3 + VPADDD Y3, Y0, Y0 + VPADDD Y3, Y5, Y5 + VPADDD Y3, Y6, Y6 + VPADDD Y7, Y14, Y14 + VPADDD Y7, Y9, Y9 + VPADDD Y7, Y10, Y10 + VPADDD Y11, Y12, Y12 + VPADDD Y11, Y13, Y13 + VPADDD Y11, Y8, Y8 + VMOVDQA ·avx2IncMask<>+0(SB), Y3 + VPADDD Y15, Y4, Y4 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y1, Y1 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y2, Y2 // Clamp and store poly key - VPERM2I128 $0x02, AA0, BB0, TT0 - VPAND ·polyClampMask<>(SB), TT0, TT0 - VMOVDQA TT0, rsStoreAVX2 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) // Stream for up to 320 bytes - VPERM2I128 $0x13, AA0, BB0, AA0 - VPERM2I128 $0x13, CC0, DD0, BB0 - VPERM2I128 $0x02, AA1, BB1, CC0 - VPERM2I128 $0x02, CC1, DD1, DD0 - VPERM2I128 $0x13, AA1, BB1, AA1 - VPERM2I128 $0x13, CC1, DD1, BB1 - VPERM2I128 $0x02, AA2, BB2, CC1 - VPERM2I128 $0x02, CC2, DD2, DD1 - VPERM2I128 $0x13, AA2, BB2, AA2 - VPERM2I128 $0x13, CC2, DD2, BB2 + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 + VPERM2I128 $0x02, Y6, Y10, Y13 + VPERM2I128 $0x02, Y8, Y2, Y1 + VPERM2I128 $0x13, Y6, Y10, Y6 + VPERM2I128 $0x13, Y8, Y2, Y10 JMP sealAVX2ShortSeal -// ---------------------------------------------------------------------------- -// Special optimization for the last 128 bytes of ciphertext sealAVX2Tail128: - // Need to decrypt up to 128 bytes - prepare two blocks - // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed - // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed - VMOVDQA ·chacha20Constants<>(SB), AA0 - VMOVDQA state1StoreAVX2, BB0 - VMOVDQA state2StoreAVX2, CC0 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0 - VMOVDQA DD0, DD1 + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA 32(BP), Y14 + VMOVDQA 64(BP), Y12 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VMOVDQA Y4, Y1 sealAVX2Tail128LoopA: - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealAVX2Tail128LoopB: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) - polyAdd(0(oup)) - polyMul - VPALIGNR $4, BB0, BB0, BB0 - VPALIGNR $8, CC0, CC0, CC0 - VPALIGNR $12, DD0, DD0, DD0 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) - polyAdd(16(oup)) - polyMul - LEAQ 32(oup), oup - VPALIGNR $12, BB0, BB0, BB0 - VPALIGNR $8, CC0, CC0, CC0 - VPALIGNR $4, DD0, DD0, DD0 - DECQ itr1 - JG sealAVX2Tail128LoopA - DECQ itr2 - JGE sealAVX2Tail128LoopB - - VPADDD ·chacha20Constants<>(SB), AA0, AA1 - VPADDD state1StoreAVX2, BB0, BB1 - VPADDD state2StoreAVX2, CC0, CC1 - VPADDD DD1, DD0, DD1 - - VPERM2I128 $0x02, AA1, BB1, AA0 - VPERM2I128 $0x02, CC1, DD1, BB0 - VPERM2I128 $0x13, AA1, BB1, CC0 - VPERM2I128 $0x13, CC1, DD1, DD0 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + DECQ CX + JG sealAVX2Tail128LoopA + DECQ R9 + JGE sealAVX2Tail128LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y5 + VPADDD 32(BP), Y14, Y9 + VPADDD 64(BP), Y12, Y13 + VPADDD Y1, Y4, Y1 + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 JMP sealAVX2ShortSealLoop -// ---------------------------------------------------------------------------- -// Special optimization for the last 256 bytes of ciphertext sealAVX2Tail256: - // Need to decrypt up to 256 bytes - prepare two blocks - // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed - // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed - VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA ·chacha20Constants<>(SB), AA1 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA state1StoreAVX2, BB1 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA state2StoreAVX2, CC1 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD1 - VMOVDQA DD0, TT1 - VMOVDQA DD1, TT2 + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA ·chacha20Constants<>+0(SB), Y5 + VMOVDQA 32(BP), Y14 + VMOVDQA 32(BP), Y9 + VMOVDQA 64(BP), Y12 + VMOVDQA 64(BP), Y13 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y4, Y7 + VMOVDQA Y1, Y11 sealAVX2Tail256LoopA: - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealAVX2Tail256LoopB: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - polyAdd(0(oup)) - polyMul - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) - polyAdd(16(oup)) - polyMul - LEAQ 32(oup), oup - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 - DECQ itr1 - JG sealAVX2Tail256LoopA - DECQ itr2 - JGE sealAVX2Tail256LoopB + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + DECQ CX + JG sealAVX2Tail256LoopA + DECQ R9 + JGE sealAVX2Tail256LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD Y7, Y4, Y4 + VPADDD Y11, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPERM2I128 $0x02, Y12, Y4, Y7 + VPERM2I128 $0x13, Y0, Y14, Y11 + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR (SI), Y3, Y3 + VPXOR 32(SI), Y7, Y7 + VPXOR 64(SI), Y11, Y11 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y3, (DI) + VMOVDQU Y7, 32(DI) + VMOVDQU Y11, 64(DI) + VMOVDQU Y15, 96(DI) + MOVQ $0x00000080, CX + LEAQ 128(SI), SI + SUBQ $0x80, BX + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + JMP sealAVX2SealHash - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1 - VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1 - VPERM2I128 $0x02, AA0, BB0, TT0 - VPERM2I128 $0x02, CC0, DD0, TT1 - VPERM2I128 $0x13, AA0, BB0, TT2 - VPERM2I128 $0x13, CC0, DD0, TT3 - VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 - VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) - MOVQ $128, itr1 - LEAQ 128(inp), inp - SUBQ $128, inl - VPERM2I128 $0x02, AA1, BB1, AA0 - VPERM2I128 $0x02, CC1, DD1, BB0 - VPERM2I128 $0x13, AA1, BB1, CC0 - VPERM2I128 $0x13, CC1, DD1, DD0 - - JMP sealAVX2SealHash - -// ---------------------------------------------------------------------------- -// Special optimization for the last 384 bytes of ciphertext sealAVX2Tail384: - // Need to decrypt up to 384 bytes - prepare two blocks - // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed - // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed - VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2 - VMOVDQA DD0, TT1; VMOVDQA DD1, TT2; VMOVDQA DD2, TT3 + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y4, Y7 + VMOVDQA Y1, Y11 + VMOVDQA Y2, Y15 sealAVX2Tail384LoopA: - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealAVX2Tail384LoopB: - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - polyAdd(0(oup)) - polyMul - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 - chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) - polyAdd(16(oup)) - polyMul - LEAQ 32(oup), oup - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 - DECQ itr1 - JG sealAVX2Tail384LoopA - DECQ itr2 - JGE sealAVX2Tail384LoopB + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + DECQ CX + JG sealAVX2Tail384LoopA + DECQ R9 + JGE sealAVX2Tail384LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD Y7, Y4, Y4 + VPADDD Y11, Y1, Y1 + VPADDD Y15, Y2, Y2 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPERM2I128 $0x02, Y12, Y4, Y7 + VPERM2I128 $0x13, Y0, Y14, Y11 + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR (SI), Y3, Y3 + VPXOR 32(SI), Y7, Y7 + VPXOR 64(SI), Y11, Y11 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y3, (DI) + VMOVDQU Y7, 32(DI) + VMOVDQU Y11, 64(DI) + VMOVDQU Y15, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y3 + VPERM2I128 $0x02, Y13, Y1, Y7 + VPERM2I128 $0x13, Y5, Y9, Y11 + VPERM2I128 $0x13, Y13, Y1, Y15 + VPXOR 128(SI), Y3, Y3 + VPXOR 160(SI), Y7, Y7 + VPXOR 192(SI), Y11, Y11 + VPXOR 224(SI), Y15, Y15 + VMOVDQU Y3, 128(DI) + VMOVDQU Y7, 160(DI) + VMOVDQU Y11, 192(DI) + VMOVDQU Y15, 224(DI) + MOVQ $0x00000100, CX + LEAQ 256(SI), SI + SUBQ $0x00000100, BX + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + JMP sealAVX2SealHash - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2 - VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1; VPADDD TT3, DD2, DD2 - VPERM2I128 $0x02, AA0, BB0, TT0 - VPERM2I128 $0x02, CC0, DD0, TT1 - VPERM2I128 $0x13, AA0, BB0, TT2 - VPERM2I128 $0x13, CC0, DD0, TT3 - VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 - VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) - VPERM2I128 $0x02, AA1, BB1, TT0 - VPERM2I128 $0x02, CC1, DD1, TT1 - VPERM2I128 $0x13, AA1, BB1, TT2 - VPERM2I128 $0x13, CC1, DD1, TT3 - VPXOR (4*32)(inp), TT0, TT0; VPXOR (5*32)(inp), TT1, TT1; VPXOR (6*32)(inp), TT2, TT2; VPXOR (7*32)(inp), TT3, TT3 - VMOVDQU TT0, (4*32)(oup); VMOVDQU TT1, (5*32)(oup); VMOVDQU TT2, (6*32)(oup); VMOVDQU TT3, (7*32)(oup) - MOVQ $256, itr1 - LEAQ 256(inp), inp - SUBQ $256, inl - VPERM2I128 $0x02, AA2, BB2, AA0 - VPERM2I128 $0x02, CC2, DD2, BB0 - VPERM2I128 $0x13, AA2, BB2, CC0 - VPERM2I128 $0x13, CC2, DD2, DD0 - - JMP sealAVX2SealHash - -// ---------------------------------------------------------------------------- -// Special optimization for the last 512 bytes of ciphertext sealAVX2Tail512: - // Need to decrypt up to 512 bytes - prepare two blocks - // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed - // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed - VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 - VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 - VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 - VMOVDQA ctr3StoreAVX2, DD0 - VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 - VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) sealAVX2Tail512LoopA: - polyAdd(0(oup)) - polyMul - LEAQ 16(oup), oup + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI sealAVX2Tail512LoopB: - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - polyAdd(0*8(oup)) - polyMulAVX2 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - polyAdd(2*8(oup)) - polyMulAVX2 - LEAQ (4*8)(oup), oup - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 - VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 - VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 - VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 - VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 - VMOVDQA CC3, tmpStoreAVX2 - VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 - VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 - VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 - VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 - VMOVDQA tmpStoreAVX2, CC3 - VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 - VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 - VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 - - DECQ itr1 - JG sealAVX2Tail512LoopA - DECQ itr2 - JGE sealAVX2Tail512LoopB - - VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 - VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 - VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 - VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 - VMOVDQA CC3, tmpStoreAVX2 - VPERM2I128 $0x02, AA0, BB0, CC3 - VPXOR (0*32)(inp), CC3, CC3 - VMOVDQU CC3, (0*32)(oup) - VPERM2I128 $0x02, CC0, DD0, CC3 - VPXOR (1*32)(inp), CC3, CC3 - VMOVDQU CC3, (1*32)(oup) - VPERM2I128 $0x13, AA0, BB0, CC3 - VPXOR (2*32)(inp), CC3, CC3 - VMOVDQU CC3, (2*32)(oup) - VPERM2I128 $0x13, CC0, DD0, CC3 - VPXOR (3*32)(inp), CC3, CC3 - VMOVDQU CC3, (3*32)(oup) - - VPERM2I128 $0x02, AA1, BB1, AA0 - VPERM2I128 $0x02, CC1, DD1, BB0 - VPERM2I128 $0x13, AA1, BB1, CC0 - VPERM2I128 $0x13, CC1, DD1, DD0 - VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 - VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) - - VPERM2I128 $0x02, AA2, BB2, AA0 - VPERM2I128 $0x02, CC2, DD2, BB0 - VPERM2I128 $0x13, AA2, BB2, CC0 - VPERM2I128 $0x13, CC2, DD2, DD0 - VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 - VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) - - MOVQ $384, itr1 - LEAQ 384(inp), inp - SUBQ $384, inl - VPERM2I128 $0x02, AA3, BB3, AA0 - VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0 - VPERM2I128 $0x13, AA3, BB3, CC0 - VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 - - JMP sealAVX2SealHash + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + DECQ CX + JG sealAVX2Tail512LoopA + DECQ R9 + JGE sealAVX2Tail512LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) + VPERM2I128 $0x02, Y0, Y14, Y15 + VPXOR (SI), Y15, Y15 + VMOVDQU Y15, (DI) + VPERM2I128 $0x02, Y12, Y4, Y15 + VPXOR 32(SI), Y15, Y15 + VMOVDQU Y15, 32(DI) + VPERM2I128 $0x13, Y0, Y14, Y15 + VPXOR 64(SI), Y15, Y15 + VMOVDQU Y15, 64(DI) + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y15, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + MOVQ $0x00000180, CX + LEAQ 384(SI), SI + SUBQ $0x00000180, BX + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + JMP sealAVX2SealHash diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s index e0d3c64756..133757384b 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s @@ -1,108 +1,93 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. +// Code generated by command: go run sum_amd64_asm.go -out ../sum_amd64.s -pkg poly1305. DO NOT EDIT. //go:build gc && !purego -#include "textflag.h" - -#define POLY1305_ADD(msg, h0, h1, h2) \ - ADDQ 0(msg), h0; \ - ADCQ 8(msg), h1; \ - ADCQ $1, h2; \ - LEAQ 16(msg), msg - -#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \ - MOVQ r0, AX; \ - MULQ h0; \ - MOVQ AX, t0; \ - MOVQ DX, t1; \ - MOVQ r0, AX; \ - MULQ h1; \ - ADDQ AX, t1; \ - ADCQ $0, DX; \ - MOVQ r0, t2; \ - IMULQ h2, t2; \ - ADDQ DX, t2; \ - \ - MOVQ r1, AX; \ - MULQ h0; \ - ADDQ AX, t1; \ - ADCQ $0, DX; \ - MOVQ DX, h0; \ - MOVQ r1, t3; \ - IMULQ h2, t3; \ - MOVQ r1, AX; \ - MULQ h1; \ - ADDQ AX, t2; \ - ADCQ DX, t3; \ - ADDQ h0, t2; \ - ADCQ $0, t3; \ - \ - MOVQ t0, h0; \ - MOVQ t1, h1; \ - MOVQ t2, h2; \ - ANDQ $3, h2; \ - MOVQ t2, t0; \ - ANDQ $0xFFFFFFFFFFFFFFFC, t0; \ - ADDQ t0, h0; \ - ADCQ t3, h1; \ - ADCQ $0, h2; \ - SHRQ $2, t3, t2; \ - SHRQ $2, t3; \ - ADDQ t2, h0; \ - ADCQ t3, h1; \ - ADCQ $0, h2 - -// func update(state *[7]uint64, msg []byte) +// func update(state *macState, msg []byte) TEXT ·update(SB), $0-32 MOVQ state+0(FP), DI MOVQ msg_base+8(FP), SI MOVQ msg_len+16(FP), R15 - - MOVQ 0(DI), R8 // h0 - MOVQ 8(DI), R9 // h1 - MOVQ 16(DI), R10 // h2 - MOVQ 24(DI), R11 // r0 - MOVQ 32(DI), R12 // r1 - - CMPQ R15, $16 + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + CMPQ R15, $0x10 JB bytes_between_0_and_15 loop: - POLY1305_ADD(SI, R8, R9, R10) + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ $0x01, R10 + LEAQ 16(SI), SI multiply: - POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14) - SUBQ $16, R15 - CMPQ R15, $16 - JAE loop + MOVQ R11, AX + MULQ R8 + MOVQ AX, BX + MOVQ DX, CX + MOVQ R11, AX + MULQ R9 + ADDQ AX, CX + ADCQ $0x00, DX + MOVQ R11, R13 + IMULQ R10, R13 + ADDQ DX, R13 + MOVQ R12, AX + MULQ R8 + ADDQ AX, CX + ADCQ $0x00, DX + MOVQ DX, R8 + MOVQ R12, R14 + IMULQ R10, R14 + MOVQ R12, AX + MULQ R9 + ADDQ AX, R13 + ADCQ DX, R14 + ADDQ R8, R13 + ADCQ $0x00, R14 + MOVQ BX, R8 + MOVQ CX, R9 + MOVQ R13, R10 + ANDQ $0x03, R10 + MOVQ R13, BX + ANDQ $-4, BX + ADDQ BX, R8 + ADCQ R14, R9 + ADCQ $0x00, R10 + SHRQ $0x02, R14, R13 + SHRQ $0x02, R14 + ADDQ R13, R8 + ADCQ R14, R9 + ADCQ $0x00, R10 + SUBQ $0x10, R15 + CMPQ R15, $0x10 + JAE loop bytes_between_0_and_15: TESTQ R15, R15 JZ done - MOVQ $1, BX + MOVQ $0x00000001, BX XORQ CX, CX XORQ R13, R13 ADDQ R15, SI flush_buffer: - SHLQ $8, BX, CX - SHLQ $8, BX + SHLQ $0x08, BX, CX + SHLQ $0x08, BX MOVB -1(SI), R13 XORQ R13, BX DECQ SI DECQ R15 JNZ flush_buffer - ADDQ BX, R8 ADCQ CX, R9 - ADCQ $0, R10 - MOVQ $16, R15 + ADCQ $0x00, R10 + MOVQ $0x00000010, R15 JMP multiply done: - MOVQ R8, 0(DI) + MOVQ R8, (DI) MOVQ R9, 8(DI) MOVQ R10, 16(DI) RET diff --git a/vendor/golang.org/x/oauth2/LICENSE b/vendor/golang.org/x/oauth2/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/oauth2/LICENSE +++ b/vendor/golang.org/x/oauth2/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/oauth2/token.go b/vendor/golang.org/x/oauth2/token.go index 5bbb332174..109997d77c 100644 --- a/vendor/golang.org/x/oauth2/token.go +++ b/vendor/golang.org/x/oauth2/token.go @@ -49,6 +49,13 @@ type Token struct { // mechanisms for that TokenSource will not be used. Expiry time.Time `json:"expiry,omitempty"` + // ExpiresIn is the OAuth2 wire format "expires_in" field, + // which specifies how many seconds later the token expires, + // relative to an unknown time base approximately around "now". + // It is the application's responsibility to populate + // `Expiry` from `ExpiresIn` when required. + ExpiresIn int64 `json:"expires_in,omitempty"` + // raw optionally contains extra metadata from the server // when updating a token. raw interface{} diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index ec07aab057..02609d5b21 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -201,6 +201,25 @@ var S390X struct { _ CacheLinePad } +// RISCV64 contains the supported CPU features and performance characteristics for riscv64 +// platforms. The booleans in RISCV64, with the exception of HasFastMisaligned, indicate +// the presence of RISC-V extensions. +// +// It is safe to assume that all the RV64G extensions are supported and so they are omitted from +// this structure. As riscv64 Go programs require at least RV64G, the code that populates +// this structure cannot run successfully if some of the RV64G extensions are missing. +// The struct is padded to avoid false sharing. +var RISCV64 struct { + _ CacheLinePad + HasFastMisaligned bool // Fast misaligned accesses + HasC bool // Compressed instruction-set extension + HasV bool // Vector extension compatible with RVV 1.0 + HasZba bool // Address generation instructions extension + HasZbb bool // Basic bit-manipulation extension + HasZbs bool // Single-bit instructions extension + _ CacheLinePad +} + func init() { archInit() initOptions() diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go index cd63e73355..7d902b6847 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x +//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x && !riscv64 package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go new file mode 100644 index 0000000000..cb4a0c5728 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go @@ -0,0 +1,137 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +import ( + "syscall" + "unsafe" +) + +// RISC-V extension discovery code for Linux. The approach here is to first try the riscv_hwprobe +// syscall falling back to HWCAP to check for the C extension if riscv_hwprobe is not available. +// +// A note on detection of the Vector extension using HWCAP. +// +// Support for the Vector extension version 1.0 was added to the Linux kernel in release 6.5. +// Support for the riscv_hwprobe syscall was added in 6.4. It follows that if the riscv_hwprobe +// syscall is not available then neither is the Vector extension (which needs kernel support). +// The riscv_hwprobe syscall should then be all we need to detect the Vector extension. +// However, some RISC-V board manufacturers ship boards with an older kernel on top of which +// they have back-ported various versions of the Vector extension patches but not the riscv_hwprobe +// patches. These kernels advertise support for the Vector extension using HWCAP. Falling +// back to HWCAP to detect the Vector extension, if riscv_hwprobe is not available, or simply not +// bothering with riscv_hwprobe at all and just using HWCAP may then seem like an attractive option. +// +// Unfortunately, simply checking the 'V' bit in AT_HWCAP will not work as this bit is used by +// RISC-V board and cloud instance providers to mean different things. The Lichee Pi 4A board +// and the Scaleway RV1 cloud instances use the 'V' bit to advertise their support for the unratified +// 0.7.1 version of the Vector Specification. The Banana Pi BPI-F3 and the CanMV-K230 board use +// it to advertise support for 1.0 of the Vector extension. Versions 0.7.1 and 1.0 of the Vector +// extension are binary incompatible. HWCAP can then not be used in isolation to populate the +// HasV field as this field indicates that the underlying CPU is compatible with RVV 1.0. +// +// There is a way at runtime to distinguish between versions 0.7.1 and 1.0 of the Vector +// specification by issuing a RVV 1.0 vsetvli instruction and checking the vill bit of the vtype +// register. This check would allow us to safely detect version 1.0 of the Vector extension +// with HWCAP, if riscv_hwprobe were not available. However, the check cannot +// be added until the assembler supports the Vector instructions. +// +// Note the riscv_hwprobe syscall does not suffer from these ambiguities by design as all of the +// extensions it advertises support for are explicitly versioned. It's also worth noting that +// the riscv_hwprobe syscall is the only way to detect multi-letter RISC-V extensions, e.g., Zba. +// These cannot be detected using HWCAP and so riscv_hwprobe must be used to detect the majority +// of RISC-V extensions. +// +// Please see https://docs.kernel.org/arch/riscv/hwprobe.html for more information. + +// golang.org/x/sys/cpu is not allowed to depend on golang.org/x/sys/unix so we must +// reproduce the constants, types and functions needed to make the riscv_hwprobe syscall +// here. + +const ( + // Copied from golang.org/x/sys/unix/ztypes_linux_riscv64.go. + riscv_HWPROBE_KEY_IMA_EXT_0 = 0x4 + riscv_HWPROBE_IMA_C = 0x2 + riscv_HWPROBE_IMA_V = 0x4 + riscv_HWPROBE_EXT_ZBA = 0x8 + riscv_HWPROBE_EXT_ZBB = 0x10 + riscv_HWPROBE_EXT_ZBS = 0x20 + riscv_HWPROBE_KEY_CPUPERF_0 = 0x5 + riscv_HWPROBE_MISALIGNED_FAST = 0x3 + riscv_HWPROBE_MISALIGNED_MASK = 0x7 +) + +const ( + // sys_RISCV_HWPROBE is copied from golang.org/x/sys/unix/zsysnum_linux_riscv64.go. + sys_RISCV_HWPROBE = 258 +) + +// riscvHWProbePairs is copied from golang.org/x/sys/unix/ztypes_linux_riscv64.go. +type riscvHWProbePairs struct { + key int64 + value uint64 +} + +const ( + // CPU features + hwcap_RISCV_ISA_C = 1 << ('C' - 'A') +) + +func doinit() { + // A slice of key/value pair structures is passed to the RISCVHWProbe syscall. The key + // field should be initialised with one of the key constants defined above, e.g., + // RISCV_HWPROBE_KEY_IMA_EXT_0. The syscall will set the value field to the appropriate value. + // If the kernel does not recognise a key it will set the key field to -1 and the value field to 0. + + pairs := []riscvHWProbePairs{ + {riscv_HWPROBE_KEY_IMA_EXT_0, 0}, + {riscv_HWPROBE_KEY_CPUPERF_0, 0}, + } + + // This call only indicates that extensions are supported if they are implemented on all cores. + if riscvHWProbe(pairs, 0) { + if pairs[0].key != -1 { + v := uint(pairs[0].value) + RISCV64.HasC = isSet(v, riscv_HWPROBE_IMA_C) + RISCV64.HasV = isSet(v, riscv_HWPROBE_IMA_V) + RISCV64.HasZba = isSet(v, riscv_HWPROBE_EXT_ZBA) + RISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB) + RISCV64.HasZbs = isSet(v, riscv_HWPROBE_EXT_ZBS) + } + if pairs[1].key != -1 { + v := pairs[1].value & riscv_HWPROBE_MISALIGNED_MASK + RISCV64.HasFastMisaligned = v == riscv_HWPROBE_MISALIGNED_FAST + } + } + + // Let's double check with HWCAP if the C extension does not appear to be supported. + // This may happen if we're running on a kernel older than 6.4. + + if !RISCV64.HasC { + RISCV64.HasC = isSet(hwCap, hwcap_RISCV_ISA_C) + } +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} + +// riscvHWProbe is a simplified version of the generated wrapper function found in +// golang.org/x/sys/unix/zsyscall_linux_riscv64.go. We simplify it by removing the +// cpuCount and cpus parameters which we do not need. We always want to pass 0 for +// these parameters here so the kernel only reports the extensions that are present +// on all cores. +func riscvHWProbe(pairs []riscvHWProbePairs, flags uint) bool { + var _zero uintptr + var p0 unsafe.Pointer + if len(pairs) > 0 { + p0 = unsafe.Pointer(&pairs[0]) + } else { + p0 = unsafe.Pointer(&_zero) + } + + _, _, e1 := syscall.Syscall6(sys_RISCV_HWPROBE, uintptr(p0), uintptr(len(pairs)), uintptr(0), uintptr(0), uintptr(flags), 0) + return e1 == 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go index 7f0c79c004..aca3199c91 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go @@ -8,4 +8,13 @@ package cpu const cacheLineSize = 64 -func initOptions() {} +func initOptions() { + options = []option{ + {Name: "fastmisaligned", Feature: &RISCV64.HasFastMisaligned}, + {Name: "c", Feature: &RISCV64.HasC}, + {Name: "v", Feature: &RISCV64.HasV}, + {Name: "zba", Feature: &RISCV64.HasZba}, + {Name: "zbb", Feature: &RISCV64.HasZbb}, + {Name: "zbs", Feature: &RISCV64.HasZbs}, + } +} diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index d07dd09eb5..e14b766a32 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -552,6 +552,7 @@ ccflags="$@" $2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ && $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || $2 ~ /^SOCK_|SK_DIAG_|SKNLGRP_$/ || + $2 ~ /^(CONNECT|SAE)_/ || $2 ~ /^FIORDCHK$/ || $2 ~ /^SIOC/ || $2 ~ /^TIOC/ || diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 2d15200adb..099867deed 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -566,6 +566,43 @@ func PthreadFchdir(fd int) (err error) { return pthread_fchdir_np(fd) } +// Connectx calls connectx(2) to initiate a connection on a socket. +// +// srcIf, srcAddr, and dstAddr are filled into a [SaEndpoints] struct and passed as the endpoints argument. +// +// - srcIf is the optional source interface index. 0 means unspecified. +// - srcAddr is the optional source address. nil means unspecified. +// - dstAddr is the destination address. +// +// On success, Connectx returns the number of bytes enqueued for transmission. +func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocID, flags uint32, iov []Iovec, connid *SaeConnID) (n uintptr, err error) { + endpoints := SaEndpoints{ + Srcif: srcIf, + } + + if srcAddr != nil { + addrp, addrlen, err := srcAddr.sockaddr() + if err != nil { + return 0, err + } + endpoints.Srcaddr = (*RawSockaddr)(addrp) + endpoints.Srcaddrlen = uint32(addrlen) + } + + if dstAddr != nil { + addrp, addrlen, err := dstAddr.sockaddr() + if err != nil { + return 0, err + } + endpoints.Dstaddr = (*RawSockaddr)(addrp) + endpoints.Dstaddrlen = uint32(addrlen) + } + + err = connectx(fd, &endpoints, associd, flags, iov, &n, connid) + return +} + +//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_hurd.go b/vendor/golang.org/x/sys/unix/syscall_hurd.go index ba46651f8e..a6a2d2fc2b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_hurd.go +++ b/vendor/golang.org/x/sys/unix/syscall_hurd.go @@ -11,6 +11,7 @@ package unix int ioctl(int, unsigned long int, uintptr_t); */ import "C" +import "unsafe" func ioctl(fd int, req uint, arg uintptr) (err error) { r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg)) diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 4308ac1772..d73c4652e6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -237,6 +237,9 @@ const ( CLOCK_UPTIME_RAW_APPROX = 0x9 CLONE_NOFOLLOW = 0x1 CLONE_NOOWNERCOPY = 0x2 + CONNECT_DATA_AUTHENTICATED = 0x4 + CONNECT_DATA_IDEMPOTENT = 0x2 + CONNECT_RESUME_ON_READ_WRITE = 0x1 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 @@ -1265,6 +1268,10 @@ const ( RTV_SSTHRESH = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 + SAE_ASSOCID_ALL = 0xffffffff + SAE_ASSOCID_ANY = 0x0 + SAE_CONNID_ALL = 0xffffffff + SAE_CONNID_ANY = 0x0 SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index c8068a7a16..4a55a40058 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -237,6 +237,9 @@ const ( CLOCK_UPTIME_RAW_APPROX = 0x9 CLONE_NOFOLLOW = 0x1 CLONE_NOOWNERCOPY = 0x2 + CONNECT_DATA_AUTHENTICATED = 0x4 + CONNECT_DATA_IDEMPOTENT = 0x2 + CONNECT_RESUME_ON_READ_WRITE = 0x1 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 @@ -1265,6 +1268,10 @@ const ( RTV_SSTHRESH = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 + SAE_ASSOCID_ALL = 0xffffffff + SAE_ASSOCID_ANY = 0x0 + SAE_CONNID_ALL = 0xffffffff + SAE_CONNID_ANY = 0x0 SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go index da08b2ab3d..1ec2b1407b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go @@ -581,6 +581,8 @@ const ( AT_EMPTY_PATH = 0x1000 AT_REMOVEDIR = 0x200 RENAME_NOREPLACE = 1 << 0 + ST_RDONLY = 1 + ST_NOSUID = 2 ) const ( diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index b622533ef2..24b346e1a3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -841,6 +841,26 @@ var libc_pthread_fchdir_np_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) { + var _p0 unsafe.Pointer + if len(iov) > 0 { + _p0 = unsafe.Pointer(&iov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connectx_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connectx connectx "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index cfe6646baf..ebd213100b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -248,6 +248,11 @@ TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) +TEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connectx(SB) +GLOBL ·libc_connectx_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 13f624f69f..824b9c2d5e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -841,6 +841,26 @@ var libc_pthread_fchdir_np_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) { + var _p0 unsafe.Pointer + if len(iov) > 0 { + _p0 = unsafe.Pointer(&iov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connectx_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connectx connectx "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index fe222b75df..4f178a2293 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -248,6 +248,11 @@ TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) +TEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connectx(SB) +GLOBL ·libc_connectx_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index 091d107f3a..d003c3d437 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -306,6 +306,19 @@ type XVSockPgen struct { type _Socklen uint32 +type SaeAssocID uint32 + +type SaeConnID uint32 + +type SaEndpoints struct { + Srcif uint32 + Srcaddr *RawSockaddr + Srcaddrlen uint32 + Dstaddr *RawSockaddr + Dstaddrlen uint32 + _ [4]byte +} + type Xucred struct { Version uint32 Uid uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 28ff4ef74d..0d45a941aa 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -306,6 +306,19 @@ type XVSockPgen struct { type _Socklen uint32 +type SaeAssocID uint32 + +type SaeConnID uint32 + +type SaEndpoints struct { + Srcif uint32 + Srcaddr *RawSockaddr + Srcaddrlen uint32 + Dstaddr *RawSockaddr + Dstaddrlen uint32 + _ [4]byte +} + type Xucred struct { Version uint32 Uid uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go index 6cbd094a3a..51e13eb055 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -625,6 +625,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go index 7c03b6ee77..d002d8ef3c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -630,6 +630,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go index 422107ee8b..3f863d898d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -616,6 +616,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go index 505a12acfd..61c7293106 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -610,6 +610,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go index cc986c7900..b5d17414f0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go @@ -612,6 +612,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index b102b95a0a..9f2550dc31 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -2486,7 +2486,7 @@ type XDPMmapOffsets struct { type XDPUmemReg struct { Addr uint64 Len uint64 - Chunk_size uint32 + Size uint32 Headroom uint32 Flags uint32 Tx_metadata_len uint32 @@ -3807,6 +3807,9 @@ const ( ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 ETHTOOL_MSG_KERNEL_MAX = 0x2b + ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 + ETHTOOL_FLAG_OMIT_REPLY = 0x2 + ETHTOOL_FLAG_STATS = 0x4 ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 15adc04142..ad05b51a60 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -727,6 +727,37 @@ const ( RISCV_HWPROBE_EXT_ZBA = 0x8 RISCV_HWPROBE_EXT_ZBB = 0x10 RISCV_HWPROBE_EXT_ZBS = 0x20 + RISCV_HWPROBE_EXT_ZICBOZ = 0x40 + RISCV_HWPROBE_EXT_ZBC = 0x80 + RISCV_HWPROBE_EXT_ZBKB = 0x100 + RISCV_HWPROBE_EXT_ZBKC = 0x200 + RISCV_HWPROBE_EXT_ZBKX = 0x400 + RISCV_HWPROBE_EXT_ZKND = 0x800 + RISCV_HWPROBE_EXT_ZKNE = 0x1000 + RISCV_HWPROBE_EXT_ZKNH = 0x2000 + RISCV_HWPROBE_EXT_ZKSED = 0x4000 + RISCV_HWPROBE_EXT_ZKSH = 0x8000 + RISCV_HWPROBE_EXT_ZKT = 0x10000 + RISCV_HWPROBE_EXT_ZVBB = 0x20000 + RISCV_HWPROBE_EXT_ZVBC = 0x40000 + RISCV_HWPROBE_EXT_ZVKB = 0x80000 + RISCV_HWPROBE_EXT_ZVKG = 0x100000 + RISCV_HWPROBE_EXT_ZVKNED = 0x200000 + RISCV_HWPROBE_EXT_ZVKNHA = 0x400000 + RISCV_HWPROBE_EXT_ZVKNHB = 0x800000 + RISCV_HWPROBE_EXT_ZVKSED = 0x1000000 + RISCV_HWPROBE_EXT_ZVKSH = 0x2000000 + RISCV_HWPROBE_EXT_ZVKT = 0x4000000 + RISCV_HWPROBE_EXT_ZFH = 0x8000000 + RISCV_HWPROBE_EXT_ZFHMIN = 0x10000000 + RISCV_HWPROBE_EXT_ZIHINTNTL = 0x20000000 + RISCV_HWPROBE_EXT_ZVFH = 0x40000000 + RISCV_HWPROBE_EXT_ZVFHMIN = 0x80000000 + RISCV_HWPROBE_EXT_ZFA = 0x100000000 + RISCV_HWPROBE_EXT_ZTSO = 0x200000000 + RISCV_HWPROBE_EXT_ZACAS = 0x400000000 + RISCV_HWPROBE_EXT_ZICOND = 0x800000000 + RISCV_HWPROBE_EXT_ZIHINTPAUSE = 0x1000000000 RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 @@ -734,4 +765,6 @@ const ( RISCV_HWPROBE_MISALIGNED_FAST = 0x3 RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 RISCV_HWPROBE_MISALIGNED_MASK = 0x7 + RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE = 0x6 + RISCV_HWPROBE_WHICH_CPUS = 0x1 ) diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 1fa34fd17c..5cee9a3143 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -313,6 +313,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode //sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo //sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition +//sys GetConsoleCP() (cp uint32, err error) = kernel32.GetConsoleCP +//sys GetConsoleOutputCP() (cp uint32, err error) = kernel32.GetConsoleOutputCP +//sys SetConsoleCP(cp uint32) (err error) = kernel32.SetConsoleCP +//sys SetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW //sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW //sys resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 4d0c15745f..7b97a154c9 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -1060,6 +1060,7 @@ const ( SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + SIO_UDP_NETRESET = IOC_IN | IOC_VENDOR | 15 // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 @@ -2031,6 +2032,50 @@ const ( IF_TYPE_IEEE1394 = 144 ) +// Enum NL_PREFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_prefix_origin +const ( + IpPrefixOriginOther = 0 + IpPrefixOriginManual = 1 + IpPrefixOriginWellKnown = 2 + IpPrefixOriginDhcp = 3 + IpPrefixOriginRouterAdvertisement = 4 + IpPrefixOriginUnchanged = 1 << 4 +) + +// Enum NL_SUFFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_suffix_origin +const ( + NlsoOther = 0 + NlsoManual = 1 + NlsoWellKnown = 2 + NlsoDhcp = 3 + NlsoLinkLayerAddress = 4 + NlsoRandom = 5 + IpSuffixOriginOther = 0 + IpSuffixOriginManual = 1 + IpSuffixOriginWellKnown = 2 + IpSuffixOriginDhcp = 3 + IpSuffixOriginLinkLayerAddress = 4 + IpSuffixOriginRandom = 5 + IpSuffixOriginUnchanged = 1 << 4 +) + +// Enum NL_DAD_STATE for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_dad_state +const ( + NldsInvalid = 0 + NldsTentative = 1 + NldsDuplicate = 2 + NldsDeprecated = 3 + NldsPreferred = 4 + IpDadStateInvalid = 0 + IpDadStateTentative = 1 + IpDadStateDuplicate = 2 + IpDadStateDeprecated = 3 + IpDadStatePreferred = 4 +) + type SocketAddress struct { Sockaddr *syscall.RawSockaddrAny SockaddrLength int32 diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 9bb979a3e4..4c2e1bdc01 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -247,7 +247,9 @@ var ( procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procGetConsoleOutputCP = modkernel32.NewProc("GetConsoleOutputCP") procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") @@ -347,8 +349,10 @@ var ( procSetCommMask = modkernel32.NewProc("SetCommMask") procSetCommState = modkernel32.NewProc("SetCommState") procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCP = modkernel32.NewProc("SetConsoleCP") procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procSetConsoleOutputCP = modkernel32.NewProc("SetConsoleOutputCP") procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") @@ -2162,6 +2166,15 @@ func GetComputerName(buf *uint16, n *uint32) (err error) { return } +func GetConsoleCP() (cp uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetConsoleCP.Addr(), 0, 0, 0, 0) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleMode(console Handle, mode *uint32) (err error) { r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) if r1 == 0 { @@ -2170,6 +2183,15 @@ func GetConsoleMode(console Handle, mode *uint32) (err error) { return } +func GetConsoleOutputCP() (cp uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetConsoleOutputCP.Addr(), 0, 0, 0, 0) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) if r1 == 0 { @@ -3038,6 +3060,14 @@ func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { return } +func SetConsoleCP(cp uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleCP.Addr(), 1, uintptr(cp), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func setConsoleCursorPosition(console Handle, position uint32) (err error) { r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0) if r1 == 0 { @@ -3054,6 +3084,14 @@ func SetConsoleMode(console Handle, mode uint32) (err error) { return } +func SetConsoleOutputCP(cp uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleOutputCP.Addr(), 1, uintptr(cp), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func SetCurrentDirectory(path *uint16) (err error) { r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) if r1 == 0 { diff --git a/vendor/golang.org/x/time/LICENSE b/vendor/golang.org/x/time/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/time/LICENSE +++ b/vendor/golang.org/x/time/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/google.golang.org/api/internal/creds.go b/vendor/google.golang.org/api/internal/creds.go index 5ea555ed01..4ebeb61c1a 100644 --- a/vendor/google.golang.org/api/internal/creds.go +++ b/vendor/google.golang.org/api/internal/creds.go @@ -100,18 +100,12 @@ func credsNewAuth(ctx context.Context, settings *DialSettings) (*google.Credenti aud = settings.DefaultAudience } - tokenURL, oauth2Client, err := GetOAuth2Configuration(ctx, settings) - if err != nil { - return nil, err - } creds, err := credentials.DetectDefault(&credentials.DetectOptions{ Scopes: scopes, Audience: aud, CredentialsFile: settings.CredentialsFile, CredentialsJSON: settings.CredentialsJSON, UseSelfSignedJWT: useSelfSignedJWT, - TokenURL: tokenURL, - Client: oauth2Client, }) if err != nil { return nil, err @@ -302,14 +296,3 @@ func baseTransport() *http.Transport { ExpectContinueTimeout: 1 * time.Second, } } - -// ErrUniverseNotMatch composes an error string from the provided universe -// domain sources (DialSettings and Credentials, respectively). -func ErrUniverseNotMatch(settingsUD, credsUD string) error { - return fmt.Errorf( - "the configured universe domain (%q) does not match the universe "+ - "domain found in the credentials (%q). If you haven't configured "+ - "WithUniverseDomain explicitly, \"googleapis.com\" is the default", - settingsUD, - credsUD) -} diff --git a/vendor/google.golang.org/api/internal/settings.go b/vendor/google.golang.org/api/internal/settings.go index edba49af49..32949cccbd 100644 --- a/vendor/google.golang.org/api/internal/settings.go +++ b/vendor/google.golang.org/api/internal/settings.go @@ -204,8 +204,7 @@ func (ds *DialSettings) IsUniverseDomainGDU() bool { } // GetUniverseDomain returns the default service domain for a given Cloud -// universe, from google.Credentials, for comparison with the value returned by -// (*DialSettings).GetUniverseDomain. This wrapper function should be removed +// universe, from google.Credentials. This wrapper function should be removed // to close https://github.com/googleapis/google-api-go-client/issues/2399. func GetUniverseDomain(creds *google.Credentials) (string, error) { timer := time.NewTimer(time.Second) diff --git a/vendor/google.golang.org/api/internal/version.go b/vendor/google.golang.org/api/internal/version.go index 1bcbf2cb30..36e075d21f 100644 --- a/vendor/google.golang.org/api/internal/version.go +++ b/vendor/google.golang.org/api/internal/version.go @@ -5,4 +5,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.189.0" +const Version = "0.196.0" diff --git a/vendor/google.golang.org/api/storage/v1/storage-api.json b/vendor/google.golang.org/api/storage/v1/storage-api.json index 78e9eb1c7e..597daf0a72 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-api.json +++ b/vendor/google.golang.org/api/storage/v1/storage-api.json @@ -43,7 +43,7 @@ "location": "me-central2" } ], - "etag": "\"323732353932323032353837333633313231\"", + "etag": "\"38363036373236373330353534313035333932\"", "icons": { "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" @@ -560,7 +560,7 @@ "buckets": { "methods": { "delete": { - "description": "Permanently deletes an empty bucket.", + "description": "Deletes an empty bucket. Deletions are permanent unless soft delete is enabled on the bucket.", "httpMethod": "DELETE", "id": "storage.buckets.delete", "parameterOrder": [ @@ -612,6 +612,12 @@ "required": true, "type": "string" }, + "generation": { + "description": "If present, specifies the generation of the bucket. This is required if softDeleted is true.", + "format": "int64", + "location": "query", + "type": "string" + }, "ifMetagenerationMatch": { "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", "format": "int64", @@ -637,6 +643,11 @@ "location": "query", "type": "string" }, + "softDeleted": { + "description": "If true, return the soft-deleted version of this bucket. The default is false. For more information, see [Soft Delete](https://cloud.google.com/storage/docs/soft-delete).", + "location": "query", + "type": "boolean" + }, "userProject": { "description": "The project to be billed for this request. Required for Requester Pays buckets.", "location": "query", @@ -860,6 +871,11 @@ "location": "query", "type": "string" }, + "softDeleted": { + "description": "If true, only soft-deleted bucket versions will be returned. The default is false. For more information, see [Soft Delete](https://cloud.google.com/storage/docs/soft-delete).", + "location": "query", + "type": "boolean" + }, "userProject": { "description": "The project to be billed for this request.", "location": "query", @@ -1013,6 +1029,41 @@ "https://www.googleapis.com/auth/devstorage.full_control" ] }, + "restore": { + "description": "Restores a soft-deleted bucket.", + "httpMethod": "POST", + "id": "storage.buckets.restore", + "parameterOrder": [ + "bucket", + "generation" + ], + "parameters": { + "bucket": { + "description": "Name of a bucket.", + "location": "path", + "required": true, + "type": "string" + }, + "generation": { + "description": "Generation of a bucket.", + "format": "int64", + "location": "query", + "required": true, + "type": "string" + }, + "userProject": { + "description": "The project to be billed for this request. Required for Requester Pays buckets.", + "location": "query", + "type": "string" + } + }, + "path": "b/{bucket}/restore", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, "setIamPolicy": { "description": "Updates an IAM policy for the specified bucket.", "httpMethod": "PUT", @@ -2779,7 +2830,7 @@ "type": "string" }, "softDeleted": { - "description": "If true, only soft-deleted object versions will be listed. The default is false. For more information, see Soft Delete.", + "description": "If true, only soft-deleted object versions will be listed. The default is false. For more information, see [Soft Delete](https://cloud.google.com/storage/docs/soft-delete).", "location": "query", "type": "boolean" }, @@ -3041,7 +3092,7 @@ "type": "string" }, "softDeleted": { - "description": "If true, only soft-deleted object versions will be listed. The default is false. For more information, see Soft Delete.", + "description": "If true, only soft-deleted object versions will be listed. The default is false. For more information, see [Soft Delete](https://cloud.google.com/storage/docs/soft-delete).", "location": "query", "type": "boolean" }, @@ -3056,7 +3107,7 @@ "type": "string" }, "versions": { - "description": "If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.", + "description": "If true, lists all versions of an object as distinct results. The default is false. For more information, see [Object Versioning](https://cloud.google.com/storage/docs/object-versioning).", "location": "query", "type": "boolean" } @@ -3235,7 +3286,7 @@ "type": "string" }, "object": { - "description": "Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.", + "description": "Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).", "location": "path", "required": true, "type": "string" @@ -3704,7 +3755,7 @@ "type": "string" }, "versions": { - "description": "If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.", + "description": "If true, lists all versions of an object as distinct results. The default is false. For more information, see [Object Versioning](https://cloud.google.com/storage/docs/object-versioning).", "location": "query", "type": "boolean" } @@ -4006,7 +4057,7 @@ ] }, "update": { - "description": "Updates the state of an HMAC key. See the HMAC Key resource descriptor for valid states.", + "description": "Updates the state of an HMAC key. See the [HMAC Key resource descriptor](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys/update#request-body) for valid states.", "httpMethod": "PUT", "id": "storage.projects.hmacKeys.update", "parameterOrder": [ @@ -4085,7 +4136,7 @@ } } }, - "revision": "20240706", + "revision": "20240819", "rootUrl": "https://storage.googleapis.com/", "schemas": { "AnywhereCache": { @@ -4293,6 +4344,16 @@ "description": "HTTP 1.1 Entity tag for the bucket.", "type": "string" }, + "generation": { + "description": "The generation of this bucket.", + "format": "int64", + "type": "string" + }, + "hardDeleteTime": { + "description": "The hard delete time of the bucket in RFC 3339 format.", + "format": "date-time", + "type": "string" + }, "hierarchicalNamespace": { "description": "The bucket's hierarchical namespace configuration.", "properties": { @@ -4404,7 +4465,7 @@ "type": "object" }, "lifecycle": { - "description": "The bucket's lifecycle configuration. See lifecycle management for more information.", + "description": "The bucket's lifecycle configuration. See [Lifecycle Management](https://cloud.google.com/storage/docs/lifecycle) for more information.", "properties": { "rule": { "description": "A lifecycle management rule, which is made of an action to take and the condition(s) under which the action will be taken.", @@ -4503,7 +4564,7 @@ "type": "object" }, "location": { - "description": "The location of the bucket. Object data for objects in the bucket resides in physical storage within this region. Defaults to US. See the developer's guide for the authoritative list.", + "description": "The location of the bucket. Object data for objects in the bucket resides in physical storage within this region. Defaults to US. See the [Developer's Guide](https://cloud.google.com/storage/docs/locations) for the authoritative list.", "type": "string" }, "locationType": { @@ -4591,6 +4652,10 @@ "description": "The Recovery Point Objective (RPO) of this bucket. Set to ASYNC_TURBO to turn on Turbo Replication on a bucket.", "type": "string" }, + "satisfiesPZI": { + "description": "Reserved for future use.", + "type": "boolean" + }, "satisfiesPZS": { "description": "Reserved for future use.", "type": "boolean" @@ -4615,8 +4680,13 @@ }, "type": "object" }, + "softDeleteTime": { + "description": "The soft delete time of the bucket in RFC 3339 format.", + "format": "date-time", + "type": "string" + }, "storageClass": { - "description": "The bucket's default storage class, used whenever no storageClass is specified for a newly-created object. This defines how objects in the bucket are stored and determines the SLA and the cost of storage. Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, ARCHIVE, and DURABLE_REDUCED_AVAILABILITY. If this value is not specified when the bucket is created, it will default to STANDARD. For more information, see storage classes.", + "description": "The bucket's default storage class, used whenever no storageClass is specified for a newly-created object. This defines how objects in the bucket are stored and determines the SLA and the cost of storage. Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, ARCHIVE, and DURABLE_REDUCED_AVAILABILITY. If this value is not specified when the bucket is created, it will default to STANDARD. For more information, see [Storage Classes](https://cloud.google.com/storage/docs/storage-classes).", "type": "string" }, "timeCreated": { @@ -4640,7 +4710,7 @@ "type": "object" }, "website": { - "description": "The bucket's website configuration, controlling how the service behaves when accessing bucket contents as a web site. See the Static Website Examples for more information.", + "description": "The bucket's website configuration, controlling how the service behaves when accessing bucket contents as a web site. See the [Static Website Examples](https://cloud.google.com/storage/docs/static-website) for more information.", "properties": { "mainPageSuffix": { "description": "If the requested object path is missing, the service will ensure the path has a trailing '/', append this suffix, and attempt to retrieve the resulting object. This allows the creation of index.html objects to represent directory pages.", @@ -5435,7 +5505,7 @@ "type": "string" }, "crc32c": { - "description": "CRC32c checksum, as described in RFC 4960, Appendix B; encoded using base64 in big-endian byte order. For more information about using the CRC32c checksum, see Hashes and ETags: Best Practices.", + "description": "CRC32c checksum, as described in RFC 4960, Appendix B; encoded using base64 in big-endian byte order. For more information about using the CRC32c checksum, see [Data Validation and Change Detection](https://cloud.google.com/storage/docs/data-validation).", "type": "string" }, "customTime": { @@ -5489,7 +5559,7 @@ "type": "string" }, "md5Hash": { - "description": "MD5 hash of the data; encoded using base64. For more information about using the MD5 hash, see Hashes and ETags: Best Practices.", + "description": "MD5 hash of the data; encoded using base64. For more information about using the MD5 hash, see [Data Validation and Change Detection](https://cloud.google.com/storage/docs/data-validation).", "type": "string" }, "mediaLink": { diff --git a/vendor/google.golang.org/api/storage/v1/storage-gen.go b/vendor/google.golang.org/api/storage/v1/storage-gen.go index 07de6ebf63..b16e3f227b 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-gen.go +++ b/vendor/google.golang.org/api/storage/v1/storage-gen.go @@ -93,6 +93,7 @@ var _ = strings.Replace var _ = context.Canceled var _ = internaloption.WithDefaultEndpoint var _ = internal.Version +var _ = gax.Version const apiId = "storage:v1" const apiName = "storage" @@ -133,6 +134,7 @@ func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, err opts = append(opts, internaloption.WithDefaultEndpoint(basePath)) opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate)) opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath)) + opts = append(opts, internaloption.EnableNewAuthLibrary()) client, endpoint, err := htransport.NewClient(ctx, opts...) if err != nil { return nil, err @@ -459,6 +461,10 @@ type Bucket struct { Encryption *BucketEncryption `json:"encryption,omitempty"` // Etag: HTTP 1.1 Entity tag for the bucket. Etag string `json:"etag,omitempty"` + // Generation: The generation of this bucket. + Generation int64 `json:"generation,omitempty,string"` + // HardDeleteTime: The hard delete time of the bucket in RFC 3339 format. + HardDeleteTime string `json:"hardDeleteTime,omitempty"` // HierarchicalNamespace: The bucket's hierarchical namespace configuration. HierarchicalNamespace *BucketHierarchicalNamespace `json:"hierarchicalNamespace,omitempty"` // IamConfiguration: The bucket's IAM configuration. @@ -474,12 +480,13 @@ type Bucket struct { Kind string `json:"kind,omitempty"` // Labels: User-provided labels, in key/value pairs. Labels map[string]string `json:"labels,omitempty"` - // Lifecycle: The bucket's lifecycle configuration. See lifecycle management - // for more information. + // Lifecycle: The bucket's lifecycle configuration. See Lifecycle Management + // (https://cloud.google.com/storage/docs/lifecycle) for more information. Lifecycle *BucketLifecycle `json:"lifecycle,omitempty"` // Location: The location of the bucket. Object data for objects in the bucket // resides in physical storage within this region. Defaults to US. See the - // developer's guide for the authoritative list. + // Developer's Guide (https://cloud.google.com/storage/docs/locations) for the + // authoritative list. Location string `json:"location,omitempty"` // LocationType: The type of the bucket location. LocationType string `json:"locationType,omitempty"` @@ -510,6 +517,8 @@ type Bucket struct { // Rpo: The Recovery Point Objective (RPO) of this bucket. Set to ASYNC_TURBO // to turn on Turbo Replication on a bucket. Rpo string `json:"rpo,omitempty"` + // SatisfiesPZI: Reserved for future use. + SatisfiesPZI bool `json:"satisfiesPZI,omitempty"` // SatisfiesPZS: Reserved for future use. SatisfiesPZS bool `json:"satisfiesPZS,omitempty"` // SelfLink: The URI of this bucket. @@ -518,13 +527,16 @@ type Bucket struct { // of time that soft-deleted objects will be retained, and cannot be // permanently deleted. SoftDeletePolicy *BucketSoftDeletePolicy `json:"softDeletePolicy,omitempty"` + // SoftDeleteTime: The soft delete time of the bucket in RFC 3339 format. + SoftDeleteTime string `json:"softDeleteTime,omitempty"` // StorageClass: The bucket's default storage class, used whenever no // storageClass is specified for a newly-created object. This defines how // objects in the bucket are stored and determines the SLA and the cost of // storage. Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, // COLDLINE, ARCHIVE, and DURABLE_REDUCED_AVAILABILITY. If this value is not // specified when the bucket is created, it will default to STANDARD. For more - // information, see storage classes. + // information, see Storage Classes + // (https://cloud.google.com/storage/docs/storage-classes). StorageClass string `json:"storageClass,omitempty"` // TimeCreated: The creation time of the bucket in RFC 3339 format. TimeCreated string `json:"timeCreated,omitempty"` @@ -534,7 +546,8 @@ type Bucket struct { Versioning *BucketVersioning `json:"versioning,omitempty"` // Website: The bucket's website configuration, controlling how the service // behaves when accessing bucket contents as a web site. See the Static Website - // Examples for more information. + // Examples (https://cloud.google.com/storage/docs/static-website) for more + // information. Website *BucketWebsite `json:"website,omitempty"` // ServerResponse contains the HTTP response code and headers from the server. @@ -885,8 +898,9 @@ func (s BucketIpFilterVpcNetworkSources) MarshalJSON() ([]byte, error) { return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields) } -// BucketLifecycle: The bucket's lifecycle configuration. See lifecycle -// management for more information. +// BucketLifecycle: The bucket's lifecycle configuration. See Lifecycle +// Management (https://cloud.google.com/storage/docs/lifecycle) for more +// information. type BucketLifecycle struct { // Rule: A lifecycle management rule, which is made of an action to take and // the condition(s) under which the action will be taken. @@ -1198,7 +1212,8 @@ func (s BucketVersioning) MarshalJSON() ([]byte, error) { // BucketWebsite: The bucket's website configuration, controlling how the // service behaves when accessing bucket contents as a web site. See the Static -// Website Examples for more information. +// Website Examples (https://cloud.google.com/storage/docs/static-website) for +// more information. type BucketWebsite struct { // MainPageSuffix: If the requested object path is missing, the service will // ensure the path has a trailing '/', append this suffix, and attempt to @@ -2165,7 +2180,8 @@ type Object struct { ContentType string `json:"contentType,omitempty"` // Crc32c: CRC32c checksum, as described in RFC 4960, Appendix B; encoded using // base64 in big-endian byte order. For more information about using the CRC32c - // checksum, see Hashes and ETags: Best Practices. + // checksum, see Data Validation and Change Detection + // (https://cloud.google.com/storage/docs/data-validation). Crc32c string `json:"crc32c,omitempty"` // CustomTime: A timestamp in RFC 3339 format specified by the user for an // object. @@ -2203,7 +2219,8 @@ type Object struct { // request to fail with status code 400 - Bad Request. KmsKeyName string `json:"kmsKeyName,omitempty"` // Md5Hash: MD5 hash of the data; encoded using base64. For more information - // about using the MD5 hash, see Hashes and ETags: Best Practices. + // about using the MD5 hash, see Data Validation and Change Detection + // (https://cloud.google.com/storage/docs/data-validation). Md5Hash string `json:"md5Hash,omitempty"` // MediaLink: Media download link. MediaLink string `json:"mediaLink,omitempty"` @@ -4172,7 +4189,8 @@ type BucketsDeleteCall struct { header_ http.Header } -// Delete: Permanently deletes an empty bucket. +// Delete: Deletes an empty bucket. Deletions are permanent unless soft delete +// is enabled on the bucket. // // - bucket: Name of a bucket. func (r *BucketsService) Delete(bucket string) *BucketsDeleteCall { @@ -4276,6 +4294,13 @@ func (r *BucketsService) Get(bucket string) *BucketsGetCall { return c } +// Generation sets the optional parameter "generation": If present, specifies +// the generation of the bucket. This is required if softDeleted is true. +func (c *BucketsGetCall) Generation(generation int64) *BucketsGetCall { + c.urlParams_.Set("generation", fmt.Sprint(generation)) + return c +} + // IfMetagenerationMatch sets the optional parameter "ifMetagenerationMatch": // Makes the return of the bucket metadata conditional on whether the bucket's // current metageneration matches the given value. @@ -4305,6 +4330,15 @@ func (c *BucketsGetCall) Projection(projection string) *BucketsGetCall { return c } +// SoftDeleted sets the optional parameter "softDeleted": If true, return the +// soft-deleted version of this bucket. The default is false. For more +// information, see Soft Delete +// (https://cloud.google.com/storage/docs/soft-delete). +func (c *BucketsGetCall) SoftDeleted(softDeleted bool) *BucketsGetCall { + c.urlParams_.Set("softDeleted", fmt.Sprint(softDeleted)) + return c +} + // UserProject sets the optional parameter "userProject": The project to be // billed for this request. Required for Requester Pays buckets. func (c *BucketsGetCall) UserProject(userProject string) *BucketsGetCall { @@ -4873,6 +4907,15 @@ func (c *BucketsListCall) Projection(projection string) *BucketsListCall { return c } +// SoftDeleted sets the optional parameter "softDeleted": If true, only +// soft-deleted bucket versions will be returned. The default is false. For +// more information, see Soft Delete +// (https://cloud.google.com/storage/docs/soft-delete). +func (c *BucketsListCall) SoftDeleted(softDeleted bool) *BucketsListCall { + c.urlParams_.Set("softDeleted", fmt.Sprint(softDeleted)) + return c +} + // UserProject sets the optional parameter "userProject": The project to be // billed for this request. func (c *BucketsListCall) UserProject(userProject string) *BucketsListCall { @@ -5287,6 +5330,87 @@ func (c *BucketsPatchCall) Do(opts ...googleapi.CallOption) (*Bucket, error) { return ret, nil } +type BucketsRestoreCall struct { + s *Service + bucket string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Restore: Restores a soft-deleted bucket. +// +// - bucket: Name of a bucket. +// - generation: Generation of a bucket. +func (r *BucketsService) Restore(bucket string, generation int64) *BucketsRestoreCall { + c := &BucketsRestoreCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.bucket = bucket + c.urlParams_.Set("generation", fmt.Sprint(generation)) + return c +} + +// UserProject sets the optional parameter "userProject": The project to be +// billed for this request. Required for Requester Pays buckets. +func (c *BucketsRestoreCall) UserProject(userProject string) *BucketsRestoreCall { + c.urlParams_.Set("userProject", userProject) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more +// details. +func (c *BucketsRestoreCall) Fields(s ...googleapi.Field) *BucketsRestoreCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. +func (c *BucketsRestoreCall) Context(ctx context.Context) *BucketsRestoreCall { + c.ctx_ = ctx + return c +} + +// Header returns a http.Header that can be modified by the caller to add +// headers to the request. +func (c *BucketsRestoreCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *BucketsRestoreCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/restore") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "bucket": c.bucket, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "storage.buckets.restore" call. +func (c *BucketsRestoreCall) Do(opts ...googleapi.CallOption) error { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return gensupport.WrapError(err) + } + return nil +} + type BucketsSetIamPolicyCall struct { s *Service bucket string @@ -9839,7 +9963,8 @@ func (c *ObjectsGetCall) Projection(projection string) *ObjectsGetCall { // SoftDeleted sets the optional parameter "softDeleted": If true, only // soft-deleted object versions will be listed. The default is false. For more -// information, see Soft Delete. +// information, see Soft Delete +// (https://cloud.google.com/storage/docs/soft-delete). func (c *ObjectsGetCall) SoftDeleted(softDeleted bool) *ObjectsGetCall { c.urlParams_.Set("softDeleted", fmt.Sprint(softDeleted)) return c @@ -10502,7 +10627,8 @@ func (c *ObjectsListCall) Projection(projection string) *ObjectsListCall { // SoftDeleted sets the optional parameter "softDeleted": If true, only // soft-deleted object versions will be listed. The default is false. For more -// information, see Soft Delete. +// information, see Soft Delete +// (https://cloud.google.com/storage/docs/soft-delete). func (c *ObjectsListCall) SoftDeleted(softDeleted bool) *ObjectsListCall { c.urlParams_.Set("softDeleted", fmt.Sprint(softDeleted)) return c @@ -10526,7 +10652,8 @@ func (c *ObjectsListCall) UserProject(userProject string) *ObjectsListCall { // Versions sets the optional parameter "versions": If true, lists all versions // of an object as distinct results. The default is false. For more -// information, see Object Versioning. +// information, see Object Versioning +// (https://cloud.google.com/storage/docs/object-versioning). func (c *ObjectsListCall) Versions(versions bool) *ObjectsListCall { c.urlParams_.Set("versions", fmt.Sprint(versions)) return c @@ -10864,7 +10991,8 @@ type ObjectsRestoreCall struct { // - bucket: Name of the bucket in which the object resides. // - generation: Selects a specific revision of this object. // - object: Name of the object. For information about how to URL encode object -// names to be path safe, see Encoding URI Path Parts. +// names to be path safe, see Encoding URI Path Parts +// (https://cloud.google.com/storage/docs/request-endpoints#encoding). func (r *ObjectsService) Restore(bucket string, object string, generation int64) *ObjectsRestoreCall { c := &ObjectsRestoreCall{s: r.s, urlParams_: make(gensupport.URLParams)} c.bucket = bucket @@ -11857,7 +11985,8 @@ func (c *ObjectsWatchAllCall) UserProject(userProject string) *ObjectsWatchAllCa // Versions sets the optional parameter "versions": If true, lists all versions // of an object as distinct results. The default is false. For more -// information, see Object Versioning. +// information, see Object Versioning +// (https://cloud.google.com/storage/docs/object-versioning). func (c *ObjectsWatchAllCall) Versions(versions bool) *ObjectsWatchAllCall { c.urlParams_.Set("versions", fmt.Sprint(versions)) return c @@ -12773,7 +12902,9 @@ type ProjectsHmacKeysUpdateCall struct { } // Update: Updates the state of an HMAC key. See the HMAC Key resource -// descriptor for valid states. +// descriptor +// (https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys/update#request-body) +// for valid states. // // - accessId: Name of the HMAC key being updated. // - projectId: Project ID owning the service account of the updated key. diff --git a/vendor/google.golang.org/api/transport/grpc/dial.go b/vendor/google.golang.org/api/transport/grpc/dial.go index 2f6359f292..d2a4f76645 100644 --- a/vendor/google.golang.org/api/transport/grpc/dial.go +++ b/vendor/google.golang.org/api/transport/grpc/dial.go @@ -296,17 +296,6 @@ func dial(ctx context.Context, insecure bool, o *internal.DialSettings) (*grpc.C if err != nil { return nil, err } - if o.TokenSource == nil { - // We only validate non-tokensource creds, as TokenSource-based credentials - // don't propagate universe. - credsUniverseDomain, err := internal.GetUniverseDomain(creds) - if err != nil { - return nil, err - } - if o.GetUniverseDomain() != credsUniverseDomain { - return nil, internal.ErrUniverseNotMatch(o.GetUniverseDomain(), credsUniverseDomain) - } - } grpcOpts = append(grpcOpts, grpc.WithPerRPCCredentials(grpcTokenSource{ TokenSource: oauth.TokenSource{TokenSource: creds.TokenSource}, quotaProject: internal.GetQuotaProject(creds, o.QuotaProject), diff --git a/vendor/google.golang.org/api/transport/http/dial.go b/vendor/google.golang.org/api/transport/http/dial.go index 3747d0df0b..2e2b15c6e0 100644 --- a/vendor/google.golang.org/api/transport/http/dial.go +++ b/vendor/google.golang.org/api/transport/http/dial.go @@ -182,17 +182,6 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna if err != nil { return nil, err } - if settings.TokenSource == nil { - // We only validate non-tokensource creds, as TokenSource-based credentials - // don't propagate universe. - credsUniverseDomain, err := internal.GetUniverseDomain(creds) - if err != nil { - return nil, err - } - if settings.GetUniverseDomain() != credsUniverseDomain { - return nil, internal.ErrUniverseNotMatch(settings.GetUniverseDomain(), credsUniverseDomain) - } - } paramTransport.quotaProject = internal.GetQuotaProject(creds, settings.QuotaProject) ts := creds.TokenSource if settings.ImpersonationConfig == nil && settings.TokenSource != nil { diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go index fe19e8f97a..aa69fb4d50 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go @@ -719,6 +719,8 @@ type PythonSettings struct { // Some settings. Common *CommonLanguageSettings `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + // Experimental features to be included during client library generation. + ExperimentalFeatures *PythonSettings_ExperimentalFeatures `protobuf:"bytes,2,opt,name=experimental_features,json=experimentalFeatures,proto3" json:"experimental_features,omitempty"` } func (x *PythonSettings) Reset() { @@ -760,6 +762,13 @@ func (x *PythonSettings) GetCommon() *CommonLanguageSettings { return nil } +func (x *PythonSettings) GetExperimentalFeatures() *PythonSettings_ExperimentalFeatures { + if x != nil { + return x.ExperimentalFeatures + } + return nil +} + // Settings for Node client libraries. type NodeSettings struct { state protoimpl.MessageState @@ -1114,6 +1123,60 @@ func (x *MethodSettings) GetAutoPopulatedFields() []string { return nil } +// Experimental features to be included during client library generation. +// These fields will be deprecated once the feature graduates and is enabled +// by default. +type PythonSettings_ExperimentalFeatures struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Enables generation of asynchronous REST clients if `rest` transport is + // enabled. By default, asynchronous REST clients will not be generated. + // This feature will be enabled by default 1 month after launching the + // feature in preview packages. + RestAsyncIoEnabled bool `protobuf:"varint,1,opt,name=rest_async_io_enabled,json=restAsyncIoEnabled,proto3" json:"rest_async_io_enabled,omitempty"` +} + +func (x *PythonSettings_ExperimentalFeatures) Reset() { + *x = PythonSettings_ExperimentalFeatures{} + if protoimpl.UnsafeEnabled { + mi := &file_google_api_client_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PythonSettings_ExperimentalFeatures) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PythonSettings_ExperimentalFeatures) ProtoMessage() {} + +func (x *PythonSettings_ExperimentalFeatures) ProtoReflect() protoreflect.Message { + mi := &file_google_api_client_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PythonSettings_ExperimentalFeatures.ProtoReflect.Descriptor instead. +func (*PythonSettings_ExperimentalFeatures) Descriptor() ([]byte, []int) { + return file_google_api_client_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *PythonSettings_ExperimentalFeatures) GetRestAsyncIoEnabled() bool { + if x != nil { + return x.RestAsyncIoEnabled + } + return false +} + // Describes settings to use when generating API methods that use the // long-running operation pattern. // All default values below are from those used in the client library @@ -1142,7 +1205,7 @@ type MethodSettings_LongRunning struct { func (x *MethodSettings_LongRunning) Reset() { *x = MethodSettings_LongRunning{} if protoimpl.UnsafeEnabled { - mi := &file_google_api_client_proto_msgTypes[15] + mi := &file_google_api_client_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1155,7 +1218,7 @@ func (x *MethodSettings_LongRunning) String() string { func (*MethodSettings_LongRunning) ProtoMessage() {} func (x *MethodSettings_LongRunning) ProtoReflect() protoreflect.Message { - mi := &file_google_api_client_proto_msgTypes[15] + mi := &file_google_api_client_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1460,132 +1523,143 @@ var file_google_api_client_proto_rawDesc = []byte{ 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, - 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, - 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, 0x04, 0x0a, 0x0e, 0x44, 0x6f, 0x74, 0x6e, - 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xfd, 0x01, + 0x0a, 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x15, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x14, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x1a, 0x49, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x65, + 0x73, 0x74, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x69, 0x6f, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x72, 0x65, 0x73, 0x74, 0x41, + 0x73, 0x79, 0x6e, 0x63, 0x49, 0x6f, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x4a, 0x0a, + 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, 0x04, 0x0a, 0x0e, 0x44, 0x6f, + 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x72, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74, + 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, + 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0x38, 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x68, 0x61, + 0x6e, 0x64, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x68, 0x61, 0x6e, 0x64, + 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x75, + 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, - 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, - 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x38, - 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x68, 0x61, 0x6e, 0x64, - 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, - 0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x75, 0x62, 0x79, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xc2, - 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x49, 0x0a, - 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c, 0x6f, 0x6e, - 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x75, 0x74, 0x6f, - 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x70, - 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x94, 0x02, 0x0a, - 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x47, 0x0a, 0x12, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, - 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x22, 0xc2, 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, + 0x49, 0x0a, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c, + 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x75, + 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x6f, 0x50, + 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x94, + 0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x47, + 0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f, + 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, + 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, + 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d, + 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, - 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, - 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d, 0x61, 0x78, - 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6d, 0x61, - 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, - 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, - 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x53, - 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03, 0x12, 0x0f, - 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x04, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x07, 0x0a, - 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, - 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12, 0x13, 0x0a, - 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, - 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x43, - 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1f, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, - 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x61, 0x75, - 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc1, 0xba, 0xab, 0xfa, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, - 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, + 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x44, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03, + 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, + 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, + 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45, + 0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, + 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12, + 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, + 0x45, 0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, + 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70, + 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc1, 0xba, 0xab, 0xfa, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x69, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1601,34 +1675,35 @@ func file_google_api_client_proto_rawDescGZIP() []byte { } var file_google_api_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_google_api_client_proto_goTypes = []interface{}{ - (ClientLibraryOrganization)(0), // 0: google.api.ClientLibraryOrganization - (ClientLibraryDestination)(0), // 1: google.api.ClientLibraryDestination - (*CommonLanguageSettings)(nil), // 2: google.api.CommonLanguageSettings - (*ClientLibrarySettings)(nil), // 3: google.api.ClientLibrarySettings - (*Publishing)(nil), // 4: google.api.Publishing - (*JavaSettings)(nil), // 5: google.api.JavaSettings - (*CppSettings)(nil), // 6: google.api.CppSettings - (*PhpSettings)(nil), // 7: google.api.PhpSettings - (*PythonSettings)(nil), // 8: google.api.PythonSettings - (*NodeSettings)(nil), // 9: google.api.NodeSettings - (*DotnetSettings)(nil), // 10: google.api.DotnetSettings - (*RubySettings)(nil), // 11: google.api.RubySettings - (*GoSettings)(nil), // 12: google.api.GoSettings - (*MethodSettings)(nil), // 13: google.api.MethodSettings - nil, // 14: google.api.JavaSettings.ServiceClassNamesEntry - nil, // 15: google.api.DotnetSettings.RenamedServicesEntry - nil, // 16: google.api.DotnetSettings.RenamedResourcesEntry - (*MethodSettings_LongRunning)(nil), // 17: google.api.MethodSettings.LongRunning - (api.LaunchStage)(0), // 18: google.api.LaunchStage - (*durationpb.Duration)(nil), // 19: google.protobuf.Duration - (*descriptorpb.MethodOptions)(nil), // 20: google.protobuf.MethodOptions - (*descriptorpb.ServiceOptions)(nil), // 21: google.protobuf.ServiceOptions + (ClientLibraryOrganization)(0), // 0: google.api.ClientLibraryOrganization + (ClientLibraryDestination)(0), // 1: google.api.ClientLibraryDestination + (*CommonLanguageSettings)(nil), // 2: google.api.CommonLanguageSettings + (*ClientLibrarySettings)(nil), // 3: google.api.ClientLibrarySettings + (*Publishing)(nil), // 4: google.api.Publishing + (*JavaSettings)(nil), // 5: google.api.JavaSettings + (*CppSettings)(nil), // 6: google.api.CppSettings + (*PhpSettings)(nil), // 7: google.api.PhpSettings + (*PythonSettings)(nil), // 8: google.api.PythonSettings + (*NodeSettings)(nil), // 9: google.api.NodeSettings + (*DotnetSettings)(nil), // 10: google.api.DotnetSettings + (*RubySettings)(nil), // 11: google.api.RubySettings + (*GoSettings)(nil), // 12: google.api.GoSettings + (*MethodSettings)(nil), // 13: google.api.MethodSettings + nil, // 14: google.api.JavaSettings.ServiceClassNamesEntry + (*PythonSettings_ExperimentalFeatures)(nil), // 15: google.api.PythonSettings.ExperimentalFeatures + nil, // 16: google.api.DotnetSettings.RenamedServicesEntry + nil, // 17: google.api.DotnetSettings.RenamedResourcesEntry + (*MethodSettings_LongRunning)(nil), // 18: google.api.MethodSettings.LongRunning + (api.LaunchStage)(0), // 19: google.api.LaunchStage + (*durationpb.Duration)(nil), // 20: google.protobuf.Duration + (*descriptorpb.MethodOptions)(nil), // 21: google.protobuf.MethodOptions + (*descriptorpb.ServiceOptions)(nil), // 22: google.protobuf.ServiceOptions } var file_google_api_client_proto_depIdxs = []int32{ 1, // 0: google.api.CommonLanguageSettings.destinations:type_name -> google.api.ClientLibraryDestination - 18, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage + 19, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage 5, // 2: google.api.ClientLibrarySettings.java_settings:type_name -> google.api.JavaSettings 6, // 3: google.api.ClientLibrarySettings.cpp_settings:type_name -> google.api.CppSettings 7, // 4: google.api.ClientLibrarySettings.php_settings:type_name -> google.api.PhpSettings @@ -1645,25 +1720,26 @@ var file_google_api_client_proto_depIdxs = []int32{ 2, // 15: google.api.CppSettings.common:type_name -> google.api.CommonLanguageSettings 2, // 16: google.api.PhpSettings.common:type_name -> google.api.CommonLanguageSettings 2, // 17: google.api.PythonSettings.common:type_name -> google.api.CommonLanguageSettings - 2, // 18: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings - 2, // 19: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings - 15, // 20: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry - 16, // 21: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry - 2, // 22: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings - 2, // 23: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings - 17, // 24: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning - 19, // 25: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration - 19, // 26: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration - 19, // 27: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration - 20, // 28: google.api.method_signature:extendee -> google.protobuf.MethodOptions - 21, // 29: google.api.default_host:extendee -> google.protobuf.ServiceOptions - 21, // 30: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions - 21, // 31: google.api.api_version:extendee -> google.protobuf.ServiceOptions - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 28, // [28:32] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 15, // 18: google.api.PythonSettings.experimental_features:type_name -> google.api.PythonSettings.ExperimentalFeatures + 2, // 19: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings + 2, // 20: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings + 16, // 21: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry + 17, // 22: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry + 2, // 23: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings + 2, // 24: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings + 18, // 25: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning + 20, // 26: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration + 20, // 27: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration + 20, // 28: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration + 21, // 29: google.api.method_signature:extendee -> google.protobuf.MethodOptions + 22, // 30: google.api.default_host:extendee -> google.protobuf.ServiceOptions + 22, // 31: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions + 22, // 32: google.api.api_version:extendee -> google.protobuf.ServiceOptions + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 29, // [29:33] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name } func init() { file_google_api_client_proto_init() } @@ -1816,7 +1892,19 @@ func file_google_api_client_proto_init() { return nil } } - file_google_api_client_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_google_api_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PythonSettings_ExperimentalFeatures); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_api_client_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MethodSettings_LongRunning); i { case 0: return &v.state @@ -1835,7 +1923,7 @@ func file_google_api_client_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_api_client_proto_rawDesc, NumEnums: 2, - NumMessages: 16, + NumMessages: 17, NumExtensions: 4, NumServices: 0, }, diff --git a/vendor/google.golang.org/grpc/MAINTAINERS.md b/vendor/google.golang.org/grpc/MAINTAINERS.md index 6a8a07781a..5d4096d46a 100644 --- a/vendor/google.golang.org/grpc/MAINTAINERS.md +++ b/vendor/google.golang.org/grpc/MAINTAINERS.md @@ -9,21 +9,28 @@ for general contribution guidelines. ## Maintainers (in alphabetical order) +- [aranjans](https://github.com/aranjans), Google LLC +- [arjan-bal](https://github.com/arjan-bal), Google LLC +- [arvindbr8](https://github.com/arvindbr8), Google LLC - [atollena](https://github.com/atollena), Datadog, Inc. -- [cesarghali](https://github.com/cesarghali), Google LLC - [dfawley](https://github.com/dfawley), Google LLC - [easwars](https://github.com/easwars), Google LLC -- [menghanl](https://github.com/menghanl), Google LLC -- [srini100](https://github.com/srini100), Google LLC +- [erm-g](https://github.com/erm-g), Google LLC +- [gtcooke94](https://github.com/gtcooke94), Google LLC +- [purnesh42h](https://github.com/purnesh42h), Google LLC +- [zasweq](https://github.com/zasweq), Google LLC ## Emeritus Maintainers (in alphabetical order) -- [adelez](https://github.com/adelez), Google LLC -- [canguler](https://github.com/canguler), Google LLC -- [iamqizhao](https://github.com/iamqizhao), Google LLC -- [jadekler](https://github.com/jadekler), Google LLC -- [jtattermusch](https://github.com/jtattermusch), Google LLC -- [lyuxuan](https://github.com/lyuxuan), Google LLC -- [makmukhi](https://github.com/makmukhi), Google LLC -- [matt-kwong](https://github.com/matt-kwong), Google LLC -- [nicolasnoble](https://github.com/nicolasnoble), Google LLC -- [yongni](https://github.com/yongni), Google LLC +- [adelez](https://github.com/adelez) +- [canguler](https://github.com/canguler) +- [cesarghali](https://github.com/cesarghali) +- [iamqizhao](https://github.com/iamqizhao) +- [jeanbza](https://github.com/jeanbza) +- [jtattermusch](https://github.com/jtattermusch) +- [lyuxuan](https://github.com/lyuxuan) +- [makmukhi](https://github.com/makmukhi) +- [matt-kwong](https://github.com/matt-kwong) +- [menghanl](https://github.com/menghanl) +- [nicolasnoble](https://github.com/nicolasnoble) +- [srini100](https://github.com/srini100) +- [yongni](https://github.com/yongni) diff --git a/vendor/google.golang.org/grpc/SECURITY.md b/vendor/google.golang.org/grpc/SECURITY.md index be6e108705..abab279379 100644 --- a/vendor/google.golang.org/grpc/SECURITY.md +++ b/vendor/google.golang.org/grpc/SECURITY.md @@ -1,3 +1,3 @@ # Security Policy -For information on gRPC Security Policy and reporting potentional security issues, please see [gRPC CVE Process](https://github.com/grpc/proposal/blob/master/P4-grpc-cve-process.md). +For information on gRPC Security Policy and reporting potential security issues, please see [gRPC CVE Process](https://github.com/grpc/proposal/blob/master/P4-grpc-cve-process.md). diff --git a/vendor/google.golang.org/grpc/backoff/backoff.go b/vendor/google.golang.org/grpc/backoff/backoff.go index 0787d0b50c..d7b40b7cb6 100644 --- a/vendor/google.golang.org/grpc/backoff/backoff.go +++ b/vendor/google.golang.org/grpc/backoff/backoff.go @@ -39,7 +39,7 @@ type Config struct { MaxDelay time.Duration } -// DefaultConfig is a backoff configuration with the default values specfied +// DefaultConfig is a backoff configuration with the default values specified // at https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. // // This should be useful for callers who want to configure backoff with diff --git a/vendor/google.golang.org/grpc/balancer/balancer.go b/vendor/google.golang.org/grpc/balancer/balancer.go index f391744f72..b181f386a1 100644 --- a/vendor/google.golang.org/grpc/balancer/balancer.go +++ b/vendor/google.golang.org/grpc/balancer/balancer.go @@ -30,6 +30,7 @@ import ( "google.golang.org/grpc/channelz" "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" + estats "google.golang.org/grpc/experimental/stats" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/internal" "google.golang.org/grpc/metadata" @@ -72,8 +73,21 @@ func unregisterForTesting(name string) { delete(m, name) } +// connectedAddress returns the connected address for a SubConnState. The +// address is only valid if the state is READY. +func connectedAddress(scs SubConnState) resolver.Address { + return scs.connectedAddress +} + +// setConnectedAddress sets the connected address for a SubConnState. +func setConnectedAddress(scs *SubConnState, addr resolver.Address) { + scs.connectedAddress = addr +} + func init() { internal.BalancerUnregister = unregisterForTesting + internal.ConnectedAddress = connectedAddress + internal.SetConnectedAddress = setConnectedAddress } // Get returns the resolver builder registered with the given name. @@ -243,6 +257,10 @@ type BuildOptions struct { // same resolver.Target as passed to the resolver. See the documentation for // the resolver.Target type for details about what it contains. Target resolver.Target + // MetricsRecorder is the metrics recorder that balancers can use to record + // metrics. Balancer implementations which do not register metrics on + // metrics registry and record on them can ignore this field. + MetricsRecorder estats.MetricsRecorder } // Builder creates a balancer. @@ -410,6 +428,9 @@ type SubConnState struct { // ConnectionError is set if the ConnectivityState is TransientFailure, // describing the reason the SubConn failed. Otherwise, it is nil. ConnectionError error + // connectedAddr contains the connected address when ConnectivityState is + // Ready. Otherwise, it is indeterminate. + connectedAddress resolver.Address } // ClientConnState describes the state of a ClientConn relevant to the diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go index 0adc98866c..f0b1a274fe 100644 --- a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go +++ b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go @@ -20,7 +20,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.1 -// protoc v4.25.2 +// protoc v5.27.1 // source: grpc/lb/v1/load_balancer.proto package grpc_lb_v1 diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go index 57a792a7b4..84e6a25056 100644 --- a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go +++ b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go @@ -19,8 +19,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 -// - protoc v4.25.2 +// - protoc-gen-go-grpc v1.5.1 +// - protoc v5.27.1 // source: grpc/lb/v1/load_balancer.proto package grpc_lb_v1 @@ -34,8 +34,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( LoadBalancer_BalanceLoad_FullMethodName = "/grpc.lb.v1.LoadBalancer/BalanceLoad" @@ -46,7 +46,7 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type LoadBalancerClient interface { // Bidirectional rpc to get a list of servers. - BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) + BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[LoadBalanceRequest, LoadBalanceResponse], error) } type loadBalancerClient struct { @@ -57,53 +57,38 @@ func NewLoadBalancerClient(cc grpc.ClientConnInterface) LoadBalancerClient { return &loadBalancerClient{cc} } -func (c *loadBalancerClient) BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) { +func (c *loadBalancerClient) BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[LoadBalanceRequest, LoadBalanceResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &LoadBalancer_ServiceDesc.Streams[0], LoadBalancer_BalanceLoad_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &loadBalancerBalanceLoadClient{ClientStream: stream} + x := &grpc.GenericClientStream[LoadBalanceRequest, LoadBalanceResponse]{ClientStream: stream} return x, nil } -type LoadBalancer_BalanceLoadClient interface { - Send(*LoadBalanceRequest) error - Recv() (*LoadBalanceResponse, error) - grpc.ClientStream -} - -type loadBalancerBalanceLoadClient struct { - grpc.ClientStream -} - -func (x *loadBalancerBalanceLoadClient) Send(m *LoadBalanceRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *loadBalancerBalanceLoadClient) Recv() (*LoadBalanceResponse, error) { - m := new(LoadBalanceResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LoadBalancer_BalanceLoadClient = grpc.BidiStreamingClient[LoadBalanceRequest, LoadBalanceResponse] // LoadBalancerServer is the server API for LoadBalancer service. // All implementations should embed UnimplementedLoadBalancerServer -// for forward compatibility +// for forward compatibility. type LoadBalancerServer interface { // Bidirectional rpc to get a list of servers. - BalanceLoad(LoadBalancer_BalanceLoadServer) error + BalanceLoad(grpc.BidiStreamingServer[LoadBalanceRequest, LoadBalanceResponse]) error } -// UnimplementedLoadBalancerServer should be embedded to have forward compatible implementations. -type UnimplementedLoadBalancerServer struct { -} +// UnimplementedLoadBalancerServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedLoadBalancerServer struct{} -func (UnimplementedLoadBalancerServer) BalanceLoad(LoadBalancer_BalanceLoadServer) error { +func (UnimplementedLoadBalancerServer) BalanceLoad(grpc.BidiStreamingServer[LoadBalanceRequest, LoadBalanceResponse]) error { return status.Errorf(codes.Unimplemented, "method BalanceLoad not implemented") } +func (UnimplementedLoadBalancerServer) testEmbeddedByValue() {} // UnsafeLoadBalancerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to LoadBalancerServer will @@ -113,34 +98,22 @@ type UnsafeLoadBalancerServer interface { } func RegisterLoadBalancerServer(s grpc.ServiceRegistrar, srv LoadBalancerServer) { + // If the following call panics, it indicates UnimplementedLoadBalancerServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&LoadBalancer_ServiceDesc, srv) } func _LoadBalancer_BalanceLoad_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(LoadBalancerServer).BalanceLoad(&loadBalancerBalanceLoadServer{ServerStream: stream}) + return srv.(LoadBalancerServer).BalanceLoad(&grpc.GenericServerStream[LoadBalanceRequest, LoadBalanceResponse]{ServerStream: stream}) } -type LoadBalancer_BalanceLoadServer interface { - Send(*LoadBalanceResponse) error - Recv() (*LoadBalanceRequest, error) - grpc.ServerStream -} - -type loadBalancerBalanceLoadServer struct { - grpc.ServerStream -} - -func (x *loadBalancerBalanceLoadServer) Send(m *LoadBalanceResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *loadBalancerBalanceLoadServer) Recv() (*LoadBalanceRequest, error) { - m := new(LoadBalanceRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LoadBalancer_BalanceLoadServer = grpc.BidiStreamingServer[LoadBalanceRequest, LoadBalanceResponse] // LoadBalancer_ServiceDesc is the grpc.ServiceDesc for LoadBalancer service. // It's only intended for direct use with grpc.RegisterService, diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/grpclb.go b/vendor/google.golang.org/grpc/balancer/grpclb/grpclb.go index 47a3e938dc..c098762741 100644 --- a/vendor/google.golang.org/grpc/balancer/grpclb/grpclb.go +++ b/vendor/google.golang.org/grpc/balancer/grpclb/grpclb.go @@ -219,7 +219,7 @@ type lbBalancer struct { // All backends addresses, with metadata set to nil. This list contains all // backend addresses in the same order and with the same duplicates as in // serverlist. When generating picker, a SubConn slice with the same order - // but with only READY SCs will be gerenated. + // but with only READY SCs will be generated. backendAddrsWithoutMetadata []resolver.Address // Roundrobin functionalities. state connectivity.State diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go index 07527603f1..5b592f48ad 100644 --- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go +++ b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go @@ -155,7 +155,7 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState // Endpoints not set, process addresses until we migrate resolver // emissions fully to Endpoints. The top channel does wrap emitted // addresses with endpoints, however some balancers such as weighted - // target do not forwarrd the corresponding correct endpoints down/split + // target do not forward the corresponding correct endpoints down/split // endpoints properly. Once all balancers correctly forward endpoints // down, can delete this else conditional. addrs = state.ResolverState.Addresses diff --git a/vendor/google.golang.org/grpc/balancer_wrapper.go b/vendor/google.golang.org/grpc/balancer_wrapper.go index 4161fdf47a..6561b769eb 100644 --- a/vendor/google.golang.org/grpc/balancer_wrapper.go +++ b/vendor/google.golang.org/grpc/balancer_wrapper.go @@ -25,12 +25,15 @@ import ( "google.golang.org/grpc/balancer" "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/balancer/gracefulswitch" "google.golang.org/grpc/internal/channelz" "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/resolver" ) +var setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnState, resolver.Address)) + // ccBalancerWrapper sits between the ClientConn and the Balancer. // // ccBalancerWrapper implements methods corresponding to the ones on the @@ -79,6 +82,7 @@ func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper { CustomUserAgent: cc.dopts.copts.UserAgent, ChannelzParent: cc.channelz, Target: cc.parsedTarget, + MetricsRecorder: cc.metricsRecorderList, }, serializer: grpcsync.NewCallbackSerializer(ctx), serializerCancel: cancel, @@ -92,7 +96,7 @@ func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper { // it is safe to call into the balancer here. func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error { errCh := make(chan error) - ok := ccb.serializer.Schedule(func(ctx context.Context) { + uccs := func(ctx context.Context) { defer close(errCh) if ctx.Err() != nil || ccb.balancer == nil { return @@ -107,17 +111,23 @@ func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnStat logger.Infof("error from balancer.UpdateClientConnState: %v", err) } errCh <- err - }) - if !ok { - return nil } + onFailure := func() { close(errCh) } + + // UpdateClientConnState can race with Close, and when the latter wins, the + // serializer is closed, and the attempt to schedule the callback will fail. + // It is acceptable to ignore this failure. But since we want to handle the + // state update in a blocking fashion (when we successfully schedule the + // callback), we have to use the ScheduleOr method and not the MaybeSchedule + // method on the serializer. + ccb.serializer.ScheduleOr(uccs, onFailure) return <-errCh } // resolverError is invoked by grpc to push a resolver error to the underlying // balancer. The call to the balancer is executed from the serializer. func (ccb *ccBalancerWrapper) resolverError(err error) { - ccb.serializer.Schedule(func(ctx context.Context) { + ccb.serializer.TrySchedule(func(ctx context.Context) { if ctx.Err() != nil || ccb.balancer == nil { return } @@ -133,7 +143,7 @@ func (ccb *ccBalancerWrapper) close() { ccb.closed = true ccb.mu.Unlock() channelz.Info(logger, ccb.cc.channelz, "ccBalancerWrapper: closing") - ccb.serializer.Schedule(func(context.Context) { + ccb.serializer.TrySchedule(func(context.Context) { if ccb.balancer == nil { return } @@ -145,7 +155,7 @@ func (ccb *ccBalancerWrapper) close() { // exitIdle invokes the balancer's exitIdle method in the serializer. func (ccb *ccBalancerWrapper) exitIdle() { - ccb.serializer.Schedule(func(ctx context.Context) { + ccb.serializer.TrySchedule(func(ctx context.Context) { if ctx.Err() != nil || ccb.balancer == nil { return } @@ -252,15 +262,29 @@ type acBalancerWrapper struct { // updateState is invoked by grpc to push a subConn state update to the // underlying balancer. -func (acbw *acBalancerWrapper) updateState(s connectivity.State, err error) { - acbw.ccb.serializer.Schedule(func(ctx context.Context) { +func (acbw *acBalancerWrapper) updateState(s connectivity.State, curAddr resolver.Address, err error) { + acbw.ccb.serializer.TrySchedule(func(ctx context.Context) { if ctx.Err() != nil || acbw.ccb.balancer == nil { return } // Even though it is optional for balancers, gracefulswitch ensures // opts.StateListener is set, so this cannot ever be nil. // TODO: delete this comment when UpdateSubConnState is removed. - acbw.stateListener(balancer.SubConnState{ConnectivityState: s, ConnectionError: err}) + scs := balancer.SubConnState{ConnectivityState: s, ConnectionError: err} + if s == connectivity.Ready { + setConnectedAddress(&scs, curAddr) + } + acbw.stateListener(scs) + acbw.ac.mu.Lock() + defer acbw.ac.mu.Unlock() + if s == connectivity.Ready { + // When changing states to READY, reset stateReadyChan. Wait until + // after we notify the LB policy's listener(s) in order to prevent + // ac.getTransport() from unblocking before the LB policy starts + // tracking the subchannel as READY. + close(acbw.ac.stateReadyChan) + acbw.ac.stateReadyChan = make(chan struct{}) + } }) } diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go index 63c639e4fe..fcd1cfe802 100644 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go +++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go @@ -19,7 +19,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.1 -// protoc v4.25.2 +// protoc v5.27.1 // source: grpc/binlog/v1/binarylog.proto package grpc_binarylog_v1 diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index 423be7b43b..9c8850e3fd 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -24,6 +24,7 @@ import ( "fmt" "math" "net/url" + "slices" "strings" "sync" "sync/atomic" @@ -39,6 +40,7 @@ import ( "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/internal/idle" iresolver "google.golang.org/grpc/internal/resolver" + "google.golang.org/grpc/internal/stats" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/resolver" @@ -194,8 +196,11 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) cc.csMgr = newConnectivityStateManager(cc.ctx, cc.channelz) cc.pickerWrapper = newPickerWrapper(cc.dopts.copts.StatsHandlers) + cc.metricsRecorderList = stats.NewMetricsRecorderList(cc.dopts.copts.StatsHandlers) + cc.initIdleStateLocked() // Safe to call without the lock, since nothing else has a reference to cc. cc.idlenessMgr = idle.NewManager((*idler)(cc), cc.dopts.idleTimeout) + return cc, nil } @@ -590,13 +595,14 @@ type ClientConn struct { cancel context.CancelFunc // Cancelled on close. // The following are initialized at dial time, and are read-only after that. - target string // User's dial target. - parsedTarget resolver.Target // See initParsedTargetAndResolverBuilder(). - authority string // See initAuthority(). - dopts dialOptions // Default and user specified dial options. - channelz *channelz.Channel // Channelz object. - resolverBuilder resolver.Builder // See initParsedTargetAndResolverBuilder(). - idlenessMgr *idle.Manager + target string // User's dial target. + parsedTarget resolver.Target // See initParsedTargetAndResolverBuilder(). + authority string // See initAuthority(). + dopts dialOptions // Default and user specified dial options. + channelz *channelz.Channel // Channelz object. + resolverBuilder resolver.Builder // See initParsedTargetAndResolverBuilder(). + idlenessMgr *idle.Manager + metricsRecorderList *stats.MetricsRecorderList // The following provide their own synchronization, and therefore don't // require cc.mu to be held to access them. @@ -626,11 +632,6 @@ type ClientConn struct { // WaitForStateChange waits until the connectivity.State of ClientConn changes from sourceState or // ctx expires. A true value is returned in former case and false in latter. -// -// # Experimental -// -// Notice: This API is EXPERIMENTAL and may be changed or removed in a -// later release. func (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connectivity.State) bool { ch := cc.csMgr.getNotifyChan() if cc.csMgr.getState() != sourceState { @@ -645,11 +646,6 @@ func (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connec } // GetState returns the connectivity.State of ClientConn. -// -// # Experimental -// -// Notice: This API is EXPERIMENTAL and may be changed or removed in a later -// release. func (cc *ClientConn) GetState() connectivity.State { return cc.csMgr.getState() } @@ -812,17 +808,11 @@ func (cc *ClientConn) applyFailingLBLocked(sc *serviceconfig.ParseResult) { cc.csMgr.updateState(connectivity.TransientFailure) } -// Makes a copy of the input addresses slice and clears out the balancer -// attributes field. Addresses are passed during subconn creation and address -// update operations. In both cases, we will clear the balancer attributes by -// calling this function, and therefore we will be able to use the Equal method -// provided by the resolver.Address type for comparison. -func copyAddressesWithoutBalancerAttributes(in []resolver.Address) []resolver.Address { +// Makes a copy of the input addresses slice. Addresses are passed during +// subconn creation and address update operations. +func copyAddresses(in []resolver.Address) []resolver.Address { out := make([]resolver.Address, len(in)) - for i := range in { - out[i] = in[i] - out[i].BalancerAttributes = nil - } + copy(out, in) return out } @@ -835,14 +825,14 @@ func (cc *ClientConn) newAddrConnLocked(addrs []resolver.Address, opts balancer. } ac := &addrConn{ - state: connectivity.Idle, - cc: cc, - addrs: copyAddressesWithoutBalancerAttributes(addrs), - scopts: opts, - dopts: cc.dopts, - channelz: channelz.RegisterSubChannel(cc.channelz, ""), - resetBackoff: make(chan struct{}), - stateChan: make(chan struct{}), + state: connectivity.Idle, + cc: cc, + addrs: copyAddresses(addrs), + scopts: opts, + dopts: cc.dopts, + channelz: channelz.RegisterSubChannel(cc.channelz, ""), + resetBackoff: make(chan struct{}), + stateReadyChan: make(chan struct{}), } ac.ctx, ac.cancel = context.WithCancel(cc.ctx) // Start with our address set to the first address; this may be updated if @@ -918,28 +908,29 @@ func (ac *addrConn) connect() error { ac.mu.Unlock() return nil } - ac.mu.Unlock() - ac.resetTransport() + ac.resetTransportAndUnlock() return nil } -func equalAddresses(a, b []resolver.Address) bool { - if len(a) != len(b) { - return false - } - for i, v := range a { - if !v.Equal(b[i]) { - return false - } - } - return true +// equalAddressIgnoringBalAttributes returns true is a and b are considered equal. +// This is different from the Equal method on the resolver.Address type which +// considers all fields to determine equality. Here, we only consider fields +// that are meaningful to the subConn. +func equalAddressIgnoringBalAttributes(a, b *resolver.Address) bool { + return a.Addr == b.Addr && a.ServerName == b.ServerName && + a.Attributes.Equal(b.Attributes) && + a.Metadata == b.Metadata +} + +func equalAddressesIgnoringBalAttributes(a, b []resolver.Address) bool { + return slices.EqualFunc(a, b, func(a, b resolver.Address) bool { return equalAddressIgnoringBalAttributes(&a, &b) }) } // updateAddrs updates ac.addrs with the new addresses list and handles active // connections or connection attempts. func (ac *addrConn) updateAddrs(addrs []resolver.Address) { - addrs = copyAddressesWithoutBalancerAttributes(addrs) + addrs = copyAddresses(addrs) limit := len(addrs) if limit > 5 { limit = 5 @@ -947,7 +938,7 @@ func (ac *addrConn) updateAddrs(addrs []resolver.Address) { channelz.Infof(logger, ac.channelz, "addrConn: updateAddrs addrs (%d of %d): %v", limit, len(addrs), addrs[:limit]) ac.mu.Lock() - if equalAddresses(ac.addrs, addrs) { + if equalAddressesIgnoringBalAttributes(ac.addrs, addrs) { ac.mu.Unlock() return } @@ -966,7 +957,7 @@ func (ac *addrConn) updateAddrs(addrs []resolver.Address) { // Try to find the connected address. for _, a := range addrs { a.ServerName = ac.cc.getServerName(a) - if a.Equal(ac.curAddr) { + if equalAddressIgnoringBalAttributes(&a, &ac.curAddr) { // We are connected to a valid address, so do nothing but // update the addresses. ac.mu.Unlock() @@ -992,11 +983,9 @@ func (ac *addrConn) updateAddrs(addrs []resolver.Address) { ac.updateConnectivityState(connectivity.Idle, nil) } - ac.mu.Unlock() - // Since we were connecting/connected, we should start a new connection // attempt. - go ac.resetTransport() + go ac.resetTransportAndUnlock() } // getServerName determines the serverName to be used in the connection @@ -1190,8 +1179,8 @@ type addrConn struct { addrs []resolver.Address // All addresses that the resolver resolved to. // Use updateConnectivityState for updating addrConn's connectivity state. - state connectivity.State - stateChan chan struct{} // closed and recreated on every state change. + state connectivity.State + stateReadyChan chan struct{} // closed and recreated on every READY state change. backoffIdx int // Needs to be stateful for resetConnectBackoff. resetBackoff chan struct{} @@ -1204,9 +1193,6 @@ func (ac *addrConn) updateConnectivityState(s connectivity.State, lastErr error) if ac.state == s { return } - // When changing states, reset the state change channel. - close(ac.stateChan) - ac.stateChan = make(chan struct{}) ac.state = s ac.channelz.ChannelMetrics.State.Store(&s) if lastErr == nil { @@ -1214,7 +1200,7 @@ func (ac *addrConn) updateConnectivityState(s connectivity.State, lastErr error) } else { channelz.Infof(logger, ac.channelz, "Subchannel Connectivity change to %v, last error: %s", s, lastErr) } - ac.acbw.updateState(s, lastErr) + ac.acbw.updateState(s, ac.curAddr, lastErr) } // adjustParams updates parameters used to create transports upon @@ -1231,8 +1217,10 @@ func (ac *addrConn) adjustParams(r transport.GoAwayReason) { } } -func (ac *addrConn) resetTransport() { - ac.mu.Lock() +// resetTransportAndUnlock unconditionally connects the addrConn. +// +// ac.mu must be held by the caller, and this function will guarantee it is released. +func (ac *addrConn) resetTransportAndUnlock() { acCtx := ac.ctx if acCtx.Err() != nil { ac.mu.Unlock() @@ -1522,7 +1510,7 @@ func (ac *addrConn) getReadyTransport() transport.ClientTransport { func (ac *addrConn) getTransport(ctx context.Context) (transport.ClientTransport, error) { for ctx.Err() == nil { ac.mu.Lock() - t, state, sc := ac.transport, ac.state, ac.stateChan + t, state, sc := ac.transport, ac.state, ac.stateReadyChan ac.mu.Unlock() if state == connectivity.Ready { return t, nil @@ -1585,7 +1573,7 @@ func (ac *addrConn) tearDown(err error) { } else { // Hard close the transport when the channel is entering idle or is // being shutdown. In the case where the channel is being shutdown, - // closing of transports is also taken care of by cancelation of cc.ctx. + // closing of transports is also taken care of by cancellation of cc.ctx. // But in the case where the channel is entering idle, we need to // explicitly close the transports here. Instead of distinguishing // between these two cases, it is simpler to close the transport diff --git a/vendor/google.golang.org/grpc/codec.go b/vendor/google.golang.org/grpc/codec.go index 411e3dfd47..e840858b77 100644 --- a/vendor/google.golang.org/grpc/codec.go +++ b/vendor/google.golang.org/grpc/codec.go @@ -21,18 +21,73 @@ package grpc import ( "google.golang.org/grpc/encoding" _ "google.golang.org/grpc/encoding/proto" // to register the Codec for "proto" + "google.golang.org/grpc/mem" ) -// baseCodec contains the functionality of both Codec and encoding.Codec, but -// omits the name/string, which vary between the two and are not needed for -// anything besides the registry in the encoding package. +// baseCodec captures the new encoding.CodecV2 interface without the Name +// function, allowing it to be implemented by older Codec and encoding.Codec +// implementations. The omitted Name function is only needed for the register in +// the encoding package and is not part of the core functionality. type baseCodec interface { - Marshal(v any) ([]byte, error) - Unmarshal(data []byte, v any) error + Marshal(v any) (mem.BufferSlice, error) + Unmarshal(data mem.BufferSlice, v any) error } -var _ baseCodec = Codec(nil) -var _ baseCodec = encoding.Codec(nil) +// getCodec returns an encoding.CodecV2 for the codec of the given name (if +// registered). Initially checks the V2 registry with encoding.GetCodecV2 and +// returns the V2 codec if it is registered. Otherwise, it checks the V1 registry +// with encoding.GetCodec and if it is registered wraps it with newCodecV1Bridge +// to turn it into an encoding.CodecV2. Returns nil otherwise. +func getCodec(name string) encoding.CodecV2 { + if codecV1 := encoding.GetCodec(name); codecV1 != nil { + return newCodecV1Bridge(codecV1) + } + + return encoding.GetCodecV2(name) +} + +func newCodecV0Bridge(c Codec) baseCodec { + return codecV0Bridge{codec: c} +} + +func newCodecV1Bridge(c encoding.Codec) encoding.CodecV2 { + return codecV1Bridge{ + codecV0Bridge: codecV0Bridge{codec: c}, + name: c.Name(), + } +} + +var _ baseCodec = codecV0Bridge{} + +type codecV0Bridge struct { + codec interface { + Marshal(v any) ([]byte, error) + Unmarshal(data []byte, v any) error + } +} + +func (c codecV0Bridge) Marshal(v any) (mem.BufferSlice, error) { + data, err := c.codec.Marshal(v) + if err != nil { + return nil, err + } + return mem.BufferSlice{mem.NewBuffer(&data, nil)}, nil +} + +func (c codecV0Bridge) Unmarshal(data mem.BufferSlice, v any) (err error) { + return c.codec.Unmarshal(data.Materialize(), v) +} + +var _ encoding.CodecV2 = codecV1Bridge{} + +type codecV1Bridge struct { + codecV0Bridge + name string +} + +func (c codecV1Bridge) Name() string { + return c.name +} // Codec defines the interface gRPC uses to encode and decode messages. // Note that implementations of this interface must be thread safe; diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aeadrekey.go b/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aeadrekey.go index 43726e877b..7e4bfee888 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aeadrekey.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aeadrekey.go @@ -49,7 +49,7 @@ func (k KeySizeError) Error() string { // newRekeyAEAD creates a new instance of aes128gcm with rekeying. // The key argument should be 44 bytes, the first 32 bytes are used as a key -// for HKDF-expand and the remainining 12 bytes are used as a random mask for +// for HKDF-expand and the remaining 12 bytes are used as a random mask for // the counter. func newRekeyAEAD(key []byte) (*rekeyAEAD, error) { k := len(key) diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aes128gcmrekey.go b/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aes128gcmrekey.go index 6a9035ea25..b5bbb5497a 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aes128gcmrekey.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/conn/aes128gcmrekey.go @@ -51,7 +51,7 @@ type aes128gcmRekey struct { // NewAES128GCMRekey creates an instance that uses aes128gcm with rekeying // for ALTS record. The key argument should be 44 bytes, the first 32 bytes -// are used as a key for HKDF-expand and the remainining 12 bytes are used +// are used as a key for HKDF-expand and the remaining 12 bytes are used // as a random mask for the counter. func NewAES128GCMRekey(side core.Side, key []byte) (ALTSRecordCrypto, error) { inCounter := NewInCounter(side, overflowLenAES128GCMRekey) diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go index e1cdafb980..b3af035907 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service/service.go @@ -34,8 +34,6 @@ var ( // to a corresponding connection to a hypervisor handshaker service // instance. hsConnMap = make(map[string]*grpc.ClientConn) - // hsDialer will be reassigned in tests. - hsDialer = grpc.Dial ) // Dial dials the handshake service in the hypervisor. If a connection has @@ -50,7 +48,7 @@ func Dial(hsAddress string) (*grpc.ClientConn, error) { // Create a new connection to the handshaker service. Note that // this connection stays open until the application is closed. var err error - hsConn, err = hsDialer(hsAddress, grpc.WithTransportCredentials(insecure.NewCredentials())) + hsConn, err = grpc.Dial(hsAddress, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { return nil, err } diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go index 38cb5cf0d7..f478990dfb 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.1 -// protoc v4.25.2 +// protoc v5.27.1 // source: grpc/gcp/altscontext.proto package grpc_gcp diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go index 55fc7f65f1..377723f2f0 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.1 -// protoc v4.25.2 +// protoc v5.27.1 // source: grpc/gcp/handshaker.proto package grpc_gcp @@ -533,7 +533,7 @@ type StartServerHandshakeReq struct { // to handshake_parameters is the integer value of HandshakeProtocol enum. HandshakeParameters map[int32]*ServerHandshakeParameters `protobuf:"bytes,2,rep,name=handshake_parameters,json=handshakeParameters,proto3" json:"handshake_parameters,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Bytes in out_frames returned from the peer's HandshakerResp. It is possible - // that the peer's out_frames are split into multiple HandshakReq messages. + // that the peer's out_frames are split into multiple HandshakeReq messages. InBytes []byte `protobuf:"bytes,3,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` // (Optional) Local endpoint information of the connection to the client, // such as local IP address, port number, and network protocol. diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go index 358074b649..34443b1d2d 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 -// - protoc v4.25.2 +// - protoc-gen-go-grpc v1.5.1 +// - protoc v5.27.1 // source: grpc/gcp/handshaker.proto package grpc_gcp @@ -75,7 +75,7 @@ type HandshakerService_DoHandshakeClient = grpc.BidiStreamingClient[HandshakerRe // HandshakerServiceServer is the server API for HandshakerService service. // All implementations must embed UnimplementedHandshakerServiceServer -// for forward compatibility +// for forward compatibility. type HandshakerServiceServer interface { // Handshaker service accepts a stream of handshaker request, returning a // stream of handshaker response. Client is expected to send exactly one @@ -87,14 +87,18 @@ type HandshakerServiceServer interface { mustEmbedUnimplementedHandshakerServiceServer() } -// UnimplementedHandshakerServiceServer must be embedded to have forward compatible implementations. -type UnimplementedHandshakerServiceServer struct { -} +// UnimplementedHandshakerServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedHandshakerServiceServer struct{} func (UnimplementedHandshakerServiceServer) DoHandshake(grpc.BidiStreamingServer[HandshakerReq, HandshakerResp]) error { return status.Errorf(codes.Unimplemented, "method DoHandshake not implemented") } func (UnimplementedHandshakerServiceServer) mustEmbedUnimplementedHandshakerServiceServer() {} +func (UnimplementedHandshakerServiceServer) testEmbeddedByValue() {} // UnsafeHandshakerServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to HandshakerServiceServer will @@ -104,6 +108,13 @@ type UnsafeHandshakerServiceServer interface { } func RegisterHandshakerServiceServer(s grpc.ServiceRegistrar, srv HandshakerServiceServer) { + // If the following call panics, it indicates UnimplementedHandshakerServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&HandshakerService_ServiceDesc, srv) } diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go index 18cc9cfbd5..9f2ffc8ab8 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.1 -// protoc v4.25.2 +// protoc v5.27.1 // source: grpc/gcp/transport_security_common.proto package grpc_gcp diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go index f5453d48a5..27c1b9bb63 100644 --- a/vendor/google.golang.org/grpc/dialoptions.go +++ b/vendor/google.golang.org/grpc/dialoptions.go @@ -33,6 +33,7 @@ import ( "google.golang.org/grpc/internal/binarylog" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/mem" "google.golang.org/grpc/resolver" "google.golang.org/grpc/stats" ) @@ -60,7 +61,7 @@ func init() { internal.WithBinaryLogger = withBinaryLogger internal.JoinDialOptions = newJoinDialOption internal.DisableGlobalDialOptions = newDisableGlobalDialOptions - internal.WithRecvBufferPool = withRecvBufferPool + internal.WithBufferPool = withBufferPool } // dialOptions configure a Dial call. dialOptions are set by the DialOption @@ -92,7 +93,6 @@ type dialOptions struct { defaultServiceConfigRawJSON *string resolvers []resolver.Builder idleTimeout time.Duration - recvBufferPool SharedBufferPool defaultScheme string maxCallAttempts int } @@ -677,11 +677,11 @@ func defaultDialOptions() dialOptions { WriteBufferSize: defaultWriteBufSize, UseProxy: true, UserAgent: grpcUA, + BufferPool: mem.DefaultBufferPool(), }, bs: internalbackoff.DefaultExponential, healthCheckFunc: internal.HealthCheckFunc, idleTimeout: 30 * time.Minute, - recvBufferPool: nopBufferPool{}, defaultScheme: "dns", maxCallAttempts: defaultMaxCallAttempts, } @@ -758,25 +758,8 @@ func WithMaxCallAttempts(n int) DialOption { }) } -// WithRecvBufferPool returns a DialOption that configures the ClientConn -// to use the provided shared buffer pool for parsing incoming messages. Depending -// on the application's workload, this could result in reduced memory allocation. -// -// If you are unsure about how to implement a memory pool but want to utilize one, -// begin with grpc.NewSharedBufferPool. -// -// Note: The shared buffer pool feature will not be active if any of the following -// options are used: WithStatsHandler, EnableTracing, or binary logging. In such -// cases, the shared buffer pool will be ignored. -// -// Deprecated: use experimental.WithRecvBufferPool instead. Will be deleted in -// v1.60.0 or later. -func WithRecvBufferPool(bufferPool SharedBufferPool) DialOption { - return withRecvBufferPool(bufferPool) -} - -func withRecvBufferPool(bufferPool SharedBufferPool) DialOption { +func withBufferPool(bufferPool mem.BufferPool) DialOption { return newFuncDialOption(func(o *dialOptions) { - o.recvBufferPool = bufferPool + o.copts.BufferPool = bufferPool }) } diff --git a/vendor/google.golang.org/grpc/doc.go b/vendor/google.golang.org/grpc/doc.go index 0022859ad7..e7b532b6f8 100644 --- a/vendor/google.golang.org/grpc/doc.go +++ b/vendor/google.golang.org/grpc/doc.go @@ -16,7 +16,7 @@ * */ -//go:generate ./regenerate.sh +//go:generate ./scripts/regenerate.sh /* Package grpc implements an RPC system called gRPC. diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go index 5ebf88d714..11d0ae142c 100644 --- a/vendor/google.golang.org/grpc/encoding/encoding.go +++ b/vendor/google.golang.org/grpc/encoding/encoding.go @@ -94,7 +94,7 @@ type Codec interface { Name() string } -var registeredCodecs = make(map[string]Codec) +var registeredCodecs = make(map[string]any) // RegisterCodec registers the provided Codec for use with all gRPC clients and // servers. @@ -126,5 +126,6 @@ func RegisterCodec(codec Codec) { // // The content-subtype is expected to be lowercase. func GetCodec(contentSubtype string) Codec { - return registeredCodecs[contentSubtype] + c, _ := registeredCodecs[contentSubtype].(Codec) + return c } diff --git a/vendor/google.golang.org/grpc/encoding/encoding_v2.go b/vendor/google.golang.org/grpc/encoding/encoding_v2.go new file mode 100644 index 0000000000..074c5e234a --- /dev/null +++ b/vendor/google.golang.org/grpc/encoding/encoding_v2.go @@ -0,0 +1,81 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package encoding + +import ( + "strings" + + "google.golang.org/grpc/mem" +) + +// CodecV2 defines the interface gRPC uses to encode and decode messages. Note +// that implementations of this interface must be thread safe; a CodecV2's +// methods can be called from concurrent goroutines. +type CodecV2 interface { + // Marshal returns the wire format of v. The buffers in the returned + // [mem.BufferSlice] must have at least one reference each, which will be freed + // by gRPC when they are no longer needed. + Marshal(v any) (out mem.BufferSlice, err error) + // Unmarshal parses the wire format into v. Note that data will be freed as soon + // as this function returns. If the codec wishes to guarantee access to the data + // after this function, it must take its own reference that it frees when it is + // no longer needed. + Unmarshal(data mem.BufferSlice, v any) error + // Name returns the name of the Codec implementation. The returned string + // will be used as part of content type in transmission. The result must be + // static; the result cannot change between calls. + Name() string +} + +// RegisterCodecV2 registers the provided CodecV2 for use with all gRPC clients and +// servers. +// +// The CodecV2 will be stored and looked up by result of its Name() method, which +// should match the content-subtype of the encoding handled by the CodecV2. This +// is case-insensitive, and is stored and looked up as lowercase. If the +// result of calling Name() is an empty string, RegisterCodecV2 will panic. See +// Content-Type on +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. +// +// If both a Codec and CodecV2 are registered with the same name, the CodecV2 +// will be used. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple Codecs are +// registered with the same name, the one registered last will take effect. +func RegisterCodecV2(codec CodecV2) { + if codec == nil { + panic("cannot register a nil CodecV2") + } + if codec.Name() == "" { + panic("cannot register CodecV2 with empty string result for Name()") + } + contentSubtype := strings.ToLower(codec.Name()) + registeredCodecs[contentSubtype] = codec +} + +// GetCodecV2 gets a registered CodecV2 by content-subtype, or nil if no CodecV2 is +// registered for the content-subtype. +// +// The content-subtype is expected to be lowercase. +func GetCodecV2(contentSubtype string) CodecV2 { + c, _ := registeredCodecs[contentSubtype].(CodecV2) + return c +} diff --git a/vendor/google.golang.org/grpc/encoding/proto/proto.go b/vendor/google.golang.org/grpc/encoding/proto/proto.go index 66d5cdf03e..ceec319dd2 100644 --- a/vendor/google.golang.org/grpc/encoding/proto/proto.go +++ b/vendor/google.golang.org/grpc/encoding/proto/proto.go @@ -1,6 +1,6 @@ /* * - * Copyright 2018 gRPC authors. + * Copyright 2024 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import ( "fmt" "google.golang.org/grpc/encoding" + "google.golang.org/grpc/mem" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/protoadapt" ) @@ -32,28 +33,51 @@ import ( const Name = "proto" func init() { - encoding.RegisterCodec(codec{}) + encoding.RegisterCodecV2(&codecV2{}) } -// codec is a Codec implementation with protobuf. It is the default codec for gRPC. -type codec struct{} +// codec is a CodecV2 implementation with protobuf. It is the default codec for +// gRPC. +type codecV2 struct{} -func (codec) Marshal(v any) ([]byte, error) { +func (c *codecV2) Marshal(v any) (data mem.BufferSlice, err error) { vv := messageV2Of(v) if vv == nil { - return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v) + return nil, fmt.Errorf("proto: failed to marshal, message is %T, want proto.Message", v) } - return proto.Marshal(vv) + size := proto.Size(vv) + if mem.IsBelowBufferPoolingThreshold(size) { + buf, err := proto.Marshal(vv) + if err != nil { + return nil, err + } + data = append(data, mem.SliceBuffer(buf)) + } else { + pool := mem.DefaultBufferPool() + buf := pool.Get(size) + if _, err := (proto.MarshalOptions{}).MarshalAppend((*buf)[:0], vv); err != nil { + pool.Put(buf) + return nil, err + } + data = append(data, mem.NewBuffer(buf, pool)) + } + + return data, nil } -func (codec) Unmarshal(data []byte, v any) error { +func (c *codecV2) Unmarshal(data mem.BufferSlice, v any) (err error) { vv := messageV2Of(v) if vv == nil { return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v) } - return proto.Unmarshal(data, vv) + buf := data.MaterializeToBuffer(mem.DefaultBufferPool()) + defer buf.Free() + // TODO: Upgrade proto.Unmarshal to support mem.BufferSlice. Right now, it's not + // really possible without a major overhaul of the proto package, but the + // vtprotobuf library may be able to support this. + return proto.Unmarshal(buf.ReadOnlyData(), vv) } func messageV2Of(v any) proto.Message { @@ -67,6 +91,6 @@ func messageV2Of(v any) proto.Message { return nil } -func (codec) Name() string { +func (c *codecV2) Name() string { return Name } diff --git a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go new file mode 100644 index 0000000000..930140f57e --- /dev/null +++ b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go @@ -0,0 +1,270 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package stats + +import ( + "maps" + "testing" + + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/internal" +) + +func init() { + internal.SnapshotMetricRegistryForTesting = snapshotMetricsRegistryForTesting +} + +var logger = grpclog.Component("metrics-registry") + +// DefaultMetrics are the default metrics registered through global metrics +// registry. This is written to at initialization time only, and is read only +// after initialization. +var DefaultMetrics = NewMetrics() + +// MetricDescriptor is the data for a registered metric. +type MetricDescriptor struct { + // The name of this metric. This name must be unique across the whole binary + // (including any per call metrics). See + // https://github.com/grpc/proposal/blob/master/A79-non-per-call-metrics-architecture.md#metric-instrument-naming-conventions + // for metric naming conventions. + Name Metric + // The description of this metric. + Description string + // The unit (e.g. entries, seconds) of this metric. + Unit string + // The required label keys for this metric. These are intended to + // metrics emitted from a stats handler. + Labels []string + // The optional label keys for this metric. These are intended to attached + // to metrics emitted from a stats handler if configured. + OptionalLabels []string + // Whether this metric is on by default. + Default bool + // The type of metric. This is set by the metric registry, and not intended + // to be set by a component registering a metric. + Type MetricType + // Bounds are the bounds of this metric. This only applies to histogram + // metrics. If unset or set with length 0, stats handlers will fall back to + // default bounds. + Bounds []float64 +} + +// MetricType is the type of metric. +type MetricType int + +// Type of metric supported by this instrument registry. +const ( + MetricTypeIntCount MetricType = iota + MetricTypeFloatCount + MetricTypeIntHisto + MetricTypeFloatHisto + MetricTypeIntGauge +) + +// Int64CountHandle is a typed handle for a int count metric. This handle +// is passed at the recording point in order to know which metric to record +// on. +type Int64CountHandle MetricDescriptor + +// Descriptor returns the int64 count handle typecast to a pointer to a +// MetricDescriptor. +func (h *Int64CountHandle) Descriptor() *MetricDescriptor { + return (*MetricDescriptor)(h) +} + +// Record records the int64 count value on the metrics recorder provided. +func (h *Int64CountHandle) Record(recorder MetricsRecorder, incr int64, labels ...string) { + recorder.RecordInt64Count(h, incr, labels...) +} + +// Float64CountHandle is a typed handle for a float count metric. This handle is +// passed at the recording point in order to know which metric to record on. +type Float64CountHandle MetricDescriptor + +// Descriptor returns the float64 count handle typecast to a pointer to a +// MetricDescriptor. +func (h *Float64CountHandle) Descriptor() *MetricDescriptor { + return (*MetricDescriptor)(h) +} + +// Record records the float64 count value on the metrics recorder provided. +func (h *Float64CountHandle) Record(recorder MetricsRecorder, incr float64, labels ...string) { + recorder.RecordFloat64Count(h, incr, labels...) +} + +// Int64HistoHandle is a typed handle for an int histogram metric. This handle +// is passed at the recording point in order to know which metric to record on. +type Int64HistoHandle MetricDescriptor + +// Descriptor returns the int64 histo handle typecast to a pointer to a +// MetricDescriptor. +func (h *Int64HistoHandle) Descriptor() *MetricDescriptor { + return (*MetricDescriptor)(h) +} + +// Record records the int64 histo value on the metrics recorder provided. +func (h *Int64HistoHandle) Record(recorder MetricsRecorder, incr int64, labels ...string) { + recorder.RecordInt64Histo(h, incr, labels...) +} + +// Float64HistoHandle is a typed handle for a float histogram metric. This +// handle is passed at the recording point in order to know which metric to +// record on. +type Float64HistoHandle MetricDescriptor + +// Descriptor returns the float64 histo handle typecast to a pointer to a +// MetricDescriptor. +func (h *Float64HistoHandle) Descriptor() *MetricDescriptor { + return (*MetricDescriptor)(h) +} + +// Record records the float64 histo value on the metrics recorder provided. +func (h *Float64HistoHandle) Record(recorder MetricsRecorder, incr float64, labels ...string) { + recorder.RecordFloat64Histo(h, incr, labels...) +} + +// Int64GaugeHandle is a typed handle for an int gauge metric. This handle is +// passed at the recording point in order to know which metric to record on. +type Int64GaugeHandle MetricDescriptor + +// Descriptor returns the int64 gauge handle typecast to a pointer to a +// MetricDescriptor. +func (h *Int64GaugeHandle) Descriptor() *MetricDescriptor { + return (*MetricDescriptor)(h) +} + +// Record records the int64 histo value on the metrics recorder provided. +func (h *Int64GaugeHandle) Record(recorder MetricsRecorder, incr int64, labels ...string) { + recorder.RecordInt64Gauge(h, incr, labels...) +} + +// registeredMetrics are the registered metric descriptor names. +var registeredMetrics = make(map[Metric]bool) + +// metricsRegistry contains all of the registered metrics. +// +// This is written to only at init time, and read only after that. +var metricsRegistry = make(map[Metric]*MetricDescriptor) + +// DescriptorForMetric returns the MetricDescriptor from the global registry. +// +// Returns nil if MetricDescriptor not present. +func DescriptorForMetric(metric Metric) *MetricDescriptor { + return metricsRegistry[metric] +} + +func registerMetric(name Metric, def bool) { + if registeredMetrics[name] { + logger.Fatalf("metric %v already registered", name) + } + registeredMetrics[name] = true + if def { + DefaultMetrics = DefaultMetrics.Add(name) + } +} + +// RegisterInt64Count registers the metric description onto the global registry. +// It returns a typed handle to use to recording data. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple metrics are +// registered with the same name, this function will panic. +func RegisterInt64Count(descriptor MetricDescriptor) *Int64CountHandle { + registerMetric(descriptor.Name, descriptor.Default) + descriptor.Type = MetricTypeIntCount + descPtr := &descriptor + metricsRegistry[descriptor.Name] = descPtr + return (*Int64CountHandle)(descPtr) +} + +// RegisterFloat64Count registers the metric description onto the global +// registry. It returns a typed handle to use to recording data. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple metrics are +// registered with the same name, this function will panic. +func RegisterFloat64Count(descriptor MetricDescriptor) *Float64CountHandle { + registerMetric(descriptor.Name, descriptor.Default) + descriptor.Type = MetricTypeFloatCount + descPtr := &descriptor + metricsRegistry[descriptor.Name] = descPtr + return (*Float64CountHandle)(descPtr) +} + +// RegisterInt64Histo registers the metric description onto the global registry. +// It returns a typed handle to use to recording data. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple metrics are +// registered with the same name, this function will panic. +func RegisterInt64Histo(descriptor MetricDescriptor) *Int64HistoHandle { + registerMetric(descriptor.Name, descriptor.Default) + descriptor.Type = MetricTypeIntHisto + descPtr := &descriptor + metricsRegistry[descriptor.Name] = descPtr + return (*Int64HistoHandle)(descPtr) +} + +// RegisterFloat64Histo registers the metric description onto the global +// registry. It returns a typed handle to use to recording data. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple metrics are +// registered with the same name, this function will panic. +func RegisterFloat64Histo(descriptor MetricDescriptor) *Float64HistoHandle { + registerMetric(descriptor.Name, descriptor.Default) + descriptor.Type = MetricTypeFloatHisto + descPtr := &descriptor + metricsRegistry[descriptor.Name] = descPtr + return (*Float64HistoHandle)(descPtr) +} + +// RegisterInt64Gauge registers the metric description onto the global registry. +// It returns a typed handle to use to recording data. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple metrics are +// registered with the same name, this function will panic. +func RegisterInt64Gauge(descriptor MetricDescriptor) *Int64GaugeHandle { + registerMetric(descriptor.Name, descriptor.Default) + descriptor.Type = MetricTypeIntGauge + descPtr := &descriptor + metricsRegistry[descriptor.Name] = descPtr + return (*Int64GaugeHandle)(descPtr) +} + +// snapshotMetricsRegistryForTesting snapshots the global data of the metrics +// registry. Registers a cleanup function on the provided testing.T that sets +// the metrics registry to its original state. Only called in testing functions. +func snapshotMetricsRegistryForTesting(t *testing.T) { + oldDefaultMetrics := DefaultMetrics + oldRegisteredMetrics := registeredMetrics + oldMetricsRegistry := metricsRegistry + + registeredMetrics = make(map[Metric]bool) + metricsRegistry = make(map[Metric]*MetricDescriptor) + maps.Copy(registeredMetrics, registeredMetrics) + maps.Copy(metricsRegistry, metricsRegistry) + + t.Cleanup(func() { + DefaultMetrics = oldDefaultMetrics + registeredMetrics = oldRegisteredMetrics + metricsRegistry = oldMetricsRegistry + }) +} diff --git a/vendor/google.golang.org/grpc/experimental/stats/metrics.go b/vendor/google.golang.org/grpc/experimental/stats/metrics.go new file mode 100644 index 0000000000..3221f7a633 --- /dev/null +++ b/vendor/google.golang.org/grpc/experimental/stats/metrics.go @@ -0,0 +1,114 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package stats contains experimental metrics/stats API's. +package stats + +import "maps" + +// MetricsRecorder records on metrics derived from metric registry. +type MetricsRecorder interface { + // RecordInt64Count records the measurement alongside labels on the int + // count associated with the provided handle. + RecordInt64Count(handle *Int64CountHandle, incr int64, labels ...string) + // RecordFloat64Count records the measurement alongside labels on the float + // count associated with the provided handle. + RecordFloat64Count(handle *Float64CountHandle, incr float64, labels ...string) + // RecordInt64Histo records the measurement alongside labels on the int + // histo associated with the provided handle. + RecordInt64Histo(handle *Int64HistoHandle, incr int64, labels ...string) + // RecordFloat64Histo records the measurement alongside labels on the float + // histo associated with the provided handle. + RecordFloat64Histo(handle *Float64HistoHandle, incr float64, labels ...string) + // RecordInt64Gauge records the measurement alongside labels on the int + // gauge associated with the provided handle. + RecordInt64Gauge(handle *Int64GaugeHandle, incr int64, labels ...string) +} + +// Metric is an identifier for a metric. +type Metric string + +// Metrics is a set of metrics to record. Once created, Metrics is immutable, +// however Add and Remove can make copies with specific metrics added or +// removed, respectively. +// +// Do not construct directly; use NewMetrics instead. +type Metrics struct { + // metrics are the set of metrics to initialize. + metrics map[Metric]bool +} + +// NewMetrics returns a Metrics containing Metrics. +func NewMetrics(metrics ...Metric) *Metrics { + newMetrics := make(map[Metric]bool) + for _, metric := range metrics { + newMetrics[metric] = true + } + return &Metrics{ + metrics: newMetrics, + } +} + +// Metrics returns the metrics set. The returned map is read-only and must not +// be modified. +func (m *Metrics) Metrics() map[Metric]bool { + return m.metrics +} + +// Add adds the metrics to the metrics set and returns a new copy with the +// additional metrics. +func (m *Metrics) Add(metrics ...Metric) *Metrics { + newMetrics := make(map[Metric]bool) + for metric := range m.metrics { + newMetrics[metric] = true + } + + for _, metric := range metrics { + newMetrics[metric] = true + } + return &Metrics{ + metrics: newMetrics, + } +} + +// Join joins the metrics passed in with the metrics set, and returns a new copy +// with the merged metrics. +func (m *Metrics) Join(metrics *Metrics) *Metrics { + newMetrics := make(map[Metric]bool) + maps.Copy(newMetrics, m.metrics) + maps.Copy(newMetrics, metrics.metrics) + return &Metrics{ + metrics: newMetrics, + } +} + +// Remove removes the metrics from the metrics set and returns a new copy with +// the metrics removed. +func (m *Metrics) Remove(metrics ...Metric) *Metrics { + newMetrics := make(map[Metric]bool) + for metric := range m.metrics { + newMetrics[metric] = true + } + + for _, metric := range metrics { + delete(newMetrics, metric) + } + return &Metrics{ + metrics: newMetrics, + } +} diff --git a/vendor/google.golang.org/grpc/grpclog/component.go b/vendor/google.golang.org/grpc/grpclog/component.go index ac73c9ced2..f1ae080dcb 100644 --- a/vendor/google.golang.org/grpc/grpclog/component.go +++ b/vendor/google.golang.org/grpc/grpclog/component.go @@ -20,8 +20,6 @@ package grpclog import ( "fmt" - - "google.golang.org/grpc/internal/grpclog" ) // componentData records the settings for a component. @@ -33,22 +31,22 @@ var cache = map[string]*componentData{} func (c *componentData) InfoDepth(depth int, args ...any) { args = append([]any{"[" + string(c.name) + "]"}, args...) - grpclog.InfoDepth(depth+1, args...) + InfoDepth(depth+1, args...) } func (c *componentData) WarningDepth(depth int, args ...any) { args = append([]any{"[" + string(c.name) + "]"}, args...) - grpclog.WarningDepth(depth+1, args...) + WarningDepth(depth+1, args...) } func (c *componentData) ErrorDepth(depth int, args ...any) { args = append([]any{"[" + string(c.name) + "]"}, args...) - grpclog.ErrorDepth(depth+1, args...) + ErrorDepth(depth+1, args...) } func (c *componentData) FatalDepth(depth int, args ...any) { args = append([]any{"[" + string(c.name) + "]"}, args...) - grpclog.FatalDepth(depth+1, args...) + FatalDepth(depth+1, args...) } func (c *componentData) Info(args ...any) { diff --git a/vendor/google.golang.org/grpc/grpclog/grpclog.go b/vendor/google.golang.org/grpc/grpclog/grpclog.go index 16928c9cb9..db320105e6 100644 --- a/vendor/google.golang.org/grpc/grpclog/grpclog.go +++ b/vendor/google.golang.org/grpc/grpclog/grpclog.go @@ -18,18 +18,15 @@ // Package grpclog defines logging for grpc. // -// All logs in transport and grpclb packages only go to verbose level 2. -// All logs in other packages in grpc are logged in spite of the verbosity level. -// -// In the default logger, -// severity level can be set by environment variable GRPC_GO_LOG_SEVERITY_LEVEL, -// verbosity level can be set by GRPC_GO_LOG_VERBOSITY_LEVEL. -package grpclog // import "google.golang.org/grpc/grpclog" +// In the default logger, severity level can be set by environment variable +// GRPC_GO_LOG_SEVERITY_LEVEL, verbosity level can be set by +// GRPC_GO_LOG_VERBOSITY_LEVEL. +package grpclog import ( "os" - "google.golang.org/grpc/internal/grpclog" + "google.golang.org/grpc/grpclog/internal" ) func init() { @@ -38,58 +35,58 @@ func init() { // V reports whether verbosity level l is at least the requested verbose level. func V(l int) bool { - return grpclog.Logger.V(l) + return internal.LoggerV2Impl.V(l) } // Info logs to the INFO log. func Info(args ...any) { - grpclog.Logger.Info(args...) + internal.LoggerV2Impl.Info(args...) } // Infof logs to the INFO log. Arguments are handled in the manner of fmt.Printf. func Infof(format string, args ...any) { - grpclog.Logger.Infof(format, args...) + internal.LoggerV2Impl.Infof(format, args...) } // Infoln logs to the INFO log. Arguments are handled in the manner of fmt.Println. func Infoln(args ...any) { - grpclog.Logger.Infoln(args...) + internal.LoggerV2Impl.Infoln(args...) } // Warning logs to the WARNING log. func Warning(args ...any) { - grpclog.Logger.Warning(args...) + internal.LoggerV2Impl.Warning(args...) } // Warningf logs to the WARNING log. Arguments are handled in the manner of fmt.Printf. func Warningf(format string, args ...any) { - grpclog.Logger.Warningf(format, args...) + internal.LoggerV2Impl.Warningf(format, args...) } // Warningln logs to the WARNING log. Arguments are handled in the manner of fmt.Println. func Warningln(args ...any) { - grpclog.Logger.Warningln(args...) + internal.LoggerV2Impl.Warningln(args...) } // Error logs to the ERROR log. func Error(args ...any) { - grpclog.Logger.Error(args...) + internal.LoggerV2Impl.Error(args...) } // Errorf logs to the ERROR log. Arguments are handled in the manner of fmt.Printf. func Errorf(format string, args ...any) { - grpclog.Logger.Errorf(format, args...) + internal.LoggerV2Impl.Errorf(format, args...) } // Errorln logs to the ERROR log. Arguments are handled in the manner of fmt.Println. func Errorln(args ...any) { - grpclog.Logger.Errorln(args...) + internal.LoggerV2Impl.Errorln(args...) } // Fatal logs to the FATAL log. Arguments are handled in the manner of fmt.Print. // It calls os.Exit() with exit code 1. func Fatal(args ...any) { - grpclog.Logger.Fatal(args...) + internal.LoggerV2Impl.Fatal(args...) // Make sure fatal logs will exit. os.Exit(1) } @@ -97,15 +94,15 @@ func Fatal(args ...any) { // Fatalf logs to the FATAL log. Arguments are handled in the manner of fmt.Printf. // It calls os.Exit() with exit code 1. func Fatalf(format string, args ...any) { - grpclog.Logger.Fatalf(format, args...) + internal.LoggerV2Impl.Fatalf(format, args...) // Make sure fatal logs will exit. os.Exit(1) } // Fatalln logs to the FATAL log. Arguments are handled in the manner of fmt.Println. -// It calle os.Exit()) with exit code 1. +// It calls os.Exit() with exit code 1. func Fatalln(args ...any) { - grpclog.Logger.Fatalln(args...) + internal.LoggerV2Impl.Fatalln(args...) // Make sure fatal logs will exit. os.Exit(1) } @@ -114,19 +111,76 @@ func Fatalln(args ...any) { // // Deprecated: use Info. func Print(args ...any) { - grpclog.Logger.Info(args...) + internal.LoggerV2Impl.Info(args...) } // Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. // // Deprecated: use Infof. func Printf(format string, args ...any) { - grpclog.Logger.Infof(format, args...) + internal.LoggerV2Impl.Infof(format, args...) } // Println prints to the logger. Arguments are handled in the manner of fmt.Println. // // Deprecated: use Infoln. func Println(args ...any) { - grpclog.Logger.Infoln(args...) + internal.LoggerV2Impl.Infoln(args...) +} + +// InfoDepth logs to the INFO log at the specified depth. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func InfoDepth(depth int, args ...any) { + if internal.DepthLoggerV2Impl != nil { + internal.DepthLoggerV2Impl.InfoDepth(depth, args...) + } else { + internal.LoggerV2Impl.Infoln(args...) + } +} + +// WarningDepth logs to the WARNING log at the specified depth. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func WarningDepth(depth int, args ...any) { + if internal.DepthLoggerV2Impl != nil { + internal.DepthLoggerV2Impl.WarningDepth(depth, args...) + } else { + internal.LoggerV2Impl.Warningln(args...) + } +} + +// ErrorDepth logs to the ERROR log at the specified depth. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func ErrorDepth(depth int, args ...any) { + if internal.DepthLoggerV2Impl != nil { + internal.DepthLoggerV2Impl.ErrorDepth(depth, args...) + } else { + internal.LoggerV2Impl.Errorln(args...) + } +} + +// FatalDepth logs to the FATAL log at the specified depth. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func FatalDepth(depth int, args ...any) { + if internal.DepthLoggerV2Impl != nil { + internal.DepthLoggerV2Impl.FatalDepth(depth, args...) + } else { + internal.LoggerV2Impl.Fatalln(args...) + } + os.Exit(1) } diff --git a/vendor/google.golang.org/grpc/grpclog/internal/grpclog.go b/vendor/google.golang.org/grpc/grpclog/internal/grpclog.go new file mode 100644 index 0000000000..59c03bc14c --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/internal/grpclog.go @@ -0,0 +1,26 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package internal contains functionality internal to the grpclog package. +package internal + +// LoggerV2Impl is the logger used for the non-depth log functions. +var LoggerV2Impl LoggerV2 + +// DepthLoggerV2Impl is the logger used for the depth log functions. +var DepthLoggerV2Impl DepthLoggerV2 diff --git a/vendor/google.golang.org/grpc/grpclog/internal/logger.go b/vendor/google.golang.org/grpc/grpclog/internal/logger.go new file mode 100644 index 0000000000..0d9a824ce1 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/internal/logger.go @@ -0,0 +1,87 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package internal + +// Logger mimics golang's standard Logger as an interface. +// +// Deprecated: use LoggerV2. +type Logger interface { + Fatal(args ...any) + Fatalf(format string, args ...any) + Fatalln(args ...any) + Print(args ...any) + Printf(format string, args ...any) + Println(args ...any) +} + +// LoggerWrapper wraps Logger into a LoggerV2. +type LoggerWrapper struct { + Logger +} + +// Info logs to INFO log. Arguments are handled in the manner of fmt.Print. +func (l *LoggerWrapper) Info(args ...any) { + l.Logger.Print(args...) +} + +// Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. +func (l *LoggerWrapper) Infoln(args ...any) { + l.Logger.Println(args...) +} + +// Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. +func (l *LoggerWrapper) Infof(format string, args ...any) { + l.Logger.Printf(format, args...) +} + +// Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. +func (l *LoggerWrapper) Warning(args ...any) { + l.Logger.Print(args...) +} + +// Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. +func (l *LoggerWrapper) Warningln(args ...any) { + l.Logger.Println(args...) +} + +// Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. +func (l *LoggerWrapper) Warningf(format string, args ...any) { + l.Logger.Printf(format, args...) +} + +// Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. +func (l *LoggerWrapper) Error(args ...any) { + l.Logger.Print(args...) +} + +// Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. +func (l *LoggerWrapper) Errorln(args ...any) { + l.Logger.Println(args...) +} + +// Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. +func (l *LoggerWrapper) Errorf(format string, args ...any) { + l.Logger.Printf(format, args...) +} + +// V reports whether verbosity level l is at least the requested verbose level. +func (*LoggerWrapper) V(l int) bool { + // Returns true for all verbose level. + return true +} diff --git a/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go b/vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go similarity index 52% rename from vendor/google.golang.org/grpc/internal/grpclog/grpclog.go rename to vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go index bfc45102ab..07df71e98a 100644 --- a/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go +++ b/vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go @@ -1,6 +1,6 @@ /* * - * Copyright 2020 gRPC authors. + * Copyright 2024 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,59 +16,17 @@ * */ -// Package grpclog (internal) defines depth logging for grpc. -package grpclog +package internal import ( + "encoding/json" + "fmt" + "io" + "log" "os" ) -// Logger is the logger used for the non-depth log functions. -var Logger LoggerV2 - -// DepthLogger is the logger used for the depth log functions. -var DepthLogger DepthLoggerV2 - -// InfoDepth logs to the INFO log at the specified depth. -func InfoDepth(depth int, args ...any) { - if DepthLogger != nil { - DepthLogger.InfoDepth(depth, args...) - } else { - Logger.Infoln(args...) - } -} - -// WarningDepth logs to the WARNING log at the specified depth. -func WarningDepth(depth int, args ...any) { - if DepthLogger != nil { - DepthLogger.WarningDepth(depth, args...) - } else { - Logger.Warningln(args...) - } -} - -// ErrorDepth logs to the ERROR log at the specified depth. -func ErrorDepth(depth int, args ...any) { - if DepthLogger != nil { - DepthLogger.ErrorDepth(depth, args...) - } else { - Logger.Errorln(args...) - } -} - -// FatalDepth logs to the FATAL log at the specified depth. -func FatalDepth(depth int, args ...any) { - if DepthLogger != nil { - DepthLogger.FatalDepth(depth, args...) - } else { - Logger.Fatalln(args...) - } - os.Exit(1) -} - // LoggerV2 does underlying logging work for grpclog. -// This is a copy of the LoggerV2 defined in the external grpclog package. It -// is defined here to avoid a circular dependency. type LoggerV2 interface { // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. Info(args ...any) @@ -107,14 +65,13 @@ type LoggerV2 interface { // DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements // DepthLoggerV2, the below functions will be called with the appropriate stack // depth set for trivial functions the logger may ignore. -// This is a copy of the DepthLoggerV2 defined in the external grpclog package. -// It is defined here to avoid a circular dependency. // // # Experimental // // Notice: This type is EXPERIMENTAL and may be changed or removed in a // later release. type DepthLoggerV2 interface { + LoggerV2 // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println. InfoDepth(depth int, args ...any) // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println. @@ -124,3 +81,124 @@ type DepthLoggerV2 interface { // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println. FatalDepth(depth int, args ...any) } + +const ( + // infoLog indicates Info severity. + infoLog int = iota + // warningLog indicates Warning severity. + warningLog + // errorLog indicates Error severity. + errorLog + // fatalLog indicates Fatal severity. + fatalLog +) + +// severityName contains the string representation of each severity. +var severityName = []string{ + infoLog: "INFO", + warningLog: "WARNING", + errorLog: "ERROR", + fatalLog: "FATAL", +} + +// loggerT is the default logger used by grpclog. +type loggerT struct { + m []*log.Logger + v int + jsonFormat bool +} + +func (g *loggerT) output(severity int, s string) { + sevStr := severityName[severity] + if !g.jsonFormat { + g.m[severity].Output(2, fmt.Sprintf("%v: %v", sevStr, s)) + return + } + // TODO: we can also include the logging component, but that needs more + // (API) changes. + b, _ := json.Marshal(map[string]string{ + "severity": sevStr, + "message": s, + }) + g.m[severity].Output(2, string(b)) +} + +func (g *loggerT) Info(args ...any) { + g.output(infoLog, fmt.Sprint(args...)) +} + +func (g *loggerT) Infoln(args ...any) { + g.output(infoLog, fmt.Sprintln(args...)) +} + +func (g *loggerT) Infof(format string, args ...any) { + g.output(infoLog, fmt.Sprintf(format, args...)) +} + +func (g *loggerT) Warning(args ...any) { + g.output(warningLog, fmt.Sprint(args...)) +} + +func (g *loggerT) Warningln(args ...any) { + g.output(warningLog, fmt.Sprintln(args...)) +} + +func (g *loggerT) Warningf(format string, args ...any) { + g.output(warningLog, fmt.Sprintf(format, args...)) +} + +func (g *loggerT) Error(args ...any) { + g.output(errorLog, fmt.Sprint(args...)) +} + +func (g *loggerT) Errorln(args ...any) { + g.output(errorLog, fmt.Sprintln(args...)) +} + +func (g *loggerT) Errorf(format string, args ...any) { + g.output(errorLog, fmt.Sprintf(format, args...)) +} + +func (g *loggerT) Fatal(args ...any) { + g.output(fatalLog, fmt.Sprint(args...)) + os.Exit(1) +} + +func (g *loggerT) Fatalln(args ...any) { + g.output(fatalLog, fmt.Sprintln(args...)) + os.Exit(1) +} + +func (g *loggerT) Fatalf(format string, args ...any) { + g.output(fatalLog, fmt.Sprintf(format, args...)) + os.Exit(1) +} + +func (g *loggerT) V(l int) bool { + return l <= g.v +} + +// LoggerV2Config configures the LoggerV2 implementation. +type LoggerV2Config struct { + // Verbosity sets the verbosity level of the logger. + Verbosity int + // FormatJSON controls whether the logger should output logs in JSON format. + FormatJSON bool +} + +// NewLoggerV2 creates a new LoggerV2 instance with the provided configuration. +// The infoW, warningW, and errorW writers are used to write log messages of +// different severity levels. +func NewLoggerV2(infoW, warningW, errorW io.Writer, c LoggerV2Config) LoggerV2 { + var m []*log.Logger + flag := log.LstdFlags + if c.FormatJSON { + flag = 0 + } + m = append(m, log.New(infoW, "", flag)) + m = append(m, log.New(io.MultiWriter(infoW, warningW), "", flag)) + ew := io.MultiWriter(infoW, warningW, errorW) // ew will be used for error and fatal. + m = append(m, log.New(ew, "", flag)) + m = append(m, log.New(ew, "", flag)) + return &loggerT{m: m, v: c.Verbosity, jsonFormat: c.FormatJSON} +} diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go index b1674d8267..4b20358570 100644 --- a/vendor/google.golang.org/grpc/grpclog/logger.go +++ b/vendor/google.golang.org/grpc/grpclog/logger.go @@ -18,70 +18,17 @@ package grpclog -import "google.golang.org/grpc/internal/grpclog" +import "google.golang.org/grpc/grpclog/internal" // Logger mimics golang's standard Logger as an interface. // // Deprecated: use LoggerV2. -type Logger interface { - Fatal(args ...any) - Fatalf(format string, args ...any) - Fatalln(args ...any) - Print(args ...any) - Printf(format string, args ...any) - Println(args ...any) -} +type Logger internal.Logger // SetLogger sets the logger that is used in grpc. Call only from // init() functions. // // Deprecated: use SetLoggerV2. func SetLogger(l Logger) { - grpclog.Logger = &loggerWrapper{Logger: l} -} - -// loggerWrapper wraps Logger into a LoggerV2. -type loggerWrapper struct { - Logger -} - -func (g *loggerWrapper) Info(args ...any) { - g.Logger.Print(args...) -} - -func (g *loggerWrapper) Infoln(args ...any) { - g.Logger.Println(args...) -} - -func (g *loggerWrapper) Infof(format string, args ...any) { - g.Logger.Printf(format, args...) -} - -func (g *loggerWrapper) Warning(args ...any) { - g.Logger.Print(args...) -} - -func (g *loggerWrapper) Warningln(args ...any) { - g.Logger.Println(args...) -} - -func (g *loggerWrapper) Warningf(format string, args ...any) { - g.Logger.Printf(format, args...) -} - -func (g *loggerWrapper) Error(args ...any) { - g.Logger.Print(args...) -} - -func (g *loggerWrapper) Errorln(args ...any) { - g.Logger.Println(args...) -} - -func (g *loggerWrapper) Errorf(format string, args ...any) { - g.Logger.Printf(format, args...) -} - -func (g *loggerWrapper) V(l int) bool { - // Returns true for all verbose level. - return true + internal.LoggerV2Impl = &internal.LoggerWrapper{Logger: l} } diff --git a/vendor/google.golang.org/grpc/grpclog/loggerv2.go b/vendor/google.golang.org/grpc/grpclog/loggerv2.go index ecfd36d713..892dc13d16 100644 --- a/vendor/google.golang.org/grpc/grpclog/loggerv2.go +++ b/vendor/google.golang.org/grpc/grpclog/loggerv2.go @@ -19,52 +19,16 @@ package grpclog import ( - "encoding/json" - "fmt" "io" - "log" "os" "strconv" "strings" - "google.golang.org/grpc/internal/grpclog" + "google.golang.org/grpc/grpclog/internal" ) // LoggerV2 does underlying logging work for grpclog. -type LoggerV2 interface { - // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. - Info(args ...any) - // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. - Infoln(args ...any) - // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. - Infof(format string, args ...any) - // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. - Warning(args ...any) - // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. - Warningln(args ...any) - // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. - Warningf(format string, args ...any) - // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. - Error(args ...any) - // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. - Errorln(args ...any) - // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. - Errorf(format string, args ...any) - // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. - // gRPC ensures that all Fatal logs will exit with os.Exit(1). - // Implementations may also call os.Exit() with a non-zero exit code. - Fatal(args ...any) - // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. - // gRPC ensures that all Fatal logs will exit with os.Exit(1). - // Implementations may also call os.Exit() with a non-zero exit code. - Fatalln(args ...any) - // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. - // gRPC ensures that all Fatal logs will exit with os.Exit(1). - // Implementations may also call os.Exit() with a non-zero exit code. - Fatalf(format string, args ...any) - // V reports whether verbosity level l is at least the requested verbose level. - V(l int) bool -} +type LoggerV2 internal.LoggerV2 // SetLoggerV2 sets logger that is used in grpc to a V2 logger. // Not mutex-protected, should be called before any gRPC functions. @@ -72,34 +36,8 @@ func SetLoggerV2(l LoggerV2) { if _, ok := l.(*componentData); ok { panic("cannot use component logger as grpclog logger") } - grpclog.Logger = l - grpclog.DepthLogger, _ = l.(grpclog.DepthLoggerV2) -} - -const ( - // infoLog indicates Info severity. - infoLog int = iota - // warningLog indicates Warning severity. - warningLog - // errorLog indicates Error severity. - errorLog - // fatalLog indicates Fatal severity. - fatalLog -) - -// severityName contains the string representation of each severity. -var severityName = []string{ - infoLog: "INFO", - warningLog: "WARNING", - errorLog: "ERROR", - fatalLog: "FATAL", -} - -// loggerT is the default logger used by grpclog. -type loggerT struct { - m []*log.Logger - v int - jsonFormat bool + internal.LoggerV2Impl = l + internal.DepthLoggerV2Impl, _ = l.(internal.DepthLoggerV2) } // NewLoggerV2 creates a loggerV2 with the provided writers. @@ -108,32 +46,13 @@ type loggerT struct { // Warning logs will be written to warningW and infoW. // Info logs will be written to infoW. func NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 { - return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{}) + return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{}) } // NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and // verbosity level. func NewLoggerV2WithVerbosity(infoW, warningW, errorW io.Writer, v int) LoggerV2 { - return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{verbose: v}) -} - -type loggerV2Config struct { - verbose int - jsonFormat bool -} - -func newLoggerV2WithConfig(infoW, warningW, errorW io.Writer, c loggerV2Config) LoggerV2 { - var m []*log.Logger - flag := log.LstdFlags - if c.jsonFormat { - flag = 0 - } - m = append(m, log.New(infoW, "", flag)) - m = append(m, log.New(io.MultiWriter(infoW, warningW), "", flag)) - ew := io.MultiWriter(infoW, warningW, errorW) // ew will be used for error and fatal. - m = append(m, log.New(ew, "", flag)) - m = append(m, log.New(ew, "", flag)) - return &loggerT{m: m, v: c.verbose, jsonFormat: c.jsonFormat} + return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{Verbosity: v}) } // newLoggerV2 creates a loggerV2 to be used as default logger. @@ -161,82 +80,12 @@ func newLoggerV2() LoggerV2 { jsonFormat := strings.EqualFold(os.Getenv("GRPC_GO_LOG_FORMATTER"), "json") - return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{ - verbose: v, - jsonFormat: jsonFormat, + return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{ + Verbosity: v, + FormatJSON: jsonFormat, }) } -func (g *loggerT) output(severity int, s string) { - sevStr := severityName[severity] - if !g.jsonFormat { - g.m[severity].Output(2, fmt.Sprintf("%v: %v", sevStr, s)) - return - } - // TODO: we can also include the logging component, but that needs more - // (API) changes. - b, _ := json.Marshal(map[string]string{ - "severity": sevStr, - "message": s, - }) - g.m[severity].Output(2, string(b)) -} - -func (g *loggerT) Info(args ...any) { - g.output(infoLog, fmt.Sprint(args...)) -} - -func (g *loggerT) Infoln(args ...any) { - g.output(infoLog, fmt.Sprintln(args...)) -} - -func (g *loggerT) Infof(format string, args ...any) { - g.output(infoLog, fmt.Sprintf(format, args...)) -} - -func (g *loggerT) Warning(args ...any) { - g.output(warningLog, fmt.Sprint(args...)) -} - -func (g *loggerT) Warningln(args ...any) { - g.output(warningLog, fmt.Sprintln(args...)) -} - -func (g *loggerT) Warningf(format string, args ...any) { - g.output(warningLog, fmt.Sprintf(format, args...)) -} - -func (g *loggerT) Error(args ...any) { - g.output(errorLog, fmt.Sprint(args...)) -} - -func (g *loggerT) Errorln(args ...any) { - g.output(errorLog, fmt.Sprintln(args...)) -} - -func (g *loggerT) Errorf(format string, args ...any) { - g.output(errorLog, fmt.Sprintf(format, args...)) -} - -func (g *loggerT) Fatal(args ...any) { - g.output(fatalLog, fmt.Sprint(args...)) - os.Exit(1) -} - -func (g *loggerT) Fatalln(args ...any) { - g.output(fatalLog, fmt.Sprintln(args...)) - os.Exit(1) -} - -func (g *loggerT) Fatalf(format string, args ...any) { - g.output(fatalLog, fmt.Sprintf(format, args...)) - os.Exit(1) -} - -func (g *loggerT) V(l int) bool { - return l <= g.v -} - // DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements // DepthLoggerV2, the below functions will be called with the appropriate stack // depth set for trivial functions the logger may ignore. @@ -245,14 +94,4 @@ func (g *loggerT) V(l int) bool { // // Notice: This type is EXPERIMENTAL and may be changed or removed in a // later release. -type DepthLoggerV2 interface { - LoggerV2 - // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println. - InfoDepth(depth int, args ...any) - // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println. - WarningDepth(depth int, args ...any) - // ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println. - ErrorDepth(depth int, args ...any) - // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println. - FatalDepth(depth int, args ...any) -} +type DepthLoggerV2 internal.DepthLoggerV2 diff --git a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go index dfe18b0892..bb531225d5 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go +++ b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go @@ -46,7 +46,7 @@ type entry interface { // channelMap is the storage data structure for channelz. // -// Methods of channelMap can be divided in two two categories with respect to +// Methods of channelMap can be divided into two categories with respect to // locking. // // 1. Methods acquire the global lock. diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go index d906487139..00abc7c2be 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go @@ -46,6 +46,10 @@ var ( // by setting the environment variable "GRPC_ENFORCE_ALPN_ENABLED" to "true" // or "false". EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", false) + // XDSFallbackSupport is the env variable that controls whether support for + // xDS fallback is turned on. If this is unset or is false, only the first + // xDS server in the list of server configs will be used. + XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", false) ) func boolFromEnv(envVar string, def bool) bool { diff --git a/vendor/google.golang.org/grpc/internal/experimental.go b/vendor/google.golang.org/grpc/internal/experimental.go index 7f7044e173..7617be2158 100644 --- a/vendor/google.golang.org/grpc/internal/experimental.go +++ b/vendor/google.golang.org/grpc/internal/experimental.go @@ -18,11 +18,11 @@ package internal var ( - // WithRecvBufferPool is implemented by the grpc package and returns a dial + // WithBufferPool is implemented by the grpc package and returns a dial // option to configure a shared buffer pool for a grpc.ClientConn. - WithRecvBufferPool any // func (grpc.SharedBufferPool) grpc.DialOption + WithBufferPool any // func (grpc.SharedBufferPool) grpc.DialOption - // RecvBufferPool is implemented by the grpc package and returns a server + // BufferPool is implemented by the grpc package and returns a server // option to configure a shared buffer pool for a grpc.Server. - RecvBufferPool any // func (grpc.SharedBufferPool) grpc.ServerOption + BufferPool any // func (grpc.SharedBufferPool) grpc.ServerOption ) diff --git a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go b/vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go similarity index 63% rename from vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go rename to vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go index faa998de76..092ad187a2 100644 --- a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go +++ b/vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go @@ -16,17 +16,21 @@ * */ +// Package grpclog provides logging functionality for internal gRPC packages, +// outside of the functionality provided by the external `grpclog` package. package grpclog import ( "fmt" + + "google.golang.org/grpc/grpclog" ) // PrefixLogger does logging with a prefix. // // Logging method on a nil logs without any prefix. type PrefixLogger struct { - logger DepthLoggerV2 + logger grpclog.DepthLoggerV2 prefix string } @@ -38,7 +42,7 @@ func (pl *PrefixLogger) Infof(format string, args ...any) { pl.logger.InfoDepth(1, fmt.Sprintf(format, args...)) return } - InfoDepth(1, fmt.Sprintf(format, args...)) + grpclog.InfoDepth(1, fmt.Sprintf(format, args...)) } // Warningf does warning logging. @@ -48,7 +52,7 @@ func (pl *PrefixLogger) Warningf(format string, args ...any) { pl.logger.WarningDepth(1, fmt.Sprintf(format, args...)) return } - WarningDepth(1, fmt.Sprintf(format, args...)) + grpclog.WarningDepth(1, fmt.Sprintf(format, args...)) } // Errorf does error logging. @@ -58,36 +62,18 @@ func (pl *PrefixLogger) Errorf(format string, args ...any) { pl.logger.ErrorDepth(1, fmt.Sprintf(format, args...)) return } - ErrorDepth(1, fmt.Sprintf(format, args...)) -} - -// Debugf does info logging at verbose level 2. -func (pl *PrefixLogger) Debugf(format string, args ...any) { - // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe - // rewrite PrefixLogger a little to ensure that we don't use the global - // `Logger` here, and instead use the `logger` field. - if !Logger.V(2) { - return - } - if pl != nil { - // Handle nil, so the tests can pass in a nil logger. - format = pl.prefix + format - pl.logger.InfoDepth(1, fmt.Sprintf(format, args...)) - return - } - InfoDepth(1, fmt.Sprintf(format, args...)) - + grpclog.ErrorDepth(1, fmt.Sprintf(format, args...)) } // V reports whether verbosity level l is at least the requested verbose level. func (pl *PrefixLogger) V(l int) bool { - // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe - // rewrite PrefixLogger a little to ensure that we don't use the global - // `Logger` here, and instead use the `logger` field. - return Logger.V(l) + if pl != nil { + return pl.logger.V(l) + } + return true } // NewPrefixLogger creates a prefix logger with the given prefix. -func NewPrefixLogger(logger DepthLoggerV2, prefix string) *PrefixLogger { +func NewPrefixLogger(logger grpclog.DepthLoggerV2, prefix string) *PrefixLogger { return &PrefixLogger{logger: logger, prefix: prefix} } diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go index f7f40a16ac..19b9d63927 100644 --- a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go +++ b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go @@ -53,16 +53,28 @@ func NewCallbackSerializer(ctx context.Context) *CallbackSerializer { return cs } -// Schedule adds a callback to be scheduled after existing callbacks are run. +// TrySchedule tries to schedules the provided callback function f to be +// executed in the order it was added. This is a best-effort operation. If the +// context passed to NewCallbackSerializer was canceled before this method is +// called, the callback will not be scheduled. // // Callbacks are expected to honor the context when performing any blocking // operations, and should return early when the context is canceled. +func (cs *CallbackSerializer) TrySchedule(f func(ctx context.Context)) { + cs.callbacks.Put(f) +} + +// ScheduleOr schedules the provided callback function f to be executed in the +// order it was added. If the context passed to NewCallbackSerializer has been +// canceled before this method is called, the onFailure callback will be +// executed inline instead. // -// Return value indicates if the callback was successfully added to the list of -// callbacks to be executed by the serializer. It is not possible to add -// callbacks once the context passed to NewCallbackSerializer is cancelled. -func (cs *CallbackSerializer) Schedule(f func(ctx context.Context)) bool { - return cs.callbacks.Put(f) == nil +// Callbacks are expected to honor the context when performing any blocking +// operations, and should return early when the context is canceled. +func (cs *CallbackSerializer) ScheduleOr(f func(ctx context.Context), onFailure func()) { + if cs.callbacks.Put(f) != nil { + onFailure() + } } func (cs *CallbackSerializer) run(ctx context.Context) { diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go index aef8cec1ab..6d8c2f518d 100644 --- a/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go +++ b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go @@ -77,7 +77,7 @@ func (ps *PubSub) Subscribe(sub Subscriber) (cancel func()) { if ps.msg != nil { msg := ps.msg - ps.cs.Schedule(func(context.Context) { + ps.cs.TrySchedule(func(context.Context) { ps.mu.Lock() defer ps.mu.Unlock() if !ps.subscribers[sub] { @@ -103,7 +103,7 @@ func (ps *PubSub) Publish(msg any) { ps.msg = msg for sub := range ps.subscribers { s := sub - ps.cs.Schedule(func(context.Context) { + ps.cs.TrySchedule(func(context.Context) { ps.mu.Lock() defer ps.mu.Unlock() if !ps.subscribers[s] { diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go index 5d66539869..65f936a623 100644 --- a/vendor/google.golang.org/grpc/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -208,6 +208,27 @@ var ( // ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n // is the number of elements. swap swaps the elements with indexes i and j. ShuffleAddressListForTesting any // func(n int, swap func(i, j int)) + + // ConnectedAddress returns the connected address for a SubConnState. The + // address is only valid if the state is READY. + ConnectedAddress any // func (scs SubConnState) resolver.Address + + // SetConnectedAddress sets the connected address for a SubConnState. + SetConnectedAddress any // func(scs *SubConnState, addr resolver.Address) + + // SnapshotMetricRegistryForTesting snapshots the global data of the metric + // registry. Registers a cleanup function on the provided testing.T that + // sets the metric registry to its original state. Only called in testing + // functions. + SnapshotMetricRegistryForTesting any // func(t *testing.T) + + // SetDefaultBufferPoolForTesting updates the default buffer pool, for + // testing purposes. + SetDefaultBufferPoolForTesting any // func(mem.BufferPool) + + // SetBufferPoolingThresholdForTesting updates the buffer pooling threshold, for + // testing purposes. + SetBufferPoolingThresholdForTesting any // func(int) ) // HealthChecker defines the signature of the client-side LB channel health diff --git a/vendor/google.golang.org/grpc/internal/stats/labels.go b/vendor/google.golang.org/grpc/internal/stats/labels.go new file mode 100644 index 0000000000..fd33af51ae --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/stats/labels.go @@ -0,0 +1,42 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package stats provides internal stats related functionality. +package stats + +import "context" + +// Labels are the labels for metrics. +type Labels struct { + // TelemetryLabels are the telemetry labels to record. + TelemetryLabels map[string]string +} + +type labelsKey struct{} + +// GetLabels returns the Labels stored in the context, or nil if there is one. +func GetLabels(ctx context.Context) *Labels { + labels, _ := ctx.Value(labelsKey{}).(*Labels) + return labels +} + +// SetLabels sets the Labels in the context. +func SetLabels(ctx context.Context, labels *Labels) context.Context { + // could also append + return context.WithValue(ctx, labelsKey{}, labels) +} diff --git a/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go b/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go new file mode 100644 index 0000000000..be110d41f9 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go @@ -0,0 +1,95 @@ +/* + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package stats + +import ( + "fmt" + + estats "google.golang.org/grpc/experimental/stats" + "google.golang.org/grpc/stats" +) + +// MetricsRecorderList forwards Record calls to all of its metricsRecorders. +// +// It eats any record calls where the label values provided do not match the +// number of label keys. +type MetricsRecorderList struct { + // metricsRecorders are the metrics recorders this list will forward to. + metricsRecorders []estats.MetricsRecorder +} + +// NewMetricsRecorderList creates a new metric recorder list with all the stats +// handlers provided which implement the MetricsRecorder interface. +// If no stats handlers provided implement the MetricsRecorder interface, +// the MetricsRecorder list returned is a no-op. +func NewMetricsRecorderList(shs []stats.Handler) *MetricsRecorderList { + var mrs []estats.MetricsRecorder + for _, sh := range shs { + if mr, ok := sh.(estats.MetricsRecorder); ok { + mrs = append(mrs, mr) + } + } + return &MetricsRecorderList{ + metricsRecorders: mrs, + } +} + +func verifyLabels(desc *estats.MetricDescriptor, labelsRecv ...string) { + if got, want := len(labelsRecv), len(desc.Labels)+len(desc.OptionalLabels); got != want { + panic(fmt.Sprintf("Received %d labels in call to record metric %q, but expected %d.", got, desc.Name, want)) + } +} + +func (l *MetricsRecorderList) RecordInt64Count(handle *estats.Int64CountHandle, incr int64, labels ...string) { + verifyLabels(handle.Descriptor(), labels...) + + for _, metricRecorder := range l.metricsRecorders { + metricRecorder.RecordInt64Count(handle, incr, labels...) + } +} + +func (l *MetricsRecorderList) RecordFloat64Count(handle *estats.Float64CountHandle, incr float64, labels ...string) { + verifyLabels(handle.Descriptor(), labels...) + + for _, metricRecorder := range l.metricsRecorders { + metricRecorder.RecordFloat64Count(handle, incr, labels...) + } +} + +func (l *MetricsRecorderList) RecordInt64Histo(handle *estats.Int64HistoHandle, incr int64, labels ...string) { + verifyLabels(handle.Descriptor(), labels...) + + for _, metricRecorder := range l.metricsRecorders { + metricRecorder.RecordInt64Histo(handle, incr, labels...) + } +} + +func (l *MetricsRecorderList) RecordFloat64Histo(handle *estats.Float64HistoHandle, incr float64, labels ...string) { + verifyLabels(handle.Descriptor(), labels...) + + for _, metricRecorder := range l.metricsRecorders { + metricRecorder.RecordFloat64Histo(handle, incr, labels...) + } +} + +func (l *MetricsRecorderList) RecordInt64Gauge(handle *estats.Int64GaugeHandle, incr int64, labels ...string) { + verifyLabels(handle.Descriptor(), labels...) + + for _, metricRecorder := range l.metricsRecorders { + metricRecorder.RecordInt64Gauge(handle, incr, labels...) + } +} diff --git a/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go b/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go index 078137b7fd..7e7aaa5463 100644 --- a/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go +++ b/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go @@ -44,7 +44,7 @@ func NetDialerWithTCPKeepalive() *net.Dialer { // combination of unconditionally enabling TCP keepalives here, and // disabling the overriding of TCP keepalive parameters by setting the // KeepAlive field to a negative value above, results in OS defaults for - // the TCP keealive interval and time parameters. + // the TCP keepalive interval and time parameters. Control: func(_, _ string, c syscall.RawConn) error { return c.Control(func(fd uintptr) { unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 1) diff --git a/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go b/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go index fd7d43a890..d5c1085eea 100644 --- a/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go +++ b/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go @@ -44,7 +44,7 @@ func NetDialerWithTCPKeepalive() *net.Dialer { // combination of unconditionally enabling TCP keepalives here, and // disabling the overriding of TCP keepalive parameters by setting the // KeepAlive field to a negative value above, results in OS defaults for - // the TCP keealive interval and time parameters. + // the TCP keepalive interval and time parameters. Control: func(_, _ string, c syscall.RawConn) error { return c.Control(func(fd uintptr) { windows.SetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_KEEPALIVE, 1) diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go index 3deadfb4a2..ea0633bbda 100644 --- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go +++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go @@ -32,6 +32,7 @@ import ( "golang.org/x/net/http2/hpack" "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" + "google.golang.org/grpc/mem" "google.golang.org/grpc/status" ) @@ -148,9 +149,9 @@ type dataFrame struct { streamID uint32 endStream bool h []byte - d []byte + reader mem.Reader // onEachWrite is called every time - // a part of d is written out. + // a part of data is written out. onEachWrite func() } @@ -289,18 +290,22 @@ func (l *outStreamList) dequeue() *outStream { } // controlBuffer is a way to pass information to loopy. -// Information is passed as specific struct types called control frames. -// A control frame not only represents data, messages or headers to be sent out -// but can also be used to instruct loopy to update its internal state. -// It shouldn't be confused with an HTTP2 frame, although some of the control frames -// like dataFrame and headerFrame do go out on wire as HTTP2 frames. +// +// Information is passed as specific struct types called control frames. A +// control frame not only represents data, messages or headers to be sent out +// but can also be used to instruct loopy to update its internal state. It +// shouldn't be confused with an HTTP2 frame, although some of the control +// frames like dataFrame and headerFrame do go out on wire as HTTP2 frames. type controlBuffer struct { - ch chan struct{} - done <-chan struct{} + wakeupCh chan struct{} // Unblocks readers waiting for something to read. + done <-chan struct{} // Closed when the transport is done. + + // Mutex guards all the fields below, except trfChan which can be read + // atomically without holding mu. mu sync.Mutex - consumerWaiting bool - list *itemList - err error + consumerWaiting bool // True when readers are blocked waiting for new data. + closed bool // True when the controlbuf is finished. + list *itemList // List of queued control frames. // transportResponseFrames counts the number of queued items that represent // the response of an action initiated by the peer. trfChan is created @@ -308,47 +313,59 @@ type controlBuffer struct { // closed and nilled when transportResponseFrames drops below the // threshold. Both fields are protected by mu. transportResponseFrames int - trfChan atomic.Value // chan struct{} + trfChan atomic.Pointer[chan struct{}] } func newControlBuffer(done <-chan struct{}) *controlBuffer { return &controlBuffer{ - ch: make(chan struct{}, 1), - list: &itemList{}, - done: done, + wakeupCh: make(chan struct{}, 1), + list: &itemList{}, + done: done, } } -// throttle blocks if there are too many incomingSettings/cleanupStreams in the -// controlbuf. +// throttle blocks if there are too many frames in the control buf that +// represent the response of an action initiated by the peer, like +// incomingSettings cleanupStreams etc. func (c *controlBuffer) throttle() { - ch, _ := c.trfChan.Load().(chan struct{}) - if ch != nil { + if ch := c.trfChan.Load(); ch != nil { select { - case <-ch: + case <-(*ch): case <-c.done: } } } +// put adds an item to the controlbuf. func (c *controlBuffer) put(it cbItem) error { _, err := c.executeAndPut(nil, it) return err } +// executeAndPut runs f, and if the return value is true, adds the given item to +// the controlbuf. The item could be nil, in which case, this method simply +// executes f and does not add the item to the controlbuf. +// +// The first return value indicates whether the item was successfully added to +// the control buffer. A non-nil error, specifically ErrConnClosing, is returned +// if the control buffer is already closed. func (c *controlBuffer) executeAndPut(f func() bool, it cbItem) (bool, error) { - var wakeUp bool c.mu.Lock() - if c.err != nil { - c.mu.Unlock() - return false, c.err + defer c.mu.Unlock() + + if c.closed { + return false, ErrConnClosing } if f != nil { if !f() { // f wasn't successful - c.mu.Unlock() return false, nil } } + if it == nil { + return true, nil + } + + var wakeUp bool if c.consumerWaiting { wakeUp = true c.consumerWaiting = false @@ -359,98 +376,102 @@ func (c *controlBuffer) executeAndPut(f func() bool, it cbItem) (bool, error) { if c.transportResponseFrames == maxQueuedTransportResponseFrames { // We are adding the frame that puts us over the threshold; create // a throttling channel. - c.trfChan.Store(make(chan struct{})) + ch := make(chan struct{}) + c.trfChan.Store(&ch) } } - c.mu.Unlock() if wakeUp { select { - case c.ch <- struct{}{}: + case c.wakeupCh <- struct{}{}: default: } } return true, nil } -// Note argument f should never be nil. -func (c *controlBuffer) execute(f func(it any) bool, it any) (bool, error) { - c.mu.Lock() - if c.err != nil { - c.mu.Unlock() - return false, c.err - } - if !f(it) { // f wasn't successful - c.mu.Unlock() - return false, nil - } - c.mu.Unlock() - return true, nil -} - +// get returns the next control frame from the control buffer. If block is true +// **and** there are no control frames in the control buffer, the call blocks +// until one of the conditions is met: there is a frame to return or the +// transport is closed. func (c *controlBuffer) get(block bool) (any, error) { for { c.mu.Lock() - if c.err != nil { + frame, err := c.getOnceLocked() + if frame != nil || err != nil || !block { + // If we read a frame or an error, we can return to the caller. The + // call to getOnceLocked() returns a nil frame and a nil error if + // there is nothing to read, and in that case, if the caller asked + // us not to block, we can return now as well. c.mu.Unlock() - return nil, c.err - } - if !c.list.isEmpty() { - h := c.list.dequeue().(cbItem) - if h.isTransportResponseFrame() { - if c.transportResponseFrames == maxQueuedTransportResponseFrames { - // We are removing the frame that put us over the - // threshold; close and clear the throttling channel. - ch := c.trfChan.Load().(chan struct{}) - close(ch) - c.trfChan.Store((chan struct{})(nil)) - } - c.transportResponseFrames-- - } - c.mu.Unlock() - return h, nil - } - if !block { - c.mu.Unlock() - return nil, nil + return frame, err } c.consumerWaiting = true c.mu.Unlock() + + // Release the lock above and wait to be woken up. select { - case <-c.ch: + case <-c.wakeupCh: case <-c.done: return nil, errors.New("transport closed by client") } } } +// Callers must not use this method, but should instead use get(). +// +// Caller must hold c.mu. +func (c *controlBuffer) getOnceLocked() (any, error) { + if c.closed { + return false, ErrConnClosing + } + if c.list.isEmpty() { + return nil, nil + } + h := c.list.dequeue().(cbItem) + if h.isTransportResponseFrame() { + if c.transportResponseFrames == maxQueuedTransportResponseFrames { + // We are removing the frame that put us over the + // threshold; close and clear the throttling channel. + ch := c.trfChan.Swap(nil) + close(*ch) + } + c.transportResponseFrames-- + } + return h, nil +} + +// finish closes the control buffer, cleaning up any streams that have queued +// header frames. Once this method returns, no more frames can be added to the +// control buffer, and attempts to do so will return ErrConnClosing. func (c *controlBuffer) finish() { c.mu.Lock() - if c.err != nil { - c.mu.Unlock() + defer c.mu.Unlock() + + if c.closed { return } - c.err = ErrConnClosing + c.closed = true // There may be headers for streams in the control buffer. // These streams need to be cleaned out since the transport // is still not aware of these yet. for head := c.list.dequeueAll(); head != nil; head = head.next { - hdr, ok := head.it.(*headerFrame) - if !ok { - continue - } - if hdr.onOrphaned != nil { // It will be nil on the server-side. - hdr.onOrphaned(ErrConnClosing) + switch v := head.it.(type) { + case *headerFrame: + if v.onOrphaned != nil { // It will be nil on the server-side. + v.onOrphaned(ErrConnClosing) + } + case *dataFrame: + _ = v.reader.Close() } } + // In case throttle() is currently in flight, it needs to be unblocked. // Otherwise, the transport may not close, since the transport is closed by // the reader encountering the connection error. - ch, _ := c.trfChan.Load().(chan struct{}) + ch := c.trfChan.Swap(nil) if ch != nil { - close(ch) + close(*ch) } - c.trfChan.Store((chan struct{})(nil)) - c.mu.Unlock() } type side int @@ -466,7 +487,7 @@ const ( // stream maintains a queue of data frames; as loopy receives data frames // it gets added to the queue of the relevant stream. // Loopy goes over this list of active streams by processing one node every iteration, -// thereby closely resemebling to a round-robin scheduling over all streams. While +// thereby closely resembling a round-robin scheduling over all streams. While // processing a stream, loopy writes out data bytes from this stream capped by the min // of http2MaxFrameLen, connection-level flow control and stream-level flow control. type loopyWriter struct { @@ -490,12 +511,13 @@ type loopyWriter struct { draining bool conn net.Conn logger *grpclog.PrefixLogger + bufferPool mem.BufferPool // Side-specific handlers ssGoAwayHandler func(*goAway) (bool, error) } -func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger, goAwayHandler func(*goAway) (bool, error)) *loopyWriter { +func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger, goAwayHandler func(*goAway) (bool, error), bufferPool mem.BufferPool) *loopyWriter { var buf bytes.Buffer l := &loopyWriter{ side: s, @@ -511,6 +533,7 @@ func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimato conn: conn, logger: logger, ssGoAwayHandler: goAwayHandler, + bufferPool: bufferPool, } return l } @@ -768,6 +791,11 @@ func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error { // not be established yet. delete(l.estdStreams, c.streamID) str.deleteSelf() + for head := str.itl.dequeueAll(); head != nil; head = head.next { + if df, ok := head.it.(*dataFrame); ok { + _ = df.reader.Close() + } + } } if c.rst { // If RST_STREAM needs to be sent. if err := l.framer.fr.WriteRSTStream(c.streamID, c.rstCode); err != nil { @@ -903,16 +931,18 @@ func (l *loopyWriter) processData() (bool, error) { dataItem := str.itl.peek().(*dataFrame) // Peek at the first data item this stream. // A data item is represented by a dataFrame, since it later translates into // multiple HTTP2 data frames. - // Every dataFrame has two buffers; h that keeps grpc-message header and d that is actual data. - // As an optimization to keep wire traffic low, data from d is copied to h to make as big as the - // maximum possible HTTP2 frame size. + // Every dataFrame has two buffers; h that keeps grpc-message header and data + // that is the actual message. As an optimization to keep wire traffic low, data + // from data is copied to h to make as big as the maximum possible HTTP2 frame + // size. - if len(dataItem.h) == 0 && len(dataItem.d) == 0 { // Empty data frame + if len(dataItem.h) == 0 && dataItem.reader.Remaining() == 0 { // Empty data frame // Client sends out empty data frame with endStream = true if err := l.framer.fr.WriteData(dataItem.streamID, dataItem.endStream, nil); err != nil { return false, err } str.itl.dequeue() // remove the empty data item from stream + _ = dataItem.reader.Close() if str.itl.isEmpty() { str.state = empty } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // the next item is trailers. @@ -927,9 +957,7 @@ func (l *loopyWriter) processData() (bool, error) { } return false, nil } - var ( - buf []byte - ) + // Figure out the maximum size we can send maxSize := http2MaxFrameLen if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota <= 0 { // stream-level flow control. @@ -943,43 +971,50 @@ func (l *loopyWriter) processData() (bool, error) { } // Compute how much of the header and data we can send within quota and max frame length hSize := min(maxSize, len(dataItem.h)) - dSize := min(maxSize-hSize, len(dataItem.d)) - if hSize != 0 { - if dSize == 0 { - buf = dataItem.h - } else { - // We can add some data to grpc message header to distribute bytes more equally across frames. - // Copy on the stack to avoid generating garbage - var localBuf [http2MaxFrameLen]byte - copy(localBuf[:hSize], dataItem.h) - copy(localBuf[hSize:], dataItem.d[:dSize]) - buf = localBuf[:hSize+dSize] - } - } else { - buf = dataItem.d - } - + dSize := min(maxSize-hSize, dataItem.reader.Remaining()) + remainingBytes := len(dataItem.h) + dataItem.reader.Remaining() - hSize - dSize size := hSize + dSize + var buf *[]byte + + if hSize != 0 && dSize == 0 { + buf = &dataItem.h + } else { + // Note: this is only necessary because the http2.Framer does not support + // partially writing a frame, so the sequence must be materialized into a buffer. + // TODO: Revisit once https://github.com/golang/go/issues/66655 is addressed. + pool := l.bufferPool + if pool == nil { + // Note that this is only supposed to be nil in tests. Otherwise, stream is + // always initialized with a BufferPool. + pool = mem.DefaultBufferPool() + } + buf = pool.Get(size) + defer pool.Put(buf) + + copy((*buf)[:hSize], dataItem.h) + _, _ = dataItem.reader.Read((*buf)[hSize:]) + } + // Now that outgoing flow controls are checked we can replenish str's write quota str.wq.replenish(size) var endStream bool // If this is the last data message on this stream and all of it can be written in this iteration. - if dataItem.endStream && len(dataItem.h)+len(dataItem.d) <= size { + if dataItem.endStream && remainingBytes == 0 { endStream = true } if dataItem.onEachWrite != nil { dataItem.onEachWrite() } - if err := l.framer.fr.WriteData(dataItem.streamID, endStream, buf[:size]); err != nil { + if err := l.framer.fr.WriteData(dataItem.streamID, endStream, (*buf)[:size]); err != nil { return false, err } str.bytesOutStanding += size l.sendQuota -= uint32(size) dataItem.h = dataItem.h[hSize:] - dataItem.d = dataItem.d[dSize:] - if len(dataItem.h) == 0 && len(dataItem.d) == 0 { // All the data from that message was written out. + if remainingBytes == 0 { // All the data from that message was written out. + _ = dataItem.reader.Close() str.itl.dequeue() } if str.itl.isEmpty() { diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go index 4a3ddce29a..e1cd86b2fc 100644 --- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go @@ -24,7 +24,6 @@ package transport import ( - "bytes" "context" "errors" "fmt" @@ -40,6 +39,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" + "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/stats" @@ -50,7 +50,7 @@ import ( // NewServerHandlerTransport returns a ServerTransport handling gRPC from // inside an http.Handler, or writes an HTTP error to w and returns an error. // It requires that the http Server supports HTTP/2. -func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []stats.Handler) (ServerTransport, error) { +func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []stats.Handler, bufferPool mem.BufferPool) (ServerTransport, error) { if r.Method != http.MethodPost { w.Header().Set("Allow", http.MethodPost) msg := fmt.Sprintf("invalid gRPC request method %q", r.Method) @@ -98,6 +98,7 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []s contentType: contentType, contentSubtype: contentSubtype, stats: stats, + bufferPool: bufferPool, } st.logger = prefixLoggerForServerHandlerTransport(st) @@ -171,6 +172,8 @@ type serverHandlerTransport struct { stats []stats.Handler logger *grpclog.PrefixLogger + + bufferPool mem.BufferPool } func (ht *serverHandlerTransport) Close(err error) { @@ -244,6 +247,7 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro } s.hdrMu.Lock() + defer s.hdrMu.Unlock() if p := st.Proto(); p != nil && len(p.Details) > 0 { delete(s.trailer, grpcStatusDetailsBinHeader) stBytes, err := proto.Marshal(p) @@ -268,7 +272,6 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro } } } - s.hdrMu.Unlock() }) if err == nil { // transport has not been closed @@ -330,16 +333,28 @@ func (ht *serverHandlerTransport) writeCustomHeaders(s *Stream) { s.hdrMu.Unlock() } -func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { +func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error { + // Always take a reference because otherwise there is no guarantee the data will + // be available after this function returns. This is what callers to Write + // expect. + data.Ref() headersWritten := s.updateHeaderSent() - return ht.do(func() { + err := ht.do(func() { + defer data.Free() if !headersWritten { ht.writePendingHeaders(s) } ht.rw.Write(hdr) - ht.rw.Write(data) + for _, b := range data { + _, _ = ht.rw.Write(b.ReadOnlyData()) + } ht.rw.(http.Flusher).Flush() }) + if err != nil { + data.Free() + return err + } + return nil } func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error { @@ -406,7 +421,7 @@ func (ht *serverHandlerTransport) HandleStreams(ctx context.Context, startStream headerWireLength: 0, // won't have access to header wire length until golang/go#18997. } s.trReader = &transportReader{ - reader: &recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: s.buf, freeBuffer: func(*bytes.Buffer) {}}, + reader: &recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: s.buf}, windowHandler: func(int) {}, } @@ -415,21 +430,19 @@ func (ht *serverHandlerTransport) HandleStreams(ctx context.Context, startStream go func() { defer close(readerDone) - // TODO: minimize garbage, optimize recvBuffer code/ownership - const readSize = 8196 - for buf := make([]byte, readSize); ; { - n, err := req.Body.Read(buf) + for { + buf := ht.bufferPool.Get(http2MaxFrameLen) + n, err := req.Body.Read(*buf) if n > 0 { - s.buf.put(recvMsg{buffer: bytes.NewBuffer(buf[:n:n])}) - buf = buf[n:] + *buf = (*buf)[:n] + s.buf.put(recvMsg{buffer: mem.NewBuffer(buf, ht.bufferPool)}) + } else { + ht.bufferPool.Put(buf) } if err != nil { s.buf.put(recvMsg{err: mapRecvMsgError(err)}) return } - if len(buf) == 0 { - buf = make([]byte, readSize) - } } }() diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go index 3c63c70698..f46194fdc6 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go @@ -47,6 +47,7 @@ import ( isyscall "google.golang.org/grpc/internal/syscall" "google.golang.org/grpc/internal/transport/networktype" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/resolver" @@ -59,6 +60,8 @@ import ( // atomically. var clientConnectionCounter uint64 +var goAwayLoopyWriterTimeout = 5 * time.Second + var metadataFromOutgoingContextRaw = internal.FromOutgoingContextRaw.(func(context.Context) (metadata.MD, [][]string, bool)) // http2Client implements the ClientTransport interface with HTTP2. @@ -144,7 +147,7 @@ type http2Client struct { onClose func(GoAwayReason) - bufferPool *bufferPool + bufferPool mem.BufferPool connectionID uint64 logger *grpclog.PrefixLogger @@ -229,7 +232,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts } }(conn) - // The following defer and goroutine monitor the connectCtx for cancelation + // The following defer and goroutine monitor the connectCtx for cancellation // and deadline. On context expiration, the connection is hard closed and // this function will naturally fail as a result. Otherwise, the defer // waits for the goroutine to exit to prevent the context from being @@ -346,7 +349,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts streamQuota: defaultMaxStreamsClient, streamsQuotaAvailable: make(chan struct{}, 1), keepaliveEnabled: keepaliveEnabled, - bufferPool: newBufferPool(), + bufferPool: opts.BufferPool, onClose: onClose, } var czSecurity credentials.ChannelzSecurityValue @@ -463,7 +466,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts return nil, err } go func() { - t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler) + t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler, t.bufferPool) if err := t.loopy.run(); !isIOError(err) { // Immediately close the connection, as the loopy writer returns // when there are no more active streams and we were draining (the @@ -504,7 +507,6 @@ func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream { closeStream: func(err error) { t.CloseStream(s, err) }, - freeBuffer: t.bufferPool.put, }, windowHandler: func(n int) { t.updateWindow(s, uint32(n)) @@ -983,6 +985,7 @@ func (t *http2Client) closeStream(s *Stream, err error, rst bool, rstCode http2. // only once on a transport. Once it is called, the transport should not be // accessed anymore. func (t *http2Client) Close(err error) { + t.conn.SetWriteDeadline(time.Now().Add(time.Second * 10)) t.mu.Lock() // Make sure we only close once. if t.state == closing { @@ -1006,10 +1009,20 @@ func (t *http2Client) Close(err error) { t.kpDormancyCond.Signal() } t.mu.Unlock() + // Per HTTP/2 spec, a GOAWAY frame must be sent before closing the - // connection. See https://httpwg.org/specs/rfc7540.html#GOAWAY. + // connection. See https://httpwg.org/specs/rfc7540.html#GOAWAY. It + // also waits for loopyWriter to be closed with a timer to avoid the + // long blocking in case the connection is blackholed, i.e. TCP is + // just stuck. t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte("client transport shutdown"), closeConn: err}) - <-t.writerDone + timer := time.NewTimer(goAwayLoopyWriterTimeout) + defer timer.Stop() + select { + case <-t.writerDone: // success + case <-timer.C: + t.logger.Infof("Failed to write a GOAWAY frame as part of connection close after %s. Giving up and closing the transport.", goAwayLoopyWriterTimeout) + } t.cancel() t.conn.Close() channelz.RemoveEntry(t.channelz.ID) @@ -1065,27 +1078,36 @@ func (t *http2Client) GracefulClose() { // Write formats the data into HTTP2 data frame(s) and sends it out. The caller // should proceed only if Write returns nil. -func (t *http2Client) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { +func (t *http2Client) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error { + reader := data.Reader() + if opts.Last { // If it's the last message, update stream state. if !s.compareAndSwapState(streamActive, streamWriteDone) { + _ = reader.Close() return errStreamDone } } else if s.getState() != streamActive { + _ = reader.Close() return errStreamDone } df := &dataFrame{ streamID: s.id, endStream: opts.Last, h: hdr, - d: data, + reader: reader, } - if hdr != nil || data != nil { // If it's not an empty data frame, check quota. - if err := s.wq.get(int32(len(hdr) + len(data))); err != nil { + if hdr != nil || df.reader.Remaining() != 0 { // If it's not an empty data frame, check quota. + if err := s.wq.get(int32(len(hdr) + df.reader.Remaining())); err != nil { + _ = reader.Close() return err } } - return t.controlBuf.put(df) + if err := t.controlBuf.put(df); err != nil { + _ = reader.Close() + return err + } + return nil } func (t *http2Client) getStream(f http2.Frame) *Stream { @@ -1190,10 +1212,13 @@ func (t *http2Client) handleData(f *http2.DataFrame) { // guarantee f.Data() is consumed before the arrival of next frame. // Can this copy be eliminated? if len(f.Data()) > 0 { - buffer := t.bufferPool.get() - buffer.Reset() - buffer.Write(f.Data()) - s.write(recvMsg{buffer: buffer}) + pool := t.bufferPool + if pool == nil { + // Note that this is only supposed to be nil in tests. Otherwise, stream is + // always initialized with a BufferPool. + pool = mem.DefaultBufferPool() + } + s.write(recvMsg{buffer: mem.Copy(f.Data(), pool)}) } } // The server has closed the stream without sending trailers. Record that @@ -1222,7 +1247,7 @@ func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { if statusCode == codes.Canceled { if d, ok := s.ctx.Deadline(); ok && !d.After(time.Now()) { // Our deadline was already exceeded, and that was likely the cause - // of this cancelation. Alter the status code accordingly. + // of this cancellation. Alter the status code accordingly. statusCode = codes.DeadlineExceeded } } @@ -1307,7 +1332,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { id := f.LastStreamID if id > 0 && id%2 == 0 { t.mu.Unlock() - t.Close(connectionErrorf(true, nil, "received goaway with non-zero even-numbered numbered stream id: %v", id)) + t.Close(connectionErrorf(true, nil, "received goaway with non-zero even-numbered stream id: %v", id)) return } // A client can receive multiple GoAways from the server (see diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index b7091165b5..f5163f770c 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -39,6 +39,7 @@ import ( "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/internal/syscall" + "google.golang.org/grpc/mem" "google.golang.org/protobuf/proto" "google.golang.org/grpc/codes" @@ -119,7 +120,7 @@ type http2Server struct { // Fields below are for channelz metric collection. channelz *channelz.Socket - bufferPool *bufferPool + bufferPool mem.BufferPool connectionID uint64 @@ -261,7 +262,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, idle: time.Now(), kep: kep, initialWindowSize: iwz, - bufferPool: newBufferPool(), + bufferPool: config.BufferPool, } var czSecurity credentials.ChannelzSecurityValue if au, ok := authInfo.(credentials.ChannelzSecurityInfo); ok { @@ -330,7 +331,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, t.handleSettings(sf) go func() { - t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler) + t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler, t.bufferPool) err := t.loopy.run() close(t.loopyWriterDone) if !isIOError(err) { @@ -613,10 +614,9 @@ func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeade s.wq = newWriteQuota(defaultWriteQuota, s.ctxDone) s.trReader = &transportReader{ reader: &recvBufferReader{ - ctx: s.ctx, - ctxDone: s.ctxDone, - recv: s.buf, - freeBuffer: t.bufferPool.put, + ctx: s.ctx, + ctxDone: s.ctxDone, + recv: s.buf, }, windowHandler: func(n int) { t.updateWindow(s, uint32(n)) @@ -813,10 +813,13 @@ func (t *http2Server) handleData(f *http2.DataFrame) { // guarantee f.Data() is consumed before the arrival of next frame. // Can this copy be eliminated? if len(f.Data()) > 0 { - buffer := t.bufferPool.get() - buffer.Reset() - buffer.Write(f.Data()) - s.write(recvMsg{buffer: buffer}) + pool := t.bufferPool + if pool == nil { + // Note that this is only supposed to be nil in tests. Otherwise, stream is + // always initialized with a BufferPool. + pool = mem.DefaultBufferPool() + } + s.write(recvMsg{buffer: mem.Copy(f.Data(), pool)}) } } if f.StreamEnded() { @@ -1089,7 +1092,9 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { onWrite: t.setResetPingStrikes, } - success, err := t.controlBuf.execute(t.checkForHeaderListSize, trailingHeader) + success, err := t.controlBuf.executeAndPut(func() bool { + return t.checkForHeaderListSize(trailingHeader) + }, nil) if !success { if err != nil { return err @@ -1112,27 +1117,37 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { // Write converts the data into HTTP2 data frame and sends it out. Non-nil error // is returns if it fails (e.g., framing error, transport error). -func (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { +func (t *http2Server) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error { + reader := data.Reader() + if !s.isHeaderSent() { // Headers haven't been written yet. if err := t.WriteHeader(s, nil); err != nil { + _ = reader.Close() return err } } else { // Writing headers checks for this condition. if s.getState() == streamDone { + _ = reader.Close() return t.streamContextErr(s) } } + df := &dataFrame{ streamID: s.id, h: hdr, - d: data, + reader: reader, onEachWrite: t.setResetPingStrikes, } - if err := s.wq.get(int32(len(hdr) + len(data))); err != nil { + if err := s.wq.get(int32(len(hdr) + df.reader.Remaining())); err != nil { + _ = reader.Close() return t.streamContextErr(s) } - return t.controlBuf.put(df) + if err := t.controlBuf.put(df); err != nil { + _ = reader.Close() + return err + } + return nil } // keepalive running in a separate goroutine does the following: diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go index 39cef3bd44..f609c6c665 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http_util.go +++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go @@ -317,28 +317,32 @@ func newBufWriter(conn net.Conn, batchSize int, pool *sync.Pool) *bufWriter { return w } -func (w *bufWriter) Write(b []byte) (n int, err error) { +func (w *bufWriter) Write(b []byte) (int, error) { if w.err != nil { return 0, w.err } if w.batchSize == 0 { // Buffer has been disabled. - n, err = w.conn.Write(b) + n, err := w.conn.Write(b) return n, toIOError(err) } if w.buf == nil { b := w.pool.Get().(*[]byte) w.buf = *b } + written := 0 for len(b) > 0 { - nn := copy(w.buf[w.offset:], b) - b = b[nn:] - w.offset += nn - n += nn - if w.offset >= w.batchSize { - err = w.flushKeepBuffer() + copied := copy(w.buf[w.offset:], b) + b = b[copied:] + written += copied + w.offset += copied + if w.offset < w.batchSize { + continue + } + if err := w.flushKeepBuffer(); err != nil { + return written, err } } - return n, err + return written, nil } func (w *bufWriter) Flush() error { diff --git a/vendor/google.golang.org/grpc/internal/transport/proxy.go b/vendor/google.golang.org/grpc/internal/transport/proxy.go index 24fa103257..54b2244365 100644 --- a/vendor/google.golang.org/grpc/internal/transport/proxy.go +++ b/vendor/google.golang.org/grpc/internal/transport/proxy.go @@ -107,8 +107,14 @@ func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr stri } return nil, fmt.Errorf("failed to do connect handshake, response: %q", dump) } - - return &bufConn{Conn: conn, r: r}, nil + // The buffer could contain extra bytes from the target server, so we can't + // discard it. However, in many cases where the server waits for the client + // to send the first message (e.g. when TLS is being used), the buffer will + // be empty, so we can avoid the overhead of reading through this buffer. + if r.Buffered() != 0 { + return &bufConn{Conn: conn, r: r}, nil + } + return conn, nil } // proxyDial dials, connecting to a proxy first if necessary. Checks if a proxy diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go index 4b39c0ade9..fdd6fa86cc 100644 --- a/vendor/google.golang.org/grpc/internal/transport/transport.go +++ b/vendor/google.golang.org/grpc/internal/transport/transport.go @@ -22,7 +22,6 @@ package transport import ( - "bytes" "context" "errors" "fmt" @@ -37,6 +36,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/channelz" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/resolver" @@ -47,32 +47,10 @@ import ( const logLevel = 2 -type bufferPool struct { - pool sync.Pool -} - -func newBufferPool() *bufferPool { - return &bufferPool{ - pool: sync.Pool{ - New: func() any { - return new(bytes.Buffer) - }, - }, - } -} - -func (p *bufferPool) get() *bytes.Buffer { - return p.pool.Get().(*bytes.Buffer) -} - -func (p *bufferPool) put(b *bytes.Buffer) { - p.pool.Put(b) -} - // recvMsg represents the received msg from the transport. All transport // protocol specific info has been removed. type recvMsg struct { - buffer *bytes.Buffer + buffer mem.Buffer // nil: received some data // io.EOF: stream is completed. data is nil. // other non-nil error: transport failure. data is nil. @@ -102,6 +80,9 @@ func newRecvBuffer() *recvBuffer { func (b *recvBuffer) put(r recvMsg) { b.mu.Lock() if b.err != nil { + // drop the buffer on the floor. Since b.err is not nil, any subsequent reads + // will always return an error, making this buffer inaccessible. + r.buffer.Free() b.mu.Unlock() // An error had occurred earlier, don't accept more // data or errors. @@ -148,45 +129,70 @@ type recvBufferReader struct { ctx context.Context ctxDone <-chan struct{} // cache of ctx.Done() (for performance). recv *recvBuffer - last *bytes.Buffer // Stores the remaining data in the previous calls. + last mem.Buffer // Stores the remaining data in the previous calls. err error - freeBuffer func(*bytes.Buffer) } -// Read reads the next len(p) bytes from last. If last is drained, it tries to -// read additional data from recv. It blocks if there no additional data available -// in recv. If Read returns any non-nil error, it will continue to return that error. -func (r *recvBufferReader) Read(p []byte) (n int, err error) { +func (r *recvBufferReader) ReadHeader(header []byte) (n int, err error) { if r.err != nil { return 0, r.err } if r.last != nil { - // Read remaining data left in last call. - copied, _ := r.last.Read(p) - if r.last.Len() == 0 { - r.freeBuffer(r.last) - r.last = nil - } - return copied, nil + n, r.last = mem.ReadUnsafe(header, r.last) + return n, nil } if r.closeStream != nil { - n, r.err = r.readClient(p) + n, r.err = r.readHeaderClient(header) } else { - n, r.err = r.read(p) + n, r.err = r.readHeader(header) } return n, r.err } -func (r *recvBufferReader) read(p []byte) (n int, err error) { +// Read reads the next n bytes from last. If last is drained, it tries to read +// additional data from recv. It blocks if there no additional data available in +// recv. If Read returns any non-nil error, it will continue to return that +// error. +func (r *recvBufferReader) Read(n int) (buf mem.Buffer, err error) { + if r.err != nil { + return nil, r.err + } + if r.last != nil { + buf = r.last + if r.last.Len() > n { + buf, r.last = mem.SplitUnsafe(buf, n) + } else { + r.last = nil + } + return buf, nil + } + if r.closeStream != nil { + buf, r.err = r.readClient(n) + } else { + buf, r.err = r.read(n) + } + return buf, r.err +} + +func (r *recvBufferReader) readHeader(header []byte) (n int, err error) { select { case <-r.ctxDone: return 0, ContextErr(r.ctx.Err()) case m := <-r.recv.get(): - return r.readAdditional(m, p) + return r.readHeaderAdditional(m, header) } } -func (r *recvBufferReader) readClient(p []byte) (n int, err error) { +func (r *recvBufferReader) read(n int) (buf mem.Buffer, err error) { + select { + case <-r.ctxDone: + return nil, ContextErr(r.ctx.Err()) + case m := <-r.recv.get(): + return r.readAdditional(m, n) + } +} + +func (r *recvBufferReader) readHeaderClient(header []byte) (n int, err error) { // If the context is canceled, then closes the stream with nil metadata. // closeStream writes its error parameter to r.recv as a recvMsg. // r.readAdditional acts on that message and returns the necessary error. @@ -207,25 +213,67 @@ func (r *recvBufferReader) readClient(p []byte) (n int, err error) { // faster. r.closeStream(ContextErr(r.ctx.Err())) m := <-r.recv.get() - return r.readAdditional(m, p) + return r.readHeaderAdditional(m, header) case m := <-r.recv.get(): - return r.readAdditional(m, p) + return r.readHeaderAdditional(m, header) } } -func (r *recvBufferReader) readAdditional(m recvMsg, p []byte) (n int, err error) { +func (r *recvBufferReader) readClient(n int) (buf mem.Buffer, err error) { + // If the context is canceled, then closes the stream with nil metadata. + // closeStream writes its error parameter to r.recv as a recvMsg. + // r.readAdditional acts on that message and returns the necessary error. + select { + case <-r.ctxDone: + // Note that this adds the ctx error to the end of recv buffer, and + // reads from the head. This will delay the error until recv buffer is + // empty, thus will delay ctx cancellation in Recv(). + // + // It's done this way to fix a race between ctx cancel and trailer. The + // race was, stream.Recv() may return ctx error if ctxDone wins the + // race, but stream.Trailer() may return a non-nil md because the stream + // was not marked as done when trailer is received. This closeStream + // call will mark stream as done, thus fix the race. + // + // TODO: delaying ctx error seems like a unnecessary side effect. What + // we really want is to mark the stream as done, and return ctx error + // faster. + r.closeStream(ContextErr(r.ctx.Err())) + m := <-r.recv.get() + return r.readAdditional(m, n) + case m := <-r.recv.get(): + return r.readAdditional(m, n) + } +} + +func (r *recvBufferReader) readHeaderAdditional(m recvMsg, header []byte) (n int, err error) { r.recv.load() if m.err != nil { + if m.buffer != nil { + m.buffer.Free() + } return 0, m.err } - copied, _ := m.buffer.Read(p) - if m.buffer.Len() == 0 { - r.freeBuffer(m.buffer) - r.last = nil - } else { - r.last = m.buffer + + n, r.last = mem.ReadUnsafe(header, m.buffer) + + return n, nil +} + +func (r *recvBufferReader) readAdditional(m recvMsg, n int) (b mem.Buffer, err error) { + r.recv.load() + if m.err != nil { + if m.buffer != nil { + m.buffer.Free() + } + return nil, m.err } - return copied, nil + + if m.buffer.Len() > n { + m.buffer, r.last = mem.SplitUnsafe(m.buffer, n) + } + + return m.buffer, nil } type streamState uint32 @@ -241,7 +289,7 @@ const ( type Stream struct { id uint32 st ServerTransport // nil for client side Stream - ct *http2Client // nil for server side Stream + ct ClientTransport // nil for server side Stream ctx context.Context // the associated context of the stream cancel context.CancelFunc // always nil for client side Stream done chan struct{} // closed at the end of stream to unblock writers. On the client side. @@ -251,7 +299,7 @@ type Stream struct { recvCompress string sendCompress string buf *recvBuffer - trReader io.Reader + trReader *transportReader fc *inFlow wq *writeQuota @@ -408,7 +456,7 @@ func (s *Stream) TrailersOnly() bool { return s.noHeaders } -// Trailer returns the cached trailer metedata. Note that if it is not called +// Trailer returns the cached trailer metadata. Note that if it is not called // after the entire stream is done, it could return an empty MD. Client // side only. // It can be safely read only after stream has ended that is either read @@ -499,36 +547,87 @@ func (s *Stream) write(m recvMsg) { s.buf.put(m) } -// Read reads all p bytes from the wire for this stream. -func (s *Stream) Read(p []byte) (n int, err error) { +func (s *Stream) ReadHeader(header []byte) (err error) { // Don't request a read if there was an error earlier - if er := s.trReader.(*transportReader).er; er != nil { - return 0, er + if er := s.trReader.er; er != nil { + return er } - s.requestRead(len(p)) - return io.ReadFull(s.trReader, p) + s.requestRead(len(header)) + for len(header) != 0 { + n, err := s.trReader.ReadHeader(header) + header = header[n:] + if len(header) == 0 { + err = nil + } + if err != nil { + if n > 0 && err == io.EOF { + err = io.ErrUnexpectedEOF + } + return err + } + } + return nil } -// tranportReader reads all the data available for this Stream from the transport and +// Read reads n bytes from the wire for this stream. +func (s *Stream) Read(n int) (data mem.BufferSlice, err error) { + // Don't request a read if there was an error earlier + if er := s.trReader.er; er != nil { + return nil, er + } + s.requestRead(n) + for n != 0 { + buf, err := s.trReader.Read(n) + var bufLen int + if buf != nil { + bufLen = buf.Len() + } + n -= bufLen + if n == 0 { + err = nil + } + if err != nil { + if bufLen > 0 && err == io.EOF { + err = io.ErrUnexpectedEOF + } + data.Free() + return nil, err + } + data = append(data, buf) + } + return data, nil +} + +// transportReader reads all the data available for this Stream from the transport and // passes them into the decoder, which converts them into a gRPC message stream. // The error is io.EOF when the stream is done or another non-nil error if // the stream broke. type transportReader struct { - reader io.Reader + reader *recvBufferReader // The handler to control the window update procedure for both this // particular stream and the associated transport. windowHandler func(int) er error } -func (t *transportReader) Read(p []byte) (n int, err error) { - n, err = t.reader.Read(p) +func (t *transportReader) ReadHeader(header []byte) (int, error) { + n, err := t.reader.ReadHeader(header) if err != nil { t.er = err - return + return 0, err } - t.windowHandler(n) - return + t.windowHandler(len(header)) + return n, nil +} + +func (t *transportReader) Read(n int) (mem.Buffer, error) { + buf, err := t.reader.Read(n) + if err != nil { + t.er = err + return buf, err + } + t.windowHandler(buf.Len()) + return buf, nil } // BytesReceived indicates whether any bytes have been received on this stream. @@ -574,6 +673,7 @@ type ServerConfig struct { ChannelzParent *channelz.Server MaxHeaderListSize *uint32 HeaderTableSize *uint32 + BufferPool mem.BufferPool } // ConnectOptions covers all relevant options for communicating with the server. @@ -612,6 +712,8 @@ type ConnectOptions struct { MaxHeaderListSize *uint32 // UseProxy specifies if a proxy should be used. UseProxy bool + // The mem.BufferPool to use when reading/writing to the wire. + BufferPool mem.BufferPool } // NewClientTransport establishes the transport with the required ConnectOptions @@ -673,7 +775,7 @@ type ClientTransport interface { // Write sends the data for the given stream. A nil stream indicates // the write is to be performed on the transport as a whole. - Write(s *Stream, hdr []byte, data []byte, opts *Options) error + Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error // NewStream creates a Stream for an RPC. NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) @@ -725,7 +827,7 @@ type ServerTransport interface { // Write sends the data for the given stream. // Write may not be called on all streams. - Write(s *Stream, hdr []byte, data []byte, opts *Options) error + Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error // WriteStatus sends the status of a stream to the client. WriteStatus is // the final call made on a stream and always occurs. @@ -798,7 +900,7 @@ var ( // connection is draining. This could be caused by goaway or balancer // removing the address. errStreamDrain = status.Error(codes.Unavailable, "the connection is draining") - // errStreamDone is returned from write at the client side to indiacte application + // errStreamDone is returned from write at the client side to indicate application // layer of an error. errStreamDone = errors.New("the stream is done") // StatusGoAway indicates that the server sent a GOAWAY that included this diff --git a/vendor/google.golang.org/grpc/mem/buffer_pool.go b/vendor/google.golang.org/grpc/mem/buffer_pool.go new file mode 100644 index 0000000000..c37c58c023 --- /dev/null +++ b/vendor/google.golang.org/grpc/mem/buffer_pool.go @@ -0,0 +1,194 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package mem + +import ( + "sort" + "sync" + + "google.golang.org/grpc/internal" +) + +// BufferPool is a pool of buffers that can be shared and reused, resulting in +// decreased memory allocation. +type BufferPool interface { + // Get returns a buffer with specified length from the pool. + Get(length int) *[]byte + + // Put returns a buffer to the pool. + Put(*[]byte) +} + +var defaultBufferPoolSizes = []int{ + 256, + 4 << 10, // 4KB (go page size) + 16 << 10, // 16KB (max HTTP/2 frame size used by gRPC) + 32 << 10, // 32KB (default buffer size for io.Copy) + 1 << 20, // 1MB +} + +var defaultBufferPool BufferPool + +func init() { + defaultBufferPool = NewTieredBufferPool(defaultBufferPoolSizes...) + + internal.SetDefaultBufferPoolForTesting = func(pool BufferPool) { + defaultBufferPool = pool + } + + internal.SetBufferPoolingThresholdForTesting = func(threshold int) { + bufferPoolingThreshold = threshold + } +} + +// DefaultBufferPool returns the current default buffer pool. It is a BufferPool +// created with NewBufferPool that uses a set of default sizes optimized for +// expected workflows. +func DefaultBufferPool() BufferPool { + return defaultBufferPool +} + +// NewTieredBufferPool returns a BufferPool implementation that uses multiple +// underlying pools of the given pool sizes. +func NewTieredBufferPool(poolSizes ...int) BufferPool { + sort.Ints(poolSizes) + pools := make([]*sizedBufferPool, len(poolSizes)) + for i, s := range poolSizes { + pools[i] = newSizedBufferPool(s) + } + return &tieredBufferPool{ + sizedPools: pools, + } +} + +// tieredBufferPool implements the BufferPool interface with multiple tiers of +// buffer pools for different sizes of buffers. +type tieredBufferPool struct { + sizedPools []*sizedBufferPool + fallbackPool simpleBufferPool +} + +func (p *tieredBufferPool) Get(size int) *[]byte { + return p.getPool(size).Get(size) +} + +func (p *tieredBufferPool) Put(buf *[]byte) { + p.getPool(cap(*buf)).Put(buf) +} + +func (p *tieredBufferPool) getPool(size int) BufferPool { + poolIdx := sort.Search(len(p.sizedPools), func(i int) bool { + return p.sizedPools[i].defaultSize >= size + }) + + if poolIdx == len(p.sizedPools) { + return &p.fallbackPool + } + + return p.sizedPools[poolIdx] +} + +// sizedBufferPool is a BufferPool implementation that is optimized for specific +// buffer sizes. For example, HTTP/2 frames within gRPC have a default max size +// of 16kb and a sizedBufferPool can be configured to only return buffers with a +// capacity of 16kb. Note that however it does not support returning larger +// buffers and in fact panics if such a buffer is requested. Because of this, +// this BufferPool implementation is not meant to be used on its own and rather +// is intended to be embedded in a tieredBufferPool such that Get is only +// invoked when the required size is smaller than or equal to defaultSize. +type sizedBufferPool struct { + pool sync.Pool + defaultSize int +} + +func (p *sizedBufferPool) Get(size int) *[]byte { + buf := p.pool.Get().(*[]byte) + b := *buf + clear(b[:cap(b)]) + *buf = b[:size] + return buf +} + +func (p *sizedBufferPool) Put(buf *[]byte) { + if cap(*buf) < p.defaultSize { + // Ignore buffers that are too small to fit in the pool. Otherwise, when + // Get is called it will panic as it tries to index outside the bounds + // of the buffer. + return + } + p.pool.Put(buf) +} + +func newSizedBufferPool(size int) *sizedBufferPool { + return &sizedBufferPool{ + pool: sync.Pool{ + New: func() any { + buf := make([]byte, size) + return &buf + }, + }, + defaultSize: size, + } +} + +var _ BufferPool = (*simpleBufferPool)(nil) + +// simpleBufferPool is an implementation of the BufferPool interface that +// attempts to pool buffers with a sync.Pool. When Get is invoked, it tries to +// acquire a buffer from the pool but if that buffer is too small, it returns it +// to the pool and creates a new one. +type simpleBufferPool struct { + pool sync.Pool +} + +func (p *simpleBufferPool) Get(size int) *[]byte { + bs, ok := p.pool.Get().(*[]byte) + if ok && cap(*bs) >= size { + *bs = (*bs)[:size] + return bs + } + + // A buffer was pulled from the pool, but it is too small. Put it back in + // the pool and create one large enough. + if ok { + p.pool.Put(bs) + } + + b := make([]byte, size) + return &b +} + +func (p *simpleBufferPool) Put(buf *[]byte) { + p.pool.Put(buf) +} + +var _ BufferPool = NopBufferPool{} + +// NopBufferPool is a buffer pool that returns new buffers without pooling. +type NopBufferPool struct{} + +// Get returns a buffer with specified length from the pool. +func (NopBufferPool) Get(length int) *[]byte { + b := make([]byte, length) + return &b +} + +// Put returns a buffer to the pool. +func (NopBufferPool) Put(*[]byte) { +} diff --git a/vendor/google.golang.org/grpc/mem/buffer_slice.go b/vendor/google.golang.org/grpc/mem/buffer_slice.go new file mode 100644 index 0000000000..d7775cea62 --- /dev/null +++ b/vendor/google.golang.org/grpc/mem/buffer_slice.go @@ -0,0 +1,224 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package mem + +import ( + "compress/flate" + "io" +) + +// BufferSlice offers a means to represent data that spans one or more Buffer +// instances. A BufferSlice is meant to be immutable after creation, and methods +// like Ref create and return copies of the slice. This is why all methods have +// value receivers rather than pointer receivers. +// +// Note that any of the methods that read the underlying buffers such as Ref, +// Len or CopyTo etc., will panic if any underlying buffers have already been +// freed. It is recommended to not directly interact with any of the underlying +// buffers directly, rather such interactions should be mediated through the +// various methods on this type. +// +// By convention, any APIs that return (mem.BufferSlice, error) should reduce +// the burden on the caller by never returning a mem.BufferSlice that needs to +// be freed if the error is non-nil, unless explicitly stated. +type BufferSlice []Buffer + +// Len returns the sum of the length of all the Buffers in this slice. +// +// # Warning +// +// Invoking the built-in len on a BufferSlice will return the number of buffers +// in the slice, and *not* the value returned by this function. +func (s BufferSlice) Len() int { + var length int + for _, b := range s { + length += b.Len() + } + return length +} + +// Ref invokes Ref on each buffer in the slice. +func (s BufferSlice) Ref() { + for _, b := range s { + b.Ref() + } +} + +// Free invokes Buffer.Free() on each Buffer in the slice. +func (s BufferSlice) Free() { + for _, b := range s { + b.Free() + } +} + +// CopyTo copies each of the underlying Buffer's data into the given buffer, +// returning the number of bytes copied. Has the same semantics as the copy +// builtin in that it will copy as many bytes as it can, stopping when either dst +// is full or s runs out of data, returning the minimum of s.Len() and len(dst). +func (s BufferSlice) CopyTo(dst []byte) int { + off := 0 + for _, b := range s { + off += copy(dst[off:], b.ReadOnlyData()) + } + return off +} + +// Materialize concatenates all the underlying Buffer's data into a single +// contiguous buffer using CopyTo. +func (s BufferSlice) Materialize() []byte { + l := s.Len() + if l == 0 { + return nil + } + out := make([]byte, l) + s.CopyTo(out) + return out +} + +// MaterializeToBuffer functions like Materialize except that it writes the data +// to a single Buffer pulled from the given BufferPool. As a special case, if the +// input BufferSlice only actually has one Buffer, this function has nothing to +// do and simply returns said Buffer. +func (s BufferSlice) MaterializeToBuffer(pool BufferPool) Buffer { + if len(s) == 1 { + s[0].Ref() + return s[0] + } + sLen := s.Len() + if sLen == 0 { + return emptyBuffer{} + } + buf := pool.Get(sLen) + s.CopyTo(*buf) + return NewBuffer(buf, pool) +} + +// Reader returns a new Reader for the input slice after taking references to +// each underlying buffer. +func (s BufferSlice) Reader() Reader { + s.Ref() + return &sliceReader{ + data: s, + len: s.Len(), + } +} + +// Reader exposes a BufferSlice's data as an io.Reader, allowing it to interface +// with other parts systems. It also provides an additional convenience method +// Remaining(), which returns the number of unread bytes remaining in the slice. +// Buffers will be freed as they are read. +type Reader interface { + flate.Reader + // Close frees the underlying BufferSlice and never returns an error. Subsequent + // calls to Read will return (0, io.EOF). + Close() error + // Remaining returns the number of unread bytes remaining in the slice. + Remaining() int +} + +type sliceReader struct { + data BufferSlice + len int + // The index into data[0].ReadOnlyData(). + bufferIdx int +} + +func (r *sliceReader) Remaining() int { + return r.len +} + +func (r *sliceReader) Close() error { + r.data.Free() + r.data = nil + r.len = 0 + return nil +} + +func (r *sliceReader) freeFirstBufferIfEmpty() bool { + if len(r.data) == 0 || r.bufferIdx != len(r.data[0].ReadOnlyData()) { + return false + } + + r.data[0].Free() + r.data = r.data[1:] + r.bufferIdx = 0 + return true +} + +func (r *sliceReader) Read(buf []byte) (n int, _ error) { + if r.len == 0 { + return 0, io.EOF + } + + for len(buf) != 0 && r.len != 0 { + // Copy as much as possible from the first Buffer in the slice into the + // given byte slice. + data := r.data[0].ReadOnlyData() + copied := copy(buf, data[r.bufferIdx:]) + r.len -= copied // Reduce len by the number of bytes copied. + r.bufferIdx += copied // Increment the buffer index. + n += copied // Increment the total number of bytes read. + buf = buf[copied:] // Shrink the given byte slice. + + // If we have copied all the data from the first Buffer, free it and advance to + // the next in the slice. + r.freeFirstBufferIfEmpty() + } + + return n, nil +} + +func (r *sliceReader) ReadByte() (byte, error) { + if r.len == 0 { + return 0, io.EOF + } + + // There may be any number of empty buffers in the slice, clear them all until a + // non-empty buffer is reached. This is guaranteed to exit since r.len is not 0. + for r.freeFirstBufferIfEmpty() { + } + + b := r.data[0].ReadOnlyData()[r.bufferIdx] + r.len-- + r.bufferIdx++ + // Free the first buffer in the slice if the last byte was read + r.freeFirstBufferIfEmpty() + return b, nil +} + +var _ io.Writer = (*writer)(nil) + +type writer struct { + buffers *BufferSlice + pool BufferPool +} + +func (w *writer) Write(p []byte) (n int, err error) { + b := Copy(p, w.pool) + *w.buffers = append(*w.buffers, b) + return b.Len(), nil +} + +// NewWriter wraps the given BufferSlice and BufferPool to implement the +// io.Writer interface. Every call to Write copies the contents of the given +// buffer into a new Buffer pulled from the given pool and the Buffer is added to +// the given BufferSlice. +func NewWriter(buffers *BufferSlice, pool BufferPool) io.Writer { + return &writer{buffers: buffers, pool: pool} +} diff --git a/vendor/google.golang.org/grpc/mem/buffers.go b/vendor/google.golang.org/grpc/mem/buffers.go new file mode 100644 index 0000000000..975ceb7185 --- /dev/null +++ b/vendor/google.golang.org/grpc/mem/buffers.go @@ -0,0 +1,252 @@ +/* + * + * Copyright 2024 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package mem provides utilities that facilitate memory reuse in byte slices +// that are used as buffers. +// +// # Experimental +// +// Notice: All APIs in this package are EXPERIMENTAL and may be changed or +// removed in a later release. +package mem + +import ( + "fmt" + "sync" + "sync/atomic" +) + +// A Buffer represents a reference counted piece of data (in bytes) that can be +// acquired by a call to NewBuffer() or Copy(). A reference to a Buffer may be +// released by calling Free(), which invokes the free function given at creation +// only after all references are released. +// +// Note that a Buffer is not safe for concurrent access and instead each +// goroutine should use its own reference to the data, which can be acquired via +// a call to Ref(). +// +// Attempts to access the underlying data after releasing the reference to the +// Buffer will panic. +type Buffer interface { + // ReadOnlyData returns the underlying byte slice. Note that it is undefined + // behavior to modify the contents of this slice in any way. + ReadOnlyData() []byte + // Ref increases the reference counter for this Buffer. + Ref() + // Free decrements this Buffer's reference counter and frees the underlying + // byte slice if the counter reaches 0 as a result of this call. + Free() + // Len returns the Buffer's size. + Len() int + + split(n int) (left, right Buffer) + read(buf []byte) (int, Buffer) +} + +var ( + bufferPoolingThreshold = 1 << 10 + + bufferObjectPool = sync.Pool{New: func() any { return new(buffer) }} + refObjectPool = sync.Pool{New: func() any { return new(atomic.Int32) }} +) + +func IsBelowBufferPoolingThreshold(size int) bool { + return size <= bufferPoolingThreshold +} + +type buffer struct { + origData *[]byte + data []byte + refs *atomic.Int32 + pool BufferPool +} + +func newBuffer() *buffer { + return bufferObjectPool.Get().(*buffer) +} + +// NewBuffer creates a new Buffer from the given data, initializing the reference +// counter to 1. The data will then be returned to the given pool when all +// references to the returned Buffer are released. As a special case to avoid +// additional allocations, if the given buffer pool is nil, the returned buffer +// will be a "no-op" Buffer where invoking Buffer.Free() does nothing and the +// underlying data is never freed. +// +// Note that the backing array of the given data is not copied. +func NewBuffer(data *[]byte, pool BufferPool) Buffer { + if pool == nil || IsBelowBufferPoolingThreshold(len(*data)) { + return (SliceBuffer)(*data) + } + b := newBuffer() + b.origData = data + b.data = *data + b.pool = pool + b.refs = refObjectPool.Get().(*atomic.Int32) + b.refs.Add(1) + return b +} + +// Copy creates a new Buffer from the given data, initializing the reference +// counter to 1. +// +// It acquires a []byte from the given pool and copies over the backing array +// of the given data. The []byte acquired from the pool is returned to the +// pool when all references to the returned Buffer are released. +func Copy(data []byte, pool BufferPool) Buffer { + if IsBelowBufferPoolingThreshold(len(data)) { + buf := make(SliceBuffer, len(data)) + copy(buf, data) + return buf + } + + buf := pool.Get(len(data)) + copy(*buf, data) + return NewBuffer(buf, pool) +} + +func (b *buffer) ReadOnlyData() []byte { + if b.refs == nil { + panic("Cannot read freed buffer") + } + return b.data +} + +func (b *buffer) Ref() { + if b.refs == nil { + panic("Cannot ref freed buffer") + } + b.refs.Add(1) +} + +func (b *buffer) Free() { + if b.refs == nil { + panic("Cannot free freed buffer") + } + + refs := b.refs.Add(-1) + switch { + case refs > 0: + return + case refs == 0: + if b.pool != nil { + b.pool.Put(b.origData) + } + + refObjectPool.Put(b.refs) + b.origData = nil + b.data = nil + b.refs = nil + b.pool = nil + bufferObjectPool.Put(b) + default: + panic("Cannot free freed buffer") + } +} + +func (b *buffer) Len() int { + return len(b.ReadOnlyData()) +} + +func (b *buffer) split(n int) (Buffer, Buffer) { + if b.refs == nil { + panic("Cannot split freed buffer") + } + + b.refs.Add(1) + split := newBuffer() + split.origData = b.origData + split.data = b.data[n:] + split.refs = b.refs + split.pool = b.pool + + b.data = b.data[:n] + + return b, split +} + +func (b *buffer) read(buf []byte) (int, Buffer) { + if b.refs == nil { + panic("Cannot read freed buffer") + } + + n := copy(buf, b.data) + if n == len(b.data) { + b.Free() + return n, nil + } + + b.data = b.data[n:] + return n, b +} + +// String returns a string representation of the buffer. May be used for +// debugging purposes. +func (b *buffer) String() string { + return fmt.Sprintf("mem.Buffer(%p, data: %p, length: %d)", b, b.ReadOnlyData(), len(b.ReadOnlyData())) +} + +func ReadUnsafe(dst []byte, buf Buffer) (int, Buffer) { + return buf.read(dst) +} + +// SplitUnsafe modifies the receiver to point to the first n bytes while it +// returns a new reference to the remaining bytes. The returned Buffer functions +// just like a normal reference acquired using Ref(). +func SplitUnsafe(buf Buffer, n int) (left, right Buffer) { + return buf.split(n) +} + +type emptyBuffer struct{} + +func (e emptyBuffer) ReadOnlyData() []byte { + return nil +} + +func (e emptyBuffer) Ref() {} +func (e emptyBuffer) Free() {} + +func (e emptyBuffer) Len() int { + return 0 +} + +func (e emptyBuffer) split(n int) (left, right Buffer) { + return e, e +} + +func (e emptyBuffer) read(buf []byte) (int, Buffer) { + return 0, e +} + +type SliceBuffer []byte + +func (s SliceBuffer) ReadOnlyData() []byte { return s } +func (s SliceBuffer) Ref() {} +func (s SliceBuffer) Free() {} +func (s SliceBuffer) Len() int { return len(s) } + +func (s SliceBuffer) split(n int) (left, right Buffer) { + return s[:n], s[n:] +} + +func (s SliceBuffer) read(buf []byte) (int, Buffer) { + n := copy(buf, s) + if n == len(s) { + return n, nil + } + return n, s[n:] +} diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go index 1e9485fd6e..d2e15253bb 100644 --- a/vendor/google.golang.org/grpc/metadata/metadata.go +++ b/vendor/google.golang.org/grpc/metadata/metadata.go @@ -213,11 +213,6 @@ func FromIncomingContext(ctx context.Context) (MD, bool) { // ValueFromIncomingContext returns the metadata value corresponding to the metadata // key from the incoming metadata if it exists. Keys are matched in a case insensitive // manner. -// -// # Experimental -// -// Notice: This API is EXPERIMENTAL and may be changed or removed in a -// later release. func ValueFromIncomingContext(ctx context.Context, key string) []string { md, ok := ctx.Value(mdIncomingKey{}).(MD) if !ok { @@ -228,7 +223,7 @@ func ValueFromIncomingContext(ctx context.Context, key string) []string { return copyOf(v) } for k, v := range md { - // Case insenitive comparison: MD is a map, and there's no guarantee + // Case insensitive comparison: MD is a map, and there's no guarantee // that the MD attached to the context is created using our helper // functions. if strings.EqualFold(k, key) { diff --git a/vendor/google.golang.org/grpc/preloader.go b/vendor/google.golang.org/grpc/preloader.go index 73bd633643..e87a17f36a 100644 --- a/vendor/google.golang.org/grpc/preloader.go +++ b/vendor/google.golang.org/grpc/preloader.go @@ -20,6 +20,7 @@ package grpc import ( "google.golang.org/grpc/codes" + "google.golang.org/grpc/mem" "google.golang.org/grpc/status" ) @@ -31,9 +32,10 @@ import ( // later release. type PreparedMsg struct { // Struct for preparing msg before sending them - encodedData []byte + encodedData mem.BufferSlice hdr []byte - payload []byte + payload mem.BufferSlice + pf payloadFormat } // Encode marshalls and compresses the message using the codec and compressor for the stream. @@ -57,11 +59,27 @@ func (p *PreparedMsg) Encode(s Stream, msg any) error { if err != nil { return err } - p.encodedData = data - compData, err := compress(data, rpcInfo.preloaderInfo.cp, rpcInfo.preloaderInfo.comp) + + materializedData := data.Materialize() + data.Free() + p.encodedData = mem.BufferSlice{mem.NewBuffer(&materializedData, nil)} + + // TODO: it should be possible to grab the bufferPool from the underlying + // stream implementation with a type cast to its actual type (such as + // addrConnStream) and accessing the buffer pool directly. + var compData mem.BufferSlice + compData, p.pf, err = compress(p.encodedData, rpcInfo.preloaderInfo.cp, rpcInfo.preloaderInfo.comp, mem.DefaultBufferPool()) if err != nil { return err } - p.hdr, p.payload = msgHeader(data, compData) + + if p.pf.isCompressed() { + materializedCompData := compData.Materialize() + compData.Free() + compData = mem.BufferSlice{mem.NewBuffer(&materializedCompData, nil)} + } + + p.hdr, p.payload = msgHeader(p.encodedData, compData, p.pf) + return nil } diff --git a/vendor/google.golang.org/grpc/regenerate.sh b/vendor/google.golang.org/grpc/regenerate.sh deleted file mode 100644 index 3edca296c2..0000000000 --- a/vendor/google.golang.org/grpc/regenerate.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash -# Copyright 2020 gRPC authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set -eu -o pipefail - -WORKDIR=$(mktemp -d) - -function finish { - rm -rf "$WORKDIR" -} -trap finish EXIT - -export GOBIN=${WORKDIR}/bin -export PATH=${GOBIN}:${PATH} -mkdir -p ${GOBIN} - -echo "remove existing generated files" -# grpc_testing_not_regenerate/*.pb.go is not re-generated, -# see grpc_testing_not_regenerate/README.md for details. -rm -f $(find . -name '*.pb.go' | grep -v 'grpc_testing_not_regenerate') - -echo "go install google.golang.org/protobuf/cmd/protoc-gen-go" -(cd test/tools && go install google.golang.org/protobuf/cmd/protoc-gen-go) - -echo "go install cmd/protoc-gen-go-grpc" -(cd cmd/protoc-gen-go-grpc && go install .) - -echo "git clone https://github.com/grpc/grpc-proto" -git clone --quiet https://github.com/grpc/grpc-proto ${WORKDIR}/grpc-proto - -echo "git clone https://github.com/protocolbuffers/protobuf" -git clone --quiet https://github.com/protocolbuffers/protobuf ${WORKDIR}/protobuf - -# Pull in code.proto as a proto dependency -mkdir -p ${WORKDIR}/googleapis/google/rpc -echo "curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto" -curl --silent https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto > ${WORKDIR}/googleapis/google/rpc/code.proto - -mkdir -p ${WORKDIR}/out - -# Generates sources without the embed requirement -LEGACY_SOURCES=( - ${WORKDIR}/grpc-proto/grpc/binlog/v1/binarylog.proto - ${WORKDIR}/grpc-proto/grpc/channelz/v1/channelz.proto - ${WORKDIR}/grpc-proto/grpc/health/v1/health.proto - ${WORKDIR}/grpc-proto/grpc/lb/v1/load_balancer.proto - profiling/proto/service.proto - ${WORKDIR}/grpc-proto/grpc/reflection/v1alpha/reflection.proto - ${WORKDIR}/grpc-proto/grpc/reflection/v1/reflection.proto -) - -# Generates only the new gRPC Service symbols -SOURCES=( - $(git ls-files --exclude-standard --cached --others "*.proto" | grep -v '^profiling/proto/service.proto$') - ${WORKDIR}/grpc-proto/grpc/gcp/altscontext.proto - ${WORKDIR}/grpc-proto/grpc/gcp/handshaker.proto - ${WORKDIR}/grpc-proto/grpc/gcp/transport_security_common.proto - ${WORKDIR}/grpc-proto/grpc/lookup/v1/rls.proto - ${WORKDIR}/grpc-proto/grpc/lookup/v1/rls_config.proto - ${WORKDIR}/grpc-proto/grpc/testing/*.proto - ${WORKDIR}/grpc-proto/grpc/core/*.proto -) - -# These options of the form 'Mfoo.proto=bar' instruct the codegen to use an -# import path of 'bar' in the generated code when 'foo.proto' is imported in -# one of the sources. -# -# Note that the protos listed here are all for testing purposes. All protos to -# be used externally should have a go_package option (and they don't need to be -# listed here). -OPTS=Mgrpc/core/stats.proto=google.golang.org/grpc/interop/grpc_testing/core,\ -Mgrpc/testing/benchmark_service.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/stats.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/report_qps_scenario_service.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/messages.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/worker_service.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/control.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/test.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/payloads.proto=google.golang.org/grpc/interop/grpc_testing,\ -Mgrpc/testing/empty.proto=google.golang.org/grpc/interop/grpc_testing - -for src in ${SOURCES[@]}; do - echo "protoc ${src}" - protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS},use_generic_streams_experimental=true:${WORKDIR}/out \ - -I"." \ - -I${WORKDIR}/grpc-proto \ - -I${WORKDIR}/googleapis \ - -I${WORKDIR}/protobuf/src \ - ${src} -done - -for src in ${LEGACY_SOURCES[@]}; do - echo "protoc ${src}" - protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS},require_unimplemented_servers=false:${WORKDIR}/out \ - -I"." \ - -I${WORKDIR}/grpc-proto \ - -I${WORKDIR}/googleapis \ - -I${WORKDIR}/protobuf/src \ - ${src} -done - -# The go_package option in grpc/lookup/v1/rls.proto doesn't match the -# current location. Move it into the right place. -mkdir -p ${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1 -mv ${WORKDIR}/out/google.golang.org/grpc/lookup/grpc_lookup_v1/* ${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1 - -# grpc_testing_not_regenerate/*.pb.go are not re-generated, -# see grpc_testing_not_regenerate/README.md for details. -rm ${WORKDIR}/out/google.golang.org/grpc/reflection/test/grpc_testing_not_regenerate/*.pb.go - -cp -R ${WORKDIR}/out/google.golang.org/grpc/* . diff --git a/vendor/google.golang.org/grpc/resolver_wrapper.go b/vendor/google.golang.org/grpc/resolver_wrapper.go index c5fb45236f..23bb3fb258 100644 --- a/vendor/google.golang.org/grpc/resolver_wrapper.go +++ b/vendor/google.golang.org/grpc/resolver_wrapper.go @@ -66,7 +66,7 @@ func newCCResolverWrapper(cc *ClientConn) *ccResolverWrapper { // any newly created ccResolverWrapper, except that close may be called instead. func (ccr *ccResolverWrapper) start() error { errCh := make(chan error) - ccr.serializer.Schedule(func(ctx context.Context) { + ccr.serializer.TrySchedule(func(ctx context.Context) { if ctx.Err() != nil { return } @@ -85,7 +85,7 @@ func (ccr *ccResolverWrapper) start() error { } func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOptions) { - ccr.serializer.Schedule(func(ctx context.Context) { + ccr.serializer.TrySchedule(func(ctx context.Context) { if ctx.Err() != nil || ccr.resolver == nil { return } @@ -102,7 +102,7 @@ func (ccr *ccResolverWrapper) close() { ccr.closed = true ccr.mu.Unlock() - ccr.serializer.Schedule(func(context.Context) { + ccr.serializer.TrySchedule(func(context.Context) { if ccr.resolver == nil { return } @@ -177,6 +177,9 @@ func (ccr *ccResolverWrapper) ParseServiceConfig(scJSON string) *serviceconfig.P // addChannelzTraceEvent adds a channelz trace event containing the new // state received from resolver implementations. func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) { + if !logger.V(0) && !channelz.IsOn() { + return + } var updates []string var oldSC, newSC *ServiceConfig var oldOK, newOK bool diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index fdd49e6e91..db8865ec3f 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -19,7 +19,6 @@ package grpc import ( - "bytes" "compress/gzip" "context" "encoding/binary" @@ -35,6 +34,7 @@ import ( "google.golang.org/grpc/encoding" "google.golang.org/grpc/encoding/proto" "google.golang.org/grpc/internal/transport" + "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/stats" @@ -271,17 +271,13 @@ func (o PeerCallOption) after(c *callInfo, attempt *csAttempt) { } } -// WaitForReady configures the action to take when an RPC is attempted on broken -// connections or unreachable servers. If waitForReady is false and the -// connection is in the TRANSIENT_FAILURE state, the RPC will fail -// immediately. Otherwise, the RPC client will block the call until a -// connection is available (or the call is canceled or times out) and will -// retry the call if it fails due to a transient error. gRPC will not retry if -// data was written to the wire unless the server indicates it did not process -// the data. Please refer to -// https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md. +// WaitForReady configures the RPC's behavior when the client is in +// TRANSIENT_FAILURE, which occurs when all addresses fail to connect. If +// waitForReady is false, the RPC will fail immediately. Otherwise, the client +// will wait until a connection becomes available or the RPC's deadline is +// reached. // -// By default, RPCs don't "wait for ready". +// By default, RPCs do not "wait for ready". func WaitForReady(waitForReady bool) CallOption { return FailFastCallOption{FailFast: !waitForReady} } @@ -515,11 +511,51 @@ type ForceCodecCallOption struct { } func (o ForceCodecCallOption) before(c *callInfo) error { - c.codec = o.Codec + c.codec = newCodecV1Bridge(o.Codec) return nil } func (o ForceCodecCallOption) after(c *callInfo, attempt *csAttempt) {} +// ForceCodecV2 returns a CallOption that will set codec to be used for all +// request and response messages for a call. The result of calling Name() will +// be used as the content-subtype after converting to lowercase, unless +// CallContentSubtype is also used. +// +// See Content-Type on +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. Also see the documentation on RegisterCodec and +// CallContentSubtype for more details on the interaction between Codec and +// content-subtype. +// +// This function is provided for advanced users; prefer to use only +// CallContentSubtype to select a registered codec instead. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func ForceCodecV2(codec encoding.CodecV2) CallOption { + return ForceCodecV2CallOption{CodecV2: codec} +} + +// ForceCodecV2CallOption is a CallOption that indicates the codec used for +// marshaling messages. +// +// # Experimental +// +// Notice: This type is EXPERIMENTAL and may be changed or removed in a +// later release. +type ForceCodecV2CallOption struct { + CodecV2 encoding.CodecV2 +} + +func (o ForceCodecV2CallOption) before(c *callInfo) error { + c.codec = o.CodecV2 + return nil +} + +func (o ForceCodecV2CallOption) after(c *callInfo, attempt *csAttempt) {} + // CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of // an encoding.Codec. // @@ -540,7 +576,7 @@ type CustomCodecCallOption struct { } func (o CustomCodecCallOption) before(c *callInfo) error { - c.codec = o.Codec + c.codec = newCodecV0Bridge(o.Codec) return nil } func (o CustomCodecCallOption) after(c *callInfo, attempt *csAttempt) {} @@ -581,19 +617,28 @@ const ( compressionMade payloadFormat = 1 // compressed ) +func (pf payloadFormat) isCompressed() bool { + return pf == compressionMade +} + +type streamReader interface { + ReadHeader(header []byte) error + Read(n int) (mem.BufferSlice, error) +} + // parser reads complete gRPC messages from the underlying reader. type parser struct { // r is the underlying reader. // See the comment on recvMsg for the permissible // error types. - r io.Reader + r streamReader // The header of a gRPC message. Find more detail at // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md header [5]byte - // recvBufferPool is the pool of shared receive buffers. - recvBufferPool SharedBufferPool + // bufferPool is the pool of shared receive buffers. + bufferPool mem.BufferPool } // recvMsg reads a complete gRPC message from the stream. @@ -608,14 +653,15 @@ type parser struct { // - an error from the status package // // No other error values or types must be returned, which also means -// that the underlying io.Reader must not return an incompatible +// that the underlying streamReader must not return an incompatible // error. -func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byte, err error) { - if _, err := p.r.Read(p.header[:]); err != nil { +func (p *parser) recvMsg(maxReceiveMessageSize int) (payloadFormat, mem.BufferSlice, error) { + err := p.r.ReadHeader(p.header[:]) + if err != nil { return 0, nil, err } - pf = payloadFormat(p.header[0]) + pf := payloadFormat(p.header[0]) length := binary.BigEndian.Uint32(p.header[1:]) if length == 0 { @@ -627,20 +673,21 @@ func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byt if int(length) > maxReceiveMessageSize { return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize) } - msg = p.recvBufferPool.Get(int(length)) - if _, err := p.r.Read(msg); err != nil { + + data, err := p.r.Read(int(length)) + if err != nil { if err == io.EOF { err = io.ErrUnexpectedEOF } return 0, nil, err } - return pf, msg, nil + return pf, data, nil } // encode serializes msg and returns a buffer containing the message, or an // error if it is too large to be transmitted by grpc. If msg is nil, it // generates an empty message. -func encode(c baseCodec, msg any) ([]byte, error) { +func encode(c baseCodec, msg any) (mem.BufferSlice, error) { if msg == nil { // NOTE: typed nils will not be caught by this check return nil, nil } @@ -648,7 +695,8 @@ func encode(c baseCodec, msg any) ([]byte, error) { if err != nil { return nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error()) } - if uint(len(b)) > math.MaxUint32 { + if uint(b.Len()) > math.MaxUint32 { + b.Free() return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", len(b)) } return b, nil @@ -659,34 +707,41 @@ func encode(c baseCodec, msg any) ([]byte, error) { // indicating no compression was done. // // TODO(dfawley): eliminate cp parameter by wrapping Compressor in an encoding.Compressor. -func compress(in []byte, cp Compressor, compressor encoding.Compressor) ([]byte, error) { - if compressor == nil && cp == nil { - return nil, nil - } - if len(in) == 0 { - return nil, nil +func compress(in mem.BufferSlice, cp Compressor, compressor encoding.Compressor, pool mem.BufferPool) (mem.BufferSlice, payloadFormat, error) { + if (compressor == nil && cp == nil) || in.Len() == 0 { + return nil, compressionNone, nil } + var out mem.BufferSlice + w := mem.NewWriter(&out, pool) wrapErr := func(err error) error { + out.Free() return status.Errorf(codes.Internal, "grpc: error while compressing: %v", err.Error()) } - cbuf := &bytes.Buffer{} if compressor != nil { - z, err := compressor.Compress(cbuf) + z, err := compressor.Compress(w) if err != nil { - return nil, wrapErr(err) + return nil, 0, wrapErr(err) } - if _, err := z.Write(in); err != nil { - return nil, wrapErr(err) + for _, b := range in { + if _, err := z.Write(b.ReadOnlyData()); err != nil { + return nil, 0, wrapErr(err) + } } if err := z.Close(); err != nil { - return nil, wrapErr(err) + return nil, 0, wrapErr(err) } } else { - if err := cp.Do(cbuf, in); err != nil { - return nil, wrapErr(err) + // This is obviously really inefficient since it fully materializes the data, but + // there is no way around this with the old Compressor API. At least it attempts + // to return the buffer to the provider, in the hopes it can be reused (maybe + // even by a subsequent call to this very function). + buf := in.MaterializeToBuffer(pool) + defer buf.Free() + if err := cp.Do(w, buf.ReadOnlyData()); err != nil { + return nil, 0, wrapErr(err) } } - return cbuf.Bytes(), nil + return out, compressionMade, nil } const ( @@ -697,33 +752,36 @@ const ( // msgHeader returns a 5-byte header for the message being transmitted and the // payload, which is compData if non-nil or data otherwise. -func msgHeader(data, compData []byte) (hdr []byte, payload []byte) { +func msgHeader(data, compData mem.BufferSlice, pf payloadFormat) (hdr []byte, payload mem.BufferSlice) { hdr = make([]byte, headerLen) - if compData != nil { - hdr[0] = byte(compressionMade) - data = compData + hdr[0] = byte(pf) + + var length uint32 + if pf.isCompressed() { + length = uint32(compData.Len()) + payload = compData } else { - hdr[0] = byte(compressionNone) + length = uint32(data.Len()) + payload = data } // Write length of payload into buf - binary.BigEndian.PutUint32(hdr[payloadLen:], uint32(len(data))) - return hdr, data + binary.BigEndian.PutUint32(hdr[payloadLen:], length) + return hdr, payload } -func outPayload(client bool, msg any, data, payload []byte, t time.Time) *stats.OutPayload { +func outPayload(client bool, msg any, dataLength, payloadLength int, t time.Time) *stats.OutPayload { return &stats.OutPayload{ Client: client, Payload: msg, - Data: data, - Length: len(data), - WireLength: len(payload) + headerLen, - CompressedLength: len(payload), + Length: dataLength, + WireLength: payloadLength + headerLen, + CompressedLength: payloadLength, SentTime: t, } } -func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool) *status.Status { +func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool, isServer bool) *status.Status { switch pf { case compressionNone: case compressionMade: @@ -731,7 +789,11 @@ func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool return status.New(codes.Internal, "grpc: compressed flag set with identity or empty encoding") } if !haveCompressor { - return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + if isServer { + return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + } else { + return status.Newf(codes.Internal, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + } } default: return status.Newf(codes.Internal, "grpc: received unexpected payload format %d", pf) @@ -741,104 +803,129 @@ func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool type payloadInfo struct { compressedLength int // The compressed length got from wire. - uncompressedBytes []byte + uncompressedBytes mem.BufferSlice +} + +func (p *payloadInfo) free() { + if p != nil && p.uncompressedBytes != nil { + p.uncompressedBytes.Free() + } } // recvAndDecompress reads a message from the stream, decompressing it if necessary. // // Cancelling the returned cancel function releases the buffer back to the pool. So the caller should cancel as soon as // the buffer is no longer needed. -func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor, -) (uncompressedBuf []byte, cancel func(), err error) { - pf, compressedBuf, err := p.recvMsg(maxReceiveMessageSize) +// TODO: Refactor this function to reduce the number of arguments. +// See: https://google.github.io/styleguide/go/best-practices.html#function-argument-lists +func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor, isServer bool, +) (out mem.BufferSlice, err error) { + pf, compressed, err := p.recvMsg(maxReceiveMessageSize) if err != nil { - return nil, nil, err + return nil, err } - if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil); st != nil { - return nil, nil, st.Err() + compressedLength := compressed.Len() + + if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil, isServer); st != nil { + compressed.Free() + return nil, st.Err() } var size int - if pf == compressionMade { + if pf.isCompressed() { + defer compressed.Free() + // To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor, // use this decompressor as the default. if dc != nil { - uncompressedBuf, err = dc.Do(bytes.NewReader(compressedBuf)) + var uncompressedBuf []byte + uncompressedBuf, err = dc.Do(compressed.Reader()) + if err == nil { + out = mem.BufferSlice{mem.NewBuffer(&uncompressedBuf, nil)} + } size = len(uncompressedBuf) } else { - uncompressedBuf, size, err = decompress(compressor, compressedBuf, maxReceiveMessageSize) + out, size, err = decompress(compressor, compressed, maxReceiveMessageSize, p.bufferPool) } if err != nil { - return nil, nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err) + return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err) } if size > maxReceiveMessageSize { + out.Free() // TODO: Revisit the error code. Currently keep it consistent with java // implementation. - return nil, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize) + return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize) } } else { - uncompressedBuf = compressedBuf + out = compressed } if payInfo != nil { - payInfo.compressedLength = len(compressedBuf) - payInfo.uncompressedBytes = uncompressedBuf - - cancel = func() {} - } else { - cancel = func() { - p.recvBufferPool.Put(&compressedBuf) - } + payInfo.compressedLength = compressedLength + out.Ref() + payInfo.uncompressedBytes = out } - return uncompressedBuf, cancel, nil + return out, nil } // Using compressor, decompress d, returning data and size. // Optionally, if data will be over maxReceiveMessageSize, just return the size. -func decompress(compressor encoding.Compressor, d []byte, maxReceiveMessageSize int) ([]byte, int, error) { - dcReader, err := compressor.Decompress(bytes.NewReader(d)) +func decompress(compressor encoding.Compressor, d mem.BufferSlice, maxReceiveMessageSize int, pool mem.BufferPool) (mem.BufferSlice, int, error) { + dcReader, err := compressor.Decompress(d.Reader()) if err != nil { return nil, 0, err } - if sizer, ok := compressor.(interface { - DecompressedSize(compressedBytes []byte) int - }); ok { - if size := sizer.DecompressedSize(d); size >= 0 { - if size > maxReceiveMessageSize { - return nil, size, nil - } - // size is used as an estimate to size the buffer, but we - // will read more data if available. - // +MinRead so ReadFrom will not reallocate if size is correct. - // - // TODO: If we ensure that the buffer size is the same as the DecompressedSize, - // we can also utilize the recv buffer pool here. - buf := bytes.NewBuffer(make([]byte, 0, size+bytes.MinRead)) - bytesRead, err := buf.ReadFrom(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1)) - return buf.Bytes(), int(bytesRead), err - } + + // TODO: Can/should this still be preserved with the new BufferSlice API? Are + // there any actual benefits to allocating a single large buffer instead of + // multiple smaller ones? + //if sizer, ok := compressor.(interface { + // DecompressedSize(compressedBytes []byte) int + //}); ok { + // if size := sizer.DecompressedSize(d); size >= 0 { + // if size > maxReceiveMessageSize { + // return nil, size, nil + // } + // // size is used as an estimate to size the buffer, but we + // // will read more data if available. + // // +MinRead so ReadFrom will not reallocate if size is correct. + // // + // // TODO: If we ensure that the buffer size is the same as the DecompressedSize, + // // we can also utilize the recv buffer pool here. + // buf := bytes.NewBuffer(make([]byte, 0, size+bytes.MinRead)) + // bytesRead, err := buf.ReadFrom(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1)) + // return buf.Bytes(), int(bytesRead), err + // } + //} + + var out mem.BufferSlice + _, err = io.Copy(mem.NewWriter(&out, pool), io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1)) + if err != nil { + out.Free() + return nil, 0, err } - // Read from LimitReader with limit max+1. So if the underlying - // reader is over limit, the result will be bigger than max. - d, err = io.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1)) - return d, len(d), err + return out, out.Len(), nil } // For the two compressor parameters, both should not be set, but if they are, // dc takes precedence over compressor. // TODO(dfawley): wrap the old compressor/decompressor using the new API? -func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m any, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) error { - buf, cancel, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor) +func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m any, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor, isServer bool) error { + data, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor, isServer) if err != nil { return err } - defer cancel() - if err := c.Unmarshal(buf, m); err != nil { + // If the codec wants its own reference to the data, it can get it. Otherwise, always + // free the buffers. + defer data.Free() + + if err := c.Unmarshal(data, m); err != nil { return status.Errorf(codes.Internal, "grpc: failed to unmarshal the received message: %v", err) } + return nil } @@ -941,7 +1028,7 @@ func setCallInfoCodec(c *callInfo) error { // encoding.Codec (Name vs. String method name). We only support // setting content subtype from encoding.Codec to avoid a behavior // change with the deprecated version. - if ec, ok := c.codec.(encoding.Codec); ok { + if ec, ok := c.codec.(encoding.CodecV2); ok { c.contentSubtype = strings.ToLower(ec.Name()) } } @@ -950,12 +1037,12 @@ func setCallInfoCodec(c *callInfo) error { if c.contentSubtype == "" { // No codec specified in CallOptions; use proto by default. - c.codec = encoding.GetCodec(proto.Name) + c.codec = getCodec(proto.Name) return nil } // c.contentSubtype is already lowercased in CallContentSubtype - c.codec = encoding.GetCodec(c.contentSubtype) + c.codec = getCodec(c.contentSubtype) if c.codec == nil { return status.Errorf(codes.Internal, "no codec registered for content-subtype %s", c.contentSubtype) } diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index 89f8e4792b..457d27338f 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -45,6 +45,7 @@ import ( "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/stats" @@ -80,7 +81,7 @@ func init() { } internal.BinaryLogger = binaryLogger internal.JoinServerOptions = newJoinServerOption - internal.RecvBufferPool = recvBufferPool + internal.BufferPool = bufferPool } var statusOK = status.New(codes.OK, "") @@ -170,7 +171,7 @@ type serverOptions struct { maxHeaderListSize *uint32 headerTableSize *uint32 numServerWorkers uint32 - recvBufferPool SharedBufferPool + bufferPool mem.BufferPool waitForHandlers bool } @@ -181,7 +182,7 @@ var defaultServerOptions = serverOptions{ connectionTimeout: 120 * time.Second, writeBufferSize: defaultWriteBufSize, readBufferSize: defaultReadBufSize, - recvBufferPool: nopBufferPool{}, + bufferPool: mem.DefaultBufferPool(), } var globalServerOptions []ServerOption @@ -313,7 +314,7 @@ func KeepaliveEnforcementPolicy(kep keepalive.EnforcementPolicy) ServerOption { // Will be supported throughout 1.x. func CustomCodec(codec Codec) ServerOption { return newFuncServerOption(func(o *serverOptions) { - o.codec = codec + o.codec = newCodecV0Bridge(codec) }) } @@ -342,7 +343,22 @@ func CustomCodec(codec Codec) ServerOption { // later release. func ForceServerCodec(codec encoding.Codec) ServerOption { return newFuncServerOption(func(o *serverOptions) { - o.codec = codec + o.codec = newCodecV1Bridge(codec) + }) +} + +// ForceServerCodecV2 is the equivalent of ForceServerCodec, but for the new +// CodecV2 interface. +// +// Will be supported throughout 1.x. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func ForceServerCodecV2(codecV2 encoding.CodecV2) ServerOption { + return newFuncServerOption(func(o *serverOptions) { + o.codec = codecV2 }) } @@ -592,26 +608,9 @@ func WaitForHandlers(w bool) ServerOption { }) } -// RecvBufferPool returns a ServerOption that configures the server -// to use the provided shared buffer pool for parsing incoming messages. Depending -// on the application's workload, this could result in reduced memory allocation. -// -// If you are unsure about how to implement a memory pool but want to utilize one, -// begin with grpc.NewSharedBufferPool. -// -// Note: The shared buffer pool feature will not be active if any of the following -// options are used: StatsHandler, EnableTracing, or binary logging. In such -// cases, the shared buffer pool will be ignored. -// -// Deprecated: use experimental.WithRecvBufferPool instead. Will be deleted in -// v1.60.0 or later. -func RecvBufferPool(bufferPool SharedBufferPool) ServerOption { - return recvBufferPool(bufferPool) -} - -func recvBufferPool(bufferPool SharedBufferPool) ServerOption { +func bufferPool(bufferPool mem.BufferPool) ServerOption { return newFuncServerOption(func(o *serverOptions) { - o.recvBufferPool = bufferPool + o.bufferPool = bufferPool }) } @@ -622,7 +621,7 @@ func recvBufferPool(bufferPool SharedBufferPool) ServerOption { // workload (assuming a QPS of a few thousand requests/sec). const serverWorkerResetThreshold = 1 << 16 -// serverWorkers blocks on a *transport.Stream channel forever and waits for +// serverWorker blocks on a *transport.Stream channel forever and waits for // data to be fed by serveStreams. This allows multiple requests to be // processed by the same goroutine, removing the need for expensive stack // re-allocations (see the runtime.morestack problem [1]). @@ -980,6 +979,7 @@ func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport { ChannelzParent: s.channelz, MaxHeaderListSize: s.opts.maxHeaderListSize, HeaderTableSize: s.opts.headerTableSize, + BufferPool: s.opts.bufferPool, } st, err := transport.NewServerTransport(c, config) if err != nil { @@ -1072,7 +1072,7 @@ var _ http.Handler = (*Server)(nil) // Notice: This API is EXPERIMENTAL and may be changed or removed in a // later release. func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - st, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandlers) + st, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandlers, s.opts.bufferPool) if err != nil { // Errors returned from transport.NewServerHandlerTransport have // already been written to w. @@ -1142,20 +1142,35 @@ func (s *Server) sendResponse(ctx context.Context, t transport.ServerTransport, channelz.Error(logger, s.channelz, "grpc: server failed to encode response: ", err) return err } - compData, err := compress(data, cp, comp) + + compData, pf, err := compress(data, cp, comp, s.opts.bufferPool) if err != nil { + data.Free() channelz.Error(logger, s.channelz, "grpc: server failed to compress response: ", err) return err } - hdr, payload := msgHeader(data, compData) + + hdr, payload := msgHeader(data, compData, pf) + + defer func() { + compData.Free() + data.Free() + // payload does not need to be freed here, it is either data or compData, both of + // which are already freed. + }() + + dataLen := data.Len() + payloadLen := payload.Len() // TODO(dfawley): should we be checking len(data) instead? - if len(payload) > s.opts.maxSendMessageSize { - return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", len(payload), s.opts.maxSendMessageSize) + if payloadLen > s.opts.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", payloadLen, s.opts.maxSendMessageSize) } err = t.Write(stream, hdr, payload, opts) if err == nil { - for _, sh := range s.opts.statsHandlers { - sh.HandleRPC(ctx, outPayload(false, msg, data, payload, time.Now())) + if len(s.opts.statsHandlers) != 0 { + for _, sh := range s.opts.statsHandlers { + sh.HandleRPC(ctx, outPayload(false, msg, dataLen, payloadLen, time.Now())) + } } } return err @@ -1334,9 +1349,10 @@ func (s *Server) processUnaryRPC(ctx context.Context, t transport.ServerTranspor var payInfo *payloadInfo if len(shs) != 0 || len(binlogs) != 0 { payInfo = &payloadInfo{} + defer payInfo.free() } - d, cancel, err := recvAndDecompress(&parser{r: stream, recvBufferPool: s.opts.recvBufferPool}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp) + d, err := recvAndDecompress(&parser{r: stream, bufferPool: s.opts.bufferPool}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp, true) if err != nil { if e := t.WriteStatus(stream, status.Convert(err)); e != nil { channelz.Warningf(logger, s.channelz, "grpc: Server.processUnaryRPC failed to write status: %v", e) @@ -1347,24 +1363,22 @@ func (s *Server) processUnaryRPC(ctx context.Context, t transport.ServerTranspor t.IncrMsgRecv() } df := func(v any) error { - defer cancel() - if err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil { return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) } + for _, sh := range shs { sh.HandleRPC(ctx, &stats.InPayload{ RecvTime: time.Now(), Payload: v, - Length: len(d), + Length: d.Len(), WireLength: payInfo.compressedLength + headerLen, CompressedLength: payInfo.compressedLength, - Data: d, }) } if len(binlogs) != 0 { cm := &binarylog.ClientMessage{ - Message: d, + Message: d.Materialize(), } for _, binlog := range binlogs { binlog.Log(ctx, cm) @@ -1548,7 +1562,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, t transport.ServerTran ctx: ctx, t: t, s: stream, - p: &parser{r: stream, recvBufferPool: s.opts.recvBufferPool}, + p: &parser{r: stream, bufferPool: s.opts.bufferPool}, codec: s.getCodec(stream.ContentSubtype()), maxReceiveMessageSize: s.opts.maxReceiveMessageSize, maxSendMessageSize: s.opts.maxSendMessageSize, @@ -1963,12 +1977,12 @@ func (s *Server) getCodec(contentSubtype string) baseCodec { return s.opts.codec } if contentSubtype == "" { - return encoding.GetCodec(proto.Name) + return getCodec(proto.Name) } - codec := encoding.GetCodec(contentSubtype) + codec := getCodec(contentSubtype) if codec == nil { logger.Warningf("Unsupported codec %q. Defaulting to %q for now. This will start to fail in future releases.", contentSubtype, proto.Name) - return encoding.GetCodec(proto.Name) + return getCodec(proto.Name) } return codec } diff --git a/vendor/google.golang.org/grpc/shared_buffer_pool.go b/vendor/google.golang.org/grpc/shared_buffer_pool.go deleted file mode 100644 index 48a64cfe8e..0000000000 --- a/vendor/google.golang.org/grpc/shared_buffer_pool.go +++ /dev/null @@ -1,154 +0,0 @@ -/* - * - * Copyright 2023 gRPC authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package grpc - -import "sync" - -// SharedBufferPool is a pool of buffers that can be shared, resulting in -// decreased memory allocation. Currently, in gRPC-go, it is only utilized -// for parsing incoming messages. -// -// # Experimental -// -// Notice: This API is EXPERIMENTAL and may be changed or removed in a -// later release. -type SharedBufferPool interface { - // Get returns a buffer with specified length from the pool. - // - // The returned byte slice may be not zero initialized. - Get(length int) []byte - - // Put returns a buffer to the pool. - Put(*[]byte) -} - -// NewSharedBufferPool creates a simple SharedBufferPool with buckets -// of different sizes to optimize memory usage. This prevents the pool from -// wasting large amounts of memory, even when handling messages of varying sizes. -// -// # Experimental -// -// Notice: This API is EXPERIMENTAL and may be changed or removed in a -// later release. -func NewSharedBufferPool() SharedBufferPool { - return &simpleSharedBufferPool{ - pools: [poolArraySize]simpleSharedBufferChildPool{ - newBytesPool(level0PoolMaxSize), - newBytesPool(level1PoolMaxSize), - newBytesPool(level2PoolMaxSize), - newBytesPool(level3PoolMaxSize), - newBytesPool(level4PoolMaxSize), - newBytesPool(0), - }, - } -} - -// simpleSharedBufferPool is a simple implementation of SharedBufferPool. -type simpleSharedBufferPool struct { - pools [poolArraySize]simpleSharedBufferChildPool -} - -func (p *simpleSharedBufferPool) Get(size int) []byte { - return p.pools[p.poolIdx(size)].Get(size) -} - -func (p *simpleSharedBufferPool) Put(bs *[]byte) { - p.pools[p.poolIdx(cap(*bs))].Put(bs) -} - -func (p *simpleSharedBufferPool) poolIdx(size int) int { - switch { - case size <= level0PoolMaxSize: - return level0PoolIdx - case size <= level1PoolMaxSize: - return level1PoolIdx - case size <= level2PoolMaxSize: - return level2PoolIdx - case size <= level3PoolMaxSize: - return level3PoolIdx - case size <= level4PoolMaxSize: - return level4PoolIdx - default: - return levelMaxPoolIdx - } -} - -const ( - level0PoolMaxSize = 16 // 16 B - level1PoolMaxSize = level0PoolMaxSize * 16 // 256 B - level2PoolMaxSize = level1PoolMaxSize * 16 // 4 KB - level3PoolMaxSize = level2PoolMaxSize * 16 // 64 KB - level4PoolMaxSize = level3PoolMaxSize * 16 // 1 MB -) - -const ( - level0PoolIdx = iota - level1PoolIdx - level2PoolIdx - level3PoolIdx - level4PoolIdx - levelMaxPoolIdx - poolArraySize -) - -type simpleSharedBufferChildPool interface { - Get(size int) []byte - Put(any) -} - -type bufferPool struct { - sync.Pool - - defaultSize int -} - -func (p *bufferPool) Get(size int) []byte { - bs := p.Pool.Get().(*[]byte) - - if cap(*bs) < size { - p.Pool.Put(bs) - - return make([]byte, size) - } - - return (*bs)[:size] -} - -func newBytesPool(size int) simpleSharedBufferChildPool { - return &bufferPool{ - Pool: sync.Pool{ - New: func() any { - bs := make([]byte, size) - return &bs - }, - }, - defaultSize: size, - } -} - -// nopBufferPool is a buffer pool just makes new buffer without pooling. -type nopBufferPool struct { -} - -func (nopBufferPool) Get(length int) []byte { - return make([]byte, length) -} - -func (nopBufferPool) Put(*[]byte) { -} diff --git a/vendor/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go index fdb0bd6518..71195c4943 100644 --- a/vendor/google.golang.org/grpc/stats/stats.go +++ b/vendor/google.golang.org/grpc/stats/stats.go @@ -77,9 +77,6 @@ type InPayload struct { // the call to HandleRPC which provides the InPayload returns and must be // copied if needed later. Payload any - // Data is the serialized message payload. - // Deprecated: Data will be removed in the next release. - Data []byte // Length is the size of the uncompressed payload data. Does not include any // framing (gRPC or HTTP/2). @@ -150,9 +147,6 @@ type OutPayload struct { // the call to HandleRPC which provides the OutPayload returns and must be // copied if needed later. Payload any - // Data is the serialized message payload. - // Deprecated: Data will be removed in the next release. - Data []byte // Length is the size of the uncompressed payload data. Does not include any // framing (gRPC or HTTP/2). Length int diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index 8051ef5b51..bb2b2a216c 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -41,6 +41,7 @@ import ( "google.golang.org/grpc/internal/serviceconfig" istatus "google.golang.org/grpc/internal/status" "google.golang.org/grpc/internal/transport" + "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/stats" @@ -359,7 +360,7 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client cs.attempt = a return nil } - if err := cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) }); err != nil { + if err := cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op, nil) }); err != nil { return nil, err } @@ -517,7 +518,7 @@ func (a *csAttempt) newStream() error { } a.s = s a.ctx = s.Context() - a.p = &parser{r: s, recvBufferPool: a.cs.cc.dopts.recvBufferPool} + a.p = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool} return nil } @@ -566,10 +567,15 @@ type clientStream struct { // place where we need to check if the attempt is nil. attempt *csAttempt // TODO(hedging): hedging will have multiple attempts simultaneously. - committed bool // active attempt committed for retry? - onCommit func() - buffer []func(a *csAttempt) error // operations to replay on retry - bufferSize int // current size of buffer + committed bool // active attempt committed for retry? + onCommit func() + replayBuffer []replayOp // operations to replay on retry + replayBufferSize int // current size of replayBuffer +} + +type replayOp struct { + op func(a *csAttempt) error + cleanup func() } // csAttempt implements a single transport stream attempt within a @@ -607,7 +613,12 @@ func (cs *clientStream) commitAttemptLocked() { cs.onCommit() } cs.committed = true - cs.buffer = nil + for _, op := range cs.replayBuffer { + if op.cleanup != nil { + op.cleanup() + } + } + cs.replayBuffer = nil } func (cs *clientStream) commitAttempt() { @@ -732,7 +743,7 @@ func (cs *clientStream) retryLocked(attempt *csAttempt, lastErr error) error { // the stream is canceled. return err } - // Note that the first op in the replay buffer always sets cs.attempt + // Note that the first op in replayBuffer always sets cs.attempt // if it is able to pick a transport and create a stream. if lastErr = cs.replayBufferLocked(attempt); lastErr == nil { return nil @@ -761,7 +772,7 @@ func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) // already be status errors. return toRPCErr(op(cs.attempt)) } - if len(cs.buffer) == 0 { + if len(cs.replayBuffer) == 0 { // For the first op, which controls creation of the stream and // assigns cs.attempt, we need to create a new attempt inline // before executing the first op. On subsequent ops, the attempt @@ -851,25 +862,26 @@ func (cs *clientStream) Trailer() metadata.MD { } func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error { - for _, f := range cs.buffer { - if err := f(attempt); err != nil { + for _, f := range cs.replayBuffer { + if err := f.op(attempt); err != nil { return err } } return nil } -func (cs *clientStream) bufferForRetryLocked(sz int, op func(a *csAttempt) error) { +func (cs *clientStream) bufferForRetryLocked(sz int, op func(a *csAttempt) error, cleanup func()) { // Note: we still will buffer if retry is disabled (for transparent retries). if cs.committed { return } - cs.bufferSize += sz - if cs.bufferSize > cs.callInfo.maxRetryRPCBufferSize { + cs.replayBufferSize += sz + if cs.replayBufferSize > cs.callInfo.maxRetryRPCBufferSize { cs.commitAttemptLocked() + cleanup() return } - cs.buffer = append(cs.buffer, op) + cs.replayBuffer = append(cs.replayBuffer, replayOp{op: op, cleanup: cleanup}) } func (cs *clientStream) SendMsg(m any) (err error) { @@ -891,23 +903,50 @@ func (cs *clientStream) SendMsg(m any) (err error) { } // load hdr, payload, data - hdr, payload, data, err := prepareMsg(m, cs.codec, cs.cp, cs.comp) + hdr, data, payload, pf, err := prepareMsg(m, cs.codec, cs.cp, cs.comp, cs.cc.dopts.copts.BufferPool) if err != nil { return err } + defer func() { + data.Free() + // only free payload if compression was made, and therefore it is a different set + // of buffers from data. + if pf.isCompressed() { + payload.Free() + } + }() + + dataLen := data.Len() + payloadLen := payload.Len() // TODO(dfawley): should we be checking len(data) instead? - if len(payload) > *cs.callInfo.maxSendMessageSize { - return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payload), *cs.callInfo.maxSendMessageSize) + if payloadLen > *cs.callInfo.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payloadLen, *cs.callInfo.maxSendMessageSize) } + + // always take an extra ref in case data == payload (i.e. when the data isn't + // compressed). The original ref will always be freed by the deferred free above. + payload.Ref() op := func(a *csAttempt) error { - return a.sendMsg(m, hdr, payload, data) + return a.sendMsg(m, hdr, payload, dataLen, payloadLen) + } + + // onSuccess is invoked when the op is captured for a subsequent retry. If the + // stream was established by a previous message and therefore retries are + // disabled, onSuccess will not be invoked, and payloadRef can be freed + // immediately. + onSuccessCalled := false + err = cs.withRetry(op, func() { + cs.bufferForRetryLocked(len(hdr)+payloadLen, op, payload.Free) + onSuccessCalled = true + }) + if !onSuccessCalled { + payload.Free() } - err = cs.withRetry(op, func() { cs.bufferForRetryLocked(len(hdr)+len(payload), op) }) if len(cs.binlogs) != 0 && err == nil { cm := &binarylog.ClientMessage{ OnClientSide: true, - Message: data, + Message: data.Materialize(), } for _, binlog := range cs.binlogs { binlog.Log(cs.ctx, cm) @@ -924,6 +963,7 @@ func (cs *clientStream) RecvMsg(m any) error { var recvInfo *payloadInfo if len(cs.binlogs) != 0 { recvInfo = &payloadInfo{} + defer recvInfo.free() } err := cs.withRetry(func(a *csAttempt) error { return a.recvMsg(m, recvInfo) @@ -931,7 +971,7 @@ func (cs *clientStream) RecvMsg(m any) error { if len(cs.binlogs) != 0 && err == nil { sm := &binarylog.ServerMessage{ OnClientSide: true, - Message: recvInfo.uncompressedBytes, + Message: recvInfo.uncompressedBytes.Materialize(), } for _, binlog := range cs.binlogs { binlog.Log(cs.ctx, sm) @@ -958,7 +998,7 @@ func (cs *clientStream) CloseSend() error { // RecvMsg. This also matches historical behavior. return nil } - cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) }) + cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op, nil) }) if len(cs.binlogs) != 0 { chc := &binarylog.ClientHalfClose{ OnClientSide: true, @@ -1034,7 +1074,7 @@ func (cs *clientStream) finish(err error) { cs.cancel() } -func (a *csAttempt) sendMsg(m any, hdr, payld, data []byte) error { +func (a *csAttempt) sendMsg(m any, hdr []byte, payld mem.BufferSlice, dataLength, payloadLength int) error { cs := a.cs if a.trInfo != nil { a.mu.Lock() @@ -1052,8 +1092,10 @@ func (a *csAttempt) sendMsg(m any, hdr, payld, data []byte) error { } return io.EOF } - for _, sh := range a.statsHandlers { - sh.HandleRPC(a.ctx, outPayload(true, m, data, payld, time.Now())) + if len(a.statsHandlers) != 0 { + for _, sh := range a.statsHandlers { + sh.HandleRPC(a.ctx, outPayload(true, m, dataLength, payloadLength, time.Now())) + } } if channelz.IsOn() { a.t.IncrMsgSent() @@ -1065,6 +1107,7 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { cs := a.cs if len(a.statsHandlers) != 0 && payInfo == nil { payInfo = &payloadInfo{} + defer payInfo.free() } if !a.decompSet { @@ -1083,8 +1126,7 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { // Only initialize this state once per stream. a.decompSet = true } - err = recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp) - if err != nil { + if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp, false); err != nil { if err == io.EOF { if statusErr := a.s.Status().Err(); statusErr != nil { return statusErr @@ -1103,14 +1145,12 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { } for _, sh := range a.statsHandlers { sh.HandleRPC(a.ctx, &stats.InPayload{ - Client: true, - RecvTime: time.Now(), - Payload: m, - // TODO truncate large payload. - Data: payInfo.uncompressedBytes, + Client: true, + RecvTime: time.Now(), + Payload: m, WireLength: payInfo.compressedLength + headerLen, CompressedLength: payInfo.compressedLength, - Length: len(payInfo.uncompressedBytes), + Length: payInfo.uncompressedBytes.Len(), }) } if channelz.IsOn() { @@ -1122,14 +1162,12 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { } // Special handling for non-server-stream rpcs. // This recv expects EOF or errors, so we don't collect inPayload. - err = recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp) - if err == nil { - return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) - } - if err == io.EOF { + if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp, false); err == io.EOF { return a.s.Status().Err() // non-server streaming Recv returns nil on success + } else if err != nil { + return toRPCErr(err) } - return toRPCErr(err) + return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) } func (a *csAttempt) finish(err error) { @@ -1185,12 +1223,12 @@ func (a *csAttempt) finish(err error) { a.mu.Unlock() } -// newClientStream creates a ClientStream with the specified transport, on the +// newNonRetryClientStream creates a ClientStream with the specified transport, on the // given addrConn. // // It's expected that the given transport is either the same one in addrConn, or // is already closed. To avoid race, transport is specified separately, instead -// of using ac.transpot. +// of using ac.transport. // // Main difference between this and ClientConn.NewStream: // - no retry @@ -1276,7 +1314,7 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin return nil, err } as.s = s - as.p = &parser{r: s, recvBufferPool: ac.dopts.recvBufferPool} + as.p = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool} ac.incrCallsStarted() if desc != unaryStreamDesc { // Listen on stream context to cleanup when the stream context is @@ -1373,17 +1411,26 @@ func (as *addrConnStream) SendMsg(m any) (err error) { } // load hdr, payload, data - hdr, payld, _, err := prepareMsg(m, as.codec, as.cp, as.comp) + hdr, data, payload, pf, err := prepareMsg(m, as.codec, as.cp, as.comp, as.ac.dopts.copts.BufferPool) if err != nil { return err } + defer func() { + data.Free() + // only free payload if compression was made, and therefore it is a different set + // of buffers from data. + if pf.isCompressed() { + payload.Free() + } + }() + // TODO(dfawley): should we be checking len(data) instead? - if len(payld) > *as.callInfo.maxSendMessageSize { - return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payld), *as.callInfo.maxSendMessageSize) + if payload.Len() > *as.callInfo.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payload.Len(), *as.callInfo.maxSendMessageSize) } - if err := as.t.Write(as.s, hdr, payld, &transport.Options{Last: !as.desc.ClientStreams}); err != nil { + if err := as.t.Write(as.s, hdr, payload, &transport.Options{Last: !as.desc.ClientStreams}); err != nil { if !as.desc.ClientStreams { // For non-client-streaming RPCs, we return nil instead of EOF on error // because the generated code requires it. finish is not called; RecvMsg() @@ -1423,8 +1470,7 @@ func (as *addrConnStream) RecvMsg(m any) (err error) { // Only initialize this state once per stream. as.decompSet = true } - err = recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp) - if err != nil { + if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err != nil { if err == io.EOF { if statusErr := as.s.Status().Err(); statusErr != nil { return statusErr @@ -1444,14 +1490,12 @@ func (as *addrConnStream) RecvMsg(m any) (err error) { // Special handling for non-server-stream rpcs. // This recv expects EOF or errors, so we don't collect inPayload. - err = recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp) - if err == nil { - return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) - } - if err == io.EOF { + if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err == io.EOF { return as.s.Status().Err() // non-server streaming Recv returns nil on success + } else if err != nil { + return toRPCErr(err) } - return toRPCErr(err) + return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) } func (as *addrConnStream) finish(err error) { @@ -1645,18 +1689,31 @@ func (ss *serverStream) SendMsg(m any) (err error) { } // load hdr, payload, data - hdr, payload, data, err := prepareMsg(m, ss.codec, ss.cp, ss.comp) + hdr, data, payload, pf, err := prepareMsg(m, ss.codec, ss.cp, ss.comp, ss.p.bufferPool) if err != nil { return err } + defer func() { + data.Free() + // only free payload if compression was made, and therefore it is a different set + // of buffers from data. + if pf.isCompressed() { + payload.Free() + } + }() + + dataLen := data.Len() + payloadLen := payload.Len() + // TODO(dfawley): should we be checking len(data) instead? - if len(payload) > ss.maxSendMessageSize { - return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(payload), ss.maxSendMessageSize) + if payloadLen > ss.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payloadLen, ss.maxSendMessageSize) } if err := ss.t.Write(ss.s, hdr, payload, &transport.Options{Last: false}); err != nil { return toRPCErr(err) } + if len(ss.binlogs) != 0 { if !ss.serverHeaderBinlogged { h, _ := ss.s.Header() @@ -1669,7 +1726,7 @@ func (ss *serverStream) SendMsg(m any) (err error) { } } sm := &binarylog.ServerMessage{ - Message: data, + Message: data.Materialize(), } for _, binlog := range ss.binlogs { binlog.Log(ss.ctx, sm) @@ -1677,7 +1734,7 @@ func (ss *serverStream) SendMsg(m any) (err error) { } if len(ss.statsHandler) != 0 { for _, sh := range ss.statsHandler { - sh.HandleRPC(ss.s.Context(), outPayload(false, m, data, payload, time.Now())) + sh.HandleRPC(ss.s.Context(), outPayload(false, m, dataLen, payloadLen, time.Now())) } } return nil @@ -1714,8 +1771,9 @@ func (ss *serverStream) RecvMsg(m any) (err error) { var payInfo *payloadInfo if len(ss.statsHandler) != 0 || len(ss.binlogs) != 0 { payInfo = &payloadInfo{} + defer payInfo.free() } - if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp); err != nil { + if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp, true); err != nil { if err == io.EOF { if len(ss.binlogs) != 0 { chc := &binarylog.ClientHalfClose{} @@ -1733,11 +1791,9 @@ func (ss *serverStream) RecvMsg(m any) (err error) { if len(ss.statsHandler) != 0 { for _, sh := range ss.statsHandler { sh.HandleRPC(ss.s.Context(), &stats.InPayload{ - RecvTime: time.Now(), - Payload: m, - // TODO truncate large payload. - Data: payInfo.uncompressedBytes, - Length: len(payInfo.uncompressedBytes), + RecvTime: time.Now(), + Payload: m, + Length: payInfo.uncompressedBytes.Len(), WireLength: payInfo.compressedLength + headerLen, CompressedLength: payInfo.compressedLength, }) @@ -1745,7 +1801,7 @@ func (ss *serverStream) RecvMsg(m any) (err error) { } if len(ss.binlogs) != 0 { cm := &binarylog.ClientMessage{ - Message: payInfo.uncompressedBytes, + Message: payInfo.uncompressedBytes.Materialize(), } for _, binlog := range ss.binlogs { binlog.Log(ss.ctx, cm) @@ -1760,23 +1816,26 @@ func MethodFromServerStream(stream ServerStream) (string, bool) { return Method(stream.Context()) } -// prepareMsg returns the hdr, payload and data -// using the compressors passed or using the -// passed preparedmsg -func prepareMsg(m any, codec baseCodec, cp Compressor, comp encoding.Compressor) (hdr, payload, data []byte, err error) { +// prepareMsg returns the hdr, payload and data using the compressors passed or +// using the passed preparedmsg. The returned boolean indicates whether +// compression was made and therefore whether the payload needs to be freed in +// addition to the returned data. Freeing the payload if the returned boolean is +// false can lead to undefined behavior. +func prepareMsg(m any, codec baseCodec, cp Compressor, comp encoding.Compressor, pool mem.BufferPool) (hdr []byte, data, payload mem.BufferSlice, pf payloadFormat, err error) { if preparedMsg, ok := m.(*PreparedMsg); ok { - return preparedMsg.hdr, preparedMsg.payload, preparedMsg.encodedData, nil + return preparedMsg.hdr, preparedMsg.encodedData, preparedMsg.payload, preparedMsg.pf, nil } // The input interface is not a prepared msg. // Marshal and Compress the data at this point data, err = encode(codec, m) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } - compData, err := compress(data, cp, comp) + compData, pf, err := compress(data, cp, comp, pool) if err != nil { - return nil, nil, nil, err + data.Free() + return nil, nil, nil, 0, err } - hdr, payload = msgHeader(data, compData) - return hdr, payload, data, nil + hdr, payload = msgHeader(data, compData, pf) + return hdr, data, payload, pf, nil } diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index bafaef99be..1ffec6e2ce 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.65.0" +const Version = "1.66.0" diff --git a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go index 3674914f70..4fe0c5eb25 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go +++ b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go @@ -17,6 +17,7 @@ limitations under the License. package runtime import ( + "context" "fmt" "net/http" "runtime" @@ -35,7 +36,7 @@ var ( ) // PanicHandlers is a list of functions which will be invoked when a panic happens. -var PanicHandlers = []func(interface{}){logPanic} +var PanicHandlers = []func(context.Context, interface{}){logPanic} // HandleCrash simply catches a crash and logs an error. Meant to be called via // defer. Additional context-specific handlers can be provided, and will be @@ -43,23 +44,54 @@ var PanicHandlers = []func(interface{}){logPanic} // handlers and logging the panic message. // // E.g., you can provide one or more additional handlers for something like shutting down go routines gracefully. +// +// TODO(pohly): logcheck:context // HandleCrashWithContext should be used instead of HandleCrash in code which supports contextual logging. func HandleCrash(additionalHandlers ...func(interface{})) { if r := recover(); r != nil { - for _, fn := range PanicHandlers { - fn(r) - } - for _, fn := range additionalHandlers { - fn(r) - } - if ReallyCrash { - // Actually proceed to panic. - panic(r) + additionalHandlersWithContext := make([]func(context.Context, interface{}), len(additionalHandlers)) + for i, handler := range additionalHandlers { + handler := handler // capture loop variable + additionalHandlersWithContext[i] = func(_ context.Context, r interface{}) { + handler(r) + } } + + handleCrash(context.Background(), r, additionalHandlersWithContext...) + } +} + +// HandleCrashWithContext simply catches a crash and logs an error. Meant to be called via +// defer. Additional context-specific handlers can be provided, and will be +// called in case of panic. HandleCrash actually crashes, after calling the +// handlers and logging the panic message. +// +// E.g., you can provide one or more additional handlers for something like shutting down go routines gracefully. +// +// The context is used to determine how to log. +func HandleCrashWithContext(ctx context.Context, additionalHandlers ...func(context.Context, interface{})) { + if r := recover(); r != nil { + handleCrash(ctx, r, additionalHandlers...) + } +} + +// handleCrash is the common implementation of HandleCrash and HandleCrash. +// Having those call a common implementation ensures that the stack depth +// is the same regardless through which path the handlers get invoked. +func handleCrash(ctx context.Context, r any, additionalHandlers ...func(context.Context, interface{})) { + for _, fn := range PanicHandlers { + fn(ctx, r) + } + for _, fn := range additionalHandlers { + fn(ctx, r) + } + if ReallyCrash { + // Actually proceed to panic. + panic(r) } } // logPanic logs the caller tree when a panic occurs (except in the special case of http.ErrAbortHandler). -func logPanic(r interface{}) { +func logPanic(ctx context.Context, r interface{}) { if r == http.ErrAbortHandler { // honor the http.ErrAbortHandler sentinel panic value: // ErrAbortHandler is a sentinel panic value to abort a handler. @@ -73,10 +105,20 @@ func logPanic(r interface{}) { const size = 64 << 10 stacktrace := make([]byte, size) stacktrace = stacktrace[:runtime.Stack(stacktrace, false)] + + // We don't really know how many call frames to skip because the Go + // panic handler is between us and the code where the panic occurred. + // If it's one function (as in Go 1.21), then skipping four levels + // gets us to the function which called the `defer HandleCrashWithontext(...)`. + logger := klog.FromContext(ctx).WithCallDepth(4) + + // For backwards compatibility, conversion to string + // is handled here instead of defering to the logging + // backend. if _, ok := r.(string); ok { - klog.Errorf("Observed a panic: %s\n%s", r, stacktrace) + logger.Error(nil, "Observed a panic", "panic", r, "stacktrace", string(stacktrace)) } else { - klog.Errorf("Observed a panic: %#v (%v)\n%s", r, r, stacktrace) + logger.Error(nil, "Observed a panic", "panic", fmt.Sprintf("%v", r), "panicGoValue", fmt.Sprintf("%#v", r), "stacktrace", string(stacktrace)) } } @@ -84,35 +126,76 @@ func logPanic(r interface{}) { // error occurs. // TODO(lavalamp): for testability, this and the below HandleError function // should be packaged up into a testable and reusable object. -var ErrorHandlers = []func(error){ +var ErrorHandlers = []ErrorHandler{ logError, - (&rudimentaryErrorBackoff{ - lastErrorTime: time.Now(), - // 1ms was the number folks were able to stomach as a global rate limit. - // If you need to log errors more than 1000 times a second you - // should probably consider fixing your code instead. :) - minPeriod: time.Millisecond, - }).OnError, + func(_ context.Context, _ error, _ string, _ ...interface{}) { + (&rudimentaryErrorBackoff{ + lastErrorTime: time.Now(), + // 1ms was the number folks were able to stomach as a global rate limit. + // If you need to log errors more than 1000 times a second you + // should probably consider fixing your code instead. :) + minPeriod: time.Millisecond, + }).OnError() + }, } +type ErrorHandler func(ctx context.Context, err error, msg string, keysAndValues ...interface{}) + // HandlerError is a method to invoke when a non-user facing piece of code cannot // return an error and needs to indicate it has been ignored. Invoking this method // is preferable to logging the error - the default behavior is to log but the // errors may be sent to a remote server for analysis. +// +// TODO(pohly): logcheck:context // HandleErrorWithContext should be used instead of HandleError in code which supports contextual logging. func HandleError(err error) { // this is sometimes called with a nil error. We probably shouldn't fail and should do nothing instead if err == nil { return } + handleError(context.Background(), err, "Unhandled Error") +} + +// HandlerErrorWithContext is a method to invoke when a non-user facing piece of code cannot +// return an error and needs to indicate it has been ignored. Invoking this method +// is preferable to logging the error - the default behavior is to log but the +// errors may be sent to a remote server for analysis. The context is used to +// determine how to log the error. +// +// If contextual logging is enabled, the default log output is equivalent to +// +// logr.FromContext(ctx).WithName("UnhandledError").Error(err, msg, keysAndValues...) +// +// Without contextual logging, it is equivalent to: +// +// klog.ErrorS(err, msg, keysAndValues...) +// +// In contrast to HandleError, passing nil for the error is still going to +// trigger a log entry. Don't construct a new error or wrap an error +// with fmt.Errorf. Instead, add additional information via the mssage +// and key/value pairs. +// +// This variant should be used instead of HandleError because it supports +// structured, contextual logging. +func HandleErrorWithContext(ctx context.Context, err error, msg string, keysAndValues ...interface{}) { + handleError(ctx, err, msg, keysAndValues...) +} + +// handleError is the common implementation of HandleError and HandleErrorWithContext. +// Using this common implementation ensures that the stack depth +// is the same regardless through which path the handlers get invoked. +func handleError(ctx context.Context, err error, msg string, keysAndValues ...interface{}) { for _, fn := range ErrorHandlers { - fn(err) + fn(ctx, err, msg, keysAndValues...) } } -// logError prints an error with the call stack of the location it was reported -func logError(err error) { - klog.ErrorDepth(2, err) +// logError prints an error with the call stack of the location it was reported. +// It expects to be called as -> HandleError[WithContext] -> handleError -> logError. +func logError(ctx context.Context, err error, msg string, keysAndValues ...interface{}) { + logger := klog.FromContext(ctx).WithCallDepth(3) + logger = klog.LoggerWithName(logger, "UnhandledError") + logger.Error(err, msg, keysAndValues...) //nolint:logcheck // logcheck complains about unknown key/value pairs. } type rudimentaryErrorBackoff struct { @@ -125,7 +208,7 @@ type rudimentaryErrorBackoff struct { // OnError will block if it is called more often than the embedded period time. // This will prevent overly tight hot error loops. -func (r *rudimentaryErrorBackoff) OnError(error) { +func (r *rudimentaryErrorBackoff) OnError() { now := time.Now() // start the timer before acquiring the lock r.lastErrorTimeLock.Lock() d := now.Sub(r.lastErrorTime) diff --git a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go index efda7c197f..1f9567881c 100644 --- a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go +++ b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go @@ -24,49 +24,66 @@ import ( "golang.org/x/time/rate" ) -type RateLimiter interface { +// Deprecated: RateLimiter is deprecated, use TypedRateLimiter instead. +type RateLimiter TypedRateLimiter[any] + +type TypedRateLimiter[T comparable] interface { // When gets an item and gets to decide how long that item should wait - When(item interface{}) time.Duration + When(item T) time.Duration // Forget indicates that an item is finished being retried. Doesn't matter whether it's for failing // or for success, we'll stop tracking it - Forget(item interface{}) + Forget(item T) // NumRequeues returns back how many failures the item has had - NumRequeues(item interface{}) int + NumRequeues(item T) int } // DefaultControllerRateLimiter is a no-arg constructor for a default rate limiter for a workqueue. It has // both overall and per-item rate limiting. The overall is a token bucket and the per-item is exponential +// +// Deprecated: Use DefaultTypedControllerRateLimiter instead. func DefaultControllerRateLimiter() RateLimiter { - return NewMaxOfRateLimiter( - NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second), + return DefaultTypedControllerRateLimiter[any]() +} + +// DefaultTypedControllerRateLimiter is a no-arg constructor for a default rate limiter for a workqueue. It has +// both overall and per-item rate limiting. The overall is a token bucket and the per-item is exponential +func DefaultTypedControllerRateLimiter[T comparable]() TypedRateLimiter[T] { + return NewTypedMaxOfRateLimiter( + NewTypedItemExponentialFailureRateLimiter[T](5*time.Millisecond, 1000*time.Second), // 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item) - &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)}, + &TypedBucketRateLimiter[T]{Limiter: rate.NewLimiter(rate.Limit(10), 100)}, ) } -// BucketRateLimiter adapts a standard bucket to the workqueue ratelimiter API -type BucketRateLimiter struct { +// Deprecated: BucketRateLimiter is deprecated, use TypedBucketRateLimiter instead. +type BucketRateLimiter = TypedBucketRateLimiter[any] + +// TypedBucketRateLimiter adapts a standard bucket to the workqueue ratelimiter API +type TypedBucketRateLimiter[T comparable] struct { *rate.Limiter } var _ RateLimiter = &BucketRateLimiter{} -func (r *BucketRateLimiter) When(item interface{}) time.Duration { +func (r *TypedBucketRateLimiter[T]) When(item T) time.Duration { return r.Limiter.Reserve().Delay() } -func (r *BucketRateLimiter) NumRequeues(item interface{}) int { +func (r *TypedBucketRateLimiter[T]) NumRequeues(item T) int { return 0 } -func (r *BucketRateLimiter) Forget(item interface{}) { +func (r *TypedBucketRateLimiter[T]) Forget(item T) { } -// ItemExponentialFailureRateLimiter does a simple baseDelay*2^ limit +// Deprecated: ItemExponentialFailureRateLimiter is deprecated, use TypedItemExponentialFailureRateLimiter instead. +type ItemExponentialFailureRateLimiter = TypedItemExponentialFailureRateLimiter[any] + +// TypedItemExponentialFailureRateLimiter does a simple baseDelay*2^ limit // dealing with max failures and expiration are up to the caller -type ItemExponentialFailureRateLimiter struct { +type TypedItemExponentialFailureRateLimiter[T comparable] struct { failuresLock sync.Mutex - failures map[interface{}]int + failures map[T]int baseDelay time.Duration maxDelay time.Duration @@ -74,19 +91,29 @@ type ItemExponentialFailureRateLimiter struct { var _ RateLimiter = &ItemExponentialFailureRateLimiter{} +// Deprecated: NewItemExponentialFailureRateLimiter is deprecated, use NewTypedItemExponentialFailureRateLimiter instead. func NewItemExponentialFailureRateLimiter(baseDelay time.Duration, maxDelay time.Duration) RateLimiter { - return &ItemExponentialFailureRateLimiter{ - failures: map[interface{}]int{}, + return NewTypedItemExponentialFailureRateLimiter[any](baseDelay, maxDelay) +} + +func NewTypedItemExponentialFailureRateLimiter[T comparable](baseDelay time.Duration, maxDelay time.Duration) TypedRateLimiter[T] { + return &TypedItemExponentialFailureRateLimiter[T]{ + failures: map[T]int{}, baseDelay: baseDelay, maxDelay: maxDelay, } } +// Deprecated: DefaultItemBasedRateLimiter is deprecated, use DefaultTypedItemBasedRateLimiter instead. func DefaultItemBasedRateLimiter() RateLimiter { - return NewItemExponentialFailureRateLimiter(time.Millisecond, 1000*time.Second) + return DefaultTypedItemBasedRateLimiter[any]() } -func (r *ItemExponentialFailureRateLimiter) When(item interface{}) time.Duration { +func DefaultTypedItemBasedRateLimiter[T comparable]() TypedRateLimiter[T] { + return NewTypedItemExponentialFailureRateLimiter[T](time.Millisecond, 1000*time.Second) +} + +func (r *TypedItemExponentialFailureRateLimiter[T]) When(item T) time.Duration { r.failuresLock.Lock() defer r.failuresLock.Unlock() @@ -107,14 +134,14 @@ func (r *ItemExponentialFailureRateLimiter) When(item interface{}) time.Duration return calculated } -func (r *ItemExponentialFailureRateLimiter) NumRequeues(item interface{}) int { +func (r *TypedItemExponentialFailureRateLimiter[T]) NumRequeues(item T) int { r.failuresLock.Lock() defer r.failuresLock.Unlock() return r.failures[item] } -func (r *ItemExponentialFailureRateLimiter) Forget(item interface{}) { +func (r *TypedItemExponentialFailureRateLimiter[T]) Forget(item T) { r.failuresLock.Lock() defer r.failuresLock.Unlock() @@ -122,9 +149,13 @@ func (r *ItemExponentialFailureRateLimiter) Forget(item interface{}) { } // ItemFastSlowRateLimiter does a quick retry for a certain number of attempts, then a slow retry after that -type ItemFastSlowRateLimiter struct { +// Deprecated: Use TypedItemFastSlowRateLimiter instead. +type ItemFastSlowRateLimiter = TypedItemFastSlowRateLimiter[any] + +// TypedItemFastSlowRateLimiter does a quick retry for a certain number of attempts, then a slow retry after that +type TypedItemFastSlowRateLimiter[T comparable] struct { failuresLock sync.Mutex - failures map[interface{}]int + failures map[T]int maxFastAttempts int fastDelay time.Duration @@ -133,16 +164,21 @@ type ItemFastSlowRateLimiter struct { var _ RateLimiter = &ItemFastSlowRateLimiter{} +// Deprecated: NewItemFastSlowRateLimiter is deprecated, use NewTypedItemFastSlowRateLimiter instead. func NewItemFastSlowRateLimiter(fastDelay, slowDelay time.Duration, maxFastAttempts int) RateLimiter { - return &ItemFastSlowRateLimiter{ - failures: map[interface{}]int{}, + return NewTypedItemFastSlowRateLimiter[any](fastDelay, slowDelay, maxFastAttempts) +} + +func NewTypedItemFastSlowRateLimiter[T comparable](fastDelay, slowDelay time.Duration, maxFastAttempts int) TypedRateLimiter[T] { + return &TypedItemFastSlowRateLimiter[T]{ + failures: map[T]int{}, fastDelay: fastDelay, slowDelay: slowDelay, maxFastAttempts: maxFastAttempts, } } -func (r *ItemFastSlowRateLimiter) When(item interface{}) time.Duration { +func (r *TypedItemFastSlowRateLimiter[T]) When(item T) time.Duration { r.failuresLock.Lock() defer r.failuresLock.Unlock() @@ -155,14 +191,14 @@ func (r *ItemFastSlowRateLimiter) When(item interface{}) time.Duration { return r.slowDelay } -func (r *ItemFastSlowRateLimiter) NumRequeues(item interface{}) int { +func (r *TypedItemFastSlowRateLimiter[T]) NumRequeues(item T) int { r.failuresLock.Lock() defer r.failuresLock.Unlock() return r.failures[item] } -func (r *ItemFastSlowRateLimiter) Forget(item interface{}) { +func (r *TypedItemFastSlowRateLimiter[T]) Forget(item T) { r.failuresLock.Lock() defer r.failuresLock.Unlock() @@ -172,11 +208,18 @@ func (r *ItemFastSlowRateLimiter) Forget(item interface{}) { // MaxOfRateLimiter calls every RateLimiter and returns the worst case response // When used with a token bucket limiter, the burst could be apparently exceeded in cases where particular items // were separately delayed a longer time. -type MaxOfRateLimiter struct { - limiters []RateLimiter +// +// Deprecated: Use TypedMaxOfRateLimiter instead. +type MaxOfRateLimiter = TypedMaxOfRateLimiter[any] + +// TypedMaxOfRateLimiter calls every RateLimiter and returns the worst case response +// When used with a token bucket limiter, the burst could be apparently exceeded in cases where particular items +// were separately delayed a longer time. +type TypedMaxOfRateLimiter[T comparable] struct { + limiters []TypedRateLimiter[T] } -func (r *MaxOfRateLimiter) When(item interface{}) time.Duration { +func (r *TypedMaxOfRateLimiter[T]) When(item T) time.Duration { ret := time.Duration(0) for _, limiter := range r.limiters { curr := limiter.When(item) @@ -188,11 +231,16 @@ func (r *MaxOfRateLimiter) When(item interface{}) time.Duration { return ret } -func NewMaxOfRateLimiter(limiters ...RateLimiter) RateLimiter { - return &MaxOfRateLimiter{limiters: limiters} +// Deprecated: NewMaxOfRateLimiter is deprecated, use NewTypedMaxOfRateLimiter instead. +func NewMaxOfRateLimiter(limiters ...TypedRateLimiter[any]) RateLimiter { + return NewTypedMaxOfRateLimiter(limiters...) } -func (r *MaxOfRateLimiter) NumRequeues(item interface{}) int { +func NewTypedMaxOfRateLimiter[T comparable](limiters ...TypedRateLimiter[T]) TypedRateLimiter[T] { + return &TypedMaxOfRateLimiter[T]{limiters: limiters} +} + +func (r *TypedMaxOfRateLimiter[T]) NumRequeues(item T) int { ret := 0 for _, limiter := range r.limiters { curr := limiter.NumRequeues(item) @@ -204,23 +252,32 @@ func (r *MaxOfRateLimiter) NumRequeues(item interface{}) int { return ret } -func (r *MaxOfRateLimiter) Forget(item interface{}) { +func (r *TypedMaxOfRateLimiter[T]) Forget(item T) { for _, limiter := range r.limiters { limiter.Forget(item) } } // WithMaxWaitRateLimiter have maxDelay which avoids waiting too long -type WithMaxWaitRateLimiter struct { - limiter RateLimiter +// Deprecated: Use TypedWithMaxWaitRateLimiter instead. +type WithMaxWaitRateLimiter = TypedWithMaxWaitRateLimiter[any] + +// TypedWithMaxWaitRateLimiter have maxDelay which avoids waiting too long +type TypedWithMaxWaitRateLimiter[T comparable] struct { + limiter TypedRateLimiter[T] maxDelay time.Duration } +// Deprecated: NewWithMaxWaitRateLimiter is deprecated, use NewTypedWithMaxWaitRateLimiter instead. func NewWithMaxWaitRateLimiter(limiter RateLimiter, maxDelay time.Duration) RateLimiter { - return &WithMaxWaitRateLimiter{limiter: limiter, maxDelay: maxDelay} + return NewTypedWithMaxWaitRateLimiter[any](limiter, maxDelay) } -func (w WithMaxWaitRateLimiter) When(item interface{}) time.Duration { +func NewTypedWithMaxWaitRateLimiter[T comparable](limiter TypedRateLimiter[T], maxDelay time.Duration) TypedRateLimiter[T] { + return &TypedWithMaxWaitRateLimiter[T]{limiter: limiter, maxDelay: maxDelay} +} + +func (w TypedWithMaxWaitRateLimiter[T]) When(item T) time.Duration { delay := w.limiter.When(item) if delay > w.maxDelay { return w.maxDelay @@ -229,10 +286,10 @@ func (w WithMaxWaitRateLimiter) When(item interface{}) time.Duration { return delay } -func (w WithMaxWaitRateLimiter) Forget(item interface{}) { +func (w TypedWithMaxWaitRateLimiter[T]) Forget(item T) { w.limiter.Forget(item) } -func (w WithMaxWaitRateLimiter) NumRequeues(item interface{}) int { +func (w TypedWithMaxWaitRateLimiter[T]) NumRequeues(item T) int { return w.limiter.NumRequeues(item) } diff --git a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go index c1df720302..958b96a80c 100644 --- a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go +++ b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -27,14 +27,25 @@ import ( // DelayingInterface is an Interface that can Add an item at a later time. This makes it easier to // requeue items after failures without ending up in a hot-loop. -type DelayingInterface interface { - Interface +// +// Deprecated: use TypedDelayingInterface instead. +type DelayingInterface TypedDelayingInterface[any] + +// TypedDelayingInterface is an Interface that can Add an item at a later time. This makes it easier to +// requeue items after failures without ending up in a hot-loop. +type TypedDelayingInterface[T comparable] interface { + TypedInterface[T] // AddAfter adds an item to the workqueue after the indicated duration has passed - AddAfter(item interface{}, duration time.Duration) + AddAfter(item T, duration time.Duration) } // DelayingQueueConfig specifies optional configurations to customize a DelayingInterface. -type DelayingQueueConfig struct { +// +// Deprecated: use TypedDelayingQueueConfig instead. +type DelayingQueueConfig = TypedDelayingQueueConfig[any] + +// TypedDelayingQueueConfig specifies optional configurations to customize a DelayingInterface. +type TypedDelayingQueueConfig[T comparable] struct { // Name for the queue. If unnamed, the metrics will not be registered. Name string @@ -46,25 +57,42 @@ type DelayingQueueConfig struct { Clock clock.WithTicker // Queue optionally allows injecting custom queue Interface instead of the default one. - Queue Interface + Queue TypedInterface[T] } // NewDelayingQueue constructs a new workqueue with delayed queuing ability. // NewDelayingQueue does not emit metrics. For use with a MetricsProvider, please use // NewDelayingQueueWithConfig instead and specify a name. +// +// Deprecated: use TypedNewDelayingQueue instead. func NewDelayingQueue() DelayingInterface { return NewDelayingQueueWithConfig(DelayingQueueConfig{}) } +// TypedNewDelayingQueue constructs a new workqueue with delayed queuing ability. +// TypedNewDelayingQueue does not emit metrics. For use with a MetricsProvider, please use +// TypedNewDelayingQueueWithConfig instead and specify a name. +func TypedNewDelayingQueue[T comparable]() TypedDelayingInterface[T] { + return NewTypedDelayingQueueWithConfig(TypedDelayingQueueConfig[T]{}) +} + // NewDelayingQueueWithConfig constructs a new workqueue with options to // customize different properties. +// +// Deprecated: use TypedNewDelayingQueueWithConfig instead. func NewDelayingQueueWithConfig(config DelayingQueueConfig) DelayingInterface { + return NewTypedDelayingQueueWithConfig[any](config) +} + +// NewTypedDelayingQueueWithConfig constructs a new workqueue with options to +// customize different properties. +func NewTypedDelayingQueueWithConfig[T comparable](config TypedDelayingQueueConfig[T]) TypedDelayingInterface[T] { if config.Clock == nil { config.Clock = clock.RealClock{} } if config.Queue == nil { - config.Queue = NewWithConfig(QueueConfig{ + config.Queue = NewTypedWithConfig[T](TypedQueueConfig[T]{ Name: config.Name, MetricsProvider: config.MetricsProvider, Clock: config.Clock, @@ -100,9 +128,9 @@ func NewDelayingQueueWithCustomClock(clock clock.WithTicker, name string) Delayi }) } -func newDelayingQueue(clock clock.WithTicker, q Interface, name string, provider MetricsProvider) *delayingType { - ret := &delayingType{ - Interface: q, +func newDelayingQueue[T comparable](clock clock.WithTicker, q TypedInterface[T], name string, provider MetricsProvider) *delayingType[T] { + ret := &delayingType[T]{ + TypedInterface: q, clock: clock, heartbeat: clock.NewTicker(maxWait), stopCh: make(chan struct{}), @@ -115,8 +143,8 @@ func newDelayingQueue(clock clock.WithTicker, q Interface, name string, provider } // delayingType wraps an Interface and provides delayed re-enquing -type delayingType struct { - Interface +type delayingType[T comparable] struct { + TypedInterface[T] // clock tracks time for delayed firing clock clock.Clock @@ -193,16 +221,16 @@ func (pq waitForPriorityQueue) Peek() interface{} { // ShutDown stops the queue. After the queue drains, the returned shutdown bool // on Get() will be true. This method may be invoked more than once. -func (q *delayingType) ShutDown() { +func (q *delayingType[T]) ShutDown() { q.stopOnce.Do(func() { - q.Interface.ShutDown() + q.TypedInterface.ShutDown() close(q.stopCh) q.heartbeat.Stop() }) } // AddAfter adds the given item to the work queue after the given delay -func (q *delayingType) AddAfter(item interface{}, duration time.Duration) { +func (q *delayingType[T]) AddAfter(item T, duration time.Duration) { // don't add if we're already shutting down if q.ShuttingDown() { return @@ -229,7 +257,7 @@ func (q *delayingType) AddAfter(item interface{}, duration time.Duration) { const maxWait = 10 * time.Second // waitingLoop runs until the workqueue is shutdown and keeps a check on the list of items to be added. -func (q *delayingType) waitingLoop() { +func (q *delayingType[T]) waitingLoop() { defer utilruntime.HandleCrash() // Make a placeholder channel to use when there are no items in our list @@ -244,7 +272,7 @@ func (q *delayingType) waitingLoop() { waitingEntryByData := map[t]*waitFor{} for { - if q.Interface.ShuttingDown() { + if q.TypedInterface.ShuttingDown() { return } @@ -258,7 +286,7 @@ func (q *delayingType) waitingLoop() { } entry = heap.Pop(waitingForQueue).(*waitFor) - q.Add(entry.data) + q.Add(entry.data.(T)) delete(waitingEntryByData, entry.data) } @@ -287,7 +315,7 @@ func (q *delayingType) waitingLoop() { if waitEntry.readyAt.After(q.clock.Now()) { insert(waitingForQueue, waitingEntryByData, waitEntry) } else { - q.Add(waitEntry.data) + q.Add(waitEntry.data.(T)) } drained := false @@ -297,7 +325,7 @@ func (q *delayingType) waitingLoop() { if waitEntry.readyAt.After(q.clock.Now()) { insert(waitingForQueue, waitingEntryByData, waitEntry) } else { - q.Add(waitEntry.data) + q.Add(waitEntry.data.(T)) } default: drained = true diff --git a/vendor/k8s.io/client-go/util/workqueue/queue.go b/vendor/k8s.io/client-go/util/workqueue/queue.go index a363d1afb4..ff715482c1 100644 --- a/vendor/k8s.io/client-go/util/workqueue/queue.go +++ b/vendor/k8s.io/client-go/util/workqueue/queue.go @@ -23,18 +23,66 @@ import ( "k8s.io/utils/clock" ) -type Interface interface { - Add(item interface{}) +// Deprecated: Interface is deprecated, use TypedInterface instead. +type Interface TypedInterface[any] + +type TypedInterface[T comparable] interface { + Add(item T) Len() int - Get() (item interface{}, shutdown bool) - Done(item interface{}) + Get() (item T, shutdown bool) + Done(item T) ShutDown() ShutDownWithDrain() ShuttingDown() bool } +// Queue is the underlying storage for items. The functions below are always +// called from the same goroutine. +type Queue[T comparable] interface { + // Touch can be hooked when an existing item is added again. This may be + // useful if the implementation allows priority change for the given item. + Touch(item T) + // Push adds a new item. + Push(item T) + // Len tells the total number of items. + Len() int + // Pop retrieves an item. + Pop() (item T) +} + +// DefaultQueue is a slice based FIFO queue. +func DefaultQueue[T comparable]() Queue[T] { + return new(queue[T]) +} + +// queue is a slice which implements Queue. +type queue[T comparable] []T + +func (q *queue[T]) Touch(item T) {} + +func (q *queue[T]) Push(item T) { + *q = append(*q, item) +} + +func (q *queue[T]) Len() int { + return len(*q) +} + +func (q *queue[T]) Pop() (item T) { + item = (*q)[0] + + // The underlying array still exists and reference this object, so the object will not be garbage collected. + (*q)[0] = *new(T) + *q = (*q)[1:] + + return item +} + // QueueConfig specifies optional configurations to customize an Interface. -type QueueConfig struct { +// Deprecated: use TypedQueueConfig instead. +type QueueConfig = TypedQueueConfig[any] + +type TypedQueueConfig[T comparable] struct { // Name for the queue. If unnamed, the metrics will not be registered. Name string @@ -44,18 +92,38 @@ type QueueConfig struct { // Clock ability to inject real or fake clock for testing purposes. Clock clock.WithTicker + + // Queue provides the underlying queue to use. It is optional and defaults to slice based FIFO queue. + Queue Queue[T] } // New constructs a new work queue (see the package comment). +// +// Deprecated: use NewTyped instead. func New() *Type { return NewWithConfig(QueueConfig{ Name: "", }) } +// NewTyped constructs a new work queue (see the package comment). +func NewTyped[T comparable]() *Typed[T] { + return NewTypedWithConfig(TypedQueueConfig[T]{ + Name: "", + }) +} + // NewWithConfig constructs a new workqueue with ability to // customize different properties. +// +// Deprecated: use NewTypedWithConfig instead. func NewWithConfig(config QueueConfig) *Type { + return NewTypedWithConfig(config) +} + +// NewTypedWithConfig constructs a new workqueue with ability to +// customize different properties. +func NewTypedWithConfig[T comparable](config TypedQueueConfig[T]) *Typed[T] { return newQueueWithConfig(config, defaultUnfinishedWorkUpdatePeriod) } @@ -69,7 +137,7 @@ func NewNamed(name string) *Type { // newQueueWithConfig constructs a new named workqueue // with the ability to customize different properties for testing purposes -func newQueueWithConfig(config QueueConfig, updatePeriod time.Duration) *Type { +func newQueueWithConfig[T comparable](config TypedQueueConfig[T], updatePeriod time.Duration) *Typed[T] { var metricsFactory *queueMetricsFactory if config.MetricsProvider != nil { metricsFactory = &queueMetricsFactory{ @@ -83,18 +151,24 @@ func newQueueWithConfig(config QueueConfig, updatePeriod time.Duration) *Type { config.Clock = clock.RealClock{} } + if config.Queue == nil { + config.Queue = DefaultQueue[T]() + } + return newQueue( config.Clock, + config.Queue, metricsFactory.newQueueMetrics(config.Name, config.Clock), updatePeriod, ) } -func newQueue(c clock.WithTicker, metrics queueMetrics, updatePeriod time.Duration) *Type { - t := &Type{ +func newQueue[T comparable](c clock.WithTicker, queue Queue[T], metrics queueMetrics, updatePeriod time.Duration) *Typed[T] { + t := &Typed[T]{ clock: c, - dirty: set{}, - processing: set{}, + queue: queue, + dirty: set[T]{}, + processing: set[T]{}, cond: sync.NewCond(&sync.Mutex{}), metrics: metrics, unfinishedWorkUpdatePeriod: updatePeriod, @@ -112,20 +186,23 @@ func newQueue(c clock.WithTicker, metrics queueMetrics, updatePeriod time.Durati const defaultUnfinishedWorkUpdatePeriod = 500 * time.Millisecond // Type is a work queue (see the package comment). -type Type struct { +// Deprecated: Use Typed instead. +type Type = Typed[any] + +type Typed[t comparable] struct { // queue defines the order in which we will work on items. Every // element of queue should be in the dirty set and not in the // processing set. - queue []t + queue Queue[t] // dirty defines all of the items that need to be processed. - dirty set + dirty set[t] // Things that are currently being processed are in the processing set. // These things may be simultaneously in the dirty set. When we finish // processing something and remove it from this set, we'll check if // it's in the dirty set, and if so, add it to the queue. - processing set + processing set[t] cond *sync.Cond @@ -140,33 +217,38 @@ type Type struct { type empty struct{} type t interface{} -type set map[t]empty +type set[t comparable] map[t]empty -func (s set) has(item t) bool { +func (s set[t]) has(item t) bool { _, exists := s[item] return exists } -func (s set) insert(item t) { +func (s set[t]) insert(item t) { s[item] = empty{} } -func (s set) delete(item t) { +func (s set[t]) delete(item t) { delete(s, item) } -func (s set) len() int { +func (s set[t]) len() int { return len(s) } // Add marks item as needing processing. -func (q *Type) Add(item interface{}) { +func (q *Typed[T]) Add(item T) { q.cond.L.Lock() defer q.cond.L.Unlock() if q.shuttingDown { return } if q.dirty.has(item) { + // the same item is added again before it is processed, call the Touch + // function if the queue cares about it (for e.g, reset its priority) + if !q.processing.has(item) { + q.queue.Touch(item) + } return } @@ -177,37 +259,34 @@ func (q *Type) Add(item interface{}) { return } - q.queue = append(q.queue, item) + q.queue.Push(item) q.cond.Signal() } // Len returns the current queue length, for informational purposes only. You // shouldn't e.g. gate a call to Add() or Get() on Len() being a particular // value, that can't be synchronized properly. -func (q *Type) Len() int { +func (q *Typed[T]) Len() int { q.cond.L.Lock() defer q.cond.L.Unlock() - return len(q.queue) + return q.queue.Len() } // Get blocks until it can return an item to be processed. If shutdown = true, // the caller should end their goroutine. You must call Done with item when you // have finished processing it. -func (q *Type) Get() (item interface{}, shutdown bool) { +func (q *Typed[T]) Get() (item T, shutdown bool) { q.cond.L.Lock() defer q.cond.L.Unlock() - for len(q.queue) == 0 && !q.shuttingDown { + for q.queue.Len() == 0 && !q.shuttingDown { q.cond.Wait() } - if len(q.queue) == 0 { + if q.queue.Len() == 0 { // We must be shutting down. - return nil, true + return *new(T), true } - item = q.queue[0] - // The underlying array still exists and reference this object, so the object will not be garbage collected. - q.queue[0] = nil - q.queue = q.queue[1:] + item = q.queue.Pop() q.metrics.get(item) @@ -220,7 +299,7 @@ func (q *Type) Get() (item interface{}, shutdown bool) { // Done marks item as done processing, and if it has been marked as dirty again // while it was being processed, it will be re-added to the queue for // re-processing. -func (q *Type) Done(item interface{}) { +func (q *Typed[T]) Done(item T) { q.cond.L.Lock() defer q.cond.L.Unlock() @@ -228,7 +307,7 @@ func (q *Type) Done(item interface{}) { q.processing.delete(item) if q.dirty.has(item) { - q.queue = append(q.queue, item) + q.queue.Push(item) q.cond.Signal() } else if q.processing.len() == 0 { q.cond.Signal() @@ -237,7 +316,7 @@ func (q *Type) Done(item interface{}) { // ShutDown will cause q to ignore all new items added to it and // immediately instruct the worker goroutines to exit. -func (q *Type) ShutDown() { +func (q *Typed[T]) ShutDown() { q.cond.L.Lock() defer q.cond.L.Unlock() @@ -255,7 +334,7 @@ func (q *Type) ShutDown() { // indefinitely. It is, however, safe to call ShutDown after having called // ShutDownWithDrain, as to force the queue shut down to terminate immediately // without waiting for the drainage. -func (q *Type) ShutDownWithDrain() { +func (q *Typed[T]) ShutDownWithDrain() { q.cond.L.Lock() defer q.cond.L.Unlock() @@ -268,14 +347,14 @@ func (q *Type) ShutDownWithDrain() { } } -func (q *Type) ShuttingDown() bool { +func (q *Typed[T]) ShuttingDown() bool { q.cond.L.Lock() defer q.cond.L.Unlock() return q.shuttingDown } -func (q *Type) updateUnfinishedWorkLoop() { +func (q *Typed[T]) updateUnfinishedWorkLoop() { t := q.clock.NewTicker(q.unfinishedWorkUpdatePeriod) defer t.Stop() for range t.C() { diff --git a/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go b/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go index 3e4016fb04..fe45afa5a4 100644 --- a/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go +++ b/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go @@ -19,24 +19,33 @@ package workqueue import "k8s.io/utils/clock" // RateLimitingInterface is an interface that rate limits items being added to the queue. -type RateLimitingInterface interface { - DelayingInterface +// +// Deprecated: Use TypedRateLimitingInterface instead. +type RateLimitingInterface TypedRateLimitingInterface[any] + +// TypedRateLimitingInterface is an interface that rate limits items being added to the queue. +type TypedRateLimitingInterface[T comparable] interface { + TypedDelayingInterface[T] // AddRateLimited adds an item to the workqueue after the rate limiter says it's ok - AddRateLimited(item interface{}) + AddRateLimited(item T) // Forget indicates that an item is finished being retried. Doesn't matter whether it's for perm failing // or for success, we'll stop the rate limiter from tracking it. This only clears the `rateLimiter`, you // still have to call `Done` on the queue. - Forget(item interface{}) + Forget(item T) // NumRequeues returns back how many times the item was requeued - NumRequeues(item interface{}) int + NumRequeues(item T) int } // RateLimitingQueueConfig specifies optional configurations to customize a RateLimitingInterface. +// +// Deprecated: Use TypedRateLimitingQueueConfig instead. +type RateLimitingQueueConfig = TypedRateLimitingQueueConfig[any] -type RateLimitingQueueConfig struct { +// TypedRateLimitingQueueConfig specifies optional configurations to customize a TypedRateLimitingInterface. +type TypedRateLimitingQueueConfig[T comparable] struct { // Name for the queue. If unnamed, the metrics will not be registered. Name string @@ -48,36 +57,55 @@ type RateLimitingQueueConfig struct { Clock clock.WithTicker // DelayingQueue optionally allows injecting custom delaying queue DelayingInterface instead of the default one. - DelayingQueue DelayingInterface + DelayingQueue TypedDelayingInterface[T] } // NewRateLimitingQueue constructs a new workqueue with rateLimited queuing ability // Remember to call Forget! If you don't, you may end up tracking failures forever. // NewRateLimitingQueue does not emit metrics. For use with a MetricsProvider, please use // NewRateLimitingQueueWithConfig instead and specify a name. +// +// Deprecated: Use NewTypedRateLimitingQueue instead. func NewRateLimitingQueue(rateLimiter RateLimiter) RateLimitingInterface { return NewRateLimitingQueueWithConfig(rateLimiter, RateLimitingQueueConfig{}) } +// NewTypedRateLimitingQueue constructs a new workqueue with rateLimited queuing ability +// Remember to call Forget! If you don't, you may end up tracking failures forever. +// NewTypedRateLimitingQueue does not emit metrics. For use with a MetricsProvider, please use +// NewTypedRateLimitingQueueWithConfig instead and specify a name. +func NewTypedRateLimitingQueue[T comparable](rateLimiter TypedRateLimiter[T]) TypedRateLimitingInterface[T] { + return NewTypedRateLimitingQueueWithConfig(rateLimiter, TypedRateLimitingQueueConfig[T]{}) +} + // NewRateLimitingQueueWithConfig constructs a new workqueue with rateLimited queuing ability // with options to customize different properties. // Remember to call Forget! If you don't, you may end up tracking failures forever. +// +// Deprecated: Use NewTypedRateLimitingQueueWithConfig instead. func NewRateLimitingQueueWithConfig(rateLimiter RateLimiter, config RateLimitingQueueConfig) RateLimitingInterface { + return NewTypedRateLimitingQueueWithConfig(rateLimiter, config) +} + +// NewTypedRateLimitingQueueWithConfig constructs a new workqueue with rateLimited queuing ability +// with options to customize different properties. +// Remember to call Forget! If you don't, you may end up tracking failures forever. +func NewTypedRateLimitingQueueWithConfig[T comparable](rateLimiter TypedRateLimiter[T], config TypedRateLimitingQueueConfig[T]) TypedRateLimitingInterface[T] { if config.Clock == nil { config.Clock = clock.RealClock{} } if config.DelayingQueue == nil { - config.DelayingQueue = NewDelayingQueueWithConfig(DelayingQueueConfig{ + config.DelayingQueue = NewTypedDelayingQueueWithConfig(TypedDelayingQueueConfig[T]{ Name: config.Name, MetricsProvider: config.MetricsProvider, Clock: config.Clock, }) } - return &rateLimitingType{ - DelayingInterface: config.DelayingQueue, - rateLimiter: rateLimiter, + return &rateLimitingType[T]{ + TypedDelayingInterface: config.DelayingQueue, + rateLimiter: rateLimiter, } } @@ -99,21 +127,21 @@ func NewRateLimitingQueueWithDelayingInterface(di DelayingInterface, rateLimiter } // rateLimitingType wraps an Interface and provides rateLimited re-enquing -type rateLimitingType struct { - DelayingInterface +type rateLimitingType[T comparable] struct { + TypedDelayingInterface[T] - rateLimiter RateLimiter + rateLimiter TypedRateLimiter[T] } // AddRateLimited AddAfter's the item based on the time when the rate limiter says it's ok -func (q *rateLimitingType) AddRateLimited(item interface{}) { - q.DelayingInterface.AddAfter(item, q.rateLimiter.When(item)) +func (q *rateLimitingType[T]) AddRateLimited(item T) { + q.TypedDelayingInterface.AddAfter(item, q.rateLimiter.When(item)) } -func (q *rateLimitingType) NumRequeues(item interface{}) int { +func (q *rateLimitingType[T]) NumRequeues(item T) int { return q.rateLimiter.NumRequeues(item) } -func (q *rateLimitingType) Forget(item interface{}) { +func (q *rateLimitingType[T]) Forget(item T) { q.rateLimiter.Forget(item) } diff --git a/vendor/modules.txt b/vendor/modules.txt index bac7bd10b1..fe7b604194 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,11 +1,11 @@ -# cloud.google.com/go v0.115.0 +# cloud.google.com/go v0.115.1 ## explicit; go 1.20 cloud.google.com/go/internal cloud.google.com/go/internal/optional cloud.google.com/go/internal/trace cloud.google.com/go/internal/version -# cloud.google.com/go/auth v0.7.2 -## explicit; go 1.20 +# cloud.google.com/go/auth v0.9.3 +## explicit; go 1.21 cloud.google.com/go/auth cloud.google.com/go/auth/credentials cloud.google.com/go/auth/credentials/internal/externalaccount @@ -20,14 +20,14 @@ cloud.google.com/go/auth/internal/credsfile cloud.google.com/go/auth/internal/jwt cloud.google.com/go/auth/internal/transport cloud.google.com/go/auth/internal/transport/cert -# cloud.google.com/go/auth/oauth2adapt v0.2.3 +# cloud.google.com/go/auth/oauth2adapt v0.2.4 ## explicit; go 1.20 cloud.google.com/go/auth/oauth2adapt # cloud.google.com/go/compute/metadata v0.5.0 ## explicit; go 1.20 cloud.google.com/go/compute/metadata -# cloud.google.com/go/iam v1.1.12 -## explicit; go 1.20 +# cloud.google.com/go/iam v1.2.0 +## explicit; go 1.21 cloud.google.com/go/iam cloud.google.com/go/iam/apiv1/iampb # cloud.google.com/go/storage v1.43.0 @@ -36,7 +36,7 @@ cloud.google.com/go/storage cloud.google.com/go/storage/internal cloud.google.com/go/storage/internal/apiv2 cloud.google.com/go/storage/internal/apiv2/storagepb -# github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 +# github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 ## explicit; go 1.18 github.com/Azure/azure-sdk-for-go/sdk/azcore github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource @@ -128,7 +128,7 @@ github.com/VividCortex/ewma # github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 ## explicit; go 1.15 github.com/alecthomas/units -# github.com/aws/aws-sdk-go v1.55.3 +# github.com/aws/aws-sdk-go v1.55.5 ## explicit; go 1.19 github.com/aws/aws-sdk-go/aws github.com/aws/aws-sdk-go/aws/auth/bearer @@ -172,8 +172,8 @@ github.com/aws/aws-sdk-go/service/sso/ssoiface github.com/aws/aws-sdk-go/service/ssooidc github.com/aws/aws-sdk-go/service/sts github.com/aws/aws-sdk-go/service/sts/stsiface -# github.com/aws/aws-sdk-go-v2 v1.30.3 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2 v1.30.5 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/aws github.com/aws/aws-sdk-go-v2/aws/arn github.com/aws/aws-sdk-go-v2/aws/defaults @@ -201,15 +201,15 @@ github.com/aws/aws-sdk-go-v2/internal/shareddefaults github.com/aws/aws-sdk-go-v2/internal/strings github.com/aws/aws-sdk-go-v2/internal/sync/singleflight github.com/aws/aws-sdk-go-v2/internal/timeconv -# github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi -# github.com/aws/aws-sdk-go-v2/config v1.27.27 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/config v1.27.33 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/config -# github.com/aws/aws-sdk-go-v2/credentials v1.17.27 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/credentials v1.17.32 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/credentials github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds github.com/aws/aws-sdk-go-v2/credentials/endpointcreds @@ -217,65 +217,65 @@ github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client github.com/aws/aws-sdk-go-v2/credentials/processcreds github.com/aws/aws-sdk-go-v2/credentials/ssocreds github.com/aws/aws-sdk-go-v2/credentials/stscreds -# github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/feature/ec2/imds github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config -# github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.9 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/feature/s3/manager -# github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/configsources -# github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 -# github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/ini -# github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/v4a github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4 -# github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding -# github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/checksum -# github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url -# github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/s3shared github.com/aws/aws-sdk-go-v2/service/internal/s3shared/arn github.com/aws/aws-sdk-go-v2/service/internal/s3shared/config -# github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/s3 github.com/aws/aws-sdk-go-v2/service/s3/internal/arn github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints github.com/aws/aws-sdk-go-v2/service/s3/types -# github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/sso github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints github.com/aws/aws-sdk-go-v2/service/sso/types -# github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/ssooidc github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints github.com/aws/aws-sdk-go-v2/service/ssooidc/types -# github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 -## explicit; go 1.20 +# github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 +## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/sts github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints github.com/aws/aws-sdk-go-v2/service/sts/types -# github.com/aws/smithy-go v1.20.3 -## explicit; go 1.20 +# github.com/aws/smithy-go v1.20.4 +## explicit; go 1.21 github.com/aws/smithy-go github.com/aws/smithy-go/auth github.com/aws/smithy-go/auth/bearer @@ -396,7 +396,7 @@ github.com/google/s2a-go/stream # github.com/google/uuid v1.6.0 ## explicit github.com/google/uuid -# github.com/googleapis/enterprise-certificate-proxy v0.3.2 +# github.com/googleapis/enterprise-certificate-proxy v0.3.3 ## explicit; go 1.19 github.com/googleapis/enterprise-certificate-proxy/client github.com/googleapis/enterprise-certificate-proxy/client/util @@ -411,8 +411,8 @@ github.com/googleapis/gax-go/v2/internal ## explicit; go 1.21 github.com/grafana/regexp github.com/grafana/regexp/syntax -# github.com/influxdata/influxdb v1.11.5 -## explicit; go 1.20 +# github.com/influxdata/influxdb v1.11.6 +## explicit; go 1.21 github.com/influxdata/influxdb/client/v2 github.com/influxdata/influxdb/models github.com/influxdata/influxdb/pkg/escape @@ -476,7 +476,7 @@ github.com/pkg/browser # github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 ## explicit github.com/pmezard/go-difflib/difflib -# github.com/prometheus/client_golang v1.19.1 +# github.com/prometheus/client_golang v1.20.3 ## explicit; go 1.20 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/internal @@ -487,7 +487,7 @@ github.com/prometheus/client_golang/prometheus/testutil/promlint/validations # github.com/prometheus/client_model v0.6.1 ## explicit; go 1.19 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.55.0 +# github.com/prometheus/common v0.59.1 ## explicit; go 1.20 github.com/prometheus/common/config github.com/prometheus/common/expfmt @@ -501,8 +501,8 @@ github.com/prometheus/common/sigv4 github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -# github.com/prometheus/prometheus v0.53.1 -## explicit; go 1.21 +# github.com/prometheus/prometheus v0.54.1 +## explicit; go 1.21.0 github.com/prometheus/prometheus/config github.com/prometheus/prometheus/discovery github.com/prometheus/prometheus/discovery/targetgroup @@ -516,6 +516,7 @@ github.com/prometheus/prometheus/model/timestamp github.com/prometheus/prometheus/model/value github.com/prometheus/prometheus/prompb github.com/prometheus/prometheus/prompb/io/prometheus/client +github.com/prometheus/prometheus/prompb/io/prometheus/write/v2 github.com/prometheus/prometheus/promql/parser/posrange github.com/prometheus/prometheus/scrape github.com/prometheus/prometheus/storage @@ -552,7 +553,7 @@ github.com/russross/blackfriday/v2 ## explicit; go 1.17 github.com/stretchr/testify/assert github.com/stretchr/testify/require -# github.com/urfave/cli/v2 v2.27.3 +# github.com/urfave/cli/v2 v2.27.4 ## explicit; go 1.18 github.com/urfave/cli/v2 # github.com/valyala/bytebufferpool v1.0.0 @@ -599,8 +600,8 @@ go.opencensus.io/trace go.opencensus.io/trace/internal go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate -# go.opentelemetry.io/collector/pdata v1.12.0 -## explicit; go 1.21.0 +# go.opentelemetry.io/collector/pdata v1.14.1 +## explicit; go 1.22.0 go.opentelemetry.io/collector/pdata/internal go.opentelemetry.io/collector/pdata/internal/data go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1 @@ -618,19 +619,20 @@ go.opentelemetry.io/collector/pdata/internal/otlp go.opentelemetry.io/collector/pdata/pcommon go.opentelemetry.io/collector/pdata/pmetric go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp -# go.opentelemetry.io/collector/semconv v0.105.0 -## explicit; go 1.21.0 +# go.opentelemetry.io/collector/semconv v0.108.1 +## explicit; go 1.22.0 go.opentelemetry.io/collector/semconv/v1.6.1 -# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 +# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 ## explicit; go 1.21 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal -# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 +# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 ## explicit; go 1.21 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil -# go.opentelemetry.io/otel v1.28.0 +# go.opentelemetry.io/otel v1.29.0 ## explicit; go 1.21 go.opentelemetry.io/otel go.opentelemetry.io/otel/attribute @@ -644,13 +646,13 @@ go.opentelemetry.io/otel/propagation go.opentelemetry.io/otel/semconv/v1.17.0 go.opentelemetry.io/otel/semconv/v1.20.0 go.opentelemetry.io/otel/semconv/v1.21.0 -go.opentelemetry.io/otel/semconv/v1.24.0 -# go.opentelemetry.io/otel/metric v1.28.0 +go.opentelemetry.io/otel/semconv/v1.26.0 +# go.opentelemetry.io/otel/metric v1.29.0 ## explicit; go 1.21 go.opentelemetry.io/otel/metric go.opentelemetry.io/otel/metric/embedded go.opentelemetry.io/otel/metric/noop -# go.opentelemetry.io/otel/trace v1.28.0 +# go.opentelemetry.io/otel/trace v1.29.0 ## explicit; go 1.21 go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded @@ -664,7 +666,7 @@ go.uber.org/goleak/internal/stack # go.uber.org/multierr v1.11.0 ## explicit; go 1.19 go.uber.org/multierr -# golang.org/x/crypto v0.26.0 +# golang.org/x/crypto v0.27.0 ## explicit; go 1.20 golang.org/x/crypto/chacha20 golang.org/x/crypto/chacha20poly1305 @@ -675,10 +677,10 @@ golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/pkcs12 golang.org/x/crypto/pkcs12/internal/rc2 -# golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 +# golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e ## explicit; go 1.20 golang.org/x/exp/constraints -# golang.org/x/net v0.28.0 +# golang.org/x/net v0.29.0 ## explicit; go 1.18 golang.org/x/net/http/httpguts golang.org/x/net/http/httpproxy @@ -689,7 +691,7 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/oauth2 v0.21.0 +# golang.org/x/oauth2 v0.23.0 ## explicit; go 1.18 golang.org/x/oauth2 golang.org/x/oauth2/authhandler @@ -706,23 +708,23 @@ golang.org/x/oauth2/jwt ## explicit; go 1.18 golang.org/x/sync/errgroup golang.org/x/sync/semaphore -# golang.org/x/sys v0.23.0 +# golang.org/x/sys v0.25.0 ## explicit; go 1.18 golang.org/x/sys/cpu golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/text v0.17.0 +# golang.org/x/text v0.18.0 ## explicit; go 1.18 golang.org/x/text/secure/bidirule golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# golang.org/x/time v0.5.0 +# golang.org/x/time v0.6.0 ## explicit; go 1.18 golang.org/x/time/rate -# google.golang.org/api v0.189.0 -## explicit; go 1.20 +# google.golang.org/api v0.196.0 +## explicit; go 1.21 google.golang.org/api/googleapi google.golang.org/api/googleapi/transport google.golang.org/api/iamcredentials/v1 @@ -739,20 +741,20 @@ google.golang.org/api/transport google.golang.org/api/transport/grpc google.golang.org/api/transport/http google.golang.org/api/transport/http/internal/propagation -# google.golang.org/genproto v0.0.0-20240725223205-93522f1f2a9f -## explicit; go 1.20 +# google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 +## explicit; go 1.21 google.golang.org/genproto/googleapis/type/date google.golang.org/genproto/googleapis/type/expr -# google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f -## explicit; go 1.20 +# google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 +## explicit; go 1.21 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations -# google.golang.org/genproto/googleapis/rpc v0.0.0-20240725223205-93522f1f2a9f -## explicit; go 1.20 +# google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 +## explicit; go 1.21 google.golang.org/genproto/googleapis/rpc/code google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.65.0 +# google.golang.org/grpc v1.66.0 ## explicit; go 1.21 google.golang.org/grpc google.golang.org/grpc/attributes @@ -781,7 +783,9 @@ google.golang.org/grpc/credentials/insecure google.golang.org/grpc/credentials/oauth google.golang.org/grpc/encoding google.golang.org/grpc/encoding/proto +google.golang.org/grpc/experimental/stats google.golang.org/grpc/grpclog +google.golang.org/grpc/grpclog/internal google.golang.org/grpc/internal google.golang.org/grpc/internal/backoff google.golang.org/grpc/internal/balancer/gracefulswitch @@ -804,12 +808,14 @@ google.golang.org/grpc/internal/resolver/dns/internal google.golang.org/grpc/internal/resolver/passthrough google.golang.org/grpc/internal/resolver/unix google.golang.org/grpc/internal/serviceconfig +google.golang.org/grpc/internal/stats google.golang.org/grpc/internal/status google.golang.org/grpc/internal/syscall google.golang.org/grpc/internal/transport google.golang.org/grpc/internal/transport/networktype google.golang.org/grpc/internal/xds google.golang.org/grpc/keepalive +google.golang.org/grpc/mem google.golang.org/grpc/metadata google.golang.org/grpc/peer google.golang.org/grpc/resolver @@ -863,10 +869,10 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# k8s.io/apimachinery v0.30.3 +# k8s.io/apimachinery v0.31.0 ## explicit; go 1.22.0 k8s.io/apimachinery/pkg/util/runtime -# k8s.io/client-go v0.30.3 +# k8s.io/client-go v0.31.0 ## explicit; go 1.22.0 k8s.io/client-go/tools/metrics k8s.io/client-go/util/workqueue @@ -879,6 +885,6 @@ k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity k8s.io/klog/v2/internal/sloghandler -# k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 +# k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 ## explicit; go 1.18 k8s.io/utils/clock From fb339d757454add7d204c656bd7c44bd788eeee6 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 21:10:17 +0200 Subject: [PATCH 024/128] docs/VictoriaLogs/CHANGELOG.md: cut v0.29.0 --- docs/VictoriaLogs/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 1481ebd40c..a96116f885 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,10 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) + +Released at 2024-09-08 + * FEATURE: add [`/select/logsql/stats_query` HTTP API](https://docs.victoriametrics.com/victorialogs/querying/#querying-log-stats), which is going to be used by [vmalert](https://docs.victoriametrics.com/vmalert/) for executing alerting and recording rules against VictoriaLogs. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6942) for details. * FEATURE: add [`/select/logsql/stats_query_range` HTTP API](https://docs.victoriametrics.com/victorialogs/querying/#querying-log-range-stats), which is going to be used by [VictoriaLogs plugin for Grafana](https://docs.victoriametrics.com/victorialogs/victorialogs-datasource/) for building time series panels. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6943) for details. * FEATURE: optimize [multi-exact queries](https://docs.victoriametrics.com/victorialogs/logsql/#multi-exact-filter) with many phrases to search. For example, `ip:in(path:="/foo/bar" | keep ip)` when there are many unique values for `ip` field among log entries with `/foo/bar` path. From 0ed835026fe22b43f5f56c5cf82a3ef1b703ecf0 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 8 Sep 2024 21:23:14 +0200 Subject: [PATCH 025/128] deployment: update VictoriaLogs from v0.28.0-victorialogs to v0.29.0-victorialogs See https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs --- deployment/docker/docker-compose-victorialogs.yml | 2 +- deployment/docker/victorialogs/filebeat-syslog/compose.yml | 2 +- deployment/docker/victorialogs/filebeat/compose.yml | 2 +- deployment/docker/victorialogs/fluentbit/compose.yml | 2 +- deployment/docker/victorialogs/logstash/compose.yml | 2 +- .../opentelemetry-collector/elasticsearch/compose.yml | 2 +- .../victorialogs/opentelemetry-collector/loki/compose.yml | 2 +- .../victorialogs/opentelemetry-collector/syslog/compose.yml | 2 +- deployment/docker/victorialogs/promtail/compose.yml | 2 +- deployment/docker/victorialogs/vector/compose.yml | 2 +- deployment/logs-benchmark/docker-compose.yml | 2 +- docs/VictoriaLogs/QuickStart.md | 6 +++--- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/deployment/docker/docker-compose-victorialogs.yml b/deployment/docker/docker-compose-victorialogs.yml index 4a3f7a9930..67839539e9 100644 --- a/deployment/docker/docker-compose-victorialogs.yml +++ b/deployment/docker/docker-compose-victorialogs.yml @@ -40,7 +40,7 @@ services: # storing logs and serving read queries. victorialogs: container_name: victorialogs - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs command: - "--storageDataPath=/vlogs" - "--httpListenAddr=:9428" diff --git a/deployment/docker/victorialogs/filebeat-syslog/compose.yml b/deployment/docker/victorialogs/filebeat-syslog/compose.yml index df833f560d..94687c3070 100644 --- a/deployment/docker/victorialogs/filebeat-syslog/compose.yml +++ b/deployment/docker/victorialogs/filebeat-syslog/compose.yml @@ -11,7 +11,7 @@ services: - "5140:5140" victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-filebeat-syslog-vl:/vlogs ports: diff --git a/deployment/docker/victorialogs/filebeat/compose.yml b/deployment/docker/victorialogs/filebeat/compose.yml index 4545da3c9d..0dbd5a69c3 100644 --- a/deployment/docker/victorialogs/filebeat/compose.yml +++ b/deployment/docker/victorialogs/filebeat/compose.yml @@ -20,7 +20,7 @@ services: - -beat.uri=http://filebeat-victorialogs:5066 victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-filebeat-docker-vl:/vlogs ports: diff --git a/deployment/docker/victorialogs/fluentbit/compose.yml b/deployment/docker/victorialogs/fluentbit/compose.yml index 808877c608..ea9b4a7bdf 100644 --- a/deployment/docker/victorialogs/fluentbit/compose.yml +++ b/deployment/docker/victorialogs/fluentbit/compose.yml @@ -9,7 +9,7 @@ services: - "5140:5140" victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-fluentbit-vl:/vlogs ports: diff --git a/deployment/docker/victorialogs/logstash/compose.yml b/deployment/docker/victorialogs/logstash/compose.yml index 9f101a97cf..2523140f36 100644 --- a/deployment/docker/victorialogs/logstash/compose.yml +++ b/deployment/docker/victorialogs/logstash/compose.yml @@ -12,7 +12,7 @@ services: - "5140:5140" victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-logstash-vl:/vlogs ports: diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml index 9ab1421613..5cb5040a60 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml @@ -12,7 +12,7 @@ services: condition: service_healthy victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-vector-docker-vl:/vlogs ports: diff --git a/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml index 0f4b600f14..d02b5f9ff2 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml @@ -12,7 +12,7 @@ services: condition: service_healthy victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-vector-docker-vl:/loki ports: diff --git a/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml index f2f0c83076..4ac680a477 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml @@ -12,7 +12,7 @@ services: condition: service_healthy victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-vector-docker-vl:/syslog ports: diff --git a/deployment/docker/victorialogs/promtail/compose.yml b/deployment/docker/victorialogs/promtail/compose.yml index bf2553dbc6..256bd54be3 100644 --- a/deployment/docker/victorialogs/promtail/compose.yml +++ b/deployment/docker/victorialogs/promtail/compose.yml @@ -10,7 +10,7 @@ services: - "5140:5140" vlogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-promtail-docker:/vlogs ports: diff --git a/deployment/docker/victorialogs/vector/compose.yml b/deployment/docker/victorialogs/vector/compose.yml index 3a5e848916..9a444d5511 100644 --- a/deployment/docker/victorialogs/vector/compose.yml +++ b/deployment/docker/victorialogs/vector/compose.yml @@ -20,7 +20,7 @@ services: condition: service_healthy victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-vector-docker-vl:/vlogs ports: diff --git a/deployment/logs-benchmark/docker-compose.yml b/deployment/logs-benchmark/docker-compose.yml index 635dac710f..1203a123e0 100644 --- a/deployment/logs-benchmark/docker-compose.yml +++ b/deployment/logs-benchmark/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: # Run `make package-victoria-logs` to build victoria-logs image vlogs: - image: docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - vlogs:/vlogs ports: diff --git a/docs/VictoriaLogs/QuickStart.md b/docs/VictoriaLogs/QuickStart.md index fa4cbc9d53..6de2d899fb 100644 --- a/docs/VictoriaLogs/QuickStart.md +++ b/docs/VictoriaLogs/QuickStart.md @@ -33,8 +33,8 @@ Just download archive for the needed Operating system and architecture, unpack i For example, the following commands download VictoriaLogs archive for Linux/amd64, unpack and run it: ```sh -curl -L -O https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v0.28.0-victorialogs/victoria-logs-linux-amd64-v0.28.0-victorialogs.tar.gz -tar xzf victoria-logs-linux-amd64-v0.28.0-victorialogs.tar.gz +curl -L -O https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v0.29.0-victorialogs/victoria-logs-linux-amd64-v0.29.0-victorialogs.tar.gz +tar xzf victoria-logs-linux-amd64-v0.29.0-victorialogs.tar.gz ./victoria-logs-prod ``` @@ -58,7 +58,7 @@ Here is the command to run VictoriaLogs in a Docker container: ```sh docker run --rm -it -p 9428:9428 -v ./victoria-logs-data:/victoria-logs-data \ - docker.io/victoriametrics/victoria-logs:v0.28.0-victorialogs + docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs ``` See also: From 7983ea4edb5c48aa661a90db5471a27ed35d281d Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Mon, 9 Sep 2024 11:34:52 +0200 Subject: [PATCH 026/128] docs: mention `-dryRun` flag next to config example in vmalert Signed-off-by: hagen1778 --- docs/vmalert.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/vmalert.md b/docs/vmalert.md index c0dcf7b73f..fa8012c08f 100644 --- a/docs/vmalert.md +++ b/docs/vmalert.md @@ -91,6 +91,8 @@ Then configure `vmalert` accordingly: -external.label=replica=a # Multiple external labels may be set ``` +> _To validate the syntax of configured rules simply run vmalert with `-rule` and `-dryRun` cmd-line flags._ + Note there's a separate `-remoteWrite.url` command-line flag to allow writing results of alerting/recording rules into a different storage than the initial data that's queried. This allows using `vmalert` to aggregate data from a short-term, From f9a8c09fe89c19a6fdc93f613f997585d106c1b8 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Mon, 9 Sep 2024 03:39:58 -0700 Subject: [PATCH 027/128] docs: Add VictoriaLogs HA example for single nodes (#6945) ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). Signed-off-by: Artem Navoiev --- docs/VictoriaLogs/README.md | 15 +++++++++++++++ .../ha-victorialogs-single-node.webp | Bin 0 -> 101822 bytes 2 files changed, 15 insertions(+) create mode 100644 docs/VictoriaLogs/ha-victorialogs-single-node.webp diff --git a/docs/VictoriaLogs/README.md b/docs/VictoriaLogs/README.md index c860f30c23..3e8e73f3b1 100644 --- a/docs/VictoriaLogs/README.md +++ b/docs/VictoriaLogs/README.md @@ -129,6 +129,21 @@ For example, the following command starts VictoriaLogs, which stores the data at VictoriaLogs automatically creates the `-storageDataPath` directory on the first run if it is missing. +## High Availability + +### High Availability (HA) Setup with VictoriaLogs Single-Node Instances + +This schema outlines how to configure a High Availability (HA) setup using VictoriaLogs Single-Node instances. The setup consists of the following components: + +- **Log Collector**: The log collector should support multiplexing incoming data to multiple outputs (destinations). Popular log collectors like [Logstash](https://www.elastic.co/guide/en/logstash/current/output-plugins.html), [Fluentd](https://docs.fluentd.org/output/copy), and [Vector](https://vector.dev/docs/setup/configuration/sinks/) already offer this capability. Refer to their documentation for configuration details. + +- **VictoriaLogs Single-Node Instances**: Use two or more instances to achieve HA. + +- **[vmauth](https://docs.victoriametrics.com/vmauth/#load-balancing) or Load Balancer**: Used for reading data from one of the replicas to ensure balanced and redundant access. + +![VictoriaLogs Single-Node Instance High-Availability schema](ha-victorialogs-single-node.webp) + + ## Backup and restore VictoriaLogs currently does not have a snapshot feature and a tool like vmbackup as VictoriaMetrics does. diff --git a/docs/VictoriaLogs/ha-victorialogs-single-node.webp b/docs/VictoriaLogs/ha-victorialogs-single-node.webp new file mode 100644 index 0000000000000000000000000000000000000000..70c1eccb6aa3c3a033167fdb9deeb2ecadbefef4 GIT binary patch literal 101822 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

xD%mo|qj4tR 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 Date: Mon, 9 Sep 2024 19:34:48 +0800 Subject: [PATCH 028/128] =?UTF-8?q?vmalert:=20do=20not=20send=20message=20?= =?UTF-8?q?to=20alertmanager=20when=20alert=20has=20no=20label=20=E2=80=A6?= =?UTF-8?q?=20(#6823)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …pair `alert_relabel_configs` in [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file) can drop alert labels when used to filter different tenant alert message to different notifier. alertmanager would report error like `msg="Failed to validate alerts" err="at least one label pair required"` in this case, but the rest of the alerts inside one request would still be valid in alertmanager, so it's not severe. --- app/vmalert/notifier/alert.go | 2 +- app/vmalert/notifier/alert_test.go | 2 +- .../notifier/alertmanager_request.qtpl | 3 +- .../notifier/alertmanager_request.qtpl.go | 132 +++++++++--------- app/vmalert/notifier/alertmanager_test.go | 69 +++++++-- docs/changelog/CHANGELOG.md | 2 + docs/vmalert.md | 1 + 7 files changed, 135 insertions(+), 76 deletions(-) diff --git a/app/vmalert/notifier/alert.go b/app/vmalert/notifier/alert.go index 2dd13ec925..b1dfc697cc 100644 --- a/app/vmalert/notifier/alert.go +++ b/app/vmalert/notifier/alert.go @@ -187,7 +187,7 @@ func templateAnnotation(dst io.Writer, text string, data tplData, tmpl *textTpl. return nil } -func (a Alert) toPromLabels(relabelCfg *promrelabel.ParsedConfigs) []prompbmarshal.Label { +func (a Alert) applyRelabelingIfNeeded(relabelCfg *promrelabel.ParsedConfigs) []prompbmarshal.Label { var labels []prompbmarshal.Label for k, v := range a.Labels { labels = append(labels, prompbmarshal.Label{ diff --git a/app/vmalert/notifier/alert_test.go b/app/vmalert/notifier/alert_test.go index 30c2db57b0..9338b3fd26 100644 --- a/app/vmalert/notifier/alert_test.go +++ b/app/vmalert/notifier/alert_test.go @@ -187,7 +187,7 @@ func TestAlert_toPromLabels(t *testing.T) { fn := func(labels map[string]string, exp []prompbmarshal.Label, relabel *promrelabel.ParsedConfigs) { t.Helper() a := Alert{Labels: labels} - got := a.toPromLabels(relabel) + got := a.applyRelabelingIfNeeded(relabel) if !reflect.DeepEqual(got, exp) { t.Fatalf("expected to have: \n%v;\ngot:\n%v", exp, got) diff --git a/app/vmalert/notifier/alertmanager_request.qtpl b/app/vmalert/notifier/alertmanager_request.qtpl index 74e974b1e2..4972eee24a 100644 --- a/app/vmalert/notifier/alertmanager_request.qtpl +++ b/app/vmalert/notifier/alertmanager_request.qtpl @@ -8,6 +8,8 @@ {% func amRequest(alerts []Alert, generatorURL func(Alert) string, relabelCfg *promrelabel.ParsedConfigs) %} [ {% for i, alert := range alerts %} +{% code lbls := alert.applyRelabelingIfNeeded(relabelCfg) %} +{% if len(lbls) == 0 %} {% continue %} {% endif %} { "startsAt":{%q= alert.Start.Format(time.RFC3339Nano) %}, "generatorURL": {%q= generatorURL(alert) %}, @@ -15,7 +17,6 @@ "endsAt":{%q= alert.End.Format(time.RFC3339Nano) %}, {% endif %} "labels": { - {% code lbls := alert.toPromLabels(relabelCfg) %} {% code ll := len(lbls) %} {% for idx, l := range lbls %} {%q= l.Name %}:{%q= l.Value %}{% if idx != ll-1 %}, {% endif %} diff --git a/app/vmalert/notifier/alertmanager_request.qtpl.go b/app/vmalert/notifier/alertmanager_request.qtpl.go index a3ce41531a..ae29f26f29 100644 --- a/app/vmalert/notifier/alertmanager_request.qtpl.go +++ b/app/vmalert/notifier/alertmanager_request.qtpl.go @@ -30,111 +30,117 @@ func streamamRequest(qw422016 *qt422016.Writer, alerts []Alert, generatorURL fun qw422016.N().S(`[`) //line app/vmalert/notifier/alertmanager_request.qtpl:10 for i, alert := range alerts { -//line app/vmalert/notifier/alertmanager_request.qtpl:10 - qw422016.N().S(`{"startsAt":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:12 - qw422016.N().Q(alert.Start.Format(time.RFC3339Nano)) -//line app/vmalert/notifier/alertmanager_request.qtpl:12 - qw422016.N().S(`,"generatorURL":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:13 - qw422016.N().Q(generatorURL(alert)) -//line app/vmalert/notifier/alertmanager_request.qtpl:13 - qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:14 - if !alert.End.IsZero() { -//line app/vmalert/notifier/alertmanager_request.qtpl:14 - qw422016.N().S(`"endsAt":`) -//line app/vmalert/notifier/alertmanager_request.qtpl:15 - qw422016.N().Q(alert.End.Format(time.RFC3339Nano)) -//line app/vmalert/notifier/alertmanager_request.qtpl:15 - qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:16 - } -//line app/vmalert/notifier/alertmanager_request.qtpl:16 - qw422016.N().S(`"labels": {`) -//line app/vmalert/notifier/alertmanager_request.qtpl:18 - lbls := alert.toPromLabels(relabelCfg) +//line app/vmalert/notifier/alertmanager_request.qtpl:11 + lbls := alert.applyRelabelingIfNeeded(relabelCfg) -//line app/vmalert/notifier/alertmanager_request.qtpl:19 +//line app/vmalert/notifier/alertmanager_request.qtpl:12 + if len(lbls) == 0 { +//line app/vmalert/notifier/alertmanager_request.qtpl:12 + continue +//line app/vmalert/notifier/alertmanager_request.qtpl:12 + } +//line app/vmalert/notifier/alertmanager_request.qtpl:12 + qw422016.N().S(`{"startsAt":`) +//line app/vmalert/notifier/alertmanager_request.qtpl:14 + qw422016.N().Q(alert.Start.Format(time.RFC3339Nano)) +//line app/vmalert/notifier/alertmanager_request.qtpl:14 + qw422016.N().S(`,"generatorURL":`) +//line app/vmalert/notifier/alertmanager_request.qtpl:15 + qw422016.N().Q(generatorURL(alert)) +//line app/vmalert/notifier/alertmanager_request.qtpl:15 + qw422016.N().S(`,`) +//line app/vmalert/notifier/alertmanager_request.qtpl:16 + if !alert.End.IsZero() { +//line app/vmalert/notifier/alertmanager_request.qtpl:16 + qw422016.N().S(`"endsAt":`) +//line app/vmalert/notifier/alertmanager_request.qtpl:17 + qw422016.N().Q(alert.End.Format(time.RFC3339Nano)) +//line app/vmalert/notifier/alertmanager_request.qtpl:17 + qw422016.N().S(`,`) +//line app/vmalert/notifier/alertmanager_request.qtpl:18 + } +//line app/vmalert/notifier/alertmanager_request.qtpl:18 + qw422016.N().S(`"labels": {`) +//line app/vmalert/notifier/alertmanager_request.qtpl:20 ll := len(lbls) -//line app/vmalert/notifier/alertmanager_request.qtpl:20 +//line app/vmalert/notifier/alertmanager_request.qtpl:21 for idx, l := range lbls { -//line app/vmalert/notifier/alertmanager_request.qtpl:21 +//line app/vmalert/notifier/alertmanager_request.qtpl:22 qw422016.N().Q(l.Name) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 +//line app/vmalert/notifier/alertmanager_request.qtpl:22 qw422016.N().S(`:`) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 +//line app/vmalert/notifier/alertmanager_request.qtpl:22 qw422016.N().Q(l.Value) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 +//line app/vmalert/notifier/alertmanager_request.qtpl:22 if idx != ll-1 { -//line app/vmalert/notifier/alertmanager_request.qtpl:21 +//line app/vmalert/notifier/alertmanager_request.qtpl:22 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:21 +//line app/vmalert/notifier/alertmanager_request.qtpl:22 } -//line app/vmalert/notifier/alertmanager_request.qtpl:22 +//line app/vmalert/notifier/alertmanager_request.qtpl:23 } -//line app/vmalert/notifier/alertmanager_request.qtpl:22 +//line app/vmalert/notifier/alertmanager_request.qtpl:23 qw422016.N().S(`},"annotations": {`) -//line app/vmalert/notifier/alertmanager_request.qtpl:25 +//line app/vmalert/notifier/alertmanager_request.qtpl:26 c := len(alert.Annotations) -//line app/vmalert/notifier/alertmanager_request.qtpl:26 - for k, v := range alert.Annotations { //line app/vmalert/notifier/alertmanager_request.qtpl:27 + for k, v := range alert.Annotations { +//line app/vmalert/notifier/alertmanager_request.qtpl:28 c = c - 1 -//line app/vmalert/notifier/alertmanager_request.qtpl:28 +//line app/vmalert/notifier/alertmanager_request.qtpl:29 qw422016.N().Q(k) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 +//line app/vmalert/notifier/alertmanager_request.qtpl:29 qw422016.N().S(`:`) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 +//line app/vmalert/notifier/alertmanager_request.qtpl:29 qw422016.N().Q(v) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 +//line app/vmalert/notifier/alertmanager_request.qtpl:29 if c > 0 { -//line app/vmalert/notifier/alertmanager_request.qtpl:28 +//line app/vmalert/notifier/alertmanager_request.qtpl:29 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:28 +//line app/vmalert/notifier/alertmanager_request.qtpl:29 } -//line app/vmalert/notifier/alertmanager_request.qtpl:29 +//line app/vmalert/notifier/alertmanager_request.qtpl:30 } -//line app/vmalert/notifier/alertmanager_request.qtpl:29 +//line app/vmalert/notifier/alertmanager_request.qtpl:30 qw422016.N().S(`}}`) -//line app/vmalert/notifier/alertmanager_request.qtpl:32 +//line app/vmalert/notifier/alertmanager_request.qtpl:33 if i != len(alerts)-1 { -//line app/vmalert/notifier/alertmanager_request.qtpl:32 +//line app/vmalert/notifier/alertmanager_request.qtpl:33 qw422016.N().S(`,`) -//line app/vmalert/notifier/alertmanager_request.qtpl:32 +//line app/vmalert/notifier/alertmanager_request.qtpl:33 } -//line app/vmalert/notifier/alertmanager_request.qtpl:33 +//line app/vmalert/notifier/alertmanager_request.qtpl:34 } -//line app/vmalert/notifier/alertmanager_request.qtpl:33 +//line app/vmalert/notifier/alertmanager_request.qtpl:34 qw422016.N().S(`]`) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 } -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 func writeamRequest(qq422016 qtio422016.Writer, alerts []Alert, generatorURL func(Alert) string, relabelCfg *promrelabel.ParsedConfigs) { -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 qw422016 := qt422016.AcquireWriter(qq422016) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 streamamRequest(qw422016, alerts, generatorURL, relabelCfg) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 qt422016.ReleaseWriter(qw422016) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 } -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 func amRequest(alerts []Alert, generatorURL func(Alert) string, relabelCfg *promrelabel.ParsedConfigs) string { -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 qb422016 := qt422016.AcquireByteBuffer() -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 writeamRequest(qb422016, alerts, generatorURL, relabelCfg) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 qs422016 := string(qb422016.B) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 qt422016.ReleaseByteBuffer(qb422016) -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 return qs422016 -//line app/vmalert/notifier/alertmanager_request.qtpl:35 +//line app/vmalert/notifier/alertmanager_request.qtpl:36 } diff --git a/app/vmalert/notifier/alertmanager_test.go b/app/vmalert/notifier/alertmanager_test.go index e792090c47..937ee04cd9 100644 --- a/app/vmalert/notifier/alertmanager_test.go +++ b/app/vmalert/notifier/alertmanager_test.go @@ -11,6 +11,7 @@ import ( "time" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel" ) func TestAlertManager_Addr(t *testing.T) { @@ -76,12 +77,33 @@ func TestAlertManager_Send(t *testing.T) { if a[0].EndAt.IsZero() { t.Fatalf("expected non-zero end time") } + if len(a[0].Labels) != 1 { + t.Fatalf("expected 1 labels got %d", len(a[0].Labels)) + } + if len(a[0].Annotations) != 2 { + t.Fatalf("expected 2 annotations got %d", len(a[0].Annotations)) + } if r.Header.Get(headerKey) != "bar" { t.Fatalf("expected header %q to be set to %q; got %q instead", headerKey, headerValue, r.Header.Get(headerKey)) } case 3: - if r.Header.Get(headerKey) != headerValue { - t.Fatalf("expected header %q to be set to %q; got %q instead", headerKey, headerValue, r.Header.Get(headerKey)) + var a []struct { + Labels map[string]string `json:"labels"` + } + if err := json.NewDecoder(r.Body).Decode(&a); err != nil { + t.Fatalf("can not unmarshal data into alert %s", err) + } + if len(a) != 1 { + t.Fatalf("expected 1 alert in array got %d", len(a)) + } + if len(a[0].Labels) != 3 { + t.Fatalf("expected 3 labels got %d", len(a[0].Labels)) + } + if a[0].Labels["env"] != "prod" { + t.Fatalf("expected env label to be prod during relabeling, got %s", a[0].Labels["env"]) + } + if r.Header.Get(headerKey) != "bar" { + t.Fatalf("expected header %q to be set to %q; got %q instead", headerKey, "bar", r.Header.Get(headerKey)) } } }) @@ -95,31 +117,58 @@ func TestAlertManager_Send(t *testing.T) { }, Headers: []string{fmt.Sprintf("%s:%s", headerKey, headerValue)}, } + parsedConfigs, err := promrelabel.ParseRelabelConfigsData([]byte(` +- action: drop + if: '{tenant="0"}' + regex: ".*" +- target_label: "env" + replacement: "prod" + if: '{tenant="1"}' +`)) + if err != nil { + t.Fatalf("unexpected error when parse relabeling config: %s", err) + } am, err := NewAlertManager(srv.URL+alertManagerPath, func(alert Alert) string { return strconv.FormatUint(alert.GroupID, 10) + "/" + strconv.FormatUint(alert.ID, 10) - }, aCfg, nil, 0) + }, aCfg, parsedConfigs, 0) if err != nil { t.Fatalf("unexpected error: %s", err) } - if err := am.Send(context.Background(), []Alert{{}, {}}, nil); err == nil { + + if err := am.Send(context.Background(), []Alert{{Labels: map[string]string{"a": "b"}}}, nil); err == nil { t.Fatalf("expected connection error got nil") } - if err := am.Send(context.Background(), []Alert{}, nil); err == nil { + + if err := am.Send(context.Background(), []Alert{{Labels: map[string]string{"a": "b"}}}, nil); err == nil { t.Fatalf("expected wrong http code error got nil") } + if err := am.Send(context.Background(), []Alert{{ GroupID: 0, Name: "alert0", Start: time.Now().UTC(), End: time.Now().UTC(), - Annotations: map[string]string{"a": "b", "c": "d", "e": "f"}, + Labels: map[string]string{"alertname": "alert0"}, + Annotations: map[string]string{"a": "b", "c": "d"}, }}, map[string]string{headerKey: "bar"}); err != nil { t.Fatalf("unexpected error %s", err) } - if c != 2 { - t.Fatalf("expected 2 calls(count from zero) to server got %d", c) - } - if err := am.Send(context.Background(), nil, map[string]string{headerKey: headerValue}); err != nil { + + if err := am.Send(context.Background(), []Alert{ + // drop tenant0 alert message during relabeling + { + Name: "alert1", + Labels: map[string]string{"rule": "test", "tenant": "0"}, + }, + { + Name: "alert2", + Labels: map[string]string{"rule": "test", "tenant": "1"}, + }, + }, map[string]string{headerKey: "bar"}); err != nil { t.Fatalf("unexpected error %s", err) } + + if c != 3 { + t.Fatalf("expected 3 calls(count from zero) to server got %d", c) + } } diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index bc918f324f..7c6768ac94 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -35,6 +35,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. +* BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). + ## [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) Released at 2024-08-28 diff --git a/docs/vmalert.md b/docs/vmalert.md index fa8012c08f..2c00e8db49 100644 --- a/docs/vmalert.md +++ b/docs/vmalert.md @@ -198,6 +198,7 @@ headers: # Optional list of HTTP headers in form `header-name: value` # applied for all alert notifications sent to notifiers # generated by rules of this group. +# It has higher priority over headers defined in notifier config. # For example: # notifier_headers: # - "TenantID: foo" From 47cd7bb4c15d860880f302f466e1c1a2b11629e4 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Mon, 9 Sep 2024 17:35:14 +0200 Subject: [PATCH 029/128] docs: update roadmap, mark telegraf and otel as done and link the docs Signed-off-by: Artem Navoiev --- deployment/docker/victorialogs/telegraf-docker/compose.yml | 2 +- docs/VictoriaLogs/Roadmap.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/docker/victorialogs/telegraf-docker/compose.yml b/deployment/docker/victorialogs/telegraf-docker/compose.yml index 616aa6e270..953d4fa5d9 100644 --- a/deployment/docker/victorialogs/telegraf-docker/compose.yml +++ b/deployment/docker/victorialogs/telegraf-docker/compose.yml @@ -18,7 +18,7 @@ services: condition: service_healthy victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.20.2-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs volumes: - victorialogs-vector-docker-vl:/vlogs ports: diff --git a/docs/VictoriaLogs/Roadmap.md b/docs/VictoriaLogs/Roadmap.md index 3c50b8ea10..ff64abfd32 100644 --- a/docs/VictoriaLogs/Roadmap.md +++ b/docs/VictoriaLogs/Roadmap.md @@ -21,11 +21,11 @@ See [these docs](https://docs.victoriametrics.com/victorialogs/) for details. The following functionality is planned in the future versions of VictoriaLogs: - Support for [data ingestion](https://docs.victoriametrics.com/victorialogs/data-ingestion/) from popular log collectors and formats: - - [ ] [OpenTelemetry for logs](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4839) + - [x] [OpenTelemetry for logs](https://docs.victoriametrics.com/victorialogs/data-ingestion/opentelemetry/) - [ ] Fluentd - [ ] [Journald](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4618) (systemd) - [ ] [Datadog protocol for logs](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6632) - - [ ] [Telegraf http output](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5310) + - [x] [Telegraf http output](https://docs.victoriametrics.com/victorialogs/data-ingestion/telegraf/) - [ ] Integration with Grafana. Partially done, check the [documentation](https://docs.victoriametrics.com/victorialogs/victorialogs-datasource/) and [datasource repository](https://github.com/VictoriaMetrics/victorialogs-datasource). - [ ] Ability to make instant snapshots and backups in the way [similar to VictoriaMetrics](https://docs.victoriametrics.com/#how-to-work-with-snapshots). - [ ] Cluster version of VictoriaLogs. From 71df11dfbbb4b9f0a0d7fbb50135d12ae970532d Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Mon, 9 Sep 2024 17:41:15 +0200 Subject: [PATCH 030/128] docs: victorialogs just mention telegraf as we support not only http but more Signed-off-by: Artem Navoiev --- docs/VictoriaLogs/Roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/VictoriaLogs/Roadmap.md b/docs/VictoriaLogs/Roadmap.md index ff64abfd32..4848d1aaa3 100644 --- a/docs/VictoriaLogs/Roadmap.md +++ b/docs/VictoriaLogs/Roadmap.md @@ -25,7 +25,7 @@ The following functionality is planned in the future versions of VictoriaLogs: - [ ] Fluentd - [ ] [Journald](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4618) (systemd) - [ ] [Datadog protocol for logs](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6632) - - [x] [Telegraf http output](https://docs.victoriametrics.com/victorialogs/data-ingestion/telegraf/) + - [x] [Telegraf](https://docs.victoriametrics.com/victorialogs/data-ingestion/telegraf/) - [ ] Integration with Grafana. Partially done, check the [documentation](https://docs.victoriametrics.com/victorialogs/victorialogs-datasource/) and [datasource repository](https://github.com/VictoriaMetrics/victorialogs-datasource). - [ ] Ability to make instant snapshots and backups in the way [similar to VictoriaMetrics](https://docs.victoriametrics.com/#how-to-work-with-snapshots). - [ ] Cluster version of VictoriaLogs. From ae5f98f46bf10c8d69b90ca552db3da9298407b6 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Mon, 9 Sep 2024 19:56:58 +0200 Subject: [PATCH 031/128] docs: fix links to docker Signed-off-by: Artem Navoiev --- docs/VictoriaLogs/QuickStart.md | 6 +++--- docs/VictoriaLogs/data-ingestion/Filebeat.md | 2 +- docs/VictoriaLogs/data-ingestion/Fluentbit.md | 2 +- docs/VictoriaLogs/data-ingestion/Vector.md | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/VictoriaLogs/QuickStart.md b/docs/VictoriaLogs/QuickStart.md index 6de2d899fb..82f87a252a 100644 --- a/docs/VictoriaLogs/QuickStart.md +++ b/docs/VictoriaLogs/QuickStart.md @@ -139,10 +139,10 @@ See also: Here are a Docker-compose demos, which start VictoriaLogs and push logs to it via various log collectors: -- [Filebeat demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/filebeat-docker) -- [Fluentbit demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/fluentbit-docker) +- [Filebeat demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/filebeat) +- [Fluentbit demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/fluentbit) - [Logstash demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/logstash) -- [Vector demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector-docker) +- [Vector demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector) - [Promtail demo](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/promtail) You can use [this Helm chart](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-logs-single/README.md) diff --git a/docs/VictoriaLogs/data-ingestion/Filebeat.md b/docs/VictoriaLogs/data-ingestion/Filebeat.md index 84c8afdffa..6552fbec5d 100644 --- a/docs/VictoriaLogs/data-ingestion/Filebeat.md +++ b/docs/VictoriaLogs/data-ingestion/Filebeat.md @@ -120,4 +120,4 @@ See also: - [Data ingestion troubleshooting](https://docs.victoriametrics.com/victorialogs/data-ingestion/#troubleshooting). - [How to query VictoriaLogs](https://docs.victoriametrics.com/victorialogs/querying/). - [Filebeat `output.elasticsearch` docs](https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html). -- [Docker-compose demo for Filebeat integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/filebeat-docker). +- [Docker-compose demo for Filebeat integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/filebeat). diff --git a/docs/VictoriaLogs/data-ingestion/Fluentbit.md b/docs/VictoriaLogs/data-ingestion/Fluentbit.md index 1ac1250727..6db3a8c28d 100644 --- a/docs/VictoriaLogs/data-ingestion/Fluentbit.md +++ b/docs/VictoriaLogs/data-ingestion/Fluentbit.md @@ -145,4 +145,4 @@ See also: - [Data ingestion troubleshooting](https://docs.victoriametrics.com/victorialogs/data-ingestion/#troubleshooting). - [How to query VictoriaLogs](https://docs.victoriametrics.com/victorialogs/querying/). - [Fluentbit HTTP output config docs](https://docs.fluentbit.io/manual/pipeline/outputs/http). -- [Docker-compose demo for Fluentbit integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/fluentbit-docker). +- [Docker-compose demo for Fluentbit integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/fluentbit). diff --git a/docs/VictoriaLogs/data-ingestion/Vector.md b/docs/VictoriaLogs/data-ingestion/Vector.md index 6a3fb189bb..5726314790 100644 --- a/docs/VictoriaLogs/data-ingestion/Vector.md +++ b/docs/VictoriaLogs/data-ingestion/Vector.md @@ -213,4 +213,4 @@ See also: - [Data ingestion troubleshooting](https://docs.victoriametrics.com/victorialogs/data-ingestion/#troubleshooting). - [How to query VictoriaLogs](https://docs.victoriametrics.com/victorialogs/querying/). - [Elasticsearch output docs for Vector](https://vector.dev/docs/reference/configuration/sinks/elasticsearch/). -- [Docker-compose demo for Filebeat integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector-docker). +- [Docker-compose demo for Filebeat integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector). From 153cceb124972c77cce84dfb9640b6b6aacd9f29 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Mon, 9 Sep 2024 21:30:54 +0200 Subject: [PATCH 032/128] docs: adjust image size Signed-off-by: Artem Navoiev --- .../ha-victorialogs-single-node.webp | Bin 101822 -> 34938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/VictoriaLogs/ha-victorialogs-single-node.webp b/docs/VictoriaLogs/ha-victorialogs-single-node.webp index 70c1eccb6aa3c3a033167fdb9deeb2ecadbefef4..1f4876999c197f2dc50028282d33aa1267aae24a 100644 GIT binary patch literal 34938 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 literal 101822 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

xD%mo|qj4tR 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 Date: Mon, 9 Sep 2024 14:33:05 -0700 Subject: [PATCH 033/128] victorialogs: add HA example for logstash and fluentbit (#6968) ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: Artem Navoiev --- .../fluentbit-ha-single-node/README.md | 88 +++++++++++++++ .../fluentbit-ha-single-node/auth.yml | 6 + .../fluentbit-ha-single-node/compose.yml | 38 +++++++ .../fluentbit-ha-single-node/fluent-bit.conf | 42 +++++++ .../logstash-ha-single-node/README.md | 71 ++++++++++++ .../logstash-ha-single-node/auth.yml | 6 + .../logstash-ha-single-node/compose.yml | 41 +++++++ .../logstash-ha-single-node/logstash.yml | 2 + .../logstash-ha-single-node/pipeline.conf | 25 +++++ .../vector-ha-single-node/README.md | 104 ++++++++++++++++++ .../vector-ha-single-node/auth.yml | 6 + .../vector-ha-single-node/compose.yml | 48 ++++++++ .../vector-ha-single-node/vector.yaml | 58 ++++++++++ docs/VictoriaLogs/README.md | 7 +- 14 files changed, 541 insertions(+), 1 deletion(-) create mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/README.md create mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml create mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml create mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf create mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/README.md create mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/auth.yml create mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/compose.yml create mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml create mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf create mode 100644 deployment/docker/victorialogs/vector-ha-single-node/README.md create mode 100644 deployment/docker/victorialogs/vector-ha-single-node/auth.yml create mode 100644 deployment/docker/victorialogs/vector-ha-single-node/compose.yml create mode 100644 deployment/docker/victorialogs/vector-ha-single-node/vector.yaml diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md b/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md new file mode 100644 index 0000000000..2ef60e207e --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md @@ -0,0 +1,88 @@ +# Docker compose Fluentbit integration with VictoriaLogs for docker. High-Availability example + +The folder contains the example of integration of [fluentbit](https://docs.fluentbit.io/manual) with VictoriaLogs Single-Nodes(s) and [vmauth](https://docs.victoriametrics.com/vmauth/) for achieving High Availability. + +Check [this documentation](https://docs.victoriametrics.com/victorialogs/#high-availability) with a description of the architecture and components. + +To spin-up environment run the following command: + +```shell +docker compose up -d +``` + +To shut down the docker-compose environment run the following command: + +```shell +docker compose down +docker compose rm -f +``` + +The docker compose file contains the following components: + +* fluentbit - fluentbit is configured to collect logs from the `docker`, you can find configuration in the `fluent-bit.conf`. It writes data in VictoriaLogs +* VictoriaLogs - the two instances of log database, they accept the data from `fluentbit` by json line protocol +* vmauth - load balancer for proxying requests to one of VictoriaLogs + +Querying the data + +* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:8427/select/vmui/` +* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) + + +the example of fluentbit configuration(`filebeat.yml`) + +```text +[INPUT] + name tail + path /var/lib/docker/containers/**/*.log + path_key path + multiline.parser docker, cri + Parser docker + Docker_Mode On + +[INPUT] + Name syslog + Listen 0.0.0.0 + Port 5140 + Parser syslog-rfc3164 + Mode tcp + +[SERVICE] + Flush 1 + Parsers_File parsers.conf + +[OUTPUT] + Name http + Match * + host victorialogs-2 + port 9428 + compress gzip + uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date + format json_lines + json_date_format iso8601 + header AccountID 0 + header ProjectID 0 + +[OUTPUT] + Name http + Match * + host victorialogs-1 + port 9428 + compress gzip + uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date + format json_lines + json_date_format iso8601 + header AccountID 0 + header ProjectID 0 +``` + +Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. + +The example of vmauth configuration (`auth.yml`) + +```yaml +unauthorized_user: + url_prefix: + - http://victorialogs-1:9428 + - http://victorialogs-2:9428 +``` \ No newline at end of file diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml b/deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml new file mode 100644 index 0000000000..eeafbb852b --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml @@ -0,0 +1,6 @@ +# balance load among victorialogs instances +# see https://docs.victoriametrics.com/vmauth/#load-balancing +unauthorized_user: + url_prefix: + - http://victorialogs-1:9428 + - http://victorialogs-2:9428 diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml b/deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml new file mode 100644 index 0000000000..737be03470 --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml @@ -0,0 +1,38 @@ +services: + fluentbit: + image: cr.fluentbit.io/fluent/fluent-bit:3.0.7 + volumes: + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf + depends_on: [victorialogs-1,victorialogs-2] + ports: + - "5140:5140" + + victorialogs-1: + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + volumes: + - victorialogs-fluentbit-vl-ha-single-1:/vlogs + command: + - -storageDataPath=/vlogs + victorialogs-2: + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + volumes: + - victorialogs-fluentbit-vl-ha-single-2:/vlogs + command: + - -storageDataPath=/vlogs + vmauth: + container_name: vmauth + image: victoriametrics/vmauth:v1.103.0 + depends_on: + - "victorialogs-1" + - "victorialogs-2" + volumes: + - ./auth.yml:/etc/auth.yml + command: + - '--auth.config=/etc/auth.yml' + ports: + - 8427:8427 + restart: always +volumes: + victorialogs-fluentbit-vl-ha-single-1: + victorialogs-fluentbit-vl-ha-single-2: diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf b/deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf new file mode 100644 index 0000000000..ce6423898f --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf @@ -0,0 +1,42 @@ +[INPUT] + name tail + path /var/lib/docker/containers/**/*.log + path_key path + multiline.parser docker, cri + Parser docker + Docker_Mode On + +[INPUT] + Name syslog + Listen 0.0.0.0 + Port 5140 + Parser syslog-rfc3164 + Mode tcp + +[SERVICE] + Flush 1 + Parsers_File parsers.conf + +[OUTPUT] + Name http + Match * + host victorialogs-2 + port 9428 + compress gzip + uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date + format json_lines + json_date_format iso8601 + header AccountID 0 + header ProjectID 0 + +[OUTPUT] + Name http + Match * + host victorialogs-1 + port 9428 + compress gzip + uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date + format json_lines + json_date_format iso8601 + header AccountID 0 + header ProjectID 0 diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/README.md b/deployment/docker/victorialogs/logstash-ha-single-node/README.md new file mode 100644 index 0000000000..7e5805a214 --- /dev/null +++ b/deployment/docker/victorialogs/logstash-ha-single-node/README.md @@ -0,0 +1,71 @@ +# Docker compose Logstash integration with VictoriaLogs for docker. High-Availability example + +The folder contains the example of integration of [logstash](https://www.elastic.co/logstash) with VictoriaLogs Single-Node(s) and [vmauth](https://docs.victoriametrics.com/vmauth/) for achieving High Availability. + +Check [this documentation](https://docs.victoriametrics.com/victorialogs/#high-availability) with a description of the architecture and components. + +To spin-up environment run the following command: + +```shell +docker compose up -d +``` + +To shut down the docker-compose environment run the following command: + +```shell +docker compose down +docker compose rm -f +``` + +The docker compose file contains the following components: + +* logstash - logstash is configured to read docker log files, you can find configuration in the `pipeline.conf`. It writes data in two instances of VictoriaLogs +* VictoriaLogs - the two instances of log database, they accept the data from `fluentbit` by json line protocol +* vmauth - load balancer for proxying requests to one of VictoriaLogs + +Querying the data + +* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:8427/select/vmui/` +* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) + + +Here is an example of logstash configuration(`pipeline.conf`): + +```text +input { + file { + path => "/var/lib/docker/containers/*/*.log" + start_position => "beginning" + type => "docker" + sincedb_path => "/dev/null" + codec => "json" + add_field => { + "path" => "%{[@metadata][path]}" + } + } +} + +output { + http { + url => "http://victorialogs-1:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" + format => "json" + http_method => "post" + } + http { + url => "http://victorialogs-2:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" + format => "json" + http_method => "post" + } +} +``` + +Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. + +The example of vmauth configuration (`auth.yml`) + +```yaml +unauthorized_user: + url_prefix: + - http://victorialogs-1:9428 + - http://victorialogs-2:9428 +``` \ No newline at end of file diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/auth.yml b/deployment/docker/victorialogs/logstash-ha-single-node/auth.yml new file mode 100644 index 0000000000..eeafbb852b --- /dev/null +++ b/deployment/docker/victorialogs/logstash-ha-single-node/auth.yml @@ -0,0 +1,6 @@ +# balance load among victorialogs instances +# see https://docs.victoriametrics.com/vmauth/#load-balancing +unauthorized_user: + url_prefix: + - http://victorialogs-1:9428 + - http://victorialogs-2:9428 diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/compose.yml b/deployment/docker/victorialogs/logstash-ha-single-node/compose.yml new file mode 100644 index 0000000000..6b8153b716 --- /dev/null +++ b/deployment/docker/victorialogs/logstash-ha-single-node/compose.yml @@ -0,0 +1,41 @@ +services: + logstash: + image: docker.elastic.co/logstash/logstash:8.8.1 + user: root + volumes: + - ./pipeline.conf:/usr/share/logstash/pipeline/logstash.conf:ro + - ./logstash.yml:/usr/share/logstash/config/logstash.yml:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + depends_on: [victorialogs-1,victorialogs-2] + ports: + - "5140:5140" + + victorialogs-1: + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + volumes: + - victorialogs-logstash-vl-ha-single-1:/vlogs + command: + - -storageDataPath=/vlogs + victorialogs-2: + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + volumes: + - victorialogs-logstash-vl-ha-single-2:/vlogs + command: + - -storageDataPath=/vlogs + vmauth: + container_name: vmauth + image: victoriametrics/vmauth:v1.103.0 + depends_on: + - "victorialogs-1" + - "victorialogs-2" + volumes: + - ./auth.yml:/etc/auth.yml + command: + - '--auth.config=/etc/auth.yml' + ports: + - 8427:8427 + restart: always + +volumes: + victorialogs-logstash-vl-ha-single-1: + victorialogs-logstash-vl-ha-single-2: diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml b/deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml new file mode 100644 index 0000000000..c223de3763 --- /dev/null +++ b/deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml @@ -0,0 +1,2 @@ +http.host: 0.0.0.0 +xpack.monitoring.enabled: false \ No newline at end of file diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf b/deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf new file mode 100644 index 0000000000..7dacc1d8aa --- /dev/null +++ b/deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf @@ -0,0 +1,25 @@ +input { + file { + path => "/var/lib/docker/containers/*/*.log" + start_position => "beginning" + type => "docker" + sincedb_path => "/dev/null" + codec => "json" + add_field => { + "path" => "%{[@metadata][path]}" + } + } +} + +output { + http { + url => "http://victorialogs-1:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" + format => "json" + http_method => "post" + } + http { + url => "http://victorialogs-2:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" + format => "json" + http_method => "post" + } +} \ No newline at end of file diff --git a/deployment/docker/victorialogs/vector-ha-single-node/README.md b/deployment/docker/victorialogs/vector-ha-single-node/README.md new file mode 100644 index 0000000000..2a6fd630e1 --- /dev/null +++ b/deployment/docker/victorialogs/vector-ha-single-node/README.md @@ -0,0 +1,104 @@ +# Docker compose Vector integration with VictoriaLogs for docker. High-Availability example + +The folder contains the example of integration of [vector](https://vector.dev/docs/) with VictoriaLogs Single-Node(s) and [vmauth](https://docs.victoriametrics.com/vmauth/) for achieving High Availability. + +Check [this documentation](https://docs.victoriametrics.com/victorialogs/#high-availability) with a description of the architecture and components. + + +To spin-up environment run the following command: + +```shell +docker compose up -d +``` + +To shut down the docker-compose environment run the following command: + +```shell +docker compose down +docker compose rm -f +``` + +The docker compose file contains the following components: + +* vector - vector is configured to collect logs from the `docker`, you can find configuration in the `vector.yaml`. It writes data in two instances of VictoriaLogs +* VictoriaLogs - the two instances of log database, they accept the data from `vector` by json line protocol +* vmauth - load balancer for proxying requests to one of VictoriaLogs + +Querying the data + +* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:8427/select/vmui/` +* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) + + +the example of vector configuration(`vector.yaml`) + +```yaml +api: + enabled: true + address: 0.0.0.0:8686 +sources: + docker: + type: docker_logs +transforms: + msg_parser: + type: remap + inputs: + - docker + source: | + if exists(.message) { + .log, err = parse_json(.message) + if err == null { + del(.message) + } + } +sinks: + console_out: + type: console + inputs: + - msg_parser + encoding: + codec: json + vlogs_http_1: + type: http + inputs: + - msg_parser + uri: http://victorialogs-1:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp + encoding: + codec: json + framing: + method: newline_delimited + compression: gzip + healthcheck: + enabled: false + request: + headers: + AccountID: '0' + ProjectID: '0' + vlogs_http_2: + type: http + inputs: + - msg_parser + uri: http://victorialogs-2:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp + encoding: + codec: json + framing: + method: newline_delimited + compression: gzip + healthcheck: + enabled: false + request: + headers: + AccountID: '0' + ProjectID: '0' +``` + +Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. + +The example of vmauth configuration (`auth.yml`) + +```yaml +unauthorized_user: + url_prefix: + - http://victorialogs-1:9428 + - http://victorialogs-2:9428 +``` \ No newline at end of file diff --git a/deployment/docker/victorialogs/vector-ha-single-node/auth.yml b/deployment/docker/victorialogs/vector-ha-single-node/auth.yml new file mode 100644 index 0000000000..eeafbb852b --- /dev/null +++ b/deployment/docker/victorialogs/vector-ha-single-node/auth.yml @@ -0,0 +1,6 @@ +# balance load among victorialogs instances +# see https://docs.victoriametrics.com/vmauth/#load-balancing +unauthorized_user: + url_prefix: + - http://victorialogs-1:9428 + - http://victorialogs-2:9428 diff --git a/deployment/docker/victorialogs/vector-ha-single-node/compose.yml b/deployment/docker/victorialogs/vector-ha-single-node/compose.yml new file mode 100644 index 0000000000..ae339f83a9 --- /dev/null +++ b/deployment/docker/victorialogs/vector-ha-single-node/compose.yml @@ -0,0 +1,48 @@ +services: + vector: + image: docker.io/timberio/vector:0.40.1-distroless-static + restart: on-failure + volumes: + - type: bind + source: /var/run/docker.sock + target: /var/run/docker.sock + - type: bind + source: /var/lib/docker + target: /var/lib/docker + - ./vector.yaml:/etc/vector/vector.yaml:ro + user: root + ports: + - '8686:8686' + depends_on: [victorialogs-1,victorialogs-2] + + victorialogs-1: + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + volumes: + - victorialogs-vector-docker-vl-ha-single-1:/vlogs + command: + - -storageDataPath=/vlogs + - -loggerFormat=json + victorialogs-2: + image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + volumes: + - victorialogs-vector-docker-vl-ha-single-2:/vlogs + command: + - -storageDataPath=/vlogs + - -loggerFormat=json + vmauth: + container_name: vmauth + image: victoriametrics/vmauth:v1.103.0 + depends_on: + - "victorialogs-1" + - "victorialogs-2" + volumes: + - ./auth.yml:/etc/auth.yml + command: + - '--auth.config=/etc/auth.yml' + ports: + - 8427:8427 + restart: always + +volumes: + victorialogs-vector-docker-vl-ha-single-1: + victorialogs-vector-docker-vl-ha-single-2: diff --git a/deployment/docker/victorialogs/vector-ha-single-node/vector.yaml b/deployment/docker/victorialogs/vector-ha-single-node/vector.yaml new file mode 100644 index 0000000000..e67320b974 --- /dev/null +++ b/deployment/docker/victorialogs/vector-ha-single-node/vector.yaml @@ -0,0 +1,58 @@ +api: + enabled: true + address: 0.0.0.0:8686 +sources: + docker: + type: docker_logs +transforms: + msg_parser: + type: remap + inputs: + - docker + source: | + if exists(.message) { + .log, err = parse_json(.message) + if err == null { + del(.message) + } + } +sinks: + console_out: + type: console + inputs: + - msg_parser + encoding: + codec: json + vlogs_http_1: + type: http + inputs: + - msg_parser + uri: http://victorialogs-1:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp + encoding: + codec: json + framing: + method: newline_delimited + compression: gzip + healthcheck: + enabled: false + request: + headers: + AccountID: '0' + ProjectID: '0' + vlogs_http_2: + type: http + inputs: + - msg_parser + uri: http://victorialogs-2:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp + encoding: + codec: json + framing: + method: newline_delimited + compression: gzip + healthcheck: + enabled: false + request: + headers: + AccountID: '0' + ProjectID: '0' + diff --git a/docs/VictoriaLogs/README.md b/docs/VictoriaLogs/README.md index 3e8e73f3b1..696d9fc502 100644 --- a/docs/VictoriaLogs/README.md +++ b/docs/VictoriaLogs/README.md @@ -135,7 +135,7 @@ VictoriaLogs automatically creates the `-storageDataPath` directory on the first This schema outlines how to configure a High Availability (HA) setup using VictoriaLogs Single-Node instances. The setup consists of the following components: -- **Log Collector**: The log collector should support multiplexing incoming data to multiple outputs (destinations). Popular log collectors like [Logstash](https://www.elastic.co/guide/en/logstash/current/output-plugins.html), [Fluentd](https://docs.fluentd.org/output/copy), and [Vector](https://vector.dev/docs/setup/configuration/sinks/) already offer this capability. Refer to their documentation for configuration details. +- **Log Collector**: The log collector should support multiplexing incoming data to multiple outputs (destinations). Popular log collectors like [Fluent Bit](https://docs.fluentbit.io/manual/concepts/data-pipeline/router), [Logstash](https://www.elastic.co/guide/en/logstash/current/output-plugins.html), [Fluentd](https://docs.fluentd.org/output/copy), and [Vector](https://vector.dev/docs/setup/configuration/sinks/) already offer this capability. Refer to their documentation for configuration details. - **VictoriaLogs Single-Node Instances**: Use two or more instances to achieve HA. @@ -143,6 +143,11 @@ This schema outlines how to configure a High Availability (HA) setup using Victo ![VictoriaLogs Single-Node Instance High-Availability schema](ha-victorialogs-single-node.webp) +Here are the working example of HA configuration for VictoriaLogs using Docker Compose: + +- [Fluent Bit + VictoriaLogs Single-Node + vmauth](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/fluentbit-ha-single-node) +- [Logstash + VictoriaLogs Single-Node + vmauth](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/logstash-ha-single-node) +- [Vector + VictoriaLogs Single-Node + vmauth](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector-ha-single-node) ## Backup and restore From c0272463d958b30dc96254e6f782645fadf3b624 Mon Sep 17 00:00:00 2001 From: Alexander Marshalov <_@marshalov.org> Date: Tue, 10 Sep 2024 12:41:25 +0200 Subject: [PATCH 034/128] [vmcloud]: Cloud tiers assumptions docs (#6948) Signed-off-by: Artem Navoiev Co-authored-by: Artem Navoiev --- docs/victoriametrics-cloud/quickstart.md | 3 ++ .../victoriametrics-cloud/tiers-parameters.md | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 docs/victoriametrics-cloud/tiers-parameters.md diff --git a/docs/victoriametrics-cloud/quickstart.md b/docs/victoriametrics-cloud/quickstart.md index 6cc0a3be64..32f5ab3761 100644 --- a/docs/victoriametrics-cloud/quickstart.md +++ b/docs/victoriametrics-cloud/quickstart.md @@ -201,6 +201,9 @@ On the opened screen, choose parameters of your new deployment: * `Retention` period for stored metrics. * `Size` of your deployment [based on your needs](https://docs.victoriametrics.com/guides/understand-your-setup-size.html) +Also see the [Tier Parameters and Flag Parameters Configuration](https://docs.victoriametrics.com/victoriametrics-cloud/tiers-parameters/). +This document provides an overview of tier parameters and predefined flag settings for VictoriaMetrics Cloud. + ![Create deployment form](create_deployment_form.webp) diff --git a/docs/victoriametrics-cloud/tiers-parameters.md b/docs/victoriametrics-cloud/tiers-parameters.md new file mode 100644 index 0000000000..a1a77c05bb --- /dev/null +++ b/docs/victoriametrics-cloud/tiers-parameters.md @@ -0,0 +1,38 @@ +--- +weight: 5 +title: "VictoriaMetrics Cloud: Tier Parameters and Flag Parameters Configuration" +menu: + docs: + parent: "cloud" + weight: 8 +--- + +The tier parameters are derived from testing in typical monitoring environments, ensuring they are optimized for common use cases. + +## VictoriaMetrics Cloud Tier Parameters + +| **Parameter** | **Maximum Value** | **Description** | +|-------------------------------------------|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Data Ingestion Rate** | Per Tier Limits | Number of [time series](https://docs.victoriametrics.com/keyconcepts/#time-series) ingested per second. | +| **Active Time Series Count** | Per Tier Limits | Number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series) that received at least one data point in the last hour. | +| **Read Rate** | Per Tier Limits | Number of datapoints retrieved from the database per second. | +| **New Series Over 24 Hours** (churn rate) | `<= Active Time Series Count` | Number of new series created in 24 hours. High [churn rate](https://docs.victoriametrics.com/faq/#what-is-high-churn-rate) leads to higher resource consumption. | +| **Concurrent Requests per Token** | `<= 600` | Maximum concurrent requests per access token. It is recommended to create separate tokens for different clients and environments. This can be adjusted via [support](mailto:support@victoriametrics.com). | + +For a detailed explanation of each parameter, visit the guide on [Understanding Your Setup Size](https://docs.victoriametrics.com/guides/understand-your-setup-size.html). + +## Flag Parameters Configuration + +| **Flag** | **Default Value** | **Description** | +|-----------------------------------|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Max Label Value Length** | `<= 1kb` (Default: `4kb`) | Maximum length of label values. Longer values are truncated. Large label values can lead to high RAM consumption. This can be adjusted via [support](mailto:support@victoriametrics.com). | +| **Max Labels per Time Series** | `<= 30` | Maximum number of labels per time series. Excess labels are dropped. Higher values can increase [cardinality](https://docs.victoriametrics.com/keyconcepts/#cardinality) and resource usage. This can be configured in [deployment settings](https://docs.victoriametrics.com/victoriametrics-cloud/quickstart/#modifying-an-existing-deployment). | + + +## Terms and definitions: + + - [Time series](https://docs.victoriametrics.com/keyconcepts/#time-series) + - [Labels](https://docs.victoriametrics.com/keyconcepts/#labels) + - [Active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series) + - [Churn rate](https://docs.victoriametrics.com/faq/#what-is-high-churn-rate) + - [Cardinality](https://docs.victoriametrics.com/keyconcepts/#cardinality) From e92f347336f9cbe23c5b5fd622bc69ccafb83242 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 11 Sep 2024 09:39:17 +0200 Subject: [PATCH 035/128] docs/VictoriaLogs/querying/README.md: typo fixes: use field_values instead field_names where needed --- docs/VictoriaLogs/querying/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index 95ae6bc317..435e90f114 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -650,7 +650,7 @@ Below is an example JSON output returned from this endpoint: } ``` -The `/select/logsql/stream_field_names` endpoint supports optional `limit=N` query arg, which allows limiting the number of returned values to `N`. +The `/select/logsql/stream_field_values` endpoint supports optional `limit=N` query arg, which allows limiting the number of returned values to `N`. The endpoint returns arbitrary subset of values if their number exceeds `N`, so `limit=N` cannot be used for pagination over big number of field values. When the `limit` is reached, `hits` are zeroed, since they cannot be calculated reliably. @@ -761,7 +761,7 @@ Below is an example JSON output returned from this endpoint: } ``` -The `/select/logsql/field_names` endpoint supports optional `limit=N` query arg, which allows limiting the number of returned values to `N`. +The `/select/logsql/field_values` endpoint supports optional `limit=N` query arg, which allows limiting the number of returned values to `N`. The endpoint returns arbitrary subset of values if their number exceeds `N`, so `limit=N` cannot be used for pagination over big number of field values. When the `limit` is reached, `hits` are zeroed, since they cannot be calculated reliably. From 8207879fa3016d8421ed0c8984deab2c6dd9460d Mon Sep 17 00:00:00 2001 From: Dima Lazerka <58356625+dima-vm@users.noreply.github.com> Date: Fri, 13 Sep 2024 05:14:24 -0500 Subject: [PATCH 036/128] docs: fixes misspelled typos Also tried to make it catch "Authorisation" in the future, fixed a lot of other misspells along the way, but didn't make it catch "Authorisation" anyway. - Fix misspelled "Authorization" header name - Fix misspelled "organization" - Fix more misspells --- app/vmalert/rule/utils_test.go | 10 +- .../packages/vmui/src/assets/MetricsQL.md | 2 +- cspell/Makefile | 3 + cspell/cspell.json | 4 +- cspell/custom-dict.txt | 94 ++- cspell/package-lock.json | 717 +++++++++++------- cspell/package.json | 16 +- docs/Cluster-VictoriaMetrics.md | 2 +- docs/MetricsQL.md | 2 +- docs/VictoriaLogs/LogsQL.md | 10 +- .../data-ingestion/opentelemetry.md | 2 +- docs/VictoriaLogs/keyConcepts.md | 2 +- docs/VictoriaLogs/querying/README.md | 2 +- docs/anomaly-detection/FAQ.md | 2 +- docs/anomaly-detection/components/models.md | 4 +- docs/changelog/CHANGELOG.md | 12 +- docs/changelog/CHANGELOG_2022.md | 2 +- docs/changelog/CHANGELOG_2023.md | 4 +- docs/data-ingestion/Alloy.md | 2 +- docs/enterprise.md | 2 +- docs/goals.md | 2 +- docs/operator/CHANGELOG.md | 6 +- docs/operator/api.md | 6 +- docs/operator/resources/README.md | 4 +- docs/operator/vars.md | 2 +- docs/stream-aggregation.md | 2 +- docs/victoriametrics-datasource.md | 2 +- docs/vmgateway.md | 4 +- 28 files changed, 574 insertions(+), 348 deletions(-) diff --git a/app/vmalert/rule/utils_test.go b/app/vmalert/rule/utils_test.go index e87cff5997..4212e216df 100644 --- a/app/vmalert/rule/utils_test.go +++ b/app/vmalert/rule/utils_test.go @@ -50,12 +50,12 @@ func TestRequestToCurl(t *testing.T) { f(req, "curl -k -X POST 'https://user:xxxxx@foo.com?query=up&step=10'") req = newReq("https://user:pass@foo.com") - req.Header.Set("Authorisation", "Bearer 123456") - f(req, "curl -k -X POST -H 'Authorisation: ' 'https://user:xxxxx@foo.com'") + req.Header.Set("Authorization", "Bearer 123456") + f(req, "curl -k -X POST -H 'Authorization: ' 'https://user:xxxxx@foo.com'") req = newReq("https://user:pass@foo.com") - req.Header.Set("Authorisation", "Basic 123456") - f(req, "curl -k -X POST -H 'Authorisation: ' 'https://user:xxxxx@foo.com'") + req.Header.Set("Authorization", "Basic 123456") + f(req, "curl -k -X POST -H 'Authorization: ' 'https://user:xxxxx@foo.com'") req = newReq("https://foo.com") req.Header.Set("My-Password", "mypassword") @@ -66,7 +66,7 @@ func TestRequestToCurl(t *testing.T) { f(req, "curl -k -X POST -H 'Key-For: ' 'https://foo.com'") req = newReq("https://foo.com") - req.Header.Set("My-Secret-Org", "secret-organisation") + req.Header.Set("My-Secret-Org", "secret-organization") f(req, "curl -k -X POST -H 'My-Secret-Org: ' 'https://foo.com'") req = newReq("https://foo.com") diff --git a/app/vmui/packages/vmui/src/assets/MetricsQL.md b/app/vmui/packages/vmui/src/assets/MetricsQL.md index 2f71686b58..7d75c77f7b 100644 --- a/app/vmui/packages/vmui/src/assets/MetricsQL.md +++ b/app/vmui/packages/vmui/src/assets/MetricsQL.md @@ -103,7 +103,7 @@ The list of MetricsQL features on top of PromQL: * Trailing commas on all the lists are allowed - label filters, function args and with expressions. For instance, the following queries are valid: `m{foo="bar",}`, `f(a, b,)`, `WITH (x=y,) x`. This simplifies maintenance of multi-line queries. -* Metric names and label names may contain any unicode letter. For example `температура{город="Київ"}` is a valid MetricsQL expression. +* Metric names and label names may contain any unicode letter. For example `ტემპერატურა{πόλη="Київ"}` is a valid MetricsQL expression. * Metric names and labels names may contain escaped chars. For example, `foo\-bar{baz\=aa="b"}` is valid expression. It returns time series with name `foo-bar` containing label `baz=aa` with value `b`. Additionally, the following escape sequences are supported: diff --git a/cspell/Makefile b/cspell/Makefile index 5695af28a9..db472b1404 100644 --- a/cspell/Makefile +++ b/cspell/Makefile @@ -23,3 +23,6 @@ cspell-run-command: cspell -c "$(CMD)" @rm cspell.json +cspell-update-deps: cspell-install + @CMD="cd /victoriametrics/cspell && npm update && rm -rf ./node_modules" $(MAKE) cspell-run-command + diff --git a/cspell/cspell.json b/cspell/cspell.json index 7fbd8bfb55..090c9e4a7d 100644 --- a/cspell/cspell.json +++ b/cspell/cspell.json @@ -1,7 +1,7 @@ { "allowCompoundWords": true, "caseSensitive": false, - "language": "en,ru,uk", + "language": "en", "minWordLength": 3, "dictionaryDefinitions": [ { @@ -20,7 +20,7 @@ "data-science", "docker", "dotnet", - "en_us", + "en_US", "en-common-misspelling", "fonts", "fullstack", diff --git a/cspell/custom-dict.txt b/cspell/custom-dict.txt index 5f3d9e4277..0734d1ba2b 100644 --- a/cspell/custom-dict.txt +++ b/cspell/custom-dict.txt @@ -1,25 +1,107 @@ + Aecio -ampl Amz +Asafs124142 +Folz +IMD +LOESS +MADS +MHI +Mimir +PVE +Relabelings +VMUI +Vestas +Zomato +ampl apiextensionsv appsv aps -Asafs124142 +argo +avh ays betav bxc +cenkalti crds eeks -Folz +fadvise +felixge giv +inotify jimmidyson keyсoncepts +logr metav -MHI -nn +otelcol +otlphttp +otlploghttp otlpmetric otlpmetrichttp +otlptrace +otlptracehttp +pgmajfault sgn +speedup +stdr +vcpu +vlinsert +vmagent +vmagentdata +vmagents +vmaggr +vmalert +vmalertmanager +vmalertmanagerconfig +vmalertmanagerconfigs +vmalerts +vmanomaly +vmauth +vmbackup +vmbackupmanager +vmcluster +vmclusters +vmctl +vmdata +vmgateway +vminsert +vminserts +vmnodescrape +vmoperator +vmpodscrape +vmprobe +vmrange +vmrule +vmrules +vmscrapeconfig +vmselect +vmselects +vmservicescrape +vmsingle +vmstaticscrape +vmstorage +vmstorages +vmuser +vmusers +vmutils +xvf xzf +ανοίξει +αρχείο +δεν +μπορεί +πόλη +τιμή +Киев +Київ +Поле +базе +город ошиб -vcpu \ No newline at end of file +температура +тест +დონე +სფერო +ტემპერატურა +შეტყობინება +შეცდომა \ No newline at end of file diff --git a/cspell/package-lock.json b/cspell/package-lock.json index 1e8ed225ac..263c26ac4c 100644 --- a/cspell/package-lock.json +++ b/cspell/package-lock.json @@ -5,46 +5,47 @@ "packages": { "": { "devDependencies": { - "@cspell/dict-aws": "^4.0.2", + "@cspell/dict-aws": "^4.0.4", "@cspell/dict-data-science": "^2.0.1", - "@cspell/dict-en_us": "^4.3.21", - "@cspell/dict-fullstack": "^3.1.8", - "@cspell/dict-golang": "^6.0.9", - "@cspell/dict-k8s": "^1.0.5", - "@cspell/dict-people-names": "^1.0.3", + "@cspell/dict-en_us": "^4.3.23", + "@cspell/dict-fullstack": "^3.2.0", + "@cspell/dict-golang": "^6.0.12", + "@cspell/dict-k8s": "^1.0.6", + "@cspell/dict-people-names": "^1.1.1", "@cspell/dict-ru_ru": "^2.2.1", - "@cspell/dict-software-terms": "^3.4.5", + "@cspell/dict-software-terms": "^4.1.3", "@cspell/dict-uk-ua": "^4.0.1", "@cspell/dict-win32": "^2.0.3", - "cspell": "^8.8.4" + "cspell": "^8.14.2" } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.10.2.tgz", - "integrity": "sha512-0hNGgY+/MjOBo756K4081Oh5rsDKcD5vHL7yjI8hANbyXFNnpsjyhg5psN+BJrBnvc9myW7oSaY/9hB+kgWEhA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.14.2.tgz", + "integrity": "sha512-Kv2Utj/RTSxfufGXkkoTZ/3ErCsYWpCijtDFr/FwSsM7mC0PzLpdlcD9xjtgrJO5Kwp7T47iTG21U4Mwddyi8Q==", "dev": true, + "license": "MIT", "dependencies": { "@cspell/dict-ada": "^4.0.2", - "@cspell/dict-aws": "^4.0.2", + "@cspell/dict-aws": "^4.0.3", "@cspell/dict-bash": "^4.1.3", - "@cspell/dict-companies": "^3.1.2", - "@cspell/dict-cpp": "^5.1.10", + "@cspell/dict-companies": "^3.1.4", + "@cspell/dict-cpp": "^5.1.12", "@cspell/dict-cryptocurrencies": "^5.0.0", "@cspell/dict-csharp": "^4.0.2", - "@cspell/dict-css": "^4.0.12", + "@cspell/dict-css": "^4.0.13", "@cspell/dict-dart": "^2.0.3", "@cspell/dict-django": "^4.1.0", "@cspell/dict-docker": "^1.1.7", "@cspell/dict-dotnet": "^5.0.2", "@cspell/dict-elixir": "^4.0.3", "@cspell/dict-en_us": "^4.3.23", - "@cspell/dict-en-common-misspellings": "^2.0.3", + "@cspell/dict-en-common-misspellings": "^2.0.4", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.4", "@cspell/dict-fonts": "^4.0.0", "@cspell/dict-fsharp": "^1.0.1", - "@cspell/dict-fullstack": "^3.1.8", + "@cspell/dict-fullstack": "^3.2.0", "@cspell/dict-gaming-terms": "^1.0.5", "@cspell/dict-git": "^3.0.0", "@cspell/dict-golang": "^6.0.9", @@ -54,28 +55,28 @@ "@cspell/dict-html-symbol-entities": "^4.0.0", "@cspell/dict-java": "^5.0.7", "@cspell/dict-julia": "^1.0.1", - "@cspell/dict-k8s": "^1.0.5", + "@cspell/dict-k8s": "^1.0.6", "@cspell/dict-latex": "^4.0.0", "@cspell/dict-lorem-ipsum": "^4.0.0", "@cspell/dict-lua": "^4.0.3", "@cspell/dict-makefile": "^1.0.0", "@cspell/dict-monkeyc": "^1.0.6", "@cspell/dict-node": "^5.0.1", - "@cspell/dict-npm": "^5.0.16", + "@cspell/dict-npm": "^5.0.18", "@cspell/dict-php": "^4.0.8", - "@cspell/dict-powershell": "^5.0.4", + "@cspell/dict-powershell": "^5.0.5", "@cspell/dict-public-licenses": "^2.0.7", - "@cspell/dict-python": "^4.2.1", + "@cspell/dict-python": "^4.2.4", "@cspell/dict-r": "^2.0.1", "@cspell/dict-ruby": "^5.0.2", - "@cspell/dict-rust": "^4.0.4", - "@cspell/dict-scala": "^5.0.2", - "@cspell/dict-software-terms": "^3.4.9", - "@cspell/dict-sql": "^2.1.3", + "@cspell/dict-rust": "^4.0.5", + "@cspell/dict-scala": "^5.0.3", + "@cspell/dict-software-terms": "^4.0.6", + "@cspell/dict-sql": "^2.1.5", "@cspell/dict-svelte": "^1.0.2", "@cspell/dict-swift": "^2.0.1", "@cspell/dict-terraform": "^1.0.0", - "@cspell/dict-typescript": "^3.1.5", + "@cspell/dict-typescript": "^3.1.6", "@cspell/dict-vue": "^3.0.0" }, "engines": { @@ -83,31 +84,34 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.10.2.tgz", - "integrity": "sha512-ijXzAwLx5S9YC2C1wvqiGbduOMVH6DSfHFeGKgeUlpkgNdPvFVwhza+Uva9/ToGUAwUe5+EcrzFhavrNj/QPDw==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.14.2.tgz", + "integrity": "sha512-TZavcnNIZKX1xC/GNj80RgFVKHCT4pHT0qm9jCsQFH2QJfyCrUlkEvotKGSQ04lAyCwWg6Enq95qhouF8YbKUQ==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-types": "8.10.2" + "@cspell/cspell-types": "8.14.2" }, "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-pipe": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.10.2.tgz", - "integrity": "sha512-6k5IcNZnaJsP79omKOzZY8Jc9PjTbVMipHNNlSA+FqRBE0Pn0WZfyINGQN8JZbUkahi2YFvXTArGuQH72Mz6AQ==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.14.2.tgz", + "integrity": "sha512-aWMoXZAXEre0/M9AYWOW33YyOJZ06i4vvsEpWBDWpHpWQEmsR/7cMMgld8Pp3wlEjIUclUAKTYmrZ61PFWU/og==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-resolver": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.10.2.tgz", - "integrity": "sha512-t3BuRKBVFtB50/xuN+StL8TZwFPnRsNC5M1CSSLZZ178RQBc50Qh4593FrK2qTkuNK7VmveRi5Ij8E85D702vQ==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.14.2.tgz", + "integrity": "sha512-pSyBsAvslaN0dx0pHdvECJEuFDDBJGAD6G8U4BVbIyj2OPk0Ox0HrZIj6csYxxoJERAgNO/q7yCPwa4j9NNFXg==", "dev": true, + "license": "MIT", "dependencies": { "global-directory": "^4.0.1" }, @@ -116,19 +120,21 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.10.2.tgz", - "integrity": "sha512-oZjZjTGK0u8U06u9mYQ4jS6laoGm1GtaSSigHcRJn+ABwapxCheqYywmUrZmt0/Z5JzDU/YJ+iBxsT+sY55mrQ==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.14.2.tgz", + "integrity": "sha512-WUF7xf3YgXYIqjmBwLcVugYIrYL4WfXchgSo9rmbbnOcAArzsK+HKfzb4AniZAJ1unxcIQ0JnVlRmnCAKPjjLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-types": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.10.2.tgz", - "integrity": "sha512-hVOlZNOCn2c69lHO8Gu4qSj0myUhbvPxebJCknBczaPfB2xwgd1gTrKRYCDCR6ci+PxlgHSoOhV8rvh+RKy78A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.14.2.tgz", + "integrity": "sha512-MRY8MjBNOKGMDSkxAKueYAgVL43miO+lDcLCBBP+7cNXqHiUFMIZteONcGp3kJT0dWS04dN6lKAXvaNF0aWcng==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -137,259 +143,302 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.2.tgz", "integrity": "sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-aws": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.2.tgz", - "integrity": "sha512-aNGHWSV7dRLTIn8WJemzLoMF62qOaiUQlgnsCwH5fRCD/00gsWCwg106pnbkmK4AyabyxzneOV4dfecDJWkSxw==", - "dev": true + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.4.tgz", + "integrity": "sha512-6AWI/Kkf+RcX/J81VX8+GKLeTgHWEr/OMhGk3dHQzWK66RaqDJCGDqi7494ghZKcBB7dGa3U5jcKw2FZHL/u3w==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-bash": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.3.tgz", - "integrity": "sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==", - "dev": true + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.4.tgz", + "integrity": "sha512-W/AHoQcJYn3Vn/tUiXX2+6D/bhfzdDshwcbQWv9TdiNlXP9P6UJjDKWbxyA5ogJCsR2D0X9Kx11oV8E58siGKQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-companies": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.2.tgz", - "integrity": "sha512-OwR5i1xbYuJX7FtHQySmTy3iJtPV1rZQ3jFCxFGwrA1xRQ4rtRcDQ+sTXBCIAoJHkXa84f9J3zsngOKmMGyS/w==", - "dev": true + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.4.tgz", + "integrity": "sha512-y9e0amzEK36EiiKx3VAA+SHQJPpf2Qv5cCt5eTUSggpTkiFkCh6gRKQ97rVlrKh5GJrqinDwYIJtTsxuh2vy2Q==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-cpp": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.1.10.tgz", - "integrity": "sha512-BmIF0sAz2BgGEOwzYIeEm9ALneDjd1tcTbFbo+A1Hcq3zOKP8yViSgxS9CEN30KOZIyph6Tldp531UPEpoEl0Q==", - "dev": true + "version": "5.1.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.1.16.tgz", + "integrity": "sha512-32fU5RkuOM55IRcxjByiSoKbjr+C4danDfYjHaQNRWdvjzJzci3fLDGA2wTXiclkgDODxGiV8LCTUwCz+3TNWA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-cryptocurrencies": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.0.tgz", "integrity": "sha512-Z4ARIw5+bvmShL+4ZrhDzGhnc9znaAGHOEMaB/GURdS/jdoreEDY34wdN0NtdLHDO5KO7GduZnZyqGdRoiSmYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-csharp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-css": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.12.tgz", - "integrity": "sha512-vGBgPM92MkHQF5/2jsWcnaahOZ+C6OE/fPvd5ScBP72oFY9tn5GLuomcyO0z8vWCr2e0nUSX1OGimPtcQAlvSw==", - "dev": true + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.13.tgz", + "integrity": "sha512-WfOQkqlAJTo8eIQeztaH0N0P+iF5hsJVKFuhy4jmARPISy8Efcv8QXk2/IVbmjJH0/ZV7dKRdnY5JFVXuVz37g==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-dart": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.3.tgz", - "integrity": "sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw==", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.2.1.tgz", + "integrity": "sha512-yriKm7QkoPx3JPSSOcw6iX9gOb2N50bOo/wqWviqPYbhpMRh9Xiv6dkUy3+ot+21GuShZazO8X6U5+Vw67XEwg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-data-science": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.1.tgz", "integrity": "sha512-xeutkzK0eBe+LFXOFU2kJeAYO6IuFUc1g7iRLr7HeCmlC4rsdGclwGHh61KmttL3+YHQytYStxaRBdGAXWC8Lw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-django": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.0.tgz", "integrity": "sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-docker": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.7.tgz", "integrity": "sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-dotnet": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.2.tgz", - "integrity": "sha512-UD/pO2A2zia/YZJ8Kck/F6YyDSpCMq0YvItpd4YbtDVzPREfTZ48FjZsbYi4Jhzwfvc6o8R56JusAE58P+4sNQ==", - "dev": true + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.5.tgz", + "integrity": "sha512-gjg0L97ee146wX47dnA698cHm85e7EOpf9mVrJD8DmEaqoo/k1oPy2g7c7LgKxK9XnqwoXxhLNnngPrwXOoEtQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-elixir": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz", "integrity": "sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-en_us": { "version": "4.3.23", "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.23.tgz", "integrity": "sha512-l0SoEQBsi3zDSl3OuL4/apBkxjuj4hLIg/oy6+gZ7LWh03rKdF6VNtSZNXWAmMY+pmb1cGA3ouleTiJIglbsIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.3.tgz", - "integrity": "sha512-8nF1z9nUiSgMyikL66HTbDO7jCGtB24TxKBasXIBwkBKMDZgA2M883iXdeByy6m1JJUcCGFkSftVYp2W0bUgjw==", - "dev": true + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.4.tgz", + "integrity": "sha512-lvOiRjV/FG4pAGZL3PN2GCVHSTCE92cwhfLGGkOsQtxSmef6WCHfHwp9auafkBlX0yFQSKDfq6/TlpQbjbJBtQ==", + "dev": true, + "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb": { "version": "1.1.33", "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-filetypes": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.4.tgz", "integrity": "sha512-IBi8eIVdykoGgIv5wQhOURi5lmCNJq0we6DvqKoPQJHthXbgsuO1qrHSiUVydMiQl/XvcnUWTMeAlVUlUClnVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-fonts": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.0.tgz", "integrity": "sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-fsharp": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.0.1.tgz", "integrity": "sha512-23xyPcD+j+NnqOjRHgW3IU7Li912SX9wmeefcY0QxukbAxJ/vAN4rBpjSwwYZeQPAn3fxdfdNZs03fg+UM+4yQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-fullstack": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.8.tgz", - "integrity": "sha512-YRlZupL7uqMCtEBK0bDP9BrcPnjDhz7m4GBqCc1EYqfXauHbLmDT8ELha7T/E7wsFKniHSjzwDZzhNXo2lusRQ==", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.0.tgz", + "integrity": "sha512-sIGQwU6G3rLTo+nx0GKyirR5dQSFeTIzFTOrURw51ISf+jKG9a3OmvsVtc2OANfvEAOLOC9Wfd8WYhmsO8KRDQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-gaming-terms": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.5.tgz", "integrity": "sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-git": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.0.tgz", "integrity": "sha512-simGS/lIiXbEaqJu9E2VPoYW1OTC2xrwPPXNXFMa2uo/50av56qOuaxDrZ5eH1LidFXwoc8HROCHYeKoNrDLSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-golang": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.9.tgz", - "integrity": "sha512-etDt2WQauyEQDA+qPS5QtkYTb2I9l5IfQftAllVoB1aOrT6bxxpHvMEpJ0Hsn/vezxrCqa/BmtUbRxllIxIuSg==", - "dev": true + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.12.tgz", + "integrity": "sha512-LEPeoqd+4O+vceHF73S7D7+LYfrAjOvp4Dqzh4MT30ruzlQ77yHRSuYOJtrFN1GK5ntAt/ILSVOKg9sgsz1Llg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-google": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.1.tgz", "integrity": "sha512-dQr4M3n95uOhtloNSgB9tYYGXGGEGEykkFyRtfcp5pFuEecYUa0BSgtlGKx9RXVtJtKgR+yFT/a5uQSlt8WjqQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-haskell": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-html": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.5.tgz", "integrity": "sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz", "integrity": "sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.7.tgz", "integrity": "sha512-ejQ9iJXYIq7R09BScU2y5OUGrSqwcD+J5mHFOKbduuQ5s/Eh/duz45KOzykeMLI6KHPVxhBKpUPBWIsfewECpQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-julia": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.0.1.tgz", "integrity": "sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-k8s": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.5.tgz", - "integrity": "sha512-Cj+/ZV4S+MKlwfocSJZqe/2UAd/sY8YtlZjbK25VN1nCnrsKrBjfkX29vclwSj1U9aJg4Z9jw/uMjoaKu9ZrpQ==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.6.tgz", + "integrity": "sha512-srhVDtwrd799uxMpsPOQqeDJY+gEocgZpoK06EFrb4GRYGhv7lXo9Fb+xQMyQytzOW9dw4DNOEck++nacDuymg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-latex": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.0.tgz", "integrity": "sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-lorem-ipsum": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.0.tgz", "integrity": "sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-lua": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.3.tgz", "integrity": "sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-makefile": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.0.tgz", "integrity": "sha512-3W9tHPcSbJa6s0bcqWo6VisEDTSN5zOtDbnPabF7rbyjRpNo0uHXHRJQF8gAbFzoTzBBhgkTmrfSiuyQm7vBUQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-monkeyc": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.6.tgz", "integrity": "sha512-oO8ZDu/FtZ55aq9Mb67HtaCnsLn59xvhO/t2mLLTHAp667hJFxpp7bCtr2zOrR1NELzFXmKln/2lw/PvxMSvrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-node": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.1.tgz", "integrity": "sha512-lax/jGz9h3Dv83v8LHa5G0bf6wm8YVRMzbjJPG/9rp7cAGPtdrga+XANFq+B7bY5+jiSA3zvj10LUFCFjnnCCg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.0.16.tgz", - "integrity": "sha512-ZWPnLAziEcSCvV0c8k9Qj88pfMu+wZwM5Qks87ShsfBgI8uLZ9tGHravA7gmjH1Gd7Bgxy2ulvXtSqIWPh1lew==", - "dev": true + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.4.tgz", + "integrity": "sha512-yzqVTY4P5neom4z9orV2IFOqDZ7fDotmisP7nwQkEmftoELgn5CUtNdnJhWDoDQQn6yrxOxA8jEqmyETIWzN4Q==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-people-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-people-names/-/dict-people-names-1.1.0.tgz", - "integrity": "sha512-cO4+c+oNTGpmUc8VG8UUaxyLSIi8aI8DBITrfHXA+SG6GM5xP5NCzohbNECa5+1FX5w8BGfRhyBvU9oIkcTq/A==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-people-names/-/dict-people-names-1.1.1.tgz", + "integrity": "sha512-PsQlecMEoNDNwjdS48+DU4Xa7twwNSN8TO5lVugpU4Og/jsW25Zt5H/VTBQxAjetZgdGawFqmy+oXUksdtloKw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-php": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.8.tgz", - "integrity": "sha512-TBw3won4MCBQ2wdu7kvgOCR3dY2Tb+LJHgDUpuquy3WnzGiSDJ4AVelrZdE1xu7mjFJUr4q48aB21YT5uQqPZA==", - "dev": true + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.10.tgz", + "integrity": "sha512-NfTZdp6kcZDF1PvgQ6cY0zE4FUO5rSwNmBH/iwCBuaLfJAFQ97rgjxo+D2bic4CFwNjyHutnHPtjJBRANO5XQw==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-powershell": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.4.tgz", - "integrity": "sha512-eosDShapDgBWN9ULF7+sRNdUtzRnUdsfEdBSchDm8FZA4HOqxUSZy3b/cX/Rdw0Fnw0AKgk0kzgXw7tS6vwJMQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.8.tgz", + "integrity": "sha512-Eg64BccQp5oEJ+V/O2G27KaLWmuOL2AWMOs2470adUihOleRfW8j9XwAEGCS+JKSnDb2mksWA72Z6kDqH138IQ==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-public-licenses": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.7.tgz", - "integrity": "sha512-KlBXuGcN3LE7tQi/GEqKiDewWGGuopiAD0zRK1QilOx5Co8XAvs044gk4MNIQftc8r0nHeUI+irJKLGcR36DIQ==", - "dev": true + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.8.tgz", + "integrity": "sha512-Sup+tFS7cDV0fgpoKtUqEZ6+fA/H+XUgBiqQ/Fbs6vUE3WCjJHOIVsP+udHuyMH7iBfJ4UFYOYeORcY4EaKdMg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.1.tgz", - "integrity": "sha512-9X2jRgyM0cxBoFQRo4Zc8oacyWnXi+0/bMI5FGibZNZV4y/o9UoFEr6agjU260/cXHTjIdkX233nN7eb7dtyRg==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.6.tgz", + "integrity": "sha512-Hkz399qDGEbfXi9GYa2hDl7GahglI86JmS2F1KP8sfjLXofUgtnknyC5NWc86nzHcP38pZiPqPbTigyDYw5y8A==", "dev": true, + "license": "MIT", "dependencies": { "@cspell/dict-data-science": "^2.0.1" } @@ -398,91 +447,106 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-ru_ru": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@cspell/dict-ru_ru/-/dict-ru_ru-2.2.1.tgz", "integrity": "sha512-05pgxSNR13/zWIhGxXS/HpFmfjnorlNB6YIxOVLh82/JWqIPKYPDKUOnEQt212ohtZqoVimUOxaOR2d7wyy7og==", - "dev": true + "dev": true, + "license": "GPL-3.0-or-later" }, "node_modules/@cspell/dict-ruby": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.2.tgz", - "integrity": "sha512-cIh8KTjpldzFzKGgrqUX4bFyav5lC52hXDKo4LbRuMVncs3zg4hcSf4HtURY+f2AfEZzN6ZKzXafQpThq3dl2g==", - "dev": true + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.3.tgz", + "integrity": "sha512-V1xzv9hN6u8r6SM4CkYdsxs4ov8gjXXo0Twfx5kWhLXbEVxTXDMt7ohLTqpy2XlF5mutixZdbHMeFiAww8v+Ug==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-rust": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.4.tgz", - "integrity": "sha512-v9/LcZknt/Xq7m1jdTWiQEtmkVVKdE1etAfGL2sgcWpZYewEa459HeWndNA0gfzQrpWX9sYay18mt7pqClJEdA==", - "dev": true + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.5.tgz", + "integrity": "sha512-DIvlPRDemjKQy8rCqftAgGNZxY5Bg+Ps7qAIJjxkSjmMETyDgl0KTVuaJPt7EK4jJt6uCZ4ILy96npsHDPwoXA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-scala": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.2.tgz", - "integrity": "sha512-v97ClgidZt99JUm7OjhQugDHmhx4U8fcgunHvD/BsXWjXNj4cTr0m0YjofyZoL44WpICsNuFV9F/sv9OM5HUEw==", - "dev": true + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.3.tgz", + "integrity": "sha512-4yGb4AInT99rqprxVNT9TYb1YSpq58Owzq7zi3ZS5T0u899Y4VsxsBiOgHnQ/4W+ygi+sp+oqef8w8nABR2lkg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.4.9.tgz", - "integrity": "sha512-J2uNH3ScBPQijXyzLfxsC1CYgq36MWvbynJzQJ15ZazTsecC0pQHynm3/6VH4X/BphV2eXB0GRJT3yMicYLGCw==", - "dev": true + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.1.3.tgz", + "integrity": "sha512-5Wn5JG4IzCboX5pjISdkipsPKGaz1//iuBZdHl4US5x7mO4jOGXLpjzx6ZoPM4PXUlMEFz9NJRCDepAu8fXVtA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-sql": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.3.tgz", - "integrity": "sha512-SEyTNKJrjqD6PAzZ9WpdSu6P7wgdNtGV2RV8Kpuw1x6bV+YsSptuClYG+JSdRExBTE6LwIe1bTklejUp3ZP8TQ==", - "dev": true + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.5.tgz", + "integrity": "sha512-FmxanytHXss7GAWAXmgaxl3icTCW7YxlimyOSPNfm+njqeUDjw3kEv4mFNDDObBJv8Ec5AWCbUDkWIpkE3IpKg==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-svelte": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-swift": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-terraform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.0.tgz", - "integrity": "sha512-Ak+vy4HP/bOgzf06BAMC30+ZvL9mzv21xLM2XtfnBLTDJGdxlk/nK0U6QT8VfFLqJ0ZZSpyOxGsUebWDCTr/zQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.1.tgz", + "integrity": "sha512-29lmUUnZgPh+ieZ5hunick8hzNIpNRtiJh9vAusNskPCrig3RTW6u7F+GG1a8uyslbzSw+Irjf40PTOan1OJJA==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-typescript": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.5.tgz", - "integrity": "sha512-EkIwwNV/xqEoBPJml2S16RXj65h1kvly8dfDLgXerrKw6puybZdvAHerAph6/uPTYdtLcsPyJYkPt5ISOJYrtw==", - "dev": true + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.6.tgz", + "integrity": "sha512-1beC6O4P/j23VuxX+i0+F7XqPVc3hhiAzGJHEKqnWf5cWAXQtg0xz3xQJ5MvYx2a7iLaSa+lu7+05vG9UHyu9Q==", + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-uk-ua": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@cspell/dict-uk-ua/-/dict-uk-ua-4.0.1.tgz", "integrity": "sha512-9igk+CsmsDlZfQDfpcIE62/0rfabb+tQLMfQhGaceHo92WQN5bsq/0/39HPw1Kl3Tps/D6MUL2YYVVlTYsa4Xg==", - "dev": true + "dev": true, + "license": "GPL-3.0" }, "node_modules/@cspell/dict-vue": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.0.tgz", "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dict-win32": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@cspell/dict-win32/-/dict-win32-2.0.3.tgz", "integrity": "sha512-UXiRdYxgnUVCbphHY3PE1/SEEF5g5alcVzHvVC6YH5eOVazDO8brxT87kytS5uxgvewPHmyFg9V29s4U9b5BVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.10.2.tgz", - "integrity": "sha512-EFcoKLLW/5pnHfGwF0ESsXohRpekep+sVoHGrHORUV4LesFCxBvtanubaTjV40IypWqUquinJwbsflrlkOPf8w==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.14.2.tgz", + "integrity": "sha512-5MbqtIligU7yPwHWU/5yFCgMvur4i1bRAF1Cy8y2dDtHsa204S/w/SaXs+51EFLp2eNbCiBisCBrwJFT7R1RxA==", "dev": true, + "license": "MIT", "dependencies": { "import-meta-resolve": "^4.1.0" }, @@ -490,20 +554,32 @@ "node": ">=18.0" } }, - "node_modules/@cspell/strong-weak-map": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.10.2.tgz", - "integrity": "sha512-6oG4kx439Lnxy24HZqvXw/7ExCkcqHg+ORBI2lE6BIrYdDpsmatSgTXdhIlGPrra0Ut0jBGMqCN5dehC+CnfnQ==", + "node_modules/@cspell/filetypes": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.14.2.tgz", + "integrity": "sha512-ZevArA0mWeVTTqHicxCPZIAeCibpY3NwWK/x6d1Lgu7RPk/daoGAM546Q2SLChFu+r10tIH7pRG212A6Q9ihPA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/strong-weak-map": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.14.2.tgz", + "integrity": "sha512-7sRzJc392CQYNNrtdPEfOHJdRqsqf6nASCtbS5A9hL2UrdWQ4uN7r/D+Y1HpuizwY9eOkZvarcFfsYt5wE0Pug==", + "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@cspell/url": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.10.2.tgz", - "integrity": "sha512-ImrFRopPDzyc1ZtRuSNGVGAT2Kgq5YaR1bSQio9Je8V4IizFP5kzg1rPiJxJL0pbqlWDJe226xlPUfJhj/ygjw==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.14.2.tgz", + "integrity": "sha512-YmWW+B/2XQcCynLpiAQF77Bitm5Cynw3/BICZkbdveKjJkUzEmXB+U2qWuwXOyU8xUYuwkP63YM8McnI567rUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.0" } @@ -513,6 +589,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -526,6 +603,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -535,6 +613,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -544,10 +623,11 @@ } }, "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -559,13 +639,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -578,6 +660,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -587,6 +670,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -599,6 +683,7 @@ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.2.0" }, @@ -614,6 +699,7 @@ "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^2.0.0", "resolve-from": "^5.0.0" @@ -630,15 +716,17 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/comment-json": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.4.tgz", - "integrity": "sha512-E5AjpSW+O+N5T2GsOQMHLLsJvrYw6G/AFt9GvU6NguEAfzKShh7hRiLtVo6S9KbRpFMGqE5ojo0/hE+sdteWvQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, + "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", @@ -654,32 +742,35 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cspell": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.10.2.tgz", - "integrity": "sha512-xPvxr7pYWmNEteWcgkqe6fCyL5V6nmlZL4SjGLM9a17pWR9ybLg5ajKlbIPcK9QbDMXUWoUY4VPk2DCr1lwgEQ==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.14.2.tgz", + "integrity": "sha512-ii/W7fwO4chNQVYl1C/8k7RW8EXzLb69rvg08p8mSJx8B2UasVJ9tuJpTH2Spo1jX6N3H0dKPWUbd1fAmdAhPg==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "8.10.2", - "@cspell/cspell-pipe": "8.10.2", - "@cspell/cspell-types": "8.10.2", - "@cspell/dynamic-import": "8.10.2", + "@cspell/cspell-json-reporter": "8.14.2", + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "@cspell/dynamic-import": "8.14.2", + "@cspell/url": "8.14.2", "chalk": "^5.3.0", "chalk-template": "^1.1.0", "commander": "^12.1.0", - "cspell-gitignore": "8.10.2", - "cspell-glob": "8.10.2", - "cspell-io": "8.10.2", - "cspell-lib": "8.10.2", + "cspell-dictionary": "8.14.2", + "cspell-gitignore": "8.14.2", + "cspell-glob": "8.14.2", + "cspell-io": "8.14.2", + "cspell-lib": "8.14.2", "fast-glob": "^3.3.2", "fast-json-stable-stringify": "^2.1.0", - "file-entry-cache": "^8.0.0", + "file-entry-cache": "^9.0.0", "get-stdin": "^9.0.0", - "semver": "^7.6.2", - "strip-ansi": "^7.1.0", - "vscode-uri": "^3.0.8" + "semver": "^7.6.3", + "strip-ansi": "^7.1.0" }, "bin": { "cspell": "bin.mjs", @@ -693,44 +784,46 @@ } }, "node_modules/cspell-config-lib": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.10.2.tgz", - "integrity": "sha512-U7quH8Br4mAbAnRQE06cIpNsWGIY5kshpUh2fg7PLJO0gbXpE7UVz03Wz8j1A6EOe3oEPm6mQdEPqruOpy+RCg==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.14.2.tgz", + "integrity": "sha512-yHP1BdcH5dbjb8qiZr6+bxEnJ+rxTULQ00wBz3eBPWCghJywEAYYvMWoYuxVtPpndlkKYC1wJAHsyNkweQyepA==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-types": "8.10.2", - "comment-json": "^4.2.4", - "yaml": "^2.4.5" + "@cspell/cspell-types": "8.14.2", + "comment-json": "^4.2.5", + "yaml": "^2.5.0" }, "engines": { "node": ">=18" } }, "node_modules/cspell-dictionary": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.10.2.tgz", - "integrity": "sha512-k9qgdmgN/mzdU6PorxsA37InKqsFxl9r26xVPDSht725xB5C1a8UlTjpo1C9VfTI4KVxiBhkEHBtg6xaDwe+JA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.14.2.tgz", + "integrity": "sha512-gWuAvf6queGGUvGbfAxxUq55cZ0OevWPbjnCrSB0PpJ4tqdFd8dLcvVrIKzoE2sBXKPw2NDkmoEngs6iGavC0w==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.10.2", - "@cspell/cspell-types": "8.10.2", - "cspell-trie-lib": "8.10.2", - "fast-equals": "^5.0.1", - "gensequence": "^7.0.0" + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "cspell-trie-lib": "8.14.2", + "fast-equals": "^5.0.1" }, "engines": { "node": ">=18" } }, "node_modules/cspell-gitignore": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.10.2.tgz", - "integrity": "sha512-6jvqUhanyORdqXndKJR4P0Xg5NMsqHucjZFzEWxca0Uj5ndFC+Dsk3uslN4iR6NmKAZeiv+cQCSoEpsGcqIPeA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.14.2.tgz", + "integrity": "sha512-lrO/49NaKBpkR7vFxv4OOY+oHmsG5+gNQejrBBWD9Nv9vvjJtz/G36X/rcN6M6tFcQQMWwa01kf04nxz8Ejuhg==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/url": "8.10.2", - "cspell-glob": "8.10.2", - "cspell-io": "8.10.2", + "@cspell/url": "8.14.2", + "cspell-glob": "8.14.2", + "cspell-io": "8.14.2", "find-up-simple": "^1.0.0" }, "bin": { @@ -741,12 +834,13 @@ } }, "node_modules/cspell-glob": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.10.2.tgz", - "integrity": "sha512-GnrPWoKdQaMqRha+slwoyzZNpfM5boeVE52gPVTGWKTP/nw7w2hg4r3jVliYEVWMJbFknFEyg+WSd3C+KIP5zQ==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.14.2.tgz", + "integrity": "sha512-9Q1Kgoo1ev3fKTpp9y5n8M4RLxd8B0f5o4y5FQe4dBU0j/bt+/YDrLZNWDm77JViV606XQ6fimG1FTTq6pT9/g==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/url": "8.10.2", + "@cspell/url": "8.14.2", "micromatch": "^4.0.7" }, "engines": { @@ -754,13 +848,14 @@ } }, "node_modules/cspell-grammar": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.10.2.tgz", - "integrity": "sha512-nOHufnGwGSvf22L6bMS/AYMX9eATMf+dqTeIMG+x61zPIkGgxq5ahI1TNRtm2QBoPHnpPHD0tNCSD5VI7ymAQA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.14.2.tgz", + "integrity": "sha512-eYwceVP80FGYVJenE42ALnvEKOXaXjq4yVbb1Ni1umO/9qamLWNCQ1RP6rRACy5e/cXviAbhrQ5Mtw6n+pyPEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.10.2", - "@cspell/cspell-types": "8.10.2" + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2" }, "bin": { "cspell-grammar": "bin.mjs" @@ -770,45 +865,48 @@ } }, "node_modules/cspell-io": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.10.2.tgz", - "integrity": "sha512-NgcWcXD6uhsPfCZfOrrHWisuIDS18dxrDTDrl80cMG7pdzcfvb9nbP3vzbadAN11Ivf/fEaJtZHcXkkjC4v77g==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.14.2.tgz", + "integrity": "sha512-uaKpHiY3DAgfdzgKMQml6U8F8o9udMuYxGqYa5FVfN7D5Ap7B2edQzSLTUYwxrFEn4skSfp6XY73+nzJvxzH4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "8.10.2", - "@cspell/url": "8.10.2" + "@cspell/cspell-service-bus": "8.14.2", + "@cspell/url": "8.14.2" }, "engines": { "node": ">=18" } }, "node_modules/cspell-lib": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.10.2.tgz", - "integrity": "sha512-p/41Gr18b38J1v1XrRn8L/DSFjOXAYn3BpqP/Tv44RNUrtGNlXkfVY/Xh0L9Gq8CKqrg1BVRH+qTp1NqP1qsYw==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.14.2.tgz", + "integrity": "sha512-d2oiIXHXnADmnhIuFLOdNE63L7OUfzgpLbYaqAWbkImCUDkevfGrOgnX8TJ03fUgZID4nvQ+3kgu/n2j4eLZjQ==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-bundled-dicts": "8.10.2", - "@cspell/cspell-pipe": "8.10.2", - "@cspell/cspell-resolver": "8.10.2", - "@cspell/cspell-types": "8.10.2", - "@cspell/dynamic-import": "8.10.2", - "@cspell/strong-weak-map": "8.10.2", - "@cspell/url": "8.10.2", + "@cspell/cspell-bundled-dicts": "8.14.2", + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-resolver": "8.14.2", + "@cspell/cspell-types": "8.14.2", + "@cspell/dynamic-import": "8.14.2", + "@cspell/filetypes": "8.14.2", + "@cspell/strong-weak-map": "8.14.2", + "@cspell/url": "8.14.2", "clear-module": "^4.1.2", - "comment-json": "^4.2.4", - "cspell-config-lib": "8.10.2", - "cspell-dictionary": "8.10.2", - "cspell-glob": "8.10.2", - "cspell-grammar": "8.10.2", - "cspell-io": "8.10.2", - "cspell-trie-lib": "8.10.2", + "comment-json": "^4.2.5", + "cspell-config-lib": "8.14.2", + "cspell-dictionary": "8.14.2", + "cspell-glob": "8.14.2", + "cspell-grammar": "8.14.2", + "cspell-io": "8.14.2", + "cspell-trie-lib": "8.14.2", "env-paths": "^3.0.0", "fast-equals": "^5.0.1", "gensequence": "^7.0.0", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", - "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-textdocument": "^1.0.12", "vscode-uri": "^3.0.8", "xdg-basedir": "^5.1.0" }, @@ -817,13 +915,14 @@ } }, "node_modules/cspell-trie-lib": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.10.2.tgz", - "integrity": "sha512-U1bSyTr5+6qQv1fjQrMlnFm8+U5RrrLwSkU4FkNkUgloRqnCp1CNPgiDy9M7WWFYEX8X9va5smXAzR1HtGE2wg==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.14.2.tgz", + "integrity": "sha512-rZMbaEBGoyy4/zxKECaMyVyGLbuUxYmZ5jlEgiA3xPtEdWwJ4iWRTo5G6dWbQsXoxPYdAXXZ0/q0GQ2y6Jt0kw==", "dev": true, + "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.10.2", - "@cspell/cspell-types": "8.10.2", + "@cspell/cspell-pipe": "8.14.2", + "@cspell/cspell-types": "8.14.2", "gensequence": "^7.0.0" }, "engines": { @@ -835,6 +934,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -847,6 +947,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -860,6 +961,7 @@ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -869,6 +971,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -884,27 +987,30 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" } }, "node_modules/fill-range": { @@ -912,6 +1018,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -924,6 +1031,7 @@ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -932,29 +1040,32 @@ } }, "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.2.9", + "flatted": "^3.3.1", "keyv": "^4.5.4" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/gensequence": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -964,6 +1075,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -976,6 +1088,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -988,6 +1101,7 @@ "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, + "license": "MIT", "dependencies": { "ini": "4.1.1" }, @@ -1003,6 +1117,7 @@ "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1012,6 +1127,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1028,6 +1144,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -1040,6 +1157,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -1049,6 +1167,7 @@ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1059,6 +1178,7 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -1068,6 +1188,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1077,6 +1198,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -1089,6 +1211,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1097,13 +1220,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -1113,15 +1238,17 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -1135,6 +1262,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.1.0" }, @@ -1147,6 +1275,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -1172,13 +1301,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -1188,6 +1319,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1197,6 +1329,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -1221,15 +1354,17 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1242,6 +1377,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1257,6 +1393,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -1265,22 +1402,25 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1289,10 +1429,11 @@ } }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, diff --git a/cspell/package.json b/cspell/package.json index 16c072c5cb..d302d7388a 100644 --- a/cspell/package.json +++ b/cspell/package.json @@ -1,16 +1,16 @@ { "devDependencies": { - "@cspell/dict-aws": "^4.0.2", + "@cspell/dict-aws": "^4.0.4", "@cspell/dict-data-science": "^2.0.1", - "@cspell/dict-en_us": "^4.3.21", - "@cspell/dict-fullstack": "^3.1.8", - "@cspell/dict-golang": "^6.0.9", - "@cspell/dict-k8s": "^1.0.5", - "@cspell/dict-people-names": "^1.0.3", + "@cspell/dict-en_us": "^4.3.23", + "@cspell/dict-fullstack": "^3.2.0", + "@cspell/dict-golang": "^6.0.12", + "@cspell/dict-k8s": "^1.0.6", + "@cspell/dict-people-names": "^1.1.1", "@cspell/dict-ru_ru": "^2.2.1", - "@cspell/dict-software-terms": "^3.4.5", + "@cspell/dict-software-terms": "^4.1.3", "@cspell/dict-uk-ua": "^4.0.1", "@cspell/dict-win32": "^2.0.3", - "cspell": "^8.8.4" + "cspell": "^8.14.2" } } diff --git a/docs/Cluster-VictoriaMetrics.md b/docs/Cluster-VictoriaMetrics.md index 3dd66bfdb2..e843d051f3 100644 --- a/docs/Cluster-VictoriaMetrics.md +++ b/docs/Cluster-VictoriaMetrics.md @@ -1003,7 +1003,7 @@ It is safe sharing the collected profiles from security point of view, since the vmselect is capable of proxying requests to [vmalert](https://docs.victoriametrics.com/vmalert/) when `-vmalert.proxyURL` flag is set. Use this feature for the following cases: * for proxying requests from [Grafana Alerting UI](https://grafana.com/docs/grafana/latest/alerting/); -* for accessing vmalerts UI through vmselects Web interface. +* for accessing vmalert UI through vmselect Web interface. For accessing vmalerts UI through vmselect configure `-vmalert.proxyURL` flag and visit `http://:8481/select//prometheus/vmalert/` link. diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index 2f71686b58..7d75c77f7b 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -103,7 +103,7 @@ The list of MetricsQL features on top of PromQL: * Trailing commas on all the lists are allowed - label filters, function args and with expressions. For instance, the following queries are valid: `m{foo="bar",}`, `f(a, b,)`, `WITH (x=y,) x`. This simplifies maintenance of multi-line queries. -* Metric names and label names may contain any unicode letter. For example `температура{город="Київ"}` is a valid MetricsQL expression. +* Metric names and label names may contain any unicode letter. For example `ტემპერატურა{πόλη="Київ"}` is a valid MetricsQL expression. * Metric names and labels names may contain escaped chars. For example, `foo\-bar{baz\=aa="b"}` is valid expression. It returns time series with name `foo-bar` containing label `baz=aa` with value `b`. Additionally, the following escape sequences are supported: diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index 0bac580af4..a503296232 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -526,7 +526,7 @@ log.level:error Both the field name and the word in the query can contain arbitrary [utf-8](https://en.wikipedia.org/wiki/UTF-8)-encoded chars. For example: ```logsql -поле:значение +სფერო:τιμή ``` Both the field name and the word in the query can be put inside quotes if they contain special chars, which may clash with the query syntax. @@ -589,7 +589,7 @@ event.original:"cannot open file" Both the field name and the phrase can contain arbitrary [utf-8](https://en.wikipedia.org/wiki/UTF-8)-encoded chars. For example: ```logsql -сообщение:"невозможно открыть файл" +შეტყობინება:"Το αρχείο δεν μπορεί να ανοίξει" ``` The field name can be put inside quotes if it contains special chars, which may clash with the query syntax. @@ -791,7 +791,7 @@ log.level:="error" Both the field name and the phrase can contain arbitrary [utf-8](https://en.wikipedia.org/wiki/UTF-8)-encoded chars. For example: ```logsql -log.уровень:="ошибка" +log.დონე:="შეცდომა" ``` The field name can be put inside quotes if it contains special chars, which may clash with the query syntax. @@ -843,7 +843,7 @@ log.level:="err"* Both the field name and the phrase can contain arbitrary [utf-8](https://en.wikipedia.org/wiki/UTF-8)-encoded chars. For example: ```logsql -log.уровень:="ошиб"* +log.დონე:="შეცდომა"* ``` The field name can be put inside quotes if it contains special chars, which may clash with the query syntax. @@ -1039,7 +1039,7 @@ Performance tips: For example, the `~"error|warning"` query can be substituted with `error OR warning` query, which usually works much faster. Note that the `~"error|warning"` matches `errors` as well as `warnings` [words](#word), while `error OR warning` matches only the specified [words](#word). See also [multi-exact filter](#multi-exact-filter). -- Prefer moving the regexp filter to the end of the [logical filter](#logical-filter), so lightweighter filters are executed first. +- Prefer moving the regexp filter to the end of the [logical filter](#logical-filter), so lighter filters are executed first. - Prefer using `="some prefix"*` instead of `~"^some prefix"`, since the [`exact` filter](#exact-prefix-filter) works much faster than the regexp filter. - See [other performance tips](#performance-tips). diff --git a/docs/VictoriaLogs/data-ingestion/opentelemetry.md b/docs/VictoriaLogs/data-ingestion/opentelemetry.md index b8c7b6fa07..414a80281d 100644 --- a/docs/VictoriaLogs/data-ingestion/opentelemetry.md +++ b/docs/VictoriaLogs/data-ingestion/opentelemetry.md @@ -109,7 +109,7 @@ exporters: See also [HTTP headers](https://docs.victoriametrics.com/victorialogs/data-ingestion/#http-headers) -Substitute `localhost:9428` address inside `exporters.oltphttp.logs_endpoint` with the real address of VictoriaLogs. +Substitute `localhost:9428` address inside `exporters.otlphttp.logs_endpoint` with the real address of VictoriaLogs. The ingested log entries can be queried according to [these docs](https://docs.victoriametrics.com/VictoriaLogs/querying/). diff --git a/docs/VictoriaLogs/keyConcepts.md b/docs/VictoriaLogs/keyConcepts.md index e81900cdd1..f091ee1ddd 100644 --- a/docs/VictoriaLogs/keyConcepts.md +++ b/docs/VictoriaLogs/keyConcepts.md @@ -103,7 +103,7 @@ Unicode chars must be encoded with [UTF-8](https://en.wikipedia.org/wiki/UTF-8) ```json { "field with whitespace": "value\nwith\nnewlines", - "Поле": "价值", + "Поле": "价值" } ``` diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index 435e90f114..fe727cac6e 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -59,7 +59,7 @@ By default the `/select/logsql/query` returns all the log entries matching the g curl http://localhost:9428/select/logsql/query -d 'query=error | limit 10' ``` - By adding [`_time` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter). The time range for the query can be specified via optional - `start` and `end` query ars formatted according to [these docs](https://docs.victoriametrics.com/single-server-victoriametrics/#timestamp-formats). + `start` and `end` query args formatted according to [these docs](https://docs.victoriametrics.com/single-server-victoriametrics/#timestamp-formats). - By adding more specific [filters](https://docs.victoriametrics.com/victorialogs/logsql/#filters) to the query, which select lower number of logs. The `/select/logsql/query` endpoint returns [a stream of JSON lines](https://jsonlines.org/), diff --git a/docs/anomaly-detection/FAQ.md b/docs/anomaly-detection/FAQ.md index 4c3e3a7e49..b6aa386fd9 100644 --- a/docs/anomaly-detection/FAQ.md +++ b/docs/anomaly-detection/FAQ.md @@ -208,7 +208,7 @@ As a result, switching from the offline Z-score model to the Online Z-score mode The old configuration would perform 168 (hours in a week) `fit` calls, each using 2 days (48 hours) of data, totaling 168 * 48 = 8064 hours of data for each timeseries returned. -The new configuration performs only 1 `fit` call in 180 days, using 4 hours of data initially, totaling 4 hours of data, which is **magnitutes smaller**. +The new configuration performs only 1 `fit` call in 180 days, using 4 hours of data initially, totaling 4 hours of data, which is **magnitudes smaller**. P.s. `infer` data volume will remain the same for both models, so it does not affect the overall calculations. diff --git a/docs/anomaly-detection/components/models.md b/docs/anomaly-detection/components/models.md index 11ac1b7781..ffc2f0a22c 100644 --- a/docs/anomaly-detection/components/models.md +++ b/docs/anomaly-detection/components/models.md @@ -649,7 +649,7 @@ It uses the `quantiles` triplet to calculate `yhat_lower`, `yhat`, and `yhat_upp *Config Example* -Suppose we have a data with strong intraday (hourly) and intraweek (daily) seasonality, data granularity is '5m' with up to 5% expected outliers present in data. Then you can apply similar config: +Suppose we have a data with strong intra-day (hourly) and intra-week (daily) seasonality, data granularity is '5m' with up to 5% expected outliers present in data. Then you can apply similar config: ```yaml models: @@ -660,7 +660,7 @@ models: min_subseason: '1h' # smallest seasonality (week, day, hour) = hour, will have its own quantile estimates min_n_samples_seen: 288 # 1440 / 5 - at least 1 full day, ideal = 1440 / 5 * 7 - one full week (seasonal_interval) scale: 1.1 # to compensate lowered quantile boundaries with wider intervals - season_starts_from: '2024-01-01' # interval calculation starting point, expecially for uncommon seasonalities like '36h' or '12d' + season_starts_from: '2024-01-01' # interval calculation starting point, especially for uncommon seasonalities like '36h' or '12d' compression: 100 # higher values mean higher accuracy but higher memory usage provide_series: ['anomaly_score', 'yhat'] # common arg example ``` diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 7c6768ac94..7d4a86f6f3 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -31,7 +31,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. -* BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. +* BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`prometheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. @@ -71,7 +71,7 @@ Released at 2024-08-28 * BUGFIX: all VictoriaMetrics components: forcefully set owner/group for release tars to 1000:1000. This helps to avoid unpacking [issues](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6788) on systems with limitations around UID:GID configuration. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6846). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly register index metrics for previous index part. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6868) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Removes the fallback to global index search when the search using per-day index fails due to too many time series found (the global index will fail anyway with the same error and so the fallback is not needed and only slows down the search). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6836) for details. -* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric names registering in the per-day index for new dates for existing time series when making calls to `/tags/tagSeries` and `/tags/tagMultiSeries` handlers of [Grpahite API](https://docs.victoriametrics.com/#graphite-api-usage). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6872/) for details. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric names registering in the per-day index for new dates for existing time series when making calls to `/tags/tagSeries` and `/tags/tagMultiSeries` handlers of [Graphite API](https://docs.victoriametrics.com/#graphite-api-usage). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6872/) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ignore deleted metrics when applying [retention filters](https://docs.victoriametrics.com/#retention-filters) and [downsampling](https://docs.victoriametrics.com/#downsampling). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6891) issue for the details. ## [v1.102.2](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.2) @@ -96,7 +96,7 @@ The v1.102.x line will be supported for at least 12 months since [v1.102.0](http * BUGFIX: all VictoriaMetrics components: forcefully set owner/group for release tars to 1000:1000. This helps to avoid unpacking [issues](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6788) on systems with limitations around UID:GID configuration. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6846). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly register index metrics for previous index part. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6868) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Removes the fallback to global index search when the search using per-day index fails due to too many time series found (the global index will fail anyway with the same error and so the fallback is not needed and only slows down the search). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6836) for details. -* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric names registering in the per-day index for new dates for existing time series when making calls to `/tags/tagSeries` and `/tags/tagMultiSeries` handlers of [Grpahite API](https://docs.victoriametrics.com/#graphite-api-usage). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6872/) for details. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric names registering in the per-day index for new dates for existing time series when making calls to `/tags/tagSeries` and `/tags/tagMultiSeries` handlers of [Graphite API](https://docs.victoriametrics.com/#graphite-api-usage). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6872/) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ignore deleted metrics when applying [retention filters](https://docs.victoriametrics.com/#retention-filters) and [downsampling](https://docs.victoriametrics.com/#downsampling). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6891) issue for the details. ## [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) @@ -115,7 +115,7 @@ The v1.102.x line will be supported for at least 12 months since [v1.102.0](http * FEATURE: [vmauth](https://docs.victoriametrics.com/vmauth/): now returns HTTP 502 status code when all upstream backends are not available. Previously, it returned HTTP 503 status code. This change aligns vmauth behavior with other well-known reverse-proxies behavior. * FEATURE: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): add `Scrape duration 0.99 quantile` panel to show the 99th quantile of scrape duration in seconds. This should help identifying vmagent instances that experiences too high scraping durations. -* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmselect` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes panic if incorrect `metrisql` expression passed to the `prettify-query` API. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6736) for details. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmselect` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes panic if incorrect `metricsql` expression passed to the `prettify-query` API. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6736) for details. * BUGFIX: all VictoriaMetrics components: validate files specified via `-tlsKeyFile` and `-tlsCertFile` cmd-line flags on the process start-up. Previously, validation happened on the first connection accepted by HTTP server. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6608) for the details. Thanks to @yincongcyincong for the [pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6621). * BUGFIX: [vmauth](https://docs.victoriametrics.com/vmauth/): properly proxy requests to backend urls ending with `/` if the original request path equals to `/`. Previously the trailing `/` at the backend path was incorrectly removed. For example, if the request to `http://vmauth/` is configured to be proxied to `url_prefix=http://backend/foo/`, then it was proxied to `http://backend/foo`, while it should go to `http://backend/foo/`. * BUGFIX: [vmauth](https://docs.victoriametrics.com/vmauth/): fix `cannot read data after closing the reader` error when proxying HTTP requests without body (aka `GET` requests). The issue has been introduced in [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) in [this commit](https://github.com/VictoriaMetrics/VictoriaMetrics/commit/7ee57974935a662896f2de40fdf613156630617d). @@ -184,7 +184,7 @@ Released at 2024-06-24 * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/): add `max_scrape_size` option to [scrape config](https://docs.victoriametrics.com/sd_configs/#scrape_configs) for setting custom limit on the response size target can send. The new [automatically generated metric](https://docs.victoriametrics.com/vmagent/#automatically-generated-metrics) `scrape_response_size_bytes` is added to reflect the response size of the target. See these issues: [1](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6429), [2](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2992), [3](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6123), [4](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5612). * FEATURE: [vmsingle](https://docs.victoriametrics.com/single-server-victoriametrics/): check for ranged vector arguments in non-rollup expressions when `-search.disableImplicitConversion` or `-search.logImplicitConversion` are enabled. For example, `sum(up[5m])` or `absent(up[5m])` will fail to execute if these flags are set. * FEATURE: [vmsingle](https://docs.victoriametrics.com/single-server-victoriametrics/): validate that rollup expressions has ranged vector arguments passed when `-search.disableImplicitConversion` or `-search.logImplicitConversion` are enabled. For example, `rate(metric)` or `count_over_time(metric)` will fail to execute if these flags are set. -* FEATURE: [vmalert-tool](https://docs.victoriametrics.com/vmalert-tool/): support file path with hierarchical patterns and regexpes, and http url in unittest cmd-line flag `-files`, e.g. `-files="http:///path/to/rules"` or `-files="dir/**/*.yaml"`. +* FEATURE: [vmalert-tool](https://docs.victoriametrics.com/vmalert-tool/): support file path with hierarchical patterns and regexes, and http url in unittest cmd-line flag `-files`, e.g. `-files="http:///path/to/rules"` or `-files="dir/**/*.yaml"`. * BUGFIX: all VictoriaMetrics components: properly calculate `process_resident_memory_bytes` metric for OS with non-default value of memory page size. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6457) for details. * BUGFIX: all VictoriaMetrics components: prioritize `-configAuthKey` and `-reloadAuthKey` over `-httpAuth.*` settings. This change aligns behavior of mentioned flags with other auth flags like `-metricsAuthKey`, `-flagsAuthKey`, `-pprofAuthKey`. Check [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6329). @@ -450,7 +450,7 @@ The v1.97.x line will be supported for at least 12 months since [v1.97.0](https: * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert/), [vmctl](https://docs.victoriametrics.com/vmctl/) and snapshot API: verify correctness of URLs provided via cmd-line flags before executing HTTP requests. See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6740) issue for details. * BUGFIX: all VictoriaMetrics components: forcefully set owner/group for release tars to 1000:1000. This helps to avoid unpacking [issues](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6788) on systems with limitations around UID:GID configuration. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6846). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly register index metrics for previous index part. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6868) for details. -* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric names registering in the per-day index for new dates for existing time series when making calls to `/tags/tagSeries` and `/tags/tagMultiSeries` handlers of [Grpahite API](https://docs.victoriametrics.com/#graphite-api-usage). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6872/) for details. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric names registering in the per-day index for new dates for existing time series when making calls to `/tags/tagSeries` and `/tags/tagMultiSeries` handlers of [Graphite API](https://docs.victoriametrics.com/#graphite-api-usage). See [this](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6872/) for details. ## [v1.97.6](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.6) diff --git a/docs/changelog/CHANGELOG_2022.md b/docs/changelog/CHANGELOG_2022.md index a73ef57053..9dd33b57d2 100644 --- a/docs/changelog/CHANGELOG_2022.md +++ b/docs/changelog/CHANGELOG_2022.md @@ -262,7 +262,7 @@ See [these docs](https://docs.victoriametrics.com/cluster-victoriametrics/#multi * FEATURE: sanitize metric names for data ingested via [DataDog protocol](https://docs.victoriametrics.com/#how-to-send-data-from-datadog-agent) according to [DataDog metric naming](https://docs.datadoghq.com/metrics/custom_metrics/#naming-custom-metrics). The behaviour can be disabled by passing `-datadog.sanitizeMetricName=false` command-line flag. Thanks to @PerGon for [the pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/3105). * FEATURE: add `-usePromCompatibleNaming` command-line flag to [vmagent](https://docs.victoriametrics.com/vmagent/), to single-node VictoriaMetrics and to `vminsert` component of VictoriaMetrics cluster. This flag can be used for normalizing the ingested metric names and label names to [Prometheus-compatible form](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels). If this flag is set, then all the chars unsupported by Prometheus are replaced with `_` chars in metric names and labels of the ingested samples. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3113). * FEATURE: accept whitespace in metric names and tags ingested via [Graphite plaintext protocol](https://docs.victoriametrics.com/#how-to-send-data-from-graphite-compatible-agents-such-as-statsd) according to [the specs](https://graphite.readthedocs.io/en/latest/tags.html). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3102). -* FEATURE: check the correctess of raw sample timestamps stored on disk when reading them. This reduces the probability of possible silent corruption of the data stored on disk. This should help [this](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2998) and [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3011). +* FEATURE: check the correctness of raw sample timestamps stored on disk when reading them. This reduces the probability of possible silent corruption of the data stored on disk. This should help [this](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2998) and [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3011). * FEATURE: atomically delete directories with snapshots, parts and partitions at [storage level](https://docs.victoriametrics.com/#storage). Previously such directories can be left in partially deleted state when the deletion operation was interrupted by unclean shutdown. This may result in `cannot open file ...: no such file or directory` error on the next start. The probability of this error was quite high when NFS or EFS was used as persistent storage for VictoriaMetrics data. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3038). * FEATURE: set the `start` arg to `end - 5 minutes` if isn't passed explicitly to [/api/v1/labels](https://docs.victoriametrics.com/url-examples/#apiv1labels) and [/api/v1/label/.../values](https://docs.victoriametrics.com/url-examples/#apiv1labelvalues). See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/3052). * FEATURE: allow to define the minimum TLS version to use when accepting https requests to VictoriaMetrics components if `-tls` command-line flag is set. The minimum TLS version can be set via `-tlsMinVersion` command-line flag. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3090). diff --git a/docs/changelog/CHANGELOG_2023.md b/docs/changelog/CHANGELOG_2023.md index 41410b7b4c..3db999e61b 100644 --- a/docs/changelog/CHANGELOG_2023.md +++ b/docs/changelog/CHANGELOG_2023.md @@ -993,7 +993,7 @@ Released at 2023-01-10 **Update note 1:** This release changes the logic behind `-maxConcurrentInserts` command-line flag. Previously this flag was limiting the number of concurrent connections established from clients, which send data to VictoriaMetrics. Some of these connections could be temporarily idle. Such connections do not take significant CPU and memory resources, so there is no need in limiting their count. The new logic takes into account only those connections, which **actively** ingest new data to VictoriaMetrics and to [vmagent](https://docs.victoriametrics.com/vmagent/). This means that the default `-maxConcurrentInserts` value should handle cases, which could require increasing the value in the previous releases. So it is recommended trying to remove the explicitly set `-maxConcurrentInserts` command-line flag after upgrading to this release and verifying whether this reduces CPU and memory usage. -**Update note 2:** The `vm_concurrent_addrows_current` and `vm_concurrent_addrows_capacity` metrics [exported](https://docs.victoriametrics.com/cluster-victoriametrics/#monitoring) by `vmstorage` are replaced with `vm_concurrent_insert_current` and `vm_concurrent_insert_capacity` metrics in order to be consistent with the corresponding metrics exported by `vminsert`. Please update queries in dahsboards and alerting rules with new metric names if old metric names are used there. +**Update note 2:** The `vm_concurrent_addrows_current` and `vm_concurrent_addrows_capacity` metrics [exported](https://docs.victoriametrics.com/cluster-victoriametrics/#monitoring) by `vmstorage` are replaced with `vm_concurrent_insert_current` and `vm_concurrent_insert_capacity` metrics in order to be consistent with the corresponding metrics exported by `vminsert`. Please update queries in dashboards and alerting rules with new metric names if old metric names are used there. * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/): add support for aggregation of incoming [samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) by time and by labels. See [these docs](https://docs.victoriametrics.com/stream-aggregation/) and [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3460). * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/): reduce memory usage when scraping big number of targets without the need to enable [stream parsing mode](https://docs.victoriametrics.com/vmagent/#stream-parsing-mode). @@ -1005,7 +1005,7 @@ Released at 2023-01-10 * FEATURE: [relabeling](https://docs.victoriametrics.com/vmagent/#relabeling): add support for `keepequal` and `dropequal` relabeling actions, which are supported by Prometheus starting from [v2.41.0](https://github.com/prometheus/prometheus/releases/tag/v2.41.0). These relabeling actions are almost identical to `keep_if_equal` and `drop_if_equal` relabeling actions supported by VictoriaMetrics since `v1.38.0` - see [these docs](https://docs.victoriametrics.com/vmagent/#relabeling-enhancements) - so it is recommended sticking to `keep_if_equal` and `drop_if_equal` actions instead of switching to `keepequal` and `dropequal`. * FEATURE: [csvimport](https://docs.victoriametrics.com/#how-to-import-csv-data): support empty values for imported metrics. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3540). * FEATURE: [vmalert](https://docs.victoriametrics.com/vmalert/): allow configuring the default number of stored rule's update states in memory via global `-rule.updateEntriesLimit` command-line flag or per-rule via rule's `update_entries_limit` configuration param. See [these docs](https://docs.victoriametrics.com/vmalert/#rules) and [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/3556). -* FEATURE: improve the logic benhind `-maxConcurrentInserts` command-line flag. Previously this flag was limiting the number of concurrent connections from clients, which write data to VictoriaMetrics or [vmagent](https://docs.victoriametrics.com/vmagent/). Some of these connections could be idle for some time. These connections do not need significant amounts of CPU and memory, so there is no sense in limiting their count. The updated logic behind `-maxConcurrentInserts` limits the number of **active** insert requests, not counting idle connections. +* FEATURE: improve the logic behind `-maxConcurrentInserts` command-line flag. Previously this flag was limiting the number of concurrent connections from clients, which write data to VictoriaMetrics or [vmagent](https://docs.victoriametrics.com/vmagent/). Some of these connections could be idle for some time. These connections do not need significant amounts of CPU and memory, so there is no sense in limiting their count. The updated logic behind `-maxConcurrentInserts` limits the number of **active** insert requests, not counting idle connections. * FEATURE: protect all the http endpoints with `-httpAuth.*` command-line flag. Previously endpoints protected by `-*AuthKey` command-line flags weren't protected by `-httpAuth.*`. This could complicate the proper security setup. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3060). * FEATURE: [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): add `-maxConcurrentInserts` and `-insert.maxQueueDuration` command-line flags to `vmstorage`, so they could be tuned if needed in the same way as at `vminsert` nodes. * FEATURE: [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): limit the number of concurrently executed requests at `vmstorage` proportionally to the number of available CPU cores, since every request can saturate a single CPU core at `vmstorage`. Previously a single `vmstorage` could accept and start processing arbitrary number of concurrent requests received from big number of `vmselect` nodes. This could result in increased RAM, CPU and disk IO usage or event to out of memory crash at `vmstorage` side under high load. The limit can be fine-tuned if needed via `-search.maxConcurrentRequests` command-line flag at `vmstorage` according to [these docs](https://docs.victoriametrics.com/cluster-victoriametrics/#resource-usage-limits). `vmstorage` now [exposes](https://docs.victoriametrics.com/cluster-victoriametrics/#monitoring) the following additional metrics at `http://vmstorage:8482/metrics` page: diff --git a/docs/data-ingestion/Alloy.md b/docs/data-ingestion/Alloy.md index 03cbcbe17f..d28afeb605 100644 --- a/docs/data-ingestion/Alloy.md +++ b/docs/data-ingestion/Alloy.md @@ -218,4 +218,4 @@ otelcol.exporter.otlphttp "victoriametrics" { ## References - [Grafana Alloy Helm Chart](https://github.com/grafana/alloy/tree/main/operations/helm) -- [Grafana Alloy Documenation](https://grafana.com/docs/alloy/latest) +- [Grafana Alloy Documentation](https://grafana.com/docs/alloy/latest) diff --git a/docs/enterprise.md b/docs/enterprise.md index bb8a25f6d7..43490e1f8a 100644 --- a/docs/enterprise.md +++ b/docs/enterprise.md @@ -26,7 +26,7 @@ The use of VictoriaMetrics Enterprise components is permitted in the following c and then pass it via `-license` or `-licenseFile` command-line flags as described [in these docs](#running-victoriametrics-enterprise). - Production use if you have a valid enterprise contract or valid permit from VictoriaMetrics company. - Please contact us via [this page](https://victoriametrics.com/products/enterprise/) if you are intereseted in such a contract. + Please contact us via [this page](https://victoriametrics.com/products/enterprise/) if you are interested in such a contract. - [VictoriaMetrics Cloud](https://docs.victoriametrics.com/victoriametrics-cloud/) is built on top of VictoriaMetrics Enterprise. diff --git a/docs/goals.md b/docs/goals.md index 09fd850a23..7f5c4bd9bd 100644 --- a/docs/goals.md +++ b/docs/goals.md @@ -37,7 +37,7 @@ menu: 1. Merging all the pull requests users submit. These pull requests should fit [the goals](#goals) of VictoriaMetrics. Other pull requests must be closed as `won't merge`, with the link to this page. 1. Slowing down and complicating CI/CD pipelines with non-essential tasks, since this results in development velocity slowdown. -1. Introducing non-essential requrirements, since this slows down development velocity. +1. Introducing non-essential requirements, since this slows down development velocity. ## VictoriaMetrics proverbs diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index e3a546f146..35d12a5b50 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -48,8 +48,8 @@ aliases: - [vmuser](https://docs.victoriametrics.com/operator/resources/vmuser/): allows to skip `VMUser` from `VMAuth` config generation if it has misconfigured fields. Such as references to non-exist `CRD` objects or missing fields. It's highly recommended to enable `Validation` webhook for `VMUsers`, it should reduce surface of potential misconfiguration. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1047) for details. - [vmagent](https://docs.victoriametrics.com/operator/resources/vmagent/): adds `status` and `lastSyncError` status fields to all scrape objects - `VMServiceScrape`, `VMPodScrape`, `VMNodeScrape`,`VMPodScrape`, `VMStaticScrape` and `VMScrapeConfig`. It allows to track config generation for `vmagent` from scrape objects. - [operator](https://docs.victoriametrics.com/operator/): refactors config builder for `VMAgent`. It fixes minor bug with incorrect skip of scrape object with incorrect references for secrets and configmaps. -- [operator](https://docs.victoriametrics.com/operator/): allows to secure `metrics-bind-address` webserver with `TLS` and `mTLS` protection via flags `tls.enable`,`tls.certDir`,`tls.certName`,`tls.key``,`mtls.enable`,`mtls.clietCA`. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1033) for details. -- [operator](https://docs.victoriametrics.com/operator/): fixes bug with possible `tlsConfig` `SecretOrConfigmap` references clash. Operator adds `configmap` prefix to the configmap refrenced tls asset. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1067) for details. +- [operator](https://docs.victoriametrics.com/operator/): allows to secure `metrics-bind-address` webserver with `TLS` and `mTLS` protection via flags `tls.enable`,`tls.certDir`,`tls.certName`,`tls.key``,`mtls.enable`,`mtls.clientCA`. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1033) for details. +- [operator](https://docs.victoriametrics.com/operator/): fixes bug with possible `tlsConfig` `SecretOrConfigmap` references clash. Operator adds `configmap` prefix to the configmap referenced tls asset. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1067) for details. - [operator](https://docs.victoriametrics.com/operator/): properly release `PodDisruptionBudget` object finalizer. Previously it could be kept due to typo. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1036) for details. - [operator](https://docs.victoriametrics.com/operator/): refactors finalizers usage. Simplifies finalizer manipulation with helper functions - [operator](https://docs.victoriametrics.com/operator/): adds `tls_config` and `authKey` settings to auto-created `VMServiceScrape` for CRD objects from `extraArgs`. See [this](https://github.com/VictoriaMetrics/operator/issues/1033) issue for details. @@ -1223,7 +1223,7 @@ aliases: ### Fixes -- Reduces memory usage - coz of improper label selectors and cache usage operator consumed a lot of memory +- Reduces memory usage - improper label selectors and cache usage cause operator to consume a lot of memory - Fixes VMAlert default image tag typo - Fixes logging configuration - Fixes new config reloader watch logic: diff --git a/docs/operator/api.md b/docs/operator/api.md index cfc53d51cd..d2178a87fb 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -2284,7 +2284,7 @@ _Appears in:_ | `port` | Port listen port | _string_ | false | | `priorityClassName` | PriorityClassName assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `removePvcAfterDelete` | RemovePvcAfterDelete - if true, controller adds ownership to pvc
and after VLogs objest deletion - pvc will be garbage collected
by controller manager | _boolean_ | false | +| `removePvcAfterDelete` | RemovePvcAfterDelete - if true, controller adds ownership to pvc
and after VLogs object deletion - pvc will be garbage collected
by controller manager | _boolean_ | false | | `replicaCount` | ReplicaCount is the expected size of the VLogs
it can be 0 or 1
if you need more - use vm cluster | _integer_ | true | | `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `retentionPeriod` | RetentionPeriod for the stored logs | _string_ | true | @@ -2813,7 +2813,7 @@ _Appears in:_ -VMAuth is the Schema for the vmauths API +VMAuth is the Schema for the vmauth API @@ -3581,7 +3581,7 @@ _Appears in:_ | `port` | Port listen port | _string_ | false | | `priorityClassName` | PriorityClassName assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `removePvcAfterDelete` | RemovePvcAfterDelete - if true, controller adds ownership to pvc
and after VMSingle objest deletion - pvc will be garbage collected
by controller manager | _boolean_ | false | +| `removePvcAfterDelete` | RemovePvcAfterDelete - if true, controller adds ownership to pvc
and after VMSingle object deletion - pvc will be garbage collected
by controller manager | _boolean_ | false | | `replicaCount` | ReplicaCount is the expected size of the VMSingle
it can be 0 or 1
if you need more - use vm cluster | _integer_ | true | | `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `retentionPeriod` | RetentionPeriod for the stored metrics
Note VictoriaMetrics has data/ and indexdb/ folders
metrics from data/ removed eventually as soon as partition leaves retention period
reverse index data at indexdb rotates once at the half of configured [retention period](https://docs.victoriametrics.com/Single-server-VictoriaMetrics/#retention) | _string_ | true | diff --git a/docs/operator/resources/README.md b/docs/operator/resources/README.md index e5044a49a0..88629693ed 100644 --- a/docs/operator/resources/README.md +++ b/docs/operator/resources/README.md @@ -73,7 +73,7 @@ Usage example: ```yaml kind: VMSingle metadata: - name: vmsingle-example--exrtaenvs + name: vmsingle-example--extraenvs spec: retentionPeriod: "1" extraEnvs: @@ -107,7 +107,7 @@ Page for every custom resource contains examples section: - [VMUser examples](https://docs.victoriametrics.com/operator/resources/vmuser#examples) - [VMScrapeConfig examples](https://docs.victoriametrics.com/operator/resources/vmscrapeconfig#examples) -In addition, you can find examples of the custom resources for VIctoriMetrics operator in +In addition, you can find examples of the custom resources for VictoriaMetrics operator in the **[examples directory](https://github.com/VictoriaMetrics/operator/tree/master/config/examples) of operator repository**. ## Managing versions of VM diff --git a/docs/operator/vars.md b/docs/operator/vars.md index 3561e0462c..e260965675 100644 --- a/docs/operator/vars.md +++ b/docs/operator/vars.md @@ -123,7 +123,7 @@ aliases: | VM_ENABLEDPROMETHEUSCONVERTER_SCRAPECONFIG | true | false | - | | VM_FILTERCHILDLABELPREFIXES | - | false | - | | VM_FILTERCHILDANNOTATIONPREFIXES | - | false | - | -| VM_PROMETHEUSCONVERTERADDARGOCDIGNOREANNOTATIONS | false | false | adds compare-options and sync-options for prometheus objects converted by operatorit helps to properly use converter with ArgoCD | +| VM_PROMETHEUSCONVERTERADDARGOCDIGNOREANNOTATIONS | false | false | adds compare-options and sync-options for prometheus objects converted by operator. It helps to properly use converter with ArgoCD | | VM_ENABLEDPROMETHEUSCONVERTEROWNERREFERENCES | false | false | - | | VM_FILTERPROMETHEUSCONVERTERLABELPREFIXES | - | false | allows filtering for converted labels, labels with matched prefix will be ignored | | VM_FILTERPROMETHEUSCONVERTERANNOTATIONPREFIXES | - | false | allows filtering for converted annotations, annotations with matched prefix will be ignored | diff --git a/docs/stream-aggregation.md b/docs/stream-aggregation.md index 7dba5e6d03..f795bd62fb 100644 --- a/docs/stream-aggregation.md +++ b/docs/stream-aggregation.md @@ -1179,7 +1179,7 @@ These issues can be fixed in the following ways: ### High resource usage -The following solutions can help reducing memory usage and CPU usage durting streaming aggregation: +The following solutions can help reducing memory usage and CPU usage during streaming aggregation: - To use more specific `match` filters at [streaming aggregation config](#stream-aggregation-config), so only the really needed [raw samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) are aggregated. diff --git a/docs/victoriametrics-datasource.md b/docs/victoriametrics-datasource.md index a220ea54f8..c7e8788cb8 100644 --- a/docs/victoriametrics-datasource.md +++ b/docs/victoriametrics-datasource.md @@ -320,7 +320,7 @@ This command will build executable multi-platform files to the `dist` folder for From the root folder of the project run the following command: ``` -make victorimetrics-frontend-plugin-build +make victoriametrics-frontend-plugin-build ``` This command will build all frontend app into `dist` folder. diff --git a/docs/vmgateway.md b/docs/vmgateway.md index 064c26221f..ec98580856 100644 --- a/docs/vmgateway.md +++ b/docs/vmgateway.md @@ -221,7 +221,7 @@ This command will result in 3 keys loaded: 2 keys from files and 1 from command `vmgateway` supports using OpenID discovery endpoint for JWKS keys discovery. In order to enable [OpenID discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) endpoint for JWT signature verification, you need to specify OpenID discovery endpoint URLs by using `auth.oidcDiscoveryEndpoints` flag. -When `auth.oidcDiscoveryEndpoints` is specified `vmageteway` will fetch JWKS keys from the specified endpoint and use them for JWT signature verification. +When `auth.oidcDiscoveryEndpoints` is specified `vmgateway` will fetch JWKS keys from the specified endpoint and use them for JWT signature verification. Example usage for tokens issued by Azure Active Directory: ```sh @@ -246,7 +246,7 @@ Example usage for tokens issued by Google: `vmgateway` supports using JWKS endpoint for JWT signature verification. In order to enable JWKS endpoint for JWT signature verification, you need to specify JWKS endpoint URL by using `auth.jwksEndpoints` flag. -When `auth.jwksEndpoints` is specified `vmageteway` will fetch public keys from the specified endpoint and use them for JWT signature verification. +When `auth.jwksEndpoints` is specified `vmgateway` will fetch public keys from the specified endpoint and use them for JWT signature verification. Example usage for tokens issued by Azure Active Directory: ```sh From 264c2ec6bd78fcf222780e9aea91793563591702 Mon Sep 17 00:00:00 2001 From: Nikolay Date: Fri, 13 Sep 2024 12:22:25 +0200 Subject: [PATCH 037/128] lib/fs: properly call windows APIs (#6998) Previously we manually imported system windows DDLs and made direct syscall. But golang exposes syscall wrappers with sys/windows package. It seems, that direct syscall was broken at 1.23 golang release. It was `GetDiskFreeSpace` syscall in our case. This commit replaces all manual syscalls with wrappers Related issue: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973 Related golang issue: https://github.com/golang/go/issues/69029 Signed-off-by: f41gh7 --- docs/changelog/CHANGELOG.md | 3 ++- lib/fs/fs_windows.go | 37 +++++++++---------------------------- 2 files changed, 11 insertions(+), 29 deletions(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 7d4a86f6f3..6e977856b6 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -31,7 +31,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. -* BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`prometheus/graphite`) routes for query requests. +* BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes start-up crash on Windows OS. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. diff --git a/lib/fs/fs_windows.go b/lib/fs/fs_windows.go index 1c2c280972..315c822ba8 100644 --- a/lib/fs/fs_windows.go +++ b/lib/fs/fs_windows.go @@ -10,13 +10,6 @@ import ( "golang.org/x/sys/windows" ) -var ( - kernelDLL = windows.MustLoadDLL("kernel32.dll") - procLock = kernelDLL.MustFindProc("LockFileEx") - procEvent = kernelDLL.MustFindProc("CreateEventW") - procDisk = kernelDLL.MustFindProc("GetDiskFreeSpaceExW") -) - // at windows only files could be synced // Sync for directories is not supported. func mustSyncPath(path string) { @@ -61,8 +54,8 @@ func createFlockFile(flockFile string) (*os.File, error) { return nil, fmt.Errorf("cannot create Overlapped handler: %w", err) } // https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-lockfileex - r1, _, err := procLock.Call(uintptr(handle), uintptr(lockfileExclusiveLock), uintptr(0), uintptr(1), uintptr(0), uintptr(unsafe.Pointer(ol))) - if r1 == 0 { + err = windows.LockFileEx(handle, lockfileExclusiveLock, 0, 0, 0, ol) + if err != nil { return nil, err } return os.NewFile(uintptr(handle), flockFile), nil @@ -118,13 +111,13 @@ func mUnmap(data []byte) error { } func mustGetFreeSpace(path string) uint64 { - var freeBytes int64 - r, _, err := procDisk.Call(uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(path))), - uintptr(unsafe.Pointer(&freeBytes))) - if r == 0 { + var freeBytes uint64 + // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdiskfreespaceexw + err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr(path), &freeBytes, nil, nil) + if err != nil { logger.Panicf("FATAL: cannot get free space for %q : %s", path, err) } - return uint64(freeBytes) + return freeBytes } // stub @@ -132,23 +125,11 @@ func fadviseSequentialRead(f *os.File, prefetch bool) error { return nil } -// copied from https://github.com/juju/fslock/blob/master/fslock_windows.go // https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-overlapped func newOverlapped() (*windows.Overlapped, error) { - event, err := createEvent(nil, nil) + event, err := windows.CreateEvent(nil, 1, 1, nil) if err != nil { - return nil, err + return nil, fmt.Errorf("cannot create event: %w", err) } return &windows.Overlapped{HEvent: event}, nil } - -// copied from https://github.com/juju/fslock/blob/master/fslock_windows.go -// https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createeventa -func createEvent(sa *windows.SecurityAttributes, name *uint16) (windows.Handle, error) { - r0, _, err := procEvent.Call(uintptr(unsafe.Pointer(sa)), uintptr(1), uintptr(1), uintptr(unsafe.Pointer(name))) - handle := windows.Handle(r0) - if handle == windows.InvalidHandle { - return 0, err - } - return handle, nil -} From d8f8822fa5be0060551b9e644165066b2797ce16 Mon Sep 17 00:00:00 2001 From: Nikolay Date: Mon, 16 Sep 2024 10:05:08 +0200 Subject: [PATCH 038/128] lib/storage: consistently check for missing metricID index records (#6967) * Previously, only metricID->metricName missing index records were tracked with deadline But it was possible a case for missing metricID->TSID index records. IndexDB metrics fix exposed misleading metric for such missing records. * This commit adds check for metricID->TSID missing index records. And delete missing metricID entry if it hit 60 second deadline. Related issue https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6931 Signed-off-by: f41gh7 --- docs/changelog/CHANGELOG.md | 1 + lib/storage/index_db.go | 47 +++++++++++-------------------------- lib/storage/storage.go | 45 +++++++++++++++++++++++++++++++++-- 3 files changed, 58 insertions(+), 35 deletions(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 6e977856b6..54b1769cc9 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -35,6 +35,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes start-up crash on Windows OS. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly track `vm_missing_tsids_for_metric_id_total` metric. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6931) for details. * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). diff --git a/lib/storage/index_db.go b/lib/storage/index_db.go index d9a1939dbb..2c37c2fd31 100644 --- a/lib/storage/index_db.go +++ b/lib/storage/index_db.go @@ -1518,36 +1518,7 @@ func (db *indexDB) searchMetricNameWithCache(dst []byte, metricID uint64) ([]byt return dst, true } - // Cannot find the MetricName for the given metricID. - // There are the following expected cases when this may happen: - // - // 1. The corresponding metricID -> metricName entry isn't visible for search yet. - // The solution is to wait for some time and try the search again. - // It is OK if newly registered time series isn't visible for search during some time. - // This should resolve https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5959 - // - // 2. The metricID -> metricName entry doesn't exist in the indexdb. - // This is possible after unclean shutdown or after restoring of indexdb from a snapshot. - // In this case the metricID must be deleted, so new metricID is registered - // again when new sample for the given metricName is ingested next time. - // - ct := fasttime.UnixTimestamp() - db.s.missingMetricIDsLock.Lock() - if ct > db.s.missingMetricIDsResetDeadline { - db.s.missingMetricIDs = nil - db.s.missingMetricIDsResetDeadline = ct + 2*60 - } - deleteDeadline, ok := db.s.missingMetricIDs[metricID] - if !ok { - if db.s.missingMetricIDs == nil { - db.s.missingMetricIDs = make(map[uint64]uint64) - } - deleteDeadline = ct + 60 - db.s.missingMetricIDs[metricID] = deleteDeadline - } - db.s.missingMetricIDsLock.Unlock() - - if ct > deleteDeadline { + if db.s.shouldDeleteMissingMetricID(metricID) { // Cannot find the MetricName for the given metricID for the last 60 seconds. // It is likely the indexDB contains incomplete set of metricID -> metricName entries // after unclean shutdown or after restoring from a snapshot. @@ -1810,6 +1781,7 @@ func (db *indexDB) getTSIDsFromMetricIDs(qt *querytracer.Tracer, metricIDs []uin tsidsFound := i qt.Printf("found %d tsids for %d metricIDs in the current indexdb", tsidsFound, len(metricIDs)) + var metricIDsToDelete []uint64 if len(extMetricIDs) > 0 { // Search for extMetricIDs in the previous indexdb (aka extDB) db.doExtDB(func(extDB *indexDB) { @@ -1829,7 +1801,10 @@ func (db *indexDB) getTSIDsFromMetricIDs(qt *querytracer.Tracer, metricIDs []uin // This may be the case on incomplete indexDB // due to snapshot or due to unflushed entries. // Just increment errors counter and skip it for now. - is.db.missingTSIDsForMetricID.Add(1) + if is.db.s.shouldDeleteMissingMetricID(metricID) { + is.db.missingTSIDsForMetricID.Add(1) + metricIDsToDelete = append(metricIDsToDelete, metricID) + } continue } is.db.putToMetricIDCache(metricID, tsid) @@ -1845,6 +1820,10 @@ func (db *indexDB) getTSIDsFromMetricIDs(qt *querytracer.Tracer, metricIDs []uin tsids = tsids[:i] qt.Printf("load %d tsids for %d metricIDs from both current and previous indexdb", len(tsids), len(metricIDs)) + if len(metricIDsToDelete) > 0 { + db.deleteMetricIDs(metricIDsToDelete) + } + // Sort the found tsids, since they must be passed to TSID search // in the sorted order. sort.Slice(tsids, func(i, j int) bool { return tsids[i].Less(&tsids[j]) }) @@ -3313,8 +3292,10 @@ func mergeTagToMetricIDsRowsInternal(data []byte, items []mergeset.Item, nsPrefi return dstData, dstItems } -var indexBlocksWithMetricIDsIncorrectOrder atomic.Uint64 -var indexBlocksWithMetricIDsProcessed atomic.Uint64 +var ( + indexBlocksWithMetricIDsIncorrectOrder atomic.Uint64 + indexBlocksWithMetricIDsProcessed atomic.Uint64 +) func checkItemsSorted(data []byte, items []mergeset.Item) bool { if len(items) == 0 { diff --git a/lib/storage/storage.go b/lib/storage/storage.go index 2125ca247c..71b91b1a56 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -154,8 +154,9 @@ type Storage struct { // missingMetricIDs maps metricID to the deadline in unix timestamp seconds // after which all the indexdb entries for the given metricID - // must be deleted if metricName isn't found by the given metricID. - // This is used inside searchMetricNameWithCache() for detecting permanently missing metricID->metricName entries. + // must be deleted if index entry isn't found by the given metricID. + // This is used inside searchMetricNameWithCache() and getTSIDsFromMetricIDs() + // for detecting permanently missing metricID->metricName/TSID entries. // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5959 missingMetricIDsLock sync.Mutex missingMetricIDs map[uint64]uint64 @@ -2709,3 +2710,43 @@ var indexDBTableIdx = func() *atomic.Uint64 { x.Store(uint64(time.Now().UnixNano())) return &x }() + +// shouldDeleteMissingMetricID checks if metricID index entry is missing +// +// Broken index entry should be deleted by caller +// There are the following expected cases when this may happen: +// +// 1. The corresponding metricID -> metricName/tsid entry isn't visible for search yet. +// The solution is to wait for some time and try the search again. +// It is OK if newly registered time series isn't visible for search during some time. +// This should resolve https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5959 +// +// 2. The metricID -> metricName/tsid entry doesn't exist in the indexdb. +// This is possible after unclean shutdown or after restoring of indexdb from a snapshot. +// In this case the metricID must be deleted, so new metricID is registered +// again when new sample for the given metric is ingested next time. +func (s *Storage) shouldDeleteMissingMetricID(metricID uint64) bool { + ct := fasttime.UnixTimestamp() + s.missingMetricIDsLock.Lock() + defer s.missingMetricIDsLock.Unlock() + + if ct > s.missingMetricIDsResetDeadline { + s.missingMetricIDs = nil + s.missingMetricIDsResetDeadline = ct + 2*60 + } + deleteDeadline, ok := s.missingMetricIDs[metricID] + if !ok { + if s.missingMetricIDs == nil { + s.missingMetricIDs = make(map[uint64]uint64) + } + deleteDeadline = ct + 60 + s.missingMetricIDs[metricID] = deleteDeadline + } + // Cannot find index entry for the given metricID for the last 60 seconds. + // It is likely the indexDB contains incomplete set of metricID -> metricName/tsid entries + // after unclean shutdown or after restoring from a snapshot. + // Mark the metricID as deleted, so it is created again when new sample + // for the given time series is ingested next time. + + return ct > deleteDeadline +} From 4c228f1e18b0ea446f9d651a654e1d92a22a4010 Mon Sep 17 00:00:00 2001 From: Dmytro Kozlov Date: Tue, 17 Sep 2024 08:33:40 +0200 Subject: [PATCH 039/128] docs/victoriametrics-cloud: updated pictures and descriptions with new functionality (#7014) Improved VictoriaMetrics documentation for cloud Related issue: https://github.com/VictoriaMetrics/cloud/issues/2143 ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- .../create_deployment_form.webp | Bin 72128 -> 0 bytes .../create_deployment_form_down.webp | Bin 0 -> 81828 bytes .../create_deployment_form_up.webp | Bin 0 -> 68832 bytes .../create_deployment_start.webp | Bin 82952 -> 109958 bytes .../quick_start_restore_password.webp | Bin 10662 -> 41708 bytes ...ck_start_restore_password_email_field.webp | Bin 6624 -> 32656 bytes .../quick_start_restore_password_message.webp | Bin 14204 -> 38416 bytes ..._start_restore_password_profile_click.webp | Bin 22988 -> 104654 bytes ...ick_start_signup_create_account_click.webp | Bin 27492 -> 113384 bytes .../quick_start_signup_default.webp | Bin 0 -> 99962 bytes .../quick_start_signup_email_confirm.webp | Bin 29292 -> 41824 bytes .../quick_start_signup_email_confirmed.webp | Bin 32292 -> 109252 bytes .../quick_start_signup_errors.webp | Bin 37976 -> 113746 bytes .../quick_start_signup_fill.webp | Bin 0 -> 110576 bytes .../quick_start_signup_google_click.webp | Bin 30880 -> 99456 bytes .../quick_start_signup_success.webp | Bin 41126 -> 105750 bytes docs/victoriametrics-cloud/quickstart.md | 38 ++++++++++++++---- 17 files changed, 30 insertions(+), 8 deletions(-) delete mode 100644 docs/victoriametrics-cloud/create_deployment_form.webp create mode 100644 docs/victoriametrics-cloud/create_deployment_form_down.webp create mode 100644 docs/victoriametrics-cloud/create_deployment_form_up.webp create mode 100644 docs/victoriametrics-cloud/quick_start_signup_default.webp create mode 100644 docs/victoriametrics-cloud/quick_start_signup_fill.webp diff --git a/docs/victoriametrics-cloud/create_deployment_form.webp b/docs/victoriametrics-cloud/create_deployment_form.webp deleted file mode 100644 index 9ec1e59a19fb551f7657d98b7e17311b4c86438c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72128 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 diff --git a/docs/victoriametrics-cloud/create_deployment_form_down.webp b/docs/victoriametrics-cloud/create_deployment_form_down.webp new file mode 100644 index 0000000000000000000000000000000000000000..84d672a115910b76df886c54381fdfead5bfa6c5 GIT binary patch literal 81828 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

7BbEU+iQdl`aim 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

Wft%g5ov@pfztDqs$r^fs?}tj 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

hSiwGc*}Kmp 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 literal 82952 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 F|ZrgeYt#o3|(oq1d3uTbr? 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 diff --git a/docs/victoriametrics-cloud/quick_start_restore_password.webp b/docs/victoriametrics-cloud/quick_start_restore_password.webp index 4028bfe8aec501f64468f5d1300ba263e7335e4b..61a7fee096627be89af92755f2900d3b8a5820cb 100644 GIT binary patch literal 41708 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 E0LZPh$^ZZW literal 10662 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�>#D)ppfz|U(8L*xx;dY&7u7i`?472xVZ>Dr%^{d% zS1|3`d_xnRyyBL%eRjHmRBn&KxJo-xFw@kI*xo*x+F#<`Zb8jU(c-)w&8`cfu$?Uv z(dS?bye%_zNB9k(i%PfNzNvm#Tu*dnvR_w2Qag>SAXZ~#;lltnRff;K5gZeN>#tnJ zs1F+Xv=Jsn_MEp3q;ZFz+)BP?yU?gxBRUs!()B=8o0ig7AMmxz76YN!qQgNff;`tr zX}r2S2rO5n9BoN7FAKyiyIBEz_6bY>WN5xyg!vYeEmzFa+jDwvh5{j+<_+CNxKWnY zpi^#hBjtdkFGEdWRB8#N`zY1#C6lJn5~-J*R=u(@TX84IgG!vHHE%4W_1x_OY`7m) z97R&%APgB*BZec`=?>@HXGCQs2qvr-h~C@yOI1ZoD`mk|KLwt791vqE2EEJNx6>hk zt1ih|uRDNdOW=1#U$~&t0f%g)^6Qkr>*8nXa1SNdRb5o+12V_bZSY!`+J?H>*gi>J zIe6cs3Eyv6d1H`Sc2!;o{eeBRPv7&@HF3RH%|G|j_I-dVhD4x1`X+V=`fkMsW(YN-1JCP_b0P(0ylT!~iUHqS{tR zf*aeE%Vy;zi9T&P!Sq0j?C)*Pw-%b;cX_vho1omT>R*r9s%di5t1>E`0Oav$7d)wW zd(AtCYsD#yiByK`9N^pA+v>2>t;dLVH~^Xcb{^U=Hq_y^&cjD7WkuA&_6*R9KT`U-4{m|V?!yE=PCF(!?wF?uRbk`kcb0yK7A&V1 znfuo#H5%?ZKP5H@5BmI*?vuw*Plo$xcL)8sc>)kbTfcyN2aGe_oPj9CvU6Q30vzC! z)${1lT|75<)KO!l6UFN8(nvF^(_;+fEiRV4_yg83R9m09OysP}J$e&S=VW$eK3%6k z$MfT8*{RcCtjxNXUs>eIeV`z$-NnUA8KF?9pt)OqSvcbp9~Ui(7fjb-#P{U#K7=%6 za9TLMs;!imJRT(6=kbL~0euDGieHx^%-w@pfsdQg(^??Nqv9P@O@)!J5n(UyOu2)wG zEOO#qmyn&b4|1Ln=pqEAK>rLS&22z+u`J*H**=fB7@UqBVmR zh;iD%zsgj)|76V`D>DIU0&-KJprvoMb33=I7K3j?cTsf^&7pL5 z3)7*hn$g7u3J}6CZ8hsh( zMc@}TXA)u$_s`)5=iZtK*2+PCckQ_He*LY9<{la{65|dQ&?O1;z)=r7$DXj0NYSq+ zCPmdtQFK;5Y9p4p<|?bKoGx7q-1c8fDZUA#MQpcs3Ns3SYbPxKIK}28VJ>Qf#uYdH z`idj1*VSIlcBtL`O@86C)hG1wrdkzj(Ec^ana{mEiXU*OY~rM=4^)@s;z>Cd{JZT! z8LQc5GV7WZUP5eiu^S#RwbjKA^_#;541n*5iXYi<%RG5sffq2&G}pC~ShBtst-F!1 zEkJ;qT^t96FXx-D-G+VsYV5Ma*A`V7z^Yb{sj@)CYQezs@rXJss`3FL(>kGLKk$UX ztWPq7vZUN1)>!9)zvQe4qg#25{iZfpexm!wEMfvJO--JqvC>mnWztH)%`xS*17OHP z)HX`$@#G?U%G6vlL9rw?CJ=saos^+jvg4G_x$597o#)e}`Exl7+t2WjqPRt5O-rBs z{=2*Y>&*QmPs%mH9g89*Yj*3cv^XsFb>6d z=W9NumfD{_)k0I8IgyA0%xLDufS!q)g#`l~!ZesD1A{2W28CEp-q<}RhDwJpsb+`$ l=5w!88B%Nxz9ThXdl+sX)?gxsP}SbpkNv^FPp!W{{tq2jfuR5Z diff --git a/docs/victoriametrics-cloud/quick_start_restore_password_email_field.webp b/docs/victoriametrics-cloud/quick_start_restore_password_email_field.webp index 608482f44df00501d0dd130511350c8d58640f9a..8cbdb962622d2484984b8347be85c853aa8c9682 100644 GIT binary patch literal 32656 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 literal 6624 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

axm}iLAvC#SIpvi#p5!|PfTR#US zg0@x5+Rb#VIw|=bc0jmHLpQ;gt2>}GNy|D0EV|A{t|*+mZxIwwhtFYB>fm+~HJ4~O zu;1XwK&4Gq{fWy6D`Ep?k^%CiB%6nL8+~kzpu6>^NdpYhTsYBlSd($Ejh6fn< zVPP!sXY>v-b)P`kMdujh+7#CD{cfBy3Kd^5bm-OJvP*#Muq~5Xa-jVA%B6zIN)1L< zQ5sx)dJUrHX4as4<_XtbC*gZCG5)ST#iv<`223)vk25*sd)cOr9rp;~FZ)ssX&sJ!Kn zvOyi7EWg7!__MVbu=6z={H|J$4U59DW{SWI$6t*#KNK!>M4c6JLw>G%yz}wua}KTq z6vc+|WqKNN?b9eMTOY$5Ouo5Iaar^W>Tv-x#zu1gQ2?`LhGtH9_t*e~{0D+IZgPem;XYsx?_0>oyLmrLI z-HucCdH{zBn)STIprU&Iu%wF$5VNSRqHlT9c}Y6kT6HdIw`Fm&biW$uZ%AyHnTgupjdtHE~Y=&jY=!QI*RD%NV&AQ z93L~~{p*7L(?4D~y#P1fvv* z`=e6=$4XeB5wfD3$z&_WGc1~`>jr||(dkQ16r?+j0dIY^OAe*l)7XUoJqD5J(%)&n zDV)6Hlm4RkM)THD)(n$O5S|e0FrRwZ_tRD1|BTRb;�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 literal 14204 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 diff --git a/docs/victoriametrics-cloud/quick_start_restore_password_profile_click.webp b/docs/victoriametrics-cloud/quick_start_restore_password_profile_click.webp index b833372bdbb45d7251ab0f8bd33ea11297c12368..a74236bd923e7eb8f17b3f1b11fad2319d6db58b 100644 GIT binary patch literal 104654 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

-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�FM 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 Xd-vd5zGdGhqLVZM0{-nWe}4ZDS`&9@ literal 22988 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 z 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

xfE} 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 literal 0 HcmV?d00001 diff --git a/docs/victoriametrics-cloud/quick_start_signup_email_confirm.webp b/docs/victoriametrics-cloud/quick_start_signup_email_confirm.webp index e84c670f38ce633f50a9f1ee55196d285960cc7c..fd0473df8d63725330a3467e39f26b7f25074df1 100644 GIT binary patch literal 41824 zcmeFaWq2Ihu{J7ZW@ct)$zo<%%*b6x2oQ%d0J6IR8%bo06I3yzehMbN*F0t4CB9Bv9X=1-8NJND z#@%Wz?7qI5(o1>=yfVCWJ-6K;KZ1X!kMJsZfqpzauDg|c`qK5nctyYJUH7u|8uGgO zQgS$W(w5Vl?1q2y?y3dhh4-f9@^$6i@ay<1>T%Me?m2!`Yxq;lEBK|*Q&J!OmhM1X zkN3ytftTG2*t@nfcgt(to7b8z?X5M>%rC09uY>rGuU@aoFT_(BV{K!v8?TIKz)z!( z1y9kV@DZo?Dm<6JzP=(r!KZ$=l|8o6Us&p@X$ZD-gqzvHEgRz2{QR+w;lCgM zV={3Y7!X++mLOKEH25BlM)SY*g<}sSwO=ZAaxU`T+VlH=b~@$${vQ@C^$kf4dd~D7 z$JtB0IuWbJReTTNZTp4%mzGm46(G=x+aZ%QsAvHTCL zp9k&-nAJQMfIEYdWL-04HJ=ZKIN0_vR0mR6EC(^#=@WZJCi_O9G?c^Ov=4n3|*~E0?}Vt?p}>W z#sw40K70y8iv-{9k9U?aoAB@USP|HDBa@zP0r*_1<#Z$RAJI@ zbHaj(9!oMabZXR|!u#>>ZKtIqi2_;rI*VNSP2pg-froTAk3vGnco2-&?)P#r(S8=8t`{SOF! zgfDPOm=!`PnGie0^3?UJIfKJrgk!^b~*^&RN(eJ-E|F#D6UwQrm^8Dh94fHrTq?{>zsi*7e8deSY#R~eA zo>9e@xf_{BAztzAoMQKOXJ;QJ?k~UyKP-}|Vo*r(?SdHHUn1~8Rg5#UqWH{P%qdFw zS3}g?zo8E=|D`;(-!M$*rTWzn8c(^}zgVSzEiReeQnJ4%!$(zcRO^en`3|}xFXlv? zx4|4G)E4#auUFim^zFtqOwbZ*CV{hk;$&O%(bfY)qLsnVuJXREkqg2K>{C$5Bn|y& zr@lbRn@GRRuCOzwy7Zli=_~4eQnp`bvfGQVt!3#xwVR3}-HwF>)^9QO+b(Ti{#qep zni5dA!I%`4?*_7MVeNbtprCjb1hx3mXYU$*^Nzw>OxPT5)AwLaUpFwBRX?Zv;cnh| ziBuL=uEcL(j$$$-y{Z)D#Y&4IHa+N$r`zYUJVwlyE6HIx@ygrMY?y%~^1;A|Q5aeN zuvBlXkfJQ@xnZ_2N@hBL9V`6W8vX%@`^71=UW#;kv?PBMFBm4gVT6KHLW%Ck`nN+^ zUc4Owh5!Ep}E#!r#W+<ZT6o%fIXdQRNmNNwkL$S)RJ{I|>f0L= zP`ZdruxL8yo7UD{m81)7FTWe9d{(NWiwg zo@ZG|Q7>9x6T^b)&CWzcFj`|H5;q5m(Lf&H2MOK>zbGaBvk)ChH&y=0;r?GTzFw+^ z-icJ0JMXf`_lCW?>cKw^S)hno+)`)?O%SY9aV0zGT*M4{SO&^I@K z*8my)UHctM0#OGr{^;EPy#$d{MP=^qlkc|$-Wa8_ahoQ>AQErXhr^X-783=veLMj* z>nDho`(D+*f&I6I4pg@bC?L+cs`@1#m@=kgAo!~RAbBo2K9Vk7Fs;%lKi;dNa5%nE zBJpSRLAB4Zh3yu+J44g7%gSPz185-i?*rI7$47K;R2@q>kx) zm}NB~Pejhu$K!uiTg!_=jDG`s{}v6~sC*+~xvDdK|9d@y?yhV9dSxioH8EGPL-ttKT%Gt%7RO9szvBelO-3JcwsqTY zB!obU+;#uw*@nG}>z_GX*uBJCF9G*}nN>)sx2I}>1~2ztS3YfC5%-t>ziOa@Vu;nz zu|Z^S=J9?oT2DW!1*DId5g;%Nhhov-?t9m<&k;R9U_W$IKmhW0ko-3g@z2=#Ym5Fh z8}%H_0J=U#ifXmZFUin%s#R>bwin&i+( zcCgq>&^|tZ=1YBq^Jnj+*E$9-aWU{2r7~kR05|*wF_;j}Q2+!i??!2Lm+QCgxU*L}bU*J33!MWZsDgV! zF&dB%BcYf(dIM4Q`aba_U;sx8AscOo{n9o5kKX-LCeubWC7wuVbm1xngtW5XaKIgd z#}A-$(}e?crqs^E=^)*r96=Uk#|0R+O$HT@D|a3NkF2ptuj&--b15znrBX_Yh9dBN zQ%nIub`D_SzQ^xn04PmIk0H?5VUM?o~kkr(~>HG>L4PoTn%=K(%OSYT=8M<^!#<`{Nxv>f zFaoo?1>{3KaHkZmi-W7C<-Zg|+MI3Pziu!hjhVm1SWIYX0ys|LTW$%sO8X>9&DD0t z90LW=)W{pd{=vFeU*DE6_`=OwnAiMt-tSHW+M^usJL`&v9WY+{FKX8>th~H$IHZZ| zXOTEMz`*?Xte^TWn3bx(6EXD73b&RQEgy1%uIwhgRssa-e~n>6{^}}}ZHavi)E zk4~(;9vr^*^)z>J6ldLUv}ntH(%{?1y}#!XsORTEpiG&20!jMq2oC`Vw(4*`J(fB2%jWsUjPVOBC|jAH>z{8L_m`{P<)#-7=x zB52WJfH>Rv)8%Y(oE#=^L0GgVSqThv#%?sTOyKbL@*?fOPp?}^WY_j<)3#6Yg!Esc zx8I*sBL$1?<#mh}T~=yFX*s8eg*sy&_7girx78Hs?|pA0u2|CW0{NO;{sfyfeIZr2E z7X{MwKzy5VNgg>`VgWE#iuuSsJwd!6itr@^t0j;MviZ@Yd-82jHa@(xveEZTATZBM z#1#eVL8fUI|EQqv7jIEF6qqXt%$-~l@&c7OEZ(ynan$+JeDEvo6@!x6wS4wYS!T(j-U*XJujqAV0^f=pY_*C)5`S&Xduy8(t_>L=vF&>7P&55_ zf>LNg+(JfMf9|aKuH~5T^Lyb?2R!>V^pFIH9F<3f24sx!qAQ?sWY4N zBD&D&q;uQ^m`Lxiy(R8$-Zzn(36+(mv;$16gHh9`-P23rpIkuZcHmgwxf;`uqUr|~Z z1xgnpjqIx#0Vc6(so0VGif`GBdhtvEK)?Fn+<9h--wOgF*;in9X`ALs3bb)kDKI%% z_p9chY8Z5cbvuGL>*2^M4xnmXUt*aDs3K)+9A95AOgvvZ^(2;y-D3Ny<+c9oZ8i3! z&fPz1#Q1wP=ihhiMoH^$*rxgK-_PFwvK_$FEh~=>0uMWeiNk@Jlf|S^iAoBtM)lai zbbhc(84Fj9dDe7^3|yJU|5aZW`2hT7V}>`Y*-~nw2pNnhUke;~PBgC)cdu5XOavi# z(G%AXj!9>YjPfpdzdun2n}Q1R$wd;BgWU5)%RQ`Trco|Vn&chyOasiZk$SyE$WYA3 zGX4V%IP5!ch@S(%tGW}YL}*i^azTX`Zl&1{_icP(%rgDS??Pxj6*Hq&?Z2{b}@ye67!kXA_(vfiLt z`L>d-EiaJG>BFwv376^RgK;EHcn`N{!5eN(9;sf&D-w5ebmAeSUra+KxB?d{*^HFWl|?9 zkqEuk>z6~<7r%q7lEE6$M`DW~{RMKyiZ2z3hOro-73)5I@#&z`M!GCk>~5f8d#DV} znq|F`Ba8e$CxTkUtwau<)^LujH4a7LW-q~RppbwEw|NeUDf%@O^yxdgbEWbj%g}>S zGD_=YY2WR0K$iY*hTncfJ}-L1<$wH6yXCQ=!?u^etwTV>^D-bz5@sCb~@G-8UxQRFDV9 z;rgHivIFM)n2lN2 zN3+$;^%;sb-tUNuJ_mKW(%X#GUYs8j@q` z5%}rlCi0dzXkOpi7R6MIa~3eTN(g)?d=8N$H~v~u#OW=n0U+;&qKPPIr;EKzfdH|e zPj*^WpGa$puU@Y%c z?@P~dSri4-q~tWuVI)Xy7Pdnxfu2E?-g8PHjK5#Ie!H9>&5Wf)zZ~&2KHUHGEZS_g2y`3|~@U=+%LvJWtw!Y|o<_5KBJ@^IB ztN9@o#hX(IQcSP+ofQt^0HyunY|51dDmKgQ`QP<*m?@-I*s6?eY-CJdmBy4bm(6<3 zAdl?Qj=pc3v4JZk1D|2Y_-CAV=?VA>1a)(5Es|@KE zQn6m}xVTlM>IN`z7ICK^0({bAQfbP1mCo)<8f13^18rcF;_25*X^?O1xT4*K=hcB< zNzK$voTGRwGjz_@PwMo(!r#g?pGn=`wetm}E}2uD-Rn!uR!KqsI37{g$%@FgcXNNIgE;Xr%e{yoA;l+n7O7y2;;DFi5YUAzL)lkrBVM~p7{KvUbYA84G6a@ zh+czg0`HXENXLHkVAV>0z?Cm;psQ!YjvFmSLt;fC%iT{ZJb_u{6MVD23n$GV8V=j} zu_|wdD|9FKp}oNMQLVn*d}QLU`k(=NvyXJ0j{PnGJKY%L&RN&1GGae{Wh0H%kA-Ci zeVm)z4+vb>bHS);Lg3npFEyWlVRyYMWg>J&Q2-2zw#;HUJ{=*fo@I3 zjz&RRDf+B#fXnOv3?)My_=6=)*daw?`XfEOB4hf1MuFnTIE-?6>!dTqfjb-j- zC@6%GLw<qYp*=;PSuF&76I1~3%vO1c$1~7OfCuhsG~h5PBfng5%Vdj zvDF^L0EObY)O@@=8Ct5KH8h^*WlitGkk(_Hs{cGH%h8t1SS06f}-ts@7;I4>WjsdJ%c= zl_Wr|S%`VK1T0Wiyy;|qN7|Q!ENv!d2h^Z0PRB8+m!!c80R_5G!M17gzGQ+&rv}up zy+w>@{;0kI!z0hnWxI{`fvm<}>@Ow{de5F^8?;Gh=M_hE)(H!wpO?@ZE;jT7(q>OV2zVI*kS2g8wMM26 zrYXkP2ma1({AEBCNY|9wnb=dP_g|<$)X|RjGid37U#aoN;P&w#I|Qp~zG`9BBM9m* zo$M`(n)(2Zq1><&as6)fWRA&nu(Fi3I zp#ZTH?)9rjeOJt(3d{#*7ur?c!WrL~7KG7nhOvYV+d$6&Bua*62Gd2g^e7R3>E|9h zew}}GEPr;-+#gt+{R+IZlkX^XvX|7`_H^}5Z4yoD?4)fUjC&VvWqx5NttLzy*p`El zBG5EHtA5_V?MefP)^saQxvy#6SwEL$x>9NuA7>FYsC5VVlqKg{CO8ia2ua z8Uk`(uBS&qd_ikS*!kVJoY90NJQ$ysyBeBs@{tC;#^sQPL|<<+B|_%!7z`OoS&=ik zSzoxJT^6QJOd8Zz*|s!@NV-|c-iOXCl@kwS5D(0K#Cqk7!KD!2gl`n;)z^EmR43(l zDHH`U1D84j9QQFGdWC??AhYF0rF;ep@4-b>wgaG3~+05sTL7c@^U1=uyz#Z^lkSVNk*KxVj0 zb`yRnC5*rzNCU{MCzTOCKY$021wH(_n*ubZlxnkQH1jZdPg8<#7&6Q5dlAJDhHrsFh^HleC>-h7b?)qR=jJYQrylB zcqpd_>N6K8yHR;v-Cc=9`ZMXQEX?2{Yw5dQ9Yu4u2$F+tSj)h~b~vJ5VidkLOL3hk z8NdZ&{;AQ7I6_svlwpbU0>w~PuoLgG>UY+f>m#BtgUT^}AhRU%cIExsBfR}3-`K*f zYwiXECS+^rAhQd1JLa_O)PoAejA_tV$C;~E*2Y5rSf_H?1>wWE&;M``NW-5}Lk_H{6=L70SB|A{t`Vj0oCRq1#m4z$BDBMH{{7XA= z3h@Ir${}M*Y^Lu|p8xLqYVl%)uLz*w zjE8(i>M5^C1i)20HK5Dr+gv^bLu+VxrBnyrRtgrl(uVcSzRC!veP2P%aFGzCE8zqT zCrZ`M77P;3bKmX07lq9RX<Tc~&nj;VQB=@W*Y|kG} zta;QLfMQVGSFWFQ{$mXtV{Mo8BRwX?n+2Tv7Zcy-kh<+z!)@ zCem>%7@ih{Eh;iH`VvM+=ZkKAgGmUU%KGvIwW0}Qh*NQAvK8gJy*dfeAWC^uC*hV-RjrLtM2uA8!oo0it6bA#x@0uz-V{k)7R zqDjw+=NSNW^ro-xM7Cj5;g1gik-L3wD=t5s6rRs@%)BL;Q%(|F)wljk= z6-5`HSqo=%Tms;@x8KJ&o)9k2v8fjnUAgS`(CFD>f@ob}Fv}+XbLCTd_54%h8^P5L z(nYs)ENDxpG~IwUMIirr(|I8|872$6S4i%}{ENoQksB!viW3=A40&%tkjq_0sR(Au zE`q5LFpdi~ETAJOYZw%>G>v=M2kRnbZI;XnVoESPr@v^vl(TaR8JRPly}A%6*|E zGbt(J=&d}Q&V!-*ds#bE=whw=9}|c;&pa)6&u}ha>OgH}WWUU5F<1s4&J@kyI`m&3 z&~e$L7QnC~mqPMQR#dSWs4n4v&$R}5Pkqg$7J`$5hLb>1a~hW;?uz|l$$+}#B&fWd zYy@~V`P#KYS2fdZ9!mE>59b0%!@ZAZP1|VwWdby$#1l)ZhRKCyngpI@}8U01Bfy^pb5c z0wcrp&g!m`%YbImKl1xvR0~MO@`?_+AxVz7`$B*CExj&&!`ODj+-EcJ` zlPZq^NwiyF3R+9YA!;IRFC;p~nUEn)_k|E$L1*)GzJ5iAjOzOWE0vcz!PJ|7GDbOo z%jR4S_>zXS+}Fyy$(?9w%*~2c9X5k{TQdI*KY9O9Qket#6+!ir$q?<_N_R|JHxk#?$7)|qj-kW#$pZ-6 zN#{j_v|%rBC7+4ECB7&%IG9*!b1FCFXis4~pw*s{v6A1iP=ljw-`RO`+@zwDrkf;a z2N_w5#`()*xR&GxinF$EKGGy3`+&P=t6;E96jH1UHM?43#m{}LP}3ap8%DqlUvaoo zOmC|)-9%3>n(-o(n1j*mX}IY?mJ`xmC$@Uc9wB22&nLSantIKoy2r;xyY()7$Wc5r z3qo}vXTR`TX?t)VZI~nE%(CR;tON7_Sy;I<@DdPL>saG9;ZlPcbu+h2Kx}2c_oPPN z7}K*&Zh+D>F1Sf^{7pCwvX-O-wB_gE4d(~6gma$NHs1;ACT51CGb>@#oq|P+LTE39 z0J)G;H>P1DkiSujj$y3lsTSU1#pmChF4}VTa`-xsibpLgQLhd~ycbloT>B~;MKm8EbJS9; zb}E4&iN%+SEMOjGI06UK22umM0=1sp%n8v?`(@^O27tDz;x8urPay)-OfF{a6-9i~ zs=?$Lxy1LV5Xc;yDQBA4K>IlG(oJ-PI^8y;=Oq`i@EZ^$S-4R-xT~|U+EMR;1d3D# z;3xsG1EB*me+msgD|wCwE2aOFA_AMs&kz2eHUwml(tWHU!?+YNT&+rkxzd7 zg9B-qzYQ~k#Y8nLO~%h><1{E)_)B9J7lS7S%lgMl+4vdVW>s+w7g4*4O|T&_JsU*T zGdOtcy;i%&P$A2uCN3rj_VdaNViRQ2MbaR2l_5MfkbYmxcdHG_EWM(!Cvyn(J>lWy zh-$koBG>eH3UG=lEqUZqnqWg^wDXv8S+=|k2j7;Os+AZFjlKf`Jbq_k%Fwz$2K$(X ziAggl=}0=LlY-!&eInQ1)#1{DK=4x}#3b+emTK+585=>>q;2Orrm-CNWY@6l_KZUn zP+AIb&Lqy-04ibe1zHgdAl>TRNQjdb4elAdi(;qp>HBT8Dgl+}1pV3X>bS))B~tom={cZevT!6V-bj&|Jxw|M9W$ysi5;WH z*V*$}^4#YgH*6YWtw_mN%zR5W)YxwXjxN|83fC0RaR;c5g z1Z_ed4K!M7Y=%wdytf+ZljE84*+G#Pb#x#|p{NAM3m_T#b$P4z=B@=7nj6(q8PXZ!cS^jBLwM7m6%{X!+2r7QxtpjtN=hlkS)aUfEN)! ziW4G0BGD)F6BtZmWFj^Fhj@Oh32J;Ncjm^%iK}U{%hZ4k{iT;-g*)?MTvqF|o|?}? z#hNTyXv$d~aDHK0SFD-4(O?D5A^zOkS|@}-r9s)uerb4mlyxpIixszXjv(a6%yCNY zRbT~y?;FRABglQ*Hm>-^qaStRhkTf`7-OAeJq8u6*0JTkR(}kV)KPINa462szaSI- zw8YB;x{(-g0CdO)^(oiZrZzm6)* zgQCT7(ORu8eRsVfiV*x64VX>fZ1YcQ-uL+&|X@03LObd)V9-w9F?e<9(Q zygija^>kSaaBh1qJlmm;&hyxR8DJ~)=|1xw=>mz~*~`71RkZ;cpgKuAJ|7npCR|_5 z1)IGFq*yI>NtzWtQt@o;^wZrOrK#~6=SYH&RtFPlde&+Hm!IvL&aCeN~`~4VeyZR2^t|Sq!4iW15Sy{}MIfZ0bF%X@}Ri&m_rWLs) z`z4zGeRW^N_<3Ssp%GUZM?=Xo{%r2X-C}$4Dj6mdWmWyTK(Qj{XPD3{x)>dcTEzi- z%4G*=tt6+e==r5IBqkHMd?A${F&RwxPZnv|0S~}d6hBlQfc(8$q4KO0!Btoj?NoyP zXW&Jfwz964DhkEmUN~`I?h^s9Y5p^IaA?phVJej@LV3ut&rEuaRx11OTFd#`R~lm? zGYo4GFy8PN_Cs`1XV*J~DhZj&nC0w`!s~;MD2UQ+wLm#xs($Xd5}l#>lXRKmq~B^T z0?BMYVJ1;TTgz+s+XzJCg!c<_CB$cqMR;zrklM<_K&9i=Hd{PhCg5M^q4Yv~;69-- zD7Sy5$%rM<&VApE%FOKP;M9g;2ffI5OufDZC&35<#;5ra9nJMzw>M%If1h`}Jicq@ z<%EuC{Q&s`Po=**$p^v@xW0&Kc>EIk01`t2`q`hl{al{}jL#?CxB_cFxl%%?7E&dh zNfNA#N9Z50?lkNsu7LcM5$4fVk2C-rU4%gU&$qB!$#a=M5B{`aG9lmajY6RqCK`PV z5R<-LtkRIGz0uf0E}kMpVw_)_CS6u;$6cI37i;qX_3~PDkaIWKqHXTVG36EylfEyU z=gT|BFGOvKY)vrNn+UxW{suGK(q#B4yu%AgWi9l96;HL-XYGQo?rWfjuj|ucphhl> zwMB4%J$PVG7EKXBTS4cdP`sDDK?EE{gc@ zU_AM-+?kj}I*{Gy=^+6#7;vtKuzP%!Zed%GRMTnA&d5HA51w6zf{yl8u!X4aYO(=b z`9};DBj3*VNT0Ou9sNnviMQMp?YTKGb^Gz#zB{ef43q0aZ9@GfBq*QI4JhYv^fJz! z(^wBKr>YNyAAn3ZSTUD3tvd4K#_GK)u`&j(1gsHzq1SOe6f*4s{Gt%q4Z(AIZuWP( z`vVBMfmp`Ll!kM67|S3tj^?fQb-a}Mo{OKW;H@BW7(jf<*E?3cC27KRmdndV69usa;i!_PlPO=q$ZUaHC3EIA{DZBJ zJh4#`7!Dg%21QB$JX`yHj#0OmgDNJ{3v%mn-vfXUU~DE?qT)J~rjsI$o2*16Z9MDq zsgr@N4G^*&zkfLhI4ovyJC?85g#vm4Y_1*ig(%^Uv)VkT$^jJe9{Rk_5WhU)R)*mKy)tb5c@Nq)OdReuml9ohEzlDellaoIC>+(d(7&YXTpt$+|v{0 zyzTD>!EKV;(#w{&_*?L*AvAdBS0VPC3yJ=D$Rnh1X&v00^}6}yXaefQOD&vyGfCBD zijqJ`z7uisfi4RryE#6;n+pH{lvdwIGA1-Z(1Sx$~PR-9p_GF>150l`xh=iS}~bs5@-gmj33f-HSop zeNBU57c_P(NzuN+X0awdk$7tCVBe;A8yWTB4TvE2F|m1wP#6#_oioZngzUqpfoU3G z0%GpyhjBiIh?kJR$9SfC&CZAvVy5%rmaG$ZFY<0bPamy+ejX!&Z%P2c%nrt z@%5}MFZ+_0Nk@fxVNpbtMcM+n-k68+y)lRPn~i?=b2EXgy<$u9@&yqxWf@YK={Dq) z@Nz8Nhb0s3)^Pe>ban^O?xjl{3YCz2N`Pj{E}94I5OQk@tQ(($xrxm#y%E!%IUUof z`8eq2CJ*KT?yxCDz59bn#k~$Igm-XV=!B+pWUU=u_>}0#TrhUyj&&os;l& z?6yO1rn+s4GK+0Pnkvnt?HT1$5?!=${a5o|vvQ@KKT=JqEG`A|z-V*iG0X3am>f+{ zj5XmF)k<5)e)CMnSY$g18|`gnQ&m7CZu&-SH%W;P;~r`6@mcMFUL2fmJ$RX!zsfs` z2PH@t?!MtA(%RX!g+5b)vQDJd2{%edY0lfAQAOz!T0Kq#k=7N3sg&4f7v~!0Ql#C|d`)&K$|r8#cmO@tAUZ@V!rft=~) z(e~!A(U|E4%PwUa#mQ38a%e3K&OqX&aA1^{U?=E|t+UDZw9>i)rw-`RLfua%w>gE%rym^BUiLC-ryqe&X^R93-Hb zVEt-Yds8|Fz_bQi!7vwYq+mKmlHD&IT+ZVHXC+yYs=m*ihu39;U#ey%4-YWmMi}yW zoIRp8+}dBLNI_qCbGnJAsKinUw3l)!sG_M7 z=YuxJr<`!%Yn<`L^)buKlv~>hEGI_&BSHNsa+X~${(ySzQ(oPM?&0YZd{*JLW7b?rsk{74XKl`a zA)Z)O>$OX~t1*QPk%2&8yO1idnS(t4fiqyarR zbjZ*JrGwzm<0Q}Of7f@`B_L)^SlHCuCQKx$4BHmCOhGen}1?&;)9El8tc54WIFSsY9_Z5v;MdEd~VZsR-^g|qWzVnv(@!XPE zJ`FSbjmyGbodIpfQAq)`YuKDGk<^9{6RCeHMB& zsSD3JQ1nM1O~6(@Xj8Np>i(o2$hEGp<9DniX-0CYP_h8Ng`pF(!Si*d&IFf!aAoP; zkJ)ju7>{)aEqb*Y`Ffr z7_upCbxvd6*~-nZsp?ieir>I|&VV}gQ|&EoRlJs8jN$g_mB>DRmx;f!XGu=025OUn z-5z$78D>w4bwJb0h|%Jf*1Y7)^p)H%_g37CQujAga*L_XnMTnWuBstZ9<&T)En4%bki$yPRB6= zN2j}1QEDIo4CTP>tou=Dcei_Xiyl7q`=D8JTG;9{@0!9F5TdX!f@XQJwHIhVz2Ju3 zpRvy?d+O1lFQ6_1V#Kshjpq4Z3E3D`+rrus2bq^&h#@2=JP`xrE^W=EN>BG^hPDr& zw=V5I*&g6q&w+2vU146ow<%1()6;@1jcA_0cTs)9n6k>On2bsD+bA?=QhT(? za+?f!a4E|ohp?p#Maw#9g3rA}mGk`mj+-v&hL1sn4w_9>qsg)&EAv=h>;o%Gr28Bh zFw-5bH8-v0?w7W^q`=p^tMwOF^t*?}7N7^SEC`U4V<;*`MS^F?hh=IZPm^nwd=K$` zo`}!6$}j|(w?wZP@e|Ia^;n#?gA%UPKVp`ad z;+mb!B&}(<-l&fsF|LXw2V5`sZk{o!s&VWy^*gTfJ4U{Bf*a@Rvp3eO*B&c?hn}Xl z*qDO^kr~ zW><_ER@f1O6Fkl=dFyd^tQha{w7&r8Cp5eOA=~jTP4x4Q4Y46Pa&4rI{nP+4I=+;F zuiT9&qokI2n``#aJY{U%GXd`Bn>vw@^iTr^&7&)l=^Oq!W~@8E+24()SL{! zr$2ouX0^F!3IrQ&YxT261Sm8*4Ci>o3@>i(Np24^<2gV);^&1@Bxc3a6pN zI2E(%9*raWU*|2Ir>N#1CC6vgsX&5`zd4W_6Beyz&7AR0IQaz zdK{J=4&p(?BZyhx*^{){Bgzp;L-2lMUTJ&Hq)`+;u7%MxE;cm-|P424cP1jL=LdpZ(EQLXeVR7Yk75o zmW3g6FGm?6!wO9SD?*M&&)0KQG%kJ@6EAQPZ-t#4TK15Qvcb$#Tn&5~zZa6_ummTC zcnZkzQqTf&C!JC#>tHNM6GzLuEesEQRco_bLf_#vS6w!D?`_7u?Wb(MlPww_T& z=V}vR2mwTEto{+rzEo#!!Fc6jXj^aI`CSry^bfYXI*u-0O)PI9S)svlD6*^_W@Py= z9~kw#mQVM*DRnX^NBL{{^?8y@tv8>S_Zd!wris`Npiv@fu->%n@(09a8R5QOj6MPF zACDOWmS*&Fw99pntz0iSf$q>eG0fSd70Lt_C1%fvi^ucLK}>DFhK&wh>Rz7P7hiM< zKb?1#$jC~sn&NYO{|ulEmt3*$8SYe#95}($Q3ta8YR2QaQiy=;nl87%nchPgr>-`t zSc_90P39*orz2k)th7c$#b&wuLM0yrG|4Org&c|>2i{cDLa|8)@wFm&F#>R20|NVD zBo3CeU=;Ry@QJMpcLmer}rsY@0%+^_iY}t)jr<)o$ui_Yb<2lC8A9I$r7i%y9hBRw{og`G_ zoD_c3hjjHdRwxJk++9Il1?1aK6MZPFJ!DWSc4(hdTq-5SD4mTl=K;k@=tPX<>?=k> zmuo=IQ4ky9!7>8Mj8)v1`F-G)-LwhE2yV>fqw3w)DHn8aH zfdOk=G$MBTDxdfsmPmMb7_qOtUc^qOE&+I3eN<$=e|>KNo1kLqMIDYfTR93Cb!46& zZv`?1Tb=8-9)==R3e6%J0RZX|_mO--4OqWiFfMw$7=P5Fm^gzM*6jWGg#T+~MGMA>+1KKW zDJ+M8Byos|z!yqi@zaH&1UZ*$@bzNN3G#?|TpsU|PjF>t3ZjCXSqS`};@&Apv!H1g zZDZQDZBE;^ZQDI<+cw{}ZM%Egwr$(J=llNHXUEwW=l0Y^Mn$fwideZ;W>i)_m3gSx zEpdglC#0k*;Dn2w%!y?Y1Ndox zzIxx7$-xE))L@W@Wj6x>ujDgyiEBGlWbblqi(6Oo@n}cW^ylJqiDsxRIw-QV3H2pJ znRe%~r?+ry_t|k=nd!3lX>usfg-=@Z%FSBF>{~z7==CnFak%sOYbXQ{b}v#Fw_70@ zn-9^AAJ6~k?+!6f(Y0lNldtGlHr7Tm>m8$XdL8tHS7CE=M&mrCv1mbjyH~acYPi%9 zU+yG)8XG?6o>Vp^T%932dz%Os(xDWULqth)ud zH%`Ml%D^c%GTqfU5@0R!+@#*hPLr2|?@6?kF+aRi)t8hluD@ zZ9@3aWKrYBScMGI^s_jfft~0A4I3$#?ZI(nnN@1Ypd)21fH>^itkh6wi>=g^vptJE zh7(deq+dyg@2ueZ>3~+7qV-|x8i#mGcl)6L2zK*i zlI>-fAp(~|_?(SA;rNkOi0YhzSZM+2X}6inA%^Pm7PS-~KNXf6Jqj4h^Q0^I zZ6Ti|!C*X2SYV!@+H5ue1UoW4GBWY=LyJ72=gio@4CBi`ws%=CBGk)%~JRJ%2|bOZAy; zC}P^Bz;sfgrKTNR=}F|TSVOVK=IfcaZH63YdZ(65bk3h8bE(<%5pc+-(^1;Zpsq}D zkCAy06CAhj>pVVI4-zWH8ei-!SIRY^*~I&yz;w>QNmZ+Qk!O~`jr@_$c7zK$MdY6e z%h8Z0Hk&}VjcIZ58Y3mGXiP0Psj)^^pug%6KHhTgzQP?F7`N#)i-WHOBuA6TI3t!n zmBa4#j1UMU@cij%8$r4pD98hCdxgS%H?&Q>)Y`A%Hbc*z&Js1&&yBjU$*1c~@pg5P zzYm;e@6+`5i1oz~w0U_@m1d1JOq!w^;5mNjG?--Ap>A$yu!9xw`W2?SsAlk4W6m3a z_{Mn7J6=}=hVicu=0Yga-VWvF!+O$Q6U9@Vf`QF42eGTBMZSY=;2z$eT4k)I`%j}^ zrpKmD^J>eojHJ+v3@7){o(4$&V?#Kz77CZ5Ud2|^oco=uMap)vKWTlPZ;A;P5(8b{ z#D^`O+D>-kbn)&nI>Pa{NG(QdeHw*>;gPyX*8`R+A-qalcs+$it`M#9QWA5uP>xK> zeGml58AXB$N8wBx`Br9(U%>{qd2moKtdO;uovJP(y-^WCyR@$0~p_}7;%9B>xv_61x zBbVP1B9AY6MABl?&CG#LA6NQyAZ?_oZyvzE&@xspWt=kA*4Gs!K0v||;w*S4SXcz^ z_@%@hQMH1iR(V&2#A>ciJVoiy*LB+Ss`0*6dCJIn*5brIDGa;X9MESXc#KOAwTFLf zHA7OaBO&Nc>I0q1a(&ZRY*;_tF*SzLs`q^%S1@G7%pjrTuX}Yae0!yW1Ha1TJv8`M zZSiy~fXSB7=Hw1V{~?yzT`P*QM`S&nKq5l>E_E_6iUj8)30vr*`rSzY~BC&dS z2RvW#fvo}W<&wv{s8&!NC)WCF{(x27xAi|cwB4%`*yHlf!Yjc(<^rL#Ts^RwkfaCK zcF-uRGDK0(ATsgZC$H!AW&tB(EMj$(n%FuxrYe710@R5b-tWj#|61Y`=w{7K{x-*6 ziomnvfpc~D_aE-&u`$(9Zm6UB{aI^itn^6qp`a|FwLy96`><}$?nGuYC$+}orU^Y4Vb_TAl_VC;?!_S#>kO| zV$@%Oy0=)@-`04F0<=pf=VXLMgoUCuPJMRn-tQuZ!ZOJ~?b(Qt6zJ zA;##ph_dljcIK%zQwm`co8)$w6C;#4LrDvU!Z3!9$4@}0;hZ+&({A7JLj9~+)K2d`A_ZcM%L?QB>$p8FT|DO~lh(?N0`x}k#ZD(r^E+r(W{+fq6 z9Hpya;lECKM<|D4g|4^LI#F_kBOlPls5VWLnlyHYDtWKQ{9367EE?Gk=x6*~_`RNh z$L_e_5!~Ez{BEG_c+T z7L;){F7`YKv@-XmWQP!apvh>;z5umhLq_pyHi7>6QUs%0s`Z-lzxLP>!7KWZ_i!5_ z*%52d2|*a?KAY{0Yn&e>F$9%Qhno1j5c3R+&66!Pai}8e*DfIMoQ-+yJ>jkHEEo31 zFvX8~9Sb;=j5U=S|CNV9{I0a~>L$8xBtS5t9y(yWu18@Vma$J6jM>vCG==*H*VIya zI(;)Xm)V)}23bDRA#n}4$Txc8Z?%BgW|!yg|0PxMsZ6TE%zvT8k|`ii;q}}9J|^y> zFD8c_y7|C2rlmnOsU{8F-hH(sUHKVTVk4^g*)2cR{#iR1K2V!{L-@&eI4<=bfaM}d z5h3u@KPq<0sU0S-+=Yi6h|=C62N%jic%aXBQ2CZb!Zpe8zf_(2Y~?sl`l5U0{I(o& z&WOBuo^EfVGprxDA8_Md#W3KI(wiXhOlx;?Q41) zi@b`+Zz`4Np>tbgqTMZ(v&Cgu1{$T)o+tyNh;6~KAbuGG7VhF9C&y?ujy!_Aa-9gc zhNEyO`R*>>hvOTy)-`fy5BN&bmH^i6D^uR1ft0=vr z*G`q^q?yqa)uzl4IqUNv7AAlfg+Nj5EMdD_oMbnx&E+T`X@vjJlwZP?{|QtyJ1lp| zxDL%V0QdMK>*7!oY=(mZs z(U{1Gnim;zjdub8pyvG&eE&UZ>eUG>BB|FXiMGw%Eor7Y2F7hqbx1;=0oyTPrR}elnW`Q+gepNERo>pF%DUUvLu)9nwwDh3p2b*z^NR?aCgNt6WYk>xf z@^oUD-n*C{Fi^zFK%6AeY*Nr~$4#H>@Y5F7u^pPFS*i^m+${3sbMCYQo>yJR$Vq=k z5s3RO(`U`^wv4nm^M5sGfb)F@lOot3GV1V$3|kQ;^-Xe>1<+$q=HE+=LGOGdL0cnz zoAuS*3@=0@>;h>h7l5%$YGsOtOgI$bH96hgKTma*{=MQ zWO59(x0y$==mIP~U7^{NKYQl|TbZ0JL%i0Qgvnry+fc_f@a|M~Hu>4o{;u(Y_IDQQvbn#*FA5U+RqW1Zg#{`+?R;lN7!!ciG6O0CxKEO2Mhhj`wM zTY8;K#^iWjr4y4dQ7J{T&F6yI6*d_Pc{X`nh$sX*z|XqDmxMJ$`<`tHkJ;o_qgp$n z>>Wf@q4FmafxB#HOOp`X2KEaWoAKoEiRIxl2K1% znte3KQ+&hX@_c=8h;t%;MChDPlykC<(nDRK`84%FGetQi@t^T#I?b2sTa zvXyxpXaOuBY>(s`s1Mqs)O6wc{TmatS>MQ*13-Q)j#A;HS^$P_Rw^@;NtgM!fB#Ros;sK6lSH`rekhYZ-GgBd7-{ix)18 z_+5I6^+5=)s%9(YA#kSL13Y>A-6KbhT@pe|=$0t~@pX3*wEHp-_keP2kUkY@ z7}lt{er${Dha?80&CExtPik}sIN_hl@s#q`d2fUi_gIs-J$naxm9pDbQTJuj2_%|I z8h-kOhYXUeG)NkHe&kk&{Q7ri_I(>;tpDt{)y`*u=BX>(g=ED8AM)#m!)npZRCW^D zGH<8ev~6-y*r@JxVGT7K@K%s(K^P~jYLdGbe+ZQ<={{sjgMUSZvI<6nQ=`le40uW` zj_xw&gSGOfu|9sj2ff!!xG~j%4o)H5{s9V-ZyOZp3y9QnkiQ^~lL^J*DBKonOM;f zx+J{HYC9Pq=+b8%0Y@>oBjL8#3)=nrGZoncykCj0Z>9QaC@%{8U|4YHxWD7tN?Hw) z;_t2l6C_YQzwGPLf`y5k;46M3r}e(0=?CfLm+u0dM#;|hI5p7b>I z7|=d29+1BaqQP;zaKMcU!o_A_Zmqp@`8q8K!`s=WnGTA4R_0Gcxf769_sI}QGN_Dw zkCk0iwRN|M0hA`Qq^eMiC)RHvY&Lr&UJ7r5(PpMZwvQ+86q>Q0zKlf&UX}P4RY2P- zbO|`-F_MBXCtgu*6MXQR+kMNP2_Y`Wmq7HUzRX0)I%lWecJ%!kYDw`Tor{{Pj+W+k zyGY#~ip6iI4hOA}?^EY(h7LhBBm9)9C{9M$xd6K2Hb7J_Ot>21KiPugn#r=VnwF%n zMgqz1ZmIRmUX+T>*!riDRWGZ?emh~Y>Rx#5u)zWS!*fSl=L!5Kgv40rNnVH}Rc90Q zVIXiLiKuIwr&9LgFI7Lwj)>=4;|~#BXD_ClS9s`iiM+pt#7*k7pUGcK0asa>H+^MY zqg}MBzKw0Jo6iZC@|*m)bepV$2uVDjp?oQqPYXKhI=Wv-c+lPanXFN*(7+Qj^z zM)_L6x2E0^B-AOPyG`&9Uj6m?bp?(VgmJ1sjoX_UmJR2;U3G_a_9xZCc@EQ!?VFTc z0GX%}>WTthTbUbE%Tlvt2E{ZZ%8~x_R>_4@z8fV@hi`VF$USd|t zLG4d6_YLsu_!TiduIjg>`I$2{>S)U^w1!W%MO0`>7TP=*iEZ9fCvbftP4Z-(UQs*?)!%wqE-`-i2YV zb0y=zQ^%x*SSmg3nc~HIgFru!eQFX3fVSY6FA~cZ+&q_42P>@h#htZ^o^H)?#7Kg& zCEQT7vt47M=2^4Q`Rki>FUxn0c0smI6vdb^vU9d4vNar)1?cm@SPQgUSt!ze*}@It z#y@H4w^$fyoww)>BM#HK1u`RH5h2|>n+r;n-NlahL>iJ86^-gk}FLbrA>d;($t(E3R~#)#cB zx$h?4IVS6}xQBsB(mlpVK zJ5(m*A7s@YUeIX|4R@izet8UYk;@rkwXzGW7Hc^3h0@Bko(BaZ0>X%is7TLMC1J-{ zkI7fGdMD?`J&RtZa{55!u*vF46>!1WqEOgrGwdYUHd#u3x|4ZX*h%5#??OT4LI^+@ zgXWEBFX(KvkVs_~ItRNHWW3o{W<;fHzaiLw3{&a7#UkbXFSF*{09=#XJlA4(k~3WV z3A1Bc`!M_y2!S~>*&sWK3?V#pC&e&gb|)CebL=p5MGzyG-)XFfr1n@-OG2w5jt*bC z1h<`$Yt_cg2Ws>6s}N0u?tI+@4%s!OSq{i!-Kf*FdqxT*><<^6-u_m^X`>astFfD> ztjyeNVEfUC(ZAN(I3hr%GHsLw?u|<>-RsfA7ch^I8`>LRe+>Pv$uK-Ne&1af(n|NR zxPD;C#o+doAU1kKYSUe*JI|3&r?BO@!KRh%vW491U;ZR*G*!s**5ffaM+JMF)16hL z?Ud=xdpw*X{`IA*#X}_dOp@c^99>Uy4vUBK%+YPA8i_p)Y-fZ~K2XaP$s}?J@j>Ut zWPcZ`3M1G)Ano##7im9YBa2eU#`RxQo~!8xONrgEN-*a`-v{1W`GoafZE!&4_>#;y zrsktzC+6MgxlqeY8V7xia!r$7pyHCc`oX?b=k=UFX(;fR-6X()wB49>7Xj;5QK(<@ z0uH_v2)q{e+OYy0+Nn_3x4FU1Y6QZj!kE-tH?djcjU?8zizoci-N*AV3n}DPMliS$NyFPy0JYJS+^OP@-)~r)LIa4cMwVZiVDhDO>j^1PKFe zhL*p^YHvf@DAN6I;x2-iE4g*-EBUAfNzx*@LXDTNxHCQ%rPeLdxv7w>jmOr^Wyo(gSj=HDUj!8 z*CIfMT===Vwgc>v-{8W@I#hoI_kiULn}9d)Fh*A9$im#?TTbepW-KVZwHilzy(j#{ zW(zb6UZ;P|0P%^1rM-WH0T!Ollb01=T`pclQnx4~n_Y?xeOvR+11F^)n-C|J8h`%L zLq1mj^=`GmPf&bdFU6N<;ON-8zRr0hyArE}Ery}r5f&UD7u zMUHiedcr^lYo=#kHz(t5r*A%*=OUs{-rZAk*Nz9x|#1gTr@%AX`?GNCNl}Z4<#2RE@@i- zA<%1$NQ3tnlC*!c?2G=k+2tTT{pBhCpj1>3y;^M&wy8FqH)&xn<;Rh-t5 z+A?UO&ZZpY;GqI8>ORa-!~K$Vm^%khRDzD>2RvZZ$!YHGrA({fX@pl zhw-@?3D8Tcx((1f2x4_X?%C!aGRD(Rw<{RVR)XDldFLN;uX!T@*p(OaAX3kSD7f+u zb+TfM%CSGhcj6;8=3t)-u)Kg-efguldjeO6Z7elmrR(($5g{?ZPV3P%=sn~n{#X`F zgS2)aVk22mR85x4Sp9*^HlKLc@}pka`_Gn}eFuZ9@SA}&xc5|(8g_j&@BWI{=4Sx9 zu~e35FdrqBH(ER(*>nh6SNA6c)L|*{KXZV^<8f`4iinecA|5mU+=!ci;R>8q|Ey#E zt|I|%6x!=R_pPf4VJ+sMHTr;s=Zq@0lUlAg_@prgCxQe;WZRfqZyj_1l=Owmdq|Ey z8*IXz`2T0wTJD9FGiF&L+yIU-8P&uIhrK`7vA;bH%+az77sQu9ngxoDi?Wza41M{W z2rk_&wF3F|_;SjGZ(vh*v20Sskn@MkUOig{KH=VlW-0b4EVP0UL0mx((e#%EBqgJ} z59l8IO>w2(et|@zo1tM2zIGvY1)bYE9V8`v(2(Tsf>6s{?WEvRx*LG_Z8jpY=$D(;58PBDH z0cF0SMCMmIl^Q{@SawuE>*G&cGDRWG=Rss?6f^?SlTL^pN7OZNxr;}CJ1dAbqX9I) zDhhFLAl~@AzT_RK;-w(=hMTs9eQd9g)cI|j+1p6e0SMqPrF;!3YXaQ=Xd??YZg-N% zKhju&LjYTMs5QeO<{skmz2gdmc{nw)^%s@N;@1icoR^yB5yys5pc1;Jc=G&)Z#Mqmr$~wSh|@0*OYmj4vH8*c_cS$OE#<0K8ydNoIS{;=_B_%!js4VRd`#qMF%C63 zJs_1uw+>$Z`QKLhlzk>+8$<)gfnOM}7AE~RsU$2Ks!zfkjB;Uu|0qR?_o!$D)Suwhnb0o0&pyyq~MCUc=R)-yDqc2eT>Mn7NhT1m3wrn&0ZGO zxR&`(YwkQvgO-U6LQS}Bp*zIgp^KO5^5#`2%~<_UBSXrJXioz6M1CZ)jDd;C-d&M z3dnmRYbZQlOJ|6Adorv_$9SS7$Q!_a-IB$!2NJ@vPQ~YgQih&NG>CXXR^JZjOia=1 zNE`h}vw?tL8dOY^ANGD4Ry3fl(>H3S3DG1x`4|O)!8Nszy2<9*D}ZLlkkcU}H~ciV zp>(x}@1g+gS&U#^D|arCNvFIyk%W_cN|40%EDpDQ{{LO`{}5T6!9V^O%ptD-4RuK1 z;cEo{N(#)RBnM~|M*iP}|If7lUwR-Nu?fE7MIyiSC$zXYl5vp6UVsI^2`bKO)JHi_ zEe@%AB1B+2e~<~T>?YmNiGf%pW<6DefX6Zi#hL=1qt-!9E!%`1T6wjG@UgNa1h_#N zbVs|XOE^|i?A6&6M_uWO@gx-(kpSV5P{HVFeE*`T;5#rX zPcS3uax@enaVvu46o0IcXMo;VY_=~hh&EwYm?w$cj!xH3Px(^_+s{ZLb&jNFNeIS_<`z}rAQ&R_HX5#z`_%qp^ex8BW$^r*ZJxZm9Ebg1YcA^5?C zPN%PeahH|JnwZ?A50VmGQa#PIKrj^j$h=qN{uHn;1ZI?g2(Z+OC+<2DpO9(Fk_!ry zaw8~K15|JG#G+NWSi(Aa(+HM^;`5F%4O&2)F2YbBbKLrP*zr z*muHu(&vV@J7<|?5(F|v2MzMcew|HIUa;V?uFcK~IY8>+=wLEm(i;F2(ZEc@`aEMs1%@-6^4(xy z*}6@=uI6fJE=^J6aV__wB0`*`Ag$WbZT|xxpPle0(fGUcJz?vkeS%2XV~#u1ODX7? zKf9FC{>`asYMt48D)Lku_ZYruZ9D$!$JEEg=N?WtT3d&AxYnj_3vE4wvEWPC;Z{z> zXjoUl(@Yf8Y4z5{)Xb(ZegTj5IWXo#VtSZgl=mD0Rhs;Feq-Q0c+?lQn03zX7RIF- z?)=#c2Vgz})Lh-k14m~PRZ;`sYNbzqO0DhBRNUSw(9E2aRFD4~>2@bxfXjx~7ALvf z4N=1%IXk`un@+P|f>nC1-4jThKf<)s6RuQt%(Kcx8;Z=V6v4d-Q(+7b)-m91ADaTy z|5p_~CcqYdyVf%CTb;syK{8QAw&dw?TzXMZvmz$m>QI#)a--3bL9rg)1FloLHfw#t zZcV{#2V6@_;E(lo_Zn59jn2i+f>Wh;RKED+amRIk4w?<{9x!SWYQQ<23E`1H7W$ur zT80*~2Yf?BN)NVjyp26&x23IU`VPn$iAxrua4L5$Nrv!&{V&+P&n6+m#&y-0G z5U&H?yZ_7-Fx|#-wstf*@)g0D<%nmANRNBJO05jvYC6#@sml<-4FeFaxCBp9lb}B_ z(^t``gO#aVHsxch+AORKGJ3}P^Ah&i5_aXxHdPq2;L0RBS+DqhDsU{c1P|`}?eUuX z-jV?nWimiD)O+~aM9nk|faikVOX4jIk%f`){LiD?h2$?hLYr9SftwnD zwUmk*fUY>7y&GR43(#xIVb@c}P*>~X)rFZ#w3{_mkbD_ROTb)Z=z1x(ewKvE?FM1z zTQoz78=b8IakE8qO5~$DK7;)BAtNM%NttA=p(RB&50*~Fm&xBr;+Ey@?Uh)ps`LPB zkmuK~4pNoRfwT)@ggFY3VKFa5H?AwdEun}{`YTlyH>Ia-*|1=LSO&^Rbe|q=1)Ijx zsAr-9_W=BeU`U5tARE*bUZ(CZ9pQs4F>;(ljdRC=SjB*GCC#aXb@l&a=X=x6NuZ<`XBz~7h*=op!TB{;e?$ULk6>9>Ia(PmtA(wXxZSR z=ja825~)jaf#1@{>%V10r@w_8$EY=x@E4LL~X=Yxl4aYtEAKrz;o(Qo|qD`+Q z>-14rf*#UxNpYn02}w$+v?oX=Mu6b%K$hkqN2~h7e+jY`X~CtFQIL&aJ_7#wSiK)L zB?Td&w&sgLRl68$(D}GUH2o=4U#GD~mQ)bE72o2dpWjeG+w441ffd)L$Q=zI{@b5U z8=PJ>XT;&~n*w^}`Nystfc)v=V}gjY$#D;sDb%n}~|QHd)4_vT7B{Q2Taab>Qh zmUAF^s~flo_nIn@j*|-xHH#Rbi15e(((g}vxHaWIL=h?_4ZP=Mze5p(o>T7I)2}{A5T%kFJ(agX_*GTWLsud0$aeqirU zdY#SfS{X3TK=o@aZT3WC17EgcUs>A{^M!Qb(O3LA5Qse6Lp6ducKV$9q?-QFed`ay zTC#G&b^KVW)KOs~9;%`Ml?dG6yc7=*+uFfXavvOD4sSB=RXSG>@=Tnm0wn6ayLsVP4&`O2NW zZP6CXThz3$k(&cupDdl1`Dn|CfJ*cRjXFtFWQbm$!K(NNo6wV+rS4(~{aznQ+xJ;dDHCnEWGhajpksU%K3 z51*s5tYLV0v52Ylp`Iax(yhagH)4Q`9qqx2J~P^zDF5$Ev=;B|nEE$yZ!+MMND3j3 z?vY6;Hu6%}W1(P))Z@K8SF5lLo%Nbcd@)Zqv-h2B^C$B2XcyfC_Sr6?Y%<>HK$jht zbKjWbM1}gi!CH|TFDih~4KA-d2?40|yH)JR;|#zk2c>jMh7O16&XM;k?t3*|mEd*I zZu`tLL$z->G$q;FOl?Urq)195tI|@c?AIG!mPFQYK2T^860vdW%wne*UQQrjOChG9=(*2{dKlDQXQcMFbIs+xo?$A zdMBrO@c=vyRa66A*0sV=AIB@W9kXuV9gd=-dJn|mDs3!?fgqK!im>OT9T*AAc=*-u z5FqXXP^u?{xqP9s&FOSjhHy@)#T8ObY!l-kM|py_+XB_b`E06mw?x*DaLtnW-tT3X z%J*x9+qcLr!LVgI5~hg$Spa7J$~_RuJ`k<<(E%qLmFl1M9qKR(Q1Q_CWD+;tKH2-NTLKPZvFRW2EerL-MSvg%Xmpe_3)2PKz zuDoMdKS3)?cZ^uS+eG{TXf@$_jPQ}6K>;U&LQJ;*wLKyW`XHKw=n)5@j0}mYXc4~l zNIl+w(Y0GZt@?%5Ter5b&(%c&Nj6=fdD#7quX0vfF9Ogy7Pha;#}kQM%1M4#=Sp_j$w+Y{Y19{6`(N4gK) z^;@j(ACKT0#OvES8|+%_sq~%MDPM2LjW3@z&jCJLpAT=@+w!lv-|&yO+`0Tc+n>gl zzdmClj_fK?@N4VR0-h@M-?C69fd+yr7dZG0jhR8OH2R--D1U;6L2H)S`3#MjKyNjM z{&G`dfkr}WR#*=et>Hvtdr=ROJewWD?p$rRhM;8qM&4Ar25Dxt54&}-*%XBGvm{|% z{Su^s#XjW9#b#XyN>*9&vce@m1B;{IwVmBM7nH1wzHR}~_&V>o%H97Jx* zaNJBKfZUexuz{)gohWS2>f^6SOUU!Gq;scp&^16Os4J)A-m`V+GrLnVfx5yA#IFaSE z47Oqn`tujG%aY+T7-LSYpY`bI)$A2QN%nh*A;5Y}~>=eBWQi+v}2-Zr24A0qBBUO%17iy_{ zuxyjte&Q3iHP`!suH7Hgn|=JOX7qI3?@j?x;Ib*oUPRx#OjSV?(!cB%5#P$uE?Tdt*HjjJu5l*{g zk+cn438KO?wegVu*!K~5KN`J}F3ri!{MR@Yt)p2A<>@y2f)6_;Lrc_ibUy-yjmQs& z`06x90~Us4dyHI7{ntL9C*E`DWVc`P$WmGFeH(BkJz}9g*#$3ks$+sQ2a11&^=2IE z9gP9Dm6P|C_j3`WKln;Y>QGAXEdF8IHf#Lh=l;sko9CH%&9kr^5Ztxaxk$$(zDB5a_Tjo1Hm zZx`-9BqR?1r-l69wsP`5F}_JKx&v%MWE&Y-A9!C>7(HwU2mj$NIQ4Y{{z%dPK4s`S zraNo10QicMAK-UtL;zkHk}$!c#FQXC>UO{YzfSp0{1Is{l^orLOk&9S6w@#3=(a_3Mm4SisNS4_EEj{TDfR zF<&4Q0X`F&6hH1D=9#t2o1@f zyy)=Eao-C#woN8r6#x<>r&AyjWgJo!Wz;Gb<~*{0d~-2Gb^Su_bzAUBNJjDl*np7VBD#^=B{m%7~vKvY1l#(8}6gNn%%9_PZ#~?l={p*Grp>(243AXeGszxc6ikzbfLJhOV8Y1cK7yX z+pC-TTF(ApnQaXcGX$~r(tpl|U64Z1O@oxd;(EsH{C*a)Z-E=puC zy{`w0Z-56NK=jda)bEWKErG~R~B=PfScg>)p^4>bn1 z+utfnuQ|V86igsX4^w%s{~kNfmre`y6A-wODc%$?#A|0URHVKGD^3>B6GADd zgz6cxz9V*1(7=vZW5-Pp4<9|Cp(^_}*ALVnAFjxhoDbRW#ewt-k}UE)GXT)T!CSbC zlzuF!$q-=U+nCs}HA*)X27oHn|4^*|t`R+K2M5o4&jBj(|Gh^3tn{rS#NQ|X6OVtR z+o3Q9*#A&qbtopXe}MNNBqAp_T$BTJK%);hiQE{0BxZCbpf90DfyGJNQT^u$f0io% zHR|7ITbJMZqIUX|r&i4@+WxjaDZv`OfAPcb8Gy!zJuWybnv(guy78haF_2W%Ku44Y z@+Rl#0s&W^HsK}2z>}jsTxT(&I&;K2?A5TjeNf0^4tfk(zx3Cs6N;~Y8Pg@@{u4F+ zh)C_A$-g-8AH!}VIFm=L)28QzS}RF;(9V_eri2l^kO@BVv>gUuYx%j-v#uO{%?T0asO^?tzJuFB3A$=3o(%?0Yk|>xTV%DgQ-qGq$+lhbZudB42BO!*xYNa7s?@W-X;)dt_U2ds z$NM_q(_<+M^M#n{dszFX(Z5Ky+F~+eA!6F$vs>g^6)sUUFR}=!mL*n3KG=Xid^>9P z8Br5*#MvxSb%B7CX;AO z;@zhk`s=Eq1q!Mkj_%&T@uZw!n1|BuD(*>#XT}`|wWl2XX%O(3F(ow5>YZdDeKY>L zL7Za5pC;|IbRjkNxhFC6Nyi3R3f9sJ*$QTdM6^#bW@kShcP#gPfH0q4k}nONKx}C( z&bFAu>qX`Onl4YgOZbkUGru@ib5cLu!<{o~@GoY-mpr9S&f$2aTOnKx$8fN}dx5*e zh#Ob}UY+hj*IcTuJ!e9RKvkIY;{Noa`w`}CpTsI9>boX`T9#4Lq85-Rl!ah4G%`9r;&LZ$?uyZ^1JJTHp(eTg$)} zqLEX+bWT89pi;U!LAqIp%(6K3uyjfueB*3T#L}Ur>{QzdRxPJ${YmsthD!#Tm+RHs z@?vX$yS0DVIXvzelN{6v>|nhl_st5}II><~QT7f$V`AUR2VHkp1g~E=oKX+x$*N{@ z)9`W^U^C8=p_ZgS?O?5IvQ#G(u;CotGMCR!hHXrO{r+Ru>%PEl0#3}3!m7CZJP}j` zAz?*n2jFWr6DbNPY@eM1S@UU5zgj$%9$4qQ+p4Y1YIZ8`-1j3v;S>t{r0G=^i*80x z@@In1b9JBNV5WAMl>zC3EsWJ{Ab$6)z_I6CM#IF0C~^F zq(fq1T9M^($}IdbE0^}`Je7S!>G=48&Fi7v8X%HC3T?SkEb!fIdmzqh2o2w}Qx|&d z?RZv$9-WZRBY=SE>L}JOTf?D<^zyc&f|jt%`G4tJ88ma6g{nQRRcs0un)}kVLz?5I zzPjIGxvcf%i^J|r(MiG8>{^p$@~Qsh2Tx2qMyEn@`KDe~_WHcK96B0;x-AoVKYjF7 z#ot7?o;mlW4F|6n)o>zf?6w>NVIe7LaB}ud`l;kooP^jCkg73LYj^l*Zaq5DE&mvb z!y`+g8wW`5EZZkwTj>I|LKqy6*5pzm=1G1+-0wm@^@Wc@PyEJdaW>>&!sw+tg~Tmr zP|C3j$x(n5W*PX13BLQ+KDT-Jk=o2`n#@1wz_Fp5Qi2V7sk+xxx!Lw*4NR&{yE8!r z$^w|;mdEB=c&P+>58N`W?cN2u2cfDL|-v%C~KgR>?LB*5)jdfX4(Nr7+R%5 z1TaLMY3(ZJ{1$F`k48g^QA$%$mCglA;j^$B2Tr4kIP+_-8y=scd_eNe#8ZJ!PcKd- zy?uPY594@hWts6Tgq9ip8up|4IPwpUGg#N&J#(LLIm@?K2NKyz*|)6U0i>+k+nl1t z^%{AZV=6r^EA}t|o)`hJpOHkC%p9v0DWLPgMNT7$;q~SSB=av1-7mdVWv8a#FuEb@ z{-vu(!eu53V44<0@3!vW zGUCGid&X+vDG+gs?g9mrF~Ck=rQ`HebWQ=C$dXH`N4gHORQ5%N9lA@)I_(LKvZqfn zK`AQhJ^$eIBI=-t9*o>6az?Q^WUI!A)MQ&DI%+L*!pi>T3s^rpWB(N_5SR_KaV7NqU|9pq2{pDmUR%pt-J}5w|lv%AF-Q3s_`31<$G9 z6#Id6AIH^(msc#68O>9DS4K{l1Wk3qvRH!Na3gC4=3A;KNf(gmtDlARmw;@(LRHC{ z{NzBhX*Lsu1`Hn$1+m$9g=ZXZhZUa<{>g5XQWco_4yHd>_G607Yh3YaHC%|oI<ts0Mt_4PG)~w_*IAA9$Rqu^V`p zt6O&3++h>HFIxE4ZdnLvPSUfTv>+{Mi7D8ZD(7?PPmm@43t7Ql3NPHxZ zlKkVL`>FO11WaHIiU^d^s^9xnV*SX^W(p1$1!w|s)tg!P=uGrR#{&{c_Yb^K z+c+?hzC$y~aQ@8DNekWAV(Pg4n<(>5f@3H+QTuJQ49#9AE>eZG{BE0nt6vv?c20Jo zws?H2a)X(fme`$~Z zF3Mnjm%?vyRD?5k_g+8f_}_cl|95hYF^M1@1VLe97!Wqu6<08q%is!BPijrM*>V>K z;EDh!q(hXu%tNnw^CxWIs#G_HvtR5r=MZP)`y+r|YJ~tX?m^RCB|f-JEt=#$VGcOO zNx-34(n$PIoQZ1=Fv1_y(&4J-3_NZSYuW!0h`;>>`aNtRP#6ALo+!s@o1{u(xnMlj zw_?`B@8h^d^+_NvqRi9|ri%emD0Gr+`_VFB1<4hS4I4j`LCZX38K_sKG?z&I>-0)Zl-hv2HjRa2y(-8jN5dIa z;UM4^xekNYxka9LS~(3(XuvVeBxs>J_Zts*7LJf^1^X9Fh!0#jv-J4J{DC`G9G%Eq zR}K3~XL^!vlIdgK<8){;(Tb~AUVuqgj^WH5Vcr5cRCw`m1=f3IL)tBiAB}#>tvo@1 z2NSJ;Lr+Iv6rWvB#Zqp_GeWm+Q>ea+%n4>mMhKmZTpAp811;3cq@z89+FX|mTf*wP z+LmR*%K}>O50J$5co6&TEAjr-$$?>$=SQf11La_ial@>!TRdp)cyie3nZYSGo(|(J z9a&X>uU@FaNZ3DDid(tz3!f=Cq1%3b9jn&SdKH)d7Yu`jcZ#=TkoceI*kW^V63zseD=u&%2a?lJnKmeYWZ$Zxu2@IT4 z{RVr!-1GB~I@xL8{=d61uz_-+;6enz+Jqf<^{)efF_p_k273=ed;psd`#oaavX@|> zw50dT)?g2uRrZs!P5!W?L3(wqGI~4y2JFCTpif6O>A13oS@z(V{_Fb^IQ0>=Fdl+DUs0+*sWU_A#Ur>1*Bawx-dSXZl&^u6(!o5QenoJ8ZmrV- z_#;8B9?kMA9~t3=XWB(DvZ!{u+0B4+R)qhXtN!%L{?ViwQB0(~AhdimOK%N{c`f7_ zk0Fvt_sj`rYi_1D%>?{i?VL|D&4gqBE24kzkJl?QivHoZ{kv)UhspZ)-tZqf+~AY2 zf$%@ORexRlUo5=8M*rSX|4FobD_zvisQ)L&`tSCf>D>AG|IHaI>c5Qa{F^LDg3)yH zgLQhS)nOw0)4Kf^$EQ30H{>X5*~OL4o*Y5Gz|gJ zT;9oWL($rgL$P$nD`B*3iFfMr(qX80sv1H1Bec zBWTjaJm5z58_LX#t`Oi@Hyj=gzcQB`CtDevj1d$9hS3W{(};>ON{suNOiO)pjv;|u zp#xn}*cm?L1A(%72;KQaI2?<`NCuLeCj!%MeAQIJ&1Y?bGkeW}HLpO3nzmuCdvq=S zGIRf)>>(~%uz%4!QUwz}yrl=LH}?lCm-Edxji zYp-jcDXSR%1WP1Ia=tG{=!S;*PQCG$S^M`|86$nmZK^)#1SyVrR5rayNh7REqW`yp z0=4?4`!~no_&?aViMA!qL?07j|G%H(?0iIQSjv}|r|{*@{i-Q4M^?h7Or_ri`Nv}* z)3yKY3D7_5$-)JXQCb23;1fc8!k%fTHR7B=VNZh0h1?0UQgHV?soM)7 zl+b?ZV)S`mLo-7FouH-lU2n#9&1y%mzF8RcTgzWD3muQ4JpS0M?HgF)RK~ktd=&C* zU8(!lX5y~X-D(4gXJHB+Xp;8ORs;#Ms4{P#JNHy&BWIOaj@+Tmw1ARkthd~54hL!R z8TtK!@osS6N{W@+q)QeCe@tK$E?WWgk{{?|w$kE<_0fbx+0Vd*_G&QRGS2EX-$(l6H<(n8G2SKj$h8CCHh_Y3?=CYpUe?m>3S5JM z^;$B59Ad`KulbsAV<{8(@4@cMl>jx!;`Lp)o5Lv!YG7A~7xQe=8@!!MQ*6~m*DGus zEAzE0!n78f8GGZ&ejR%zeyCgLqROVmdXJ~W}}R!u&vDy8}5u8QPvGRM}O)t<&~ zpWzZqN3_4@o6~!S91)z+8E%-47eifPnGigEGCY?pMqo7sxH4;lGuIn_G#!YRuQSaV zOXBAISVA~>mUE%Q4XA=*k~HQ4Ca{K*)`A#9^zm@Kc zPaz`9VEfi$ySK?S{f%U!;CrhP<7j9UVw<-mkKs*F26_}JQ-CHG?!#p(;tA17bGiVdd(R(yf9j6`zyD+D`;_s2j9Yt`qkcmqp+pq zGmAcvr#SHD#R3=RV>eN6!l*ck!5zw|cw@knhzrOwek6E^SD6XIUM?LQH!a7y^AmdS z3JqIuK|4}gZFMUo-({9FM$iaW_{}m*L7>B&*q1Zl9MfxV&ED+*Idh*K+aZUZPJZhQ zSBcs}xx|fnTKbBK7t3B{6mBq`rkgN34o%bj)JNu4uL%OwUe+f=x;C2$Ra3yk!N_njCOYMVni5x& zsHQqbk(K?3B-LP=9quVd z&xMt%iz&YW3kdEZ0}C&M#@%1asG6(ys~&1(`RT@WhzH&Fu1C+oRP6)0RnRJw3c&8Z zu5&OCXX4WWs9xmZ`H`oS%uXjy%c65XM(u0EWd>XWQCmE@<8A?V_(h#Dw`Il9TA65x zf_`mZucK$QLdx)z<@@pN;lmj@6Us?v9m~P26w?zyY}f$(uLXvm(!s`pnb>C`mC&A8 zocoVWth8DhA`dVr{(?O2QPLHj*;If(Yca7!YL~a{S3qimDFFbq@G987Ms$3_^F0zZ z>8DY@ERGS3Ly<7gfe-yq!-MW{IctTcyF!@n2zDAzvTpLLs4dlm5Oo>0Y+HhJ!9|pr z>9chTnNU`#1iL{&C`8fXtFH1ikE{)ZD6`Io@$Db^a0fu(tkXV#hyckXI>CUABF%j_s(G)FyoHxN5(u!X_%0o?B!h{i zY|Ot(;cAYw+ID@0Mh+}tRb zH86U_gIOARTMy9AM1s*@BU16yL_FyrN~10sz$5hz^Sw~WlYtCwbByzvvwv}Sd1l3V zZ=MHR{RT*)Gba|Q5-Cp8FC=YfNv5u?+US2 zmNiYKQYYK;qnBp%#=a z0pdFzh6_jLKhUueHh`^bayxCsL3LX6_WR%z^94o*bBQTh`K7D#mr5{(!Z^fKvVF-7 z@#yu^0r87w8|KQlp2zB?SONb;x?=6LQs z4yrz!N|ATa-d{qytSeHA+akPgMR~(rkjA+?dw2dGZs~CWR4nkD4pS{0xQAs`3)94T z5jaR8yMJdl*y3yY%*9(VO20WX#dsfTjr-SNY~boiv@mWrU2Vn;(mZ!8jZh9RLWz_4 zrhEXxt*(XbJ49qfj)x27qa$S8FoBz94v57w$J=Nven8kKEi9jXBtacqDhJ?Eo;?-Y z#qNlWAg4B}jtMJA!4IKr!x|owsQw^N^*sHA88Qa@U#xg&Oq-k73=D)?SUnh{x<(=< z!tNUyTR%SeCNcVZ{h=TO0v@a)7fvv}G9C&DD(rKV5d}S)+AsZxNvQ}R?6*eS?Lfq^ zCm&iz2~D?z!cIldC>G1(14_ZG8gm+&2Lxt)t<7?J>!{sFaEL4xA}dEH+MB2sb3Wx7 zT0Zgj`O=#Pd5gTMdl%L?C?DV_B{$##2*7Z=8ynUGn_&B5O9nr4pWqm7{S>4NQg#6y z+)NCZ1z&hBS0+X0?&slM7IRVM;-obumBsr48_orILq-pt3mJ}}B|b-K5o&r(hJmpc z>R^P(qKK}|syzcu`cuFj5eN{gM5{4p9E8FJAVB{KKe zJqh$W@^fWVA8fm0!PCFPP1rWpe{@d^8+XH(fzD%-+yA0s>$o~mRl_@!W+9|2-;9VH zN}RS!1yc~F#Z(bFm8PalqoHKf!7QqgIGH^lr*Q#Nz{7nH6 zwM~^XQgMhzU)NPm{4=pd*P#g$Szddiy&&snN2r~|OrDrxwQ0mfdNY8Ce&^X@-l3i3 z_$R+N4P0~FjB!nUG5Nw6S~v`7`{T>}&LCAq8o=2_5VJl}m6668R?G9T56J`}mRb&` zcH4eao3xyL#aXFRtbAbaTDVO6@XXwpO0GkJ-8lObaO*pKL1G-eCUmljY-wc1HZKuI z?FD0Oa_$s?y!~B^5ahh!ioav)is&v$uE+05PH@2 zYK{0;A`w!={v*6cc`JaKcm_nI0X`@qpOS5dy!J)?sZ>1yd%+k%+F8XR7{)r5vY7o| zUKY%`O=3Zgtb_YE6Jcvj7fk|qtZ!Buyr!4=@|~kh^X-d)uK*C-{p`I@jyUk~uG69Z ztL9F=YRJfVOA|_ra@~vNG@2v7xC9HsLT4Ma)A3NN;^?Th> z6#aOVIs;eZWABQ0u^{r_Ps@v{-@(>IJ)wdI( z;u99s7#k6yT~JECC(5poD0u{11UQ3%GKOb|#NESBw!uW~QfjYXDgo1P-Oyq)WhH&MOg^RCi?*`Y<=}rwm1|j-ZS2V46VLyXEQ)wx#=z$ zwP{lb!Z3u)o_-_8b0)w@#cCc~Rj;urmg@sN`u6KGD=8IL6S7U{J$r8)hu4d%t#!j| zz*~mo3!sQtog=Agmrz^VzdEz-g@oRJwuuh*0yZ8UME0m9CV(S&G9#;)Rem&{a4V?` zOG29Q6OtF3u9L4mT8x_yThXrpU85RUU?+|r(vjUrI{~`=$AJ44E`mY;AlfDyTaU?el zF{EBVomSI(NkfI@KL49NYs6O_yU9HWJ6;&iR)mow)oqn60_X7X&|g%@i!7V_5&cy# z(?=G7@Nr_;8r0*tLd$JBFz}%MMU^t@sa5(SnFoG+AqYXBDP+d7ej(gkfyQLVsiG7p zngWW!F>m-|Vf<-RCd(+G&CF6g(sF6)i9h{iqIIXB8f@>BDS)-RltZ!z&U2PKZa3<2 zd`J1d_Lgcxf?&6P)5__ufV52s!~xA=M`69x-kI(Y5PzU0?;Re@m;Fi^7qk`BnrPD) zJx8q{pfCCxnZ2l)~i^-8Igr z*D`?JGefj$Swu^7U4YF;Q)QW1fmvX_X2s)5VnxpHhmfNgfOB|q_)mf0VuvbjZJ0yv zbj)0Ag@9&sjXGfdy>b-d97JPMiPNxlQXJeqy=yFoc|&vIfw34G2`s0U4B1ut&1Yji zq!@kEww~{S0z1VhKR`~RDy!AL%c$@0%q~u(z+y(h6PTJ<@JJimkqXjBq{LZv_Bpv9 zWRo}LlOQIRuCh%D*o(g-19<(wXFyxIj2p91hd;JetYDKHZ-qF?vk_Gq@7TInp}20+ zkQnz*=#a(Q;YG2XJnPy}vCd~ZU4Lz`HIakb*N>n?OcnUSVi6gb@;PH~z&B4L@FNFe z=N@GeSdSg28ImWxlHGOg3wM0Qfl5o}=nSz`4ytRB{j;CcuP_+tVMQaPiy-)UgXQ(p z8hu=`<)dEhT1&J;Txb8aS~f=fOK{_Sx4-W`3?=)U`C!TrNi5HnpxPJC8Mw|epMD%l zEb_k2FBpY2H*9v22B$T_Z3rmPmWUkf-(S*ZBD9<6ISCr5fA#%R{)eqP%QZ90LRAil zG(T$^{AsDEe1k`)qaIavrRYZ=h)Ac4SXzl7T>Y44#cB%s7~pyEZnpI-Uy`19gsjeD z=>5?NxE-pt$@jssl>v{_fDm1E_^$%4;x!zY`ZrA3Y5<+n3>53og{m8vawk4nSAV~- z>x5+8A%CC*v1^!JOVqqaVH0A#=-NI&`6QOT1coOEO!lt)fTV|MYMXpwO$fPqYC zN>4u>N3H4`?muPV&qp!muY+Jo#>gbeQ?-fW%_gXWjSmvBzz z=K_PUW~O*kSuPCb$iCYKhbWS{&S`&NnPb!MPnrl^%)vykqdl#(bWZm)KhPoY$P>d! zZxk44IAx8Elouu%g$6kxW^z!nkTymRp4Q#0U^zc)Nv-8UoC3{Ufguq1L%So?`2BHY z282)%mQ(+sU%tflY1Qt-xy9kVTx~ihoQvXYUmm4pv9E^JvN%-5`qzhrf?o)9dW+n1 z=30l*D7`cQK!g~~TB-v82+b&c=V zLU=)vFqJx(nKQi;GacO>(JAIxjOql`%A<+wHEab`z-&}wjl0A~Zn`hM4WN@#eXJ#n z^|VO#_*S`eT3eJ7;(=TA7c6$#l9W?rVcOL(7eQPK4~-Ae3BAyd7H1EmJhuT{dJ9*t z;te%Lb!?mpqYy1SXhYuG+IjSgb*&gl0G~GETMZ*@T0G)`chM3ux73`;MQIxxbYDC| z7fv5*7);pHlyXl%Zn7yrlfPuN#isdIDSj-b#iOSw##VF?lE-0kp0%NuL>#P4`gZqe z*1KC42HRLN*xbj+X-BlUJuP>l+am1jA<{DRF#0vd^4i~hc6Z^nrHfE@S^RvNJ&+b5 zfA}_IL>8qkT%w20aq{3726!jOTsi)F5XG7Ud5xfEG3#Xq`I)9k(OiGYI(-;pML^kG zwA}h`lFb4gqTXFFT3ZY#TC&Iv9Nyq z0zUWX+>6hwcYe8viH)P745VDDQRM+75mz_~<(&I28PpT@wGXC8CG1>_&Ke9JolI(p z3-Ge&aecuE9a;>Q&gN0iN{kKhTQlTj*-p}^*d0|_DW$-@d}XFIJUxbF zEfp_?$Z8!xcoBN_YRNXzH#G-C!B zDqG??75M-~6OxaQ4{wk81)_XmAFHtXd=t;m&QqhYseFC51+vvtLUv*5?nY=A-|5Fu zhgoWjFSm^HLpa&yxF3&&MKKe9PDoV_YdI~Bfe8W-Cxbg{if;JC5!yQVv75j^Cw1G6 zO;xU=zto=Gu2DCg(48GuAS9eF4kKCgfMFit6lWWB68LDJbH*M8_9AwDJ=oEr_-tZ4 z0*%YRQ}ML4>>IY~C+4dmjJUO90Q15&Johw_P4}-~0&`~75;dRrfW3DBdb@J3cn?y` zm%S<%@ddPNy3@gvvR3ItZc}swe70cpR&iGDS|Is&Sv%xgW_Lx(8MQokofLIqEH9-7 zU&G!jXT6t5bVqU_5g7pDf$ZS1(n?5wqLNX zE2}&957Q#IzRL@|cJp`y%UB0@0Mvez(*ra(Ec63WE?=&-E5v7syg?sgFDJGM#!P&E$l%j@=D`dG%Vnc7hkteA0}2(~^bB zG>As^Q-I3Mpx+t{?+miN&&3g02&1JivqX--)@#hc^VAj?_Mv7tBf)PMI*yD`*Qhha z$^J+Y2pdU&o@SbM*~|GP<{k-oJ-R?dAMERt@B<{#jqpm4<v@fr~4ypu`Sq%itc@C7IB&m9U9wI7853ZvP=8Xz3aTE=bn zZ=PTX0a0653-@5>hIl%K1+TAE_y|F{P$raG+VrLyrKbvE*t%abs$&Re`aO}Sanc(?c)x34Y>vC+e zRl%#+p(}28rk+Rf^U>25OBJU zc2i>)eQE2&;SqI`af^rx8!{tQ)f7>E;4j@~`KiC~WNNb>(W>qcRpQ_{_vg{>(Bj1*es@__Jrw*7 z$F-_rH|W{bn=zK}4nW~DcV;jA@KIThz!PgMpX{(2|JWD8*_ap^Y8SF=6yEJzQTl14 z4Z}QFh6~1EOXCD90JhB*FusT1R)7mMxnDV?@~&8=uxnM=EukD&x4S&rgF$K13T((x z@#gD4Gcf9-Xr9z-H7UO`ACLx}L#q0ox0io)>7bj{6kS= zJ}pOGe@$h?plB<%Uy!XwPzxL>MtIY=P7_5dKrlPzm^lqW(t3zx&0k7SqKR1Y>Ncll z0-Rk5=-66*s4!FwBc{m&k>9g}tHq~Or+BcGcOMz(5r3bO`AiVj-f|X_x3^;5du+%W zeFQA{+!S`jG$wwuR6Pg+v}*-ec~C(jI5_qjxkz(jWdc0RQ^uHt?V**p>H5i%Qk@YN zGIh15d)UDftzy>O<)k29ZTZ*owey_~P8b@{{aZQyR-CfM^Ctfp!O|FJo^8Ul6C)6e zjJfZ&=zeQdHa|lt*X7)>lLcMM z2!EzAtO_pjbSD!dcl4p;jnQ+LCP3+0<4VsgsHof0zmN);R5<~Q;du+bH*X*2VRB>w zcQljRBR!|rDRHd}l{cB*U2~wi0Zz|^?Ck7-eH+DE;HjhUC|{`f@HMNfrZtU`1QE3M zHp5tW30wd(pz((-OGcTjZzE}%8^@n9uCMf(B7>Frs~&VRnqI&T8fwCi+jy~t|*0$5WC;A6|%R>!s~ zHlTU5*sfmH_oC*V_v}(NVUR>(XtXSQ-r{tot#rznXI7z#6HTS9SXgo(WHm7qA5wP5 zJ|?Q4vAGunaM2$t3-{7@+ov16pi||Hg*ntHqVt1LXrMm3Mi8NivsKlo~dGvMnh7 z=ulp4Lt+pTvl;}=1vf>XIWj^Xw|ek|Z!}ob0C$^tj~W{SLfOe=!XOaa7W@x<^AqgD zPQm8dhju^RO=7^=P@XxUlP3WfHwk4{9WF{bhDysw)gtv&S5f%qUTu@?C@xB4_BXik z#}!ckrJwD*L>-!f4jm;!y+scT*;XNWtf;$8~+&DA|>97 z^Q&rq!0T1W=@e?{klzzaKTkn}{Yue0c~UR0q^IgK_mPqC~021=oH zR0d!Oh8@N3J;E@>f3DljHyAK}SD5l(Mw7tp$G3;o^isR!^By*b8v}AoPjr(@Z7&bW zH@5#M>f`urQ)4!xmn)V zGIoGtU;GODlM$VpX7y)M{1oDrylGHR--Bh%_;BM)|4#~xo$0&J?AVA%0Mw(#Mx!hw z$2|t(8ohgAECDf$q*X$Z!Zbc5O@+L|4i1&E55u9a4#1_CS~FRnH(G<>?}uUX#+z*g z_qGOw*_emPlXl0sa$Wagu&G62D4}k&*2i)zyvS+?(r$_SYZddLwM6?M_zI?UyylI7 z&s0(@l-MkQB#IZT*S2BIw57&ty6+#{N(S;94QaT97H3UCAlZ6F0WN)GNTBOf>#`~% zw-!zTOlYt)MTm8|&-Ez>ef@(FLufKI4amtcrRn8B^k~{{RvHx`G`lKKckt@gCRuPY z;Won?NVsxgag93`rm&)5L8b;{O?UynSOz)1RWY|Cvm+!Rt0(w1CJ`a*4HLaK<^yCh zUfTUM^RD4FT~uWC^PpNdSia`IbNo7f)g?v%beo#`ab=niWSD2mQ5$QQI;jlz;qCUI zC8+Y2SGd=`*GsnIesnU=8Y_DpRzn*=H`TOBI*^CbYUlW?p>k6k+8^U?vDe6%mrD|z zi9MfToF$kUZy~j*-Mg2U;5az_-E_Fo`_7Q|UKrn00h_#^&(~@c9tglq8St0i+anZ5 zxGtRmT9L13JjE{OO8$<4bfpUH+E9^zIq!?YOW^Wt9iD}bV{Tb5?H1&e=)`Mz7bOmp zDwca*BG-@dd-Qtv*V7fupIkivQ(QSz!V3vg(`JKan2HNjoGKlOPJvI8O>!6~QX`uC zO%{orfG$B(aO$J!fzKkk~4Lok&qylzI4{Z7|q*1n?wEuHTe|X-ZiBa^-D97VAT)jXf@v8&q{p04x$(vsir_Vq}}hm!gD&)^XvLb&NmlPoWe@ms{w~=_^EDoEcTjTDE9BixQ`6 zI%%G)ES;ht_RZEMV(HP?YAUxZ%KSEG9>xn3boB@Q<>s;=)9HQ-R+?Y!PR)i29bEl= zjo*6hkGT%}p?JPTBPO2&f@@-)-%8K8<3(kEJMglu1qv;ceRU;GEK|;f#3&}t7Ad!C zbFbIxY>DP#fjg>T==SkfCiMU$uagvA1$F3&dcwZF5Q}&>-cMQ?B@8<4f#wavv|>fY7d6O2Ax$@Xwyig3hhDWL|Df zPG&rLi30`dXl&DBK}H=!^qU1IcD3u}0U;I@Okvhy??{iiyx>}>PvSTi++BnWsW2!~ z@OxQmh6i*2zM5^!cD9+5#)#C5?`pa7vGKPv?C}?prJ33gr_aIlCmtsgz+l;kJVulu z>nFhC2rb3@P!aAhpnLL$5sqc%O~ZGC(7J1!M!e5Vl>=piF8JAlu?|E&ec1Hu+6cv1 zg`C1B-I1BSS0l$M`A|eG>sm6s?z1S#sK5m816wS~Ii;B)&gVywcQ^#S1su^~xGKLi z90NcDbqOI|9S_r-dgzRJn3$*U%-#P3Y&%ON?XQ;>-jo2m2nX4fnFfdfO4pUFxPNcRhRrMDsJ58 zrFO6E!sd6Re44aRpSsJBzq+KYYMcmD-zNp*KKD!RSdvduBqCXe7ryLQV&$p`mzmor znK?$QER7hpdC-^lq#p7>IDSPOw;o`2C+u1kG}A0l5BdF<-5Q;?d?ztl1p;cvCb61_ z78h#6h@g2{i@tXHbEbuAOt$cz&$3+)A~-^0cdAcgSLA8fx%9z^!RyIbUR%WszJ36z zBZvS-MAao6JJanjEG)ix|7Z zk6xaFcc;#puT?wnnGM#H)41a z5iZ6>BWZHEAcky}QM>Xke=33XNrK|5Oq-I~8Sl+vqy@h@j`2)p?@fdaa!^i+y>-PX zXQSotiJ6}vY>6x5A6OvD=A_%n&Np3Gj+W>Pv@+Qs1u7AYg9>5TGnBhLe$E1VV_aqk z?u%Yw(k?Gge>wqr8Ai7;MH4HPeZF(rsqk%xAq~`2rd~r{+m`C2?^uNtUCxYo9E7M# zF6~`ZR8GWX5lR@oHrn_pY4!&pukxH|4Q~Wp?yJCPdXH_vtuQ9_U0l>eA}lS%;B)6# zc(qnpe$pl#+^Flqna3~h3}`^WZ4=kCW|+4@T7cnWZCBSvx_7w>a5$W2D|ZX({D_)! zftQOsTWQU|+UFo#KQv9R`w>7EgvMvg1V8$xO-$2T`5V5J!`UGQZ%W z55&*=p`K-7Brrj-CYjj)zaq)e50P;AguuHUY{Ip7U%gTWt58}${@9l2+H2QOP~Za6 zU%-5WMocMC3Rr>yQI3%&&sf*Pk`=t=C*SvKG&w+F(d*ocU%?c~FastReTKVPUTH(ZQm+#n5^9O=s%U2>o#-uh$5AkBNTB}IBqmckV! zZKkgWA#(b9F(l(ZD>b3g@+wZWObI$x7yCG+l`D4^o-Uc~`LKaVCdpQ@u7u8BJYjV> z-&EDT6&nObCRwQs#3{@al-E=I7h14Gp{@FOY*VhNwM)p1ys3%x)D=+XwY>F=2lN|v z{f|ya;vE$EWsq3Evfp7wf_Bo_{OG2X@(9^N-Zs^PzKN|Asu5!oa1$!mDa6icQ9aiM zTb98`iY5aM-r||X<_AF}sLN{TT7nI)E4tqNg3oyd=4;U>7R)+Lh#Xpk<{rY+rRGl{~9}|?o5DX4adpEwr$(CZQHhOCllMYZ5v-~ z+nHc;X7Bw6&QMgA6&wHdrfQK5y z0IsMifH`esdAc-B1CDU<GP=<7bFpoXSY+ZFH| zCYr=mGqn={eF6XiC_b_oaFXg6P~Zth*;co2&}hSP4_5vPh7hEHo5%Rdf{V;FAH1(_ zR3}?0c?|;EmxQ@P*`R^hSw#P44t6mhMJl!|dR%mI*!JXB(ZxBag2o1Hr3xf$u;JUr z%X?WY(zEYq8v8oD7ib)yx`d>yWL9C$txL8XV_F#Z8*%60*%u+|U66RCLzj#}GCduJ z;dK}yB=-O&p3F;Q<2Ox@{Df-m;6Nz)pA1r_nXS;uuN+(W+>|TbXRC-W&MXp3(I<94 z=vEW0QXI^b#NXj#CtBI1rqUvO{U6;foTo%!IE&n3q8og?)QONnvcDfQh$j|KwUT-X zCZO~hd75NHxezbWBe}RF^Si%XzOvv2<0ZkjIYwxu;twt?-fHl&^Strr z@cyU>aTWJ^-J$s`U6x-jAR!c66}j=Qi#XPLFS-M+H16gvs^csFjX_^p*W{m?p*{`Z zs5UF}B!_l_2M~8!hfsi3V@1dr)Y&-Q+qJ(@fNT^)(cSO81UsM2D@!yMP$tu0H{i5* zrcQ(-obNOOc8*0Fcc>jkI*B|Y3mQKm2f1$g+9Cs?Ni5=95jHLklx#C;9U#YCVWN@LEcDa1E}ny7(*s;7Jz%|`m+hGCPjcV^RV zkxOYQlS(UBJ~W*I<+}cnsYryyDAKKi4tBHVpBV_8)Z93Uadi_Tm2_t_wAn{bH+Ik( z#JDy*=rM{c>j2{jcTyidHs+J~wlKJvYcO#~`@LSYL24rtdF&HZu*G^?$aB}RM4CL= zWVhZ%?Q?L6aL1bmkLWO=7Yvl74fwmU&gpe*cOzj~+G)>bOZ>R7_*@?uPqIwD`K`LU z@@g`&ip^#77*dU?30^2eDZW46=$vV+PNALq+U6MsLsIV2JO1nZJcn<4AR^1aDp|x- zl75D}o%1+R6yA`8O#$(*qfSP;#`%#N1{o8*U6RABBOIVbw_X*4EL_P*^9=)9L*O~`qilSw|(=Bp0=T@81M(yTr;TE2ImNfYN{K$d<)JCIw%&U#S{HM z9c&6#j()HmZ$<4zS&KwdD{bb(l?46p3SWfBsbF=;bEaOJ*X1y9UZvrh3MtK#p^#uv zh>>(Z#TXxy9OfCTsxvW z?Bg=ET@f?`uXVW2;s!f}BpA0JbtxsYw3g+bGvcW8h54aVI&Ja<6~7mGvtGm{H1Hhm zBN6bLcB~v^sU*e=k;7}tYuo*$fWr^`GxfW!q0tlpF}85V1L`S2d7UIs=!{x?&FUE9 z9MjO4zX%+g0VUqC)sD*9ntQvz7)hri9vyxqmyBNO?AMqG2(4a)EMY$=u4QW_Hf%v= zM;`RJXb`1foQ(qF-mIK%4H@w-Vp3>jsVS+V_Lu>SnnrBC7>}%?8c$lxJVw`2wGB0& z(Xw*fVV!gUUt#u;u>etRFil%am!Z+FhI=s&`6$Zq4vvl^7pblKK*d|}hStV7T@<3` z*`U5cltl&=MmE=&Wb?8<~Yn-l{2_H`!NTXZw4W%;BX_nohQ?zYKtsI7_56&(dv zcVX@*jsIRY$HpxI5T~8YZ)OY$|I`MkZcYF0S^@|BewZEWZ2xuC5<4oDueDp1uDfy}S5M)ZEkX^8OcT;2Jt=%s-Be6+W z^}gP7B&}^^^klh<7Qv;b$t4@zAbsrYP&u4Gn(B zdx*xZoj6n){Kx@=q<@Ly%+JZOElm9fs!Tf1(KoAyB~F8gmoYQXAWZ~o9p*=9OOi%@ z=16=-vcF69W!f95bhO%1FRfWk0sJY&*z(EA*NPB(de3?r@0?JoP-%nh9 z+IR_cB274$Q{M=!H6G5|E7h)DiSGDpU<92{^nSYtjEYA`Hmh1ayxHSSmGccXSZ4b~ zSkLIH>T*@j7K{Nfz@)ES09_z_75%RI{=-cZs+ISj=FWo}qiSN7XWgpdR44_fdsIfN2Z$-1bR>n>*1( zYx;SgdAT@>ae73O7)(ynR4~69zT-6fcS)KX-wec*3IE!bMc1$d0dJ$A@H_mbtRh~_E960%>#ov(Ke1>zE2rU@4^6O5Anr-We;8{3g(bU$q01z z!)Gc-1*?HCRD6oPpMBm?gKJ2D24u)+lmvrnx3v`*gigv;24MRh{aygzIFd=Y3E0L4 z3k|FUv-`^hii@vw_of=WGTroT(?DWeB@XfF`M4QvVC5j;{`GQzi_!f_xzYOM^-g>3 z|Mj7I?(9M+gGyZ!8C*u#m0sc$tDh2OxoryE0MqDMm|+ln+$MXWvrn+&%UL68gF2~5 z#_!1tw_)IJh(;{pqNgYczI8-uK49)P+-PoIbRrZ@Fli&igygFYc0rs^!36^!a4>S> z`;`q88}KVSkS}iW%qcV`f9&=w(pVh5@9;(*CY6K%P$gwu))hI=1CVCBE~fe<5=jcn ze-Osiq8MF|MhWy?F=Qz^IOKL)RZK2+K7fR9HnILz0^XFI6* zwmf?9_zI&+8s?T#EwJm;(JPs*MxW~XJRNHdNDe3n26ElWWKV@f=ETTk0`opHE~J$l zhUQt8SZsw~+U;HM0lM@Mq$o|rIada1aR|p7pT+d+313q!vvlGm_9kSBzF~%{lN??2 z___M2&K!ZE0=BijCeQmcn2Vq>AMi**!8?Gq_SVEt@XPiLK=cCu0SD7^*%QWOfd+f| z&m*^{b00D6Xj9*3o>f9zh<$DG1OJL?3L%ph1U*?uiJ73{HJS5xW^a{{S669g z3QZ^B`ocfS);u8H|3y9EQV&g@67bm@9vTDJDi{69*BFx3q1`j2!CA;PkZ16r`e*5U zUG9iiH3^IfCRsVwZ|8xF(5r5e!*!~JTIh(lKSzc_?rj*k%0uP39(Crq2nZ z-TQ_Vw@;GP>lWWkHET*P?oT)z@p~39`ucZx08)bX*|E~axL;3}5j+w4PlNxQI91Hz z;?p^|t1^iiNAz+7?&URk4&a;U#jyl`-u3G8PkXNgReDvYXY%n$U6WU5E#?OdZ#lN1 zSsXz_&FeTtAK9gne`x=sJ|sXOP>H694OwRkVQ6w5GLr_KB#J# z1JY3C+ukm+y0KY-jn6FX1;%oGY0G}nGaEEVBxK+->?kD98f}E5t=w&^cWO3f`yRR}Km(GmKbu7G4kSzp9$5JX43Er=0FSL@XA!l|j!hUD{+QmyUoDeRC!QQZens~8 zK{Dz}c#4dCjowcfo^Zg&A7IxV_nY{->WbvU2nnpdYtw)bp8y7P{V6$dsB75K5UgH2 z(*R9-Ja!CZFhyh|ph-`zloUI_&5MZLI|t5sa?~ML1a8$EWY?y}+2juMsU)?WVyZZW zZ%b98fG*X^qrGJ%A}E~gD8xpZMcKOyDx4CLc7g5BL<&q$eoI+5k6%2=*A}Q-pYGvz zhxMXRg0e9%zk06Jt}9^;tTjk>x4v4al}!`_)Ujw0`j!7SeAmJOItZ^f%G@zkR1*A4 z$JLL7iI?ci*7MO1no`YP1?-LkLUQi*2+YiU`ICZ*6!=?IpHB``dI%i3q+|VM!UE=j z&7c-4t zJDY^vw7I`c>mn7VC3i+cvKhe=5Nw`fJ2K3=h%A*pYLN=OH-v3xo~8Q4dD;kQbN;3G zr0FrD(eL1iiL#2TYK@p|4@?916rA{EPGE9Jp|HM&0vq@?boQ7dIdo?WWoLUd%P(yk zHmAGZH@a2e5Pb051bQ+)t}qLzAiBwH9XrCmyWmXlmgeX535{5X{%d&qH5BcJNt5c` z==1!nC_MLtYK)rpX{F`eY_1j>o)Lc zmVDbmQ~%4>rqjG1C!hl!+;Jy&{%Y>;N#NzUp{nJ%8ey5`N$-3;W%)GA#qa$R?W8}3 zjqR(^gW8^RfkzPD<~bPwA=iU~&6uX3*ZcOl7cV*A{!OWqyV_49hmRp^TB(kRQ^P5B z7{jZhX#%&1wA9FNmpZ+Z?R5Q$SY2zPSr!hmFw_1(;lCr-Wfb3Cq1OW|J7x$w_vhJ! z`S4FP1T8LPdQ^@SD_@z%SOEo__cSHBNUbZ3*n*WujGOc0eC2kb#OHWiqC>@(kZ4<~ zF|*UFu+3!Uc(Wk`TV^kDj%1L@TJxGmczk00Q!V_1OM-?sU*kpY4l30l7TD;)E>Pj^ z`;1c?HLK2J{1U_nL~{HVYFVb26EMNcANnp^?#hWrm6@S-6~)Wq)^o0<8s0Qd%M#2x zm&6}}xSF_I3EDWnts~updR<55i^A(67SGdly9uSfrv6&l#NHI&xcy6|nKYygF|uiS z>x+pFeCqz&BT9??K0J8BWitk7z!gV@EgwaNq!TL z0;Bqt34|&KT*o5C-wsYkagMHhD|V-<2XB8N8O%Z08g+y`bcTd6Hz9Rlkg&4QEDl zs7vTNDr*Vz_}rEXKK(Y5&tboRl;-F%rU}%^; ztb$e--%R0E--R)kh^Lk(fSgZNa9`0~cX4z^+T3UrR6Gcb>p3%BJ=Z9hVB~Sr;Q}=O zt8AvQ%#e!5njBN6ZzoOpd0y626d0|S@m?J39-vdql8Tf7cK(h7gX#4&$+ivEqv&^u zq?9#_P(~$RH3h5YQ8f1NA;GM$As)=uwfA3?0kI(m2yM=eW8OVB27$%LtOw-S9z_I< zZj61qfa=kI;*F;^=zE_LnblB6$mP`mx^3*8_e@v{?Xj44Rtb=E-F~1I*kZt_>3+J3 zu11Fmz4PD#=pwmYV}cw z<*VqDeW)_NyPs}w4$(G+@x&dL5Ejx4RA}8?*`L!gF>yk3L0p3cHDb)9opZ!^?&QAz z-SrORQ~l|*jHho)@tPOuwfE8?F3u!MR%)1EwDUnUU<<9ZLy*Pe_0NX~lcVPIR4 zE#&{@mf!!tS_BYk`M=;0`hD`O+|$==iU;vK=YNALJj!$@{2@v0)5&wfdzHk1h4(5T zJD9Ombu$bV0+W&D_kN|KLFSTjj7SJ%~-n-5FWy4Nj&vjvV5o~7dkY9hxC#VVapgABPrliTt zG7^Kvb20yJAun%$=Wnt(g!p?L^JzTxnHY=_XXLO$nc)QjVveyW_|Ho~K-`1>H9&#? zYDqBE{RsN;dDZjG2u&7O7eaJjd$HDltI2+7u0{RpVh3uARccY~f;a+2UESxl+58<` zwV3ZmH#rnJGP;Z6>!#7)J$@OL)}xllF|(PbL|`behK+gYey^Lz^L@cB)Fa>WbCaJr z`B}VOoI>|uJnBH@zj7K7UtHkUeHhupqS10Fyp$yC3Ck;`Ud0Mfn9?*5wEr@o!{onA zq>L-KO7X}ZIyA=#h2NRH8W(c8`eC2-&YW!GQ+SMZd=~xxF8}<8*zj;{9=I#rC)h zq`FsSw-9T*%acE!tMaN86=v>3=HXLJcX3$_)5FE9pt?wCnnpKhaHrYh9B;tVvJT9{ zif1=LC0xSu54-fm(=Z8hwkp0pkkmM8%RfdUK>M{|v;YeA)-Z)R>9(ufiyPc_O%u(G zSzMq~M=mau1N=^gUAOTHd<^>1kz$Q;Y&kVdA|PGLf>8|vq_HlGO4r&lY#pgRJgJDo zwq9!d%r;Ghn3W9;12N=|<1U>My5^*ROO%5jVEv`g9=^rTbbmqk#4P@w;ym_oV9VnX zHAqEt3A={c7Y-WS@(EV4G;~<^2_AG+8NQc(Xy`eZqm(0!($Wm&HV4?{DRJ0neS}|V zu2>}78LC9C=E>Rx$fsTWD8&pb0+5&&=WQrYA=$XybCoKTW{ zXsu?>`dV|t1@)v3J7mE%6F>Pq=3_)qR2tnC$FF}fe-HAXG4_&Cv+xm>>$04AO+)O1>%ZDw7wa#;e_zUAN#c` zs}#7bYe~m-ukicU5a-61-*~FC@)%@x04^D3v0w;DDM46*HQ4I~9I74`_{;gTeMdNt zu#|Q`1=??kOw$Tuhee%L6M8vE_dQ4Q_>{$X@d7d&ex@FcTIT%n#Rl4g$ za2b-#O%}V>*v{Wwb*lRyml+ia&?r$H!c>qSVDQ)eYjj=r)I+9BXm{1z&Jf=VVfwBnna3)mJVM}42{X6AO zJ=#Y@gNcx{V|ID}6yA!^&rc&2y{xYqSFSK{r zrV*+djtZsnlcH$U0n=|(F4xvqPyhbb1!ZT!UF7eS*mrgIQHHXP)$Hf@QS(iJ!|0kf z{wmcR(B&)Obb4DE1(G6?jrk8?vkZ*RC^N-4r~J~{E|L1GuUo4rG7BB#M;&qSg@l2x zw`&jT`$-QArSF~mG`QIGF#UGz!WDk%iGk1y{4(yx{s9;RnLZQEXlik|wWVdsY`u52 zXXjtzBtLYrO4xQew6~Xo%CT|DnPP+%H81&MD+=>Y;v%pdI%=XXdBey-QO?0WR=y~d zlnqvtf=t95;Lp8^fo@*Y0i~N3aYt_aW{UWpsbhJG54Oh=KLtnMMl%oxnm04Ha79y% z0JJvlMM1dlm2uFk(DDTLutTJ+p-^Armbor=Q>8zMeD)*{CCJjkrkE)% zot;)aR3qKqpbcy?$XH*`Hi7cnp?tuW$pD2_+V2bo&ZLG0=fzu$3$i9Po_BraeKobTOuBDm19O$P&h)8u)Q) znCq5jtpRb$;TMYkxSJ8~w4C@v9-5z;zjeDyLnKA{w)%m!7D zEg&}S@3Ed1R+o2Y-952Yr-q`Y9Rf%tn)19%?FlhVEbJ>+*hiKuSx7t5OaZb;v2x$} z{6HCsDpSKp&^x||KI+9WJnJT#qX1bD*9ywNubdDL573h{qaZ1hUGp2{wT(EudZ%Cfk-6`- zQ0MNDhu7&2YI+*fT_Fd>H9pjzUaPQ?Tz!!1s6s9!3o9ic8)gbyj3u`mH#Ej&8`6LA zWWXhK^4l3d>(zI|7e;c=8}QR&^v#%SsB19w6sLW~LI({WD+PtYAsyr-QrM+C$`a3` z4sW|!FVB<;-Jw|L8hDlwUQ>plVWS9*wel?k>wpB{o4L<>+t^&h=%+@=oJ^EDaJ;Cz z;?=o6dgD2ZJc(xM_QNE6rj*hnc0Gh(#^XxyGW{G5*G=6suGgGX`NInZ9Ya}uyO@4_ zSJR)RD@ACOC=0x%h~CQ+6ChaSReExZ5UofcO%&q07|0s|*te~D@z`9C3UoiY_+8T%=V6g?W zO5%0xT%W&2!N8jx?%J>nh?h)C$QjN+MhV$@T~PqZ}RY+uskKRfNDFmqZXoO%xVW3~ z06ho2Q9N!FDI(L;LaU%Dcs+>5H_m%KLnB4V?gqRUte@)oIZ(6(ZTMp?8sAii%C-R{ z4Ao!m#hT3VSmv3JzC>7E>{K0TnuA1kHEUb#r2#-dCMnK9h;)?4C<<)|T4#`Qi3ZJGsf&(zeK)`IVI?5p zizEv-fx$wiMt}ANrkJxAwK^X8>qnhtX)}@#F$V&Thvm9JXx(p+3b7t~+&UTGd4&|j z;`FV}jL~eIRp+%b4Uwqb0CR+Z6U#Kj)Q9(q)mWvgkG{{yCWdwK``pwHpX?6!ODb}{ zzl0}j5wbX?APalTG#N3{4i{CGrs9_V629oj@dSeZzFLvI;RNaPW<2m=VmgR56Yg>d z;GF_EwQ~*X#=npaR8wy99L50a9z~5Ex7w&V6#C)13`5kP2pjh_Sb7OrSp|N^=iC1b zj|g0juCD|aYN@j8D&k1L^L@2-!TxX?tWNF3efz3~Aom!hXZ2EX>Q5;ggKen))k8~~ zyy{O4W0YlFk^|flA+6hXLV+74@rgU_kn^F{*0TlLun)Llr{iRotf1Q}S2l*kTh>6^ z5AkR;6fv7W%BRgK4C&Yl2+T-m?trF(K!Z$$DkvUIYp=9eJS zl>@4y1%phq3e^0FM(Bh#;o1Y^z~=q_AwXFt0C8ba^08=B;R2y0UWUFGWgA|*8UDk^ ze4LpDsvpl%d>;NdqDd4_d7o}b#u@G3cp|x$GJ?ujvzL)Fw$^A`jNKXJIE2%C#uO`* zs3pP2N^OwJF5tw%T9P=$H1n?dWqZI&MMX^yYRFr7RFbIls#YGJocK=4hBOpaKBH(K zTcY|9qP7yl-A<>~Ti86qh8g{JYHK6ctS?+JccTW94`aYz zg>k!tEnQR^9?>J>5Y6u+&O^%m&RLWI9;O_BuBvVK4>E7AJJSuum5cBhTW9#i)v5d- zC*d0;#AiT;AX*kJ#4+f5&3LAEZvOGJZO~q38VPLuIJr#F1nZJUI?Uv}qK||=VU(w% zIcQe{!07F>00{9NrdKp--wJ)OAlR+nr$MXzMQzDA0w&nl&Ve>PBVt>->|Qq5HV~WH zl};N62Zvu>B44QrSNkCcYN~N*X3~#E8J(JcncQO{9J8 zfe1q7-R@&XRhGhvX8q{kzool5$bStmFdyo`|7!Vv(PViUrnsvd{}@Xrgb)Y>%MP`7 zcx=dqusSLjcJyb%;T_@bcU`>r{_)Pjey_VKAE0y$9F+q}W!E2n_;QYXp z^LT&LK?Mqwji=A>3*ngBYDwF5=4yI$2XoWKn ze1%X&h&Pv|KxSx3xip`NO$DK88ls}mBfR@LF1vk{cB9WC#C%_hQJ)zm>AUPM^l_X3 zZQmPMzRAjO-8A`>025Bgm`t|0V+; zPsi?yq|Ob}&z$>A0n3SJNnsFaSg`lI)vLhE$UnZjDToyah=#t3#Y3k%rIy_!h-o&` zKxMU97yCkTfT56aHKLJ^H|Jh!7ivVbGjw#;I-Lol!Xp2n94@^GJf2@|^f$<{)M}>T zF);-33Lr%QRv2N))((d)ULji^VcG*ab3{^6X0Z3jwA?XsSTb8}bZ@Nzwi5uE4xfBf zgdLSCUWOrRT&hfqMQ`f|%j5#A0U(q2BMgkbTFfcyh-5;GGav9%93TH1;1XVeKUj># zS?~V@)#A3aRL>k!OB9ZN`8*}tm5^XYe#b6EC)#}oLL7rozEwB^L-&n>hRi;=go+q^ z^u%;R|7#169sJkgNTGX;UIe&ypH%L-FTNv~8_?o3*a z?_Jbnj`XC9`q9C=&T;o1R2B2m+r9L%OCZU(wv=r|w5msU9l=nqEgXQ=I+^l>bsqeF zC-UuujWo~&qjPdj#H7yyD+&uH))4YNwohssE_wNZPwEilCchy>HC=l3TP zJiIFku-CVXxSx~CI8i$bI7f%3LDm-E?by`)KD@G|;uk(wsg$0er@1S-a!f`w zc_X&P<`SDiMeN5ud}f3S3|r=tz;@5%hjMbk9cIfDyZt)5N+?g=P~!OL7cenLAwwZv z5c1Q{Lc|Y=S012N@3{Gz`umqQ@CMkwU?PT)qbE*lU7UIS0!rlT7FK7UX=1^w&-d_( zeT+C73VW)IRH)sd-PCq{FIwW2Y63q);d2xVOAnz`YT|gO@)02EIwnan)-h3t(s|2{ zjBcv6ACh%lXVx6rG-p`kOO}wXAG0VxASH;K{;CFc z@CHnu!#mC@Mf#JGJ3#YPeu3xZ#mThRJnN|Ax7-ET`rea8KG0_8zv{F>3E+AHiqU;MOVR1w z;M-~eZNv_hBx_u2En~6IpA^do6zz!8GqT2G2T24C9V$Tsg)ZvAZ(86eu1I%M5kpVE zia1(qm5PGRPOf<@Fg21~AagKIn$#p^$pv`gn`+FY;Al!!Fx(A4XHtC1o}y=gPAo!1 z6li*YmIA8qB#8_m5=kg$bM=*aM)iU(2uu{*0Cm)$RVA9ddv{?+|z z|BsCl<()WEYqQILo$2n|W|>m2rCw3$IFZ6#*Lrf9H6|D=a38J9mssI3C_DJ4QtwDL o>NN{(D;0{S}C%AiU(k^Mb*ZNnV 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 literal 32292 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 diff --git a/docs/victoriametrics-cloud/quick_start_signup_errors.webp b/docs/victoriametrics-cloud/quick_start_signup_errors.webp index 505d51f4cc9b32bb9f7b6a08e2d129043eaea477..6f66a5e6dee2e2767c7aada0e543465a218100e4 100644 GIT binary patch literal 113746 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 v3iUT`5O@uTDxS*4rIS;2pAaAb000000000000000000000000000000)!GC} literal 37976 zcmd3O1ymhb)-Dp39i8*xVr>*hhV|oCAbE6cMtCF`k;Ge{_g4SY53op zwcc5GajWW9)vCQja=A zer{&^5;$Zy351c^o%}F(oqE@mRa?ilh#?R-~6@!Bc)SC`|b-Z1K`GKYxpK*(D<<^EJZpE0#Oky_^XK3 z!+-y3hi^o^$2+P%?UPww1|?#zjT(8-{{Qml>fllJskc#_i)4bX4YHniU2S{s;@;cY z6`V8xbKZ66y8zoX5L9l~>Ab1h^gu4E|Bm~OFFl6PgP=lm`Gt zmP4awWlO{?Be=wbf&`r?p9o*inZ z$ZygU(~j^TR;8i!5zhchF90;OrJ#Vzp~>*0K2=}IdteCx*fTB9p<@pn=`2L31MKk+ zQy!Yd5_@+GZSha00m~7OR(pe`!rLif=9JRqy4bCwe`yDOUfJmG2$vJsl(?}FRePvR81l2PLS$t{TaQT`iVCY9x0?0n?H zqZK)0>Zc!4GP0}m6kncU|Kd+G~A1nbJU(xn9M(eD|D}-K6 zcirPg-i`&HZ0G&`&#pqYB6KV`=0r~5Q3(G6+%~|ZdjFLn=k{7(nkfr>hi(D?i+niD zlkt4^tU!!rZ2pr)-WyK^aG$#m-S||_SR80o@{(z!PK3JzI)3MNgSdouq}BYcy5bfO z#V;FBa}c>$u$>TI6nz|_R4zpmJ*&lS7h{@^^1eJ_5|_HdlFi-%j)?s7l8KBaE^OgK z>ZulHin{#W1-XNj60^adrW~j{K(=+VfdaK*1i9m(B?$mxz`5aH9*`B0Zd$pvb*LRc zfQ!FO%iPoXsRNg0+~~m8foTbybza)&i|G&HjIVdz>QSQ{6Tn)ef|06tYRs zG$AA25_A2)ZdMto+?$Iv4Q=+wbB2S917w@BZU>_1rDS zMom0Per-sfPakQslhf>6=<8qey2aCJEH@MQ^LZsD2+H}*?x;Zlu;J7dDtQ`}e|=XA z!oLd^ZJfo8^S$JR1(DrA_3}zv@RJ7L@0Z;F(>AiF3~U>5Xg)3S#7Ur#wdSJ^QE3+K z)#VLs8kn>Qu$AqI$-#M6`8Au~4Ol;ENc&qtosrca2=Xd6JWAR~I8M3HmoxfTI^}yF zz>xZc2$TTq94}KG|BGH^f^}Mc3l)A=RZw{=4;eIg+2q5H<`iRq>S=k*onjBHezm1-%JI3|2;RTL1JmzVH_dtUiZgD)_AORcBb>d!6YMA1UP~T*! zRheLhG&$Bak6!_~I(-O@K-pP)_v{yl6=bMh?Ne$4k;ABL_japt^pD(rGF&zATcs)| z?1M_ii}e>MwVM5Dwef&toQ0x1wX(zOZeL^mORWa}*UD)^|6CO3p{Qm(Kv`lDuz5sE zUuE`6`|)xy@N7TjSRm$kwn4ccr)4gTa2g5!9~iK|YJikt%_!>Ne`^T;O>2bXzU{PQ z!F##c{i|00jkW&uF&ui8?0&`nt;K(B)tccfj#6)npQZf&7HqtrYLRe_BJ*y%i@yXc zfAS85)ggBV8;Xgx-A_e7=9ziJumGsODmk&Uu-MT1m2N<=9|2C!000n+ZEcBh-@Ohc z5%V}zHsign^CD=7zze8IB4mU*$>Bwby{Bo?y$)1*R_$`QCSpW_jJdnHDtk^Sr%Ee^LK4b0 zvkDCz+gVEH%6uImhiSt0opO+sKIcCEs2ij89L*s4JB0eXRO2iev66KC?M7IE# z`PZY3vI4vcE|YO+tO~0#{}p!rUCaKp_QiCw8OA`LAeW~{`l}lH8}s;L8I=V*s+_SM zc77Vf4^6bM5>ttPW3SB}5 z%lWx312k@Y)AmE+tXrgz)&Vdq&r(!|YSjO)Nq-)jzZnai8!O{nZL9tP*6Xbp_+}hHGJhQFoGu07Cg1VdDXw6aH=}ZKT$NoP zc7zSNQMx%F!^~(t|EP3#xze@SjQYU_1qxTC<7M9G>ohydB@6%{1YznA@oA8_-*FVw z123$Q`^23oEAz$P4}_Bk;o#~}5J1s>DHl6WEzQs3+7BrjVYRKG`1Jlw^Eehd}R56RorB*S*k7YSr}+m?jxknNzO;Ul(c=TsLs*UToO| zRgxE1`*+3vrf-1mWvq499h?ffHABAC+G2f)a;y zcA3HdoW|zd5u9b+Oi`{!OTz}PzYV4^l&RJ}BTTh-xAZZE{II9tZ3BCFKwFe1xDYfP z`eot1lXT)WO1|l#H=kcO?pT}92OKIAi~KK+y(E2V{!XC(O3;6I9YqlVPN8}Y{)IpR z>xvGyrEN~x3SS$>9E2}EaDDO{-rM9^)Nb^}ivhnezXsX+a$=0Y@KHj?qK*;TaXH@z z%mFj%0N?af?59A&%Z%|WQPx+2qJ45Dhdg9H?mv)(0Nh0#DO3#L< zyo4t~AT>00_pM2)M5ff{$9TIOk>vgjYnG%z1N!)X9W3O_yl{yZW4*?6*8Xz?H{clp=J(9Zvn%=k<~T&RSF`~3g|Gw)ssGX@{$(u{*P85- z9vqG(*TOj_PWZC(N1$%g1}CohcTUAGpv8@Q{WXx13tVf%AdmFiF##Vj|HNfvwcQ2n zkY+XY-=jslTVqErGybonzf>C>#uQ9!{y<>4Vz|A`Ka>StWghH$2lm3ym#Aogo_J|Y zNO)XK_-~`;e}3%m*?{sA8GbhVWks(+NFnOnj+$V<39*{_-%I2qzYrqhj*9g<4A{KX zg8b>&Y;a$V{o+pkQQZD5nD{zx^)H|`NWcq?fWyG&L^`#X8Sso7ZHkA3n7zjP7nP1R zXmlC36b$P>h}$0l?-TBG7oj0rW&DLu`HN2dHr$GsnUENCo)QhrYgmN8&Oe>Xke#PU zVc>FwbX`ND@%hD|@A}ZCK0I70fNAgB* zjm#+w>1K>2neZ-4XG5VpXH())0t$S!LT#GZl~=IpX)#3Nlmw?85;CP3*&=_%yc~xQ zFC>3o$ptE$;{Sr{%SkHO9DZII{{{#1X7j$#AAcQw_-VX;1gY?cBCn;T{mVu9U%!4i z7Qg)h7Uf^(2lt|hQvaXO(~C&?5u<<4?~qRN{IB%+FDypS{eK0O{>7qJN`4{E4xY@b zc(Jz6rl#w{)|uqcndH)Rbv?hFTKeC9X-Ly%yeytVr^XVzXT|;Rw)wC0YMX=ayZ7^r zbIXz)Ao}f*`&Nq?KAmq-e0*>Jo}m0+V2L)fj>ulycl@75*(=;`ws}frvEJwjbRdG} z3o037qXnS`P$;&?C?XfhJD94M~F_^2_|gu6Mw%@t_p; zh1ZF+Bb{lZf1*2H;cT#On{NHwC%-oPEMahO#;n2O!so;Duqf)~q@<=e^JZ#?G#w!g zcj!b^_@_xH0y?6e>UjnWAqXCjUKrjZ;>86lrCZSC_X=jPwPKN+K*=E4AAo+-9q95H z!BI|WlZpEUH0qtYCP9N=kK@S|H%o-Y#?|27=Hl;F`?vl|nE!2N&g*o`&LS0{i6JghdK>HNO7ruvRr?T zpZ}3%(OLDHRY6maLYv;wN;>NM9d*pcafH9$DeK~Z_rQ(hOb%(-Dg6lK&_T4xrfM(^ zL{k72l#mL8R1)Tm?U8aWE%M!}wvSaBV_mEu{8zn+^J0%XMyIsn@Lu{W7W+EPwoS`# zbRh;VrM8(RfrnQ;J6spC~GYz$>tp^FI`A1csQ>KELMjm)fy`3p;TC< z^6M5ZtGdUxtGJa$AMB*?Qvv|cTpiQFCw&^^7n=M? zz@5pvm+IiQ0y`AiY~-o-nqZA(kF+j-B#;vKwy$i}hI&Bg!c6EY73GL}X~}Xyd2C-G zgpNUIOQ-~cA>eu$|sU1%7 z!nmYz_IJ`3kV|%vQmj?Emz`bu=){@P{oa@KM}0p$88f&RQvIqT1;srsR08P=i zupMXw3sbZJSz-qdF77XDP?bQ^T)Ye(r|B$e-zY^4H`*B>^N-$N-{a@10YNNme4ZKAh8Rt#Omz3h5W5a;^tVNQ{b{I`2kJ;O0RCVm% z6CcQlrIz3|o_7}~q7exKJSxwDPUDudnD9pVQjtj_5g&w(q~O>gnCfL{^%i6H zHR%UU`yaujT)AatI9X{DmopRlvzjcs?g_?6hu=}2qUa(0&^Xhq8QI~e3~N1Dd#6c} z?G%`6`Hfo2b}&3pj`MFKA zrtks~#yk?JA*-JzKX1R2tH3fAL}7n|-QD-!%kkWDwPXk3$!_y2LGa1@HH!ErWbW^> zC3RH)ndkNJ0{0AU@!eb24@Sqx6M{mTi8Zv@m7Z^oz{f1>>s%+ZG;d zg-%_CZcV#5WxKfBjXLL-N;_dw3(x3egz4$0bhF&^u(QRor{5=@Zh8JlRSG>n^N&yG z@(Z2&us!3~IA=Pr|A>L4Az^V9R9Rf($3EvC&$6LXy$GqMI&vkBjyg5}G2!n;4A8$G z>oop{_w%0v+^>xG;C&oEV|s7-*yh%F%{1%Ie0#d}=zH&cV*dTX@^W+J5$5J{ZOQ0v z^>8TT0rUK@r)liEYbizOj%jx($~EUSteG?H%6zJs7*)ytg+0WP+Bo~3T=Jr1-Y2Q% zJO*r?U!*|`>R35;Xwdk(gQF7m+?PoB)8bG{HmJ|+exY%Lt(lQvJU(+o%hNKU)`qt3 z2HbH^7^lQwt?AGYtHd!oSW?jF1rokFiDA2fxsWoYO6|i|ZK^YjrW#0g|1^6GM?Z?M z-WCVs{XcX^qho?q%8U3gn|P4dnASYOfoW3pFYUPfOF)Y3N&=Lc;0}ki9L-S#Wr0URW%tEz#W&qgHu@KF8dPD@1NgEK z5=p_l5tP9TT|VGa`Siy+zhAmN8P&jn$A7JoVDNA$?&#I22`r z^DIIDbT?oWVZ3OsmUwTTktz8kPW)T70BV9kP$TD@hg$Q4PHvcl9S;#o&L>xewW>ct z>1Eks#|aZ3v}<1K-E>T&wqD(^@Kn2I9U6cDn=oma_Tvzl=L{|7cTDCA=f-Xv=rdj z51n|}$uq>21%O|ntlBczL)I z+!i6+if~3Sr|JnMur`c$)M)#OqFmX1!)$Mp+@35wvy9!@%Q9d;XjqmzV=VlZ4g62! zb-b|CS;8;dZ=hl8ppd3z6;w8`ZJ@{9>Ru-N!f?T>ugIUGRTg)hRVNq|Fu1b45Y&Lt z4{vyES7t*!#6jdK4Vz5+)_meQ|4GCW30>r?-x0CA7VRk3F-Po74}yM;!UtyGv0C6e zY15{-;Y{Qw4ZL;80q`_RFCav*Ul)sLdoMlFxZ>I+6nA7iX7B|>%l2v&+~d>r4S3@e z=&Z-K!53(NtoN)7u-JGxo-sxPU1SRt7?NG`aai&AQPHT~RR!6srv6KAz}tXuc8(|J zrT$h_A*oag@uF0vfyQ8-Rn{t6WWy2PsAO{NWUYDF6dB2Lwpao z+p(q|-=?4WeeC`@h@Xsh|EJ-RKW-pv#K9W#As!JS`Hda~*tGv0LtAz+bmtA+oRCH!9>A1v3T zikyVKFxYJa@wu-{@~jgS;y@J1Q$Hypx?)2%Ew06SOeajh?~x!?5+Jah?Ltmwl~*p4 zHL}L*0|=W2k2&X0NdP(6@6bari>a`dB3$F;X-HMc_%|b$mgUr7FqyNM`(|;c{GxJW zoB%v5S5{nJt|gF|qhoydzPYmri9%uOY{<3-{9N+$mZ3LL0}N&Ff~0&@o&|<#>He?S z_*0(5M z#?SvkNxd=&;z`y1GZXIwTwF>QNY<(ORl7l6m$>}2{h|HWI4+O2Gah2p#4W}@Hh;Y^ zx8k+?w=Nj#06!|QZ-4{kssGdSda!rU4kq{5@d4B zPjQ4Z&}a8f#7Fw=NnRvr#5|IU!h{}$9~cmCK5a&3_MQy*Th*nvE6te07WCqr=FZ5 zN3Lv|v6t^{d8R>Mt(cUOJ1y}`H26xo@vgbDnF^l7{m&BX{vsDy)~T^GyvpK*Ods2G zV$(=_Ati*8thVzLKecE4x53Nbuj z(B@a2m{1DvSqAu}S+hiVVF%4kF2c-jkY>h*W5C_vk|(7JzRH76q_s$|%VPm74XIsk zzL48`P3rc^oEdlwDHs$BA_ufP=|BJnJ?&gjAf`) z=dxg}LLp%vdz4$rWlzToCS8x#$;}LQY!Na%I=8ECQ{;r4^f!l)GEdsJ9HGdUW0fyel@8~vctwNueDesr~C>L2hAJ9C?JQfIgb?4>AD=btq35Q z>RhpPTYf=En`)15F38lhlCs$KINo+z)rl+HSZ~=)&g+^y#C~4~R_)xTcdIsA2o~m|@ zD8xza^@if90a5QROl`j!l7O!69*y;Kh)biOBBc(%z*o|L7_t8xS$)HGkf2~vpl~{2<@BfU`wy`gd1iQM0tTA>d%GAC8SyvlAcui7FLDxJ70I~I z;;|li{zoZE!k=!s<-OO{NEhwfHh%XVb~eGuK(1?k zQ2^O*%eF+FIgc6s>23fhq`TnEb=sn~o4D-+uTQ9IO<+WxZj|eQ-2-k$mTg20EZ9lW zr_KZmtS!sfYlcKV3FLZA#9_7Cg7=KQdq#%tyCBzLIChZVMh{|iX=HyOQb_Z?tHdDp zG^xcR*jagF=1^KNe3{A8I5gNcG}pue-?Ig0PZX=B>5xyg!2s{W_wMt?;n^K?7Wc5q z1_m)9oyr`I9ednn`_DacC+g%=bsv5QWE-rp;I6zk57Qe8^+QdM-Kqq{>p)hae%V=; zHo~!B-#X`=;VnQP;u^%FhLcN`Y6f&6R2`=+rpE1QM?D!jBG*{6KlzGahwq_;YNBc) zZ3(}V-RUH0b=cgKjY~Y>fM76OP2VxgOr6eC{DNO)W~4>7M^0FM)`~Mj{xgxScU(=Y zqkP`F1h%|>QjpK-!5?^0XbWQ&Qg36Yzl-0Fjxb6r7^({=(XC~;hMJ2j_X9Db0l3W( z8@j`f7^V9zfGOLx!z{-_$SE?MQzgcXM;LS@Cuh9n$Ge#!3){QRY;1;mf@f)%hhD%Jm?t zfBT?)LznBrM~Ft3tL@qBu{^aHbC$f4ocCtq)t{R*=e(5|s&w*+fex@818h%;RLgHGzxlEC(6kNdHHHJrQJO@WrkeS3xl!T3frmT{bE z*lNsd&EBsXj9BDN$pOQGWc_`|O};e%Oka-WX@6pGFJrsCXh79$(|i943VrNiqKATL zJ1tm{Vb^+P>U^v2c~qE(jVOOl)n3y+!@H{-Qil?H7S2<1+CFWx*#j{UNH1T}t;x2p z%s^b%RshzKz4x=S{&Ui4u~i4s1n%rqa10rGc58U~#bA0D6EJ4X;yY1ZqLq+e^E=sF z>@r80khIwee_iX({Rr-8zJzubV!L2A`oj71@iCj~|bQZL;`b1~*2 zUb~K~JRRdD@@xe;vt5yw6w9sUl`!VGX7fFFUr+N)cw;%Gh2!M=syRv<>ch)|v z0lFBoD)cROmzHakjs{9SN@Q&fYPGo6Pr^xi#Q0f`4vI`X83q0M)7!iR1P~&q{G;ru zRFKAYf>G^pj$(Vo+qb0qMm#l**DgSwF*FJt7r-6b5@YXcDTNejBM5L|*ZR2@TGD>J zJ4!8{KR&>9&}jpG^F6}o;N5xJaol{ctQ0+vZ$kV8G3k2&9#&UPQ;M4eTotR6v`3rOT#E2;(b3SPC4=oh?ZI~K82Y|#2YV2Ca*yYkz%%NX87 zG3`#GZjJvu2uqED&^o77(rjIT*(Fpm6F*FUqjD1BwcVd1vY*w@01q)FB(+wY51MZpK1ejhuto&K7%$$fQV zN#`wOa8R+K==TcnJ+ib@xPrD}+MUIGA;n~5=ZHdg0sK9I(8lkxK6x7iAs;^XKk1e% zX~1i8O&&gkwNfeGIwr^kE>+XmE#b2=faD+rm#X+0#ZO`Z#BQ60Sm{P(;X$+yGZY%oK?|+d{^%;nr>`Af zDxwt=2>kgal{}&YeChh)t9>jANm`Z~U;hz^J@oWbXdPFuV8lks>dx?#=qvJgoa7pB};JUGvXV z4<+zqp@%`ho1h*?WbC}9o$86W#uQlx{b)t#$1v!w4f$B}P(!XSq2B2@WxNcB@Uv7h z`~!fnlGq9Vdc0gL8gbmT5}SMgp|PM}k-&m9I3{mNJYOX@`j3X`bMmKuY!=MiZ3-$X zeZv|+FtR#~a`R|^FOCM}!1--fPm>4rfUL~rKAponkdgfd5h+_nT6QRbX86>=3P>Ca zS3y{{rUC~%#8wD|%T8aj~Roqd6o=d!A zYzD}aiCJIl{N~L9lBkcOzV}{qZg%ZFc^Bw?N3}LO9}vw3mE$3SbVBa^t5gm+@0AzI zb%X>>xRV@<2*Vp&m|8;;+gv*8nK=1zBN9x!(8QFL1Ow~$T^CljTSg^QA)>*Fj%$~0 z>~kcFQ$QZ<*AEPGi??RIy5y74BS1{ zY%^Gd!A?!iFsYuwslR!$u8={u*9pBcVoqPBOBPqg^O#b9fY)u(7cykQpDvr&}sXFK^-z>DH(V$O35QI`(u>zvkX&7U5i}K}d6} zP@AG=M`~J_LLgdLX&{?%m5`>rkQ&;Fg@Bm<=5V)raiAr`=H|JQ{SfPDmzioZc(FgM zlI%pRw`l#))dsfV-k2sLQ^P$oI8DRaSPeOwJc^3C6Uq>|iK4+H|6vEwZbWwwxFX!~ zEQ6^nr9L3U%4a?P-L~zVQsPHzBBMd*&j#+e-)&__?xA!@tr-ZsDlalkK!Rw6YJfOg zx_Ud3)ylCt)IrVhB#_rWIFx=aN}{?o-wMcqAGLUI>J|7%^9W2DTQ(lGh!8Qv**>NY zTFfBm)wZTTZOUV|3B*i(5??+h6~m(Gn&{CIosRjF2;CyBH(cL3B6C4au4p zeP@^@MfH(I29D&0813gMx_CnV?!n31iFHEmu5HhE69>Lzk_B}W?W@4L_>hFt({^`L z=UF3Rard~vV@2>J#`2k5?50wO8Su!g7~FG&$hN?>4b2sY{@Y;pNqM@yA0d24iamIu z*FH}dARGhNWGhkKa@)}uLXqU2rUR`^^EBlF6Il*S9k-~>a!$_RQs(BL+JF6^3oc9D z1HUV{mdEIAW(5enEpbkQ;6*>L8SGt@F!w1>#@g33O-)?PH=9uQS~WunZ2zRQJ`pe6 zF;qcInjxEbPD9^ORZXo*AsprX4v3y2q>%}ddWlM#-85zw|H_x8-s)AifvMB`g;6IV z`W@&-_co<1dBqRnl`N+sAiJPB0#UnYEuW)Z<{-V7{6-xWt}XYaGCHp5m)oIZkBYB< z#sNzc37ii<2_m*G$zU}D9h!Um*?Qt*LmQhfg_fPA5adXflrID*V=WdwN3rx971Ws7 zJRneB1q?Ke4XhN@hP8E=LWGec?|MFWD2w)AkwLbwn&swluU%J#K$w>&ptrv}%2eRuLGRK%Pety^=`WIb&pRRa; z#N)9=SF8PCH7(yev*a4*z`&I|lsacW8iCH$8iT@cUgJB0IjdTJz@OHuSBH+2>pSx&Yd1Zn)&VVOdvYGMcV* zCU@5U-i%p8BgIUcorqWq{EQMh^Jt$ z0xoPHEZHiK@R3OV+nnPvYx$N6@wwZUzkqt<6u7KQ;X$KJnt<8j9_t7^mx8@|ytxQs zFpI6&N=03Q+?&FK>=>v5w(J;{LRm@)ywcdNd@jn#h>xcX&(Z^89Xf<0>Q4L>`HAC6 zx>u4E{v_8JjMc_)3Ki*(4O)-YArZpI=oQunxR%pHhC%xcz9iJ8=lwoi&bzf57knVl zRQs$8-tD~r%Ne(!xG-FCLUMcPBk+kJw1GfEin0XspDW6&S}1edO_=5x_osO2l(2~v zYwOuL#qWF9H4WvcJVTpflbfNUAErY%(}7K!$NBfXPahd%E*Rl1EeWuf4Rlw+qZu8O z$-jp^ZDnG|q-?~Ie+>NyTe-V$r4h=H?3Cz^e~k=cKu>wp(rvA1p)qBf8$>O^7ZZox z$p!sMr)rtM8t)K-)Ef%X5Fu=;ruyTBiq?R}f>_sLur_z z&I`wu3-=jc0>-y)!o!{cV1`4Ao7zF8JWZWs3+9P6#X;d~h%V-olZ7#xq_}YRMIQWm zE-5ue`Nwm1Ifai+q+G@|?V>>4dQaOb&qgbMVmeM8g!bAOX z$u`U6K4b2TgH5d$D|^&ng7xWeyn#ZRjo}1cmD5~kjxl4B%L@)((Zb9!TX8gfD9PZ7 zl*6kOh%8E5ZI?q(y56$zsc9BiJ^I`-jq|}-LuRoI{c`hpM0n;^!O`LigK=AjFR8avI%i3ezZ~$>V7IPfNJ&iDS_} zYi6NE)N=zG=b-&J501){@e< zrC(=8dMX1_2L5KfO{oSeut*9r3!ir1hxX2F07H^dXw8h_NFOBDWU=8Yi>zgo3JbJa zXeP_{!4Q;79J9F~wj@vaizGgj++cWClia4qc?{h2fn7NJlsl8{Zb8h#eWJZ_GB^m? z!y53~SC9Mij`9I$(1fuF`5+oCK>|l#7spz!I68R>VwGgQ{ob#67@GwBYf(Ks%YD=; zdg}z|h6_h;wbR8xJo~Z~<_k+o)~!+SPV@x|Z>?IN{t5FB#grqp&Gk0`0tg!>eFZp~)W@-Dq@@El{l{ZX;~{%npDP4(v!kMWjoU>%NoabPv?ltK9#aN3{S|WEs-X6hE{le!Fv9?8 z0Ro`n4Kb)U&r=4z-SYhP`!cZoffY*$*0>13oMH+m5lB$uRI`UD_+(iy`6tX_+Beu; zEQ<|<&j-{=W4`f6HlQd(4o3zR10SJ9V<^a+8J=GT{`T?W`|blBOZ3mjkN)(4H+(~% z_K86Fk>E&div%C6TS0F87fExcxv9Q=Udbn7Fxx4(HJWuU9{m36Bm0botT*M7z|wc_Yn&@4I?T11xW-p(y1OV@?T! zp2BO!6yl1tNtcBGxs-p4`(H_#WRly^pF+3DXBi67<4IKp7Apm2Z6)rUT~xp`Q02FddrT4; zr@}@&GV$K{(kHms0Fr+HI@u3iURP1~rI|1YaXk_{*0ZHoJhN0aoIs91&>Upujo)LD zqK9h5EmYfr1aheefyd`-S7wAjuM=Ic!FQJFWY)ZfgO)oqr7DwwAO^Gix~ZhYRNEmrBwQkG^zdY z0vAwR%z8WH1dRi5ymzjlV9>2v`{41&dSoA!Fq*$PMd-Wx(bo^p4vLtMwc`Wq^OysN z4_=PBX~rg^K3>Z+jqa-vn{!0KNhh=j_2YK6j8_(yab{Y$G(JE_5B&(HFnN1rtj7`u ztGm#bhY0WLu($ppqmtukr~m+{WG2f4nP5WmgP8S;JX{G(ME#x;JAzMY=KKKak_{I` zjVitl!#*hfa`W>8zZC1E3XGBHFOaU2Pjvp^OFtowDhmXUrC&%6wqY&>*j@NQC)yk6B5V~ItYY_f$3{WF1yI%xHV5(Is)x1T4eUu7 zUhtw&*a!=_-iW9y^lDt5(T#wDTZO$ZL~qBhao$+L zB{N6#eiuvcqL~4rNBG>oLT$UKhoxa8ukm2d*DLJSRr;!}i-eXen{W8myydC=AZ;2W zEhQgZ);-2=Jrys;;z8geu(0N#NK86B79K-f-yBbtt_fsv&O@h+NkA;PD!_f2y_;{XvJ)7J zVMsHjukJJVA%l$CIFAYUa1P5cem*C;q>B3ZA`x4uA$&s{e%XC|G02-6uy9W*(?%pQ z#w?;ImGeE4if@B@TxQaYNfnqdEy%nsZy{)#4hTuNut9ij^gwYjD0K3X;z6Xa8-Fo z=9g9gqH3&&y~&83gy5h&OZ)uB-E&UCtpc|-Cy7?$6ogAcEi3v)y+~FeZ#14#u%9a4 zgM?sz`a(0@RTjYX?UI$R@D;;Rb`Odg4f%rImZ0DglBVG3e6GBHIAQR$Sw30g{%=m* zaxI|p3N7|Fg_Uk|pf+>DS-P7|?tI45 z?h5?Ponw4vm5iX|hpLdN^ak6-Uk+O)xbit;;}1B5*a^lSU6YMzKXq@q^r1gE>d=Sr zoX&e!_E>aIBvK7aToYpsikQ9SzPQydVnnTqLzp359cR35Vs8SOq#TVVJ-;s!{`85L z?U2{pVLS$dl+&2#oQ-uF=i^N1z*j;(hx#Til*B?D;NxL|z&Xiz>-`GR#m@kGbkzs% zGm|I?>pRIhe+o|mC^yg2G$YDg+fI#YtiFX#fX+8B>d;cu9?@}QT;kb*DsuL4_*1jnb z+|_xM2NK_!YQvkc!@y;}{#9z&=yJLKyeWlehh|e^&2og=DpI{v)e$)vkNas7Ar6-) zL33uKA@Jow;X1}8PtH;pJ8RDou2l5r+kiNYwL=gF_?_!|bZ9H5WCNyh?2DvAABW1g z#7Bo~$ky3fSCky{K3Ct*edUP%q9Chy2$@BQ>D><0Gwbwr;@ngB+Z(FZ1dky$PmFZ- zhpP8!vm+5{!h2g1hZb107tVMyidnaqqGEwdWz@j~wregl2+2dh*Vi_aIu<@#y!)b1 zPE1x-qXJ}T+%jY}93mBw!8bP3E#jzKP0EsVvNOWQGF-eXT?V8h@ifwN(&-u^)&*-HzZoZ z8Jr#2Z~p=cvl+I~qpA9W88Yo>~i0U~3`)U^&lVf9$nm%T>S4C93tSVX+Qa73pd(lJJoS70!g zV_B>Nl~Ag0Z6bm3h7>vYQrH3${MUoIdnPB~sc9?u1vL$kkg6xl^0YuPR8O!(M$%GM zP$9F%H6@dKl?Thg(O9EgHuc&)y(26@vg1y)2lskgL{(AzQEvC=-=I0PfPTi;^B!Cl zlexK2WM$Lw93V3Q3e6*R_p*gtx&RBEq^{J^10Ke;S&k}C>>0{j4&uoMqheRm$bg|} zxtE=Cd}mO2n~OgKep!;%Z0ESPvnt?`bWawNilfpXA=c=<80uYX2p#)LA-vDAJYB83 zoV73B-x2FqfqEWzL%=#E0PzGl#d#Pq)k)-zoPB;+UDVoS1jo~~Jqa&Bbj?=*`kj@dq4 zt2M&4{wQy&nN_e|_jGOkdsuB=eqG7v#M#2rwF4EQ`3WTm^ry-W<~5G3j4yiW{BU-7 zkH78ZtW|KwO%2vgbi+JOfbFET5*EO9olFuZ+cBMeIi4E~!$+3_v3*mvPB{H&wfYS* zY_}=b0I=&io$fpm$DlD#X(vDpT4XHH6ps}f&31!jN9kNYjfF~LXUc{{7cw%oGnQ8j z%|GZ{IrsQfuQly@2Z)g=I(Tzh77v?iS zp<of<$CiCrha%OAa%SN3nxGjBd z_k}!4kz+K(>$k)^Ul$l1TLQoAFPJf=!u5e5)67we4Rj$uN3%R)te94Uo^1E6<#PW1F|K9qr&NZ%S+{(YWk;e!^ipix_e^v2ywQWw zv=k6OeLKl1NDt zUyIMOB?hsu+@zpA(5JOil5yLy7K?uYKz+P3v%F>chk+b}7dLKrN98g6U*GR97fX&cYv~MO&`}26kmTwQo2p z;J0^eM9x`84KB$Pp5Q~kf0zYDQ+;~{E9)NaXLGP?OY^Qfqxh=Vq0AIfqJ=l>f>1LK zspxL`)7zph1^J1R(=YN$eN4b4;M~Z7IGFMPvQ(2M1qt#IcWi2zVDC}_Jxo`+i$)ec z_+SQ`{%ARGuKg0`u8eR)?QFcV?+}Etg6zdk>TgbEpW(V}X1V`kD7mPsk#nG(HI%;= zhatAWeLMa>BSm}7h)juNTM7P2p=DS8XozLSw)8{TNOo;nJ)o~|0wpF=#n=cVQxU-o z#}lUTB9wP5n+@!pcKx2_(4=BfVSiLJ%A2}W&4>nP6^(eT20%D)argZy*XfuAd zltzka@|#nWXZ>&kL*x(4fIftlX3t7znYR)@)Dc~PI}8G)D9a{nN<~7&99BH*M@9YZ zzAQsNEhn$08lXjUt@;X$mH8A5dUg4w(765aqVKSMV&T9bmbK_*?(=IGeYk-lHWp)5 zS0$?@+d&f?qz{ky#aewzh;IFqL%Yo)?itGI)e2epp^{Z?{L@a6aQ-!>?WQLTU^9MT z$D6HHgKRko_!43R6I8%+B*U zHuOHGZAb+Zaqy8UybSZ4?k6g7E!dP)!0K$g^Ooi~prTWW@S z3Ifj}Tqg!QD3iX$Azj#VDdKovp&&?!AxhhTwRdJJvjhI{J6bNB>QOWIfkE!Sy^vJQ z;4}hYi?EjW^MxSqHs|TzT9t#5q`z?$+JyTtiXPdp+#}yz9@Wtchf59}_>?Nz?-vHP zgdzbc9mfgS_?7R`WB}r9BQ>+3nx-e4%9-VS{k)p&Tpt5pGDm@(0XMFL;gh+^ae$~yH1MyzSf;d|KcJeK22%NaEk(*gsovSL4`-Z(w6 zD?m$@oXD7-MZ}2AhyHZT;yvoY-PbAAn-)=H3;?Al)$>b8LouDw+iV!Cq`tI725gra zzrD zE}}6J($ScXrjMbfGiHc9_YOiry9=m#998hSu<}+lqW@4u zd1E$MW3ldGrqduB`yoLdb>{!H^^MV)HBGy*?M!UjnBNh3V&WCBm&H$$^0*FPLBO#dul^dCjmVovqzfm=682rr>M zfz!{00rMln(9qNW*pNQz=*4E%VGj#XJ54Gqrk1||X z-aACw5~er9_$mZU3i~N?ra)hdA%J#jmzOA1pikTS$V9|X!gG3J{b~9R=I;93%nRQH zA}ch2kTJU2^V{m{T(AiATRS0kz15I@9G@Os$uAmRH-3EH9_Zv|`T(Rq9_B+jBRMlm zs3%q?hs$1)-~)d?yji7CsGjR4m|god+)i5%VNQyj($F;yo^^?ECu$Ym=jGv^&+nlD zE!}>9g;x|7Sz>|P{_+hmH(W?#s(Q1i*0{9xdB*l?zJkz~Jkc4>6n5OM^0}t&pHIW> zYY8rIm=H3xRO4~OHKS4{H6z}SMvrTp6=QVM7K_4*Nu3IthJFh|`3-fc)HQm1yLp-Hz^K=qDdUOa@ zLK}K3r=I6n#>RBfZfAixIp3-|-$}p|&Ha^lQ`cqar^u|P+B7&;=*!oDwNz8f-Fzw zMdng0bUCN~n97eEP_)Mft$$vpTD&h8f;1v&@Mz;Cv?p5mWCHH-d$H+uDXPpD?$)Wn zTZ@))MC4&Ok^%Ea8`eY)>X6zbV#{wfaI4aD*u2%RhB{H9ta_yb%~?`E3v6&`TCWu! z>0jigm<6>1GEemdm5S6(c^G~AI5Asdi?~YL8m_M>KF99GKAGkmSP)8^B4Q$WV5F4Y zzIh%sIT=KA;zm2>;c{}+-F{}lk`DvFrNG-t%w1;ZnCC9+AM#=w^@T7uGIj5JV7gB{ zaoavB-<~%eGHDj(uK@TwT}N6qoX{iB$}v_rd91)nP1{1fyB@SwJ3+9tRo-wD)taBw zvc{Ye_?s@i9YgCWegW&<>%AthQ6&c-TAPBpSTJ`V4nixsj7@Ps}`( zy7_a%5H0w@H4`FhTtZGrpGg?!1oDRTAnJ`}nj?xL+L!r=vu`klwN{Xlki9pIc#Ax) zx@Eyo@Ot_s;;bY!gn}FOqdfjOjJut&(0>a}ud- zG=b&cJQf6#&WVvUMX20pXWUUkHkMPu8WLVx1*}Hc>V3G)o=Z463+0?(`|8Utoo(^=eJ@w?mCj#aRrY zTPzKdEbBk4Sq#Ovt1D~#29b1QbtNp=fJZ_wKJs4B-Wg#f8nXmv-H2u4R=1f%l^MI-wJZS!Fq7iLH~CQco_u9R*9ZR`{sC4?wj0 z<}q+hdrUX6?C`34>qqY>3>06R4!HGe!PJO2H&)RL@A+{wO8`8hxX6YE8CYSGVmS1c zQF&{BL21Y$+$epC3-k~A(h5aoe($?UUHptzROI4<7&rS;7FuQc6zbeoLJ&A9HR9By?m zVE5H3Nz_N7WkrKZIPOzhQ8zO;gDmBqR2XC$8TA68!Lu)Y7X`z8;7^eS=Mn0Ue_6@8h&RXyaUs}DWP)`$O$B{mhO&_X|LyL z4P~TyD^QRajA~>-quaEoeFd+7=h&(w-wfe7m{6L)W|FU0-!~qt5>&m1( z4g%y`Bd`Un>g{_q3Y5t(fsDuCkl7aJ=>@tjplYNM%?Kjm zH5ixgkk{BlhX+vpKCsE02om|R-Z5sMFB7H-f)~Tb zF_3!cF$fy=`Mf30gAr={fBILk7ObsFuO|8yXp!@wdQ%tKRk8bZ{m!$&6WnkbWD)E0 ziwcPv%MZA}8la@(u;lp&&3z$zBN9uTAzk5MF)UnJH>a6EJP0A&lp9w{3p4UAr?ZhV zP+5qvMl@=v!0DS{%zmNsiDY`M^+s~owRFjFGSgQ;pKbspwpPZBE~!SOgSgEb07rrt zN=PA7UH`&Y6fPK@UHXak_o=!x;TVW4>Z*v&X0l{kOYbC;lCyyPdi<0yvY?llv9N{A z;%I3>T(cyqbk9E#sZ&f1H@qTZCVp*rr1p>TM3$bqR3mL=k|nZyaQvBWDJr+@a4igF zgM6PX6VGnsMr(=5p36>M`?zROJPAZG1iSSMC0R7VZ6arOe3H%JPvf8v2J_Gd(DmcS zEHRIbF=kUIl_$Q=VC$+V4Nc}H(g+Cb6;G<5GbC0k&ulcV6d^1#%B_oxcTe)5wOlBT zK;8Uu^8V=jK5+0tB?WXjS{#t;!_K+K4L;Z*FKOd})ua_6yP%^TG7eePM7SUZy(ASl zhQKdj34&(Rq%IxPMJPP<+>(Q|HC$FO8mQ;Yi6t*NJguW*D>4IHLA*X2q#xC$tuuEW zpNvT3Gn)2t4j3G17Ez_?Wwgp6SZ>}~LLd{}n!;yIwD8>kaG%o2{MZ;&6S(ZHN&A50 zXE}&a@7|%8dhXsMF!&B1kh%uwR+iLMS$Q0V#DWrsuF^_I<+{U+qum7-5xR{K*A8u^ zFipd0Gj;2}eGR>=S$R<0GMhE00oEX~+6bgMr6da0T?NhQ>%T&O3?&{VeqhfTk_g>-TI6y4SQyH)RMV4BzSxFW{%ZK~Q){-lu-SYHL){O1P*-LYdNnM~^ef&#vK z5TqrS8x!QFup|B_B6~2`3v=*<*C6Ag#(70tWHS5X)>> zMZ?ahPsPWey$^Mg(i*ESA19R!Fa4I@c%KhuQg1K))(0>Bj_`@_?=Csb>n(Tzl#y_RF8t*z`8{yv`urf<#5qMfL0=(j^(lKHuFNlhq)DKa?b!@Jd%1)-1L=Px<3_~?g3GZ*?NP8$TO0%B$9_`GW*i^W3i*IUyxX zNyhpM`8g&o4s%W#IlfJg@oJliJi09T;LVE1VnkbDs;_Y^#QgJe1Fa+XkLWiQkdMPR^LphxXzG+a-BWRDs*df2>I<#*Mn< z5BUeV6r*>x0l0UUUSG?L{^9Y%p=gWBDWibYT7J@X$|ukYLRTO@Et(HV;2kG5m9;E4 zEZN>oFSL91lzt+BcWZYAmo2Te3mp6U4aQYVp~Dbzj-3LUh@&&v&}7+yC{J zDnacX;8UB~eHAbv_Z{<4<^?%36^NL=qh0c&f*6X{436QI5oka9i09-d6T#wL#TFHs z{AxDNKA|^yl70I8xrk4gFUR8^R+1TBWA(ec zN$C~h6@wUB{>mT6t?z;uXMdnmGD`0C-v&{8Jph@6^>Scw5x0-Hkh9&M{zHZUc3GPi zl~oS`M=2Ygmcuic=cN}e>*JPLiT+Z-I^PJMUJ>gM3g1a_>tru{X^I_@A~ojblZywy zxef1bE>-7$zsGqoy;C{59=+8D8q|3tGgp&3@h>SogNtnK`kz}GDXHsL<+$=%s=x2L z1YZFJ%bP${^nz<}kYo=bJEPq#U8mw$g0ZN>;U7F9kn2^CGWvd2vw`;QK82w2fBdu^ zx~tF^JJv^RkXUp-2~0@Y;C`o7P3~%M_SUc!ZQQnv>aj*0q%)6R;(ylXnUb3ctE2h# z5AHG&FXkM7#jkZKKO8{Z$~M<54n-l=4^XRqa^Yi-H0a8pl-Q($49aJFQKm`hP9&bI z3&R?Y1+c4=JB^}q8k8F5wZ5}ArAaqSeOQft0|O$aOD%SF8j9#Y#>_D(?t7fXOLfKE zTfI7AIuKmO=>M>cENO&Z-TcfkEc8)P-q$mb!NvS&Fx0;%7#8Wg4DTWd^}hSL;DLtn zbL+Bc5mgx#W}oR}G|-?77knrzrq540qa(U8t#vioFHVWuktubK4j1+c{IObq-rEC+ zrt(>Qrku~0#G|8`p+2Uj$GKKv;O)qlPQGM7p~{xiw%RF=uL9zU)K%N^lXtph)m ze0f-<5&Vk@F)i;ZE&_5CjJ~P`G`YR}?ge@{!T?&O^-cEmh~F;KT&rC>znGG2h;Qqj2qbp<#=e&j?L)3Q zU+?t6j!|TE&D^i9SF8&4N*%X`@^A#mNk!wlWk3Rq>OJ3f3ni~spE03(FW;Xb1^#RQ zO^pbaU+94o7+GjXvvOe4TjJ+7`Og$cQJV!bzR_roaF80AFE#MfIQCmcUPYvg_fK`f zEjMyHN7Ypd?%9d&O^CPDe^K65XeBjB2p|KgbcPK4`9_?aYz;D4gaF@Pjx2`JhRhXX zk98AoYx#)15}r*RF3-bzACa-B7(e9*0Ly)@^jufEHBZ9?J*Md`j>jwS8`WX)!+kKA zg8Xp+LSLdIzjx$fN_7(e`QJ`R@In0hj$8Pqki?YxaCuuK&dKr4=2p0xwOO^m7|oQg z)}s1Pinl)C188wk+PukLm-k}%gyF$wc^c_+!KkPz-+!j1z#c!_*f!-4N+@1~C#nP) zizj!ktMJFG(%$3rTnI}yd~dDp!Y*x2|y1T&gv`Sz6sw_g8yBb3uSH-vcT1O+*k8sjv_1_>L^+=i?YSM%yX(W z#(q<0KqFL)P{Y;_>G^8%SSs60X1w0DRp-z`ef0Q4cWdBqYC1x+EuXGi*8xEZwavMi z9jGTXI(XH0MMFuW*#$aVH8>yEaH#a769E*&r}iA_3C zO%hZu{_W!PQM7K1RxvAMj`OiS5mD?fDM=+wdKu$#%=;(DJPd87Us)4a`_+{yk}YR} zD6X?+S~H$e+_nvZn(p|M)qpKY>IA#pBy;*|lONZ+lid0FCZyS5)-2&e{Kc0h!+-jK z{W8bWEyhrt6~wSvgA+YZeWt9{A@D!Fg`q_E=9U@V?RFWI!Z9sx`&8Tki^*9-#N+;m zpmt|;{v6GFOE6GPwLC<8_lt~KM?{80w~v~*teVLc20n}7&7)bB7#wcFL$yGIyTB6a ziRApb;e@n}*10#!T|QQs?84z@)86qCXCl82nLO9vJ9e;*!JFt|Mx&m=)HshCJkaGr z8;rYgFzkmgu`0km0-)wq_-wBbqsBB4Cmo25!(5HIwKdUv{%8I844V|3t87lD(F0vr zdfa_lyUIHAm`*?pLCqk;EnK>;)=`kNxUZg?odKdMgF|)y;Tso2DxF-+ z9148qB973OF{KrLeBk~mWEvF#9n{owL;8D5sy%W}Qx{sCx#OWxcrujp*R3ufK3Aig zD}*Bqa=^tAdDBpfv=w)(eC%|Guz|63mvBP#B^nke(joi=H>1tSIb^YLu$ZhY+LsxB zbm$j<%m|9cYj3MoM&|Lw%pGZ5gfv_v@Qps`p;n-DT4&2)E1xC#1(`BK@@WX_dim{0 zg40ADwfxR#{G=UUxb5gXEP{ov4m=zSHV6Eoa#p88R`N2z>qIGly?E{0wUgddg%ulV zMx7E0$iDB1w)f7(T0J}fOG-RGL^H-d=c)kfR}31uPm%Y>3XFay0w8rE6tY*~Cj35H z)C=||#;w#NHe2_ldm`bE!UszA}GVv}wrFBQWwDLJ*4q-JS#<`sHGSZHILWzG!u%9xUoyfdTD8l+w0NlI>f% zV|l_+nAUE9FwHTShv&t6I|Wyb(Enm-{7W3uH}M=1^Cb0iswRx=beARlK%T&^Lb;@v z>F$9x$dIS@nCG6sjJ?pt*%>*!(Rg_M1b}25vuQF zm~RAlF$>|jX&=vxymvm8^7=2&c#d#ofPj^2C#-KkKFwNt-$Rc4eGmF%(<)26kn7Jz z2+8Lj*?8v}P$^??gByVMBf=&=vEHI_!J)l@nk(QQj2B;*j|lAe>Aj_U~D(gJJ2!ayf2}zLm-SJSe_?a|Z zqLL@Gg$=1P8RS(9S8PZ?cJ^d7U{v^Myxd(o=yx}(IY0MYP|P;9VfsjPHI#2WzMH5Ko#F zu(S7;f!L4m6*Ue5GW@@3>2&02?R@VL#Y_Yq$jsw|)E5x{gfr2upB&8-jZq#1Yf^Q_ z)+6_w;f*zj%}HMMXbf`P2CP2G72!{_@_5d2$`LhmqB>4@cfXluMGOIBXOBluvuOxR zsJ2z;?BDc_N{TmwKGJVqO^Go+)CVwASyJkm?;qwEPKDU8|246EVlK+kfGJ-KVdlsq zf+|imNBpcDb?yC>j|&#iy1tIkUp!%?V90*E*7Zp1u3u>FDU&pRil?X-6W2Z^qv8mL zlXF6&HJd8XEt^nGL<()d5AEK65^u*=qVW?qM26;xF3o(4^5V7|=c#~z^E$4VIG!%9 zi9ClE3G5h$raD?zpBl+(B6gPHf`+K2Kn#o-RW4YL+p5#dFccXI;Glz)v{UR`CWoD}Gwa-oD?V+w%b2lapygEv^L_2pH_b*$`1kdbO$&HJ{R*4H zs=1Lce%u>Tw9-bd*fZxzZAY-v)*MP% zW}n0+;r{lM*3Wvkk75@>KC8lZwpp5G(+;b$r6Pqe+V_oeIqcigkKc8hB(69w5YD&=+261?JyfTvsZ?$^LC&NoEnfZ zyh?U$(}p_9pieZN=w&9;E5=5zKXfZLYZqo@&_{K)IhWYl8}lIBaHWWRLh0Uk@G8~< z`E>zeRjN)ln_5!MS!1uX7*KDnG4TW6( z=3i&m)>Ga{o#^zeA$D6g;E}1XEU~u`aDhXD+9@re7d+ZGkR8v3cy$(bK8-Yk;UUJW zxLX+%;=ATc0tL+!+0LQAp~NXU82+bLFMzLVZP|b{dx~`uUD+B)q!9SnrPRy3-kHV# zzzo^m?9<+w9L*oH>K;zP0eLt4&PQRd_5Hoi#>9=95d&R8Hk~)E3v!<)bMngV*2n8OJ>bIdX^RVt1T*S^pR9$&B5S z*;cDMu%)h%Iny}W0k5CSWE?4>rjYsrqL3i^-Q%b%^m*-XXyvo~)_Kg*iZ5Zm==q3p z!N7;mALSslT5G7uB%Ct2yzYg*T$|=njdTL%{qU~)?vrD#=wOCQCmkK%b8yv$&!q`W zt&GAw%QF64Y-b4y%)WwSlUDgS*D@MZs)I9?AOK4@Frgy(wsdRv_@KSzU_E4uU4&?* zMi_OUr?N?b9A z<@rpO!b3QFrpAoC-j@hzUQ>dQh;Yp07o=<3d^!~%u;6UZtA`JEBhCjm@{zym{$M2(MrAzO6b zL^toZn^-IyLWBrRfmD@JszXUChVZMM{YabTWs%M#K$#Srp_M821z|!hf z;ck3lw)AXao?zIfQ5}=MvTc6dpMiW`ye-N=Y#Lxu93rYT_5UNMT=(0RZ^WupEzMo^ zM+n(}5|NwB#DVnx;;BJN@Q2+c{==pGU-_R#_CFGZD?;8Ht>CMw6>I55wQhb5ef0e%?Y)#H6jm??DdDpqQojH{|Yte9Y86oxPnRej%_vn5cU z?3CaMNn7;EiX4up1{93VB4{6M0Ul1WTH06g#Hr<)o2a!TnFTU6`$3UTf6!snTqt5o z^yy;{X#zCjq>a!wXz!5&_f2sB#bC)#{!!DBdnCR3-#|yMEeDg=X6s3vaz=AcQB={H z>)>apUYTK)sm@cK6Zn6g)iR)3&={pPubrj$J4lF5dppeE-q>6o!k?2b?*sI~k$2E? zI6NW=)If1XCz7|bu8wbPh^yj_@(TPj0p{25?%IbK{D)}5qsj&D%2d*m@jG@)rQ-c` z$nNM_+ww;^&S|!Zi&|VFbTg}n4~^VB682Ww&m-Y`b=-0FjLUdDI$swofD0C4j3nV+~+Zp_4Hnnn_qwGkgcJ!e&&xj!UadJ zFVp=P5^%DJ*nRG?GLXHYDc)dl)U%U63X0+l~HJNuNizauuWS|VK`P#U> zYoC%Z#F>tyE}1nWfz9^m6)9kmI+8+;7xXJJ!~B+e&-GM{m~J)3-!o6#ixqYJPoA@G z4K$9smZgH-{f~4vC_jN5W%0V#Q{@tMS>w#2GUeLY4=2gC0TC%bnnS%oT(9x)84-D0~x%2vRGb87|$0dyvI_#0g9W&~lkkPt*@#!+k9gw(Dq zlWYlA@GG?9NL0kD{)n8D2jJ3r-kTy~XHvXcabZ{h4b%t)Jzed3WLjMV6(lIE z4Iw8*p<8T&7uXW21yK0i%yay2SK&H&kIVXTuSXLHu`1ZSKJ(}r%*K(S{# z9p%i1EW{7BsQ(%*cf^++6pxT3qL(ewRUj`Pp^grnoT5d6?;gy8`F<#+c_b7uc$9fV zjKW81{hS}Po21;@$g;zuI;Dbsm(dzQD<@7osH`gCtUR=gb}6K|`Z1fC(mDAK9?SK- zJOEuzT*=8j+l7Y%nb?2OlXEw_lVBsHGPDM|UMpF6FG9rLIlzsly?dJ*!Sdm`0B*Bm zzFkriWV~r;Fw|36OI>Ghx!wH%dojk-;D^OY*<0<$eZl$o(NZ}a)Hr!NMS!_`2&sX( zhr?r0=yL=`XGXYC>+!sFTB#$gPjT?|$ibl*J^rP4U2sIKOLH=?!J-Q|Rtet9J}9q? z;5XN-l0UhY@Dv(hcYfF)KC@wOrZ_qXBsY$iu2yjb>W|;?w0}qy;}IvCXEiJ7uS%j5 zto(|bPL=}zB7-T2jt<})J*(L$apg{JnRjH+f!m`djPgW4)D$>}Ta8L|eaKKx|KNd+ z3~`>5sO7vmu@J*q&NQ`EsUkG?dzd1Zl^#xR`+X(UQgqpND6_=_rmAAw3}-82ASTt75kujzY_ssbK}B^^Mem-aI5R}Q2gLcu*7 z`pQ26YAL(C*dqGO?68oYwwwwh8Xk!&`o=1f)&k^9wG6aU)v**gW(_gI(=Dd>D6I4s zdFr?cV!s`mhpLeiSjwk-Bzn&a7TL5K9AXMjNoZi2_=1DrVd%~dVv3*aS%6#4Tbo-1^Isj={R8k diff --git a/docs/victoriametrics-cloud/quick_start_signup_fill.webp b/docs/victoriametrics-cloud/quick_start_signup_fill.webp new file mode 100644 index 0000000000000000000000000000000000000000..0d177007b535b87822347f60449a7e5d87d29ead GIT binary patch literal 110576 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


X@xRhiqXlJ{EKTfS*WKC;658-~J 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 z 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 kv?#XoLeZQXP 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�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 }ZXHq}v4Lpu^=iXe^Bdb$@J$j0Vqh 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 literal 30880 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 diff --git a/docs/victoriametrics-cloud/quick_start_signup_success.webp b/docs/victoriametrics-cloud/quick_start_signup_success.webp index 4a733419484a60cea2e467574f52f6b467cadaef..f57d1673ff45d675a275d0f3c696ba4cae59abd2 100644 GIT binary patch literal 105750 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 Date: Wed, 18 Sep 2024 01:30:09 +0800 Subject: [PATCH 040/128] Automatic update operator docs from VictoriaMetrics/operator@fe90f57 (#7026) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: f41gh7 <18450869+f41gh7@users.noreply.github.com> --- docs/operator/CHANGELOG.md | 5 +++++ docs/operator/_index.md | 1 - docs/operator/api.md | 2 +- docs/operator/logo.webp | Bin 8072 -> 22000 bytes docs/operator/logo_white.webp | Bin 0 -> 40068 bytes docs/operator/resources/README.md | 6 +++--- docs/operator/vars.md | 8 ++++---- 7 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 docs/operator/logo_white.webp diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index 35d12a5b50..d333d3eac1 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -12,6 +12,11 @@ aliases: --- - [operator](https://docs.victoriametrics.com/operator/): updates default vm apps version to v1.103.0 +- [vmsingle/vlogs](https://docs.victoriametrics.com/operator/resources): makes better compatible with argo-cd by adding ownerReference to PersistentVolumeClaim. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1091) for details. +- [operator](https://docs.victoriametrics.com/operator/): reduces reconcile latency. See this [commit](2a9d09d0131cc10a0f9e32f0e2e054687ada78f7) for details. +- [operator](https://docs.victoriametrics.com/operator/): reduces load on kubernetes api-server. See this commits: [commit-0](a0145b8a89dd5bb9051f8d4359b6a70c1d1a95ce), [commit-1](e2fbbd3e37146670f656d700ad0f64b2c299b0a0), [commit-2](184ba19a5f1d10dc2ac1bf018b2729f64e2a8c25). +- [operator](https://docs.victoriametrics.com/operator/): enables client cache back for `secrets` and `configmaps`. Adds new flag `-controller.disableCacheFor=seccret,configmap` to disable it if needed. +- [operator](https://docs.victoriametrics.com/operator/): made webhook port configurable. See [this issue](https://github.com/VictoriaMetrics/operator/issues/1106) for details. ## [v0.47.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.3) - 28 Aug 2024 diff --git a/docs/operator/_index.md b/docs/operator/_index.md index a7b1bdcb44..b43dd6b038 100644 --- a/docs/operator/_index.md +++ b/docs/operator/_index.md @@ -4,7 +4,6 @@ title: Operator menu: docs: weight: 0 - identifier: operator aliases: - /operator/ - /operator/index.html diff --git a/docs/operator/api.md b/docs/operator/api.md index d2178a87fb..f96c5404f4 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -2813,7 +2813,7 @@ _Appears in:_ -VMAuth is the Schema for the vmauth API +VMAuth is the Schema for the vmauths API diff --git a/docs/operator/logo.webp b/docs/operator/logo.webp index 3dc695ab9fd61f833a4209432ccbf2934b71b53e..bb4cf373b5e6cab1069bca34014a3a0075c9f7d8 100644 GIT binary patch literal 22000 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 diff --git a/docs/operator/logo_white.webp b/docs/operator/logo_white.webp new file mode 100644 index 0000000000000000000000000000000000000000..6b271c13e7ef246d399e76d064cc9e98e707d4ff GIT binary patch literal 40068 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

!DtnsNH*^G;9n$D8i~kFucz!$aTV?eX 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 p0-ZHs6@qki`}#$Um;e9(0000000000000000000000000004E)g6IGM literal 0 HcmV?d00001 diff --git a/docs/operator/resources/README.md b/docs/operator/resources/README.md index 88629693ed..bc7da39d65 100644 --- a/docs/operator/resources/README.md +++ b/docs/operator/resources/README.md @@ -55,7 +55,7 @@ Usage example: apiVersion: operator.victoriametrics.com/v1beta1 kind: VMSingle metadata: - name: vmsingle-example-exrtaargs + name: vmsingle-example-extraargs spec: retentionPeriod: "1" extraArgs: @@ -73,7 +73,7 @@ Usage example: ```yaml kind: VMSingle metadata: - name: vmsingle-example--extraenvs + name: vmsingle-example-extraenvs spec: retentionPeriod: "1" extraEnvs: @@ -107,7 +107,7 @@ Page for every custom resource contains examples section: - [VMUser examples](https://docs.victoriametrics.com/operator/resources/vmuser#examples) - [VMScrapeConfig examples](https://docs.victoriametrics.com/operator/resources/vmscrapeconfig#examples) -In addition, you can find examples of the custom resources for VictoriaMetrics operator in +In addition, you can find examples of the custom resources for VictoriaMetrics operator in the **[examples directory](https://github.com/VictoriaMetrics/operator/tree/master/config/examples) of operator repository**. ## Managing versions of VM diff --git a/docs/operator/vars.md b/docs/operator/vars.md index e260965675..7496ee1553 100644 --- a/docs/operator/vars.md +++ b/docs/operator/vars.md @@ -10,12 +10,12 @@ aliases: - /operator/vars/index.html --- - updated at Mon Sep 2 21:11:44 UTC 2024 + updated at Mon Sep 16 09:04:10 UTC 2024 | variable name | variable default value | variable required | variable description | | --- | --- | --- | --- | -| VM_USECUSTOMCONFIGRELOADER | false | false | enables custom config reloader for vmauth and vmagent,it should speed-up config reloading process. | +| VM_USECUSTOMCONFIGRELOADER | false | false | enables custom config reloader for vmauth and vmagent, it should speed-up config reloading process. | | VM_CONTAINERREGISTRY | - | false | container registry name prefix, e.g. docker.io | | VM_CUSTOMCONFIGRELOADERIMAGE | victoriametrics/operator:config-reloader-v0.47.2 | false | - | | VM_PSPAUTOCREATEENABLED | false | false | - | @@ -136,5 +136,5 @@ aliases: | VM_PODWAITREADYINTERVALCHECK | 5s | false | - | | VM_PODWAITREADYINITDELAY | 10s | false | - | | VM_FORCERESYNCINTERVAL | 60s | false | configures force resync interval for VMAgent, VMAlert, VMAlertmanager and VMAuth. | -| VM_ENABLESTRICTSECURITY | false | false | EnableStrictSecurity will add default `securityContext` to pods and containers created by operatorDefault PodSecurityContext include:1. RunAsNonRoot: true2. RunAsUser/RunAsGroup/FSGroup: 65534'65534' refers to 'nobody' in all the used default images like alpine, busybox.If you're using customize image, please make sure '65534' is a valid uid in there or specify SecurityContext.3. FSGroupChangePolicy: &onRootMismatchIf KubeVersion>=1.20, use `FSGroupChangePolicy="onRootMismatch"` to skip the recursive permission changewhen the root of the volume already has the correct permissions4. SeccompProfile:type: RuntimeDefaultUse `RuntimeDefault` seccomp profile by default, which is defined by the container runtime,instead of using the Unconfined (seccomp disabled) mode.Default container SecurityContext include:1. AllowPrivilegeEscalation: false2. ReadOnlyRootFilesystem: true3. Capabilities:drop:- allturn off `EnableStrictSecurity` by default, see https://github.com/VictoriaMetrics/operator/issues/749 for details | -[envconfig-sum]: 4560053e758cdaf3d11170e5bf296de4 \ No newline at end of file +| VM_ENABLESTRICTSECURITY | false | false | EnableStrictSecurity will add default `securityContext` to pods and containers created by operator Default PodSecurityContext include: 1. RunAsNonRoot: true 2. RunAsUser/RunAsGroup/FSGroup: 65534 '65534' refers to 'nobody' in all the used default images like alpine, busybox. If you're using customize image, please make sure '65534' is a valid uid in there or specify SecurityContext. 3. FSGroupChangePolicy: &onRootMismatch If KubeVersion>=1.20, use `FSGroupChangePolicy="onRootMismatch"` to skip the recursive permission change when the root of the volume already has the correct permissions 4. SeccompProfile: type: RuntimeDefault Use `RuntimeDefault` seccomp profile by default, which is defined by the container runtime, instead of using the Unconfined (seccomp disabled) mode. Default container SecurityContext include: 1. AllowPrivilegeEscalation: false 2. ReadOnlyRootFilesystem: true 3. Capabilities: drop: - all turn off `EnableStrictSecurity` by default, see https://github.com/VictoriaMetrics/operator/issues/749 for details | +[envconfig-sum]: b82e81d45e7a9fe6a06ef0a77736d4c3 \ No newline at end of file From b82e2cabc53220f963e99f594e50ead5a6418981 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 18 Sep 2024 17:38:16 +0200 Subject: [PATCH 041/128] app/vmselect/promql: properly calculate `c1 and c2` and `c1 or c2` by upgrading github.com/VictoriaMetrics/metricsql to v0.79.0 The fix is in the https://github.com/VictoriaMetrics/metricsql/pull/34 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637 --- app/vmselect/promql/exec_test.go | 6 +++ docs/changelog/CHANGELOG.md | 2 +- go.mod | 2 +- go.sum | 4 +- .../VictoriaMetrics/metricsql/binary_op.go | 4 +- .../metricsql/binaryop/funcs.go | 16 +++++++ .../VictoriaMetrics/metricsql/parser.go | 42 +++++++++++++------ vendor/modules.txt | 2 +- 8 files changed, 59 insertions(+), 19 deletions(-) diff --git a/app/vmselect/promql/exec_test.go b/app/vmselect/promql/exec_test.go index 3a6faf6de1..a3edd2c4e5 100644 --- a/app/vmselect/promql/exec_test.go +++ b/app/vmselect/promql/exec_test.go @@ -3027,6 +3027,12 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`1 and (0 > 1)`, func(t *testing.T) { + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637 + t.Parallel() + q := `1 and (0 > 1)` + f(q, nil) + }) t.Run(`time() and 2`, func(t *testing.T) { t.Parallel() q := `time() and 2` diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 54b1769cc9..49a2498b6a 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -36,8 +36,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly track `vm_missing_tsids_for_metric_id_total` metric. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6931) for details. - * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). +* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): properly handle `c1 AND c2` and `c1 OR c1` queries for constants `c1` and `c2`. Previously such queries could return unexpected results. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637). ## [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) diff --git a/go.mod b/go.mod index 781bdd2174..081fd8f4a7 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/VictoriaMetrics/easyproto v0.1.4 github.com/VictoriaMetrics/fastcache v1.12.2 github.com/VictoriaMetrics/metrics v1.35.1 - github.com/VictoriaMetrics/metricsql v0.77.0 + github.com/VictoriaMetrics/metricsql v0.79.0 github.com/aws/aws-sdk-go-v2 v1.30.5 github.com/aws/aws-sdk-go-v2/config v1.27.33 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 diff --git a/go.sum b/go.sum index a2d1108f36..c422b0a229 100644 --- a/go.sum +++ b/go.sum @@ -74,8 +74,8 @@ github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkT github.com/VictoriaMetrics/metrics v1.34.0/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8= github.com/VictoriaMetrics/metrics v1.35.1 h1:o84wtBKQbzLdDy14XeskkCZih6anG+veZ1SwJHFGwrU= github.com/VictoriaMetrics/metrics v1.35.1/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8= -github.com/VictoriaMetrics/metricsql v0.77.0 h1:eD+1RuIBQmbSPdl8ItbghxLifE+gexJxQBWKSJYwhBE= -github.com/VictoriaMetrics/metricsql v0.77.0/go.mod h1:1g4hdCwlbJZ851PU9VN65xy9Rdlzupo6fx3SNZ8Z64U= +github.com/VictoriaMetrics/metricsql v0.79.0 h1:6wU5oiHMAb0a59So5fV8nvssIfhXaB58wwrRhXf8sdg= +github.com/VictoriaMetrics/metricsql v0.79.0/go.mod h1:1g4hdCwlbJZ851PU9VN65xy9Rdlzupo6fx3SNZ8Z64U= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go b/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go index 5005089ec9..ecb83f3267 100644 --- a/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go +++ b/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go @@ -191,9 +191,9 @@ func binaryOpEvalNumber(op string, left, right float64, isBool bool) float64 { case "^": left = binaryop.Pow(left, right) case "and": - // Nothing to do + left = binaryop.And(left, right) case "or": - // Nothing to do + left = binaryop.Or(left, right) case "unless": left = nan case "default": diff --git a/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go b/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go index 1cce8cba4a..3c50b3bdf1 100644 --- a/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go +++ b/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go @@ -107,3 +107,19 @@ func Ifnot(left, right float64) float64 { } return nan } + +// And return left if left and right is not NaN. Otherwise, NaN is returned. +func And(left, right float64) float64 { + if math.IsNaN(left) || math.IsNaN(right) { + return nan + } + return left +} + +// Or return the first non-NaN item. If both left and right are NaN, it returns NaN. +func Or(left, right float64) float64 { + if !math.IsNaN(left) { + return left + } + return right +} diff --git a/vendor/github.com/VictoriaMetrics/metricsql/parser.go b/vendor/github.com/VictoriaMetrics/metricsql/parser.go index 4f23b157d5..7363abe1f6 100644 --- a/vendor/github.com/VictoriaMetrics/metricsql/parser.go +++ b/vendor/github.com/VictoriaMetrics/metricsql/parser.go @@ -1368,6 +1368,13 @@ func (p *parser) parseLabelFilterExpr() (*labelFilterExpr, error) { lfe.IsNegative = true lfe.IsRegexp = true case ",", "}", "or": + // Incomplete label filter 'lf' in the following forms: + // + // - {lf} + // - {lf,other="filter"} + // - {lf or other="filter"} + // + // It must be substituted by complete label filter during WITH template expand. return &lfe, nil default: return nil, fmt.Errorf(`labelFilterExpr: unexpected token %q; want "=", "!=", "=~", "!~", ",", "or", "}"`, p.lex.Token) @@ -1388,8 +1395,12 @@ func (p *parser) parseLabelFilterExpr() (*labelFilterExpr, error) { // // This type isn't exported. type labelFilterExpr struct { - Label string - Value *StringExpr + // Label contains either the label name or the WITH template reference. + Label string + + // Value can be nil if Label contains unexpanded WITH template reference. + Value *StringExpr + IsRegexp bool IsNegative bool } @@ -1658,7 +1669,7 @@ func (p *parser) parseMetricExpr() (*MetricExpr, error) { return nil, err } if p.lex.Token != "{" { - me.labelFilterss = append(me.labelFilterss[:0], []*labelFilterExpr{mf}) + me.labelFilterss = append(me.labelFilterss, []*labelFilterExpr{mf}) return &me, nil } } @@ -2009,7 +2020,7 @@ func (we *withExpr) AppendString(dst []byte) []byte { for i, wa := range we.Was { dst = wa.AppendString(dst) if i+1 < len(we.Was) { - dst = append(dst, ',') + dst = append(dst, ", "...) } } dst = append(dst, ") "...) @@ -2246,15 +2257,15 @@ func isOnlyMetricNameInLabelFilterss(lfss [][]*labelFilterExpr) bool { } func getMetricNameFromLabelFilterss(lfss [][]*labelFilterExpr) string { - if len(lfss) == 0 || len(lfss[0]) == 0 || lfss[0][0].Label != "__name__" || len(lfss[0][0].Value.tokens) != 1 { + if len(lfss) == 0 { + return "" + } + metricName := mustGetMetricName(lfss[0]) + if metricName == "" { return "" } - metricName := mustExtractMetricNameFromToken(lfss[0][0].Value.tokens[0]) for _, lfs := range lfss[1:] { - if len(lfs) == 0 || lfs[0].Label != "__name__" || len(lfs[0].Value.tokens) != 1 { - return "" - } - metricNameLocal := mustExtractMetricNameFromToken(lfs[0].Value.tokens[0]) + metricNameLocal := mustGetMetricName(lfs) if metricNameLocal != metricName { return "" } @@ -2262,8 +2273,15 @@ func getMetricNameFromLabelFilterss(lfss [][]*labelFilterExpr) string { return metricName } -func mustExtractMetricNameFromToken(token string) string { - metricName, err := extractStringValue(token) +func mustGetMetricName(lfss []*labelFilterExpr) string { + if len(lfss) == 0 { + return "" + } + lfs := lfss[0] + if lfs.Label != "__name__" || lfs.Value == nil || len(lfs.Value.tokens) != 1 { + return "" + } + metricName, err := extractStringValue(lfs.Value.tokens[0]) if err != nil { panic(fmt.Errorf("BUG: cannot obtain metric name: %w", err)) } diff --git a/vendor/modules.txt b/vendor/modules.txt index fe7b604194..c0b366f6fa 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -118,7 +118,7 @@ github.com/VictoriaMetrics/fastcache # github.com/VictoriaMetrics/metrics v1.35.1 ## explicit; go 1.17 github.com/VictoriaMetrics/metrics -# github.com/VictoriaMetrics/metricsql v0.77.0 +# github.com/VictoriaMetrics/metricsql v0.79.0 ## explicit; go 1.13 github.com/VictoriaMetrics/metricsql github.com/VictoriaMetrics/metricsql/binaryop From e86891b010471c2604ef52f002c352c0ca3f5deb Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 18 Sep 2024 18:24:14 +0200 Subject: [PATCH 042/128] app/vlselect/logsql: call `Query.Optimize()` on the cloned query in order to replace `*` filter with `filterNoop` inside getLastNQueryResults() Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785 --- app/vlselect/logsql/logsql.go | 3 +++ docs/VictoriaLogs/CHANGELOG.md | 2 ++ 2 files changed, 5 insertions(+) diff --git a/app/vlselect/logsql/logsql.go b/app/vlselect/logsql/logsql.go index 6b25bb4094..241da42559 100644 --- a/app/vlselect/logsql/logsql.go +++ b/app/vlselect/logsql/logsql.go @@ -864,6 +864,9 @@ func getLastNQueryResults(ctx context.Context, tenantIDs []logstorage.TenantID, for { q = qOrig.Clone() q.AddTimeFilter(start, end) + // q.Optimize() call is needed for converting '*' into filterNoop. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785#issuecomment-2358547733 + q.Optimize() rows, err := getQueryResultsWithLimit(ctx, tenantIDs, q, limitUpper) if err != nil { return nil, err diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index a96116f885..78209f1e31 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,8 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. + ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) Released at 2024-09-08 From 75cc7922c36915af369601064e47eb849c94ee3f Mon Sep 17 00:00:00 2001 From: Thomas Danielsson Date: Thu, 19 Sep 2024 07:11:30 +0000 Subject: [PATCH 043/128] typo: added missing '{' (#7044) ### Describe Your Changes Added missing `{` in vmalert rule. ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- deployment/docker/alerts-vmalert.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/docker/alerts-vmalert.yml b/deployment/docker/alerts-vmalert.yml index af7895da33..07d58fa8fb 100644 --- a/deployment/docker/alerts-vmalert.yml +++ b/deployment/docker/alerts-vmalert.yml @@ -46,7 +46,7 @@ groups: severity: info annotations: dashboard: "http://localhost:3000/d/LzldHAVnz?viewPanel=33&var-group={{ $labels.group }}" - summary: "Recording rule {{ $labels.recording }} ({ $labels.group }}) produces no data" + summary: "Recording rule {{ $labels.recording }} ({{ $labels.group }}) produces no data" description: "Recording rule \"{{ $labels.recording }}\" from group \"{{ $labels.group }}\" produces 0 samples over the last 30min. It might be caused by a misconfiguration or incorrect query expression." From bc9cb691703cf828f6c52322a53a81c9bb72834f Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Thu, 19 Sep 2024 11:11:16 +0200 Subject: [PATCH 044/128] vmui/logs: add auto refresh (#7038) ### Describe Your Changes Add auto refresh #7017 ![image](https://github.com/user-attachments/assets/20ed1102-d5e4-4d3f-9c24-7d298d93400a) ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Co-authored-by: Roman Khavronenko --- .../packages/vmui/src/layouts/LogsLayout/ControlsLogsLayout.tsx | 2 ++ docs/VictoriaLogs/CHANGELOG.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/vmui/packages/vmui/src/layouts/LogsLayout/ControlsLogsLayout.tsx b/app/vmui/packages/vmui/src/layouts/LogsLayout/ControlsLogsLayout.tsx index 6a35f7ed77..378eca1d38 100644 --- a/app/vmui/packages/vmui/src/layouts/LogsLayout/ControlsLogsLayout.tsx +++ b/app/vmui/packages/vmui/src/layouts/LogsLayout/ControlsLogsLayout.tsx @@ -4,6 +4,7 @@ import GlobalSettings from "../../components/Configurators/GlobalSettings/Global import { ControlsProps } from "../Header/HeaderControls/HeaderControls"; import { TimeSelector } from "../../components/Configurators/TimeRangeSettings/TimeSelector/TimeSelector"; import TenantsFields from "../../components/Configurators/GlobalSettings/TenantsConfiguration/TenantsFields"; +import { ExecutionControls } from "../../components/Configurators/TimeRangeSettings/ExecutionControls/ExecutionControls"; const ControlsLogsLayout: FC = ({ isMobile }) => { @@ -16,6 +17,7 @@ const ControlsLogsLayout: FC = ({ isMobile }) => { > + ); diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 78209f1e31..e2c09cc5c2 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,8 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add button for enabling auto refresh, similarly to VictoriaMetrics vmui. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7017). + * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) From 7491f49e9e45ac10ae716c28776fdd2e3f9c8b3c Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Thu, 19 Sep 2024 11:43:52 +0200 Subject: [PATCH 045/128] vmui: update dependencies in package.json to latest versions (#7007) Update dependencies in `package.json` to latest versions --- app/vmui/packages/vmui/package-lock.json | 260 ++++++++---------- app/vmui/packages/vmui/package.json | 40 +-- .../QueryEditor/QueryEditorAutocomplete.tsx | 4 +- .../Main/Autocomplete/Autocomplete.tsx | 6 +- .../components/Main/DatePicker/DatePicker.tsx | 4 +- .../src/components/Main/Select/Select.tsx | 4 +- .../pages/ExploreLogs/GroupLogs/GroupLogs.tsx | 2 +- app/vmui/packages/vmui/src/reportWebVitals.ts | 16 +- 8 files changed, 155 insertions(+), 181 deletions(-) diff --git a/app/vmui/packages/vmui/package-lock.json b/app/vmui/packages/vmui/package-lock.json index 3fd16bef5e..6d4a656947 100644 --- a/app/vmui/packages/vmui/package-lock.json +++ b/app/vmui/packages/vmui/package-lock.json @@ -8,45 +8,45 @@ "name": "vmui", "version": "0.1.0", "dependencies": { - "@types/lodash.debounce": "^4.0.6", - "@types/lodash.get": "^4.4.6", - "@types/lodash.throttle": "^4.1.6", - "@types/node": "^20.4.0", - "@types/qs": "^6.9.7", - "@types/react-input-mask": "^3.0.2", + "@types/lodash.debounce": "^4.0.9", + "@types/lodash.get": "^4.4.9", + "@types/lodash.throttle": "^4.1.9", + "@types/node": "^22.5.4", + "@types/qs": "^6.9.15", + "@types/react-input-mask": "^3.0.5", "@types/react-router-dom": "^5.3.3", - "@types/webpack-env": "^1.16.3", - "classnames": "^2.3.2", - "dayjs": "^1.11.0", + "@types/webpack-env": "^1.18.5", + "classnames": "^2.5.1", + "dayjs": "^1.11.13", "lodash.debounce": "^4.0.8", "lodash.get": "^4.4.2", "lodash.throttle": "^4.1.1", - "marked": "^12.0.2", - "marked-emoji": "^1.4.0", - "preact": "^10.7.1", - "qs": "^6.10.3", + "marked": "^14.1.2", + "marked-emoji": "^1.4.2", + "preact": "^10.23.2", + "qs": "^6.13.0", "react-input-mask": "^2.0.4", - "react-router-dom": "^6.10.0", - "sass": "^1.56.0", + "react-router-dom": "^6.26.2", + "sass": "^1.78.0", "source-map-explorer": "^2.5.3", "typescript": "~4.6.2", "uplot": "^1.6.30", - "web-vitals": "^3.3.2" + "web-vitals": "^4.2.3" }, "devDependencies": { "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", - "@types/react-dom": "^18.2.6", + "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", "cross-env": "^7.0.3", "customize-cra": "^1.0.0", "eslint": "^8.44.0", "eslint-config-react-app": "^7.0.1", - "eslint-plugin-react": "^7.29.4", - "http-proxy-middleware": "^3.0.0", + "eslint-plugin-react": "^7.36.1", + "http-proxy-middleware": "^3.0.2", "react-app-rewired": "^2.2.1", - "webpack": "^5.88.1" + "webpack": "^5.94.0" } }, "node_modules/@alloc/quick-lru": { @@ -3651,9 +3651,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", - "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -4135,21 +4135,12 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -4212,9 +4203,9 @@ "peer": true }, "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -4296,11 +4287,11 @@ "peer": true }, "node_modules/@types/node": { - "version": "20.14.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", - "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/node-forge": { @@ -5357,18 +5348,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", @@ -7143,17 +7122,17 @@ } }, "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -7626,9 +7605,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -8165,35 +8144,35 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", - "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "version": "7.36.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", + "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", "dev": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { @@ -9931,17 +9910,17 @@ } }, "node_modules/http-proxy-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", - "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.2.tgz", + "integrity": "sha512-fBLFpmvDzlxdckwZRjM0wWtwDZ4KBtQ8NFqhrFKoEtK4myzuiumBuNTxD+F4cVbXfOZljIbrynmvByofDzT7Ag==", "dev": true, "dependencies": { - "@types/http-proxy": "^1.17.10", - "debug": "^4.3.4", + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.5" + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10446,6 +10425,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -10453,6 +10433,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -13541,9 +13530,9 @@ } }, "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.1.2.tgz", + "integrity": "sha512-f3r0yqpz31VXiDB/wj9GaOB0a2PRLQl6vJmXiFrniNwjkKdvakqJRULhjFKJpxOchlCRiG5fcacoUZY5Xa6PEQ==", "bin": { "marked": "bin/marked.js" }, @@ -13552,11 +13541,11 @@ } }, "node_modules/marked-emoji": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/marked-emoji/-/marked-emoji-1.4.1.tgz", - "integrity": "sha512-3xHWQn8XD1LyhMpHxWpHTDWBZ9bpXLlW8JIqvyXTO6he7okKIB/W9fD/3fTg0DQuZlSQvPZ6Ub5hN6Rnmn7j9g==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/marked-emoji/-/marked-emoji-1.4.2.tgz", + "integrity": "sha512-2sP+bp2z76dwbILzQ7ijy2PyjjAJR3iAZCzaNGThD2UijFUBeidkn6MoCdX/j47tPIcWt9nwnjqRQPd01ZrfdA==", "peerDependencies": { - "marked": ">=4 <14" + "marked": ">=4 <15" } }, "node_modules/mdn-data": { @@ -13622,9 +13611,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -13747,9 +13736,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/multicast-dns": { @@ -14064,23 +14053,6 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -15962,9 +15934,9 @@ "peer": true }, "node_modules/preact": { - "version": "10.22.0", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", - "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", + "version": "10.23.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.23.2.tgz", + "integrity": "sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -16133,9 +16105,9 @@ } }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -16487,11 +16459,11 @@ } }, "node_modules/react-router": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", - "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.17.0" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -16501,12 +16473,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", - "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.17.0", - "react-router": "6.24.0" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" @@ -17157,9 +17129,9 @@ "peer": true }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.78.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", + "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -17369,13 +17341,6 @@ "dev": true, "peer": true }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "peer": true - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -18105,6 +18070,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -19118,9 +19093,9 @@ "peer": true }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -19416,9 +19391,9 @@ } }, "node_modules/web-vitals": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz", - "integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.3.tgz", + "integrity": "sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==" }, "node_modules/webidl-conversions": { "version": "6.1.0", @@ -19431,12 +19406,11 @@ } }, "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -19445,7 +19419,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/app/vmui/packages/vmui/package.json b/app/vmui/packages/vmui/package.json index 5af4c67b60..2ee96d480e 100644 --- a/app/vmui/packages/vmui/package.json +++ b/app/vmui/packages/vmui/package.json @@ -4,30 +4,30 @@ "private": true, "homepage": "./", "dependencies": { - "@types/lodash.debounce": "^4.0.6", - "@types/lodash.get": "^4.4.6", - "@types/lodash.throttle": "^4.1.6", - "@types/node": "^20.4.0", - "@types/qs": "^6.9.7", - "@types/react-input-mask": "^3.0.2", + "@types/lodash.debounce": "^4.0.9", + "@types/lodash.get": "^4.4.9", + "@types/lodash.throttle": "^4.1.9", + "@types/node": "^22.5.4", + "@types/qs": "^6.9.15", + "@types/react-input-mask": "^3.0.5", "@types/react-router-dom": "^5.3.3", - "@types/webpack-env": "^1.16.3", - "classnames": "^2.3.2", - "dayjs": "^1.11.0", + "@types/webpack-env": "^1.18.5", + "classnames": "^2.5.1", + "dayjs": "^1.11.13", "lodash.debounce": "^4.0.8", "lodash.get": "^4.4.2", "lodash.throttle": "^4.1.1", - "marked": "^12.0.2", - "marked-emoji": "^1.4.0", - "preact": "^10.7.1", - "qs": "^6.10.3", + "marked": "^14.1.2", + "marked-emoji": "^1.4.2", + "preact": "^10.23.2", + "qs": "^6.13.0", "react-input-mask": "^2.0.4", - "react-router-dom": "^6.10.0", - "sass": "^1.56.0", + "react-router-dom": "^6.26.2", + "sass": "^1.78.0", "source-map-explorer": "^2.5.3", "typescript": "~4.6.2", "uplot": "^1.6.30", - "web-vitals": "^3.3.2" + "web-vitals": "^4.2.3" }, "scripts": { "prestart": "npm run copy-metricsql-docs", @@ -63,17 +63,17 @@ "devDependencies": { "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", - "@types/react-dom": "^18.2.6", + "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", "cross-env": "^7.0.3", "customize-cra": "^1.0.0", "eslint": "^8.44.0", "eslint-config-react-app": "^7.0.1", - "eslint-plugin-react": "^7.29.4", - "http-proxy-middleware": "^3.0.0", + "eslint-plugin-react": "^7.36.1", + "http-proxy-middleware": "^3.0.2", "react-app-rewired": "^2.2.1", - "webpack": "^5.88.1" + "webpack": "^5.94.0" }, "overrides": { "react-app-rewired": { diff --git a/app/vmui/packages/vmui/src/components/Configurators/QueryEditor/QueryEditorAutocomplete.tsx b/app/vmui/packages/vmui/src/components/Configurators/QueryEditor/QueryEditorAutocomplete.tsx index 3e47507aa2..7061d8e873 100644 --- a/app/vmui/packages/vmui/src/components/Configurators/QueryEditor/QueryEditorAutocomplete.tsx +++ b/app/vmui/packages/vmui/src/components/Configurators/QueryEditor/QueryEditorAutocomplete.tsx @@ -1,4 +1,4 @@ -import React, { FC, Ref, useState, useEffect, useMemo, useCallback } from "preact/compat"; +import React, { FC, useState, useEffect, useMemo, useCallback } from "preact/compat"; import Autocomplete, { AutocompleteOptions } from "../../Main/Autocomplete/Autocomplete"; import { useFetchQueryOptions } from "../../../hooks/useFetchQueryOptions"; import { escapeRegexp, hasUnclosedQuotes } from "../../../utils/regexp"; @@ -8,7 +8,7 @@ import { AUTOCOMPLETE_LIMITS } from "../../../constants/queryAutocomplete"; interface QueryEditorAutocompleteProps { value: string; - anchorEl: Ref; + anchorEl: React.RefObject; caretPosition: [number, number]; // [start, end] hasHelperText: boolean; onSelect: (val: string, caretPosition: number) => void; diff --git a/app/vmui/packages/vmui/src/components/Main/Autocomplete/Autocomplete.tsx b/app/vmui/packages/vmui/src/components/Main/Autocomplete/Autocomplete.tsx index bbb15c76f1..96ad6eed38 100644 --- a/app/vmui/packages/vmui/src/components/Main/Autocomplete/Autocomplete.tsx +++ b/app/vmui/packages/vmui/src/components/Main/Autocomplete/Autocomplete.tsx @@ -1,4 +1,4 @@ -import React, { FC, Ref, useCallback, useEffect, useMemo, useRef, useState, JSX } from "preact/compat"; +import React, { FC, useCallback, useEffect, useMemo, useRef, useState, JSX } from "preact/compat"; import classNames from "classnames"; import Popper from "../Popper/Popper"; import "./style.scss"; @@ -17,7 +17,7 @@ export interface AutocompleteOptions { interface AutocompleteProps { value: string options: AutocompleteOptions[] - anchor: Ref + anchor: React.RefObject disabled?: boolean minLength?: number fullWidth?: boolean @@ -31,7 +31,7 @@ interface AutocompleteProps { onSelect: (val: string) => void onOpenAutocomplete?: (val: boolean) => void onFoundOptions?: (val: AutocompleteOptions[]) => void - onChangeWrapperRef?: (elementRef: Ref) => void + onChangeWrapperRef?: (elementRef: React.RefObject) => void } enum FocusType { diff --git a/app/vmui/packages/vmui/src/components/Main/DatePicker/DatePicker.tsx b/app/vmui/packages/vmui/src/components/Main/DatePicker/DatePicker.tsx index cb41a99d92..9cea190c0d 100644 --- a/app/vmui/packages/vmui/src/components/Main/DatePicker/DatePicker.tsx +++ b/app/vmui/packages/vmui/src/components/Main/DatePicker/DatePicker.tsx @@ -1,4 +1,4 @@ -import React, { Ref, useMemo, forwardRef } from "preact/compat"; +import React, { useMemo, forwardRef } from "preact/compat"; import Calendar from "../../Main/DatePicker/Calendar/Calendar"; import dayjs, { Dayjs } from "dayjs"; import Popper from "../../Main/Popper/Popper"; @@ -9,7 +9,7 @@ import useEventListener from "../../../hooks/useEventListener"; interface DatePickerProps { date: string | Date | Dayjs, - targetRef: Ref + targetRef: React.RefObject; format?: string label?: string onChange: (val: string) => void diff --git a/app/vmui/packages/vmui/src/components/Main/Select/Select.tsx b/app/vmui/packages/vmui/src/components/Main/Select/Select.tsx index c5c455591c..ad6cc177db 100644 --- a/app/vmui/packages/vmui/src/components/Main/Select/Select.tsx +++ b/app/vmui/packages/vmui/src/components/Main/Select/Select.tsx @@ -1,4 +1,4 @@ -import React, { FC, Ref, useEffect, useMemo, useRef, useState, } from "preact/compat"; +import React, { FC, useEffect, useMemo, useRef, useState, } from "preact/compat"; import classNames from "classnames"; import { ArrowDropDownIcon, CloseIcon } from "../Icons"; import { FormEvent, MouseEvent } from "react"; @@ -40,7 +40,7 @@ const Select: FC = ({ const [search, setSearch] = useState(""); const autocompleteAnchorEl = useRef(null); - const [wrapperRef, setWrapperRef] = useState | null>(null); + const [wrapperRef, setWrapperRef] = useState | null>(null); const [openList, setOpenList] = useState(false); const inputRef = useRef(null); diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx index 2ef0d7cbe5..c4a1c64a7c 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx @@ -22,7 +22,7 @@ const WITHOUT_GROUPING = "No Grouping"; interface TableLogsProps { logs: Logs[]; columns: string[]; - settingsRef: React.Ref; + settingsRef: React.RefObject; } const GroupLogs: FC = ({ logs, settingsRef }) => { diff --git a/app/vmui/packages/vmui/src/reportWebVitals.ts b/app/vmui/packages/vmui/src/reportWebVitals.ts index 7141f3e8bf..f1c549aca6 100644 --- a/app/vmui/packages/vmui/src/reportWebVitals.ts +++ b/app/vmui/packages/vmui/src/reportWebVitals.ts @@ -1,13 +1,13 @@ -import { ReportHandler } from "web-vitals"; +import { MetricType } from "web-vitals"; -const reportWebVitals = (onPerfEntry?: ReportHandler): void => { +const reportWebVitals = (onPerfEntry?: (metric: MetricType) => void) => { if (onPerfEntry) { - import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); + import("web-vitals").then(({ onCLS, onINP, onFCP, onLCP, onTTFB }) => { + onCLS(onPerfEntry); + onINP(onPerfEntry); + onFCP(onPerfEntry); + onLCP(onPerfEntry); + onTTFB(onPerfEntry); }); } }; From e115b85770a3224e3be85188c5f102abd56d8de4 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Thu, 19 Sep 2024 14:29:18 +0200 Subject: [PATCH 046/128] =?UTF-8?q?lib/logger:=20increase=20default=20valu?= =?UTF-8?q?e=20of=20`-loggerMaxArgLen`=20cmd-line=20fla=E2=80=A6=20(#7008)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …g from 1e3 to 5e3 This should improve visibility on errors produced by very long queries. The change is classified as BUG in order to port it to LTS releases. ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: hagen1778 Co-authored-by: Mathias Palmersheim --- docs/changelog/CHANGELOG.md | 3 +++ lib/logger/logger.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 49a2498b6a..308a72a85b 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -20,6 +20,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). **Update note 1: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** +**Update note 2: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): default value of `-loggerMaxArgLen` cmd-line flag was increased from 1000 to 5000. This should improve visibility on errors produced by very long queries.** + * SECURITY: upgrade Go builder from Go1.23.0 to Go1.23.1. See the list of issues addressed in [Go1.23.1](https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved). * SECURITY: upgrade base docker image (Alpine) from 3.20.2 to 3.20.3. See [alpine 3.20.3 release notes](https://alpinelinux.org/posts/Alpine-3.17.10-3.18.9-3.19.4-3.20.3-released.html). @@ -38,6 +40,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly track `vm_missing_tsids_for_metric_id_total` metric. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6931) for details. * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). * BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): properly handle `c1 AND c2` and `c1 OR c1` queries for constants `c1` and `c2`. Previously such queries could return unexpected results. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637). +* BUGFIX: all VictoriaMetrics components: increase default value of `-loggerMaxArgLen` cmd-line flag from 1000 to 5000. This should improve visibility on errors produced by very long queries. ## [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) diff --git a/lib/logger/logger.go b/lib/logger/logger.go index 91083a2a92..6a26ec36f1 100644 --- a/lib/logger/logger.go +++ b/lib/logger/logger.go @@ -24,7 +24,7 @@ var ( loggerTimezone = flag.String("loggerTimezone", "UTC", "Timezone to use for timestamps in logs. Timezone must be a valid IANA Time Zone. "+ "For example: America/New_York, Europe/Berlin, Etc/GMT+3 or Local") disableTimestamps = flag.Bool("loggerDisableTimestamps", false, "Whether to disable writing timestamps in logs") - maxLogArgLen = flag.Int("loggerMaxArgLen", 1000, "The maximum length of a single logged argument. Longer arguments are replaced with 'arg_start..arg_end', "+ + maxLogArgLen = flag.Int("loggerMaxArgLen", 5000, "The maximum length of a single logged argument. Longer arguments are replaced with 'arg_start..arg_end', "+ "where 'arg_start' and 'arg_end' is prefix and suffix of the arg with the length not exceeding -loggerMaxArgLen / 2") errorsPerSecondLimit = flag.Int("loggerErrorsPerSecondLimit", 0, `Per-second limit on the number of ERROR messages. If more than the given number of errors are emitted per second, the remaining errors are suppressed. Zero values disable the rate limit`) From b0bdb927298846b04c67c80f5d2bf096a26f86bc Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Thu, 19 Sep 2024 14:30:54 +0200 Subject: [PATCH 047/128] vmui: change the `query_range` request method from `GET` to `POST` (#7039) ### Describe Your Changes change the `/query_range` and `/query` requests method from `GET` to `POST`. See #6288. ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: hagen1778 Co-authored-by: hagen1778 --- app/vmui/packages/vmui/src/hooks/useFetchQuery.ts | 7 ++++++- docs/changelog/CHANGELOG.md | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/vmui/packages/vmui/src/hooks/useFetchQuery.ts b/app/vmui/packages/vmui/src/hooks/useFetchQuery.ts index 9e3516026e..7aba2dc0a8 100644 --- a/app/vmui/packages/vmui/src/hooks/useFetchQuery.ts +++ b/app/vmui/packages/vmui/src/hooks/useFetchQuery.ts @@ -110,7 +110,12 @@ export const useFetchQuery = ({ continue; } - const response = await fetch(url, { signal: controller.signal }); + const urlObj = new URL(url); + const response = await fetch(`${urlObj.origin}${urlObj.pathname}`, { + signal: controller.signal, + method: "POST", + body: urlObj.searchParams + }); const resp = await response.json(); if (response.ok) { diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 308a72a85b..5effd1aba6 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -30,6 +30,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): allow disabling `Bearer` prefix enforcement for authentication header. This is useful for cases when identity token is used instead of access token. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parting `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. * FEATURE: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Adds new metrics for data ingestion: `vm_rows_received_by_storage_total`, `vm_rows_ignored_total{reason="nan_value"}`, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`. See this [PR](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6663) for details. +* FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change the request method for `/query_range` and `/query` from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. From 69b976f08e49bc2e5b8b8828a168df1404f5af18 Mon Sep 17 00:00:00 2001 From: Thomas Danielsson Date: Thu, 19 Sep 2024 12:33:12 +0000 Subject: [PATCH 048/128] docs: typo filebeat -> fluent-bit (#7000) ### Describe Your Changes Fix a typo; `filebeat.yml` -> `fluent-bit.conf` ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). Signed-off-by: Thomas Danielsson --- .../docker/victorialogs/fluentbit-ha-single-node/README.md | 4 ++-- deployment/docker/victorialogs/fluentbit/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md b/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md index 2ef60e207e..f845a9d6b1 100644 --- a/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md +++ b/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md @@ -29,7 +29,7 @@ Querying the data * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) -the example of fluentbit configuration(`filebeat.yml`) +the example of fluentbit configuration(`fluent-bit.conf`) ```text [INPUT] @@ -85,4 +85,4 @@ unauthorized_user: url_prefix: - http://victorialogs-1:9428 - http://victorialogs-2:9428 -``` \ No newline at end of file +``` diff --git a/deployment/docker/victorialogs/fluentbit/README.md b/deployment/docker/victorialogs/fluentbit/README.md index 13414eb7c2..1fce9d455a 100644 --- a/deployment/docker/victorialogs/fluentbit/README.md +++ b/deployment/docker/victorialogs/fluentbit/README.md @@ -24,7 +24,7 @@ Querying the data * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) -the example of fluentbit configuration(`filebeat.yml`) +the example of fluentbit configuration(`fluent-bit.conf`) ```shell [INPUT] From 4e976f66f3077485afdaea8de38bc5a857bfa9d5 Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Thu, 19 Sep 2024 14:37:16 +0200 Subject: [PATCH 049/128] vmui: optimize public directory by cleaning up files (#6972) ### Describe Your Changes ### Pull Request Description: 1. **HTML File Structure Optimization**: Adjusted the location of HTML files for different builds to prevent redundant files in the final output. See issue #6900 2. **Metadata Fixes**: Corrected metadata in HTML files for each build configuration. 3. **Favicon Update**: Replaced PNG favicon (`14 KB` and `1.58 KB`) with SVG (`1.35 KB`). 4. **Social Media Optimization**: Optimized the social preview image, reducing its size by `60.2 KB`. 5. **Git Ignore Update**: Added `public/index.html` to `.gitignore` as it is dynamically generated during the build process. ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- app/vmui/packages/vmui/.gitignore | 1 + app/vmui/packages/vmui/config-overrides.js | 6 ++-- .../packages/vmui/public/apple-touch-icon.png | Bin 14345 -> 0 bytes .../packages/vmui/public/favicon-32x32.png | Bin 1618 -> 0 bytes app/vmui/packages/vmui/public/favicon.svg | 1 + app/vmui/packages/vmui/public/manifest.json | 15 +++------ app/vmui/packages/vmui/public/preview.jpg | Bin 68388 -> 6695 bytes .../{public => src/html}/victorialogs.html | 28 ++++++++--------- .../{public => src/html}/victoriametrics.html | 26 ++++++++-------- .../vmui/{public => src/html}/vmanomaly.html | 29 ++++++++---------- 10 files changed, 48 insertions(+), 58 deletions(-) delete mode 100644 app/vmui/packages/vmui/public/apple-touch-icon.png delete mode 100644 app/vmui/packages/vmui/public/favicon-32x32.png create mode 100644 app/vmui/packages/vmui/public/favicon.svg rename app/vmui/packages/vmui/{public => src/html}/victorialogs.html (64%) rename app/vmui/packages/vmui/{public => src/html}/victoriametrics.html (76%) rename app/vmui/packages/vmui/{public => src/html}/vmanomaly.html (59%) diff --git a/app/vmui/packages/vmui/.gitignore b/app/vmui/packages/vmui/.gitignore index 4d29575de8..8b1285a926 100644 --- a/app/vmui/packages/vmui/.gitignore +++ b/app/vmui/packages/vmui/.gitignore @@ -10,6 +10,7 @@ # production /build +/public/index.html # misc .DS_Store diff --git a/app/vmui/packages/vmui/config-overrides.js b/app/vmui/packages/vmui/config-overrides.js index 39c4c0d7e5..f36b7bc07d 100644 --- a/app/vmui/packages/vmui/config-overrides.js +++ b/app/vmui/packages/vmui/config-overrides.js @@ -8,11 +8,11 @@ const path = require('path'); const pathIndexHTML = (() => { switch (process.env.REACT_APP_TYPE) { case 'logs': - return 'public/victorialogs.html'; + return 'src/html/victorialogs.html'; case 'anomaly': - return 'public/vmanomaly.html'; + return 'src/html/vmanomaly.html'; default: - return 'public/victoriametrics.html'; + return 'src/html/victoriametrics.html'; } })(); const fileContent = fs.readFileSync(path.resolve(__dirname, pathIndexHTML), 'utf8'); diff --git a/app/vmui/packages/vmui/public/apple-touch-icon.png b/app/vmui/packages/vmui/public/apple-touch-icon.png deleted file mode 100644 index 9970969062d0178d5fd267fc000f1f6505fbd1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14345 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 KkuH}q4gDXj8o}oP diff --git a/app/vmui/packages/vmui/public/favicon-32x32.png b/app/vmui/packages/vmui/public/favicon-32x32.png deleted file mode 100644 index 7173be44c09b4930d457b3b83c478963f0143606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1618 zcmbV~X;70#7{}ivgd}eg4igBW5CeE2in;IrsYa3_CJKZ@6r>3uAeTf41%$R-Dzw-N zDiSAZsPzC5L~0eqLKBJz0V5!Y975%iD;bn>m%e`Nht71|nce^HKKt8!cK4s-b-*1D zT7m!o;63(o1dvicRx|=?IX{0_4~aoIdp{chDt^Q+iI5+I;=O|X0B~X*0HkFBzydUt zHVOaCpZpk_8@bgvT30 z$--dJtzl5MhK6V(BNGydY;C>T#>RH_YO1B>XQrkE3$l#IcEY_^+Tr%y;oWFF$-(<>0U>Gb5|J zyNA!;A0iT4T3WTYx0jWb7Zv@qxVZTI`SbMjjN7+M=jP_L+83^_yFd^-Ha6zvmS67>un4UeG2YpC(cJ}P-Tx)Bqy}bjOY^hLOe)g^aOB#*F+1bU^bX9KdnU0PQclW&@28%!#P$;X5i;HV&Y8)N6q@<)yPfrgF3>-cj z=;%nhd$+>QZcSul)cE+gUawcF)V;mEhYlU??;ju#h}*X9@b^EMztJ}basXW>IN$?W z-$mZ_*L?piKH4;MM1P5*T&}i3T*vPmo)M~F&AwT@snspSKQeD)J!aO;Exq8LC}2V` zEQIII37EWJ_X9LQ$vpORQG+0f2&@_KiE4p-hVbC9eYZD>g+gIyNSH{%Zb5)Gd&i~V8Dk?W}T4&VpH!g4C%olf)BH_w!JPOD1$9%Y-qPa(VX%NL_#`? z!F-Sg#K-ffwA1m;xi|@VPzh@8Xzs*BPfl1{T~-_^-6R4B$*+`PP;Zax&L`Dhr!Frc z;F%e2N)SiJ{SIo})G9j@Dr4j8RetGQezeuSjHJML77~-=@k}~@zMaLBIVf70j7sHn z*N&>>QU8Ep64BgjF@1=)@B79^hf*#7Rw-ECa;F&C*!gmsFKesQHT%1FkLE*{=7LAAak_ido2&SB7Yn5x*tAXr^GmijE%?@W4Nt%Ya3cc)NDB+~2UGpze*$>+R%75J24zn2}b zuwW&KAs=z&M|_QN!Yg+Iee70D#d;y4K;0E5P$ZKl&UGnl>% znlp{&%-rfgV?Z6oHurD-1;oULMua8*H{cezqJn^fCwv2B0#PDW8W$TD5iOz0lBE)A zgj6O5fF#A+X&m~v|Aq~Xo=qB$ApwA}!#aww1Umxn91%gFa?)7pP=sBjFSY4adqbV3 i&Z-X8l(tv7&k-0SnaZa3I9-5_06e${IAwc;8UFypuZ1)K diff --git a/app/vmui/packages/vmui/public/favicon.svg b/app/vmui/packages/vmui/public/favicon.svg new file mode 100644 index 0000000000..2db0b8f0c8 --- /dev/null +++ b/app/vmui/packages/vmui/public/favicon.svg @@ -0,0 +1 @@ + diff --git a/app/vmui/packages/vmui/public/manifest.json b/app/vmui/packages/vmui/public/manifest.json index 82c9590a3c..9d9946bb11 100644 --- a/app/vmui/packages/vmui/public/manifest.json +++ b/app/vmui/packages/vmui/public/manifest.json @@ -1,16 +1,11 @@ { - "short_name": "Victoria Metrics UI", - "name": "Victoria Metrics UI is a metric explorer for Victoria Metrics", + "short_name": "vmui", + "name": "vmui", "icons": [ { - "src": "favicon-32x32.png", - "sizes": "32x32", - "type": "image/png" - }, - { - "src": "apple-touch-icon.png", - "type": "image/png", - "sizes": "192x192" + "src": "favicon.svg", + "sizes": "any", + "type": "image/svg+xml" } ], "start_url": ".", diff --git a/app/vmui/packages/vmui/public/preview.jpg b/app/vmui/packages/vmui/public/preview.jpg index 9c237b65db2268117b830dca89d2b7f4b8d18fda..35534305fd64ac40557ff26444837e1ef5c918bb 100644 GIT binary patch literal 6695 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 literal 68388 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 z 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 - + + + + - - - + - VM UI + UI for VictoriaLogs - + + + + - - - - - - + + + diff --git a/app/vmui/packages/vmui/public/victoriametrics.html b/app/vmui/packages/vmui/src/html/victoriametrics.html similarity index 76% rename from app/vmui/packages/vmui/public/victoriametrics.html rename to app/vmui/packages/vmui/src/html/victoriametrics.html index a124935409..b44ff4998c 100644 --- a/app/vmui/packages/vmui/public/victoriametrics.html +++ b/app/vmui/packages/vmui/src/html/victoriametrics.html @@ -2,15 +2,13 @@ - + + + + - - - + - VM UI + vmui - - + + - + - - - + + + diff --git a/app/vmui/packages/vmui/public/vmanomaly.html b/app/vmui/packages/vmui/src/html/vmanomaly.html similarity index 59% rename from app/vmui/packages/vmui/public/vmanomaly.html rename to app/vmui/packages/vmui/src/html/vmanomaly.html index a124935409..87e516f9aa 100644 --- a/app/vmui/packages/vmui/public/vmanomaly.html +++ b/app/vmui/packages/vmui/src/html/vmanomaly.html @@ -2,15 +2,13 @@ - + + + + - - - + - VM UI - + UI for VictoriaMetrics Anomaly Detection - + + + + - - - - - - + + + From 61721303fd0ee0522330ff20363a37e98a3c8e5e Mon Sep 17 00:00:00 2001 From: f41gh7 Date: Thu, 19 Sep 2024 15:35:48 +0200 Subject: [PATCH 050/128] docs/changelog: mention vmagent kafka consumer bugfix Changes were made to the enteprise repository --- docs/changelog/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 5effd1aba6..5aebbcd5c1 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -33,6 +33,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change the request method for `/query_range` and `/query` from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). +* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes start-up crash on Windows OS. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973) for details. From c00b64726c290a52c3d5ca533a52cd975d4399aa Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Thu, 19 Sep 2024 15:39:40 +0200 Subject: [PATCH 051/128] app/{vmselect,vlselect}: run make vmui-update vmui-logs-update Executed after https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6972 See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6900 Signed-off-by: hagen1778 --- app/vlselect/vmui/apple-touch-icon.png | Bin 14345 -> 0 bytes app/vlselect/vmui/asset-manifest.json | 8 +-- app/vlselect/vmui/favicon-32x32.png | Bin 1618 -> 0 bytes app/vlselect/vmui/favicon.svg | 1 + app/vlselect/vmui/index.html | 2 +- app/vlselect/vmui/manifest.json | 15 ++--- app/vlselect/vmui/preview.jpg | Bin 68388 -> 6695 bytes .../vmui/static/js/685.bebe1265.chunk.js | 1 - .../vmui/static/js/685.f772060c.chunk.js | 1 + app/vlselect/vmui/static/js/main.7ae2e2c4.js | 2 - app/vlselect/vmui/static/js/main.867f457f.js | 2 + ...CENSE.txt => main.867f457f.js.LICENSE.txt} | 6 +- ...0.md => MetricsQL.a00044c91d9781cf8557.md} | 2 +- app/vlselect/vmui/victorialogs.html | 55 ----------------- app/vlselect/vmui/victoriametrics.html | 56 ------------------ app/vlselect/vmui/vmanomaly.html | 56 ------------------ app/vmselect/vmui/apple-touch-icon.png | Bin 14345 -> 0 bytes app/vmselect/vmui/asset-manifest.json | 8 +-- app/vmselect/vmui/favicon-32x32.png | Bin 1618 -> 0 bytes app/vmselect/vmui/favicon.svg | 1 + app/vmselect/vmui/index.html | 2 +- app/vmselect/vmui/manifest.json | 15 ++--- app/vmselect/vmui/preview.jpg | Bin 68388 -> 6695 bytes .../vmui/static/js/685.bebe1265.chunk.js | 1 - .../vmui/static/js/685.f772060c.chunk.js | 1 + app/vmselect/vmui/static/js/main.0e69b7a9.js | 2 + ...CENSE.txt => main.0e69b7a9.js.LICENSE.txt} | 6 +- app/vmselect/vmui/static/js/main.9ed27532.js | 2 - ...0.md => MetricsQL.a00044c91d9781cf8557.md} | 2 +- app/vmselect/vmui/victorialogs.html | 55 ----------------- app/vmselect/vmui/victoriametrics.html | 56 ------------------ app/vmselect/vmui/vmanomaly.html | 56 ------------------ 32 files changed, 36 insertions(+), 378 deletions(-) delete mode 100644 app/vlselect/vmui/apple-touch-icon.png delete mode 100644 app/vlselect/vmui/favicon-32x32.png create mode 100644 app/vlselect/vmui/favicon.svg delete mode 100644 app/vlselect/vmui/static/js/685.bebe1265.chunk.js create mode 100644 app/vlselect/vmui/static/js/685.f772060c.chunk.js delete mode 100644 app/vlselect/vmui/static/js/main.7ae2e2c4.js create mode 100644 app/vlselect/vmui/static/js/main.867f457f.js rename app/vlselect/vmui/static/js/{main.7ae2e2c4.js.LICENSE.txt => main.867f457f.js.LICENSE.txt} (89%) rename app/vlselect/vmui/static/media/{MetricsQL.8c2e588d62b87f90dbf0.md => MetricsQL.a00044c91d9781cf8557.md} (99%) delete mode 100644 app/vlselect/vmui/victorialogs.html delete mode 100644 app/vlselect/vmui/victoriametrics.html delete mode 100644 app/vlselect/vmui/vmanomaly.html delete mode 100644 app/vmselect/vmui/apple-touch-icon.png delete mode 100644 app/vmselect/vmui/favicon-32x32.png create mode 100644 app/vmselect/vmui/favicon.svg delete mode 100644 app/vmselect/vmui/static/js/685.bebe1265.chunk.js create mode 100644 app/vmselect/vmui/static/js/685.f772060c.chunk.js create mode 100644 app/vmselect/vmui/static/js/main.0e69b7a9.js rename app/vmselect/vmui/static/js/{main.9ed27532.js.LICENSE.txt => main.0e69b7a9.js.LICENSE.txt} (89%) delete mode 100644 app/vmselect/vmui/static/js/main.9ed27532.js rename app/vmselect/vmui/static/media/{MetricsQL.8c2e588d62b87f90dbf0.md => MetricsQL.a00044c91d9781cf8557.md} (99%) delete mode 100644 app/vmselect/vmui/victorialogs.html delete mode 100644 app/vmselect/vmui/victoriametrics.html delete mode 100644 app/vmselect/vmui/vmanomaly.html diff --git a/app/vlselect/vmui/apple-touch-icon.png b/app/vlselect/vmui/apple-touch-icon.png deleted file mode 100644 index 9970969062d0178d5fd267fc000f1f6505fbd1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14345 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 KkuH}q4gDXj8o}oP diff --git a/app/vlselect/vmui/asset-manifest.json b/app/vlselect/vmui/asset-manifest.json index 0f707c9d87..089f1f01e4 100644 --- a/app/vlselect/vmui/asset-manifest.json +++ b/app/vlselect/vmui/asset-manifest.json @@ -1,13 +1,13 @@ { "files": { "main.css": "./static/css/main.c9cc37dd.css", - "main.js": "./static/js/main.7ae2e2c4.js", - "static/js/685.bebe1265.chunk.js": "./static/js/685.bebe1265.chunk.js", - "static/media/MetricsQL.md": "./static/media/MetricsQL.8c2e588d62b87f90dbf0.md", + "main.js": "./static/js/main.867f457f.js", + "static/js/685.f772060c.chunk.js": "./static/js/685.f772060c.chunk.js", + "static/media/MetricsQL.md": "./static/media/MetricsQL.a00044c91d9781cf8557.md", "index.html": "./index.html" }, "entrypoints": [ "static/css/main.c9cc37dd.css", - "static/js/main.7ae2e2c4.js" + "static/js/main.867f457f.js" ] } \ No newline at end of file diff --git a/app/vlselect/vmui/favicon-32x32.png b/app/vlselect/vmui/favicon-32x32.png deleted file mode 100644 index 7173be44c09b4930d457b3b83c478963f0143606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1618 zcmbV~X;70#7{}ivgd}eg4igBW5CeE2in;IrsYa3_CJKZ@6r>3uAeTf41%$R-Dzw-N zDiSAZsPzC5L~0eqLKBJz0V5!Y975%iD;bn>m%e`Nht71|nce^HKKt8!cK4s-b-*1D zT7m!o;63(o1dvicRx|=?IX{0_4~aoIdp{chDt^Q+iI5+I;=O|X0B~X*0HkFBzydUt zHVOaCpZpk_8@bgvT30 z$--dJtzl5MhK6V(BNGydY;C>T#>RH_YO1B>XQrkE3$l#IcEY_^+Tr%y;oWFF$-(<>0U>Gb5|J zyNA!;A0iT4T3WTYx0jWb7Zv@qxVZTI`SbMjjN7+M=jP_L+83^_yFd^-Ha6zvmS67>un4UeG2YpC(cJ}P-Tx)Bqy}bjOY^hLOe)g^aOB#*F+1bU^bX9KdnU0PQclW&@28%!#P$;X5i;HV&Y8)N6q@<)yPfrgF3>-cj z=;%nhd$+>QZcSul)cE+gUawcF)V;mEhYlU??;ju#h}*X9@b^EMztJ}basXW>IN$?W z-$mZ_*L?piKH4;MM1P5*T&}i3T*vPmo)M~F&AwT@snspSKQeD)J!aO;Exq8LC}2V` zEQIII37EWJ_X9LQ$vpORQG+0f2&@_KiE4p-hVbC9eYZD>g+gIyNSH{%Zb5)Gd&i~V8Dk?W}T4&VpH!g4C%olf)BH_w!JPOD1$9%Y-qPa(VX%NL_#`? z!F-Sg#K-ffwA1m;xi|@VPzh@8Xzs*BPfl1{T~-_^-6R4B$*+`PP;Zax&L`Dhr!Frc z;F%e2N)SiJ{SIo})G9j@Dr4j8RetGQezeuSjHJML77~-=@k}~@zMaLBIVf70j7sHn z*N&>>QU8Ep64BgjF@1=)@B79^hf*#7Rw-ECa;F&C*!gmsFKesQHT%1FkLE*{=7LAAak_ido2&SB7Yn5x*tAXr^GmijE%?@W4Nt%Ya3cc)NDB+~2UGpze*$>+R%75J24zn2}b zuwW&KAs=z&M|_QN!Yg+Iee70D#d;y4K;0E5P$ZKl&UGnl>% znlp{&%-rfgV?Z6oHurD-1;oULMua8*H{cezqJn^fCwv2B0#PDW8W$TD5iOz0lBE)A zgj6O5fF#A+X&m~v|Aq~Xo=qB$ApwA}!#aww1Umxn91%gFa?)7pP=sBjFSY4adqbV3 i&Z-X8l(tv7&k-0SnaZa3I9-5_06e${IAwc;8UFypuZ1)K diff --git a/app/vlselect/vmui/favicon.svg b/app/vlselect/vmui/favicon.svg new file mode 100644 index 0000000000..2db0b8f0c8 --- /dev/null +++ b/app/vlselect/vmui/favicon.svg @@ -0,0 +1 @@ + diff --git a/app/vlselect/vmui/index.html b/app/vlselect/vmui/index.html index cb0dc883e2..d8e2f0e500 100644 --- a/app/vlselect/vmui/index.html +++ b/app/vlselect/vmui/index.html @@ -1 +1 @@ -VM UI

\ No newline at end of file +UI for VictoriaLogs
\ No newline at end of file diff --git a/app/vlselect/vmui/manifest.json b/app/vlselect/vmui/manifest.json index 82c9590a3c..9d9946bb11 100644 --- a/app/vlselect/vmui/manifest.json +++ b/app/vlselect/vmui/manifest.json @@ -1,16 +1,11 @@ { - "short_name": "Victoria Metrics UI", - "name": "Victoria Metrics UI is a metric explorer for Victoria Metrics", + "short_name": "vmui", + "name": "vmui", "icons": [ { - "src": "favicon-32x32.png", - "sizes": "32x32", - "type": "image/png" - }, - { - "src": "apple-touch-icon.png", - "type": "image/png", - "sizes": "192x192" + "src": "favicon.svg", + "sizes": "any", + "type": "image/svg+xml" } ], "start_url": ".", diff --git a/app/vlselect/vmui/preview.jpg b/app/vlselect/vmui/preview.jpg index 9c237b65db2268117b830dca89d2b7f4b8d18fda..35534305fd64ac40557ff26444837e1ef5c918bb 100644 GIT binary patch literal 6695 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 literal 68388 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
'+(n?e:fo(e,!0))+"
\n":"
"+(n?e:fo(e,!0))+"
\n"}blockquote(e){return"
\n".concat(e,"
\n")}html(e,t){return e}heading(e,t,n){return"").concat(e,"\n")}hr(){return"
\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e,t,n){return"
  • ".concat(e,"
  • \n")}checkbox(e){return"'}paragraph(e){return"

    ".concat(e,"

    \n")}table(e,t){return t&&(t="".concat(t,"")),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return"\n".concat(e,"\n")}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<".concat(n,' align="').concat(t.align,'">'):"<".concat(n,">"))+e+"\n")}strong(e){return"".concat(e,"")}em(e){return"".concat(e,"")}codespan(e){return"".concat(e,"")}br(){return"
    "}del(e){return"".concat(e,"")}link(e,t,n){const r=yo(e);if(null===r)return n;let o='
    ",o}image(e,t,n){const r=yo(e);if(null===r)return n;let o='').concat(n,'1&&void 0!==arguments[1])||arguments[1],n="";for(let r=0;r0&&"paragraph"===t.tokens[0].type?(t.tokens[0].text=e+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=e+" "+t.tokens[0].tokens[0].text)):t.tokens.unshift({type:"text",text:e+" "}):l+=e+" "}l+=this.parse(t.tokens,a),i+=this.renderer.listitem(l,o,!!r)}n+=this.renderer.list(i,t,r);continue}case"html":{const e=o;n+=this.renderer.html(e.text,e.block);continue}case"paragraph":{const e=o;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let a=o,i=a.tokens?this.parseInline(a.tokens):a.text;for(;r+1{const o={...r},a={...this.defaults,...o};!0===this.defaults.async&&!1===o.async&&(a.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),a.async=!0);const i=eo(ha,this,fa).call(this,!!a.silent,!!a.async);if("undefined"===typeof n||null===n)return i(new Error("marked(): input parameter is undefined or null"));if("string"!==typeof n)return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(a.hooks&&(a.hooks.options=a),a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(n):n).then((t=>e(t,a))).then((e=>a.hooks?a.hooks.processAllTokens(e):e)).then((e=>a.walkTokens?Promise.all(this.walkTokens(e,a.walkTokens)).then((()=>e)):e)).then((e=>t(e,a))).then((e=>a.hooks?a.hooks.postprocess(e):e)).catch(i);try{a.hooks&&(n=a.hooks.preprocess(n));let r=e(n,a);a.hooks&&(r=a.hooks.processAllTokens(r)),a.walkTokens&&this.walkTokens(r,a.walkTokens);let o=t(r,a);return a.hooks&&(o=a.hooks.postprocess(o)),o}catch(Vd){return i(Vd)}}}function fa(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+fo(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}const ma=new class{constructor(){Xr(this,ha),ro(this,"defaults",{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}),ro(this,"options",this.setOptions),ro(this,"parse",eo(ha,this,pa).call(this,la.lex,ua.parse)),ro(this,"parseInline",eo(ha,this,pa).call(this,la.lexInline,ua.parseInline)),ro(this,"Parser",ua),ro(this,"Renderer",sa),ro(this,"TextRenderer",ca),ro(this,"Lexer",la),ro(this,"Tokenizer",So),ro(this,"Hooks",da),this.use(...arguments)}walkTokens(e,t){let n=[];for(const o of e)switch(n=n.concat(t.call(this,o)),o.type){case"table":{const e=o;for(const r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(const r of e.rows)for(const e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case"list":{const e=o;n=n.concat(this.walkTokens(e.items,t));break}default:{var r;const e=o;null!==(r=this.defaults.extensions)&&void 0!==r&&null!==(r=r.childTokens)&&void 0!==r&&r[e.type]?this.defaults.extensions.childTokens[e.type].forEach((r=>{const o=e[r].flat(1/0);n=n.concat(this.walkTokens(o,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(){const e=this.defaults.extensions||{renderers:{},childTokens:{}};for(var t=arguments.length,n=new Array(t),r=0;r{const n={...t};if(n.async=this.defaults.async||n.async||!1,t.extensions&&(t.extensions.forEach((t=>{if(!t.name)throw new Error("extension name required");if("renderer"in t){const n=e.renderers[t.name];e.renderers[t.name]=n?function(){for(var e=arguments.length,r=new Array(e),o=0;o{if(this.defaults.async)return Promise.resolve(o.call(e,t)).then((t=>a.call(e,t)));const n=o.call(e,t);return a.call(e,n)}:e[r]=function(){for(var t=arguments.length,n=new Array(t),r=0;r{let{data:n}=e;const{isMobile:r}=vr(),{timezone:a}=Gt(),{setSearchParamsFromKeys:i}=Rr(),l=(0,t.useRef)(null),[s,c]=Or(ga.group,"view"),[u,d]=(0,t.useState)([]),{value:h,toggle:p}=Fr(!1),f=(0,t.useMemo)((()=>n.map((e=>({...e,_vmui_time:e._time?o()(e._time).tz().format("".concat(wt,".SSS")):"",_vmui_data:JSON.stringify(e,null,2),_vmui_markdown:e._msg?_a(e._msg.replace(/```/g,"\n```\n")):""})))),[n,a]),m=(0,t.useMemo)((()=>{if(null===f||void 0===f||!f.length)return[];const e=["_vmui_data","_vmui_time","_vmui_markdown"],t=new Set;for(const n of f)for(const e in n)t.add(e);return Array.from(t).filter((t=>!e.includes(t)))}),[f]);return mt("div",{className:Kn()({"vm-explore-logs-body":!0,"vm-block":!0,"vm-block_mobile":r}),children:[mt("div",{className:Kn()({"vm-explore-logs-body-header":!0,"vm-section-header":!0,"vm-explore-logs-body-header_mobile":r}),children:[mt("div",{className:"vm-section-header__tabs",children:[mt(er,{activeItem:String(s),items:va,onChange:e=>{c(e),i({view:e})}}),mt("div",{className:"vm-explore-logs-body-header__log-info",children:["Total logs returned: ",mt("b",{children:n.length})]})]}),s===ga.table&&mt("div",{className:"vm-explore-logs-body-header__settings",children:mt(Ur,{columns:m,defaultColumns:u,onChangeColumns:d,tableCompact:h,toggleTableCompact:p})}),s===ga.group&&mt("div",{className:"vm-explore-logs-body-header__settings",ref:l})]}),mt("div",{className:Kn()({"vm-explore-logs-body__table":!0,"vm-explore-logs-body__table_mobile":r}),children:[!n.length&&mt("div",{className:"vm-explore-logs-body__empty",children:"No logs found"}),!!n.length&&mt(pt.FK,{children:[s===ga.table&&mt(Zr,{logs:f,displayColumns:u,tableCompact:h,columns:m}),s===ga.group&&mt(Jr,{logs:f,columns:m,settingsRef:l}),s===ga.json&&mt(Dr,{data:n})]})]})]})},ba=(e,n,r)=>{const[a]=je(),[i,l]=(0,t.useState)([]),[s,c]=(0,t.useState)([]),[u,d]=(0,t.useState)(),h=(0,t.useRef)(new AbortController),p=(0,t.useMemo)((()=>(e=>"".concat(e,"/select/logsql/query"))(e)),[e]),f=e=>{try{return JSON.parse(e)}catch(Vd){return null}},m=(0,t.useCallback)((async e=>{h.current.abort(),h.current=new AbortController;const{signal:t}=h.current,i=Date.now();c((e=>({...e,[i]:!0}))),d(void 0);try{const s=((e,t,n,r)=>({signal:r,method:"POST",headers:{Accept:"application/stream+json",AccountID:a.get("accountID")||"0",ProjectID:a.get("projectID")||"0"},body:new URLSearchParams({query:e.trim(),limit:"".concat(n),start:o()(1e3*t.start).tz().toISOString(),end:o()(1e3*t.end).tz().toISOString()})}))(n,e,r,t),u=await fetch(p,s),h=await u.text();if(!u.ok||!u.body)return d(h),l([]),c((e=>({...e,[i]:!1}))),!1;const m=h.split("\n").filter((e=>e)).slice(0,r).map(f).filter((e=>e));return l(m),c((e=>({...e,[i]:!1}))),!0}catch(Vd){return c((e=>({...e,[i]:!1}))),Vd instanceof Error&&"AbortError"!==Vd.name&&(d(String(Vd)),console.error(Vd),l([])),!1}}),[p,n,r,a]);return{logs:i,isLoading:Object.values(s).some((e=>e)),error:u,fetchLogs:m}},wa=e=>{let{containerStyles:t,message:n}=e;const{isDarkTheme:r}=gt();return mt("div",{className:Kn()({"vm-spinner":!0,"vm-spinner_dark":r}),style:t,children:[mt("div",{className:"half-circle-spinner",children:[mt("div",{className:"circle circle-1"}),mt("div",{className:"circle circle-2"})]}),n&&mt("div",{className:"vm-spinner__message",children:n})]})};var ka=function(e){return e[e.mouse=0]="mouse",e[e.keyboard=1]="keyboard",e}(ka||{});const xa=e=>{var n;let{value:r,options:o,anchor:a,disabled:i,minLength:l=2,fullWidth:s,selected:c,noOptionsText:u,label:d,disabledFullScreen:h,offset:p,maxDisplayResults:f,loading:m,onSelect:_,onOpenAutocomplete:g,onFoundOptions:v,onChangeWrapperRef:y}=e;const{isMobile:b}=vr(),w=(0,t.useRef)(null),[k,x]=(0,t.useState)({index:-1}),[S,A]=(0,t.useState)(""),[C,E]=(0,t.useState)(0),{value:M,setValue:T,setFalse:N}=Fr(!1),P=(0,t.useMemo)((()=>{if(!M)return[];try{const e=new RegExp(String(r.trim()),"i"),t=o.filter((t=>e.test(t.value))).sort(((t,n)=>{var o,a;return t.value.toLowerCase()===r.trim().toLowerCase()?-1:n.value.toLowerCase()===r.trim().toLowerCase()?1:((null===(o=t.value.match(e))||void 0===o?void 0:o.index)||0)-((null===(a=n.value.match(e))||void 0===a?void 0:a.index)||0)}));return E(t.length),A(t.length>Number(null===f||void 0===f?void 0:f.limit)&&(null===f||void 0===f?void 0:f.message)||""),null!==f&&void 0!==f&&f.limit?t.slice(0,f.limit):t}catch(Vd){return[]}}),[M,o,r]),D=(0,t.useMemo)((()=>{var e;return 1===P.length&&(null===(e=P[0])||void 0===e?void 0:e.value)===r}),[P]),O=(0,t.useMemo)((()=>u&&!P.length),[u,P]),R=()=>{x({index:-1})},L=(0,t.useCallback)((e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:o}=e,a=n||r||o,i=P.length&&!D;if("ArrowUp"===t&&!a&&i&&(e.preventDefault(),x((e=>{let{index:t}=e;return{index:t<=0?0:t-1,type:ka.keyboard}}))),"ArrowDown"===t&&!a&&i){e.preventDefault();const t=P.length-1;x((e=>{let{index:n}=e;return{index:n>=t?t:n+1,type:ka.keyboard}}))}if("Enter"===t){const e=P[k.index];e&&_(e.value),c||N()}"Escape"===t&&N()}),[k,P,D,N,_,c]);return(0,t.useEffect)((()=>{T(r.length>=l)}),[r,o]),Jn("keydown",L),(0,t.useEffect)((()=>{if(!w.current||k.type===ka.mouse)return;const e=w.current.childNodes[k.index];null!==e&&void 0!==e&&e.scrollIntoView&&e.scrollIntoView({block:"center"})}),[k,P]),(0,t.useEffect)((()=>{x({index:-1})}),[P]),(0,t.useEffect)((()=>{g&&g(M)}),[M]),(0,t.useEffect)((()=>{v&&v(D?[]:P)}),[P,D]),(0,t.useEffect)((()=>{y&&y(w)}),[w]),mt(Ir,{open:M,buttonRef:a,placement:"bottom-left",onClose:N,fullWidth:s,title:b?d:void 0,disabledFullScreen:h,offset:p,children:[mt("div",{className:Kn()({"vm-autocomplete":!0,"vm-autocomplete_mobile":b&&!h}),ref:w,children:[m&&mt("div",{className:"vm-autocomplete__loader",children:[mt(bn,{}),mt("span",{children:"Loading..."})]}),O&&mt("div",{className:"vm-autocomplete__no-options",children:u}),!D&&P.map(((e,t)=>{return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_mobile":b,"vm-list-item_active":t===k.index,"vm-list-item_multiselect":c,"vm-list-item_multiselect_selected":null===c||void 0===c?void 0:c.includes(e.value),"vm-list-item_with-icon":e.icon}),id:"$autocomplete$".concat(e.value),onClick:(r=e.value,()=>{i||(_(r),c||N())}),onMouseEnter:(n=t,()=>{x({index:n,type:ka.mouse})}),onMouseLeave:R,children:[(null===c||void 0===c?void 0:c.includes(e.value))&&mt(Pn,{}),mt(pt.FK,{children:e.icon}),mt("span",{children:e.value})]},"".concat(t).concat(e.value));var n,r}))]}),S&&mt("div",{className:"vm-autocomplete-message",children:["Shown ",null===f||void 0===f?void 0:f.limit," results out of ",C,". ",S]}),(null===(n=P[k.index])||void 0===n?void 0:n.description)&&mt("div",{className:"vm-autocomplete-info",children:[mt("div",{className:"vm-autocomplete-info__type",children:P[k.index].type}),mt("div",{className:"vm-autocomplete-info__description",dangerouslySetInnerHTML:{__html:P[k.index].description||""}})]})]})};var Sa=n(267),Aa=n.n(Sa);const Ca=e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&"),Ea=e=>JSON.stringify(e).slice(1,-1),Ma=e=>{const t=e.match(/["`']/g);return!!t&&t.length%2!==0};var Ta=function(e){return e.metric="metric",e.label="label",e.labelValue="labelValue",e}(Ta||{});const Na={[Ta.metric]:mt(Hn,{}),[Ta.label]:mt(Bn,{}),[Ta.labelValue]:mt(Un,{})},Pa=n.p+"static/media/MetricsQL.8c2e588d62b87f90dbf0.md",Da=e=>{const t='$1 target="_blank" class="'.concat("vm-link vm-link_colored",'" $2').concat("https://docs.victoriametrics.com/MetricsQL.html","#");return e.replace(/({var n;const r="h3"===e.tagName.toLowerCase();return t=r?null!==(n=e.textContent)&&void 0!==n?n:"":t,r?null:((e,t)=>{var n;const r=null!==(n=t.textContent)&&void 0!==n?n:"",o=(e=>{const t=[];let n=e.nextElementSibling;for(;n&&"p"===n.tagName.toLowerCase();)n&&t.push(n),n=n.nextElementSibling;return t})(t).map((e=>{var t;return null!==(t=e.outerHTML)&&void 0!==t?t:""})).join("\n");return{type:e,value:r,description:Da(o),icon:mt(Vn,{})}})(t,e)})).filter(Boolean)},Ra=()=>{const{metricsQLFunctions:e}=ln(),n=sn();return(0,t.useEffect)((()=>{e.length||(async()=>{try{const e=await fetch(Pa),t=(e=>{const t=document.createElement("div");t.innerHTML=_a(e);const n=t.querySelectorAll("".concat("h3",", ").concat("h4"));return Oa(n)})(await e.text());n({type:"SET_METRICSQL_FUNCTIONS",payload:t})}catch(Vd){console.error("Error fetching or processing the MetricsQL.md file:",Vd)}})()}),[]),e},La=e=>{let{value:n,anchorEl:r,caretPosition:a,hasHelperText:i,onSelect:l,onFoundOptions:s}=e;const[c,u]=(0,t.useState)({top:0,left:0}),d=Ra(),h=(0,t.useMemo)((()=>{if(a[0]!==a[1])return{beforeCursor:n,afterCursor:""};return{beforeCursor:n.substring(0,a[0]),afterCursor:n.substring(a[1])}}),[n,a]),p=(0,t.useMemo)((()=>{const e=h.beforeCursor.split(/\s(or|and|unless|default|ifnot|if|group_left|group_right)\s|}|\+|\|-|\*|\/|\^/i);return e[e.length-1]}),[h]),f=(0,t.useMemo)((()=>{const e=[...p.matchAll(/\w+\((?[^)]+)\)\s+(by|without|on|ignoring)\s*\(\w*/gi)];if(e.length>0&&e[0].groups&&e[0].groups.metricName)return e[0].groups.metricName;const t=[...p.matchAll(/^\s*\b(?[^{}(),\s]+)(?={|$)/g)];return t.length>0&&t[0].groups&&t[0].groups.metricName?t[0].groups.metricName:""}),[p]),m=(0,t.useMemo)((()=>{const e=p.match(/[a-z_:-][\w\-.:/]*\b(?=\s*(=|!=|=~|!~))/g);return e?e[e.length-1]:""}),[p]),_=(0,t.useMemo)((()=>{const e=h.beforeCursor.trim(),t=["}",")"].some((t=>e.endsWith(t))),n=!Ma(e)&&["`","'",'"'].some((t=>e.endsWith(t)));if(!h.beforeCursor||t||n||(e=>{const t=e.split(/\s+/),n=t.length,r=t[n-1],o=t[n-2],a=!r&&Ma(e),i=(!r||t.length>1)&&!/([{(),+\-*/^]|\b(?:or|and|unless|default|ifnot|if|group_left|group_right|by|without|on|ignoring)\b)/i.test(o);return a||i})(h.beforeCursor))return at.empty;const r=/(?:by|without|on|ignoring)\s*\(\s*[^)]*$|\{[^}]*$/i,o="(".concat(Ca(f),")?{?.+").concat(Ca(m),'(=|!=|=~|!~)"?([^"]*)$');switch(!0){case new RegExp(o,"g").test(h.beforeCursor):return at.labelValue;case r.test(h.beforeCursor):return at.label;default:return at.metricsql}}),[h,f,m]),g=(0,t.useMemo)((()=>{const e=h.beforeCursor.match(/([\w_.:]+(?![},]))$/);return e?e[0]:""}),[h.beforeCursor]),{metrics:v,labels:y,labelValues:b,loading:w}=(e=>{let{valueByContext:n,metric:r,label:a,context:i}=e;const{serverUrl:l}=gt(),{period:{start:s,end:c}}=Gt(),{autocompleteCache:u}=ln(),d=sn(),[h,p]=(0,t.useState)(!1),[f,m]=(0,t.useState)(n),_=Aa()(m,500);(0,t.useEffect)((()=>(_(n),_.cancel)),[n,_]);const[g,v]=(0,t.useState)([]),[y,b]=(0,t.useState)([]),[w,k]=(0,t.useState)([]),x=(0,t.useRef)(new AbortController),S=(0,t.useCallback)((e=>{const t=o()(1e3*s).startOf("day").valueOf()/1e3,n=o()(1e3*c).endOf("day").valueOf()/1e3;return new URLSearchParams({...e||{},limit:"".concat(en),start:"".concat(t),end:"".concat(n)})}),[s,c]),A=(e,t)=>e.map((e=>({value:e,type:"".concat(t),icon:Na[t]}))),C=async e=>{let{value:t,urlSuffix:n,setter:r,type:o,params:a}=e;if(!t&&o===Ta.metric)return;x.current.abort(),x.current=new AbortController;const{signal:i}=x.current,s={type:o,value:t,start:(null===a||void 0===a?void 0:a.get("start"))||"",end:(null===a||void 0===a?void 0:a.get("end"))||"",match:(null===a||void 0===a?void 0:a.get("match[]"))||""};p(!0);try{const e=u.get(s);if(e)return r(A(e,o)),void p(!1);const t=await fetch("".concat(l,"/api/v1/").concat(n,"?").concat(a),{signal:i});if(t.ok){const{data:e}=await t.json();r(A(e,o)),d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:e}})}p(!1)}catch(Vd){Vd instanceof Error&&"AbortError"!==Vd.name&&(d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:[]}}),p(!1),console.error(Vd))}};return(0,t.useEffect)((()=>{const e=i!==at.metricsql&&i!==at.empty;if(!l||!r||e)return;v([]);const t=Ea(Ca(r));return C({value:f,urlSuffix:"label/__name__/values",setter:v,type:Ta.metric,params:S({"match[]":'{__name__=~".*'.concat(t,'.*"}')})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,f,i,r]),(0,t.useEffect)((()=>{if(!l||i!==at.label)return;b([]);const e=Ea(r);return C({value:f,urlSuffix:"labels",setter:b,type:Ta.label,params:S(r?{"match[]":'{__name__="'.concat(e,'"}')}:void 0)}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,f,i,r]),(0,t.useEffect)((()=>{if(!l||!a||i!==at.labelValue)return;k([]);const e=Ea(r),t=Ea(Ca(f)),n=[r?'__name__="'.concat(e,'"'):"","".concat(a,'=~".*').concat(t,'.*"')].filter(Boolean).join(",");return C({value:f,urlSuffix:"label/".concat(a,"/values"),setter:k,type:Ta.labelValue,params:S({"match[]":"{".concat(n,"}")})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,f,i,r,a]),{metrics:g,labels:y,labelValues:w,loading:h}})({valueByContext:g,metric:f,label:m,context:_}),k=(0,t.useMemo)((()=>{switch(_){case at.metricsql:return[...v,...d];case at.label:return y;case at.labelValue:return b;default:return[]}}),[_,v,y,b]),x=(0,t.useCallback)((e=>{const t=h.beforeCursor;let n=h.afterCursor;const r=t.lastIndexOf(g,a[0]),o=r+g.length,i=t.substring(0,r),s=t.substring(o);if(_===at.labelValue){const t='"';n=n.replace(/^[^\s"|},]*/,"");const r=/(?:=|!=|=~|!~)$/.test(i),o='"'!==n.trim()[0];e="".concat(r?t:"").concat(e).concat(o?t:"")}_===at.label&&(n=n.replace(/^[^\s=!,{}()"|+\-/*^]*/,"")),_===at.metricsql&&(n=n.replace(/^[^\s[\]{}()"|+\-/*^]*/,""));const c="".concat(i).concat(e).concat(s).concat(n);l(c,i.length+e.length)}),[h]);return(0,t.useEffect)((()=>{if(!r.current)return void u({top:0,left:0});const e=r.current.querySelector("textarea")||r.current,t=window.getComputedStyle(e),n="".concat(t.getPropertyValue("font-size")),o="".concat(t.getPropertyValue("font-family")),a=parseInt("".concat(t.getPropertyValue("line-height"))),l=document.createElement("div");l.style.font="".concat(n," ").concat(o),l.style.padding=t.getPropertyValue("padding"),l.style.lineHeight="".concat(a,"px"),l.style.width="".concat(e.offsetWidth,"px"),l.style.maxWidth="".concat(e.offsetWidth,"px"),l.style.whiteSpace=t.getPropertyValue("white-space"),l.style.overflowWrap=t.getPropertyValue("overflow-wrap");const s=document.createElement("span");l.appendChild(document.createTextNode(h.beforeCursor)),l.appendChild(s),l.appendChild(document.createTextNode(h.afterCursor)),document.body.appendChild(l);const c=l.getBoundingClientRect(),d=s.getBoundingClientRect(),p=d.left-c.left,f=d.bottom-c.bottom-(i?a:0);u({top:f,left:p}),l.remove(),s.remove()}),[r,a,i]),mt(pt.FK,{children:mt(xa,{loading:w,disabledFullScreen:!0,value:g,options:k,anchor:r,minLength:0,offset:c,onSelect:x,onFoundOptions:s,maxDisplayResults:{limit:Xt,message:"Please, specify the query more precisely."}})})},Ia="No match! \nThis query hasn't selected any time series from database.\nEither the requested metrics are missing in the database,\nor there is a typo in series selector.",za="The shown results are marked as PARTIAL.\nThe result is marked as partial if one or more vmstorage nodes failed to respond to the query.",$a=e=>{let{value:n,onChange:r,onEnter:o,onArrowUp:a,onArrowDown:i,autocomplete:l,error:s,stats:c,label:u,disabled:d=!1}=e;const{autocompleteQuick:h}=ln(),{isMobile:p}=vr(),[f,m]=(0,t.useState)(!1),[_,g]=(0,t.useState)([0,0]),v=(0,t.useRef)(null),[y,b]=(0,t.useState)(l),w=(0,t.useRef)(Aa()(b,500)).current,k=[{show:"0"===(null===c||void 0===c?void 0:c.seriesFetched)&&!c.resultLength,text:Ia},{show:null===c||void 0===c?void 0:c.isPartial,text:za}].filter((e=>e.show)).map((e=>e.text)).join("");c&&(u="".concat(u," (").concat(c.executionTimeMsec||0,"ms)"));return(0,t.useEffect)((()=>{m(l)}),[h]),(0,t.useEffect)((()=>{b(!1),w(!0)}),[_]),mt("div",{className:"vm-query-editor",ref:v,children:[mt(Vr,{value:n,label:u,type:"textarea",autofocus:!p,error:s,warning:k,onKeyDown:e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:l}=e,s=(e.target.value||"").split("\n").length>1,c=n||r,u="ArrowDown"===t,d="Enter"===t;"ArrowUp"===t&&c&&(e.preventDefault(),a()),u&&c&&(e.preventDefault(),i()),d&&f&&e.preventDefault(),!d||l||s&&!c||f||(e.preventDefault(),o())},onChange:r,onChangeCaret:e=>{g((t=>t[0]===e[0]&&t[1]===e[1]?t:e))},disabled:d,inputmode:"search",caretPosition:_}),y&&l&&mt(La,{value:n,anchorEl:v,caretPosition:_,hasHelperText:Boolean(k||s),onSelect:(e,t)=>{r(e),g([t,t])},onFoundOptions:e=>{m(!!e.length)}})]})},ja=e=>{let{query:n,limit:r,error:o,onChange:a,onChangeLimit:i,onRun:l}=e;const{isMobile:s}=vr(),[c,u]=(0,t.useState)(""),[d,h]=(0,t.useState)(r);return(0,t.useEffect)((()=>{h(r)}),[r]),mt("div",{className:Kn()({"vm-explore-logs-header":!0,"vm-block":!0,"vm-block_mobile":s}),children:[mt("div",{className:"vm-explore-logs-header-top",children:[mt($a,{value:n,autocomplete:!1,onArrowUp:()=>null,onArrowDown:()=>null,onEnter:l,onChange:a,label:"Log query",error:o}),mt(Vr,{label:"Limit entries",type:"number",value:d,error:c,onChange:e=>{const t=+e;h(t),isNaN(t)||t<0?u("Number must be bigger than zero"):(u(""),i(t))},onEnter:l})]}),mt("div",{className:"vm-explore-logs-header-bottom",children:[mt("div",{className:"vm-explore-logs-header-bottom-contols"}),mt("div",{className:"vm-explore-logs-header-bottom-helpful",children:[mt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/victorialogs/logsql/",rel:"help noreferrer",children:[mt(_n,{}),"Query language docs"]}),mt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/victorialogs/",rel:"help noreferrer",children:[mt(Ln,{}),"Documentation"]})]}),mt("div",{className:"vm-explore-logs-header-bottom__execute",children:mt(Pr,{startIcon:mt(En,{}),onClick:l,fullWidth:!0,children:"Execute Query"})})]})]})},Fa=()=>{const[e,n]=(0,t.useState)(null),[r,o]=(0,t.useState)({width:0,height:0}),a=(0,t.useCallback)((()=>{o({width:(null===e||void 0===e?void 0:e.offsetWidth)||0,height:(null===e||void 0===e?void 0:e.offsetHeight)||0})}),[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]);return Jn("resize",a),(0,t.useEffect)(a,[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]),[n,r]},Ha="u-off",Va="u-label",Ba="width",Ua="height",Ya="top",Wa="bottom",qa="left",Za="right",Ka="#000",Ga=Ka+"0",Qa="mousemove",Ja="mousedown",Xa="mouseup",ei="mouseenter",ti="mouseleave",ni="dblclick",ri="change",oi="dppxchange",ai="--",ii="undefined"!=typeof window,li=ii?document:null,si=ii?window:null,ci=ii?navigator:null;let ui,di;function hi(e,t){if(null!=t){let n=e.classList;!n.contains(t)&&n.add(t)}}function pi(e,t){let n=e.classList;n.contains(t)&&n.remove(t)}function fi(e,t,n){e.style[t]=n+"px"}function mi(e,t,n,r){let o=li.createElement(e);return null!=t&&hi(o,t),null!=n&&n.insertBefore(o,r),o}function _i(e,t){return mi("div",e,t)}const gi=new WeakMap;function vi(e,t,n,r,o){let a="translate("+t+"px,"+n+"px)";a!=gi.get(e)&&(e.style.transform=a,gi.set(e,a),t<0||n<0||t>r||n>o?hi(e,Ha):pi(e,Ha))}const yi=new WeakMap;function bi(e,t,n){let r=t+n;r!=yi.get(e)&&(yi.set(e,r),e.style.background=t,e.style.borderColor=n)}const wi=new WeakMap;function ki(e,t,n,r){let o=t+""+n;o!=wi.get(e)&&(wi.set(e,o),e.style.height=n+"px",e.style.width=t+"px",e.style.marginLeft=r?-t/2+"px":0,e.style.marginTop=r?-n/2+"px":0)}const xi={passive:!0},Si={...xi,capture:!0};function Ai(e,t,n,r){t.addEventListener(e,n,r?Si:xi)}function Ci(e,t,n,r){t.removeEventListener(e,n,r?Si:xi)}function Ei(e,t,n,r){let o;n=n||0;let a=(r=r||t.length-1)<=2147483647;for(;r-n>1;)o=a?n+r>>1:Bi((n+r)/2),t[o]=t&&o<=n;o+=r)if(null!=e[o])return o;return-1}function Ti(e,t,n,r){let o=Ki(e),a=Ki(t);e==t&&(-1==o?(e*=n,t/=n):(e/=n,t*=n));let i=10==n?Gi:Qi,l=1==a?Yi:Bi,s=(1==o?Bi:Yi)(i(Vi(e))),c=l(i(Vi(t))),u=Zi(n,s),d=Zi(n,c);return 10==n&&(s<0&&(u=hl(u,-s)),c<0&&(d=hl(d,-c))),r||2==n?(e=u*o,t=d*a):(e=dl(e,u),t=ul(t,d)),[e,t]}function Ni(e,t,n,r){let o=Ti(e,t,n,r);return 0==e&&(o[0]=0),0==t&&(o[1]=0),o}ii&&function e(){let t=devicePixelRatio;ui!=t&&(ui=t,di&&Ci(ri,di,e),di=matchMedia("(min-resolution: ".concat(ui-.001,"dppx) and (max-resolution: ").concat(ui+.001,"dppx)")),Ai(ri,di,e),si.dispatchEvent(new CustomEvent(oi)))}();const Pi=.1,Di={mode:3,pad:Pi},Oi={pad:0,soft:null,mode:0},Ri={min:Oi,max:Oi};function Li(e,t,n,r){return kl(n)?zi(e,t,n):(Oi.pad=n,Oi.soft=r?0:null,Oi.mode=r?3:0,zi(e,t,Ri))}function Ii(e,t){return null==e?t:e}function zi(e,t,n){let r=n.min,o=n.max,a=Ii(r.pad,0),i=Ii(o.pad,0),l=Ii(r.hard,-Xi),s=Ii(o.hard,Xi),c=Ii(r.soft,Xi),u=Ii(o.soft,-Xi),d=Ii(r.mode,0),h=Ii(o.mode,0),p=t-e,f=Gi(p),m=qi(Vi(e),Vi(t)),_=Gi(m),g=Vi(_-f);(p<1e-9||g>10)&&(p=0,0!=e&&0!=t||(p=1e-9,2==d&&c!=Xi&&(a=0),2==h&&u!=-Xi&&(i=0)));let v=p||m||1e3,y=Gi(v),b=Zi(10,Bi(y)),w=hl(dl(e-v*(0==p?0==e?.1:1:a),b/10),9),k=e>=c&&(1==d||3==d&&w<=c||2==d&&w>=c)?c:Xi,x=qi(l,w=k?k:Wi(k,w)),S=hl(ul(t+v*(0==p?0==t?.1:1:i),b/10),9),A=t<=u&&(1==h||3==h&&S>=u||2==h&&S<=u)?u:-Xi,C=Wi(s,S>A&&t<=A?A:qi(A,S));return x==C&&0==x&&(C=100),[x,C]}const $i=new Intl.NumberFormat(ii?ci.language:"en-US"),ji=e=>$i.format(e),Fi=Math,Hi=Fi.PI,Vi=Fi.abs,Bi=Fi.floor,Ui=Fi.round,Yi=Fi.ceil,Wi=Fi.min,qi=Fi.max,Zi=Fi.pow,Ki=Fi.sign,Gi=Fi.log10,Qi=Fi.log2,Ji=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Fi.asinh(e/t)},Xi=1/0;function el(e){return 1+(0|Gi((e^e>>31)-(e>>31)))}function tl(e,t,n){return Wi(qi(e,t),n)}function nl(e){return"function"==typeof e?e:()=>e}const rl=e=>e,ol=(e,t)=>t,al=e=>null,il=e=>!0,ll=(e,t)=>e==t,sl=e=>hl(e,14);function cl(e,t){return sl(hl(sl(e/t))*t)}function ul(e,t){return sl(Yi(sl(e/t))*t)}function dl(e,t){return sl(Bi(sl(e/t))*t)}function hl(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(bl(e))return e;let n=10**t,r=e*n*(1+Number.EPSILON);return Ui(r)/n}const pl=new Map;function fl(e){return((""+e).split(".")[1]||"").length}function ml(e,t,n,r){let o=[],a=r.map(fl);for(let i=t;i=0&&i>=0?0:t)+(i>=a[e]?0:a[e]),c=hl(l,s);o.push(c),pl.set(c,s)}}return o}const _l={},gl=[],vl=[null,null],yl=Array.isArray,bl=Number.isInteger;function wl(e){return"string"==typeof e}function kl(e){let t=!1;if(null!=e){let n=e.constructor;t=null==n||n==Object}return t}function xl(e){return null!=e&&"object"==typeof e}const Sl=Object.getPrototypeOf(Uint8Array);function Al(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:kl;if(yl(e)){let r=e.find((e=>null!=e));if(yl(r)||n(r)){t=Array(e.length);for(let r=0;ra){for(r=i-1;r>=0&&null==e[r];)e[r--]=null;for(r=i+1;rPromise.resolve().then(e):queueMicrotask;const Tl=["January","February","March","April","May","June","July","August","September","October","November","December"],Nl=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function Pl(e){return e.slice(0,3)}const Dl=Nl.map(Pl),Ol=Tl.map(Pl),Rl={MMMM:Tl,MMM:Ol,WWWW:Nl,WWW:Dl};function Ll(e){return(e<10?"0":"")+e}const Il={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+"").slice(2),MMMM:(e,t)=>t.MMMM[e.getMonth()],MMM:(e,t)=>t.MMM[e.getMonth()],MM:e=>Ll(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>Ll(e.getDate()),D:e=>e.getDate(),WWWW:(e,t)=>t.WWWW[e.getDay()],WWW:(e,t)=>t.WWW[e.getDay()],HH:e=>Ll(e.getHours()),H:e=>e.getHours(),h:e=>{let t=e.getHours();return 0==t?12:t>12?t-12:t},AA:e=>e.getHours()>=12?"PM":"AM",aa:e=>e.getHours()>=12?"pm":"am",a:e=>e.getHours()>=12?"p":"a",mm:e=>Ll(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>Ll(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>{return((t=e.getMilliseconds())<10?"00":t<100?"0":"")+t;var t}};function zl(e,t){t=t||Rl;let n,r=[],o=/\{([a-z]+)\}|[^{]+/gi;for(;n=o.exec(e);)r.push("{"==n[0][0]?Il[n[1]]:n[0]);return e=>{let n="";for(let o=0;oe%1==0,Fl=[1,2,2.5,5],Hl=ml(10,-16,0,Fl),Vl=ml(10,0,16,Fl),Bl=Vl.filter(jl),Ul=Hl.concat(Vl),Yl="{YYYY}",Wl="\n"+Yl,ql="{M}/{D}",Zl="\n"+ql,Kl=Zl+"/{YY}",Gl="{aa}",Ql="{h}:{mm}"+Gl,Jl="\n"+Ql,Xl=":{ss}",es=null;function ts(e){let t=1e3*e,n=60*t,r=60*n,o=24*r,a=30*o,i=365*o;return[(1==e?ml(10,0,3,Fl).filter(jl):ml(10,-3,0,Fl)).concat([t,5*t,10*t,15*t,30*t,n,5*n,10*n,15*n,30*n,r,2*r,3*r,4*r,6*r,8*r,12*r,o,2*o,3*o,4*o,5*o,6*o,7*o,8*o,9*o,10*o,15*o,a,2*a,3*a,4*a,6*a,i,2*i,5*i,10*i,25*i,50*i,100*i]),[[i,Yl,es,es,es,es,es,es,1],[28*o,"{MMM}",Wl,es,es,es,es,es,1],[o,ql,Wl,es,es,es,es,es,1],[r,"{h}"+Gl,Kl,es,Zl,es,es,es,1],[n,Ql,Kl,es,Zl,es,es,es,1],[t,Xl,Kl+" "+Ql,es,Zl+" "+Ql,es,Jl,es,1],[e,Xl+".{fff}",Kl+" "+Ql,es,Zl+" "+Ql,es,Jl,es,1]],function(t){return(l,s,c,u,d,h)=>{let p=[],f=d>=i,m=d>=a&&d=o?o:d,i=y+(Bi(c)-Bi(g))+ul(g-y,a);p.push(i);let f=t(i),m=f.getHours()+f.getMinutes()/n+f.getSeconds()/r,_=d/r,v=h/l.axes[s]._space;for(;i=hl(i+d,1==e?0:3),!(i>u);)if(_>1){let e=Bi(hl(m+_,6))%24,n=t(i).getHours()-e;n>1&&(n=-1),i-=n*r,m=(m+_)%24,hl((i-p[p.length-1])/d,3)*v>=.7&&p.push(i)}else p.push(i)}return p}}]}const[ns,rs,os]=ts(1),[as,is,ls]=ts(.001);function ss(e,t){return e.map((e=>e.map(((n,r)=>0==r||8==r||null==n?n:t(1==r||0==e[8]?n:e[1]+n)))))}function cs(e,t){return(n,r,o,a,i)=>{let l,s,c,u,d,h,p=t.find((e=>i>=e[0]))||t[t.length-1];return r.map((t=>{let n=e(t),r=n.getFullYear(),o=n.getMonth(),a=n.getDate(),i=n.getHours(),f=n.getMinutes(),m=n.getSeconds(),_=r!=l&&p[2]||o!=s&&p[3]||a!=c&&p[4]||i!=u&&p[5]||f!=d&&p[6]||m!=h&&p[7]||p[1];return l=r,s=o,c=a,u=i,d=f,h=m,_(n)}))}}function us(e,t,n){return new Date(e,t,n)}function ds(e,t){return t(e)}ml(2,-53,53,[1]);function hs(e,t){return(n,r,o,a)=>null==a?ai:t(e(r))}const ps={show:!0,live:!0,isolate:!1,mount:()=>{},markers:{show:!0,width:2,stroke:function(e,t){let n=e.series[t];return n.width?n.stroke(e,t):n.points.width?n.points.stroke(e,t):null},fill:function(e,t){return e.series[t].fill(e,t)},dash:"solid"},idx:null,idxs:null,values:[]};const fs=[0,0];function ms(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{0==e.button&&(!r||e.target==t)&&n(e)}}function _s(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{(!r||e.target==t)&&n(e)}}const gs={show:!0,x:!0,y:!0,lock:!1,move:function(e,t,n){return fs[0]=t,fs[1]=n,fs},points:{show:function(e,t){let n=e.cursor.points,r=_i(),o=n.size(e,t);fi(r,Ba,o),fi(r,Ua,o);let a=o/-2;fi(r,"marginLeft",a),fi(r,"marginTop",a);let i=n.width(e,t,o);return i&&fi(r,"borderWidth",i),r},size:function(e,t){return e.series[t].points.size},width:0,stroke:function(e,t){let n=e.series[t].points;return n._stroke||n._fill},fill:function(e,t){let n=e.series[t].points;return n._fill||n._stroke}},bind:{mousedown:ms,mouseup:ms,click:ms,dblclick:ms,mousemove:_s,mouseleave:_s,mouseenter:_s},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,t)=>{t.stopPropagation(),t.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,t,n,r,o)=>r-o,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},vs={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},ys=Cl({},vs,{filter:ol}),bs=Cl({},ys,{size:10}),ws=Cl({},vs,{show:!1}),ks='12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',xs="bold "+ks,Ss={show:!0,scale:"x",stroke:Ka,space:50,gap:5,size:50,labelGap:0,labelSize:30,labelFont:xs,side:2,grid:ys,ticks:bs,border:ws,font:ks,lineGap:1.5,rotate:0},As={show:!0,scale:"x",auto:!1,sorted:1,min:Xi,max:-Xi,idxs:[]};function Cs(e,t,n,r,o){return t.map((e=>null==e?"":ji(e)))}function Es(e,t,n,r,o,a,i){let l=[],s=pl.get(o)||0;for(let c=n=i?n:hl(ul(n,o),s);c<=r;c=hl(c+o,s))l.push(Object.is(c,-0)?0:c);return l}function Ms(e,t,n,r,o,a,i){const l=[],s=e.scales[e.axes[t].scale].log,c=Bi((10==s?Gi:Qi)(n));o=Zi(s,c),10==s&&c<0&&(o=hl(o,-c));let u=n;do{l.push(u),u+=o,10==s&&(u=hl(u,pl.get(o))),u>=o*s&&(o=u)}while(u<=r);return l}function Ts(e,t,n,r,o,a,i){let l=e.scales[e.axes[t].scale].asinh,s=r>l?Ms(e,t,qi(l,n),r,o):[l],c=r>=0&&n<=0?[0]:[];return(n<-l?Ms(e,t,qi(l,-r),-n,o):[l]).reverse().map((e=>-e)).concat(c,s)}const Ns=/./,Ps=/[12357]/,Ds=/[125]/,Os=/1/,Rs=(e,t,n,r)=>e.map(((e,o)=>4==t&&0==e||o%r==0&&n.test(e.toExponential()[e<0?1:0])?e:null));function Ls(e,t,n,r,o){let a=e.axes[n],i=a.scale,l=e.scales[i],s=e.valToPos,c=a._space,u=s(10,i),d=s(9,i)-u>=c?Ns:s(7,i)-u>=c?Ps:s(5,i)-u>=c?Ds:Os;if(d==Os){let e=Vi(s(1,i)-u);if(eo,Hs={show:!0,auto:!0,sorted:0,gaps:Fs,alpha:1,facets:[Cl({},js,{scale:"x"}),Cl({},js,{scale:"y"})]},Vs={scale:"y",auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:Fs,alpha:1,points:{show:function(e,t){let{scale:n,idxs:r}=e.series[0],o=e._data[0],a=e.valToPos(o[r[0]],n,!0),i=e.valToPos(o[r[1]],n,!0),l=Vi(i-a)/(e.series[t].points.space*ui);return r[1]-r[0]<=l},filter:null},values:null,min:Xi,max:-Xi,idxs:[],path:null,clip:null};function Bs(e,t,n,r,o){return n/10}const Us={time:!0,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},Ys=Cl({},Us,{time:!1,ori:1}),Ws={};function qs(e,t){let n=Ws[e];return n||(n={key:e,plots:[],sub(e){n.plots.push(e)},unsub(e){n.plots=n.plots.filter((t=>t!=e))},pub(e,t,r,o,a,i,l){for(let s=0;s{let m=e.pxRound;const _=l.dir*(0==l.ori?1:-1),g=0==l.ori?ac:ic;let v,y;1==_?(v=n,y=r):(v=r,y=n);let b=m(c(t[v],l,p,d)),w=m(u(i[v],s,f,h)),k=m(c(t[y],l,p,d)),x=m(u(1==a?s.max:s.min,s,f,h)),S=new Path2D(o);return g(S,k,x),g(S,b,x),g(S,b,w),S}))}function Xs(e,t,n,r,o,a){let i=null;if(e.length>0){i=new Path2D;const l=0==t?lc:sc;let s=n;for(let t=0;tn[0]){let e=n[0]-s;e>0&&l(i,s,r,e,r+a),s=n[1]}}let c=n+o-s,u=10;c>0&&l(i,s,r-u/2,c,r+a+u)}return i}function ec(e,t,n,r,o,a,i){let l=[],s=e.length;for(let c=1==o?n:r;c>=n&&c<=r;c+=o){if(null===t[c]){let u=c,d=c;if(1==o)for(;++c<=r&&null===t[c];)d=c;else for(;--c>=n&&null===t[c];)d=c;let h=a(e[u]),p=d==u?h:a(e[d]),f=u-o;h=i<=0&&f>=0&&f=0&&m>=0&&m=h&&l.push([h,p])}}return l}function tc(e){return 0==e?rl:1==e?Ui:t=>cl(t,e)}function nc(e){let t=0==e?rc:oc,n=0==e?(e,t,n,r,o,a)=>{e.arcTo(t,n,r,o,a)}:(e,t,n,r,o,a)=>{e.arcTo(n,t,o,r,a)},r=0==e?(e,t,n,r,o)=>{e.rect(t,n,r,o)}:(e,t,n,r,o)=>{e.rect(n,t,o,r)};return function(e,o,a,i,l){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0;0==s&&0==c?r(e,o,a,i,l):(s=Wi(s,i/2,l/2),c=Wi(c,i/2,l/2),t(e,o+s,a),n(e,o+i,a,o+i,a+l,s),n(e,o+i,a+l,o,a+l,c),n(e,o,a+l,o,a,c),n(e,o,a,o+i,a,s),e.closePath())}}const rc=(e,t,n)=>{e.moveTo(t,n)},oc=(e,t,n)=>{e.moveTo(n,t)},ac=(e,t,n)=>{e.lineTo(t,n)},ic=(e,t,n)=>{e.lineTo(n,t)},lc=nc(0),sc=nc(1),cc=(e,t,n,r,o,a)=>{e.arc(t,n,r,o,a)},uc=(e,t,n,r,o,a)=>{e.arc(n,t,r,o,a)},dc=(e,t,n,r,o,a,i)=>{e.bezierCurveTo(t,n,r,o,a,i)},hc=(e,t,n,r,o,a,i)=>{e.bezierCurveTo(n,t,o,r,i,a)};function pc(e){return(e,t,n,r,o)=>Ks(e,t,((t,a,i,l,s,c,u,d,h,p,f)=>{let m,_,{pxRound:g,points:v}=t;0==l.ori?(m=rc,_=cc):(m=oc,_=uc);const y=hl(v.width*ui,3);let b=(v.size-v.width)/2*ui,w=hl(2*b,3),k=new Path2D,x=new Path2D,{left:S,top:A,width:C,height:E}=e.bbox;lc(x,S-w,A-w,C+2*w,E+2*w);const M=e=>{if(null!=i[e]){let t=g(c(a[e],l,p,d)),n=g(u(i[e],s,f,h));m(k,t+b,n),_(k,t,n,b,0,2*Hi)}};if(o)o.forEach(M);else for(let e=n;e<=r;e++)M(e);return{stroke:y>0?k:null,fill:k,clip:x,flags:2|Zs}}))}function fc(e){return(t,n,r,o,a,i)=>{r!=o&&(a!=r&&i!=r&&e(t,n,r),a!=o&&i!=o&&e(t,n,o),e(t,n,i))}}const mc=fc(ac),_c=fc(ic);function gc(e){const t=Ii(null===e||void 0===e?void 0:e.alignGaps,0);return(e,n,r,o)=>Ks(e,n,((a,i,l,s,c,u,d,h,p,f,m)=>{let _,g,v=a.pxRound,y=e=>v(u(e,s,f,h)),b=e=>v(d(e,c,m,p));0==s.ori?(_=ac,g=mc):(_=ic,g=_c);const w=s.dir*(0==s.ori?1:-1),k={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Zs},x=k.stroke;let S,A,C,E=Xi,M=-Xi,T=y(i[1==w?r:o]),N=Mi(l,r,o,1*w),P=Mi(l,r,o,-1*w),D=y(i[N]),O=y(i[P]),R=!1;for(let e=1==w?r:o;e>=r&&e<=o;e+=w){let t=y(i[e]),n=l[e];t==T?null!=n?(A=b(n),E==Xi&&(_(x,t,A),S=A),E=Wi(A,E),M=qi(A,M)):null===n&&(R=!0):(E!=Xi&&(g(x,T,E,M,S,A),C=T),null!=n?(A=b(n),_(x,t,A),E=M=S=A):(E=Xi,M=-Xi,null===n&&(R=!0)),T=t)}E!=Xi&&E!=M&&C!=T&&g(x,T,E,M,S,A);let[L,I]=Gs(e,n);if(null!=a.fill||0!=L){let t=k.fill=new Path2D(x),r=b(a.fillTo(e,n,a.min,a.max,L));_(t,O,r),_(t,D,r)}if(!a.spanGaps){let c=[];R&&c.push(...ec(i,l,r,o,w,y,t)),k.gaps=c=a.gaps(e,n,r,o,c),k.clip=Xs(c,s.ori,h,p,f,m)}return 0!=I&&(k.band=2==I?[Js(e,n,r,o,x,-1),Js(e,n,r,o,x,1)]:Js(e,n,r,o,x,I)),k}))}function vc(e,t,n,r,o,a){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:Xi;if(e.length>1){let l=null;for(let s=0,c=1/0;s0!==r[e]>0?n[e]=0:(n[e]=3*(s[e-1]+s[e])/((2*s[e]+s[e-1])/r[e-1]+(s[e]+2*s[e-1])/r[e]),isFinite(n[e])||(n[e]=0));n[i-1]=r[i-2];for(let c=0;c{Ic.pxRatio=ui})));const kc=gc(),xc=pc();function Sc(e,t,n,r){return(r?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map(((e,r)=>Ac(e,r,t,n)))}function Ac(e,t,n,r){return Cl({},0==t?n:r,e)}function Cc(e,t,n){return null==t?vl:[t,n]}const Ec=Cc;function Mc(e,t,n){return null==t?vl:Li(t,n,Pi,!0)}function Tc(e,t,n,r){return null==t?vl:Ti(t,n,e.scales[r].log,!1)}const Nc=Tc;function Pc(e,t,n,r){return null==t?vl:Ni(t,n,e.scales[r].log,!1)}const Dc=Pc;function Oc(e,t,n,r,o){let a=qi(el(e),el(t)),i=t-e,l=Ei(o/r*i,n);do{let e=n[l],t=r*e/i;if(t>=o&&a+(e<5?pl.get(e):0)<=17)return[e,t]}while(++l(t=Ui((n=+r)*ui))+"px")),t,n]}function Lc(e){e.show&&[e.font,e.labelFont].forEach((e=>{let t=hl(e[2]*ui,1);e[0]=e[0].replace(/[0-9.]+px/,t+"px"),e[1]=t}))}function Ic(e,t,n){const r={mode:Ii(e.mode,1)},o=r.mode;function a(e,t){return((3==t.distr?Gi(e>0?e:t.clamp(r,e,t.min,t.max,t.key)):4==t.distr?Ji(e,t.asinh):e)-t._min)/(t._max-t._min)}function i(e,t,n,r){let o=a(e,t);return r+n*(-1==t.dir?1-o:o)}function l(e,t,n,r){let o=a(e,t);return r+n*(-1==t.dir?o:1-o)}function s(e,t,n,r){return 0==t.ori?i(e,t,n,r):l(e,t,n,r)}r.valToPosH=i,r.valToPosV=l;let c=!1;r.status=0;const u=r.root=_i("uplot");if(null!=e.id&&(u.id=e.id),hi(u,e.class),e.title){_i("u-title",u).textContent=e.title}const d=mi("canvas"),h=r.ctx=d.getContext("2d"),p=_i("u-wrap",u);Ai("click",p,(e=>{if(e.target===m){(Tt!=At||Nt!=Ct)&&jt.click(r,e)}}),!0);const f=r.under=_i("u-under",p);p.appendChild(d);const m=r.over=_i("u-over",p),_=+Ii((e=Al(e)).pxAlign,1),g=tc(_);(e.plugins||[]).forEach((t=>{t.opts&&(e=t.opts(r,e)||e)}));const v=e.ms||.001,y=r.series=1==o?Sc(e.series||[],As,Vs,!1):(b=e.series||[null],w=Hs,b.map(((e,t)=>0==t?null:Cl({},w,e))));var b,w;const k=r.axes=Sc(e.axes||[],Ss,$s,!0),x=r.scales={},S=r.bands=e.bands||[];S.forEach((e=>{e.fill=nl(e.fill||null),e.dir=Ii(e.dir,-1)}));const A=2==o?y[1].facets[0].scale:y[0].scale,C={axes:function(){for(let e=0;ett[e])):v,b=2==p.distr?tt[v[1]]-tt[v[0]]:u,w=t.ticks,S=t.border,A=w.show?Ui(w.size*ui):0,C=t._rotate*-Hi/180,E=g(t._pos*ui),M=E+(A+_)*c;o=0==i?M:0,n=1==i?M:0,it(t.font[0],l,1==t.align?qa:2==t.align?Za:C>0?qa:C<0?Za:0==i?"center":3==a?Za:qa,C||1==i?"middle":2==a?Ya:Wa);let T=t.font[1]*t.lineGap,N=v.map((e=>g(s(e,p,f,m)))),P=t._values;for(let e=0;e0&&(y.forEach(((e,n)=>{if(n>0&&e.show&&(ct(n,!1),ct(n,!0),null==e._paths)){et!=e.alpha&&(h.globalAlpha=et=e.alpha);let a=2==o?[0,t[n][0].length-1]:function(e){let t=tl(Ve-1,0,He-1),n=tl(Be+1,0,He-1);for(;null==e[t]&&t>0;)t--;for(;null==e[n]&&n{if(t>0&&e.show){et!=e.alpha&&(h.globalAlpha=et=e.alpha),null!=e._paths&&ut(t,!1);{let n=null!=e._paths?e._paths.gaps:null,o=e.points.show(r,t,Ve,Be,n),a=e.points.filter(r,t,o,n);(o||a)&&(e.points._paths=e.points.paths(r,t,Ve,Be,a),ut(t,!0))}1!=et&&(h.globalAlpha=et=1),kn("drawSeries",t)}})))}},E=(e.drawOrder||["axes","series"]).map((e=>C[e]));function M(t){let n=x[t];if(null==n){let r=(e.scales||_l)[t]||_l;if(null!=r.from)M(r.from),x[t]=Cl({},x[r.from],r,{key:t});else{n=x[t]=Cl({},t==A?Us:Ys,r),n.key=t;let e=n.time,a=n.range,i=yl(a);if((t!=A||2==o&&!e)&&(!i||null!=a[0]&&null!=a[1]||(a={min:null==a[0]?Di:{mode:1,hard:a[0],soft:a[0]},max:null==a[1]?Di:{mode:1,hard:a[1],soft:a[1]}},i=!1),!i&&kl(a))){let e=a;a=(t,n,r)=>null==n?vl:Li(n,r,e)}n.range=nl(a||(e?Ec:t==A?3==n.distr?Nc:4==n.distr?Dc:Cc:3==n.distr?Tc:4==n.distr?Pc:Mc)),n.auto=nl(!i&&n.auto),n.clamp=nl(n.clamp||Bs),n._min=n._max=null}}}M("x"),M("y"),1==o&&y.forEach((e=>{M(e.scale)})),k.forEach((e=>{M(e.scale)}));for(let Tn in e.scales)M(Tn);const T=x[A],N=T.distr;let P,D;0==T.ori?(hi(u,"u-hz"),P=i,D=l):(hi(u,"u-vt"),P=l,D=i);const O={};for(let Tn in x){let e=x[Tn];null==e.min&&null==e.max||(O[Tn]={min:e.min,max:e.max},e.min=e.max=null)}const R=e.tzDate||(e=>new Date(Ui(e/v))),L=e.fmtDate||zl,I=1==v?os(R):ls(R),z=cs(R,ss(1==v?rs:is,L)),$=hs(R,ds("{YYYY}-{MM}-{DD} {h}:{mm}{aa}",L)),j=[],F=r.legend=Cl({},ps,e.legend),H=F.show,V=F.markers;let B,U,Y;F.idxs=j,V.width=nl(V.width),V.dash=nl(V.dash),V.stroke=nl(V.stroke),V.fill=nl(V.fill);let W,q=[],Z=[],K=!1,G={};if(F.live){const e=y[1]?y[1].values:null;K=null!=e,W=K?e(r,1,0):{_:0};for(let t in W)G[t]=ai}if(H)if(B=mi("table","u-legend",u),Y=mi("tbody",null,B),F.mount(r,B),K){U=mi("thead",null,B,Y);let e=mi("tr",null,U);for(var Q in mi("th",null,e),W)mi("th",Va,e).textContent=Q}else hi(B,"u-inline"),F.live&&hi(B,"u-live");const J={show:!0},X={show:!1};const ee=new Map;function te(e,t,n){let o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const a=ee.get(t)||{},i=Ce.bind[e](r,t,n,o);i&&(Ai(e,t,a[e]=i),ee.set(t,a))}function ne(e,t,n){const r=ee.get(t)||{};for(let o in r)null!=e&&o!=e||(Ci(o,t,r[o]),delete r[o]);null==e&&ee.delete(t)}let re=0,oe=0,ae=0,ie=0,le=0,se=0,ce=le,ue=se,de=ae,he=ie,pe=0,fe=0,me=0,_e=0;r.bbox={};let ge=!1,ve=!1,ye=!1,be=!1,we=!1,ke=!1;function xe(e,t,n){(n||e!=r.width||t!=r.height)&&Se(e,t),vt(!1),ye=!0,ve=!0,Lt()}function Se(e,t){r.width=re=ae=e,r.height=oe=ie=t,le=se=0,function(){let e=!1,t=!1,n=!1,r=!1;k.forEach(((o,a)=>{if(o.show&&o._show){let{side:a,_size:i}=o,l=a%2,s=i+(null!=o.label?o.labelSize:0);s>0&&(l?(ae-=s,3==a?(le+=s,r=!0):n=!0):(ie-=s,0==a?(se+=s,e=!0):t=!0))}})),ze[0]=e,ze[1]=n,ze[2]=t,ze[3]=r,ae-=Fe[1]+Fe[3],le+=Fe[3],ie-=Fe[2]+Fe[0],se+=Fe[0]}(),function(){let e=le+ae,t=se+ie,n=le,r=se;function o(o,a){switch(o){case 1:return e+=a,e-a;case 2:return t+=a,t-a;case 3:return n-=a,n+a;case 0:return r-=a,r+a}}k.forEach(((e,t)=>{if(e.show&&e._show){let t=e.side;e._pos=o(t,e._size),null!=e.label&&(e._lpos=o(t,e.labelSize))}}))}();let n=r.bbox;pe=n.left=cl(le*ui,.5),fe=n.top=cl(se*ui,.5),me=n.width=cl(ae*ui,.5),_e=n.height=cl(ie*ui,.5)}const Ae=3;r.setSize=function(e){let{width:t,height:n}=e;xe(t,n)};const Ce=r.cursor=Cl({},gs,{drag:{y:2==o}},e.cursor);if(null==Ce.dataIdx){var Ee,Me;let e=Ce.hover,n=e.skip=new Set(null!==(Ee=e.skip)&&void 0!==Ee?Ee:[]);n.add(void 0);let r=e.prox=nl(e.prox),o=null!==(Me=e.bias)&&void 0!==Me?Me:e.bias=0;Ce.dataIdx=(e,a,i,l)=>{var s;if(0==a)return i;let c=i,u=null!==(s=r(e,a,i,l))&&void 0!==s?s:Xi,d=u>=0&&u0;)n.has(m[e])||(t=e);if(0==o||1==o)for(e=i;null==r&&e++u&&(c=null)}return c}}const Te=e=>{Ce.event=e};Ce.idxs=j,Ce._lock=!1;let Ne=Ce.points;Ne.show=nl(Ne.show),Ne.size=nl(Ne.size),Ne.stroke=nl(Ne.stroke),Ne.width=nl(Ne.width),Ne.fill=nl(Ne.fill);const Pe=r.focus=Cl({},e.focus||{alpha:.3},Ce.focus),De=Pe.prox>=0;let Oe=[null],Re=[null],Le=[null];function Ie(e,t){if(1==o||t>0){let t=1==o&&x[e.scale].time,n=e.value;e.value=t?wl(n)?hs(R,ds(n,L)):n||$:n||zs,e.label=e.label||(t?"Time":"Value")}if(t>0){e.width=null==e.width?1:e.width,e.paths=e.paths||kc||al,e.fillTo=nl(e.fillTo||Qs),e.pxAlign=+Ii(e.pxAlign,_),e.pxRound=tc(e.pxAlign),e.stroke=nl(e.stroke||null),e.fill=nl(e.fill||null),e._stroke=e._fill=e._paths=e._focus=null;let t=hl((3+2*(qi(1,e.width)||1))*1,3),n=e.points=Cl({},{size:t,width:qi(1,.2*t),stroke:e.stroke,space:2*t,paths:xc,_stroke:null,_fill:null},e.points);n.show=nl(n.show),n.filter=nl(n.filter),n.fill=nl(n.fill),n.stroke=nl(n.stroke),n.paths=nl(n.paths),n.pxAlign=e.pxAlign}if(H){let n=function(e,t){if(0==t&&(K||!F.live||2==o))return vl;let n=[],a=mi("tr","u-series",Y,Y.childNodes[t]);hi(a,e.class),e.show||hi(a,Ha);let i=mi("th",null,a);if(V.show){let e=_i("u-marker",i);if(t>0){let n=V.width(r,t);n&&(e.style.border=n+"px "+V.dash(r,t)+" "+V.stroke(r,t)),e.style.background=V.fill(r,t)}}let l=_i(Va,i);for(var s in l.textContent=e.label,t>0&&(V.show||(l.style.color=e.width>0?V.stroke(r,t):V.fill(r,t)),te("click",i,(t=>{if(Ce._lock)return;Te(t);let n=y.indexOf(e);if((t.ctrlKey||t.metaKey)!=F.isolate){let e=y.some(((e,t)=>t>0&&t!=n&&e.show));y.forEach(((t,r)=>{r>0&&Wt(r,e?r==n?J:X:J,!0,Sn.setSeries)}))}else Wt(n,{show:!e.show},!0,Sn.setSeries)}),!1),De&&te(ei,i,(t=>{Ce._lock||(Te(t),Wt(y.indexOf(e),Gt,!0,Sn.setSeries))}),!1)),W){let e=mi("td","u-value",a);e.textContent="--",n.push(e)}return[a,n]}(e,t);q.splice(t,0,n[0]),Z.splice(t,0,n[1]),F.values.push(null)}if(Ce.show){j.splice(t,0,null);let n=function(e,t){if(t>0){let n=Ce.points.show(r,t);if(n)return hi(n,"u-cursor-pt"),hi(n,e.class),vi(n,-10,-10,ae,ie),m.insertBefore(n,Oe[t]),n}}(e,t);null!=n&&(Oe.splice(t,0,n),Re.splice(t,0,0),Le.splice(t,0,0))}kn("addSeries",t)}r.addSeries=function(e,t){t=null==t?y.length:t,e=1==o?Ac(e,t,As,Vs):Ac(e,t,null,Hs),y.splice(t,0,e),Ie(y[t],t)},r.delSeries=function(e){if(y.splice(e,1),H){F.values.splice(e,1),Z.splice(e,1);let t=q.splice(e,1)[0];ne(null,t.firstChild),t.remove()}Ce.show&&(j.splice(e,1),Oe.length>1&&(Oe.splice(e,1)[0].remove(),Re.splice(e,1),Le.splice(e,1))),kn("delSeries",e)};const ze=[!1,!1,!1,!1];function $e(e,t,n,r){let[o,a,i,l]=n,s=t%2,c=0;return 0==s&&(l||a)&&(c=0==t&&!o||2==t&&!i?Ui(Ss.size/3):0),1==s&&(o||i)&&(c=1==t&&!a||3==t&&!l?Ui($s.size/2):0),c}const je=r.padding=(e.padding||[$e,$e,$e,$e]).map((e=>nl(Ii(e,$e)))),Fe=r._padding=je.map(((e,t)=>e(r,t,ze,0)));let He,Ve=null,Be=null;const Ue=1==o?y[0].idxs:null;let Ye,We,qe,Ze,Ke,Ge,Qe,Je,Xe,et,tt=null,nt=!1;function rt(e,n){if(t=null==e?[]:e,r.data=r._data=t,2==o){He=0;for(let e=1;e=0,ke=!0,Lt()}}function ot(){let e,n;nt=!0,1==o&&(He>0?(Ve=Ue[0]=0,Be=Ue[1]=He-1,e=t[0][Ve],n=t[0][Be],2==N?(e=Ve,n=Be):e==n&&(3==N?[e,n]=Ti(e,e,T.log,!1):4==N?[e,n]=Ni(e,e,T.log,!1):T.time?n=e+Ui(86400/v):[e,n]=Li(e,n,Pi,!0))):(Ve=Ue[0]=e=null,Be=Ue[1]=n=null)),Yt(A,e,n)}function at(e,t,n,r,o,a){var i,l,s,c,u;null!==(i=e)&&void 0!==i||(e=Ga),null!==(l=n)&&void 0!==l||(n=gl),null!==(s=r)&&void 0!==s||(r="butt"),null!==(c=o)&&void 0!==c||(o=Ga),null!==(u=a)&&void 0!==u||(a="round"),e!=Ye&&(h.strokeStyle=Ye=e),o!=We&&(h.fillStyle=We=o),t!=qe&&(h.lineWidth=qe=t),a!=Ke&&(h.lineJoin=Ke=a),r!=Ge&&(h.lineCap=Ge=r),n!=Ze&&h.setLineDash(Ze=n)}function it(e,t,n,r){t!=We&&(h.fillStyle=We=t),e!=Qe&&(h.font=Qe=e),n!=Je&&(h.textAlign=Je=n),r!=Xe&&(h.textBaseline=Xe=r)}function lt(e,t,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(o.length>0&&e.auto(r,nt)&&(null==t||null==t.min)){let t=Ii(Ve,0),r=Ii(Be,o.length-1),i=null==n.min?3==e.distr?function(e,t,n){let r=Xi,o=-Xi;for(let a=t;a<=n;a++){let t=e[a];null!=t&&t>0&&(to&&(o=t))}return[r,o]}(o,t,r):function(e,t,n,r){let o=Xi,a=-Xi;if(1==r)o=e[t],a=e[n];else if(-1==r)o=e[n],a=e[t];else for(let i=t;i<=n;i++){let t=e[i];null!=t&&(ta&&(a=t))}return[o,a]}(o,t,r,a):[n.min,n.max];e.min=Wi(e.min,n.min=i[0]),e.max=qi(e.max,n.max=i[1])}}r.setData=rt;const st={min:null,max:null};function ct(e,t){let n=t?y[e].points:y[e];n._stroke=n.stroke(r,e),n._fill=n.fill(r,e)}function ut(e,n){let o=n?y[e].points:y[e],{stroke:a,fill:i,clip:l,flags:s,_stroke:c=o._stroke,_fill:u=o._fill,_width:d=o.width}=o._paths;d=hl(d*ui,3);let p=null,f=d%2/2;n&&null==u&&(u=d>0?"#fff":c);let m=1==o.pxAlign&&f>0;if(m&&h.translate(f,f),!n){let e=pe-d/2,t=fe-d/2,n=me+d,r=_e+d;p=new Path2D,p.rect(e,t,n,r)}n?ht(c,d,o.dash,o.cap,u,a,i,s,l):function(e,n,o,a,i,l,s,c,u,d,h){let p=!1;0!=u&&S.forEach(((f,m)=>{if(f.series[0]==e){let e,_=y[f.series[1]],g=t[f.series[1]],v=(_._paths||_l).band;yl(v)&&(v=1==f.dir?v[0]:v[1]);let b=null;_.show&&v&&function(e,t,n){for(t=Ii(t,0),n=Ii(n,e.length-1);t<=n;){if(null!=e[t])return!0;t++}return!1}(g,Ve,Be)?(b=f.fill(r,m)||l,e=_._paths.clip):v=null,ht(n,o,a,i,b,s,c,u,d,h,e,v),p=!0}})),p||ht(n,o,a,i,l,s,c,u,d,h)}(e,c,d,o.dash,o.cap,u,a,i,s,p,l),m&&h.translate(-f,-f)}const dt=2|Zs;function ht(e,t,n,r,o,a,i,l,s,c,u,d){at(e,t,n,r,o),(s||c||d)&&(h.save(),s&&h.clip(s),c&&h.clip(c)),d?(l&dt)==dt?(h.clip(d),u&&h.clip(u),ft(o,i),pt(e,a,t)):2&l?(ft(o,i),h.clip(d),pt(e,a,t)):l&Zs&&(h.save(),h.clip(d),u&&h.clip(u),ft(o,i),h.restore(),pt(e,a,t)):(ft(o,i),pt(e,a,t)),(s||c||d)&&h.restore()}function pt(e,t,n){n>0&&(t instanceof Map?t.forEach(((e,t)=>{h.strokeStyle=Ye=t,h.stroke(e)})):null!=t&&e&&h.stroke(t))}function ft(e,t){t instanceof Map?t.forEach(((e,t)=>{h.fillStyle=We=t,h.fill(e)})):null!=t&&e&&h.fill(t)}function mt(e,t,n,r,o,a,i,l,s,c){let u=i%2/2;1==_&&h.translate(u,u),at(l,i,s,c,l),h.beginPath();let d,p,f,m,g=o+(0==r||3==r?-a:a);0==n?(p=o,m=g):(d=o,f=g);for(let _=0;_{if(!n.show)return;let a=x[n.scale];if(null==a.min)return void(n._show&&(t=!1,n._show=!1,vt(!1)));n._show||(t=!1,n._show=!0,vt(!1));let i=n.side,l=i%2,{min:s,max:c}=a,[u,d]=function(e,t,n,o){let a,i=k[e];if(o<=0)a=[0,0];else{let l=i._space=i.space(r,e,t,n,o);a=Oc(t,n,i._incrs=i.incrs(r,e,t,n,o,l),o,l)}return i._found=a}(o,s,c,0==l?ae:ie);if(0==d)return;let h=2==a.distr,p=n._splits=n.splits(r,o,s,c,u,d,h),f=2==a.distr?p.map((e=>tt[e])):p,m=2==a.distr?tt[p[1]]-tt[p[0]]:u,_=n._values=n.values(r,n.filter(r,f,o,d,m),o,d,m);n._rotate=2==i?n.rotate(r,_,o,d):0;let g=n._size;n._size=Yi(n.size(r,_,o,e)),null!=g&&n._size!=g&&(t=!1)})),t}function gt(e){let t=!0;return je.forEach(((n,o)=>{let a=n(r,o,ze,e);a!=Fe[o]&&(t=!1),Fe[o]=a})),t}function vt(e){y.forEach(((t,n)=>{n>0&&(t._paths=null,e&&(1==o?(t.min=null,t.max=null):t.facets.forEach((e=>{e.min=null,e.max=null}))))}))}let yt,bt,wt,kt,xt,St,At,Ct,Et,Mt,Tt,Nt,Pt=!1,Dt=!1,Ot=[];function Rt(){Dt=!1;for(let e=0;e0){y.forEach(((n,a)=>{if(1==o){let o=n.scale,i=O[o];if(null==i)return;let l=e[o];if(0==a){let e=l.range(r,l.min,l.max,o);l.min=e[0],l.max=e[1],Ve=Ei(l.min,t[0]),Be=Ei(l.max,t[0]),Be-Ve>1&&(t[0][Ve]l.max&&Be--),n.min=tt[Ve],n.max=tt[Be]}else n.show&&n.auto&<(l,i,n,t[a],n.sorted);n.idxs[0]=Ve,n.idxs[1]=Be}else if(a>0&&n.show&&n.auto){let[r,o]=n.facets,i=r.scale,l=o.scale,[s,c]=t[a],u=e[i],d=e[l];null!=u&<(u,O[i],r,s,r.sorted),null!=d&<(d,O[l],o,c,o.sorted),n.min=o.min,n.max=o.max}}));for(let t in e){let n=e[t],o=O[t];if(null==n.from&&(null==o||null==o.min)){let e=n.range(r,n.min==Xi?null:n.min,n.max==-Xi?null:n.max,t);n.min=e[0],n.max=e[1]}}}for(let t in e){let n=e[t];if(null!=n.from){let o=e[n.from];if(null==o.min)n.min=n.max=null;else{let e=n.range(r,o.min,o.max,t);n.min=e[0],n.max=e[1]}}}let n={},a=!1;for(let t in e){let r=e[t],o=x[t];if(o.min!=r.min||o.max!=r.max){o.min=r.min,o.max=r.max;let e=o.distr;o._min=3==e?Gi(o.min):4==e?Ji(o.min,o.asinh):o.min,o._max=3==e?Gi(o.max):4==e?Ji(o.max,o.asinh):o.max,n[t]=a=!0}}if(a){y.forEach(((e,t)=>{2==o?t>0&&n.y&&(e._paths=null):n[e.scale]&&(e._paths=null)}));for(let e in n)ye=!0,kn("setScale",e);Ce.show&&Ce.left>=0&&(be=ke=!0)}for(let t in O)O[t]=null}(),ge=!1),ye&&(!function(){let e=!1,t=0;for(;!e;){t++;let n=_t(t),o=gt(t);e=t==Ae||n&&o,e||(Se(r.width,r.height),ve=!0)}}(),ye=!1),ve){if(fi(f,qa,le),fi(f,Ya,se),fi(f,Ba,ae),fi(f,Ua,ie),fi(m,qa,le),fi(m,Ya,se),fi(m,Ba,ae),fi(m,Ua,ie),fi(p,Ba,re),fi(p,Ua,oe),d.width=Ui(re*ui),d.height=Ui(oe*ui),k.forEach((e=>{let{_el:t,_show:n,_size:r,_pos:o,side:a}=e;if(null!=t)if(n){let e=a%2==1;fi(t,e?"left":"top",o-(3===a||0===a?r:0)),fi(t,e?"width":"height",r),fi(t,e?"top":"left",e?se:le),fi(t,e?"height":"width",e?ie:ae),pi(t,Ha)}else hi(t,Ha)})),Ye=We=qe=Ke=Ge=Qe=Je=Xe=Ze=null,et=1,ln(!0),le!=ce||se!=ue||ae!=de||ie!=he){vt(!1);let e=ae/de,t=ie/he;if(Ce.show&&!be&&Ce.left>=0){Ce.left*=e,Ce.top*=t,wt&&vi(wt,Ui(Ce.left),0,ae,ie),kt&&vi(kt,0,Ui(Ce.top),ae,ie);for(let n=1;n=0&&Vt.width>0){Vt.left*=e,Vt.width*=e,Vt.top*=t,Vt.height*=t;for(let e in un)fi(Bt,e,Vt[e])}ce=le,ue=se,de=ae,he=ie}kn("setSize"),ve=!1}re>0&&oe>0&&(h.clearRect(0,0,d.width,d.height),kn("drawClear"),E.forEach((e=>e())),kn("draw")),Vt.show&&we&&(Ut(Vt),we=!1),Ce.show&&be&&(on(null,!0,!1),be=!1),F.show&&F.live&&ke&&(nn(),ke=!1),c||(c=!0,r.status=1,kn("ready")),nt=!1,Pt=!1}function zt(e,n){let o=x[e];if(null==o.from){if(0==He){let t=o.range(r,n.min,n.max,e);n.min=t[0],n.max=t[1]}if(n.min>n.max){let e=n.min;n.min=n.max,n.max=e}if(He>1&&null!=n.min&&null!=n.max&&n.max-n.min<1e-16)return;e==A&&2==o.distr&&He>0&&(n.min=Ei(n.min,t[0]),n.max=Ei(n.max,t[0]),n.min==n.max&&n.max++),O[e]=n,ge=!0,Lt()}}r.batch=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Pt=!0,Dt=t,e(r),It(),t&&Ot.length>0&&queueMicrotask(Rt)},r.redraw=(e,t)=>{ye=t||!1,!1!==e?Yt(A,T.min,T.max):Lt()},r.setScale=zt;let $t=!1;const jt=Ce.drag;let Ft=jt.x,Ht=jt.y;Ce.show&&(Ce.x&&(yt=_i("u-cursor-x",m)),Ce.y&&(bt=_i("u-cursor-y",m)),0==T.ori?(wt=yt,kt=bt):(wt=bt,kt=yt),Tt=Ce.left,Nt=Ce.top);const Vt=r.select=Cl({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Bt=Vt.show?_i("u-select",Vt.over?m:f):null;function Ut(e,t){if(Vt.show){for(let t in e)Vt[t]=e[t],t in un&&fi(Bt,t,e[t]);!1!==t&&kn("setSelect")}}function Yt(e,t,n){zt(e,{min:t,max:n})}function Wt(e,t,n,a){null!=t.focus&&function(e){if(e!=Kt){let t=null==e,n=1!=Pe.alpha;y.forEach(((r,a)=>{if(1==o||a>0){let o=t||0==a||a==e;r._focus=t?null:o,n&&function(e,t){y[e].alpha=t,Ce.show&&Oe[e]&&(Oe[e].style.opacity=t);H&&q[e]&&(q[e].style.opacity=t)}(a,o?1:Pe.alpha)}})),Kt=e,n&&Lt()}}(e),null!=t.show&&y.forEach(((n,r)=>{r>0&&(e==r||null==e)&&(n.show=t.show,function(e,t){let n=y[e],r=H?q[e]:null;n.show?r&&pi(r,Ha):(r&&hi(r,Ha),Oe.length>1&&vi(Oe[e],-10,-10,ae,ie))}(r,t.show),2==o?(Yt(n.facets[0].scale,null,null),Yt(n.facets[1].scale,null,null)):Yt(n.scale,null,null),Lt())})),!1!==n&&kn("setSeries",e,t),a&&En("setSeries",r,e,t)}let qt,Zt,Kt;r.setSelect=Ut,r.setSeries=Wt,r.addBand=function(e,t){e.fill=nl(e.fill||null),e.dir=Ii(e.dir,-1),t=null==t?S.length:t,S.splice(t,0,e)},r.setBand=function(e,t){Cl(S[e],t)},r.delBand=function(e){null==e?S.length=0:S.splice(e,1)};const Gt={focus:!0};function Qt(e,t,n){let r=x[t];n&&(e=e/ui-(1==r.ori?se:le));let o=ae;1==r.ori&&(o=ie,e=o-e),-1==r.dir&&(e=o-e);let a=r._min,i=a+(r._max-a)*(e/o),l=r.distr;return 3==l?Zi(10,i):4==l?function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Fi.sinh(e)*t}(i,r.asinh):i}function Jt(e,t){fi(Bt,qa,Vt.left=e),fi(Bt,Ba,Vt.width=t)}function Xt(e,t){fi(Bt,Ya,Vt.top=e),fi(Bt,Ua,Vt.height=t)}H&&De&&te(ti,B,(e=>{Ce._lock||(Te(e),null!=Kt&&Wt(null,Gt,!0,Sn.setSeries))})),r.valToIdx=e=>Ei(e,t[0]),r.posToIdx=function(e,n){return Ei(Qt(e,A,n),t[0],Ve,Be)},r.posToVal=Qt,r.valToPos=(e,t,n)=>0==x[t].ori?i(e,x[t],n?me:ae,n?pe:0):l(e,x[t],n?_e:ie,n?fe:0),r.setCursor=(e,t,n)=>{Tt=e.left,Nt=e.top,on(null,t,n)};let en=0==T.ori?Jt:Xt,tn=1==T.ori?Jt:Xt;function nn(e,t){null!=e&&(e.idxs?e.idxs.forEach(((e,t)=>{j[t]=e})):void 0!==e.idx&&j.fill(e.idx),F.idx=j[0]);for(let n=0;n0||1==o&&!K)&&rn(n,j[n]);H&&F.live&&function(){if(H&&F.live)for(let e=2==o?1:0;eBe;qt=Xi;let s=0==T.ori?ae:ie,c=1==T.ori?ae:ie;if(Tt<0||0==He||l){i=Ce.idx=null;for(let e=0;e0&&Oe.length>1&&vi(Oe[e],-10,-10,ae,ie);De&&Wt(null,Gt,!0,null==e&&Sn.setSeries),F.live&&(j.fill(i),ke=!0)}else{let e,n,a;1==o&&(e=0==T.ori?Tt:Nt,n=Qt(e,A),i=Ce.idx=Ei(n,t[0],Ve,Be),a=P(t[0][i],T,s,0));for(let l=2==o?1:0;l0&&e.show){let t,n,a=null==p?-10:D(p,1==o?x[e.scale]:x[e.facets[1].scale],c,0);if(De&&null!=p){let t=1==T.ori?Tt:Nt,n=Vi(Pe.dist(r,l,h,a,t));if(n=0?1:-1;a==(p>=0?1:-1)&&(1==a?1==r?p>=o:p<=o:1==r?p<=o:p>=o)&&(qt=n,Zt=l)}else qt=n,Zt=l}}if(0==T.ori?(t=f,n=a):(t=a,n=f),ke&&Oe.length>1){bi(Oe[l],Ce.points.fill(r,l),Ce.points.stroke(r,l));let e,o,a,i,s=!0,c=Ce.points.bbox;if(null!=c){s=!1;let t=c(r,l);a=t.left,i=t.top,e=t.width,o=t.height}else a=t,i=n,e=o=Ce.points.size(r,l);ki(Oe[l],e,o,s),Re[l]=a,Le[l]=i,vi(Oe[l],ul(a,1),ul(i,1),ae,ie)}}}}if(Vt.show&&$t)if(null!=e){let[t,n]=Sn.scales,[r,o]=Sn.match,[a,i]=e.cursor.sync.scales,l=e.cursor.drag;if(Ft=l._x,Ht=l._y,Ft||Ht){let l,u,d,h,p,{left:f,top:m,width:_,height:g}=e.select,v=e.scales[t].ori,y=e.posToVal,b=null!=t&&r(t,a),w=null!=n&&o(n,i);b&&Ft?(0==v?(l=f,u=_):(l=m,u=g),d=x[t],h=P(y(l,a),d,s,0),p=P(y(l+u,a),d,s,0),en(Wi(h,p),Vi(p-h))):en(0,s),w&&Ht?(1==v?(l=f,u=_):(l=m,u=g),d=x[n],h=D(y(l,i),d,c,0),p=D(y(l+u,i),d,c,0),tn(Wi(h,p),Vi(p-h))):tn(0,c)}else dn()}else{let e=Vi(Et-xt),t=Vi(Mt-St);if(1==T.ori){let n=e;e=t,t=n}Ft=jt.x&&e>=jt.dist,Ht=jt.y&&t>=jt.dist;let n,r,o=jt.uni;null!=o?Ft&&Ht&&(Ft=e>=o,Ht=t>=o,Ft||Ht||(t>e?Ht=!0:Ft=!0)):jt.x&&jt.y&&(Ft||Ht)&&(Ft=Ht=!0),Ft&&(0==T.ori?(n=At,r=Tt):(n=Ct,r=Nt),en(Wi(n,r),Vi(r-n)),Ht||tn(0,c)),Ht&&(1==T.ori?(n=At,r=Tt):(n=Ct,r=Nt),tn(Wi(n,r),Vi(r-n)),Ft||en(0,s)),Ft||Ht||(en(0,0),tn(0,0))}if(jt._x=Ft,jt._y=Ht,null==e){if(a){if(null!=An){let[e,t]=Sn.scales;Sn.values[0]=null!=e?Qt(0==T.ori?Tt:Nt,e):null,Sn.values[1]=null!=t?Qt(1==T.ori?Tt:Nt,t):null}En(Qa,r,Tt,Nt,ae,ie,i)}if(De){let e=a&&Sn.setSeries,t=Pe.prox;null==Kt?qt<=t&&Wt(Zt,Gt,!0,e):qt>t?Wt(null,Gt,!0,e):Zt!=Kt&&Wt(Zt,Gt,!0,e)}}ke&&(F.idx=i,nn()),!1!==n&&kn("setCursor")}r.setLegend=nn;let an=null;function ln(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?an=null:(an=m.getBoundingClientRect(),kn("syncRect",an))}function sn(e,t,n,r,o,a,i){Ce._lock||$t&&null!=e&&0==e.movementX&&0==e.movementY||(cn(e,t,n,r,o,a,i,!1,null!=e),null!=e?on(null,!0,!0):on(t,!0,!1))}function cn(e,t,n,o,a,i,l,c,u){if(null==an&&ln(!1),Te(e),null!=e)n=e.clientX-an.left,o=e.clientY-an.top;else{if(n<0||o<0)return Tt=-10,void(Nt=-10);let[e,r]=Sn.scales,l=t.cursor.sync,[c,u]=l.values,[d,h]=l.scales,[p,f]=Sn.match,m=t.axes[0].side%2==1,_=0==T.ori?ae:ie,g=1==T.ori?ae:ie,v=m?i:a,y=m?a:i,b=m?o:n,w=m?n:o;if(n=null!=d?p(e,d)?s(c,x[e],_,0):-10:_*(b/v),o=null!=h?f(r,h)?s(u,x[r],g,0):-10:g*(w/y),1==T.ori){let e=n;n=o,o=e}}u&&((n<=1||n>=ae-1)&&(n=cl(n,ae)),(o<=1||o>=ie-1)&&(o=cl(o,ie))),c?(xt=n,St=o,[At,Ct]=Ce.move(r,n,o)):(Tt=n,Nt=o)}Object.defineProperty(r,"rect",{get:()=>(null==an&&ln(!1),an)});const un={width:0,height:0,left:0,top:0};function dn(){Ut(un,!1)}let hn,pn,fn,mn;function _n(e,t,n,o,a,i,l){$t=!0,Ft=Ht=jt._x=jt._y=!1,cn(e,t,n,o,a,i,0,!0,!1),null!=e&&(te(Xa,li,gn,!1),En(Ja,r,At,Ct,ae,ie,null));let{left:s,top:c,width:u,height:d}=Vt;hn=s,pn=c,fn=u,mn=d,dn()}function gn(e,t,n,o,a,i,l){$t=jt._x=jt._y=!1,cn(e,t,n,o,a,i,0,!1,!0);let{left:s,top:c,width:u,height:d}=Vt,h=u>0||d>0,p=hn!=s||pn!=c||fn!=u||mn!=d;if(h&&p&&Ut(Vt),jt.setScale&&h&&p){let e=s,t=u,n=c,r=d;if(1==T.ori&&(e=c,t=d,n=s,r=u),Ft&&Yt(A,Qt(e,A),Qt(e+t,A)),Ht)for(let o in x){let e=x[o];o!=A&&null==e.from&&e.min!=Xi&&Yt(o,Qt(n+r,o),Qt(n,o))}dn()}else Ce.lock&&(Ce._lock=!Ce._lock,Ce._lock||on(null,!0,!1));null!=e&&(ne(Xa,li),En(Xa,r,Tt,Nt,ae,ie,null))}function vn(e,t,n,o,a,i,l){Ce._lock||(Te(e),ot(),dn(),null!=e&&En(ni,r,Tt,Nt,ae,ie,null))}function yn(){k.forEach(Lc),xe(r.width,r.height,!0)}Ai(oi,si,yn);const bn={};bn.mousedown=_n,bn.mousemove=sn,bn.mouseup=gn,bn.dblclick=vn,bn.setSeries=(e,t,n,o)=>{-1!=(n=(0,Sn.match[2])(r,t,n))&&Wt(n,o,!0,!1)},Ce.show&&(te(Ja,m,_n),te(Qa,m,sn),te(ei,m,(e=>{Te(e),ln(!1)})),te(ti,m,(function(e,t,n,r,o,a,i){if(Ce._lock)return;Te(e);let l=$t;if($t){let e,t,n=!0,r=!0,o=10;0==T.ori?(e=Ft,t=Ht):(e=Ht,t=Ft),e&&t&&(n=Tt<=o||Tt>=ae-o,r=Nt<=o||Nt>=ie-o),e&&n&&(Tt=Tt{e.call(null,r,t,n)}))}(e.plugins||[]).forEach((e=>{for(let t in e.hooks)wn[t]=(wn[t]||[]).concat(e.hooks[t])}));const xn=(e,t,n)=>n,Sn=Cl({key:null,setSeries:!1,filters:{pub:il,sub:il},scales:[A,y[1]?y[1].scale:null],match:[ll,ll,xn],values:[null,null]},Ce.sync);2==Sn.match.length&&Sn.match.push(xn),Ce.sync=Sn;const An=Sn.key,Cn=qs(An);function En(e,t,n,r,o,a,i){Sn.filters.pub(e,t,n,r,o,a,i)&&Cn.pub(e,t,n,r,o,a,i)}function Mn(){kn("init",e,t),rt(t||e.data,!1),O[A]?zt(A,O[A]):ot(),we=Vt.show&&(Vt.width>0||Vt.height>0),be=ke=!0,xe(e.width,e.height)}return Cn.sub(r),r.pub=function(e,t,n,r,o,a,i){Sn.filters.sub(e,t,n,r,o,a,i)&&bn[e](null,t,n,r,o,a,i)},r.destroy=function(){var e;Cn.unsub(r),bc.delete(r),ee.clear(),Ci(oi,si,yn),u.remove(),null===(e=B)||void 0===e||e.remove(),kn("destroy")},y.forEach(Ie),k.forEach((function(e,t){if(e._show=e.show,e.show){let n=e.side%2,o=x[e.scale];null==o&&(e.scale=n?y[1].scale:A,o=x[e.scale]);let a=o.time;e.size=nl(e.size),e.space=nl(e.space),e.rotate=nl(e.rotate),yl(e.incrs)&&e.incrs.forEach((e=>{!pl.has(e)&&pl.set(e,fl(e))})),e.incrs=nl(e.incrs||(2==o.distr?Bl:a?1==v?ns:as:Ul)),e.splits=nl(e.splits||(a&&1==o.distr?I:3==o.distr?Ms:4==o.distr?Ts:Es)),e.stroke=nl(e.stroke),e.grid.stroke=nl(e.grid.stroke),e.ticks.stroke=nl(e.ticks.stroke),e.border.stroke=nl(e.border.stroke);let i=e.values;e.values=yl(i)&&!yl(i[0])?nl(i):a?yl(i)?cs(R,ss(i,L)):wl(i)?function(e,t){let n=zl(t);return(t,r,o,a,i)=>r.map((t=>n(e(t))))}(R,i):i||z:i||Cs,e.filter=nl(e.filter||(o.distr>=3&&10==o.log?Ls:3==o.distr&&2==o.log?Is:ol)),e.font=Rc(e.font),e.labelFont=Rc(e.labelFont),e._size=e.size(r,null,t,0),e._space=e._rotate=e._incrs=e._found=e._splits=e._values=null,e._size>0&&(ze[t]=!0,e._el=_i("u-axis",p))}})),n?n instanceof HTMLElement?(n.appendChild(u),Mn()):n(r,Mn):Mn(),r}Ic.assign=Cl,Ic.fmtNum=ji,Ic.rangeNum=Li,Ic.rangeLog=Ti,Ic.rangeAsinh=Ni,Ic.orient=Ks,Ic.pxRatio=ui,Ic.join=function(e,t){if(function(e){let t=e[0][0],n=t.length;for(let r=1;r1&&void 0!==arguments[1]?arguments[1]:100;const n=e.length;if(n<=1)return!0;let r=0,o=n-1;for(;r<=o&&null==e[r];)r++;for(;o>=r&&null==e[o];)o--;if(o<=r)return!0;const a=qi(1,Bi((o-r+1)/t));for(let i=e[r],l=r+a;l<=o;l+=a){const t=e[l];if(null!=t){if(t<=i)return!1;i=t}}return!0}(t[0])||(t=function(e){let t=e[0],n=t.length,r=Array(n);for(let a=0;at[e]-t[n]));let o=[];for(let a=0;ae-t))],o=r[0].length,a=new Map;for(let i=0;iKs(e,a,((s,c,u,d,h,p,f,m,_,g,v)=>{let y=s.pxRound,{left:b,width:w}=e.bbox,k=e=>y(p(e,d,g,m)),x=e=>y(f(e,h,v,_)),S=0==d.ori?ac:ic;const A={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Zs},C=A.stroke,E=d.dir*(0==d.ori?1:-1);i=Mi(u,i,l,1),l=Mi(u,i,l,-1);let M=x(u[1==E?i:l]),T=k(c[1==E?i:l]),N=T,P=T;o&&-1==t&&(P=b,S(C,P,M)),S(C,T,M);for(let e=1==E?i:l;e>=i&&e<=l;e+=E){let n=u[e];if(null==n)continue;let r=k(c[e]),o=x(n);1==t?S(C,r,M):S(C,N,o),S(C,r,o),M=o,N=r}let D=N;o&&1==t&&(D=b+w,S(C,D,M));let[O,R]=Gs(e,a);if(null!=s.fill||0!=O){let t=A.fill=new Path2D(C),n=x(s.fillTo(e,a,s.min,s.max,O));S(t,D,n),S(t,P,n)}if(!s.spanGaps){let o=[];o.push(...ec(c,u,i,l,E,k,r));let h=s.width*ui/2,p=n||1==t?h:-h,f=n||-1==t?-h:h;o.forEach((e=>{e[0]+=p,e[1]+=f})),A.gaps=o=s.gaps(e,a,i,l,o),A.clip=Xs(o,d.ori,m,_,g,v)}return 0!=R&&(A.band=2==R?[Js(e,a,i,l,C,-1),Js(e,a,i,l,C,1)]:Js(e,a,i,l,C,R)),A}))},e.bars=function(e){const t=Ii((e=e||_l).size,[.6,Xi,1]),n=e.align||0,r=e.gap||0;let o=e.radius;o=null==o?[0,0]:"number"==typeof o?[o,0]:o;const a=nl(o),i=1-t[0],l=Ii(t[1],Xi),s=Ii(t[2],1),c=Ii(e.disp,_l),u=Ii(e.each,(e=>{})),{fill:d,stroke:h}=c;return(e,t,o,p)=>Ks(e,t,((f,m,_,g,v,y,b,w,k,x,S)=>{let A,C,E=f.pxRound,M=n,T=r*ui,N=l*ui,P=s*ui;0==g.ori?[A,C]=a(e,t):[C,A]=a(e,t);const D=g.dir*(0==g.ori?1:-1);let O,R,L,I=0==g.ori?lc:sc,z=0==g.ori?u:(e,t,n,r,o,a,i)=>{u(e,t,n,o,r,i,a)},$=Ii(e.bands,gl).find((e=>e.series[0]==t)),j=null!=$?$.dir:0,F=f.fillTo(e,t,f.min,f.max,j),H=E(b(F,v,S,k)),V=x,B=E(f.width*ui),U=!1,Y=null,W=null,q=null,Z=null;null==d||0!=B&&null==h||(U=!0,Y=d.values(e,t,o,p),W=new Map,new Set(Y).forEach((e=>{null!=e&&W.set(e,new Path2D)})),B>0&&(q=h.values(e,t,o,p),Z=new Map,new Set(q).forEach((e=>{null!=e&&Z.set(e,new Path2D)}))));let{x0:K,size:G}=c;if(null!=K&&null!=G){M=1,m=K.values(e,t,o,p),2==K.unit&&(m=m.map((t=>e.posToVal(w+t*x,g.key,!0))));let n=G.values(e,t,o,p);R=2==G.unit?n[0]*x:y(n[0],g,x,w)-y(0,g,x,w),V=vc(m,_,y,g,x,w,V),L=V-R+T}else V=vc(m,_,y,g,x,w,V),L=V*i+T,R=V-L;L<1&&(L=0),B>=R/2&&(B=0),L<5&&(E=rl);let Q=L>0;R=E(tl(V-L-(Q?B:0),P,N)),O=(0==M?R/2:M==D?0:R)-M*D*((0==M?T/2:0)+(Q?B/2:0));const J={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},X=U?null:new Path2D;let ee=null;if(null!=$)ee=e.data[$.series[1]];else{let{y0:n,y1:r}=c;null!=n&&null!=r&&(_=r.values(e,t,o,p),ee=n.values(e,t,o,p))}let te=A*R,ne=C*R;for(let n=1==D?o:p;n>=o&&n<=p;n+=D){let r=_[n];if(null==r)continue;if(null!=ee){var re;let e=null!==(re=ee[n])&&void 0!==re?re:0;if(r-e==0)continue;H=b(e,v,S,k)}let o=y(2!=g.distr||null!=c?m[n]:n,g,x,w),a=b(Ii(r,F),v,S,k),i=E(o-O),l=E(qi(a,H)),s=E(Wi(a,H)),u=l-s;if(null!=r){let o=r<0?ne:te,a=r<0?te:ne;U?(B>0&&null!=q[n]&&I(Z.get(q[n]),i,s+Bi(B/2),R,qi(0,u-B),o,a),null!=Y[n]&&I(W.get(Y[n]),i,s+Bi(B/2),R,qi(0,u-B),o,a)):I(X,i,s+Bi(B/2),R,qi(0,u-B),o,a),z(e,t,n,i-B/2,s,R+B,u)}}if(B>0)J.stroke=U?Z:X;else if(!U){var oe;J._fill=0==f.width?f._fill:null!==(oe=f._stroke)&&void 0!==oe?oe:f._fill,J.width=0}return J.fill=U?W:X,J}))},e.spline=function(e){return function(e,t){const n=Ii(null===t||void 0===t?void 0:t.alignGaps,0);return(t,r,o,a)=>Ks(t,r,((i,l,s,c,u,d,h,p,f,m,_)=>{let g,v,y,b=i.pxRound,w=e=>b(d(e,c,m,p)),k=e=>b(h(e,u,_,f));0==c.ori?(g=rc,y=ac,v=dc):(g=oc,y=ic,v=hc);const x=c.dir*(0==c.ori?1:-1);o=Mi(s,o,a,1),a=Mi(s,o,a,-1);let S=w(l[1==x?o:a]),A=S,C=[],E=[];for(let e=1==x?o:a;e>=o&&e<=a;e+=x)if(null!=s[e]){let t=w(l[e]);C.push(A=t),E.push(k(s[e]))}const M={stroke:e(C,E,g,y,v,b),fill:null,clip:null,band:null,gaps:null,flags:Zs},T=M.stroke;let[N,P]=Gs(t,r);if(null!=i.fill||0!=N){let e=M.fill=new Path2D(T),n=k(i.fillTo(t,r,i.min,i.max,N));y(e,A,n),y(e,S,n)}if(!i.spanGaps){let e=[];e.push(...ec(l,s,o,a,x,w,n)),M.gaps=e=i.gaps(t,r,o,a,e),M.clip=Xs(e,c.ori,p,f,m,_)}return 0!=P&&(M.band=2==P?[Js(t,r,o,a,T,-1),Js(t,r,o,a,T,1)]:Js(t,r,o,a,T,P)),M}))}(yc,e)}}const zc=(e,t,n)=>{if(void 0===e||null===e)return"";n=n||0,t=t||0;const r=Math.abs(n-t);if(isNaN(r)||0==r)return Math.abs(e)>=1e3?e.toLocaleString("en-US"):e.toString();let o=3+Math.floor(1+Math.log10(Math.max(Math.abs(t),Math.abs(n)))-Math.log10(r));return(isNaN(o)||o>20)&&(o=20),e.toLocaleString("en-US",{minimumSignificantDigits:1,maximumSignificantDigits:o})},$c=[[31536e3,"{YYYY}",null,null,null,null,null,null,1],[2419200,"{MMM}","\n{YYYY}",null,null,null,null,null,1],[86400,"{MM}-{DD}","\n{YYYY}",null,null,null,null,null,1],[3600,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[60,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[1,"{HH}:{mm}:{ss}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD} {HH}:{mm}",null,null,null,1],[.001,":{ss}.{fff}","\n{YYYY}-{MM}-{DD} {HH}:{mm}",null,"\n{MM}-{DD} {HH}:{mm}",null,"\n{HH}:{mm}",null,1]],jc=(e,t)=>Array.from(new Set(e.map((e=>e.scale)))).map((e=>{const n="10px Arial",r=it("color-text"),o={scale:e,show:!0,size:Fc,stroke:r,font:n,values:(e,n)=>function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const r=t[0],o=t[t.length-1];return n?t.map((e=>"".concat(zc(e,r,o)," ").concat(n))):t.map((e=>zc(e,r,o)))}(e,n,t)};return e?Number(e)%2||"y"===e?o:{...o,side:1}:{space:80,values:$c,stroke:r,font:n}})),Fc=(e,t,n,r)=>{var o;const a=e.axes[n];if(r>1)return a._size||60;let i=6+((null===a||void 0===a||null===(o=a.ticks)||void 0===o?void 0:o.size)||0)+(a.gap||0);const l=(null!==t&&void 0!==t?t:[]).reduce(((e,t)=>(null===t||void 0===t?void 0:t.length)>e.length?t:e),"");return""!=l&&(i+=((e,t)=>{const n=document.createElement("span");n.innerText=e,n.style.cssText="position: absolute; z-index: -1; pointer-events: none; opacity: 0; font: ".concat(t),document.body.appendChild(n);const r=n.offsetWidth;return n.remove(),r})(l,"10px Arial")),Math.ceil(i)},Hc=(((e,t,n)=>{const r=[];for(let o=0;oMath.round(e))).join(", "))}r.map((e=>"rgb(".concat(e,")")))})([246,226,219],[127,39,4],16),e=>{for(let t=e.series.length-1;t>=0;t--)e.delSeries(t)}),Vc=e=>{Hc(e),(e=>{Object.keys(e.hooks).forEach((t=>{e.hooks[t]=[]}))})(e),e.setData([])},Bc=e=>t=>{const n=t.posToVal(t.select.left,"x"),r=t.posToVal(t.select.left+t.select.width,"x");e({min:n,max:r})};function Uc(e){const t=xr(Sr[e]);return"rgba(".concat(t,", 0.05)")}let Yc=function(e){return e.BAR="Bars",e.LINE="Lines",e.LINE_STEPPED="Stepped lines",e.POINTS="Points",e}({});const Wc=(e,t,n,r)=>{var o,a;const i=e.under.clientWidth/20-1,l=null===Ic||void 0===Ic||null===(o=Ic.paths)||void 0===o||null===(a=o.bars)||void 0===a?void 0:a.call(o,{size:[.96,i]});return l?l(e,t,n,r):null},qc=(e,t,n,r)=>{var o,a;const i=null===Ic||void 0===Ic||null===(o=Ic.paths)||void 0===o||null===(a=o.stepped)||void 0===a?void 0:a.call(o,{align:1});return i?i(e,t,n,r):null},Zc=e=>{switch(e){case Yc.BAR:return Wc;case Yc.LINE_STEPPED:return qc;default:return}},Kc=["color-log-hits-bar-1","color-log-hits-bar-2","color-log-hits-bar-3","color-log-hits-bar-4","color-log-hits-bar-5"],Gc={[Yc.BAR]:.8,[Yc.LINE_STEPPED]:1.2,[Yc.LINE]:1.2,[Yc.POINTS]:0},Qc=e=>{let{data:n,logHits:r,xRange:a,bands:i,containerSize:l,onReadyChart:s,setPlotScale:c,graphOptions:u}=e;const{isDarkTheme:d}=gt(),[h,p]=(0,t.useState)(-1),f=e=>{var t;const n=null!==(t=e.cursor.idx)&&void 0!==t?t:-1;p(n)},m=(0,t.useMemo)((()=>{let e=0;return n.map(((t,n)=>{var o;if(0===n)return{};const a=Object.values((null===r||void 0===r||null===(o=r[n-1])||void 0===o?void 0:o.fields)||{}).map((e=>e||'""')).join(", "),i=it(a?Kc[e]:"color-log-hits-bar-0");return a&&e++,{label:a||"other",width:Gc[u.graphStyle],spanGaps:!0,stroke:i,fill:u.fill?i+"80":"",paths:Zc(u.graphStyle)}}))}),[d,n,u]),_=(0,t.useMemo)((()=>({series:m,bands:i,width:l.width||window.innerWidth/2,height:l.height||200,cursor:{points:{width:(e,t,n)=>n/4,size:(e,t)=>{var n,r,o;return 2.5*((null===(n=e.series)||void 0===n||null===(r=n[t])||void 0===r||null===(o=r.points)||void 0===o?void 0:o.size)||1)},stroke:(e,t)=>{var n;return"".concat((null===m||void 0===m||null===(n=m[t])||void 0===n?void 0:n.stroke)||"#ffffff")},fill:()=>"#ffffff"}},scales:{x:{time:!0,range:()=>[a.min,a.max]}},hooks:{drawSeries:[],ready:[s],setCursor:[f],setSelect:[Bc(c)],destroy:[Vc]},legend:{show:!1},axes:jc([{},{scale:"y"}]),tzDate:e=>o()(It($t(e))).local().toDate()})),[d,m,i]);return{options:_,series:m,focusDataIdx:h}},Jc=e=>{let{data:n,focusDataIdx:r,uPlotInst:a}=e;const i=(0,t.useRef)(null),l=(0,t.useMemo)((()=>{var e,t;const i=(null===a||void 0===a?void 0:a.series)||[],[l,...s]=n.map((e=>e[r]||0)),c=s.map(((e,t)=>{var n;const r=i[t+1],o=null===r||void 0===r||null===(n=r.stroke)||void 0===n?void 0:n.call(r);return{label:(null===r||void 0===r?void 0:r.label)||"other",stroke:o,value:e,show:null===r||void 0===r?void 0:r.show}})).filter((e=>e.value>0&&e.show)).sort(((e,t)=>t.value-e.value));return{point:{top:c[0]&&(null===a||void 0===a||null===(e=a.valToPos)||void 0===e?void 0:e.call(a,c[0].value,"y"))||0,left:(null===a||void 0===a||null===(t=a.valToPos)||void 0===t?void 0:t.call(a,l,"x"))||0},values:c,total:c.reduce(((e,t)=>e+t.value),0),timestamp:o()(1e3*l).tz().format(wt)}}),[r,a,n]),s=(0,t.useMemo)((()=>{if(!a||!l.total||!i.current)return;const{top:e,left:t}=l.point,n=parseFloat(a.over.style.left),r=parseFloat(a.over.style.top),{width:o,height:s}=a.over.getBoundingClientRect(),{width:c,height:u}=i.current.getBoundingClientRect(),d={top:e+r+50-(e+u>=s?u+100:0),left:t+n+50-(t+c>=o?c+100:0)};return d.left<0&&(d.left=20),d.top<0&&(d.top=20),d}),[l,a,i.current]);return mt("div",{className:Kn()({"vm-chart-tooltip":!0,"vm-chart-tooltip_hits":!0,"vm-bar-hits-tooltip":!0,"vm-bar-hits-tooltip_visible":-1!==r&&l.values.length}),ref:i,style:s,children:[mt("div",{children:l.values.map(((e,t)=>mt("div",{className:"vm-chart-tooltip-data",children:[mt("span",{className:"vm-chart-tooltip-data__marker",style:{background:e.stroke}}),mt("p",{children:[e.label,": ",mt("b",{children:e.value})]})]},t)))}),l.values.length>1&&mt("div",{className:"vm-chart-tooltip-data",children:mt("p",{children:["Total records: ",mt("b",{children:l.total})]})}),mt("div",{className:"vm-chart-tooltip-header",children:mt("div",{className:"vm-chart-tooltip-header__title",children:l.timestamp})})]})},Xc=e=>{let{period:n,setPeriod:r}=e;const[a,i]=(0,t.useState)({min:n.start,max:n.end});return(0,t.useEffect)((()=>{i({min:n.start,max:n.end})}),[n]),{xRange:a,setPlotScale:e=>{let{min:t,max:n}=e;const a=1e3*(n-t);aCt||r({from:o()(1e3*t).toDate(),to:o()(1e3*n).toDate()})}}},eu=e=>(e=>e instanceof MouseEvent)(e)?e.clientX:e.touches[0].clientX,tu=e=>{let{dragSpeed:n=.85,setPanning:r,setPlotScale:o}=e;const a=(0,t.useRef)({leftStart:0,xUnitsPerPx:0,scXMin:0,scXMax:0}),i=e=>{e.preventDefault();const t=eu(e),{leftStart:r,xUnitsPerPx:i,scXMin:l,scXMax:s}=a.current,c=i*((t-r)*n);o({min:l-c,max:s-c})},l=()=>{r(!1),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",l),document.removeEventListener("touchmove",i),document.removeEventListener("touchend",l)};return e=>{let{e:t,u:n}=e;t.preventDefault(),r(!0),a.current={leftStart:eu(t),xUnitsPerPx:n.posToVal(1,"x")-n.posToVal(0,"x"),scXMin:n.scales.x.min||0,scXMax:n.scales.x.max||0},document.addEventListener("mousemove",i),document.addEventListener("mouseup",l),document.addEventListener("touchmove",i),document.addEventListener("touchend",l)}},nu=e=>{const[n,r]=(0,t.useState)(!1),o=tu({dragSpeed:.9,setPanning:r,setPlotScale:e});return{onReadyChart:t=>{const n=e=>{const n=e instanceof MouseEvent&&(e=>{const{ctrlKey:t,metaKey:n,button:r}=e;return 0===r&&(t||n)})(e),r=window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1;(n||r)&&o({u:t,e:e})};t.over.addEventListener("mousedown",n),t.over.addEventListener("touchstart",n),t.over.addEventListener("wheel",(n=>{if(!n.ctrlKey&&!n.metaKey)return;n.preventDefault();const{width:r}=t.over.getBoundingClientRect(),o=t.cursor.left&&t.cursor.left>0?t.cursor.left:0,a=t.posToVal(o,"x"),i=(t.scales.x.max||0)-(t.scales.x.min||0),l=n.deltaY<0?.9*i:i/.9,s=a-o/r*l,c=s+l;t.batch((()=>e({min:s,max:c})))}))},isPanning:n}},ru=e=>{const t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.sqrt(t*t+n*n)},ou=e=>{let{uPlotInst:n,xRange:r,setPlotScale:o}=e;const[a,i]=(0,t.useState)(0),l=(0,t.useCallback)((e=>{const{target:t,ctrlKey:a,metaKey:i,key:l}=e,s=t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement;if(!n||s)return;const c="+"===l||"="===l;if(("-"===l||c)&&!(a||i)){e.preventDefault();const t=(r.max-r.min)/10*(c?1:-1);o({min:r.min+t,max:r.max-t})}}),[n,r]),s=(0,t.useCallback)((e=>{if(!n||2!==e.touches.length)return;e.preventDefault();const t=ru(e.touches),i=a-t,l=n.scales.x.max||r.max,s=n.scales.x.min||r.min,c=(l-s)/50*(i>0?-1:1);n.batch((()=>o({min:s+c,max:l-c})))}),[n,a,r]);return Jn("keydown",l),Jn("touchmove",s),Jn("touchstart",(e=>{2===e.touches.length&&(e.preventDefault(),i(ru(e.touches)))})),null},au=e=>{let{onChange:n}=e;const[r,o]=je(),a=(0,t.useRef)(null),{value:i,toggle:l,setFalse:s}=Fr(!1),[c,u]=Or(Yc.LINE_STEPPED,"graph"),[d,h]=Or(!1,"stacked"),[p,f]=Or(!1,"fill"),m=(0,t.useMemo)((()=>({graphStyle:c,stacked:d,fill:p})),[c,d,p]);return(0,t.useEffect)((()=>{n(m)}),[m]),mt("div",{className:"vm-bar-hits-options",ref:a,children:[mt($r,{title:"Graph settings",children:mt(Pr,{variant:"text",color:"primary",startIcon:mt(pn,{}),onClick:l,ariaLabel:"settings"})}),mt(Ir,{open:i,placement:"bottom-right",onClose:s,buttonRef:a,title:"Graph settings",children:mt("div",{className:"vm-bar-hits-options-settings",children:[mt("div",{className:"vm-bar-hits-options-settings-item vm-bar-hits-options-settings-item_list",children:[mt("p",{className:"vm-bar-hits-options-settings-item__title",children:"Graph style:"}),Object.values(Yc).map((e=>{return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_active":c===e}),onClick:(t=e,()=>{u(t),r.set("graph",t),o(r)}),children:e},e);var t}))]}),mt("div",{className:"vm-bar-hits-options-settings-item",children:mt(jr,{label:"Stacked",value:d,onChange:e=>{h(e),e?r.set("stacked","true"):r.delete("stacked"),o(r)}})}),mt("div",{className:"vm-bar-hits-options-settings-item",children:mt(jr,{label:"Fill",value:p,onChange:e=>{f(e),e?r.set("fill","true"):r.delete("fill"),o(r)}})})]})})]})};const iu=function(e,t){const n=[];let r=[];const o=e[0].length,a=Array(o);for(let i=0;ia[t]+=+(null!==e&&void 0!==e?e:0))));for(let i=1;in>i&&!t(n))),i]});return r=r.filter((e=>e.series[1]>-1)),{data:[e[0]].concat(n),bands:r}},lu=e=>{let{uPlotInst:n,onApplyFilter:r}=e;const[o,a]=(0,t.useState)([]),i=(0,t.useCallback)((()=>{const e=n.series.filter((e=>"x"!==e.scale));a(e)}),[n]);return(0,t.useEffect)(i,[n]),mt("div",{className:"vm-bar-hits-legend",children:o.map((e=>{var t,o;return mt($r,{title:mt("ul",{className:"vm-bar-hits-legend-info",children:[mt("li",{children:["Click to ",e.show?"hide":"show"," the _stream."]}),mt("li",{children:[gr()?"Cmd":"Ctrl"," + Click to filter by the _stream."]})]}),children:mt("div",{className:Kn()({"vm-bar-hits-legend-item":!0,"vm-bar-hits-legend-item_hide":!e.show}),onClick:(o=e,e=>{e.metaKey||e.ctrlKey?r(o.label||""):o.show=!o.show,i(),n.redraw()}),children:[mt("div",{className:"vm-bar-hits-legend-item__marker",style:{backgroundColor:"".concat(null===e||void 0===e||null===(t=e.stroke)||void 0===t?void 0:t.call(e))}}),mt("div",{children:e.label})]})},e.label)}))})},su=e=>{let{logHits:n,data:r,period:o,setPeriod:a,onApplyFilter:i}=e;const[l,s]=Fa(),c=(0,t.useRef)(null),[u,d]=(0,t.useState)(),[h,p]=(0,t.useState)({graphStyle:Yc.LINE_STEPPED,stacked:!1,fill:!1}),{xRange:f,setPlotScale:m}=Xc({period:o,setPeriod:a}),{onReadyChart:_,isPanning:g}=nu(m);ou({uPlotInst:u,xRange:f,setPlotScale:m});const{data:v,bands:y}=(0,t.useMemo)((()=>h.stacked?iu(r,(()=>!1)):{data:r,bands:[]}),[h,r]),{options:b,series:w,focusDataIdx:k}=Qc({data:v,logHits:n,bands:y,xRange:f,containerSize:s,onReadyChart:_,setPlotScale:m,graphOptions:h});return(0,t.useEffect)((()=>{u&&(Hc(u),function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t.forEach((t=>{t.label&&(t.spanGaps=n),e.addSeries(t)}))}(u,w,!0),((e,t)=>{if(e.delBand(),t.length<2)return;const n=t.map(((e,t)=>({...e,index:t}))),r=n.filter((e=>e.forecast===tt.yhatUpper)),o=n.filter((e=>e.forecast===tt.yhatLower)),a=r.map((e=>{const t=o.find((t=>t.forecastGroup===e.forecastGroup));return t?{series:[e.index,t.index],fill:Uc(tt.yhatUpper)}:null})).filter((e=>null!==e));a.length&&a.forEach((t=>{e.addBand(t)}))})(u,w),u.redraw())}),[w]),(0,t.useEffect)((()=>{if(!c.current)return;const e=new Ic(b,v,c.current);return d(e),()=>e.destroy()}),[c.current,b]),(0,t.useEffect)((()=>{u&&(u.scales.x.range=()=>[f.min,f.max],u.redraw())}),[f]),(0,t.useEffect)((()=>{u&&(u.setSize(s),u.redraw())}),[s]),(0,t.useEffect)((()=>{u&&(u.setData(v),u.redraw())}),[v]),mt("div",{className:"vm-bar-hits-chart__wrapper",children:[mt("div",{className:Kn()({"vm-bar-hits-chart":!0,"vm-bar-hits-chart_panning":g}),ref:l,children:[mt("div",{className:"vm-line-chart__u-plot",ref:c}),mt(Jc,{uPlotInst:u,data:r,focusDataIdx:k})]}),mt(au,{onChange:p}),u&&mt(lu,{uPlotInst:u,onApplyFilter:i})]})},cu=e=>{let{logHits:n,period:r,error:a,isLoading:i,onApplyFilter:l}=e;const{isMobile:s}=vr(),c=Qt(),u=(0,t.useMemo)((()=>{if(!n.length)return[[],[]];const e=Array.from(new Set(n.map((e=>e.timestamps)).flat())),t=(e=>e.map((e=>e?o()(e).unix():null)).filter(Boolean).sort(((e,t)=>e-t)))(e),r=((e,t)=>e.map((e=>t.map((t=>{const n=e.timestamps.findIndex((e=>e===t));return-1===n?null:e.values[n]||null})))))(n,e);return[t,...r]}),[n]),d=(0,t.useMemo)((()=>{const e=u.every((e=>0===e.length)),t=0===u[0].length,n=0===u[1].length;return e?"No logs volume available\nNo volume information available for the current queries and time range.":t?"No timestamp information available for the current queries and time range.":n?"No value information available for the current queries and time range.":""}),[u]);return mt("section",{className:Kn()({"vm-explore-logs-chart":!0,"vm-block":!0,"vm-block_mobile":s}),children:[i&&mt(wa,{message:"Loading hits stats...",containerStyles:{position:"absolute"}}),!a&&d&&mt("div",{className:"vm-explore-logs-chart__empty",children:mt(br,{variant:"info",children:d})}),a&&d&&mt("div",{className:"vm-explore-logs-chart__empty",children:mt(br,{variant:"error",children:a})}),u&&mt(su,{logHits:n,data:u,period:r,setPeriod:e=>{let{from:t,to:n}=e;c({type:"SET_PERIOD",payload:{from:t,to:n}})},onApplyFilter:l})]})},uu=(e,n)=>{const[r]=je(),[a,i]=(0,t.useState)([]),[l,s]=(0,t.useState)([]),[c,u]=(0,t.useState)(),d=(0,t.useRef)(new AbortController),h=(0,t.useMemo)((()=>(e=>"".concat(e,"/select/logsql/hits"))(e)),[e]),p=(e,t)=>(e.total=(e.total||0)+(t.total||0),t.timestamps.forEach(((n,r)=>{const o=e.timestamps.findIndex((e=>e===n));-1===o?(e.timestamps.push(n),e.values.push(t.values[r])):e.values[o]+=t.values[r]})),e),f=(0,t.useCallback)((async e=>{d.current.abort(),d.current=new AbortController;const{signal:t}=d.current,a=Date.now();s((e=>({...e,[a]:!0}))),u(void 0);try{const l=((e,t,n)=>{const a=o()(1e3*t.start),i=o()(1e3*t.end),l=i.diff(a,"milliseconds"),s=Math.ceil(l/20)||1;return{signal:n,method:"POST",headers:{AccountID:r.get("accountID")||"0",ProjectID:r.get("projectID")||"0"},body:new URLSearchParams({query:e.trim(),step:"".concat(s,"ms"),start:a.toISOString(),end:i.toISOString(),field:"_stream"})}})(n,e,t),c=await fetch(h,l);if(!c.ok||!c.body){const e=await c.text();return u(e),i([]),void s((e=>({...e,[a]:!1})))}const d=await c.json(),f=null===d||void 0===d?void 0:d.hits;if(!f){u("Error: No 'hits' field in response")}i(f?(e=>{const t=e.sort(((e,t)=>(t.total||0)-(e.total||0))),n=[],r=t.slice(5).reduce(p,{fields:{},timestamps:[],values:[],total:0});r.total&&n.push(r);const o=t.slice(0,5);return o.length&&n.push(...o),n})(f):[])}catch(Vd){Vd instanceof Error&&"AbortError"!==Vd.name&&(u(String(Vd)),console.error(Vd),i([]))}s((e=>({...e,[a]:!1})))}),[h,n,r]);return{logHits:a,isLoading:Object.values(l).some((e=>e)),error:c,fetchLogHits:f}},du=Number(We("LOGS_LIMIT")),hu=isNaN(du)?50:du,pu=()=>{const{serverUrl:e}=gt(),{duration:n,relativeTime:r,period:o}=Gt(),{setSearchParamsFromKeys:a}=Rr(),[i,l]=Or(hu,"limit"),[s,c]=Or("*","query"),[u,d]=(0,t.useState)(""),[h,p]=(0,t.useState)(o),[f,m]=(0,t.useState)(""),{logs:_,isLoading:g,error:v,fetchLogs:y}=ba(e,s,i),{fetchLogHits:b,...w}=uu(e,s),k=(0,t.useCallback)((()=>{const e=Ft.find((e=>e.id===r));if(!e)return o;const{duration:t,until:n}=e;return Rt(t,n())}),[o,r]),x=()=>{if(!s)return void m(rt.validQuery);m("");const e=k();p(e),y(e).then((t=>{t&&b(e)})).catch((e=>e)),a({query:s,"g0.range_input":n,"g0.end_input":e.date,"g0.relative_time":r||"none"})};return(0,t.useEffect)((()=>{s&&x()}),[o]),(0,t.useEffect)((()=>{x(),d(s)}),[s]),mt("div",{className:"vm-explore-logs",children:[mt(ja,{query:u,error:f,limit:i,onChange:d,onChangeLimit:e=>{l(e),a({limit:e}),Ye("LOGS_LIMIT","".concat(e))},onRun:()=>{c(u),x()}}),g&&mt(wa,{message:"Loading logs..."}),v&&mt(br,{variant:"error",children:v}),!v&&mt(cu,{...w,query:s,period:h,onApplyFilter:e=>{c((t=>"_stream: ".concat("other"===e?"{}":e," AND (").concat(t,")")))},isLoading:!g&&w.isLoading}),mt(ya,{data:_})]})},fu={home:"/",metrics:"/metrics",dashboards:"/dashboards",cardinality:"/cardinality",topQueries:"/top-queries",trace:"/trace",withTemplate:"/expand-with-exprs",relabel:"/relabeling",logs:"/logs",activeQueries:"/active-queries",queryAnalyzer:"/query-analyzer",icons:"/icons",anomaly:"/anomaly",query:"/query"},{REACT_APP_TYPE:mu}={REACT_APP_TYPE:"logs"},_u=mu===Ue.logs,gu={header:{tenant:!0,stepControl:!_u,timeSelector:!_u,executionControls:!_u}},vu={[fu.home]:{title:"Query",...gu},[fu.metrics]:{title:"Explore Prometheus metrics",header:{tenant:!0,stepControl:!0,timeSelector:!0}},[fu.cardinality]:{title:"Explore cardinality",header:{tenant:!0,cardinalityDatePicker:!0}},[fu.topQueries]:{title:"Top queries",header:{tenant:!0}},[fu.trace]:{title:"Trace analyzer",header:{}},[fu.queryAnalyzer]:{title:"Query analyzer",header:{}},[fu.dashboards]:{title:"Dashboards",...gu},[fu.withTemplate]:{title:"WITH templates",header:{}},[fu.relabel]:{title:"Metric relabel debug",header:{}},[fu.logs]:{title:"Logs Explorer",header:{}},[fu.activeQueries]:{title:"Active Queries",header:{}},[fu.icons]:{title:"Icons",header:{}},[fu.anomaly]:{title:"Anomaly exploration",...gu},[fu.query]:{title:"Query",...gu}},yu=fu,bu=e=>{let{activeMenu:t,label:n,value:r,color:o}=e;return mt(Le,{className:Kn()({"vm-header-nav-item":!0,"vm-header-nav-item_active":t===r}),style:{color:o},to:r,children:n})},wu=e=>{let{activeMenu:n,label:r,color:o,background:a,submenu:i,direction:l}=e;const{pathname:s}=ne(),[c,u]=(0,t.useState)(null),d=(0,t.useRef)(null),{value:h,setFalse:p,setTrue:f}=Fr(!1),m=()=>{c&&clearTimeout(c);const e=setTimeout(p,300);u(e)};return(0,t.useEffect)((()=>{p()}),[s]),"column"===l?mt(pt.FK,{children:i.map((e=>mt(bu,{activeMenu:n,value:e.value||"",label:e.label||""},e.value)))}):mt("div",{className:Kn()({"vm-header-nav-item":!0,"vm-header-nav-item_sub":!0,"vm-header-nav-item_open":h,"vm-header-nav-item_active":i.find((e=>e.value===n))}),style:{color:o},onMouseEnter:()=>{f(),c&&clearTimeout(c)},onMouseLeave:m,ref:d,children:[r,mt(kn,{}),mt(Ir,{open:h,placement:"bottom-left",offset:{top:12,left:0},onClose:p,buttonRef:d,children:mt("div",{className:"vm-header-nav-item-submenu",style:{background:a},onMouseLeave:m,onMouseEnter:()=>{c&&clearTimeout(c)},children:i.map((e=>mt(bu,{activeMenu:n,value:e.value||"",label:e.label||"",color:o},e.value)))})})]})},ku={label:"Explore",submenu:[{label:vu[yu.metrics].title,value:yu.metrics},{label:vu[yu.cardinality].title,value:yu.cardinality},{label:vu[yu.topQueries].title,value:yu.topQueries},{label:vu[yu.activeQueries].title,value:yu.activeQueries}]},xu={label:"Tools",submenu:[{label:vu[yu.trace].title,value:yu.trace},{label:vu[yu.queryAnalyzer].title,value:yu.queryAnalyzer},{label:vu[yu.withTemplate].title,value:yu.withTemplate},{label:vu[yu.relabel].title,value:yu.relabel}]},Su=[{label:vu[yu.logs].title,value:yu.home}],Au=[{label:vu[yu.anomaly].title,value:yu.home}],Cu=[{label:vu[yu.home].title,value:yu.home},ku,xu],Eu=e=>{let{color:n,background:r,direction:o}=e;const a=He(),{dashboardsSettings:i}=(0,t.useContext)(dr).state,{pathname:l}=ne(),[s,c]=(0,t.useState)(l),u=(0,t.useMemo)((()=>{switch("logs"){case Ue.logs:return Su;case Ue.anomaly:return Au;default:return[...Cu,{label:vu[yu.dashboards].title,value:yu.dashboards,hide:a||!i.length}].filter((e=>!e.hide))}}),[a,i]);return(0,t.useEffect)((()=>{c(l)}),[l]),mt("nav",{className:Kn()({"vm-header-nav":!0,["vm-header-nav_".concat(o)]:o}),children:u.map((e=>e.submenu?mt(wu,{activeMenu:s,label:e.label||"",submenu:e.submenu,color:n,background:r,direction:o},e.label):mt(bu,{activeMenu:s,value:e.value||"",label:e.label||"",color:n},e.value)))})},Mu=e=>{let{title:n,children:r,onClose:o,className:a,isOpen:i=!0}=e;const{isMobile:l}=vr(),s=oe(),c=ne(),u=(0,t.useCallback)((e=>{i&&"Escape"===e.key&&o()}),[i]),d=e=>{e.stopPropagation()},h=(0,t.useCallback)((()=>{i&&(s(c,{replace:!0}),o())}),[i,c,o]);return(0,t.useEffect)((()=>{if(i)return document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}}),[i]),Jn("popstate",h),Jn("keyup",u),t.default.createPortal(mt("div",{className:Kn()({"vm-modal":!0,"vm-modal_mobile":l,["".concat(a)]:a}),onMouseDown:o,children:mt("div",{className:"vm-modal-content",children:[mt("div",{className:"vm-modal-content-header",onMouseDown:d,children:[n&&mt("div",{className:"vm-modal-content-header__title",children:n}),mt("div",{className:"vm-modal-header__close",children:mt(Pr,{variant:"text",size:"small",onClick:o,ariaLabel:"close",children:mt(fn,{})})})]}),mt("div",{className:"vm-modal-content-body",onMouseDown:d,tabIndex:0,children:r})]})}),document.body)},Tu=mt("code",{children:gr()?"Cmd":"Ctrl"}),Nu=[{title:"Zoom in",description:mt(pt.FK,{children:["To zoom in, hold down the ",Tu," + ",mt("code",{children:"scroll up"}),", or press the ",mt("code",{children:"+"}),". Also, you can zoom in on a range on the graph by holding down your mouse button and selecting the range."]})},{title:"Zoom out",description:mt(pt.FK,{children:["To zoom out, hold down the ",Tu," + ",mt("code",{children:"scroll down"}),", or press the ",mt("code",{children:"-"}),"."]})},{title:"Move horizontal axis",description:mt(pt.FK,{children:["To move the graph, hold down the ",Tu," + ",mt("code",{children:"drag"})," the graph to the right or left."]})},{title:"Fixing a tooltip",description:mt(pt.FK,{children:["To fix the tooltip, ",mt("code",{children:"click"})," mouse when it's open. Then, you can drag the fixed tooltip by ",mt("code",{children:"clicking"})," and ",mt("code",{children:"dragging"})," on the ",mt(Rn,{})," icon."]})},{title:"Set a custom range for the vertical axis",description:mt(pt.FK,{children:["To set a custom range for the vertical axis, click on the ",mt(pn,{})," icon located in the upper right corner of the graph, activate the toggle, and set the values."]})}],Pu=[{title:"Show/hide a legend item",description:mt(pt.FK,{children:[mt("code",{children:"click"})," on a legend item to isolate it on the graph.",Tu," + ",mt("code",{children:"click"})," on a legend item to remove it from the graph. To revert to the previous state, click again."]})},{title:"Copy label key-value pairs",description:mt(pt.FK,{children:[mt("code",{children:"click"})," on a label key-value pair to save it to the clipboard."]})},{title:"Collapse/Expand the legend group",description:mt(pt.FK,{children:[mt("code",{children:"click"})," on the group name (e.g. ",mt("b",{children:'Query 1: {__name__!=""}'}),") to collapse or expand the legend."]})}],Du=Nu.concat(Pu),Ou=()=>{const{value:e,setFalse:t,setTrue:n}=Fr(!1);return mt(pt.FK,{children:[mt($r,{title:"Show tips on working with the graph",children:mt(Pr,{variant:"text",color:"gray",startIcon:mt(jn,{}),onClick:n,ariaLabel:"open the tips"})}),e&&mt(Mu,{title:"Tips on working with the graph and the legend",onClose:t,children:mt("div",{className:"fc-graph-tips",children:Du.map((e=>{let{title:t,description:n}=e;return mt("div",{className:"fc-graph-tips-item",children:[mt("h4",{className:"fc-graph-tips-item__action",children:t}),mt("p",{className:"fc-graph-tips-item__description",children:n})]},t)}))})})]})},Ru=mt("code",{children:gr()?"Cmd":"Ctrl"}),Lu=mt(pt.FK,{children:[mt("code",{children:gr()?"Option":"Ctrl"})," + ",mt("code",{children:"Space"})]}),Iu=[{title:"Query",list:[{keys:mt("code",{children:"Enter"}),description:"Run"},{keys:mt(pt.FK,{children:[mt("code",{children:"Shift"})," + ",mt("code",{children:"Enter"})]}),description:"Multi-line queries"},{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"Arrow Up"})]}),description:"Previous command from the Query history"},{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"Arrow Down"})]}),description:"Next command from the Query history"},{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"click"})," by ",mt(Dn,{})]}),description:"Toggle multiple queries"},{keys:Lu,description:"Show quick autocomplete tips"}]},{title:"Graph",readMore:mt(Ou,{}),list:[{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"scroll Up"})," or ",mt("code",{children:"+"})]}),description:"Zoom in"},{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"scroll Down"})," or ",mt("code",{children:"-"})]}),description:"Zoom out"},{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"drag"})]}),description:"Move the graph left/right"},{keys:mt(pt.FK,{children:mt("code",{children:"click"})}),description:"Select the series in the legend"},{keys:mt(pt.FK,{children:[Ru," + ",mt("code",{children:"click"})]}),description:"Toggle multiple series in the legend"}]}],zu="Shortcut keys",$u=gr(),ju=$u?"Cmd + /":"F1",Fu=e=>{let{showTitle:n}=e;const r=He(),{value:o,setTrue:a,setFalse:i}=Fr(!1),l=(0,t.useCallback)((e=>{const t=$u&&"/"===e.key&&e.metaKey,n=!$u&&"F1"===e.key&&!e.metaKey;(t||n)&&a()}),[a]);return Jn("keydown",l),mt(pt.FK,{children:[mt($r,{open:!0!==n&&void 0,title:"".concat(zu," (").concat(ju,")"),placement:"bottom-center",children:mt(Pr,{className:r?"":"vm-header-button",variant:"contained",color:"primary",startIcon:mt(Cn,{}),onClick:a,ariaLabel:zu,children:n&&zu})}),o&&mt(Mu,{title:"Shortcut keys",onClose:i,children:mt("div",{className:"vm-shortcuts",children:Iu.map((e=>mt("div",{className:"vm-shortcuts-section",children:[e.readMore&&mt("div",{className:"vm-shortcuts-section__read-more",children:e.readMore}),mt("h3",{className:"vm-shortcuts-section__title",children:e.title}),mt("div",{className:"vm-shortcuts-section-list",children:e.list.map(((t,n)=>mt("div",{className:"vm-shortcuts-section-list-item",children:[mt("div",{className:"vm-shortcuts-section-list-item__key",children:t.keys}),mt("p",{className:"vm-shortcuts-section-list-item__description",children:t.description})]},"".concat(e.title,"_").concat(n))))})]},e.title)))})})]})},Hu=e=>{let{open:t}=e;return mt("button",{className:Kn()({"vm-menu-burger":!0,"vm-menu-burger_opened":t}),"aria-label":"menu",children:mt("span",{})})},{REACT_APP_TYPE:Vu}={REACT_APP_TYPE:"logs"},Bu=Vu===Ue.logs,Uu=e=>{let{background:n,color:r}=e;const{pathname:o}=ne(),{isMobile:a}=vr(),i=(0,t.useRef)(null),{value:l,toggle:s,setFalse:c}=Fr(!1);return(0,t.useEffect)(c,[o]),Lr(i,c),mt("div",{className:"vm-header-sidebar",ref:i,children:[mt("div",{className:Kn()({"vm-header-sidebar-button":!0,"vm-header-sidebar-button_open":l}),onClick:s,children:mt(Hu,{open:l})}),mt("div",{className:Kn()({"vm-header-sidebar-menu":!0,"vm-header-sidebar-menu_open":l}),children:[mt("div",{children:mt(Eu,{color:r,background:n,direction:"column"})}),mt("div",{className:"vm-header-sidebar-menu-settings",children:!a&&!Bu&&mt(Fu,{showTitle:!0})})]})]})},Yu=e=>{let{controlsComponent:n,isMobile:r,...o}=e;const a=He(),{pathname:i}=ne(),{accountIds:l}=(()=>{const{useTenantID:e}=Fe(),n=He(),{serverUrl:r}=gt(),[o,a]=(0,t.useState)(!1),[i,l]=(0,t.useState)(),[s,c]=(0,t.useState)([]),u=(0,t.useMemo)((()=>"".concat(r.replace(/^(.+)(\/select.+)/,"$1"),"/admin/tenants")),[r]),d=(0,t.useMemo)((()=>!!Be(r)),[r]),h=n?!e:!d;return(0,t.useEffect)((()=>{h||(async()=>{a(!0);try{const e=await fetch(u),t=await e.json(),n=t.data||[];c(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?l(void 0):l("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Vd){Vd instanceof Error&&l("".concat(Vd.name,": ").concat(Vd.message))}a(!1)})().catch(console.error)}),[u]),{accountIds:s,isLoading:o,error:i}})(),{value:s,toggle:c,setFalse:u}=Fr(!1),d=mt(n,{...o,isMobile:r,accountIds:l,headerSetup:(0,t.useMemo)((()=>(vu[i]||{}).header||{}),[i])});return r?mt(pt.FK,{children:[mt("div",{children:mt(Pr,{className:Kn()({"vm-header-button":!a}),startIcon:mt($n,{}),onClick:c,ariaLabel:"controls"})}),mt(Mu,{title:"Controls",onClose:u,isOpen:s,className:Kn()({"vm-header-controls-modal":!0,"vm-header-controls-modal_open":s}),children:d})]}):d},{REACT_APP_TYPE:Wu}={REACT_APP_TYPE:"logs"},qu=Wu===Ue.logs||Wu===Ue.anomaly,Zu=()=>{switch(Wu){case Ue.logs:return mt(un,{});case Ue.anomaly:return mt(dn,{});default:return mt(cn,{})}},Ku=e=>{let{controlsComponent:n}=e;const{isMobile:r}=vr(),o=Xn(),a=(0,t.useMemo)((()=>window.innerWidth<1e3),[o]),{isDarkTheme:i}=gt(),l=He(),s=(0,t.useMemo)((()=>it(i?"color-background-block":"color-primary")),[i]),{background:c,color:u}=(0,t.useMemo)((()=>{const{headerStyles:{background:e=(l?"#FFF":s),color:t=(l?s:"#FFF")}={}}=Fe();return{background:e,color:t}}),[s]),d=oe(),h=()=>{d({pathname:yu.home}),window.location.reload()};return mt("header",{className:Kn()({"vm-header":!0,"vm-header_app":l,"vm-header_dark":i,"vm-header_sidebar":a,"vm-header_mobile":r}),style:{background:c,color:u},children:[a?mt(Uu,{background:c,color:u}):mt(pt.FK,{children:[!l&&mt("div",{className:Kn()({"vm-header-logo":!0,"vm-header-logo_logs":qu}),onClick:h,style:{color:u},children:mt(Zu,{})}),mt(Eu,{color:u,background:c})]}),a&&mt("div",{className:Kn()({"vm-header-logo":!0,"vm-header-logo_mobile":!0,"vm-header-logo_logs":qu}),onClick:h,style:{color:u},children:mt(Zu,{})}),mt(Yu,{controlsComponent:n,displaySidebar:a,isMobile:r})]})},Gu={href:"https://github.com/VictoriaMetrics/VictoriaMetrics/issues/new/choose",Icon:()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3z"})}),title:"Create an issue"},Qu=[{href:"https://docs.victoriametrics.com/MetricsQL.html",Icon:Nn,title:"MetricsQL"},{href:"https://docs.victoriametrics.com/#vmui",Icon:Ln,title:"Documentation"},Gu],Ju=[{href:"https://docs.victoriametrics.com/victorialogs/logsql/",Icon:Nn,title:"LogsQL"},{href:"https://docs.victoriametrics.com/victorialogs/",Icon:Ln,title:"Documentation"},Gu],Xu=(0,t.memo)((e=>{let{links:t=Qu}=e;const n="2019-".concat((new Date).getFullYear());return mt("footer",{className:"vm-footer",children:[mt("a",{className:"vm-link vm-footer__website",target:"_blank",href:"https://victoriametrics.com/",rel:"me noreferrer",children:[mt(hn,{}),"victoriametrics.com"]}),t.map((e=>{let{href:t,Icon:n,title:r}=e;return mt("a",{className:"vm-link vm-footer__link",target:"_blank",href:t,rel:"help noreferrer",children:[mt(n,{}),r]},"".concat(t,"-").concat(r))})),mt("div",{className:"vm-footer__copyright",children:["\xa9 ",n," VictoriaMetrics"]})]})})),ed=Xu,td="Enable to save the modified server URL to local storage, preventing reset upon page refresh.",nd="Disable to stop saving the server URL to local storage, reverting to the default URL on page refresh.",rd=(0,t.forwardRef)(((e,n)=>{let{onClose:r}=e;const{serverUrl:o}=gt(),a=vt(),{value:i,toggle:l}=Fr(!!We("SERVER_URL")),[s,c]=(0,t.useState)(o),[u,d]=(0,t.useState)(""),h=(0,t.useCallback)((()=>{const e=Be(s);""!==e&&a({type:"SET_TENANT_ID",payload:e}),a({type:"SET_SERVER",payload:s}),r()}),[s]);return(0,t.useEffect)((()=>{o||d(rt.emptyServer),(e=>{let t;try{t=new URL(e)}catch(n){return!1}return"http:"===t.protocol||"https:"===t.protocol})(o)||d(rt.validServer)}),[o]),(0,t.useEffect)((()=>{i?Ye("SERVER_URL",s):qe(["SERVER_URL"])}),[i]),(0,t.useEffect)((()=>{i&&Ye("SERVER_URL",s)}),[s]),(0,t.useEffect)((()=>{o!==s&&c(o)}),[o]),(0,t.useImperativeHandle)(n,(()=>({handleApply:h})),[h]),mt("div",{children:[mt("div",{className:"vm-server-configurator__title",children:"Server URL"}),mt("div",{className:"vm-server-configurator-url",children:[mt(Vr,{autofocus:!0,value:s,error:u,onChange:e=>{c(e||""),d("")},onEnter:h,inputmode:"url"}),mt($r,{title:i?nd:td,children:mt(Pr,{className:"vm-server-configurator-url__button",variant:"text",color:i?"primary":"gray",onClick:l,startIcon:mt(zn,{})})})]})]})})),od=[{label:"Graph",type:nt.chart},{label:"JSON",type:nt.code},{label:"Table",type:nt.table}],ad=(0,t.forwardRef)(((e,n)=>{let{onClose:r}=e;const{isMobile:o}=vr(),{seriesLimits:a}=(0,t.useContext)(ar).state,i=(0,t.useContext)(ar).dispatch,[l,s]=(0,t.useState)(a),[c,u]=(0,t.useState)({table:"",chart:"",code:""}),d=(0,t.useCallback)((()=>{i({type:"SET_SERIES_LIMITS",payload:l}),r()}),[l]);return(0,t.useImperativeHandle)(n,(()=>({handleApply:d})),[d]),mt("div",{className:"vm-limits-configurator",children:[mt("div",{className:"vm-server-configurator__title",children:["Series limits by tabs",mt($r,{title:"Set to 0 to disable the limit",children:mt(Pr,{variant:"text",color:"primary",size:"small",startIcon:mt(_n,{})})}),mt("div",{className:"vm-limits-configurator-title__reset",children:mt(Pr,{variant:"text",color:"primary",size:"small",startIcon:mt(mn,{}),onClick:()=>{s(Xe)},children:"Reset limits"})})]}),mt("div",{className:Kn()({"vm-limits-configurator__inputs":!0,"vm-limits-configurator__inputs_mobile":o}),children:od.map((e=>{return mt("div",{children:mt(Vr,{label:e.label,value:l[e.type],error:c[e.type],onChange:(t=e.type,e=>{const n=e||"";u((e=>({...e,[t]:+n<0?rt.positiveNumber:""}))),s({...l,[t]:n||1/0})}),onEnter:d,type:"number"})},e.type);var t}))})]})})),id=ad,ld=()=>mt($r,{title:"Browser timezone is not recognized, supported, or could not be determined.",children:mt(gn,{})}),sd=Yt(),cd=(0,t.forwardRef)(((e,n)=>{const{isMobile:r}=vr(),o=Bt(),{timezone:a,defaultTimezone:i}=Gt(),l=Qt(),[s,c]=(0,t.useState)(a),[u,d]=(0,t.useState)(""),h=(0,t.useRef)(null),{value:p,toggle:f,setFalse:m}=Fr(!1),_=(0,t.useMemo)((()=>[{title:"Default time (".concat(i,")"),region:i,utc:i?Vt(i):"UTC"},{title:sd.title,region:sd.region,utc:Vt(sd.region),isInvalid:!sd.isValid},{title:"UTC (Coordinated Universal Time)",region:"UTC",utc:"UTC"}].filter((e=>e.region))),[i]),g=(0,t.useMemo)((()=>{if(!u)return o;try{return Bt(u)}catch(Vd){return{}}}),[u,o]),v=(0,t.useMemo)((()=>Object.keys(g)),[g]),y=(0,t.useMemo)((()=>({region:s,utc:Vt(s)})),[s]),b=e=>()=>{(e=>{c(e.region),d(""),m()})(e)};return(0,t.useEffect)((()=>{c(a)}),[a]),(0,t.useImperativeHandle)(n,(()=>({handleApply:()=>{l({type:"SET_TIMEZONE",payload:s})}})),[s]),mt("div",{className:"vm-timezones",children:[mt("div",{className:"vm-server-configurator__title",children:"Time zone"}),mt("div",{className:"vm-timezones-item vm-timezones-item_selected",onClick:f,ref:h,children:[mt("div",{className:"vm-timezones-item__title",children:y.region}),mt("div",{className:"vm-timezones-item__utc",children:y.utc}),mt("div",{className:Kn()({"vm-timezones-item__icon":!0,"vm-timezones-item__icon_open":p}),children:mt(kn,{})})]}),mt(Ir,{open:p,buttonRef:h,placement:"bottom-left",onClose:m,fullWidth:!0,title:r?"Time zone":void 0,children:mt("div",{className:Kn()({"vm-timezones-list":!0,"vm-timezones-list_mobile":r}),children:[mt("div",{className:"vm-timezones-list-header",children:[mt("div",{className:"vm-timezones-list-header__search",children:mt(Vr,{autofocus:!0,label:"Search",value:u,onChange:e=>{d(e)}})}),_.map(((e,t)=>e&&mt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[mt("div",{className:"vm-timezones-item__title",children:[e.title,e.isInvalid&&mt(ld,{})]}),mt("div",{className:"vm-timezones-item__utc",children:e.utc})]},"".concat(t,"_").concat(e.region))))]}),v.map((e=>mt("div",{className:"vm-timezones-list-group",children:mt(Kr,{defaultExpanded:!0,title:mt("div",{className:"vm-timezones-list-group__title",children:e}),children:mt("div",{className:"vm-timezones-list-group-options",children:g[e]&&g[e].map((e=>mt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[mt("div",{className:"vm-timezones-item__title",children:e.region}),mt("div",{className:"vm-timezones-item__utc",children:e.utc})]},e.search)))})})},e)))]})})]})})),ud=cd,dd=e=>{let{options:n,value:r,label:o,onChange:a}=e;const i=(0,t.useRef)(null),[l,s]=(0,t.useState)({width:"0px",left:"0px",borderRadius:"0px"}),c=e=>()=>{a(e)};return(0,t.useEffect)((()=>{if(!i.current)return void s({width:"0px",left:"0px",borderRadius:"0px"});const e=n.findIndex((e=>e.value===r)),{width:t}=i.current.getBoundingClientRect();let o=t,a=e*o,l="0";0===e&&(l="16px 0 0 16px"),e===n.length-1&&(l="10px",a-=1,l="0 16px 16px 0"),0!==e&&e!==n.length-1&&(o+=1,a-=1),s({width:"".concat(o,"px"),left:"".concat(a,"px"),borderRadius:l})}),[i,r,n]),mt("div",{className:"vm-toggles",children:[o&&mt("label",{className:"vm-toggles__label",children:o}),mt("div",{className:"vm-toggles-group",style:{gridTemplateColumns:"repeat(".concat(n.length,", 1fr)")},children:[l.borderRadius&&mt("div",{className:"vm-toggles-group__highlight",style:l}),n.map(((e,t)=>mt("div",{className:Kn()({"vm-toggles-group-item":!0,"vm-toggles-group-item_first":0===t,"vm-toggles-group-item_active":e.value===r,"vm-toggles-group-item_icon":e.icon&&e.title}),onClick:c(e.value),ref:e.value===r?i:null,children:[e.icon,e.title]},e.value)))]})]})},hd=Object.values(ot).map((e=>({title:e,value:e}))),pd=()=>{const{isMobile:e}=vr(),t=vt(),{theme:n}=gt();return mt("div",{className:Kn()({"vm-theme-control":!0,"vm-theme-control_mobile":e}),children:[mt("div",{className:"vm-server-configurator__title",children:"Theme preferences"}),mt("div",{className:"vm-theme-control__toggle",children:mt(dd,{options:hd,value:n,onChange:e=>{t({type:"SET_THEME",payload:e})}})},"".concat(e))]})},fd=()=>{const{isMobile:e}=vr(),{markdownParsing:n}=mr(),r=(0,t.useContext)(fr).dispatch;return mt("div",{children:[mt("div",{className:"vm-server-configurator__title",children:"Markdown Parsing for Logs"}),mt(jr,{label:n?"Disable markdown parsing":"Enable markdown parsing",value:n,onChange:e=>{r({type:"SET_MARKDOWN_PARSING",payload:e})},fullWidth:e}),mt("div",{className:"vm-server-configurator__info",children:"Toggle this switch to enable or disable the Markdown formatting for log entries. Enabling this will parse log texts to Markdown."})]})},md="Settings",{REACT_APP_TYPE:_d}={REACT_APP_TYPE:"logs"},gd=_d===Ue.logs,vd=()=>{const{isMobile:e}=vr(),n=He(),r=(0,t.useRef)(null),o=(0,t.useRef)(null),a=(0,t.useRef)(null),{value:i,setTrue:l,setFalse:s}=Fr(!1),c=[{show:!n&&!gd,component:mt(rd,{ref:r,onClose:s})},{show:!gd,component:mt(id,{ref:o,onClose:s})},{show:gd,component:mt(fd,{})},{show:!0,component:mt(ud,{ref:a})},{show:!n,component:mt(pd,{})}].filter((e=>e.show));return mt(pt.FK,{children:[e?mt("div",{className:"vm-mobile-option",onClick:l,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(pn,{})}),mt("div",{className:"vm-mobile-option-text",children:mt("span",{className:"vm-mobile-option-text__label",children:md})}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt($r,{title:md,children:mt(Pr,{className:Kn()({"vm-header-button":!n}),variant:"contained",color:"primary",startIcon:mt(pn,{}),onClick:l,ariaLabel:"settings"})}),i&&mt(Mu,{title:md,onClose:s,children:mt("div",{className:Kn()({"vm-server-configurator":!0,"vm-server-configurator_mobile":e}),children:[c.map(((e,t)=>mt("div",{className:"vm-server-configurator__input",children:e.component},t))),mt("div",{className:"vm-server-configurator-footer",children:[mt(Pr,{color:"error",variant:"outlined",onClick:s,children:"Cancel"}),mt(Pr,{color:"primary",variant:"contained",onClick:()=>{r.current&&r.current.handleApply(),o.current&&o.current.handleApply(),a.current&&a.current.handleApply(),s()},children:"Apply"})]})]})})]})},yd=e=>{let{relativeTime:t,setDuration:n}=e;const{isMobile:r}=vr();return mt("div",{className:Kn()({"vm-time-duration":!0,"vm-time-duration_mobile":r}),children:Ft.map((e=>{let{id:o,duration:a,until:i,title:l}=e;return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_mobile":r,"vm-list-item_active":o===t}),onClick:(s={duration:a,until:i(),id:o},()=>{n(s)}),children:l||a},o);var s}))})},bd=e=>{let{viewDate:t,showArrowNav:n,onChangeViewDate:r,toggleDisplayYears:o}=e;return mt("div",{className:"vm-calendar-header",children:[mt("div",{className:"vm-calendar-header-left",onClick:o,children:[mt("span",{className:"vm-calendar-header-left__date",children:t.format("MMMM YYYY")}),mt("div",{className:"vm-calendar-header-left__select-year",children:mt(kn,{})})]}),n&&mt("div",{className:"vm-calendar-header-right",children:[mt("div",{className:"vm-calendar-header-right__prev",onClick:()=>{r(t.subtract(1,"month"))},children:mt(wn,{})}),mt("div",{className:"vm-calendar-header-right__next",onClick:()=>{r(t.add(1,"month"))},children:mt(wn,{})})]})]})},wd=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],kd=e=>{let{viewDate:n,selectDate:r,onChangeSelectDate:a}=e;const i="YYYY-MM-DD",l=o().tz(),s=o()(n.format(i)),c=(0,t.useMemo)((()=>{const e=new Array(42).fill(null),t=s.startOf("month"),n=s.endOf("month").diff(t,"day")+1,r=new Array(n).fill(t).map(((e,t)=>e.add(t,"day"))),o=t.day();return e.splice(o,n,...r),e}),[s]),u=e=>()=>{e&&a(e)};return mt("div",{className:"vm-calendar-body",children:[wd.map((e=>mt($r,{title:e,children:mt("div",{className:"vm-calendar-body-cell vm-calendar-body-cell_weekday",children:e[0]})},e))),c.map(((e,t)=>mt("div",{className:Kn()({"vm-calendar-body-cell":!0,"vm-calendar-body-cell_day":!0,"vm-calendar-body-cell_day_empty":!e,"vm-calendar-body-cell_day_active":(e&&e.format(i))===r.format(i),"vm-calendar-body-cell_day_today":(e&&e.format(i))===l.format(i)}),onClick:u(e),children:e&&e.format("D")},e?e.format(i):t)))]})},xd=e=>{let{viewDate:n,onChangeViewDate:r}=e;const a=o()().format("YYYY"),i=(0,t.useMemo)((()=>n.format("YYYY")),[n]),l=(0,t.useMemo)((()=>{const e=o()().subtract(9,"year");return new Array(18).fill(e).map(((e,t)=>e.add(t,"year")))}),[n]);(0,t.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(i));e&&e.scrollIntoView({block:"center"})}),[]);return mt("div",{className:"vm-calendar-years",children:l.map((e=>{return mt("div",{className:Kn()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("YYYY")===i,"vm-calendar-years__year_today":e.format("YYYY")===a}),id:"vm-calendar-year-".concat(e.format("YYYY")),onClick:(t=e,()=>{r(t)}),children:e.format("YYYY")},e.format("YYYY"));var t}))})},Sd=e=>{let{viewDate:n,selectDate:r,onChangeViewDate:a}=e;const i=o()().format("MM"),l=(0,t.useMemo)((()=>r.format("MM")),[r]),s=(0,t.useMemo)((()=>new Array(12).fill("").map(((e,t)=>o()(n).month(t)))),[n]);(0,t.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(l));e&&e.scrollIntoView({block:"center"})}),[]);return mt("div",{className:"vm-calendar-years",children:s.map((e=>{return mt("div",{className:Kn()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("MM")===l,"vm-calendar-years__year_today":e.format("MM")===i}),id:"vm-calendar-year-".concat(e.format("MM")),onClick:(t=e,()=>{a(t)}),children:e.format("MMMM")},e.format("MM"));var t}))})};var Ad=function(e){return e[e.days=0]="days",e[e.months=1]="months",e[e.years=2]="years",e}(Ad||{});const Cd=e=>{let{date:n,format:r=wt,onChange:a}=e;const[i,l]=(0,t.useState)(Ad.days),[s,c]=(0,t.useState)(o().tz(n)),[u,d]=(0,t.useState)(o().tz(n)),h=o().tz(),p=h.format(bt)===s.format(bt),{isMobile:f}=vr(),m=e=>{c(e),l((e=>e===Ad.years?Ad.months:Ad.days))};return(0,t.useEffect)((()=>{u.format()!==o().tz(n).format()&&a(u.format(r))}),[u]),(0,t.useEffect)((()=>{const e=o().tz(n);c(e),d(e)}),[n]),mt("div",{className:Kn()({"vm-calendar":!0,"vm-calendar_mobile":f}),children:[mt(bd,{viewDate:s,onChangeViewDate:m,toggleDisplayYears:()=>{l((e=>e===Ad.years?Ad.days:Ad.years))},showArrowNav:i===Ad.days}),i===Ad.days&&mt(kd,{viewDate:s,selectDate:u,onChangeSelectDate:e=>{d(e)}}),i===Ad.years&&mt(xd,{viewDate:s,onChangeViewDate:m}),i===Ad.months&&mt(Sd,{selectDate:u,viewDate:s,onChangeViewDate:m}),!p&&i===Ad.days&&mt("div",{className:"vm-calendar-footer",children:mt(Pr,{variant:"text",size:"small",onClick:()=>{c(h)},children:"show today"})})]})},Ed=(0,t.forwardRef)(((e,n)=>{let{date:r,targetRef:a,format:i=wt,onChange:l,label:s}=e;const c=(0,t.useMemo)((()=>o()(r).isValid()?o().tz(r):o()().tz()),[r]),{isMobile:u}=vr(),{value:d,toggle:h,setFalse:p}=Fr(!1);return Jn("click",h,a),Jn("keyup",(e=>{"Escape"!==e.key&&"Enter"!==e.key||p()})),mt(pt.FK,{children:mt(Ir,{open:d,buttonRef:a,placement:"bottom-right",onClose:p,title:u?s:void 0,children:mt("div",{ref:n,children:mt(Cd,{date:c,format:i,onChange:e=>{l(e),p()}})})})})}));var Md=n(494),Td=n.n(Md);const Nd=e=>o()(e).isValid()?o().tz(e).format(wt):e,Pd=e=>{let{value:n="",label:r,pickerLabel:a,pickerRef:i,onChange:l,onEnter:s}=e;const c=(0,t.useRef)(null),[u,d]=(0,t.useState)(null),[h,p]=(0,t.useState)(Nd(n)),[f,m]=(0,t.useState)(!1),[_,g]=(0,t.useState)(!1),v=o()(h).isValid()?"":"Invalid date format";return(0,t.useEffect)((()=>{const e=Nd(n);e!==h&&p(e),_&&(s(),g(!1))}),[n]),(0,t.useEffect)((()=>{f&&u&&(u.focus(),u.setSelectionRange(11,11),m(!1))}),[f]),mt("div",{className:Kn()({"vm-date-time-input":!0,"vm-date-time-input_error":v}),children:[mt("label",{children:r}),mt(Td(),{tabIndex:1,inputRef:d,mask:"9999-99-99 99:99:99",placeholder:"YYYY-MM-DD HH:mm:ss",value:h,autoCapitalize:"none",inputMode:"numeric",maskChar:null,onChange:e=>{p(e.currentTarget.value)},onBlur:()=>{l(h)},onKeyUp:e=>{"Enter"===e.key&&(l(h),g(!0))}}),v&&mt("span",{className:"vm-date-time-input__error-text",children:v}),mt("div",{className:"vm-date-time-input__icon",ref:c,children:mt(Pr,{variant:"text",color:"gray",size:"small",startIcon:mt(Sn,{}),ariaLabel:"calendar"})}),mt(Ed,{label:a,ref:i,date:h,onChange:e=>{p(e),m(!0)},targetRef:c})]})};const Dd=function(e){const n=(0,t.useRef)();return(0,t.useEffect)((()=>{n.current=e}),[e]),n.current},Od=()=>{const{isMobile:e}=vr(),{isDarkTheme:n}=gt(),r=(0,t.useRef)(null),a=Xn(),i=(0,t.useMemo)((()=>a.width>1120),[a]),[l,s]=(0,t.useState)(),[c,u]=(0,t.useState)(),{period:{end:d,start:h},relativeTime:p,timezone:f,duration:m}=Gt(),_=Qt(),g=He(),v=Dd(f),{value:y,toggle:b,setFalse:w}=Fr(!1),k=(0,t.useMemo)((()=>({region:f,utc:Vt(f)})),[f]);(0,t.useEffect)((()=>{s(It($t(d)))}),[f,d]),(0,t.useEffect)((()=>{u(It($t(h)))}),[f,h]);const x=e=>{let{duration:t,until:n,id:r}=e;_({type:"SET_RELATIVE_TIME",payload:{duration:t,until:n,id:r}}),w()},S=(0,t.useMemo)((()=>({start:o().tz($t(h)).format(wt),end:o().tz($t(d)).format(wt)})),[h,d,f]),A=(0,t.useMemo)((()=>p&&"none"!==p?p.replace(/_/g," "):"".concat(S.start," - ").concat(S.end)),[p,S]),C=(0,t.useRef)(null),E=(0,t.useRef)(null),M=(0,t.useRef)(null),T=()=>{c&&l&&_({type:"SET_PERIOD",payload:{from:o().tz(c).toDate(),to:o().tz(l).toDate()}}),w()};return(0,t.useEffect)((()=>{const e=Ht({relativeTimeId:p,defaultDuration:m,defaultEndInput:$t(d)});v&&f!==v&&x({id:e.relativeTimeId,duration:e.duration,until:e.endInput})}),[f,v]),Lr(r,(t=>{var n,r;if(e)return;const o=t.target,a=(null===C||void 0===C?void 0:C.current)&&(null===C||void 0===C||null===(n=C.current)||void 0===n?void 0:n.contains(o)),i=(null===E||void 0===E?void 0:E.current)&&(null===E||void 0===E||null===(r=E.current)||void 0===r?void 0:r.contains(o));a||i||w()})),mt(pt.FK,{children:[mt("div",{ref:M,children:e?mt("div",{className:"vm-mobile-option",onClick:b,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(xn,{})}),mt("div",{className:"vm-mobile-option-text",children:[mt("span",{className:"vm-mobile-option-text__label",children:"Time range"}),mt("span",{className:"vm-mobile-option-text__value",children:A})]}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt($r,{title:i?"Time range controls":A,children:mt(Pr,{className:g?"":"vm-header-button",variant:"contained",color:"primary",startIcon:mt(xn,{}),onClick:b,ariaLabel:"time range controls",children:i&&mt("span",{children:A})})})}),mt(Ir,{open:y,buttonRef:M,placement:"bottom-right",onClose:w,clickOutside:!1,title:e?"Time range controls":"",children:mt("div",{className:Kn()({"vm-time-selector":!0,"vm-time-selector_mobile":e}),ref:r,children:[mt("div",{className:"vm-time-selector-left",children:[mt("div",{className:Kn()({"vm-time-selector-left-inputs":!0,"vm-time-selector-left-inputs_dark":n}),children:[mt(Pd,{value:c,label:"From:",pickerLabel:"Date From",pickerRef:C,onChange:u,onEnter:T}),mt(Pd,{value:l,label:"To:",pickerLabel:"Date To",pickerRef:E,onChange:s,onEnter:T})]}),mt("div",{className:"vm-time-selector-left-timezone",children:[mt("div",{className:"vm-time-selector-left-timezone__title",children:k.region}),mt("div",{className:"vm-time-selector-left-timezone__utc",children:k.utc})]}),mt(Pr,{variant:"text",startIcon:mt(An,{}),onClick:()=>_({type:"RUN_QUERY_TO_NOW"}),children:"switch to now"}),mt("div",{className:"vm-time-selector-left__controls",children:[mt(Pr,{color:"error",variant:"outlined",onClick:()=>{s(It($t(d))),u(It($t(h))),w()},children:"Cancel"}),mt(Pr,{color:"primary",onClick:T,children:"Apply"})]})]}),mt(yd,{relativeTime:p||"",setDuration:x})]})})]})},Rd=()=>{const e=He(),{isMobile:n}=vr(),r=Qt(),[o,a]=je(),[i,l]=Or("0","accountID"),[s,c]=Or("0","projectID"),u="".concat(i,":").concat(s),d=(0,t.useRef)(null),{value:h,toggle:p,setFalse:f}=Fr(!1);return(0,t.useEffect)((()=>{h||(l(o.get("accountID")||"0"),c(o.get("projectID")||"0"))}),[h]),mt("div",{className:"vm-tenant-input",children:[mt($r,{title:"Define Tenant ID if you need request to another storage",children:mt("div",{ref:d,children:n?mt("div",{className:"vm-mobile-option",onClick:p,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(zn,{})}),mt("div",{className:"vm-mobile-option-text",children:[mt("span",{className:"vm-mobile-option-text__label",children:"Tenant ID"}),mt("span",{className:"vm-mobile-option-text__value",children:u})]}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt(Pr,{className:e?"":"vm-header-button",variant:"contained",color:"primary",fullWidth:!0,startIcon:mt(zn,{}),endIcon:mt("div",{className:Kn()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":h}),children:mt(wn,{})}),onClick:p,children:u})})}),mt(Ir,{open:h,placement:"bottom-right",onClose:f,buttonRef:d,title:n?"Define Tenant ID":void 0,children:mt("div",{className:Kn()({"vm-list vm-tenant-input-list":!0,"vm-list vm-tenant-input-list_mobile":n,"vm-tenant-input-list_inline":!0}),children:[mt(Vr,{autofocus:!0,label:"accountID",value:i,onChange:l,type:"number"}),mt(Vr,{autofocus:!0,label:"projectID",value:s,onChange:c,type:"number"}),mt("div",{className:"vm-tenant-input-list__buttons",children:[mt($r,{title:"Multitenancy in VictoriaLogs documentation",children:mt("a",{href:"https://docs.victoriametrics.com/victorialogs/#multitenancy",target:"_blank",rel:"help noreferrer",children:mt(Pr,{variant:"text",color:"gray",startIcon:mt(In,{})})})}),mt(Pr,{variant:"contained",color:"primary",onClick:()=>{o.set("accountID",i),o.set("projectID",s),a(o),f(),r({type:"RUN_QUERY"})},children:"Apply"})]})]})})]})},Ld=e=>{let{isMobile:t}=e;return mt("div",{className:Kn()({"vm-header-controls":!0,"vm-header-controls_mobile":t}),children:[mt(Rd,{}),mt(Od,{}),mt(vd,{})]})},Id=(Boolean(We("DISABLED_DEFAULT_TIMEZONE")),()=>{const{serverUrl:e}=gt(),[n,r]=(Qt(),(0,t.useState)(!1)),[o,a]=(0,t.useState)(""),i=async()=>{};return(0,t.useEffect)((()=>{i()}),[e]),{isLoading:n,error:o}}),zd=()=>{const e=He(),{isMobile:n}=vr(),{pathname:r}=ne();Id();return(0,t.useEffect)((()=>{var e;const t="vmui for VictoriaLogs",n=null===(e=vu[yu.logs])||void 0===e?void 0:e.title;document.title=n?"".concat(n," - ").concat(t):t}),[r]),mt("section",{className:"vm-container",children:[mt(Ku,{controlsComponent:Ld}),mt("div",{className:Kn()({"vm-container-body":!0,"vm-container-body_mobile":n,"vm-container-body_app":e}),children:mt(ye,{})}),!e&&mt(ed,{links:Ju})]})},$d={unicode:!1,renderer:void 0};_a.use(function(e){if(!(e={...$d,...e}).emojis)throw new Error("Must provide emojis to markedEmoji");const t=Object.keys(e.emojis).map((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))).join("|"),n=new RegExp(":(".concat(t,"):")),r=new RegExp("^".concat(n.source));return{extensions:[{name:"emoji",level:"inline",start(e){var t;return null===(t=e.match(n))||void 0===t?void 0:t.index},tokenizer(t,n){const o=r.exec(t);if(!o)return;const a=o[1];let i=e.emojis[a],l=e.renderer?void 0:e.unicode;if("string"!==typeof i&&!e.renderer)if("string"===typeof i.char)i=i.char,l=!0;else{if("string"!==typeof i.url)return;i=i.url,l=!1}return{type:"emoji",raw:o[0],name:a,emoji:i,unicode:l}},renderer:t=>e.renderer?e.renderer(t):t.unicode?t.emoji:''.concat(t.name,'')}]}}({emojis:{100:"\ud83d\udcaf",1234:"\ud83d\udd22",grinning:"\ud83d\ude00",smiley:"\ud83d\ude03",smile:"\ud83d\ude04",grin:"\ud83d\ude01",laughing:"\ud83d\ude06",satisfied:"\ud83d\ude06",sweat_smile:"\ud83d\ude05",rofl:"\ud83e\udd23",joy:"\ud83d\ude02",slightly_smiling_face:"\ud83d\ude42",upside_down_face:"\ud83d\ude43",melting_face:"\ud83e\udee0",wink:"\ud83d\ude09",blush:"\ud83d\ude0a",innocent:"\ud83d\ude07",smiling_face_with_three_hearts:"\ud83e\udd70",heart_eyes:"\ud83d\ude0d",star_struck:"\ud83e\udd29",kissing_heart:"\ud83d\ude18",kissing:"\ud83d\ude17",relaxed:"\u263a\ufe0f",kissing_closed_eyes:"\ud83d\ude1a",kissing_smiling_eyes:"\ud83d\ude19",smiling_face_with_tear:"\ud83e\udd72",yum:"\ud83d\ude0b",stuck_out_tongue:"\ud83d\ude1b",stuck_out_tongue_winking_eye:"\ud83d\ude1c",zany_face:"\ud83e\udd2a",stuck_out_tongue_closed_eyes:"\ud83d\ude1d",money_mouth_face:"\ud83e\udd11",hugs:"\ud83e\udd17",hand_over_mouth:"\ud83e\udd2d",face_with_open_eyes_and_hand_over_mouth:"\ud83e\udee2",face_with_peeking_eye:"\ud83e\udee3",shushing_face:"\ud83e\udd2b",thinking:"\ud83e\udd14",saluting_face:"\ud83e\udee1",zipper_mouth_face:"\ud83e\udd10",raised_eyebrow:"\ud83e\udd28",neutral_face:"\ud83d\ude10",expressionless:"\ud83d\ude11",no_mouth:"\ud83d\ude36",dotted_line_face:"\ud83e\udee5",face_in_clouds:"\ud83d\ude36\u200d\ud83c\udf2b\ufe0f",smirk:"\ud83d\ude0f",unamused:"\ud83d\ude12",roll_eyes:"\ud83d\ude44",grimacing:"\ud83d\ude2c",face_exhaling:"\ud83d\ude2e\u200d\ud83d\udca8",lying_face:"\ud83e\udd25",shaking_face:"\ud83e\udee8",relieved:"\ud83d\ude0c",pensive:"\ud83d\ude14",sleepy:"\ud83d\ude2a",drooling_face:"\ud83e\udd24",sleeping:"\ud83d\ude34",mask:"\ud83d\ude37",face_with_thermometer:"\ud83e\udd12",face_with_head_bandage:"\ud83e\udd15",nauseated_face:"\ud83e\udd22",vomiting_face:"\ud83e\udd2e",sneezing_face:"\ud83e\udd27",hot_face:"\ud83e\udd75",cold_face:"\ud83e\udd76",woozy_face:"\ud83e\udd74",dizzy_face:"\ud83d\ude35",face_with_spiral_eyes:"\ud83d\ude35\u200d\ud83d\udcab",exploding_head:"\ud83e\udd2f",cowboy_hat_face:"\ud83e\udd20",partying_face:"\ud83e\udd73",disguised_face:"\ud83e\udd78",sunglasses:"\ud83d\ude0e",nerd_face:"\ud83e\udd13",monocle_face:"\ud83e\uddd0",confused:"\ud83d\ude15",face_with_diagonal_mouth:"\ud83e\udee4",worried:"\ud83d\ude1f",slightly_frowning_face:"\ud83d\ude41",frowning_face:"\u2639\ufe0f",open_mouth:"\ud83d\ude2e",hushed:"\ud83d\ude2f",astonished:"\ud83d\ude32",flushed:"\ud83d\ude33",pleading_face:"\ud83e\udd7a",face_holding_back_tears:"\ud83e\udd79",frowning:"\ud83d\ude26",anguished:"\ud83d\ude27",fearful:"\ud83d\ude28",cold_sweat:"\ud83d\ude30",disappointed_relieved:"\ud83d\ude25",cry:"\ud83d\ude22",sob:"\ud83d\ude2d",scream:"\ud83d\ude31",confounded:"\ud83d\ude16",persevere:"\ud83d\ude23",disappointed:"\ud83d\ude1e",sweat:"\ud83d\ude13",weary:"\ud83d\ude29",tired_face:"\ud83d\ude2b",yawning_face:"\ud83e\udd71",triumph:"\ud83d\ude24",rage:"\ud83d\ude21",pout:"\ud83d\ude21",angry:"\ud83d\ude20",cursing_face:"\ud83e\udd2c",smiling_imp:"\ud83d\ude08",imp:"\ud83d\udc7f",skull:"\ud83d\udc80",skull_and_crossbones:"\u2620\ufe0f",hankey:"\ud83d\udca9",poop:"\ud83d\udca9",shit:"\ud83d\udca9",clown_face:"\ud83e\udd21",japanese_ogre:"\ud83d\udc79",japanese_goblin:"\ud83d\udc7a",ghost:"\ud83d\udc7b",alien:"\ud83d\udc7d",space_invader:"\ud83d\udc7e",robot:"\ud83e\udd16",smiley_cat:"\ud83d\ude3a",smile_cat:"\ud83d\ude38",joy_cat:"\ud83d\ude39",heart_eyes_cat:"\ud83d\ude3b",smirk_cat:"\ud83d\ude3c",kissing_cat:"\ud83d\ude3d",scream_cat:"\ud83d\ude40",crying_cat_face:"\ud83d\ude3f",pouting_cat:"\ud83d\ude3e",see_no_evil:"\ud83d\ude48",hear_no_evil:"\ud83d\ude49",speak_no_evil:"\ud83d\ude4a",love_letter:"\ud83d\udc8c",cupid:"\ud83d\udc98",gift_heart:"\ud83d\udc9d",sparkling_heart:"\ud83d\udc96",heartpulse:"\ud83d\udc97",heartbeat:"\ud83d\udc93",revolving_hearts:"\ud83d\udc9e",two_hearts:"\ud83d\udc95",heart_decoration:"\ud83d\udc9f",heavy_heart_exclamation:"\u2763\ufe0f",broken_heart:"\ud83d\udc94",heart_on_fire:"\u2764\ufe0f\u200d\ud83d\udd25",mending_heart:"\u2764\ufe0f\u200d\ud83e\ude79",heart:"\u2764\ufe0f",pink_heart:"\ud83e\ude77",orange_heart:"\ud83e\udde1",yellow_heart:"\ud83d\udc9b",green_heart:"\ud83d\udc9a",blue_heart:"\ud83d\udc99",light_blue_heart:"\ud83e\ude75",purple_heart:"\ud83d\udc9c",brown_heart:"\ud83e\udd0e",black_heart:"\ud83d\udda4",grey_heart:"\ud83e\ude76",white_heart:"\ud83e\udd0d",kiss:"\ud83d\udc8b",anger:"\ud83d\udca2",boom:"\ud83d\udca5",collision:"\ud83d\udca5",dizzy:"\ud83d\udcab",sweat_drops:"\ud83d\udca6",dash:"\ud83d\udca8",hole:"\ud83d\udd73\ufe0f",speech_balloon:"\ud83d\udcac",eye_speech_bubble:"\ud83d\udc41\ufe0f\u200d\ud83d\udde8\ufe0f",left_speech_bubble:"\ud83d\udde8\ufe0f",right_anger_bubble:"\ud83d\uddef\ufe0f",thought_balloon:"\ud83d\udcad",zzz:"\ud83d\udca4",wave:"\ud83d\udc4b",raised_back_of_hand:"\ud83e\udd1a",raised_hand_with_fingers_splayed:"\ud83d\udd90\ufe0f",hand:"\u270b",raised_hand:"\u270b",vulcan_salute:"\ud83d\udd96",rightwards_hand:"\ud83e\udef1",leftwards_hand:"\ud83e\udef2",palm_down_hand:"\ud83e\udef3",palm_up_hand:"\ud83e\udef4",leftwards_pushing_hand:"\ud83e\udef7",rightwards_pushing_hand:"\ud83e\udef8",ok_hand:"\ud83d\udc4c",pinched_fingers:"\ud83e\udd0c",pinching_hand:"\ud83e\udd0f",v:"\u270c\ufe0f",crossed_fingers:"\ud83e\udd1e",hand_with_index_finger_and_thumb_crossed:"\ud83e\udef0",love_you_gesture:"\ud83e\udd1f",metal:"\ud83e\udd18",call_me_hand:"\ud83e\udd19",point_left:"\ud83d\udc48",point_right:"\ud83d\udc49",point_up_2:"\ud83d\udc46",middle_finger:"\ud83d\udd95",fu:"\ud83d\udd95",point_down:"\ud83d\udc47",point_up:"\u261d\ufe0f",index_pointing_at_the_viewer:"\ud83e\udef5","+1":"\ud83d\udc4d",thumbsup:"\ud83d\udc4d","-1":"\ud83d\udc4e",thumbsdown:"\ud83d\udc4e",fist_raised:"\u270a",fist:"\u270a",fist_oncoming:"\ud83d\udc4a",facepunch:"\ud83d\udc4a",punch:"\ud83d\udc4a",fist_left:"\ud83e\udd1b",fist_right:"\ud83e\udd1c",clap:"\ud83d\udc4f",raised_hands:"\ud83d\ude4c",heart_hands:"\ud83e\udef6",open_hands:"\ud83d\udc50",palms_up_together:"\ud83e\udd32",handshake:"\ud83e\udd1d",pray:"\ud83d\ude4f",writing_hand:"\u270d\ufe0f",nail_care:"\ud83d\udc85",selfie:"\ud83e\udd33",muscle:"\ud83d\udcaa",mechanical_arm:"\ud83e\uddbe",mechanical_leg:"\ud83e\uddbf",leg:"\ud83e\uddb5",foot:"\ud83e\uddb6",ear:"\ud83d\udc42",ear_with_hearing_aid:"\ud83e\uddbb",nose:"\ud83d\udc43",brain:"\ud83e\udde0",anatomical_heart:"\ud83e\udec0",lungs:"\ud83e\udec1",tooth:"\ud83e\uddb7",bone:"\ud83e\uddb4",eyes:"\ud83d\udc40",eye:"\ud83d\udc41\ufe0f",tongue:"\ud83d\udc45",lips:"\ud83d\udc44",biting_lip:"\ud83e\udee6",baby:"\ud83d\udc76",child:"\ud83e\uddd2",boy:"\ud83d\udc66",girl:"\ud83d\udc67",adult:"\ud83e\uddd1",blond_haired_person:"\ud83d\udc71",man:"\ud83d\udc68",bearded_person:"\ud83e\uddd4",man_beard:"\ud83e\uddd4\u200d\u2642\ufe0f",woman_beard:"\ud83e\uddd4\u200d\u2640\ufe0f",red_haired_man:"\ud83d\udc68\u200d\ud83e\uddb0",curly_haired_man:"\ud83d\udc68\u200d\ud83e\uddb1",white_haired_man:"\ud83d\udc68\u200d\ud83e\uddb3",bald_man:"\ud83d\udc68\u200d\ud83e\uddb2",woman:"\ud83d\udc69",red_haired_woman:"\ud83d\udc69\u200d\ud83e\uddb0",person_red_hair:"\ud83e\uddd1\u200d\ud83e\uddb0",curly_haired_woman:"\ud83d\udc69\u200d\ud83e\uddb1",person_curly_hair:"\ud83e\uddd1\u200d\ud83e\uddb1",white_haired_woman:"\ud83d\udc69\u200d\ud83e\uddb3",person_white_hair:"\ud83e\uddd1\u200d\ud83e\uddb3",bald_woman:"\ud83d\udc69\u200d\ud83e\uddb2",person_bald:"\ud83e\uddd1\u200d\ud83e\uddb2",blond_haired_woman:"\ud83d\udc71\u200d\u2640\ufe0f",blonde_woman:"\ud83d\udc71\u200d\u2640\ufe0f",blond_haired_man:"\ud83d\udc71\u200d\u2642\ufe0f",older_adult:"\ud83e\uddd3",older_man:"\ud83d\udc74",older_woman:"\ud83d\udc75",frowning_person:"\ud83d\ude4d",frowning_man:"\ud83d\ude4d\u200d\u2642\ufe0f",frowning_woman:"\ud83d\ude4d\u200d\u2640\ufe0f",pouting_face:"\ud83d\ude4e",pouting_man:"\ud83d\ude4e\u200d\u2642\ufe0f",pouting_woman:"\ud83d\ude4e\u200d\u2640\ufe0f",no_good:"\ud83d\ude45",no_good_man:"\ud83d\ude45\u200d\u2642\ufe0f",ng_man:"\ud83d\ude45\u200d\u2642\ufe0f",no_good_woman:"\ud83d\ude45\u200d\u2640\ufe0f",ng_woman:"\ud83d\ude45\u200d\u2640\ufe0f",ok_person:"\ud83d\ude46",ok_man:"\ud83d\ude46\u200d\u2642\ufe0f",ok_woman:"\ud83d\ude46\u200d\u2640\ufe0f",tipping_hand_person:"\ud83d\udc81",information_desk_person:"\ud83d\udc81",tipping_hand_man:"\ud83d\udc81\u200d\u2642\ufe0f",sassy_man:"\ud83d\udc81\u200d\u2642\ufe0f",tipping_hand_woman:"\ud83d\udc81\u200d\u2640\ufe0f",sassy_woman:"\ud83d\udc81\u200d\u2640\ufe0f",raising_hand:"\ud83d\ude4b",raising_hand_man:"\ud83d\ude4b\u200d\u2642\ufe0f",raising_hand_woman:"\ud83d\ude4b\u200d\u2640\ufe0f",deaf_person:"\ud83e\uddcf",deaf_man:"\ud83e\uddcf\u200d\u2642\ufe0f",deaf_woman:"\ud83e\uddcf\u200d\u2640\ufe0f",bow:"\ud83d\ude47",bowing_man:"\ud83d\ude47\u200d\u2642\ufe0f",bowing_woman:"\ud83d\ude47\u200d\u2640\ufe0f",facepalm:"\ud83e\udd26",man_facepalming:"\ud83e\udd26\u200d\u2642\ufe0f",woman_facepalming:"\ud83e\udd26\u200d\u2640\ufe0f",shrug:"\ud83e\udd37",man_shrugging:"\ud83e\udd37\u200d\u2642\ufe0f",woman_shrugging:"\ud83e\udd37\u200d\u2640\ufe0f",health_worker:"\ud83e\uddd1\u200d\u2695\ufe0f",man_health_worker:"\ud83d\udc68\u200d\u2695\ufe0f",woman_health_worker:"\ud83d\udc69\u200d\u2695\ufe0f",student:"\ud83e\uddd1\u200d\ud83c\udf93",man_student:"\ud83d\udc68\u200d\ud83c\udf93",woman_student:"\ud83d\udc69\u200d\ud83c\udf93",teacher:"\ud83e\uddd1\u200d\ud83c\udfeb",man_teacher:"\ud83d\udc68\u200d\ud83c\udfeb",woman_teacher:"\ud83d\udc69\u200d\ud83c\udfeb",judge:"\ud83e\uddd1\u200d\u2696\ufe0f",man_judge:"\ud83d\udc68\u200d\u2696\ufe0f",woman_judge:"\ud83d\udc69\u200d\u2696\ufe0f",farmer:"\ud83e\uddd1\u200d\ud83c\udf3e",man_farmer:"\ud83d\udc68\u200d\ud83c\udf3e",woman_farmer:"\ud83d\udc69\u200d\ud83c\udf3e",cook:"\ud83e\uddd1\u200d\ud83c\udf73",man_cook:"\ud83d\udc68\u200d\ud83c\udf73",woman_cook:"\ud83d\udc69\u200d\ud83c\udf73",mechanic:"\ud83e\uddd1\u200d\ud83d\udd27",man_mechanic:"\ud83d\udc68\u200d\ud83d\udd27",woman_mechanic:"\ud83d\udc69\u200d\ud83d\udd27",factory_worker:"\ud83e\uddd1\u200d\ud83c\udfed",man_factory_worker:"\ud83d\udc68\u200d\ud83c\udfed",woman_factory_worker:"\ud83d\udc69\u200d\ud83c\udfed",office_worker:"\ud83e\uddd1\u200d\ud83d\udcbc",man_office_worker:"\ud83d\udc68\u200d\ud83d\udcbc",woman_office_worker:"\ud83d\udc69\u200d\ud83d\udcbc",scientist:"\ud83e\uddd1\u200d\ud83d\udd2c",man_scientist:"\ud83d\udc68\u200d\ud83d\udd2c",woman_scientist:"\ud83d\udc69\u200d\ud83d\udd2c",technologist:"\ud83e\uddd1\u200d\ud83d\udcbb",man_technologist:"\ud83d\udc68\u200d\ud83d\udcbb",woman_technologist:"\ud83d\udc69\u200d\ud83d\udcbb",singer:"\ud83e\uddd1\u200d\ud83c\udfa4",man_singer:"\ud83d\udc68\u200d\ud83c\udfa4",woman_singer:"\ud83d\udc69\u200d\ud83c\udfa4",artist:"\ud83e\uddd1\u200d\ud83c\udfa8",man_artist:"\ud83d\udc68\u200d\ud83c\udfa8",woman_artist:"\ud83d\udc69\u200d\ud83c\udfa8",pilot:"\ud83e\uddd1\u200d\u2708\ufe0f",man_pilot:"\ud83d\udc68\u200d\u2708\ufe0f",woman_pilot:"\ud83d\udc69\u200d\u2708\ufe0f",astronaut:"\ud83e\uddd1\u200d\ud83d\ude80",man_astronaut:"\ud83d\udc68\u200d\ud83d\ude80",woman_astronaut:"\ud83d\udc69\u200d\ud83d\ude80",firefighter:"\ud83e\uddd1\u200d\ud83d\ude92",man_firefighter:"\ud83d\udc68\u200d\ud83d\ude92",woman_firefighter:"\ud83d\udc69\u200d\ud83d\ude92",police_officer:"\ud83d\udc6e",cop:"\ud83d\udc6e",policeman:"\ud83d\udc6e\u200d\u2642\ufe0f",policewoman:"\ud83d\udc6e\u200d\u2640\ufe0f",detective:"\ud83d\udd75\ufe0f",male_detective:"\ud83d\udd75\ufe0f\u200d\u2642\ufe0f",female_detective:"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",guard:"\ud83d\udc82",guardsman:"\ud83d\udc82\u200d\u2642\ufe0f",guardswoman:"\ud83d\udc82\u200d\u2640\ufe0f",ninja:"\ud83e\udd77",construction_worker:"\ud83d\udc77",construction_worker_man:"\ud83d\udc77\u200d\u2642\ufe0f",construction_worker_woman:"\ud83d\udc77\u200d\u2640\ufe0f",person_with_crown:"\ud83e\udec5",prince:"\ud83e\udd34",princess:"\ud83d\udc78",person_with_turban:"\ud83d\udc73",man_with_turban:"\ud83d\udc73\u200d\u2642\ufe0f",woman_with_turban:"\ud83d\udc73\u200d\u2640\ufe0f",man_with_gua_pi_mao:"\ud83d\udc72",woman_with_headscarf:"\ud83e\uddd5",person_in_tuxedo:"\ud83e\udd35",man_in_tuxedo:"\ud83e\udd35\u200d\u2642\ufe0f",woman_in_tuxedo:"\ud83e\udd35\u200d\u2640\ufe0f",person_with_veil:"\ud83d\udc70",man_with_veil:"\ud83d\udc70\u200d\u2642\ufe0f",woman_with_veil:"\ud83d\udc70\u200d\u2640\ufe0f",bride_with_veil:"\ud83d\udc70\u200d\u2640\ufe0f",pregnant_woman:"\ud83e\udd30",pregnant_man:"\ud83e\udec3",pregnant_person:"\ud83e\udec4",breast_feeding:"\ud83e\udd31",woman_feeding_baby:"\ud83d\udc69\u200d\ud83c\udf7c",man_feeding_baby:"\ud83d\udc68\u200d\ud83c\udf7c",person_feeding_baby:"\ud83e\uddd1\u200d\ud83c\udf7c",angel:"\ud83d\udc7c",santa:"\ud83c\udf85",mrs_claus:"\ud83e\udd36",mx_claus:"\ud83e\uddd1\u200d\ud83c\udf84",superhero:"\ud83e\uddb8",superhero_man:"\ud83e\uddb8\u200d\u2642\ufe0f",superhero_woman:"\ud83e\uddb8\u200d\u2640\ufe0f",supervillain:"\ud83e\uddb9",supervillain_man:"\ud83e\uddb9\u200d\u2642\ufe0f",supervillain_woman:"\ud83e\uddb9\u200d\u2640\ufe0f",mage:"\ud83e\uddd9",mage_man:"\ud83e\uddd9\u200d\u2642\ufe0f",mage_woman:"\ud83e\uddd9\u200d\u2640\ufe0f",fairy:"\ud83e\uddda",fairy_man:"\ud83e\uddda\u200d\u2642\ufe0f",fairy_woman:"\ud83e\uddda\u200d\u2640\ufe0f",vampire:"\ud83e\udddb",vampire_man:"\ud83e\udddb\u200d\u2642\ufe0f",vampire_woman:"\ud83e\udddb\u200d\u2640\ufe0f",merperson:"\ud83e\udddc",merman:"\ud83e\udddc\u200d\u2642\ufe0f",mermaid:"\ud83e\udddc\u200d\u2640\ufe0f",elf:"\ud83e\udddd",elf_man:"\ud83e\udddd\u200d\u2642\ufe0f",elf_woman:"\ud83e\udddd\u200d\u2640\ufe0f",genie:"\ud83e\uddde",genie_man:"\ud83e\uddde\u200d\u2642\ufe0f",genie_woman:"\ud83e\uddde\u200d\u2640\ufe0f",zombie:"\ud83e\udddf",zombie_man:"\ud83e\udddf\u200d\u2642\ufe0f",zombie_woman:"\ud83e\udddf\u200d\u2640\ufe0f",troll:"\ud83e\uddcc",massage:"\ud83d\udc86",massage_man:"\ud83d\udc86\u200d\u2642\ufe0f",massage_woman:"\ud83d\udc86\u200d\u2640\ufe0f",haircut:"\ud83d\udc87",haircut_man:"\ud83d\udc87\u200d\u2642\ufe0f",haircut_woman:"\ud83d\udc87\u200d\u2640\ufe0f",walking:"\ud83d\udeb6",walking_man:"\ud83d\udeb6\u200d\u2642\ufe0f",walking_woman:"\ud83d\udeb6\u200d\u2640\ufe0f",standing_person:"\ud83e\uddcd",standing_man:"\ud83e\uddcd\u200d\u2642\ufe0f",standing_woman:"\ud83e\uddcd\u200d\u2640\ufe0f",kneeling_person:"\ud83e\uddce",kneeling_man:"\ud83e\uddce\u200d\u2642\ufe0f",kneeling_woman:"\ud83e\uddce\u200d\u2640\ufe0f",person_with_probing_cane:"\ud83e\uddd1\u200d\ud83e\uddaf",man_with_probing_cane:"\ud83d\udc68\u200d\ud83e\uddaf",woman_with_probing_cane:"\ud83d\udc69\u200d\ud83e\uddaf",person_in_motorized_wheelchair:"\ud83e\uddd1\u200d\ud83e\uddbc",man_in_motorized_wheelchair:"\ud83d\udc68\u200d\ud83e\uddbc",woman_in_motorized_wheelchair:"\ud83d\udc69\u200d\ud83e\uddbc",person_in_manual_wheelchair:"\ud83e\uddd1\u200d\ud83e\uddbd",man_in_manual_wheelchair:"\ud83d\udc68\u200d\ud83e\uddbd",woman_in_manual_wheelchair:"\ud83d\udc69\u200d\ud83e\uddbd",runner:"\ud83c\udfc3",running:"\ud83c\udfc3",running_man:"\ud83c\udfc3\u200d\u2642\ufe0f",running_woman:"\ud83c\udfc3\u200d\u2640\ufe0f",woman_dancing:"\ud83d\udc83",dancer:"\ud83d\udc83",man_dancing:"\ud83d\udd7a",business_suit_levitating:"\ud83d\udd74\ufe0f",dancers:"\ud83d\udc6f",dancing_men:"\ud83d\udc6f\u200d\u2642\ufe0f",dancing_women:"\ud83d\udc6f\u200d\u2640\ufe0f",sauna_person:"\ud83e\uddd6",sauna_man:"\ud83e\uddd6\u200d\u2642\ufe0f",sauna_woman:"\ud83e\uddd6\u200d\u2640\ufe0f",climbing:"\ud83e\uddd7",climbing_man:"\ud83e\uddd7\u200d\u2642\ufe0f",climbing_woman:"\ud83e\uddd7\u200d\u2640\ufe0f",person_fencing:"\ud83e\udd3a",horse_racing:"\ud83c\udfc7",skier:"\u26f7\ufe0f",snowboarder:"\ud83c\udfc2",golfing:"\ud83c\udfcc\ufe0f",golfing_man:"\ud83c\udfcc\ufe0f\u200d\u2642\ufe0f",golfing_woman:"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",surfer:"\ud83c\udfc4",surfing_man:"\ud83c\udfc4\u200d\u2642\ufe0f",surfing_woman:"\ud83c\udfc4\u200d\u2640\ufe0f",rowboat:"\ud83d\udea3",rowing_man:"\ud83d\udea3\u200d\u2642\ufe0f",rowing_woman:"\ud83d\udea3\u200d\u2640\ufe0f",swimmer:"\ud83c\udfca",swimming_man:"\ud83c\udfca\u200d\u2642\ufe0f",swimming_woman:"\ud83c\udfca\u200d\u2640\ufe0f",bouncing_ball_person:"\u26f9\ufe0f",bouncing_ball_man:"\u26f9\ufe0f\u200d\u2642\ufe0f",basketball_man:"\u26f9\ufe0f\u200d\u2642\ufe0f",bouncing_ball_woman:"\u26f9\ufe0f\u200d\u2640\ufe0f",basketball_woman:"\u26f9\ufe0f\u200d\u2640\ufe0f",weight_lifting:"\ud83c\udfcb\ufe0f",weight_lifting_man:"\ud83c\udfcb\ufe0f\u200d\u2642\ufe0f",weight_lifting_woman:"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",bicyclist:"\ud83d\udeb4",biking_man:"\ud83d\udeb4\u200d\u2642\ufe0f",biking_woman:"\ud83d\udeb4\u200d\u2640\ufe0f",mountain_bicyclist:"\ud83d\udeb5",mountain_biking_man:"\ud83d\udeb5\u200d\u2642\ufe0f",mountain_biking_woman:"\ud83d\udeb5\u200d\u2640\ufe0f",cartwheeling:"\ud83e\udd38",man_cartwheeling:"\ud83e\udd38\u200d\u2642\ufe0f",woman_cartwheeling:"\ud83e\udd38\u200d\u2640\ufe0f",wrestling:"\ud83e\udd3c",men_wrestling:"\ud83e\udd3c\u200d\u2642\ufe0f",women_wrestling:"\ud83e\udd3c\u200d\u2640\ufe0f",water_polo:"\ud83e\udd3d",man_playing_water_polo:"\ud83e\udd3d\u200d\u2642\ufe0f",woman_playing_water_polo:"\ud83e\udd3d\u200d\u2640\ufe0f",handball_person:"\ud83e\udd3e",man_playing_handball:"\ud83e\udd3e\u200d\u2642\ufe0f",woman_playing_handball:"\ud83e\udd3e\u200d\u2640\ufe0f",juggling_person:"\ud83e\udd39",man_juggling:"\ud83e\udd39\u200d\u2642\ufe0f",woman_juggling:"\ud83e\udd39\u200d\u2640\ufe0f",lotus_position:"\ud83e\uddd8",lotus_position_man:"\ud83e\uddd8\u200d\u2642\ufe0f",lotus_position_woman:"\ud83e\uddd8\u200d\u2640\ufe0f",bath:"\ud83d\udec0",sleeping_bed:"\ud83d\udecc",people_holding_hands:"\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1",two_women_holding_hands:"\ud83d\udc6d",couple:"\ud83d\udc6b",two_men_holding_hands:"\ud83d\udc6c",couplekiss:"\ud83d\udc8f",couplekiss_man_woman:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",couplekiss_man_man:"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",couplekiss_woman_woman:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",couple_with_heart:"\ud83d\udc91",couple_with_heart_woman_man:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc68",couple_with_heart_man_man:"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",couple_with_heart_woman_woman:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",family:"\ud83d\udc6a",family_man_woman_boy:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66",family_man_woman_girl:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",family_man_woman_girl_boy:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",family_man_woman_boy_boy:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",family_man_woman_girl_girl:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",family_man_man_boy:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",family_man_man_girl:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",family_man_man_girl_boy:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",family_man_man_boy_boy:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",family_man_man_girl_girl:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",family_woman_woman_boy:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",family_woman_woman_girl:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",family_woman_woman_girl_boy:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",family_woman_woman_boy_boy:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",family_woman_woman_girl_girl:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",family_man_boy:"\ud83d\udc68\u200d\ud83d\udc66",family_man_boy_boy:"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",family_man_girl:"\ud83d\udc68\u200d\ud83d\udc67",family_man_girl_boy:"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",family_man_girl_girl:"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",family_woman_boy:"\ud83d\udc69\u200d\ud83d\udc66",family_woman_boy_boy:"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",family_woman_girl:"\ud83d\udc69\u200d\ud83d\udc67",family_woman_girl_boy:"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",family_woman_girl_girl:"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",speaking_head:"\ud83d\udde3\ufe0f",bust_in_silhouette:"\ud83d\udc64",busts_in_silhouette:"\ud83d\udc65",people_hugging:"\ud83e\udec2",footprints:"\ud83d\udc63",monkey_face:"\ud83d\udc35",monkey:"\ud83d\udc12",gorilla:"\ud83e\udd8d",orangutan:"\ud83e\udda7",dog:"\ud83d\udc36",dog2:"\ud83d\udc15",guide_dog:"\ud83e\uddae",service_dog:"\ud83d\udc15\u200d\ud83e\uddba",poodle:"\ud83d\udc29",wolf:"\ud83d\udc3a",fox_face:"\ud83e\udd8a",raccoon:"\ud83e\udd9d",cat:"\ud83d\udc31",cat2:"\ud83d\udc08",black_cat:"\ud83d\udc08\u200d\u2b1b",lion:"\ud83e\udd81",tiger:"\ud83d\udc2f",tiger2:"\ud83d\udc05",leopard:"\ud83d\udc06",horse:"\ud83d\udc34",moose:"\ud83e\udece",donkey:"\ud83e\udecf",racehorse:"\ud83d\udc0e",unicorn:"\ud83e\udd84",zebra:"\ud83e\udd93",deer:"\ud83e\udd8c",bison:"\ud83e\uddac",cow:"\ud83d\udc2e",ox:"\ud83d\udc02",water_buffalo:"\ud83d\udc03",cow2:"\ud83d\udc04",pig:"\ud83d\udc37",pig2:"\ud83d\udc16",boar:"\ud83d\udc17",pig_nose:"\ud83d\udc3d",ram:"\ud83d\udc0f",sheep:"\ud83d\udc11",goat:"\ud83d\udc10",dromedary_camel:"\ud83d\udc2a",camel:"\ud83d\udc2b",llama:"\ud83e\udd99",giraffe:"\ud83e\udd92",elephant:"\ud83d\udc18",mammoth:"\ud83e\udda3",rhinoceros:"\ud83e\udd8f",hippopotamus:"\ud83e\udd9b",mouse:"\ud83d\udc2d",mouse2:"\ud83d\udc01",rat:"\ud83d\udc00",hamster:"\ud83d\udc39",rabbit:"\ud83d\udc30",rabbit2:"\ud83d\udc07",chipmunk:"\ud83d\udc3f\ufe0f",beaver:"\ud83e\uddab",hedgehog:"\ud83e\udd94",bat:"\ud83e\udd87",bear:"\ud83d\udc3b",polar_bear:"\ud83d\udc3b\u200d\u2744\ufe0f",koala:"\ud83d\udc28",panda_face:"\ud83d\udc3c",sloth:"\ud83e\udda5",otter:"\ud83e\udda6",skunk:"\ud83e\udda8",kangaroo:"\ud83e\udd98",badger:"\ud83e\udda1",feet:"\ud83d\udc3e",paw_prints:"\ud83d\udc3e",turkey:"\ud83e\udd83",chicken:"\ud83d\udc14",rooster:"\ud83d\udc13",hatching_chick:"\ud83d\udc23",baby_chick:"\ud83d\udc24",hatched_chick:"\ud83d\udc25",bird:"\ud83d\udc26",penguin:"\ud83d\udc27",dove:"\ud83d\udd4a\ufe0f",eagle:"\ud83e\udd85",duck:"\ud83e\udd86",swan:"\ud83e\udda2",owl:"\ud83e\udd89",dodo:"\ud83e\udda4",feather:"\ud83e\udeb6",flamingo:"\ud83e\udda9",peacock:"\ud83e\udd9a",parrot:"\ud83e\udd9c",wing:"\ud83e\udebd",black_bird:"\ud83d\udc26\u200d\u2b1b",goose:"\ud83e\udebf",frog:"\ud83d\udc38",crocodile:"\ud83d\udc0a",turtle:"\ud83d\udc22",lizard:"\ud83e\udd8e",snake:"\ud83d\udc0d",dragon_face:"\ud83d\udc32",dragon:"\ud83d\udc09",sauropod:"\ud83e\udd95","t-rex":"\ud83e\udd96",whale:"\ud83d\udc33",whale2:"\ud83d\udc0b",dolphin:"\ud83d\udc2c",flipper:"\ud83d\udc2c",seal:"\ud83e\uddad",fish:"\ud83d\udc1f",tropical_fish:"\ud83d\udc20",blowfish:"\ud83d\udc21",shark:"\ud83e\udd88",octopus:"\ud83d\udc19",shell:"\ud83d\udc1a",coral:"\ud83e\udeb8",jellyfish:"\ud83e\udebc",snail:"\ud83d\udc0c",butterfly:"\ud83e\udd8b",bug:"\ud83d\udc1b",ant:"\ud83d\udc1c",bee:"\ud83d\udc1d",honeybee:"\ud83d\udc1d",beetle:"\ud83e\udeb2",lady_beetle:"\ud83d\udc1e",cricket:"\ud83e\udd97",cockroach:"\ud83e\udeb3",spider:"\ud83d\udd77\ufe0f",spider_web:"\ud83d\udd78\ufe0f",scorpion:"\ud83e\udd82",mosquito:"\ud83e\udd9f",fly:"\ud83e\udeb0",worm:"\ud83e\udeb1",microbe:"\ud83e\udda0",bouquet:"\ud83d\udc90",cherry_blossom:"\ud83c\udf38",white_flower:"\ud83d\udcae",lotus:"\ud83e\udeb7",rosette:"\ud83c\udff5\ufe0f",rose:"\ud83c\udf39",wilted_flower:"\ud83e\udd40",hibiscus:"\ud83c\udf3a",sunflower:"\ud83c\udf3b",blossom:"\ud83c\udf3c",tulip:"\ud83c\udf37",hyacinth:"\ud83e\udebb",seedling:"\ud83c\udf31",potted_plant:"\ud83e\udeb4",evergreen_tree:"\ud83c\udf32",deciduous_tree:"\ud83c\udf33",palm_tree:"\ud83c\udf34",cactus:"\ud83c\udf35",ear_of_rice:"\ud83c\udf3e",herb:"\ud83c\udf3f",shamrock:"\u2618\ufe0f",four_leaf_clover:"\ud83c\udf40",maple_leaf:"\ud83c\udf41",fallen_leaf:"\ud83c\udf42",leaves:"\ud83c\udf43",empty_nest:"\ud83e\udeb9",nest_with_eggs:"\ud83e\udeba",mushroom:"\ud83c\udf44",grapes:"\ud83c\udf47",melon:"\ud83c\udf48",watermelon:"\ud83c\udf49",tangerine:"\ud83c\udf4a",orange:"\ud83c\udf4a",mandarin:"\ud83c\udf4a",lemon:"\ud83c\udf4b",banana:"\ud83c\udf4c",pineapple:"\ud83c\udf4d",mango:"\ud83e\udd6d",apple:"\ud83c\udf4e",green_apple:"\ud83c\udf4f",pear:"\ud83c\udf50",peach:"\ud83c\udf51",cherries:"\ud83c\udf52",strawberry:"\ud83c\udf53",blueberries:"\ud83e\uded0",kiwi_fruit:"\ud83e\udd5d",tomato:"\ud83c\udf45",olive:"\ud83e\uded2",coconut:"\ud83e\udd65",avocado:"\ud83e\udd51",eggplant:"\ud83c\udf46",potato:"\ud83e\udd54",carrot:"\ud83e\udd55",corn:"\ud83c\udf3d",hot_pepper:"\ud83c\udf36\ufe0f",bell_pepper:"\ud83e\uded1",cucumber:"\ud83e\udd52",leafy_green:"\ud83e\udd6c",broccoli:"\ud83e\udd66",garlic:"\ud83e\uddc4",onion:"\ud83e\uddc5",peanuts:"\ud83e\udd5c",beans:"\ud83e\uded8",chestnut:"\ud83c\udf30",ginger_root:"\ud83e\udeda",pea_pod:"\ud83e\udedb",bread:"\ud83c\udf5e",croissant:"\ud83e\udd50",baguette_bread:"\ud83e\udd56",flatbread:"\ud83e\uded3",pretzel:"\ud83e\udd68",bagel:"\ud83e\udd6f",pancakes:"\ud83e\udd5e",waffle:"\ud83e\uddc7",cheese:"\ud83e\uddc0",meat_on_bone:"\ud83c\udf56",poultry_leg:"\ud83c\udf57",cut_of_meat:"\ud83e\udd69",bacon:"\ud83e\udd53",hamburger:"\ud83c\udf54",fries:"\ud83c\udf5f",pizza:"\ud83c\udf55",hotdog:"\ud83c\udf2d",sandwich:"\ud83e\udd6a",taco:"\ud83c\udf2e",burrito:"\ud83c\udf2f",tamale:"\ud83e\uded4",stuffed_flatbread:"\ud83e\udd59",falafel:"\ud83e\uddc6",egg:"\ud83e\udd5a",fried_egg:"\ud83c\udf73",shallow_pan_of_food:"\ud83e\udd58",stew:"\ud83c\udf72",fondue:"\ud83e\uded5",bowl_with_spoon:"\ud83e\udd63",green_salad:"\ud83e\udd57",popcorn:"\ud83c\udf7f",butter:"\ud83e\uddc8",salt:"\ud83e\uddc2",canned_food:"\ud83e\udd6b",bento:"\ud83c\udf71",rice_cracker:"\ud83c\udf58",rice_ball:"\ud83c\udf59",rice:"\ud83c\udf5a",curry:"\ud83c\udf5b",ramen:"\ud83c\udf5c",spaghetti:"\ud83c\udf5d",sweet_potato:"\ud83c\udf60",oden:"\ud83c\udf62",sushi:"\ud83c\udf63",fried_shrimp:"\ud83c\udf64",fish_cake:"\ud83c\udf65",moon_cake:"\ud83e\udd6e",dango:"\ud83c\udf61",dumpling:"\ud83e\udd5f",fortune_cookie:"\ud83e\udd60",takeout_box:"\ud83e\udd61",crab:"\ud83e\udd80",lobster:"\ud83e\udd9e",shrimp:"\ud83e\udd90",squid:"\ud83e\udd91",oyster:"\ud83e\uddaa",icecream:"\ud83c\udf66",shaved_ice:"\ud83c\udf67",ice_cream:"\ud83c\udf68",doughnut:"\ud83c\udf69",cookie:"\ud83c\udf6a",birthday:"\ud83c\udf82",cake:"\ud83c\udf70",cupcake:"\ud83e\uddc1",pie:"\ud83e\udd67",chocolate_bar:"\ud83c\udf6b",candy:"\ud83c\udf6c",lollipop:"\ud83c\udf6d",custard:"\ud83c\udf6e",honey_pot:"\ud83c\udf6f",baby_bottle:"\ud83c\udf7c",milk_glass:"\ud83e\udd5b",coffee:"\u2615",teapot:"\ud83e\uded6",tea:"\ud83c\udf75",sake:"\ud83c\udf76",champagne:"\ud83c\udf7e",wine_glass:"\ud83c\udf77",cocktail:"\ud83c\udf78",tropical_drink:"\ud83c\udf79",beer:"\ud83c\udf7a",beers:"\ud83c\udf7b",clinking_glasses:"\ud83e\udd42",tumbler_glass:"\ud83e\udd43",pouring_liquid:"\ud83e\uded7",cup_with_straw:"\ud83e\udd64",bubble_tea:"\ud83e\uddcb",beverage_box:"\ud83e\uddc3",mate:"\ud83e\uddc9",ice_cube:"\ud83e\uddca",chopsticks:"\ud83e\udd62",plate_with_cutlery:"\ud83c\udf7d\ufe0f",fork_and_knife:"\ud83c\udf74",spoon:"\ud83e\udd44",hocho:"\ud83d\udd2a",knife:"\ud83d\udd2a",jar:"\ud83e\uded9",amphora:"\ud83c\udffa",earth_africa:"\ud83c\udf0d",earth_americas:"\ud83c\udf0e",earth_asia:"\ud83c\udf0f",globe_with_meridians:"\ud83c\udf10",world_map:"\ud83d\uddfa\ufe0f",japan:"\ud83d\uddfe",compass:"\ud83e\udded",mountain_snow:"\ud83c\udfd4\ufe0f",mountain:"\u26f0\ufe0f",volcano:"\ud83c\udf0b",mount_fuji:"\ud83d\uddfb",camping:"\ud83c\udfd5\ufe0f",beach_umbrella:"\ud83c\udfd6\ufe0f",desert:"\ud83c\udfdc\ufe0f",desert_island:"\ud83c\udfdd\ufe0f",national_park:"\ud83c\udfde\ufe0f",stadium:"\ud83c\udfdf\ufe0f",classical_building:"\ud83c\udfdb\ufe0f",building_construction:"\ud83c\udfd7\ufe0f",bricks:"\ud83e\uddf1",rock:"\ud83e\udea8",wood:"\ud83e\udeb5",hut:"\ud83d\uded6",houses:"\ud83c\udfd8\ufe0f",derelict_house:"\ud83c\udfda\ufe0f",house:"\ud83c\udfe0",house_with_garden:"\ud83c\udfe1",office:"\ud83c\udfe2",post_office:"\ud83c\udfe3",european_post_office:"\ud83c\udfe4",hospital:"\ud83c\udfe5",bank:"\ud83c\udfe6",hotel:"\ud83c\udfe8",love_hotel:"\ud83c\udfe9",convenience_store:"\ud83c\udfea",school:"\ud83c\udfeb",department_store:"\ud83c\udfec",factory:"\ud83c\udfed",japanese_castle:"\ud83c\udfef",european_castle:"\ud83c\udff0",wedding:"\ud83d\udc92",tokyo_tower:"\ud83d\uddfc",statue_of_liberty:"\ud83d\uddfd",church:"\u26ea",mosque:"\ud83d\udd4c",hindu_temple:"\ud83d\uded5",synagogue:"\ud83d\udd4d",shinto_shrine:"\u26e9\ufe0f",kaaba:"\ud83d\udd4b",fountain:"\u26f2",tent:"\u26fa",foggy:"\ud83c\udf01",night_with_stars:"\ud83c\udf03",cityscape:"\ud83c\udfd9\ufe0f",sunrise_over_mountains:"\ud83c\udf04",sunrise:"\ud83c\udf05",city_sunset:"\ud83c\udf06",city_sunrise:"\ud83c\udf07",bridge_at_night:"\ud83c\udf09",hotsprings:"\u2668\ufe0f",carousel_horse:"\ud83c\udfa0",playground_slide:"\ud83d\udedd",ferris_wheel:"\ud83c\udfa1",roller_coaster:"\ud83c\udfa2",barber:"\ud83d\udc88",circus_tent:"\ud83c\udfaa",steam_locomotive:"\ud83d\ude82",railway_car:"\ud83d\ude83",bullettrain_side:"\ud83d\ude84",bullettrain_front:"\ud83d\ude85",train2:"\ud83d\ude86",metro:"\ud83d\ude87",light_rail:"\ud83d\ude88",station:"\ud83d\ude89",tram:"\ud83d\ude8a",monorail:"\ud83d\ude9d",mountain_railway:"\ud83d\ude9e",train:"\ud83d\ude8b",bus:"\ud83d\ude8c",oncoming_bus:"\ud83d\ude8d",trolleybus:"\ud83d\ude8e",minibus:"\ud83d\ude90",ambulance:"\ud83d\ude91",fire_engine:"\ud83d\ude92",police_car:"\ud83d\ude93",oncoming_police_car:"\ud83d\ude94",taxi:"\ud83d\ude95",oncoming_taxi:"\ud83d\ude96",car:"\ud83d\ude97",red_car:"\ud83d\ude97",oncoming_automobile:"\ud83d\ude98",blue_car:"\ud83d\ude99",pickup_truck:"\ud83d\udefb",truck:"\ud83d\ude9a",articulated_lorry:"\ud83d\ude9b",tractor:"\ud83d\ude9c",racing_car:"\ud83c\udfce\ufe0f",motorcycle:"\ud83c\udfcd\ufe0f",motor_scooter:"\ud83d\udef5",manual_wheelchair:"\ud83e\uddbd",motorized_wheelchair:"\ud83e\uddbc",auto_rickshaw:"\ud83d\udefa",bike:"\ud83d\udeb2",kick_scooter:"\ud83d\udef4",skateboard:"\ud83d\udef9",roller_skate:"\ud83d\udefc",busstop:"\ud83d\ude8f",motorway:"\ud83d\udee3\ufe0f",railway_track:"\ud83d\udee4\ufe0f",oil_drum:"\ud83d\udee2\ufe0f",fuelpump:"\u26fd",wheel:"\ud83d\udede",rotating_light:"\ud83d\udea8",traffic_light:"\ud83d\udea5",vertical_traffic_light:"\ud83d\udea6",stop_sign:"\ud83d\uded1",construction:"\ud83d\udea7",anchor:"\u2693",ring_buoy:"\ud83d\udedf",boat:"\u26f5",sailboat:"\u26f5",canoe:"\ud83d\udef6",speedboat:"\ud83d\udea4",passenger_ship:"\ud83d\udef3\ufe0f",ferry:"\u26f4\ufe0f",motor_boat:"\ud83d\udee5\ufe0f",ship:"\ud83d\udea2",airplane:"\u2708\ufe0f",small_airplane:"\ud83d\udee9\ufe0f",flight_departure:"\ud83d\udeeb",flight_arrival:"\ud83d\udeec",parachute:"\ud83e\ude82",seat:"\ud83d\udcba",helicopter:"\ud83d\ude81",suspension_railway:"\ud83d\ude9f",mountain_cableway:"\ud83d\udea0",aerial_tramway:"\ud83d\udea1",artificial_satellite:"\ud83d\udef0\ufe0f",rocket:"\ud83d\ude80",flying_saucer:"\ud83d\udef8",bellhop_bell:"\ud83d\udece\ufe0f",luggage:"\ud83e\uddf3",hourglass:"\u231b",hourglass_flowing_sand:"\u23f3",watch:"\u231a",alarm_clock:"\u23f0",stopwatch:"\u23f1\ufe0f",timer_clock:"\u23f2\ufe0f",mantelpiece_clock:"\ud83d\udd70\ufe0f",clock12:"\ud83d\udd5b",clock1230:"\ud83d\udd67",clock1:"\ud83d\udd50",clock130:"\ud83d\udd5c",clock2:"\ud83d\udd51",clock230:"\ud83d\udd5d",clock3:"\ud83d\udd52",clock330:"\ud83d\udd5e",clock4:"\ud83d\udd53",clock430:"\ud83d\udd5f",clock5:"\ud83d\udd54",clock530:"\ud83d\udd60",clock6:"\ud83d\udd55",clock630:"\ud83d\udd61",clock7:"\ud83d\udd56",clock730:"\ud83d\udd62",clock8:"\ud83d\udd57",clock830:"\ud83d\udd63",clock9:"\ud83d\udd58",clock930:"\ud83d\udd64",clock10:"\ud83d\udd59",clock1030:"\ud83d\udd65",clock11:"\ud83d\udd5a",clock1130:"\ud83d\udd66",new_moon:"\ud83c\udf11",waxing_crescent_moon:"\ud83c\udf12",first_quarter_moon:"\ud83c\udf13",moon:"\ud83c\udf14",waxing_gibbous_moon:"\ud83c\udf14",full_moon:"\ud83c\udf15",waning_gibbous_moon:"\ud83c\udf16",last_quarter_moon:"\ud83c\udf17",waning_crescent_moon:"\ud83c\udf18",crescent_moon:"\ud83c\udf19",new_moon_with_face:"\ud83c\udf1a",first_quarter_moon_with_face:"\ud83c\udf1b",last_quarter_moon_with_face:"\ud83c\udf1c",thermometer:"\ud83c\udf21\ufe0f",sunny:"\u2600\ufe0f",full_moon_with_face:"\ud83c\udf1d",sun_with_face:"\ud83c\udf1e",ringed_planet:"\ud83e\ude90",star:"\u2b50",star2:"\ud83c\udf1f",stars:"\ud83c\udf20",milky_way:"\ud83c\udf0c",cloud:"\u2601\ufe0f",partly_sunny:"\u26c5",cloud_with_lightning_and_rain:"\u26c8\ufe0f",sun_behind_small_cloud:"\ud83c\udf24\ufe0f",sun_behind_large_cloud:"\ud83c\udf25\ufe0f",sun_behind_rain_cloud:"\ud83c\udf26\ufe0f",cloud_with_rain:"\ud83c\udf27\ufe0f",cloud_with_snow:"\ud83c\udf28\ufe0f",cloud_with_lightning:"\ud83c\udf29\ufe0f",tornado:"\ud83c\udf2a\ufe0f",fog:"\ud83c\udf2b\ufe0f",wind_face:"\ud83c\udf2c\ufe0f",cyclone:"\ud83c\udf00",rainbow:"\ud83c\udf08",closed_umbrella:"\ud83c\udf02",open_umbrella:"\u2602\ufe0f",umbrella:"\u2614",parasol_on_ground:"\u26f1\ufe0f",zap:"\u26a1",snowflake:"\u2744\ufe0f",snowman_with_snow:"\u2603\ufe0f",snowman:"\u26c4",comet:"\u2604\ufe0f",fire:"\ud83d\udd25",droplet:"\ud83d\udca7",ocean:"\ud83c\udf0a",jack_o_lantern:"\ud83c\udf83",christmas_tree:"\ud83c\udf84",fireworks:"\ud83c\udf86",sparkler:"\ud83c\udf87",firecracker:"\ud83e\udde8",sparkles:"\u2728",balloon:"\ud83c\udf88",tada:"\ud83c\udf89",confetti_ball:"\ud83c\udf8a",tanabata_tree:"\ud83c\udf8b",bamboo:"\ud83c\udf8d",dolls:"\ud83c\udf8e",flags:"\ud83c\udf8f",wind_chime:"\ud83c\udf90",rice_scene:"\ud83c\udf91",red_envelope:"\ud83e\udde7",ribbon:"\ud83c\udf80",gift:"\ud83c\udf81",reminder_ribbon:"\ud83c\udf97\ufe0f",tickets:"\ud83c\udf9f\ufe0f",ticket:"\ud83c\udfab",medal_military:"\ud83c\udf96\ufe0f",trophy:"\ud83c\udfc6",medal_sports:"\ud83c\udfc5","1st_place_medal":"\ud83e\udd47","2nd_place_medal":"\ud83e\udd48","3rd_place_medal":"\ud83e\udd49",soccer:"\u26bd",baseball:"\u26be",softball:"\ud83e\udd4e",basketball:"\ud83c\udfc0",volleyball:"\ud83c\udfd0",football:"\ud83c\udfc8",rugby_football:"\ud83c\udfc9",tennis:"\ud83c\udfbe",flying_disc:"\ud83e\udd4f",bowling:"\ud83c\udfb3",cricket_game:"\ud83c\udfcf",field_hockey:"\ud83c\udfd1",ice_hockey:"\ud83c\udfd2",lacrosse:"\ud83e\udd4d",ping_pong:"\ud83c\udfd3",badminton:"\ud83c\udff8",boxing_glove:"\ud83e\udd4a",martial_arts_uniform:"\ud83e\udd4b",goal_net:"\ud83e\udd45",golf:"\u26f3",ice_skate:"\u26f8\ufe0f",fishing_pole_and_fish:"\ud83c\udfa3",diving_mask:"\ud83e\udd3f",running_shirt_with_sash:"\ud83c\udfbd",ski:"\ud83c\udfbf",sled:"\ud83d\udef7",curling_stone:"\ud83e\udd4c",dart:"\ud83c\udfaf",yo_yo:"\ud83e\ude80",kite:"\ud83e\ude81",gun:"\ud83d\udd2b","8ball":"\ud83c\udfb1",crystal_ball:"\ud83d\udd2e",magic_wand:"\ud83e\ude84",video_game:"\ud83c\udfae",joystick:"\ud83d\udd79\ufe0f",slot_machine:"\ud83c\udfb0",game_die:"\ud83c\udfb2",jigsaw:"\ud83e\udde9",teddy_bear:"\ud83e\uddf8",pinata:"\ud83e\ude85",mirror_ball:"\ud83e\udea9",nesting_dolls:"\ud83e\ude86",spades:"\u2660\ufe0f",hearts:"\u2665\ufe0f",diamonds:"\u2666\ufe0f",clubs:"\u2663\ufe0f",chess_pawn:"\u265f\ufe0f",black_joker:"\ud83c\udccf",mahjong:"\ud83c\udc04",flower_playing_cards:"\ud83c\udfb4",performing_arts:"\ud83c\udfad",framed_picture:"\ud83d\uddbc\ufe0f",art:"\ud83c\udfa8",thread:"\ud83e\uddf5",sewing_needle:"\ud83e\udea1",yarn:"\ud83e\uddf6",knot:"\ud83e\udea2",eyeglasses:"\ud83d\udc53",dark_sunglasses:"\ud83d\udd76\ufe0f",goggles:"\ud83e\udd7d",lab_coat:"\ud83e\udd7c",safety_vest:"\ud83e\uddba",necktie:"\ud83d\udc54",shirt:"\ud83d\udc55",tshirt:"\ud83d\udc55",jeans:"\ud83d\udc56",scarf:"\ud83e\udde3",gloves:"\ud83e\udde4",coat:"\ud83e\udde5",socks:"\ud83e\udde6",dress:"\ud83d\udc57",kimono:"\ud83d\udc58",sari:"\ud83e\udd7b",one_piece_swimsuit:"\ud83e\ude71",swim_brief:"\ud83e\ude72",shorts:"\ud83e\ude73",bikini:"\ud83d\udc59",womans_clothes:"\ud83d\udc5a",folding_hand_fan:"\ud83e\udead",purse:"\ud83d\udc5b",handbag:"\ud83d\udc5c",pouch:"\ud83d\udc5d",shopping:"\ud83d\udecd\ufe0f",school_satchel:"\ud83c\udf92",thong_sandal:"\ud83e\ude74",mans_shoe:"\ud83d\udc5e",shoe:"\ud83d\udc5e",athletic_shoe:"\ud83d\udc5f",hiking_boot:"\ud83e\udd7e",flat_shoe:"\ud83e\udd7f",high_heel:"\ud83d\udc60",sandal:"\ud83d\udc61",ballet_shoes:"\ud83e\ude70",boot:"\ud83d\udc62",hair_pick:"\ud83e\udeae",crown:"\ud83d\udc51",womans_hat:"\ud83d\udc52",tophat:"\ud83c\udfa9",mortar_board:"\ud83c\udf93",billed_cap:"\ud83e\udde2",military_helmet:"\ud83e\ude96",rescue_worker_helmet:"\u26d1\ufe0f",prayer_beads:"\ud83d\udcff",lipstick:"\ud83d\udc84",ring:"\ud83d\udc8d",gem:"\ud83d\udc8e",mute:"\ud83d\udd07",speaker:"\ud83d\udd08",sound:"\ud83d\udd09",loud_sound:"\ud83d\udd0a",loudspeaker:"\ud83d\udce2",mega:"\ud83d\udce3",postal_horn:"\ud83d\udcef",bell:"\ud83d\udd14",no_bell:"\ud83d\udd15",musical_score:"\ud83c\udfbc",musical_note:"\ud83c\udfb5",notes:"\ud83c\udfb6",studio_microphone:"\ud83c\udf99\ufe0f",level_slider:"\ud83c\udf9a\ufe0f",control_knobs:"\ud83c\udf9b\ufe0f",microphone:"\ud83c\udfa4",headphones:"\ud83c\udfa7",radio:"\ud83d\udcfb",saxophone:"\ud83c\udfb7",accordion:"\ud83e\ude97",guitar:"\ud83c\udfb8",musical_keyboard:"\ud83c\udfb9",trumpet:"\ud83c\udfba",violin:"\ud83c\udfbb",banjo:"\ud83e\ude95",drum:"\ud83e\udd41",long_drum:"\ud83e\ude98",maracas:"\ud83e\ude87",flute:"\ud83e\ude88",iphone:"\ud83d\udcf1",calling:"\ud83d\udcf2",phone:"\u260e\ufe0f",telephone:"\u260e\ufe0f",telephone_receiver:"\ud83d\udcde",pager:"\ud83d\udcdf",fax:"\ud83d\udce0",battery:"\ud83d\udd0b",low_battery:"\ud83e\udeab",electric_plug:"\ud83d\udd0c",computer:"\ud83d\udcbb",desktop_computer:"\ud83d\udda5\ufe0f",printer:"\ud83d\udda8\ufe0f",keyboard:"\u2328\ufe0f",computer_mouse:"\ud83d\uddb1\ufe0f",trackball:"\ud83d\uddb2\ufe0f",minidisc:"\ud83d\udcbd",floppy_disk:"\ud83d\udcbe",cd:"\ud83d\udcbf",dvd:"\ud83d\udcc0",abacus:"\ud83e\uddee",movie_camera:"\ud83c\udfa5",film_strip:"\ud83c\udf9e\ufe0f",film_projector:"\ud83d\udcfd\ufe0f",clapper:"\ud83c\udfac",tv:"\ud83d\udcfa",camera:"\ud83d\udcf7",camera_flash:"\ud83d\udcf8",video_camera:"\ud83d\udcf9",vhs:"\ud83d\udcfc",mag:"\ud83d\udd0d",mag_right:"\ud83d\udd0e",candle:"\ud83d\udd6f\ufe0f",bulb:"\ud83d\udca1",flashlight:"\ud83d\udd26",izakaya_lantern:"\ud83c\udfee",lantern:"\ud83c\udfee",diya_lamp:"\ud83e\ude94",notebook_with_decorative_cover:"\ud83d\udcd4",closed_book:"\ud83d\udcd5",book:"\ud83d\udcd6",open_book:"\ud83d\udcd6",green_book:"\ud83d\udcd7",blue_book:"\ud83d\udcd8",orange_book:"\ud83d\udcd9",books:"\ud83d\udcda",notebook:"\ud83d\udcd3",ledger:"\ud83d\udcd2",page_with_curl:"\ud83d\udcc3",scroll:"\ud83d\udcdc",page_facing_up:"\ud83d\udcc4",newspaper:"\ud83d\udcf0",newspaper_roll:"\ud83d\uddde\ufe0f",bookmark_tabs:"\ud83d\udcd1",bookmark:"\ud83d\udd16",label:"\ud83c\udff7\ufe0f",moneybag:"\ud83d\udcb0",coin:"\ud83e\ude99",yen:"\ud83d\udcb4",dollar:"\ud83d\udcb5",euro:"\ud83d\udcb6",pound:"\ud83d\udcb7",money_with_wings:"\ud83d\udcb8",credit_card:"\ud83d\udcb3",receipt:"\ud83e\uddfe",chart:"\ud83d\udcb9",envelope:"\u2709\ufe0f",email:"\ud83d\udce7","e-mail":"\ud83d\udce7",incoming_envelope:"\ud83d\udce8",envelope_with_arrow:"\ud83d\udce9",outbox_tray:"\ud83d\udce4",inbox_tray:"\ud83d\udce5",package:"\ud83d\udce6",mailbox:"\ud83d\udceb",mailbox_closed:"\ud83d\udcea",mailbox_with_mail:"\ud83d\udcec",mailbox_with_no_mail:"\ud83d\udced",postbox:"\ud83d\udcee",ballot_box:"\ud83d\uddf3\ufe0f",pencil2:"\u270f\ufe0f",black_nib:"\u2712\ufe0f",fountain_pen:"\ud83d\udd8b\ufe0f",pen:"\ud83d\udd8a\ufe0f",paintbrush:"\ud83d\udd8c\ufe0f",crayon:"\ud83d\udd8d\ufe0f",memo:"\ud83d\udcdd",pencil:"\ud83d\udcdd",briefcase:"\ud83d\udcbc",file_folder:"\ud83d\udcc1",open_file_folder:"\ud83d\udcc2",card_index_dividers:"\ud83d\uddc2\ufe0f",date:"\ud83d\udcc5",calendar:"\ud83d\udcc6",spiral_notepad:"\ud83d\uddd2\ufe0f",spiral_calendar:"\ud83d\uddd3\ufe0f",card_index:"\ud83d\udcc7",chart_with_upwards_trend:"\ud83d\udcc8",chart_with_downwards_trend:"\ud83d\udcc9",bar_chart:"\ud83d\udcca",clipboard:"\ud83d\udccb",pushpin:"\ud83d\udccc",round_pushpin:"\ud83d\udccd",paperclip:"\ud83d\udcce",paperclips:"\ud83d\udd87\ufe0f",straight_ruler:"\ud83d\udccf",triangular_ruler:"\ud83d\udcd0",scissors:"\u2702\ufe0f",card_file_box:"\ud83d\uddc3\ufe0f",file_cabinet:"\ud83d\uddc4\ufe0f",wastebasket:"\ud83d\uddd1\ufe0f",lock:"\ud83d\udd12",unlock:"\ud83d\udd13",lock_with_ink_pen:"\ud83d\udd0f",closed_lock_with_key:"\ud83d\udd10",key:"\ud83d\udd11",old_key:"\ud83d\udddd\ufe0f",hammer:"\ud83d\udd28",axe:"\ud83e\ude93",pick:"\u26cf\ufe0f",hammer_and_pick:"\u2692\ufe0f",hammer_and_wrench:"\ud83d\udee0\ufe0f",dagger:"\ud83d\udde1\ufe0f",crossed_swords:"\u2694\ufe0f",bomb:"\ud83d\udca3",boomerang:"\ud83e\ude83",bow_and_arrow:"\ud83c\udff9",shield:"\ud83d\udee1\ufe0f",carpentry_saw:"\ud83e\ude9a",wrench:"\ud83d\udd27",screwdriver:"\ud83e\ude9b",nut_and_bolt:"\ud83d\udd29",gear:"\u2699\ufe0f",clamp:"\ud83d\udddc\ufe0f",balance_scale:"\u2696\ufe0f",probing_cane:"\ud83e\uddaf",link:"\ud83d\udd17",chains:"\u26d3\ufe0f",hook:"\ud83e\ude9d",toolbox:"\ud83e\uddf0",magnet:"\ud83e\uddf2",ladder:"\ud83e\ude9c",alembic:"\u2697\ufe0f",test_tube:"\ud83e\uddea",petri_dish:"\ud83e\uddeb",dna:"\ud83e\uddec",microscope:"\ud83d\udd2c",telescope:"\ud83d\udd2d",satellite:"\ud83d\udce1",syringe:"\ud83d\udc89",drop_of_blood:"\ud83e\ude78",pill:"\ud83d\udc8a",adhesive_bandage:"\ud83e\ude79",crutch:"\ud83e\ude7c",stethoscope:"\ud83e\ude7a",x_ray:"\ud83e\ude7b",door:"\ud83d\udeaa",elevator:"\ud83d\uded7",mirror:"\ud83e\ude9e",window:"\ud83e\ude9f",bed:"\ud83d\udecf\ufe0f",couch_and_lamp:"\ud83d\udecb\ufe0f",chair:"\ud83e\ude91",toilet:"\ud83d\udebd",plunger:"\ud83e\udea0",shower:"\ud83d\udebf",bathtub:"\ud83d\udec1",mouse_trap:"\ud83e\udea4",razor:"\ud83e\ude92",lotion_bottle:"\ud83e\uddf4",safety_pin:"\ud83e\uddf7",broom:"\ud83e\uddf9",basket:"\ud83e\uddfa",roll_of_paper:"\ud83e\uddfb",bucket:"\ud83e\udea3",soap:"\ud83e\uddfc",bubbles:"\ud83e\udee7",toothbrush:"\ud83e\udea5",sponge:"\ud83e\uddfd",fire_extinguisher:"\ud83e\uddef",shopping_cart:"\ud83d\uded2",smoking:"\ud83d\udeac",coffin:"\u26b0\ufe0f",headstone:"\ud83e\udea6",funeral_urn:"\u26b1\ufe0f",nazar_amulet:"\ud83e\uddff",hamsa:"\ud83e\udeac",moyai:"\ud83d\uddff",placard:"\ud83e\udea7",identification_card:"\ud83e\udeaa",atm:"\ud83c\udfe7",put_litter_in_its_place:"\ud83d\udeae",potable_water:"\ud83d\udeb0",wheelchair:"\u267f",mens:"\ud83d\udeb9",womens:"\ud83d\udeba",restroom:"\ud83d\udebb",baby_symbol:"\ud83d\udebc",wc:"\ud83d\udebe",passport_control:"\ud83d\udec2",customs:"\ud83d\udec3",baggage_claim:"\ud83d\udec4",left_luggage:"\ud83d\udec5",warning:"\u26a0\ufe0f",children_crossing:"\ud83d\udeb8",no_entry:"\u26d4",no_entry_sign:"\ud83d\udeab",no_bicycles:"\ud83d\udeb3",no_smoking:"\ud83d\udead",do_not_litter:"\ud83d\udeaf","non-potable_water":"\ud83d\udeb1",no_pedestrians:"\ud83d\udeb7",no_mobile_phones:"\ud83d\udcf5",underage:"\ud83d\udd1e",radioactive:"\u2622\ufe0f",biohazard:"\u2623\ufe0f",arrow_up:"\u2b06\ufe0f",arrow_upper_right:"\u2197\ufe0f",arrow_right:"\u27a1\ufe0f",arrow_lower_right:"\u2198\ufe0f",arrow_down:"\u2b07\ufe0f",arrow_lower_left:"\u2199\ufe0f",arrow_left:"\u2b05\ufe0f",arrow_upper_left:"\u2196\ufe0f",arrow_up_down:"\u2195\ufe0f",left_right_arrow:"\u2194\ufe0f",leftwards_arrow_with_hook:"\u21a9\ufe0f",arrow_right_hook:"\u21aa\ufe0f",arrow_heading_up:"\u2934\ufe0f",arrow_heading_down:"\u2935\ufe0f",arrows_clockwise:"\ud83d\udd03",arrows_counterclockwise:"\ud83d\udd04",back:"\ud83d\udd19",end:"\ud83d\udd1a",on:"\ud83d\udd1b",soon:"\ud83d\udd1c",top:"\ud83d\udd1d",place_of_worship:"\ud83d\uded0",atom_symbol:"\u269b\ufe0f",om:"\ud83d\udd49\ufe0f",star_of_david:"\u2721\ufe0f",wheel_of_dharma:"\u2638\ufe0f",yin_yang:"\u262f\ufe0f",latin_cross:"\u271d\ufe0f",orthodox_cross:"\u2626\ufe0f",star_and_crescent:"\u262a\ufe0f",peace_symbol:"\u262e\ufe0f",menorah:"\ud83d\udd4e",six_pointed_star:"\ud83d\udd2f",khanda:"\ud83e\udeaf",aries:"\u2648",taurus:"\u2649",gemini:"\u264a",cancer:"\u264b",leo:"\u264c",virgo:"\u264d",libra:"\u264e",scorpius:"\u264f",sagittarius:"\u2650",capricorn:"\u2651",aquarius:"\u2652",pisces:"\u2653",ophiuchus:"\u26ce",twisted_rightwards_arrows:"\ud83d\udd00",repeat:"\ud83d\udd01",repeat_one:"\ud83d\udd02",arrow_forward:"\u25b6\ufe0f",fast_forward:"\u23e9",next_track_button:"\u23ed\ufe0f",play_or_pause_button:"\u23ef\ufe0f",arrow_backward:"\u25c0\ufe0f",rewind:"\u23ea",previous_track_button:"\u23ee\ufe0f",arrow_up_small:"\ud83d\udd3c",arrow_double_up:"\u23eb",arrow_down_small:"\ud83d\udd3d",arrow_double_down:"\u23ec",pause_button:"\u23f8\ufe0f",stop_button:"\u23f9\ufe0f",record_button:"\u23fa\ufe0f",eject_button:"\u23cf\ufe0f",cinema:"\ud83c\udfa6",low_brightness:"\ud83d\udd05",high_brightness:"\ud83d\udd06",signal_strength:"\ud83d\udcf6",wireless:"\ud83d\udedc",vibration_mode:"\ud83d\udcf3",mobile_phone_off:"\ud83d\udcf4",female_sign:"\u2640\ufe0f",male_sign:"\u2642\ufe0f",transgender_symbol:"\u26a7\ufe0f",heavy_multiplication_x:"\u2716\ufe0f",heavy_plus_sign:"\u2795",heavy_minus_sign:"\u2796",heavy_division_sign:"\u2797",heavy_equals_sign:"\ud83d\udff0",infinity:"\u267e\ufe0f",bangbang:"\u203c\ufe0f",interrobang:"\u2049\ufe0f",question:"\u2753",grey_question:"\u2754",grey_exclamation:"\u2755",exclamation:"\u2757",heavy_exclamation_mark:"\u2757",wavy_dash:"\u3030\ufe0f",currency_exchange:"\ud83d\udcb1",heavy_dollar_sign:"\ud83d\udcb2",medical_symbol:"\u2695\ufe0f",recycle:"\u267b\ufe0f",fleur_de_lis:"\u269c\ufe0f",trident:"\ud83d\udd31",name_badge:"\ud83d\udcdb",beginner:"\ud83d\udd30",o:"\u2b55",white_check_mark:"\u2705",ballot_box_with_check:"\u2611\ufe0f",heavy_check_mark:"\u2714\ufe0f",x:"\u274c",negative_squared_cross_mark:"\u274e",curly_loop:"\u27b0",loop:"\u27bf",part_alternation_mark:"\u303d\ufe0f",eight_spoked_asterisk:"\u2733\ufe0f",eight_pointed_black_star:"\u2734\ufe0f",sparkle:"\u2747\ufe0f",copyright:"\xa9\ufe0f",registered:"\xae\ufe0f",tm:"\u2122\ufe0f",hash:"#\ufe0f\u20e3",asterisk:"*\ufe0f\u20e3",zero:"0\ufe0f\u20e3",one:"1\ufe0f\u20e3",two:"2\ufe0f\u20e3",three:"3\ufe0f\u20e3",four:"4\ufe0f\u20e3",five:"5\ufe0f\u20e3",six:"6\ufe0f\u20e3",seven:"7\ufe0f\u20e3",eight:"8\ufe0f\u20e3",nine:"9\ufe0f\u20e3",keycap_ten:"\ud83d\udd1f",capital_abcd:"\ud83d\udd20",abcd:"\ud83d\udd21",symbols:"\ud83d\udd23",abc:"\ud83d\udd24",a:"\ud83c\udd70\ufe0f",ab:"\ud83c\udd8e",b:"\ud83c\udd71\ufe0f",cl:"\ud83c\udd91",cool:"\ud83c\udd92",free:"\ud83c\udd93",information_source:"\u2139\ufe0f",id:"\ud83c\udd94",m:"\u24c2\ufe0f",new:"\ud83c\udd95",ng:"\ud83c\udd96",o2:"\ud83c\udd7e\ufe0f",ok:"\ud83c\udd97",parking:"\ud83c\udd7f\ufe0f",sos:"\ud83c\udd98",up:"\ud83c\udd99",vs:"\ud83c\udd9a",koko:"\ud83c\ude01",sa:"\ud83c\ude02\ufe0f",u6708:"\ud83c\ude37\ufe0f",u6709:"\ud83c\ude36",u6307:"\ud83c\ude2f",ideograph_advantage:"\ud83c\ude50",u5272:"\ud83c\ude39",u7121:"\ud83c\ude1a",u7981:"\ud83c\ude32",accept:"\ud83c\ude51",u7533:"\ud83c\ude38",u5408:"\ud83c\ude34",u7a7a:"\ud83c\ude33",congratulations:"\u3297\ufe0f",secret:"\u3299\ufe0f",u55b6:"\ud83c\ude3a",u6e80:"\ud83c\ude35",red_circle:"\ud83d\udd34",orange_circle:"\ud83d\udfe0",yellow_circle:"\ud83d\udfe1",green_circle:"\ud83d\udfe2",large_blue_circle:"\ud83d\udd35",purple_circle:"\ud83d\udfe3",brown_circle:"\ud83d\udfe4",black_circle:"\u26ab",white_circle:"\u26aa",red_square:"\ud83d\udfe5",orange_square:"\ud83d\udfe7",yellow_square:"\ud83d\udfe8",green_square:"\ud83d\udfe9",blue_square:"\ud83d\udfe6",purple_square:"\ud83d\udfea",brown_square:"\ud83d\udfeb",black_large_square:"\u2b1b",white_large_square:"\u2b1c",black_medium_square:"\u25fc\ufe0f",white_medium_square:"\u25fb\ufe0f",black_medium_small_square:"\u25fe",white_medium_small_square:"\u25fd",black_small_square:"\u25aa\ufe0f",white_small_square:"\u25ab\ufe0f",large_orange_diamond:"\ud83d\udd36",large_blue_diamond:"\ud83d\udd37",small_orange_diamond:"\ud83d\udd38",small_blue_diamond:"\ud83d\udd39",small_red_triangle:"\ud83d\udd3a",small_red_triangle_down:"\ud83d\udd3b",diamond_shape_with_a_dot_inside:"\ud83d\udca0",radio_button:"\ud83d\udd18",white_square_button:"\ud83d\udd33",black_square_button:"\ud83d\udd32",checkered_flag:"\ud83c\udfc1",triangular_flag_on_post:"\ud83d\udea9",crossed_flags:"\ud83c\udf8c",black_flag:"\ud83c\udff4",white_flag:"\ud83c\udff3\ufe0f",rainbow_flag:"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",transgender_flag:"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f",pirate_flag:"\ud83c\udff4\u200d\u2620\ufe0f",ascension_island:"\ud83c\udde6\ud83c\udde8",andorra:"\ud83c\udde6\ud83c\udde9",united_arab_emirates:"\ud83c\udde6\ud83c\uddea",afghanistan:"\ud83c\udde6\ud83c\uddeb",antigua_barbuda:"\ud83c\udde6\ud83c\uddec",anguilla:"\ud83c\udde6\ud83c\uddee",albania:"\ud83c\udde6\ud83c\uddf1",armenia:"\ud83c\udde6\ud83c\uddf2",angola:"\ud83c\udde6\ud83c\uddf4",antarctica:"\ud83c\udde6\ud83c\uddf6",argentina:"\ud83c\udde6\ud83c\uddf7",american_samoa:"\ud83c\udde6\ud83c\uddf8",austria:"\ud83c\udde6\ud83c\uddf9",australia:"\ud83c\udde6\ud83c\uddfa",aruba:"\ud83c\udde6\ud83c\uddfc",aland_islands:"\ud83c\udde6\ud83c\uddfd",azerbaijan:"\ud83c\udde6\ud83c\uddff",bosnia_herzegovina:"\ud83c\udde7\ud83c\udde6",barbados:"\ud83c\udde7\ud83c\udde7",bangladesh:"\ud83c\udde7\ud83c\udde9",belgium:"\ud83c\udde7\ud83c\uddea",burkina_faso:"\ud83c\udde7\ud83c\uddeb",bulgaria:"\ud83c\udde7\ud83c\uddec",bahrain:"\ud83c\udde7\ud83c\udded",burundi:"\ud83c\udde7\ud83c\uddee",benin:"\ud83c\udde7\ud83c\uddef",st_barthelemy:"\ud83c\udde7\ud83c\uddf1",bermuda:"\ud83c\udde7\ud83c\uddf2",brunei:"\ud83c\udde7\ud83c\uddf3",bolivia:"\ud83c\udde7\ud83c\uddf4",caribbean_netherlands:"\ud83c\udde7\ud83c\uddf6",brazil:"\ud83c\udde7\ud83c\uddf7",bahamas:"\ud83c\udde7\ud83c\uddf8",bhutan:"\ud83c\udde7\ud83c\uddf9",bouvet_island:"\ud83c\udde7\ud83c\uddfb",botswana:"\ud83c\udde7\ud83c\uddfc",belarus:"\u2b1c\ufe0f\ud83d\udfe5\u2b1c",belize:"\ud83c\udde7\ud83c\uddff",canada:"\ud83c\udde8\ud83c\udde6",cocos_islands:"\ud83c\udde8\ud83c\udde8",congo_kinshasa:"\ud83c\udde8\ud83c\udde9",central_african_republic:"\ud83c\udde8\ud83c\uddeb",congo_brazzaville:"\ud83c\udde8\ud83c\uddec",switzerland:"\ud83c\udde8\ud83c\udded",cote_divoire:"\ud83c\udde8\ud83c\uddee",cook_islands:"\ud83c\udde8\ud83c\uddf0",chile:"\ud83c\udde8\ud83c\uddf1",cameroon:"\ud83c\udde8\ud83c\uddf2",cn:"\ud83c\udde8\ud83c\uddf3",colombia:"\ud83c\udde8\ud83c\uddf4",clipperton_island:"\ud83c\udde8\ud83c\uddf5",costa_rica:"\ud83c\udde8\ud83c\uddf7",cuba:"\ud83c\udde8\ud83c\uddfa",cape_verde:"\ud83c\udde8\ud83c\uddfb",curacao:"\ud83c\udde8\ud83c\uddfc",christmas_island:"\ud83c\udde8\ud83c\uddfd",cyprus:"\ud83c\udde8\ud83c\uddfe",czech_republic:"\ud83c\udde8\ud83c\uddff",de:"\ud83c\udde9\ud83c\uddea",diego_garcia:"\ud83c\udde9\ud83c\uddec",djibouti:"\ud83c\udde9\ud83c\uddef",denmark:"\ud83c\udde9\ud83c\uddf0",dominica:"\ud83c\udde9\ud83c\uddf2",dominican_republic:"\ud83c\udde9\ud83c\uddf4",algeria:"\ud83c\udde9\ud83c\uddff",ceuta_melilla:"\ud83c\uddea\ud83c\udde6",ecuador:"\ud83c\uddea\ud83c\udde8",estonia:"\ud83c\uddea\ud83c\uddea",egypt:"\ud83c\uddea\ud83c\uddec",western_sahara:"\ud83c\uddea\ud83c\udded",eritrea:"\ud83c\uddea\ud83c\uddf7",es:"\ud83c\uddea\ud83c\uddf8",ethiopia:"\ud83c\uddea\ud83c\uddf9",eu:"\ud83c\uddea\ud83c\uddfa",european_union:"\ud83c\uddea\ud83c\uddfa",finland:"\ud83c\uddeb\ud83c\uddee",fiji:"\ud83c\uddeb\ud83c\uddef",falkland_islands:"\ud83c\uddeb\ud83c\uddf0",micronesia:"\ud83c\uddeb\ud83c\uddf2",faroe_islands:"\ud83c\uddeb\ud83c\uddf4",fr:"\ud83c\uddeb\ud83c\uddf7",gabon:"\ud83c\uddec\ud83c\udde6",gb:"\ud83c\uddec\ud83c\udde7",uk:"\ud83c\uddec\ud83c\udde7",grenada:"\ud83c\uddec\ud83c\udde9",georgia:"\ud83c\uddec\ud83c\uddea",french_guiana:"\ud83c\uddec\ud83c\uddeb",guernsey:"\ud83c\uddec\ud83c\uddec",ghana:"\ud83c\uddec\ud83c\udded",gibraltar:"\ud83c\uddec\ud83c\uddee",greenland:"\ud83c\uddec\ud83c\uddf1",gambia:"\ud83c\uddec\ud83c\uddf2",guinea:"\ud83c\uddec\ud83c\uddf3",guadeloupe:"\ud83c\uddec\ud83c\uddf5",equatorial_guinea:"\ud83c\uddec\ud83c\uddf6",greece:"\ud83c\uddec\ud83c\uddf7",south_georgia_south_sandwich_islands:"\ud83c\uddec\ud83c\uddf8",guatemala:"\ud83c\uddec\ud83c\uddf9",guam:"\ud83c\uddec\ud83c\uddfa",guinea_bissau:"\ud83c\uddec\ud83c\uddfc",guyana:"\ud83c\uddec\ud83c\uddfe",hong_kong:"\ud83c\udded\ud83c\uddf0",heard_mcdonald_islands:"\ud83c\udded\ud83c\uddf2",honduras:"\ud83c\udded\ud83c\uddf3",croatia:"\ud83c\udded\ud83c\uddf7",haiti:"\ud83c\udded\ud83c\uddf9",hungary:"\ud83c\udded\ud83c\uddfa",canary_islands:"\ud83c\uddee\ud83c\udde8",indonesia:"\ud83c\uddee\ud83c\udde9",ireland:"\ud83c\uddee\ud83c\uddea",israel:"\ud83c\uddee\ud83c\uddf1",isle_of_man:"\ud83c\uddee\ud83c\uddf2",india:"\ud83c\uddee\ud83c\uddf3",british_indian_ocean_territory:"\ud83c\uddee\ud83c\uddf4",iraq:"\ud83c\uddee\ud83c\uddf6",iran:"\ud83c\uddee\ud83c\uddf7",iceland:"\ud83c\uddee\ud83c\uddf8",it:"\ud83c\uddee\ud83c\uddf9",jersey:"\ud83c\uddef\ud83c\uddea",jamaica:"\ud83c\uddef\ud83c\uddf2",jordan:"\ud83c\uddef\ud83c\uddf4",jp:"\ud83c\uddef\ud83c\uddf5",kenya:"\ud83c\uddf0\ud83c\uddea",kyrgyzstan:"\ud83c\uddf0\ud83c\uddec",cambodia:"\ud83c\uddf0\ud83c\udded",kiribati:"\ud83c\uddf0\ud83c\uddee",comoros:"\ud83c\uddf0\ud83c\uddf2",st_kitts_nevis:"\ud83c\uddf0\ud83c\uddf3",north_korea:"\ud83c\uddf0\ud83c\uddf5",kr:"\ud83c\uddf0\ud83c\uddf7",kuwait:"\ud83c\uddf0\ud83c\uddfc",cayman_islands:"\ud83c\uddf0\ud83c\uddfe",kazakhstan:"\ud83c\uddf0\ud83c\uddff",laos:"\ud83c\uddf1\ud83c\udde6",lebanon:"\ud83c\uddf1\ud83c\udde7",st_lucia:"\ud83c\uddf1\ud83c\udde8",liechtenstein:"\ud83c\uddf1\ud83c\uddee",sri_lanka:"\ud83c\uddf1\ud83c\uddf0",liberia:"\ud83c\uddf1\ud83c\uddf7",lesotho:"\ud83c\uddf1\ud83c\uddf8",lithuania:"\ud83c\uddf1\ud83c\uddf9",luxembourg:"\ud83c\uddf1\ud83c\uddfa",latvia:"\ud83c\uddf1\ud83c\uddfb",libya:"\ud83c\uddf1\ud83c\uddfe",morocco:"\ud83c\uddf2\ud83c\udde6",monaco:"\ud83c\uddf2\ud83c\udde8",moldova:"\ud83c\uddf2\ud83c\udde9",montenegro:"\ud83c\uddf2\ud83c\uddea",st_martin:"\ud83c\uddf2\ud83c\uddeb",madagascar:"\ud83c\uddf2\ud83c\uddec",marshall_islands:"\ud83c\uddf2\ud83c\udded",macedonia:"\ud83c\uddf2\ud83c\uddf0",mali:"\ud83c\uddf2\ud83c\uddf1",myanmar:"\ud83c\uddf2\ud83c\uddf2",mongolia:"\ud83c\uddf2\ud83c\uddf3",macau:"\ud83c\uddf2\ud83c\uddf4",northern_mariana_islands:"\ud83c\uddf2\ud83c\uddf5",martinique:"\ud83c\uddf2\ud83c\uddf6",mauritania:"\ud83c\uddf2\ud83c\uddf7",montserrat:"\ud83c\uddf2\ud83c\uddf8",malta:"\ud83c\uddf2\ud83c\uddf9",mauritius:"\ud83c\uddf2\ud83c\uddfa",maldives:"\ud83c\uddf2\ud83c\uddfb",malawi:"\ud83c\uddf2\ud83c\uddfc",mexico:"\ud83c\uddf2\ud83c\uddfd",malaysia:"\ud83c\uddf2\ud83c\uddfe",mozambique:"\ud83c\uddf2\ud83c\uddff",namibia:"\ud83c\uddf3\ud83c\udde6",new_caledonia:"\ud83c\uddf3\ud83c\udde8",niger:"\ud83c\uddf3\ud83c\uddea",norfolk_island:"\ud83c\uddf3\ud83c\uddeb",nigeria:"\ud83c\uddf3\ud83c\uddec",nicaragua:"\ud83c\uddf3\ud83c\uddee",netherlands:"\ud83c\uddf3\ud83c\uddf1",norway:"\ud83c\uddf3\ud83c\uddf4",nepal:"\ud83c\uddf3\ud83c\uddf5",nauru:"\ud83c\uddf3\ud83c\uddf7",niue:"\ud83c\uddf3\ud83c\uddfa",new_zealand:"\ud83c\uddf3\ud83c\uddff",oman:"\ud83c\uddf4\ud83c\uddf2",panama:"\ud83c\uddf5\ud83c\udde6",peru:"\ud83c\uddf5\ud83c\uddea",french_polynesia:"\ud83c\uddf5\ud83c\uddeb",papua_new_guinea:"\ud83c\uddf5\ud83c\uddec",philippines:"\ud83c\uddf5\ud83c\udded",pakistan:"\ud83c\uddf5\ud83c\uddf0",poland:"\ud83c\uddf5\ud83c\uddf1",st_pierre_miquelon:"\ud83c\uddf5\ud83c\uddf2",pitcairn_islands:"\ud83c\uddf5\ud83c\uddf3",puerto_rico:"\ud83c\uddf5\ud83c\uddf7",palestinian_territories:"\ud83c\uddf5\ud83c\uddf8",portugal:"\ud83c\uddf5\ud83c\uddf9",palau:"\ud83c\uddf5\ud83c\uddfc",paraguay:"\ud83c\uddf5\ud83c\uddfe",qatar:"\ud83c\uddf6\ud83c\udde6",reunion:"\ud83c\uddf7\ud83c\uddea",romania:"\ud83c\uddf7\ud83c\uddf4",serbia:"\ud83c\uddf7\ud83c\uddf8",ru:"\ud83c\uddf7\ud83c\uddfa",rwanda:"\ud83c\uddf7\ud83c\uddfc",saudi_arabia:"\ud83c\uddf8\ud83c\udde6",solomon_islands:"\ud83c\uddf8\ud83c\udde7",seychelles:"\ud83c\uddf8\ud83c\udde8",sudan:"\ud83c\uddf8\ud83c\udde9",sweden:"\ud83c\uddf8\ud83c\uddea",singapore:"\ud83c\uddf8\ud83c\uddec",st_helena:"\ud83c\uddf8\ud83c\udded",slovenia:"\ud83c\uddf8\ud83c\uddee",svalbard_jan_mayen:"\ud83c\uddf8\ud83c\uddef",slovakia:"\ud83c\uddf8\ud83c\uddf0",sierra_leone:"\ud83c\uddf8\ud83c\uddf1",san_marino:"\ud83c\uddf8\ud83c\uddf2",senegal:"\ud83c\uddf8\ud83c\uddf3",somalia:"\ud83c\uddf8\ud83c\uddf4",suriname:"\ud83c\uddf8\ud83c\uddf7",south_sudan:"\ud83c\uddf8\ud83c\uddf8",sao_tome_principe:"\ud83c\uddf8\ud83c\uddf9",el_salvador:"\ud83c\uddf8\ud83c\uddfb",sint_maarten:"\ud83c\uddf8\ud83c\uddfd",syria:"\ud83c\uddf8\ud83c\uddfe",swaziland:"\ud83c\uddf8\ud83c\uddff",tristan_da_cunha:"\ud83c\uddf9\ud83c\udde6",turks_caicos_islands:"\ud83c\uddf9\ud83c\udde8",chad:"\ud83c\uddf9\ud83c\udde9",french_southern_territories:"\ud83c\uddf9\ud83c\uddeb",togo:"\ud83c\uddf9\ud83c\uddec",thailand:"\ud83c\uddf9\ud83c\udded",tajikistan:"\ud83c\uddf9\ud83c\uddef",tokelau:"\ud83c\uddf9\ud83c\uddf0",timor_leste:"\ud83c\uddf9\ud83c\uddf1",turkmenistan:"\ud83c\uddf9\ud83c\uddf2",tunisia:"\ud83c\uddf9\ud83c\uddf3",tonga:"\ud83c\uddf9\ud83c\uddf4",tr:"\ud83c\uddf9\ud83c\uddf7",trinidad_tobago:"\ud83c\uddf9\ud83c\uddf9",tuvalu:"\ud83c\uddf9\ud83c\uddfb",taiwan:"\ud83c\uddf9\ud83c\uddfc",tanzania:"\ud83c\uddf9\ud83c\uddff",ukraine:"\ud83c\uddfa\ud83c\udde6",uganda:"\ud83c\uddfa\ud83c\uddec",us_outlying_islands:"\ud83c\uddfa\ud83c\uddf2",united_nations:"\ud83c\uddfa\ud83c\uddf3",us:"\ud83c\uddfa\ud83c\uddf8",uruguay:"\ud83c\uddfa\ud83c\uddfe",uzbekistan:"\ud83c\uddfa\ud83c\uddff",vatican_city:"\ud83c\uddfb\ud83c\udde6",st_vincent_grenadines:"\ud83c\uddfb\ud83c\udde8",venezuela:"\ud83c\uddfb\ud83c\uddea",british_virgin_islands:"\ud83c\uddfb\ud83c\uddec",us_virgin_islands:"\ud83c\uddfb\ud83c\uddee",vietnam:"\ud83c\uddfb\ud83c\uddf3",vanuatu:"\ud83c\uddfb\ud83c\uddfa",wallis_futuna:"\ud83c\uddfc\ud83c\uddeb",samoa:"\ud83c\uddfc\ud83c\uddf8",kosovo:"\ud83c\uddfd\ud83c\uddf0",yemen:"\ud83c\uddfe\ud83c\uddea",mayotte:"\ud83c\uddfe\ud83c\uddf9",south_africa:"\ud83c\uddff\ud83c\udde6",zambia:"\ud83c\uddff\ud83c\uddf2",zimbabwe:"\ud83c\uddff\ud83c\uddfc",england:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",scotland:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",wales:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f"},renderer:e=>e.emoji}));const jd=()=>{const[e,n]=(0,t.useState)(!1);return mt(pt.FK,{children:mt(Pe,{children:mt(kr,{children:mt(pt.FK,{children:[mt(Tr,{onLoaded:n}),e&&mt(ke,{children:mt(be,{path:"/",element:mt(zd,{}),children:mt(be,{path:"/",element:mt(pu,{})})})})]})})})})},Fd=e=>{e&&n.e(685).then(n.bind(n,685)).then((t=>{let{getCLS:n,getFID:r,getFCP:o,getLCP:a,getTTFB:i}=t;n(e),r(e),o(e),a(e),i(e)}))},Hd=document.getElementById("root");Hd&&(0,t.render)(mt(jd,{}),Hd),Fd()})()})(); \ No newline at end of file diff --git a/app/vlselect/vmui/static/js/main.867f457f.js b/app/vlselect/vmui/static/js/main.867f457f.js new file mode 100644 index 0000000000..4be364b41f --- /dev/null +++ b/app/vlselect/vmui/static/js/main.867f457f.js @@ -0,0 +1,2 @@ +/*! For license information please see main.867f457f.js.LICENSE.txt */ +(()=>{var e={61:(e,t,n)=>{"use strict";var r=n(375),o=n(629),a=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&a(e,".prototype.")>-1?o(n):n}},629:(e,t,n)=>{"use strict";var r=n(989),o=n(375),a=n(259),i=n(277),l=o("%Function.prototype.apply%"),s=o("%Function.prototype.call%"),c=o("%Reflect.apply%",!0)||r.call(s,l),u=n(709),d=o("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new i("a function is required");var t=c(r,s,arguments);return a(t,1+d(0,e.length-(arguments.length-1)),!0)};var h=function(){return c(r,l,arguments)};u?u(e.exports,"apply",{value:h}):e.exports.apply=h},159:function(e){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",l="day",s="week",c="month",u="quarter",d="year",h="date",p="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,_={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},g=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},v={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(o,2,"0")},m:function e(t,n){if(t.date()1)return e(i[0])}else{var l=t.name;b[l]=t,o=l}return!r&&o&&(y=o),o||!r&&y},S=function(e,t){if(k(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},A=v;A.l=x,A.i=k,A.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function _(e){this.$L=x(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var g=_.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(A.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(f);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return A},g.isValid=function(){return!(this.$d.toString()===p)},g.isSame=function(e,t){var n=S(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return S(e)=0&&(a[d]=parseInt(u,10))}var h=a[3],p=24===h?0:h,f=a[0]+"-"+a[1]+"-"+a[2]+" "+p+":"+a[4]+":"+a[5]+":000",m=+t;return(o.utc(f).valueOf()-(m-=m%1e3))/6e4},s=r.prototype;s.tz=function(e,t){void 0===e&&(e=a);var n,r=this.utcOffset(),i=this.toDate(),l=i.toLocaleString("en-US",{timeZone:e}),s=Math.round((i-new Date(l))/1e3/60),c=15*-Math.round(i.getTimezoneOffset()/15)-s;if(Number(c)){if(n=o(l,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(c,!0),t){var u=n.utcOffset();n=n.add(r-u,"minute")}}else n=this.utcOffset(0,t);return n.$x.$timezone=e,n},s.offsetName=function(e){var t=this.$x.$timezone||o.tz.guess(),n=i(this.valueOf(),t,{timeZoneName:e}).find((function(e){return"timezonename"===e.type.toLowerCase()}));return n&&n.value};var c=s.startOf;s.startOf=function(e,t){if(!this.$x||!this.$x.$timezone)return c.call(this,e,t);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return c.call(n,e,t).tz(this.$x.$timezone,!0)},o.tz=function(e,t,n){var r=n&&t,i=n||t||a,s=l(+o(),i);if("string"!=typeof e)return o(e).tz(i);var c=function(e,t,n){var r=e-60*t*1e3,o=l(r,n);if(t===o)return[r,t];var a=l(r-=60*(o-t)*1e3,n);return o===a?[r,o]:[e-60*Math.min(o,a)*1e3,Math.max(o,a)]}(o.utc(e,r).valueOf(),s,i),u=c[0],d=c[1],h=o(u).utcOffset(d);return h.$x.$timezone=i,h},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(e){a=e}}}()},220:function(e){e.exports=function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,a){var i=o.prototype;a.utc=function(e){return new o({date:e,utc:!0,args:arguments})},i.utc=function(t){var n=a(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},i.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var l=i.parse;i.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),l.call(this,e)};var s=i.init;i.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else s.call(this)};var c=i.utcOffset;i.utcOffset=function(r,o){var a=this.$utils().u;if(a(r))return this.$u?0:a(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&(r=function(e){void 0===e&&(e="");var r=e.match(t);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],a=o[0],i=60*+o[1]+ +o[2];return 0===i?0:"+"===a?i:-i}(r),null===r))return this;var i=Math.abs(r)<=16?60*r:r,l=this;if(o)return l.$offset=i,l.$u=0===r,l;if(0!==r){var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(l=this.local().add(i+s,e)).$offset=i,l.$x.$localOffset=s}else l=this.utc();return l};var u=i.format;i.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,t)},i.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var d=i.toDate;i.toDate=function(e){return"s"===e&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():d.call(this)};var h=i.diff;i.diff=function(e,t,n){if(e&&this.$u===e.$u)return h.call(this,e,t,n);var r=this.local(),o=a(e).local();return h.call(r,o,t,n)}}}()},411:(e,t,n)=>{"use strict";var r=n(709),o=n(430),a=n(277),i=n(553);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new a("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new a("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new a("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new a("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new a("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new a("`loose`, if provided, must be a boolean");var l=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(r)r(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===l&&d?d.enumerable:!l,value:n,writable:null===s&&d?d.writable:!s});else{if(!u&&(l||s||c))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},709:(e,t,n)=>{"use strict";var r=n(375)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(o){r=!1}e.exports=r},123:e=>{"use strict";e.exports=EvalError},953:e=>{"use strict";e.exports=Error},780:e=>{"use strict";e.exports=RangeError},768:e=>{"use strict";e.exports=ReferenceError},430:e=>{"use strict";e.exports=SyntaxError},277:e=>{"use strict";e.exports=TypeError},619:e=>{"use strict";e.exports=URIError},307:e=>{"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r{"use strict";var r=n(307);e.exports=Function.prototype.bind||r},375:(e,t,n)=>{"use strict";var r,o=n(953),a=n(123),i=n(780),l=n(768),s=n(430),c=n(277),u=n(619),d=Function,h=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(t){}},p=Object.getOwnPropertyDescriptor;if(p)try{p({},"")}catch(L){p=null}var f=function(){throw new c},m=p?function(){try{return f}catch(e){try{return p(arguments,"callee").get}catch(t){return f}}}():f,_=n(757)(),g=n(442)(),v=Object.getPrototypeOf||(g?function(e){return e.__proto__}:null),y={},b="undefined"!==typeof Uint8Array&&v?v(Uint8Array):r,w={__proto__:null,"%AggregateError%":"undefined"===typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":_&&v?v([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":y,"%AsyncGenerator%":y,"%AsyncGeneratorFunction%":y,"%AsyncIteratorPrototype%":y,"%Atomics%":"undefined"===typeof Atomics?r:Atomics,"%BigInt%":"undefined"===typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"===typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"===typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"===typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":a,"%Float32Array%":"undefined"===typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"===typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"===typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":y,"%Int8Array%":"undefined"===typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"===typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"===typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":_&&v?v(v([][Symbol.iterator]())):r,"%JSON%":"object"===typeof JSON?JSON:r,"%Map%":"undefined"===typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&_&&v?v((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?r:Promise,"%Proxy%":"undefined"===typeof Proxy?r:Proxy,"%RangeError%":i,"%ReferenceError%":l,"%Reflect%":"undefined"===typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"===typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&_&&v?v((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":_&&v?v(""[Symbol.iterator]()):r,"%Symbol%":_?Symbol:r,"%SyntaxError%":s,"%ThrowTypeError%":m,"%TypedArray%":b,"%TypeError%":c,"%Uint8Array%":"undefined"===typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"===typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"===typeof Uint32Array?r:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"===typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"===typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"===typeof WeakSet?r:WeakSet};if(v)try{null.error}catch(L){var k=v(v(L));w["%Error.prototype%"]=k}var x=function e(t){var n;if("%AsyncFunction%"===t)n=h("async function () {}");else if("%GeneratorFunction%"===t)n=h("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=h("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&v&&(n=v(o.prototype))}return w[t]=n,n},S={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},A=n(989),E=n(155),C=A.call(Function.call,Array.prototype.concat),M=A.call(Function.apply,Array.prototype.splice),N=A.call(Function.call,String.prototype.replace),T=A.call(Function.call,String.prototype.slice),P=A.call(Function.call,RegExp.prototype.exec),D=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,O=/\\(\\)?/g,R=function(e,t){var n,r=e;if(E(S,r)&&(r="%"+(n=S[r])[0]+"%"),E(w,r)){var o=w[r];if(o===y&&(o=x(r)),"undefined"===typeof o&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===P(/^%?[^%]*%?$/,e))throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=T(e,0,1),n=T(e,-1);if("%"===t&&"%"!==n)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var r=[];return N(e,D,(function(e,t,n,o){r[r.length]=n?N(o,O,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",o=R("%"+r+"%",t),a=o.name,i=o.value,l=!1,u=o.alias;u&&(r=u[0],M(n,C([0,1],u)));for(var d=1,h=!0;d=n.length){var g=p(i,f);i=(h=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:i[f]}else h=E(i,f),i=i[f];h&&!l&&(w[a]=i)}}return i}},553:(e,t,n)=>{"use strict";var r=n(375)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(o){r=null}e.exports=r},734:(e,t,n)=>{"use strict";var r=n(709),o=function(){return!!r};o.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},442:e=>{"use strict";var t={__proto__:null,foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof n)}},757:(e,t,n)=>{"use strict";var r="undefined"!==typeof Symbol&&Symbol,o=n(175);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&o())))}},175:e=>{"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},155:(e,t,n)=>{"use strict";var r=Function.prototype.call,o=Object.prototype.hasOwnProperty,a=n(989);e.exports=a.call(r,o)},267:(e,t,n)=>{var r=NaN,o="[object Symbol]",a=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt,u="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,d="object"==typeof self&&self&&self.Object===Object&&self,h=u||d||Function("return this")(),p=Object.prototype.toString,f=Math.max,m=Math.min,_=function(){return h.Date.now()};function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function v(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&p.call(e)==o}(e))return r;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(a,"");var n=l.test(e);return n||s.test(e)?c(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,o,a,i,l,s,c=0,u=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var n=r,a=o;return r=o=void 0,c=t,i=e.apply(a,n)}function y(e){var n=e-s;return void 0===s||n>=t||n<0||d&&e-c>=a}function b(){var e=_();if(y(e))return w(e);l=setTimeout(b,function(e){var n=t-(e-s);return d?m(n,a-(e-c)):n}(e))}function w(e){return l=void 0,h&&r?p(e):(r=o=void 0,i)}function k(){var e=_(),n=y(e);if(r=arguments,o=this,s=e,n){if(void 0===l)return function(e){return c=e,l=setTimeout(b,t),u?p(e):i}(s);if(d)return l=setTimeout(b,t),p(s)}return void 0===l&&(l=setTimeout(b,t)),i}return t=v(t)||0,g(n)&&(u=!!n.leading,a=(d="maxWait"in n)?f(v(n.maxWait)||0,t):a,h="trailing"in n?!!n.trailing:h),k.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=s=o=l=void 0},k.flush=function(){return void 0===l?i:w(_())},k}},424:(e,t,n)=>{var r="__lodash_hash_undefined__",o=1/0,a="[object Function]",i="[object GeneratorFunction]",l="[object Symbol]",s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,u=/^\./,d=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,h=/\\(\\)?/g,p=/^\[object .+?Constructor\]$/,f="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,m="object"==typeof self&&self&&self.Object===Object&&self,_=f||m||Function("return this")();var g=Array.prototype,v=Function.prototype,y=Object.prototype,b=_["__core-js_shared__"],w=function(){var e=/[^.]+$/.exec(b&&b.keys&&b.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),k=v.toString,x=y.hasOwnProperty,S=y.toString,A=RegExp("^"+k.call(x).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),E=_.Symbol,C=g.splice,M=$(_,"Map"),N=$(Object,"create"),T=E?E.prototype:void 0,P=T?T.toString:void 0;function D(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1},O.prototype.set=function(e,t){var n=this.__data__,r=L(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},R.prototype.clear=function(){this.__data__={hash:new D,map:new(M||O),string:new D}},R.prototype.delete=function(e){return j(this,e).delete(e)},R.prototype.get=function(e){return j(this,e).get(e)},R.prototype.has=function(e){return j(this,e).has(e)},R.prototype.set=function(e,t){return j(this,e).set(e,t),this};var F=V((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(Y(e))return P?P.call(e):"";var t=e+"";return"0"==t&&1/e==-o?"-0":t}(t);var n=[];return u.test(e)&&n.push(""),e.replace(d,(function(e,t,r,o){n.push(r?o.replace(h,"$1"):t||e)})),n}));function H(e){if("string"==typeof e||Y(e))return e;var t=e+"";return"0"==t&&1/e==-o?"-0":t}function V(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i),i};return n.cache=new(V.Cache||R),n}V.Cache=R;var B=Array.isArray;function U(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Y(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&S.call(e)==l}e.exports=function(e,t,n){var r=null==e?void 0:I(e,t);return void 0===r?n:r}},141:(e,t,n)=>{var r="function"===typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=r&&o&&"function"===typeof o.get?o.get:null,i=r&&Map.prototype.forEach,l="function"===typeof Set&&Set.prototype,s=Object.getOwnPropertyDescriptor&&l?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=l&&s&&"function"===typeof s.get?s.get:null,u=l&&Set.prototype.forEach,d="function"===typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h="function"===typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"===typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,f=Boolean.prototype.valueOf,m=Object.prototype.toString,_=Function.prototype.toString,g=String.prototype.match,v=String.prototype.slice,y=String.prototype.replace,b=String.prototype.toUpperCase,w=String.prototype.toLowerCase,k=RegExp.prototype.test,x=Array.prototype.concat,S=Array.prototype.join,A=Array.prototype.slice,E=Math.floor,C="function"===typeof BigInt?BigInt.prototype.valueOf:null,M=Object.getOwnPropertySymbols,N="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"===typeof Symbol&&"object"===typeof Symbol.iterator,P="function"===typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,D=Object.prototype.propertyIsEnumerable,O=("function"===typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function R(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||k.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"===typeof e){var r=e<0?-E(-e):E(e);if(r!==e){var o=String(r),a=v.call(t,o.length+1);return y.call(o,n,"$&_")+"."+y.call(y.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return y.call(t,n,"$&_")}var L=n(634),I=L.custom,z=V(I)?I:null;function j(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function $(e){return y.call(String(e),/"/g,""")}function F(e){return"[object Array]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}function H(e){return"[object RegExp]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}function V(e){if(T)return e&&"object"===typeof e&&e instanceof Symbol;if("symbol"===typeof e)return!0;if(!e||"object"!==typeof e||!N)return!1;try{return N.call(e),!0}catch(t){}return!1}e.exports=function e(t,r,o,l){var s=r||{};if(U(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(U(s,"maxStringLength")&&("number"===typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var m=!U(s,"customInspect")||s.customInspect;if("boolean"!==typeof m&&"symbol"!==m)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(U(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(U(s,"numericSeparator")&&"boolean"!==typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var b=s.numericSeparator;if("undefined"===typeof t)return"undefined";if(null===t)return"null";if("boolean"===typeof t)return t?"true":"false";if("string"===typeof t)return q(t,s);if("number"===typeof t){if(0===t)return 1/0/t>0?"0":"-0";var k=String(t);return b?R(t,k):k}if("bigint"===typeof t){var E=String(t)+"n";return b?R(t,E):E}var M="undefined"===typeof s.depth?5:s.depth;if("undefined"===typeof o&&(o=0),o>=M&&M>0&&"object"===typeof t)return F(t)?"[Array]":"[Object]";var I=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"===typeof e.indent&&e.indent>0))return null;n=S.call(Array(e.indent+1)," ")}return{base:n,prev:S.call(Array(t+1),n)}}(s,o);if("undefined"===typeof l)l=[];else if(W(l,t)>=0)return"[Circular]";function B(t,n,r){if(n&&(l=A.call(l)).push(n),r){var a={depth:s.depth};return U(s,"quoteStyle")&&(a.quoteStyle=s.quoteStyle),e(t,a,o+1,l)}return e(t,s,o+1,l)}if("function"===typeof t&&!H(t)){var Z=function(e){if(e.name)return e.name;var t=g.call(_.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),ee=X(t,B);return"[Function"+(Z?": "+Z:" (anonymous)")+"]"+(ee.length>0?" { "+S.call(ee,", ")+" }":"")}if(V(t)){var te=T?y.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):N.call(t);return"object"!==typeof t||T?te:K(te)}if(function(e){if(!e||"object"!==typeof e)return!1;if("undefined"!==typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"===typeof e.nodeName&&"function"===typeof e.getAttribute}(t)){for(var ne="<"+w.call(String(t.nodeName)),re=t.attributes||[],oe=0;oe"}if(F(t)){if(0===t.length)return"[]";var ae=X(t,B);return I&&!function(e){for(var t=0;t=0)return!1;return!0}(ae)?"["+J(ae,I)+"]":"[ "+S.call(ae,", ")+" ]"}if(function(e){return"[object Error]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t)){var ie=X(t,B);return"cause"in Error.prototype||!("cause"in t)||D.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+S.call(ie,", ")+" }":"{ ["+String(t)+"] "+S.call(x.call("[cause]: "+B(t.cause),ie),", ")+" }"}if("object"===typeof t&&m){if(z&&"function"===typeof t[z]&&L)return L(t,{depth:M-o});if("symbol"!==m&&"function"===typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!==typeof e)return!1;try{a.call(e);try{c.call(e)}catch(ne){return!0}return e instanceof Map}catch(t){}return!1}(t)){var le=[];return i&&i.call(t,(function(e,n){le.push(B(n,t,!0)+" => "+B(e,t))})),Q("Map",a.call(t),le,I)}if(function(e){if(!c||!e||"object"!==typeof e)return!1;try{c.call(e);try{a.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var se=[];return u&&u.call(t,(function(e){se.push(B(e,t))})),Q("Set",c.call(t),se,I)}if(function(e){if(!d||!e||"object"!==typeof e)return!1;try{d.call(e,d);try{h.call(e,h)}catch(ne){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return G("WeakMap");if(function(e){if(!h||!e||"object"!==typeof e)return!1;try{h.call(e,h);try{d.call(e,d)}catch(ne){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return G("WeakSet");if(function(e){if(!p||!e||"object"!==typeof e)return!1;try{return p.call(e),!0}catch(t){}return!1}(t))return G("WeakRef");if(function(e){return"[object Number]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t))return K(B(Number(t)));if(function(e){if(!e||"object"!==typeof e||!C)return!1;try{return C.call(e),!0}catch(t){}return!1}(t))return K(B(C.call(t)));if(function(e){return"[object Boolean]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t))return K(f.call(t));if(function(e){return"[object String]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t))return K(B(String(t)));if("undefined"!==typeof window&&t===window)return"{ [object Window] }";if("undefined"!==typeof globalThis&&t===globalThis||"undefined"!==typeof n.g&&t===n.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t)&&!H(t)){var ce=X(t,B),ue=O?O(t)===Object.prototype:t instanceof Object||t.constructor===Object,de=t instanceof Object?"":"null prototype",he=!ue&&P&&Object(t)===t&&P in t?v.call(Y(t),8,-1):de?"Object":"",pe=(ue||"function"!==typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(he||de?"["+S.call(x.call([],he||[],de||[]),": ")+"] ":"");return 0===ce.length?pe+"{}":I?pe+"{"+J(ce,I)+"}":pe+"{ "+S.call(ce,", ")+" }"}return String(t)};var B=Object.prototype.hasOwnProperty||function(e){return e in this};function U(e,t){return B.call(e,t)}function Y(e){return m.call(e)}function W(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return q(v.call(e,0,t.maxStringLength),t)+r}return j(y.call(y.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Z),"single",t)}function Z(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+b.call(t.toString(16))}function K(e){return"Object("+e+")"}function G(e){return e+" { ? }"}function Q(e,t,n,r){return e+" ("+t+") {"+(r?J(n,r):S.call(n,", "))+"}"}function J(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+S.call(e,","+n)+"\n"+t.prev}function X(e,t){var n=F(e),r=[];if(n){r.length=e.length;for(var o=0;o{"use strict";n.r(t),n.d(t,{Children:()=>Y,Component:()=>l.uA,Fragment:()=>l.FK,PureComponent:()=>$,StrictMode:()=>De,Suspense:()=>G,SuspenseList:()=>X,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>we,cloneElement:()=>Ce,createContext:()=>l.q6,createElement:()=>l.n,createFactory:()=>xe,createPortal:()=>re,createRef:()=>l._3,default:()=>Fe,findDOMNode:()=>Ne,flushSync:()=>Pe,forwardRef:()=>B,hydrate:()=>de,isElement:()=>ze,isFragment:()=>Ae,isMemo:()=>Ee,isValidElement:()=>Se,lazy:()=>J,memo:()=>F,render:()=>ue,startTransition:()=>Oe,unmountComponentAtNode:()=>Me,unstable_batchedUpdates:()=>Te,useCallback:()=>A,useContext:()=>E,useDebugValue:()=>C,useDeferredValue:()=>Re,useEffect:()=>b,useErrorBoundary:()=>M,useId:()=>N,useImperativeHandle:()=>x,useInsertionEffect:()=>Ie,useLayoutEffect:()=>w,useMemo:()=>S,useReducer:()=>y,useRef:()=>k,useState:()=>v,useSyncExternalStore:()=>je,useTransition:()=>Le,version:()=>ke});var r,o,a,i,l=n(746),s=0,c=[],u=l.fF,d=u.__b,h=u.__r,p=u.diffed,f=u.__c,m=u.unmount,_=u.__;function g(e,t){u.__h&&u.__h(o,e,s||t),s=0;var n=o.__H||(o.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function v(e){return s=1,y(I,e)}function y(e,t,n){var a=g(r++,2);if(a.t=e,!a.__c&&(a.__=[n?n(t):I(void 0,t),function(e){var t=a.__N?a.__N[0]:a.__[0],n=a.t(t,e);t!==n&&(a.__N=[n,a.__[1]],a.__c.setState({}))}],a.__c=o,!o.u)){var i=function(e,t,n){if(!a.__c.__H)return!0;var r=a.__c.__H.__.filter((function(e){return!!e.__c}));if(r.every((function(e){return!e.__N})))return!l||l.call(this,e,t,n);var o=!1;return r.forEach((function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}})),!(!o&&a.__c.props===e)&&(!l||l.call(this,e,t,n))};o.u=!0;var l=o.shouldComponentUpdate,s=o.componentWillUpdate;o.componentWillUpdate=function(e,t,n){if(this.__e){var r=l;l=void 0,i(e,t,n),l=r}s&&s.call(this,e,t,n)},o.shouldComponentUpdate=i}return a.__N||a.__}function b(e,t){var n=g(r++,3);!u.__s&&L(n.__H,t)&&(n.__=e,n.i=t,o.__H.__h.push(n))}function w(e,t){var n=g(r++,4);!u.__s&&L(n.__H,t)&&(n.__=e,n.i=t,o.__h.push(n))}function k(e){return s=5,S((function(){return{current:e}}),[])}function x(e,t,n){s=6,w((function(){return"function"==typeof e?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0}),null==n?n:n.concat(e))}function S(e,t){var n=g(r++,7);return L(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function A(e,t){return s=8,S((function(){return e}),t)}function E(e){var t=o.context[e.__c],n=g(r++,9);return n.c=e,t?(null==n.__&&(n.__=!0,t.sub(o)),t.props.value):e.__}function C(e,t){u.useDebugValue&&u.useDebugValue(t?t(e):e)}function M(e){var t=g(r++,10),n=v();return t.__=e,o.componentDidCatch||(o.componentDidCatch=function(e,r){t.__&&t.__(e,r),n[1](e)}),[n[0],function(){n[1](void 0)}]}function N(){var e=g(r++,11);if(!e.__){for(var t=o.__v;null!==t&&!t.__m&&null!==t.__;)t=t.__;var n=t.__m||(t.__m=[0,0]);e.__="P"+n[0]+"-"+n[1]++}return e.__}function T(){for(var e;e=c.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(O),e.__H.__h.forEach(R),e.__H.__h=[]}catch(r){e.__H.__h=[],u.__e(r,e.__v)}}u.__b=function(e){o=null,d&&d(e)},u.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),_&&_(e,t)},u.__r=function(e){h&&h(e),r=0;var t=(o=e.__c).__H;t&&(a===o?(t.__h=[],o.__h=[],t.__.forEach((function(e){e.__N&&(e.__=e.__N),e.i=e.__N=void 0}))):(t.__h.forEach(O),t.__h.forEach(R),t.__h=[],r=0)),a=o},u.diffed=function(e){p&&p(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==c.push(t)&&i===u.requestAnimationFrame||((i=u.requestAnimationFrame)||D)(T)),t.__H.__.forEach((function(e){e.i&&(e.__H=e.i),e.i=void 0}))),a=o=null},u.__c=function(e,t){t.some((function(e){try{e.__h.forEach(O),e.__h=e.__h.filter((function(e){return!e.__||R(e)}))}catch(o){t.some((function(e){e.__h&&(e.__h=[])})),t=[],u.__e(o,e.__v)}})),f&&f(e,t)},u.unmount=function(e){m&&m(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach((function(e){try{O(e)}catch(e){t=e}})),n.__H=void 0,t&&u.__e(t,n.__v))};var P="function"==typeof requestAnimationFrame;function D(e){var t,n=function(){clearTimeout(r),P&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);P&&(t=requestAnimationFrame(n))}function O(e){var t=o,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),o=t}function R(e){var t=o;e.__c=e.__(),o=t}function L(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function I(e,t){return"function"==typeof t?t(e):t}function z(e,t){for(var n in t)e[n]=t[n];return e}function j(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function $(e,t){this.props=e,this.context=t}function F(e,t){function n(e){var n=this.props.ref,r=n==e.ref;return!r&&n&&(n.call?n(null):n.current=null),t?!t(this.props,e)||!r:j(this.props,e)}function r(t){return this.shouldComponentUpdate=n,(0,l.n)(e,t)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}($.prototype=new l.uA).isPureReactComponent=!0,$.prototype.shouldComponentUpdate=function(e,t){return j(this.props,e)||j(this.state,t)};var H=l.fF.__b;l.fF.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),H&&H(e)};var V="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function B(e){function t(t){var n=z({},t);return delete n.ref,e(n,t.ref||null)}return t.$$typeof=V,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var U=function(e,t){return null==e?null:(0,l.v2)((0,l.v2)(e).map(t))},Y={map:U,forEach:U,count:function(e){return e?(0,l.v2)(e).length:0},only:function(e){var t=(0,l.v2)(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:l.v2},W=l.fF.__e;l.fF.__e=function(e,t,n,r){if(e.then)for(var o,a=t;a=a.__;)if((o=a.__c)&&o.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),o.__c(e,t);W(e,t,n,r)};var q=l.fF.unmount;function Z(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),e.__c.__H=null),null!=(e=z({},e)).__c&&(e.__c.__P===n&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map((function(e){return Z(e,t,n)}))),e}function K(e,t,n){return e&&n&&(e.__v=null,e.__k=e.__k&&e.__k.map((function(e){return K(e,t,n)})),e.__c&&e.__c.__P===t&&(e.__e&&n.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=n)),e}function G(){this.__u=0,this.t=null,this.__b=null}function Q(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function J(e){var t,n,r;function o(o){if(t||(t=e()).then((function(e){n=e.default||e}),(function(e){r=e})),r)throw r;if(!n)throw t;return(0,l.n)(n,o)}return o.displayName="Lazy",o.__f=!0,o}function X(){this.u=null,this.o=null}l.fF.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),q&&q(e)},(G.prototype=new l.uA).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var o=Q(r.__v),a=!1,i=function(){a||(a=!0,n.__R=null,o?o(l):l())};n.__R=i;var l=function(){if(! --r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=K(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(i,i)},G.prototype.componentWillUnmount=function(){this.t=[]},G.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=Z(this.__b,n,r.__O=r.__P)}this.__b=null}var o=t.__a&&(0,l.n)(l.FK,null,e.fallback);return o&&(o.__u&=-33),[(0,l.n)(l.FK,null,t.__a?null:e.children),o]};var ee=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),(0,l.XX)((0,l.n)(te,{context:t.context},e.__v),t.l)}function re(e,t){var n=(0,l.n)(ne,{__v:e,i:t});return n.containerInfo=t,n}(X.prototype=new l.uA).__a=function(e){var t=this,n=Q(t.__v),r=t.o.get(e);return r[0]++,function(o){var a=function(){t.props.revealOrder?(r.push(o),ee(t,e,r)):o()};n?n(a):a()}},X.prototype.render=function(e){this.u=null,this.o=new Map;var t=(0,l.v2)(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},X.prototype.componentDidUpdate=X.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){ee(e,n,t)}))};var oe="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,ae=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,ie=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,le=/[A-Z0-9]/g,se="undefined"!=typeof document,ce=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(e)};function ue(e,t,n){return null==t.__k&&(t.textContent=""),(0,l.XX)(e,t),"function"==typeof n&&n(),e?e.__c:null}function de(e,t,n){return(0,l.Qv)(e,t),"function"==typeof n&&n(),e?e.__c:null}l.uA.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(l.uA.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var he=l.fF.event;function pe(){}function fe(){return this.cancelBubble}function me(){return this.defaultPrevented}l.fF.event=function(e){return he&&(e=he(e)),e.persist=pe,e.isPropagationStopped=fe,e.isDefaultPrevented=me,e.nativeEvent=e};var _e,ge={enumerable:!1,configurable:!0,get:function(){return this.class}},ve=l.fF.vnode;l.fF.vnode=function(e){"string"==typeof e.type&&function(e){var t=e.props,n=e.type,r={},o=-1===n.indexOf("-");for(var a in t){var i=t[a];if(!("value"===a&&"defaultValue"in t&&null==i||se&&"children"===a&&"noscript"===n||"class"===a||"className"===a)){var s=a.toLowerCase();"defaultValue"===a&&"value"in t&&null==t.value?a="value":"download"===a&&!0===i?i="":"translate"===s&&"no"===i?i=!1:"o"===s[0]&&"n"===s[1]?"ondoubleclick"===s?a="ondblclick":"onchange"!==s||"input"!==n&&"textarea"!==n||ce(t.type)?"onfocus"===s?a="onfocusin":"onblur"===s?a="onfocusout":ie.test(a)&&(a=s):s=a="oninput":o&&ae.test(a)?a=a.replace(le,"-$&").toLowerCase():null===i&&(i=void 0),"oninput"===s&&r[a=s]&&(a="oninputCapture"),r[a]=i}}"select"==n&&r.multiple&&Array.isArray(r.value)&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==n&&null!=r.defaultValue&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",ge)):(t.className&&!t.class||t.class&&t.className)&&(r.class=r.className=t.className),e.props=r}(e),e.$$typeof=oe,ve&&ve(e)};var ye=l.fF.__r;l.fF.__r=function(e){ye&&ye(e),_e=e.__c};var be=l.fF.diffed;l.fF.diffed=function(e){be&&be(e);var t=e.props,n=e.__e;null!=n&&"textarea"===e.type&&"value"in t&&t.value!==n.value&&(n.value=null==t.value?"":t.value),_e=null};var we={ReactCurrentDispatcher:{current:{readContext:function(e){return _e.__n[e.__c].props.value},useCallback:A,useContext:E,useDebugValue:C,useDeferredValue:Re,useEffect:b,useId:N,useImperativeHandle:x,useInsertionEffect:Ie,useLayoutEffect:w,useMemo:S,useReducer:y,useRef:k,useState:v,useSyncExternalStore:je,useTransition:Le}}},ke="17.0.2";function xe(e){return l.n.bind(null,e)}function Se(e){return!!e&&e.$$typeof===oe}function Ae(e){return Se(e)&&e.type===l.FK}function Ee(e){return!!e&&!!e.displayName&&("string"==typeof e.displayName||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")}function Ce(e){return Se(e)?l.Ob.apply(null,arguments):e}function Me(e){return!!e.__k&&((0,l.XX)(null,e),!0)}function Ne(e){return e&&(e.base||1===e.nodeType&&e)||null}var Te=function(e,t){return e(t)},Pe=function(e,t){return e(t)},De=l.FK;function Oe(e){e()}function Re(e){return e}function Le(){return[!1,Oe]}var Ie=w,ze=Se;function je(e,t){var n=t(),r=v({h:{__:n,v:t}}),o=r[0].h,a=r[1];return w((function(){o.__=n,o.v=t,$e(o)&&a({h:o})}),[e,n,t]),b((function(){return $e(o)&&a({h:o}),e((function(){$e(o)&&a({h:o})}))}),[e]),n}function $e(e){var t,n,r=e.v,o=e.__;try{var a=r();return!((t=o)===(n=a)&&(0!==t||1/t==1/n)||t!=t&&n!=n)}catch(e){return!0}}var Fe={useState:v,useId:N,useReducer:y,useEffect:b,useLayoutEffect:w,useInsertionEffect:Ie,useTransition:Le,useDeferredValue:Re,useSyncExternalStore:je,startTransition:Oe,useRef:k,useImperativeHandle:x,useMemo:S,useCallback:A,useContext:E,useDebugValue:C,version:"17.0.2",Children:Y,render:ue,hydrate:de,unmountComponentAtNode:Me,createPortal:re,createElement:l.n,createContext:l.q6,createFactory:xe,cloneElement:Ce,createRef:l._3,Fragment:l.FK,isValidElement:Se,isElement:ze,isFragment:Ae,isMemo:Ee,findDOMNode:Ne,Component:l.uA,PureComponent:$,memo:F,forwardRef:B,flushSync:Pe,unstable_batchedUpdates:Te,StrictMode:De,Suspense:G,SuspenseList:X,lazy:J,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:we}},746:(e,t,n)=>{"use strict";n.d(t,{FK:()=>x,Ob:()=>Y,Qv:()=>U,XX:()=>B,_3:()=>k,fF:()=>o,n:()=>b,q6:()=>W,uA:()=>S,v2:()=>D});var r,o,a,i,l,s,c,u,d,h,p,f={},m=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function v(e,t){for(var n in t)e[n]=t[n];return e}function y(e){var t=e.parentNode;t&&t.removeChild(e)}function b(e,t,n){var o,a,i,l={};for(i in t)"key"==i?o=t[i]:"ref"==i?a=t[i]:l[i]=t[i];if(arguments.length>2&&(l.children=arguments.length>3?r.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===l[i]&&(l[i]=e.defaultProps[i]);return w(e,l,o,a,null)}function w(e,t,n,r,i){var l={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==i?++a:i,__i:-1,__u:0};return null==i&&null!=o.vnode&&o.vnode(l),l}function k(){return{current:null}}function x(e){return e.children}function S(e,t){this.props=e,this.context=t}function A(e,t){if(null==t)return e.__?A(e.__,e.__i+1):null;for(var n;tt&&i.sort(c));M.__r=0}function N(e,t,n,r,o,a,i,l,s,c,u){var d,h,p,_,g,v=r&&r.__k||m,y=t.length;for(n.__d=s,T(n,t,v),s=n.__d,d=0;d0?w(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o)?(o.__=e,o.__b=e.__b+1,l=O(o,n,i,u),o.__i=l,a=null,-1!==l&&(u--,(a=n[l])&&(a.__u|=131072)),null==a||null===a.__v?(-1==l&&d--,"function"!=typeof o.type&&(o.__u|=65536)):l!==i&&(l==i-1?d--:l==i+1?d++:l>i?u>s-i?d+=l-i:d--:l(null!=s&&0==(131072&s.__u)?1:0))for(;i>=0||l=0){if((s=t[i])&&0==(131072&s.__u)&&o==s.key&&a===s.type)return i;i--}if(l2&&(s.children=arguments.length>3?r.call(arguments,2):n),w(e.type,s,o||e.key,a||e.ref,null)}function W(e,t){var n={__c:t="__cC"+p++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.componentWillUnmount=function(){n=null},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some((function(e){e.__e=!0,C(e)}))},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n&&n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}r=m.slice,o={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},a=0,S.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),"function"==typeof e&&(e=e(v({},n),this.props)),e&&v(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),C(this))},S.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),C(this))},S.prototype.render=x,i=[],s="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(e,t){return e.__v.__b-t.__v.__b},M.__r=0,u=0,d=I(!1),h=I(!0),p=0},640:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},215:(e,t,n)=>{"use strict";var r=n(518),o=n(968),a=n(640);e.exports={formats:a,parse:o,stringify:r}},968:(e,t,n)=>{"use strict";var r=n(570),o=Object.prototype.hasOwnProperty,a=Array.isArray,i={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:r.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1},l=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},s=function(e,t){return e&&"string"===typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},c=function(e,t,n,r){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,l=n.depth>0&&/(\[[^[\]]*])/.exec(a),c=l?a.slice(0,l.index):a,u=[];if(c){if(!n.plainObjects&&o.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}for(var d=0;n.depth>0&&null!==(l=i.exec(a))&&d=0;--a){var i,l=e[a];if("[]"===l&&n.parseArrays)i=n.allowEmptyArrays&&(""===o||n.strictNullHandling&&null===o)?[]:[].concat(o);else{i=n.plainObjects?Object.create(null):{};var c="["===l.charAt(0)&&"]"===l.charAt(l.length-1)?l.slice(1,-1):l,u=n.decodeDotInKeys?c.replace(/%2E/g,"."):c,d=parseInt(u,10);n.parseArrays||""!==u?!isNaN(d)&&l!==u&&String(d)===u&&d>=0&&n.parseArrays&&d<=n.arrayLimit?(i=[])[d]=o:"__proto__"!==u&&(i[u]=o):i={0:o}}o=i}return o}(u,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if("undefined"!==typeof e.allowEmptyArrays&&"boolean"!==typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if("undefined"!==typeof e.decodeDotInKeys&&"boolean"!==typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&"undefined"!==typeof e.decoder&&"function"!==typeof e.decoder)throw new TypeError("Decoder has to be a function.");if("undefined"!==typeof e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t="undefined"===typeof e.charset?i.charset:e.charset,n="undefined"===typeof e.duplicates?i.duplicates:e.duplicates;if("combine"!==n&&"first"!==n&&"last"!==n)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:"undefined"===typeof e.allowDots?!0===e.decodeDotInKeys||i.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"===typeof e.allowEmptyArrays?!!e.allowEmptyArrays:i.allowEmptyArrays,allowPrototypes:"boolean"===typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"===typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"===typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"===typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"===typeof e.comma?e.comma:i.comma,decodeDotInKeys:"boolean"===typeof e.decodeDotInKeys?e.decodeDotInKeys:i.decodeDotInKeys,decoder:"function"===typeof e.decoder?e.decoder:i.decoder,delimiter:"string"===typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"===typeof e.depth||!1===e.depth?+e.depth:i.depth,duplicates:n,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"===typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"===typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"===typeof e.plainObjects?e.plainObjects:i.plainObjects,strictDepth:"boolean"===typeof e.strictDepth?!!e.strictDepth:i.strictDepth,strictNullHandling:"boolean"===typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var u="string"===typeof e?function(e,t){var n={__proto__:null},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;c=c.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var u,d=t.parameterLimit===1/0?void 0:t.parameterLimit,h=c.split(t.delimiter,d),p=-1,f=t.charset;if(t.charsetSentinel)for(u=0;u-1&&(_=a(_)?[_]:_);var b=o.call(n,m);b&&"combine"===t.duplicates?n[m]=r.combine(n[m],_):b&&"last"!==t.duplicates||(n[m]=_)}return n}(e,n):e,d=n.plainObjects?Object.create(null):{},h=Object.keys(u),p=0;p{"use strict";var r=n(670),o=n(570),a=n(640),i=Object.prototype.hasOwnProperty,l={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},s=Array.isArray,c=Array.prototype.push,u=function(e,t){c.apply(e,s(t)?t:[t])},d=Date.prototype.toISOString,h=a.default,p={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:o.encode,encodeValuesOnly:!1,format:h,formatter:a.formatters[h],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},f={},m=function e(t,n,a,i,l,c,d,h,m,_,g,v,y,b,w,k,x,S){for(var A,E=t,C=S,M=0,N=!1;void 0!==(C=C.get(f))&&!N;){var T=C.get(t);if(M+=1,"undefined"!==typeof T){if(T===M)throw new RangeError("Cyclic object value");N=!0}"undefined"===typeof C.get(f)&&(M=0)}if("function"===typeof _?E=_(n,E):E instanceof Date?E=y(E):"comma"===a&&s(E)&&(E=o.maybeMap(E,(function(e){return e instanceof Date?y(e):e}))),null===E){if(c)return m&&!k?m(n,p.encoder,x,"key",b):n;E=""}if("string"===typeof(A=E)||"number"===typeof A||"boolean"===typeof A||"symbol"===typeof A||"bigint"===typeof A||o.isBuffer(E))return m?[w(k?n:m(n,p.encoder,x,"key",b))+"="+w(m(E,p.encoder,x,"value",b))]:[w(n)+"="+w(String(E))];var P,D=[];if("undefined"===typeof E)return D;if("comma"===a&&s(E))k&&m&&(E=o.maybeMap(E,m)),P=[{value:E.length>0?E.join(",")||null:void 0}];else if(s(_))P=_;else{var O=Object.keys(E);P=g?O.sort(g):O}var R=h?n.replace(/\./g,"%2E"):n,L=i&&s(E)&&1===E.length?R+"[]":R;if(l&&s(E)&&0===E.length)return L+"[]";for(var I=0;I0?b+y:""}},570:(e,t,n)=>{"use strict";var r=n(640),o=Object.prototype.hasOwnProperty,a=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),l=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var r=[],o=0;o=s?l.slice(u,u+s):l,h=[],p=0;p=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||a===r.RFC1738&&(40===f||41===f)?h[h.length]=d.charAt(p):f<128?h[h.length]=i[f]:f<2048?h[h.length]=i[192|f>>6]+i[128|63&f]:f<55296||f>=57344?h[h.length]=i[224|f>>12]+i[128|f>>6&63]+i[128|63&f]:(p+=1,f=65536+((1023&f)<<10|1023&d.charCodeAt(p)),h[h.length]=i[240|f>>18]+i[128|f>>12&63]+i[128|f>>6&63]+i[128|63&f])}c+=h.join("")}return c},isBuffer:function(e){return!(!e||"object"!==typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],r=0;r{e.exports=n(204)},204:(e,t,n)=>{"use strict";var r=function(e){return e&&"object"==typeof e&&"default"in e?e.default:e}(n(609)),o=n(609);function a(){return(a=Object.assign||function(e){for(var t=1;tr.length&&h(e,t.length-1);)t=t.slice(0,t.length-1);return t.length}for(var o=r.length,a=t.length;a>=r.length;a--){var i=t[a];if(!h(e,a)&&p(e,a,i)){o=a+1;break}}return o}function _(e,t){return m(e,t)===e.mask.length}function g(e,t){var n=e.maskChar,r=e.mask,o=e.prefix;if(!n){for((t=v(e,"",t,0)).lengtht.length&&(t+=o.slice(t.length,r)),l.every((function(n){for(;u=n,h(e,c=r)&&u!==o[c];){if(r>=t.length&&(t+=o[r]),l=n,a&&h(e,r)&&l===a)return!0;if(++r>=o.length)return!1}var l,c,u;return!p(e,r,n)&&n!==a||(ro.start?d=(u=function(e,t,n,r){var o=e.mask,a=e.maskChar,i=n.split(""),l=r;return i.every((function(t){for(;i=t,h(e,n=r)&&i!==o[n];)if(++r>=o.length)return!1;var n,i;return(p(e,r,t)||t===a)&&r++,r=a.length?f=a.length:f=i.length&&f{"use strict";var r=n(375),o=n(411),a=n(734)(),i=n(553),l=n(277),s=r("%Math.floor%");e.exports=function(e,t){if("function"!==typeof e)throw new l("`fn` is not a function");if("number"!==typeof t||t<0||t>4294967295||s(t)!==t)throw new l("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],r=!0,c=!0;if("length"in e&&i){var u=i(e,"length");u&&!u.configurable&&(r=!1),u&&!u.writable&&(c=!1)}return(r||c||!n)&&(a?o(e,"length",t,!0,!0):o(e,"length",t)),e}},670:(e,t,n)=>{"use strict";var r=n(375),o=n(61),a=n(141),i=n(277),l=r("%WeakMap%",!0),s=r("%Map%",!0),c=o("WeakMap.prototype.get",!0),u=o("WeakMap.prototype.set",!0),d=o("WeakMap.prototype.has",!0),h=o("Map.prototype.get",!0),p=o("Map.prototype.set",!0),f=o("Map.prototype.has",!0),m=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new i("Side channel does not contain "+a(e))},get:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return c(e,r)}else if(s){if(t)return h(t,r)}else if(n)return function(e,t){var n=m(e,t);return n&&n.value}(n,r)},has:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return d(e,r)}else if(s){if(t)return f(t,r)}else if(n)return function(e,t){return!!m(e,t)}(n,r);return!1},set:function(r,o){l&&r&&("object"===typeof r||"function"===typeof r)?(e||(e=new l),u(e,r,o)):s?(t||(t=new s),p(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=m(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},634:()=>{},738:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".f772060c.chunk.js",n.miniCssF=e=>{},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="vmui:";n.l=(r,o,a,i)=>{if(e[r])e[r].push(o);else{var l,s;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{l.onerror=l.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],l.parentNode&&l.parentNode.removeChild(l),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=h.bind(null,l.onerror),l.onload=h.bind(null,l.onload),s&&document.head.appendChild(l)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="./",(()=>{var e={792:0};n.f.j=(t,r)=>{var o=n.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var a=new Promise(((n,r)=>o=e[t]=[n,r]));r.push(o[2]=a);var i=n.p+n.u(t),l=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var a=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;l.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",l.name="ChunkLoadError",l.type=a,l.request=i,o[1](l)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,a,i=r[0],l=r[1],s=r[2],c=0;if(i.some((t=>0!==e[t]))){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(s)s(n)}for(t&&t(r);c{"use strict";var e,t=n(609),r=n(159),o=n.n(r),a=n(7),i=n.n(a),l=n(648),s=n.n(l),c=n(220),u=n.n(c);function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function y(t,n,r,o){void 0===o&&(o={});let{window:a=document.defaultView,v5Compat:i=!1}=o,l=a.history,s=e.Pop,c=null,u=f();function f(){return(l.state||{idx:null}).idx}function v(){s=e.Pop;let t=f(),n=null==t?null:t-u;u=t,c&&c({action:s,location:b.location,delta:n})}function y(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"===typeof e?e:g(e);return n=n.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,l.replaceState(d({},l.state,{idx:u}),""));let b={get action(){return s},get location(){return t(a,l)},listen(e){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(h,v),c=e,()=>{a.removeEventListener(h,v),c=null}},createHref:e=>n(a,e),createURL:y,encodeLocation(e){let t=y(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(t,n){s=e.Push;let o=_(b.location,t,n);r&&r(o,t),u=f()+1;let d=m(o,u),h=b.createHref(o);try{l.pushState(d,"",h)}catch(p){if(p instanceof DOMException&&"DataCloneError"===p.name)throw p;a.location.assign(h)}i&&c&&c({action:s,location:b.location,delta:1})},replace:function(t,n){s=e.Replace;let o=_(b.location,t,n);r&&r(o,t),u=f();let a=m(o,u),d=b.createHref(o);l.replaceState(a,"",d),i&&c&&c({action:s,location:b.location,delta:0})},go:e=>l.go(e)};return b}var b;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(b||(b={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function w(e,t,n){return void 0===n&&(n="/"),k(e,t,n,!1)}function k(e,t,n,r){let o=I(("string"===typeof t?v(t):t).pathname||"/",n);if(null==o)return null;let a=x(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let l=0;null==i&&l{let i={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};i.relativePath.startsWith("/")&&(p(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let l=H([r,i.relativePath]),s=n.concat(i);e.children&&e.children.length>0&&(p(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),x(e.children,t,s,l)),(null!=e.path||e.index)&&t.push({path:l,score:D(l,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of S(e.path))o(e,t,r);else o(e,t)})),t}function S(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(0===r.length)return o?[a,""]:[a];let i=S(r.join("/")),l=[];return l.push(...i.map((e=>""===e?a:[a,e].join("/")))),o&&l.push(...i),l.map((t=>e.startsWith("/")&&""===t?"/":t))}const A=/^:[\w-]+$/,E=3,C=2,M=1,N=10,T=-2,P=e=>"*"===e;function D(e,t){let n=e.split("/"),r=n.length;return n.some(P)&&(r+=T),t&&(r+=C),n.filter((e=>!P(e))).reduce(((e,t)=>e+(A.test(t)?E:""===t?M:N)),r)}function O(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},a="/",i=[];for(let l=0;l(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let a=new RegExp(o,t?void 0:"i");return[a,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=l[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}const s=l[n];return e[r]=o&&!s?void 0:(s||"").replace(/%2F/g,"/"),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function L(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return f(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function I(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function z(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function j(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function $(e,t){let n=j(e);return t?n.map(((e,t)=>t===n.length-1?e.pathname:e.pathnameBase)):n.map((e=>e.pathnameBase))}function F(e,t,n,r){let o;void 0===r&&(r=!1),"string"===typeof e?o=v(e):(o=d({},e),p(!o.pathname||!o.pathname.includes("?"),z("?","pathname","search",o)),p(!o.pathname||!o.pathname.includes("#"),z("#","pathname","hash",o)),p(!o.search||!o.search.includes("#"),z("#","search","hash",o)));let a,i=""===e||""===o.pathname,l=i?"/":o.pathname;if(null==l)a=n;else{let e=t.length-1;if(!r&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}a=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"===typeof e?v(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:B(r),hash:U(o)}}(o,a),c=l&&"/"!==l&&l.endsWith("/"),u=(i||"."===l)&&n.endsWith("/");return s.pathname.endsWith("/")||!c&&!u||(s.pathname+="/"),s}const H=e=>e.join("/").replace(/\/\/+/g,"/"),V=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",U=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function Y(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const W=["post","put","patch","delete"],q=(new Set(W),["get",...W]);new Set(q),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t{r.current=!0}));let o=t.useCallback((function(t,o){void 0===o&&(o={}),r.current&&("number"===typeof t?e.navigate(t):e.navigate(t,Z({fromRouteId:n},o)))}),[e,n]);return o}():function(){te()||p(!1);let e=t.useContext(K),{basename:n,future:r,navigator:o}=t.useContext(Q),{matches:a}=t.useContext(X),{pathname:i}=ne(),l=JSON.stringify($(a,r.v7_relativeSplatPath)),s=t.useRef(!1);re((()=>{s.current=!0}));let c=t.useCallback((function(t,r){if(void 0===r&&(r={}),!s.current)return;if("number"===typeof t)return void o.go(t);let a=F(t,JSON.parse(l),i,"path"===r.relative);null==e&&"/"!==n&&(a.pathname="/"===a.pathname?n:H([n,a.pathname])),(r.replace?o.replace:o.push)(a,r.state,r)}),[n,o,l,i,e]);return c}()}const ae=t.createContext(null);function ie(e,n){let{relative:r}=void 0===n?{}:n,{future:o}=t.useContext(Q),{matches:a}=t.useContext(X),{pathname:i}=ne(),l=JSON.stringify($(a,o.v7_relativeSplatPath));return t.useMemo((()=>F(e,JSON.parse(l),i,"path"===r)),[e,l,i,r])}function le(n,r,o,a){te()||p(!1);let{navigator:i}=t.useContext(Q),{matches:l}=t.useContext(X),s=l[l.length-1],c=s?s.params:{},u=(s&&s.pathname,s?s.pathnameBase:"/");s&&s.route;let d,h=ne();if(r){var f;let e="string"===typeof r?v(r):r;"/"===u||(null==(f=e.pathname)?void 0:f.startsWith(u))||p(!1),d=e}else d=h;let m=d.pathname||"/",_=m;if("/"!==u){let e=u.replace(/^\//,"").split("/");_="/"+m.replace(/^\//,"").split("/").slice(e.length).join("/")}let g=w(n,{pathname:_});let y=he(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},c,e.params),pathname:H([u,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?u:H([u,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,o,a);return r&&y?t.createElement(J.Provider,{value:{location:Z({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:e.Pop}},y):y}function se(){let e=function(){var e;let n=t.useContext(ee),r=_e(fe.UseRouteError),o=ge(fe.UseRouteError);if(void 0!==n)return n;return null==(e=r.errors)?void 0:e[o]}(),n=Y(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o};return t.createElement(t.Fragment,null,t.createElement("h2",null,"Unexpected Application Error!"),t.createElement("h3",{style:{fontStyle:"italic"}},n),r?t.createElement("pre",{style:a},r):null,null)}const ce=t.createElement(se,null);class ue extends t.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?t.createElement(X.Provider,{value:this.props.routeContext},t.createElement(ee.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function de(e){let{routeContext:n,match:r,children:o}=e,a=t.useContext(K);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),t.createElement(X.Provider,{value:n},o)}function he(e,n,r,o){var a;if(void 0===n&&(n=[]),void 0===r&&(r=null),void 0===o&&(o=null),null==e){var i;if(!r)return null;if(r.errors)e=r.matches;else{if(!(null!=(i=o)&&i.v7_partialHydration&&0===n.length&&!r.initialized&&r.matches.length>0))return null;e=r.matches}}let l=e,s=null==(a=r)?void 0:a.errors;if(null!=s){let e=l.findIndex((e=>e.route.id&&void 0!==(null==s?void 0:s[e.route.id])));e>=0||p(!1),l=l.slice(0,Math.min(l.length,e+1))}let c=!1,u=-1;if(r&&o&&o.v7_partialHydration)for(let t=0;t=0?l.slice(0,u+1):[l[0]];break}}}return l.reduceRight(((e,o,a)=>{let i,d=!1,h=null,p=null;var f;r&&(i=s&&o.route.id?s[o.route.id]:void 0,h=o.route.errorElement||ce,c&&(u<0&&0===a?(f="route-fallback",!1||ve[f]||(ve[f]=!0),d=!0,p=null):u===a&&(d=!0,p=o.route.hydrateFallbackElement||null)));let m=n.concat(l.slice(0,a+1)),_=()=>{let n;return n=i?h:d?p:o.route.Component?t.createElement(o.route.Component,null):o.route.element?o.route.element:e,t.createElement(de,{match:o,routeContext:{outlet:e,matches:m,isDataRoute:null!=r},children:n})};return r&&(o.route.ErrorBoundary||o.route.errorElement||0===a)?t.createElement(ue,{location:r.location,revalidation:r.revalidation,component:h,error:i,children:_(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):_()}),null)}var pe=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(pe||{}),fe=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(fe||{});function me(e){let n=t.useContext(K);return n||p(!1),n}function _e(e){let n=t.useContext(G);return n||p(!1),n}function ge(e){let n=function(e){let n=t.useContext(X);return n||p(!1),n}(),r=n.matches[n.matches.length-1];return r.route.id||p(!1),r.route.id}const ve={};t.startTransition;function ye(e){return function(e){let n=t.useContext(X).outlet;return n?t.createElement(ae.Provider,{value:e},n):n}(e.context)}function be(e){p(!1)}function we(n){let{basename:r="/",children:o=null,location:a,navigationType:i=e.Pop,navigator:l,static:s=!1,future:c}=n;te()&&p(!1);let u=r.replace(/^\/*/,"/"),d=t.useMemo((()=>({basename:u,navigator:l,static:s,future:Z({v7_relativeSplatPath:!1},c)})),[u,c,l,s]);"string"===typeof a&&(a=v(a));let{pathname:h="/",search:f="",hash:m="",state:_=null,key:g="default"}=a,y=t.useMemo((()=>{let e=I(h,u);return null==e?null:{location:{pathname:e,search:f,hash:m,state:_,key:g},navigationType:i}}),[u,h,f,m,_,g,i]);return null==y?null:t.createElement(Q.Provider,{value:d},t.createElement(J.Provider,{children:o,value:y}))}function ke(e){let{children:t,location:n}=e;return le(xe(t),n)}new Promise((()=>{}));t.Component;function xe(e,n){void 0===n&&(n=[]);let r=[];return t.Children.forEach(e,((e,o)=>{if(!t.isValidElement(e))return;let a=[...n,o];if(e.type===t.Fragment)return void r.push.apply(r,xe(e.props.children,a));e.type!==be&&p(!1),e.props.index&&e.props.children&&p(!1);let i={id:e.props.id||a.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=xe(e.props.children,a)),r.push(i)})),r}function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function Ee(e){return void 0===e&&(e=""),new URLSearchParams("string"===typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map((e=>[n,e])):[[n,r]])}),[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const Ce=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Me=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"];try{window.__reactRouterVersion="6"}catch(zd){}const Ne=t.createContext({isTransitioning:!1});new Map;const Te=t.startTransition;t.flushSync,t.useId;function Pe(e){let{basename:n,children:r,future:o,window:a}=e,i=t.useRef();null==i.current&&(i.current=function(e){return void 0===e&&(e={}),y((function(e,t){let{pathname:n="/",search:r="",hash:o=""}=v(e.location.hash.substr(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),_("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let n=e.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let t=e.location.href,n=t.indexOf("#");r=-1===n?t:t.slice(0,n)}return r+"#"+("string"===typeof t?t:g(t))}),(function(e,t){f("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)}({window:a,v5Compat:!0}));let l=i.current,[s,c]=t.useState({action:l.action,location:l.location}),{v7_startTransition:u}=o||{},d=t.useCallback((e=>{u&&Te?Te((()=>c(e))):c(e)}),[c,u]);return t.useLayoutEffect((()=>l.listen(d)),[l,d]),t.createElement(we,{basename:n,children:r,location:s.location,navigationType:s.action,navigator:l,future:o})}const De="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,Oe=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Re=t.forwardRef((function(e,n){let r,{onClick:o,relative:a,reloadDocument:i,replace:l,state:s,target:c,to:u,preventScrollReset:d,unstable_viewTransition:h}=e,f=Ae(e,Ce),{basename:m}=t.useContext(Q),_=!1;if("string"===typeof u&&Oe.test(u)&&(r=u,De))try{let e=new URL(window.location.href),t=u.startsWith("//")?new URL(e.protocol+u):new URL(u),n=I(t.pathname,m);t.origin===e.origin&&null!=n?u=n+t.search+t.hash:_=!0}catch(zd){}let v=function(e,n){let{relative:r}=void 0===n?{}:n;te()||p(!1);let{basename:o,navigator:a}=t.useContext(Q),{hash:i,pathname:l,search:s}=ie(e,{relative:r}),c=l;return"/"!==o&&(c="/"===l?o:H([o,l])),a.createHref({pathname:c,search:s,hash:i})}(u,{relative:a}),y=function(e,n){let{target:r,replace:o,state:a,preventScrollReset:i,relative:l,unstable_viewTransition:s}=void 0===n?{}:n,c=oe(),u=ne(),d=ie(e,{relative:l});return t.useCallback((t=>{if(function(e,t){return 0===e.button&&(!t||"_self"===t)&&!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)}(t,r)){t.preventDefault();let n=void 0!==o?o:g(u)===g(d);c(e,{replace:n,state:a,preventScrollReset:i,relative:l,unstable_viewTransition:s})}}),[u,c,d,o,a,r,e,i,l,s])}(u,{replace:l,state:s,target:c,preventScrollReset:d,relative:a,unstable_viewTransition:h});return t.createElement("a",Se({},f,{href:r||v,onClick:_||i?o:function(e){o&&o(e),e.defaultPrevented||y(e)},ref:n,target:c}))}));const Le=t.forwardRef((function(e,n){let{"aria-current":r="page",caseSensitive:o=!1,className:a="",end:i=!1,style:l,to:s,unstable_viewTransition:c,children:u}=e,d=Ae(e,Me),h=ie(s,{relative:d.relative}),f=ne(),m=t.useContext(G),{navigator:_,basename:g}=t.useContext(Q),v=null!=m&&function(e,n){void 0===n&&(n={});let r=t.useContext(Ne);null==r&&p(!1);let{basename:o}=je(Ie.useViewTransitionState),a=ie(e,{relative:n.relative});if(!r.isTransitioning)return!1;let i=I(r.currentLocation.pathname,o)||r.currentLocation.pathname,l=I(r.nextLocation.pathname,o)||r.nextLocation.pathname;return null!=R(a.pathname,l)||null!=R(a.pathname,i)}(h)&&!0===c,y=_.encodeLocation?_.encodeLocation(h).pathname:h.pathname,b=f.pathname,w=m&&m.navigation&&m.navigation.location?m.navigation.location.pathname:null;o||(b=b.toLowerCase(),w=w?w.toLowerCase():null,y=y.toLowerCase()),w&&g&&(w=I(w,g)||w);const k="/"!==y&&y.endsWith("/")?y.length-1:y.length;let x,S=b===y||!i&&b.startsWith(y)&&"/"===b.charAt(k),A=null!=w&&(w===y||!i&&w.startsWith(y)&&"/"===w.charAt(y.length)),E={isActive:S,isPending:A,isTransitioning:v},C=S?r:void 0;x="function"===typeof a?a(E):[a,S?"active":null,A?"pending":null,v?"transitioning":null].filter(Boolean).join(" ");let M="function"===typeof l?l(E):l;return t.createElement(Re,Se({},d,{"aria-current":C,className:x,ref:n,style:M,to:s,unstable_viewTransition:c}),"function"===typeof u?u(E):u)}));var Ie,ze;function je(e){let n=t.useContext(K);return n||p(!1),n}function $e(e){let n=t.useRef(Ee(e)),r=t.useRef(!1),o=ne(),a=t.useMemo((()=>function(e,t){let n=Ee(e);return t&&t.forEach(((e,r)=>{n.has(r)||t.getAll(r).forEach((e=>{n.append(r,e)}))})),n}(o.search,r.current?null:n.current)),[o.search]),i=oe(),l=t.useCallback(((e,t)=>{const n=Ee("function"===typeof e?e(a):e);r.current=!0,i("?"+n,t)}),[i,a]);return[a,l]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ie||(Ie={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(ze||(ze={}));const Fe=()=>{var e;const t=(null===(e=document.getElementById("root"))||void 0===e?void 0:e.dataset.params)||"{}";try{return JSON.parse(t)}catch(zd){return console.error(zd),{}}},He=()=>!!Object.keys(Fe()).length,Ve=/(\/select\/)(\d+|\d.+)(\/)(.+)/,Be=e=>{var t;return(null===(t=e.match(Ve))||void 0===t?void 0:t[2])||""};let Ue=function(e){return e.logs="logs",e.anomaly="anomaly",e}({});const Ye=(e,t)=>{t?window.localStorage.setItem(e,JSON.stringify({value:t})):qe([e]),window.dispatchEvent(new Event("storage"))},We=e=>{const t=window.localStorage.getItem(e);if(null!==t)try{var n;return null===(n=JSON.parse(t))||void 0===n?void 0:n.value}catch(zd){return t}},qe=e=>e.forEach((e=>window.localStorage.removeItem(e))),{REACT_APP_TYPE:Ze}={REACT_APP_TYPE:"logs"};var Ke=n(215),Ge=n.n(Ke),Qe=n(424),Je=n.n(Qe);const Xe={table:100,chart:20,code:1e3},et=(e,t)=>{const n=window.location.hash.split("?")[1],r=Ge().parse(n,{ignoreQueryPrefix:!0});return Je()(r,e,t||"")};let tt=function(e){return e.yhat="yhat",e.yhatUpper="yhat_upper",e.yhatLower="yhat_lower",e.anomaly="vmui_anomalies_points",e.training="vmui_training_data",e.actual="actual",e.anomalyScore="anomaly_score",e}({}),nt=function(e){return e.table="table",e.chart="chart",e.code="code",e}({}),rt=function(e){return e.emptyServer="Please enter Server URL",e.validServer="Please provide a valid Server URL",e.validQuery="Please enter a valid Query and execute it",e.traceNotFound="Not found the tracing information",e.emptyTitle="Please enter title",e.positiveNumber="Please enter positive number",e.validStep="Please enter a valid step",e.unknownType="Unknown server response format: must have 'errorType'",e}({}),ot=function(e){return e.system="system",e.light="light",e.dark="dark",e}({}),at=function(e){return e.empty="empty",e.metricsql="metricsql",e.label="label",e.labelValue="labelValue",e}({});const it=e=>getComputedStyle(document.documentElement).getPropertyValue("--".concat(e)),lt=(e,t)=>{document.documentElement.style.setProperty("--".concat(e),t)},st=()=>window.matchMedia("(prefers-color-scheme: dark)").matches,ct=e=>e.replace(/\/$/,""),ut=et("g0.tenantID",""),dt={serverUrl:ct((e=>{const{serverURL:t}=Fe(),n=We("SERVER_URL"),r=window.location.href.replace(/\/(select\/)?(vmui)\/.*/,""),o="".concat(window.location.origin).concat(window.location.pathname.replace(/^\/vmui/,"")),a=window.location.href.replace(/\/(?:prometheus\/)?(?:graph|vmui)\/.*/,"/prometheus"),i=t||n||a;switch(Ze){case Ue.logs:return r;case Ue.anomaly:return n||o;default:return e?((e,t)=>e.replace(Ve,"$1".concat(t,"/$4")))(i,e):i}})(ut)),tenantId:ut,theme:We("THEME")||ot.system,isDarkTheme:null};function ht(e,t){switch(t.type){case"SET_SERVER":return{...e,serverUrl:ct(t.payload)};case"SET_TENANT_ID":return{...e,tenantId:t.payload};case"SET_THEME":return Ye("THEME",t.payload),{...e,theme:t.payload};case"SET_DARK_THEME":return{...e,isDarkTheme:(n=e.theme,n===ot.system&&st()||n===ot.dark)};default:throw new Error}var n}var pt=n(746);var ft=0;Array.isArray;function mt(e,t,n,r,o,a){t||(t={});var i,l,s=t;if("ref"in s)for(l in s={},t)"ref"==l?i=t[l]:s[l]=t[l];var c={type:e,props:s,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--ft,__i:-1,__u:0,__source:o,__self:a};if("function"==typeof e&&(i=e.defaultProps))for(l in i)void 0===s[l]&&(s[l]=i[l]);return pt.fF.vnode&&pt.fF.vnode(c),c}const _t=(0,t.createContext)({}),gt=()=>(0,t.useContext)(_t).state,vt=()=>(0,t.useContext)(_t).dispatch,yt=Object.entries(dt).reduce(((e,t)=>{let[n,r]=t;return{...e,[n]:et(n)||r}}),{}),bt="YYYY-MM-DD",wt="YYYY-MM-DD HH:mm:ss",kt="YYYY-MM-DD[T]HH:mm:ss",xt=window.innerWidth/4,St=window.innerWidth/40,At=1,Et=1578e8,Ct=Intl.supportedValuesOf,Mt=Ct?Ct("timeZone"):["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Katmandu","Asia/Khandyga","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis"],Nt=[{long:"years",short:"y",possible:"year"},{long:"weeks",short:"w",possible:"week"},{long:"days",short:"d",possible:"day"},{long:"hours",short:"h",possible:"hour"},{long:"minutes",short:"m",possible:"min"},{long:"seconds",short:"s",possible:"sec"},{long:"milliseconds",short:"ms",possible:"millisecond"}],Tt=Nt.map((e=>e.short)),Pt=e=>{let t=(n=e,Math.round(1e3*n)/1e3);var n;const r=Math.round(e);e>=100&&(t=r-r%10),e<100&&e>=10&&(t=r-r%5),e<10&&e>=1&&(t=r),e<1&&e>.01&&(t=Math.round(40*e)/40);const a=(e=>zt(o().duration(e,"seconds").asMilliseconds()))(t||.001);return a.replace(/\s/g,"")},Dt=e=>{const t=e.match(/\d+/g),n=e.match(/[a-zA-Z]+/g);if(n&&t&&Tt.includes(n[0]))return{[n[0]]:t[0]}},Ot=(e,t)=>Pt(e/(t?St:xt)),Rt=(e,t)=>{const n=(t||o()().toDate()).valueOf()/1e3,r=(e=>{const t=Nt.map((e=>e.short)).join("|"),n=new RegExp("\\d+(\\.\\d+)?[".concat(t,"]+"),"g"),r=(e.match(n)||[]).reduce(((e,t)=>{const n=Dt(t);return n?{...e,...n}:{...e}}),{});return o().duration(r).asSeconds()})(e);return{start:n-r,end:n,step:Ot(r),date:Lt(t||o()().toDate())}},Lt=e=>o().tz(e).utc().format(kt),It=e=>o().tz(e).format(kt),zt=e=>{const t=Math.floor(e%1e3),n=Math.floor(e/1e3%60),r=Math.floor(e/1e3/60%60),o=Math.floor(e/1e3/3600%24),a=Math.floor(e/864e5),i=["d","h","m","s","ms"],l=[a,o,r,n,t].map(((e,t)=>e?"".concat(e).concat(i[t]):""));return l.filter((e=>e)).join("")},jt=e=>{const t=o()(1e3*e);return t.isValid()?t.toDate():new Date},$t="logs"===Ue.logs,Ft=[{title:"Last 5 minutes",duration:"5m",isDefault:$t},{title:"Last 15 minutes",duration:"15m"},{title:"Last 30 minutes",duration:"30m",isDefault:!$t},{title:"Last 1 hour",duration:"1h"},{title:"Last 3 hours",duration:"3h"},{title:"Last 6 hours",duration:"6h"},{title:"Last 12 hours",duration:"12h"},{title:"Last 24 hours",duration:"24h"},{title:"Last 2 days",duration:"2d"},{title:"Last 7 days",duration:"7d"},{title:"Last 30 days",duration:"30d"},{title:"Last 90 days",duration:"90d"},{title:"Last 180 days",duration:"180d"},{title:"Last 1 year",duration:"1y"},{title:"Yesterday",duration:"1d",until:()=>o()().tz().subtract(1,"day").endOf("day").toDate()},{title:"Today",duration:"1d",until:()=>o()().tz().endOf("day").toDate()}].map((e=>({id:e.title.replace(/\s/g,"_").toLocaleLowerCase(),until:e.until?e.until:()=>o()().tz().toDate(),...e}))),Ht=e=>{var t;let{relativeTimeId:n,defaultDuration:r,defaultEndInput:o}=e;const a=null===(t=Ft.find((e=>e.isDefault)))||void 0===t?void 0:t.id,i=n||et("g0.relative_time",a),l=Ft.find((e=>e.id===i));return{relativeTimeId:l?i:"none",duration:l?l.duration:r,endInput:l?l.until():o}},Vt=e=>{const t=o()().tz(e);return"UTC".concat(t.format("Z"))},Bt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=new RegExp(e,"i");return Mt.reduce(((n,r)=>{const o=(r.match(/^(.*?)\//)||[])[1]||"unknown",a=Vt(r),i=a.replace(/UTC|0/,""),l=r.replace(/[/_]/g," "),s={region:r,utc:a,search:"".concat(r," ").concat(a," ").concat(l," ").concat(i)},c=!e||e&&t.test(s.search);return c&&n[o]?n[o].push(s):c&&(n[o]=[s]),n}),{})},Ut=e=>{o().tz.setDefault(e)},Yt=()=>{const e=o().tz.guess(),t=(e=>{try{return o()().tz(e),!0}catch(zd){return!1}})(e);return{isValid:t,title:t?"Browser Time (".concat(e,")"):"Browser timezone (UTC)",region:t?e:"UTC"}},Wt=We("TIMEZONE")||Yt().region;Ut(Wt);const qt={...(()=>{const e=et("g0.range_input"),{duration:t,endInput:n,relativeTimeId:r}=Ht({defaultDuration:e||"1h",defaultEndInput:(a=et("g0.end_input",o()().utc().format(kt)),o()(a).utcOffset(0,!0).toDate()),relativeTimeId:e?et("g0.relative_time","none"):void 0});var a;return{duration:t,period:Rt(t,n),relativeTime:r}})(),timezone:Wt};function Zt(e,t){switch(t.type){case"SET_TIME_STATE":return{...e,...t.payload};case"SET_DURATION":return{...e,duration:t.payload,period:Rt(t.payload,jt(e.period.end)),relativeTime:"none"};case"SET_RELATIVE_TIME":return{...e,duration:t.payload.duration,period:Rt(t.payload.duration,t.payload.until),relativeTime:t.payload.id};case"SET_PERIOD":const n=(e=>{const t=e.to.valueOf()-e.from.valueOf();return zt(t)})(t.payload);return{...e,duration:n,period:Rt(n,t.payload.to),relativeTime:"none"};case"RUN_QUERY":const{duration:r,endInput:o}=Ht({relativeTimeId:e.relativeTime,defaultDuration:e.duration,defaultEndInput:jt(e.period.end)});return{...e,period:Rt(r,o)};case"RUN_QUERY_TO_NOW":return{...e,period:Rt(e.duration)};case"SET_TIMEZONE":return Ut(t.payload),Ye("TIMEZONE",t.payload),e.defaultTimezone&&Ye("DISABLED_DEFAULT_TIMEZONE",t.payload!==e.defaultTimezone),{...e,timezone:t.payload};case"SET_DEFAULT_TIMEZONE":return{...e,defaultTimezone:t.payload};default:throw new Error}}const Kt=(0,t.createContext)({}),Gt=()=>(0,t.useContext)(Kt).state,Qt=()=>(0,t.useContext)(Kt).dispatch,Jt=e=>{const t=e.map((e=>e.values[e.index])),n=(e=>{const t=We(e);return t?JSON.parse(t):[]})("QUERY_HISTORY");n[0]||(n[0]=[]);const r=n[0];t.forEach((e=>{!r.includes(e)&&e&&r.unshift(e),r.length>250&&r.shift()})),Ye("QUERY_HISTORY",JSON.stringify(n))},Xt=50,en=1e3,tn=1e3;const nn=(()=>{var e;const t=(null===(e=(window.location.hash.split("?")[1]||"").match(/g\d+\.expr/g))||void 0===e?void 0:e.length)||1;return new Array(t>10?10:t).fill(1).map(((e,t)=>et("g".concat(t,".expr"),"")))})(),rn={query:nn,queryHistory:nn.map((e=>({index:0,values:[e]}))),autocomplete:We("AUTOCOMPLETE")||!1,autocompleteQuick:!1,autocompleteCache:new class{constructor(){this.maxSize=void 0,this.map=void 0,this.maxSize=tn,this.map=new Map}get(e){for(const[t,n]of this.map){const r=JSON.parse(t),o=r.start===e.start&&r.end===e.end,a=r.type===e.type,i=e.value&&r.value&&e.value.includes(r.value),l=r.match===e.match||i,s=n.length=this.maxSize){const e=this.map.keys().next().value;this.map.delete(e)}this.map.set(JSON.stringify(e),t)}},metricsQLFunctions:[]};function on(e,t){switch(t.type){case"SET_QUERY":return{...e,query:t.payload.map((e=>e))};case"SET_QUERY_HISTORY":return Jt(t.payload),{...e,queryHistory:t.payload};case"SET_QUERY_HISTORY_BY_INDEX":return e.queryHistory.splice(t.payload.queryNumber,1,t.payload.value),{...e,queryHistory:e.queryHistory};case"TOGGLE_AUTOCOMPLETE":return Ye("AUTOCOMPLETE",!e.autocomplete),{...e,autocomplete:!e.autocomplete};case"SET_AUTOCOMPLETE_QUICK":return{...e,autocompleteQuick:t.payload};case"SET_AUTOCOMPLETE_CACHE":return e.autocompleteCache.put(t.payload.key,t.payload.value),{...e};case"SET_METRICSQL_FUNCTIONS":return{...e,metricsQLFunctions:t.payload};default:throw new Error}}const an=(0,t.createContext)({}),ln=()=>(0,t.useContext)(an).state,sn=()=>(0,t.useContext)(an).dispatch,cn=()=>mt("svg",{viewBox:"0 0 74 24",fill:"currentColor",children:mt("path",{d:"M6.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29C15.73 4.1 12.46 3.01 7.43 3h-.06C2.33 3-.93 4.1.24 5.18c0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a454.94 454.94 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44a454.4 454.4 0 0 0 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM35 5l-5.84 14.46h-2.43L20.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H35Zm17.18 0v14.46H49.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L38.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H36.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15Z"})}),un=()=>mt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:[mt("path",{d:"M11.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29 1.17-1.09-2.1-2.17-7.13-2.18h-.06c-5.04 0-8.3 1.1-7.13 2.18 0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a455.13 455.13 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44 2.05-1.82 4.09-3.65 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM40 5l-5.84 14.46h-2.43L25.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H40Zm17.18 0v14.46H54.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L43.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H41.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15ZM1.73 36v-5.17l-.67-.07a.6.6 0 0 1-.21-.1.23.23 0 0 1-.08-.18v-.44h.96v-.59c0-.34.05-.65.14-.92a1.79 1.79 0 0 1 1.08-1.11 2.45 2.45 0 0 1 1.62-.02l-.03.53c0 .1-.06.15-.16.16H4c-.18 0-.35.03-.5.08a.95.95 0 0 0-.39.23c-.1.11-.19.25-.25.43-.05.18-.08.4-.08.65v.56h1.75v.78H2.8V36H1.73Zm6.17-6.17c.45 0 .85.07 1.2.22a2.57 2.57 0 0 1 1.5 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.86-.07-1.22-.21a2.57 2.57 0 0 1-1.5-1.62c-.12-.38-.19-.81-.19-1.3 0-.47.07-.9.2-1.28a2.57 2.57 0 0 1 1.5-1.62c.35-.15.76-.22 1.2-.22Zm0 5.42c.6 0 1.05-.2 1.35-.6.3-.4.44-.97.44-1.69s-.15-1.28-.44-1.69c-.3-.4-.75-.6-1.35-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.33.73-.08.28-.11.6-.11.96 0 .72.15 1.29.44 1.69.3.4.76.6 1.36.6Zm5.26-4.11c.2-.42.43-.74.71-.97.28-.24.62-.36 1.03-.36.13 0 .25.02.36.05.12.02.23.07.32.13l-.08.8c-.02.1-.08.15-.18.15l-.24-.04a1.7 1.7 0 0 0-.88.05c-.15.05-.29.14-.4.25-.12.1-.23.24-.32.4-.1.17-.18.35-.26.56V36h-1.07v-6.08h.61c.12 0 .2.02.24.07.05.04.08.12.1.23l.06.92Zm13.73-3.82L23.39 36h-1.46l-3.5-8.68h1.29a.54.54 0 0 1 .54.37l2.04 5.3a11.31 11.31 0 0 1 .37 1.21 11.65 11.65 0 0 1 .35-1.22l2.03-5.29c.03-.1.1-.18.19-.25.1-.08.21-.12.35-.12h1.3Zm2.2 2.52V36H27.6v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.08.36a1 1 0 0 1-.51.5.96.96 0 0 1-.73 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .37.08c.12.05.22.11.3.2a.94.94 0 0 1 .3.67Zm5.72 3.1a.68.68 0 0 1-.13.13c-.04.03-.1.05-.18.05a.42.42 0 0 1-.22-.07 3.95 3.95 0 0 0-.62-.31c-.14-.05-.3-.07-.51-.07-.26 0-.5.04-.69.14-.2.1-.36.23-.49.4-.13.18-.22.4-.29.64-.06.25-.1.53-.1.85 0 .33.04.62.1.88.08.25.18.47.32.64.13.18.29.3.48.4.18.09.4.13.63.13a1.6 1.6 0 0 0 .94-.27l.26-.2a.4.4 0 0 1 .25-.09.3.3 0 0 1 .27.14l.43.54a2.76 2.76 0 0 1-1.77.96c-.22.03-.43.05-.65.05a2.57 2.57 0 0 1-1.96-.83c-.25-.28-.45-.6-.6-1-.14-.4-.21-.85-.21-1.35 0-.45.06-.87.2-1.25a2.61 2.61 0 0 1 1.51-1.67c.37-.16.8-.24 1.28-.24.46 0 .86.07 1.2.22.35.15.66.36.94.64l-.4.54Zm3.43 4.95c-.54 0-.95-.15-1.24-.45-.28-.3-.42-.73-.42-1.26v-3.44h-.63a.29.29 0 0 1-.2-.07c-.06-.06-.09-.13-.09-.24v-.59l.99-.16.31-1.68a.33.33 0 0 1 .12-.18.34.34 0 0 1 .21-.07h.77v1.94h1.64v1.05h-1.64v3.34c0 .2.05.34.14.45.1.1.22.16.39.16a.73.73 0 0 0 .39-.1l.12-.07a.2.2 0 0 1 .11-.03c.05 0 .08.01.11.03l.09.1.44.72c-.21.18-.46.32-.74.4-.28.1-.57.15-.87.15Zm5.09-6.35c.46 0 .87.07 1.24.22a2.7 2.7 0 0 1 1.58 1.63c.14.39.22.83.22 1.31 0 .49-.08.93-.22 1.32-.14.4-.35.73-.62 1-.26.28-.58.49-.96.64-.37.15-.78.22-1.24.22a3.4 3.4 0 0 1-1.25-.22 2.71 2.71 0 0 1-1.59-1.64 3.8 3.8 0 0 1-.21-1.32c0-.48.07-.92.21-1.31a2.75 2.75 0 0 1 1.58-1.63c.38-.15.8-.22 1.26-.22Zm0 5.2c.51 0 .89-.17 1.13-.52.25-.34.38-.84.38-1.5a2.6 2.6 0 0 0-.38-1.53c-.24-.34-.62-.52-1.13-.52-.52 0-.9.18-1.16.53-.25.35-.37.85-.37 1.51s.12 1.17.37 1.51c.25.35.64.52 1.16.52Zm5.56-4.04c.2-.37.42-.65.69-.86.26-.21.57-.32.94-.32.28 0 .5.06.68.19l-.1 1.1a.3.3 0 0 1-.09.16.24.24 0 0 1-.15.04 1.8 1.8 0 0 1-.27-.03 2.01 2.01 0 0 0-.34-.03c-.16 0-.3.03-.44.08a1.1 1.1 0 0 0-.34.2c-.1.1-.2.2-.27.33-.08.13-.15.27-.22.44V36H47.7v-6.16h.87c.15 0 .26.03.31.09.06.05.1.15.13.29l.09.7Zm4.62-1.07V36h-1.49v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.07.36a1 1 0 0 1-.51.5.96.96 0 0 1-.74 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .38.08c.11.05.21.11.3.2a.94.94 0 0 1 .28.67Zm4.56 5.32a7.8 7.8 0 0 0-1.08.12c-.29.05-.52.12-.7.2a.92.92 0 0 0-.38.3.64.64 0 0 0-.11.36c0 .26.07.45.23.56.15.11.35.17.6.17.3 0 .57-.06.79-.17.22-.1.44-.28.65-.5v-1.04Zm-3.4-2.67c.71-.65 1.57-.97 2.56-.97.36 0 .68.06.97.18a1.99 1.99 0 0 1 1.16 1.24c.1.3.16.61.16.96V36h-.67a.7.7 0 0 1-.33-.06c-.07-.04-.13-.13-.18-.26l-.13-.44c-.16.14-.3.26-.46.37a2.8 2.8 0 0 1-.97.43 2.77 2.77 0 0 1-1.32-.05 1.62 1.62 0 0 1-.57-.31 1.41 1.41 0 0 1-.38-.53 1.85 1.85 0 0 1-.05-1.18c.05-.16.14-.3.25-.45.12-.14.28-.27.46-.4a3 3 0 0 1 .7-.32 9.19 9.19 0 0 1 2.2-.33v-.36c0-.41-.09-.71-.26-.91-.18-.2-.43-.3-.76-.3a1.84 1.84 0 0 0-1.02.28l-.33.18c-.1.06-.2.09-.32.09-.1 0-.2-.03-.27-.08a.72.72 0 0 1-.17-.2l-.26-.47Zm11.49 4.32V36h-4.88v-8.6h1.16v7.62h3.72Zm3.16-5.2c.44 0 .84.08 1.2.23a2.57 2.57 0 0 1 1.49 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.85-.07-1.21-.21a2.57 2.57 0 0 1-1.5-1.62c-.13-.38-.2-.81-.2-1.3 0-.47.07-.9.2-1.28.14-.39.33-.72.59-1 .25-.26.55-.47.9-.62.37-.15.77-.22 1.22-.22Zm0 5.43c.6 0 1.05-.2 1.34-.6.3-.4.45-.97.45-1.69s-.15-1.28-.45-1.69c-.3-.4-.74-.6-1.34-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.34.73-.07.28-.1.6-.1.96 0 .72.14 1.29.44 1.69.3.4.75.6 1.36.6Zm6.33-2.22c.22 0 .4-.03.57-.09.16-.06.3-.14.41-.25.12-.11.2-.24.26-.39.05-.15.08-.31.08-.5 0-.37-.11-.66-.34-.88-.23-.22-.55-.33-.98-.33-.43 0-.76.1-.99.33-.22.22-.34.51-.34.89 0 .18.03.34.09.5a1.1 1.1 0 0 0 .67.63c.16.06.35.09.57.09Zm1.93 3.3a.51.51 0 0 0-.13-.36.84.84 0 0 0-.34-.22 8.57 8.57 0 0 0-1.73-.2 7.5 7.5 0 0 1-.62-.05c-.23.1-.41.23-.56.4a.8.8 0 0 0-.1.92c.07.12.18.22.32.3.14.1.32.16.54.21a3.5 3.5 0 0 0 1.55 0c.23-.05.42-.12.57-.22.16-.1.29-.21.37-.34a.8.8 0 0 0 .13-.44Zm1.08-6.17v.4c0 .13-.08.21-.25.25l-.69.09c.14.26.2.56.2.88a1.86 1.86 0 0 1-1.36 1.82 3.07 3.07 0 0 1-1.72.04c-.12.08-.22.16-.29.25a.44.44 0 0 0-.1.27c0 .15.06.26.17.33.12.08.28.13.47.16a5 5 0 0 0 .66.06 16.56 16.56 0 0 1 1.5.13c.26.05.48.12.67.22.19.1.34.24.46.41.12.18.18.4.18.69 0 .26-.07.5-.2.75s-.31.46-.56.65c-.24.2-.54.34-.9.46a4.57 4.57 0 0 1-2.36.04c-.33-.09-.6-.2-.82-.36a1.56 1.56 0 0 1-.5-.51c-.1-.2-.16-.4-.16-.6 0-.3.1-.56.28-.77.19-.2.45-.37.77-.5a1.15 1.15 0 0 1-.43-.32.88.88 0 0 1-.15-.54c0-.09.01-.18.04-.27.04-.1.08-.2.15-.28a1.55 1.55 0 0 1 .58-.5c-.3-.16-.53-.39-.7-.66-.17-.28-.25-.6-.25-.97 0-.3.05-.57.16-.8.12-.25.28-.46.48-.63.2-.17.45-.3.73-.4a3 3 0 0 1 2.3.21h1.64Zm4.65.76a.24.24 0 0 1-.23.14.42.42 0 0 1-.2-.07 3.59 3.59 0 0 0-.67-.3 1.8 1.8 0 0 0-1.03 0c-.14.05-.27.11-.37.2a.87.87 0 0 0-.23.27.75.75 0 0 0-.08.35c0 .15.04.28.13.39.1.1.21.19.36.27.15.07.32.14.5.2a13.63 13.63 0 0 1 1.16.4c.2.08.36.18.5.3a1.33 1.33 0 0 1 .5 1.07 2 2 0 0 1-.15.78c-.1.24-.25.44-.45.62-.2.17-.43.3-.72.4a3.1 3.1 0 0 1-2.14-.05 2.97 2.97 0 0 1-.87-.53l.25-.41c.04-.05.07-.1.12-.12a.3.3 0 0 1 .17-.04.4.4 0 0 1 .22.08l.3.19a1.91 1.91 0 0 0 1.03.27c.2 0 .38-.03.54-.08.16-.06.29-.13.4-.22a.96.96 0 0 0 .3-.7c0-.17-.05-.31-.14-.42-.09-.11-.2-.2-.36-.28a2.6 2.6 0 0 0-.5-.2l-.59-.19c-.2-.06-.39-.14-.58-.22a2.14 2.14 0 0 1-.5-.3 1.45 1.45 0 0 1-.36-.46c-.1-.19-.14-.41-.14-.67a1.6 1.6 0 0 1 .57-1.23c.18-.16.4-.3.68-.39.26-.1.57-.14.91-.14a2.84 2.84 0 0 1 1.9.7l-.23.4Z"}),mt("defs",{children:mt("path",{d:"M0 0h85v38H0z"})})]}),dn=()=>mt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:mt("path",{d:"M11.118 10.476c.36.28.801.433 1.257.436h.052c.48-.007.961-.192 1.25-.444 1.509-1.279 5.88-5.287 5.88-5.287 1.168-1.087-2.093-2.174-7.13-2.181h-.06c-5.036.007-8.298 1.094-7.13 2.181 0 0 4.372 4.008 5.88 5.295zm2.559 2.166c-.359.283-.801.439-1.258.444h-.044a2.071 2.071 0 0 1-1.257-.444C10.082 11.755 6.384 8.42 5 7.148v1.93c0 .215.081.496.222.629l.07.064c1.045.955 4.546 4.154 5.825 5.245.358.283.8.438 1.257.444h.044c.489-.015.962-.2 1.258-.444 1.309-1.11 4.948-4.444 5.887-5.31.148-.132.222-.413.222-.628v-1.93a455.127 455.127 0 0 1-6.11 5.494zm-1.258 4.984a2.071 2.071 0 0 0 1.258-.436c2.053-1.815 4.09-3.65 6.11-5.502v1.938c0 .207-.075.488-.223.621-.94.873-4.578 4.2-5.887 5.31-.296.25-.77.436-1.258.443h-.044a2.071 2.071 0 0 1-1.257-.436c-1.204-1.027-4.376-3.928-5.616-5.062l-.28-.255c-.14-.133-.221-.414-.221-.621v-1.938c1.383 1.265 5.081 4.607 6.117 5.495.358.282.8.438 1.257.443h.044zM40 5l-5.84 14.46h-2.43L25.89 5h2.16c.233 0 .423.057.57.17.146.113.256.26.33.44l3.41 8.82c.113.287.22.603.32.95.106.34.206.697.3 1.07.08-.373.166-.73.26-1.07a8.84 8.84 0 0 1 .31-.95l3.39-8.82a.959.959 0 0 1 .31-.42.906.906 0 0 1 .58-.19H40zm17.176 0v14.46h-2.37v-9.34c0-.373.02-.777.06-1.21l-4.37 8.21c-.206.393-.523.59-.95.59h-.38c-.426 0-.743-.197-.95-.59l-4.42-8.24c.02.22.037.437.05.65.014.213.02.41.02.59v9.34h-2.37V5h2.03c.12 0 .224.003.31.01a.778.778 0 0 1 .23.05c.074.027.137.07.19.13.06.06.117.14.17.24l4.33 8.03c.114.213.217.433.31.66.1.227.197.46.29.7.094-.247.19-.483.29-.71.1-.233.207-.457.32-.67l4.27-8.01c.054-.1.11-.18.17-.24a.57.57 0 0 1 .19-.13.903.903 0 0 1 .24-.05c.087-.007.19-.01.31-.01h2.03zm8.887 13.73c.68 0 1.286-.117 1.82-.35.54-.24.996-.57 1.37-.99a4.28 4.28 0 0 0 .85-1.48c.2-.573.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.124 1.51-.37 2.19a5.248 5.248 0 0 1-1.07 1.77c-.46.5-1.024.893-1.69 1.18-.66.287-1.404.43-2.23.43-.827 0-1.574-.143-2.24-.43a5.012 5.012 0 0 1-1.69-1.18 5.33 5.33 0 0 1-1.06-1.77 6.373 6.373 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.096 1.277.29 1.85.2.567.483 1.06.85 1.48.373.42.826.75 1.36.99.54.24 1.15.36 1.83.36zm10.38.73h-1.03V5.31h1.03v14.15zM4.242 35v-5.166l-.672-.078a.595.595 0 0 1-.21-.09.23.23 0 0 1-.078-.186v-.438h.96v-.588c0-.348.048-.656.144-.924.1-.272.24-.5.42-.684a1.79 1.79 0 0 1 .66-.426c.256-.096.544-.144.864-.144.272 0 .522.04.75.12l-.024.534c-.008.096-.062.148-.162.156a4.947 4.947 0 0 1-.39.012c-.184 0-.352.024-.504.072a.949.949 0 0 0-.384.234c-.108.108-.192.25-.252.426a2.184 2.184 0 0 0-.084.654v.558h1.752v.774H5.316V35H4.242zM10.416 28.826a3.1 3.1 0 0 1 1.2.222c.356.148.66.358.912.63s.444.602.576.99c.136.384.204.814.204 1.29 0 .48-.068.912-.204 1.296a2.735 2.735 0 0 1-.576.984 2.572 2.572 0 0 1-.912.63 3.175 3.175 0 0 1-1.2.216c-.448 0-.852-.072-1.212-.216a2.572 2.572 0 0 1-.912-.63 2.805 2.805 0 0 1-.582-.984 3.972 3.972 0 0 1-.198-1.296c0-.476.066-.906.198-1.29.136-.388.33-.718.582-.99.252-.272.556-.482.912-.63.36-.148.764-.222 1.212-.222zm0 5.424c.6 0 1.048-.2 1.344-.6.296-.404.444-.966.444-1.686 0-.724-.148-1.288-.444-1.692-.296-.404-.744-.606-1.344-.606-.304 0-.57.052-.798.156a1.507 1.507 0 0 0-.564.45c-.148.196-.26.438-.336.726a3.941 3.941 0 0 0-.108.966c0 .72.148 1.282.444 1.686.3.4.754.6 1.362.6zM15.677 30.14c.192-.416.428-.74.708-.972.28-.236.622-.354 1.026-.354.128 0 .25.014.366.042.12.028.226.072.318.132l-.078.798c-.024.1-.084.15-.18.15-.056 0-.138-.012-.246-.036a1.694 1.694 0 0 0-.366-.036c-.192 0-.364.028-.516.084-.148.056-.282.14-.402.252a1.782 1.782 0 0 0-.318.408c-.092.16-.176.344-.252.552V35h-1.074v-6.078h.612c.116 0 .196.022.24.066.044.044.074.12.09.228l.072.924zM26.761 28.922 24.283 35h-.96l-2.478-6.078h.87a.33.33 0 0 1 .33.222l1.542 3.912c.048.148.09.292.126.432.036.14.07.28.102.42.032-.14.066-.28.102-.42.036-.14.08-.284.132-.432l1.56-3.912a.33.33 0 0 1 .12-.156.311.311 0 0 1 .198-.066h.834zM27.74 35v-6.078h.643c.152 0 .246.074.282.222l.078.624c.224-.276.476-.502.756-.678.28-.176.604-.264.972-.264.408 0 .738.114.99.342.256.228.44.536.552.924.088-.22.2-.41.336-.57a1.987 1.987 0 0 1 1.014-.624c.196-.048.394-.072.594-.072.32 0 .604.052.852.156.252.1.464.248.636.444.176.196.31.438.402.726.092.284.138.61.138.978V35H34.91v-3.87c0-.476-.104-.836-.312-1.08-.208-.248-.508-.372-.9-.372-.176 0-.344.032-.504.096-.156.06-.294.15-.414.27-.12.12-.216.272-.288.456-.068.18-.102.39-.102.63V35h-1.074v-3.87c0-.488-.098-.852-.294-1.092-.196-.24-.482-.36-.858-.36-.264 0-.508.072-.732.216a2.38 2.38 0 0 0-.618.576V35H27.74zM40.746 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM44.974 29.6c.124-.124.254-.238.39-.342a2.395 2.395 0 0 1 .936-.444c.176-.044.368-.066.576-.066.336 0 .634.058.894.174.26.112.476.272.648.48.176.204.308.45.396.738.092.284.138.598.138.942V35H47.47v-3.918c0-.376-.086-.666-.258-.87-.172-.208-.434-.312-.786-.312-.256 0-.496.058-.72.174a2.58 2.58 0 0 0-.636.474V35h-1.482v-6.156h.906c.192 0 .318.09.378.27l.102.486zM53.085 28.748c.456 0 .87.074 1.242.222a2.692 2.692 0 0 1 1.578 1.626c.144.392.216.83.216 1.314 0 .488-.072.928-.216 1.32-.144.392-.35.726-.618 1.002a2.653 2.653 0 0 1-.96.636 3.333 3.333 0 0 1-1.242.222c-.46 0-.878-.074-1.254-.222a2.712 2.712 0 0 1-.966-.636 2.922 2.922 0 0 1-.618-1.002 3.807 3.807 0 0 1-.216-1.32c0-.484.072-.922.216-1.314.148-.392.354-.724.618-.996.268-.272.59-.482.966-.63a3.397 3.397 0 0 1 1.254-.222zm0 5.202c.512 0 .89-.172 1.134-.516.248-.344.372-.848.372-1.512s-.124-1.17-.372-1.518c-.244-.348-.622-.522-1.134-.522-.52 0-.906.176-1.158.528-.248.348-.372.852-.372 1.512s.124 1.164.372 1.512c.252.344.638.516 1.158.516zM57.252 35v-6.156h.906c.192 0 .318.09.378.27l.096.456c.108-.12.22-.23.336-.33a2.017 2.017 0 0 1 1.32-.492c.388 0 .706.106.954.318.252.208.44.486.564.834a1.93 1.93 0 0 1 .834-.882c.172-.092.354-.16.546-.204.196-.044.392-.066.588-.066.34 0 .642.052.906.156.264.104.486.256.666.456.18.2.316.444.408.732.096.288.144.618.144.99V35h-1.482v-3.918c0-.392-.086-.686-.258-.882-.172-.2-.424-.3-.756-.3-.152 0-.294.026-.426.078a1.026 1.026 0 0 0-.342.228 1.019 1.019 0 0 0-.228.366 1.435 1.435 0 0 0-.084.51V35h-1.488v-3.918c0-.412-.084-.712-.252-.9-.164-.188-.406-.282-.726-.282-.216 0-.418.054-.606.162a1.979 1.979 0 0 0-.516.432V35h-1.482zM70.558 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM74.9 26.084V35h-1.482v-8.916H74.9zM81.969 28.844l-3.354 7.848a.538.538 0 0 1-.174.234c-.068.056-.174.084-.318.084h-1.104l1.152-2.472-2.49-5.694h1.302c.116 0 .206.028.27.084.068.056.118.12.15.192l1.308 3.192c.044.108.08.216.108.324.032.108.062.218.09.33a32.3 32.3 0 0 1 .108-.33c.036-.112.076-.222.12-.33l1.236-3.186a.437.437 0 0 1 .408-.276h1.188z"})}),hn=()=>mt("svg",{viewBox:"0 0 15 17",fill:"currentColor",children:mt("path",{d:"M6.11767 7.47586C6.47736 7.75563 6.91931 7.90898 7.37503 7.91213H7.42681C7.90756 7.90474 8.38832 7.71987 8.67677 7.46846C10.1856 6.18921 14.5568 2.18138 14.5568 2.18138C15.7254 1.09438 12.4637 0.00739 7.42681 0H7.36764C2.3308 0.00739 -0.930935 1.09438 0.237669 2.18138C0.237669 2.18138 4.60884 6.18921 6.11767 7.47586ZM8.67677 9.64243C8.31803 9.92483 7.87599 10.0808 7.41941 10.0861H7.37503C6.91845 10.0808 6.47641 9.92483 6.11767 9.64243C5.0822 8.75513 1.38409 5.42018 0.000989555 4.14832V6.07829C0.000989555 6.29273 0.0823481 6.57372 0.222877 6.70682L0.293316 6.7712L0.293344 6.77122C1.33784 7.72579 4.83903 10.9255 6.11767 12.0161C6.47641 12.2985 6.91845 12.4545 7.37503 12.4597H7.41941C7.90756 12.4449 8.38092 12.2601 8.67677 12.0161C9.9859 10.9069 13.6249 7.57198 14.5642 6.70682C14.7121 6.57372 14.7861 6.29273 14.7861 6.07829V4.14832C12.7662 5.99804 10.7297 7.82949 8.67677 9.64243ZM7.41941 14.6263C7.87513 14.6232 8.31708 14.4698 8.67677 14.19C10.7298 12.3746 12.7663 10.5407 14.7861 8.68853V10.6259C14.7861 10.8329 14.7121 11.1139 14.5642 11.247C13.6249 12.1196 9.9859 15.4471 8.67677 16.5563C8.38092 16.8077 7.90756 16.9926 7.41941 17H7.37503C6.91931 16.9968 6.47736 16.8435 6.11767 16.5637C4.91427 15.5373 1.74219 12.6364 0.502294 11.5025C0.393358 11.4029 0.299337 11.3169 0.222877 11.247C0.0823481 11.1139 0.000989555 10.8329 0.000989555 10.6259V8.68853C1.38409 9.95303 5.0822 13.2953 6.11767 14.1827C6.47641 14.4651 6.91845 14.6211 7.37503 14.6263H7.41941Z"})}),pn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"})}),fn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})}),mn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8zm-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91z"})}),_n=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"})}),gn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})}),vn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),yn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})}),bn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})}),wn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"})}),kn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"m7 10 5 5 5-5z"})}),xn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[mt("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),mt("path",{d:"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"})]}),Sn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"})}),An=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"m22 5.72-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"})}),En=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"})}),Cn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M8 5v14l11-7z"})}),Mn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"m3.5 18.49 6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"})}),Nn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M10 10.02h5V21h-5zM17 21h3c1.1 0 2-.9 2-2v-9h-5v11zm3-18H5c-1.1 0-2 .9-2 2v3h19V5c0-1.1-.9-2-2-2zM3 19c0 1.1.9 2 2 2h3V10H3v9z"})}),Tn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})}),Pn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M8.9999 14.7854L18.8928 4.8925C19.0803 4.70497 19.3347 4.59961 19.5999 4.59961C19.8651 4.59961 20.1195 4.70497 20.307 4.8925L21.707 6.2925C22.0975 6.68303 22.0975 7.31619 21.707 7.70672L9.70701 19.7067C9.31648 20.0972 8.68332 20.0972 8.2928 19.7067L2.6928 14.1067C2.50526 13.9192 2.3999 13.6648 2.3999 13.3996C2.3999 13.1344 2.50526 12.88 2.6928 12.6925L4.0928 11.2925C4.48332 10.902 5.11648 10.902 5.50701 11.2925L8.9999 14.7854Z"})}),Dn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"})}),On=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"})}),Rn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M20 9H4v2h16V9zM4 15h16v-2H4v2z"})}),Ln=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21 5C19.89 4.65 18.67 4.5 17.5 4.5C15.55 4.5 13.45 4.9 12 6C10.55 4.9 8.45 4.5 6.5 4.5C5.33 4.5 4.11 4.65 3 5C2.25 5.25 1.6 5.55 1 6V20.6C1 20.85 1.25 21.1 1.5 21.1C1.6 21.1 1.65 21.1 1.75 21.05C3.15 20.3 4.85 20 6.5 20C8.2 20 10.65 20.65 12 21.5C13.35 20.65 15.8 20 17.5 20C19.15 20 20.85 20.3 22.25 21.05C22.35 21.1 22.4 21.1 22.5 21.1C22.75 21.1 23 20.85 23 20.6V6C22.4 5.55 21.75 5.25 21 5ZM21 18.5C19.9 18.15 18.7 18 17.5 18C15.8 18 13.35 18.65 12 19.5C10.65 18.65 8.2 18 6.5 18C5.3 18 4.1 18.15 3 18.5V7C4.1 6.65 5.3 6.5 6.5 6.5C8.2 6.5 10.65 7.15 12 8C13.35 7.15 15.8 6.5 17.5 6.5C18.7 6.5 19.9 6.65 21 7V18.5Z"}),mt("path",{d:"M17.5 10.5C18.38 10.5 19.23 10.59 20 10.76V9.24C19.21 9.09 18.36 9 17.5 9C15.8 9 14.26 9.29 13 9.83V11.49C14.13 10.85 15.7 10.5 17.5 10.5ZM13 12.49V14.15C14.13 13.51 15.7 13.16 17.5 13.16C18.38 13.16 19.23 13.25 20 13.42V11.9C19.21 11.75 18.36 11.66 17.5 11.66C15.8 11.66 14.26 11.96 13 12.49ZM17.5 14.33C15.8 14.33 14.26 14.62 13 15.16V16.82C14.13 16.18 15.7 15.83 17.5 15.83C18.38 15.83 19.23 15.92 20 16.09V14.57C19.21 14.41 18.36 14.33 17.5 14.33Z"}),mt("path",{d:"M6.5 10.5C5.62 10.5 4.77 10.59 4 10.76V9.24C4.79 9.09 5.64 9 6.5 9C8.2 9 9.74 9.29 11 9.83V11.49C9.87 10.85 8.3 10.5 6.5 10.5ZM11 12.49V14.15C9.87 13.51 8.3 13.16 6.5 13.16C5.62 13.16 4.77 13.25 4 13.42V11.9C4.79 11.75 5.64 11.66 6.5 11.66C8.2 11.66 9.74 11.96 11 12.49ZM6.5 14.33C8.2 14.33 9.74 14.62 11 15.16V16.82C9.87 16.18 8.3 15.83 6.5 15.83C5.62 15.83 4.77 15.92 4 16.09V14.57C4.79 14.41 5.64 14.33 6.5 14.33Z"})]}),In=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 6C9.79 6 8 7.79 8 10H10C10 8.9 10.9 8 12 8C13.1 8 14 8.9 14 10C14 10.8792 13.4202 11.3236 12.7704 11.8217C11.9421 12.4566 11 13.1787 11 15H13C13 13.9046 13.711 13.2833 14.4408 12.6455C15.21 11.9733 16 11.2829 16 10C16 7.79 14.21 6 12 6ZM13 16V18H11V16H13Z"})}),zn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M4 20h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2zM2 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2zm4 1H4V5h2v2zm-2 7h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2z"})}),jn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})}),$n=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M7 20h4c0 1.1-.9 2-2 2s-2-.9-2-2zm-2-1h8v-2H5v2zm11.5-9.5c0 3.82-2.66 5.86-3.77 6.5H5.27c-1.11-.64-3.77-2.68-3.77-6.5C1.5 5.36 4.86 2 9 2s7.5 3.36 7.5 7.5zm4.87-2.13L20 8l1.37.63L22 10l.63-1.37L24 8l-1.37-.63L22 6l-.63 1.37zM19 6l.94-2.06L22 3l-2.06-.94L19 0l-.94 2.06L16 3l2.06.94L19 6z"})}),Fn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M3 14h4v-4H3v4zm0 5h4v-4H3v4zM3 9h4V5H3v4zm5 5h13v-4H8v4zm0 5h13v-4H8v4zM8 5v4h13V5H8z"})}),Hn=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-error"),children:mt("path",{d:"M13.5095 4L8.50952 1H7.50952L2.50952 4L2.01953 4.85999V10.86L2.50952 11.71L7.50952 14.71H8.50952L13.5095 11.71L13.9995 10.86V4.85999L13.5095 4ZM7.50952 13.5601L3.00952 10.86V5.69995L7.50952 8.15002V13.5601ZM3.26953 4.69995L8.00952 1.85999L12.7495 4.69995L8.00952 7.29004L3.26953 4.69995ZM13.0095 10.86L8.50952 13.5601V8.15002L13.0095 5.69995V10.86Z"})}),Vn=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-primary"),children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2 5H4V4H1.5L1 4.5V12.5L1.5 13H4V12H2V5ZM14.5 4H12V5H14V12H12V13H14.5L15 12.5V4.5L14.5 4ZM11.76 6.56995L12 7V9.51001L11.7 9.95996L7.19995 11.96H6.73999L4.23999 10.46L4 10.03V7.53003L4.30005 7.06995L8.80005 5.06995H9.26001L11.76 6.56995ZM5 9.70996L6.5 10.61V9.28003L5 8.38V9.70996ZM5.57996 7.56006L7.03003 8.43005L10.42 6.93005L8.96997 6.06006L5.57996 7.56006ZM7.53003 10.73L11.03 9.17004V7.77002L7.53003 9.31995V10.73Z"})}),Bn=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-warning"),children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 2H8L7 3V6H8V3H14V8H10V9H14L15 8V3L14 2ZM9 6H13V7H9.41L9 6.59V6ZM7 7H2L1 8V13L2 14H8L9 13V8L8 7H7ZM8 13H2V8H8V9V13ZM3 9H7V10H3V9ZM3 11H7V12H3V11ZM9 4H13V5H9V4Z"})}),Un=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-primary"),children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7 3L8 2H14L15 3V8L14 9H10V8H14V3H8V6H7V3ZM9 9V8L8 7H7H2L1 8V13L2 14H8L9 13V9ZM8 8V9V13H2V8H7H8ZM9.41421 7L9 6.58579V6H13V7H9.41421ZM9 4H13V5H9V4ZM7 10H3V11H7V10Z"})}),Yn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 5.83 15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15z"})}),Wn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M7.41 18.59 8.83 20 12 16.83 15.17 20l1.41-1.41L12 14zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10z"})}),qn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"})});var Zn=n(738),Kn=n.n(Zn);const Gn=e=>{let{to:t,isNavLink:n,children:r,...o}=e;return n?mt(Le,{to:t,...o,children:r}):mt("div",{...o,children:r})},Qn=e=>{let{activeItem:t,item:n,color:r=it("color-primary"),activeNavRef:o,onChange:a,isNavLink:i}=e;return mt(Gn,{className:Kn()({"vm-tabs-item":!0,"vm-tabs-item_active":t===n.value,[n.className||""]:n.className}),isNavLink:i,to:n.value,style:{color:r},onClick:(l=n.value,()=>{a&&a(l)}),ref:t===n.value?o:void 0,children:[n.icon&&mt("div",{className:Kn()({"vm-tabs-item__icon":!0,"vm-tabs-item__icon_single":!n.label}),children:n.icon}),n.label]});var l};const Jn=function(e,n,r,o){const a=(0,t.useRef)(n);(0,t.useEffect)((()=>{a.current=n}),[n]),(0,t.useEffect)((()=>{var t;const n=null!==(t=null===r||void 0===r?void 0:r.current)&&void 0!==t?t:window;if(!n||!n.addEventListener)return;const i=e=>a.current(e);return n.addEventListener(e,i,o),()=>{n.removeEventListener(e,i,o)}}),[e,r,o])},Xn=()=>{const[e,n]=(0,t.useState)({width:0,height:0}),r=()=>{n({width:window.innerWidth,height:window.innerHeight})};return Jn("resize",r),(0,t.useEffect)(r,[]),e},er=e=>{let{activeItem:n,items:r,color:o=it("color-primary"),onChange:a,indicatorPlacement:i="bottom",isNavLink:l}=e;const s=Xn(),c=(0,t.useRef)(null),[u,d]=(0,t.useState)({left:0,width:0,bottom:0});return(0,t.useEffect)((()=>{var e;if((null===(e=c.current)||void 0===e?void 0:e.base)instanceof HTMLElement){const{offsetLeft:e,offsetWidth:t,offsetHeight:n}=c.current.base;d({left:e,width:t,bottom:"top"===i?n-2:0})}}),[s,n,c,r]),mt("div",{className:"vm-tabs",children:[r.map((e=>mt(Qn,{activeItem:n,item:e,onChange:a,color:o,activeNavRef:c,isNavLink:l},e.value))),mt("div",{className:"vm-tabs__indicator",style:{...u,borderColor:o}})]})},tr=[{value:nt.chart,icon:mt(Mn,{}),label:"Graph",prometheusCode:0},{value:nt.code,icon:mt(Tn,{}),label:"JSON",prometheusCode:3},{value:nt.table,icon:mt(Nn,{}),label:"Table",prometheusCode:1}],nr=We("SERIES_LIMITS"),rr={displayType:(()=>{const e=et("g0.tab",0),t=tr.find((t=>t.prometheusCode===+e||t.value===e));return(null===t||void 0===t?void 0:t.value)||nt.chart})(),nocache:!1,isTracingEnabled:!1,seriesLimits:nr?JSON.parse(nr):Xe,tableCompact:We("TABLE_COMPACT")||!1};function or(e,t){switch(t.type){case"SET_DISPLAY_TYPE":return{...e,displayType:t.payload};case"SET_SERIES_LIMITS":return Ye("SERIES_LIMITS",JSON.stringify(t.payload)),{...e,seriesLimits:t.payload};case"TOGGLE_QUERY_TRACING":return{...e,isTracingEnabled:!e.isTracingEnabled};case"TOGGLE_NO_CACHE":return{...e,nocache:!e.nocache};case"TOGGLE_TABLE_COMPACT":return Ye("TABLE_COMPACT",!e.tableCompact),{...e,tableCompact:!e.tableCompact};default:throw new Error}}const ar=(0,t.createContext)({}),ir={customStep:et("g0.step_input",""),yaxis:{limits:{enable:!1,range:{1:[0,0]}}},isHistogram:!1,spanGaps:!1};function lr(e,t){switch(t.type){case"TOGGLE_ENABLE_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,enable:!e.yaxis.limits.enable}}};case"SET_CUSTOM_STEP":return{...e,customStep:t.payload};case"SET_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,range:t.payload}}};case"SET_IS_HISTOGRAM":return{...e,isHistogram:t.payload};case"SET_SPAN_GAPS":return{...e,spanGaps:t.payload};default:throw new Error}}const sr=(0,t.createContext)({}),cr={dashboardsSettings:[],dashboardsLoading:!1,dashboardsError:""};function ur(e,t){switch(t.type){case"SET_DASHBOARDS_SETTINGS":return{...e,dashboardsSettings:t.payload};case"SET_DASHBOARDS_LOADING":return{...e,dashboardsLoading:t.payload};case"SET_DASHBOARDS_ERROR":return{...e,dashboardsError:t.payload};default:throw new Error}}const dr=(0,t.createContext)({}),hr={markdownParsing:"true"===We("LOGS_MARKDOWN")};function pr(e,t){if("SET_MARKDOWN_PARSING"===t.type)return Ye("LOGS_MARKDOWN","".concat(t.payload)),{...e,markdownParsing:t.payload};throw new Error}const fr=(0,t.createContext)({}),mr=()=>(0,t.useContext)(fr).state,_r={windows:"Windows",mac:"Mac OS",linux:"Linux"},gr=()=>(Object.values(_r).find((e=>navigator.userAgent.indexOf(e)>=0))||"unknown")===_r.mac;function vr(){const e=Xn(),n=()=>{const e=["Android","webOS","iPhone","iPad","iPod","BlackBerry","Windows Phone"].map((e=>navigator.userAgent.match(new RegExp(e,"i")))).some((e=>e)),t=window.innerWidth<500;return e||t},[r,o]=(0,t.useState)(n());return(0,t.useEffect)((()=>{o(n())}),[e]),{isMobile:r}}const yr={success:mt(yn,{}),error:mt(vn,{}),warning:mt(gn,{}),info:mt(_n,{})},br=e=>{let{variant:t,children:n}=e;const{isDarkTheme:r}=gt(),{isMobile:o}=vr();return mt("div",{className:Kn()({"vm-alert":!0,["vm-alert_".concat(t)]:t,"vm-alert_dark":r,"vm-alert_mobile":o}),children:[mt("div",{className:"vm-alert__icon",children:yr[t||"info"]}),mt("div",{className:"vm-alert__content",children:n})]})},wr=(0,t.createContext)({showInfoMessage:()=>{}}),kr=function(){for(var e=arguments.length,t=new Array(e),n=0;nn=>{let{children:r}=n;return mt(e,{children:mt(t,{children:r})})}),(e=>{let{children:t}=e;return mt(pt.FK,{children:t})}))}(...[e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(ht,yt),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(_t.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(Zt,qt),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(Kt.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(on,rn),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(an.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(or,rr),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(ar.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(lr,ir),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(sr.Provider,{value:a,children:n})},e=>{let{children:n}=e;const{isMobile:r}=vr(),[o,a]=(0,t.useState)({}),[i,l]=(0,t.useState)(!1),[s,c]=(0,t.useState)(void 0);(0,t.useEffect)((()=>{if(!s)return;a({message:s.text,variant:s.type,key:Date.now()}),l(!0);const e=setTimeout(u,4e3);return()=>clearTimeout(e)}),[s]);const u=()=>{c(void 0),l(!1)};return mt(wr.Provider,{value:{showInfoMessage:c},children:[i&&mt("div",{className:Kn()({"vm-snackbar":!0,"vm-snackbar_mobile":r}),children:mt(br,{variant:o.variant,children:mt("div",{className:"vm-snackbar-content",children:[mt("span",{children:o.message}),mt("div",{className:"vm-snackbar-content__close",onClick:u,children:mt(fn,{})})]})})}),n]})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(ur,cr),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(dr.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(pr,hr),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(fr.Provider,{value:a,children:n})}]),xr=e=>{if(7!=e.length)return"0, 0, 0";const t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return"".concat(t,", ").concat(n,", ").concat(r)},Sr={[tt.yhatUpper]:"#7126a1",[tt.yhatLower]:"#7126a1",[tt.yhat]:"#da42a6",[tt.anomaly]:"#da4242",[tt.anomalyScore]:"#7126a1",[tt.actual]:"#203ea9",[tt.training]:"rgba(".concat(xr("#203ea9"),", 0.2)")},Ar={"color-primary":"#589DF6","color-secondary":"#316eca","color-error":"#e5534b","color-warning":"#c69026","color-info":"#539bf5","color-success":"#57ab5a","color-background-body":"#22272e","color-background-block":"#2d333b","color-background-tooltip":"rgba(22, 22, 22, 0.8)","color-text":"#cdd9e5","color-text-secondary":"#768390","color-text-disabled":"#636e7b","box-shadow":"rgba(0, 0, 0, 0.16) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.2) 0px 2px 8px 0px","border-divider":"1px solid rgba(99, 110, 123, 0.5)","color-hover-black":"rgba(0, 0, 0, 0.12)","color-log-hits-bar-0":"rgba(255, 255, 255, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Er={"color-primary":"#3F51B5","color-secondary":"#E91E63","color-error":"#FD080E","color-warning":"#FF8308","color-info":"#03A9F4","color-success":"#4CAF50","color-background-body":"#FEFEFF","color-background-block":"#FFFFFF","color-background-tooltip":"rgba(80,80,80,0.9)","color-text":"#110f0f","color-text-secondary":"#706F6F","color-text-disabled":"#A09F9F","box-shadow":"rgba(0, 0, 0, 0.08) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.1) 0px 2px 8px 0px","border-divider":"1px solid rgba(0, 0, 0, 0.15)","color-hover-black":"rgba(0, 0, 0, 0.06)","color-log-hits-bar-0":"rgba(0, 0, 0, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Cr=()=>{const[e,n]=(0,t.useState)(st()),r=e=>{n(e.matches)};return(0,t.useEffect)((()=>{const e=window.matchMedia("(prefers-color-scheme: dark)");return e.addEventListener("change",r),()=>e.removeEventListener("change",r)}),[]),e},Mr=["primary","secondary","error","warning","info","success"],Nr=e=>{let{onLoaded:n}=e;const r=He(),{palette:o={}}=Fe(),{theme:a}=gt(),i=Cr(),l=vt(),s=Xn(),[c,u]=(0,t.useState)({[ot.dark]:Ar,[ot.light]:Er,[ot.system]:st()?Ar:Er}),d=()=>{const{innerWidth:e,innerHeight:t}=window,{clientWidth:n,clientHeight:r}=document.documentElement;lt("scrollbar-width","".concat(e-n,"px")),lt("scrollbar-height","".concat(t-r,"px")),lt("vh","".concat(.01*t,"px"))},h=()=>{Mr.forEach(((e,t)=>{const r=(e=>{let t=e.replace("#","").trim();if(3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),6!==t.length)throw new Error("Invalid HEX color.");return(299*parseInt(t.slice(0,2),16)+587*parseInt(t.slice(2,4),16)+114*parseInt(t.slice(4,6),16))/1e3>=128?"#000000":"#FFFFFF"})(it("color-".concat(e)));lt("".concat(e,"-text"),r),t===Mr.length-1&&(l({type:"SET_DARK_THEME"}),n(!0))}))},p=()=>{const e=We("THEME")||ot.system,t=c[e];Object.entries(t).forEach((e=>{let[t,n]=e;lt(t,n)})),h(),r&&(Mr.forEach((e=>{const t=o[e];t&<("color-".concat(e),t)})),h())};return(0,t.useEffect)((()=>{d(),p()}),[c]),(0,t.useEffect)(d,[s]),(0,t.useEffect)((()=>{const e=st()?Ar:Er;c[ot.system]!==e?u((t=>({...t,[ot.system]:e}))):p()}),[a,i]),(0,t.useEffect)((()=>{r&&l({type:"SET_THEME",payload:ot.light})}),[]),null},Tr=()=>{const{showInfoMessage:e}=(0,t.useContext)(wr);return async(t,n)=>{var r;if(null===(r=navigator)||void 0===r||!r.clipboard)return e({text:"Clipboard not supported",type:"error"}),console.warn("Clipboard not supported"),!1;try{return await navigator.clipboard.writeText(t),n&&e({text:n,type:"success"}),!0}catch(o){return o instanceof Error&&e({text:"".concat(o.name,": ").concat(o.message),type:"error"}),console.warn("Copy failed",o),!1}}},Pr=e=>{let{variant:t="contained",color:n="primary",size:r="medium",ariaLabel:o,children:a,endIcon:i,startIcon:l,fullWidth:s=!1,className:c,disabled:u,onClick:d,onMouseDown:h}=e;return mt("button",{className:Kn()({"vm-button":!0,["vm-button_".concat(t,"_").concat(n)]:!0,["vm-button_".concat(r)]:r,"vm-button_icon":(l||i)&&!a,"vm-button_full-width":s,"vm-button_with-icon":l||i,"vm-button_disabled":u,[c||""]:c}),disabled:u,"aria-label":o,onClick:d,onMouseDown:h,children:mt(pt.FK,{children:[l&&mt("span",{className:"vm-button__start-icon",children:l}),a&&mt("span",{children:a}),i&&mt("span",{className:"vm-button__end-icon",children:i})]})})},Dr=e=>{let{data:n}=e;const r=Tr(),o=(0,t.useMemo)((()=>{const e=n.map((e=>1===Object.keys(e).length?JSON.stringify(e):JSON.stringify(e,null,2))).join(",\n").replace(/^/gm,"".concat(" "));return"[\n".concat(e,"\n]")}),[n]);return mt("div",{className:"vm-json-view",children:[mt("div",{className:"vm-json-view__copy",children:mt(Pr,{variant:"outlined",onClick:async()=>{await r(o,"Formatted JSON has been copied")},children:"Copy JSON"})}),mt("pre",{className:"vm-json-view__code",children:mt("code",{children:o})})]})},Or=(e,n)=>{const[r]=$e(),o=r.get(n)?r.get(n):e,[a,i]=(0,t.useState)(o);return(0,t.useEffect)((()=>{o!==a&&i(o)}),[o]),[a,i]},Rr=()=>{const e=oe(),[n,r]=$e();return{setSearchParamsFromKeys:(0,t.useCallback)((t=>{const o=!!Array.from(n.values()).length;let a=!1;Object.entries(t).forEach((e=>{let[t,r]=e;n.get(t)!=="".concat(r)&&(n.set(t,"".concat(r)),a=!0)})),a&&(o?r(n):e("?".concat(n.toString()),{replace:!0}))}),[n,e])}},Lr=(e,n,r)=>{const o=(0,t.useCallback)((t=>{const o=null===e||void 0===e?void 0:e.current,a=t.target,i=(null===r||void 0===r?void 0:r.current)&&r.current.contains(a);!o||o.contains((null===t||void 0===t?void 0:t.target)||null)||i||n(t)}),[e,n]);Jn("mousedown",o),Jn("touchstart",o)},Ir=e=>{let{children:n,buttonRef:r,placement:o="bottom-left",open:a=!1,onClose:i,offset:l={top:6,left:0},clickOutside:s=!0,fullWidth:c,title:u,disabledFullScreen:d,variant:h}=e;const{isMobile:p}=vr(),f=oe(),m=ne(),[_,g]=(0,t.useState)({width:0,height:0}),[v,y]=(0,t.useState)(!1),b=(0,t.useRef)(null);(0,t.useEffect)((()=>(y(a),!a&&i&&i(),a&&p&&!d&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="auto"})),[a]),(0,t.useEffect)((()=>{var e,t;g({width:(null===b||void 0===b||null===(e=b.current)||void 0===e?void 0:e.clientWidth)||0,height:(null===b||void 0===b||null===(t=b.current)||void 0===t?void 0:t.clientHeight)||0}),y(!1)}),[b]);const w=(0,t.useMemo)((()=>{const e=r.current;if(!e||!v)return{};const t=e.getBoundingClientRect(),n={top:0,left:0,width:"auto"},a="bottom-right"===o||"top-right"===o,i=null===o||void 0===o?void 0:o.includes("top"),s=(null===l||void 0===l?void 0:l.top)||0,u=(null===l||void 0===l?void 0:l.left)||0;n.left=n.left=t.left+u,n.top=t.height+t.top+s,a&&(n.left=t.right-_.width),i&&(n.top=t.top-_.height-s);const{innerWidth:d,innerHeight:h}=window,p=n.top+_.height+20>h,f=n.top-20<0,m=n.left+_.width+20>d,g=n.left-20<0;return p&&(n.top=t.top-_.height-s),f&&(n.top=t.height+t.top+s),m&&(n.left=t.right-_.width-u),g&&(n.left=t.left+u),c&&(n.width="".concat(t.width,"px")),n.top<0&&(n.top=20),n.left<0&&(n.left=20),n}),[r,o,v,n,c]),k=()=>{y(!1),i()};(0,t.useEffect)((()=>{if(!b.current||!v||p&&!d)return;const{right:e,width:t}=b.current.getBoundingClientRect();if(e>window.innerWidth){const e=window.innerWidth-20-t;b.current.style.left=e{v&&p&&!d&&(f(m,{replace:!0}),i())}),[v,p,d,m,i]);return Jn("scroll",k),Jn("popstate",x),Lr(b,(()=>{s&&k()}),r),mt(pt.FK,{children:(v||!_.width)&&t.default.createPortal(mt("div",{className:Kn()({"vm-popper":!0,["vm-popper_".concat(h)]:h,"vm-popper_mobile":p&&!d,"vm-popper_open":(p||Object.keys(w).length)&&v}),ref:b,style:p&&!d?{}:w,children:[(u||p&&!d)&&mt("div",{className:"vm-popper-header",children:[mt("p",{className:"vm-popper-header__title",children:u}),mt(Pr,{variant:"text",color:"dark"===h?"white":"primary",size:"small",onClick:e=>{e.stopPropagation(),i()},ariaLabel:"close",children:mt(fn,{})})]}),n]}),document.body)})},zr=e=>{let{checked:t=!1,disabled:n=!1,label:r,color:o="secondary",onChange:a}=e;return mt("div",{className:Kn()({"vm-checkbox":!0,"vm-checkbox_disabled":n,"vm-checkbox_active":t,["vm-checkbox_".concat(o,"_active")]:t,["vm-checkbox_".concat(o)]:o}),onClick:()=>{n||a(!t)},children:[mt("div",{className:"vm-checkbox-track",children:mt("div",{className:"vm-checkbox-track__thumb",children:mt(Pn,{})})}),r&&mt("span",{className:"vm-checkbox__label",children:r})]})},jr=e=>{let{children:n,title:r,open:o,placement:a="bottom-center",offset:i={top:6,left:0}}=e;const{isMobile:l}=vr(),[s,c]=(0,t.useState)(!1),[u,d]=(0,t.useState)({width:0,height:0}),h=(0,t.useRef)(null),p=(0,t.useRef)(null),f=()=>c(!1);(0,t.useEffect)((()=>{if(p.current&&s)return d({width:p.current.clientWidth,height:p.current.clientHeight}),window.addEventListener("scroll",f),()=>{window.removeEventListener("scroll",f)}}),[s,r]);const m=(0,t.useMemo)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(!t||!s)return{};const n=t.getBoundingClientRect(),r={top:0,left:0},o="bottom-right"===a||"top-right"===a,l="bottom-left"===a||"top-left"===a,c=null===a||void 0===a?void 0:a.includes("top"),d=(null===i||void 0===i?void 0:i.top)||0,p=(null===i||void 0===i?void 0:i.left)||0;r.left=n.left-(u.width-n.width)/2+p,r.top=n.height+n.top+d,o&&(r.left=n.right-u.width),l&&(r.left=n.left+p),c&&(r.top=n.top-u.height-d);const{innerWidth:f,innerHeight:m}=window,_=r.top+u.height+20>m,g=r.top-20<0,v=r.left+u.width+20>f,y=r.left-20<0;return _&&(r.top=n.top-u.height-d),g&&(r.top=n.height+n.top+d),v&&(r.left=n.right-u.width-p),y&&(r.left=n.left+p),r.top<0&&(r.top=20),r.left<0&&(r.left=20),r}),[h,a,s,u]),_=()=>{"boolean"!==typeof o&&c(!0)},g=()=>{c(!1)};return(0,t.useEffect)((()=>{"boolean"===typeof o&&c(o)}),[o]),(0,t.useEffect)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(t)return t.addEventListener("mouseenter",_),t.addEventListener("mouseleave",g),()=>{t.removeEventListener("mouseenter",_),t.removeEventListener("mouseleave",g)}}),[h]),mt(pt.FK,{children:[mt(t.Fragment,{ref:h,children:n}),!l&&s&&t.default.createPortal(mt("div",{className:"vm-tooltip",ref:p,style:m,children:r}),document.body)]})},$r=e=>{let{value:t=!1,disabled:n=!1,label:r,color:o="secondary",fullWidth:a,onChange:i}=e;return mt("div",{className:Kn()({"vm-switch":!0,"vm-switch_full-width":a,"vm-switch_disabled":n,"vm-switch_active":t,["vm-switch_".concat(o,"_active")]:t,["vm-switch_".concat(o)]:o}),onClick:()=>{n||i(!t)},children:[mt("div",{className:"vm-switch-track",children:mt("div",{className:"vm-switch-track__thumb"})}),r&&mt("span",{className:"vm-switch__label",children:r})]})};const Fr=e=>{const[n,r]=(0,t.useState)(!!e),o=(0,t.useCallback)((()=>r(!0)),[]),a=(0,t.useCallback)((()=>r(!1)),[]),i=(0,t.useCallback)((()=>r((e=>!e))),[]);return{value:n,setValue:r,setTrue:o,setFalse:a,toggle:i}},Hr=e=>{let{error:n,warning:r,info:o}=e;const a=(0,t.useRef)(null),[i,l]=(0,t.useState)(!1),[s,c]=(0,t.useState)(!1),u=(0,t.useMemo)((()=>n?"ERROR: ":r?"WARNING: ":""),[n,r]),d="".concat(u).concat(n||r||o),h=()=>{const e=a.current;if(e){const{offsetWidth:t,scrollWidth:n,offsetHeight:r,scrollHeight:o}=e;l(t+1{c(!1),h()}),[a,d]),Jn("resize",h),n||r||o?mt("span",{className:Kn()({"vm-text-field__error":!0,"vm-text-field__warning":r&&!n,"vm-text-field__helper-text":!r&&!n,"vm-text-field__error_overflowed":i,"vm-text-field__error_full":s}),"data-show":!!d,ref:a,onClick:()=>{i&&(c(!0),l(!1))},children:d}):null},Vr=e=>{let{label:n,value:r,type:o="text",error:a="",warning:i="",helperText:l="",placeholder:s,endIcon:c,startIcon:u,disabled:d=!1,autofocus:h=!1,inputmode:p="text",caretPosition:f,onChange:m,onEnter:_,onKeyDown:g,onFocus:v,onBlur:y,onChangeCaret:b}=e;const{isDarkTheme:w}=gt(),{isMobile:k}=vr(),x=(0,t.useRef)(null),S=(0,t.useRef)(null),A=(0,t.useMemo)((()=>"textarea"===o?S:x),[o]),[E,C]=(0,t.useState)([0,0]),M=Kn()({"vm-text-field__input":!0,"vm-text-field__input_error":a,"vm-text-field__input_warning":!a&&i,"vm-text-field__input_icon-start":u,"vm-text-field__input_disabled":d,"vm-text-field__input_textarea":"textarea"===o}),N=e=>{const{selectionStart:t,selectionEnd:n}=e;C([t||0,n||0])},T=e=>{N(e.currentTarget)},P=e=>{g&&g(e);const{key:t,ctrlKey:n,metaKey:r}=e,a="Enter"===t;("textarea"!==o?a:a&&(r||n))&&_&&(e.preventDefault(),_())},D=e=>{N(e.currentTarget)},O=e=>{d||(m&&m(e.currentTarget.value),N(e.currentTarget))},R=()=>{v&&v()},L=()=>{y&&y()},I=e=>{try{A.current&&A.current.setSelectionRange(e[0],e[1])}catch(zd){return zd}};return(0,t.useEffect)((()=>{var e;h&&!k&&(null===A||void 0===A||null===(e=A.current)||void 0===e?void 0:e.focus)&&A.current.focus()}),[A,h]),(0,t.useEffect)((()=>{b&&b(E)}),[E]),(0,t.useEffect)((()=>{I(E)}),[r]),(0,t.useEffect)((()=>{f&&I(f)}),[f]),mt("label",{className:Kn()({"vm-text-field":!0,"vm-text-field_textarea":"textarea"===o,"vm-text-field_dark":w}),"data-replicated-value":r,children:[u&&mt("div",{className:"vm-text-field__icon-start",children:u}),c&&mt("div",{className:"vm-text-field__icon-end",children:c}),"textarea"===o?mt("textarea",{className:M,disabled:d,ref:S,value:r,rows:1,inputMode:p,placeholder:s,autoCapitalize:"none",onInput:O,onKeyDown:P,onKeyUp:D,onFocus:R,onBlur:L,onMouseUp:T}):mt("input",{className:M,disabled:d,ref:x,value:r,type:o,placeholder:s,inputMode:p,autoCapitalize:"none",onInput:O,onKeyDown:P,onKeyUp:D,onFocus:R,onBlur:L,onMouseUp:T}),n&&mt("span",{className:"vm-text-field__label",children:n}),mt(Hr,{error:a,warning:i,info:l})]})},Br="Table settings",Ur=e=>{let{columns:n,defaultColumns:r=[],tableCompact:o,onChangeColumns:a,toggleTableCompact:i}=e;const{isMobile:l}=vr(),s=(0,t.useRef)(null),{value:c,toggle:u,setFalse:d}=Fr(!1),{value:h,toggle:p}=Fr(!1),[f,m]=(0,t.useState)(""),[_,g]=(0,t.useState)(-1),v=(0,t.useMemo)((()=>f?n.filter((e=>e.includes(f))):n),[n,f]),y=(0,t.useMemo)((()=>v.every((e=>r.includes(e)))),[r,v]),b=(0,t.useMemo)((()=>!n.length),[n]),w=e=>{a(r.includes(e)?r.filter((t=>t!==e)):[...r,e])};return(0,t.useEffect)((()=>{((e,t)=>e.length===t.length&&e.every(((e,n)=>e===t[n])))(n,r)||a(n)}),[n]),mt("div",{className:"vm-table-settings",children:[mt(jr,{title:Br,children:mt("div",{ref:s,children:mt(Pr,{variant:"text",startIcon:mt(pn,{}),onClick:u,disabled:b,ariaLabel:Br})})}),mt(Ir,{open:c,onClose:d,placement:"bottom-right",buttonRef:s,title:Br,children:mt("div",{className:Kn()({"vm-table-settings-popper":!0,"vm-table-settings-popper_mobile":l}),children:[mt("div",{className:"vm-table-settings-popper-list vm-table-settings-popper-list_first",children:mt($r,{label:"Compact view",value:o,onChange:i})}),mt("div",{className:"vm-table-settings-popper-list",children:mt("div",{children:[mt("div",{className:"vm-table-settings-popper-list-header",children:[mt("h3",{className:"vm-table-settings-popper-list-header__title",children:"Display columns"}),mt(jr,{title:"search column",children:mt(Pr,{color:"primary",variant:"text",onClick:p,startIcon:mt(qn,{}),ariaLabel:"reset columns"})})]}),h&&mt(Vr,{placeholder:"search column",startIcon:mt(qn,{}),value:f,onChange:m,onBlur:()=>{g(-1)},onKeyDown:e=>{const t="ArrowUp"===e.key,n="ArrowDown"===e.key,r="Enter"===e.key;(n||t||r)&&e.preventDefault(),n?g((e=>e+1>v.length-1?e:e+1)):t?g((e=>e-1<0?e:e-1)):r&&w(v[_])},type:"search"}),!v.length&&mt("p",{className:"vm-table-settings-popper-list__no-found",children:"No columns found"}),mt("div",{className:"vm-table-settings-popper-list-header",children:!!v.length&&mt("div",{className:"vm-table-settings-popper-list__item vm-table-settings-popper-list__item_check_all",children:mt(zr,{checked:y,onChange:()=>{a(y?r.filter((e=>!v.includes(e))):v)},label:y?"Uncheck all":"Check all",disabled:o})})}),mt("div",{className:"vm-table-settings-popper-list-columns",children:v.map(((e,t)=>{return mt("div",{className:Kn()({"vm-table-settings-popper-list__item":!0,"vm-table-settings-popper-list__item_focus":t===_}),children:mt(zr,{checked:r.includes(e),onChange:(n=e,()=>{w(n)}),label:e,disabled:o})},e);var n}))})]})})]})})]})},Yr=["date","timestamp","time"];function Wr(e,t,n){const r=e[n],a=t[n],i=Yr.includes("".concat(n))?o()("".concat(r)).unix():r,l=Yr.includes("".concat(n))?o()("".concat(a)).unix():a;return li?1:0}const qr=e=>{let{rows:n,columns:r,defaultOrderBy:o,defaultOrderDir:a,copyToClipboard:i,paginationOffset:l}=e;const[s,c]=(0,t.useState)(o),[u,d]=(0,t.useState)(a||"desc"),[h,p]=(0,t.useState)(null),f=(0,t.useMemo)((()=>{const{startIndex:e,endIndex:t}=l;return function(e,t){const n=e.map(((e,t)=>[e,t]));return n.sort(((e,n)=>{const r=t(e[0],n[0]);return 0!==r?r:e[1]-n[1]})),n.map((e=>e[0]))}(n,function(e,t){return"desc"===e?(e,n)=>Wr(e,n,t):(e,n)=>-Wr(e,n,t)}(u,s)).slice(e,t)}),[n,s,u,l]),m=(e,t)=>async()=>{if(h!==t)try{await navigator.clipboard.writeText(String(e)),p(t)}catch(zd){console.error(zd)}};return(0,t.useEffect)((()=>{if(null===h)return;const e=setTimeout((()=>p(null)),2e3);return()=>clearTimeout(e)}),[h]),mt("table",{className:"vm-table",children:[mt("thead",{className:"vm-table-header",children:mt("tr",{className:"vm-table__row vm-table__row_header",children:[r.map((e=>{return mt("th",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:(t=e.key,()=>{d((e=>"asc"===e&&s===t?"desc":"asc")),c(t)}),children:mt("div",{className:"vm-table-cell__content",children:[mt("div",{children:String(e.title||e.key)}),mt("div",{className:Kn()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":s===e.key,"vm-table__sort-icon_desc":"desc"===u&&s===e.key}),children:mt(kn,{})})]})},String(e.key));var t})),i&&mt("th",{className:"vm-table-cell vm-table-cell_header"})]})}),mt("tbody",{className:"vm-table-body",children:f.map(((e,t)=>mt("tr",{className:"vm-table__row",children:[r.map((t=>mt("td",{className:Kn()({"vm-table-cell":!0,["".concat(t.className)]:t.className}),children:e[t.key]||"-"},String(t.key)))),i&&mt("td",{className:"vm-table-cell vm-table-cell_right",children:e[i]&&mt("div",{className:"vm-table-cell__content",children:mt(jr,{title:h===t?"Copied":"Copy row",children:mt(Pr,{variant:"text",color:h===t?"success":"gray",size:"small",startIcon:mt(h===t?Pn:On,{}),onClick:m(e[i],t),ariaLabel:"copy row"})})})})]},t)))})]})},Zr=e=>{let{logs:n,displayColumns:r,tableCompact:o,columns:a}=e;const i=e=>{switch(e){case"_time":return"vm-table-cell_logs-time";case"_vmui_data":return"vm-table-cell_logs vm-table-cell_pre";default:return"vm-table-cell_logs"}},l=(0,t.useMemo)((()=>o?[{key:"_vmui_data",title:"Data",className:i("_vmui_data")}]:a.map((e=>({key:e,title:e,className:i(e)})))),[o,a]),s=(0,t.useMemo)((()=>o?l:null!==r&&void 0!==r&&r.length?l.filter((e=>r.includes(e.key))):[]),[l,r,o]);return mt(pt.FK,{children:mt(qr,{rows:n,columns:s,defaultOrderBy:"_time",defaultOrderDir:"desc",copyToClipboard:"_vmui_data",paginationOffset:{startIndex:0,endIndex:1/0}})})},Kr=e=>{let{defaultExpanded:n=!1,onChange:r,title:o,children:a}=e;const[i,l]=(0,t.useState)(n);return(0,t.useEffect)((()=>{r&&r(i)}),[i]),mt(pt.FK,{children:[mt("header",{className:"vm-accordion-header ".concat(i&&"vm-accordion-header_open"),onClick:()=>{l((e=>!e))},children:[o,mt("div",{className:"vm-accordion-header__arrow ".concat(i&&"vm-accordion-header__arrow_open"),children:mt(wn,{})})]}),i&&mt("section",{className:"vm-accordion-section",children:a},"content")]})},Gr=e=>{let{log:n}=e;const{value:r,toggle:o}=Fr(!1),{markdownParsing:a}=mr(),i=["_msg","_vmui_time","_vmui_data","_vmui_markdown"],l=Object.entries(n).filter((e=>{let[t]=e;return!i.includes(t)})),s=l.length>0,c=(0,t.useMemo)((()=>{if(n._msg)return n._msg;if(!s)return;const e=l.reduce(((e,t)=>{let[n,r]=t;return e[n]=r,e}),{});return JSON.stringify(e)}),[n,l,s]),u=Tr(),[d,h]=(0,t.useState)(null);return(0,t.useEffect)((()=>{if(null===d)return;const e=setTimeout((()=>h(null)),2e3);return()=>clearTimeout(e)}),[d]),mt("div",{className:"vm-group-logs-row",children:[mt("div",{className:"vm-group-logs-row-content",onClick:o,children:[s&&mt("div",{className:Kn()({"vm-group-logs-row-content__arrow":!0,"vm-group-logs-row-content__arrow_open":r}),children:mt(wn,{})}),mt("div",{className:Kn()({"vm-group-logs-row-content__time":!0,"vm-group-logs-row-content__time_missing":!n._vmui_time}),children:n._vmui_time||"timestamp missing"}),mt("div",{className:Kn()({"vm-group-logs-row-content__msg":!0,"vm-group-logs-row-content__msg_empty-msg":!n._msg,"vm-group-logs-row-content__msg_missing":!c}),dangerouslySetInnerHTML:a&&n._vmui_markdown?{__html:n._vmui_markdown}:void 0,children:c||"-"})]},"".concat(n._msg).concat(n._time)),s&&r&&mt("div",{className:"vm-group-logs-row-fields",children:mt("table",{children:mt("tbody",{children:l.map(((e,t)=>{let[n,r]=e;return mt("tr",{className:"vm-group-logs-row-fields-item",children:[mt("td",{className:"vm-group-logs-row-fields-item-controls",children:mt("div",{className:"vm-group-logs-row-fields-item-controls__wrapper",children:mt(jr,{title:d===t?"Copied":"Copy to clipboard",children:mt(Pr,{variant:"text",color:"gray",size:"small",startIcon:mt(On,{}),onClick:(o="".concat(n,': "').concat(r,'"'),a=t,async()=>{if(d!==a)try{await u(o),h(a)}catch(zd){console.error(zd)}}),ariaLabel:"copy to clipboard"})})})}),mt("td",{className:"vm-group-logs-row-fields-item__key",children:n}),mt("td",{className:"vm-group-logs-row-fields-item__value",children:r})]},n);var o,a}))})})})]})},Qr="No Grouping",Jr=e=>{let{logs:n,settingsRef:r}=e;const{isDarkTheme:o}=gt(),a=Tr(),[i,l]=$e(),[s,c]=(0,t.useState)([]),[u,d]=Or("_stream","groupBy"),[h,p]=(0,t.useState)(null),[f,m]=(0,t.useState)(""),_=(0,t.useRef)(null),{value:g,toggle:v,setFalse:y}=Fr(!1),b=(0,t.useMemo)((()=>s.every(Boolean)),[s]),w=(0,t.useMemo)((()=>{const e=["_msg","_time","_vmui_time","_vmui_data","_vmui_markdown"],t=Array.from(new Set(n.map((e=>Object.keys(e))).flat())),r=[Qr,...t.filter((t=>!e.includes(t)))];if(!f)return r;try{const e=new RegExp(f,"i");return r.filter((t=>e.test(t))).sort(((t,n)=>{var r,o;return((null===(r=t.match(e))||void 0===r?void 0:r.index)||0)-((null===(o=n.match(e))||void 0===o?void 0:o.index)||0)}))}catch(zd){return[]}}),[n,f]),k=(0,t.useMemo)((()=>function(e,t){const n=e.reduce(((e,n)=>{const r=t.map((e=>"".concat(e,": ").concat(n[e]||"-"))).join("|");return(e[r]=e[r]||[]).push(n),e}),{});return Object.entries(n).map((e=>{let[t,n]=e;return{keys:t.split("|"),values:n}}))}(n,[u]).map((e=>{var t;const n=(null===(t=e.values[0])||void 0===t?void 0:t[u])||"",r=/^{.+}$/.test(n)&&n.slice(1,-1).match(/(\\.|[^,])+/g)||[n];return{...e,pairs:r.filter(Boolean)}}))),[n,u]),x=(0,t.useCallback)((()=>{c(new Array(k.length).fill(!b))}),[b]),S=e=>t=>{c((n=>{const r=[...n];return r[e]=t,r}))};return(0,t.useEffect)((()=>{if(null===h)return;const e=setTimeout((()=>p(null)),2e3);return()=>clearTimeout(e)}),[h]),(0,t.useEffect)((()=>{c(new Array(k.length).fill(!0))}),[k]),mt(pt.FK,{children:[mt("div",{className:"vm-group-logs",children:k.map(((e,t)=>mt("div",{className:"vm-group-logs-section",children:mt(Kr,{defaultExpanded:s[t],onChange:S(t),title:u!==Qr&&mt("div",{className:"vm-group-logs-section-keys",children:[mt("span",{className:"vm-group-logs-section-keys__title",children:["Group by ",mt("code",{children:u}),":"]}),e.pairs.map((t=>{return mt(jr,{title:h===t?"Copied":"Copy to clipboard",placement:"top-center",children:mt("div",{className:Kn()({"vm-group-logs-section-keys__pair":!0,"vm-group-logs-section-keys__pair_dark":o}),onClick:(n=t,async e=>{e.stopPropagation();const t=/(.+)?=(".+")/.test(n)?"".concat(n.replace(/=/,": ")):"".concat(u,': "').concat(n,'"');await a(t)&&p(n)}),children:t})},"".concat(e.keys.join(""),"_").concat(t));var n})),mt("span",{className:"vm-group-logs-section-keys__count",children:[e.values.length," entries"]})]}),children:mt("div",{className:"vm-group-logs-section-rows",children:e.values.map((e=>mt(Gr,{log:e},"".concat(e._msg).concat(e._time))))})},String(s[t]))},e.keys.join(""))))}),r.current&&t.default.createPortal(mt("div",{className:"vm-group-logs-header",children:[mt(jr,{title:b?"Collapse All":"Expand All",children:mt(Pr,{variant:"text",startIcon:mt(b?Wn:Yn,{}),onClick:x,ariaLabel:b?"Collapse All":"Expand All"})}),mt(jr,{title:"Group by",children:mt("div",{ref:_,children:mt(Pr,{variant:"text",startIcon:mt(zn,{}),onClick:v,ariaLabel:"Group by"})})}),mt(Ir,{open:g,placement:"bottom-right",onClose:y,buttonRef:_,children:mt("div",{className:"vm-list vm-group-logs-header-keys",children:[mt("div",{className:"vm-group-logs-header-keys__search",children:mt(Vr,{label:"Search key",value:f,onChange:m,type:"search"})}),w.map((e=>{return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_active":e===u}),onClick:(t=e,()=>{d(t),i.set("groupBy",t),l(i),y()}),children:e},e);var t}))]})})]}),r.current)]})};function Xr(e){return Xr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xr(e)}function eo(e){var t=function(e,t){if("object"!=Xr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Xr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Xr(t)?t:t+""}function to(e,t,n){return(t=eo(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function no(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let ro={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function oo(e){ro=e}const ao=/[&<>"']/,io=new RegExp(ao.source,"g"),lo=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,so=new RegExp(lo.source,"g"),co={"&":"&","<":"<",">":">",'"':""","'":"'"},uo=e=>co[e];function ho(e,t){if(t){if(ao.test(e))return e.replace(io,uo)}else if(lo.test(e))return e.replace(so,uo);return e}const po=/(^|[^\[])\^/g;function fo(e,t){let n="string"===typeof e?e:e.source;t=t||"";const r={replace:(e,t)=>{let o="string"===typeof t?t:t.source;return o=o.replace(po,"$1"),n=n.replace(e,o),r},getRegex:()=>new RegExp(n,t)};return r}function mo(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch{return null}return e}const _o={exec:()=>null};function go(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"})).split(/ \|/);let r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^(?: {1,4}| {0,3}\t)/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:vo(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=vo(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:vo(t[0],"\n")}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=vo(t[0],"\n").split("\n"),n="",r="";const o=[];for(;e.length>0;){let t=!1;const a=[];let i;for(i=0;i/.test(e[i]))a.push(e[i]),t=!0;else{if(t)break;a.push(e[i])}e=e.slice(i);const l=a.join("\n"),s=l.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1").replace(/^ {0,3}>[ \t]?/gm,"");n=n?"".concat(n,"\n").concat(l):l,r=r?"".concat(r,"\n").concat(s):s;const c=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(s,o,!0),this.lexer.state.top=c,0===e.length)break;const u=o[o.length-1];if("code"===(null===u||void 0===u?void 0:u.type))break;if("blockquote"===(null===u||void 0===u?void 0:u.type)){const t=u,a=t.raw+"\n"+e.join("\n"),i=this.blockquote(a);o[o.length-1]=i,n=n.substring(0,n.length-t.raw.length)+i.raw,r=r.substring(0,r.length-t.text.length)+i.text;break}if("list"!==(null===u||void 0===u?void 0:u.type));else{const t=u,a=t.raw+"\n"+e.join("\n"),i=this.list(a);o[o.length-1]=i,n=n.substring(0,n.length-u.raw.length)+i.raw,r=r.substring(0,r.length-t.raw.length)+i.raw,e=a.substring(o[o.length-1].raw.length).split("\n")}}return{type:"blockquote",raw:n,tokens:o,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const r=n.length>1,o={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?"\\d{1,9}\\".concat(n.slice(-1)):"\\".concat(n),this.options.pedantic&&(n=r?n:"[*+-]");const a=new RegExp("^( {0,3}".concat(n,")((?:[\t ][^\\n]*)?(?:\\n|$))"));let i=!1;for(;e;){let n=!1,r="",l="";if(!(t=a.exec(e)))break;if(this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let s=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],u=!s.trim(),d=0;if(this.options.pedantic?(d=2,l=s.trimStart()):u?d=t[1].length+1:(d=t[2].search(/[^ ]/),d=d>4?1:d,l=s.slice(d),d+=t[1].length),u&&/^[ \t]*$/.test(c)&&(r+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp("^ {0,".concat(Math.min(3,d-1),"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))")),n=new RegExp("^ {0,".concat(Math.min(3,d-1),"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)")),o=new RegExp("^ {0,".concat(Math.min(3,d-1),"}(?:```|~~~)")),a=new RegExp("^ {0,".concat(Math.min(3,d-1),"}#")),i=new RegExp("^ {0,".concat(Math.min(3,d-1),"}<[a-z].*>"),"i");for(;e;){const h=e.split("\n",1)[0];let p;if(c=h,this.options.pedantic?(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," "),p=c):p=c.replace(/\t/g," "),o.test(c))break;if(a.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(c))break;if(p.search(/[^ ]/)>=d||!c.trim())l+="\n"+p.slice(d);else{if(u)break;if(s.replace(/\t/g," ").search(/[^ ]/)>=4)break;if(o.test(s))break;if(a.test(s))break;if(n.test(s))break;l+="\n"+c}u||c.trim()||(u=!0),r+=h+"\n",e=e.substring(h.length+1),s=p.slice(d)}}o.loose||(i?o.loose=!0:/\n[ \t]*\n[ \t]*$/.test(r)&&(i=!0));let h,p=null;this.options.gfm&&(p=/^\[[ xX]\] /.exec(l),p&&(h="[ ] "!==p[0],l=l.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:r,task:!!p,checked:h,loose:!1,text:l,tokens:[]}),o.raw+=r}o.items[o.items.length-1].raw=o.items[o.items.length-1].raw.trimEnd(),o.items[o.items.length-1].text=o.items[o.items.length-1].text.trimEnd(),o.raw=o.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));o.loose=n}if(o.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:r}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=go(t[1]),r=t[2].replace(/^\||\| *$/g,"").split("|"),o=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],a={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(const e of r)/^ *-+: *$/.test(e)?a.align.push("right"):/^ *:-+: *$/.test(e)?a.align.push("center"):/^ *:-+ *$/.test(e)?a.align.push("left"):a.align.push(null);for(let e=0;e({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]}))));return a}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:ho(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^
    /i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=vo(e.slice(0,-1),"\\");if((e.length-t.length)%2===0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let r=0;r-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),yo(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:r?r.replace(this.rules.inline.anyPunctuation,"$1"):r},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return yo(n,e,n[0],this.lexer)}}emStrong(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this.rules.inline.emStrongLDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...r[0]].length-1;let o,a,i=n,l=0;const s="*"===r[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(s.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=s.exec(t));){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){i+=a;continue}if((r[5]||r[6])&&n%3&&!((n+a)%3)){l+=a;continue}if(i-=a,i>0)continue;a=Math.min(a,a+i+l);const t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){const e=s.slice(1,-1);return{type:"em",raw:s,text:e,tokens:this.lexer.inlineTokens(e)}}const c=s.slice(2,-2);return{type:"strong",raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=ho(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=ho(t[1]),n="mailto:"+e):(e=ho(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,o;if("@"===t[2])e=ho(t[0]),o="mailto:"+e;else{let a;do{var n,r;a=t[0],t[0]=null!==(n=null===(r=this.rules.inline._backpedal.exec(t[0]))||void 0===r?void 0:r[0])&&void 0!==n?n:""}while(a!==t[0]);e=ho(t[0]),o="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:o,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:ho(t[0]),{type:"text",raw:t[0],text:e}}}}const wo=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ko=/(?:[*+-]|\d{1,9}[.)])/,xo=fo(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,ko).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),So=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Ao=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Eo=fo(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Ao).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Co=fo(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ko).getRegex(),Mo="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",No=/|$))/,To=fo("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",No).replace("tag",Mo).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Po=fo(So).replace("hr",wo).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Mo).getRegex(),Do={blockquote:fo(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Po).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:Eo,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:wo,html:To,lheading:xo,list:Co,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:Po,table:_o,text:/^[^\n]+/},Oo=fo("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",wo).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Mo).getRegex(),Ro={...Do,table:Oo,paragraph:fo(So).replace("hr",wo).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Oo).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Mo).getRegex()},Lo={...Do,html:fo("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",No).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:_o,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:fo(So).replace("hr",wo).replace("heading"," *#{1,6} *[^\n]").replace("lheading",xo).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Io=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,zo=/^( {2,}|\\)\n(?!\s*$)/,jo="\\p{P}\\p{S}",$o=fo(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,jo).getRegex(),Fo=fo(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,jo).getRegex(),Ho=fo("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,jo).getRegex(),Vo=fo("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,jo).getRegex(),Bo=fo(/\\([punct])/,"gu").replace(/punct/g,jo).getRegex(),Uo=fo(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Yo=fo(No).replace("(?:--\x3e|$)","--\x3e").getRegex(),Wo=fo("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Yo).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),qo=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Zo=fo(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",qo).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ko=fo(/^!?\[(label)\]\[(ref)\]/).replace("label",qo).replace("ref",Ao).getRegex(),Go=fo(/^!?\[(ref)\](?:\[\])?/).replace("ref",Ao).getRegex(),Qo={_backpedal:_o,anyPunctuation:Bo,autolink:Uo,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:zo,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:_o,emStrongLDelim:Fo,emStrongRDelimAst:Ho,emStrongRDelimUnd:Vo,escape:Io,link:Zo,nolink:Go,punctuation:$o,reflink:Ko,reflinkSearch:fo("reflink|nolink(?!\\()","g").replace("reflink",Ko).replace("nolink",Go).getRegex(),tag:Wo,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(this.options.pedantic&&(e=e.replace(/\t/g," ").replace(/^ +$/gm,""));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((n=>!!(t=n.call({lexer:this},e,o))&&(e=e.substring(t.raw.length),o.push(t),!0)))))if(t=this.tokenizer.space(e))e=e.substring(t.raw.length),1===t.raw.length&&o.length>0?o[o.length-1].raw+="\n":o.push(t);else if(t=this.tokenizer.code(e))e=e.substring(t.raw.length),n=o[o.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?o.push(t):(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.fences(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.heading(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.hr(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.blockquote(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.list(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.html(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.def(e))e=e.substring(t.raw.length),n=o[o.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(n.raw+="\n"+t.raw,n.text+="\n"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.table(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.lheading(e))e=e.substring(t.raw.length),o.push(t);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let o;this.options.extensions.startBlock.forEach((e=>{o=e.call({lexer:this},n),"number"===typeof o&&o>=0&&(t=Math.min(t,o))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}var i;if(this.state.top&&(t=this.tokenizer.paragraph(r)))n=o[o.length-1],a&&"paragraph"===(null===(i=n)||void 0===i?void 0:i.type)?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):o.push(t),a=r.length!==e.length,e=e.substring(t.raw.length);else if(t=this.tokenizer.text(e))e=e.substring(t.raw.length),n=o[o.length-1],n&&"text"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):o.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,o}inline(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e){let t,n,r,o,a,i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],s=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(o=this.tokenizer.rules.inline.reflinkSearch.exec(s));)e.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(o=this.tokenizer.rules.inline.blockSkip.exec(s));)s=s.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(o=this.tokenizer.rules.inline.anyPunctuation.exec(s));)s=s.slice(0,o.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(a||(i=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((n=>!!(t=n.call({lexer:this},e,l))&&(e=e.substring(t.raw.length),l.push(t),!0)))))if(t=this.tokenizer.escape(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.tag(e))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.link(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.emStrong(e,s,i))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.codespan(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.br(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.del(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.autolink(e))e=e.substring(t.raw.length),l.push(t);else if(this.state.inLink||!(t=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let o;this.options.extensions.startInline.forEach((e=>{o=e.call({lexer:this},n),"number"===typeof o&&o>=0&&(t=Math.min(t,o))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(t=this.tokenizer.inlineText(r))e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(i=t.raw.slice(-1)),a=!0,n=l[l.length-1],n&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(t.raw.length),l.push(t);return l}}class oa{constructor(e){to(this,"options",void 0),to(this,"parser",void 0),this.options=e||ro}space(e){return""}code(e){var t;let{text:n,lang:r,escaped:o}=e;const a=null===(t=(r||"").match(/^\S*/))||void 0===t?void 0:t[0],i=n.replace(/\n$/,"")+"\n";return a?'
    '+(o?i:ho(i,!0))+"
    \n":"
    "+(o?i:ho(i,!0))+"
    \n"}blockquote(e){let{tokens:t}=e;const n=this.parser.parse(t);return"
    \n".concat(n,"
    \n")}html(e){let{text:t}=e;return t}heading(e){let{tokens:t,depth:n}=e;return"").concat(this.parser.parseInline(t),"\n")}hr(e){return"
    \n"}list(e){const t=e.ordered,n=e.start;let r="";for(let a=0;a\n"+r+"\n"}listitem(e){let t="";if(e.task){const n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&"paragraph"===e.tokens[0].type?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&"text"===e.tokens[0].tokens[0].type&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),"
  • ".concat(t,"
  • \n")}checkbox(e){let{checked:t}=e;return"'}paragraph(e){let{tokens:t}=e;return"

    ".concat(this.parser.parseInline(t),"

    \n")}table(e){let t="",n="";for(let o=0;o")),"\n\n"+t+"\n"+r+"
    \n"}tablerow(e){let{text:t}=e;return"\n".concat(t,"\n")}tablecell(e){const t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?"<".concat(n,' align="').concat(e.align,'">'):"<".concat(n,">"))+t+"\n")}strong(e){let{tokens:t}=e;return"".concat(this.parser.parseInline(t),"")}em(e){let{tokens:t}=e;return"".concat(this.parser.parseInline(t),"")}codespan(e){let{text:t}=e;return"".concat(t,"")}br(e){return"
    "}del(e){let{tokens:t}=e;return"".concat(this.parser.parseInline(t),"")}link(e){let{href:t,title:n,tokens:r}=e;const o=this.parser.parseInline(r),a=mo(t);if(null===a)return o;t=a;let i='
    ",i}image(e){let{href:t,title:n,text:r}=e;const o=mo(t);if(null===o)return r;t=o;let a='').concat(r,'1&&void 0!==arguments[1])||arguments[1],n="";for(let r=0;r{const o=e[r].flat(1/0);n=n.concat(this.walkTokens(o,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(){const e=this.defaults.extensions||{renderers:{},childTokens:{}};for(var t=arguments.length,n=new Array(t),r=0;r{const n={...t};if(n.async=this.defaults.async||n.async||!1,t.extensions&&(t.extensions.forEach((t=>{if(!t.name)throw new Error("extension name required");if("renderer"in t){const n=e.renderers[t.name];e.renderers[t.name]=n?function(){for(var e=arguments.length,r=new Array(e),o=0;o{if(this.defaults.async)return Promise.resolve(o.call(e,t)).then((t=>a.call(e,t)));const n=o.call(e,t);return a.call(e,n)}:e[r]=function(){for(var t=arguments.length,n=new Array(t),r=0;r{const r={...n},o={...this.defaults,...r},a=this.onError(!!o.silent,!!o.async);if(!0===this.defaults.async&&!1===r.async)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if("undefined"===typeof t||null===t)return a(new Error("marked(): input parameter is undefined or null"));if("string"!==typeof t)return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));o.hooks&&(o.hooks.options=o,o.hooks.block=e);const i=o.hooks?o.hooks.provideLexer():e?ra.lex:ra.lexInline,l=o.hooks?o.hooks.provideParser():e?ia.parse:ia.parseInline;if(o.async)return Promise.resolve(o.hooks?o.hooks.preprocess(t):t).then((e=>i(e,o))).then((e=>o.hooks?o.hooks.processAllTokens(e):e)).then((e=>o.walkTokens?Promise.all(this.walkTokens(e,o.walkTokens)).then((()=>e)):e)).then((e=>l(e,o))).then((e=>o.hooks?o.hooks.postprocess(e):e)).catch(a);try{o.hooks&&(t=o.hooks.preprocess(t));let e=i(t,o);o.hooks&&(e=o.hooks.processAllTokens(e)),o.walkTokens&&this.walkTokens(e,o.walkTokens);let n=l(e,o);return o.hooks&&(n=o.hooks.postprocess(n)),n}catch(zd){return a(zd)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+ho(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function ca(e,t){return sa.parse(e,t)}ca.options=ca.setOptions=function(e){return sa.setOptions(e),ca.defaults=sa.defaults,oo(ca.defaults),ca},ca.getDefaults=no,ca.defaults=ro,ca.use=function(){return sa.use(...arguments),ca.defaults=sa.defaults,oo(ca.defaults),ca},ca.walkTokens=function(e,t){return sa.walkTokens(e,t)},ca.parseInline=sa.parseInline,ca.Parser=ia,ca.parser=ia.parse,ca.Renderer=oa,ca.TextRenderer=aa,ca.Lexer=ra,ca.lexer=ra.lex,ca.Tokenizer=bo,ca.Hooks=la,ca.parse=ca;ca.options,ca.setOptions,ca.use,ca.walkTokens,ca.parseInline,ia.parse,ra.lex;var ua=function(e){return e.group="group",e.table="table",e.json="json",e}(ua||{});const da=[{label:"Group",value:ua.group,icon:mt(Fn,{})},{label:"Table",value:ua.table,icon:mt(Nn,{})},{label:"JSON",value:ua.json,icon:mt(Tn,{})}],ha=e=>{let{data:n}=e;const{isMobile:r}=vr(),{timezone:a}=Gt(),{setSearchParamsFromKeys:i}=Rr(),l=(0,t.useRef)(null),[s,c]=Or(ua.group,"view"),[u,d]=(0,t.useState)([]),{value:h,toggle:p}=Fr(!1),f=(0,t.useMemo)((()=>n.map((e=>({...e,_vmui_time:e._time?o()(e._time).tz().format("".concat(wt,".SSS")):"",_vmui_data:JSON.stringify(e,null,2),_vmui_markdown:e._msg?ca(e._msg.replace(/```/g,"\n```\n")):""})))),[n,a]),m=(0,t.useMemo)((()=>{if(null===f||void 0===f||!f.length)return[];const e=["_vmui_data","_vmui_time","_vmui_markdown"],t=new Set;for(const n of f)for(const e in n)t.add(e);return Array.from(t).filter((t=>!e.includes(t)))}),[f]);return mt("div",{className:Kn()({"vm-explore-logs-body":!0,"vm-block":!0,"vm-block_mobile":r}),children:[mt("div",{className:Kn()({"vm-explore-logs-body-header":!0,"vm-section-header":!0,"vm-explore-logs-body-header_mobile":r}),children:[mt("div",{className:"vm-section-header__tabs",children:[mt(er,{activeItem:String(s),items:da,onChange:e=>{c(e),i({view:e})}}),mt("div",{className:"vm-explore-logs-body-header__log-info",children:["Total logs returned: ",mt("b",{children:n.length})]})]}),s===ua.table&&mt("div",{className:"vm-explore-logs-body-header__settings",children:mt(Ur,{columns:m,defaultColumns:u,onChangeColumns:d,tableCompact:h,toggleTableCompact:p})}),s===ua.group&&mt("div",{className:"vm-explore-logs-body-header__settings",ref:l})]}),mt("div",{className:Kn()({"vm-explore-logs-body__table":!0,"vm-explore-logs-body__table_mobile":r}),children:[!n.length&&mt("div",{className:"vm-explore-logs-body__empty",children:"No logs found"}),!!n.length&&mt(pt.FK,{children:[s===ua.table&&mt(Zr,{logs:f,displayColumns:u,tableCompact:h,columns:m}),s===ua.group&&mt(Jr,{logs:f,columns:m,settingsRef:l}),s===ua.json&&mt(Dr,{data:n})]})]})]})},pa=(e,n,r)=>{const[a]=$e(),[i,l]=(0,t.useState)([]),[s,c]=(0,t.useState)([]),[u,d]=(0,t.useState)(),h=(0,t.useRef)(new AbortController),p=(0,t.useMemo)((()=>(e=>"".concat(e,"/select/logsql/query"))(e)),[e]),f=e=>{try{return JSON.parse(e)}catch(zd){return null}},m=(0,t.useCallback)((async e=>{h.current.abort(),h.current=new AbortController;const{signal:t}=h.current,i=Date.now();c((e=>({...e,[i]:!0}))),d(void 0);try{const s=((e,t,n,r)=>({signal:r,method:"POST",headers:{Accept:"application/stream+json",AccountID:a.get("accountID")||"0",ProjectID:a.get("projectID")||"0"},body:new URLSearchParams({query:e.trim(),limit:"".concat(n),start:o()(1e3*t.start).tz().toISOString(),end:o()(1e3*t.end).tz().toISOString()})}))(n,e,r,t),u=await fetch(p,s),h=await u.text();if(!u.ok||!u.body)return d(h),l([]),c((e=>({...e,[i]:!1}))),!1;const m=h.split("\n").filter((e=>e)).slice(0,r).map(f).filter((e=>e));return l(m),c((e=>({...e,[i]:!1}))),!0}catch(zd){return c((e=>({...e,[i]:!1}))),zd instanceof Error&&"AbortError"!==zd.name&&(d(String(zd)),console.error(zd),l([])),!1}}),[p,n,r,a]);return{logs:i,isLoading:Object.values(s).some((e=>e)),error:u,fetchLogs:m}},fa=e=>{let{containerStyles:t,message:n}=e;const{isDarkTheme:r}=gt();return mt("div",{className:Kn()({"vm-spinner":!0,"vm-spinner_dark":r}),style:t,children:[mt("div",{className:"half-circle-spinner",children:[mt("div",{className:"circle circle-1"}),mt("div",{className:"circle circle-2"})]}),n&&mt("div",{className:"vm-spinner__message",children:n})]})};var ma=function(e){return e[e.mouse=0]="mouse",e[e.keyboard=1]="keyboard",e}(ma||{});const _a=e=>{var n;let{value:r,options:o,anchor:a,disabled:i,minLength:l=2,fullWidth:s,selected:c,noOptionsText:u,label:d,disabledFullScreen:h,offset:p,maxDisplayResults:f,loading:m,onSelect:_,onOpenAutocomplete:g,onFoundOptions:v,onChangeWrapperRef:y}=e;const{isMobile:b}=vr(),w=(0,t.useRef)(null),[k,x]=(0,t.useState)({index:-1}),[S,A]=(0,t.useState)(""),[E,C]=(0,t.useState)(0),{value:M,setValue:N,setFalse:T}=Fr(!1),P=(0,t.useMemo)((()=>{if(!M)return[];try{const e=new RegExp(String(r.trim()),"i"),t=o.filter((t=>e.test(t.value))).sort(((t,n)=>{var o,a;return t.value.toLowerCase()===r.trim().toLowerCase()?-1:n.value.toLowerCase()===r.trim().toLowerCase()?1:((null===(o=t.value.match(e))||void 0===o?void 0:o.index)||0)-((null===(a=n.value.match(e))||void 0===a?void 0:a.index)||0)}));return C(t.length),A(t.length>Number(null===f||void 0===f?void 0:f.limit)&&(null===f||void 0===f?void 0:f.message)||""),null!==f&&void 0!==f&&f.limit?t.slice(0,f.limit):t}catch(zd){return[]}}),[M,o,r]),D=(0,t.useMemo)((()=>{var e;return 1===P.length&&(null===(e=P[0])||void 0===e?void 0:e.value)===r}),[P]),O=(0,t.useMemo)((()=>u&&!P.length),[u,P]),R=()=>{x({index:-1})},L=(0,t.useCallback)((e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:o}=e,a=n||r||o,i=P.length&&!D;if("ArrowUp"===t&&!a&&i&&(e.preventDefault(),x((e=>{let{index:t}=e;return{index:t<=0?0:t-1,type:ma.keyboard}}))),"ArrowDown"===t&&!a&&i){e.preventDefault();const t=P.length-1;x((e=>{let{index:n}=e;return{index:n>=t?t:n+1,type:ma.keyboard}}))}if("Enter"===t){const e=P[k.index];e&&_(e.value),c||T()}"Escape"===t&&T()}),[k,P,D,T,_,c]);return(0,t.useEffect)((()=>{N(r.length>=l)}),[r,o]),Jn("keydown",L),(0,t.useEffect)((()=>{if(!w.current||k.type===ma.mouse)return;const e=w.current.childNodes[k.index];null!==e&&void 0!==e&&e.scrollIntoView&&e.scrollIntoView({block:"center"})}),[k,P]),(0,t.useEffect)((()=>{x({index:-1})}),[P]),(0,t.useEffect)((()=>{g&&g(M)}),[M]),(0,t.useEffect)((()=>{v&&v(D?[]:P)}),[P,D]),(0,t.useEffect)((()=>{y&&y(w)}),[w]),mt(Ir,{open:M,buttonRef:a,placement:"bottom-left",onClose:T,fullWidth:s,title:b?d:void 0,disabledFullScreen:h,offset:p,children:[mt("div",{className:Kn()({"vm-autocomplete":!0,"vm-autocomplete_mobile":b&&!h}),ref:w,children:[m&&mt("div",{className:"vm-autocomplete__loader",children:[mt(bn,{}),mt("span",{children:"Loading..."})]}),O&&mt("div",{className:"vm-autocomplete__no-options",children:u}),!D&&P.map(((e,t)=>{return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_mobile":b,"vm-list-item_active":t===k.index,"vm-list-item_multiselect":c,"vm-list-item_multiselect_selected":null===c||void 0===c?void 0:c.includes(e.value),"vm-list-item_with-icon":e.icon}),id:"$autocomplete$".concat(e.value),onClick:(r=e.value,()=>{i||(_(r),c||T())}),onMouseEnter:(n=t,()=>{x({index:n,type:ma.mouse})}),onMouseLeave:R,children:[(null===c||void 0===c?void 0:c.includes(e.value))&&mt(Pn,{}),mt(pt.FK,{children:e.icon}),mt("span",{children:e.value})]},"".concat(t).concat(e.value));var n,r}))]}),S&&mt("div",{className:"vm-autocomplete-message",children:["Shown ",null===f||void 0===f?void 0:f.limit," results out of ",E,". ",S]}),(null===(n=P[k.index])||void 0===n?void 0:n.description)&&mt("div",{className:"vm-autocomplete-info",children:[mt("div",{className:"vm-autocomplete-info__type",children:P[k.index].type}),mt("div",{className:"vm-autocomplete-info__description",dangerouslySetInnerHTML:{__html:P[k.index].description||""}})]})]})};var ga=n(267),va=n.n(ga);const ya=e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&"),ba=e=>JSON.stringify(e).slice(1,-1),wa=e=>{const t=e.match(/["`']/g);return!!t&&t.length%2!==0};var ka=function(e){return e.metric="metric",e.label="label",e.labelValue="labelValue",e}(ka||{});const xa={[ka.metric]:mt(Hn,{}),[ka.label]:mt(Bn,{}),[ka.labelValue]:mt(Un,{})},Sa=n.p+"static/media/MetricsQL.a00044c91d9781cf8557.md",Aa=e=>{const t='$1 target="_blank" class="'.concat("vm-link vm-link_colored",'" $2').concat("https://docs.victoriametrics.com/MetricsQL.html","#");return e.replace(/({var n;const r="h3"===e.tagName.toLowerCase();return t=r?null!==(n=e.textContent)&&void 0!==n?n:"":t,r?null:((e,t)=>{var n;const r=null!==(n=t.textContent)&&void 0!==n?n:"",o=(e=>{const t=[];let n=e.nextElementSibling;for(;n&&"p"===n.tagName.toLowerCase();)n&&t.push(n),n=n.nextElementSibling;return t})(t).map((e=>{var t;return null!==(t=e.outerHTML)&&void 0!==t?t:""})).join("\n");return{type:e,value:r,description:Aa(o),icon:mt(Vn,{})}})(t,e)})).filter(Boolean)},Ca=()=>{const{metricsQLFunctions:e}=ln(),n=sn();return(0,t.useEffect)((()=>{e.length||(async()=>{try{const e=await fetch(Sa),t=(e=>{const t=document.createElement("div");t.innerHTML=ca(e);const n=t.querySelectorAll("".concat("h3",", ").concat("h4"));return Ea(n)})(await e.text());n({type:"SET_METRICSQL_FUNCTIONS",payload:t})}catch(zd){console.error("Error fetching or processing the MetricsQL.md file:",zd)}})()}),[]),e},Ma=e=>{let{value:n,anchorEl:r,caretPosition:a,hasHelperText:i,onSelect:l,onFoundOptions:s}=e;const[c,u]=(0,t.useState)({top:0,left:0}),d=Ca(),h=(0,t.useMemo)((()=>{if(a[0]!==a[1])return{beforeCursor:n,afterCursor:""};return{beforeCursor:n.substring(0,a[0]),afterCursor:n.substring(a[1])}}),[n,a]),p=(0,t.useMemo)((()=>{const e=h.beforeCursor.split(/\s(or|and|unless|default|ifnot|if|group_left|group_right)\s|}|\+|\|-|\*|\/|\^/i);return e[e.length-1]}),[h]),f=(0,t.useMemo)((()=>{const e=[...p.matchAll(/\w+\((?[^)]+)\)\s+(by|without|on|ignoring)\s*\(\w*/gi)];if(e.length>0&&e[0].groups&&e[0].groups.metricName)return e[0].groups.metricName;const t=[...p.matchAll(/^\s*\b(?[^{}(),\s]+)(?={|$)/g)];return t.length>0&&t[0].groups&&t[0].groups.metricName?t[0].groups.metricName:""}),[p]),m=(0,t.useMemo)((()=>{const e=p.match(/[a-z_:-][\w\-.:/]*\b(?=\s*(=|!=|=~|!~))/g);return e?e[e.length-1]:""}),[p]),_=(0,t.useMemo)((()=>{const e=h.beforeCursor.trim(),t=["}",")"].some((t=>e.endsWith(t))),n=!wa(e)&&["`","'",'"'].some((t=>e.endsWith(t)));if(!h.beforeCursor||t||n||(e=>{const t=e.split(/\s+/),n=t.length,r=t[n-1],o=t[n-2],a=!r&&wa(e),i=(!r||t.length>1)&&!/([{(),+\-*/^]|\b(?:or|and|unless|default|ifnot|if|group_left|group_right|by|without|on|ignoring)\b)/i.test(o);return a||i})(h.beforeCursor))return at.empty;const r=/(?:by|without|on|ignoring)\s*\(\s*[^)]*$|\{[^}]*$/i,o="(".concat(ya(f),")?{?.+").concat(ya(m),'(=|!=|=~|!~)"?([^"]*)$');switch(!0){case new RegExp(o,"g").test(h.beforeCursor):return at.labelValue;case r.test(h.beforeCursor):return at.label;default:return at.metricsql}}),[h,f,m]),g=(0,t.useMemo)((()=>{const e=h.beforeCursor.match(/([\w_.:]+(?![},]))$/);return e?e[0]:""}),[h.beforeCursor]),{metrics:v,labels:y,labelValues:b,loading:w}=(e=>{let{valueByContext:n,metric:r,label:a,context:i}=e;const{serverUrl:l}=gt(),{period:{start:s,end:c}}=Gt(),{autocompleteCache:u}=ln(),d=sn(),[h,p]=(0,t.useState)(!1),[f,m]=(0,t.useState)(n),_=va()(m,500);(0,t.useEffect)((()=>(_(n),_.cancel)),[n,_]);const[g,v]=(0,t.useState)([]),[y,b]=(0,t.useState)([]),[w,k]=(0,t.useState)([]),x=(0,t.useRef)(new AbortController),S=(0,t.useCallback)((e=>{const t=o()(1e3*s).startOf("day").valueOf()/1e3,n=o()(1e3*c).endOf("day").valueOf()/1e3;return new URLSearchParams({...e||{},limit:"".concat(en),start:"".concat(t),end:"".concat(n)})}),[s,c]),A=(e,t)=>e.map((e=>({value:e,type:"".concat(t),icon:xa[t]}))),E=async e=>{let{value:t,urlSuffix:n,setter:r,type:o,params:a}=e;if(!t&&o===ka.metric)return;x.current.abort(),x.current=new AbortController;const{signal:i}=x.current,s={type:o,value:t,start:(null===a||void 0===a?void 0:a.get("start"))||"",end:(null===a||void 0===a?void 0:a.get("end"))||"",match:(null===a||void 0===a?void 0:a.get("match[]"))||""};p(!0);try{const e=u.get(s);if(e)return r(A(e,o)),void p(!1);const t=await fetch("".concat(l,"/api/v1/").concat(n,"?").concat(a),{signal:i});if(t.ok){const{data:e}=await t.json();r(A(e,o)),d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:e}})}p(!1)}catch(zd){zd instanceof Error&&"AbortError"!==zd.name&&(d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:[]}}),p(!1),console.error(zd))}};return(0,t.useEffect)((()=>{const e=i!==at.metricsql&&i!==at.empty;if(!l||!r||e)return;v([]);const t=ba(ya(r));return E({value:f,urlSuffix:"label/__name__/values",setter:v,type:ka.metric,params:S({"match[]":'{__name__=~".*'.concat(t,'.*"}')})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,f,i,r]),(0,t.useEffect)((()=>{if(!l||i!==at.label)return;b([]);const e=ba(r);return E({value:f,urlSuffix:"labels",setter:b,type:ka.label,params:S(r?{"match[]":'{__name__="'.concat(e,'"}')}:void 0)}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,f,i,r]),(0,t.useEffect)((()=>{if(!l||!a||i!==at.labelValue)return;k([]);const e=ba(r),t=ba(ya(f)),n=[r?'__name__="'.concat(e,'"'):"","".concat(a,'=~".*').concat(t,'.*"')].filter(Boolean).join(",");return E({value:f,urlSuffix:"label/".concat(a,"/values"),setter:k,type:ka.labelValue,params:S({"match[]":"{".concat(n,"}")})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,f,i,r,a]),{metrics:g,labels:y,labelValues:w,loading:h}})({valueByContext:g,metric:f,label:m,context:_}),k=(0,t.useMemo)((()=>{switch(_){case at.metricsql:return[...v,...d];case at.label:return y;case at.labelValue:return b;default:return[]}}),[_,v,y,b]),x=(0,t.useCallback)((e=>{const t=h.beforeCursor;let n=h.afterCursor;const r=t.lastIndexOf(g,a[0]),o=r+g.length,i=t.substring(0,r),s=t.substring(o);if(_===at.labelValue){const t='"';n=n.replace(/^[^\s"|},]*/,"");const r=/(?:=|!=|=~|!~)$/.test(i),o='"'!==n.trim()[0];e="".concat(r?t:"").concat(e).concat(o?t:"")}_===at.label&&(n=n.replace(/^[^\s=!,{}()"|+\-/*^]*/,"")),_===at.metricsql&&(n=n.replace(/^[^\s[\]{}()"|+\-/*^]*/,""));const c="".concat(i).concat(e).concat(s).concat(n);l(c,i.length+e.length)}),[h]);return(0,t.useEffect)((()=>{if(!r.current)return void u({top:0,left:0});const e=r.current.querySelector("textarea")||r.current,t=window.getComputedStyle(e),n="".concat(t.getPropertyValue("font-size")),o="".concat(t.getPropertyValue("font-family")),a=parseInt("".concat(t.getPropertyValue("line-height"))),l=document.createElement("div");l.style.font="".concat(n," ").concat(o),l.style.padding=t.getPropertyValue("padding"),l.style.lineHeight="".concat(a,"px"),l.style.width="".concat(e.offsetWidth,"px"),l.style.maxWidth="".concat(e.offsetWidth,"px"),l.style.whiteSpace=t.getPropertyValue("white-space"),l.style.overflowWrap=t.getPropertyValue("overflow-wrap");const s=document.createElement("span");l.appendChild(document.createTextNode(h.beforeCursor)),l.appendChild(s),l.appendChild(document.createTextNode(h.afterCursor)),document.body.appendChild(l);const c=l.getBoundingClientRect(),d=s.getBoundingClientRect(),p=d.left-c.left,f=d.bottom-c.bottom-(i?a:0);u({top:f,left:p}),l.remove(),s.remove()}),[r,a,i]),mt(pt.FK,{children:mt(_a,{loading:w,disabledFullScreen:!0,value:g,options:k,anchor:r,minLength:0,offset:c,onSelect:x,onFoundOptions:s,maxDisplayResults:{limit:Xt,message:"Please, specify the query more precisely."}})})},Na="No match! \nThis query hasn't selected any time series from database.\nEither the requested metrics are missing in the database,\nor there is a typo in series selector.",Ta="The shown results are marked as PARTIAL.\nThe result is marked as partial if one or more vmstorage nodes failed to respond to the query.",Pa=e=>{let{value:n,onChange:r,onEnter:o,onArrowUp:a,onArrowDown:i,autocomplete:l,error:s,stats:c,label:u,disabled:d=!1}=e;const{autocompleteQuick:h}=ln(),{isMobile:p}=vr(),[f,m]=(0,t.useState)(!1),[_,g]=(0,t.useState)([0,0]),v=(0,t.useRef)(null),[y,b]=(0,t.useState)(l),w=(0,t.useRef)(va()(b,500)).current,k=[{show:"0"===(null===c||void 0===c?void 0:c.seriesFetched)&&!c.resultLength,text:Na},{show:null===c||void 0===c?void 0:c.isPartial,text:Ta}].filter((e=>e.show)).map((e=>e.text)).join("");c&&(u="".concat(u," (").concat(c.executionTimeMsec||0,"ms)"));return(0,t.useEffect)((()=>{m(l)}),[h]),(0,t.useEffect)((()=>{b(!1),w(!0)}),[_]),mt("div",{className:"vm-query-editor",ref:v,children:[mt(Vr,{value:n,label:u,type:"textarea",autofocus:!p,error:s,warning:k,onKeyDown:e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:l}=e,s=(e.target.value||"").split("\n").length>1,c=n||r,u="ArrowDown"===t,d="Enter"===t;"ArrowUp"===t&&c&&(e.preventDefault(),a()),u&&c&&(e.preventDefault(),i()),d&&f&&e.preventDefault(),!d||l||s&&!c||f||(e.preventDefault(),o())},onChange:r,onChangeCaret:e=>{g((t=>t[0]===e[0]&&t[1]===e[1]?t:e))},disabled:d,inputmode:"search",caretPosition:_}),y&&l&&mt(Ma,{value:n,anchorEl:v,caretPosition:_,hasHelperText:Boolean(k||s),onSelect:(e,t)=>{r(e),g([t,t])},onFoundOptions:e=>{m(!!e.length)}})]})},Da=e=>{let{query:n,limit:r,error:o,onChange:a,onChangeLimit:i,onRun:l}=e;const{isMobile:s}=vr(),[c,u]=(0,t.useState)(""),[d,h]=(0,t.useState)(r);return(0,t.useEffect)((()=>{h(r)}),[r]),mt("div",{className:Kn()({"vm-explore-logs-header":!0,"vm-block":!0,"vm-block_mobile":s}),children:[mt("div",{className:"vm-explore-logs-header-top",children:[mt(Pa,{value:n,autocomplete:!1,onArrowUp:()=>null,onArrowDown:()=>null,onEnter:l,onChange:a,label:"Log query",error:o}),mt(Vr,{label:"Limit entries",type:"number",value:d,error:c,onChange:e=>{const t=+e;h(t),isNaN(t)||t<0?u("Number must be bigger than zero"):(u(""),i(t))},onEnter:l})]}),mt("div",{className:"vm-explore-logs-header-bottom",children:[mt("div",{className:"vm-explore-logs-header-bottom-contols"}),mt("div",{className:"vm-explore-logs-header-bottom-helpful",children:[mt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/victorialogs/logsql/",rel:"help noreferrer",children:[mt(_n,{}),"Query language docs"]}),mt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/victorialogs/",rel:"help noreferrer",children:[mt(Ln,{}),"Documentation"]})]}),mt("div",{className:"vm-explore-logs-header-bottom__execute",children:mt(Pr,{startIcon:mt(Cn,{}),onClick:l,fullWidth:!0,children:"Execute Query"})})]})]})},Oa=()=>{const[e,n]=(0,t.useState)(null),[r,o]=(0,t.useState)({width:0,height:0}),a=(0,t.useCallback)((()=>{o({width:(null===e||void 0===e?void 0:e.offsetWidth)||0,height:(null===e||void 0===e?void 0:e.offsetHeight)||0})}),[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]);return Jn("resize",a),(0,t.useEffect)(a,[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]),[n,r]},Ra="u-off",La="u-label",Ia="width",za="height",ja="top",$a="bottom",Fa="left",Ha="right",Va="#000",Ba=Va+"0",Ua="mousemove",Ya="mousedown",Wa="mouseup",qa="mouseenter",Za="mouseleave",Ka="dblclick",Ga="change",Qa="dppxchange",Ja="--",Xa="undefined"!=typeof window,ei=Xa?document:null,ti=Xa?window:null,ni=Xa?navigator:null;let ri,oi;function ai(e,t){if(null!=t){let n=e.classList;!n.contains(t)&&n.add(t)}}function ii(e,t){let n=e.classList;n.contains(t)&&n.remove(t)}function li(e,t,n){e.style[t]=n+"px"}function si(e,t,n,r){let o=ei.createElement(e);return null!=t&&ai(o,t),null!=n&&n.insertBefore(o,r),o}function ci(e,t){return si("div",e,t)}const ui=new WeakMap;function di(e,t,n,r,o){let a="translate("+t+"px,"+n+"px)";a!=ui.get(e)&&(e.style.transform=a,ui.set(e,a),t<0||n<0||t>r||n>o?ai(e,Ra):ii(e,Ra))}const hi=new WeakMap;function pi(e,t,n){let r=t+n;r!=hi.get(e)&&(hi.set(e,r),e.style.background=t,e.style.borderColor=n)}const fi=new WeakMap;function mi(e,t,n,r){let o=t+""+n;o!=fi.get(e)&&(fi.set(e,o),e.style.height=n+"px",e.style.width=t+"px",e.style.marginLeft=r?-t/2+"px":0,e.style.marginTop=r?-n/2+"px":0)}const _i={passive:!0},gi={..._i,capture:!0};function vi(e,t,n,r){t.addEventListener(e,n,r?gi:_i)}function yi(e,t,n,r){t.removeEventListener(e,n,r?gi:_i)}function bi(e,t,n,r){let o;n=n||0;let a=(r=r||t.length-1)<=2147483647;for(;r-n>1;)o=a?n+r>>1:Ii((n+r)/2),t[o]=t&&o<=n;o+=r)if(null!=e[o])return o;return-1}function ki(e,t,n,r){let o=Vi(e),a=Vi(t);e==t&&(-1==o?(e*=n,t/=n):(e/=n,t*=n));let i=10==n?Bi:Ui,l=1==a?ji:Ii,s=(1==o?Ii:ji)(i(Li(e))),c=l(i(Li(t))),u=Hi(n,s),d=Hi(n,c);return 10==n&&(s<0&&(u=al(u,-s)),c<0&&(d=al(d,-c))),r||2==n?(e=u*o,t=d*a):(e=ol(e,u),t=rl(t,d)),[e,t]}function xi(e,t,n,r){let o=ki(e,t,n,r);return 0==e&&(o[0]=0),0==t&&(o[1]=0),o}Xa&&function e(){let t=devicePixelRatio;ri!=t&&(ri=t,oi&&yi(Ga,oi,e),oi=matchMedia("(min-resolution: ".concat(ri-.001,"dppx) and (max-resolution: ").concat(ri+.001,"dppx)")),vi(Ga,oi,e),ti.dispatchEvent(new CustomEvent(Qa)))}();const Si=.1,Ai={mode:3,pad:Si},Ei={pad:0,soft:null,mode:0},Ci={min:Ei,max:Ei};function Mi(e,t,n,r){return ml(n)?Ti(e,t,n):(Ei.pad=n,Ei.soft=r?0:null,Ei.mode=r?3:0,Ti(e,t,Ci))}function Ni(e,t){return null==e?t:e}function Ti(e,t,n){let r=n.min,o=n.max,a=Ni(r.pad,0),i=Ni(o.pad,0),l=Ni(r.hard,-Wi),s=Ni(o.hard,Wi),c=Ni(r.soft,Wi),u=Ni(o.soft,-Wi),d=Ni(r.mode,0),h=Ni(o.mode,0),p=t-e,f=Bi(p),m=Fi(Li(e),Li(t)),_=Bi(m),g=Li(_-f);(p<1e-9||g>10)&&(p=0,0!=e&&0!=t||(p=1e-9,2==d&&c!=Wi&&(a=0),2==h&&u!=-Wi&&(i=0)));let v=p||m||1e3,y=Bi(v),b=Hi(10,Ii(y)),w=al(ol(e-v*(0==p?0==e?.1:1:a),b/10),9),k=e>=c&&(1==d||3==d&&w<=c||2==d&&w>=c)?c:Wi,x=Fi(l,w=k?k:$i(k,w)),S=al(rl(t+v*(0==p?0==t?.1:1:i),b/10),9),A=t<=u&&(1==h||3==h&&S>=u||2==h&&S<=u)?u:-Wi,E=$i(s,S>A&&t<=A?A:Fi(A,S));return x==E&&0==x&&(E=100),[x,E]}const Pi=new Intl.NumberFormat(Xa?ni.language:"en-US"),Di=e=>Pi.format(e),Oi=Math,Ri=Oi.PI,Li=Oi.abs,Ii=Oi.floor,zi=Oi.round,ji=Oi.ceil,$i=Oi.min,Fi=Oi.max,Hi=Oi.pow,Vi=Oi.sign,Bi=Oi.log10,Ui=Oi.log2,Yi=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Oi.asinh(e/t)},Wi=1/0;function qi(e){return 1+(0|Bi((e^e>>31)-(e>>31)))}function Zi(e,t,n){return $i(Fi(e,t),n)}function Ki(e){return"function"==typeof e?e:()=>e}const Gi=e=>e,Qi=(e,t)=>t,Ji=e=>null,Xi=e=>!0,el=(e,t)=>e==t,tl=e=>al(e,14);function nl(e,t){return tl(al(tl(e/t))*t)}function rl(e,t){return tl(ji(tl(e/t))*t)}function ol(e,t){return tl(Ii(tl(e/t))*t)}function al(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(pl(e))return e;let n=10**t,r=e*n*(1+Number.EPSILON);return zi(r)/n}const il=new Map;function ll(e){return((""+e).split(".")[1]||"").length}function sl(e,t,n,r){let o=[],a=r.map(ll);for(let i=t;i=0&&i>=0?0:t)+(i>=a[e]?0:a[e]),c=al(l,s);o.push(c),il.set(c,s)}}return o}const cl={},ul=[],dl=[null,null],hl=Array.isArray,pl=Number.isInteger;function fl(e){return"string"==typeof e}function ml(e){let t=!1;if(null!=e){let n=e.constructor;t=null==n||n==Object}return t}function _l(e){return null!=e&&"object"==typeof e}const gl=Object.getPrototypeOf(Uint8Array);function vl(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ml;if(hl(e)){let r=e.find((e=>null!=e));if(hl(r)||n(r)){t=Array(e.length);for(let r=0;ra){for(r=i-1;r>=0&&null==e[r];)e[r--]=null;for(r=i+1;rPromise.resolve().then(e):queueMicrotask;const kl=["January","February","March","April","May","June","July","August","September","October","November","December"],xl=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function Sl(e){return e.slice(0,3)}const Al=xl.map(Sl),El=kl.map(Sl),Cl={MMMM:kl,MMM:El,WWWW:xl,WWW:Al};function Ml(e){return(e<10?"0":"")+e}const Nl={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+"").slice(2),MMMM:(e,t)=>t.MMMM[e.getMonth()],MMM:(e,t)=>t.MMM[e.getMonth()],MM:e=>Ml(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>Ml(e.getDate()),D:e=>e.getDate(),WWWW:(e,t)=>t.WWWW[e.getDay()],WWW:(e,t)=>t.WWW[e.getDay()],HH:e=>Ml(e.getHours()),H:e=>e.getHours(),h:e=>{let t=e.getHours();return 0==t?12:t>12?t-12:t},AA:e=>e.getHours()>=12?"PM":"AM",aa:e=>e.getHours()>=12?"pm":"am",a:e=>e.getHours()>=12?"p":"a",mm:e=>Ml(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>Ml(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>{return((t=e.getMilliseconds())<10?"00":t<100?"0":"")+t;var t}};function Tl(e,t){t=t||Cl;let n,r=[],o=/\{([a-z]+)\}|[^{]+/gi;for(;n=o.exec(e);)r.push("{"==n[0][0]?Nl[n[1]]:n[0]);return e=>{let n="";for(let o=0;oe%1==0,Ol=[1,2,2.5,5],Rl=sl(10,-16,0,Ol),Ll=sl(10,0,16,Ol),Il=Ll.filter(Dl),zl=Rl.concat(Ll),jl="{YYYY}",$l="\n"+jl,Fl="{M}/{D}",Hl="\n"+Fl,Vl=Hl+"/{YY}",Bl="{aa}",Ul="{h}:{mm}"+Bl,Yl="\n"+Ul,Wl=":{ss}",ql=null;function Zl(e){let t=1e3*e,n=60*t,r=60*n,o=24*r,a=30*o,i=365*o;return[(1==e?sl(10,0,3,Ol).filter(Dl):sl(10,-3,0,Ol)).concat([t,5*t,10*t,15*t,30*t,n,5*n,10*n,15*n,30*n,r,2*r,3*r,4*r,6*r,8*r,12*r,o,2*o,3*o,4*o,5*o,6*o,7*o,8*o,9*o,10*o,15*o,a,2*a,3*a,4*a,6*a,i,2*i,5*i,10*i,25*i,50*i,100*i]),[[i,jl,ql,ql,ql,ql,ql,ql,1],[28*o,"{MMM}",$l,ql,ql,ql,ql,ql,1],[o,Fl,$l,ql,ql,ql,ql,ql,1],[r,"{h}"+Bl,Vl,ql,Hl,ql,ql,ql,1],[n,Ul,Vl,ql,Hl,ql,ql,ql,1],[t,Wl,Vl+" "+Ul,ql,Hl+" "+Ul,ql,Yl,ql,1],[e,Wl+".{fff}",Vl+" "+Ul,ql,Hl+" "+Ul,ql,Yl,ql,1]],function(t){return(l,s,c,u,d,h)=>{let p=[],f=d>=i,m=d>=a&&d=o?o:d,i=y+(Ii(c)-Ii(g))+rl(g-y,a);p.push(i);let f=t(i),m=f.getHours()+f.getMinutes()/n+f.getSeconds()/r,_=d/r,v=h/l.axes[s]._space;for(;i=al(i+d,1==e?0:3),!(i>u);)if(_>1){let e=Ii(al(m+_,6))%24,n=t(i).getHours()-e;n>1&&(n=-1),i-=n*r,m=(m+_)%24,al((i-p[p.length-1])/d,3)*v>=.7&&p.push(i)}else p.push(i)}return p}}]}const[Kl,Gl,Ql]=Zl(1),[Jl,Xl,es]=Zl(.001);function ts(e,t){return e.map((e=>e.map(((n,r)=>0==r||8==r||null==n?n:t(1==r||0==e[8]?n:e[1]+n)))))}function ns(e,t){return(n,r,o,a,i)=>{let l,s,c,u,d,h,p=t.find((e=>i>=e[0]))||t[t.length-1];return r.map((t=>{let n=e(t),r=n.getFullYear(),o=n.getMonth(),a=n.getDate(),i=n.getHours(),f=n.getMinutes(),m=n.getSeconds(),_=r!=l&&p[2]||o!=s&&p[3]||a!=c&&p[4]||i!=u&&p[5]||f!=d&&p[6]||m!=h&&p[7]||p[1];return l=r,s=o,c=a,u=i,d=f,h=m,_(n)}))}}function rs(e,t,n){return new Date(e,t,n)}function os(e,t){return t(e)}sl(2,-53,53,[1]);function as(e,t){return(n,r,o,a)=>null==a?Ja:t(e(r))}const is={show:!0,live:!0,isolate:!1,mount:()=>{},markers:{show:!0,width:2,stroke:function(e,t){let n=e.series[t];return n.width?n.stroke(e,t):n.points.width?n.points.stroke(e,t):null},fill:function(e,t){return e.series[t].fill(e,t)},dash:"solid"},idx:null,idxs:null,values:[]};const ls=[0,0];function ss(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{0==e.button&&(!r||e.target==t)&&n(e)}}function cs(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{(!r||e.target==t)&&n(e)}}const us={show:!0,x:!0,y:!0,lock:!1,move:function(e,t,n){return ls[0]=t,ls[1]=n,ls},points:{show:function(e,t){let n=e.cursor.points,r=ci(),o=n.size(e,t);li(r,Ia,o),li(r,za,o);let a=o/-2;li(r,"marginLeft",a),li(r,"marginTop",a);let i=n.width(e,t,o);return i&&li(r,"borderWidth",i),r},size:function(e,t){return e.series[t].points.size},width:0,stroke:function(e,t){let n=e.series[t].points;return n._stroke||n._fill},fill:function(e,t){let n=e.series[t].points;return n._fill||n._stroke}},bind:{mousedown:ss,mouseup:ss,click:ss,dblclick:ss,mousemove:cs,mouseleave:cs,mouseenter:cs},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,t)=>{t.stopPropagation(),t.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,t,n,r,o)=>r-o,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},ds={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},hs=yl({},ds,{filter:Qi}),ps=yl({},hs,{size:10}),fs=yl({},ds,{show:!1}),ms='12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',_s="bold "+ms,gs={show:!0,scale:"x",stroke:Va,space:50,gap:5,size:50,labelGap:0,labelSize:30,labelFont:_s,side:2,grid:hs,ticks:ps,border:fs,font:ms,lineGap:1.5,rotate:0},vs={show:!0,scale:"x",auto:!1,sorted:1,min:Wi,max:-Wi,idxs:[]};function ys(e,t,n,r,o){return t.map((e=>null==e?"":Di(e)))}function bs(e,t,n,r,o,a,i){let l=[],s=il.get(o)||0;for(let c=n=i?n:al(rl(n,o),s);c<=r;c=al(c+o,s))l.push(Object.is(c,-0)?0:c);return l}function ws(e,t,n,r,o,a,i){const l=[],s=e.scales[e.axes[t].scale].log,c=Ii((10==s?Bi:Ui)(n));o=Hi(s,c),10==s&&c<0&&(o=al(o,-c));let u=n;do{l.push(u),u+=o,10==s&&(u=al(u,il.get(o))),u>=o*s&&(o=u)}while(u<=r);return l}function ks(e,t,n,r,o,a,i){let l=e.scales[e.axes[t].scale].asinh,s=r>l?ws(e,t,Fi(l,n),r,o):[l],c=r>=0&&n<=0?[0]:[];return(n<-l?ws(e,t,Fi(l,-r),-n,o):[l]).reverse().map((e=>-e)).concat(c,s)}const xs=/./,Ss=/[12357]/,As=/[125]/,Es=/1/,Cs=(e,t,n,r)=>e.map(((e,o)=>4==t&&0==e||o%r==0&&n.test(e.toExponential()[e<0?1:0])?e:null));function Ms(e,t,n,r,o){let a=e.axes[n],i=a.scale,l=e.scales[i],s=e.valToPos,c=a._space,u=s(10,i),d=s(9,i)-u>=c?xs:s(7,i)-u>=c?Ss:s(5,i)-u>=c?As:Es;if(d==Es){let e=Li(s(1,i)-u);if(eo,Rs={show:!0,auto:!0,sorted:0,gaps:Os,alpha:1,facets:[yl({},Ds,{scale:"x"}),yl({},Ds,{scale:"y"})]},Ls={scale:"y",auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:Os,alpha:1,points:{show:function(e,t){let{scale:n,idxs:r}=e.series[0],o=e._data[0],a=e.valToPos(o[r[0]],n,!0),i=e.valToPos(o[r[1]],n,!0),l=Li(i-a)/(e.series[t].points.space*ri);return r[1]-r[0]<=l},filter:null},values:null,min:Wi,max:-Wi,idxs:[],path:null,clip:null};function Is(e,t,n,r,o){return n/10}const zs={time:!0,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},js=yl({},zs,{time:!1,ori:1}),$s={};function Fs(e,t){let n=$s[e];return n||(n={key:e,plots:[],sub(e){n.plots.push(e)},unsub(e){n.plots=n.plots.filter((t=>t!=e))},pub(e,t,r,o,a,i,l){for(let s=0;s{let m=e.pxRound;const _=l.dir*(0==l.ori?1:-1),g=0==l.ori?Js:Xs;let v,y;1==_?(v=n,y=r):(v=r,y=n);let b=m(c(t[v],l,p,d)),w=m(u(i[v],s,f,h)),k=m(c(t[y],l,p,d)),x=m(u(1==a?s.max:s.min,s,f,h)),S=new Path2D(o);return g(S,k,x),g(S,b,x),g(S,b,w),S}))}function Ws(e,t,n,r,o,a){let i=null;if(e.length>0){i=new Path2D;const l=0==t?ec:tc;let s=n;for(let t=0;tn[0]){let e=n[0]-s;e>0&&l(i,s,r,e,r+a),s=n[1]}}let c=n+o-s,u=10;c>0&&l(i,s,r-u/2,c,r+a+u)}return i}function qs(e,t,n,r,o,a,i){let l=[],s=e.length;for(let c=1==o?n:r;c>=n&&c<=r;c+=o){if(null===t[c]){let u=c,d=c;if(1==o)for(;++c<=r&&null===t[c];)d=c;else for(;--c>=n&&null===t[c];)d=c;let h=a(e[u]),p=d==u?h:a(e[d]),f=u-o;h=i<=0&&f>=0&&f=0&&m>=0&&m=h&&l.push([h,p])}}return l}function Zs(e){return 0==e?Gi:1==e?zi:t=>nl(t,e)}function Ks(e){let t=0==e?Gs:Qs,n=0==e?(e,t,n,r,o,a)=>{e.arcTo(t,n,r,o,a)}:(e,t,n,r,o,a)=>{e.arcTo(n,t,o,r,a)},r=0==e?(e,t,n,r,o)=>{e.rect(t,n,r,o)}:(e,t,n,r,o)=>{e.rect(n,t,o,r)};return function(e,o,a,i,l){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0;0==s&&0==c?r(e,o,a,i,l):(s=$i(s,i/2,l/2),c=$i(c,i/2,l/2),t(e,o+s,a),n(e,o+i,a,o+i,a+l,s),n(e,o+i,a+l,o,a+l,c),n(e,o,a+l,o,a,c),n(e,o,a,o+i,a,s),e.closePath())}}const Gs=(e,t,n)=>{e.moveTo(t,n)},Qs=(e,t,n)=>{e.moveTo(n,t)},Js=(e,t,n)=>{e.lineTo(t,n)},Xs=(e,t,n)=>{e.lineTo(n,t)},ec=Ks(0),tc=Ks(1),nc=(e,t,n,r,o,a)=>{e.arc(t,n,r,o,a)},rc=(e,t,n,r,o,a)=>{e.arc(n,t,r,o,a)},oc=(e,t,n,r,o,a,i)=>{e.bezierCurveTo(t,n,r,o,a,i)},ac=(e,t,n,r,o,a,i)=>{e.bezierCurveTo(n,t,o,r,i,a)};function ic(e){return(e,t,n,r,o)=>Vs(e,t,((t,a,i,l,s,c,u,d,h,p,f)=>{let m,_,{pxRound:g,points:v}=t;0==l.ori?(m=Gs,_=nc):(m=Qs,_=rc);const y=al(v.width*ri,3);let b=(v.size-v.width)/2*ri,w=al(2*b,3),k=new Path2D,x=new Path2D,{left:S,top:A,width:E,height:C}=e.bbox;ec(x,S-w,A-w,E+2*w,C+2*w);const M=e=>{if(null!=i[e]){let t=g(c(a[e],l,p,d)),n=g(u(i[e],s,f,h));m(k,t+b,n),_(k,t,n,b,0,2*Ri)}};if(o)o.forEach(M);else for(let e=n;e<=r;e++)M(e);return{stroke:y>0?k:null,fill:k,clip:x,flags:2|Hs}}))}function lc(e){return(t,n,r,o,a,i)=>{r!=o&&(a!=r&&i!=r&&e(t,n,r),a!=o&&i!=o&&e(t,n,o),e(t,n,i))}}const sc=lc(Js),cc=lc(Xs);function uc(e){const t=Ni(null===e||void 0===e?void 0:e.alignGaps,0);return(e,n,r,o)=>Vs(e,n,((a,i,l,s,c,u,d,h,p,f,m)=>{let _,g,v=a.pxRound,y=e=>v(u(e,s,f,h)),b=e=>v(d(e,c,m,p));0==s.ori?(_=Js,g=sc):(_=Xs,g=cc);const w=s.dir*(0==s.ori?1:-1),k={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Hs},x=k.stroke;let S,A,E,C=Wi,M=-Wi,N=y(i[1==w?r:o]),T=wi(l,r,o,1*w),P=wi(l,r,o,-1*w),D=y(i[T]),O=y(i[P]),R=!1;for(let e=1==w?r:o;e>=r&&e<=o;e+=w){let t=y(i[e]),n=l[e];t==N?null!=n?(A=b(n),C==Wi&&(_(x,t,A),S=A),C=$i(A,C),M=Fi(A,M)):null===n&&(R=!0):(C!=Wi&&(g(x,N,C,M,S,A),E=N),null!=n?(A=b(n),_(x,t,A),C=M=S=A):(C=Wi,M=-Wi,null===n&&(R=!0)),N=t)}C!=Wi&&C!=M&&E!=N&&g(x,N,C,M,S,A);let[L,I]=Bs(e,n);if(null!=a.fill||0!=L){let t=k.fill=new Path2D(x),r=b(a.fillTo(e,n,a.min,a.max,L));_(t,O,r),_(t,D,r)}if(!a.spanGaps){let c=[];R&&c.push(...qs(i,l,r,o,w,y,t)),k.gaps=c=a.gaps(e,n,r,o,c),k.clip=Ws(c,s.ori,h,p,f,m)}return 0!=I&&(k.band=2==I?[Ys(e,n,r,o,x,-1),Ys(e,n,r,o,x,1)]:Ys(e,n,r,o,x,I)),k}))}function dc(e,t,n,r,o,a){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:Wi;if(e.length>1){let l=null;for(let s=0,c=1/0;s0!==r[e]>0?n[e]=0:(n[e]=3*(s[e-1]+s[e])/((2*s[e]+s[e-1])/r[e-1]+(s[e]+2*s[e-1])/r[e]),isFinite(n[e])||(n[e]=0));n[i-1]=r[i-2];for(let c=0;c{Nc.pxRatio=ri})));const mc=uc(),_c=ic();function gc(e,t,n,r){return(r?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map(((e,r)=>vc(e,r,t,n)))}function vc(e,t,n,r){return yl({},0==t?n:r,e)}function yc(e,t,n){return null==t?dl:[t,n]}const bc=yc;function wc(e,t,n){return null==t?dl:Mi(t,n,Si,!0)}function kc(e,t,n,r){return null==t?dl:ki(t,n,e.scales[r].log,!1)}const xc=kc;function Sc(e,t,n,r){return null==t?dl:xi(t,n,e.scales[r].log,!1)}const Ac=Sc;function Ec(e,t,n,r,o){let a=Fi(qi(e),qi(t)),i=t-e,l=bi(o/r*i,n);do{let e=n[l],t=r*e/i;if(t>=o&&a+(e<5?il.get(e):0)<=17)return[e,t]}while(++l(t=zi((n=+r)*ri))+"px")),t,n]}function Mc(e){e.show&&[e.font,e.labelFont].forEach((e=>{let t=al(e[2]*ri,1);e[0]=e[0].replace(/[0-9.]+px/,t+"px"),e[1]=t}))}function Nc(e,t,n){const r={mode:Ni(e.mode,1)},o=r.mode;function a(e,t){return((3==t.distr?Bi(e>0?e:t.clamp(r,e,t.min,t.max,t.key)):4==t.distr?Yi(e,t.asinh):e)-t._min)/(t._max-t._min)}function i(e,t,n,r){let o=a(e,t);return r+n*(-1==t.dir?1-o:o)}function l(e,t,n,r){let o=a(e,t);return r+n*(-1==t.dir?o:1-o)}function s(e,t,n,r){return 0==t.ori?i(e,t,n,r):l(e,t,n,r)}r.valToPosH=i,r.valToPosV=l;let c=!1;r.status=0;const u=r.root=ci("uplot");if(null!=e.id&&(u.id=e.id),ai(u,e.class),e.title){ci("u-title",u).textContent=e.title}const d=si("canvas"),h=r.ctx=d.getContext("2d"),p=ci("u-wrap",u);vi("click",p,(e=>{if(e.target===m){(Nt!=At||Tt!=Et)&&$t.click(r,e)}}),!0);const f=r.under=ci("u-under",p);p.appendChild(d);const m=r.over=ci("u-over",p),_=+Ni((e=vl(e)).pxAlign,1),g=Zs(_);(e.plugins||[]).forEach((t=>{t.opts&&(e=t.opts(r,e)||e)}));const v=e.ms||.001,y=r.series=1==o?gc(e.series||[],vs,Ls,!1):(b=e.series||[null],w=Rs,b.map(((e,t)=>0==t?null:yl({},w,e))));var b,w;const k=r.axes=gc(e.axes||[],gs,Ps,!0),x=r.scales={},S=r.bands=e.bands||[];S.forEach((e=>{e.fill=Ki(e.fill||null),e.dir=Ni(e.dir,-1)}));const A=2==o?y[1].facets[0].scale:y[0].scale,E={axes:function(){for(let e=0;ett[e])):v,b=2==p.distr?tt[v[1]]-tt[v[0]]:u,w=t.ticks,S=t.border,A=w.show?zi(w.size*ri):0,E=t._rotate*-Ri/180,C=g(t._pos*ri),M=C+(A+_)*c;o=0==i?M:0,n=1==i?M:0,it(t.font[0],l,1==t.align?Fa:2==t.align?Ha:E>0?Fa:E<0?Ha:0==i?"center":3==a?Ha:Fa,E||1==i?"middle":2==a?ja:$a);let N=t.font[1]*t.lineGap,T=v.map((e=>g(s(e,p,f,m)))),P=t._values;for(let e=0;e0&&(y.forEach(((e,n)=>{if(n>0&&e.show&&(ct(n,!1),ct(n,!0),null==e._paths)){et!=e.alpha&&(h.globalAlpha=et=e.alpha);let a=2==o?[0,t[n][0].length-1]:function(e){let t=Zi(Ve-1,0,He-1),n=Zi(Be+1,0,He-1);for(;null==e[t]&&t>0;)t--;for(;null==e[n]&&n{if(t>0&&e.show){et!=e.alpha&&(h.globalAlpha=et=e.alpha),null!=e._paths&&ut(t,!1);{let n=null!=e._paths?e._paths.gaps:null,o=e.points.show(r,t,Ve,Be,n),a=e.points.filter(r,t,o,n);(o||a)&&(e.points._paths=e.points.paths(r,t,Ve,Be,a),ut(t,!0))}1!=et&&(h.globalAlpha=et=1),kn("drawSeries",t)}})))}},C=(e.drawOrder||["axes","series"]).map((e=>E[e]));function M(t){let n=x[t];if(null==n){let r=(e.scales||cl)[t]||cl;if(null!=r.from)M(r.from),x[t]=yl({},x[r.from],r,{key:t});else{n=x[t]=yl({},t==A?zs:js,r),n.key=t;let e=n.time,a=n.range,i=hl(a);if((t!=A||2==o&&!e)&&(!i||null!=a[0]&&null!=a[1]||(a={min:null==a[0]?Ai:{mode:1,hard:a[0],soft:a[0]},max:null==a[1]?Ai:{mode:1,hard:a[1],soft:a[1]}},i=!1),!i&&ml(a))){let e=a;a=(t,n,r)=>null==n?dl:Mi(n,r,e)}n.range=Ki(a||(e?bc:t==A?3==n.distr?xc:4==n.distr?Ac:yc:3==n.distr?kc:4==n.distr?Sc:wc)),n.auto=Ki(!i&&n.auto),n.clamp=Ki(n.clamp||Is),n._min=n._max=null}}}M("x"),M("y"),1==o&&y.forEach((e=>{M(e.scale)})),k.forEach((e=>{M(e.scale)}));for(let Nn in e.scales)M(Nn);const N=x[A],T=N.distr;let P,D;0==N.ori?(ai(u,"u-hz"),P=i,D=l):(ai(u,"u-vt"),P=l,D=i);const O={};for(let Nn in x){let e=x[Nn];null==e.min&&null==e.max||(O[Nn]={min:e.min,max:e.max},e.min=e.max=null)}const R=e.tzDate||(e=>new Date(zi(e/v))),L=e.fmtDate||Tl,I=1==v?Ql(R):es(R),z=ns(R,ts(1==v?Gl:Xl,L)),j=as(R,os("{YYYY}-{MM}-{DD} {h}:{mm}{aa}",L)),$=[],F=r.legend=yl({},is,e.legend),H=F.show,V=F.markers;let B,U,Y;F.idxs=$,V.width=Ki(V.width),V.dash=Ki(V.dash),V.stroke=Ki(V.stroke),V.fill=Ki(V.fill);let W,q=[],Z=[],K=!1,G={};if(F.live){const e=y[1]?y[1].values:null;K=null!=e,W=K?e(r,1,0):{_:0};for(let t in W)G[t]=Ja}if(H)if(B=si("table","u-legend",u),Y=si("tbody",null,B),F.mount(r,B),K){U=si("thead",null,B,Y);let e=si("tr",null,U);for(var Q in si("th",null,e),W)si("th",La,e).textContent=Q}else ai(B,"u-inline"),F.live&&ai(B,"u-live");const J={show:!0},X={show:!1};const ee=new Map;function te(e,t,n){let o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const a=ee.get(t)||{},i=Ee.bind[e](r,t,n,o);i&&(vi(e,t,a[e]=i),ee.set(t,a))}function ne(e,t,n){const r=ee.get(t)||{};for(let o in r)null!=e&&o!=e||(yi(o,t,r[o]),delete r[o]);null==e&&ee.delete(t)}let re=0,oe=0,ae=0,ie=0,le=0,se=0,ce=le,ue=se,de=ae,he=ie,pe=0,fe=0,me=0,_e=0;r.bbox={};let ge=!1,ve=!1,ye=!1,be=!1,we=!1,ke=!1;function xe(e,t,n){(n||e!=r.width||t!=r.height)&&Se(e,t),vt(!1),ye=!0,ve=!0,Lt()}function Se(e,t){r.width=re=ae=e,r.height=oe=ie=t,le=se=0,function(){let e=!1,t=!1,n=!1,r=!1;k.forEach(((o,a)=>{if(o.show&&o._show){let{side:a,_size:i}=o,l=a%2,s=i+(null!=o.label?o.labelSize:0);s>0&&(l?(ae-=s,3==a?(le+=s,r=!0):n=!0):(ie-=s,0==a?(se+=s,e=!0):t=!0))}})),ze[0]=e,ze[1]=n,ze[2]=t,ze[3]=r,ae-=Fe[1]+Fe[3],le+=Fe[3],ie-=Fe[2]+Fe[0],se+=Fe[0]}(),function(){let e=le+ae,t=se+ie,n=le,r=se;function o(o,a){switch(o){case 1:return e+=a,e-a;case 2:return t+=a,t-a;case 3:return n-=a,n+a;case 0:return r-=a,r+a}}k.forEach(((e,t)=>{if(e.show&&e._show){let t=e.side;e._pos=o(t,e._size),null!=e.label&&(e._lpos=o(t,e.labelSize))}}))}();let n=r.bbox;pe=n.left=nl(le*ri,.5),fe=n.top=nl(se*ri,.5),me=n.width=nl(ae*ri,.5),_e=n.height=nl(ie*ri,.5)}const Ae=3;r.setSize=function(e){let{width:t,height:n}=e;xe(t,n)};const Ee=r.cursor=yl({},us,{drag:{y:2==o}},e.cursor);if(null==Ee.dataIdx){var Ce,Me;let e=Ee.hover,n=e.skip=new Set(null!==(Ce=e.skip)&&void 0!==Ce?Ce:[]);n.add(void 0);let r=e.prox=Ki(e.prox),o=null!==(Me=e.bias)&&void 0!==Me?Me:e.bias=0;Ee.dataIdx=(e,a,i,l)=>{var s;if(0==a)return i;let c=i,u=null!==(s=r(e,a,i,l))&&void 0!==s?s:Wi,d=u>=0&&u0;)n.has(m[e])||(t=e);if(0==o||1==o)for(e=i;null==r&&e++u&&(c=null)}return c}}const Ne=e=>{Ee.event=e};Ee.idxs=$,Ee._lock=!1;let Te=Ee.points;Te.show=Ki(Te.show),Te.size=Ki(Te.size),Te.stroke=Ki(Te.stroke),Te.width=Ki(Te.width),Te.fill=Ki(Te.fill);const Pe=r.focus=yl({},e.focus||{alpha:.3},Ee.focus),De=Pe.prox>=0;let Oe=[null],Re=[null],Le=[null];function Ie(e,t){if(1==o||t>0){let t=1==o&&x[e.scale].time,n=e.value;e.value=t?fl(n)?as(R,os(n,L)):n||j:n||Ts,e.label=e.label||(t?"Time":"Value")}if(t>0){e.width=null==e.width?1:e.width,e.paths=e.paths||mc||Ji,e.fillTo=Ki(e.fillTo||Us),e.pxAlign=+Ni(e.pxAlign,_),e.pxRound=Zs(e.pxAlign),e.stroke=Ki(e.stroke||null),e.fill=Ki(e.fill||null),e._stroke=e._fill=e._paths=e._focus=null;let t=al((3+2*(Fi(1,e.width)||1))*1,3),n=e.points=yl({},{size:t,width:Fi(1,.2*t),stroke:e.stroke,space:2*t,paths:_c,_stroke:null,_fill:null},e.points);n.show=Ki(n.show),n.filter=Ki(n.filter),n.fill=Ki(n.fill),n.stroke=Ki(n.stroke),n.paths=Ki(n.paths),n.pxAlign=e.pxAlign}if(H){let n=function(e,t){if(0==t&&(K||!F.live||2==o))return dl;let n=[],a=si("tr","u-series",Y,Y.childNodes[t]);ai(a,e.class),e.show||ai(a,Ra);let i=si("th",null,a);if(V.show){let e=ci("u-marker",i);if(t>0){let n=V.width(r,t);n&&(e.style.border=n+"px "+V.dash(r,t)+" "+V.stroke(r,t)),e.style.background=V.fill(r,t)}}let l=ci(La,i);for(var s in l.textContent=e.label,t>0&&(V.show||(l.style.color=e.width>0?V.stroke(r,t):V.fill(r,t)),te("click",i,(t=>{if(Ee._lock)return;Ne(t);let n=y.indexOf(e);if((t.ctrlKey||t.metaKey)!=F.isolate){let e=y.some(((e,t)=>t>0&&t!=n&&e.show));y.forEach(((t,r)=>{r>0&&Wt(r,e?r==n?J:X:J,!0,Sn.setSeries)}))}else Wt(n,{show:!e.show},!0,Sn.setSeries)}),!1),De&&te(qa,i,(t=>{Ee._lock||(Ne(t),Wt(y.indexOf(e),Gt,!0,Sn.setSeries))}),!1)),W){let e=si("td","u-value",a);e.textContent="--",n.push(e)}return[a,n]}(e,t);q.splice(t,0,n[0]),Z.splice(t,0,n[1]),F.values.push(null)}if(Ee.show){$.splice(t,0,null);let n=function(e,t){if(t>0){let n=Ee.points.show(r,t);if(n)return ai(n,"u-cursor-pt"),ai(n,e.class),di(n,-10,-10,ae,ie),m.insertBefore(n,Oe[t]),n}}(e,t);null!=n&&(Oe.splice(t,0,n),Re.splice(t,0,0),Le.splice(t,0,0))}kn("addSeries",t)}r.addSeries=function(e,t){t=null==t?y.length:t,e=1==o?vc(e,t,vs,Ls):vc(e,t,null,Rs),y.splice(t,0,e),Ie(y[t],t)},r.delSeries=function(e){if(y.splice(e,1),H){F.values.splice(e,1),Z.splice(e,1);let t=q.splice(e,1)[0];ne(null,t.firstChild),t.remove()}Ee.show&&($.splice(e,1),Oe.length>1&&(Oe.splice(e,1)[0].remove(),Re.splice(e,1),Le.splice(e,1))),kn("delSeries",e)};const ze=[!1,!1,!1,!1];function je(e,t,n,r){let[o,a,i,l]=n,s=t%2,c=0;return 0==s&&(l||a)&&(c=0==t&&!o||2==t&&!i?zi(gs.size/3):0),1==s&&(o||i)&&(c=1==t&&!a||3==t&&!l?zi(Ps.size/2):0),c}const $e=r.padding=(e.padding||[je,je,je,je]).map((e=>Ki(Ni(e,je)))),Fe=r._padding=$e.map(((e,t)=>e(r,t,ze,0)));let He,Ve=null,Be=null;const Ue=1==o?y[0].idxs:null;let Ye,We,qe,Ze,Ke,Ge,Qe,Je,Xe,et,tt=null,nt=!1;function rt(e,n){if(t=null==e?[]:e,r.data=r._data=t,2==o){He=0;for(let e=1;e=0,ke=!0,Lt()}}function ot(){let e,n;nt=!0,1==o&&(He>0?(Ve=Ue[0]=0,Be=Ue[1]=He-1,e=t[0][Ve],n=t[0][Be],2==T?(e=Ve,n=Be):e==n&&(3==T?[e,n]=ki(e,e,N.log,!1):4==T?[e,n]=xi(e,e,N.log,!1):N.time?n=e+zi(86400/v):[e,n]=Mi(e,n,Si,!0))):(Ve=Ue[0]=e=null,Be=Ue[1]=n=null)),Yt(A,e,n)}function at(e,t,n,r,o,a){var i,l,s,c,u;null!==(i=e)&&void 0!==i||(e=Ba),null!==(l=n)&&void 0!==l||(n=ul),null!==(s=r)&&void 0!==s||(r="butt"),null!==(c=o)&&void 0!==c||(o=Ba),null!==(u=a)&&void 0!==u||(a="round"),e!=Ye&&(h.strokeStyle=Ye=e),o!=We&&(h.fillStyle=We=o),t!=qe&&(h.lineWidth=qe=t),a!=Ke&&(h.lineJoin=Ke=a),r!=Ge&&(h.lineCap=Ge=r),n!=Ze&&h.setLineDash(Ze=n)}function it(e,t,n,r){t!=We&&(h.fillStyle=We=t),e!=Qe&&(h.font=Qe=e),n!=Je&&(h.textAlign=Je=n),r!=Xe&&(h.textBaseline=Xe=r)}function lt(e,t,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(o.length>0&&e.auto(r,nt)&&(null==t||null==t.min)){let t=Ni(Ve,0),r=Ni(Be,o.length-1),i=null==n.min?3==e.distr?function(e,t,n){let r=Wi,o=-Wi;for(let a=t;a<=n;a++){let t=e[a];null!=t&&t>0&&(to&&(o=t))}return[r,o]}(o,t,r):function(e,t,n,r){let o=Wi,a=-Wi;if(1==r)o=e[t],a=e[n];else if(-1==r)o=e[n],a=e[t];else for(let i=t;i<=n;i++){let t=e[i];null!=t&&(ta&&(a=t))}return[o,a]}(o,t,r,a):[n.min,n.max];e.min=$i(e.min,n.min=i[0]),e.max=Fi(e.max,n.max=i[1])}}r.setData=rt;const st={min:null,max:null};function ct(e,t){let n=t?y[e].points:y[e];n._stroke=n.stroke(r,e),n._fill=n.fill(r,e)}function ut(e,n){let o=n?y[e].points:y[e],{stroke:a,fill:i,clip:l,flags:s,_stroke:c=o._stroke,_fill:u=o._fill,_width:d=o.width}=o._paths;d=al(d*ri,3);let p=null,f=d%2/2;n&&null==u&&(u=d>0?"#fff":c);let m=1==o.pxAlign&&f>0;if(m&&h.translate(f,f),!n){let e=pe-d/2,t=fe-d/2,n=me+d,r=_e+d;p=new Path2D,p.rect(e,t,n,r)}n?ht(c,d,o.dash,o.cap,u,a,i,s,l):function(e,n,o,a,i,l,s,c,u,d,h){let p=!1;0!=u&&S.forEach(((f,m)=>{if(f.series[0]==e){let e,_=y[f.series[1]],g=t[f.series[1]],v=(_._paths||cl).band;hl(v)&&(v=1==f.dir?v[0]:v[1]);let b=null;_.show&&v&&function(e,t,n){for(t=Ni(t,0),n=Ni(n,e.length-1);t<=n;){if(null!=e[t])return!0;t++}return!1}(g,Ve,Be)?(b=f.fill(r,m)||l,e=_._paths.clip):v=null,ht(n,o,a,i,b,s,c,u,d,h,e,v),p=!0}})),p||ht(n,o,a,i,l,s,c,u,d,h)}(e,c,d,o.dash,o.cap,u,a,i,s,p,l),m&&h.translate(-f,-f)}const dt=2|Hs;function ht(e,t,n,r,o,a,i,l,s,c,u,d){at(e,t,n,r,o),(s||c||d)&&(h.save(),s&&h.clip(s),c&&h.clip(c)),d?(l&dt)==dt?(h.clip(d),u&&h.clip(u),ft(o,i),pt(e,a,t)):2&l?(ft(o,i),h.clip(d),pt(e,a,t)):l&Hs&&(h.save(),h.clip(d),u&&h.clip(u),ft(o,i),h.restore(),pt(e,a,t)):(ft(o,i),pt(e,a,t)),(s||c||d)&&h.restore()}function pt(e,t,n){n>0&&(t instanceof Map?t.forEach(((e,t)=>{h.strokeStyle=Ye=t,h.stroke(e)})):null!=t&&e&&h.stroke(t))}function ft(e,t){t instanceof Map?t.forEach(((e,t)=>{h.fillStyle=We=t,h.fill(e)})):null!=t&&e&&h.fill(t)}function mt(e,t,n,r,o,a,i,l,s,c){let u=i%2/2;1==_&&h.translate(u,u),at(l,i,s,c,l),h.beginPath();let d,p,f,m,g=o+(0==r||3==r?-a:a);0==n?(p=o,m=g):(d=o,f=g);for(let _=0;_{if(!n.show)return;let a=x[n.scale];if(null==a.min)return void(n._show&&(t=!1,n._show=!1,vt(!1)));n._show||(t=!1,n._show=!0,vt(!1));let i=n.side,l=i%2,{min:s,max:c}=a,[u,d]=function(e,t,n,o){let a,i=k[e];if(o<=0)a=[0,0];else{let l=i._space=i.space(r,e,t,n,o);a=Ec(t,n,i._incrs=i.incrs(r,e,t,n,o,l),o,l)}return i._found=a}(o,s,c,0==l?ae:ie);if(0==d)return;let h=2==a.distr,p=n._splits=n.splits(r,o,s,c,u,d,h),f=2==a.distr?p.map((e=>tt[e])):p,m=2==a.distr?tt[p[1]]-tt[p[0]]:u,_=n._values=n.values(r,n.filter(r,f,o,d,m),o,d,m);n._rotate=2==i?n.rotate(r,_,o,d):0;let g=n._size;n._size=ji(n.size(r,_,o,e)),null!=g&&n._size!=g&&(t=!1)})),t}function gt(e){let t=!0;return $e.forEach(((n,o)=>{let a=n(r,o,ze,e);a!=Fe[o]&&(t=!1),Fe[o]=a})),t}function vt(e){y.forEach(((t,n)=>{n>0&&(t._paths=null,e&&(1==o?(t.min=null,t.max=null):t.facets.forEach((e=>{e.min=null,e.max=null}))))}))}let yt,bt,wt,kt,xt,St,At,Et,Ct,Mt,Nt,Tt,Pt=!1,Dt=!1,Ot=[];function Rt(){Dt=!1;for(let e=0;e0){y.forEach(((n,a)=>{if(1==o){let o=n.scale,i=O[o];if(null==i)return;let l=e[o];if(0==a){let e=l.range(r,l.min,l.max,o);l.min=e[0],l.max=e[1],Ve=bi(l.min,t[0]),Be=bi(l.max,t[0]),Be-Ve>1&&(t[0][Ve]l.max&&Be--),n.min=tt[Ve],n.max=tt[Be]}else n.show&&n.auto&<(l,i,n,t[a],n.sorted);n.idxs[0]=Ve,n.idxs[1]=Be}else if(a>0&&n.show&&n.auto){let[r,o]=n.facets,i=r.scale,l=o.scale,[s,c]=t[a],u=e[i],d=e[l];null!=u&<(u,O[i],r,s,r.sorted),null!=d&<(d,O[l],o,c,o.sorted),n.min=o.min,n.max=o.max}}));for(let t in e){let n=e[t],o=O[t];if(null==n.from&&(null==o||null==o.min)){let e=n.range(r,n.min==Wi?null:n.min,n.max==-Wi?null:n.max,t);n.min=e[0],n.max=e[1]}}}for(let t in e){let n=e[t];if(null!=n.from){let o=e[n.from];if(null==o.min)n.min=n.max=null;else{let e=n.range(r,o.min,o.max,t);n.min=e[0],n.max=e[1]}}}let n={},a=!1;for(let t in e){let r=e[t],o=x[t];if(o.min!=r.min||o.max!=r.max){o.min=r.min,o.max=r.max;let e=o.distr;o._min=3==e?Bi(o.min):4==e?Yi(o.min,o.asinh):o.min,o._max=3==e?Bi(o.max):4==e?Yi(o.max,o.asinh):o.max,n[t]=a=!0}}if(a){y.forEach(((e,t)=>{2==o?t>0&&n.y&&(e._paths=null):n[e.scale]&&(e._paths=null)}));for(let e in n)ye=!0,kn("setScale",e);Ee.show&&Ee.left>=0&&(be=ke=!0)}for(let t in O)O[t]=null}(),ge=!1),ye&&(!function(){let e=!1,t=0;for(;!e;){t++;let n=_t(t),o=gt(t);e=t==Ae||n&&o,e||(Se(r.width,r.height),ve=!0)}}(),ye=!1),ve){if(li(f,Fa,le),li(f,ja,se),li(f,Ia,ae),li(f,za,ie),li(m,Fa,le),li(m,ja,se),li(m,Ia,ae),li(m,za,ie),li(p,Ia,re),li(p,za,oe),d.width=zi(re*ri),d.height=zi(oe*ri),k.forEach((e=>{let{_el:t,_show:n,_size:r,_pos:o,side:a}=e;if(null!=t)if(n){let e=a%2==1;li(t,e?"left":"top",o-(3===a||0===a?r:0)),li(t,e?"width":"height",r),li(t,e?"top":"left",e?se:le),li(t,e?"height":"width",e?ie:ae),ii(t,Ra)}else ai(t,Ra)})),Ye=We=qe=Ke=Ge=Qe=Je=Xe=Ze=null,et=1,ln(!0),le!=ce||se!=ue||ae!=de||ie!=he){vt(!1);let e=ae/de,t=ie/he;if(Ee.show&&!be&&Ee.left>=0){Ee.left*=e,Ee.top*=t,wt&&di(wt,zi(Ee.left),0,ae,ie),kt&&di(kt,0,zi(Ee.top),ae,ie);for(let n=1;n=0&&Vt.width>0){Vt.left*=e,Vt.width*=e,Vt.top*=t,Vt.height*=t;for(let e in un)li(Bt,e,Vt[e])}ce=le,ue=se,de=ae,he=ie}kn("setSize"),ve=!1}re>0&&oe>0&&(h.clearRect(0,0,d.width,d.height),kn("drawClear"),C.forEach((e=>e())),kn("draw")),Vt.show&&we&&(Ut(Vt),we=!1),Ee.show&&be&&(on(null,!0,!1),be=!1),F.show&&F.live&&ke&&(nn(),ke=!1),c||(c=!0,r.status=1,kn("ready")),nt=!1,Pt=!1}function zt(e,n){let o=x[e];if(null==o.from){if(0==He){let t=o.range(r,n.min,n.max,e);n.min=t[0],n.max=t[1]}if(n.min>n.max){let e=n.min;n.min=n.max,n.max=e}if(He>1&&null!=n.min&&null!=n.max&&n.max-n.min<1e-16)return;e==A&&2==o.distr&&He>0&&(n.min=bi(n.min,t[0]),n.max=bi(n.max,t[0]),n.min==n.max&&n.max++),O[e]=n,ge=!0,Lt()}}r.batch=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Pt=!0,Dt=t,e(r),It(),t&&Ot.length>0&&queueMicrotask(Rt)},r.redraw=(e,t)=>{ye=t||!1,!1!==e?Yt(A,N.min,N.max):Lt()},r.setScale=zt;let jt=!1;const $t=Ee.drag;let Ft=$t.x,Ht=$t.y;Ee.show&&(Ee.x&&(yt=ci("u-cursor-x",m)),Ee.y&&(bt=ci("u-cursor-y",m)),0==N.ori?(wt=yt,kt=bt):(wt=bt,kt=yt),Nt=Ee.left,Tt=Ee.top);const Vt=r.select=yl({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Bt=Vt.show?ci("u-select",Vt.over?m:f):null;function Ut(e,t){if(Vt.show){for(let t in e)Vt[t]=e[t],t in un&&li(Bt,t,e[t]);!1!==t&&kn("setSelect")}}function Yt(e,t,n){zt(e,{min:t,max:n})}function Wt(e,t,n,a){null!=t.focus&&function(e){if(e!=Kt){let t=null==e,n=1!=Pe.alpha;y.forEach(((r,a)=>{if(1==o||a>0){let o=t||0==a||a==e;r._focus=t?null:o,n&&function(e,t){y[e].alpha=t,Ee.show&&Oe[e]&&(Oe[e].style.opacity=t);H&&q[e]&&(q[e].style.opacity=t)}(a,o?1:Pe.alpha)}})),Kt=e,n&&Lt()}}(e),null!=t.show&&y.forEach(((n,r)=>{r>0&&(e==r||null==e)&&(n.show=t.show,function(e,t){let n=y[e],r=H?q[e]:null;n.show?r&&ii(r,Ra):(r&&ai(r,Ra),Oe.length>1&&di(Oe[e],-10,-10,ae,ie))}(r,t.show),2==o?(Yt(n.facets[0].scale,null,null),Yt(n.facets[1].scale,null,null)):Yt(n.scale,null,null),Lt())})),!1!==n&&kn("setSeries",e,t),a&&Cn("setSeries",r,e,t)}let qt,Zt,Kt;r.setSelect=Ut,r.setSeries=Wt,r.addBand=function(e,t){e.fill=Ki(e.fill||null),e.dir=Ni(e.dir,-1),t=null==t?S.length:t,S.splice(t,0,e)},r.setBand=function(e,t){yl(S[e],t)},r.delBand=function(e){null==e?S.length=0:S.splice(e,1)};const Gt={focus:!0};function Qt(e,t,n){let r=x[t];n&&(e=e/ri-(1==r.ori?se:le));let o=ae;1==r.ori&&(o=ie,e=o-e),-1==r.dir&&(e=o-e);let a=r._min,i=a+(r._max-a)*(e/o),l=r.distr;return 3==l?Hi(10,i):4==l?function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Oi.sinh(e)*t}(i,r.asinh):i}function Jt(e,t){li(Bt,Fa,Vt.left=e),li(Bt,Ia,Vt.width=t)}function Xt(e,t){li(Bt,ja,Vt.top=e),li(Bt,za,Vt.height=t)}H&&De&&te(Za,B,(e=>{Ee._lock||(Ne(e),null!=Kt&&Wt(null,Gt,!0,Sn.setSeries))})),r.valToIdx=e=>bi(e,t[0]),r.posToIdx=function(e,n){return bi(Qt(e,A,n),t[0],Ve,Be)},r.posToVal=Qt,r.valToPos=(e,t,n)=>0==x[t].ori?i(e,x[t],n?me:ae,n?pe:0):l(e,x[t],n?_e:ie,n?fe:0),r.setCursor=(e,t,n)=>{Nt=e.left,Tt=e.top,on(null,t,n)};let en=0==N.ori?Jt:Xt,tn=1==N.ori?Jt:Xt;function nn(e,t){null!=e&&(e.idxs?e.idxs.forEach(((e,t)=>{$[t]=e})):void 0!==e.idx&&$.fill(e.idx),F.idx=$[0]);for(let n=0;n0||1==o&&!K)&&rn(n,$[n]);H&&F.live&&function(){if(H&&F.live)for(let e=2==o?1:0;eBe;qt=Wi;let s=0==N.ori?ae:ie,c=1==N.ori?ae:ie;if(Nt<0||0==He||l){i=Ee.idx=null;for(let e=0;e0&&Oe.length>1&&di(Oe[e],-10,-10,ae,ie);De&&Wt(null,Gt,!0,null==e&&Sn.setSeries),F.live&&($.fill(i),ke=!0)}else{let e,n,a;1==o&&(e=0==N.ori?Nt:Tt,n=Qt(e,A),i=Ee.idx=bi(n,t[0],Ve,Be),a=P(t[0][i],N,s,0));for(let l=2==o?1:0;l0&&e.show){let t,n,a=null==p?-10:D(p,1==o?x[e.scale]:x[e.facets[1].scale],c,0);if(De&&null!=p){let t=1==N.ori?Nt:Tt,n=Li(Pe.dist(r,l,h,a,t));if(n=0?1:-1;a==(p>=0?1:-1)&&(1==a?1==r?p>=o:p<=o:1==r?p<=o:p>=o)&&(qt=n,Zt=l)}else qt=n,Zt=l}}if(0==N.ori?(t=f,n=a):(t=a,n=f),ke&&Oe.length>1){pi(Oe[l],Ee.points.fill(r,l),Ee.points.stroke(r,l));let e,o,a,i,s=!0,c=Ee.points.bbox;if(null!=c){s=!1;let t=c(r,l);a=t.left,i=t.top,e=t.width,o=t.height}else a=t,i=n,e=o=Ee.points.size(r,l);mi(Oe[l],e,o,s),Re[l]=a,Le[l]=i,di(Oe[l],rl(a,1),rl(i,1),ae,ie)}}}}if(Vt.show&&jt)if(null!=e){let[t,n]=Sn.scales,[r,o]=Sn.match,[a,i]=e.cursor.sync.scales,l=e.cursor.drag;if(Ft=l._x,Ht=l._y,Ft||Ht){let l,u,d,h,p,{left:f,top:m,width:_,height:g}=e.select,v=e.scales[t].ori,y=e.posToVal,b=null!=t&&r(t,a),w=null!=n&&o(n,i);b&&Ft?(0==v?(l=f,u=_):(l=m,u=g),d=x[t],h=P(y(l,a),d,s,0),p=P(y(l+u,a),d,s,0),en($i(h,p),Li(p-h))):en(0,s),w&&Ht?(1==v?(l=f,u=_):(l=m,u=g),d=x[n],h=D(y(l,i),d,c,0),p=D(y(l+u,i),d,c,0),tn($i(h,p),Li(p-h))):tn(0,c)}else dn()}else{let e=Li(Ct-xt),t=Li(Mt-St);if(1==N.ori){let n=e;e=t,t=n}Ft=$t.x&&e>=$t.dist,Ht=$t.y&&t>=$t.dist;let n,r,o=$t.uni;null!=o?Ft&&Ht&&(Ft=e>=o,Ht=t>=o,Ft||Ht||(t>e?Ht=!0:Ft=!0)):$t.x&&$t.y&&(Ft||Ht)&&(Ft=Ht=!0),Ft&&(0==N.ori?(n=At,r=Nt):(n=Et,r=Tt),en($i(n,r),Li(r-n)),Ht||tn(0,c)),Ht&&(1==N.ori?(n=At,r=Nt):(n=Et,r=Tt),tn($i(n,r),Li(r-n)),Ft||en(0,s)),Ft||Ht||(en(0,0),tn(0,0))}if($t._x=Ft,$t._y=Ht,null==e){if(a){if(null!=An){let[e,t]=Sn.scales;Sn.values[0]=null!=e?Qt(0==N.ori?Nt:Tt,e):null,Sn.values[1]=null!=t?Qt(1==N.ori?Nt:Tt,t):null}Cn(Ua,r,Nt,Tt,ae,ie,i)}if(De){let e=a&&Sn.setSeries,t=Pe.prox;null==Kt?qt<=t&&Wt(Zt,Gt,!0,e):qt>t?Wt(null,Gt,!0,e):Zt!=Kt&&Wt(Zt,Gt,!0,e)}}ke&&(F.idx=i,nn()),!1!==n&&kn("setCursor")}r.setLegend=nn;let an=null;function ln(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?an=null:(an=m.getBoundingClientRect(),kn("syncRect",an))}function sn(e,t,n,r,o,a,i){Ee._lock||jt&&null!=e&&0==e.movementX&&0==e.movementY||(cn(e,t,n,r,o,a,i,!1,null!=e),null!=e?on(null,!0,!0):on(t,!0,!1))}function cn(e,t,n,o,a,i,l,c,u){if(null==an&&ln(!1),Ne(e),null!=e)n=e.clientX-an.left,o=e.clientY-an.top;else{if(n<0||o<0)return Nt=-10,void(Tt=-10);let[e,r]=Sn.scales,l=t.cursor.sync,[c,u]=l.values,[d,h]=l.scales,[p,f]=Sn.match,m=t.axes[0].side%2==1,_=0==N.ori?ae:ie,g=1==N.ori?ae:ie,v=m?i:a,y=m?a:i,b=m?o:n,w=m?n:o;if(n=null!=d?p(e,d)?s(c,x[e],_,0):-10:_*(b/v),o=null!=h?f(r,h)?s(u,x[r],g,0):-10:g*(w/y),1==N.ori){let e=n;n=o,o=e}}u&&((n<=1||n>=ae-1)&&(n=nl(n,ae)),(o<=1||o>=ie-1)&&(o=nl(o,ie))),c?(xt=n,St=o,[At,Et]=Ee.move(r,n,o)):(Nt=n,Tt=o)}Object.defineProperty(r,"rect",{get:()=>(null==an&&ln(!1),an)});const un={width:0,height:0,left:0,top:0};function dn(){Ut(un,!1)}let hn,pn,fn,mn;function _n(e,t,n,o,a,i,l){jt=!0,Ft=Ht=$t._x=$t._y=!1,cn(e,t,n,o,a,i,0,!0,!1),null!=e&&(te(Wa,ei,gn,!1),Cn(Ya,r,At,Et,ae,ie,null));let{left:s,top:c,width:u,height:d}=Vt;hn=s,pn=c,fn=u,mn=d,dn()}function gn(e,t,n,o,a,i,l){jt=$t._x=$t._y=!1,cn(e,t,n,o,a,i,0,!1,!0);let{left:s,top:c,width:u,height:d}=Vt,h=u>0||d>0,p=hn!=s||pn!=c||fn!=u||mn!=d;if(h&&p&&Ut(Vt),$t.setScale&&h&&p){let e=s,t=u,n=c,r=d;if(1==N.ori&&(e=c,t=d,n=s,r=u),Ft&&Yt(A,Qt(e,A),Qt(e+t,A)),Ht)for(let o in x){let e=x[o];o!=A&&null==e.from&&e.min!=Wi&&Yt(o,Qt(n+r,o),Qt(n,o))}dn()}else Ee.lock&&(Ee._lock=!Ee._lock,Ee._lock||on(null,!0,!1));null!=e&&(ne(Wa,ei),Cn(Wa,r,Nt,Tt,ae,ie,null))}function vn(e,t,n,o,a,i,l){Ee._lock||(Ne(e),ot(),dn(),null!=e&&Cn(Ka,r,Nt,Tt,ae,ie,null))}function yn(){k.forEach(Mc),xe(r.width,r.height,!0)}vi(Qa,ti,yn);const bn={};bn.mousedown=_n,bn.mousemove=sn,bn.mouseup=gn,bn.dblclick=vn,bn.setSeries=(e,t,n,o)=>{-1!=(n=(0,Sn.match[2])(r,t,n))&&Wt(n,o,!0,!1)},Ee.show&&(te(Ya,m,_n),te(Ua,m,sn),te(qa,m,(e=>{Ne(e),ln(!1)})),te(Za,m,(function(e,t,n,r,o,a,i){if(Ee._lock)return;Ne(e);let l=jt;if(jt){let e,t,n=!0,r=!0,o=10;0==N.ori?(e=Ft,t=Ht):(e=Ht,t=Ft),e&&t&&(n=Nt<=o||Nt>=ae-o,r=Tt<=o||Tt>=ie-o),e&&n&&(Nt=Nt{e.call(null,r,t,n)}))}(e.plugins||[]).forEach((e=>{for(let t in e.hooks)wn[t]=(wn[t]||[]).concat(e.hooks[t])}));const xn=(e,t,n)=>n,Sn=yl({key:null,setSeries:!1,filters:{pub:Xi,sub:Xi},scales:[A,y[1]?y[1].scale:null],match:[el,el,xn],values:[null,null]},Ee.sync);2==Sn.match.length&&Sn.match.push(xn),Ee.sync=Sn;const An=Sn.key,En=Fs(An);function Cn(e,t,n,r,o,a,i){Sn.filters.pub(e,t,n,r,o,a,i)&&En.pub(e,t,n,r,o,a,i)}function Mn(){kn("init",e,t),rt(t||e.data,!1),O[A]?zt(A,O[A]):ot(),we=Vt.show&&(Vt.width>0||Vt.height>0),be=ke=!0,xe(e.width,e.height)}return En.sub(r),r.pub=function(e,t,n,r,o,a,i){Sn.filters.sub(e,t,n,r,o,a,i)&&bn[e](null,t,n,r,o,a,i)},r.destroy=function(){var e;En.unsub(r),pc.delete(r),ee.clear(),yi(Qa,ti,yn),u.remove(),null===(e=B)||void 0===e||e.remove(),kn("destroy")},y.forEach(Ie),k.forEach((function(e,t){if(e._show=e.show,e.show){let n=e.side%2,o=x[e.scale];null==o&&(e.scale=n?y[1].scale:A,o=x[e.scale]);let a=o.time;e.size=Ki(e.size),e.space=Ki(e.space),e.rotate=Ki(e.rotate),hl(e.incrs)&&e.incrs.forEach((e=>{!il.has(e)&&il.set(e,ll(e))})),e.incrs=Ki(e.incrs||(2==o.distr?Il:a?1==v?Kl:Jl:zl)),e.splits=Ki(e.splits||(a&&1==o.distr?I:3==o.distr?ws:4==o.distr?ks:bs)),e.stroke=Ki(e.stroke),e.grid.stroke=Ki(e.grid.stroke),e.ticks.stroke=Ki(e.ticks.stroke),e.border.stroke=Ki(e.border.stroke);let i=e.values;e.values=hl(i)&&!hl(i[0])?Ki(i):a?hl(i)?ns(R,ts(i,L)):fl(i)?function(e,t){let n=Tl(t);return(t,r,o,a,i)=>r.map((t=>n(e(t))))}(R,i):i||z:i||ys,e.filter=Ki(e.filter||(o.distr>=3&&10==o.log?Ms:3==o.distr&&2==o.log?Ns:Qi)),e.font=Cc(e.font),e.labelFont=Cc(e.labelFont),e._size=e.size(r,null,t,0),e._space=e._rotate=e._incrs=e._found=e._splits=e._values=null,e._size>0&&(ze[t]=!0,e._el=ci("u-axis",p))}})),n?n instanceof HTMLElement?(n.appendChild(u),Mn()):n(r,Mn):Mn(),r}Nc.assign=yl,Nc.fmtNum=Di,Nc.rangeNum=Mi,Nc.rangeLog=ki,Nc.rangeAsinh=xi,Nc.orient=Vs,Nc.pxRatio=ri,Nc.join=function(e,t){if(function(e){let t=e[0][0],n=t.length;for(let r=1;r1&&void 0!==arguments[1]?arguments[1]:100;const n=e.length;if(n<=1)return!0;let r=0,o=n-1;for(;r<=o&&null==e[r];)r++;for(;o>=r&&null==e[o];)o--;if(o<=r)return!0;const a=Fi(1,Ii((o-r+1)/t));for(let i=e[r],l=r+a;l<=o;l+=a){const t=e[l];if(null!=t){if(t<=i)return!1;i=t}}return!0}(t[0])||(t=function(e){let t=e[0],n=t.length,r=Array(n);for(let a=0;at[e]-t[n]));let o=[];for(let a=0;ae-t))],o=r[0].length,a=new Map;for(let i=0;iVs(e,a,((s,c,u,d,h,p,f,m,_,g,v)=>{let y=s.pxRound,{left:b,width:w}=e.bbox,k=e=>y(p(e,d,g,m)),x=e=>y(f(e,h,v,_)),S=0==d.ori?Js:Xs;const A={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Hs},E=A.stroke,C=d.dir*(0==d.ori?1:-1);i=wi(u,i,l,1),l=wi(u,i,l,-1);let M=x(u[1==C?i:l]),N=k(c[1==C?i:l]),T=N,P=N;o&&-1==t&&(P=b,S(E,P,M)),S(E,N,M);for(let e=1==C?i:l;e>=i&&e<=l;e+=C){let n=u[e];if(null==n)continue;let r=k(c[e]),o=x(n);1==t?S(E,r,M):S(E,T,o),S(E,r,o),M=o,T=r}let D=T;o&&1==t&&(D=b+w,S(E,D,M));let[O,R]=Bs(e,a);if(null!=s.fill||0!=O){let t=A.fill=new Path2D(E),n=x(s.fillTo(e,a,s.min,s.max,O));S(t,D,n),S(t,P,n)}if(!s.spanGaps){let o=[];o.push(...qs(c,u,i,l,C,k,r));let h=s.width*ri/2,p=n||1==t?h:-h,f=n||-1==t?-h:h;o.forEach((e=>{e[0]+=p,e[1]+=f})),A.gaps=o=s.gaps(e,a,i,l,o),A.clip=Ws(o,d.ori,m,_,g,v)}return 0!=R&&(A.band=2==R?[Ys(e,a,i,l,E,-1),Ys(e,a,i,l,E,1)]:Ys(e,a,i,l,E,R)),A}))},e.bars=function(e){const t=Ni((e=e||cl).size,[.6,Wi,1]),n=e.align||0,r=e.gap||0;let o=e.radius;o=null==o?[0,0]:"number"==typeof o?[o,0]:o;const a=Ki(o),i=1-t[0],l=Ni(t[1],Wi),s=Ni(t[2],1),c=Ni(e.disp,cl),u=Ni(e.each,(e=>{})),{fill:d,stroke:h}=c;return(e,t,o,p)=>Vs(e,t,((f,m,_,g,v,y,b,w,k,x,S)=>{let A,E,C=f.pxRound,M=n,N=r*ri,T=l*ri,P=s*ri;0==g.ori?[A,E]=a(e,t):[E,A]=a(e,t);const D=g.dir*(0==g.ori?1:-1);let O,R,L,I=0==g.ori?ec:tc,z=0==g.ori?u:(e,t,n,r,o,a,i)=>{u(e,t,n,o,r,i,a)},j=Ni(e.bands,ul).find((e=>e.series[0]==t)),$=null!=j?j.dir:0,F=f.fillTo(e,t,f.min,f.max,$),H=C(b(F,v,S,k)),V=x,B=C(f.width*ri),U=!1,Y=null,W=null,q=null,Z=null;null==d||0!=B&&null==h||(U=!0,Y=d.values(e,t,o,p),W=new Map,new Set(Y).forEach((e=>{null!=e&&W.set(e,new Path2D)})),B>0&&(q=h.values(e,t,o,p),Z=new Map,new Set(q).forEach((e=>{null!=e&&Z.set(e,new Path2D)}))));let{x0:K,size:G}=c;if(null!=K&&null!=G){M=1,m=K.values(e,t,o,p),2==K.unit&&(m=m.map((t=>e.posToVal(w+t*x,g.key,!0))));let n=G.values(e,t,o,p);R=2==G.unit?n[0]*x:y(n[0],g,x,w)-y(0,g,x,w),V=dc(m,_,y,g,x,w,V),L=V-R+N}else V=dc(m,_,y,g,x,w,V),L=V*i+N,R=V-L;L<1&&(L=0),B>=R/2&&(B=0),L<5&&(C=Gi);let Q=L>0;R=C(Zi(V-L-(Q?B:0),P,T)),O=(0==M?R/2:M==D?0:R)-M*D*((0==M?N/2:0)+(Q?B/2:0));const J={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},X=U?null:new Path2D;let ee=null;if(null!=j)ee=e.data[j.series[1]];else{let{y0:n,y1:r}=c;null!=n&&null!=r&&(_=r.values(e,t,o,p),ee=n.values(e,t,o,p))}let te=A*R,ne=E*R;for(let n=1==D?o:p;n>=o&&n<=p;n+=D){let r=_[n];if(null==r)continue;if(null!=ee){var re;let e=null!==(re=ee[n])&&void 0!==re?re:0;if(r-e==0)continue;H=b(e,v,S,k)}let o=y(2!=g.distr||null!=c?m[n]:n,g,x,w),a=b(Ni(r,F),v,S,k),i=C(o-O),l=C(Fi(a,H)),s=C($i(a,H)),u=l-s;if(null!=r){let o=r<0?ne:te,a=r<0?te:ne;U?(B>0&&null!=q[n]&&I(Z.get(q[n]),i,s+Ii(B/2),R,Fi(0,u-B),o,a),null!=Y[n]&&I(W.get(Y[n]),i,s+Ii(B/2),R,Fi(0,u-B),o,a)):I(X,i,s+Ii(B/2),R,Fi(0,u-B),o,a),z(e,t,n,i-B/2,s,R+B,u)}}if(B>0)J.stroke=U?Z:X;else if(!U){var oe;J._fill=0==f.width?f._fill:null!==(oe=f._stroke)&&void 0!==oe?oe:f._fill,J.width=0}return J.fill=U?W:X,J}))},e.spline=function(e){return function(e,t){const n=Ni(null===t||void 0===t?void 0:t.alignGaps,0);return(t,r,o,a)=>Vs(t,r,((i,l,s,c,u,d,h,p,f,m,_)=>{let g,v,y,b=i.pxRound,w=e=>b(d(e,c,m,p)),k=e=>b(h(e,u,_,f));0==c.ori?(g=Gs,y=Js,v=oc):(g=Qs,y=Xs,v=ac);const x=c.dir*(0==c.ori?1:-1);o=wi(s,o,a,1),a=wi(s,o,a,-1);let S=w(l[1==x?o:a]),A=S,E=[],C=[];for(let e=1==x?o:a;e>=o&&e<=a;e+=x)if(null!=s[e]){let t=w(l[e]);E.push(A=t),C.push(k(s[e]))}const M={stroke:e(E,C,g,y,v,b),fill:null,clip:null,band:null,gaps:null,flags:Hs},N=M.stroke;let[T,P]=Bs(t,r);if(null!=i.fill||0!=T){let e=M.fill=new Path2D(N),n=k(i.fillTo(t,r,i.min,i.max,T));y(e,A,n),y(e,S,n)}if(!i.spanGaps){let e=[];e.push(...qs(l,s,o,a,x,w,n)),M.gaps=e=i.gaps(t,r,o,a,e),M.clip=Ws(e,c.ori,p,f,m,_)}return 0!=P&&(M.band=2==P?[Ys(t,r,o,a,N,-1),Ys(t,r,o,a,N,1)]:Ys(t,r,o,a,N,P)),M}))}(hc,e)}}const Tc=(e,t,n)=>{if(void 0===e||null===e)return"";n=n||0,t=t||0;const r=Math.abs(n-t);if(isNaN(r)||0==r)return Math.abs(e)>=1e3?e.toLocaleString("en-US"):e.toString();let o=3+Math.floor(1+Math.log10(Math.max(Math.abs(t),Math.abs(n)))-Math.log10(r));return(isNaN(o)||o>20)&&(o=20),e.toLocaleString("en-US",{minimumSignificantDigits:1,maximumSignificantDigits:o})},Pc=[[31536e3,"{YYYY}",null,null,null,null,null,null,1],[2419200,"{MMM}","\n{YYYY}",null,null,null,null,null,1],[86400,"{MM}-{DD}","\n{YYYY}",null,null,null,null,null,1],[3600,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[60,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[1,"{HH}:{mm}:{ss}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD} {HH}:{mm}",null,null,null,1],[.001,":{ss}.{fff}","\n{YYYY}-{MM}-{DD} {HH}:{mm}",null,"\n{MM}-{DD} {HH}:{mm}",null,"\n{HH}:{mm}",null,1]],Dc=(e,t)=>Array.from(new Set(e.map((e=>e.scale)))).map((e=>{const n="10px Arial",r=it("color-text"),o={scale:e,show:!0,size:Oc,stroke:r,font:n,values:(e,n)=>function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const r=t[0],o=t[t.length-1];return n?t.map((e=>"".concat(Tc(e,r,o)," ").concat(n))):t.map((e=>Tc(e,r,o)))}(e,n,t)};return e?Number(e)%2||"y"===e?o:{...o,side:1}:{space:80,values:Pc,stroke:r,font:n}})),Oc=(e,t,n,r)=>{var o;const a=e.axes[n];if(r>1)return a._size||60;let i=6+((null===a||void 0===a||null===(o=a.ticks)||void 0===o?void 0:o.size)||0)+(a.gap||0);const l=(null!==t&&void 0!==t?t:[]).reduce(((e,t)=>(null===t||void 0===t?void 0:t.length)>e.length?t:e),"");return""!=l&&(i+=((e,t)=>{const n=document.createElement("span");n.innerText=e,n.style.cssText="position: absolute; z-index: -1; pointer-events: none; opacity: 0; font: ".concat(t),document.body.appendChild(n);const r=n.offsetWidth;return n.remove(),r})(l,"10px Arial")),Math.ceil(i)},Rc=(((e,t,n)=>{const r=[];for(let o=0;oMath.round(e))).join(", "))}r.map((e=>"rgb(".concat(e,")")))})([246,226,219],[127,39,4],16),e=>{for(let t=e.series.length-1;t>=0;t--)e.delSeries(t)}),Lc=e=>{Rc(e),(e=>{Object.keys(e.hooks).forEach((t=>{e.hooks[t]=[]}))})(e),e.setData([])},Ic=e=>t=>{const n=t.posToVal(t.select.left,"x"),r=t.posToVal(t.select.left+t.select.width,"x");e({min:n,max:r})};function zc(e){const t=xr(Sr[e]);return"rgba(".concat(t,", 0.05)")}let jc=function(e){return e.BAR="Bars",e.LINE="Lines",e.LINE_STEPPED="Stepped lines",e.POINTS="Points",e}({});const $c=(e,t,n,r)=>{var o,a;const i=e.under.clientWidth/20-1,l=null===Nc||void 0===Nc||null===(o=Nc.paths)||void 0===o||null===(a=o.bars)||void 0===a?void 0:a.call(o,{size:[.96,i]});return l?l(e,t,n,r):null},Fc=(e,t,n,r)=>{var o,a;const i=null===Nc||void 0===Nc||null===(o=Nc.paths)||void 0===o||null===(a=o.stepped)||void 0===a?void 0:a.call(o,{align:1});return i?i(e,t,n,r):null},Hc=e=>{switch(e){case jc.BAR:return $c;case jc.LINE_STEPPED:return Fc;default:return}},Vc=["color-log-hits-bar-1","color-log-hits-bar-2","color-log-hits-bar-3","color-log-hits-bar-4","color-log-hits-bar-5"],Bc={[jc.BAR]:.8,[jc.LINE_STEPPED]:1.2,[jc.LINE]:1.2,[jc.POINTS]:0},Uc=e=>{let{data:n,logHits:r,xRange:a,bands:i,containerSize:l,onReadyChart:s,setPlotScale:c,graphOptions:u}=e;const{isDarkTheme:d}=gt(),[h,p]=(0,t.useState)(-1),f=e=>{var t;const n=null!==(t=e.cursor.idx)&&void 0!==t?t:-1;p(n)},m=(0,t.useMemo)((()=>{let e=0;return n.map(((t,n)=>{var o;if(0===n)return{};const a=Object.values((null===r||void 0===r||null===(o=r[n-1])||void 0===o?void 0:o.fields)||{}).map((e=>e||'""')).join(", "),i=it(a?Vc[e]:"color-log-hits-bar-0");return a&&e++,{label:a||"other",width:Bc[u.graphStyle],spanGaps:!0,stroke:i,fill:u.fill?i+"80":"",paths:Hc(u.graphStyle)}}))}),[d,n,u]),_=(0,t.useMemo)((()=>({series:m,bands:i,width:l.width||window.innerWidth/2,height:l.height||200,cursor:{points:{width:(e,t,n)=>n/4,size:(e,t)=>{var n,r,o;return 2.5*((null===(n=e.series)||void 0===n||null===(r=n[t])||void 0===r||null===(o=r.points)||void 0===o?void 0:o.size)||1)},stroke:(e,t)=>{var n;return"".concat((null===m||void 0===m||null===(n=m[t])||void 0===n?void 0:n.stroke)||"#ffffff")},fill:()=>"#ffffff"}},scales:{x:{time:!0,range:()=>[a.min,a.max]}},hooks:{drawSeries:[],ready:[s],setCursor:[f],setSelect:[Ic(c)],destroy:[Lc]},legend:{show:!1},axes:Dc([{},{scale:"y"}]),tzDate:e=>o()(It(jt(e))).local().toDate()})),[d,m,i]);return{options:_,series:m,focusDataIdx:h}},Yc=e=>{let{data:n,focusDataIdx:r,uPlotInst:a}=e;const i=(0,t.useRef)(null),l=(0,t.useMemo)((()=>{var e,t;const i=(null===a||void 0===a?void 0:a.series)||[],[l,...s]=n.map((e=>e[r]||0)),c=s.map(((e,t)=>{var n;const r=i[t+1],o=null===r||void 0===r||null===(n=r.stroke)||void 0===n?void 0:n.call(r);return{label:(null===r||void 0===r?void 0:r.label)||"other",stroke:o,value:e,show:null===r||void 0===r?void 0:r.show}})).filter((e=>e.value>0&&e.show)).sort(((e,t)=>t.value-e.value));return{point:{top:c[0]&&(null===a||void 0===a||null===(e=a.valToPos)||void 0===e?void 0:e.call(a,c[0].value,"y"))||0,left:(null===a||void 0===a||null===(t=a.valToPos)||void 0===t?void 0:t.call(a,l,"x"))||0},values:c,total:c.reduce(((e,t)=>e+t.value),0),timestamp:o()(1e3*l).tz().format(wt)}}),[r,a,n]),s=(0,t.useMemo)((()=>{if(!a||!l.total||!i.current)return;const{top:e,left:t}=l.point,n=parseFloat(a.over.style.left),r=parseFloat(a.over.style.top),{width:o,height:s}=a.over.getBoundingClientRect(),{width:c,height:u}=i.current.getBoundingClientRect(),d={top:e+r+50-(e+u>=s?u+100:0),left:t+n+50-(t+c>=o?c+100:0)};return d.left<0&&(d.left=20),d.top<0&&(d.top=20),d}),[l,a,i.current]);return mt("div",{className:Kn()({"vm-chart-tooltip":!0,"vm-chart-tooltip_hits":!0,"vm-bar-hits-tooltip":!0,"vm-bar-hits-tooltip_visible":-1!==r&&l.values.length}),ref:i,style:s,children:[mt("div",{children:l.values.map(((e,t)=>mt("div",{className:"vm-chart-tooltip-data",children:[mt("span",{className:"vm-chart-tooltip-data__marker",style:{background:e.stroke}}),mt("p",{children:[e.label,": ",mt("b",{children:e.value})]})]},t)))}),l.values.length>1&&mt("div",{className:"vm-chart-tooltip-data",children:mt("p",{children:["Total records: ",mt("b",{children:l.total})]})}),mt("div",{className:"vm-chart-tooltip-header",children:mt("div",{className:"vm-chart-tooltip-header__title",children:l.timestamp})})]})},Wc=e=>{let{period:n,setPeriod:r}=e;const[a,i]=(0,t.useState)({min:n.start,max:n.end});return(0,t.useEffect)((()=>{i({min:n.start,max:n.end})}),[n]),{xRange:a,setPlotScale:e=>{let{min:t,max:n}=e;const a=1e3*(n-t);aEt||r({from:o()(1e3*t).toDate(),to:o()(1e3*n).toDate()})}}},qc=e=>(e=>e instanceof MouseEvent)(e)?e.clientX:e.touches[0].clientX,Zc=e=>{let{dragSpeed:n=.85,setPanning:r,setPlotScale:o}=e;const a=(0,t.useRef)({leftStart:0,xUnitsPerPx:0,scXMin:0,scXMax:0}),i=e=>{e.preventDefault();const t=qc(e),{leftStart:r,xUnitsPerPx:i,scXMin:l,scXMax:s}=a.current,c=i*((t-r)*n);o({min:l-c,max:s-c})},l=()=>{r(!1),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",l),document.removeEventListener("touchmove",i),document.removeEventListener("touchend",l)};return e=>{let{e:t,u:n}=e;t.preventDefault(),r(!0),a.current={leftStart:qc(t),xUnitsPerPx:n.posToVal(1,"x")-n.posToVal(0,"x"),scXMin:n.scales.x.min||0,scXMax:n.scales.x.max||0},document.addEventListener("mousemove",i),document.addEventListener("mouseup",l),document.addEventListener("touchmove",i),document.addEventListener("touchend",l)}},Kc=e=>{const[n,r]=(0,t.useState)(!1),o=Zc({dragSpeed:.9,setPanning:r,setPlotScale:e});return{onReadyChart:t=>{const n=e=>{const n=e instanceof MouseEvent&&(e=>{const{ctrlKey:t,metaKey:n,button:r}=e;return 0===r&&(t||n)})(e),r=window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1;(n||r)&&o({u:t,e:e})};t.over.addEventListener("mousedown",n),t.over.addEventListener("touchstart",n),t.over.addEventListener("wheel",(n=>{if(!n.ctrlKey&&!n.metaKey)return;n.preventDefault();const{width:r}=t.over.getBoundingClientRect(),o=t.cursor.left&&t.cursor.left>0?t.cursor.left:0,a=t.posToVal(o,"x"),i=(t.scales.x.max||0)-(t.scales.x.min||0),l=n.deltaY<0?.9*i:i/.9,s=a-o/r*l,c=s+l;t.batch((()=>e({min:s,max:c})))}))},isPanning:n}},Gc=e=>{const t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.sqrt(t*t+n*n)},Qc=e=>{let{uPlotInst:n,xRange:r,setPlotScale:o}=e;const[a,i]=(0,t.useState)(0),l=(0,t.useCallback)((e=>{const{target:t,ctrlKey:a,metaKey:i,key:l}=e,s=t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement;if(!n||s)return;const c="+"===l||"="===l;if(("-"===l||c)&&!(a||i)){e.preventDefault();const t=(r.max-r.min)/10*(c?1:-1);o({min:r.min+t,max:r.max-t})}}),[n,r]),s=(0,t.useCallback)((e=>{if(!n||2!==e.touches.length)return;e.preventDefault();const t=Gc(e.touches),i=a-t,l=n.scales.x.max||r.max,s=n.scales.x.min||r.min,c=(l-s)/50*(i>0?-1:1);n.batch((()=>o({min:s+c,max:l-c})))}),[n,a,r]);return Jn("keydown",l),Jn("touchmove",s),Jn("touchstart",(e=>{2===e.touches.length&&(e.preventDefault(),i(Gc(e.touches)))})),null},Jc=e=>{let{onChange:n}=e;const[r,o]=$e(),a=(0,t.useRef)(null),{value:i,toggle:l,setFalse:s}=Fr(!1),[c,u]=Or(jc.LINE_STEPPED,"graph"),[d,h]=Or(!1,"stacked"),[p,f]=Or(!1,"fill"),m=(0,t.useMemo)((()=>({graphStyle:c,stacked:d,fill:p})),[c,d,p]);return(0,t.useEffect)((()=>{n(m)}),[m]),mt("div",{className:"vm-bar-hits-options",ref:a,children:[mt(jr,{title:"Graph settings",children:mt(Pr,{variant:"text",color:"primary",startIcon:mt(pn,{}),onClick:l,ariaLabel:"settings"})}),mt(Ir,{open:i,placement:"bottom-right",onClose:s,buttonRef:a,title:"Graph settings",children:mt("div",{className:"vm-bar-hits-options-settings",children:[mt("div",{className:"vm-bar-hits-options-settings-item vm-bar-hits-options-settings-item_list",children:[mt("p",{className:"vm-bar-hits-options-settings-item__title",children:"Graph style:"}),Object.values(jc).map((e=>{return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_active":c===e}),onClick:(t=e,()=>{u(t),r.set("graph",t),o(r)}),children:e},e);var t}))]}),mt("div",{className:"vm-bar-hits-options-settings-item",children:mt($r,{label:"Stacked",value:d,onChange:e=>{h(e),e?r.set("stacked","true"):r.delete("stacked"),o(r)}})}),mt("div",{className:"vm-bar-hits-options-settings-item",children:mt($r,{label:"Fill",value:p,onChange:e=>{f(e),e?r.set("fill","true"):r.delete("fill"),o(r)}})})]})})]})};const Xc=function(e,t){const n=[];let r=[];const o=e[0].length,a=Array(o);for(let i=0;ia[t]+=+(null!==e&&void 0!==e?e:0))));for(let i=1;in>i&&!t(n))),i]});return r=r.filter((e=>e.series[1]>-1)),{data:[e[0]].concat(n),bands:r}},eu=e=>{let{uPlotInst:n,onApplyFilter:r}=e;const[o,a]=(0,t.useState)([]),i=(0,t.useCallback)((()=>{const e=n.series.filter((e=>"x"!==e.scale));a(e)}),[n]);return(0,t.useEffect)(i,[n]),mt("div",{className:"vm-bar-hits-legend",children:o.map((e=>{var t,o;return mt(jr,{title:mt("ul",{className:"vm-bar-hits-legend-info",children:[mt("li",{children:["Click to ",e.show?"hide":"show"," the _stream."]}),mt("li",{children:[gr()?"Cmd":"Ctrl"," + Click to filter by the _stream."]})]}),children:mt("div",{className:Kn()({"vm-bar-hits-legend-item":!0,"vm-bar-hits-legend-item_hide":!e.show}),onClick:(o=e,e=>{e.metaKey||e.ctrlKey?r(o.label||""):o.show=!o.show,i(),n.redraw()}),children:[mt("div",{className:"vm-bar-hits-legend-item__marker",style:{backgroundColor:"".concat(null===e||void 0===e||null===(t=e.stroke)||void 0===t?void 0:t.call(e))}}),mt("div",{children:e.label})]})},e.label)}))})},tu=e=>{let{logHits:n,data:r,period:o,setPeriod:a,onApplyFilter:i}=e;const[l,s]=Oa(),c=(0,t.useRef)(null),[u,d]=(0,t.useState)(),[h,p]=(0,t.useState)({graphStyle:jc.LINE_STEPPED,stacked:!1,fill:!1}),{xRange:f,setPlotScale:m}=Wc({period:o,setPeriod:a}),{onReadyChart:_,isPanning:g}=Kc(m);Qc({uPlotInst:u,xRange:f,setPlotScale:m});const{data:v,bands:y}=(0,t.useMemo)((()=>h.stacked?Xc(r,(()=>!1)):{data:r,bands:[]}),[h,r]),{options:b,series:w,focusDataIdx:k}=Uc({data:v,logHits:n,bands:y,xRange:f,containerSize:s,onReadyChart:_,setPlotScale:m,graphOptions:h});return(0,t.useEffect)((()=>{u&&(Rc(u),function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t.forEach((t=>{t.label&&(t.spanGaps=n),e.addSeries(t)}))}(u,w,!0),((e,t)=>{if(e.delBand(),t.length<2)return;const n=t.map(((e,t)=>({...e,index:t}))),r=n.filter((e=>e.forecast===tt.yhatUpper)),o=n.filter((e=>e.forecast===tt.yhatLower)),a=r.map((e=>{const t=o.find((t=>t.forecastGroup===e.forecastGroup));return t?{series:[e.index,t.index],fill:zc(tt.yhatUpper)}:null})).filter((e=>null!==e));a.length&&a.forEach((t=>{e.addBand(t)}))})(u,w),u.redraw())}),[w]),(0,t.useEffect)((()=>{if(!c.current)return;const e=new Nc(b,v,c.current);return d(e),()=>e.destroy()}),[c.current,b]),(0,t.useEffect)((()=>{u&&(u.scales.x.range=()=>[f.min,f.max],u.redraw())}),[f]),(0,t.useEffect)((()=>{u&&(u.setSize(s),u.redraw())}),[s]),(0,t.useEffect)((()=>{u&&(u.setData(v),u.redraw())}),[v]),mt("div",{className:"vm-bar-hits-chart__wrapper",children:[mt("div",{className:Kn()({"vm-bar-hits-chart":!0,"vm-bar-hits-chart_panning":g}),ref:l,children:[mt("div",{className:"vm-line-chart__u-plot",ref:c}),mt(Yc,{uPlotInst:u,data:r,focusDataIdx:k})]}),mt(Jc,{onChange:p}),u&&mt(eu,{uPlotInst:u,onApplyFilter:i})]})},nu=e=>{let{logHits:n,period:r,error:a,isLoading:i,onApplyFilter:l}=e;const{isMobile:s}=vr(),c=Qt(),u=(0,t.useMemo)((()=>{if(!n.length)return[[],[]];const e=Array.from(new Set(n.map((e=>e.timestamps)).flat())),t=(e=>e.map((e=>e?o()(e).unix():null)).filter(Boolean).sort(((e,t)=>e-t)))(e),r=((e,t)=>e.map((e=>t.map((t=>{const n=e.timestamps.findIndex((e=>e===t));return-1===n?null:e.values[n]||null})))))(n,e);return[t,...r]}),[n]),d=(0,t.useMemo)((()=>{const e=u.every((e=>0===e.length)),t=0===u[0].length,n=0===u[1].length;return e?"No logs volume available\nNo volume information available for the current queries and time range.":t?"No timestamp information available for the current queries and time range.":n?"No value information available for the current queries and time range.":""}),[u]);return mt("section",{className:Kn()({"vm-explore-logs-chart":!0,"vm-block":!0,"vm-block_mobile":s}),children:[i&&mt(fa,{message:"Loading hits stats...",containerStyles:{position:"absolute"}}),!a&&d&&mt("div",{className:"vm-explore-logs-chart__empty",children:mt(br,{variant:"info",children:d})}),a&&d&&mt("div",{className:"vm-explore-logs-chart__empty",children:mt(br,{variant:"error",children:a})}),u&&mt(tu,{logHits:n,data:u,period:r,setPeriod:e=>{let{from:t,to:n}=e;c({type:"SET_PERIOD",payload:{from:t,to:n}})},onApplyFilter:l})]})},ru=(e,n)=>{const[r]=$e(),[a,i]=(0,t.useState)([]),[l,s]=(0,t.useState)([]),[c,u]=(0,t.useState)(),d=(0,t.useRef)(new AbortController),h=(0,t.useMemo)((()=>(e=>"".concat(e,"/select/logsql/hits"))(e)),[e]),p=(e,t)=>(e.total=(e.total||0)+(t.total||0),t.timestamps.forEach(((n,r)=>{const o=e.timestamps.findIndex((e=>e===n));-1===o?(e.timestamps.push(n),e.values.push(t.values[r])):e.values[o]+=t.values[r]})),e),f=(0,t.useCallback)((async e=>{d.current.abort(),d.current=new AbortController;const{signal:t}=d.current,a=Date.now();s((e=>({...e,[a]:!0}))),u(void 0);try{const l=((e,t,n)=>{const a=o()(1e3*t.start),i=o()(1e3*t.end),l=i.diff(a,"milliseconds"),s=Math.ceil(l/20)||1;return{signal:n,method:"POST",headers:{AccountID:r.get("accountID")||"0",ProjectID:r.get("projectID")||"0"},body:new URLSearchParams({query:e.trim(),step:"".concat(s,"ms"),start:a.toISOString(),end:i.toISOString(),field:"_stream"})}})(n,e,t),c=await fetch(h,l);if(!c.ok||!c.body){const e=await c.text();return u(e),i([]),void s((e=>({...e,[a]:!1})))}const d=await c.json(),f=null===d||void 0===d?void 0:d.hits;if(!f){u("Error: No 'hits' field in response")}i(f?(e=>{const t=e.sort(((e,t)=>(t.total||0)-(e.total||0))),n=[],r=t.slice(5).reduce(p,{fields:{},timestamps:[],values:[],total:0});r.total&&n.push(r);const o=t.slice(0,5);return o.length&&n.push(...o),n})(f):[])}catch(zd){zd instanceof Error&&"AbortError"!==zd.name&&(u(String(zd)),console.error(zd),i([]))}s((e=>({...e,[a]:!1})))}),[h,n,r]);return{logHits:a,isLoading:Object.values(l).some((e=>e)),error:c,fetchLogHits:f}},ou=Number(We("LOGS_LIMIT")),au=isNaN(ou)?50:ou,iu=()=>{const{serverUrl:e}=gt(),{duration:n,relativeTime:r,period:o}=Gt(),{setSearchParamsFromKeys:a}=Rr(),[i,l]=Or(au,"limit"),[s,c]=Or("*","query"),[u,d]=(0,t.useState)(""),[h,p]=(0,t.useState)(o),[f,m]=(0,t.useState)(""),{logs:_,isLoading:g,error:v,fetchLogs:y}=pa(e,s,i),{fetchLogHits:b,...w}=ru(e,s),k=(0,t.useCallback)((()=>{const e=Ft.find((e=>e.id===r));if(!e)return o;const{duration:t,until:n}=e;return Rt(t,n())}),[o,r]),x=()=>{if(!s)return void m(rt.validQuery);m("");const e=k();p(e),y(e).then((t=>{t&&b(e)})).catch((e=>e)),a({query:s,"g0.range_input":n,"g0.end_input":e.date,"g0.relative_time":r||"none"})};return(0,t.useEffect)((()=>{s&&x()}),[o]),(0,t.useEffect)((()=>{x(),d(s)}),[s]),mt("div",{className:"vm-explore-logs",children:[mt(Da,{query:u,error:f,limit:i,onChange:d,onChangeLimit:e=>{l(e),a({limit:e}),Ye("LOGS_LIMIT","".concat(e))},onRun:()=>{c(u),x()}}),g&&mt(fa,{message:"Loading logs..."}),v&&mt(br,{variant:"error",children:v}),!v&&mt(nu,{...w,query:s,period:h,onApplyFilter:e=>{c((t=>"_stream: ".concat("other"===e?"{}":e," AND (").concat(t,")")))},isLoading:!g&&w.isLoading}),mt(ha,{data:_})]})},lu={home:"/",metrics:"/metrics",dashboards:"/dashboards",cardinality:"/cardinality",topQueries:"/top-queries",trace:"/trace",withTemplate:"/expand-with-exprs",relabel:"/relabeling",logs:"/logs",activeQueries:"/active-queries",queryAnalyzer:"/query-analyzer",icons:"/icons",anomaly:"/anomaly",query:"/query"},{REACT_APP_TYPE:su}={REACT_APP_TYPE:"logs"},cu=su===Ue.logs,uu={header:{tenant:!0,stepControl:!cu,timeSelector:!cu,executionControls:!cu}},du={[lu.home]:{title:"Query",...uu},[lu.metrics]:{title:"Explore Prometheus metrics",header:{tenant:!0,stepControl:!0,timeSelector:!0}},[lu.cardinality]:{title:"Explore cardinality",header:{tenant:!0,cardinalityDatePicker:!0}},[lu.topQueries]:{title:"Top queries",header:{tenant:!0}},[lu.trace]:{title:"Trace analyzer",header:{}},[lu.queryAnalyzer]:{title:"Query analyzer",header:{}},[lu.dashboards]:{title:"Dashboards",...uu},[lu.withTemplate]:{title:"WITH templates",header:{}},[lu.relabel]:{title:"Metric relabel debug",header:{}},[lu.logs]:{title:"Logs Explorer",header:{}},[lu.activeQueries]:{title:"Active Queries",header:{}},[lu.icons]:{title:"Icons",header:{}},[lu.anomaly]:{title:"Anomaly exploration",...uu},[lu.query]:{title:"Query",...uu}},hu=lu,pu=e=>{let{activeMenu:t,label:n,value:r,color:o}=e;return mt(Le,{className:Kn()({"vm-header-nav-item":!0,"vm-header-nav-item_active":t===r}),style:{color:o},to:r,children:n})},fu=e=>{let{activeMenu:n,label:r,color:o,background:a,submenu:i,direction:l}=e;const{pathname:s}=ne(),[c,u]=(0,t.useState)(null),d=(0,t.useRef)(null),{value:h,setFalse:p,setTrue:f}=Fr(!1),m=()=>{c&&clearTimeout(c);const e=setTimeout(p,300);u(e)};return(0,t.useEffect)((()=>{p()}),[s]),"column"===l?mt(pt.FK,{children:i.map((e=>mt(pu,{activeMenu:n,value:e.value||"",label:e.label||""},e.value)))}):mt("div",{className:Kn()({"vm-header-nav-item":!0,"vm-header-nav-item_sub":!0,"vm-header-nav-item_open":h,"vm-header-nav-item_active":i.find((e=>e.value===n))}),style:{color:o},onMouseEnter:()=>{f(),c&&clearTimeout(c)},onMouseLeave:m,ref:d,children:[r,mt(kn,{}),mt(Ir,{open:h,placement:"bottom-left",offset:{top:12,left:0},onClose:p,buttonRef:d,children:mt("div",{className:"vm-header-nav-item-submenu",style:{background:a},onMouseLeave:m,onMouseEnter:()=>{c&&clearTimeout(c)},children:i.map((e=>mt(pu,{activeMenu:n,value:e.value||"",label:e.label||"",color:o},e.value)))})})]})},mu={label:"Explore",submenu:[{label:du[hu.metrics].title,value:hu.metrics},{label:du[hu.cardinality].title,value:hu.cardinality},{label:du[hu.topQueries].title,value:hu.topQueries},{label:du[hu.activeQueries].title,value:hu.activeQueries}]},_u={label:"Tools",submenu:[{label:du[hu.trace].title,value:hu.trace},{label:du[hu.queryAnalyzer].title,value:hu.queryAnalyzer},{label:du[hu.withTemplate].title,value:hu.withTemplate},{label:du[hu.relabel].title,value:hu.relabel}]},gu=[{label:du[hu.logs].title,value:hu.home}],vu=[{label:du[hu.anomaly].title,value:hu.home}],yu=[{label:du[hu.home].title,value:hu.home},mu,_u],bu=e=>{let{color:n,background:r,direction:o}=e;const a=He(),{dashboardsSettings:i}=(0,t.useContext)(dr).state,{pathname:l}=ne(),[s,c]=(0,t.useState)(l),u=(0,t.useMemo)((()=>{switch("logs"){case Ue.logs:return gu;case Ue.anomaly:return vu;default:return[...yu,{label:du[hu.dashboards].title,value:hu.dashboards,hide:a||!i.length}].filter((e=>!e.hide))}}),[a,i]);return(0,t.useEffect)((()=>{c(l)}),[l]),mt("nav",{className:Kn()({"vm-header-nav":!0,["vm-header-nav_".concat(o)]:o}),children:u.map((e=>e.submenu?mt(fu,{activeMenu:s,label:e.label||"",submenu:e.submenu,color:n,background:r,direction:o},e.label):mt(pu,{activeMenu:s,value:e.value||"",label:e.label||"",color:n},e.value)))})},wu=e=>{let{title:n,children:r,onClose:o,className:a,isOpen:i=!0}=e;const{isMobile:l}=vr(),s=oe(),c=ne(),u=(0,t.useCallback)((e=>{i&&"Escape"===e.key&&o()}),[i]),d=e=>{e.stopPropagation()},h=(0,t.useCallback)((()=>{i&&(s(c,{replace:!0}),o())}),[i,c,o]);return(0,t.useEffect)((()=>{if(i)return document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}}),[i]),Jn("popstate",h),Jn("keyup",u),t.default.createPortal(mt("div",{className:Kn()({"vm-modal":!0,"vm-modal_mobile":l,["".concat(a)]:a}),onMouseDown:o,children:mt("div",{className:"vm-modal-content",children:[mt("div",{className:"vm-modal-content-header",onMouseDown:d,children:[n&&mt("div",{className:"vm-modal-content-header__title",children:n}),mt("div",{className:"vm-modal-header__close",children:mt(Pr,{variant:"text",size:"small",onClick:o,ariaLabel:"close",children:mt(fn,{})})})]}),mt("div",{className:"vm-modal-content-body",onMouseDown:d,tabIndex:0,children:r})]})}),document.body)},ku=mt("code",{children:gr()?"Cmd":"Ctrl"}),xu=[{title:"Zoom in",description:mt(pt.FK,{children:["To zoom in, hold down the ",ku," + ",mt("code",{children:"scroll up"}),", or press the ",mt("code",{children:"+"}),". Also, you can zoom in on a range on the graph by holding down your mouse button and selecting the range."]})},{title:"Zoom out",description:mt(pt.FK,{children:["To zoom out, hold down the ",ku," + ",mt("code",{children:"scroll down"}),", or press the ",mt("code",{children:"-"}),"."]})},{title:"Move horizontal axis",description:mt(pt.FK,{children:["To move the graph, hold down the ",ku," + ",mt("code",{children:"drag"})," the graph to the right or left."]})},{title:"Fixing a tooltip",description:mt(pt.FK,{children:["To fix the tooltip, ",mt("code",{children:"click"})," mouse when it's open. Then, you can drag the fixed tooltip by ",mt("code",{children:"clicking"})," and ",mt("code",{children:"dragging"})," on the ",mt(Rn,{})," icon."]})},{title:"Set a custom range for the vertical axis",description:mt(pt.FK,{children:["To set a custom range for the vertical axis, click on the ",mt(pn,{})," icon located in the upper right corner of the graph, activate the toggle, and set the values."]})}],Su=[{title:"Show/hide a legend item",description:mt(pt.FK,{children:[mt("code",{children:"click"})," on a legend item to isolate it on the graph.",ku," + ",mt("code",{children:"click"})," on a legend item to remove it from the graph. To revert to the previous state, click again."]})},{title:"Copy label key-value pairs",description:mt(pt.FK,{children:[mt("code",{children:"click"})," on a label key-value pair to save it to the clipboard."]})},{title:"Collapse/Expand the legend group",description:mt(pt.FK,{children:[mt("code",{children:"click"})," on the group name (e.g. ",mt("b",{children:'Query 1: {__name__!=""}'}),") to collapse or expand the legend."]})}],Au=xu.concat(Su),Eu=()=>{const{value:e,setFalse:t,setTrue:n}=Fr(!1);return mt(pt.FK,{children:[mt(jr,{title:"Show tips on working with the graph",children:mt(Pr,{variant:"text",color:"gray",startIcon:mt($n,{}),onClick:n,ariaLabel:"open the tips"})}),e&&mt(wu,{title:"Tips on working with the graph and the legend",onClose:t,children:mt("div",{className:"fc-graph-tips",children:Au.map((e=>{let{title:t,description:n}=e;return mt("div",{className:"fc-graph-tips-item",children:[mt("h4",{className:"fc-graph-tips-item__action",children:t}),mt("p",{className:"fc-graph-tips-item__description",children:n})]},t)}))})})]})},Cu=mt("code",{children:gr()?"Cmd":"Ctrl"}),Mu=mt(pt.FK,{children:[mt("code",{children:gr()?"Option":"Ctrl"})," + ",mt("code",{children:"Space"})]}),Nu=[{title:"Query",list:[{keys:mt("code",{children:"Enter"}),description:"Run"},{keys:mt(pt.FK,{children:[mt("code",{children:"Shift"})," + ",mt("code",{children:"Enter"})]}),description:"Multi-line queries"},{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"Arrow Up"})]}),description:"Previous command from the Query history"},{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"Arrow Down"})]}),description:"Next command from the Query history"},{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"click"})," by ",mt(Dn,{})]}),description:"Toggle multiple queries"},{keys:Mu,description:"Show quick autocomplete tips"}]},{title:"Graph",readMore:mt(Eu,{}),list:[{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"scroll Up"})," or ",mt("code",{children:"+"})]}),description:"Zoom in"},{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"scroll Down"})," or ",mt("code",{children:"-"})]}),description:"Zoom out"},{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"drag"})]}),description:"Move the graph left/right"},{keys:mt(pt.FK,{children:mt("code",{children:"click"})}),description:"Select the series in the legend"},{keys:mt(pt.FK,{children:[Cu," + ",mt("code",{children:"click"})]}),description:"Toggle multiple series in the legend"}]}],Tu="Shortcut keys",Pu=gr(),Du=Pu?"Cmd + /":"F1",Ou=e=>{let{showTitle:n}=e;const r=He(),{value:o,setTrue:a,setFalse:i}=Fr(!1),l=(0,t.useCallback)((e=>{const t=Pu&&"/"===e.key&&e.metaKey,n=!Pu&&"F1"===e.key&&!e.metaKey;(t||n)&&a()}),[a]);return Jn("keydown",l),mt(pt.FK,{children:[mt(jr,{open:!0!==n&&void 0,title:"".concat(Tu," (").concat(Du,")"),placement:"bottom-center",children:mt(Pr,{className:r?"":"vm-header-button",variant:"contained",color:"primary",startIcon:mt(En,{}),onClick:a,ariaLabel:Tu,children:n&&Tu})}),o&&mt(wu,{title:"Shortcut keys",onClose:i,children:mt("div",{className:"vm-shortcuts",children:Nu.map((e=>mt("div",{className:"vm-shortcuts-section",children:[e.readMore&&mt("div",{className:"vm-shortcuts-section__read-more",children:e.readMore}),mt("h3",{className:"vm-shortcuts-section__title",children:e.title}),mt("div",{className:"vm-shortcuts-section-list",children:e.list.map(((t,n)=>mt("div",{className:"vm-shortcuts-section-list-item",children:[mt("div",{className:"vm-shortcuts-section-list-item__key",children:t.keys}),mt("p",{className:"vm-shortcuts-section-list-item__description",children:t.description})]},"".concat(e.title,"_").concat(n))))})]},e.title)))})})]})},Ru=e=>{let{open:t}=e;return mt("button",{className:Kn()({"vm-menu-burger":!0,"vm-menu-burger_opened":t}),"aria-label":"menu",children:mt("span",{})})},{REACT_APP_TYPE:Lu}={REACT_APP_TYPE:"logs"},Iu=Lu===Ue.logs,zu=e=>{let{background:n,color:r}=e;const{pathname:o}=ne(),{isMobile:a}=vr(),i=(0,t.useRef)(null),{value:l,toggle:s,setFalse:c}=Fr(!1);return(0,t.useEffect)(c,[o]),Lr(i,c),mt("div",{className:"vm-header-sidebar",ref:i,children:[mt("div",{className:Kn()({"vm-header-sidebar-button":!0,"vm-header-sidebar-button_open":l}),onClick:s,children:mt(Ru,{open:l})}),mt("div",{className:Kn()({"vm-header-sidebar-menu":!0,"vm-header-sidebar-menu_open":l}),children:[mt("div",{children:mt(bu,{color:r,background:n,direction:"column"})}),mt("div",{className:"vm-header-sidebar-menu-settings",children:!a&&!Iu&&mt(Ou,{showTitle:!0})})]})]})},ju=e=>{let{controlsComponent:n,isMobile:r,...o}=e;const a=He(),{pathname:i}=ne(),{accountIds:l}=(()=>{const{useTenantID:e}=Fe(),n=He(),{serverUrl:r}=gt(),[o,a]=(0,t.useState)(!1),[i,l]=(0,t.useState)(),[s,c]=(0,t.useState)([]),u=(0,t.useMemo)((()=>"".concat(r.replace(/^(.+)(\/select.+)/,"$1"),"/admin/tenants")),[r]),d=(0,t.useMemo)((()=>!!Be(r)),[r]),h=n?!e:!d;return(0,t.useEffect)((()=>{h||(async()=>{a(!0);try{const e=await fetch(u),t=await e.json(),n=t.data||[];c(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?l(void 0):l("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(zd){zd instanceof Error&&l("".concat(zd.name,": ").concat(zd.message))}a(!1)})().catch(console.error)}),[u]),{accountIds:s,isLoading:o,error:i}})(),{value:s,toggle:c,setFalse:u}=Fr(!1),d=mt(n,{...o,isMobile:r,accountIds:l,headerSetup:(0,t.useMemo)((()=>(du[i]||{}).header||{}),[i])});return r?mt(pt.FK,{children:[mt("div",{children:mt(Pr,{className:Kn()({"vm-header-button":!a}),startIcon:mt(jn,{}),onClick:c,ariaLabel:"controls"})}),mt(wu,{title:"Controls",onClose:u,isOpen:s,className:Kn()({"vm-header-controls-modal":!0,"vm-header-controls-modal_open":s}),children:d})]}):d},{REACT_APP_TYPE:$u}={REACT_APP_TYPE:"logs"},Fu=$u===Ue.logs||$u===Ue.anomaly,Hu=()=>{switch($u){case Ue.logs:return mt(un,{});case Ue.anomaly:return mt(dn,{});default:return mt(cn,{})}},Vu=e=>{let{controlsComponent:n}=e;const{isMobile:r}=vr(),o=Xn(),a=(0,t.useMemo)((()=>window.innerWidth<1e3),[o]),{isDarkTheme:i}=gt(),l=He(),s=(0,t.useMemo)((()=>it(i?"color-background-block":"color-primary")),[i]),{background:c,color:u}=(0,t.useMemo)((()=>{const{headerStyles:{background:e=(l?"#FFF":s),color:t=(l?s:"#FFF")}={}}=Fe();return{background:e,color:t}}),[s]),d=oe(),h=()=>{d({pathname:hu.home}),window.location.reload()};return mt("header",{className:Kn()({"vm-header":!0,"vm-header_app":l,"vm-header_dark":i,"vm-header_sidebar":a,"vm-header_mobile":r}),style:{background:c,color:u},children:[a?mt(zu,{background:c,color:u}):mt(pt.FK,{children:[!l&&mt("div",{className:Kn()({"vm-header-logo":!0,"vm-header-logo_logs":Fu}),onClick:h,style:{color:u},children:mt(Hu,{})}),mt(bu,{color:u,background:c})]}),a&&mt("div",{className:Kn()({"vm-header-logo":!0,"vm-header-logo_mobile":!0,"vm-header-logo_logs":Fu}),onClick:h,style:{color:u},children:mt(Hu,{})}),mt(ju,{controlsComponent:n,displaySidebar:a,isMobile:r})]})},Bu={href:"https://github.com/VictoriaMetrics/VictoriaMetrics/issues/new/choose",Icon:()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3z"})}),title:"Create an issue"},Uu=[{href:"https://docs.victoriametrics.com/MetricsQL.html",Icon:Tn,title:"MetricsQL"},{href:"https://docs.victoriametrics.com/#vmui",Icon:Ln,title:"Documentation"},Bu],Yu=[{href:"https://docs.victoriametrics.com/victorialogs/logsql/",Icon:Tn,title:"LogsQL"},{href:"https://docs.victoriametrics.com/victorialogs/",Icon:Ln,title:"Documentation"},Bu],Wu=(0,t.memo)((e=>{let{links:t=Uu}=e;const n="2019-".concat((new Date).getFullYear());return mt("footer",{className:"vm-footer",children:[mt("a",{className:"vm-link vm-footer__website",target:"_blank",href:"https://victoriametrics.com/",rel:"me noreferrer",children:[mt(hn,{}),"victoriametrics.com"]}),t.map((e=>{let{href:t,Icon:n,title:r}=e;return mt("a",{className:"vm-link vm-footer__link",target:"_blank",href:t,rel:"help noreferrer",children:[mt(n,{}),r]},"".concat(t,"-").concat(r))})),mt("div",{className:"vm-footer__copyright",children:["\xa9 ",n," VictoriaMetrics"]})]})})),qu=Wu,Zu="Enable to save the modified server URL to local storage, preventing reset upon page refresh.",Ku="Disable to stop saving the server URL to local storage, reverting to the default URL on page refresh.",Gu=(0,t.forwardRef)(((e,n)=>{let{onClose:r}=e;const{serverUrl:o}=gt(),a=vt(),{value:i,toggle:l}=Fr(!!We("SERVER_URL")),[s,c]=(0,t.useState)(o),[u,d]=(0,t.useState)(""),h=(0,t.useCallback)((()=>{const e=Be(s);""!==e&&a({type:"SET_TENANT_ID",payload:e}),a({type:"SET_SERVER",payload:s}),r()}),[s]);return(0,t.useEffect)((()=>{o||d(rt.emptyServer),(e=>{let t;try{t=new URL(e)}catch(n){return!1}return"http:"===t.protocol||"https:"===t.protocol})(o)||d(rt.validServer)}),[o]),(0,t.useEffect)((()=>{i?Ye("SERVER_URL",s):qe(["SERVER_URL"])}),[i]),(0,t.useEffect)((()=>{i&&Ye("SERVER_URL",s)}),[s]),(0,t.useEffect)((()=>{o!==s&&c(o)}),[o]),(0,t.useImperativeHandle)(n,(()=>({handleApply:h})),[h]),mt("div",{children:[mt("div",{className:"vm-server-configurator__title",children:"Server URL"}),mt("div",{className:"vm-server-configurator-url",children:[mt(Vr,{autofocus:!0,value:s,error:u,onChange:e=>{c(e||""),d("")},onEnter:h,inputmode:"url"}),mt(jr,{title:i?Ku:Zu,children:mt(Pr,{className:"vm-server-configurator-url__button",variant:"text",color:i?"primary":"gray",onClick:l,startIcon:mt(zn,{})})})]})]})})),Qu=[{label:"Graph",type:nt.chart},{label:"JSON",type:nt.code},{label:"Table",type:nt.table}],Ju=(0,t.forwardRef)(((e,n)=>{let{onClose:r}=e;const{isMobile:o}=vr(),{seriesLimits:a}=(0,t.useContext)(ar).state,i=(0,t.useContext)(ar).dispatch,[l,s]=(0,t.useState)(a),[c,u]=(0,t.useState)({table:"",chart:"",code:""}),d=(0,t.useCallback)((()=>{i({type:"SET_SERIES_LIMITS",payload:l}),r()}),[l]);return(0,t.useImperativeHandle)(n,(()=>({handleApply:d})),[d]),mt("div",{className:"vm-limits-configurator",children:[mt("div",{className:"vm-server-configurator__title",children:["Series limits by tabs",mt(jr,{title:"Set to 0 to disable the limit",children:mt(Pr,{variant:"text",color:"primary",size:"small",startIcon:mt(_n,{})})}),mt("div",{className:"vm-limits-configurator-title__reset",children:mt(Pr,{variant:"text",color:"primary",size:"small",startIcon:mt(mn,{}),onClick:()=>{s(Xe)},children:"Reset limits"})})]}),mt("div",{className:Kn()({"vm-limits-configurator__inputs":!0,"vm-limits-configurator__inputs_mobile":o}),children:Qu.map((e=>{return mt("div",{children:mt(Vr,{label:e.label,value:l[e.type],error:c[e.type],onChange:(t=e.type,e=>{const n=e||"";u((e=>({...e,[t]:+n<0?rt.positiveNumber:""}))),s({...l,[t]:n||1/0})}),onEnter:d,type:"number"})},e.type);var t}))})]})})),Xu=Ju,ed=()=>mt(jr,{title:"Browser timezone is not recognized, supported, or could not be determined.",children:mt(gn,{})}),td=Yt(),nd=(0,t.forwardRef)(((e,n)=>{const{isMobile:r}=vr(),o=Bt(),{timezone:a,defaultTimezone:i}=Gt(),l=Qt(),[s,c]=(0,t.useState)(a),[u,d]=(0,t.useState)(""),h=(0,t.useRef)(null),{value:p,toggle:f,setFalse:m}=Fr(!1),_=(0,t.useMemo)((()=>[{title:"Default time (".concat(i,")"),region:i,utc:i?Vt(i):"UTC"},{title:td.title,region:td.region,utc:Vt(td.region),isInvalid:!td.isValid},{title:"UTC (Coordinated Universal Time)",region:"UTC",utc:"UTC"}].filter((e=>e.region))),[i]),g=(0,t.useMemo)((()=>{if(!u)return o;try{return Bt(u)}catch(zd){return{}}}),[u,o]),v=(0,t.useMemo)((()=>Object.keys(g)),[g]),y=(0,t.useMemo)((()=>({region:s,utc:Vt(s)})),[s]),b=e=>()=>{(e=>{c(e.region),d(""),m()})(e)};return(0,t.useEffect)((()=>{c(a)}),[a]),(0,t.useImperativeHandle)(n,(()=>({handleApply:()=>{l({type:"SET_TIMEZONE",payload:s})}})),[s]),mt("div",{className:"vm-timezones",children:[mt("div",{className:"vm-server-configurator__title",children:"Time zone"}),mt("div",{className:"vm-timezones-item vm-timezones-item_selected",onClick:f,ref:h,children:[mt("div",{className:"vm-timezones-item__title",children:y.region}),mt("div",{className:"vm-timezones-item__utc",children:y.utc}),mt("div",{className:Kn()({"vm-timezones-item__icon":!0,"vm-timezones-item__icon_open":p}),children:mt(kn,{})})]}),mt(Ir,{open:p,buttonRef:h,placement:"bottom-left",onClose:m,fullWidth:!0,title:r?"Time zone":void 0,children:mt("div",{className:Kn()({"vm-timezones-list":!0,"vm-timezones-list_mobile":r}),children:[mt("div",{className:"vm-timezones-list-header",children:[mt("div",{className:"vm-timezones-list-header__search",children:mt(Vr,{autofocus:!0,label:"Search",value:u,onChange:e=>{d(e)}})}),_.map(((e,t)=>e&&mt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[mt("div",{className:"vm-timezones-item__title",children:[e.title,e.isInvalid&&mt(ed,{})]}),mt("div",{className:"vm-timezones-item__utc",children:e.utc})]},"".concat(t,"_").concat(e.region))))]}),v.map((e=>mt("div",{className:"vm-timezones-list-group",children:mt(Kr,{defaultExpanded:!0,title:mt("div",{className:"vm-timezones-list-group__title",children:e}),children:mt("div",{className:"vm-timezones-list-group-options",children:g[e]&&g[e].map((e=>mt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[mt("div",{className:"vm-timezones-item__title",children:e.region}),mt("div",{className:"vm-timezones-item__utc",children:e.utc})]},e.search)))})})},e)))]})})]})})),rd=nd,od=e=>{let{options:n,value:r,label:o,onChange:a}=e;const i=(0,t.useRef)(null),[l,s]=(0,t.useState)({width:"0px",left:"0px",borderRadius:"0px"}),c=e=>()=>{a(e)};return(0,t.useEffect)((()=>{if(!i.current)return void s({width:"0px",left:"0px",borderRadius:"0px"});const e=n.findIndex((e=>e.value===r)),{width:t}=i.current.getBoundingClientRect();let o=t,a=e*o,l="0";0===e&&(l="16px 0 0 16px"),e===n.length-1&&(l="10px",a-=1,l="0 16px 16px 0"),0!==e&&e!==n.length-1&&(o+=1,a-=1),s({width:"".concat(o,"px"),left:"".concat(a,"px"),borderRadius:l})}),[i,r,n]),mt("div",{className:"vm-toggles",children:[o&&mt("label",{className:"vm-toggles__label",children:o}),mt("div",{className:"vm-toggles-group",style:{gridTemplateColumns:"repeat(".concat(n.length,", 1fr)")},children:[l.borderRadius&&mt("div",{className:"vm-toggles-group__highlight",style:l}),n.map(((e,t)=>mt("div",{className:Kn()({"vm-toggles-group-item":!0,"vm-toggles-group-item_first":0===t,"vm-toggles-group-item_active":e.value===r,"vm-toggles-group-item_icon":e.icon&&e.title}),onClick:c(e.value),ref:e.value===r?i:null,children:[e.icon,e.title]},e.value)))]})]})},ad=Object.values(ot).map((e=>({title:e,value:e}))),id=()=>{const{isMobile:e}=vr(),t=vt(),{theme:n}=gt();return mt("div",{className:Kn()({"vm-theme-control":!0,"vm-theme-control_mobile":e}),children:[mt("div",{className:"vm-server-configurator__title",children:"Theme preferences"}),mt("div",{className:"vm-theme-control__toggle",children:mt(od,{options:ad,value:n,onChange:e=>{t({type:"SET_THEME",payload:e})}})},"".concat(e))]})},ld=()=>{const{isMobile:e}=vr(),{markdownParsing:n}=mr(),r=(0,t.useContext)(fr).dispatch;return mt("div",{children:[mt("div",{className:"vm-server-configurator__title",children:"Markdown Parsing for Logs"}),mt($r,{label:n?"Disable markdown parsing":"Enable markdown parsing",value:n,onChange:e=>{r({type:"SET_MARKDOWN_PARSING",payload:e})},fullWidth:e}),mt("div",{className:"vm-server-configurator__info",children:"Toggle this switch to enable or disable the Markdown formatting for log entries. Enabling this will parse log texts to Markdown."})]})},sd="Settings",{REACT_APP_TYPE:cd}={REACT_APP_TYPE:"logs"},ud=cd===Ue.logs,dd=()=>{const{isMobile:e}=vr(),n=He(),r=(0,t.useRef)(null),o=(0,t.useRef)(null),a=(0,t.useRef)(null),{value:i,setTrue:l,setFalse:s}=Fr(!1),c=[{show:!n&&!ud,component:mt(Gu,{ref:r,onClose:s})},{show:!ud,component:mt(Xu,{ref:o,onClose:s})},{show:ud,component:mt(ld,{})},{show:!0,component:mt(rd,{ref:a})},{show:!n,component:mt(id,{})}].filter((e=>e.show));return mt(pt.FK,{children:[e?mt("div",{className:"vm-mobile-option",onClick:l,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(pn,{})}),mt("div",{className:"vm-mobile-option-text",children:mt("span",{className:"vm-mobile-option-text__label",children:sd})}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt(jr,{title:sd,children:mt(Pr,{className:Kn()({"vm-header-button":!n}),variant:"contained",color:"primary",startIcon:mt(pn,{}),onClick:l,ariaLabel:"settings"})}),i&&mt(wu,{title:sd,onClose:s,children:mt("div",{className:Kn()({"vm-server-configurator":!0,"vm-server-configurator_mobile":e}),children:[c.map(((e,t)=>mt("div",{className:"vm-server-configurator__input",children:e.component},t))),mt("div",{className:"vm-server-configurator-footer",children:[mt(Pr,{color:"error",variant:"outlined",onClick:s,children:"Cancel"}),mt(Pr,{color:"primary",variant:"contained",onClick:()=>{r.current&&r.current.handleApply(),o.current&&o.current.handleApply(),a.current&&a.current.handleApply(),s()},children:"Apply"})]})]})})]})},hd=e=>{let{relativeTime:t,setDuration:n}=e;const{isMobile:r}=vr();return mt("div",{className:Kn()({"vm-time-duration":!0,"vm-time-duration_mobile":r}),children:Ft.map((e=>{let{id:o,duration:a,until:i,title:l}=e;return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_mobile":r,"vm-list-item_active":o===t}),onClick:(s={duration:a,until:i(),id:o},()=>{n(s)}),children:l||a},o);var s}))})},pd=e=>{let{viewDate:t,showArrowNav:n,onChangeViewDate:r,toggleDisplayYears:o}=e;return mt("div",{className:"vm-calendar-header",children:[mt("div",{className:"vm-calendar-header-left",onClick:o,children:[mt("span",{className:"vm-calendar-header-left__date",children:t.format("MMMM YYYY")}),mt("div",{className:"vm-calendar-header-left__select-year",children:mt(kn,{})})]}),n&&mt("div",{className:"vm-calendar-header-right",children:[mt("div",{className:"vm-calendar-header-right__prev",onClick:()=>{r(t.subtract(1,"month"))},children:mt(wn,{})}),mt("div",{className:"vm-calendar-header-right__next",onClick:()=>{r(t.add(1,"month"))},children:mt(wn,{})})]})]})},fd=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],md=e=>{let{viewDate:n,selectDate:r,onChangeSelectDate:a}=e;const i="YYYY-MM-DD",l=o().tz(),s=o()(n.format(i)),c=(0,t.useMemo)((()=>{const e=new Array(42).fill(null),t=s.startOf("month"),n=s.endOf("month").diff(t,"day")+1,r=new Array(n).fill(t).map(((e,t)=>e.add(t,"day"))),o=t.day();return e.splice(o,n,...r),e}),[s]),u=e=>()=>{e&&a(e)};return mt("div",{className:"vm-calendar-body",children:[fd.map((e=>mt(jr,{title:e,children:mt("div",{className:"vm-calendar-body-cell vm-calendar-body-cell_weekday",children:e[0]})},e))),c.map(((e,t)=>mt("div",{className:Kn()({"vm-calendar-body-cell":!0,"vm-calendar-body-cell_day":!0,"vm-calendar-body-cell_day_empty":!e,"vm-calendar-body-cell_day_active":(e&&e.format(i))===r.format(i),"vm-calendar-body-cell_day_today":(e&&e.format(i))===l.format(i)}),onClick:u(e),children:e&&e.format("D")},e?e.format(i):t)))]})},_d=e=>{let{viewDate:n,onChangeViewDate:r}=e;const a=o()().format("YYYY"),i=(0,t.useMemo)((()=>n.format("YYYY")),[n]),l=(0,t.useMemo)((()=>{const e=o()().subtract(9,"year");return new Array(18).fill(e).map(((e,t)=>e.add(t,"year")))}),[n]);(0,t.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(i));e&&e.scrollIntoView({block:"center"})}),[]);return mt("div",{className:"vm-calendar-years",children:l.map((e=>{return mt("div",{className:Kn()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("YYYY")===i,"vm-calendar-years__year_today":e.format("YYYY")===a}),id:"vm-calendar-year-".concat(e.format("YYYY")),onClick:(t=e,()=>{r(t)}),children:e.format("YYYY")},e.format("YYYY"));var t}))})},gd=e=>{let{viewDate:n,selectDate:r,onChangeViewDate:a}=e;const i=o()().format("MM"),l=(0,t.useMemo)((()=>r.format("MM")),[r]),s=(0,t.useMemo)((()=>new Array(12).fill("").map(((e,t)=>o()(n).month(t)))),[n]);(0,t.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(l));e&&e.scrollIntoView({block:"center"})}),[]);return mt("div",{className:"vm-calendar-years",children:s.map((e=>{return mt("div",{className:Kn()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("MM")===l,"vm-calendar-years__year_today":e.format("MM")===i}),id:"vm-calendar-year-".concat(e.format("MM")),onClick:(t=e,()=>{a(t)}),children:e.format("MMMM")},e.format("MM"));var t}))})};var vd=function(e){return e[e.days=0]="days",e[e.months=1]="months",e[e.years=2]="years",e}(vd||{});const yd=e=>{let{date:n,format:r=wt,onChange:a}=e;const[i,l]=(0,t.useState)(vd.days),[s,c]=(0,t.useState)(o().tz(n)),[u,d]=(0,t.useState)(o().tz(n)),h=o().tz(),p=h.format(bt)===s.format(bt),{isMobile:f}=vr(),m=e=>{c(e),l((e=>e===vd.years?vd.months:vd.days))};return(0,t.useEffect)((()=>{u.format()!==o().tz(n).format()&&a(u.format(r))}),[u]),(0,t.useEffect)((()=>{const e=o().tz(n);c(e),d(e)}),[n]),mt("div",{className:Kn()({"vm-calendar":!0,"vm-calendar_mobile":f}),children:[mt(pd,{viewDate:s,onChangeViewDate:m,toggleDisplayYears:()=>{l((e=>e===vd.years?vd.days:vd.years))},showArrowNav:i===vd.days}),i===vd.days&&mt(md,{viewDate:s,selectDate:u,onChangeSelectDate:e=>{d(e)}}),i===vd.years&&mt(_d,{viewDate:s,onChangeViewDate:m}),i===vd.months&&mt(gd,{selectDate:u,viewDate:s,onChangeViewDate:m}),!p&&i===vd.days&&mt("div",{className:"vm-calendar-footer",children:mt(Pr,{variant:"text",size:"small",onClick:()=>{c(h)},children:"show today"})})]})},bd=(0,t.forwardRef)(((e,n)=>{let{date:r,targetRef:a,format:i=wt,onChange:l,label:s}=e;const c=(0,t.useMemo)((()=>o()(r).isValid()?o().tz(r):o()().tz()),[r]),{isMobile:u}=vr(),{value:d,toggle:h,setFalse:p}=Fr(!1);return Jn("click",h,a),Jn("keyup",(e=>{"Escape"!==e.key&&"Enter"!==e.key||p()})),mt(pt.FK,{children:mt(Ir,{open:d,buttonRef:a,placement:"bottom-right",onClose:p,title:u?s:void 0,children:mt("div",{ref:n,children:mt(yd,{date:c,format:i,onChange:e=>{l(e),p()}})})})})}));var wd=n(494),kd=n.n(wd);const xd=e=>o()(e).isValid()?o().tz(e).format(wt):e,Sd=e=>{let{value:n="",label:r,pickerLabel:a,pickerRef:i,onChange:l,onEnter:s}=e;const c=(0,t.useRef)(null),[u,d]=(0,t.useState)(null),[h,p]=(0,t.useState)(xd(n)),[f,m]=(0,t.useState)(!1),[_,g]=(0,t.useState)(!1),v=o()(h).isValid()?"":"Invalid date format";return(0,t.useEffect)((()=>{const e=xd(n);e!==h&&p(e),_&&(s(),g(!1))}),[n]),(0,t.useEffect)((()=>{f&&u&&(u.focus(),u.setSelectionRange(11,11),m(!1))}),[f]),mt("div",{className:Kn()({"vm-date-time-input":!0,"vm-date-time-input_error":v}),children:[mt("label",{children:r}),mt(kd(),{tabIndex:1,inputRef:d,mask:"9999-99-99 99:99:99",placeholder:"YYYY-MM-DD HH:mm:ss",value:h,autoCapitalize:"none",inputMode:"numeric",maskChar:null,onChange:e=>{p(e.currentTarget.value)},onBlur:()=>{l(h)},onKeyUp:e=>{"Enter"===e.key&&(l(h),g(!0))}}),v&&mt("span",{className:"vm-date-time-input__error-text",children:v}),mt("div",{className:"vm-date-time-input__icon",ref:c,children:mt(Pr,{variant:"text",color:"gray",size:"small",startIcon:mt(Sn,{}),ariaLabel:"calendar"})}),mt(bd,{label:a,ref:i,date:h,onChange:e=>{p(e),m(!0)},targetRef:c})]})};const Ad=function(e){const n=(0,t.useRef)();return(0,t.useEffect)((()=>{n.current=e}),[e]),n.current},Ed=()=>{const{isMobile:e}=vr(),{isDarkTheme:n}=gt(),r=(0,t.useRef)(null),a=Xn(),i=(0,t.useMemo)((()=>a.width>1120),[a]),[l,s]=(0,t.useState)(),[c,u]=(0,t.useState)(),{period:{end:d,start:h},relativeTime:p,timezone:f,duration:m}=Gt(),_=Qt(),g=He(),v=Ad(f),{value:y,toggle:b,setFalse:w}=Fr(!1),k=(0,t.useMemo)((()=>({region:f,utc:Vt(f)})),[f]);(0,t.useEffect)((()=>{s(It(jt(d)))}),[f,d]),(0,t.useEffect)((()=>{u(It(jt(h)))}),[f,h]);const x=e=>{let{duration:t,until:n,id:r}=e;_({type:"SET_RELATIVE_TIME",payload:{duration:t,until:n,id:r}}),w()},S=(0,t.useMemo)((()=>({start:o().tz(jt(h)).format(wt),end:o().tz(jt(d)).format(wt)})),[h,d,f]),A=(0,t.useMemo)((()=>p&&"none"!==p?p.replace(/_/g," "):"".concat(S.start," - ").concat(S.end)),[p,S]),E=(0,t.useRef)(null),C=(0,t.useRef)(null),M=(0,t.useRef)(null),N=()=>{c&&l&&_({type:"SET_PERIOD",payload:{from:o().tz(c).toDate(),to:o().tz(l).toDate()}}),w()};return(0,t.useEffect)((()=>{const e=Ht({relativeTimeId:p,defaultDuration:m,defaultEndInput:jt(d)});v&&f!==v&&x({id:e.relativeTimeId,duration:e.duration,until:e.endInput})}),[f,v]),Lr(r,(t=>{var n,r;if(e)return;const o=t.target,a=(null===E||void 0===E?void 0:E.current)&&(null===E||void 0===E||null===(n=E.current)||void 0===n?void 0:n.contains(o)),i=(null===C||void 0===C?void 0:C.current)&&(null===C||void 0===C||null===(r=C.current)||void 0===r?void 0:r.contains(o));a||i||w()})),mt(pt.FK,{children:[mt("div",{ref:M,children:e?mt("div",{className:"vm-mobile-option",onClick:b,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(xn,{})}),mt("div",{className:"vm-mobile-option-text",children:[mt("span",{className:"vm-mobile-option-text__label",children:"Time range"}),mt("span",{className:"vm-mobile-option-text__value",children:A})]}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt(jr,{title:i?"Time range controls":A,children:mt(Pr,{className:g?"":"vm-header-button",variant:"contained",color:"primary",startIcon:mt(xn,{}),onClick:b,ariaLabel:"time range controls",children:i&&mt("span",{children:A})})})}),mt(Ir,{open:y,buttonRef:M,placement:"bottom-right",onClose:w,clickOutside:!1,title:e?"Time range controls":"",children:mt("div",{className:Kn()({"vm-time-selector":!0,"vm-time-selector_mobile":e}),ref:r,children:[mt("div",{className:"vm-time-selector-left",children:[mt("div",{className:Kn()({"vm-time-selector-left-inputs":!0,"vm-time-selector-left-inputs_dark":n}),children:[mt(Sd,{value:c,label:"From:",pickerLabel:"Date From",pickerRef:E,onChange:u,onEnter:N}),mt(Sd,{value:l,label:"To:",pickerLabel:"Date To",pickerRef:C,onChange:s,onEnter:N})]}),mt("div",{className:"vm-time-selector-left-timezone",children:[mt("div",{className:"vm-time-selector-left-timezone__title",children:k.region}),mt("div",{className:"vm-time-selector-left-timezone__utc",children:k.utc})]}),mt(Pr,{variant:"text",startIcon:mt(An,{}),onClick:()=>_({type:"RUN_QUERY_TO_NOW"}),children:"switch to now"}),mt("div",{className:"vm-time-selector-left__controls",children:[mt(Pr,{color:"error",variant:"outlined",onClick:()=>{s(It(jt(d))),u(It(jt(h))),w()},children:"Cancel"}),mt(Pr,{color:"primary",onClick:N,children:"Apply"})]})]}),mt(hd,{relativeTime:p||"",setDuration:x})]})})]})},Cd=()=>{const e=He(),{isMobile:n}=vr(),r=Qt(),[o,a]=$e(),[i,l]=Or("0","accountID"),[s,c]=Or("0","projectID"),u="".concat(i,":").concat(s),d=(0,t.useRef)(null),{value:h,toggle:p,setFalse:f}=Fr(!1);return(0,t.useEffect)((()=>{h||(l(o.get("accountID")||"0"),c(o.get("projectID")||"0"))}),[h]),mt("div",{className:"vm-tenant-input",children:[mt(jr,{title:"Define Tenant ID if you need request to another storage",children:mt("div",{ref:d,children:n?mt("div",{className:"vm-mobile-option",onClick:p,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(zn,{})}),mt("div",{className:"vm-mobile-option-text",children:[mt("span",{className:"vm-mobile-option-text__label",children:"Tenant ID"}),mt("span",{className:"vm-mobile-option-text__value",children:u})]}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt(Pr,{className:e?"":"vm-header-button",variant:"contained",color:"primary",fullWidth:!0,startIcon:mt(zn,{}),endIcon:mt("div",{className:Kn()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":h}),children:mt(wn,{})}),onClick:p,children:u})})}),mt(Ir,{open:h,placement:"bottom-right",onClose:f,buttonRef:d,title:n?"Define Tenant ID":void 0,children:mt("div",{className:Kn()({"vm-list vm-tenant-input-list":!0,"vm-list vm-tenant-input-list_mobile":n,"vm-tenant-input-list_inline":!0}),children:[mt(Vr,{autofocus:!0,label:"accountID",value:i,onChange:l,type:"number"}),mt(Vr,{autofocus:!0,label:"projectID",value:s,onChange:c,type:"number"}),mt("div",{className:"vm-tenant-input-list__buttons",children:[mt(jr,{title:"Multitenancy in VictoriaLogs documentation",children:mt("a",{href:"https://docs.victoriametrics.com/victorialogs/#multitenancy",target:"_blank",rel:"help noreferrer",children:mt(Pr,{variant:"text",color:"gray",startIcon:mt(In,{})})})}),mt(Pr,{variant:"contained",color:"primary",onClick:()=>{o.set("accountID",i),o.set("projectID",s),a(o),f(),r({type:"RUN_QUERY"})},children:"Apply"})]})]})})]})},Md=[{seconds:0,title:"Off"},{seconds:1,title:"1s"},{seconds:2,title:"2s"},{seconds:5,title:"5s"},{seconds:10,title:"10s"},{seconds:30,title:"30s"},{seconds:60,title:"1m"},{seconds:300,title:"5m"},{seconds:900,title:"15m"},{seconds:1800,title:"30m"},{seconds:3600,title:"1h"},{seconds:7200,title:"2h"}],Nd=()=>{const{isMobile:e}=vr(),n=Qt(),r=He(),[o,a]=(0,t.useState)(!1),[i,l]=(0,t.useState)(Md[0]),{value:s,toggle:c,setFalse:u}=Fr(!1),d=(0,t.useRef)(null);(0,t.useEffect)((()=>{const e=i.seconds;let t;return o?t=setInterval((()=>{n({type:"RUN_QUERY"})}),1e3*e):l(Md[0]),()=>{t&&clearInterval(t)}}),[i,o]);const h=e=>()=>{(e=>{(o&&!e.seconds||!o&&e.seconds)&&a((e=>!e)),l(e),u()})(e)};return mt(pt.FK,{children:[mt("div",{className:"vm-execution-controls",children:mt("div",{className:Kn()({"vm-execution-controls-buttons":!0,"vm-execution-controls-buttons_mobile":e,"vm-header-button":!r}),children:[!e&&mt(jr,{title:"Refresh dashboard",children:mt(Pr,{variant:"contained",color:"primary",onClick:()=>{n({type:"RUN_QUERY"})},startIcon:mt(bn,{}),ariaLabel:"refresh dashboard"})}),e?mt("div",{className:"vm-mobile-option",onClick:c,children:[mt("span",{className:"vm-mobile-option__icon",children:mt(mn,{})}),mt("div",{className:"vm-mobile-option-text",children:[mt("span",{className:"vm-mobile-option-text__label",children:"Auto-refresh"}),mt("span",{className:"vm-mobile-option-text__value",children:i.title})]}),mt("span",{className:"vm-mobile-option__arrow",children:mt(wn,{})})]}):mt(jr,{title:"Auto-refresh control",children:mt("div",{ref:d,children:mt(Pr,{variant:"contained",color:"primary",fullWidth:!0,endIcon:mt("div",{className:Kn()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":s}),children:mt(wn,{})}),onClick:c,children:i.title})})})]})}),mt(Ir,{open:s,placement:"bottom-right",onClose:u,buttonRef:d,title:e?"Auto-refresh duration":void 0,children:mt("div",{className:Kn()({"vm-execution-controls-list":!0,"vm-execution-controls-list_mobile":e}),children:Md.map((t=>mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_mobile":e,"vm-list-item_active":t.seconds===i.seconds}),onClick:h(t),children:t.title},t.seconds)))})})]})},Td=e=>{let{isMobile:t}=e;return mt("div",{className:Kn()({"vm-header-controls":!0,"vm-header-controls_mobile":t}),children:[mt(Cd,{}),mt(Ed,{}),mt(Nd,{}),mt(dd,{})]})},Pd=(Boolean(We("DISABLED_DEFAULT_TIMEZONE")),()=>{const{serverUrl:e}=gt(),[n,r]=(Qt(),(0,t.useState)(!1)),[o,a]=(0,t.useState)(""),i=async()=>{};return(0,t.useEffect)((()=>{i()}),[e]),{isLoading:n,error:o}}),Dd=()=>{const e=He(),{isMobile:n}=vr(),{pathname:r}=ne();Pd();return(0,t.useEffect)((()=>{var e;const t="vmui for VictoriaLogs",n=null===(e=du[hu.logs])||void 0===e?void 0:e.title;document.title=n?"".concat(n," - ").concat(t):t}),[r]),mt("section",{className:"vm-container",children:[mt(Vu,{controlsComponent:Td}),mt("div",{className:Kn()({"vm-container-body":!0,"vm-container-body_mobile":n,"vm-container-body_app":e}),children:mt(ye,{})}),!e&&mt(qu,{links:Yu})]})},Od={unicode:!1,renderer:void 0};ca.use(function(e){if(!(e={...Od,...e}).emojis)throw new Error("Must provide emojis to markedEmoji");const t=Object.keys(e.emojis).map((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))).join("|"),n=new RegExp(":(".concat(t,"):")),r=new RegExp("^".concat(n.source));return{extensions:[{name:"emoji",level:"inline",start(e){var t;return null===(t=e.match(n))||void 0===t?void 0:t.index},tokenizer(t,n){const o=r.exec(t);if(!o)return;const a=o[1];let i=e.emojis[a],l=e.renderer?void 0:e.unicode;if("string"!==typeof i&&!e.renderer)if("string"===typeof i.char)i=i.char,l=!0;else{if("string"!==typeof i.url)return;i=i.url,l=!1}return{type:"emoji",raw:o[0],name:a,emoji:i,unicode:l}},renderer:t=>e.renderer?e.renderer(t):t.unicode?t.emoji:''.concat(t.name,'')}]}}({emojis:{100:"\ud83d\udcaf",1234:"\ud83d\udd22",grinning:"\ud83d\ude00",smiley:"\ud83d\ude03",smile:"\ud83d\ude04",grin:"\ud83d\ude01",laughing:"\ud83d\ude06",satisfied:"\ud83d\ude06",sweat_smile:"\ud83d\ude05",rofl:"\ud83e\udd23",joy:"\ud83d\ude02",slightly_smiling_face:"\ud83d\ude42",upside_down_face:"\ud83d\ude43",melting_face:"\ud83e\udee0",wink:"\ud83d\ude09",blush:"\ud83d\ude0a",innocent:"\ud83d\ude07",smiling_face_with_three_hearts:"\ud83e\udd70",heart_eyes:"\ud83d\ude0d",star_struck:"\ud83e\udd29",kissing_heart:"\ud83d\ude18",kissing:"\ud83d\ude17",relaxed:"\u263a\ufe0f",kissing_closed_eyes:"\ud83d\ude1a",kissing_smiling_eyes:"\ud83d\ude19",smiling_face_with_tear:"\ud83e\udd72",yum:"\ud83d\ude0b",stuck_out_tongue:"\ud83d\ude1b",stuck_out_tongue_winking_eye:"\ud83d\ude1c",zany_face:"\ud83e\udd2a",stuck_out_tongue_closed_eyes:"\ud83d\ude1d",money_mouth_face:"\ud83e\udd11",hugs:"\ud83e\udd17",hand_over_mouth:"\ud83e\udd2d",face_with_open_eyes_and_hand_over_mouth:"\ud83e\udee2",face_with_peeking_eye:"\ud83e\udee3",shushing_face:"\ud83e\udd2b",thinking:"\ud83e\udd14",saluting_face:"\ud83e\udee1",zipper_mouth_face:"\ud83e\udd10",raised_eyebrow:"\ud83e\udd28",neutral_face:"\ud83d\ude10",expressionless:"\ud83d\ude11",no_mouth:"\ud83d\ude36",dotted_line_face:"\ud83e\udee5",face_in_clouds:"\ud83d\ude36\u200d\ud83c\udf2b\ufe0f",smirk:"\ud83d\ude0f",unamused:"\ud83d\ude12",roll_eyes:"\ud83d\ude44",grimacing:"\ud83d\ude2c",face_exhaling:"\ud83d\ude2e\u200d\ud83d\udca8",lying_face:"\ud83e\udd25",shaking_face:"\ud83e\udee8",relieved:"\ud83d\ude0c",pensive:"\ud83d\ude14",sleepy:"\ud83d\ude2a",drooling_face:"\ud83e\udd24",sleeping:"\ud83d\ude34",mask:"\ud83d\ude37",face_with_thermometer:"\ud83e\udd12",face_with_head_bandage:"\ud83e\udd15",nauseated_face:"\ud83e\udd22",vomiting_face:"\ud83e\udd2e",sneezing_face:"\ud83e\udd27",hot_face:"\ud83e\udd75",cold_face:"\ud83e\udd76",woozy_face:"\ud83e\udd74",dizzy_face:"\ud83d\ude35",face_with_spiral_eyes:"\ud83d\ude35\u200d\ud83d\udcab",exploding_head:"\ud83e\udd2f",cowboy_hat_face:"\ud83e\udd20",partying_face:"\ud83e\udd73",disguised_face:"\ud83e\udd78",sunglasses:"\ud83d\ude0e",nerd_face:"\ud83e\udd13",monocle_face:"\ud83e\uddd0",confused:"\ud83d\ude15",face_with_diagonal_mouth:"\ud83e\udee4",worried:"\ud83d\ude1f",slightly_frowning_face:"\ud83d\ude41",frowning_face:"\u2639\ufe0f",open_mouth:"\ud83d\ude2e",hushed:"\ud83d\ude2f",astonished:"\ud83d\ude32",flushed:"\ud83d\ude33",pleading_face:"\ud83e\udd7a",face_holding_back_tears:"\ud83e\udd79",frowning:"\ud83d\ude26",anguished:"\ud83d\ude27",fearful:"\ud83d\ude28",cold_sweat:"\ud83d\ude30",disappointed_relieved:"\ud83d\ude25",cry:"\ud83d\ude22",sob:"\ud83d\ude2d",scream:"\ud83d\ude31",confounded:"\ud83d\ude16",persevere:"\ud83d\ude23",disappointed:"\ud83d\ude1e",sweat:"\ud83d\ude13",weary:"\ud83d\ude29",tired_face:"\ud83d\ude2b",yawning_face:"\ud83e\udd71",triumph:"\ud83d\ude24",rage:"\ud83d\ude21",pout:"\ud83d\ude21",angry:"\ud83d\ude20",cursing_face:"\ud83e\udd2c",smiling_imp:"\ud83d\ude08",imp:"\ud83d\udc7f",skull:"\ud83d\udc80",skull_and_crossbones:"\u2620\ufe0f",hankey:"\ud83d\udca9",poop:"\ud83d\udca9",shit:"\ud83d\udca9",clown_face:"\ud83e\udd21",japanese_ogre:"\ud83d\udc79",japanese_goblin:"\ud83d\udc7a",ghost:"\ud83d\udc7b",alien:"\ud83d\udc7d",space_invader:"\ud83d\udc7e",robot:"\ud83e\udd16",smiley_cat:"\ud83d\ude3a",smile_cat:"\ud83d\ude38",joy_cat:"\ud83d\ude39",heart_eyes_cat:"\ud83d\ude3b",smirk_cat:"\ud83d\ude3c",kissing_cat:"\ud83d\ude3d",scream_cat:"\ud83d\ude40",crying_cat_face:"\ud83d\ude3f",pouting_cat:"\ud83d\ude3e",see_no_evil:"\ud83d\ude48",hear_no_evil:"\ud83d\ude49",speak_no_evil:"\ud83d\ude4a",love_letter:"\ud83d\udc8c",cupid:"\ud83d\udc98",gift_heart:"\ud83d\udc9d",sparkling_heart:"\ud83d\udc96",heartpulse:"\ud83d\udc97",heartbeat:"\ud83d\udc93",revolving_hearts:"\ud83d\udc9e",two_hearts:"\ud83d\udc95",heart_decoration:"\ud83d\udc9f",heavy_heart_exclamation:"\u2763\ufe0f",broken_heart:"\ud83d\udc94",heart_on_fire:"\u2764\ufe0f\u200d\ud83d\udd25",mending_heart:"\u2764\ufe0f\u200d\ud83e\ude79",heart:"\u2764\ufe0f",pink_heart:"\ud83e\ude77",orange_heart:"\ud83e\udde1",yellow_heart:"\ud83d\udc9b",green_heart:"\ud83d\udc9a",blue_heart:"\ud83d\udc99",light_blue_heart:"\ud83e\ude75",purple_heart:"\ud83d\udc9c",brown_heart:"\ud83e\udd0e",black_heart:"\ud83d\udda4",grey_heart:"\ud83e\ude76",white_heart:"\ud83e\udd0d",kiss:"\ud83d\udc8b",anger:"\ud83d\udca2",boom:"\ud83d\udca5",collision:"\ud83d\udca5",dizzy:"\ud83d\udcab",sweat_drops:"\ud83d\udca6",dash:"\ud83d\udca8",hole:"\ud83d\udd73\ufe0f",speech_balloon:"\ud83d\udcac",eye_speech_bubble:"\ud83d\udc41\ufe0f\u200d\ud83d\udde8\ufe0f",left_speech_bubble:"\ud83d\udde8\ufe0f",right_anger_bubble:"\ud83d\uddef\ufe0f",thought_balloon:"\ud83d\udcad",zzz:"\ud83d\udca4",wave:"\ud83d\udc4b",raised_back_of_hand:"\ud83e\udd1a",raised_hand_with_fingers_splayed:"\ud83d\udd90\ufe0f",hand:"\u270b",raised_hand:"\u270b",vulcan_salute:"\ud83d\udd96",rightwards_hand:"\ud83e\udef1",leftwards_hand:"\ud83e\udef2",palm_down_hand:"\ud83e\udef3",palm_up_hand:"\ud83e\udef4",leftwards_pushing_hand:"\ud83e\udef7",rightwards_pushing_hand:"\ud83e\udef8",ok_hand:"\ud83d\udc4c",pinched_fingers:"\ud83e\udd0c",pinching_hand:"\ud83e\udd0f",v:"\u270c\ufe0f",crossed_fingers:"\ud83e\udd1e",hand_with_index_finger_and_thumb_crossed:"\ud83e\udef0",love_you_gesture:"\ud83e\udd1f",metal:"\ud83e\udd18",call_me_hand:"\ud83e\udd19",point_left:"\ud83d\udc48",point_right:"\ud83d\udc49",point_up_2:"\ud83d\udc46",middle_finger:"\ud83d\udd95",fu:"\ud83d\udd95",point_down:"\ud83d\udc47",point_up:"\u261d\ufe0f",index_pointing_at_the_viewer:"\ud83e\udef5","+1":"\ud83d\udc4d",thumbsup:"\ud83d\udc4d","-1":"\ud83d\udc4e",thumbsdown:"\ud83d\udc4e",fist_raised:"\u270a",fist:"\u270a",fist_oncoming:"\ud83d\udc4a",facepunch:"\ud83d\udc4a",punch:"\ud83d\udc4a",fist_left:"\ud83e\udd1b",fist_right:"\ud83e\udd1c",clap:"\ud83d\udc4f",raised_hands:"\ud83d\ude4c",heart_hands:"\ud83e\udef6",open_hands:"\ud83d\udc50",palms_up_together:"\ud83e\udd32",handshake:"\ud83e\udd1d",pray:"\ud83d\ude4f",writing_hand:"\u270d\ufe0f",nail_care:"\ud83d\udc85",selfie:"\ud83e\udd33",muscle:"\ud83d\udcaa",mechanical_arm:"\ud83e\uddbe",mechanical_leg:"\ud83e\uddbf",leg:"\ud83e\uddb5",foot:"\ud83e\uddb6",ear:"\ud83d\udc42",ear_with_hearing_aid:"\ud83e\uddbb",nose:"\ud83d\udc43",brain:"\ud83e\udde0",anatomical_heart:"\ud83e\udec0",lungs:"\ud83e\udec1",tooth:"\ud83e\uddb7",bone:"\ud83e\uddb4",eyes:"\ud83d\udc40",eye:"\ud83d\udc41\ufe0f",tongue:"\ud83d\udc45",lips:"\ud83d\udc44",biting_lip:"\ud83e\udee6",baby:"\ud83d\udc76",child:"\ud83e\uddd2",boy:"\ud83d\udc66",girl:"\ud83d\udc67",adult:"\ud83e\uddd1",blond_haired_person:"\ud83d\udc71",man:"\ud83d\udc68",bearded_person:"\ud83e\uddd4",man_beard:"\ud83e\uddd4\u200d\u2642\ufe0f",woman_beard:"\ud83e\uddd4\u200d\u2640\ufe0f",red_haired_man:"\ud83d\udc68\u200d\ud83e\uddb0",curly_haired_man:"\ud83d\udc68\u200d\ud83e\uddb1",white_haired_man:"\ud83d\udc68\u200d\ud83e\uddb3",bald_man:"\ud83d\udc68\u200d\ud83e\uddb2",woman:"\ud83d\udc69",red_haired_woman:"\ud83d\udc69\u200d\ud83e\uddb0",person_red_hair:"\ud83e\uddd1\u200d\ud83e\uddb0",curly_haired_woman:"\ud83d\udc69\u200d\ud83e\uddb1",person_curly_hair:"\ud83e\uddd1\u200d\ud83e\uddb1",white_haired_woman:"\ud83d\udc69\u200d\ud83e\uddb3",person_white_hair:"\ud83e\uddd1\u200d\ud83e\uddb3",bald_woman:"\ud83d\udc69\u200d\ud83e\uddb2",person_bald:"\ud83e\uddd1\u200d\ud83e\uddb2",blond_haired_woman:"\ud83d\udc71\u200d\u2640\ufe0f",blonde_woman:"\ud83d\udc71\u200d\u2640\ufe0f",blond_haired_man:"\ud83d\udc71\u200d\u2642\ufe0f",older_adult:"\ud83e\uddd3",older_man:"\ud83d\udc74",older_woman:"\ud83d\udc75",frowning_person:"\ud83d\ude4d",frowning_man:"\ud83d\ude4d\u200d\u2642\ufe0f",frowning_woman:"\ud83d\ude4d\u200d\u2640\ufe0f",pouting_face:"\ud83d\ude4e",pouting_man:"\ud83d\ude4e\u200d\u2642\ufe0f",pouting_woman:"\ud83d\ude4e\u200d\u2640\ufe0f",no_good:"\ud83d\ude45",no_good_man:"\ud83d\ude45\u200d\u2642\ufe0f",ng_man:"\ud83d\ude45\u200d\u2642\ufe0f",no_good_woman:"\ud83d\ude45\u200d\u2640\ufe0f",ng_woman:"\ud83d\ude45\u200d\u2640\ufe0f",ok_person:"\ud83d\ude46",ok_man:"\ud83d\ude46\u200d\u2642\ufe0f",ok_woman:"\ud83d\ude46\u200d\u2640\ufe0f",tipping_hand_person:"\ud83d\udc81",information_desk_person:"\ud83d\udc81",tipping_hand_man:"\ud83d\udc81\u200d\u2642\ufe0f",sassy_man:"\ud83d\udc81\u200d\u2642\ufe0f",tipping_hand_woman:"\ud83d\udc81\u200d\u2640\ufe0f",sassy_woman:"\ud83d\udc81\u200d\u2640\ufe0f",raising_hand:"\ud83d\ude4b",raising_hand_man:"\ud83d\ude4b\u200d\u2642\ufe0f",raising_hand_woman:"\ud83d\ude4b\u200d\u2640\ufe0f",deaf_person:"\ud83e\uddcf",deaf_man:"\ud83e\uddcf\u200d\u2642\ufe0f",deaf_woman:"\ud83e\uddcf\u200d\u2640\ufe0f",bow:"\ud83d\ude47",bowing_man:"\ud83d\ude47\u200d\u2642\ufe0f",bowing_woman:"\ud83d\ude47\u200d\u2640\ufe0f",facepalm:"\ud83e\udd26",man_facepalming:"\ud83e\udd26\u200d\u2642\ufe0f",woman_facepalming:"\ud83e\udd26\u200d\u2640\ufe0f",shrug:"\ud83e\udd37",man_shrugging:"\ud83e\udd37\u200d\u2642\ufe0f",woman_shrugging:"\ud83e\udd37\u200d\u2640\ufe0f",health_worker:"\ud83e\uddd1\u200d\u2695\ufe0f",man_health_worker:"\ud83d\udc68\u200d\u2695\ufe0f",woman_health_worker:"\ud83d\udc69\u200d\u2695\ufe0f",student:"\ud83e\uddd1\u200d\ud83c\udf93",man_student:"\ud83d\udc68\u200d\ud83c\udf93",woman_student:"\ud83d\udc69\u200d\ud83c\udf93",teacher:"\ud83e\uddd1\u200d\ud83c\udfeb",man_teacher:"\ud83d\udc68\u200d\ud83c\udfeb",woman_teacher:"\ud83d\udc69\u200d\ud83c\udfeb",judge:"\ud83e\uddd1\u200d\u2696\ufe0f",man_judge:"\ud83d\udc68\u200d\u2696\ufe0f",woman_judge:"\ud83d\udc69\u200d\u2696\ufe0f",farmer:"\ud83e\uddd1\u200d\ud83c\udf3e",man_farmer:"\ud83d\udc68\u200d\ud83c\udf3e",woman_farmer:"\ud83d\udc69\u200d\ud83c\udf3e",cook:"\ud83e\uddd1\u200d\ud83c\udf73",man_cook:"\ud83d\udc68\u200d\ud83c\udf73",woman_cook:"\ud83d\udc69\u200d\ud83c\udf73",mechanic:"\ud83e\uddd1\u200d\ud83d\udd27",man_mechanic:"\ud83d\udc68\u200d\ud83d\udd27",woman_mechanic:"\ud83d\udc69\u200d\ud83d\udd27",factory_worker:"\ud83e\uddd1\u200d\ud83c\udfed",man_factory_worker:"\ud83d\udc68\u200d\ud83c\udfed",woman_factory_worker:"\ud83d\udc69\u200d\ud83c\udfed",office_worker:"\ud83e\uddd1\u200d\ud83d\udcbc",man_office_worker:"\ud83d\udc68\u200d\ud83d\udcbc",woman_office_worker:"\ud83d\udc69\u200d\ud83d\udcbc",scientist:"\ud83e\uddd1\u200d\ud83d\udd2c",man_scientist:"\ud83d\udc68\u200d\ud83d\udd2c",woman_scientist:"\ud83d\udc69\u200d\ud83d\udd2c",technologist:"\ud83e\uddd1\u200d\ud83d\udcbb",man_technologist:"\ud83d\udc68\u200d\ud83d\udcbb",woman_technologist:"\ud83d\udc69\u200d\ud83d\udcbb",singer:"\ud83e\uddd1\u200d\ud83c\udfa4",man_singer:"\ud83d\udc68\u200d\ud83c\udfa4",woman_singer:"\ud83d\udc69\u200d\ud83c\udfa4",artist:"\ud83e\uddd1\u200d\ud83c\udfa8",man_artist:"\ud83d\udc68\u200d\ud83c\udfa8",woman_artist:"\ud83d\udc69\u200d\ud83c\udfa8",pilot:"\ud83e\uddd1\u200d\u2708\ufe0f",man_pilot:"\ud83d\udc68\u200d\u2708\ufe0f",woman_pilot:"\ud83d\udc69\u200d\u2708\ufe0f",astronaut:"\ud83e\uddd1\u200d\ud83d\ude80",man_astronaut:"\ud83d\udc68\u200d\ud83d\ude80",woman_astronaut:"\ud83d\udc69\u200d\ud83d\ude80",firefighter:"\ud83e\uddd1\u200d\ud83d\ude92",man_firefighter:"\ud83d\udc68\u200d\ud83d\ude92",woman_firefighter:"\ud83d\udc69\u200d\ud83d\ude92",police_officer:"\ud83d\udc6e",cop:"\ud83d\udc6e",policeman:"\ud83d\udc6e\u200d\u2642\ufe0f",policewoman:"\ud83d\udc6e\u200d\u2640\ufe0f",detective:"\ud83d\udd75\ufe0f",male_detective:"\ud83d\udd75\ufe0f\u200d\u2642\ufe0f",female_detective:"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",guard:"\ud83d\udc82",guardsman:"\ud83d\udc82\u200d\u2642\ufe0f",guardswoman:"\ud83d\udc82\u200d\u2640\ufe0f",ninja:"\ud83e\udd77",construction_worker:"\ud83d\udc77",construction_worker_man:"\ud83d\udc77\u200d\u2642\ufe0f",construction_worker_woman:"\ud83d\udc77\u200d\u2640\ufe0f",person_with_crown:"\ud83e\udec5",prince:"\ud83e\udd34",princess:"\ud83d\udc78",person_with_turban:"\ud83d\udc73",man_with_turban:"\ud83d\udc73\u200d\u2642\ufe0f",woman_with_turban:"\ud83d\udc73\u200d\u2640\ufe0f",man_with_gua_pi_mao:"\ud83d\udc72",woman_with_headscarf:"\ud83e\uddd5",person_in_tuxedo:"\ud83e\udd35",man_in_tuxedo:"\ud83e\udd35\u200d\u2642\ufe0f",woman_in_tuxedo:"\ud83e\udd35\u200d\u2640\ufe0f",person_with_veil:"\ud83d\udc70",man_with_veil:"\ud83d\udc70\u200d\u2642\ufe0f",woman_with_veil:"\ud83d\udc70\u200d\u2640\ufe0f",bride_with_veil:"\ud83d\udc70\u200d\u2640\ufe0f",pregnant_woman:"\ud83e\udd30",pregnant_man:"\ud83e\udec3",pregnant_person:"\ud83e\udec4",breast_feeding:"\ud83e\udd31",woman_feeding_baby:"\ud83d\udc69\u200d\ud83c\udf7c",man_feeding_baby:"\ud83d\udc68\u200d\ud83c\udf7c",person_feeding_baby:"\ud83e\uddd1\u200d\ud83c\udf7c",angel:"\ud83d\udc7c",santa:"\ud83c\udf85",mrs_claus:"\ud83e\udd36",mx_claus:"\ud83e\uddd1\u200d\ud83c\udf84",superhero:"\ud83e\uddb8",superhero_man:"\ud83e\uddb8\u200d\u2642\ufe0f",superhero_woman:"\ud83e\uddb8\u200d\u2640\ufe0f",supervillain:"\ud83e\uddb9",supervillain_man:"\ud83e\uddb9\u200d\u2642\ufe0f",supervillain_woman:"\ud83e\uddb9\u200d\u2640\ufe0f",mage:"\ud83e\uddd9",mage_man:"\ud83e\uddd9\u200d\u2642\ufe0f",mage_woman:"\ud83e\uddd9\u200d\u2640\ufe0f",fairy:"\ud83e\uddda",fairy_man:"\ud83e\uddda\u200d\u2642\ufe0f",fairy_woman:"\ud83e\uddda\u200d\u2640\ufe0f",vampire:"\ud83e\udddb",vampire_man:"\ud83e\udddb\u200d\u2642\ufe0f",vampire_woman:"\ud83e\udddb\u200d\u2640\ufe0f",merperson:"\ud83e\udddc",merman:"\ud83e\udddc\u200d\u2642\ufe0f",mermaid:"\ud83e\udddc\u200d\u2640\ufe0f",elf:"\ud83e\udddd",elf_man:"\ud83e\udddd\u200d\u2642\ufe0f",elf_woman:"\ud83e\udddd\u200d\u2640\ufe0f",genie:"\ud83e\uddde",genie_man:"\ud83e\uddde\u200d\u2642\ufe0f",genie_woman:"\ud83e\uddde\u200d\u2640\ufe0f",zombie:"\ud83e\udddf",zombie_man:"\ud83e\udddf\u200d\u2642\ufe0f",zombie_woman:"\ud83e\udddf\u200d\u2640\ufe0f",troll:"\ud83e\uddcc",massage:"\ud83d\udc86",massage_man:"\ud83d\udc86\u200d\u2642\ufe0f",massage_woman:"\ud83d\udc86\u200d\u2640\ufe0f",haircut:"\ud83d\udc87",haircut_man:"\ud83d\udc87\u200d\u2642\ufe0f",haircut_woman:"\ud83d\udc87\u200d\u2640\ufe0f",walking:"\ud83d\udeb6",walking_man:"\ud83d\udeb6\u200d\u2642\ufe0f",walking_woman:"\ud83d\udeb6\u200d\u2640\ufe0f",standing_person:"\ud83e\uddcd",standing_man:"\ud83e\uddcd\u200d\u2642\ufe0f",standing_woman:"\ud83e\uddcd\u200d\u2640\ufe0f",kneeling_person:"\ud83e\uddce",kneeling_man:"\ud83e\uddce\u200d\u2642\ufe0f",kneeling_woman:"\ud83e\uddce\u200d\u2640\ufe0f",person_with_probing_cane:"\ud83e\uddd1\u200d\ud83e\uddaf",man_with_probing_cane:"\ud83d\udc68\u200d\ud83e\uddaf",woman_with_probing_cane:"\ud83d\udc69\u200d\ud83e\uddaf",person_in_motorized_wheelchair:"\ud83e\uddd1\u200d\ud83e\uddbc",man_in_motorized_wheelchair:"\ud83d\udc68\u200d\ud83e\uddbc",woman_in_motorized_wheelchair:"\ud83d\udc69\u200d\ud83e\uddbc",person_in_manual_wheelchair:"\ud83e\uddd1\u200d\ud83e\uddbd",man_in_manual_wheelchair:"\ud83d\udc68\u200d\ud83e\uddbd",woman_in_manual_wheelchair:"\ud83d\udc69\u200d\ud83e\uddbd",runner:"\ud83c\udfc3",running:"\ud83c\udfc3",running_man:"\ud83c\udfc3\u200d\u2642\ufe0f",running_woman:"\ud83c\udfc3\u200d\u2640\ufe0f",woman_dancing:"\ud83d\udc83",dancer:"\ud83d\udc83",man_dancing:"\ud83d\udd7a",business_suit_levitating:"\ud83d\udd74\ufe0f",dancers:"\ud83d\udc6f",dancing_men:"\ud83d\udc6f\u200d\u2642\ufe0f",dancing_women:"\ud83d\udc6f\u200d\u2640\ufe0f",sauna_person:"\ud83e\uddd6",sauna_man:"\ud83e\uddd6\u200d\u2642\ufe0f",sauna_woman:"\ud83e\uddd6\u200d\u2640\ufe0f",climbing:"\ud83e\uddd7",climbing_man:"\ud83e\uddd7\u200d\u2642\ufe0f",climbing_woman:"\ud83e\uddd7\u200d\u2640\ufe0f",person_fencing:"\ud83e\udd3a",horse_racing:"\ud83c\udfc7",skier:"\u26f7\ufe0f",snowboarder:"\ud83c\udfc2",golfing:"\ud83c\udfcc\ufe0f",golfing_man:"\ud83c\udfcc\ufe0f\u200d\u2642\ufe0f",golfing_woman:"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",surfer:"\ud83c\udfc4",surfing_man:"\ud83c\udfc4\u200d\u2642\ufe0f",surfing_woman:"\ud83c\udfc4\u200d\u2640\ufe0f",rowboat:"\ud83d\udea3",rowing_man:"\ud83d\udea3\u200d\u2642\ufe0f",rowing_woman:"\ud83d\udea3\u200d\u2640\ufe0f",swimmer:"\ud83c\udfca",swimming_man:"\ud83c\udfca\u200d\u2642\ufe0f",swimming_woman:"\ud83c\udfca\u200d\u2640\ufe0f",bouncing_ball_person:"\u26f9\ufe0f",bouncing_ball_man:"\u26f9\ufe0f\u200d\u2642\ufe0f",basketball_man:"\u26f9\ufe0f\u200d\u2642\ufe0f",bouncing_ball_woman:"\u26f9\ufe0f\u200d\u2640\ufe0f",basketball_woman:"\u26f9\ufe0f\u200d\u2640\ufe0f",weight_lifting:"\ud83c\udfcb\ufe0f",weight_lifting_man:"\ud83c\udfcb\ufe0f\u200d\u2642\ufe0f",weight_lifting_woman:"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",bicyclist:"\ud83d\udeb4",biking_man:"\ud83d\udeb4\u200d\u2642\ufe0f",biking_woman:"\ud83d\udeb4\u200d\u2640\ufe0f",mountain_bicyclist:"\ud83d\udeb5",mountain_biking_man:"\ud83d\udeb5\u200d\u2642\ufe0f",mountain_biking_woman:"\ud83d\udeb5\u200d\u2640\ufe0f",cartwheeling:"\ud83e\udd38",man_cartwheeling:"\ud83e\udd38\u200d\u2642\ufe0f",woman_cartwheeling:"\ud83e\udd38\u200d\u2640\ufe0f",wrestling:"\ud83e\udd3c",men_wrestling:"\ud83e\udd3c\u200d\u2642\ufe0f",women_wrestling:"\ud83e\udd3c\u200d\u2640\ufe0f",water_polo:"\ud83e\udd3d",man_playing_water_polo:"\ud83e\udd3d\u200d\u2642\ufe0f",woman_playing_water_polo:"\ud83e\udd3d\u200d\u2640\ufe0f",handball_person:"\ud83e\udd3e",man_playing_handball:"\ud83e\udd3e\u200d\u2642\ufe0f",woman_playing_handball:"\ud83e\udd3e\u200d\u2640\ufe0f",juggling_person:"\ud83e\udd39",man_juggling:"\ud83e\udd39\u200d\u2642\ufe0f",woman_juggling:"\ud83e\udd39\u200d\u2640\ufe0f",lotus_position:"\ud83e\uddd8",lotus_position_man:"\ud83e\uddd8\u200d\u2642\ufe0f",lotus_position_woman:"\ud83e\uddd8\u200d\u2640\ufe0f",bath:"\ud83d\udec0",sleeping_bed:"\ud83d\udecc",people_holding_hands:"\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1",two_women_holding_hands:"\ud83d\udc6d",couple:"\ud83d\udc6b",two_men_holding_hands:"\ud83d\udc6c",couplekiss:"\ud83d\udc8f",couplekiss_man_woman:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",couplekiss_man_man:"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",couplekiss_woman_woman:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",couple_with_heart:"\ud83d\udc91",couple_with_heart_woman_man:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc68",couple_with_heart_man_man:"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",couple_with_heart_woman_woman:"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",family:"\ud83d\udc6a",family_man_woman_boy:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66",family_man_woman_girl:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",family_man_woman_girl_boy:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",family_man_woman_boy_boy:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",family_man_woman_girl_girl:"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",family_man_man_boy:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",family_man_man_girl:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",family_man_man_girl_boy:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",family_man_man_boy_boy:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",family_man_man_girl_girl:"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",family_woman_woman_boy:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",family_woman_woman_girl:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",family_woman_woman_girl_boy:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",family_woman_woman_boy_boy:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",family_woman_woman_girl_girl:"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",family_man_boy:"\ud83d\udc68\u200d\ud83d\udc66",family_man_boy_boy:"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",family_man_girl:"\ud83d\udc68\u200d\ud83d\udc67",family_man_girl_boy:"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",family_man_girl_girl:"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",family_woman_boy:"\ud83d\udc69\u200d\ud83d\udc66",family_woman_boy_boy:"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",family_woman_girl:"\ud83d\udc69\u200d\ud83d\udc67",family_woman_girl_boy:"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",family_woman_girl_girl:"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",speaking_head:"\ud83d\udde3\ufe0f",bust_in_silhouette:"\ud83d\udc64",busts_in_silhouette:"\ud83d\udc65",people_hugging:"\ud83e\udec2",footprints:"\ud83d\udc63",monkey_face:"\ud83d\udc35",monkey:"\ud83d\udc12",gorilla:"\ud83e\udd8d",orangutan:"\ud83e\udda7",dog:"\ud83d\udc36",dog2:"\ud83d\udc15",guide_dog:"\ud83e\uddae",service_dog:"\ud83d\udc15\u200d\ud83e\uddba",poodle:"\ud83d\udc29",wolf:"\ud83d\udc3a",fox_face:"\ud83e\udd8a",raccoon:"\ud83e\udd9d",cat:"\ud83d\udc31",cat2:"\ud83d\udc08",black_cat:"\ud83d\udc08\u200d\u2b1b",lion:"\ud83e\udd81",tiger:"\ud83d\udc2f",tiger2:"\ud83d\udc05",leopard:"\ud83d\udc06",horse:"\ud83d\udc34",moose:"\ud83e\udece",donkey:"\ud83e\udecf",racehorse:"\ud83d\udc0e",unicorn:"\ud83e\udd84",zebra:"\ud83e\udd93",deer:"\ud83e\udd8c",bison:"\ud83e\uddac",cow:"\ud83d\udc2e",ox:"\ud83d\udc02",water_buffalo:"\ud83d\udc03",cow2:"\ud83d\udc04",pig:"\ud83d\udc37",pig2:"\ud83d\udc16",boar:"\ud83d\udc17",pig_nose:"\ud83d\udc3d",ram:"\ud83d\udc0f",sheep:"\ud83d\udc11",goat:"\ud83d\udc10",dromedary_camel:"\ud83d\udc2a",camel:"\ud83d\udc2b",llama:"\ud83e\udd99",giraffe:"\ud83e\udd92",elephant:"\ud83d\udc18",mammoth:"\ud83e\udda3",rhinoceros:"\ud83e\udd8f",hippopotamus:"\ud83e\udd9b",mouse:"\ud83d\udc2d",mouse2:"\ud83d\udc01",rat:"\ud83d\udc00",hamster:"\ud83d\udc39",rabbit:"\ud83d\udc30",rabbit2:"\ud83d\udc07",chipmunk:"\ud83d\udc3f\ufe0f",beaver:"\ud83e\uddab",hedgehog:"\ud83e\udd94",bat:"\ud83e\udd87",bear:"\ud83d\udc3b",polar_bear:"\ud83d\udc3b\u200d\u2744\ufe0f",koala:"\ud83d\udc28",panda_face:"\ud83d\udc3c",sloth:"\ud83e\udda5",otter:"\ud83e\udda6",skunk:"\ud83e\udda8",kangaroo:"\ud83e\udd98",badger:"\ud83e\udda1",feet:"\ud83d\udc3e",paw_prints:"\ud83d\udc3e",turkey:"\ud83e\udd83",chicken:"\ud83d\udc14",rooster:"\ud83d\udc13",hatching_chick:"\ud83d\udc23",baby_chick:"\ud83d\udc24",hatched_chick:"\ud83d\udc25",bird:"\ud83d\udc26",penguin:"\ud83d\udc27",dove:"\ud83d\udd4a\ufe0f",eagle:"\ud83e\udd85",duck:"\ud83e\udd86",swan:"\ud83e\udda2",owl:"\ud83e\udd89",dodo:"\ud83e\udda4",feather:"\ud83e\udeb6",flamingo:"\ud83e\udda9",peacock:"\ud83e\udd9a",parrot:"\ud83e\udd9c",wing:"\ud83e\udebd",black_bird:"\ud83d\udc26\u200d\u2b1b",goose:"\ud83e\udebf",frog:"\ud83d\udc38",crocodile:"\ud83d\udc0a",turtle:"\ud83d\udc22",lizard:"\ud83e\udd8e",snake:"\ud83d\udc0d",dragon_face:"\ud83d\udc32",dragon:"\ud83d\udc09",sauropod:"\ud83e\udd95","t-rex":"\ud83e\udd96",whale:"\ud83d\udc33",whale2:"\ud83d\udc0b",dolphin:"\ud83d\udc2c",flipper:"\ud83d\udc2c",seal:"\ud83e\uddad",fish:"\ud83d\udc1f",tropical_fish:"\ud83d\udc20",blowfish:"\ud83d\udc21",shark:"\ud83e\udd88",octopus:"\ud83d\udc19",shell:"\ud83d\udc1a",coral:"\ud83e\udeb8",jellyfish:"\ud83e\udebc",snail:"\ud83d\udc0c",butterfly:"\ud83e\udd8b",bug:"\ud83d\udc1b",ant:"\ud83d\udc1c",bee:"\ud83d\udc1d",honeybee:"\ud83d\udc1d",beetle:"\ud83e\udeb2",lady_beetle:"\ud83d\udc1e",cricket:"\ud83e\udd97",cockroach:"\ud83e\udeb3",spider:"\ud83d\udd77\ufe0f",spider_web:"\ud83d\udd78\ufe0f",scorpion:"\ud83e\udd82",mosquito:"\ud83e\udd9f",fly:"\ud83e\udeb0",worm:"\ud83e\udeb1",microbe:"\ud83e\udda0",bouquet:"\ud83d\udc90",cherry_blossom:"\ud83c\udf38",white_flower:"\ud83d\udcae",lotus:"\ud83e\udeb7",rosette:"\ud83c\udff5\ufe0f",rose:"\ud83c\udf39",wilted_flower:"\ud83e\udd40",hibiscus:"\ud83c\udf3a",sunflower:"\ud83c\udf3b",blossom:"\ud83c\udf3c",tulip:"\ud83c\udf37",hyacinth:"\ud83e\udebb",seedling:"\ud83c\udf31",potted_plant:"\ud83e\udeb4",evergreen_tree:"\ud83c\udf32",deciduous_tree:"\ud83c\udf33",palm_tree:"\ud83c\udf34",cactus:"\ud83c\udf35",ear_of_rice:"\ud83c\udf3e",herb:"\ud83c\udf3f",shamrock:"\u2618\ufe0f",four_leaf_clover:"\ud83c\udf40",maple_leaf:"\ud83c\udf41",fallen_leaf:"\ud83c\udf42",leaves:"\ud83c\udf43",empty_nest:"\ud83e\udeb9",nest_with_eggs:"\ud83e\udeba",mushroom:"\ud83c\udf44",grapes:"\ud83c\udf47",melon:"\ud83c\udf48",watermelon:"\ud83c\udf49",tangerine:"\ud83c\udf4a",orange:"\ud83c\udf4a",mandarin:"\ud83c\udf4a",lemon:"\ud83c\udf4b",banana:"\ud83c\udf4c",pineapple:"\ud83c\udf4d",mango:"\ud83e\udd6d",apple:"\ud83c\udf4e",green_apple:"\ud83c\udf4f",pear:"\ud83c\udf50",peach:"\ud83c\udf51",cherries:"\ud83c\udf52",strawberry:"\ud83c\udf53",blueberries:"\ud83e\uded0",kiwi_fruit:"\ud83e\udd5d",tomato:"\ud83c\udf45",olive:"\ud83e\uded2",coconut:"\ud83e\udd65",avocado:"\ud83e\udd51",eggplant:"\ud83c\udf46",potato:"\ud83e\udd54",carrot:"\ud83e\udd55",corn:"\ud83c\udf3d",hot_pepper:"\ud83c\udf36\ufe0f",bell_pepper:"\ud83e\uded1",cucumber:"\ud83e\udd52",leafy_green:"\ud83e\udd6c",broccoli:"\ud83e\udd66",garlic:"\ud83e\uddc4",onion:"\ud83e\uddc5",peanuts:"\ud83e\udd5c",beans:"\ud83e\uded8",chestnut:"\ud83c\udf30",ginger_root:"\ud83e\udeda",pea_pod:"\ud83e\udedb",bread:"\ud83c\udf5e",croissant:"\ud83e\udd50",baguette_bread:"\ud83e\udd56",flatbread:"\ud83e\uded3",pretzel:"\ud83e\udd68",bagel:"\ud83e\udd6f",pancakes:"\ud83e\udd5e",waffle:"\ud83e\uddc7",cheese:"\ud83e\uddc0",meat_on_bone:"\ud83c\udf56",poultry_leg:"\ud83c\udf57",cut_of_meat:"\ud83e\udd69",bacon:"\ud83e\udd53",hamburger:"\ud83c\udf54",fries:"\ud83c\udf5f",pizza:"\ud83c\udf55",hotdog:"\ud83c\udf2d",sandwich:"\ud83e\udd6a",taco:"\ud83c\udf2e",burrito:"\ud83c\udf2f",tamale:"\ud83e\uded4",stuffed_flatbread:"\ud83e\udd59",falafel:"\ud83e\uddc6",egg:"\ud83e\udd5a",fried_egg:"\ud83c\udf73",shallow_pan_of_food:"\ud83e\udd58",stew:"\ud83c\udf72",fondue:"\ud83e\uded5",bowl_with_spoon:"\ud83e\udd63",green_salad:"\ud83e\udd57",popcorn:"\ud83c\udf7f",butter:"\ud83e\uddc8",salt:"\ud83e\uddc2",canned_food:"\ud83e\udd6b",bento:"\ud83c\udf71",rice_cracker:"\ud83c\udf58",rice_ball:"\ud83c\udf59",rice:"\ud83c\udf5a",curry:"\ud83c\udf5b",ramen:"\ud83c\udf5c",spaghetti:"\ud83c\udf5d",sweet_potato:"\ud83c\udf60",oden:"\ud83c\udf62",sushi:"\ud83c\udf63",fried_shrimp:"\ud83c\udf64",fish_cake:"\ud83c\udf65",moon_cake:"\ud83e\udd6e",dango:"\ud83c\udf61",dumpling:"\ud83e\udd5f",fortune_cookie:"\ud83e\udd60",takeout_box:"\ud83e\udd61",crab:"\ud83e\udd80",lobster:"\ud83e\udd9e",shrimp:"\ud83e\udd90",squid:"\ud83e\udd91",oyster:"\ud83e\uddaa",icecream:"\ud83c\udf66",shaved_ice:"\ud83c\udf67",ice_cream:"\ud83c\udf68",doughnut:"\ud83c\udf69",cookie:"\ud83c\udf6a",birthday:"\ud83c\udf82",cake:"\ud83c\udf70",cupcake:"\ud83e\uddc1",pie:"\ud83e\udd67",chocolate_bar:"\ud83c\udf6b",candy:"\ud83c\udf6c",lollipop:"\ud83c\udf6d",custard:"\ud83c\udf6e",honey_pot:"\ud83c\udf6f",baby_bottle:"\ud83c\udf7c",milk_glass:"\ud83e\udd5b",coffee:"\u2615",teapot:"\ud83e\uded6",tea:"\ud83c\udf75",sake:"\ud83c\udf76",champagne:"\ud83c\udf7e",wine_glass:"\ud83c\udf77",cocktail:"\ud83c\udf78",tropical_drink:"\ud83c\udf79",beer:"\ud83c\udf7a",beers:"\ud83c\udf7b",clinking_glasses:"\ud83e\udd42",tumbler_glass:"\ud83e\udd43",pouring_liquid:"\ud83e\uded7",cup_with_straw:"\ud83e\udd64",bubble_tea:"\ud83e\uddcb",beverage_box:"\ud83e\uddc3",mate:"\ud83e\uddc9",ice_cube:"\ud83e\uddca",chopsticks:"\ud83e\udd62",plate_with_cutlery:"\ud83c\udf7d\ufe0f",fork_and_knife:"\ud83c\udf74",spoon:"\ud83e\udd44",hocho:"\ud83d\udd2a",knife:"\ud83d\udd2a",jar:"\ud83e\uded9",amphora:"\ud83c\udffa",earth_africa:"\ud83c\udf0d",earth_americas:"\ud83c\udf0e",earth_asia:"\ud83c\udf0f",globe_with_meridians:"\ud83c\udf10",world_map:"\ud83d\uddfa\ufe0f",japan:"\ud83d\uddfe",compass:"\ud83e\udded",mountain_snow:"\ud83c\udfd4\ufe0f",mountain:"\u26f0\ufe0f",volcano:"\ud83c\udf0b",mount_fuji:"\ud83d\uddfb",camping:"\ud83c\udfd5\ufe0f",beach_umbrella:"\ud83c\udfd6\ufe0f",desert:"\ud83c\udfdc\ufe0f",desert_island:"\ud83c\udfdd\ufe0f",national_park:"\ud83c\udfde\ufe0f",stadium:"\ud83c\udfdf\ufe0f",classical_building:"\ud83c\udfdb\ufe0f",building_construction:"\ud83c\udfd7\ufe0f",bricks:"\ud83e\uddf1",rock:"\ud83e\udea8",wood:"\ud83e\udeb5",hut:"\ud83d\uded6",houses:"\ud83c\udfd8\ufe0f",derelict_house:"\ud83c\udfda\ufe0f",house:"\ud83c\udfe0",house_with_garden:"\ud83c\udfe1",office:"\ud83c\udfe2",post_office:"\ud83c\udfe3",european_post_office:"\ud83c\udfe4",hospital:"\ud83c\udfe5",bank:"\ud83c\udfe6",hotel:"\ud83c\udfe8",love_hotel:"\ud83c\udfe9",convenience_store:"\ud83c\udfea",school:"\ud83c\udfeb",department_store:"\ud83c\udfec",factory:"\ud83c\udfed",japanese_castle:"\ud83c\udfef",european_castle:"\ud83c\udff0",wedding:"\ud83d\udc92",tokyo_tower:"\ud83d\uddfc",statue_of_liberty:"\ud83d\uddfd",church:"\u26ea",mosque:"\ud83d\udd4c",hindu_temple:"\ud83d\uded5",synagogue:"\ud83d\udd4d",shinto_shrine:"\u26e9\ufe0f",kaaba:"\ud83d\udd4b",fountain:"\u26f2",tent:"\u26fa",foggy:"\ud83c\udf01",night_with_stars:"\ud83c\udf03",cityscape:"\ud83c\udfd9\ufe0f",sunrise_over_mountains:"\ud83c\udf04",sunrise:"\ud83c\udf05",city_sunset:"\ud83c\udf06",city_sunrise:"\ud83c\udf07",bridge_at_night:"\ud83c\udf09",hotsprings:"\u2668\ufe0f",carousel_horse:"\ud83c\udfa0",playground_slide:"\ud83d\udedd",ferris_wheel:"\ud83c\udfa1",roller_coaster:"\ud83c\udfa2",barber:"\ud83d\udc88",circus_tent:"\ud83c\udfaa",steam_locomotive:"\ud83d\ude82",railway_car:"\ud83d\ude83",bullettrain_side:"\ud83d\ude84",bullettrain_front:"\ud83d\ude85",train2:"\ud83d\ude86",metro:"\ud83d\ude87",light_rail:"\ud83d\ude88",station:"\ud83d\ude89",tram:"\ud83d\ude8a",monorail:"\ud83d\ude9d",mountain_railway:"\ud83d\ude9e",train:"\ud83d\ude8b",bus:"\ud83d\ude8c",oncoming_bus:"\ud83d\ude8d",trolleybus:"\ud83d\ude8e",minibus:"\ud83d\ude90",ambulance:"\ud83d\ude91",fire_engine:"\ud83d\ude92",police_car:"\ud83d\ude93",oncoming_police_car:"\ud83d\ude94",taxi:"\ud83d\ude95",oncoming_taxi:"\ud83d\ude96",car:"\ud83d\ude97",red_car:"\ud83d\ude97",oncoming_automobile:"\ud83d\ude98",blue_car:"\ud83d\ude99",pickup_truck:"\ud83d\udefb",truck:"\ud83d\ude9a",articulated_lorry:"\ud83d\ude9b",tractor:"\ud83d\ude9c",racing_car:"\ud83c\udfce\ufe0f",motorcycle:"\ud83c\udfcd\ufe0f",motor_scooter:"\ud83d\udef5",manual_wheelchair:"\ud83e\uddbd",motorized_wheelchair:"\ud83e\uddbc",auto_rickshaw:"\ud83d\udefa",bike:"\ud83d\udeb2",kick_scooter:"\ud83d\udef4",skateboard:"\ud83d\udef9",roller_skate:"\ud83d\udefc",busstop:"\ud83d\ude8f",motorway:"\ud83d\udee3\ufe0f",railway_track:"\ud83d\udee4\ufe0f",oil_drum:"\ud83d\udee2\ufe0f",fuelpump:"\u26fd",wheel:"\ud83d\udede",rotating_light:"\ud83d\udea8",traffic_light:"\ud83d\udea5",vertical_traffic_light:"\ud83d\udea6",stop_sign:"\ud83d\uded1",construction:"\ud83d\udea7",anchor:"\u2693",ring_buoy:"\ud83d\udedf",boat:"\u26f5",sailboat:"\u26f5",canoe:"\ud83d\udef6",speedboat:"\ud83d\udea4",passenger_ship:"\ud83d\udef3\ufe0f",ferry:"\u26f4\ufe0f",motor_boat:"\ud83d\udee5\ufe0f",ship:"\ud83d\udea2",airplane:"\u2708\ufe0f",small_airplane:"\ud83d\udee9\ufe0f",flight_departure:"\ud83d\udeeb",flight_arrival:"\ud83d\udeec",parachute:"\ud83e\ude82",seat:"\ud83d\udcba",helicopter:"\ud83d\ude81",suspension_railway:"\ud83d\ude9f",mountain_cableway:"\ud83d\udea0",aerial_tramway:"\ud83d\udea1",artificial_satellite:"\ud83d\udef0\ufe0f",rocket:"\ud83d\ude80",flying_saucer:"\ud83d\udef8",bellhop_bell:"\ud83d\udece\ufe0f",luggage:"\ud83e\uddf3",hourglass:"\u231b",hourglass_flowing_sand:"\u23f3",watch:"\u231a",alarm_clock:"\u23f0",stopwatch:"\u23f1\ufe0f",timer_clock:"\u23f2\ufe0f",mantelpiece_clock:"\ud83d\udd70\ufe0f",clock12:"\ud83d\udd5b",clock1230:"\ud83d\udd67",clock1:"\ud83d\udd50",clock130:"\ud83d\udd5c",clock2:"\ud83d\udd51",clock230:"\ud83d\udd5d",clock3:"\ud83d\udd52",clock330:"\ud83d\udd5e",clock4:"\ud83d\udd53",clock430:"\ud83d\udd5f",clock5:"\ud83d\udd54",clock530:"\ud83d\udd60",clock6:"\ud83d\udd55",clock630:"\ud83d\udd61",clock7:"\ud83d\udd56",clock730:"\ud83d\udd62",clock8:"\ud83d\udd57",clock830:"\ud83d\udd63",clock9:"\ud83d\udd58",clock930:"\ud83d\udd64",clock10:"\ud83d\udd59",clock1030:"\ud83d\udd65",clock11:"\ud83d\udd5a",clock1130:"\ud83d\udd66",new_moon:"\ud83c\udf11",waxing_crescent_moon:"\ud83c\udf12",first_quarter_moon:"\ud83c\udf13",moon:"\ud83c\udf14",waxing_gibbous_moon:"\ud83c\udf14",full_moon:"\ud83c\udf15",waning_gibbous_moon:"\ud83c\udf16",last_quarter_moon:"\ud83c\udf17",waning_crescent_moon:"\ud83c\udf18",crescent_moon:"\ud83c\udf19",new_moon_with_face:"\ud83c\udf1a",first_quarter_moon_with_face:"\ud83c\udf1b",last_quarter_moon_with_face:"\ud83c\udf1c",thermometer:"\ud83c\udf21\ufe0f",sunny:"\u2600\ufe0f",full_moon_with_face:"\ud83c\udf1d",sun_with_face:"\ud83c\udf1e",ringed_planet:"\ud83e\ude90",star:"\u2b50",star2:"\ud83c\udf1f",stars:"\ud83c\udf20",milky_way:"\ud83c\udf0c",cloud:"\u2601\ufe0f",partly_sunny:"\u26c5",cloud_with_lightning_and_rain:"\u26c8\ufe0f",sun_behind_small_cloud:"\ud83c\udf24\ufe0f",sun_behind_large_cloud:"\ud83c\udf25\ufe0f",sun_behind_rain_cloud:"\ud83c\udf26\ufe0f",cloud_with_rain:"\ud83c\udf27\ufe0f",cloud_with_snow:"\ud83c\udf28\ufe0f",cloud_with_lightning:"\ud83c\udf29\ufe0f",tornado:"\ud83c\udf2a\ufe0f",fog:"\ud83c\udf2b\ufe0f",wind_face:"\ud83c\udf2c\ufe0f",cyclone:"\ud83c\udf00",rainbow:"\ud83c\udf08",closed_umbrella:"\ud83c\udf02",open_umbrella:"\u2602\ufe0f",umbrella:"\u2614",parasol_on_ground:"\u26f1\ufe0f",zap:"\u26a1",snowflake:"\u2744\ufe0f",snowman_with_snow:"\u2603\ufe0f",snowman:"\u26c4",comet:"\u2604\ufe0f",fire:"\ud83d\udd25",droplet:"\ud83d\udca7",ocean:"\ud83c\udf0a",jack_o_lantern:"\ud83c\udf83",christmas_tree:"\ud83c\udf84",fireworks:"\ud83c\udf86",sparkler:"\ud83c\udf87",firecracker:"\ud83e\udde8",sparkles:"\u2728",balloon:"\ud83c\udf88",tada:"\ud83c\udf89",confetti_ball:"\ud83c\udf8a",tanabata_tree:"\ud83c\udf8b",bamboo:"\ud83c\udf8d",dolls:"\ud83c\udf8e",flags:"\ud83c\udf8f",wind_chime:"\ud83c\udf90",rice_scene:"\ud83c\udf91",red_envelope:"\ud83e\udde7",ribbon:"\ud83c\udf80",gift:"\ud83c\udf81",reminder_ribbon:"\ud83c\udf97\ufe0f",tickets:"\ud83c\udf9f\ufe0f",ticket:"\ud83c\udfab",medal_military:"\ud83c\udf96\ufe0f",trophy:"\ud83c\udfc6",medal_sports:"\ud83c\udfc5","1st_place_medal":"\ud83e\udd47","2nd_place_medal":"\ud83e\udd48","3rd_place_medal":"\ud83e\udd49",soccer:"\u26bd",baseball:"\u26be",softball:"\ud83e\udd4e",basketball:"\ud83c\udfc0",volleyball:"\ud83c\udfd0",football:"\ud83c\udfc8",rugby_football:"\ud83c\udfc9",tennis:"\ud83c\udfbe",flying_disc:"\ud83e\udd4f",bowling:"\ud83c\udfb3",cricket_game:"\ud83c\udfcf",field_hockey:"\ud83c\udfd1",ice_hockey:"\ud83c\udfd2",lacrosse:"\ud83e\udd4d",ping_pong:"\ud83c\udfd3",badminton:"\ud83c\udff8",boxing_glove:"\ud83e\udd4a",martial_arts_uniform:"\ud83e\udd4b",goal_net:"\ud83e\udd45",golf:"\u26f3",ice_skate:"\u26f8\ufe0f",fishing_pole_and_fish:"\ud83c\udfa3",diving_mask:"\ud83e\udd3f",running_shirt_with_sash:"\ud83c\udfbd",ski:"\ud83c\udfbf",sled:"\ud83d\udef7",curling_stone:"\ud83e\udd4c",dart:"\ud83c\udfaf",yo_yo:"\ud83e\ude80",kite:"\ud83e\ude81",gun:"\ud83d\udd2b","8ball":"\ud83c\udfb1",crystal_ball:"\ud83d\udd2e",magic_wand:"\ud83e\ude84",video_game:"\ud83c\udfae",joystick:"\ud83d\udd79\ufe0f",slot_machine:"\ud83c\udfb0",game_die:"\ud83c\udfb2",jigsaw:"\ud83e\udde9",teddy_bear:"\ud83e\uddf8",pinata:"\ud83e\ude85",mirror_ball:"\ud83e\udea9",nesting_dolls:"\ud83e\ude86",spades:"\u2660\ufe0f",hearts:"\u2665\ufe0f",diamonds:"\u2666\ufe0f",clubs:"\u2663\ufe0f",chess_pawn:"\u265f\ufe0f",black_joker:"\ud83c\udccf",mahjong:"\ud83c\udc04",flower_playing_cards:"\ud83c\udfb4",performing_arts:"\ud83c\udfad",framed_picture:"\ud83d\uddbc\ufe0f",art:"\ud83c\udfa8",thread:"\ud83e\uddf5",sewing_needle:"\ud83e\udea1",yarn:"\ud83e\uddf6",knot:"\ud83e\udea2",eyeglasses:"\ud83d\udc53",dark_sunglasses:"\ud83d\udd76\ufe0f",goggles:"\ud83e\udd7d",lab_coat:"\ud83e\udd7c",safety_vest:"\ud83e\uddba",necktie:"\ud83d\udc54",shirt:"\ud83d\udc55",tshirt:"\ud83d\udc55",jeans:"\ud83d\udc56",scarf:"\ud83e\udde3",gloves:"\ud83e\udde4",coat:"\ud83e\udde5",socks:"\ud83e\udde6",dress:"\ud83d\udc57",kimono:"\ud83d\udc58",sari:"\ud83e\udd7b",one_piece_swimsuit:"\ud83e\ude71",swim_brief:"\ud83e\ude72",shorts:"\ud83e\ude73",bikini:"\ud83d\udc59",womans_clothes:"\ud83d\udc5a",folding_hand_fan:"\ud83e\udead",purse:"\ud83d\udc5b",handbag:"\ud83d\udc5c",pouch:"\ud83d\udc5d",shopping:"\ud83d\udecd\ufe0f",school_satchel:"\ud83c\udf92",thong_sandal:"\ud83e\ude74",mans_shoe:"\ud83d\udc5e",shoe:"\ud83d\udc5e",athletic_shoe:"\ud83d\udc5f",hiking_boot:"\ud83e\udd7e",flat_shoe:"\ud83e\udd7f",high_heel:"\ud83d\udc60",sandal:"\ud83d\udc61",ballet_shoes:"\ud83e\ude70",boot:"\ud83d\udc62",hair_pick:"\ud83e\udeae",crown:"\ud83d\udc51",womans_hat:"\ud83d\udc52",tophat:"\ud83c\udfa9",mortar_board:"\ud83c\udf93",billed_cap:"\ud83e\udde2",military_helmet:"\ud83e\ude96",rescue_worker_helmet:"\u26d1\ufe0f",prayer_beads:"\ud83d\udcff",lipstick:"\ud83d\udc84",ring:"\ud83d\udc8d",gem:"\ud83d\udc8e",mute:"\ud83d\udd07",speaker:"\ud83d\udd08",sound:"\ud83d\udd09",loud_sound:"\ud83d\udd0a",loudspeaker:"\ud83d\udce2",mega:"\ud83d\udce3",postal_horn:"\ud83d\udcef",bell:"\ud83d\udd14",no_bell:"\ud83d\udd15",musical_score:"\ud83c\udfbc",musical_note:"\ud83c\udfb5",notes:"\ud83c\udfb6",studio_microphone:"\ud83c\udf99\ufe0f",level_slider:"\ud83c\udf9a\ufe0f",control_knobs:"\ud83c\udf9b\ufe0f",microphone:"\ud83c\udfa4",headphones:"\ud83c\udfa7",radio:"\ud83d\udcfb",saxophone:"\ud83c\udfb7",accordion:"\ud83e\ude97",guitar:"\ud83c\udfb8",musical_keyboard:"\ud83c\udfb9",trumpet:"\ud83c\udfba",violin:"\ud83c\udfbb",banjo:"\ud83e\ude95",drum:"\ud83e\udd41",long_drum:"\ud83e\ude98",maracas:"\ud83e\ude87",flute:"\ud83e\ude88",iphone:"\ud83d\udcf1",calling:"\ud83d\udcf2",phone:"\u260e\ufe0f",telephone:"\u260e\ufe0f",telephone_receiver:"\ud83d\udcde",pager:"\ud83d\udcdf",fax:"\ud83d\udce0",battery:"\ud83d\udd0b",low_battery:"\ud83e\udeab",electric_plug:"\ud83d\udd0c",computer:"\ud83d\udcbb",desktop_computer:"\ud83d\udda5\ufe0f",printer:"\ud83d\udda8\ufe0f",keyboard:"\u2328\ufe0f",computer_mouse:"\ud83d\uddb1\ufe0f",trackball:"\ud83d\uddb2\ufe0f",minidisc:"\ud83d\udcbd",floppy_disk:"\ud83d\udcbe",cd:"\ud83d\udcbf",dvd:"\ud83d\udcc0",abacus:"\ud83e\uddee",movie_camera:"\ud83c\udfa5",film_strip:"\ud83c\udf9e\ufe0f",film_projector:"\ud83d\udcfd\ufe0f",clapper:"\ud83c\udfac",tv:"\ud83d\udcfa",camera:"\ud83d\udcf7",camera_flash:"\ud83d\udcf8",video_camera:"\ud83d\udcf9",vhs:"\ud83d\udcfc",mag:"\ud83d\udd0d",mag_right:"\ud83d\udd0e",candle:"\ud83d\udd6f\ufe0f",bulb:"\ud83d\udca1",flashlight:"\ud83d\udd26",izakaya_lantern:"\ud83c\udfee",lantern:"\ud83c\udfee",diya_lamp:"\ud83e\ude94",notebook_with_decorative_cover:"\ud83d\udcd4",closed_book:"\ud83d\udcd5",book:"\ud83d\udcd6",open_book:"\ud83d\udcd6",green_book:"\ud83d\udcd7",blue_book:"\ud83d\udcd8",orange_book:"\ud83d\udcd9",books:"\ud83d\udcda",notebook:"\ud83d\udcd3",ledger:"\ud83d\udcd2",page_with_curl:"\ud83d\udcc3",scroll:"\ud83d\udcdc",page_facing_up:"\ud83d\udcc4",newspaper:"\ud83d\udcf0",newspaper_roll:"\ud83d\uddde\ufe0f",bookmark_tabs:"\ud83d\udcd1",bookmark:"\ud83d\udd16",label:"\ud83c\udff7\ufe0f",moneybag:"\ud83d\udcb0",coin:"\ud83e\ude99",yen:"\ud83d\udcb4",dollar:"\ud83d\udcb5",euro:"\ud83d\udcb6",pound:"\ud83d\udcb7",money_with_wings:"\ud83d\udcb8",credit_card:"\ud83d\udcb3",receipt:"\ud83e\uddfe",chart:"\ud83d\udcb9",envelope:"\u2709\ufe0f",email:"\ud83d\udce7","e-mail":"\ud83d\udce7",incoming_envelope:"\ud83d\udce8",envelope_with_arrow:"\ud83d\udce9",outbox_tray:"\ud83d\udce4",inbox_tray:"\ud83d\udce5",package:"\ud83d\udce6",mailbox:"\ud83d\udceb",mailbox_closed:"\ud83d\udcea",mailbox_with_mail:"\ud83d\udcec",mailbox_with_no_mail:"\ud83d\udced",postbox:"\ud83d\udcee",ballot_box:"\ud83d\uddf3\ufe0f",pencil2:"\u270f\ufe0f",black_nib:"\u2712\ufe0f",fountain_pen:"\ud83d\udd8b\ufe0f",pen:"\ud83d\udd8a\ufe0f",paintbrush:"\ud83d\udd8c\ufe0f",crayon:"\ud83d\udd8d\ufe0f",memo:"\ud83d\udcdd",pencil:"\ud83d\udcdd",briefcase:"\ud83d\udcbc",file_folder:"\ud83d\udcc1",open_file_folder:"\ud83d\udcc2",card_index_dividers:"\ud83d\uddc2\ufe0f",date:"\ud83d\udcc5",calendar:"\ud83d\udcc6",spiral_notepad:"\ud83d\uddd2\ufe0f",spiral_calendar:"\ud83d\uddd3\ufe0f",card_index:"\ud83d\udcc7",chart_with_upwards_trend:"\ud83d\udcc8",chart_with_downwards_trend:"\ud83d\udcc9",bar_chart:"\ud83d\udcca",clipboard:"\ud83d\udccb",pushpin:"\ud83d\udccc",round_pushpin:"\ud83d\udccd",paperclip:"\ud83d\udcce",paperclips:"\ud83d\udd87\ufe0f",straight_ruler:"\ud83d\udccf",triangular_ruler:"\ud83d\udcd0",scissors:"\u2702\ufe0f",card_file_box:"\ud83d\uddc3\ufe0f",file_cabinet:"\ud83d\uddc4\ufe0f",wastebasket:"\ud83d\uddd1\ufe0f",lock:"\ud83d\udd12",unlock:"\ud83d\udd13",lock_with_ink_pen:"\ud83d\udd0f",closed_lock_with_key:"\ud83d\udd10",key:"\ud83d\udd11",old_key:"\ud83d\udddd\ufe0f",hammer:"\ud83d\udd28",axe:"\ud83e\ude93",pick:"\u26cf\ufe0f",hammer_and_pick:"\u2692\ufe0f",hammer_and_wrench:"\ud83d\udee0\ufe0f",dagger:"\ud83d\udde1\ufe0f",crossed_swords:"\u2694\ufe0f",bomb:"\ud83d\udca3",boomerang:"\ud83e\ude83",bow_and_arrow:"\ud83c\udff9",shield:"\ud83d\udee1\ufe0f",carpentry_saw:"\ud83e\ude9a",wrench:"\ud83d\udd27",screwdriver:"\ud83e\ude9b",nut_and_bolt:"\ud83d\udd29",gear:"\u2699\ufe0f",clamp:"\ud83d\udddc\ufe0f",balance_scale:"\u2696\ufe0f",probing_cane:"\ud83e\uddaf",link:"\ud83d\udd17",chains:"\u26d3\ufe0f",hook:"\ud83e\ude9d",toolbox:"\ud83e\uddf0",magnet:"\ud83e\uddf2",ladder:"\ud83e\ude9c",alembic:"\u2697\ufe0f",test_tube:"\ud83e\uddea",petri_dish:"\ud83e\uddeb",dna:"\ud83e\uddec",microscope:"\ud83d\udd2c",telescope:"\ud83d\udd2d",satellite:"\ud83d\udce1",syringe:"\ud83d\udc89",drop_of_blood:"\ud83e\ude78",pill:"\ud83d\udc8a",adhesive_bandage:"\ud83e\ude79",crutch:"\ud83e\ude7c",stethoscope:"\ud83e\ude7a",x_ray:"\ud83e\ude7b",door:"\ud83d\udeaa",elevator:"\ud83d\uded7",mirror:"\ud83e\ude9e",window:"\ud83e\ude9f",bed:"\ud83d\udecf\ufe0f",couch_and_lamp:"\ud83d\udecb\ufe0f",chair:"\ud83e\ude91",toilet:"\ud83d\udebd",plunger:"\ud83e\udea0",shower:"\ud83d\udebf",bathtub:"\ud83d\udec1",mouse_trap:"\ud83e\udea4",razor:"\ud83e\ude92",lotion_bottle:"\ud83e\uddf4",safety_pin:"\ud83e\uddf7",broom:"\ud83e\uddf9",basket:"\ud83e\uddfa",roll_of_paper:"\ud83e\uddfb",bucket:"\ud83e\udea3",soap:"\ud83e\uddfc",bubbles:"\ud83e\udee7",toothbrush:"\ud83e\udea5",sponge:"\ud83e\uddfd",fire_extinguisher:"\ud83e\uddef",shopping_cart:"\ud83d\uded2",smoking:"\ud83d\udeac",coffin:"\u26b0\ufe0f",headstone:"\ud83e\udea6",funeral_urn:"\u26b1\ufe0f",nazar_amulet:"\ud83e\uddff",hamsa:"\ud83e\udeac",moyai:"\ud83d\uddff",placard:"\ud83e\udea7",identification_card:"\ud83e\udeaa",atm:"\ud83c\udfe7",put_litter_in_its_place:"\ud83d\udeae",potable_water:"\ud83d\udeb0",wheelchair:"\u267f",mens:"\ud83d\udeb9",womens:"\ud83d\udeba",restroom:"\ud83d\udebb",baby_symbol:"\ud83d\udebc",wc:"\ud83d\udebe",passport_control:"\ud83d\udec2",customs:"\ud83d\udec3",baggage_claim:"\ud83d\udec4",left_luggage:"\ud83d\udec5",warning:"\u26a0\ufe0f",children_crossing:"\ud83d\udeb8",no_entry:"\u26d4",no_entry_sign:"\ud83d\udeab",no_bicycles:"\ud83d\udeb3",no_smoking:"\ud83d\udead",do_not_litter:"\ud83d\udeaf","non-potable_water":"\ud83d\udeb1",no_pedestrians:"\ud83d\udeb7",no_mobile_phones:"\ud83d\udcf5",underage:"\ud83d\udd1e",radioactive:"\u2622\ufe0f",biohazard:"\u2623\ufe0f",arrow_up:"\u2b06\ufe0f",arrow_upper_right:"\u2197\ufe0f",arrow_right:"\u27a1\ufe0f",arrow_lower_right:"\u2198\ufe0f",arrow_down:"\u2b07\ufe0f",arrow_lower_left:"\u2199\ufe0f",arrow_left:"\u2b05\ufe0f",arrow_upper_left:"\u2196\ufe0f",arrow_up_down:"\u2195\ufe0f",left_right_arrow:"\u2194\ufe0f",leftwards_arrow_with_hook:"\u21a9\ufe0f",arrow_right_hook:"\u21aa\ufe0f",arrow_heading_up:"\u2934\ufe0f",arrow_heading_down:"\u2935\ufe0f",arrows_clockwise:"\ud83d\udd03",arrows_counterclockwise:"\ud83d\udd04",back:"\ud83d\udd19",end:"\ud83d\udd1a",on:"\ud83d\udd1b",soon:"\ud83d\udd1c",top:"\ud83d\udd1d",place_of_worship:"\ud83d\uded0",atom_symbol:"\u269b\ufe0f",om:"\ud83d\udd49\ufe0f",star_of_david:"\u2721\ufe0f",wheel_of_dharma:"\u2638\ufe0f",yin_yang:"\u262f\ufe0f",latin_cross:"\u271d\ufe0f",orthodox_cross:"\u2626\ufe0f",star_and_crescent:"\u262a\ufe0f",peace_symbol:"\u262e\ufe0f",menorah:"\ud83d\udd4e",six_pointed_star:"\ud83d\udd2f",khanda:"\ud83e\udeaf",aries:"\u2648",taurus:"\u2649",gemini:"\u264a",cancer:"\u264b",leo:"\u264c",virgo:"\u264d",libra:"\u264e",scorpius:"\u264f",sagittarius:"\u2650",capricorn:"\u2651",aquarius:"\u2652",pisces:"\u2653",ophiuchus:"\u26ce",twisted_rightwards_arrows:"\ud83d\udd00",repeat:"\ud83d\udd01",repeat_one:"\ud83d\udd02",arrow_forward:"\u25b6\ufe0f",fast_forward:"\u23e9",next_track_button:"\u23ed\ufe0f",play_or_pause_button:"\u23ef\ufe0f",arrow_backward:"\u25c0\ufe0f",rewind:"\u23ea",previous_track_button:"\u23ee\ufe0f",arrow_up_small:"\ud83d\udd3c",arrow_double_up:"\u23eb",arrow_down_small:"\ud83d\udd3d",arrow_double_down:"\u23ec",pause_button:"\u23f8\ufe0f",stop_button:"\u23f9\ufe0f",record_button:"\u23fa\ufe0f",eject_button:"\u23cf\ufe0f",cinema:"\ud83c\udfa6",low_brightness:"\ud83d\udd05",high_brightness:"\ud83d\udd06",signal_strength:"\ud83d\udcf6",wireless:"\ud83d\udedc",vibration_mode:"\ud83d\udcf3",mobile_phone_off:"\ud83d\udcf4",female_sign:"\u2640\ufe0f",male_sign:"\u2642\ufe0f",transgender_symbol:"\u26a7\ufe0f",heavy_multiplication_x:"\u2716\ufe0f",heavy_plus_sign:"\u2795",heavy_minus_sign:"\u2796",heavy_division_sign:"\u2797",heavy_equals_sign:"\ud83d\udff0",infinity:"\u267e\ufe0f",bangbang:"\u203c\ufe0f",interrobang:"\u2049\ufe0f",question:"\u2753",grey_question:"\u2754",grey_exclamation:"\u2755",exclamation:"\u2757",heavy_exclamation_mark:"\u2757",wavy_dash:"\u3030\ufe0f",currency_exchange:"\ud83d\udcb1",heavy_dollar_sign:"\ud83d\udcb2",medical_symbol:"\u2695\ufe0f",recycle:"\u267b\ufe0f",fleur_de_lis:"\u269c\ufe0f",trident:"\ud83d\udd31",name_badge:"\ud83d\udcdb",beginner:"\ud83d\udd30",o:"\u2b55",white_check_mark:"\u2705",ballot_box_with_check:"\u2611\ufe0f",heavy_check_mark:"\u2714\ufe0f",x:"\u274c",negative_squared_cross_mark:"\u274e",curly_loop:"\u27b0",loop:"\u27bf",part_alternation_mark:"\u303d\ufe0f",eight_spoked_asterisk:"\u2733\ufe0f",eight_pointed_black_star:"\u2734\ufe0f",sparkle:"\u2747\ufe0f",copyright:"\xa9\ufe0f",registered:"\xae\ufe0f",tm:"\u2122\ufe0f",hash:"#\ufe0f\u20e3",asterisk:"*\ufe0f\u20e3",zero:"0\ufe0f\u20e3",one:"1\ufe0f\u20e3",two:"2\ufe0f\u20e3",three:"3\ufe0f\u20e3",four:"4\ufe0f\u20e3",five:"5\ufe0f\u20e3",six:"6\ufe0f\u20e3",seven:"7\ufe0f\u20e3",eight:"8\ufe0f\u20e3",nine:"9\ufe0f\u20e3",keycap_ten:"\ud83d\udd1f",capital_abcd:"\ud83d\udd20",abcd:"\ud83d\udd21",symbols:"\ud83d\udd23",abc:"\ud83d\udd24",a:"\ud83c\udd70\ufe0f",ab:"\ud83c\udd8e",b:"\ud83c\udd71\ufe0f",cl:"\ud83c\udd91",cool:"\ud83c\udd92",free:"\ud83c\udd93",information_source:"\u2139\ufe0f",id:"\ud83c\udd94",m:"\u24c2\ufe0f",new:"\ud83c\udd95",ng:"\ud83c\udd96",o2:"\ud83c\udd7e\ufe0f",ok:"\ud83c\udd97",parking:"\ud83c\udd7f\ufe0f",sos:"\ud83c\udd98",up:"\ud83c\udd99",vs:"\ud83c\udd9a",koko:"\ud83c\ude01",sa:"\ud83c\ude02\ufe0f",u6708:"\ud83c\ude37\ufe0f",u6709:"\ud83c\ude36",u6307:"\ud83c\ude2f",ideograph_advantage:"\ud83c\ude50",u5272:"\ud83c\ude39",u7121:"\ud83c\ude1a",u7981:"\ud83c\ude32",accept:"\ud83c\ude51",u7533:"\ud83c\ude38",u5408:"\ud83c\ude34",u7a7a:"\ud83c\ude33",congratulations:"\u3297\ufe0f",secret:"\u3299\ufe0f",u55b6:"\ud83c\ude3a",u6e80:"\ud83c\ude35",red_circle:"\ud83d\udd34",orange_circle:"\ud83d\udfe0",yellow_circle:"\ud83d\udfe1",green_circle:"\ud83d\udfe2",large_blue_circle:"\ud83d\udd35",purple_circle:"\ud83d\udfe3",brown_circle:"\ud83d\udfe4",black_circle:"\u26ab",white_circle:"\u26aa",red_square:"\ud83d\udfe5",orange_square:"\ud83d\udfe7",yellow_square:"\ud83d\udfe8",green_square:"\ud83d\udfe9",blue_square:"\ud83d\udfe6",purple_square:"\ud83d\udfea",brown_square:"\ud83d\udfeb",black_large_square:"\u2b1b",white_large_square:"\u2b1c",black_medium_square:"\u25fc\ufe0f",white_medium_square:"\u25fb\ufe0f",black_medium_small_square:"\u25fe",white_medium_small_square:"\u25fd",black_small_square:"\u25aa\ufe0f",white_small_square:"\u25ab\ufe0f",large_orange_diamond:"\ud83d\udd36",large_blue_diamond:"\ud83d\udd37",small_orange_diamond:"\ud83d\udd38",small_blue_diamond:"\ud83d\udd39",small_red_triangle:"\ud83d\udd3a",small_red_triangle_down:"\ud83d\udd3b",diamond_shape_with_a_dot_inside:"\ud83d\udca0",radio_button:"\ud83d\udd18",white_square_button:"\ud83d\udd33",black_square_button:"\ud83d\udd32",checkered_flag:"\ud83c\udfc1",triangular_flag_on_post:"\ud83d\udea9",crossed_flags:"\ud83c\udf8c",black_flag:"\ud83c\udff4",white_flag:"\ud83c\udff3\ufe0f",rainbow_flag:"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",transgender_flag:"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f",pirate_flag:"\ud83c\udff4\u200d\u2620\ufe0f",ascension_island:"\ud83c\udde6\ud83c\udde8",andorra:"\ud83c\udde6\ud83c\udde9",united_arab_emirates:"\ud83c\udde6\ud83c\uddea",afghanistan:"\ud83c\udde6\ud83c\uddeb",antigua_barbuda:"\ud83c\udde6\ud83c\uddec",anguilla:"\ud83c\udde6\ud83c\uddee",albania:"\ud83c\udde6\ud83c\uddf1",armenia:"\ud83c\udde6\ud83c\uddf2",angola:"\ud83c\udde6\ud83c\uddf4",antarctica:"\ud83c\udde6\ud83c\uddf6",argentina:"\ud83c\udde6\ud83c\uddf7",american_samoa:"\ud83c\udde6\ud83c\uddf8",austria:"\ud83c\udde6\ud83c\uddf9",australia:"\ud83c\udde6\ud83c\uddfa",aruba:"\ud83c\udde6\ud83c\uddfc",aland_islands:"\ud83c\udde6\ud83c\uddfd",azerbaijan:"\ud83c\udde6\ud83c\uddff",bosnia_herzegovina:"\ud83c\udde7\ud83c\udde6",barbados:"\ud83c\udde7\ud83c\udde7",bangladesh:"\ud83c\udde7\ud83c\udde9",belgium:"\ud83c\udde7\ud83c\uddea",burkina_faso:"\ud83c\udde7\ud83c\uddeb",bulgaria:"\ud83c\udde7\ud83c\uddec",bahrain:"\ud83c\udde7\ud83c\udded",burundi:"\ud83c\udde7\ud83c\uddee",benin:"\ud83c\udde7\ud83c\uddef",st_barthelemy:"\ud83c\udde7\ud83c\uddf1",bermuda:"\ud83c\udde7\ud83c\uddf2",brunei:"\ud83c\udde7\ud83c\uddf3",bolivia:"\ud83c\udde7\ud83c\uddf4",caribbean_netherlands:"\ud83c\udde7\ud83c\uddf6",brazil:"\ud83c\udde7\ud83c\uddf7",bahamas:"\ud83c\udde7\ud83c\uddf8",bhutan:"\ud83c\udde7\ud83c\uddf9",bouvet_island:"\ud83c\udde7\ud83c\uddfb",botswana:"\ud83c\udde7\ud83c\uddfc",belarus:"\u2b1c\ufe0f\ud83d\udfe5\u2b1c",belize:"\ud83c\udde7\ud83c\uddff",canada:"\ud83c\udde8\ud83c\udde6",cocos_islands:"\ud83c\udde8\ud83c\udde8",congo_kinshasa:"\ud83c\udde8\ud83c\udde9",central_african_republic:"\ud83c\udde8\ud83c\uddeb",congo_brazzaville:"\ud83c\udde8\ud83c\uddec",switzerland:"\ud83c\udde8\ud83c\udded",cote_divoire:"\ud83c\udde8\ud83c\uddee",cook_islands:"\ud83c\udde8\ud83c\uddf0",chile:"\ud83c\udde8\ud83c\uddf1",cameroon:"\ud83c\udde8\ud83c\uddf2",cn:"\ud83c\udde8\ud83c\uddf3",colombia:"\ud83c\udde8\ud83c\uddf4",clipperton_island:"\ud83c\udde8\ud83c\uddf5",costa_rica:"\ud83c\udde8\ud83c\uddf7",cuba:"\ud83c\udde8\ud83c\uddfa",cape_verde:"\ud83c\udde8\ud83c\uddfb",curacao:"\ud83c\udde8\ud83c\uddfc",christmas_island:"\ud83c\udde8\ud83c\uddfd",cyprus:"\ud83c\udde8\ud83c\uddfe",czech_republic:"\ud83c\udde8\ud83c\uddff",de:"\ud83c\udde9\ud83c\uddea",diego_garcia:"\ud83c\udde9\ud83c\uddec",djibouti:"\ud83c\udde9\ud83c\uddef",denmark:"\ud83c\udde9\ud83c\uddf0",dominica:"\ud83c\udde9\ud83c\uddf2",dominican_republic:"\ud83c\udde9\ud83c\uddf4",algeria:"\ud83c\udde9\ud83c\uddff",ceuta_melilla:"\ud83c\uddea\ud83c\udde6",ecuador:"\ud83c\uddea\ud83c\udde8",estonia:"\ud83c\uddea\ud83c\uddea",egypt:"\ud83c\uddea\ud83c\uddec",western_sahara:"\ud83c\uddea\ud83c\udded",eritrea:"\ud83c\uddea\ud83c\uddf7",es:"\ud83c\uddea\ud83c\uddf8",ethiopia:"\ud83c\uddea\ud83c\uddf9",eu:"\ud83c\uddea\ud83c\uddfa",european_union:"\ud83c\uddea\ud83c\uddfa",finland:"\ud83c\uddeb\ud83c\uddee",fiji:"\ud83c\uddeb\ud83c\uddef",falkland_islands:"\ud83c\uddeb\ud83c\uddf0",micronesia:"\ud83c\uddeb\ud83c\uddf2",faroe_islands:"\ud83c\uddeb\ud83c\uddf4",fr:"\ud83c\uddeb\ud83c\uddf7",gabon:"\ud83c\uddec\ud83c\udde6",gb:"\ud83c\uddec\ud83c\udde7",uk:"\ud83c\uddec\ud83c\udde7",grenada:"\ud83c\uddec\ud83c\udde9",georgia:"\ud83c\uddec\ud83c\uddea",french_guiana:"\ud83c\uddec\ud83c\uddeb",guernsey:"\ud83c\uddec\ud83c\uddec",ghana:"\ud83c\uddec\ud83c\udded",gibraltar:"\ud83c\uddec\ud83c\uddee",greenland:"\ud83c\uddec\ud83c\uddf1",gambia:"\ud83c\uddec\ud83c\uddf2",guinea:"\ud83c\uddec\ud83c\uddf3",guadeloupe:"\ud83c\uddec\ud83c\uddf5",equatorial_guinea:"\ud83c\uddec\ud83c\uddf6",greece:"\ud83c\uddec\ud83c\uddf7",south_georgia_south_sandwich_islands:"\ud83c\uddec\ud83c\uddf8",guatemala:"\ud83c\uddec\ud83c\uddf9",guam:"\ud83c\uddec\ud83c\uddfa",guinea_bissau:"\ud83c\uddec\ud83c\uddfc",guyana:"\ud83c\uddec\ud83c\uddfe",hong_kong:"\ud83c\udded\ud83c\uddf0",heard_mcdonald_islands:"\ud83c\udded\ud83c\uddf2",honduras:"\ud83c\udded\ud83c\uddf3",croatia:"\ud83c\udded\ud83c\uddf7",haiti:"\ud83c\udded\ud83c\uddf9",hungary:"\ud83c\udded\ud83c\uddfa",canary_islands:"\ud83c\uddee\ud83c\udde8",indonesia:"\ud83c\uddee\ud83c\udde9",ireland:"\ud83c\uddee\ud83c\uddea",israel:"\ud83c\uddee\ud83c\uddf1",isle_of_man:"\ud83c\uddee\ud83c\uddf2",india:"\ud83c\uddee\ud83c\uddf3",british_indian_ocean_territory:"\ud83c\uddee\ud83c\uddf4",iraq:"\ud83c\uddee\ud83c\uddf6",iran:"\ud83c\uddee\ud83c\uddf7",iceland:"\ud83c\uddee\ud83c\uddf8",it:"\ud83c\uddee\ud83c\uddf9",jersey:"\ud83c\uddef\ud83c\uddea",jamaica:"\ud83c\uddef\ud83c\uddf2",jordan:"\ud83c\uddef\ud83c\uddf4",jp:"\ud83c\uddef\ud83c\uddf5",kenya:"\ud83c\uddf0\ud83c\uddea",kyrgyzstan:"\ud83c\uddf0\ud83c\uddec",cambodia:"\ud83c\uddf0\ud83c\udded",kiribati:"\ud83c\uddf0\ud83c\uddee",comoros:"\ud83c\uddf0\ud83c\uddf2",st_kitts_nevis:"\ud83c\uddf0\ud83c\uddf3",north_korea:"\ud83c\uddf0\ud83c\uddf5",kr:"\ud83c\uddf0\ud83c\uddf7",kuwait:"\ud83c\uddf0\ud83c\uddfc",cayman_islands:"\ud83c\uddf0\ud83c\uddfe",kazakhstan:"\ud83c\uddf0\ud83c\uddff",laos:"\ud83c\uddf1\ud83c\udde6",lebanon:"\ud83c\uddf1\ud83c\udde7",st_lucia:"\ud83c\uddf1\ud83c\udde8",liechtenstein:"\ud83c\uddf1\ud83c\uddee",sri_lanka:"\ud83c\uddf1\ud83c\uddf0",liberia:"\ud83c\uddf1\ud83c\uddf7",lesotho:"\ud83c\uddf1\ud83c\uddf8",lithuania:"\ud83c\uddf1\ud83c\uddf9",luxembourg:"\ud83c\uddf1\ud83c\uddfa",latvia:"\ud83c\uddf1\ud83c\uddfb",libya:"\ud83c\uddf1\ud83c\uddfe",morocco:"\ud83c\uddf2\ud83c\udde6",monaco:"\ud83c\uddf2\ud83c\udde8",moldova:"\ud83c\uddf2\ud83c\udde9",montenegro:"\ud83c\uddf2\ud83c\uddea",st_martin:"\ud83c\uddf2\ud83c\uddeb",madagascar:"\ud83c\uddf2\ud83c\uddec",marshall_islands:"\ud83c\uddf2\ud83c\udded",macedonia:"\ud83c\uddf2\ud83c\uddf0",mali:"\ud83c\uddf2\ud83c\uddf1",myanmar:"\ud83c\uddf2\ud83c\uddf2",mongolia:"\ud83c\uddf2\ud83c\uddf3",macau:"\ud83c\uddf2\ud83c\uddf4",northern_mariana_islands:"\ud83c\uddf2\ud83c\uddf5",martinique:"\ud83c\uddf2\ud83c\uddf6",mauritania:"\ud83c\uddf2\ud83c\uddf7",montserrat:"\ud83c\uddf2\ud83c\uddf8",malta:"\ud83c\uddf2\ud83c\uddf9",mauritius:"\ud83c\uddf2\ud83c\uddfa",maldives:"\ud83c\uddf2\ud83c\uddfb",malawi:"\ud83c\uddf2\ud83c\uddfc",mexico:"\ud83c\uddf2\ud83c\uddfd",malaysia:"\ud83c\uddf2\ud83c\uddfe",mozambique:"\ud83c\uddf2\ud83c\uddff",namibia:"\ud83c\uddf3\ud83c\udde6",new_caledonia:"\ud83c\uddf3\ud83c\udde8",niger:"\ud83c\uddf3\ud83c\uddea",norfolk_island:"\ud83c\uddf3\ud83c\uddeb",nigeria:"\ud83c\uddf3\ud83c\uddec",nicaragua:"\ud83c\uddf3\ud83c\uddee",netherlands:"\ud83c\uddf3\ud83c\uddf1",norway:"\ud83c\uddf3\ud83c\uddf4",nepal:"\ud83c\uddf3\ud83c\uddf5",nauru:"\ud83c\uddf3\ud83c\uddf7",niue:"\ud83c\uddf3\ud83c\uddfa",new_zealand:"\ud83c\uddf3\ud83c\uddff",oman:"\ud83c\uddf4\ud83c\uddf2",panama:"\ud83c\uddf5\ud83c\udde6",peru:"\ud83c\uddf5\ud83c\uddea",french_polynesia:"\ud83c\uddf5\ud83c\uddeb",papua_new_guinea:"\ud83c\uddf5\ud83c\uddec",philippines:"\ud83c\uddf5\ud83c\udded",pakistan:"\ud83c\uddf5\ud83c\uddf0",poland:"\ud83c\uddf5\ud83c\uddf1",st_pierre_miquelon:"\ud83c\uddf5\ud83c\uddf2",pitcairn_islands:"\ud83c\uddf5\ud83c\uddf3",puerto_rico:"\ud83c\uddf5\ud83c\uddf7",palestinian_territories:"\ud83c\uddf5\ud83c\uddf8",portugal:"\ud83c\uddf5\ud83c\uddf9",palau:"\ud83c\uddf5\ud83c\uddfc",paraguay:"\ud83c\uddf5\ud83c\uddfe",qatar:"\ud83c\uddf6\ud83c\udde6",reunion:"\ud83c\uddf7\ud83c\uddea",romania:"\ud83c\uddf7\ud83c\uddf4",serbia:"\ud83c\uddf7\ud83c\uddf8",ru:"\ud83c\uddf7\ud83c\uddfa",rwanda:"\ud83c\uddf7\ud83c\uddfc",saudi_arabia:"\ud83c\uddf8\ud83c\udde6",solomon_islands:"\ud83c\uddf8\ud83c\udde7",seychelles:"\ud83c\uddf8\ud83c\udde8",sudan:"\ud83c\uddf8\ud83c\udde9",sweden:"\ud83c\uddf8\ud83c\uddea",singapore:"\ud83c\uddf8\ud83c\uddec",st_helena:"\ud83c\uddf8\ud83c\udded",slovenia:"\ud83c\uddf8\ud83c\uddee",svalbard_jan_mayen:"\ud83c\uddf8\ud83c\uddef",slovakia:"\ud83c\uddf8\ud83c\uddf0",sierra_leone:"\ud83c\uddf8\ud83c\uddf1",san_marino:"\ud83c\uddf8\ud83c\uddf2",senegal:"\ud83c\uddf8\ud83c\uddf3",somalia:"\ud83c\uddf8\ud83c\uddf4",suriname:"\ud83c\uddf8\ud83c\uddf7",south_sudan:"\ud83c\uddf8\ud83c\uddf8",sao_tome_principe:"\ud83c\uddf8\ud83c\uddf9",el_salvador:"\ud83c\uddf8\ud83c\uddfb",sint_maarten:"\ud83c\uddf8\ud83c\uddfd",syria:"\ud83c\uddf8\ud83c\uddfe",swaziland:"\ud83c\uddf8\ud83c\uddff",tristan_da_cunha:"\ud83c\uddf9\ud83c\udde6",turks_caicos_islands:"\ud83c\uddf9\ud83c\udde8",chad:"\ud83c\uddf9\ud83c\udde9",french_southern_territories:"\ud83c\uddf9\ud83c\uddeb",togo:"\ud83c\uddf9\ud83c\uddec",thailand:"\ud83c\uddf9\ud83c\udded",tajikistan:"\ud83c\uddf9\ud83c\uddef",tokelau:"\ud83c\uddf9\ud83c\uddf0",timor_leste:"\ud83c\uddf9\ud83c\uddf1",turkmenistan:"\ud83c\uddf9\ud83c\uddf2",tunisia:"\ud83c\uddf9\ud83c\uddf3",tonga:"\ud83c\uddf9\ud83c\uddf4",tr:"\ud83c\uddf9\ud83c\uddf7",trinidad_tobago:"\ud83c\uddf9\ud83c\uddf9",tuvalu:"\ud83c\uddf9\ud83c\uddfb",taiwan:"\ud83c\uddf9\ud83c\uddfc",tanzania:"\ud83c\uddf9\ud83c\uddff",ukraine:"\ud83c\uddfa\ud83c\udde6",uganda:"\ud83c\uddfa\ud83c\uddec",us_outlying_islands:"\ud83c\uddfa\ud83c\uddf2",united_nations:"\ud83c\uddfa\ud83c\uddf3",us:"\ud83c\uddfa\ud83c\uddf8",uruguay:"\ud83c\uddfa\ud83c\uddfe",uzbekistan:"\ud83c\uddfa\ud83c\uddff",vatican_city:"\ud83c\uddfb\ud83c\udde6",st_vincent_grenadines:"\ud83c\uddfb\ud83c\udde8",venezuela:"\ud83c\uddfb\ud83c\uddea",british_virgin_islands:"\ud83c\uddfb\ud83c\uddec",us_virgin_islands:"\ud83c\uddfb\ud83c\uddee",vietnam:"\ud83c\uddfb\ud83c\uddf3",vanuatu:"\ud83c\uddfb\ud83c\uddfa",wallis_futuna:"\ud83c\uddfc\ud83c\uddeb",samoa:"\ud83c\uddfc\ud83c\uddf8",kosovo:"\ud83c\uddfd\ud83c\uddf0",yemen:"\ud83c\uddfe\ud83c\uddea",mayotte:"\ud83c\uddfe\ud83c\uddf9",south_africa:"\ud83c\uddff\ud83c\udde6",zambia:"\ud83c\uddff\ud83c\uddf2",zimbabwe:"\ud83c\uddff\ud83c\uddfc",england:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",scotland:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",wales:"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f"},renderer:e=>e.emoji}));const Rd=()=>{const[e,n]=(0,t.useState)(!1);return mt(pt.FK,{children:mt(Pe,{children:mt(kr,{children:mt(pt.FK,{children:[mt(Nr,{onLoaded:n}),e&&mt(ke,{children:mt(be,{path:"/",element:mt(Dd,{}),children:mt(be,{path:"/",element:mt(iu,{})})})})]})})})})},Ld=e=>{e&&n.e(685).then(n.bind(n,685)).then((t=>{let{onCLS:n,onINP:r,onFCP:o,onLCP:a,onTTFB:i}=t;n(e),r(e),o(e),a(e),i(e)}))},Id=document.getElementById("root");Id&&(0,t.render)(mt(Rd,{}),Id),Ld()})()})(); \ No newline at end of file diff --git a/app/vlselect/vmui/static/js/main.7ae2e2c4.js.LICENSE.txt b/app/vlselect/vmui/static/js/main.867f457f.js.LICENSE.txt similarity index 89% rename from app/vlselect/vmui/static/js/main.7ae2e2c4.js.LICENSE.txt rename to app/vlselect/vmui/static/js/main.867f457f.js.LICENSE.txt index 665580a084..c4b51e538d 100644 --- a/app/vlselect/vmui/static/js/main.7ae2e2c4.js.LICENSE.txt +++ b/app/vlselect/vmui/static/js/main.867f457f.js.LICENSE.txt @@ -5,7 +5,7 @@ */ /** - * @remix-run/router v1.17.0 + * @remix-run/router v1.19.2 * * Copyright (c) Remix Software Inc. * @@ -16,7 +16,7 @@ */ /** - * React Router DOM v6.24.0 + * React Router DOM v6.26.2 * * Copyright (c) Remix Software Inc. * @@ -27,7 +27,7 @@ */ /** - * React Router v6.24.0 + * React Router v6.26.2 * * Copyright (c) Remix Software Inc. * diff --git a/app/vlselect/vmui/static/media/MetricsQL.8c2e588d62b87f90dbf0.md b/app/vlselect/vmui/static/media/MetricsQL.a00044c91d9781cf8557.md similarity index 99% rename from app/vlselect/vmui/static/media/MetricsQL.8c2e588d62b87f90dbf0.md rename to app/vlselect/vmui/static/media/MetricsQL.a00044c91d9781cf8557.md index 2f71686b58..7d75c77f7b 100644 --- a/app/vlselect/vmui/static/media/MetricsQL.8c2e588d62b87f90dbf0.md +++ b/app/vlselect/vmui/static/media/MetricsQL.a00044c91d9781cf8557.md @@ -103,7 +103,7 @@ The list of MetricsQL features on top of PromQL: * Trailing commas on all the lists are allowed - label filters, function args and with expressions. For instance, the following queries are valid: `m{foo="bar",}`, `f(a, b,)`, `WITH (x=y,) x`. This simplifies maintenance of multi-line queries. -* Metric names and label names may contain any unicode letter. For example `температура{город="Київ"}` is a valid MetricsQL expression. +* Metric names and label names may contain any unicode letter. For example `ტემპერატურა{πόλη="Київ"}` is a valid MetricsQL expression. * Metric names and labels names may contain escaped chars. For example, `foo\-bar{baz\=aa="b"}` is valid expression. It returns time series with name `foo-bar` containing label `baz=aa` with value `b`. Additionally, the following escape sequences are supported: diff --git a/app/vlselect/vmui/victorialogs.html b/app/vlselect/vmui/victorialogs.html deleted file mode 100644 index 37a3d9cc3e..0000000000 --- a/app/vlselect/vmui/victorialogs.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - VM UI - - - - - - - - - - - - - - -
    - - - diff --git a/app/vlselect/vmui/victoriametrics.html b/app/vlselect/vmui/victoriametrics.html deleted file mode 100644 index a124935409..0000000000 --- a/app/vlselect/vmui/victoriametrics.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - VM UI - - - - - - - - - - - - - - - -
    - - - diff --git a/app/vlselect/vmui/vmanomaly.html b/app/vlselect/vmui/vmanomaly.html deleted file mode 100644 index a124935409..0000000000 --- a/app/vlselect/vmui/vmanomaly.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - VM UI - - - - - - - - - - - - - - - -
    - - - diff --git a/app/vmselect/vmui/apple-touch-icon.png b/app/vmselect/vmui/apple-touch-icon.png deleted file mode 100644 index 9970969062d0178d5fd267fc000f1f6505fbd1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14345 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 KkuH}q4gDXj8o}oP diff --git a/app/vmselect/vmui/asset-manifest.json b/app/vmselect/vmui/asset-manifest.json index ead8dc197a..7e8af606f2 100644 --- a/app/vmselect/vmui/asset-manifest.json +++ b/app/vmselect/vmui/asset-manifest.json @@ -1,13 +1,13 @@ { "files": { "main.css": "./static/css/main.81c6ec3a.css", - "main.js": "./static/js/main.9ed27532.js", - "static/js/685.bebe1265.chunk.js": "./static/js/685.bebe1265.chunk.js", - "static/media/MetricsQL.md": "./static/media/MetricsQL.8c2e588d62b87f90dbf0.md", + "main.js": "./static/js/main.0e69b7a9.js", + "static/js/685.f772060c.chunk.js": "./static/js/685.f772060c.chunk.js", + "static/media/MetricsQL.md": "./static/media/MetricsQL.a00044c91d9781cf8557.md", "index.html": "./index.html" }, "entrypoints": [ "static/css/main.81c6ec3a.css", - "static/js/main.9ed27532.js" + "static/js/main.0e69b7a9.js" ] } \ No newline at end of file diff --git a/app/vmselect/vmui/favicon-32x32.png b/app/vmselect/vmui/favicon-32x32.png deleted file mode 100644 index 7173be44c09b4930d457b3b83c478963f0143606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1618 zcmbV~X;70#7{}ivgd}eg4igBW5CeE2in;IrsYa3_CJKZ@6r>3uAeTf41%$R-Dzw-N zDiSAZsPzC5L~0eqLKBJz0V5!Y975%iD;bn>m%e`Nht71|nce^HKKt8!cK4s-b-*1D zT7m!o;63(o1dvicRx|=?IX{0_4~aoIdp{chDt^Q+iI5+I;=O|X0B~X*0HkFBzydUt zHVOaCpZpk_8@bgvT30 z$--dJtzl5MhK6V(BNGydY;C>T#>RH_YO1B>XQrkE3$l#IcEY_^+Tr%y;oWFF$-(<>0U>Gb5|J zyNA!;A0iT4T3WTYx0jWb7Zv@qxVZTI`SbMjjN7+M=jP_L+83^_yFd^-Ha6zvmS67>un4UeG2YpC(cJ}P-Tx)Bqy}bjOY^hLOe)g^aOB#*F+1bU^bX9KdnU0PQclW&@28%!#P$;X5i;HV&Y8)N6q@<)yPfrgF3>-cj z=;%nhd$+>QZcSul)cE+gUawcF)V;mEhYlU??;ju#h}*X9@b^EMztJ}basXW>IN$?W z-$mZ_*L?piKH4;MM1P5*T&}i3T*vPmo)M~F&AwT@snspSKQeD)J!aO;Exq8LC}2V` zEQIII37EWJ_X9LQ$vpORQG+0f2&@_KiE4p-hVbC9eYZD>g+gIyNSH{%Zb5)Gd&i~V8Dk?W}T4&VpH!g4C%olf)BH_w!JPOD1$9%Y-qPa(VX%NL_#`? z!F-Sg#K-ffwA1m;xi|@VPzh@8Xzs*BPfl1{T~-_^-6R4B$*+`PP;Zax&L`Dhr!Frc z;F%e2N)SiJ{SIo})G9j@Dr4j8RetGQezeuSjHJML77~-=@k}~@zMaLBIVf70j7sHn z*N&>>QU8Ep64BgjF@1=)@B79^hf*#7Rw-ECa;F&C*!gmsFKesQHT%1FkLE*{=7LAAak_ido2&SB7Yn5x*tAXr^GmijE%?@W4Nt%Ya3cc)NDB+~2UGpze*$>+R%75J24zn2}b zuwW&KAs=z&M|_QN!Yg+Iee70D#d;y4K;0E5P$ZKl&UGnl>% znlp{&%-rfgV?Z6oHurD-1;oULMua8*H{cezqJn^fCwv2B0#PDW8W$TD5iOz0lBE)A zgj6O5fF#A+X&m~v|Aq~Xo=qB$ApwA}!#aww1Umxn91%gFa?)7pP=sBjFSY4adqbV3 i&Z-X8l(tv7&k-0SnaZa3I9-5_06e${IAwc;8UFypuZ1)K diff --git a/app/vmselect/vmui/favicon.svg b/app/vmselect/vmui/favicon.svg new file mode 100644 index 0000000000..2db0b8f0c8 --- /dev/null +++ b/app/vmselect/vmui/favicon.svg @@ -0,0 +1 @@ + diff --git a/app/vmselect/vmui/index.html b/app/vmselect/vmui/index.html index 92db788187..5ba5ccf328 100644 --- a/app/vmselect/vmui/index.html +++ b/app/vmselect/vmui/index.html @@ -1 +1 @@ -VM UI
    \ No newline at end of file +vmui
    \ No newline at end of file diff --git a/app/vmselect/vmui/manifest.json b/app/vmselect/vmui/manifest.json index 82c9590a3c..9d9946bb11 100644 --- a/app/vmselect/vmui/manifest.json +++ b/app/vmselect/vmui/manifest.json @@ -1,16 +1,11 @@ { - "short_name": "Victoria Metrics UI", - "name": "Victoria Metrics UI is a metric explorer for Victoria Metrics", + "short_name": "vmui", + "name": "vmui", "icons": [ { - "src": "favicon-32x32.png", - "sizes": "32x32", - "type": "image/png" - }, - { - "src": "apple-touch-icon.png", - "type": "image/png", - "sizes": "192x192" + "src": "favicon.svg", + "sizes": "any", + "type": "image/svg+xml" } ], "start_url": ".", diff --git a/app/vmselect/vmui/preview.jpg b/app/vmselect/vmui/preview.jpg index 9c237b65db2268117b830dca89d2b7f4b8d18fda..35534305fd64ac40557ff26444837e1ef5c918bb 100644 GIT binary patch literal 6695 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 literal 68388 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
    '+(a?i:ii(i,!0))+"
    \n":"
    "+(a?i:ii(i,!0))+"
    \n"}blockquote(e){let{tokens:t}=e;const n=this.parser.parse(t);return"
    \n".concat(n,"
    \n")}html(e){let{text:t}=e;return t}heading(e){let{tokens:t,depth:n}=e;return"").concat(this.parser.parseInline(t),"\n")}hr(e){return"
    \n"}list(e){const t=e.ordered,n=e.start;let r="";for(let o=0;o\n"+r+"\n"}listitem(e){let t="";if(e.task){const n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&"paragraph"===e.tokens[0].type?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&"text"===e.tokens[0].tokens[0].type&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),"
  • ".concat(t,"
  • \n")}checkbox(e){let{checked:t}=e;return"'}paragraph(e){let{tokens:t}=e;return"

    ".concat(this.parser.parseInline(t),"

    \n")}table(e){let t="",n="";for(let a=0;a")),"\n\n"+t+"\n"+r+"
    \n"}tablerow(e){let{text:t}=e;return"\n".concat(t,"\n")}tablecell(e){const t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?"<".concat(n,' align="').concat(e.align,'">'):"<".concat(n,">"))+t+"\n")}strong(e){let{tokens:t}=e;return"".concat(this.parser.parseInline(t),"")}em(e){let{tokens:t}=e;return"".concat(this.parser.parseInline(t),"")}codespan(e){let{text:t}=e;return"".concat(t,"")}br(e){return"
    "}del(e){let{tokens:t}=e;return"".concat(this.parser.parseInline(t),"")}link(e){let{href:t,title:n,tokens:r}=e;const a=this.parser.parseInline(r),o=ci(t);if(null===o)return a;t=o;let i='
    ",i}image(e){let{href:t,title:n,text:r}=e;const a=ci(t);if(null===a)return r;t=a;let o='').concat(r,'1&&void 0!==arguments[1])||arguments[1],n="";for(let r=0;r{const a=e[r].flat(1/0);n=n.concat(this.walkTokens(a,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(){const e=this.defaults.extensions||{renderers:{},childTokens:{}};for(var t=arguments.length,n=new Array(t),r=0;r{const n={...t};if(n.async=this.defaults.async||n.async||!1,t.extensions&&(t.extensions.forEach((t=>{if(!t.name)throw new Error("extension name required");if("renderer"in t){const n=e.renderers[t.name];e.renderers[t.name]=n?function(){for(var e=arguments.length,r=new Array(e),a=0;a{if(this.defaults.async)return Promise.resolve(a.call(e,t)).then((t=>o.call(e,t)));const n=a.call(e,t);return o.call(e,n)}:e[r]=function(){for(var t=arguments.length,n=new Array(t),r=0;r{const r={...n},a={...this.defaults,...r},o=this.onError(!!a.silent,!!a.async);if(!0===this.defaults.async&&!1===r.async)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if("undefined"===typeof t||null===t)return o(new Error("marked(): input parameter is undefined or null"));if("string"!==typeof t)return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));a.hooks&&(a.hooks.options=a,a.hooks.block=e);const i=a.hooks?a.hooks.provideLexer():e?Gi.lex:Gi.lexInline,l=a.hooks?a.hooks.provideParser():e?el.parse:el.parseInline;if(a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(t):t).then((e=>i(e,a))).then((e=>a.hooks?a.hooks.processAllTokens(e):e)).then((e=>a.walkTokens?Promise.all(this.walkTokens(e,a.walkTokens)).then((()=>e)):e)).then((e=>l(e,a))).then((e=>a.hooks?a.hooks.postprocess(e):e)).catch(o);try{a.hooks&&(t=a.hooks.preprocess(t));let e=i(t,a);a.hooks&&(e=a.hooks.processAllTokens(e)),a.walkTokens&&this.walkTokens(e,a.walkTokens);let n=l(e,a);return a.hooks&&(n=a.hooks.postprocess(n)),n}catch(Lp){return o(Lp)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+ii(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function rl(e,t){return nl.parse(e,t)}rl.options=rl.setOptions=function(e){return nl.setOptions(e),rl.defaults=nl.defaults,Xo(rl.defaults),rl},rl.getDefaults=Go,rl.defaults=Jo,rl.use=function(){return nl.use(...arguments),rl.defaults=nl.defaults,Xo(rl.defaults),rl},rl.walkTokens=function(e,t){return nl.walkTokens(e,t)},rl.parseInline=nl.parseInline,rl.Parser=el,rl.parser=el.parse,rl.Renderer=Ji,rl.TextRenderer=Xi,rl.Lexer=Gi,rl.lexer=Gi.lex,rl.Tokenizer=pi,rl.Hooks=tl,rl.parse=rl;rl.options,rl.setOptions,rl.use,rl.walkTokens,rl.parseInline,el.parse,Gi.lex;const al=n.p+"static/media/MetricsQL.a00044c91d9781cf8557.md",ol=e=>{const t='$1 target="_blank" class="'.concat("vm-link vm-link_colored",'" $2').concat("https://docs.victoriametrics.com/MetricsQL.html","#");return e.replace(/({var n;const r="h3"===e.tagName.toLowerCase();return t=r?null!==(n=e.textContent)&&void 0!==n?n:"":t,r?null:((e,t)=>{var n;const r=null!==(n=t.textContent)&&void 0!==n?n:"",a=(e=>{const t=[];let n=e.nextElementSibling;for(;n&&"p"===n.tagName.toLowerCase();)n&&t.push(n),n=n.nextElementSibling;return t})(t).map((e=>{var t;return null!==(t=e.outerHTML)&&void 0!==t?t:""})).join("\n");return{type:e,value:r,description:ol(a),icon:Nt(gr,{})}})(t,e)})).filter(Boolean)},ll=()=>{const{metricsQLFunctions:e}=Cn(),t=En();return(0,r.useEffect)((()=>{e.length||(async()=>{try{const e=await fetch(al),n=(e=>{const t=document.createElement("div");t.innerHTML=rl(e);const n=t.querySelectorAll("".concat("h3",", ").concat("h4"));return il(n)})(await e.text());t({type:"SET_METRICSQL_FUNCTIONS",payload:n})}catch(Lp){console.error("Error fetching or processing the MetricsQL.md file:",Lp)}})()}),[]),e},sl=e=>{let{value:t,anchorEl:n,caretPosition:a,hasHelperText:i,onSelect:l,onFoundOptions:s}=e;const[c,u]=(0,r.useState)({top:0,left:0}),d=ll(),h=(0,r.useMemo)((()=>{if(a[0]!==a[1])return{beforeCursor:t,afterCursor:""};return{beforeCursor:t.substring(0,a[0]),afterCursor:t.substring(a[1])}}),[t,a]),m=(0,r.useMemo)((()=>{const e=h.beforeCursor.split(/\s(or|and|unless|default|ifnot|if|group_left|group_right)\s|}|\+|\|-|\*|\/|\^/i);return e[e.length-1]}),[h]),p=(0,r.useMemo)((()=>{const e=[...m.matchAll(/\w+\((?[^)]+)\)\s+(by|without|on|ignoring)\s*\(\w*/gi)];if(e.length>0&&e[0].groups&&e[0].groups.metricName)return e[0].groups.metricName;const t=[...m.matchAll(/^\s*\b(?[^{}(),\s]+)(?={|$)/g)];return t.length>0&&t[0].groups&&t[0].groups.metricName?t[0].groups.metricName:""}),[m]),f=(0,r.useMemo)((()=>{const e=m.match(/[a-z_:-][\w\-.:/]*\b(?=\s*(=|!=|=~|!~))/g);return e?e[e.length-1]:""}),[m]),v=(0,r.useMemo)((()=>{const e=h.beforeCursor.trim(),t=["}",")"].some((t=>e.endsWith(t))),n=!qo(e)&&["`","'",'"'].some((t=>e.endsWith(t)));if(!h.beforeCursor||t||n||(e=>{const t=e.split(/\s+/),n=t.length,r=t[n-1],a=t[n-2],o=!r&&qo(e),i=(!r||t.length>1)&&!/([{(),+\-*/^]|\b(?:or|and|unless|default|ifnot|if|group_left|group_right|by|without|on|ignoring)\b)/i.test(a);return o||i})(h.beforeCursor))return vt.empty;const r=/(?:by|without|on|ignoring)\s*\(\s*[^)]*$|\{[^}]*$/i,a="(".concat(Uo(p),")?{?.+").concat(Uo(f),'(=|!=|=~|!~)"?([^"]*)$');switch(!0){case new RegExp(a,"g").test(h.beforeCursor):return vt.labelValue;case r.test(h.beforeCursor):return vt.label;default:return vt.metricsql}}),[h,p,f]),g=(0,r.useMemo)((()=>{const e=h.beforeCursor.match(/([\w_.:]+(?![},]))$/);return e?e[0]:""}),[h.beforeCursor]),{metrics:y,labels:_,labelValues:b,loading:w}=(e=>{let{valueByContext:t,metric:n,label:a,context:i}=e;const{serverUrl:l}=Mt(),{period:{start:s,end:c}}=fn(),{autocompleteCache:u}=Cn(),d=En(),[h,m]=(0,r.useState)(!1),[p,f]=(0,r.useState)(t),v=$o()(f,500);(0,r.useEffect)((()=>(v(t),v.cancel)),[t,v]);const[g,y]=(0,r.useState)([]),[_,b]=(0,r.useState)([]),[w,k]=(0,r.useState)([]),x=(0,r.useRef)(new AbortController),S=(0,r.useCallback)((e=>{const t=o()(1e3*s).startOf("day").valueOf()/1e3,n=o()(1e3*c).endOf("day").valueOf()/1e3;return new URLSearchParams({...e||{},limit:"".concat(_n),start:"".concat(t),end:"".concat(n)})}),[s,c]),C=(e,t)=>e.map((e=>({value:e,type:"".concat(t),icon:Wo[t]}))),E=async e=>{let{value:t,urlSuffix:n,setter:r,type:a,params:o}=e;if(!t&&a===Yo.metric)return;x.current.abort(),x.current=new AbortController;const{signal:i}=x.current,s={type:a,value:t,start:(null===o||void 0===o?void 0:o.get("start"))||"",end:(null===o||void 0===o?void 0:o.get("end"))||"",match:(null===o||void 0===o?void 0:o.get("match[]"))||""};m(!0);try{const e=u.get(s);if(e)return r(C(e,a)),void m(!1);const t=await fetch("".concat(l,"/api/v1/").concat(n,"?").concat(o),{signal:i});if(t.ok){const{data:e}=await t.json();r(C(e,a)),d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:e}})}m(!1)}catch(Lp){Lp instanceof Error&&"AbortError"!==Lp.name&&(d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:[]}}),m(!1),console.error(Lp))}};return(0,r.useEffect)((()=>{const e=i!==vt.metricsql&&i!==vt.empty;if(!l||!n||e)return;y([]);const t=Bo(Uo(n));return E({value:p,urlSuffix:"label/__name__/values",setter:y,type:Yo.metric,params:S({"match[]":'{__name__=~".*'.concat(t,'.*"}')})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,p,i,n]),(0,r.useEffect)((()=>{if(!l||i!==vt.label)return;b([]);const e=Bo(n);return E({value:p,urlSuffix:"labels",setter:b,type:Yo.label,params:S(n?{"match[]":'{__name__="'.concat(e,'"}')}:void 0)}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,p,i,n]),(0,r.useEffect)((()=>{if(!l||!a||i!==vt.labelValue)return;k([]);const e=Bo(n),t=Bo(Uo(p)),r=[n?'__name__="'.concat(e,'"'):"","".concat(a,'=~".*').concat(t,'.*"')].filter(Boolean).join(",");return E({value:p,urlSuffix:"label/".concat(a,"/values"),setter:k,type:Yo.labelValue,params:S({"match[]":"{".concat(r,"}")})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,p,i,n,a]),{metrics:g,labels:_,labelValues:w,loading:h}})({valueByContext:g,metric:p,label:f,context:v}),k=(0,r.useMemo)((()=>{switch(v){case vt.metricsql:return[...y,...d];case vt.label:return _;case vt.labelValue:return b;default:return[]}}),[v,y,_,b]),x=(0,r.useCallback)((e=>{const t=h.beforeCursor;let n=h.afterCursor;const r=t.lastIndexOf(g,a[0]),o=r+g.length,i=t.substring(0,r),s=t.substring(o);if(v===vt.labelValue){const t='"';n=n.replace(/^[^\s"|},]*/,"");const r=/(?:=|!=|=~|!~)$/.test(i),a='"'!==n.trim()[0];e="".concat(r?t:"").concat(e).concat(a?t:"")}v===vt.label&&(n=n.replace(/^[^\s=!,{}()"|+\-/*^]*/,"")),v===vt.metricsql&&(n=n.replace(/^[^\s[\]{}()"|+\-/*^]*/,""));const c="".concat(i).concat(e).concat(s).concat(n);l(c,i.length+e.length)}),[h]);return(0,r.useEffect)((()=>{if(!n.current)return void u({top:0,left:0});const e=n.current.querySelector("textarea")||n.current,t=window.getComputedStyle(e),r="".concat(t.getPropertyValue("font-size")),a="".concat(t.getPropertyValue("font-family")),o=parseInt("".concat(t.getPropertyValue("line-height"))),l=document.createElement("div");l.style.font="".concat(r," ").concat(a),l.style.padding=t.getPropertyValue("padding"),l.style.lineHeight="".concat(o,"px"),l.style.width="".concat(e.offsetWidth,"px"),l.style.maxWidth="".concat(e.offsetWidth,"px"),l.style.whiteSpace=t.getPropertyValue("white-space"),l.style.overflowWrap=t.getPropertyValue("overflow-wrap");const s=document.createElement("span");l.appendChild(document.createTextNode(h.beforeCursor)),l.appendChild(s),l.appendChild(document.createTextNode(h.afterCursor)),document.body.appendChild(l);const c=l.getBoundingClientRect(),d=s.getBoundingClientRect(),m=d.left-c.left,p=d.bottom-c.bottom-(i?o:0);u({top:p,left:m}),l.remove(),s.remove()}),[n,a,i]),Nt(Ct.FK,{children:Nt(Ho,{loading:w,disabledFullScreen:!0,value:g,options:k,anchor:n,minLength:0,offset:c,onSelect:x,onFoundOptions:s,maxDisplayResults:{limit:yn,message:"Please, specify the query more precisely."}})})},cl="No match! \nThis query hasn't selected any time series from database.\nEither the requested metrics are missing in the database,\nor there is a typo in series selector.",ul="The shown results are marked as PARTIAL.\nThe result is marked as partial if one or more vmstorage nodes failed to respond to the query.",dl=e=>{let{value:t,onChange:n,onEnter:a,onArrowUp:o,onArrowDown:i,autocomplete:l,error:s,stats:c,label:u,disabled:d=!1}=e;const{autocompleteQuick:h}=Cn(),{isMobile:m}=ea(),[p,f]=(0,r.useState)(!1),[v,g]=(0,r.useState)([0,0]),y=(0,r.useRef)(null),[_,b]=(0,r.useState)(l),w=(0,r.useRef)($o()(b,500)).current,k=[{show:"0"===(null===c||void 0===c?void 0:c.seriesFetched)&&!c.resultLength,text:cl},{show:null===c||void 0===c?void 0:c.isPartial,text:ul}].filter((e=>e.show)).map((e=>e.text)).join("");c&&(u="".concat(u," (").concat(c.executionTimeMsec||0,"ms)"));return(0,r.useEffect)((()=>{f(l)}),[h]),(0,r.useEffect)((()=>{b(!1),w(!0)}),[v]),Nt("div",{className:"vm-query-editor",ref:y,children:[Nt(Ya,{value:t,label:u,type:"textarea",autofocus:!m,error:s,warning:k,onKeyDown:e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:l}=e,s=(e.target.value||"").split("\n").length>1,c=n||r,u="ArrowDown"===t,d="Enter"===t;"ArrowUp"===t&&c&&(e.preventDefault(),o()),u&&c&&(e.preventDefault(),i()),d&&p&&e.preventDefault(),!d||l||s&&!c||p||(e.preventDefault(),a())},onChange:n,onChangeCaret:e=>{g((t=>t[0]===e[0]&&t[1]===e[1]?t:e))},disabled:d,inputmode:"search",caretPosition:v}),_&&l&&Nt(sl,{value:t,anchorEl:y,caretPosition:v,hasHelperText:Boolean(k||s),onSelect:(e,t)=>{n(e),g([t,t])},onFoundOptions:e=>{f(!!e.length)}})]})},hl=e=>{let{isMobile:t,hideButtons:n}=e;const{autocomplete:r}=Cn(),a=En(),{nocache:o,isTracingEnabled:i}=Fr(),l=jr();return Ar("keydown",(e=>{const{code:t,ctrlKey:n,altKey:r}=e;"Space"===t&&(n||r)&&(e.preventDefault(),a({type:"SET_AUTOCOMPLETE_QUICK",payload:!0}))})),Nt("div",{className:Cr()({"vm-additional-settings":!0,"vm-additional-settings_mobile":t}),children:[!(null!==n&&void 0!==n&&n.autocomplete)&&Nt(ya,{title:Nt(Ct.FK,{children:["Quick tip: ",Ca]}),children:Nt(Mo,{label:"Autocomplete",value:r,onChange:()=>{a({type:"TOGGLE_AUTOCOMPLETE"})},fullWidth:t})}),Nt(Mo,{label:"Disable cache",value:o,onChange:()=>{l({type:"TOGGLE_NO_CACHE"})},fullWidth:t}),!(null!==n&&void 0!==n&&n.traceQuery)&&Nt(Mo,{label:"Trace query",value:i,onChange:()=>{l({type:"TOGGLE_QUERY_TRACING"})},fullWidth:t})]})},ml=e=>{const{isMobile:t}=ea(),n=(0,r.useRef)(null),{value:a,toggle:o,setFalse:i}=ca(!1);return t?Nt(Ct.FK,{children:[Nt("div",{ref:n,children:Nt(la,{variant:"outlined",startIcon:Nt(dr,{}),onClick:o,ariaLabel:"additional the query settings"})}),Nt(sa,{open:a,buttonRef:n,placement:"bottom-left",onClose:i,title:"Query settings",children:Nt(hl,{isMobile:t,...e})})]}):Nt(hl,{...e})},pl=(e,t)=>e.length===t.length&&e.every(((e,n)=>e===t[n]));const fl=()=>{const{showInfoMessage:e}=(0,r.useContext)(ra);return async(t,n)=>{var r;if(null===(r=navigator)||void 0===r||!r.clipboard)return e({text:"Clipboard not supported",type:"error"}),console.warn("Clipboard not supported"),!1;try{return await navigator.clipboard.writeText(t),n&&e({text:n,type:"success"}),!0}catch(a){return a instanceof Error&&e({text:"".concat(a.name,": ").concat(a.message),type:"error"}),console.warn("Copy failed",a),!1}}},vl=e=>{let{query:t,favorites:n,onRun:a,onToggleFavorite:o}=e;const i=fl(),l=(0,r.useMemo)((()=>n.includes(t)),[t,n]);return Nt("div",{className:"vm-query-history-item",children:[Nt("span",{className:"vm-query-history-item__value",children:t}),Nt("div",{className:"vm-query-history-item__buttons",children:[Nt(ya,{title:"Execute query",children:Nt(la,{size:"small",variant:"text",onClick:()=>{a(t)},startIcon:Nt(Yn,{})})}),Nt(ya,{title:"Copy query",children:Nt(la,{size:"small",variant:"text",onClick:async()=>{await i(t,"Query has been copied")},startIcon:Nt(rr,{})})}),Nt(ya,{title:l?"Remove Favorite":"Add to Favorites",children:Nt(la,{size:"small",variant:"text",color:l?"warning":"primary",onClick:()=>{o(t,l)},startIcon:Nt(l?fr:pr,{})})})]})]})},gl="saved",yl="favorite",_l=[{label:"Session history",value:"session"},{label:"Saved history",value:gl},{label:"Favorite queries",value:yl}],bl=e=>{let{handleSelectQuery:t}=e;const{queryHistory:n}=Cn(),{isMobile:a}=ea(),{value:o,setTrue:i,setFalse:l}=ca(!1),[s,c]=(0,r.useState)(_l[0].value),[u,d]=(0,r.useState)(gn("QUERY_HISTORY")),[h,m]=(0,r.useState)(gn("QUERY_FAVORITES")),p=(0,r.useMemo)((()=>n.map((e=>e.values.filter((e=>e)).reverse()))),[n]),f=(0,r.useMemo)((()=>{switch(s){case yl:return h;case gl:return u;default:return p}}),[s,h,u,p]),v=null===f||void 0===f?void 0:f.every((e=>!e.length)),g=(0,r.useMemo)((()=>s===yl?"Favorites queries are empty.\nTo see your favorites, mark a query as a favorite.":"Query history is empty.\nTo see the history, please make a query."),[s]),y=e=>n=>{t(n,e),l()},_=(e,t)=>{m((n=>{const r=n[0]||[];return t?[r.filter((t=>t!==e))]:t||r.includes(e)?n:[[...r,e]]}))};return(0,r.useEffect)((()=>{const e=h[0]||[],t=gn("QUERY_FAVORITES")[0]||[];pl(e,t)||Xe("QUERY_FAVORITES",JSON.stringify(h))}),[h]),Ar("storage",(()=>{d(gn("QUERY_HISTORY")),m(gn("QUERY_FAVORITES"))})),Nt(Ct.FK,{children:[Nt(ya,{title:"Show history",children:Nt(la,{color:"primary",variant:"text",onClick:i,startIcon:Nt(Vn,{}),ariaLabel:"Show history"})}),o&&Nt(ga,{title:"Query history",onClose:l,children:Nt("div",{className:Cr()({"vm-query-history":!0,"vm-query-history_mobile":a}),children:[Nt("div",{className:Cr()({"vm-query-history__tabs":!0,"vm-section-header__tabs":!0,"vm-query-history__tabs_mobile":a}),children:Nt(Tr,{activeItem:s,items:_l,onChange:c})}),Nt("div",{className:"vm-query-history-list",children:[v&&Nt("div",{className:"vm-query-history-list__no-data",children:g}),f.map(((e,t)=>Nt("div",{children:[f.length>1&&Nt("div",{className:Cr()({"vm-query-history-list__group-title":!0,"vm-query-history-list__group-title_first":0===t}),children:["Query ",t+1]}),e.map(((e,n)=>Nt(vl,{query:e,favorites:h.flat(),onRun:y(t),onToggleFavorite:_},n)))]},t))),s===gl&&!v&&Nt("div",{className:"vm-query-history-footer",children:Nt(la,{color:"error",variant:"outlined",size:"small",startIcon:Nt(Zn,{}),onClick:()=>{Xe("QUERY_HISTORY","")},children:"clear history"})})]})]})})]})},wl=e=>{let{containerStyles:t,message:n}=e;const{isDarkTheme:r}=Mt();return Nt("div",{className:Cr()({"vm-spinner":!0,"vm-spinner_dark":r}),style:t,children:[Nt("div",{className:"half-circle-spinner",children:[Nt("div",{className:"circle circle-1"}),Nt("div",{className:"circle circle-2"})]}),n&&Nt("div",{className:"vm-spinner__message",children:n})]})},kl=()=>{const{serverUrl:e}=Mt(),{isMobile:t}=ea(),{value:n,setTrue:a,setFalse:o}=ca(!1),{query:i}=Cn(),{period:l}=fn(),[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[p,f]=(0,r.useState)("");return Nt(Ct.FK,{children:[Nt(la,{color:"secondary",variant:"outlined",onClick:()=>(a(),f(""),URL.revokeObjectURL(h),d(""),m(""),(async()=>{c(!0);try{const t=encodeURIComponent(i[0]||""),n=encodeURIComponent(l.step||Zt(l.end-l.start,!1)),r="".concat(e,"/api/vmanomaly/config.yaml?query=").concat(t,"&step=").concat(n),a=await fetch(r),o=a.headers.get("Content-Type");if(a.ok)if("application/yaml"==o){const e=await a.blob(),t=await e.text();d(t),m(URL.createObjectURL(e))}else f("Response Content-Type is not YAML, does `Server URL` point to VMAnomaly server?");else{const e=await a.text();f(" ".concat(a.status," ").concat(a.statusText,": ").concat(e))}}catch(p){console.error(p),f(String(p))}c(!1)})()),children:"Open Config"}),n&&Nt(ga,{title:"Download config",onClose:o,children:Nt("div",{className:Cr()({"vm-anomaly-config":!0,"vm-anomaly-config_mobile":t}),children:[s&&Nt(wl,{containerStyles:{position:"relative"},message:"Loading config..."}),!s&&p&&Nt("div",{className:"vm-anomaly-config-error",children:[Nt("div",{className:"vm-anomaly-config-error__icon",children:Nt(Dn,{})}),Nt("h3",{className:"vm-anomaly-config-error__title",children:"Cannot download config"}),Nt("p",{className:"vm-anomaly-config-error__text",children:p})]}),!s&&u&&Nt(Ya,{value:u,label:"config.yaml",type:"textarea",disabled:!0}),Nt("div",{className:"vm-anomaly-config-footer",children:h&&Nt("a",{href:h,download:"config.yaml",children:Nt(la,{variant:"contained",startIcon:Nt(br,{}),children:"download"})})})]})})]})},xl=e=>{let{queryErrors:t,setQueryErrors:n,setHideError:a,stats:o,onHideQuery:i,onRunQuery:l,hideButtons:s}=e;const{isMobile:c}=ea(),{query:u,queryHistory:d,autocomplete:h,autocompleteQuick:m}=Cn(),p=En(),f=vn(),[v,g]=(0,r.useState)(u||[]),[y,_]=(0,r.useState)([]),[b,w]=(0,r.useState)(!1),k=Ka(v),x=(()=>{const{serverUrl:e}=Mt();return async t=>{try{const n=encodeURIComponent(t),r="".concat(e,"/prettify-query?query=").concat(n),a=await fetch(r);if(200!=a.status)return{query:t,error:"Error requesting /prettify-query, status: "+a.status};const o=await a.json();return"success"!=o.status?{query:t,error:String(o.msg)}:{query:String(o.query),error:""}}catch(Lp){return console.error(Lp),Lp instanceof Error&&"AbortError"!==Lp.name?{query:t,error:"".concat(Lp.name,": ").concat(Lp.message)}:{query:t,error:String(Lp)}}}})(),S=()=>{p({type:"SET_QUERY_HISTORY",payload:v.map(((e,t)=>{const n=d[t]||{values:[]},r=e===n.values[n.values.length-1],a=!r&&e?[...n.values,e]:n.values;return a.length>25&&a.shift(),{index:n.values.length-Number(r),values:a}}))}),p({type:"SET_QUERY",payload:v}),f({type:"RUN_QUERY"}),l()},C=(e,t)=>{g((n=>n.map(((n,r)=>r===t?e:n))))},E=(e,t)=>()=>{((e,t)=>{const{index:n,values:r}=d[t],a=n+e;a<0||a>=r.length||(C(r[a]||"",t),p({type:"SET_QUERY_HISTORY_BY_INDEX",payload:{value:{values:r,index:a},queryNumber:t}}))})(e,t)},N=e=>t=>{C(t,e),p({type:"SET_AUTOCOMPLETE_QUICK",payload:!1})},A=e=>()=>{var t;t=e,g((e=>e.filter(((e,n)=>n!==t)))),_((t=>t.includes(e)?t.filter((t=>t!==e)):t.map((t=>t>e?t-1:t))))},M=e=>t=>{((e,t)=>{const{ctrlKey:n,metaKey:r}=e;if(n||r){const e=v.map(((e,t)=>t)).filter((e=>e!==t));_((t=>pl(e,t)?[]:e))}else _((e=>e.includes(t)?e.filter((e=>e!==t)):[...e,t]))})(t,e)};return(0,r.useEffect)((()=>{k&&v.length{i&&i(y)}),[y]),(0,r.useEffect)((()=>{b&&(S(),w(!1))}),[v,b]),(0,r.useEffect)((()=>{g(u||[])}),[u]),Nt("div",{className:Cr()({"vm-query-configurator":!0,"vm-block":!0,"vm-block_mobile":c}),children:[Nt("div",{className:"vm-query-configurator-list",children:v.map(((e,r)=>Nt("div",{className:Cr()({"vm-query-configurator-list-row":!0,"vm-query-configurator-list-row_disabled":y.includes(r),"vm-query-configurator-list-row_mobile":c}),children:[Nt(dl,{value:v[r],autocomplete:!(null!==s&&void 0!==s&&s.autocomplete)&&(h||m),error:t[r],stats:o[r],onArrowUp:E(-1,r),onArrowDown:E(1,r),onEnter:S,onChange:N(r),label:"Query ".concat(v.length>1?r+1:""),disabled:y.includes(r)}),i&&Nt(ya,{title:y.includes(r)?"Enable query":"Disable query",children:Nt("div",{className:"vm-query-configurator-list-row__button",children:Nt(la,{variant:"text",color:"gray",startIcon:y.includes(r)?Nt(tr,{}):Nt(er,{}),onClick:M(r),ariaLabel:"visibility query"})})}),!(null!==s&&void 0!==s&&s.prettify)&&Nt(ya,{title:"Prettify query",children:Nt("div",{className:"vm-query-configurator-list-row__button",children:Nt(la,{variant:"text",color:"gray",startIcon:Nt(nr,{}),onClick:async()=>await(async e=>{const t=await x(v[e]);a(!1),C(t.query,e),n((n=>(n[e]=t.error,[...n])))})(r),className:"prettify",ariaLabel:"prettify the query"})})}),v.length>1&&Nt(ya,{title:"Remove Query",children:Nt("div",{className:"vm-query-configurator-list-row__button",children:Nt(la,{variant:"text",color:"error",startIcon:Nt(Zn,{}),onClick:A(r),ariaLabel:"remove query"})})})]},r)))}),Nt("div",{className:"vm-query-configurator-settings",children:[Nt(ml,{hideButtons:s}),Nt("div",{className:"vm-query-configurator-settings__buttons",children:[Nt(bl,{handleSelectQuery:(e,t)=>{C(e,t),w(!0)}}),(null===s||void 0===s?void 0:s.anomalyConfig)&&Nt(kl,{}),!(null!==s&&void 0!==s&&s.addQuery)&&v.length<10&&Nt(la,{variant:"outlined",onClick:()=>{g((e=>[...e,""]))},startIcon:Nt(Gn,{}),children:"Add Query"}),Nt(la,{variant:"contained",onClick:S,startIcon:Nt(qn,{}),children:c?"Execute":"Execute Query"})]})]})]})};let Sl=0;class Cl{constructor(e,t){this.tracing=void 0,this.query=void 0,this.tracingChildren=void 0,this.originalTracing=void 0,this.id=void 0,this.tracing=e,this.originalTracing=JSON.parse(JSON.stringify(e)),this.query=t,this.id=Sl++;const n=e.children||[];this.tracingChildren=n.map((e=>new Cl(e,t)))}get queryValue(){return this.query}get idValue(){return this.id}get children(){return this.tracingChildren}get message(){return this.tracing.message}get duration(){return this.tracing.duration_msec}get JSON(){return JSON.stringify(this.tracing,null,2)}get originalJSON(){return JSON.stringify(this.originalTracing,null,2)}setTracing(e){this.tracing=e;const t=e.children||[];this.tracingChildren=t.map((e=>new Cl(e,this.query)))}setQuery(e){this.query=e}resetTracing(){this.tracing=this.originalTracing}}const El=function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const{__name__:r,...a}=e.metric,o=t||"".concat(n?"[Query ".concat(e.group,"] "):"").concat(r||"");return 0==Object.keys(a).length?o||"value":"".concat(o,"{").concat(Object.entries(a).map((e=>"".concat(e[0],"=").concat(JSON.stringify(e[1])))).join(", "),"}")},Nl=e=>{switch(e){case"NaN":return NaN;case"Inf":case"+Inf":return 1/0;case"-Inf":return-1/0;default:return parseFloat(e)}},Al=e=>{if(e.length<2)return!1;const t=["le","vmrange"],n=Object.keys(e[0].metric).filter((e=>!t.includes(e))),r=e.every((r=>{const a=Object.keys(r.metric).filter((e=>!t.includes(e)));return n.length===a.length&&a.every((t=>r.metric[t]===e[0].metric[t]))}));return r&&e.every((e=>t.some((t=>t in e.metric))))},Ml=Ve.anomaly==={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE,Tl=e=>{let{predefinedQuery:t,visible:n,display:a,customStep:o,hideQuery:i,showAllSeries:l}=e;const{query:s}=Cn(),{period:c}=fn(),{displayType:u,nocache:d,isTracingEnabled:h,seriesLimits:m}=Fr(),{serverUrl:p}=Mt(),{isHistogram:f}=Ur(),[v,g]=(0,r.useState)(!1),[y,_]=(0,r.useState)(),[b,w]=(0,r.useState)(),[k,x]=(0,r.useState)(),[S,C]=(0,r.useState)(),[E,N]=(0,r.useState)([]),[A,M]=(0,r.useState)([]),[T,L]=(0,r.useState)(),[I,P]=(0,r.useState)([]),[O,R]=(0,r.useState)(!1),D=(0,r.useMemo)((()=>{const{end:e,start:t}=c;return Zt(e-t,f)}),[c,f]),z=(0,r.useCallback)($o()((async e=>{let{fetchUrl:t,fetchQueue:n,displayType:r,query:a,stateSeriesLimits:o,showAllSeries:i,hideQuery:l}=e;const s=new AbortController;P([...n,s]);try{const e=r===mt.chart,n=i?1/0:+o[r]||1/0;let c=n;const u=[],d=[];let h=1,m=0,p=!1;for await(const r of t){if(null===l||void 0===l?void 0:l.includes(h-1)){N((e=>[...e,""])),M((e=>[...e,{}])),h++;continue}const t=new URL(r),o=await fetch("".concat(t.origin).concat(t.pathname),{signal:s.signal,method:"POST",body:t.searchParams}),i=await o.json();if(o.ok){if(M((e=>[...e,{...null===i||void 0===i?void 0:i.stats,isPartial:null===i||void 0===i?void 0:i.isPartial,resultLength:i.data.result.length}])),N((e=>[...e,""])),i.trace){const e=new Cl(i.trace,a[h-1]);d.push(e)}p=!Ml&&e&&Al(i.data.result),c=p?1/0:n;const t=c-u.length;i.data.result.slice(0,t).forEach((e=>{e.group=h,u.push(e)})),m+=i.data.result.length}else{u.push({metric:{},values:[],group:h});const e=i.errorType||pt.unknownType,t=[e,(null===i||void 0===i?void 0:i.error)||(null===i||void 0===i?void 0:i.message)||"see console for more details"].join(",\r\n");N((e=>[...e,"".concat(t)])),console.error("Fetch query error: ".concat(e),i)}h++}const f="Showing ".concat(u.length," series out of ").concat(m," series due to performance reasons. Please narrow down the query, so it returns less series");L(m>c?f:""),e?_(u):w(u),x(d),R((e=>m?p:e))}catch(Lp){const t=Lp;if("AbortError"===t.name)return;const n="Please check your serverURL settings and confirm server availability.";let r="Error executing query: ".concat(t.message,". ").concat(n);"Unexpected end of JSON input"===t.message&&(r+="\nAdditionally, this error can occur if the server response is too large to process. Apply more specific filters to reduce the data volume."),C(r)}g(!1)}),300),[]),F=(0,r.useMemo)((()=>{C(""),N([]),M([]);const e=null!==t&&void 0!==t?t:s,n=(a||u)===mt.chart;if(c)if(p)if(e.every((e=>!e.trim())))N(e.map((()=>pt.validQuery)));else{if(bt(p)){const t={...c};return t.step=o,e.map((e=>n?((e,t,n,r,a)=>"".concat(e,"/api/v1/query_range?query=").concat(encodeURIComponent(t),"&start=").concat(n.start,"&end=").concat(n.end,"&step=").concat(n.step).concat(r?"&nocache=1":"").concat(a?"&trace=1":""))(p,e,t,d,h):((e,t,n,r,a)=>"".concat(e,"/api/v1/query?query=").concat(encodeURIComponent(t),"&time=").concat(n.end,"&step=").concat(n.step).concat(r?"&nocache=1":"").concat(a?"&trace=1":""))(p,e,t,d,h)))}C(pt.validServer)}else C(pt.emptyServer)}),[p,c,u,o,i]),[j,H]=(0,r.useState)([]);return(0,r.useEffect)((()=>{const e=F===j&&!!t;if(!n||null===F||void 0===F||!F.length||e)return;g(!0);z({fetchUrl:F,fetchQueue:I,displayType:a||u,query:null!==t&&void 0!==t?t:s,stateSeriesLimits:m,showAllSeries:l,hideQuery:i}),H(F)}),[F,n,m,l]),(0,r.useEffect)((()=>{const e=I.slice(0,-1);e.length&&(e.map((e=>e.abort())),P(I.filter((e=>!e.signal.aborted))))}),[I]),(0,r.useEffect)((()=>{D===o&&_([])}),[O]),{fetchUrl:F,isLoading:v,graphData:y,liveData:b,error:S,queryErrors:E,setQueryErrors:N,queryStats:A,warning:T,traces:k,isHistogram:O}},Ll=()=>{const{tenantId:e}=Mt(),{displayType:t}=Fr(),{query:n}=Cn(),{duration:a,relativeTime:o,period:{date:i,step:l}}=fn(),{customStep:s}=Ur(),[c,u]=He(),d=Tt(),h=vn(),m=Br(),p=En(),f=jr(),[v,g]=(0,r.useState)(!1),y=(0,r.useCallback)((()=>{if(v)return void g(!1);const r=new URLSearchParams(c);n.forEach(((n,u)=>{var d;const h="g".concat(u);c.get("".concat(h,".expr"))!==n&&n&&r.set("".concat(h,".expr"),n),c.get("".concat(h,".range_input"))!==a&&r.set("".concat(h,".range_input"),a),c.get("".concat(h,".end_input"))!==i&&r.set("".concat(h,".end_input"),i),c.get("".concat(h,".relative_time"))!==o&&r.set("".concat(h,".relative_time"),o||"none");const m=c.get("".concat(h,".step_input"))||l;m&&m!==s&&r.set("".concat(h,".step_input"),s);const p="".concat((null===(d=Lr.find((e=>e.value===t)))||void 0===d?void 0:d.prometheusCode)||0);c.get("".concat(h,".tab"))!==p&&r.set("".concat(h,".tab"),"".concat(p)),c.get("".concat(h,".tenantID"))!==e&&e&&r.set("".concat(h,".tenantID"),e)})),!((e,t)=>{if(Array.from(e.entries()).length!==Array.from(t.entries()).length)return!1;for(const[n,r]of e)if(t.get(n)!==r)return!1;return!0})(r,c)&&r.size&&u(r)}),[e,t,n,a,o,i,l,s]);(0,r.useEffect)((()=>{const e=setTimeout(y,200);return()=>clearTimeout(e)}),[y]),(0,r.useEffect)((()=>{if(!v)return;const r=dn(),u=r.duration!==a,g=r.relativeTime!==o,y="none"===r.relativeTime&&r.period.date!==i;(u||g||y)&&h({type:"SET_TIME_STATE",payload:r});const _=Pr();_!==t&&f({type:"SET_DISPLAY_TYPE",payload:_});const b=c.get("g0.tenantID")||"";b!==e&&d({type:"SET_TENANT_ID",payload:b});const w=dt();pl(w,n)||(p({type:"SET_QUERY",payload:w}),h({type:"RUN_QUERY"}));const k=setTimeout((()=>{const e=c.get("g0.step_input")||l;e&&e!==s&&m({type:"SET_CUSTOM_STEP",payload:e})}),50);return()=>clearTimeout(k)}),[c,v]),Ar("popstate",(()=>{g(!0)}))},Il=e=>{let{text:t,href:n,children:r,colored:a=!0,underlined:o=!1,withIcon:i=!1}=e;return Nt("a",{href:n,className:Cr()({"vm-link":!0,"vm-link_colored":a,"vm-link_underlined":o,"vm-link_with-icon":i}),target:"_blank",rel:"noreferrer",children:t||r})},Pl=Nt(Il,{text:"last_over_time",href:"https://docs.victoriametrics.com/MetricsQL.html#last_over_time",underlined:!0}),Ol=Nt(Il,{text:"instant query",href:"https://docs.victoriametrics.com/keyConcepts.html#instant-query",underlined:!0}),Rl=()=>Nt("div",{children:[Nt("p",{children:["This tab shows ",Ol," results for the last 5 minutes ending at the selected time range."]}),Nt("p",{children:["Please wrap the query into ",Pl," if you need results over arbitrary lookbehind interval."]})]}),Dl=e=>{let{value:t}=e;return Nt("div",{className:"vm-line-progress",children:[Nt("div",{className:"vm-line-progress-track",children:Nt("div",{className:"vm-line-progress-track__thumb",style:{width:"".concat(t,"%")}})}),Nt("span",{children:[t.toFixed(2),"%"]})]})},zl=e=>{let{isRoot:t,trace:n,totalMsec:a,isExpandedAll:o}=e;const{isDarkTheme:i}=Mt(),{isMobile:l}=ea(),[s,c]=(0,r.useState)({}),u=(0,r.useRef)(null),[d,h]=(0,r.useState)(!1),[m,p]=(0,r.useState)(!1),f=Yt(n.duration/1e3)||"".concat(n.duration,"ms");(0,r.useEffect)((()=>{if(!u.current)return;const e=u.current,t=u.current.children[0],{height:n}=t.getBoundingClientRect();h(n>e.clientHeight)}),[n]);const v=n.children&&!!n.children.length,g=n.duration/a*100,y=e=>{var t;const n=[e.idValue];return null===e||void 0===e||null===(t=e.children)||void 0===t||t.forEach((e=>{n.push(...y(e))})),n};return(0,r.useEffect)((()=>{if(!o)return void c([]);const e=y(n),t={};e.forEach((e=>{t[e]=!0})),c(t)}),[o]),Nt("div",{className:Cr()({"vm-nested-nav":!0,"vm-nested-nav_root":t,"vm-nested-nav_dark":i,"vm-nested-nav_mobile":l}),children:[Nt("div",{className:Cr()({"vm-nested-nav-header":!0,"vm-nested-nav-header_open":s[n.idValue]}),onClick:(_=n.idValue,()=>{v&&c((e=>({...e,[_]:!e[_]})))}),children:[v&&Nt("div",{className:Cr()({"vm-nested-nav-header__icon":!0,"vm-nested-nav-header__icon_open":s[n.idValue]}),children:Nt(jn,{})}),Nt("div",{className:"vm-nested-nav-header__progress",children:Nt(Dl,{value:g})}),Nt("div",{className:Cr()({"vm-nested-nav-header__message":!0,"vm-nested-nav-header__message_show-full":m}),ref:u,children:[Nt("span",{className:"vm-nested-nav-header__message_duration",children:f}),":\xa0",Nt("span",{children:n.message})]}),Nt("div",{className:"vm-nested-nav-header-bottom",children:(d||m)&&Nt(la,{variant:"text",size:"small",onClick:e=>{e.stopPropagation(),p((e=>!e))},children:m?"Hide":"Show full query"})})]}),s[n.idValue]&&Nt("div",{className:"vm-nested-nav__childrens",children:v&&n.children.map((e=>Nt(zl,{trace:e,totalMsec:a,isExpandedAll:o},e.duration)))})]});var _},Fl=zl,jl=e=>{let{editable:t=!1,defaultTile:n="JSON",displayTitle:a=!0,defaultJson:o="",resetValue:i="",onClose:l,onUpload:s}=e;const c=fl(),{isMobile:u}=ea(),[d,h]=(0,r.useState)(o),[m,p]=(0,r.useState)(n),[f,v]=(0,r.useState)(""),[g,y]=(0,r.useState)(""),_=(0,r.useMemo)((()=>{try{const e=JSON.parse(d),t=e.trace||e;return t.duration_msec?(new Cl(t,""),""):pt.traceNotFound}catch(Lp){return Lp instanceof Error?Lp.message:"Unknown error"}}),[d]),b=()=>{y(_);m.trim()||v(pt.emptyTitle),_||f||(s(d,m),l())};return Nt("div",{className:Cr()({"vm-json-form":!0,"vm-json-form_one-field":!a,"vm-json-form_one-field_mobile":!a&&u,"vm-json-form_mobile":u}),children:[a&&Nt(Ya,{value:m,label:"Title",error:f,onEnter:b,onChange:e=>{p(e)}}),Nt(Ya,{value:d,label:"JSON",type:"textarea",error:g,autofocus:!0,onChange:e=>{y(""),h(e)},onEnter:b,disabled:!t}),Nt("div",{className:"vm-json-form-footer",children:[Nt("div",{className:"vm-json-form-footer__controls",children:[Nt(la,{variant:"outlined",startIcon:Nt(rr,{}),onClick:async()=>{await c(d,"Formatted JSON has been copied")},children:"Copy JSON"}),i&&Nt(la,{variant:"text",startIcon:Nt(Pn,{}),onClick:()=>{h(i)},children:"Reset JSON"})]}),Nt("div",{className:"vm-json-form-footer__controls vm-json-form-footer__controls_right",children:[Nt(la,{variant:"outlined",color:"error",onClick:l,children:"Cancel"}),Nt(la,{variant:"contained",onClick:b,children:"apply"})]})]})]})},Hl=e=>{let{traces:t,jsonEditor:n=!1,onDeleteClick:a}=e;const{isMobile:o}=ea(),[i,l]=(0,r.useState)(null),[s,c]=(0,r.useState)([]),u=()=>{l(null)};if(!t.length)return Nt(na,{variant:"info",children:"Please re-run the query to see results of the tracing"});const d=e=>()=>{a(e)},h=e=>()=>{l(e)},m=e=>()=>{const t=new Blob([e.originalJSON],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download="vmui_trace_".concat(e.queryValue,".json"),document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)};return Nt(Ct.FK,{children:[Nt("div",{className:"vm-tracings-view",children:t.map((e=>{return Nt("div",{className:"vm-tracings-view-trace vm-block vm-block_empty-padding",children:[Nt("div",{className:"vm-tracings-view-trace-header",children:[Nt("h3",{className:"vm-tracings-view-trace-header-title",children:["Trace for ",Nt("b",{className:"vm-tracings-view-trace-header-title__query",children:e.queryValue})]}),Nt(ya,{title:s.includes(e.idValue)?"Collapse All":"Expand All",children:Nt(la,{variant:"text",startIcon:s.includes(e.idValue)?Nt(kr,{}):Nt(wr,{}),onClick:(t=e,()=>{c((e=>e.includes(t.idValue)?e.filter((e=>e!==t.idValue)):[...e,t.idValue]))}),ariaLabel:s.includes(e.idValue)?"Collapse All":"Expand All"})}),Nt(ya,{title:"Save Trace to JSON",children:Nt(la,{variant:"text",startIcon:Nt(br,{}),onClick:m(e),ariaLabel:"Save trace to JSON"})}),Nt(ya,{title:"Open JSON",children:Nt(la,{variant:"text",startIcon:Nt(Qn,{}),onClick:h(e),ariaLabel:"open JSON"})}),Nt(ya,{title:"Remove trace",children:Nt(la,{variant:"text",color:"error",startIcon:Nt(Zn,{}),onClick:d(e),ariaLabel:"remove trace"})})]}),Nt("nav",{className:Cr()({"vm-tracings-view-trace__nav":!0,"vm-tracings-view-trace__nav_mobile":o}),children:Nt(Fl,{isRoot:!0,trace:e,totalMsec:e.duration,isExpandedAll:s.includes(e.idValue)})})]},e.idValue);var t}))}),i&&Nt(ga,{title:i.queryValue,onClose:u,children:Nt(jl,{editable:n,displayTitle:n,defaultTile:i.queryValue,defaultJson:i.JSON,resetValue:i.originalJSON,onClose:u,onUpload:(e,t)=>{if(n&&i)try{i.setTracing(JSON.parse(e)),i.setQuery(t),l(null)}catch(Lp){console.error(Lp)}}})})]})},Vl=e=>{let{traces:t,displayType:n}=e;const{isTracingEnabled:a}=Fr(),[o,i]=(0,r.useState)([]);return(0,r.useEffect)((()=>{t&&i([...o,...t])}),[t]),(0,r.useEffect)((()=>{i([])}),[n]),Nt(Ct.FK,{children:a&&Nt("div",{className:"vm-custom-panel__trace",children:Nt(Hl,{traces:o,onDeleteClick:e=>{const t=o.filter((t=>t.idValue!==e.idValue));i([...t])}})})})},$l=e=>{let{warning:t,query:n,onChange:a}=e;const{isMobile:o}=ea(),{value:i,setTrue:l,setFalse:s}=ca(!1);return(0,r.useEffect)(s,[n]),(0,r.useEffect)((()=>{a(i)}),[i]),Nt(na,{variant:"warning",children:Nt("div",{className:Cr()({"vm-custom-panel__warning":!0,"vm-custom-panel__warning_mobile":o}),children:[Nt("p",{children:t}),Nt(la,{color:"warning",variant:"outlined",onClick:l,children:"Show all"})]})})},Ul="u-off",Bl="u-label",ql="width",Yl="height",Wl="top",Kl="bottom",Ql="left",Zl="right",Gl="#000",Jl=Gl+"0",Xl="mousemove",es="mousedown",ts="mouseup",ns="mouseenter",rs="mouseleave",as="dblclick",os="change",is="dppxchange",ls="--",ss="undefined"!=typeof window,cs=ss?document:null,us=ss?window:null,ds=ss?navigator:null;let hs,ms;function ps(e,t){if(null!=t){let n=e.classList;!n.contains(t)&&n.add(t)}}function fs(e,t){let n=e.classList;n.contains(t)&&n.remove(t)}function vs(e,t,n){e.style[t]=n+"px"}function gs(e,t,n,r){let a=cs.createElement(e);return null!=t&&ps(a,t),null!=n&&n.insertBefore(a,r),a}function ys(e,t){return gs("div",e,t)}const _s=new WeakMap;function bs(e,t,n,r,a){let o="translate("+t+"px,"+n+"px)";o!=_s.get(e)&&(e.style.transform=o,_s.set(e,o),t<0||n<0||t>r||n>a?ps(e,Ul):fs(e,Ul))}const ws=new WeakMap;function ks(e,t,n){let r=t+n;r!=ws.get(e)&&(ws.set(e,r),e.style.background=t,e.style.borderColor=n)}const xs=new WeakMap;function Ss(e,t,n,r){let a=t+""+n;a!=xs.get(e)&&(xs.set(e,a),e.style.height=n+"px",e.style.width=t+"px",e.style.marginLeft=r?-t/2+"px":0,e.style.marginTop=r?-n/2+"px":0)}const Cs={passive:!0},Es={...Cs,capture:!0};function Ns(e,t,n,r){t.addEventListener(e,n,r?Es:Cs)}function As(e,t,n,r){t.removeEventListener(e,n,r?Es:Cs)}function Ms(e,t,n,r){let a;n=n||0;let o=(r=r||t.length-1)<=2147483647;for(;r-n>1;)a=o?n+r>>1:qs((n+r)/2),t[a]=t&&a<=n;a+=r)if(null!=e[a])return a;return-1}function Ls(e,t,n,r){let a=Gs(e),o=Gs(t);e==t&&(-1==a?(e*=n,t/=n):(e/=n,t*=n));let i=10==n?Js:Xs,l=1==o?Ws:qs,s=(1==a?qs:Ws)(i(Bs(e))),c=l(i(Bs(t))),u=Zs(n,s),d=Zs(n,c);return 10==n&&(s<0&&(u=pc(u,-s)),c<0&&(d=pc(d,-c))),r||2==n?(e=u*a,t=d*o):(e=mc(e,u),t=hc(t,d)),[e,t]}function Is(e,t,n,r){let a=Ls(e,t,n,r);return 0==e&&(a[0]=0),0==t&&(a[1]=0),a}ss&&function e(){let t=devicePixelRatio;hs!=t&&(hs=t,ms&&As(os,ms,e),ms=matchMedia("(min-resolution: ".concat(hs-.001,"dppx) and (max-resolution: ").concat(hs+.001,"dppx)")),Ns(os,ms,e),us.dispatchEvent(new CustomEvent(is)))}();const Ps=.1,Os={mode:3,pad:Ps},Rs={pad:0,soft:null,mode:0},Ds={min:Rs,max:Rs};function zs(e,t,n,r){return Sc(n)?js(e,t,n):(Rs.pad=n,Rs.soft=r?0:null,Rs.mode=r?3:0,js(e,t,Ds))}function Fs(e,t){return null==e?t:e}function js(e,t,n){let r=n.min,a=n.max,o=Fs(r.pad,0),i=Fs(a.pad,0),l=Fs(r.hard,-tc),s=Fs(a.hard,tc),c=Fs(r.soft,tc),u=Fs(a.soft,-tc),d=Fs(r.mode,0),h=Fs(a.mode,0),m=t-e,p=Js(m),f=Qs(Bs(e),Bs(t)),v=Js(f),g=Bs(v-p);(m<1e-9||g>10)&&(m=0,0!=e&&0!=t||(m=1e-9,2==d&&c!=tc&&(o=0),2==h&&u!=-tc&&(i=0)));let y=m||f||1e3,_=Js(y),b=Zs(10,qs(_)),w=pc(mc(e-y*(0==m?0==e?.1:1:o),b/10),9),k=e>=c&&(1==d||3==d&&w<=c||2==d&&w>=c)?c:tc,x=Qs(l,w=k?k:Ks(k,w)),S=pc(hc(t+y*(0==m?0==t?.1:1:i),b/10),9),C=t<=u&&(1==h||3==h&&S>=u||2==h&&S<=u)?u:-tc,E=Ks(s,S>C&&t<=C?C:Qs(C,S));return x==E&&0==x&&(E=100),[x,E]}const Hs=new Intl.NumberFormat(ss?ds.language:"en-US"),Vs=e=>Hs.format(e),$s=Math,Us=$s.PI,Bs=$s.abs,qs=$s.floor,Ys=$s.round,Ws=$s.ceil,Ks=$s.min,Qs=$s.max,Zs=$s.pow,Gs=$s.sign,Js=$s.log10,Xs=$s.log2,ec=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return $s.asinh(e/t)},tc=1/0;function nc(e){return 1+(0|Js((e^e>>31)-(e>>31)))}function rc(e,t,n){return Ks(Qs(e,t),n)}function ac(e){return"function"==typeof e?e:()=>e}const oc=e=>e,ic=(e,t)=>t,lc=e=>null,sc=e=>!0,cc=(e,t)=>e==t,uc=e=>pc(e,14);function dc(e,t){return uc(pc(uc(e/t))*t)}function hc(e,t){return uc(Ws(uc(e/t))*t)}function mc(e,t){return uc(qs(uc(e/t))*t)}function pc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(kc(e))return e;let n=10**t,r=e*n*(1+Number.EPSILON);return Ys(r)/n}const fc=new Map;function vc(e){return((""+e).split(".")[1]||"").length}function gc(e,t,n,r){let a=[],o=r.map(vc);for(let i=t;i=0&&i>=0?0:t)+(i>=o[e]?0:o[e]),c=pc(l,s);a.push(c),fc.set(c,s)}}return a}const yc={},_c=[],bc=[null,null],wc=Array.isArray,kc=Number.isInteger;function xc(e){return"string"==typeof e}function Sc(e){let t=!1;if(null!=e){let n=e.constructor;t=null==n||n==Object}return t}function Cc(e){return null!=e&&"object"==typeof e}const Ec=Object.getPrototypeOf(Uint8Array);function Nc(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Sc;if(wc(e)){let r=e.find((e=>null!=e));if(wc(r)||n(r)){t=Array(e.length);for(let r=0;ro){for(r=i-1;r>=0&&null==e[r];)e[r--]=null;for(r=i+1;rPromise.resolve().then(e):queueMicrotask;const Lc=["January","February","March","April","May","June","July","August","September","October","November","December"],Ic=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function Pc(e){return e.slice(0,3)}const Oc=Ic.map(Pc),Rc=Lc.map(Pc),Dc={MMMM:Lc,MMM:Rc,WWWW:Ic,WWW:Oc};function zc(e){return(e<10?"0":"")+e}const Fc={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+"").slice(2),MMMM:(e,t)=>t.MMMM[e.getMonth()],MMM:(e,t)=>t.MMM[e.getMonth()],MM:e=>zc(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>zc(e.getDate()),D:e=>e.getDate(),WWWW:(e,t)=>t.WWWW[e.getDay()],WWW:(e,t)=>t.WWW[e.getDay()],HH:e=>zc(e.getHours()),H:e=>e.getHours(),h:e=>{let t=e.getHours();return 0==t?12:t>12?t-12:t},AA:e=>e.getHours()>=12?"PM":"AM",aa:e=>e.getHours()>=12?"pm":"am",a:e=>e.getHours()>=12?"p":"a",mm:e=>zc(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>zc(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>{return((t=e.getMilliseconds())<10?"00":t<100?"0":"")+t;var t}};function jc(e,t){t=t||Dc;let n,r=[],a=/\{([a-z]+)\}|[^{]+/gi;for(;n=a.exec(e);)r.push("{"==n[0][0]?Fc[n[1]]:n[0]);return e=>{let n="";for(let a=0;ae%1==0,$c=[1,2,2.5,5],Uc=gc(10,-16,0,$c),Bc=gc(10,0,16,$c),qc=Bc.filter(Vc),Yc=Uc.concat(Bc),Wc="{YYYY}",Kc="\n"+Wc,Qc="{M}/{D}",Zc="\n"+Qc,Gc=Zc+"/{YY}",Jc="{aa}",Xc="{h}:{mm}"+Jc,eu="\n"+Xc,tu=":{ss}",nu=null;function ru(e){let t=1e3*e,n=60*t,r=60*n,a=24*r,o=30*a,i=365*a;return[(1==e?gc(10,0,3,$c).filter(Vc):gc(10,-3,0,$c)).concat([t,5*t,10*t,15*t,30*t,n,5*n,10*n,15*n,30*n,r,2*r,3*r,4*r,6*r,8*r,12*r,a,2*a,3*a,4*a,5*a,6*a,7*a,8*a,9*a,10*a,15*a,o,2*o,3*o,4*o,6*o,i,2*i,5*i,10*i,25*i,50*i,100*i]),[[i,Wc,nu,nu,nu,nu,nu,nu,1],[28*a,"{MMM}",Kc,nu,nu,nu,nu,nu,1],[a,Qc,Kc,nu,nu,nu,nu,nu,1],[r,"{h}"+Jc,Gc,nu,Zc,nu,nu,nu,1],[n,Xc,Gc,nu,Zc,nu,nu,nu,1],[t,tu,Gc+" "+Xc,nu,Zc+" "+Xc,nu,eu,nu,1],[e,tu+".{fff}",Gc+" "+Xc,nu,Zc+" "+Xc,nu,eu,nu,1]],function(t){return(l,s,c,u,d,h)=>{let m=[],p=d>=i,f=d>=o&&d=a?a:d,i=_+(qs(c)-qs(g))+hc(g-_,o);m.push(i);let p=t(i),f=p.getHours()+p.getMinutes()/n+p.getSeconds()/r,v=d/r,y=h/l.axes[s]._space;for(;i=pc(i+d,1==e?0:3),!(i>u);)if(v>1){let e=qs(pc(f+v,6))%24,n=t(i).getHours()-e;n>1&&(n=-1),i-=n*r,f=(f+v)%24,pc((i-m[m.length-1])/d,3)*y>=.7&&m.push(i)}else m.push(i)}return m}}]}const[au,ou,iu]=ru(1),[lu,su,cu]=ru(.001);function uu(e,t){return e.map((e=>e.map(((n,r)=>0==r||8==r||null==n?n:t(1==r||0==e[8]?n:e[1]+n)))))}function du(e,t){return(n,r,a,o,i)=>{let l,s,c,u,d,h,m=t.find((e=>i>=e[0]))||t[t.length-1];return r.map((t=>{let n=e(t),r=n.getFullYear(),a=n.getMonth(),o=n.getDate(),i=n.getHours(),p=n.getMinutes(),f=n.getSeconds(),v=r!=l&&m[2]||a!=s&&m[3]||o!=c&&m[4]||i!=u&&m[5]||p!=d&&m[6]||f!=h&&m[7]||m[1];return l=r,s=a,c=o,u=i,d=p,h=f,v(n)}))}}function hu(e,t,n){return new Date(e,t,n)}function mu(e,t){return t(e)}gc(2,-53,53,[1]);function pu(e,t){return(n,r,a,o)=>null==o?ls:t(e(r))}const fu={show:!0,live:!0,isolate:!1,mount:()=>{},markers:{show:!0,width:2,stroke:function(e,t){let n=e.series[t];return n.width?n.stroke(e,t):n.points.width?n.points.stroke(e,t):null},fill:function(e,t){return e.series[t].fill(e,t)},dash:"solid"},idx:null,idxs:null,values:[]};const vu=[0,0];function gu(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{0==e.button&&(!r||e.target==t)&&n(e)}}function yu(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{(!r||e.target==t)&&n(e)}}const _u={show:!0,x:!0,y:!0,lock:!1,move:function(e,t,n){return vu[0]=t,vu[1]=n,vu},points:{show:function(e,t){let n=e.cursor.points,r=ys(),a=n.size(e,t);vs(r,ql,a),vs(r,Yl,a);let o=a/-2;vs(r,"marginLeft",o),vs(r,"marginTop",o);let i=n.width(e,t,a);return i&&vs(r,"borderWidth",i),r},size:function(e,t){return e.series[t].points.size},width:0,stroke:function(e,t){let n=e.series[t].points;return n._stroke||n._fill},fill:function(e,t){let n=e.series[t].points;return n._fill||n._stroke}},bind:{mousedown:gu,mouseup:gu,click:gu,dblclick:gu,mousemove:yu,mouseleave:yu,mouseenter:yu},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,t)=>{t.stopPropagation(),t.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,t,n,r,a)=>r-a,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},bu={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},wu=Ac({},bu,{filter:ic}),ku=Ac({},wu,{size:10}),xu=Ac({},bu,{show:!1}),Su='12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',Cu="bold "+Su,Eu={show:!0,scale:"x",stroke:Gl,space:50,gap:5,size:50,labelGap:0,labelSize:30,labelFont:Cu,side:2,grid:wu,ticks:ku,border:xu,font:Su,lineGap:1.5,rotate:0},Nu={show:!0,scale:"x",auto:!1,sorted:1,min:tc,max:-tc,idxs:[]};function Au(e,t,n,r,a){return t.map((e=>null==e?"":Vs(e)))}function Mu(e,t,n,r,a,o,i){let l=[],s=fc.get(a)||0;for(let c=n=i?n:pc(hc(n,a),s);c<=r;c=pc(c+a,s))l.push(Object.is(c,-0)?0:c);return l}function Tu(e,t,n,r,a,o,i){const l=[],s=e.scales[e.axes[t].scale].log,c=qs((10==s?Js:Xs)(n));a=Zs(s,c),10==s&&c<0&&(a=pc(a,-c));let u=n;do{l.push(u),u+=a,10==s&&(u=pc(u,fc.get(a))),u>=a*s&&(a=u)}while(u<=r);return l}function Lu(e,t,n,r,a,o,i){let l=e.scales[e.axes[t].scale].asinh,s=r>l?Tu(e,t,Qs(l,n),r,a):[l],c=r>=0&&n<=0?[0]:[];return(n<-l?Tu(e,t,Qs(l,-r),-n,a):[l]).reverse().map((e=>-e)).concat(c,s)}const Iu=/./,Pu=/[12357]/,Ou=/[125]/,Ru=/1/,Du=(e,t,n,r)=>e.map(((e,a)=>4==t&&0==e||a%r==0&&n.test(e.toExponential()[e<0?1:0])?e:null));function zu(e,t,n,r,a){let o=e.axes[n],i=o.scale,l=e.scales[i],s=e.valToPos,c=o._space,u=s(10,i),d=s(9,i)-u>=c?Iu:s(7,i)-u>=c?Pu:s(5,i)-u>=c?Ou:Ru;if(d==Ru){let e=Bs(s(1,i)-u);if(ea,Uu={show:!0,auto:!0,sorted:0,gaps:$u,alpha:1,facets:[Ac({},Vu,{scale:"x"}),Ac({},Vu,{scale:"y"})]},Bu={scale:"y",auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:$u,alpha:1,points:{show:function(e,t){let{scale:n,idxs:r}=e.series[0],a=e._data[0],o=e.valToPos(a[r[0]],n,!0),i=e.valToPos(a[r[1]],n,!0),l=Bs(i-o)/(e.series[t].points.space*hs);return r[1]-r[0]<=l},filter:null},values:null,min:tc,max:-tc,idxs:[],path:null,clip:null};function qu(e,t,n,r,a){return n/10}const Yu={time:!0,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},Wu=Ac({},Yu,{time:!1,ori:1}),Ku={};function Qu(e,t){let n=Ku[e];return n||(n={key:e,plots:[],sub(e){n.plots.push(e)},unsub(e){n.plots=n.plots.filter((t=>t!=e))},pub(e,t,r,a,o,i,l){for(let s=0;s{let f=e.pxRound;const v=l.dir*(0==l.ori?1:-1),g=0==l.ori?ld:sd;let y,_;1==v?(y=n,_=r):(y=r,_=n);let b=f(c(t[y],l,m,d)),w=f(u(i[y],s,p,h)),k=f(c(t[_],l,m,d)),x=f(u(1==o?s.max:s.min,s,p,h)),S=new Path2D(a);return g(S,k,x),g(S,b,x),g(S,b,w),S}))}function td(e,t,n,r,a,o){let i=null;if(e.length>0){i=new Path2D;const l=0==t?cd:ud;let s=n;for(let t=0;tn[0]){let e=n[0]-s;e>0&&l(i,s,r,e,r+o),s=n[1]}}let c=n+a-s,u=10;c>0&&l(i,s,r-u/2,c,r+o+u)}return i}function nd(e,t,n,r,a,o,i){let l=[],s=e.length;for(let c=1==a?n:r;c>=n&&c<=r;c+=a){if(null===t[c]){let u=c,d=c;if(1==a)for(;++c<=r&&null===t[c];)d=c;else for(;--c>=n&&null===t[c];)d=c;let h=o(e[u]),m=d==u?h:o(e[d]),p=u-a;h=i<=0&&p>=0&&p=0&&f>=0&&f=h&&l.push([h,m])}}return l}function rd(e){return 0==e?oc:1==e?Ys:t=>dc(t,e)}function ad(e){let t=0==e?od:id,n=0==e?(e,t,n,r,a,o)=>{e.arcTo(t,n,r,a,o)}:(e,t,n,r,a,o)=>{e.arcTo(n,t,a,r,o)},r=0==e?(e,t,n,r,a)=>{e.rect(t,n,r,a)}:(e,t,n,r,a)=>{e.rect(n,t,a,r)};return function(e,a,o,i,l){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0;0==s&&0==c?r(e,a,o,i,l):(s=Ks(s,i/2,l/2),c=Ks(c,i/2,l/2),t(e,a+s,o),n(e,a+i,o,a+i,o+l,s),n(e,a+i,o+l,a,o+l,c),n(e,a,o+l,a,o,c),n(e,a,o,a+i,o,s),e.closePath())}}const od=(e,t,n)=>{e.moveTo(t,n)},id=(e,t,n)=>{e.moveTo(n,t)},ld=(e,t,n)=>{e.lineTo(t,n)},sd=(e,t,n)=>{e.lineTo(n,t)},cd=ad(0),ud=ad(1),dd=(e,t,n,r,a,o)=>{e.arc(t,n,r,a,o)},hd=(e,t,n,r,a,o)=>{e.arc(n,t,r,a,o)},md=(e,t,n,r,a,o,i)=>{e.bezierCurveTo(t,n,r,a,o,i)},pd=(e,t,n,r,a,o,i)=>{e.bezierCurveTo(n,t,a,r,i,o)};function fd(e){return(e,t,n,r,a)=>Gu(e,t,((t,o,i,l,s,c,u,d,h,m,p)=>{let f,v,{pxRound:g,points:y}=t;0==l.ori?(f=od,v=dd):(f=id,v=hd);const _=pc(y.width*hs,3);let b=(y.size-y.width)/2*hs,w=pc(2*b,3),k=new Path2D,x=new Path2D,{left:S,top:C,width:E,height:N}=e.bbox;cd(x,S-w,C-w,E+2*w,N+2*w);const A=e=>{if(null!=i[e]){let t=g(c(o[e],l,m,d)),n=g(u(i[e],s,p,h));f(k,t+b,n),v(k,t,n,b,0,2*Us)}};if(a)a.forEach(A);else for(let e=n;e<=r;e++)A(e);return{stroke:_>0?k:null,fill:k,clip:x,flags:2|Zu}}))}function vd(e){return(t,n,r,a,o,i)=>{r!=a&&(o!=r&&i!=r&&e(t,n,r),o!=a&&i!=a&&e(t,n,a),e(t,n,i))}}const gd=vd(ld),yd=vd(sd);function _d(e){const t=Fs(null===e||void 0===e?void 0:e.alignGaps,0);return(e,n,r,a)=>Gu(e,n,((o,i,l,s,c,u,d,h,m,p,f)=>{let v,g,y=o.pxRound,_=e=>y(u(e,s,p,h)),b=e=>y(d(e,c,f,m));0==s.ori?(v=ld,g=gd):(v=sd,g=yd);const w=s.dir*(0==s.ori?1:-1),k={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Zu},x=k.stroke;let S,C,E,N=tc,A=-tc,M=_(i[1==w?r:a]),T=Ts(l,r,a,1*w),L=Ts(l,r,a,-1*w),I=_(i[T]),P=_(i[L]),O=!1;for(let e=1==w?r:a;e>=r&&e<=a;e+=w){let t=_(i[e]),n=l[e];t==M?null!=n?(C=b(n),N==tc&&(v(x,t,C),S=C),N=Ks(C,N),A=Qs(C,A)):null===n&&(O=!0):(N!=tc&&(g(x,M,N,A,S,C),E=M),null!=n?(C=b(n),v(x,t,C),N=A=S=C):(N=tc,A=-tc,null===n&&(O=!0)),M=t)}N!=tc&&N!=A&&E!=M&&g(x,M,N,A,S,C);let[R,D]=Ju(e,n);if(null!=o.fill||0!=R){let t=k.fill=new Path2D(x),r=b(o.fillTo(e,n,o.min,o.max,R));v(t,P,r),v(t,I,r)}if(!o.spanGaps){let c=[];O&&c.push(...nd(i,l,r,a,w,_,t)),k.gaps=c=o.gaps(e,n,r,a,c),k.clip=td(c,s.ori,h,m,p,f)}return 0!=D&&(k.band=2==D?[ed(e,n,r,a,x,-1),ed(e,n,r,a,x,1)]:ed(e,n,r,a,x,D)),k}))}function bd(e,t,n,r,a,o){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:tc;if(e.length>1){let l=null;for(let s=0,c=1/0;s0!==r[e]>0?n[e]=0:(n[e]=3*(s[e-1]+s[e])/((2*s[e]+s[e-1])/r[e-1]+(s[e]+2*s[e-1])/r[e]),isFinite(n[e])||(n[e]=0));n[i-1]=r[i-2];for(let c=0;c{Fd.pxRatio=hs})));const Sd=_d(),Cd=fd();function Ed(e,t,n,r){return(r?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map(((e,r)=>Nd(e,r,t,n)))}function Nd(e,t,n,r){return Ac({},0==t?n:r,e)}function Ad(e,t,n){return null==t?bc:[t,n]}const Md=Ad;function Td(e,t,n){return null==t?bc:zs(t,n,Ps,!0)}function Ld(e,t,n,r){return null==t?bc:Ls(t,n,e.scales[r].log,!1)}const Id=Ld;function Pd(e,t,n,r){return null==t?bc:Is(t,n,e.scales[r].log,!1)}const Od=Pd;function Rd(e,t,n,r,a){let o=Qs(nc(e),nc(t)),i=t-e,l=Ms(a/r*i,n);do{let e=n[l],t=r*e/i;if(t>=a&&o+(e<5?fc.get(e):0)<=17)return[e,t]}while(++l(t=Ys((n=+r)*hs))+"px")),t,n]}function zd(e){e.show&&[e.font,e.labelFont].forEach((e=>{let t=pc(e[2]*hs,1);e[0]=e[0].replace(/[0-9.]+px/,t+"px"),e[1]=t}))}function Fd(e,t,n){const r={mode:Fs(e.mode,1)},a=r.mode;function o(e,t){return((3==t.distr?Js(e>0?e:t.clamp(r,e,t.min,t.max,t.key)):4==t.distr?ec(e,t.asinh):e)-t._min)/(t._max-t._min)}function i(e,t,n,r){let a=o(e,t);return r+n*(-1==t.dir?1-a:a)}function l(e,t,n,r){let a=o(e,t);return r+n*(-1==t.dir?a:1-a)}function s(e,t,n,r){return 0==t.ori?i(e,t,n,r):l(e,t,n,r)}r.valToPosH=i,r.valToPosV=l;let c=!1;r.status=0;const u=r.root=ys("uplot");if(null!=e.id&&(u.id=e.id),ps(u,e.class),e.title){ys("u-title",u).textContent=e.title}const d=gs("canvas"),h=r.ctx=d.getContext("2d"),m=ys("u-wrap",u);Ns("click",m,(e=>{if(e.target===f){(Mt!=Ct||Tt!=Et)&&jt.click(r,e)}}),!0);const p=r.under=ys("u-under",m);m.appendChild(d);const f=r.over=ys("u-over",m),v=+Fs((e=Nc(e)).pxAlign,1),g=rd(v);(e.plugins||[]).forEach((t=>{t.opts&&(e=t.opts(r,e)||e)}));const y=e.ms||.001,_=r.series=1==a?Ed(e.series||[],Nu,Bu,!1):(b=e.series||[null],w=Uu,b.map(((e,t)=>0==t?null:Ac({},w,e))));var b,w;const k=r.axes=Ed(e.axes||[],Eu,Hu,!0),x=r.scales={},S=r.bands=e.bands||[];S.forEach((e=>{e.fill=ac(e.fill||null),e.dir=Fs(e.dir,-1)}));const C=2==a?_[1].facets[0].scale:_[0].scale,E={axes:function(){for(let e=0;ett[e])):y,b=2==m.distr?tt[y[1]]-tt[y[0]]:u,w=t.ticks,S=t.border,C=w.show?Ys(w.size*hs):0,E=t._rotate*-Us/180,N=g(t._pos*hs),A=N+(C+v)*c;a=0==i?A:0,n=1==i?A:0,it(t.font[0],l,1==t.align?Ql:2==t.align?Zl:E>0?Ql:E<0?Zl:0==i?"center":3==o?Zl:Ql,E||1==i?"middle":2==o?Wl:Kl);let M=t.font[1]*t.lineGap,T=y.map((e=>g(s(e,m,p,f)))),L=t._values;for(let e=0;e0&&(_.forEach(((e,n)=>{if(n>0&&e.show&&(ct(n,!1),ct(n,!0),null==e._paths)){et!=e.alpha&&(h.globalAlpha=et=e.alpha);let o=2==a?[0,t[n][0].length-1]:function(e){let t=rc($e-1,0,Ve-1),n=rc(Ue+1,0,Ve-1);for(;null==e[t]&&t>0;)t--;for(;null==e[n]&&n{if(t>0&&e.show){et!=e.alpha&&(h.globalAlpha=et=e.alpha),null!=e._paths&&ut(t,!1);{let n=null!=e._paths?e._paths.gaps:null,a=e.points.show(r,t,$e,Ue,n),o=e.points.filter(r,t,a,n);(a||o)&&(e.points._paths=e.points.paths(r,t,$e,Ue,o),ut(t,!0))}1!=et&&(h.globalAlpha=et=1),kn("drawSeries",t)}})))}},N=(e.drawOrder||["axes","series"]).map((e=>E[e]));function A(t){let n=x[t];if(null==n){let r=(e.scales||yc)[t]||yc;if(null!=r.from)A(r.from),x[t]=Ac({},x[r.from],r,{key:t});else{n=x[t]=Ac({},t==C?Yu:Wu,r),n.key=t;let e=n.time,o=n.range,i=wc(o);if((t!=C||2==a&&!e)&&(!i||null!=o[0]&&null!=o[1]||(o={min:null==o[0]?Os:{mode:1,hard:o[0],soft:o[0]},max:null==o[1]?Os:{mode:1,hard:o[1],soft:o[1]}},i=!1),!i&&Sc(o))){let e=o;o=(t,n,r)=>null==n?bc:zs(n,r,e)}n.range=ac(o||(e?Md:t==C?3==n.distr?Id:4==n.distr?Od:Ad:3==n.distr?Ld:4==n.distr?Pd:Td)),n.auto=ac(!i&&n.auto),n.clamp=ac(n.clamp||qu),n._min=n._max=null}}}A("x"),A("y"),1==a&&_.forEach((e=>{A(e.scale)})),k.forEach((e=>{A(e.scale)}));for(let Mn in e.scales)A(Mn);const M=x[C],T=M.distr;let L,I;0==M.ori?(ps(u,"u-hz"),L=i,I=l):(ps(u,"u-vt"),L=l,I=i);const P={};for(let Mn in x){let e=x[Mn];null==e.min&&null==e.max||(P[Mn]={min:e.min,max:e.max},e.min=e.max=null)}const O=e.tzDate||(e=>new Date(Ys(e/y))),R=e.fmtDate||jc,D=1==y?iu(O):cu(O),z=du(O,uu(1==y?ou:su,R)),F=pu(O,mu("{YYYY}-{MM}-{DD} {h}:{mm}{aa}",R)),j=[],H=r.legend=Ac({},fu,e.legend),V=H.show,$=H.markers;let U,B,q;H.idxs=j,$.width=ac($.width),$.dash=ac($.dash),$.stroke=ac($.stroke),$.fill=ac($.fill);let Y,W=[],K=[],Q=!1,Z={};if(H.live){const e=_[1]?_[1].values:null;Q=null!=e,Y=Q?e(r,1,0):{_:0};for(let t in Y)Z[t]=ls}if(V)if(U=gs("table","u-legend",u),q=gs("tbody",null,U),H.mount(r,U),Q){B=gs("thead",null,U,q);let e=gs("tr",null,B);for(var G in gs("th",null,e),Y)gs("th",Bl,e).textContent=G}else ps(U,"u-inline"),H.live&&ps(U,"u-live");const J={show:!0},X={show:!1};const ee=new Map;function te(e,t,n){let a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const o=ee.get(t)||{},i=Ee.bind[e](r,t,n,a);i&&(Ns(e,t,o[e]=i),ee.set(t,o))}function ne(e,t,n){const r=ee.get(t)||{};for(let a in r)null!=e&&a!=e||(As(a,t,r[a]),delete r[a]);null==e&&ee.delete(t)}let re=0,ae=0,oe=0,ie=0,le=0,se=0,ce=le,ue=se,de=oe,he=ie,me=0,pe=0,fe=0,ve=0;r.bbox={};let ge=!1,ye=!1,_e=!1,be=!1,we=!1,ke=!1;function xe(e,t,n){(n||e!=r.width||t!=r.height)&&Se(e,t),yt(!1),_e=!0,ye=!0,Rt()}function Se(e,t){r.width=re=oe=e,r.height=ae=ie=t,le=se=0,function(){let e=!1,t=!1,n=!1,r=!1;k.forEach(((a,o)=>{if(a.show&&a._show){let{side:o,_size:i}=a,l=o%2,s=i+(null!=a.label?a.labelSize:0);s>0&&(l?(oe-=s,3==o?(le+=s,r=!0):n=!0):(ie-=s,0==o?(se+=s,e=!0):t=!0))}})),ze[0]=e,ze[1]=n,ze[2]=t,ze[3]=r,oe-=He[1]+He[3],le+=He[3],ie-=He[2]+He[0],se+=He[0]}(),function(){let e=le+oe,t=se+ie,n=le,r=se;function a(a,o){switch(a){case 1:return e+=o,e-o;case 2:return t+=o,t-o;case 3:return n-=o,n+o;case 0:return r-=o,r+o}}k.forEach(((e,t)=>{if(e.show&&e._show){let t=e.side;e._pos=a(t,e._size),null!=e.label&&(e._lpos=a(t,e.labelSize))}}))}();let n=r.bbox;me=n.left=dc(le*hs,.5),pe=n.top=dc(se*hs,.5),fe=n.width=dc(oe*hs,.5),ve=n.height=dc(ie*hs,.5)}const Ce=3;r.setSize=function(e){let{width:t,height:n}=e;xe(t,n)};const Ee=r.cursor=Ac({},_u,{drag:{y:2==a}},e.cursor);if(null==Ee.dataIdx){var Ne,Ae;let e=Ee.hover,n=e.skip=new Set(null!==(Ne=e.skip)&&void 0!==Ne?Ne:[]);n.add(void 0);let r=e.prox=ac(e.prox),a=null!==(Ae=e.bias)&&void 0!==Ae?Ae:e.bias=0;Ee.dataIdx=(e,o,i,l)=>{var s;if(0==o)return i;let c=i,u=null!==(s=r(e,o,i,l))&&void 0!==s?s:tc,d=u>=0&&u0;)n.has(f[e])||(t=e);if(0==a||1==a)for(e=i;null==r&&e++u&&(c=null)}return c}}const Me=e=>{Ee.event=e};Ee.idxs=j,Ee._lock=!1;let Te=Ee.points;Te.show=ac(Te.show),Te.size=ac(Te.size),Te.stroke=ac(Te.stroke),Te.width=ac(Te.width),Te.fill=ac(Te.fill);const Le=r.focus=Ac({},e.focus||{alpha:.3},Ee.focus),Ie=Le.prox>=0;let Pe=[null],Oe=[null],Re=[null];function De(e,t){if(1==a||t>0){let t=1==a&&x[e.scale].time,n=e.value;e.value=t?xc(n)?pu(O,mu(n,R)):n||F:n||ju,e.label=e.label||(t?"Time":"Value")}if(t>0){e.width=null==e.width?1:e.width,e.paths=e.paths||Sd||lc,e.fillTo=ac(e.fillTo||Xu),e.pxAlign=+Fs(e.pxAlign,v),e.pxRound=rd(e.pxAlign),e.stroke=ac(e.stroke||null),e.fill=ac(e.fill||null),e._stroke=e._fill=e._paths=e._focus=null;let t=pc((3+2*(Qs(1,e.width)||1))*1,3),n=e.points=Ac({},{size:t,width:Qs(1,.2*t),stroke:e.stroke,space:2*t,paths:Cd,_stroke:null,_fill:null},e.points);n.show=ac(n.show),n.filter=ac(n.filter),n.fill=ac(n.fill),n.stroke=ac(n.stroke),n.paths=ac(n.paths),n.pxAlign=e.pxAlign}if(V){let n=function(e,t){if(0==t&&(Q||!H.live||2==a))return bc;let n=[],o=gs("tr","u-series",q,q.childNodes[t]);ps(o,e.class),e.show||ps(o,Ul);let i=gs("th",null,o);if($.show){let e=ys("u-marker",i);if(t>0){let n=$.width(r,t);n&&(e.style.border=n+"px "+$.dash(r,t)+" "+$.stroke(r,t)),e.style.background=$.fill(r,t)}}let l=ys(Bl,i);for(var s in l.textContent=e.label,t>0&&($.show||(l.style.color=e.width>0?$.stroke(r,t):$.fill(r,t)),te("click",i,(t=>{if(Ee._lock)return;Me(t);let n=_.indexOf(e);if((t.ctrlKey||t.metaKey)!=H.isolate){let e=_.some(((e,t)=>t>0&&t!=n&&e.show));_.forEach(((t,r)=>{r>0&&Yt(r,e?r==n?J:X:J,!0,Sn.setSeries)}))}else Yt(n,{show:!e.show},!0,Sn.setSeries)}),!1),Ie&&te(ns,i,(t=>{Ee._lock||(Me(t),Yt(_.indexOf(e),Zt,!0,Sn.setSeries))}),!1)),Y){let e=gs("td","u-value",o);e.textContent="--",n.push(e)}return[o,n]}(e,t);W.splice(t,0,n[0]),K.splice(t,0,n[1]),H.values.push(null)}if(Ee.show){j.splice(t,0,null);let n=function(e,t){if(t>0){let n=Ee.points.show(r,t);if(n)return ps(n,"u-cursor-pt"),ps(n,e.class),bs(n,-10,-10,oe,ie),f.insertBefore(n,Pe[t]),n}}(e,t);null!=n&&(Pe.splice(t,0,n),Oe.splice(t,0,0),Re.splice(t,0,0))}kn("addSeries",t)}r.addSeries=function(e,t){t=null==t?_.length:t,e=1==a?Nd(e,t,Nu,Bu):Nd(e,t,null,Uu),_.splice(t,0,e),De(_[t],t)},r.delSeries=function(e){if(_.splice(e,1),V){H.values.splice(e,1),K.splice(e,1);let t=W.splice(e,1)[0];ne(null,t.firstChild),t.remove()}Ee.show&&(j.splice(e,1),Pe.length>1&&(Pe.splice(e,1)[0].remove(),Oe.splice(e,1),Re.splice(e,1))),kn("delSeries",e)};const ze=[!1,!1,!1,!1];function Fe(e,t,n,r){let[a,o,i,l]=n,s=t%2,c=0;return 0==s&&(l||o)&&(c=0==t&&!a||2==t&&!i?Ys(Eu.size/3):0),1==s&&(a||i)&&(c=1==t&&!o||3==t&&!l?Ys(Hu.size/2):0),c}const je=r.padding=(e.padding||[Fe,Fe,Fe,Fe]).map((e=>ac(Fs(e,Fe)))),He=r._padding=je.map(((e,t)=>e(r,t,ze,0)));let Ve,$e=null,Ue=null;const Be=1==a?_[0].idxs:null;let qe,Ye,We,Ke,Qe,Ze,Ge,Je,Xe,et,tt=null,nt=!1;function rt(e,n){if(t=null==e?[]:e,r.data=r._data=t,2==a){Ve=0;for(let e=1;e<_.length;e++)Ve+=t[e][0].length}else{0==t.length&&(r.data=r._data=t=[[]]),tt=t[0],Ve=tt.length;let e=t;if(2==T){e=t.slice();let n=e[0]=Array(Ve);for(let e=0;e=0,ke=!0,Rt()}}function at(){let e,n;nt=!0,1==a&&(Ve>0?($e=Be[0]=0,Ue=Be[1]=Ve-1,e=t[0][$e],n=t[0][Ue],2==T?(e=$e,n=Ue):e==n&&(3==T?[e,n]=Ls(e,e,M.log,!1):4==T?[e,n]=Is(e,e,M.log,!1):M.time?n=e+Ys(86400/y):[e,n]=zs(e,n,Ps,!0))):($e=Be[0]=e=null,Ue=Be[1]=n=null)),qt(C,e,n)}function ot(e,t,n,r,a,o){var i,l,s,c,u;null!==(i=e)&&void 0!==i||(e=Jl),null!==(l=n)&&void 0!==l||(n=_c),null!==(s=r)&&void 0!==s||(r="butt"),null!==(c=a)&&void 0!==c||(a=Jl),null!==(u=o)&&void 0!==u||(o="round"),e!=qe&&(h.strokeStyle=qe=e),a!=Ye&&(h.fillStyle=Ye=a),t!=We&&(h.lineWidth=We=t),o!=Qe&&(h.lineJoin=Qe=o),r!=Ze&&(h.lineCap=Ze=r),n!=Ke&&h.setLineDash(Ke=n)}function it(e,t,n,r){t!=Ye&&(h.fillStyle=Ye=t),e!=Ge&&(h.font=Ge=e),n!=Je&&(h.textAlign=Je=n),r!=Xe&&(h.textBaseline=Xe=r)}function lt(e,t,n,a){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(a.length>0&&e.auto(r,nt)&&(null==t||null==t.min)){let t=Fs($e,0),r=Fs(Ue,a.length-1),i=null==n.min?3==e.distr?function(e,t,n){let r=tc,a=-tc;for(let o=t;o<=n;o++){let t=e[o];null!=t&&t>0&&(ta&&(a=t))}return[r,a]}(a,t,r):function(e,t,n,r){let a=tc,o=-tc;if(1==r)a=e[t],o=e[n];else if(-1==r)a=e[n],o=e[t];else for(let i=t;i<=n;i++){let t=e[i];null!=t&&(to&&(o=t))}return[a,o]}(a,t,r,o):[n.min,n.max];e.min=Ks(e.min,n.min=i[0]),e.max=Qs(e.max,n.max=i[1])}}r.setData=rt;const st={min:null,max:null};function ct(e,t){let n=t?_[e].points:_[e];n._stroke=n.stroke(r,e),n._fill=n.fill(r,e)}function ut(e,n){let a=n?_[e].points:_[e],{stroke:o,fill:i,clip:l,flags:s,_stroke:c=a._stroke,_fill:u=a._fill,_width:d=a.width}=a._paths;d=pc(d*hs,3);let m=null,p=d%2/2;n&&null==u&&(u=d>0?"#fff":c);let f=1==a.pxAlign&&p>0;if(f&&h.translate(p,p),!n){let e=me-d/2,t=pe-d/2,n=fe+d,r=ve+d;m=new Path2D,m.rect(e,t,n,r)}n?ht(c,d,a.dash,a.cap,u,o,i,s,l):function(e,n,a,o,i,l,s,c,u,d,h){let m=!1;0!=u&&S.forEach(((p,f)=>{if(p.series[0]==e){let e,v=_[p.series[1]],g=t[p.series[1]],y=(v._paths||yc).band;wc(y)&&(y=1==p.dir?y[0]:y[1]);let b=null;v.show&&y&&function(e,t,n){for(t=Fs(t,0),n=Fs(n,e.length-1);t<=n;){if(null!=e[t])return!0;t++}return!1}(g,$e,Ue)?(b=p.fill(r,f)||l,e=v._paths.clip):y=null,ht(n,a,o,i,b,s,c,u,d,h,e,y),m=!0}})),m||ht(n,a,o,i,l,s,c,u,d,h)}(e,c,d,a.dash,a.cap,u,o,i,s,m,l),f&&h.translate(-p,-p)}const dt=2|Zu;function ht(e,t,n,r,a,o,i,l,s,c,u,d){ot(e,t,n,r,a),(s||c||d)&&(h.save(),s&&h.clip(s),c&&h.clip(c)),d?(l&dt)==dt?(h.clip(d),u&&h.clip(u),pt(a,i),mt(e,o,t)):2&l?(pt(a,i),h.clip(d),mt(e,o,t)):l&Zu&&(h.save(),h.clip(d),u&&h.clip(u),pt(a,i),h.restore(),mt(e,o,t)):(pt(a,i),mt(e,o,t)),(s||c||d)&&h.restore()}function mt(e,t,n){n>0&&(t instanceof Map?t.forEach(((e,t)=>{h.strokeStyle=qe=t,h.stroke(e)})):null!=t&&e&&h.stroke(t))}function pt(e,t){t instanceof Map?t.forEach(((e,t)=>{h.fillStyle=Ye=t,h.fill(e)})):null!=t&&e&&h.fill(t)}function ft(e,t,n,r,a,o,i,l,s,c){let u=i%2/2;1==v&&h.translate(u,u),ot(l,i,s,c,l),h.beginPath();let d,m,p,f,g=a+(0==r||3==r?-o:o);0==n?(m=a,f=g):(d=a,p=g);for(let v=0;v{if(!n.show)return;let o=x[n.scale];if(null==o.min)return void(n._show&&(t=!1,n._show=!1,yt(!1)));n._show||(t=!1,n._show=!0,yt(!1));let i=n.side,l=i%2,{min:s,max:c}=o,[u,d]=function(e,t,n,a){let o,i=k[e];if(a<=0)o=[0,0];else{let l=i._space=i.space(r,e,t,n,a);o=Rd(t,n,i._incrs=i.incrs(r,e,t,n,a,l),a,l)}return i._found=o}(a,s,c,0==l?oe:ie);if(0==d)return;let h=2==o.distr,m=n._splits=n.splits(r,a,s,c,u,d,h),p=2==o.distr?m.map((e=>tt[e])):m,f=2==o.distr?tt[m[1]]-tt[m[0]]:u,v=n._values=n.values(r,n.filter(r,p,a,d,f),a,d,f);n._rotate=2==i?n.rotate(r,v,a,d):0;let g=n._size;n._size=Ws(n.size(r,v,a,e)),null!=g&&n._size!=g&&(t=!1)})),t}function gt(e){let t=!0;return je.forEach(((n,a)=>{let o=n(r,a,ze,e);o!=He[a]&&(t=!1),He[a]=o})),t}function yt(e){_.forEach(((t,n)=>{n>0&&(t._paths=null,e&&(1==a?(t.min=null,t.max=null):t.facets.forEach((e=>{e.min=null,e.max=null}))))}))}let _t,bt,wt,kt,xt,St,Ct,Et,Nt,At,Mt,Tt,Lt=!1,It=!1,Pt=[];function Ot(){It=!1;for(let e=0;e0){_.forEach(((n,o)=>{if(1==a){let a=n.scale,i=P[a];if(null==i)return;let l=e[a];if(0==o){let e=l.range(r,l.min,l.max,a);l.min=e[0],l.max=e[1],$e=Ms(l.min,t[0]),Ue=Ms(l.max,t[0]),Ue-$e>1&&(t[0][$e]l.max&&Ue--),n.min=tt[$e],n.max=tt[Ue]}else n.show&&n.auto&<(l,i,n,t[o],n.sorted);n.idxs[0]=$e,n.idxs[1]=Ue}else if(o>0&&n.show&&n.auto){let[r,a]=n.facets,i=r.scale,l=a.scale,[s,c]=t[o],u=e[i],d=e[l];null!=u&<(u,P[i],r,s,r.sorted),null!=d&<(d,P[l],a,c,a.sorted),n.min=a.min,n.max=a.max}}));for(let t in e){let n=e[t],a=P[t];if(null==n.from&&(null==a||null==a.min)){let e=n.range(r,n.min==tc?null:n.min,n.max==-tc?null:n.max,t);n.min=e[0],n.max=e[1]}}}for(let t in e){let n=e[t];if(null!=n.from){let a=e[n.from];if(null==a.min)n.min=n.max=null;else{let e=n.range(r,a.min,a.max,t);n.min=e[0],n.max=e[1]}}}let n={},o=!1;for(let t in e){let r=e[t],a=x[t];if(a.min!=r.min||a.max!=r.max){a.min=r.min,a.max=r.max;let e=a.distr;a._min=3==e?Js(a.min):4==e?ec(a.min,a.asinh):a.min,a._max=3==e?Js(a.max):4==e?ec(a.max,a.asinh):a.max,n[t]=o=!0}}if(o){_.forEach(((e,t)=>{2==a?t>0&&n.y&&(e._paths=null):n[e.scale]&&(e._paths=null)}));for(let e in n)_e=!0,kn("setScale",e);Ee.show&&Ee.left>=0&&(be=ke=!0)}for(let t in P)P[t]=null}(),ge=!1),_e&&(!function(){let e=!1,t=0;for(;!e;){t++;let n=vt(t),a=gt(t);e=t==Ce||n&&a,e||(Se(r.width,r.height),ye=!0)}}(),_e=!1),ye){if(vs(p,Ql,le),vs(p,Wl,se),vs(p,ql,oe),vs(p,Yl,ie),vs(f,Ql,le),vs(f,Wl,se),vs(f,ql,oe),vs(f,Yl,ie),vs(m,ql,re),vs(m,Yl,ae),d.width=Ys(re*hs),d.height=Ys(ae*hs),k.forEach((e=>{let{_el:t,_show:n,_size:r,_pos:a,side:o}=e;if(null!=t)if(n){let e=o%2==1;vs(t,e?"left":"top",a-(3===o||0===o?r:0)),vs(t,e?"width":"height",r),vs(t,e?"top":"left",e?se:le),vs(t,e?"height":"width",e?ie:oe),fs(t,Ul)}else ps(t,Ul)})),qe=Ye=We=Qe=Ze=Ge=Je=Xe=Ke=null,et=1,ln(!0),le!=ce||se!=ue||oe!=de||ie!=he){yt(!1);let e=oe/de,t=ie/he;if(Ee.show&&!be&&Ee.left>=0){Ee.left*=e,Ee.top*=t,wt&&bs(wt,Ys(Ee.left),0,oe,ie),kt&&bs(kt,0,Ys(Ee.top),oe,ie);for(let n=1;n=0&&$t.width>0){$t.left*=e,$t.width*=e,$t.top*=t,$t.height*=t;for(let e in un)vs(Ut,e,$t[e])}ce=le,ue=se,de=oe,he=ie}kn("setSize"),ye=!1}re>0&&ae>0&&(h.clearRect(0,0,d.width,d.height),kn("drawClear"),N.forEach((e=>e())),kn("draw")),$t.show&&we&&(Bt($t),we=!1),Ee.show&&be&&(an(null,!0,!1),be=!1),H.show&&H.live&&ke&&(nn(),ke=!1),c||(c=!0,r.status=1,kn("ready")),nt=!1,Lt=!1}function zt(e,n){let a=x[e];if(null==a.from){if(0==Ve){let t=a.range(r,n.min,n.max,e);n.min=t[0],n.max=t[1]}if(n.min>n.max){let e=n.min;n.min=n.max,n.max=e}if(Ve>1&&null!=n.min&&null!=n.max&&n.max-n.min<1e-16)return;e==C&&2==a.distr&&Ve>0&&(n.min=Ms(n.min,t[0]),n.max=Ms(n.max,t[0]),n.min==n.max&&n.max++),P[e]=n,ge=!0,Rt()}}r.batch=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Lt=!0,It=t,e(r),Dt(),t&&Pt.length>0&&queueMicrotask(Ot)},r.redraw=(e,t)=>{_e=t||!1,!1!==e?qt(C,M.min,M.max):Rt()},r.setScale=zt;let Ft=!1;const jt=Ee.drag;let Ht=jt.x,Vt=jt.y;Ee.show&&(Ee.x&&(_t=ys("u-cursor-x",f)),Ee.y&&(bt=ys("u-cursor-y",f)),0==M.ori?(wt=_t,kt=bt):(wt=bt,kt=_t),Mt=Ee.left,Tt=Ee.top);const $t=r.select=Ac({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Ut=$t.show?ys("u-select",$t.over?f:p):null;function Bt(e,t){if($t.show){for(let t in e)$t[t]=e[t],t in un&&vs(Ut,t,e[t]);!1!==t&&kn("setSelect")}}function qt(e,t,n){zt(e,{min:t,max:n})}function Yt(e,t,n,o){null!=t.focus&&function(e){if(e!=Qt){let t=null==e,n=1!=Le.alpha;_.forEach(((r,o)=>{if(1==a||o>0){let a=t||0==o||o==e;r._focus=t?null:a,n&&function(e,t){_[e].alpha=t,Ee.show&&Pe[e]&&(Pe[e].style.opacity=t);V&&W[e]&&(W[e].style.opacity=t)}(o,a?1:Le.alpha)}})),Qt=e,n&&Rt()}}(e),null!=t.show&&_.forEach(((n,r)=>{r>0&&(e==r||null==e)&&(n.show=t.show,function(e,t){let n=_[e],r=V?W[e]:null;n.show?r&&fs(r,Ul):(r&&ps(r,Ul),Pe.length>1&&bs(Pe[e],-10,-10,oe,ie))}(r,t.show),2==a?(qt(n.facets[0].scale,null,null),qt(n.facets[1].scale,null,null)):qt(n.scale,null,null),Rt())})),!1!==n&&kn("setSeries",e,t),o&&Nn("setSeries",r,e,t)}let Wt,Kt,Qt;r.setSelect=Bt,r.setSeries=Yt,r.addBand=function(e,t){e.fill=ac(e.fill||null),e.dir=Fs(e.dir,-1),t=null==t?S.length:t,S.splice(t,0,e)},r.setBand=function(e,t){Ac(S[e],t)},r.delBand=function(e){null==e?S.length=0:S.splice(e,1)};const Zt={focus:!0};function Gt(e,t,n){let r=x[t];n&&(e=e/hs-(1==r.ori?se:le));let a=oe;1==r.ori&&(a=ie,e=a-e),-1==r.dir&&(e=a-e);let o=r._min,i=o+(r._max-o)*(e/a),l=r.distr;return 3==l?Zs(10,i):4==l?function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return $s.sinh(e)*t}(i,r.asinh):i}function Jt(e,t){vs(Ut,Ql,$t.left=e),vs(Ut,ql,$t.width=t)}function Xt(e,t){vs(Ut,Wl,$t.top=e),vs(Ut,Yl,$t.height=t)}V&&Ie&&te(rs,U,(e=>{Ee._lock||(Me(e),null!=Qt&&Yt(null,Zt,!0,Sn.setSeries))})),r.valToIdx=e=>Ms(e,t[0]),r.posToIdx=function(e,n){return Ms(Gt(e,C,n),t[0],$e,Ue)},r.posToVal=Gt,r.valToPos=(e,t,n)=>0==x[t].ori?i(e,x[t],n?fe:oe,n?me:0):l(e,x[t],n?ve:ie,n?pe:0),r.setCursor=(e,t,n)=>{Mt=e.left,Tt=e.top,an(null,t,n)};let en=0==M.ori?Jt:Xt,tn=1==M.ori?Jt:Xt;function nn(e,t){null!=e&&(e.idxs?e.idxs.forEach(((e,t)=>{j[t]=e})):void 0!==e.idx&&j.fill(e.idx),H.idx=j[0]);for(let n=0;n<_.length;n++)(n>0||1==a&&!Q)&&rn(n,j[n]);V&&H.live&&function(){if(V&&H.live)for(let e=2==a?1:0;e<_.length;e++){if(0==e&&Q)continue;let t=H.values[e],n=0;for(let r in t)K[e][n++].firstChild.nodeValue=t[r]}}(),ke=!1,!1!==t&&kn("setLegend")}function rn(e,n){var a;let o,i=_[e],l=0==e&&2==T?tt:t[e];Q?o=null!==(a=i.values(r,e,n))&&void 0!==a?a:Z:(o=i.value(r,null==n?null:l[n],e,n),o=null==o?Z:{_:o}),H.values[e]=o}function an(e,n,o){let i;Nt=Mt,At=Tt,[Mt,Tt]=Ee.move(r,Mt,Tt),Ee.left=Mt,Ee.top=Tt,Ee.show&&(wt&&bs(wt,Ys(Mt),0,oe,ie),kt&&bs(kt,0,Ys(Tt),oe,ie));let l=$e>Ue;Wt=tc;let s=0==M.ori?oe:ie,c=1==M.ori?oe:ie;if(Mt<0||0==Ve||l){i=Ee.idx=null;for(let e=0;e<_.length;e++)e>0&&Pe.length>1&&bs(Pe[e],-10,-10,oe,ie);Ie&&Yt(null,Zt,!0,null==e&&Sn.setSeries),H.live&&(j.fill(i),ke=!0)}else{let e,n,o;1==a&&(e=0==M.ori?Mt:Tt,n=Gt(e,C),i=Ee.idx=Ms(n,t[0],$e,Ue),o=L(t[0][i],M,s,0));for(let l=2==a?1:0;l<_.length;l++){let e=_[l],u=j[l],d=null==u?null:1==a?t[l][u]:t[l][1][u],h=Ee.dataIdx(r,l,i,n),m=null==h?null:1==a?t[l][h]:t[l][1][h];ke=ke||m!=d||h!=u,j[l]=h;let p=h==i?o:L(1==a?t[0][h]:t[l][0][h],M,s,0);if(l>0&&e.show){let t,n,o=null==m?-10:I(m,1==a?x[e.scale]:x[e.facets[1].scale],c,0);if(Ie&&null!=m){let t=1==M.ori?Mt:Tt,n=Bs(Le.dist(r,l,h,o,t));if(n=0?1:-1;o==(m>=0?1:-1)&&(1==o?1==r?m>=a:m<=a:1==r?m<=a:m>=a)&&(Wt=n,Kt=l)}else Wt=n,Kt=l}}if(0==M.ori?(t=p,n=o):(t=o,n=p),ke&&Pe.length>1){ks(Pe[l],Ee.points.fill(r,l),Ee.points.stroke(r,l));let e,a,o,i,s=!0,c=Ee.points.bbox;if(null!=c){s=!1;let t=c(r,l);o=t.left,i=t.top,e=t.width,a=t.height}else o=t,i=n,e=a=Ee.points.size(r,l);Ss(Pe[l],e,a,s),Oe[l]=o,Re[l]=i,bs(Pe[l],hc(o,1),hc(i,1),oe,ie)}}}}if($t.show&&Ft)if(null!=e){let[t,n]=Sn.scales,[r,a]=Sn.match,[o,i]=e.cursor.sync.scales,l=e.cursor.drag;if(Ht=l._x,Vt=l._y,Ht||Vt){let l,u,d,h,m,{left:p,top:f,width:v,height:g}=e.select,y=e.scales[t].ori,_=e.posToVal,b=null!=t&&r(t,o),w=null!=n&&a(n,i);b&&Ht?(0==y?(l=p,u=v):(l=f,u=g),d=x[t],h=L(_(l,o),d,s,0),m=L(_(l+u,o),d,s,0),en(Ks(h,m),Bs(m-h))):en(0,s),w&&Vt?(1==y?(l=p,u=v):(l=f,u=g),d=x[n],h=I(_(l,i),d,c,0),m=I(_(l+u,i),d,c,0),tn(Ks(h,m),Bs(m-h))):tn(0,c)}else dn()}else{let e=Bs(Nt-xt),t=Bs(At-St);if(1==M.ori){let n=e;e=t,t=n}Ht=jt.x&&e>=jt.dist,Vt=jt.y&&t>=jt.dist;let n,r,a=jt.uni;null!=a?Ht&&Vt&&(Ht=e>=a,Vt=t>=a,Ht||Vt||(t>e?Vt=!0:Ht=!0)):jt.x&&jt.y&&(Ht||Vt)&&(Ht=Vt=!0),Ht&&(0==M.ori?(n=Ct,r=Mt):(n=Et,r=Tt),en(Ks(n,r),Bs(r-n)),Vt||tn(0,c)),Vt&&(1==M.ori?(n=Ct,r=Mt):(n=Et,r=Tt),tn(Ks(n,r),Bs(r-n)),Ht||en(0,s)),Ht||Vt||(en(0,0),tn(0,0))}if(jt._x=Ht,jt._y=Vt,null==e){if(o){if(null!=Cn){let[e,t]=Sn.scales;Sn.values[0]=null!=e?Gt(0==M.ori?Mt:Tt,e):null,Sn.values[1]=null!=t?Gt(1==M.ori?Mt:Tt,t):null}Nn(Xl,r,Mt,Tt,oe,ie,i)}if(Ie){let e=o&&Sn.setSeries,t=Le.prox;null==Qt?Wt<=t&&Yt(Kt,Zt,!0,e):Wt>t?Yt(null,Zt,!0,e):Kt!=Qt&&Yt(Kt,Zt,!0,e)}}ke&&(H.idx=i,nn()),!1!==n&&kn("setCursor")}r.setLegend=nn;let on=null;function ln(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?on=null:(on=f.getBoundingClientRect(),kn("syncRect",on))}function sn(e,t,n,r,a,o,i){Ee._lock||Ft&&null!=e&&0==e.movementX&&0==e.movementY||(cn(e,t,n,r,a,o,i,!1,null!=e),null!=e?an(null,!0,!0):an(t,!0,!1))}function cn(e,t,n,a,o,i,l,c,u){if(null==on&&ln(!1),Me(e),null!=e)n=e.clientX-on.left,a=e.clientY-on.top;else{if(n<0||a<0)return Mt=-10,void(Tt=-10);let[e,r]=Sn.scales,l=t.cursor.sync,[c,u]=l.values,[d,h]=l.scales,[m,p]=Sn.match,f=t.axes[0].side%2==1,v=0==M.ori?oe:ie,g=1==M.ori?oe:ie,y=f?i:o,_=f?o:i,b=f?a:n,w=f?n:a;if(n=null!=d?m(e,d)?s(c,x[e],v,0):-10:v*(b/y),a=null!=h?p(r,h)?s(u,x[r],g,0):-10:g*(w/_),1==M.ori){let e=n;n=a,a=e}}u&&((n<=1||n>=oe-1)&&(n=dc(n,oe)),(a<=1||a>=ie-1)&&(a=dc(a,ie))),c?(xt=n,St=a,[Ct,Et]=Ee.move(r,n,a)):(Mt=n,Tt=a)}Object.defineProperty(r,"rect",{get:()=>(null==on&&ln(!1),on)});const un={width:0,height:0,left:0,top:0};function dn(){Bt(un,!1)}let hn,mn,pn,fn;function vn(e,t,n,a,o,i,l){Ft=!0,Ht=Vt=jt._x=jt._y=!1,cn(e,t,n,a,o,i,0,!0,!1),null!=e&&(te(ts,cs,gn,!1),Nn(es,r,Ct,Et,oe,ie,null));let{left:s,top:c,width:u,height:d}=$t;hn=s,mn=c,pn=u,fn=d,dn()}function gn(e,t,n,a,o,i,l){Ft=jt._x=jt._y=!1,cn(e,t,n,a,o,i,0,!1,!0);let{left:s,top:c,width:u,height:d}=$t,h=u>0||d>0,m=hn!=s||mn!=c||pn!=u||fn!=d;if(h&&m&&Bt($t),jt.setScale&&h&&m){let e=s,t=u,n=c,r=d;if(1==M.ori&&(e=c,t=d,n=s,r=u),Ht&&qt(C,Gt(e,C),Gt(e+t,C)),Vt)for(let a in x){let e=x[a];a!=C&&null==e.from&&e.min!=tc&&qt(a,Gt(n+r,a),Gt(n,a))}dn()}else Ee.lock&&(Ee._lock=!Ee._lock,Ee._lock||an(null,!0,!1));null!=e&&(ne(ts,cs),Nn(ts,r,Mt,Tt,oe,ie,null))}function yn(e,t,n,a,o,i,l){Ee._lock||(Me(e),at(),dn(),null!=e&&Nn(as,r,Mt,Tt,oe,ie,null))}function _n(){k.forEach(zd),xe(r.width,r.height,!0)}Ns(is,us,_n);const bn={};bn.mousedown=vn,bn.mousemove=sn,bn.mouseup=gn,bn.dblclick=yn,bn.setSeries=(e,t,n,a)=>{-1!=(n=(0,Sn.match[2])(r,t,n))&&Yt(n,a,!0,!1)},Ee.show&&(te(es,f,vn),te(Xl,f,sn),te(ns,f,(e=>{Me(e),ln(!1)})),te(rs,f,(function(e,t,n,r,a,o,i){if(Ee._lock)return;Me(e);let l=Ft;if(Ft){let e,t,n=!0,r=!0,a=10;0==M.ori?(e=Ht,t=Vt):(e=Vt,t=Ht),e&&t&&(n=Mt<=a||Mt>=oe-a,r=Tt<=a||Tt>=ie-a),e&&n&&(Mt=Mt{e.call(null,r,t,n)}))}(e.plugins||[]).forEach((e=>{for(let t in e.hooks)wn[t]=(wn[t]||[]).concat(e.hooks[t])}));const xn=(e,t,n)=>n,Sn=Ac({key:null,setSeries:!1,filters:{pub:sc,sub:sc},scales:[C,_[1]?_[1].scale:null],match:[cc,cc,xn],values:[null,null]},Ee.sync);2==Sn.match.length&&Sn.match.push(xn),Ee.sync=Sn;const Cn=Sn.key,En=Qu(Cn);function Nn(e,t,n,r,a,o,i){Sn.filters.pub(e,t,n,r,a,o,i)&&En.pub(e,t,n,r,a,o,i)}function An(){kn("init",e,t),rt(t||e.data,!1),P[C]?zt(C,P[C]):at(),we=$t.show&&($t.width>0||$t.height>0),be=ke=!0,xe(e.width,e.height)}return En.sub(r),r.pub=function(e,t,n,r,a,o,i){Sn.filters.sub(e,t,n,r,a,o,i)&&bn[e](null,t,n,r,a,o,i)},r.destroy=function(){var e;En.unsub(r),kd.delete(r),ee.clear(),As(is,us,_n),u.remove(),null===(e=U)||void 0===e||e.remove(),kn("destroy")},_.forEach(De),k.forEach((function(e,t){if(e._show=e.show,e.show){let n=e.side%2,a=x[e.scale];null==a&&(e.scale=n?_[1].scale:C,a=x[e.scale]);let o=a.time;e.size=ac(e.size),e.space=ac(e.space),e.rotate=ac(e.rotate),wc(e.incrs)&&e.incrs.forEach((e=>{!fc.has(e)&&fc.set(e,vc(e))})),e.incrs=ac(e.incrs||(2==a.distr?qc:o?1==y?au:lu:Yc)),e.splits=ac(e.splits||(o&&1==a.distr?D:3==a.distr?Tu:4==a.distr?Lu:Mu)),e.stroke=ac(e.stroke),e.grid.stroke=ac(e.grid.stroke),e.ticks.stroke=ac(e.ticks.stroke),e.border.stroke=ac(e.border.stroke);let i=e.values;e.values=wc(i)&&!wc(i[0])?ac(i):o?wc(i)?du(O,uu(i,R)):xc(i)?function(e,t){let n=jc(t);return(t,r,a,o,i)=>r.map((t=>n(e(t))))}(O,i):i||z:i||Au,e.filter=ac(e.filter||(a.distr>=3&&10==a.log?zu:3==a.distr&&2==a.log?Fu:ic)),e.font=Dd(e.font),e.labelFont=Dd(e.labelFont),e._size=e.size(r,null,t,0),e._space=e._rotate=e._incrs=e._found=e._splits=e._values=null,e._size>0&&(ze[t]=!0,e._el=ys("u-axis",m))}})),n?n instanceof HTMLElement?(n.appendChild(u),An()):n(r,An):An(),r}Fd.assign=Ac,Fd.fmtNum=Vs,Fd.rangeNum=zs,Fd.rangeLog=Ls,Fd.rangeAsinh=Is,Fd.orient=Gu,Fd.pxRatio=hs,Fd.join=function(e,t){if(function(e){let t=e[0][0],n=t.length;for(let r=1;r1&&void 0!==arguments[1]?arguments[1]:100;const n=e.length;if(n<=1)return!0;let r=0,a=n-1;for(;r<=a&&null==e[r];)r++;for(;a>=r&&null==e[a];)a--;if(a<=r)return!0;const o=Qs(1,qs((a-r+1)/t));for(let i=e[r],l=r+o;l<=a;l+=o){const t=e[l];if(null!=t){if(t<=i)return!1;i=t}}return!0}(t[0])||(t=function(e){let t=e[0],n=t.length,r=Array(n);for(let o=0;ot[e]-t[n]));let a=[];for(let o=0;oe-t))],a=r[0].length,o=new Map;for(let i=0;iGu(e,o,((s,c,u,d,h,m,p,f,v,g,y)=>{let _=s.pxRound,{left:b,width:w}=e.bbox,k=e=>_(m(e,d,g,f)),x=e=>_(p(e,h,y,v)),S=0==d.ori?ld:sd;const C={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Zu},E=C.stroke,N=d.dir*(0==d.ori?1:-1);i=Ts(u,i,l,1),l=Ts(u,i,l,-1);let A=x(u[1==N?i:l]),M=k(c[1==N?i:l]),T=M,L=M;a&&-1==t&&(L=b,S(E,L,A)),S(E,M,A);for(let e=1==N?i:l;e>=i&&e<=l;e+=N){let n=u[e];if(null==n)continue;let r=k(c[e]),a=x(n);1==t?S(E,r,A):S(E,T,a),S(E,r,a),A=a,T=r}let I=T;a&&1==t&&(I=b+w,S(E,I,A));let[P,O]=Ju(e,o);if(null!=s.fill||0!=P){let t=C.fill=new Path2D(E),n=x(s.fillTo(e,o,s.min,s.max,P));S(t,I,n),S(t,L,n)}if(!s.spanGaps){let a=[];a.push(...nd(c,u,i,l,N,k,r));let h=s.width*hs/2,m=n||1==t?h:-h,p=n||-1==t?-h:h;a.forEach((e=>{e[0]+=m,e[1]+=p})),C.gaps=a=s.gaps(e,o,i,l,a),C.clip=td(a,d.ori,f,v,g,y)}return 0!=O&&(C.band=2==O?[ed(e,o,i,l,E,-1),ed(e,o,i,l,E,1)]:ed(e,o,i,l,E,O)),C}))},e.bars=function(e){const t=Fs((e=e||yc).size,[.6,tc,1]),n=e.align||0,r=e.gap||0;let a=e.radius;a=null==a?[0,0]:"number"==typeof a?[a,0]:a;const o=ac(a),i=1-t[0],l=Fs(t[1],tc),s=Fs(t[2],1),c=Fs(e.disp,yc),u=Fs(e.each,(e=>{})),{fill:d,stroke:h}=c;return(e,t,a,m)=>Gu(e,t,((p,f,v,g,y,_,b,w,k,x,S)=>{let C,E,N=p.pxRound,A=n,M=r*hs,T=l*hs,L=s*hs;0==g.ori?[C,E]=o(e,t):[E,C]=o(e,t);const I=g.dir*(0==g.ori?1:-1);let P,O,R,D=0==g.ori?cd:ud,z=0==g.ori?u:(e,t,n,r,a,o,i)=>{u(e,t,n,a,r,i,o)},F=Fs(e.bands,_c).find((e=>e.series[0]==t)),j=null!=F?F.dir:0,H=p.fillTo(e,t,p.min,p.max,j),V=N(b(H,y,S,k)),$=x,U=N(p.width*hs),B=!1,q=null,Y=null,W=null,K=null;null==d||0!=U&&null==h||(B=!0,q=d.values(e,t,a,m),Y=new Map,new Set(q).forEach((e=>{null!=e&&Y.set(e,new Path2D)})),U>0&&(W=h.values(e,t,a,m),K=new Map,new Set(W).forEach((e=>{null!=e&&K.set(e,new Path2D)}))));let{x0:Q,size:Z}=c;if(null!=Q&&null!=Z){A=1,f=Q.values(e,t,a,m),2==Q.unit&&(f=f.map((t=>e.posToVal(w+t*x,g.key,!0))));let n=Z.values(e,t,a,m);O=2==Z.unit?n[0]*x:_(n[0],g,x,w)-_(0,g,x,w),$=bd(f,v,_,g,x,w,$),R=$-O+M}else $=bd(f,v,_,g,x,w,$),R=$*i+M,O=$-R;R<1&&(R=0),U>=O/2&&(U=0),R<5&&(N=oc);let G=R>0;O=N(rc($-R-(G?U:0),L,T)),P=(0==A?O/2:A==I?0:O)-A*I*((0==A?M/2:0)+(G?U/2:0));const J={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},X=B?null:new Path2D;let ee=null;if(null!=F)ee=e.data[F.series[1]];else{let{y0:n,y1:r}=c;null!=n&&null!=r&&(v=r.values(e,t,a,m),ee=n.values(e,t,a,m))}let te=C*O,ne=E*O;for(let n=1==I?a:m;n>=a&&n<=m;n+=I){let r=v[n];if(null==r)continue;if(null!=ee){var re;let e=null!==(re=ee[n])&&void 0!==re?re:0;if(r-e==0)continue;V=b(e,y,S,k)}let a=_(2!=g.distr||null!=c?f[n]:n,g,x,w),o=b(Fs(r,H),y,S,k),i=N(a-P),l=N(Qs(o,V)),s=N(Ks(o,V)),u=l-s;if(null!=r){let a=r<0?ne:te,o=r<0?te:ne;B?(U>0&&null!=W[n]&&D(K.get(W[n]),i,s+qs(U/2),O,Qs(0,u-U),a,o),null!=q[n]&&D(Y.get(q[n]),i,s+qs(U/2),O,Qs(0,u-U),a,o)):D(X,i,s+qs(U/2),O,Qs(0,u-U),a,o),z(e,t,n,i-U/2,s,O+U,u)}}if(U>0)J.stroke=B?K:X;else if(!B){var ae;J._fill=0==p.width?p._fill:null!==(ae=p._stroke)&&void 0!==ae?ae:p._fill,J.width=0}return J.fill=B?Y:X,J}))},e.spline=function(e){return function(e,t){const n=Fs(null===t||void 0===t?void 0:t.alignGaps,0);return(t,r,a,o)=>Gu(t,r,((i,l,s,c,u,d,h,m,p,f,v)=>{let g,y,_,b=i.pxRound,w=e=>b(d(e,c,f,m)),k=e=>b(h(e,u,v,p));0==c.ori?(g=od,_=ld,y=md):(g=id,_=sd,y=pd);const x=c.dir*(0==c.ori?1:-1);a=Ts(s,a,o,1),o=Ts(s,a,o,-1);let S=w(l[1==x?a:o]),C=S,E=[],N=[];for(let e=1==x?a:o;e>=a&&e<=o;e+=x)if(null!=s[e]){let t=w(l[e]);E.push(C=t),N.push(k(s[e]))}const A={stroke:e(E,N,g,_,y,b),fill:null,clip:null,band:null,gaps:null,flags:Zu},M=A.stroke;let[T,L]=Ju(t,r);if(null!=i.fill||0!=T){let e=A.fill=new Path2D(M),n=k(i.fillTo(t,r,i.min,i.max,T));_(e,C,n),_(e,S,n)}if(!i.spanGaps){let e=[];e.push(...nd(l,s,a,o,x,w,n)),A.gaps=e=i.gaps(t,r,a,o,e),A.clip=td(e,c.ori,m,p,f,v)}return 0!=L&&(A.band=2==L?[ed(t,r,a,o,M,-1),ed(t,r,a,o,M,1)]:ed(t,r,a,o,M,L)),A}))}(wd,e)}}const jd=e=>{let t=e.length,n=-1/0;for(;t--;){const r=e[t];Number.isFinite(r)&&r>n&&(n=r)}return Number.isFinite(n)?n:null},Hd=e=>{let t=e.length,n=1/0;for(;t--;){const r=e[t];Number.isFinite(r)&&r{let t=e.length;const n=[];for(;t--;){const r=e[t];Number.isFinite(r)&&n.push(r)}return n.sort(),n[n.length>>1]},$d=e=>{let t=e.length;for(;t--;){const n=e[t];if(Number.isFinite(n))return n}},Ud=(e,t,n)=>{if(void 0===e||null===e)return"";n=n||0,t=t||0;const r=Math.abs(n-t);if(isNaN(r)||0==r)return Math.abs(e)>=1e3?e.toLocaleString("en-US"):e.toString();let a=3+Math.floor(1+Math.log10(Math.max(Math.abs(t),Math.abs(n)))-Math.log10(r));return(isNaN(a)||a>20)&&(a=20),e.toLocaleString("en-US",{minimumSignificantDigits:1,maximumSignificantDigits:a})},Bd=e=>{const t=(null===e||void 0===e?void 0:e.metric)||{},n=Object.keys(t).filter((e=>"__name__"!=e)).map((e=>"".concat(e,"=").concat(JSON.stringify(t[e]))));let r=t.__name__||"";return n.length>0&&(r+="{"+n.join(",")+"}"),r},qd=[[31536e3,"{YYYY}",null,null,null,null,null,null,1],[2419200,"{MMM}","\n{YYYY}",null,null,null,null,null,1],[86400,"{MM}-{DD}","\n{YYYY}",null,null,null,null,null,1],[3600,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[60,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[1,"{HH}:{mm}:{ss}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD} {HH}:{mm}",null,null,null,1],[.001,":{ss}.{fff}","\n{YYYY}-{MM}-{DD} {HH}:{mm}",null,"\n{MM}-{DD} {HH}:{mm}",null,"\n{HH}:{mm}",null,1]],Yd=(e,t)=>Array.from(new Set(e.map((e=>e.scale)))).map((e=>{const n="10px Arial",r=gt("color-text"),a={scale:e,show:!0,size:Kd,stroke:r,font:n,values:(e,n)=>function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const r=t[0],a=t[t.length-1];return n?t.map((e=>"".concat(Ud(e,r,a)," ").concat(n))):t.map((e=>Ud(e,r,a)))}(e,n,t)};return e?Number(e)%2||"y"===e?a:{...a,side:1}:{space:80,values:qd,stroke:r,font:n}})),Wd=(e,t)=>{if(null==e||null==t)return[-1,1];const n=.02*(Math.abs(t-e)||Math.abs(e)||1);return[e-n,t+n]},Kd=(e,t,n,r)=>{var a;const o=e.axes[n];if(r>1)return o._size||60;let i=6+((null===o||void 0===o||null===(a=o.ticks)||void 0===a?void 0:a.size)||0)+(o.gap||0);const l=(null!==t&&void 0!==t?t:[]).reduce(((e,t)=>(null===t||void 0===t?void 0:t.length)>e.length?t:e),"");return""!=l&&(i+=((e,t)=>{const n=document.createElement("span");n.innerText=e,n.style.cssText="position: absolute; z-index: -1; pointer-events: none; opacity: 0; font: ".concat(t),document.body.appendChild(n);const r=n.offsetWidth;return n.remove(),r})(l,"10px Arial")),Math.ceil(i)},Qd=["#e54040","#32a9dc","#2ee329","#7126a1","#e38f0f","#3d811a","#ffea00","#2d2d2d","#da42a6","#a44e0c"],Zd=e=>{if(7!=e.length)return"0, 0, 0";const t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return"".concat(t,", ").concat(n,", ").concat(r)},Gd={[ht.yhatUpper]:"#7126a1",[ht.yhatLower]:"#7126a1",[ht.yhat]:"#da42a6",[ht.anomaly]:"#da4242",[ht.anomalyScore]:"#7126a1",[ht.actual]:"#203ea9",[ht.training]:"rgba(".concat(Zd("#203ea9"),", 0.2)")},Jd=e=>{const t=16777215;let n=1,r=0,a=1;if(e.length>0)for(let i=0;ir&&(r=e[i].charCodeAt(0)),a=parseInt(String(t/r)),n=(n+e[i].charCodeAt(0)*a*49979693)%t;let o=(n*e.length%t).toString(16);return o=o.padEnd(6,o),"#".concat(o)},Xd=((e,t,n)=>{const r=[];for(let a=0;aMath.round(e))).join(", "))}return r.map((e=>"rgb(".concat(e,")")))})([246,226,219],[127,39,4],16),eh=()=>(e,t)=>{const n=Math.round(devicePixelRatio);Fd.orient(e,t,((r,a,o,i,l,s,c,u,d,h,m,p,f,v)=>{const[g,y,_]=e.data[t],b=g.length,w=((e,t)=>{const n=e.data[t][2],r=Xd;let a=1/0,o=-1/0;for(let c=0;c0&&(a=Math.min(a,n[c]),o=Math.max(o,n[c]));const i=o-a,l=r.length,s=Array(n.length);for(let c=0;cnew Path2D)),S=b-y.lastIndexOf(y[0]),C=b/S,E=y[1]-y[0],N=g[S]-g[0],A=s(N,i,h,u)-s(0,i,h,u)-n,M=c(E,l,m,d)-c(0,l,m,d)+n,T=y.slice(0,S).map((e=>Math.round(c(e,l,m,d)-M/2))),L=Array.from({length:C},((e,t)=>Math.round(s(g[t*S],i,h,u)-A)));for(let e=0;e0&&g[e]>=(i.min||-1/0)&&g[e]<=(i.max||1/0)&&y[e]>=(l.min||-1/0)&&y[e]<=(l.max||1/0)){const t=L[~~(e/S)],n=T[e%S];v(x[w[e]],t,n,A,M)}e.ctx.save(),e.ctx.rect(e.bbox.left,e.bbox.top,e.bbox.width,e.bbox.height),e.ctx.clip(),x.forEach(((t,n)=>{e.ctx.fillStyle=k[n],e.ctx.fill(t)})),e.ctx.restore()}))},th=e=>{const t=(e.metric.vmrange||e.metric.le||"").split("...");return Nl(t[t.length-1])},nh=(e,t)=>th(e)-th(t),rh=(e,t)=>{if(!t)return e;const n=(e=>{var t;if(!e.every((e=>e.metric.le)))return e;const n=e.sort(((e,t)=>parseFloat(e.metric.le)-parseFloat(t.metric.le))),r=(null===(t=e[0])||void 0===t?void 0:t.group)||1;let a={metric:{le:""},values:[],group:r};const o=[];for(const l of n){const e=[a.metric.le,l.metric.le].filter((e=>e)).join("..."),t=[];for(const[n,r]of l.values){var i;const e=+r-+((null===(i=a.values.find((e=>e[0]===n)))||void 0===i?void 0:i[1])||0);t.push([n,"".concat(e)])}o.push({metric:{vmrange:e},values:t,group:r}),a=l}return o})(e.sort(nh)),r={};n.forEach((e=>e.values.forEach((e=>{let[t,n]=e;r[t]=(r[t]||0)+ +n}))));return n.map((e=>{const t=e.values.map((e=>{let[t,n]=e;const a=r[t];return[t,"".concat(Math.round(+n/a*100))]}));return{...e,values:t}})).filter((e=>!e.values.every((e=>"0"===e[1]))))},ah=e=>{const t=["__name__","for"];return Object.entries(e).filter((e=>{let[n]=e;return!t.includes(n)})).map((e=>{let[t,n]=e;return"".concat(t,": ").concat(n)})).join(",")},oh=(e,t,n,r)=>{const a={},o=r?0:Math.min(e.length,Qd.length);for(let i=0;i{const l=r?(e=>{const t=(null===e||void 0===e?void 0:e.__name__)||"",n=new RegExp("(".concat(Object.values(ht).join("|"),")$")),r=t.match(n),a=r&&r[0];return{value:/(?:^|[^a-zA-Z0-9_])y(?:$|[^a-zA-Z0-9_])/.test(t)?ht.actual:a,group:ah(e)}})(e[i].metric):null,s=r?(null===l||void 0===l?void 0:l.group)||"":El(o,n[o.group-1]);return{label:s,dash:uh(l),width:dh(l),stroke:mh({metricInfo:l,label:s,isAnomalyUI:r,colorState:a}),points:hh(l),spanGaps:!1,forecast:null===l||void 0===l?void 0:l.value,forecastGroup:null===l||void 0===l?void 0:l.group,freeFormFields:o.metric,show:!sh(s,t),scale:"1",...ih(o)}}},ih=e=>{const t=e.values.map((e=>Nl(e[1]))),{min:n,max:r,median:a,last:o}={min:Hd(t),max:jd(t),median:Vd(t),last:$d(t)};return{median:a,statsFormatted:{min:Ud(n,n,r),max:Ud(r,n,r),median:Ud(a,n,r),last:Ud(o,n,r)}}},lh=(e,t)=>({group:t,label:e.label||"",color:e.stroke,checked:e.show||!1,freeFormFields:e.freeFormFields,statsFormatted:e.statsFormatted,median:e.median}),sh=(e,t)=>t.includes("".concat(e)),ch=e=>{for(let t=e.series.length-1;t>=0;t--)e.delSeries(t)},uh=e=>{const t=(null===e||void 0===e?void 0:e.value)===ht.yhatLower,n=(null===e||void 0===e?void 0:e.value)===ht.yhatUpper,r=(null===e||void 0===e?void 0:e.value)===ht.yhat;return t||n?[10,5]:r?[10,2]:[]},dh=e=>{const t=(null===e||void 0===e?void 0:e.value)===ht.yhatLower,n=(null===e||void 0===e?void 0:e.value)===ht.yhatUpper,r=(null===e||void 0===e?void 0:e.value)===ht.yhat,a=(null===e||void 0===e?void 0:e.value)===ht.anomaly;return n||t?.7:r?1:a?0:1.4},hh=e=>(null===e||void 0===e?void 0:e.value)===ht.anomaly?{size:8,width:4,space:0}:{size:4.2,width:1.4},mh=e=>{let{metricInfo:t,label:n,isAnomalyUI:r,colorState:a}=e;const o=a[n]||Jd(n),i=(null===t||void 0===t?void 0:t.value)===ht.anomaly;return r&&i?Gd[ht.anomaly]:!r||i||null!==t&&void 0!==t&&t.value?null!==t&&void 0!==t&&t.value?null!==t&&void 0!==t&&t.value?Gd[null===t||void 0===t?void 0:t.value]:o:a[n]||Jd(n):Gd[ht.actual]},ph=e=>{let{width:t=400,height:n=500}=e;return{width:t,height:n,series:[],tzDate:e=>o()(Xt(tn(e))).local().toDate(),legend:{show:!1},cursor:{drag:{x:!0,y:!1},focus:{prox:30},points:{size:5.6,width:1.4},bind:{click:()=>null,dblclick:()=>null}}}},fh=e=>{ch(e),(e=>{Object.keys(e.hooks).forEach((t=>{e.hooks[t]=[]}))})(e),e.setData([])},vh=e=>{let{min:t,max:n}=e;return[t,n]},gh=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;return a.limits.enable?a.limits.range[r]:Wd(t,n)},yh=(e,t)=>{const n={x:{range:()=>vh(t)}},r=Object.keys(e.limits.range);return(r.length?r:["1"]).forEach((t=>{n[t]={range:function(n){return gh(n,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,t,e)}}})),n},_h=e=>t=>{const n=t.posToVal(t.select.left,"x"),r=t.posToVal(t.select.left+t.select.width,"x");e({min:n,max:r})};function bh(e){const t=Zd(Gd[e]);return"rgba(".concat(t,", 0.05)")}const wh=e=>(e=>e instanceof MouseEvent)(e)?e.clientX:e.touches[0].clientX,kh=e=>{let{dragSpeed:t=.85,setPanning:n,setPlotScale:a}=e;const o=(0,r.useRef)({leftStart:0,xUnitsPerPx:0,scXMin:0,scXMax:0}),i=e=>{e.preventDefault();const n=wh(e),{leftStart:r,xUnitsPerPx:i,scXMin:l,scXMax:s}=o.current,c=i*((n-r)*t);a({min:l-c,max:s-c})},l=()=>{n(!1),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",l),document.removeEventListener("touchmove",i),document.removeEventListener("touchend",l)};return e=>{let{e:t,u:r}=e;t.preventDefault(),n(!0),o.current={leftStart:wh(t),xUnitsPerPx:r.posToVal(1,"x")-r.posToVal(0,"x"),scXMin:r.scales.x.min||0,scXMax:r.scales.x.max||0},document.addEventListener("mousemove",i),document.addEventListener("mouseup",l),document.addEventListener("touchmove",i),document.addEventListener("touchend",l)}},xh=e=>{const[t,n]=(0,r.useState)(!1),a=kh({dragSpeed:.9,setPanning:n,setPlotScale:e});return{onReadyChart:t=>{const n=e=>{const n=e instanceof MouseEvent&&(e=>{const{ctrlKey:t,metaKey:n,button:r}=e;return 0===r&&(t||n)})(e),r=window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1;(n||r)&&a({u:t,e:e})};t.over.addEventListener("mousedown",n),t.over.addEventListener("touchstart",n),t.over.addEventListener("wheel",(n=>{if(!n.ctrlKey&&!n.metaKey)return;n.preventDefault();const{width:r}=t.over.getBoundingClientRect(),a=t.cursor.left&&t.cursor.left>0?t.cursor.left:0,o=t.posToVal(a,"x"),i=(t.scales.x.max||0)-(t.scales.x.min||0),l=n.deltaY<0?.9*i:i/.9,s=o-a/r*l,c=s+l;t.batch((()=>e({min:s,max:c})))}))},isPanning:t}},Sh=e=>{const t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.sqrt(t*t+n*n)},Ch=e=>{let{uPlotInst:t,xRange:n,setPlotScale:a}=e;const[o,i]=(0,r.useState)(0),l=(0,r.useCallback)((e=>{const{target:r,ctrlKey:o,metaKey:i,key:l}=e,s=r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement;if(!t||s)return;const c="+"===l||"="===l;if(("-"===l||c)&&!(o||i)){e.preventDefault();const t=(n.max-n.min)/10*(c?1:-1);a({min:n.min+t,max:n.max-t})}}),[t,n]),s=(0,r.useCallback)((e=>{if(!t||2!==e.touches.length)return;e.preventDefault();const r=Sh(e.touches),i=o-r,l=t.scales.x.max||n.max,s=t.scales.x.min||n.min,c=(l-s)/50*(i>0?-1:1);t.batch((()=>a({min:s+c,max:l-c})))}),[t,o,n]);return Ar("keydown",l),Ar("touchmove",s),Ar("touchstart",(e=>{2===e.touches.length&&(e.preventDefault(),i(Sh(e.touches)))})),null},Eh=e=>{let{period:t,setPeriod:n}=e;const[a,i]=(0,r.useState)({min:t.start,max:t.end});return(0,r.useEffect)((()=>{i({min:t.start,max:t.end})}),[t]),{xRange:a,setPlotScale:e=>{let{min:t,max:r}=e;const a=1e3*(r-t);aHt||n({from:o()(1e3*t).toDate(),to:o()(1e3*r).toDate()})}}},Nh=e=>{let{u:t,metrics:n,series:a,unit:i,isAnomalyView:l}=e;const[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)({seriesIdx:-1,dataIdx:-1}),[h,m]=(0,r.useState)([]),p=(0,r.useCallback)((()=>{const{seriesIdx:e,dataIdx:r}=u,s=n[e-1],c=a[e],d=new Set(n.map((e=>e.group))),h=(null===s||void 0===s?void 0:s.group)||0,m=it()(t,["data",e,r],0),p=it()(t,["scales","1","min"],0),f=it()(t,["scales","1","max"],1),v=it()(t,["data",0,r],0),g={top:t?t.valToPos(m||0,(null===c||void 0===c?void 0:c.scale)||"1"):0,left:t?t.valToPos(v,"x"):0};return{unit:i,point:g,u:t,id:"".concat(e,"_").concat(r),title:d.size>1&&!l?"Query ".concat(h):"",dates:[v?o()(1e3*v).tz().format(Ot):"-"],value:Ud(m,p,f),info:Bd(s),statsFormatted:null===c||void 0===c?void 0:c.statsFormatted,marker:"".concat(null===c||void 0===c?void 0:c.stroke)}}),[t,u,n,a,i,l]),f=(0,r.useCallback)((()=>{if(!s)return;const e=p();h.find((t=>t.id===e.id))||m((t=>[...t,e]))}),[p,h,s]);return(0,r.useEffect)((()=>{c(-1!==u.dataIdx&&-1!==u.seriesIdx)}),[u]),Ar("click",f),{showTooltip:s,stickyTooltips:h,handleUnStick:e=>{m((t=>t.filter((t=>t.id!==e))))},getTooltipProps:p,seriesFocus:(e,t)=>{const n=null!==t&&void 0!==t?t:-1;d((e=>({...e,seriesIdx:n})))},setCursor:e=>{var t;const n=null!==(t=e.cursor.idx)&&void 0!==t?t:-1;d((e=>({...e,dataIdx:n})))},resetTooltips:()=>{m([]),d({seriesIdx:-1,dataIdx:-1})}}},Ah=e=>{let{u:t,id:n,title:a,dates:o,value:i,point:l,unit:s="",info:c,statsFormatted:u,isSticky:d,marker:h,onClose:m}=e;const p=(0,r.useRef)(null),[f,v]=(0,r.useState)({top:-999,left:-999}),[g,y]=(0,r.useState)(!1),[_,b]=(0,r.useState)(!1),w=(0,r.useCallback)((e=>{if(!g)return;const{clientX:t,clientY:n}=e;v({top:n,left:t})}),[g]);return(0,r.useEffect)((()=>{if(!p.current||!t)return;const{top:e,left:n}=l,r=parseFloat(t.over.style.left),a=parseFloat(t.over.style.top),{width:o,height:i}=t.over.getBoundingClientRect(),{width:s,height:c}=p.current.getBoundingClientRect(),u={top:e+a+10-(e+c>=i?c+20:0),left:n+r+10-(n+s>=o?s+20:0)};u.left<0&&(u.left=20),u.top<0&&(u.top=20),v(u)}),[t,i,l,p]),Ar("mousemove",w),Ar("mouseup",(()=>{y(!1)})),t?r.default.createPortal(Nt("div",{className:Cr()({"vm-chart-tooltip":!0,"vm-chart-tooltip_sticky":d,"vm-chart-tooltip_moved":_}),ref:p,style:f,children:[Nt("div",{className:"vm-chart-tooltip-header",children:[a&&Nt("div",{className:"vm-chart-tooltip-header__title",children:a}),Nt("div",{className:"vm-chart-tooltip-header__date",children:o.map(((e,t)=>Nt("span",{children:e},t)))}),d&&Nt(Ct.FK,{children:[Nt(la,{className:"vm-chart-tooltip-header__drag",variant:"text",size:"small",startIcon:Nt(ar,{}),onMouseDown:e=>{b(!0),y(!0);const{clientX:t,clientY:n}=e;v({top:n,left:t})},ariaLabel:"drag the tooltip"}),Nt(la,{className:"vm-chart-tooltip-header__close",variant:"text",size:"small",startIcon:Nt(In,{}),onClick:()=>{m&&m(n)},ariaLabel:"close the tooltip"})]})]}),Nt("div",{className:"vm-chart-tooltip-data",children:[h&&Nt("span",{className:"vm-chart-tooltip-data__marker",style:{background:h}}),Nt("p",{className:"vm-chart-tooltip-data__value",children:[Nt("b",{children:i}),s]})]}),u&&Nt("table",{className:"vm-chart-tooltip-stats",children:ct.map(((e,t)=>Nt("div",{className:"vm-chart-tooltip-stats-row",children:[Nt("span",{className:"vm-chart-tooltip-stats-row__key",children:[e,":"]}),Nt("span",{className:"vm-chart-tooltip-stats-row__value",children:u[e]})]},t)))}),c&&Nt("p",{className:"vm-chart-tooltip__info",children:c})]}),t.root):null},Mh=e=>{let{showTooltip:t,tooltipProps:n,stickyTooltips:a,handleUnStick:o}=e;return Nt(Ct.FK,{children:[t&&n&&Nt(Ah,{...n}),a.map((e=>(0,r.createElement)(Ah,{...e,isSticky:!0,key:e.id,onClose:o})))]})},Th=e=>{let{data:t,series:n,metrics:a=[],period:o,yaxis:i,unit:l,setPeriod:s,layoutSize:c,height:u,isAnomalyView:d,spanGaps:h=!1}=e;const{isDarkTheme:m}=Mt(),p=(0,r.useRef)(null),[f,v]=(0,r.useState)(),{xRange:g,setPlotScale:y}=Eh({period:o,setPeriod:s}),{onReadyChart:_,isPanning:b}=xh(y);Ch({uPlotInst:f,xRange:g,setPlotScale:y});const{showTooltip:w,stickyTooltips:k,handleUnStick:x,getTooltipProps:S,seriesFocus:C,setCursor:E,resetTooltips:N}=Nh({u:f,metrics:a,series:n,unit:l,isAnomalyView:d}),A={...ph({width:c.width,height:u}),series:n,axes:Yd([{},{scale:"1"}],l),scales:yh(i,g),hooks:{ready:[_],setSeries:[C],setCursor:[E],setSelect:[_h(y)],destroy:[fh]},bands:[]};return(0,r.useEffect)((()=>{if(N(),!p.current)return;f&&f.destroy();const e=new Fd(A,t,p.current);return v(e),e.destroy}),[p,m]),(0,r.useEffect)((()=>{f&&(f.setData(t),f.redraw())}),[t]),(0,r.useEffect)((()=>{f&&(ch(f),function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t.forEach((t=>{t.label&&(t.spanGaps=n),e.addSeries(t)}))}(f,n,h),((e,t)=>{if(e.delBand(),t.length<2)return;const n=t.map(((e,t)=>({...e,index:t}))),r=n.filter((e=>e.forecast===ht.yhatUpper)),a=n.filter((e=>e.forecast===ht.yhatLower)),o=r.map((e=>{const t=a.find((t=>t.forecastGroup===e.forecastGroup));return t?{series:[e.index,t.index],fill:bh(ht.yhatUpper)}:null})).filter((e=>null!==e));o.length&&o.forEach((t=>{e.addBand(t)}))})(f,n),f.redraw())}),[n,h]),(0,r.useEffect)((()=>{f&&(Object.keys(i.limits.range).forEach((e=>{f.scales[e]&&(f.scales[e].range=function(t){return gh(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,e,i)})})),f.redraw())}),[i]),(0,r.useEffect)((()=>{f&&(f.scales.x.range=()=>vh(g),f.redraw())}),[g]),(0,r.useEffect)((()=>{f&&(f.setSize({width:c.width||400,height:u||500}),f.redraw())}),[u,c]),Nt("div",{className:Cr()({"vm-line-chart":!0,"vm-line-chart_panning":b}),style:{minWidth:"".concat(c.width||400,"px"),minHeight:"".concat(u||500,"px")},children:[Nt("div",{className:"vm-line-chart__u-plot",ref:p}),Nt(Mh,{showTooltip:w,tooltipProps:S(),stickyTooltips:k,handleUnStick:x})]})},Lh=e=>{let{legend:t,onChange:n,isHeatmap:a,isAnomalyView:o}=e;const i=fl(),l=(0,r.useMemo)((()=>{const e=(e=>{const t=Object.keys(e.freeFormFields).filter((e=>"__name__"!==e));return t.map((t=>{const n="".concat(t,"=").concat(JSON.stringify(e.freeFormFields[t]));return{id:"".concat(e.label,".").concat(n),freeField:n,key:t}}))})(t);return a?e.filter((e=>"vmrange"!==e.key)):e}),[t,a]),s=t.statsFormatted,c=Object.values(s).some((e=>e)),u=e=>t=>{t.stopPropagation(),(async e=>{await i(e,"".concat(e," has been copied"))})(e)};return Nt("div",{className:Cr()({"vm-legend-item":!0,"vm-legend-row":!0,"vm-legend-item_hide":!t.checked&&!a,"vm-legend-item_static":a}),onClick:(e=>t=>{n&&n(e,t.ctrlKey||t.metaKey)})(t),children:[!o&&!a&&Nt("div",{className:"vm-legend-item__marker",style:{backgroundColor:t.color}}),Nt("div",{className:"vm-legend-item-info",children:Nt("span",{className:"vm-legend-item-info__label",children:[t.freeFormFields.__name__,!!l.length&&Nt(Ct.FK,{children:"{"}),l.map(((e,t)=>Nt("span",{className:"vm-legend-item-info__free-fields",onClick:u(e.freeField),title:"copy to clipboard",children:[e.freeField,t+1Nt("div",{className:"vm-legend-item-stats-row",children:[Nt("span",{className:"vm-legend-item-stats-row__key",children:[e,":"]}),Nt("span",{className:"vm-legend-item-stats-row__value",children:s[e]})]},t)))})]})},Ih=e=>{let{labels:t,query:n,isAnomalyView:a,onChange:o}=e;const i=(0,r.useMemo)((()=>Array.from(new Set(t.map((e=>e.group))))),[t]),l=i.length>1;return Nt(Ct.FK,{children:Nt("div",{className:"vm-legend",children:i.map((e=>Nt("div",{className:"vm-legend-group",children:Nt(wo,{defaultExpanded:!0,title:Nt("div",{className:"vm-legend-group-title",children:[l&&Nt("span",{className:"vm-legend-group-title__count",children:["Query ",e,": "]}),Nt("span",{className:"vm-legend-group-title__query",children:n[e-1]})]}),children:Nt("div",{children:t.filter((t=>t.group===e)).sort(((e,t)=>(t.median||0)-(e.median||0))).map((e=>Nt(Lh,{legend:e,isAnomalyView:a,onChange:o},e.label)))})})},e)))})})},Ph=e=>{var t;let{min:n,max:a,legendValue:o,series:i}=e;const[l,s]=(0,r.useState)(0),[c,u]=(0,r.useState)(""),[d,h]=(0,r.useState)(""),[m,p]=(0,r.useState)(""),f=(0,r.useMemo)((()=>parseFloat(String((null===o||void 0===o?void 0:o.value)||0).replace("%",""))),[o]);return(0,r.useEffect)((()=>{s(f?(f-n)/(a-n)*100:0),u(f?"".concat(f,"%"):""),h("".concat(n,"%")),p("".concat(a,"%"))}),[f,n,a]),Nt("div",{className:"vm-legend-heatmap__wrapper",children:[Nt("div",{className:"vm-legend-heatmap",children:[Nt("div",{className:"vm-legend-heatmap-gradient",style:{background:"linear-gradient(to right, ".concat(Xd.join(", "),")")},children:!!f&&Nt("div",{className:"vm-legend-heatmap-gradient__value",style:{left:"".concat(l,"%")},children:Nt("span",{children:c})})}),Nt("div",{className:"vm-legend-heatmap__value",children:d}),Nt("div",{className:"vm-legend-heatmap__value",children:m})]}),i[1]&&Nt(Lh,{legend:i[1],isHeatmap:!0},null===(t=i[1])||void 0===t?void 0:t.label)]})},Oh=e=>{let{u:t,metrics:n,unit:a}=e;const[i,l]=(0,r.useState)({left:0,top:0}),[s,c]=(0,r.useState)([]),u=(0,r.useCallback)((()=>{var e;const{left:r,top:l}=i,s=it()(t,["data",1,0],[])||[],c=t?t.posToVal(r,"x"):0,u=t?t.posToVal(l,"y"):0,d=s.findIndex(((e,t)=>c>=e&&ce[0]===h))||[],v=s[d],g=o()(1e3*v).tz().format(Ot),y=o()(1e3*p).tz().format(Ot),_=(null===m||void 0===m||null===(e=m.metric)||void 0===e?void 0:e.vmrange)||"";return{unit:a,point:i,u:t,id:"".concat(_,"_").concat(g),dates:[g,y],value:"".concat(f,"%"),info:_,show:+f>0}}),[t,i,n,a]),d=(0,r.useCallback)((()=>{const e=u();e.show&&(s.find((t=>t.id===e.id))||c((t=>[...t,e])))}),[u,s]);return Ar("click",d),{stickyTooltips:s,handleUnStick:e=>{c((t=>t.filter((t=>t.id!==e))))},getTooltipProps:u,setCursor:e=>{const t=e.cursor.left||0,n=e.cursor.top||0;l({left:t,top:n})},resetTooltips:()=>{c([]),l({left:0,top:0})}}},Rh=e=>{let{data:t,metrics:n=[],period:a,unit:o,setPeriod:i,layoutSize:l,height:s,onChangeLegend:c}=e;const{isDarkTheme:u}=Mt(),d=(0,r.useRef)(null),[h,m]=(0,r.useState)(),{xRange:p,setPlotScale:f}=Eh({period:a,setPeriod:i}),{onReadyChart:v,isPanning:g}=xh(f);Ch({uPlotInst:h,xRange:p,setPlotScale:f});const{stickyTooltips:y,handleUnStick:_,getTooltipProps:b,setCursor:w,resetTooltips:k}=Oh({u:h,metrics:n,unit:o}),x=(0,r.useMemo)((()=>b()),[b]),S={...ph({width:l.width,height:s}),mode:2,series:[{},{paths:eh(),facets:[{scale:"x",auto:!0,sorted:1},{scale:"y",auto:!0}]}],axes:(()=>{const e=Yd([{}],o);return[...e,{scale:"y",stroke:e[0].stroke,font:e[0].font,size:Kd,splits:n.map(((e,t)=>t)),values:n.map((e=>e.metric.vmrange))}]})(),scales:{x:{time:!0},y:{log:2,time:!1,range:(e,t,n)=>[t-1,n+1]}},hooks:{ready:[v],setCursor:[w],setSelect:[_h(f)],destroy:[fh]}};return(0,r.useEffect)((()=>{k();const e=null===t[0]&&Array.isArray(t[1]);if(!d.current||!e)return;const n=new Fd(S,t,d.current);return m(n),n.destroy}),[d,t,u]),(0,r.useEffect)((()=>{h&&(h.setSize({width:l.width||400,height:s||500}),h.redraw())}),[s,l]),(0,r.useEffect)((()=>{c(x)}),[x]),Nt("div",{className:Cr()({"vm-line-chart":!0,"vm-line-chart_panning":g}),style:{minWidth:"".concat(l.width||400,"px"),minHeight:"".concat(s||500,"px")},children:[Nt("div",{className:"vm-line-chart__u-plot",ref:d}),Nt(Mh,{showTooltip:!!x.show,tooltipProps:x,stickyTooltips:y,handleUnStick:_})]})},Dh=()=>{const[e,t]=(0,r.useState)(null),[n,a]=(0,r.useState)({width:0,height:0}),o=(0,r.useCallback)((()=>{a({width:(null===e||void 0===e?void 0:e.offsetWidth)||0,height:(null===e||void 0===e?void 0:e.offsetHeight)||0})}),[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]);return Ar("resize",o),(0,r.useEffect)(o,[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]),[t,n]},zh={[ht.yhat]:"yhat",[ht.yhatLower]:"yhat_upper - yhat_lower",[ht.yhatUpper]:"yhat_upper - yhat_lower",[ht.anomaly]:"anomalies",[ht.training]:"training data",[ht.actual]:"y"},Fh=e=>{let{series:t}=e;const n=(0,r.useMemo)((()=>{const e=t.reduce(((e,t)=>{const n=Object.prototype.hasOwnProperty.call(t,"forecast"),r=t.forecast!==ht.yhatUpper,a=!e.find((e=>e.forecast===t.forecast));return n&&a&&r&&e.push(t),e}),[]),n={...e[0],forecast:ht.training,color:Gd[ht.training]};return e.splice(1,0,n),e.map((e=>({...e,color:"string"===typeof e.stroke?e.stroke:Gd[e.forecast||ht.actual]})))}),[t]);return Nt(Ct.FK,{children:Nt("div",{className:"vm-legend-anomaly",children:n.filter((e=>e.forecast!==ht.training)).map(((e,t)=>{var n;return Nt("div",{className:"vm-legend-anomaly-item",children:[Nt("svg",{children:e.forecast===ht.anomaly?Nt("circle",{cx:"15",cy:"7",r:"4",fill:e.color,stroke:e.color,strokeWidth:"1.4"}):Nt("line",{x1:"0",y1:"7",x2:"30",y2:"7",stroke:e.color,strokeWidth:e.width||1,strokeDasharray:null===(n=e.dash)||void 0===n?void 0:n.join(",")})}),Nt("div",{className:"vm-legend-anomaly-item__title",children:zh[e.forecast||ht.actual]})]},"".concat(t,"_").concat(e.forecast))}))})})},jh=e=>{let{data:t=[],period:n,customStep:a,query:o,yaxis:i,unit:l,showLegend:s=!0,setYaxisLimits:c,setPeriod:u,alias:d=[],fullWidth:h=!0,height:m,isHistogram:p,isAnomalyView:f,spanGaps:v}=e;const{isMobile:g}=ea(),{timezone:y}=fn(),_=(0,r.useMemo)((()=>a||n.step||"1s"),[n.step,a]),b=(0,r.useMemo)((()=>rh(t,p)),[p,t]),[w,k]=(0,r.useState)([[]]),[x,S]=(0,r.useState)([]),[C,E]=(0,r.useState)([]),[N,A]=(0,r.useState)([]),[M,T]=(0,r.useState)(null),L=(0,r.useMemo)((()=>oh(b,N,d,f)),[b,N,d,f]),I=e=>{const t=((e,t)=>{const n={},r=Object.values(e).flat(),a=Hd(r)||0,o=jd(r)||1;return n[1]=t?Wd(a,o):[a,o],n})(e,!p);c(t)},P=e=>{if(!f)return e;const t=function(e,t){const n=e.reduce(((e,n)=>{const r=t.map((e=>"".concat(e,": ").concat(n[e]||"-"))).join("|");return(e[r]=e[r]||[]).push(n),e}),{});return Object.entries(n).map((e=>{let[t,n]=e;return{keys:t.split("|"),values:n}}))}(e,["group","label"]);return t.map((e=>{const t=e.values[0];return{...t,freeFormFields:{...t.freeFormFields,__name__:""}}}))};(0,r.useEffect)((()=>{const e=[],t={},r=[],a=[{}];null===b||void 0===b||b.forEach(((n,o)=>{const i=L(n,o);a.push(i),r.push(lh(i,n.group));const l=t[n.group]||[];for(const t of n.values)e.push(t[0]),l.push(Nl(t[1]));t[n.group]=l}));const o=((e,t,n)=>{const r=Qt(t)||1,a=Array.from(new Set(e)).sort(((e,t)=>e-t));let o=n.start;const i=qt(n.end+r);let l=0;const s=[];for(;o<=i;){for(;l=a.length||a[l]>o)&&s.push(o)}for(;s.length<2;)s.push(o),o=qt(o+r);return s})(e,_,n),i=b.map((e=>{const t=[],n=e.values,r=n.length;let a=0;for(const u of o){for(;anull!==e)),l=Math.abs((e=>{let t=e[0],n=1;for(let r=1;r1e10*c&&!f?t.map((()=>l)):t}));i.unshift(o),I(t);const l=p?(e=>{const t=e.slice(1,e.length),n=[],r=[];t.forEach(((e,n)=>{e.forEach(((e,a)=>{const o=a*t.length+n;r[o]=e}))})),e[0].forEach((e=>{const r=new Array(t.length).fill(e);n.push(...r)}));const a=new Array(n.length).fill(0).map(((e,n)=>n%t.length));return[null,[n,a,r]]})(i):i;k(l),S(a);const s=P(r);E(s),f&&A(s.map((e=>e.label||"")).slice(1))}),[b,y,p]),(0,r.useEffect)((()=>{const e=[],t=[{}];null===b||void 0===b||b.forEach(((n,r)=>{const a=L(n,r);t.push(a),e.push(lh(a,n.group))})),S(t),E(P(e))}),[N]);const[O,R]=Dh();return Nt("div",{className:Cr()({"vm-graph-view":!0,"vm-graph-view_full-width":h,"vm-graph-view_full-width_mobile":h&&g}),ref:O,children:[!p&&Nt(Th,{data:w,series:x,metrics:b,period:n,yaxis:i,unit:l,setPeriod:u,layoutSize:R,height:m,isAnomalyView:f,spanGaps:v}),p&&Nt(Rh,{data:w,metrics:b,period:n,unit:l,setPeriod:u,layoutSize:R,height:m,onChangeLegend:T}),f&&s&&Nt(Fh,{series:x}),!p&&s&&Nt(Ih,{labels:C,query:o,isAnomalyView:f,onChange:(e,t)=>{A((e=>{let{hideSeries:t,legend:n,metaKey:r,series:a,isAnomalyView:o}=e;const{label:i}=n,l=sh(i,t),s=a.map((e=>e.label||""));return o?s.filter((e=>e!==i)):r?l?t.filter((e=>e!==i)):[...t,i]:t.length?l?[...s.filter((e=>e!==i))]:[]:[...s.filter((e=>e!==i))]})({hideSeries:N,legend:e,metaKey:t,series:x,isAnomalyView:f}))}}),p&&s&&Nt(Ph,{series:x,min:i.limits.range[1][0]||0,max:i.limits.range[1][1]||0,legendValue:M})]})},Hh=e=>{let{yaxis:t,setYaxisLimits:n,toggleEnableLimits:a}=e;const{isMobile:o}=ea(),i=(0,r.useMemo)((()=>Object.keys(t.limits.range)),[t.limits.range]),l=(0,r.useCallback)($o()(((e,r,a)=>{const o=t.limits.range;o[r][a]=+e,o[r][0]===o[r][1]||o[r][0]>o[r][1]||n(o)}),500),[t.limits.range]),s=(e,t)=>n=>{l(n,e,t)};return Nt("div",{className:Cr()({"vm-axes-limits":!0,"vm-axes-limits_mobile":o}),children:[Nt(Mo,{value:t.limits.enable,onChange:a,label:"Fix the limits for y-axis",fullWidth:o}),Nt("div",{className:"vm-axes-limits-list",children:i.map((e=>Nt("div",{className:"vm-axes-limits-list__inputs",children:[Nt(Ya,{label:"Min ".concat(e),type:"number",disabled:!t.limits.enable,value:t.limits.range[e][0],onChange:s(e,0)}),Nt(Ya,{label:"Max ".concat(e),type:"number",disabled:!t.limits.enable,value:t.limits.range[e][1],onChange:s(e,1)})]},e)))})]})},Vh=e=>{let{spanGaps:t,onChange:n}=e;const{isMobile:r}=ea();return Nt("div",{children:Nt(Mo,{value:t,onChange:n,label:"Connect null values",fullWidth:r})})},$h="Graph settings",Uh=e=>{let{yaxis:t,setYaxisLimits:n,toggleEnableLimits:a,spanGaps:o}=e;const i=(0,r.useRef)(null),l=(0,r.useRef)(null),{value:s,toggle:c,setFalse:u}=ca(!1);return Nt("div",{className:"vm-graph-settings",children:[Nt(ya,{title:$h,children:Nt("div",{ref:l,children:Nt(la,{variant:"text",startIcon:Nt(Ln,{}),onClick:c,ariaLabel:"settings"})})}),Nt(sa,{open:s,buttonRef:l,placement:"bottom-right",onClose:u,title:$h,children:Nt("div",{className:"vm-graph-settings-popper",ref:i,children:Nt("div",{className:"vm-graph-settings-popper__body",children:[Nt(Hh,{yaxis:t,setYaxisLimits:n,toggleEnableLimits:a}),Nt(Vh,{spanGaps:o.value,onChange:o.onChange})]})})})]})},Bh=e=>{let{isHistogram:t,graphData:n,controlsRef:a,isAnomalyView:o}=e;const{isMobile:i}=ea(),{customStep:l,yaxis:s,spanGaps:c}=Ur(),{period:u}=fn(),{query:d}=Cn(),h=vn(),m=Br(),p=e=>{m({type:"SET_YAXIS_LIMITS",payload:e})},f=Nt("div",{className:"vm-custom-panel-body-header__graph-controls",children:[Nt(xa,{}),Nt(Uh,{yaxis:s,setYaxisLimits:p,toggleEnableLimits:()=>{m({type:"TOGGLE_ENABLE_YAXIS_LIMITS"})},spanGaps:{value:c,onChange:e=>{m({type:"SET_SPAN_GAPS",payload:e})}}})]});return Nt(Ct.FK,{children:[a.current&&(0,r.createPortal)(f,a.current),Nt(jh,{data:n,period:u,customStep:l,query:d,yaxis:s,setYaxisLimits:p,setPeriod:e=>{let{from:t,to:n}=e;h({type:"SET_PERIOD",payload:{from:t,to:n}})},height:i?.5*window.innerHeight:500,isHistogram:t,isAnomalyView:o,spanGaps:c})]})},qh=e=>{let{data:t}=e;const n=fl(),a=(0,r.useMemo)((()=>{const e=t.map((e=>1===Object.keys(e).length?JSON.stringify(e):JSON.stringify(e,null,2))).join(",\n").replace(/^/gm,"".concat(" "));return"[\n".concat(e,"\n]")}),[t]);return Nt("div",{className:"vm-json-view",children:[Nt("div",{className:"vm-json-view__copy",children:Nt(la,{variant:"outlined",onClick:async()=>{await n(a,"Formatted JSON has been copied")},children:"Copy JSON"})}),Nt("pre",{className:"vm-json-view__code",children:Nt("code",{children:a})})]})},Yh=e=>{const t={};return e.forEach((e=>Object.entries(e.metric).forEach((e=>t[e[0]]?t[e[0]].options.add(e[1]):t[e[0]]={options:new Set([e[1]])})))),Object.entries(t).map((e=>({key:e[0],variations:e[1].options.size}))).sort(((e,t)=>e.variations-t.variations))},Wh=(e,t)=>(0,r.useMemo)((()=>{if(!t)return[];return Yh(e).filter((e=>t.includes(e.key)))}),[e,t]),Kh=e=>{let{data:t,displayColumns:n}=e;const a=fl(),{isMobile:o}=ea(),{tableCompact:i}=Fr(),l=(0,r.useRef)(null),[s,c]=(0,r.useState)(""),[u,d]=(0,r.useState)("asc"),h=i?Wh([{group:0,metric:{Data:"Data"}}],["Data"]):Wh(t,n),m=e=>{const{__name__:t,...n}=e;return t||Object.keys(n).length?t?"".concat(t," ").concat(JSON.stringify(n)):"".concat(JSON.stringify(n)):""},p=new Set(null===t||void 0===t?void 0:t.map((e=>e.group))).size>1,f=(0,r.useMemo)((()=>{const e=null===t||void 0===t?void 0:t.map((e=>({metadata:h.map((t=>i?El(e,"",p):e.metric[t.key]||"-")),value:e.value?e.value[1]:"-",values:e.values?e.values.map((e=>{let[t,n]=e;return"".concat(n," @").concat(t)})):[],copyValue:m(e.metric)}))),n="Value"===s,r=h.findIndex((e=>e.key===s));return n||-1!==r?e.sort(((e,t)=>{const a=n?Number(e.value):e.metadata[r],o=n?Number(t.value):t.metadata[r];return("asc"===u?ao)?-1:1})):e}),[h,t,s,u,i]),v=(0,r.useMemo)((()=>f.some((e=>e.copyValue))),[f]),g=e=>()=>{(e=>{d((t=>"asc"===t&&s===e?"desc":"asc")),c(e)})(e)};return f.length?Nt("div",{className:Cr()({"vm-table-view":!0,"vm-table-view_mobile":o}),children:Nt("table",{className:"vm-table",ref:l,children:[Nt("thead",{className:"vm-table-header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:[h.map(((e,t)=>Nt("td",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:g(e.key),children:Nt("div",{className:"vm-table-cell__content",children:[e.key,Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":s===e.key,"vm-table__sort-icon_desc":"desc"===u&&s===e.key}),children:Nt(Hn,{})})]})},t))),Nt("td",{className:"vm-table-cell vm-table-cell_header vm-table-cell_right vm-table-cell_sort",onClick:g("Value"),children:Nt("div",{className:"vm-table-cell__content",children:[Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":"Value"===s,"vm-table__sort-icon_desc":"desc"===u}),children:Nt(Hn,{})}),"Value"]})}),v&&Nt("td",{className:"vm-table-cell vm-table-cell_header"})]})}),Nt("tbody",{className:"vm-table-body",children:f.map(((e,t)=>{return Nt("tr",{className:"vm-table__row",children:[e.metadata.map(((e,n)=>Nt("td",{className:Cr()({"vm-table-cell vm-table-cell_no-wrap":!0,"vm-table-cell_gray":f[t-1]&&f[t-1].metadata[n]===e}),children:e},n))),Nt("td",{className:"vm-table-cell vm-table-cell_right vm-table-cell_no-wrap",children:e.values.length?e.values.map((e=>Nt("p",{children:e},e))):e.value}),v&&Nt("td",{className:"vm-table-cell vm-table-cell_right",children:e.copyValue&&Nt("div",{className:"vm-table-cell__content",children:Nt(ya,{title:"Copy row",children:Nt(la,{variant:"text",color:"gray",size:"small",startIcon:Nt(rr,{}),onClick:(n=e.copyValue,async()=>{await a(n,"Row has been copied")}),ariaLabel:"copy row"})})})})]},t);var n}))})]})}):Nt(na,{variant:"warning",children:"No data to show"})},Qh=e=>{let{checked:t=!1,disabled:n=!1,label:r,color:a="secondary",onChange:o}=e;return Nt("div",{className:Cr()({"vm-checkbox":!0,"vm-checkbox_disabled":n,"vm-checkbox_active":t,["vm-checkbox_".concat(a,"_active")]:t,["vm-checkbox_".concat(a)]:a}),onClick:()=>{n||o(!t)},children:[Nt("div",{className:"vm-checkbox-track",children:Nt("div",{className:"vm-checkbox-track__thumb",children:Nt(Xn,{})})}),r&&Nt("span",{className:"vm-checkbox__label",children:r})]})},Zh="Table settings",Gh=e=>{let{columns:t,defaultColumns:n=[],tableCompact:a,onChangeColumns:o,toggleTableCompact:i}=e;const{isMobile:l}=ea(),s=(0,r.useRef)(null),{value:c,toggle:u,setFalse:d}=ca(!1),{value:h,toggle:m}=ca(!1),[p,f]=(0,r.useState)(""),[v,g]=(0,r.useState)(-1),y=(0,r.useMemo)((()=>p?t.filter((e=>e.includes(p))):t),[t,p]),_=(0,r.useMemo)((()=>y.every((e=>n.includes(e)))),[n,y]),b=(0,r.useMemo)((()=>!t.length),[t]),w=e=>{o(n.includes(e)?n.filter((t=>t!==e)):[...n,e])};return(0,r.useEffect)((()=>{pl(t,n)||o(t)}),[t]),Nt("div",{className:"vm-table-settings",children:[Nt(ya,{title:Zh,children:Nt("div",{ref:s,children:Nt(la,{variant:"text",startIcon:Nt(Ln,{}),onClick:u,disabled:b,ariaLabel:Zh})})}),Nt(sa,{open:c,onClose:d,placement:"bottom-right",buttonRef:s,title:Zh,children:Nt("div",{className:Cr()({"vm-table-settings-popper":!0,"vm-table-settings-popper_mobile":l}),children:[Nt("div",{className:"vm-table-settings-popper-list vm-table-settings-popper-list_first",children:Nt(Mo,{label:"Compact view",value:a,onChange:i})}),Nt("div",{className:"vm-table-settings-popper-list",children:Nt("div",{children:[Nt("div",{className:"vm-table-settings-popper-list-header",children:[Nt("h3",{className:"vm-table-settings-popper-list-header__title",children:"Display columns"}),Nt(ya,{title:"search column",children:Nt(la,{color:"primary",variant:"text",onClick:m,startIcon:Nt(xr,{}),ariaLabel:"reset columns"})})]}),h&&Nt(Ya,{placeholder:"search column",startIcon:Nt(xr,{}),value:p,onChange:f,onBlur:()=>{g(-1)},onKeyDown:e=>{const t="ArrowUp"===e.key,n="ArrowDown"===e.key,r="Enter"===e.key;(n||t||r)&&e.preventDefault(),n?g((e=>e+1>y.length-1?e:e+1)):t?g((e=>e-1<0?e:e-1)):r&&w(y[v])},type:"search"}),!y.length&&Nt("p",{className:"vm-table-settings-popper-list__no-found",children:"No columns found"}),Nt("div",{className:"vm-table-settings-popper-list-header",children:!!y.length&&Nt("div",{className:"vm-table-settings-popper-list__item vm-table-settings-popper-list__item_check_all",children:Nt(Qh,{checked:_,onChange:()=>{o(_?n.filter((e=>!y.includes(e))):y)},label:_?"Uncheck all":"Check all",disabled:a})})}),Nt("div",{className:"vm-table-settings-popper-list-columns",children:y.map(((e,t)=>{return Nt("div",{className:Cr()({"vm-table-settings-popper-list__item":!0,"vm-table-settings-popper-list__item_focus":t===v}),children:Nt(Qh,{checked:n.includes(e),onChange:(r=e,()=>{w(r)}),label:e,disabled:a})},e);var r}))})]})})]})})]})},Jh=e=>{let{liveData:t,controlsRef:n}=e;const{tableCompact:a}=Fr(),o=jr(),[i,l]=(0,r.useState)(),s=(0,r.useMemo)((()=>Yh(t||[]).map((e=>e.key))),[t]),c=Nt(Gh,{columns:s,defaultColumns:i,onChangeColumns:l,tableCompact:a,toggleTableCompact:()=>{o({type:"TOGGLE_TABLE_COMPACT"})}});return Nt(Ct.FK,{children:[n.current&&(0,r.createPortal)(c,n.current),Nt(Kh,{data:t,displayColumns:i})]})},Xh=e=>{let{graphData:t,liveData:n,isHistogram:r,displayType:a,controlsRef:o}=e;return a===mt.code&&n?Nt(qh,{data:n}):a===mt.table&&n?Nt(Jh,{liveData:n,controlsRef:o}):a===mt.chart&&t?Nt(Bh,{graphData:t,isHistogram:r,controlsRef:o}):null},em=[Nt(Ct.FK,{children:[Nt("p",{children:"Filename - specify the name for your report file."}),Nt("p",{children:["Default format: ",Nt("code",{children:["vmui_report_$",Dt,".json"]}),"."]}),Nt("p",{children:"This name will be used when saving your report on your device."})]}),Nt(Ct.FK,{children:[Nt("p",{children:"Comment (optional) - add a comment to your report."}),Nt("p",{children:"This can be any additional information that will be useful when reviewing the report later."})]}),Nt(Ct.FK,{children:[Nt("p",{children:"Query trace - enable this option to include a query trace in your report."}),Nt("p",{children:"This will assist in analyzing and diagnosing the query processing."})]}),Nt(Ct.FK,{children:[Nt("p",{children:"Generate Report - click this button to generate and save your report. "}),Nt("p",{children:["After creation, the report can be downloaded and examined on the ",Nt(Re,{to:We.queryAnalyzer,target:"_blank",rel:"noreferrer",className:"vm-link vm-link_underlined",children:Ye[We.queryAnalyzer].title})," page."]})]})],tm=()=>"vmui_report_".concat(o()().utc().format(Dt)),nm=e=>{let{fetchUrl:t}=e;const{query:n}=Cn(),[a,o]=(0,r.useState)(tm()),[i,l]=(0,r.useState)(""),[s,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(),[h,m]=(0,r.useState)(!1),p=(0,r.useRef)(null),f=(0,r.useRef)(null),v=(0,r.useRef)(null),g=(0,r.useRef)(null),y=[p,f,v,g],[_,b]=(0,r.useState)(0),{value:w,toggle:k,setFalse:x}=ca(!1),{value:S,toggle:C,setFalse:E}=ca(!1),N=(0,r.useMemo)((()=>{if(t)return t.map(((e,t)=>{const n=new URL(e);return s?n.searchParams.set("trace","1"):n.searchParams.delete("trace"),{id:t,url:n}}))}),[t,s]),A=(0,r.useCallback)((e=>{const t=JSON.stringify(e,null,2),n=new Blob([t],{type:"application/json"}),r=URL.createObjectURL(n),o=document.createElement("a");o.href=r,o.download="".concat(a||tm(),".json"),document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(r),x()}),[a]),M=(0,r.useCallback)((async()=>{if(N){d(""),m(!0);try{const e=[];for await(const{url:t,id:n}of N){const r=await fetch(t),a=await r.json();if(r.ok)a.vmui={id:n,comment:i,params:at().parse(new URL(t).search.replace(/^\?/,""))},e.push(a);else{const e=a.errorType?"".concat(a.errorType,"\r\n"):"";d("".concat(e).concat((null===a||void 0===a?void 0:a.error)||(null===a||void 0===a?void 0:a.message)||"unknown error"))}}e.length&&A(e)}catch(Lp){Lp instanceof Error&&"AbortError"!==Lp.name&&d("".concat(Lp.name,": ").concat(Lp.message))}finally{m(!1)}}else d(pt.validQuery)}),[N,i,A,n]),T=e=>()=>{b((t=>t+e))};return(0,r.useEffect)((()=>{d(""),o(tm()),l("")}),[w]),(0,r.useEffect)((()=>{b(0)}),[S]),Nt(Ct.FK,{children:[Nt(ya,{title:"Export query",children:Nt(la,{variant:"text",startIcon:Nt(br,{}),onClick:k,ariaLabel:"export query"})}),w&&Nt(ga,{title:"Export query",onClose:x,isOpen:w,children:Nt("div",{className:"vm-download-report",children:[Nt("div",{className:"vm-download-report-settings",children:[Nt("div",{ref:p,children:Nt(Ya,{label:"Filename",value:a,onChange:o})}),Nt("div",{ref:f,children:Nt(Ya,{type:"textarea",label:"Comment",value:i,onChange:l})}),Nt("div",{ref:v,children:Nt(Qh,{checked:s,onChange:c,label:"Include query trace"})})]}),u&&Nt(na,{variant:"error",children:u}),Nt("div",{className:"vm-download-report__buttons",children:[Nt(la,{variant:"text",onClick:C,children:"Help"}),Nt("div",{ref:g,children:Nt(la,{onClick:M,disabled:h,children:h?"Loading data...":"Generate Report"})})]}),Nt(sa,{open:S,buttonRef:y[_],placement:"top-left",variant:"dark",onClose:E,children:Nt("div",{className:"vm-download-report-helper",children:[Nt("div",{className:"vm-download-report-helper__description",children:em[_]}),Nt("div",{className:"vm-download-report-helper__buttons",children:[0!==_&&Nt(la,{onClick:T(-1),size:"small",color:"white",children:"Prev"}),Nt(la,{onClick:_===y.length-1?E:T(1),size:"small",color:"white",variant:"text",children:_===y.length-1?"Close":"Next"})]})]})})]})})]})},rm=()=>{Ll();const{isMobile:e}=ea(),{displayType:t}=Fr(),{query:n}=Cn(),{customStep:a}=Ur(),o=Br(),[i,l]=(0,r.useState)([]),[s,c]=(0,r.useState)(!n[0]),[u,d]=(0,r.useState)(!1),h=(0,r.useRef)(null),{fetchUrl:m,isLoading:p,liveData:f,graphData:v,error:g,queryErrors:y,setQueryErrors:_,queryStats:b,warning:w,traces:k,isHistogram:x}=Tl({visible:!0,customStep:a,hideQuery:i,showAllSeries:u}),S=!(null!==f&&void 0!==f&&f.length)&&t!==mt.chart,C=!s&&g;return(0,r.useEffect)((()=>{o({type:"SET_IS_HISTOGRAM",payload:x})}),[v]),Nt("div",{className:Cr()({"vm-custom-panel":!0,"vm-custom-panel_mobile":e}),children:[Nt(xl,{queryErrors:s?[]:y,setQueryErrors:_,setHideError:c,stats:b,onHideQuery:e=>{l(e)},onRunQuery:()=>{c(!1)}}),Nt(Vl,{traces:k,displayType:t}),p&&Nt(wl,{}),C&&Nt(na,{variant:"error",children:g}),S&&Nt(na,{variant:"info",children:Nt(Rl,{})}),w&&Nt($l,{warning:w,query:n,onChange:d}),Nt("div",{className:Cr()({"vm-custom-panel-body":!0,"vm-custom-panel-body_mobile":e,"vm-block":!0,"vm-block_mobile":e}),children:[Nt("div",{className:"vm-custom-panel-body-header",ref:h,children:[Nt("div",{className:"vm-custom-panel-body-header__tabs",children:Nt(Ir,{})}),(v||f)&&Nt(nm,{fetchUrl:m})]}),Nt(Xh,{graphData:v,liveData:f,isHistogram:x,displayType:t,controlsRef:h})]})]})},am=e=>{let{title:t,description:n,unit:a,expr:o,showLegend:i,filename:l,alias:s}=e;const{isMobile:c}=ea(),{period:u}=fn(),{customStep:d}=Ur(),h=vn(),m=(0,r.useRef)(null),[p,f]=(0,r.useState)(!1),[v,g]=(0,r.useState)(!1),[y,_]=(0,r.useState)({limits:{enable:!1,range:{1:[0,0]}}}),b=(0,r.useMemo)((()=>Array.isArray(o)&&o.every((e=>e))),[o]),{isLoading:w,graphData:k,error:x,warning:S}=Tl({predefinedQuery:b?o:[],display:mt.chart,visible:p,customStep:d}),C=e=>{const t={...y};t.limits.range=e,_(t)};if((0,r.useEffect)((()=>{const e=new IntersectionObserver((e=>{e.forEach((e=>f(e.isIntersecting)))}),{threshold:.1});return m.current&&e.observe(m.current),()=>{m.current&&e.unobserve(m.current)}}),[m]),!b)return Nt(na,{variant:"error",children:[Nt("code",{children:'"expr"'})," not found. Check the configuration file ",Nt("b",{children:l}),"."]});const E=()=>Nt("div",{className:"vm-predefined-panel-header__description vm-default-styles",children:[n&&Nt(Ct.FK,{children:[Nt("div",{children:[Nt("span",{children:"Description:"}),Nt("div",{dangerouslySetInnerHTML:{__html:rl(n)}})]}),Nt("hr",{})]}),Nt("div",{children:[Nt("span",{children:"Queries:"}),Nt("div",{children:o.map(((e,t)=>Nt("div",{children:e},"".concat(t,"_").concat(e))))})]})]});return Nt("div",{className:"vm-predefined-panel",ref:m,children:[Nt("div",{className:"vm-predefined-panel-header",children:[Nt(ya,{title:Nt(E,{}),children:Nt("div",{className:"vm-predefined-panel-header__info",children:Nt(On,{})})}),Nt("h3",{className:"vm-predefined-panel-header__title",children:t||""}),Nt(Uh,{yaxis:y,setYaxisLimits:C,toggleEnableLimits:()=>{const e={...y};e.limits.enable=!e.limits.enable,_(e)},spanGaps:{value:v,onChange:g}})]}),Nt("div",{className:"vm-predefined-panel-body",children:[w&&Nt(wl,{}),x&&Nt(na,{variant:"error",children:x}),S&&Nt(na,{variant:"warning",children:S}),k&&Nt(jh,{data:k,period:u,customStep:d,query:o,yaxis:y,unit:a,alias:s,showLegend:i,setYaxisLimits:C,setPeriod:e=>{let{from:t,to:n}=e;h({type:"SET_PERIOD",payload:{from:t,to:n}})},fullWidth:!1,height:c?.5*window.innerHeight:500,spanGaps:v})]})]})},om=e=>{let{index:t,title:n,panels:a,filename:o}=e;const i=Mr(),l=(0,r.useMemo)((()=>i.width/12),[i]),[s,c]=(0,r.useState)(!t),[u,d]=(0,r.useState)([]);(0,r.useEffect)((()=>{d(a&&a.map((e=>e.width||12)))}),[a]);const[h,m]=(0,r.useState)({start:0,target:0,enable:!1}),p=(0,r.useCallback)((e=>{if(!h.enable)return;const{start:t}=h,n=Math.ceil((t-e.clientX)/l);if(Math.abs(n)>=12)return;const r=u.map(((e,t)=>e-(t===h.target?n:0)));d(r)}),[h,l]),f=(0,r.useCallback)((()=>{m({...h,enable:!1})}),[h]),v=e=>t=>{((e,t)=>{m({start:e.clientX,target:t,enable:!0})})(t,e)};Ar("mousemove",p),Ar("mouseup",f);return Nt("div",{className:"vm-predefined-dashboard",children:Nt(wo,{defaultExpanded:s,onChange:e=>c(e),title:Nt((()=>Nt("div",{className:Cr()({"vm-predefined-dashboard-header":!0,"vm-predefined-dashboard-header_open":s}),children:[(n||o)&&Nt("span",{className:"vm-predefined-dashboard-header__title",children:n||"".concat(t+1,". ").concat(o)}),a&&Nt("span",{className:"vm-predefined-dashboard-header__count",children:["(",a.length," panels)"]})]})),{}),children:Nt("div",{className:"vm-predefined-dashboard-panels",children:Array.isArray(a)&&a.length?a.map(((e,t)=>Nt("div",{className:"vm-predefined-dashboard-panels-panel vm-block vm-block_empty-padding",style:{gridColumn:"span ".concat(u[t])},children:[Nt(am,{title:e.title,description:e.description,unit:e.unit,expr:e.expr,alias:e.alias,filename:o,showLegend:e.showLegend}),Nt("button",{className:"vm-predefined-dashboard-panels-panel__resizer",onMouseDown:v(t),"aria-label":"resize the panel"})]},t))):Nt("div",{className:"vm-predefined-dashboard-panels-panel__alert",children:Nt(na,{variant:"error",children:[Nt("code",{children:'"panels"'})," not found. Check the configuration file ",Nt("b",{children:o}),"."]})})})})})};function im(e){return function(e,t){return Object.fromEntries(Object.entries(e).filter(t))}(e,(e=>!!e[1]||"number"===typeof e[1]))}const lm=()=>{(()=>{const{duration:e,relativeTime:t,period:{date:n}}=fn(),{customStep:a}=Ur(),{setSearchParamsFromKeys:o}=uo(),i=()=>{const r=im({"g0.range_input":e,"g0.end_input":n,"g0.step_input":a,"g0.relative_time":t});o(r)};(0,r.useEffect)(i,[e,t,n,a]),(0,r.useEffect)(i,[])})();const{isMobile:e}=ea(),{dashboardsSettings:t,dashboardsLoading:n,dashboardsError:a}=Kr(),[o,i]=(0,r.useState)(0),l=(0,r.useMemo)((()=>t.map(((e,t)=>({label:e.title||"",value:t})))),[t]),s=(0,r.useMemo)((()=>t[o]||{}),[t,o]),c=(0,r.useMemo)((()=>null===s||void 0===s?void 0:s.rows),[s]),u=(0,r.useMemo)((()=>s.title||s.filename||""),[s]),d=(0,r.useMemo)((()=>Array.isArray(c)&&!!c.length),[c]),h=e=>()=>{(e=>{i(e)})(e)};return Nt("div",{className:"vm-predefined-panels",children:[n&&Nt(wl,{}),!t.length&&a&&Nt(na,{variant:"error",children:a}),!t.length&&Nt(na,{variant:"info",children:"Dashboards not found"}),l.length>1&&Nt("div",{className:Cr()({"vm-predefined-panels-tabs":!0,"vm-predefined-panels-tabs_mobile":e}),children:l.map((e=>Nt("div",{className:Cr()({"vm-predefined-panels-tabs__tab":!0,"vm-predefined-panels-tabs__tab_active":e.value==o}),onClick:h(e.value),children:e.label},e.value)))}),Nt("div",{className:"vm-predefined-panels__dashboards",children:[d&&c.map(((e,t)=>Nt(om,{index:t,filename:u,title:e.title,panels:e.panels},"".concat(o,"_").concat(t)))),!!t.length&&!d&&Nt(na,{variant:"error",children:[Nt("code",{children:'"rows"'})," not found. Check the configuration file ",Nt("b",{children:u}),"."]})]})]})},sm=(e,t)=>{const n=t.match?"&match[]="+encodeURIComponent(t.match):"",r=t.focusLabel?"&focusLabel="+encodeURIComponent(t.focusLabel):"";return"".concat(e,"/api/v1/status/tsdb?topN=").concat(t.topN,"&date=").concat(t.date).concat(n).concat(r)};class cm{constructor(){this.tsdbStatus=void 0,this.tabsNames=void 0,this.isPrometheus=void 0,this.tsdbStatus=this.defaultTSDBStatus,this.tabsNames=["table","graph"],this.isPrometheus=!1,this.getDefaultState=this.getDefaultState.bind(this)}set tsdbStatusData(e){this.isPrometheus=!(null===e||void 0===e||!e.headStats),this.tsdbStatus=e}get tsdbStatusData(){return this.tsdbStatus}get defaultTSDBStatus(){return{totalSeries:0,totalSeriesPrev:0,totalSeriesByAll:0,totalLabelValuePairs:0,seriesCountByMetricName:[],seriesCountByLabelName:[],seriesCountByFocusLabelValue:[],seriesCountByLabelValuePair:[],labelValueCountByLabelName:[]}}get isPrometheusData(){return this.isPrometheus}keys(e,t){const n=e&&/__name__=".+"/.test(e),r=e&&/{.+=".+"}/g.test(e),a=e&&/__name__=".+", .+!=""/g.test(e);let o=[];return o=t||a?o.concat("seriesCountByFocusLabelValue"):n?o.concat("labelValueCountByLabelName"):r?o.concat("seriesCountByMetricName","seriesCountByLabelName"):o.concat("seriesCountByMetricName","seriesCountByLabelName","seriesCountByLabelValuePair","labelValueCountByLabelName"),o}getDefaultState(e,t){return this.keys(e,t).reduce(((e,t)=>({...e,tabs:{...e.tabs,[t]:this.tabsNames},containerRefs:{...e.containerRefs,[t]:(0,r.useRef)(null)}})),{tabs:{},containerRefs:{}})}sectionsTitles(e){return{seriesCountByMetricName:"Metric names with the highest number of series",seriesCountByLabelName:"Labels with the highest number of series",seriesCountByFocusLabelValue:'Values for "'.concat(e,'" label with the highest number of series'),seriesCountByLabelValuePair:"Label=value pairs with the highest number of series",labelValueCountByLabelName:"Labels with the highest number of unique values"}}get sectionsTips(){return{seriesCountByMetricName:"\n

    \n This table returns a list of metrics with the highest cardinality.\n The cardinality of a metric is the number of time series associated with that metric,\n where each time series is defined as a unique combination of key-value label pairs.\n

    \n

    \n When looking to reduce the number of active series in your data source,\n you can start by inspecting individual metrics with high cardinality\n (i.e. that have lots of active time series associated with them),\n since that single metric contributes a large fraction of the series that make up your total series count.\n

    ",seriesCountByLabelName:"\n

    \n This table returns a list of the labels with the highest number of series.\n

    \n

    \n Use this table to identify labels that are storing dimensions with high cardinality\n (many different label values).\n

    \n

    \n It is recommended to choose labels such that they have a finite set of values,\n since every unique combination of key-value label pairs creates a new time series\n and therefore can dramatically increase the number of time series in your system.\n

    ",seriesCountByFocusLabelValue:"\n

    \n This table returns a list of unique label values per selected label.\n

    \n

    \n Use this table to identify label values that are storing per each selected series.\n

    ",labelValueCountByLabelName:"\n

    \n This table returns a list of labels with the highest number of the unique values.\n

    \n ",seriesCountByLabelValuePair:"\n

    \n This table returns a list of the label values pairs with the highest number of series.\n

    \n

    \n Use this table to identify unique label values pairs. This helps to identify same labels \n is applied to count timeseries in your system, since every unique combination of key-value label pairs \n creates a new time series and therefore can dramatically increase the number of time series in your system\n

    "}}get tablesHeaders(){return{seriesCountByMetricName:um,seriesCountByLabelName:dm,seriesCountByFocusLabelValue:hm,seriesCountByLabelValuePair:mm,labelValueCountByLabelName:pm}}totalSeries(e){return"labelValueCountByLabelName"===e?-1:arguments.length>1&&void 0!==arguments[1]&&arguments[1]?this.tsdbStatus.totalSeriesPrev:this.tsdbStatus.totalSeries}}const um=[{id:"name",label:"Metric name"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total",info:"Shows the share of a metric to the total number of series"},{id:"action",label:""}],dm=[{id:"name",label:"Label name"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total",info:"Shows the share of the label to the total number of series"},{id:"action",label:""}],hm=[{id:"name",label:"Label value"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total"},{disablePadding:!1,id:"action",label:"",numeric:!1}],mm=[{id:"name",label:"Label=value pair"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total",info:"Shows the share of the label value pair to the total number of series"},{id:"action",label:""}],pm=[{id:"name",label:"Label name"},{id:"value",label:"Number of unique values"},{id:"action",label:""}],fm=()=>{const e=new cm,[t]=He(),n=t.get("match"),a=t.get("focusLabel"),i=+(t.get("topN")||10),l=t.get("date")||o()().tz().format(It),s=Ka(l),c=(0,r.useRef)(),{serverUrl:u}=Mt(),[d,h]=(0,r.useState)(!1),[m,p]=(0,r.useState)(),[f,v]=(0,r.useState)(e.defaultTSDBStatus),[g,y]=(0,r.useState)(!1),_=async e=>{const t=await fetch(e);if(t.ok)return await t.json();throw new Error("Request failed with status ".concat(t.status))},b=async t=>{if(!u)return;p(""),h(!0),v(e.defaultTSDBStatus);const r={...t,date:t.date,topN:0,match:"",focusLabel:""},a={...t,date:o()(t.date).subtract(1,"day").format(It)},i=[sm(u,t),sm(u,a)];s!==l&&(t.match||t.focusLabel)&&i.push(sm(u,r));try{var d,m,g,y,b,w,k,x,S,C;const[e,t,r]=await Promise.all(i.map(_)),a={...t.data},{data:o}=r||c.current||e;c.current={data:o};const l={...e.data,totalSeries:(null===(d=e.data)||void 0===d?void 0:d.totalSeries)||(null===(m=e.data)||void 0===m||null===(g=m.headStats)||void 0===g?void 0:g.numSeries)||0,totalLabelValuePairs:(null===(y=e.data)||void 0===y?void 0:y.totalLabelValuePairs)||(null===(b=e.data)||void 0===b||null===(w=b.headStats)||void 0===w?void 0:w.numLabelValuePairs)||0,seriesCountByLabelName:(null===(k=e.data)||void 0===k?void 0:k.seriesCountByLabelName)||[],seriesCountByFocusLabelValue:(null===(x=e.data)||void 0===x?void 0:x.seriesCountByFocusLabelValue)||[],totalSeriesByAll:(null===o||void 0===o?void 0:o.totalSeries)||(null===o||void 0===o||null===(S=o.headStats)||void 0===S?void 0:S.numSeries)||f.totalSeriesByAll||0,totalSeriesPrev:(null===a||void 0===a?void 0:a.totalSeries)||(null===a||void 0===a||null===(C=a.headStats)||void 0===C?void 0:C.numSeries)||0},s=null===n||void 0===n?void 0:n.replace(/[{}"]/g,"");l.seriesCountByLabelValuePair=l.seriesCountByLabelValuePair.filter((e=>e.name!==s)),((e,t)=>{Object.keys(e).forEach((n=>{const r=n,a=e[r],o=t[r];Array.isArray(a)&&Array.isArray(o)&&a.forEach((e=>{var t;const n=null===(t=o.find((t=>t.name===e.name)))||void 0===t?void 0:t.value;e.diff=n?e.value-n:0,e.valuePrev=n||0}))}))})(l,a),v(l),h(!1)}catch(Lp){h(!1),Lp instanceof Error&&p("".concat(Lp.name,": ").concat(Lp.message))}};return(0,r.useEffect)((()=>{b({topN:i,match:n,date:l,focusLabel:a})}),[u,n,a,i,l]),(0,r.useEffect)((()=>{m&&(v(e.defaultTSDBStatus),h(!1))}),[m]),(0,r.useEffect)((()=>{const e=Je(u);y(!!e)}),[u]),e.tsdbStatusData=f,{isLoading:d,appConfigurator:e,error:m,isCluster:g}},vm={seriesCountByMetricName:e=>{let{query:t}=e;return gm("__name__",t)},seriesCountByLabelName:e=>{let{query:t}=e;return"{".concat(t,'!=""}')},seriesCountByFocusLabelValue:e=>{let{query:t,focusLabel:n}=e;return gm(n,t)},seriesCountByLabelValuePair:e=>{let{query:t}=e;const n=t.split("="),r=n[0],a=n.slice(1).join("=");return gm(r,a)},labelValueCountByLabelName:e=>{let{query:t,match:n}=e;return""===n?"{".concat(t,'!=""}'):"".concat(n.replace("}",""),", ").concat(t,'!=""}')}},gm=(e,t)=>e?"{"+e+"="+JSON.stringify(t)+"}":"",ym=e=>{var t;let{totalSeries:n=0,totalSeriesPrev:r=0,totalSeriesAll:a=0,seriesCountByMetricName:o=[],isPrometheus:i}=e;const{isMobile:l}=ea(),[s]=He(),c=s.get("match"),u=s.get("focusLabel"),d=/__name__/.test(c||""),h=(null===(t=o[0])||void 0===t?void 0:t.value)/a*100,m=n-r,p=Math.abs(m)/r*100,f=[{title:"Total series",value:n.toLocaleString("en-US"),dynamic:n&&r&&!i?"".concat(p.toFixed(2),"%"):"",display:!u,info:'The total number of active time series. \n A time series is uniquely identified by its name plus a set of its labels. \n For example, temperature{city="NY",country="US"} and temperature{city="SF",country="US"} \n are two distinct series, since they differ by the city label.'},{title:"Percentage from total",value:isNaN(h)?"-":"".concat(h.toFixed(2),"%"),display:d,info:"The share of these series in the total number of time series."}].filter((e=>e.display));return f.length?Nt("div",{className:Cr()({"vm-cardinality-totals":!0,"vm-cardinality-totals_mobile":l}),children:f.map((e=>{let{title:t,value:n,info:a,dynamic:o}=e;return Nt("div",{className:"vm-cardinality-totals-card",children:[Nt("h4",{className:"vm-cardinality-totals-card__title",children:[t,a&&Nt(ya,{title:Nt("p",{className:"vm-cardinality-totals-card__tooltip",children:a}),children:Nt("div",{className:"vm-cardinality-totals-card__info-icon",children:Nt(On,{})})})]}),Nt("span",{className:"vm-cardinality-totals-card__value",children:n}),!!o&&Nt(ya,{title:"in relation to the previous day: ".concat(r.toLocaleString("en-US")),children:Nt("span",{className:Cr()({"vm-dynamic-number":!0,"vm-dynamic-number_positive vm-dynamic-number_down":m<0,"vm-dynamic-number_negative vm-dynamic-number_up":m>0}),children:o})})]},t)}))}):null},_m=(e,t)=>{const[n]=He(),a=n.get(t)?n.get(t):e,[o,i]=(0,r.useState)(a);return(0,r.useEffect)((()=>{a!==o&&i(a)}),[a]),[o,i]},bm=e=>{let{isPrometheus:t,isCluster:n,...a}=e;const{isMobile:o}=ea(),[i]=He(),{setSearchParamsFromKeys:l}=uo(),s=i.get("tips")||"",[c,u]=_m("","match"),[d,h]=_m("","focusLabel"),[m,p]=_m(10,"topN"),f=(0,r.useMemo)((()=>m<0?"Number must be bigger than zero":""),[m]),v=()=>{l({match:c,topN:m,focusLabel:d})};return(0,r.useEffect)((()=>{const e=i.get("match"),t=+(i.get("topN")||10),n=i.get("focusLabel");e!==c&&u(e||""),t!==m&&p(t),n!==d&&h(n||"")}),[i]),Nt("div",{className:Cr()({"vm-cardinality-configurator":!0,"vm-cardinality-configurator_mobile":o,"vm-block":!0,"vm-block_mobile":o}),children:[Nt("div",{className:"vm-cardinality-configurator-controls",children:[Nt("div",{className:"vm-cardinality-configurator-controls__query",children:Nt(Ya,{label:"Time series selector",type:"string",value:c,onChange:u,onEnter:v})}),Nt("div",{className:"vm-cardinality-configurator-controls__item",children:Nt(Ya,{label:"Focus label",type:"text",value:d||"",onChange:h,onEnter:v,endIcon:Nt(ya,{title:Nt("div",{children:Nt("p",{children:"To identify values with the highest number of series for the selected label."})}),children:Nt(sr,{})})})}),Nt("div",{className:"vm-cardinality-configurator-controls__item vm-cardinality-configurator-controls__item_limit",children:Nt(Ya,{label:"Limit entries",type:"number",value:t?10:m,error:f,disabled:t,helperText:t?"not available for Prometheus":"",onChange:e=>{const t=+e;p(isNaN(t)?0:t)},onEnter:v})})]}),Nt("div",{className:"vm-cardinality-configurator-bottom",children:[Nt(ym,{isPrometheus:t,isCluster:n,...a}),n&&Nt("div",{className:"vm-cardinality-configurator-bottom-helpful",children:Nt(Il,{href:"https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cardinality-explorer-statistic-inaccuracy",withIcon:!0,children:[Nt(ir,{}),"Statistic inaccuracy explanation"]})}),Nt("div",{className:"vm-cardinality-configurator-bottom-helpful",children:Nt(Il,{href:"https://docs.victoriametrics.com/#cardinality-explorer",withIcon:!0,children:[Nt(ir,{}),"Documentation"]})}),Nt("div",{className:"vm-cardinality-configurator-bottom__execute",children:[Nt(ya,{title:s?"Hide tips":"Show tips",children:Nt(la,{variant:"text",color:s?"warning":"gray",startIcon:Nt(hr,{}),onClick:()=>{const e=i.get("tips")||"";l({tips:e?"":"true"})},ariaLabel:"visibility tips"})}),Nt(la,{variant:"text",startIcon:Nt(Pn,{}),onClick:()=>{l({match:"",focusLabel:""})},children:"Reset"}),Nt(la,{startIcon:Nt(qn,{}),onClick:v,children:"Execute Query"})]})]})]})};function wm(e){const{order:t,orderBy:n,onRequestSort:r,headerCells:a}=e;return Nt("thead",{className:"vm-table-header vm-cardinality-panel-table__header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:a.map((e=>{return Nt("th",{className:Cr()({"vm-table-cell vm-table-cell_header":!0,"vm-table-cell_sort":"action"!==e.id&&"percentage"!==e.id,"vm-table-cell_right":"action"===e.id}),onClick:(a=e.id,e=>{r(e,a)}),children:Nt("div",{className:"vm-table-cell__content",children:[e.info?Nt(ya,{title:e.info,children:[Nt("div",{className:"vm-metrics-content-header__tip-icon",children:Nt(On,{})}),e.label]}):Nt(Ct.FK,{children:e.label}),"action"!==e.id&&"percentage"!==e.id&&Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":n===e.id,"vm-table__sort-icon_desc":"desc"===t&&n===e.id}),children:Nt(Hn,{})})]})},e.id);var a}))})})}const km=["date","timestamp","time"];function xm(e,t,n){const r=e[n],a=t[n],i=km.includes("".concat(n))?o()("".concat(r)).unix():r,l=km.includes("".concat(n))?o()("".concat(a)).unix():a;return li?1:0}function Sm(e,t){return"desc"===e?(e,n)=>xm(e,n,t):(e,n)=>-xm(e,n,t)}function Cm(e,t){const n=e.map(((e,t)=>[e,t]));return n.sort(((e,n)=>{const r=t(e[0],n[0]);return 0!==r?r:e[1]-n[1]})),n.map((e=>e[0]))}const Em=e=>{let{rows:t,headerCells:n,defaultSortColumn:a,tableCells:o}=e;const[i,l]=(0,r.useState)("desc"),[s,c]=(0,r.useState)(a),u=Cm(t,Sm(i,s));return Nt("table",{className:"vm-table vm-cardinality-panel-table",children:[Nt(wm,{order:i,orderBy:s,onRequestSort:(e,t)=>{l(s===t&&"asc"===i?"desc":"asc"),c(t)},rowCount:t.length,headerCells:n}),Nt("tbody",{className:"vm-table-header",children:u.map((e=>Nt("tr",{className:"vm-table__row",children:o(e)},e.name)))})]})},Nm=e=>{let{row:t,totalSeries:n,totalSeriesPrev:r,onActionClick:a}=e;const o=n>0?t.value/n*100:-1,i=r>0?t.valuePrev/r*100:-1,l=[o,i].some((e=>-1===e)),s=o-i,c=l?"":"".concat(s.toFixed(2),"%"),u=()=>{a(t.name)};return Nt(Ct.FK,{children:[Nt("td",{className:"vm-table-cell",children:Nt("span",{className:"vm-link vm-link_colored",onClick:u,children:t.name})},t.name),Nt("td",{className:"vm-table-cell",children:[t.value,!!t.diff&&Nt(ya,{title:"in relation to the previous day: ".concat(t.valuePrev),children:Nt("span",{className:Cr()({"vm-dynamic-number":!0,"vm-dynamic-number_positive":t.diff<0,"vm-dynamic-number_negative":t.diff>0}),children:["\xa0",t.diff>0?"+":"",t.diff]})})]},t.value),o>0&&Nt("td",{className:"vm-table-cell",children:Nt("div",{className:"vm-cardinality-panel-table__progress",children:[Nt(Dl,{value:o}),c&&Nt(ya,{title:"in relation to the previous day",children:Nt("span",{className:Cr()({"vm-dynamic-number":!0,"vm-dynamic-number_positive vm-dynamic-number_down":s<0,"vm-dynamic-number_negative vm-dynamic-number_up":s>0}),children:c})})]})},t.progressValue),Nt("td",{className:"vm-table-cell vm-table-cell_right",children:Nt("div",{className:"vm-table-cell__content",children:Nt(ya,{title:"Filter by ".concat(t.name),children:Nt(la,{variant:"text",size:"small",onClick:u,children:Nt(Yn,{})})})})},"action")]})},Am=e=>{let{data:t}=e;const[n,a]=(0,r.useState)([]),[o,i]=(0,r.useState)([0,0]);return(0,r.useEffect)((()=>{const e=t.sort(((e,t)=>t.value-e.value)),n=(e=>{const t=e.map((e=>e.value)),n=Math.ceil(t[0]||1),r=n/9;return new Array(11).fill(n+r).map(((e,t)=>Math.round(e-r*t)))})(e);i(n),a(e.map((e=>({...e,percentage:e.value/n[0]*100}))))}),[t]),Nt("div",{className:"vm-simple-bar-chart",children:[Nt("div",{className:"vm-simple-bar-chart-y-axis",children:o.map((e=>Nt("div",{className:"vm-simple-bar-chart-y-axis__tick",children:e},e)))}),Nt("div",{className:"vm-simple-bar-chart-data",children:n.map((e=>{let{name:t,value:n,percentage:r}=e;return Nt(ya,{title:"".concat(t,": ").concat(n),placement:"top-center",children:Nt("div",{className:"vm-simple-bar-chart-data-item",style:{maxHeight:"".concat(r||0,"%")}})},"".concat(t,"_").concat(n))}))})]})},Mm=e=>{let{rows:t,tabs:n=[],chartContainer:a,totalSeries:o,totalSeriesPrev:i,onActionClick:l,sectionTitle:s,tip:c,tableHeaderCells:u,isPrometheus:d}=e;const{isMobile:h}=ea(),[m,p]=(0,r.useState)("table"),f=d&&!t.length,v=(0,r.useMemo)((()=>n.map(((e,t)=>({value:e,label:e,icon:Nt(0===t?Kn:Wn,{})})))),[n]);return Nt("div",{className:Cr()({"vm-metrics-content":!0,"vm-metrics-content_mobile":h,"vm-block":!0,"vm-block_mobile":h}),children:[Nt("div",{className:"vm-metrics-content-header vm-section-header",children:[Nt("h5",{className:Cr()({"vm-metrics-content-header__title":!0,"vm-section-header__title":!0,"vm-section-header__title_mobile":h}),children:[!h&&c&&Nt(ya,{title:Nt("p",{dangerouslySetInnerHTML:{__html:c},className:"vm-metrics-content-header__tip"}),children:Nt("div",{className:"vm-metrics-content-header__tip-icon",children:Nt(On,{})})}),s]}),Nt("div",{className:"vm-section-header__tabs",children:Nt(Tr,{activeItem:m,items:v,onChange:p})})]}),f&&Nt("div",{className:"vm-metrics-content-prom-data",children:[Nt("div",{className:"vm-metrics-content-prom-data__icon",children:Nt(On,{})}),Nt("h3",{className:"vm-metrics-content-prom-data__title",children:"Prometheus Data Limitation"}),Nt("p",{className:"vm-metrics-content-prom-data__text",children:["Due to missing data from your Prometheus source, some tables may appear empty.",Nt("br",{}),"This does not indicate an issue with your system or our tool."]})]}),!f&&"table"===m&&Nt("div",{ref:a,className:Cr()({"vm-metrics-content__table":!0,"vm-metrics-content__table_mobile":h}),children:Nt(Em,{rows:t,headerCells:u,defaultSortColumn:"value",tableCells:e=>Nt(Nm,{row:e,totalSeries:o,totalSeriesPrev:i,onActionClick:l})})}),!f&&"graph"===m&&Nt("div",{className:"vm-metrics-content__chart",children:Nt(Am,{data:t.map((e=>{let{name:t,value:n}=e;return{name:t,value:n}}))})})]})},Tm=e=>{let{title:t,children:n}=e;return Nt("div",{className:"vm-cardinality-tip",children:[Nt("div",{className:"vm-cardinality-tip-header",children:[Nt("div",{className:"vm-cardinality-tip-header__tip-icon",children:Nt(hr,{})}),Nt("h4",{className:"vm-cardinality-tip-header__title",children:t||"Tips"})]}),Nt("p",{className:"vm-cardinality-tip__description",children:n})]})},Lm=()=>Nt(Tm,{title:"Metrics with a high number of series",children:Nt("ul",{children:[Nt("li",{children:["Identify and eliminate labels with frequently changed values to reduce their\xa0",Nt(Il,{href:"https://docs.victoriametrics.com/FAQ.html#what-is-high-cardinality",children:"cardinality"}),"\xa0and\xa0",Nt(Il,{href:"https://docs.victoriametrics.com/FAQ.html#what-is-high-churn-rate",children:"high churn rate"})]}),Nt("li",{children:["Find unused time series and\xa0",Nt(Il,{href:"https://docs.victoriametrics.com/relabeling.html",children:"drop entire metrics"})]}),Nt("li",{children:["Aggregate time series before they got ingested into the database via\xa0",Nt(Il,{href:"https://docs.victoriametrics.com/stream-aggregation.html",children:"streaming aggregation"})]})]})}),Im=()=>Nt(Tm,{title:"Labels with a high number of unique values",children:Nt("ul",{children:[Nt("li",{children:"Decrease the number of unique label values to reduce cardinality"}),Nt("li",{children:["Drop the label entirely via\xa0",Nt(Il,{href:"https://docs.victoriametrics.com/relabeling.html",children:"relabeling"})]}),Nt("li",{children:"For volatile label values (such as URL path, user session, etc.) consider printing them to the log file instead of adding to time series"})]})}),Pm=()=>Nt(Tm,{title:"Dashboard of a single metric",children:[Nt("p",{children:"This dashboard helps to understand the cardinality of a single metric."}),Nt("p",{children:"Each time series is a unique combination of key-value label pairs. Therefore a label key with many values can create a lot of time series for a particular metric. If you\u2019re trying to decrease the cardinality of a metric, start by looking at the labels with the highest number of values."}),Nt("p",{children:"Use the series selector at the top of the page to apply additional filters."})]}),Om=()=>Nt(Tm,{title:"Dashboard of a label",children:[Nt("p",{children:"This dashboard helps you understand the count of time series per label."}),Nt("p",{children:"Use the selector at the top of the page to pick a label name you\u2019d like to inspect. For the selected label name, you\u2019ll see the label values that have the highest number of series associated with them. So if you\u2019ve chosen `instance` as your label name, you may see that `657` time series have value \u201chost-1\u201d attached to them and `580` time series have value `host-2` attached to them."}),Nt("p",{children:"This can be helpful in allowing you to determine where the bulk of your time series are coming from. If the label \u201cinstance=host-1\u201d was applied to 657 series and the label \u201cinstance=host-2\u201d was only applied to 580 series, you\u2019d know, for example, that host-01 was responsible for sending the majority of the time series."})]}),Rm=()=>{const{isMobile:e}=ea(),[t]=He(),{setSearchParamsFromKeys:n}=uo(),r=t.get("tips")||"",a=t.get("match")||"",o=t.get("focusLabel")||"",{isLoading:i,appConfigurator:l,error:s,isCluster:c}=fm(),{tsdbStatusData:u,getDefaultState:d,tablesHeaders:h,sectionsTips:m}=l,p=d(a,o);return Nt("div",{className:Cr()({"vm-cardinality-panel":!0,"vm-cardinality-panel_mobile":e}),children:[i&&Nt(wl,{message:"Please wait while cardinality stats is calculated. \n This may take some time if the db contains big number of time series."}),Nt(bm,{isPrometheus:l.isPrometheusData,totalSeries:u.totalSeries,totalSeriesPrev:u.totalSeriesPrev,totalSeriesAll:u.totalSeriesByAll,totalLabelValuePairs:u.totalLabelValuePairs,seriesCountByMetricName:u.seriesCountByMetricName,isCluster:c}),r&&Nt("div",{className:"vm-cardinality-panel-tips",children:[!a&&!o&&Nt(Lm,{}),a&&!o&&Nt(Pm,{}),!a&&!o&&Nt(Im,{}),o&&Nt(Om,{})]}),s&&Nt(na,{variant:"error",children:s}),l.keys(a,o).map((e=>{return Nt(Mm,{sectionTitle:l.sectionsTitles(o)[e],tip:m[e],rows:u[e],onActionClick:(t=e,e=>{const r={match:vm[t]({query:e,focusLabel:o,match:a})};"labelValueCountByLabelName"!==t&&"seriesCountByLabelName"!=t||(r.focusLabel=e),"seriesCountByFocusLabelValue"==t&&(r.focusLabel=""),n(r)}),tabs:p.tabs[e],chartContainer:p.containerRefs[e],totalSeriesPrev:l.totalSeries(e,!0),totalSeries:l.totalSeries(e),tableHeaderCells:h[e],isPrometheus:l.isPrometheusData},e);var t}))]})},Dm=e=>(["topByAvgDuration","topByCount","topBySumDuration"].forEach((t=>{const n=e[t];Array.isArray(n)&&n.forEach((e=>{const t=en(1e3*e.timeRangeSeconds);e.url=((e,t)=>{var n;const{query:r,timeRangeSeconds:a}=e,o=["g0.expr=".concat(encodeURIComponent(r))],i=null===(n=rn.find((e=>e.duration===t)))||void 0===n?void 0:n.id;return i&&o.push("g0.relative_time=".concat(i)),a&&o.push("g0.range_input=".concat(t)),"".concat(We.home,"?").concat(o.join("&"))})(e,t),e.timeRange=t}))})),e),zm=e=>{let{topN:t,maxLifetime:n}=e;const{serverUrl:a}=Mt(),{setSearchParamsFromKeys:o}=uo(),[i,l]=(0,r.useState)(null),[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)(),h=(0,r.useMemo)((()=>((e,t,n)=>"".concat(e,"/api/v1/status/top_queries?topN=").concat(t||"","&maxLifetime=").concat(n||""))(a,t,n)),[a,t,n]);return{data:i,error:u,loading:s,fetch:async()=>{c(!0),o({topN:t,maxLifetime:n});try{const e=await fetch(h),t=await e.json();l(e.ok?Dm(t):null),d(String(t.error||""))}catch(Lp){Lp instanceof Error&&"AbortError"!==Lp.name&&d("".concat(Lp.name,": ").concat(Lp.message))}c(!1)}}},Fm=e=>{let{rows:t,columns:n,defaultOrderBy:a}=e;const o=fl(),[i,l]=(0,r.useState)(a||"count"),[s,c]=(0,r.useState)("desc"),u=(0,r.useMemo)((()=>Cm(t,Sm(s,i))),[t,i,s]),d=e=>()=>{var t;t=e,c((e=>"asc"===e&&i===t?"desc":"asc")),l(t)},h=e=>{let{query:t}=e;return async()=>{await o(t,"Query has been copied")}};return Nt("table",{className:"vm-table",children:[Nt("thead",{className:"vm-table-header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:[n.map((e=>Nt("th",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:d(e.sortBy||e.key),children:Nt("div",{className:"vm-table-cell__content",children:[e.title||e.key,Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":i===e.key,"vm-table__sort-icon_desc":"desc"===s&&i===e.key}),children:Nt(Hn,{})})]})},e.key))),Nt("th",{className:"vm-table-cell vm-table-cell_header"})," "]})}),Nt("tbody",{className:"vm-table-body",children:u.map(((e,t)=>Nt("tr",{className:"vm-table__row",children:[n.map((t=>Nt("td",{className:"vm-table-cell",children:e[t.key]||"-"},t.key))),Nt("td",{className:"vm-table-cell vm-table-cell_no-padding",children:Nt("div",{className:"vm-top-queries-panels__table-actions",children:[e.url&&Nt(ya,{title:"Execute query",children:Nt(Re,{to:e.url,target:"_blank",rel:"noreferrer","aria-disabled":!0,children:Nt(la,{variant:"text",size:"small",startIcon:Nt(Yn,{}),ariaLabel:"execute query"})})}),Nt(ya,{title:"Copy query",children:Nt(la,{variant:"text",size:"small",startIcon:Nt(rr,{}),onClick:h(e),ariaLabel:"copy query"})})]})})]},t)))})]})},jm=["table","JSON"].map(((e,t)=>({value:String(t),label:e,icon:Nt(0===t?Kn:Qn,{})}))),Hm=e=>{let{rows:t,title:n,columns:a,defaultOrderBy:o}=e;const{isMobile:i}=ea(),[l,s]=(0,r.useState)(0);return Nt("div",{className:Cr()({"vm-top-queries-panel":!0,"vm-block":!0,"vm-block_mobile":i}),children:[Nt("div",{className:Cr()({"vm-top-queries-panel-header":!0,"vm-section-header":!0,"vm-top-queries-panel-header_mobile":i}),children:[Nt("h5",{className:Cr()({"vm-section-header__title":!0,"vm-section-header__title_mobile":i}),children:n}),Nt("div",{className:"vm-section-header__tabs",children:Nt(Tr,{activeItem:String(l),items:jm,onChange:e=>{s(+e)}})})]}),Nt("div",{className:Cr()({"vm-top-queries-panel__table":!0,"vm-top-queries-panel__table_mobile":i}),children:[0===l&&Nt(Fm,{rows:t,columns:a,defaultOrderBy:o}),1===l&&Nt(qh,{data:t})]})]})},Vm=()=>{const{isMobile:e}=ea(),[t,n]=_m(10,"topN"),[a,i]=_m("10m","maxLifetime"),{data:l,error:s,loading:c,fetch:u}=zm({topN:t,maxLifetime:a}),d=(0,r.useMemo)((()=>{const e=a.trim().split(" ").reduce(((e,t)=>{const n=Kt(t);return n?{...e,...n}:{...e}}),{});return!!o().duration(e).asMilliseconds()}),[a]),h=(0,r.useMemo)((()=>!!t&&t<1),[t]),m=(0,r.useMemo)((()=>h?"Number must be bigger than zero":""),[h]),p=(0,r.useMemo)((()=>d?"":"Invalid duration value"),[d]),f=e=>{if(!l)return e;const t=l[e];return"number"===typeof t?Ud(t,t,t):t||e},v=e=>{"Enter"===e.key&&u()};return(0,r.useEffect)((()=>{l&&(t||n(+l.topN),a||i(l.maxLifetime))}),[l]),(0,r.useEffect)((()=>(u(),window.addEventListener("popstate",u),()=>{window.removeEventListener("popstate",u)})),[]),Nt("div",{className:Cr()({"vm-top-queries":!0,"vm-top-queries_mobile":e}),children:[c&&Nt(wl,{containerStyles:{height:"500px"}}),Nt("div",{className:Cr()({"vm-top-queries-controls":!0,"vm-block":!0,"vm-block_mobile":e}),children:[Nt("div",{className:"vm-top-queries-controls-fields",children:[Nt("div",{className:"vm-top-queries-controls-fields__item",children:Nt(Ya,{label:"Max lifetime",value:a,error:p,helperText:"For example ".concat("30ms, 15s, 3d4h, 1y2w"),onChange:e=>{i(e)},onKeyDown:v})}),Nt("div",{className:"vm-top-queries-controls-fields__item",children:Nt(Ya,{label:"Number of returned queries",type:"number",value:t||"",error:m,onChange:e=>{n(+e)},onKeyDown:v})})]}),Nt("div",{className:Cr()({"vm-top-queries-controls-bottom":!0,"vm-top-queries-controls-bottom_mobile":e}),children:[Nt("div",{className:"vm-top-queries-controls-bottom__info",children:["VictoriaMetrics tracks the last\xa0",Nt(ya,{title:"search.queryStats.lastQueriesCount",children:Nt("b",{children:f("search.queryStats.lastQueriesCount")})}),"\xa0queries with durations at least\xa0",Nt(ya,{title:"search.queryStats.minQueryDuration",children:Nt("b",{children:f("search.queryStats.minQueryDuration")})})]}),Nt("div",{className:"vm-top-queries-controls-bottom__button",children:Nt(la,{startIcon:Nt(qn,{}),onClick:u,children:"Execute"})})]})]}),s&&Nt(na,{variant:"error",children:s}),l&&Nt(Ct.FK,{children:Nt("div",{className:"vm-top-queries-panels",children:[Nt(Hm,{rows:l.topBySumDuration,title:"Queries with most summary time to execute",columns:[{key:"query"},{key:"sumDurationSeconds",title:"sum duration, sec"},{key:"timeRange",sortBy:"timeRangeSeconds",title:"query time interval"},{key:"count"}],defaultOrderBy:"sumDurationSeconds"}),Nt(Hm,{rows:l.topByAvgDuration,title:"Most heavy queries",columns:[{key:"query"},{key:"avgDurationSeconds",title:"avg duration, sec"},{key:"timeRange",sortBy:"timeRangeSeconds",title:"query time interval"},{key:"count"}],defaultOrderBy:"avgDurationSeconds"}),Nt(Hm,{rows:l.topByCount,title:"Most frequently executed queries",columns:[{key:"query"},{key:"timeRange",sortBy:"timeRangeSeconds",title:"query time interval"},{key:"count"}]})]})})]})},$m={"color-primary":"#589DF6","color-secondary":"#316eca","color-error":"#e5534b","color-warning":"#c69026","color-info":"#539bf5","color-success":"#57ab5a","color-background-body":"#22272e","color-background-block":"#2d333b","color-background-tooltip":"rgba(22, 22, 22, 0.8)","color-text":"#cdd9e5","color-text-secondary":"#768390","color-text-disabled":"#636e7b","box-shadow":"rgba(0, 0, 0, 0.16) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.2) 0px 2px 8px 0px","border-divider":"1px solid rgba(99, 110, 123, 0.5)","color-hover-black":"rgba(0, 0, 0, 0.12)","color-log-hits-bar-0":"rgba(255, 255, 255, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Um={"color-primary":"#3F51B5","color-secondary":"#E91E63","color-error":"#FD080E","color-warning":"#FF8308","color-info":"#03A9F4","color-success":"#4CAF50","color-background-body":"#FEFEFF","color-background-block":"#FFFFFF","color-background-tooltip":"rgba(80,80,80,0.9)","color-text":"#110f0f","color-text-secondary":"#706F6F","color-text-disabled":"#A09F9F","box-shadow":"rgba(0, 0, 0, 0.08) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.1) 0px 2px 8px 0px","border-divider":"1px solid rgba(0, 0, 0, 0.15)","color-hover-black":"rgba(0, 0, 0, 0.06)","color-log-hits-bar-0":"rgba(0, 0, 0, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Bm=()=>{const[e,t]=(0,r.useState)(_t()),n=e=>{t(e.matches)};return(0,r.useEffect)((()=>{const e=window.matchMedia("(prefers-color-scheme: dark)");return e.addEventListener("change",n),()=>e.removeEventListener("change",n)}),[]),e},qm=["primary","secondary","error","warning","info","success"],Ym=e=>{let{onLoaded:t}=e;const n=Qe(),{palette:a={}}=Ke(),{theme:o}=Mt(),i=Bm(),l=Tt(),s=Mr(),[c,u]=(0,r.useState)({[ft.dark]:$m,[ft.light]:Um,[ft.system]:_t()?$m:Um}),d=()=>{const{innerWidth:e,innerHeight:t}=window,{clientWidth:n,clientHeight:r}=document.documentElement;yt("scrollbar-width","".concat(e-n,"px")),yt("scrollbar-height","".concat(t-r,"px")),yt("vh","".concat(.01*t,"px"))},h=()=>{qm.forEach(((e,n)=>{const r=(e=>{let t=e.replace("#","").trim();if(3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),6!==t.length)throw new Error("Invalid HEX color.");return(299*parseInt(t.slice(0,2),16)+587*parseInt(t.slice(2,4),16)+114*parseInt(t.slice(4,6),16))/1e3>=128?"#000000":"#FFFFFF"})(gt("color-".concat(e)));yt("".concat(e,"-text"),r),n===qm.length-1&&(l({type:"SET_DARK_THEME"}),t(!0))}))},m=()=>{const e=et("THEME")||ft.system,t=c[e];Object.entries(t).forEach((e=>{let[t,n]=e;yt(t,n)})),h(),n&&(qm.forEach((e=>{const t=a[e];t&&yt("color-".concat(e),t)})),h())};return(0,r.useEffect)((()=>{d(),m()}),[c]),(0,r.useEffect)(d,[s]),(0,r.useEffect)((()=>{const e=_t()?$m:Um;c[ft.system]!==e?u((t=>({...t,[ft.system]:e}))):m()}),[o,i]),(0,r.useEffect)((()=>{n&&l({type:"SET_THEME",payload:ft.light})}),[]),null},Wm=()=>{const[e,t]=(0,r.useState)([]),[n,a]=(0,r.useState)(!1),o=(0,r.useRef)(document.body),i=e=>{e.preventDefault(),e.stopPropagation(),"dragenter"===e.type||"dragover"===e.type?a(!0):"dragleave"===e.type&&a(!1)};return Ar("dragenter",i,o),Ar("dragleave",i,o),Ar("dragover",i,o),Ar("drop",(e=>{var n;e.preventDefault(),e.stopPropagation(),a(!1),null!==e&&void 0!==e&&null!==(n=e.dataTransfer)&&void 0!==n&&n.files&&e.dataTransfer.files[0]&&(e=>{const n=Array.from(e||[]);t(n)})(e.dataTransfer.files)}),o),Ar("paste",(e=>{var n;const r=null===(n=e.clipboardData)||void 0===n?void 0:n.items;if(!r)return;const a=Array.from(r).filter((e=>"application/json"===e.type)).map((e=>e.getAsFile())).filter((e=>null!==e));t(a)}),o),{files:e,dragging:n}},Km=e=>{let{onOpenModal:t,onChange:n}=e;return Nt("div",{className:"vm-upload-json-buttons",children:[Nt(la,{variant:"outlined",onClick:t,children:"Paste JSON"}),Nt(la,{children:["Upload Files",Nt("input",{id:"json",type:"file",accept:"application/json",multiple:!0,title:" ",onChange:n})]})]})},Qm=()=>{const[e,t]=(0,r.useState)([]),[n,a]=(0,r.useState)([]),o=(0,r.useMemo)((()=>!!e.length),[e]),{value:i,setTrue:l,setFalse:s}=ca(!1),c=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";a((n=>[{filename:t,text:": ".concat(e.message)},...n]))},u=(e,n)=>{try{const r=JSON.parse(e),a=r.trace||r;if(!a.duration_msec)return void c(new Error(pt.traceNotFound),n);const o=new Cl(a,n);t((e=>[o,...e]))}catch(Lp){Lp instanceof Error&&c(Lp,n)}},d=e=>{e.map((e=>{const t=new FileReader,n=(null===e||void 0===e?void 0:e.name)||"";t.onload=e=>{var t;const r=String(null===(t=e.target)||void 0===t?void 0:t.result);u(r,n)},t.readAsText(e)}))},h=e=>{a([]);const t=Array.from(e.target.files||[]);d(t),e.target.value=""},m=e=>()=>{(e=>{a((t=>t.filter(((t,n)=>n!==e))))})(e)},{files:p,dragging:f}=Wm();return(0,r.useEffect)((()=>{d(p)}),[p]),Nt("div",{className:"vm-trace-page",children:[Nt("div",{className:"vm-trace-page-header",children:[Nt("div",{className:"vm-trace-page-header-errors",children:n.map(((e,t)=>Nt("div",{className:"vm-trace-page-header-errors-item",children:[Nt(na,{variant:"error",children:[Nt("b",{className:"vm-trace-page-header-errors-item__filename",children:e.filename}),Nt("span",{children:e.text})]}),Nt(la,{className:"vm-trace-page-header-errors-item__close",startIcon:Nt(In,{}),variant:"text",color:"error",onClick:m(t)})]},"".concat(e,"_").concat(t))))}),Nt("div",{children:o&&Nt(Km,{onOpenModal:l,onChange:h})})]}),o&&Nt("div",{children:Nt(Hl,{jsonEditor:!0,traces:e,onDeleteClick:n=>{const r=e.filter((e=>e.idValue!==n.idValue));t([...r])}})}),!o&&Nt("div",{className:"vm-trace-page-preview",children:[Nt("p",{className:"vm-trace-page-preview__text",children:["Please, upload file with JSON response content.","\n","The file must contain tracing information in JSON format.","\n","In order to use tracing please refer to the doc:\xa0",Nt("a",{className:"vm-link vm-link_colored",href:"https://docs.victoriametrics.com/#query-tracing",target:"_blank",rel:"help noreferrer",children:"https://docs.victoriametrics.com/#query-tracing"}),"\n","Tracing graph will be displayed after file upload.","\n","Attach files by dragging & dropping, selecting or pasting them."]}),Nt(Km,{onOpenModal:l,onChange:h})]}),i&&Nt(ga,{title:"Paste JSON",onClose:s,children:Nt(jl,{editable:!0,displayTitle:!0,defaultTile:"JSON ".concat(e.length+1),onClose:s,onUpload:u})}),f&&Nt("div",{className:"vm-trace-page__dropzone"})]})},Zm=e=>{const{serverUrl:t}=Mt(),{period:n}=fn(),[a,o]=(0,r.useState)([]),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)(),u=(0,r.useMemo)((()=>((e,t,n)=>{const r="{job=".concat(JSON.stringify(n),"}");return"".concat(e,"/api/v1/label/instance/values?match[]=").concat(encodeURIComponent(r),"&start=").concat(t.start,"&end=").concat(t.end)})(t,n,e)),[t,n,e]);return(0,r.useEffect)((()=>{if(!e)return;(async()=>{l(!0);try{const e=await fetch(u),t=await e.json(),n=t.data||[];o(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?c(void 0):c("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Lp){Lp instanceof Error&&c("".concat(Lp.name,": ").concat(Lp.message))}l(!1)})().catch(console.error)}),[u]),{instances:a,isLoading:i,error:s}},Gm=(e,t)=>{const{serverUrl:n}=Mt(),{period:a}=fn(),[o,i]=(0,r.useState)([]),[l,s]=(0,r.useState)(!1),[c,u]=(0,r.useState)(),d=(0,r.useMemo)((()=>((e,t,n,r)=>{const a=Object.entries({job:n,instance:r}).filter((e=>e[1])).map((e=>{let[t,n]=e;return"".concat(t,"=").concat(JSON.stringify(n))})).join(","),o="{".concat(a,"}");return"".concat(e,"/api/v1/label/__name__/values?match[]=").concat(encodeURIComponent(o),"&start=").concat(t.start,"&end=").concat(t.end)})(n,a,e,t)),[n,a,e,t]);return(0,r.useEffect)((()=>{if(!e)return;(async()=>{s(!0);try{const e=await fetch(d),t=await e.json(),n=t.data||[];i(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?u(void 0):u("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Lp){Lp instanceof Error&&u("".concat(Lp.name,": ").concat(Lp.message))}s(!1)})().catch(console.error)}),[d]),{names:o,isLoading:l,error:c}},Jm=e=>{let{name:t,job:n,instance:a,rateEnabled:o,isBucket:i,height:l}=e;const{isMobile:s}=ea(),{customStep:c,yaxis:u}=Ur(),{period:d}=fn(),h=Br(),m=vn(),p=Zt(d.end-d.start),f=Qt(c),v=en(10*f*1e3),[g,y]=(0,r.useState)(!1),[_,b]=(0,r.useState)(!1),w=g&&c===p?v:c,k=(0,r.useMemo)((()=>{const e=Object.entries({job:n,instance:a}).filter((e=>e[1])).map((e=>{let[t,n]=e;return"".concat(t,"=").concat(JSON.stringify(n))}));e.push("__name__=".concat(JSON.stringify(t))),"node_cpu_seconds_total"==t&&e.push('mode!="idle"');const r="{".concat(e.join(","),"}");if(i)return"sum(rate(".concat(r,")) by (vmrange, le)");const l=o?"rollup_rate(".concat(r,")"):"rollup(".concat(r,")");return"\nwith (q = ".concat(l,') (\n alias(min(label_match(q, "rollup", "min")), "min"),\n alias(max(label_match(q, "rollup", "max")), "max"),\n alias(avg(label_match(q, "rollup", "avg")), "avg"),\n)')}),[t,n,a,o,i]),{isLoading:x,graphData:S,error:C,queryErrors:E,warning:N,isHistogram:A}=Tl({predefinedQuery:[k],visible:!0,customStep:w,showAllSeries:_});return(0,r.useEffect)((()=>{y(A)}),[A]),Nt("div",{className:Cr()({"vm-explore-metrics-graph":!0,"vm-explore-metrics-graph_mobile":s}),children:[x&&Nt(wl,{}),C&&Nt(na,{variant:"error",children:C}),E[0]&&Nt(na,{variant:"error",children:E[0]}),N&&Nt($l,{warning:N,query:[k],onChange:b}),S&&d&&Nt(jh,{data:S,period:d,customStep:w,query:[k],yaxis:u,setYaxisLimits:e=>{h({type:"SET_YAXIS_LIMITS",payload:e})},setPeriod:e=>{let{from:t,to:n}=e;m({type:"SET_PERIOD",payload:{from:t,to:n}})},showLegend:!1,height:l,isHistogram:A})]})},Xm=e=>{let{name:t,index:n,length:r,isBucket:a,rateEnabled:o,onChangeRate:i,onRemoveItem:l,onChangeOrder:s}=e;const{isMobile:c}=ea(),{value:u,setTrue:d,setFalse:h}=ca(!1),m=()=>{l(t)},p=()=>{s(t,n,n+1)},f=()=>{s(t,n,n-1)};return Nt("div",c?{className:"vm-explore-metrics-item-header vm-explore-metrics-item-header_mobile",children:[Nt("div",{className:"vm-explore-metrics-item-header__name",children:t}),Nt(la,{variant:"text",size:"small",startIcon:Nt(ur,{}),onClick:d,ariaLabel:"open panel settings"}),u&&Nt(ga,{title:t,onClose:h,children:Nt("div",{className:"vm-explore-metrics-item-header-modal",children:[Nt("div",{className:"vm-explore-metrics-item-header-modal-order",children:[Nt(la,{startIcon:Nt(Jn,{}),variant:"outlined",onClick:f,disabled:0===n,ariaLabel:"move graph up"}),Nt("p",{children:["position:",Nt("span",{className:"vm-explore-metrics-item-header-modal-order__index",children:["#",n+1]})]}),Nt(la,{endIcon:Nt(Gn,{}),variant:"outlined",onClick:p,disabled:n===r-1,ariaLabel:"move graph down"})]}),!a&&Nt("div",{className:"vm-explore-metrics-item-header-modal__rate",children:[Nt(Mo,{label:Nt("span",{children:["enable ",Nt("code",{children:"rate()"})]}),value:o,onChange:i,fullWidth:!0}),Nt("p",{children:"calculates the average per-second speed of metrics change"})]}),Nt(la,{startIcon:Nt(In,{}),color:"error",variant:"outlined",onClick:m,fullWidth:!0,children:"Remove graph"})]})})]}:{className:"vm-explore-metrics-item-header",children:[Nt("div",{className:"vm-explore-metrics-item-header-order",children:[Nt(ya,{title:"move graph up",children:Nt(la,{className:"vm-explore-metrics-item-header-order__up",startIcon:Nt(jn,{}),variant:"text",color:"gray",size:"small",onClick:f,ariaLabel:"move graph up"})}),Nt("div",{className:"vm-explore-metrics-item-header__index",children:["#",n+1]}),Nt(ya,{title:"move graph down",children:Nt(la,{className:"vm-explore-metrics-item-header-order__down",startIcon:Nt(jn,{}),variant:"text",color:"gray",size:"small",onClick:p,ariaLabel:"move graph down"})})]}),Nt("div",{className:"vm-explore-metrics-item-header__name",children:t}),!a&&Nt("div",{className:"vm-explore-metrics-item-header__rate",children:Nt(ya,{title:"calculates the average per-second speed of metric's change",children:Nt(Mo,{label:Nt("span",{children:["enable ",Nt("code",{children:"rate()"})]}),value:o,onChange:i})})}),Nt("div",{className:"vm-explore-metrics-item-header__close",children:Nt(ya,{title:"close graph",children:Nt(la,{startIcon:Nt(In,{}),variant:"text",color:"gray",size:"small",onClick:m,ariaLabel:"close graph"})})})]})},ep=e=>{let{name:t,job:n,instance:a,index:o,length:i,size:l,onRemoveItem:s,onChangeOrder:c}=e;const u=(0,r.useMemo)((()=>/_sum?|_total?|_count?/.test(t)),[t]),d=(0,r.useMemo)((()=>/_bucket?/.test(t)),[t]),[h,m]=(0,r.useState)(u),p=Mr(),f=(0,r.useMemo)(l.height,[l,p]);return(0,r.useEffect)((()=>{m(u)}),[n]),Nt("div",{className:"vm-explore-metrics-item vm-block vm-block_empty-padding",children:[Nt(Xm,{name:t,index:o,length:i,isBucket:d,rateEnabled:h,size:l.id,onChangeRate:m,onRemoveItem:s,onChangeOrder:c}),Nt(Jm,{name:t,job:n,instance:a,rateEnabled:h,isBucket:d,height:f},"".concat(t,"_").concat(n,"_").concat(a,"_").concat(h))]})},tp=e=>{let{values:t,onRemoveItem:n}=e;const{isMobile:r}=ea();return r?Nt("span",{className:"vm-select-input-content__counter",children:["selected ",t.length]}):Nt(Ct.FK,{children:t.map((e=>{return Nt("div",{className:"vm-select-input-content__selected",children:[Nt("span",{children:e}),Nt("div",{onClick:(t=e,e=>{n(t),e.stopPropagation()}),children:Nt(In,{})})]},e);var t}))})},np=e=>{let{value:t,list:n,label:a,placeholder:o,noOptionsText:i,clearable:l=!1,searchable:s=!1,autofocus:c,disabled:u,onChange:d}=e;const{isDarkTheme:h}=Mt(),{isMobile:m}=ea(),[p,f]=(0,r.useState)(""),v=(0,r.useRef)(null),[g,y]=(0,r.useState)(null),[_,b]=(0,r.useState)(!1),w=(0,r.useRef)(null),k=Array.isArray(t),x=Array.isArray(t)?t:void 0,S=m&&k&&!(null===x||void 0===x||!x.length),C=(0,r.useMemo)((()=>_?p:Array.isArray(t)?"":t),[t,p,_,k]),E=(0,r.useMemo)((()=>_?p||"(.+)":""),[p,_]),N=()=>{w.current&&w.current.blur()},A=()=>{b(!1),N()},M=e=>{f(""),d(e),k||A(),k&&w.current&&w.current.focus()};return(0,r.useEffect)((()=>{f(""),_&&w.current&&w.current.focus(),_||N()}),[_,w]),(0,r.useEffect)((()=>{c&&w.current&&!m&&w.current.focus()}),[c,w]),Ar("keyup",(e=>{w.current!==e.target&&b(!1)})),ia(v,A,g),Nt("div",{className:Cr()({"vm-select":!0,"vm-select_dark":h,"vm-select_disabled":u}),children:[Nt("div",{className:"vm-select-input",onClick:e=>{e.target instanceof HTMLInputElement||u||b((e=>!e))},ref:v,children:[Nt("div",{className:"vm-select-input-content",children:[!(null===x||void 0===x||!x.length)&&Nt(tp,{values:x,onRemoveItem:M}),!S&&Nt("input",{value:C,type:"text",placeholder:o,onInput:e=>{f(e.target.value)},onFocus:()=>{u||b(!0)},onBlur:()=>{n.includes(p)&&d(p)},ref:w,readOnly:m||!s})]}),a&&Nt("span",{className:"vm-text-field__label",children:a}),l&&t&&Nt("div",{className:"vm-select-input__icon",onClick:(e=>t=>{M(e),t.stopPropagation()})(""),children:Nt(In,{})}),Nt("div",{className:Cr()({"vm-select-input__icon":!0,"vm-select-input__icon_open":_}),children:Nt(Hn,{})})]}),Nt(Ho,{label:a,value:E,options:n.map((e=>({value:e}))),anchor:v,selected:x,minLength:1,fullWidth:!0,noOptionsText:i,onSelect:M,onOpenAutocomplete:b,onChangeWrapperRef:y})]})},rp=st.map((e=>e.id)),ap=e=>{let{jobs:t,instances:n,names:a,job:o,instance:i,size:l,selectedMetrics:s,onChangeJob:c,onChangeInstance:u,onToggleMetric:d,onChangeSize:h}=e;const m=(0,r.useMemo)((()=>o?"":"No instances. Please select job"),[o]),p=(0,r.useMemo)((()=>o?"":"No metric names. Please select job"),[o]),{isMobile:f}=ea(),{value:v,toggle:g,setFalse:y}=ca("false"!==et("EXPLORE_METRICS_TIPS"));return(0,r.useEffect)((()=>{Xe("EXPLORE_METRICS_TIPS","".concat(v))}),[v]),Nt(Ct.FK,{children:[Nt("div",{className:Cr()({"vm-explore-metrics-header":!0,"vm-explore-metrics-header_mobile":f,"vm-block":!0,"vm-block_mobile":f}),children:[Nt("div",{className:"vm-explore-metrics-header__job",children:Nt(np,{value:o,list:t,label:"Job",placeholder:"Please select job",onChange:c,autofocus:!o&&!!t.length&&!f,searchable:!0})}),Nt("div",{className:"vm-explore-metrics-header__instance",children:Nt(np,{value:i,list:n,label:"Instance",placeholder:"Please select instance",onChange:u,noOptionsText:m,clearable:!0,searchable:!0})}),Nt("div",{className:"vm-explore-metrics-header__size",children:[Nt(np,{label:"Size graphs",value:l,list:rp,onChange:h}),Nt(ya,{title:"".concat(v?"Hide":"Show"," tip"),children:Nt(la,{variant:"text",color:v?"warning":"gray",startIcon:Nt(hr,{}),onClick:g,ariaLabel:"visibility tips"})})]}),Nt("div",{className:"vm-explore-metrics-header-metrics",children:Nt(np,{label:"Metrics",value:s,list:a,placeholder:"Search metric name",onChange:d,noOptionsText:p,clearable:!0,searchable:!0})})]}),v&&Nt(na,{variant:"warning",children:Nt("div",{className:"vm-explore-metrics-header-description",children:[Nt("p",{children:["Please note: this page is solely designed for exploring Prometheus metrics. Prometheus metrics always contain ",Nt("code",{children:"job"})," and ",Nt("code",{children:"instance"})," labels (see ",Nt("a",{className:"vm-link vm-link_colored",href:"https://prometheus.io/docs/concepts/jobs_instances/",children:"these docs"}),"), and this page relies on them as filters. ",Nt("br",{}),"Please use this page for Prometheus metrics only, in accordance with their naming conventions."]}),Nt(la,{variant:"text",size:"small",startIcon:Nt(In,{}),onClick:y,ariaLabel:"close tips"})]})})]})},op=ut("job",""),ip=ut("instance",""),lp=ut("metrics",""),sp=ut("size",""),cp=st.find((e=>sp?e.id===sp:e.isDefault))||st[0],up=()=>{const[e,t]=(0,r.useState)(op),[n,a]=(0,r.useState)(ip),[o,i]=(0,r.useState)(lp?lp.split("&"):[]),[l,s]=(0,r.useState)(cp);(e=>{let{job:t,instance:n,metrics:a,size:o}=e;const{duration:i,relativeTime:l,period:{date:s}}=fn(),{customStep:c}=Ur(),{setSearchParamsFromKeys:u}=uo(),d=()=>{const e=im({"g0.range_input":i,"g0.end_input":s,"g0.step_input":c,"g0.relative_time":l,size:o,job:t,instance:n,metrics:a});u(e)};(0,r.useEffect)(d,[i,l,s,c,t,n,a,o]),(0,r.useEffect)(d,[])})({job:e,instance:n,metrics:o.join("&"),size:l.id});const{jobs:c,isLoading:u,error:d}=(()=>{const{serverUrl:e}=Mt(),{period:t}=fn(),[n,a]=(0,r.useState)([]),[o,i]=(0,r.useState)(!1),[l,s]=(0,r.useState)(),c=(0,r.useMemo)((()=>((e,t)=>"".concat(e,"/api/v1/label/job/values?start=").concat(t.start,"&end=").concat(t.end))(e,t)),[e,t]);return(0,r.useEffect)((()=>{(async()=>{i(!0);try{const e=await fetch(c),t=await e.json(),n=t.data||[];a(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?s(void 0):s("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Lp){Lp instanceof Error&&s("".concat(Lp.name,": ").concat(Lp.message))}i(!1)})().catch(console.error)}),[c]),{jobs:n,isLoading:o,error:l}})(),{instances:h,isLoading:m,error:p}=Zm(e),{names:f,isLoading:v,error:g}=Gm(e,n),y=(0,r.useMemo)((()=>u||m||v),[u,m,v]),_=(0,r.useMemo)((()=>d||p||g),[d,p,g]),b=e=>{i(e?t=>t.includes(e)?t.filter((t=>t!==e)):[...t,e]:[])},w=(e,t,n)=>{const r=n>o.length-1;n<0||r||i((e=>{const r=[...e],[a]=r.splice(t,1);return r.splice(n,0,a),r}))};return(0,r.useEffect)((()=>{n&&h.length&&!h.includes(n)&&a("")}),[h,n]),Nt("div",{className:"vm-explore-metrics",children:[Nt(ap,{jobs:c,instances:h,names:f,job:e,size:l.id,instance:n,selectedMetrics:o,onChangeJob:t,onChangeSize:e=>{const t=st.find((t=>t.id===e));t&&s(t)},onChangeInstance:a,onToggleMetric:b}),y&&Nt(wl,{}),_&&Nt(na,{variant:"error",children:_}),!e&&Nt(na,{variant:"info",children:"Please select job to see list of metric names."}),e&&!o.length&&Nt(na,{variant:"info",children:"Please select metric names to see the graphs."}),Nt("div",{className:"vm-explore-metrics-body",children:o.map(((t,r)=>Nt(ep,{name:t,job:e,instance:n,index:r,length:o.length,size:l,onRemoveItem:b,onChangeOrder:w},t)))})]})},dp=()=>{const t=fl();return Nt("div",{className:"vm-preview-icons",children:Object.entries(e).map((e=>{let[n,r]=e;return Nt("div",{className:"vm-preview-icons-item",onClick:(a=n,async()=>{await t("<".concat(a,"/>"),"<".concat(a,"/> has been copied"))}),children:[Nt("div",{className:"vm-preview-icons-item__svg",children:r()}),Nt("div",{className:"vm-preview-icons-item__name",children:"<".concat(n,"/>")})]},n);var a}))})};var hp=function(e){return e.copy="Copy",e.copied="Copied",e}(hp||{});const mp=e=>{let{code:t}=e;const[n,a]=(0,r.useState)(hp.copy);return(0,r.useEffect)((()=>{let e=null;return n===hp.copied&&(e=setTimeout((()=>a(hp.copy)),1e3)),()=>{e&&clearTimeout(e)}}),[n]),Nt("code",{className:"vm-code-example",children:[t,Nt("div",{className:"vm-code-example__copy",children:Nt(ya,{title:n,children:Nt(la,{size:"small",variant:"text",onClick:()=>{navigator.clipboard.writeText(t),a(hp.copied)},startIcon:Nt(rr,{}),ariaLabel:"close"})})})]})},pp=()=>Nt("a",{className:"vm-link vm-link_colored",href:"https://docs.victoriametrics.com/MetricsQL.html",target:"_blank",rel:"help noreferrer",children:"MetricsQL"}),fp=()=>Nt("a",{className:"vm-link vm-link_colored",href:"https://grafana.com/grafana/dashboards/1860-node-exporter-full/",target:"_blank",rel:"help noreferrer",children:"Node Exporter Full"}),vp=()=>Nt("section",{className:"vm-with-template-tutorial",children:[Nt("h2",{className:"vm-with-template-tutorial__title",children:["Tutorial for WITH expressions in ",Nt(pp,{})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["Let's look at the following real query from ",Nt(fp,{})," dashboard:"]}),Nt(mp,{code:'(\n (\n node_memory_MemTotal_bytes{instance=~"$node:$port", job=~"$job"}\n -\n node_memory_MemFree_bytes{instance=~"$node:$port", job=~"$job"}\n )\n /\n node_memory_MemTotal_bytes{instance=~"$node:$port", job=~"$job"}\n) * 100'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"It is clear the query calculates the percentage of used memory for the given $node, $port and $job. Isn't it? :)"})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"What's wrong with this query? Copy-pasted label filters for distinct timeseries which makes it easy to mistype these filters during modification. Let's simplify the query with WITH expressions:"}),Nt(mp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"}\n)\n(\n node_memory_MemTotal_bytes{commonFilters}\n -\n node_memory_MemFree_bytes{commonFilters}\n)\n /\nnode_memory_MemTotal_bytes{commonFilters} * 100'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["Now label filters are located in a single place instead of three distinct places. The query mentions node_memory_MemTotal_bytes metric twice and ","{commonFilters}"," three times. WITH expressions may improve this:"]}),Nt(mp,{code:'WITH (\n my_resource_utilization(free, limit, filters) = (limit{filters} - free{filters}) / limit{filters} * 100\n)\nmy_resource_utilization(\n node_memory_MemFree_bytes,\n node_memory_MemTotal_bytes,\n {instance=~"$node:$port",job=~"$job"},\n)'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"Now the template function my_resource_utilization() may be used for monitoring arbitrary resources - memory, CPU, network, storage, you name it."})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["Let's take another nice query from ",Nt(fp,{})," dashboard:"]}),Nt(mp,{code:'(\n (\n (\n count(\n count(node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"}) by (cpu)\n )\n )\n -\n avg(\n sum by (mode) (rate(node_cpu_seconds_total{mode=\'idle\',instance=~"$node:$port",job=~"$job"}[5m]))\n )\n )\n *\n 100\n)\n /\ncount(\n count(node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"}) by (cpu)\n)'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"Do you understand what does this mess do? Is it manageable? :) WITH expressions are happy to help in a few iterations."})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"1. Extract common filters used in multiple places into a commonFilters variable:"}),Nt(mp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"}\n)\n(\n (\n (\n count(\n count(node_cpu_seconds_total{commonFilters}) by (cpu)\n )\n )\n -\n avg(\n sum by (mode) (rate(node_cpu_seconds_total{mode=\'idle\',commonFilters}[5m]))\n )\n )\n *\n 100\n)\n /\ncount(\n count(node_cpu_seconds_total{commonFilters}) by (cpu)\n)'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:'2. Extract "count(count(...) by (cpu))" into cpuCount variable:'}),Nt(mp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"},\n cpuCount = count(count(node_cpu_seconds_total{commonFilters}) by (cpu))\n)\n(\n (\n cpuCount\n -\n avg(\n sum by (mode) (rate(node_cpu_seconds_total{mode=\'idle\',commonFilters}[5m]))\n )\n )\n *\n 100\n) / cpuCount'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"3. Extract rate(...) part into cpuIdle variable, since it is clear now that this part calculates the number of idle CPUs:"}),Nt(mp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"},\n cpuCount = count(count(node_cpu_seconds_total{commonFilters}) by (cpu)),\n cpuIdle = sum(rate(node_cpu_seconds_total{mode=\'idle\',commonFilters}[5m]))\n)\n((cpuCount - cpuIdle) * 100) / cpuCount'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["4. Put node_cpu_seconds_total","{commonFilters}"," into its own varialbe with the name cpuSeconds:"]}),Nt(mp,{code:'WITH (\n cpuSeconds = node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"},\n cpuCount = count(count(cpuSeconds) by (cpu)),\n cpuIdle = sum(rate(cpuSeconds{mode=\'idle\'}[5m]))\n)\n((cpuCount - cpuIdle) * 100) / cpuCount'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"Now the query became more clear comparing to the initial query."})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"WITH expressions may be nested and may be put anywhere. Try expanding the following query:"}),Nt(mp,{code:"WITH (\n f(a, b) = WITH (\n f1(x) = b-x,\n f2(x) = x+x\n ) f1(a)*f2(b)\n) f(foo, with(x=bar) x)"})]})]}),gp=()=>{const{serverUrl:e}=Mt(),[t,n]=He(),[a,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)();return{data:a,error:s,loading:i,expand:async r=>{t.set("expr",r),n(t);const a=((e,t)=>"".concat(e,"/expand-with-exprs?query=").concat(encodeURIComponent(t),"&format=json"))(e,r);l(!0);try{const e=await fetch(a),t=await e.json();o((null===t||void 0===t?void 0:t.expr)||""),c(String(t.error||""))}catch(Lp){Lp instanceof Error&&"AbortError"!==Lp.name&&c("".concat(Lp.name,": ").concat(Lp.message))}l(!1)}}},yp=()=>{const[e]=He(),{data:t,loading:n,error:a,expand:o}=gp(),[i,l]=(0,r.useState)(e.get("expr")||""),s=()=>{o(i)};return(0,r.useEffect)((()=>{i&&o(i)}),[]),Nt("section",{className:"vm-with-template",children:[n&&Nt(wl,{}),Nt("div",{className:"vm-with-template-body vm-block",children:[Nt("div",{className:"vm-with-template-body__expr",children:Nt(Ya,{type:"textarea",label:"MetricsQL query with optional WITH expressions",value:i,error:a,autofocus:!0,onEnter:s,onChange:e=>{l(e)}})}),Nt("div",{className:"vm-with-template-body__result",children:Nt(Ya,{type:"textarea",label:"MetricsQL query after expanding WITH expressions and applying other optimizations",value:t,disabled:!0})}),Nt("div",{className:"vm-with-template-body-top",children:Nt(la,{variant:"contained",onClick:s,startIcon:Nt(qn,{}),children:"Expand"})})]}),Nt("div",{className:"vm-block",children:Nt(vp,{})})]})},_p=()=>{const{serverUrl:e}=Mt(),[t,n]=(0,r.useState)(null),[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)();return{data:t,error:i,loading:a,fetchData:async(t,r)=>{const a=((e,t,n)=>{const r=["format=json","relabel_configs=".concat(encodeURIComponent(t)),"metric=".concat(encodeURIComponent(n))];return"".concat(e,"/metric-relabel-debug?").concat(r.join("&"))})(e,t,r);o(!0);try{const e=await fetch(a),t=await e.json();n(t.error?null:t),l(String(t.error||""))}catch(Lp){Lp instanceof Error&&"AbortError"!==Lp.name&&l("".concat(Lp.name,": ").concat(Lp.message))}o(!1)}}},bp={config:'- if: \'{bar_label=~"b.*"}\'\n source_labels: [foo_label, bar_label]\n separator: "_"\n target_label: foobar\n- action: labeldrop\n regex: "foo_.*"\n- target_label: job\n replacement: "my-application-2"',labels:'{__name__="my_metric", bar_label="bar", foo_label="foo", job="my-application", instance="192.168.0.1"}'},wp=()=>{const[e,t]=He(),{data:n,loading:a,error:o,fetchData:i}=_p(),[l,s]=_m("","config"),[c,u]=_m("","labels"),d=(0,r.useCallback)((()=>{i(l,c),e.set("config",l),e.set("labels",c),t(e)}),[l,c]);return(0,r.useEffect)((()=>{const t=e.get("config")||"",n=e.get("labels")||"";(n||t)&&(i(t,n),s(t),u(n))}),[]),Nt("section",{className:"vm-relabeling",children:[a&&Nt(wl,{}),Nt("div",{className:"vm-relabeling-header vm-block",children:[Nt("div",{className:"vm-relabeling-header-configs",children:Nt(Ya,{type:"textarea",label:"Relabel configs",value:l,autofocus:!0,onChange:e=>{s(e||"")},onEnter:d})}),Nt("div",{className:"vm-relabeling-header__labels",children:Nt(Ya,{type:"textarea",label:"Labels",value:c,onChange:e=>{u(e||"")},onEnter:d})}),Nt("div",{className:"vm-relabeling-header-bottom",children:[Nt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/relabeling.html",rel:"help noreferrer",children:[Nt(On,{}),"Relabeling cookbook"]}),Nt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/vmagent.html#relabeling",rel:"help noreferrer",children:[Nt(ir,{}),"Documentation"]}),Nt(la,{variant:"text",onClick:()=>{const{config:n,labels:r}=bp;s(n),u(r),i(n,r),e.set("config",n),e.set("labels",r),t(e)},children:"Try example"}),Nt(la,{variant:"contained",onClick:d,startIcon:Nt(qn,{}),children:"Submit"})]})]}),o&&Nt(na,{variant:"error",children:o}),n&&Nt("div",{className:"vm-relabeling-steps vm-block",children:[n.originalLabels&&Nt("div",{className:"vm-relabeling-steps-item",children:Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Original labels:"}),Nt("code",{dangerouslySetInnerHTML:{__html:n.originalLabels}})]})}),n.steps.map(((e,t)=>Nt("div",{className:"vm-relabeling-steps-item",children:[Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Step:"}),t+1]}),Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Relabeling Rule:"}),Nt("code",{children:Nt("pre",{children:e.rule})})]}),Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Input Labels:"}),Nt("code",{children:Nt("pre",{dangerouslySetInnerHTML:{__html:e.inLabels}})})]}),Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Output labels:"}),Nt("code",{children:Nt("pre",{dangerouslySetInnerHTML:{__html:e.outLabels}})})]})]},t))),n.resultingLabels&&Nt("div",{className:"vm-relabeling-steps-item",children:Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Resulting labels:"}),Nt("code",{dangerouslySetInnerHTML:{__html:n.resultingLabels}})]})})]})]})},kp=e=>{let{rows:t,columns:n,defaultOrderBy:a,defaultOrderDir:o,copyToClipboard:i,paginationOffset:l}=e;const[s,c]=(0,r.useState)(a),[u,d]=(0,r.useState)(o||"desc"),[h,m]=(0,r.useState)(null),p=(0,r.useMemo)((()=>{const{startIndex:e,endIndex:n}=l;return Cm(t,Sm(u,s)).slice(e,n)}),[t,s,u,l]),f=(e,t)=>async()=>{if(h!==t)try{await navigator.clipboard.writeText(String(e)),m(t)}catch(Lp){console.error(Lp)}};return(0,r.useEffect)((()=>{if(null===h)return;const e=setTimeout((()=>m(null)),2e3);return()=>clearTimeout(e)}),[h]),Nt("table",{className:"vm-table",children:[Nt("thead",{className:"vm-table-header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:[n.map((e=>{return Nt("th",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:(t=e.key,()=>{d((e=>"asc"===e&&s===t?"desc":"asc")),c(t)}),children:Nt("div",{className:"vm-table-cell__content",children:[Nt("div",{children:String(e.title||e.key)}),Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":s===e.key,"vm-table__sort-icon_desc":"desc"===u&&s===e.key}),children:Nt(Hn,{})})]})},String(e.key));var t})),i&&Nt("th",{className:"vm-table-cell vm-table-cell_header"})]})}),Nt("tbody",{className:"vm-table-body",children:p.map(((e,t)=>Nt("tr",{className:"vm-table__row",children:[n.map((t=>Nt("td",{className:Cr()({"vm-table-cell":!0,["".concat(t.className)]:t.className}),children:e[t.key]||"-"},String(t.key)))),i&&Nt("td",{className:"vm-table-cell vm-table-cell_right",children:e[i]&&Nt("div",{className:"vm-table-cell__content",children:Nt(ya,{title:h===t?"Copied":"Copy row",children:Nt(la,{variant:"text",color:h===t?"success":"gray",size:"small",startIcon:Nt(h===t?Xn:rr,{}),onClick:f(e[i],t),ariaLabel:"copy row"})})})})]},t)))})]})},xp=()=>{const{isMobile:e}=ea(),{timezone:t}=fn(),{data:n,lastUpdated:a,isLoading:i,error:l,fetchData:s}=(()=>{const{serverUrl:e}=Mt(),[t,n]=(0,r.useState)([]),[a,i]=(0,r.useState)(o()().format(Ot)),[l,s]=(0,r.useState)(!1),[c,u]=(0,r.useState)(),d=(0,r.useMemo)((()=>"".concat(e,"/api/v1/status/active_queries")),[e]),h=async()=>{s(!0);try{const e=await fetch(d),t=await e.json();n(t.data),i(o()().format("HH:mm:ss:SSS")),e.ok?u(void 0):u("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Lp){Lp instanceof Error&&u("".concat(Lp.name,": ").concat(Lp.message))}s(!1)};return(0,r.useEffect)((()=>{h().catch(console.error)}),[d]),{data:t,lastUpdated:a,isLoading:l,error:c,fetchData:h}})(),c=(0,r.useMemo)((()=>n.map((e=>{const t=o()(e.start).tz().format(Pt),n=o()(e.end).tz().format(Pt);return{duration:e.duration,remote_addr:e.remote_addr,query:e.query,args:"".concat(t," to ").concat(n,", step=").concat(Wt(e.step)),data:JSON.stringify(e,null,2)}}))),[n,t]),u=(0,r.useMemo)((()=>{if(null===c||void 0===c||!c.length)return[];const e=Object.keys(c[0]),t={remote_addr:"client address"},n=["data"];return e.filter((e=>!n.includes(e))).map((e=>({key:e,title:t[e]||e})))}),[c]);return Nt("div",{className:"vm-active-queries",children:[i&&Nt(wl,{}),Nt("div",{className:"vm-active-queries-header",children:[!c.length&&!l&&Nt(na,{variant:"info",children:"There are currently no active queries running"}),l&&Nt(na,{variant:"error",children:l}),Nt("div",{className:"vm-active-queries-header-controls",children:[Nt(la,{variant:"contained",onClick:async()=>{s().catch(console.error)},startIcon:Nt(Fn,{}),children:"Update"}),Nt("div",{className:"vm-active-queries-header__update-msg",children:["Last updated: ",a]})]})]}),!!c.length&&Nt("div",{className:Cr()({"vm-block":!0,"vm-block_mobile":e}),children:Nt(kp,{rows:c,columns:u,defaultOrderBy:"duration",copyToClipboard:"data",paginationOffset:{startIndex:0,endIndex:1/0}})})]})},Sp=e=>{let{onClose:t,onUpload:n}=e;const{isMobile:a}=ea(),[o,i]=(0,r.useState)(""),[l,s]=(0,r.useState)(""),c=(0,r.useMemo)((()=>{try{return JSON.parse(o),""}catch(Lp){return Lp instanceof Error?Lp.message:"Unknown error"}}),[o]),u=()=>{s(c),c||(n(o),t())};return Nt("div",{className:Cr()({"vm-json-form vm-json-form_one-field":!0,"vm-json-form_mobile vm-json-form_one-field_mobile":a}),children:[Nt(Ya,{value:o,label:"JSON",type:"textarea",error:l,autofocus:!0,onChange:e=>{s(""),i(e)},onEnter:u}),Nt("div",{className:"vm-json-form-footer",children:Nt("div",{className:"vm-json-form-footer__controls vm-json-form-footer__controls_right",children:[Nt(la,{variant:"outlined",color:"error",onClick:t,children:"Cancel"}),Nt(la,{variant:"contained",onClick:u,children:"apply"})]})})]})},Cp=e=>{let{data:t,period:n}=e;const{isMobile:a}=ea(),{tableCompact:o}=Fr(),i=jr(),[l,s]=(0,r.useState)([]),[c,u]=(0,r.useState)(),[d,h]=(0,r.useState)(),[m,p]=(0,r.useState)(!1),[f,v]=(0,r.useState)([]),[g,y]=(0,r.useState)(),_=(0,r.useMemo)((()=>Yh(d||[]).map((e=>e.key))),[d]),b=(0,r.useMemo)((()=>{const e=t.some((e=>"matrix"===e.data.resultType));return t.some((e=>"vector"===e.data.resultType))&&e?Lr:e?Lr.filter((e=>"chart"===e.value)):Lr.filter((e=>"chart"!==e.value))}),[t]),[w,k]=(0,r.useState)(b[0].value),{yaxis:x,spanGaps:S}=Ur(),C=Br(),E=e=>{C({type:"SET_YAXIS_LIMITS",payload:e})};return(0,r.useEffect)((()=>{const e="chart"===w?"matrix":"vector",n=t.filter((t=>t.data.resultType===e&&t.trace)).map((e=>{var t,n;return e.trace?new Cl(e.trace,(null===e||void 0===e||null===(t=e.vmui)||void 0===t||null===(n=t.params)||void 0===n?void 0:n.query)||"Query"):null}));s(n.filter(Boolean))}),[t,w]),(0,r.useEffect)((()=>{const e=[],n=[],r=[];t.forEach(((t,a)=>{const o=t.data.result.map((e=>{var n,r,o;return{...e,group:Number(null!==(n=null===(r=t.vmui)||void 0===r||null===(o=r.params)||void 0===o?void 0:o.id)&&void 0!==n?n:a)+1}}));var i,l;"matrix"===t.data.resultType?(n.push(...o),e.push((null===(i=t.vmui)||void 0===i||null===(l=i.params)||void 0===l?void 0:l.query)||"Query")):r.push(...o)})),v(e),u(n),h(r)}),[t]),(0,r.useEffect)((()=>{p(!!c&&Al(c))}),[c]),Nt("div",{className:Cr()({"vm-query-analyzer-view":!0,"vm-query-analyzer-view_mobile":a}),children:[!!l.length&&Nt(Hl,{traces:l,onDeleteClick:e=>{s((t=>t.filter((t=>t.idValue!==e.idValue))))}}),Nt("div",{className:Cr()({"vm-block":!0,"vm-block_mobile":a}),children:[Nt("div",{className:"vm-custom-panel-body-header",children:[Nt("div",{className:"vm-custom-panel-body-header__tabs",children:Nt(Tr,{activeItem:w,items:b,onChange:e=>{k(e)}})}),Nt("div",{className:"vm-custom-panel-body-header__graph-controls",children:["chart"===w&&Nt(xa,{}),"chart"===w&&Nt(Uh,{yaxis:x,setYaxisLimits:E,toggleEnableLimits:()=>{C({type:"TOGGLE_ENABLE_YAXIS_LIMITS"})},spanGaps:{value:S,onChange:e=>{C({type:"SET_SPAN_GAPS",payload:e})}}}),"table"===w&&Nt(Gh,{columns:_,defaultColumns:g,onChangeColumns:y,tableCompact:o,toggleTableCompact:()=>{i({type:"TOGGLE_TABLE_COMPACT"})}})]})]}),c&&n&&"chart"===w&&Nt(jh,{data:c,period:n,customStep:n.step||"1s",query:f,yaxis:x,setYaxisLimits:E,setPeriod:()=>null,height:a?.5*window.innerHeight:500,isHistogram:m,spanGaps:S}),d&&"code"===w&&Nt(qh,{data:d}),d&&"table"===w&&Nt(Kh,{data:d,displayColumns:g})]})]})},Ep=e=>{var t,n;let{data:a,period:i}=e;const l=(0,r.useMemo)((()=>a.filter((e=>e.stats&&"matrix"===e.data.resultType))),[a]),s=(0,r.useMemo)((()=>{var e,t;return null===(e=a.find((e=>{var t;return null===e||void 0===e||null===(t=e.vmui)||void 0===t?void 0:t.comment})))||void 0===e||null===(t=e.vmui)||void 0===t?void 0:t.comment}),[a]),c=(0,r.useMemo)((()=>{if(!i)return"";const e=o()(1e3*i.start).tz().format(Pt),t=o()(1e3*i.end).tz().format(Pt);return"".concat(e," - ").concat(t)}),[i]),{value:u,setTrue:d,setFalse:h}=ca(!1);return Nt(Ct.FK,{children:[Nt("div",{className:"vm-query-analyzer-info-header",children:[Nt(la,{startIcon:Nt(On,{}),variant:"outlined",color:"warning",onClick:d,children:"Show report info"}),i&&Nt(Ct.FK,{children:[Nt("div",{className:"vm-query-analyzer-info-header__period",children:[Nt(or,{})," step: ",i.step]}),Nt("div",{className:"vm-query-analyzer-info-header__period",children:[Nt(Vn,{})," ",c]})]})]}),u&&Nt(ga,{title:"Report info",onClose:h,children:Nt("div",{className:"vm-query-analyzer-info",children:[s&&Nt("div",{className:"vm-query-analyzer-info-item vm-query-analyzer-info-item_comment",children:[Nt("div",{className:"vm-query-analyzer-info-item__title",children:"Comment:"}),Nt("div",{className:"vm-query-analyzer-info-item__text",children:s})]}),l.map(((e,t)=>{var n;return Nt("div",{className:"vm-query-analyzer-info-item",children:[Nt("div",{className:"vm-query-analyzer-info-item__title",children:l.length>1?"Query ".concat(t+1,":"):"Stats:"}),Nt("div",{className:"vm-query-analyzer-info-item__text",children:[Object.entries(e.stats||{}).map((e=>{let[t,n]=e;return Nt("div",{children:[t,": ",null!==n&&void 0!==n?n:"-"]},t)})),"isPartial: ",String(null!==(n=e.isPartial)&&void 0!==n?n:"-")]})]},t)})),Nt("div",{className:"vm-query-analyzer-info-type",children:null!==(t=l[0])&&void 0!==t&&null!==(n=t.vmui)&&void 0!==n&&n.params?"The report was created using vmui":"The report was created manually"})]})})]})},Np=()=>{const[e,t]=(0,r.useState)([]),[n,a]=(0,r.useState)(""),o=(0,r.useMemo)((()=>!!e.length),[e]),{value:i,setTrue:l,setFalse:s}=ca(!1),c=(0,r.useMemo)((()=>{var t,n;if(!e)return;const r=null===(t=e[0])||void 0===t||null===(n=t.vmui)||void 0===n?void 0:n.params,a={start:+((null===r||void 0===r?void 0:r.start)||0),end:+((null===r||void 0===r?void 0:r.end)||0),step:null===r||void 0===r?void 0:r.step,date:""};if(!r){const t=e.filter((e=>"matrix"===e.data.resultType)).map((e=>e.data.result)).flat().map((e=>{var t;return e.values?null===(t=e.values)||void 0===t?void 0:t.map((e=>e[0])):[0]})).flat(),n=Array.from(new Set(t.filter(Boolean))).sort(((e,t)=>e-t));a.start=n[0],a.end=n[n.length-1],a.step=Yt((e=>{const t=e.slice(1).map(((t,n)=>t-e[n])),n={};t.forEach((e=>{const t=e.toString();n[t]=(n[t]||0)+1}));let r=0,a=0;for(const o in n)n[o]>a&&(a=n[o],r=Number(o));return r})(n))}return a.date=Jt(tn(a.end)),a}),[e]),u=e=>{try{const n=JSON.parse(e),r=Array.isArray(n)?n:[n];(e=>e.every((e=>{if("object"===typeof e&&null!==e){const t=e.data;if("object"===typeof t&&null!==t){const e=t.result,n=t.resultType;return Array.isArray(e)&&"string"===typeof n}}return!1})))(r)?t(r):a("Invalid structure - JSON does not match the expected format")}catch(Lp){Lp instanceof Error&&a("".concat(Lp.name,": ").concat(Lp.message))}},d=e=>{e.map((e=>{const t=new FileReader;t.onload=e=>{var t;const n=String(null===(t=e.target)||void 0===t?void 0:t.result);u(n)},t.readAsText(e)}))},h=e=>{a("");const t=Array.from(e.target.files||[]);d(t),e.target.value=""},{files:m,dragging:p}=Wm();return(0,r.useEffect)((()=>{d(m)}),[m]),Nt("div",{className:"vm-trace-page",children:[o&&Nt("div",{className:"vm-trace-page-header",children:[Nt("div",{className:"vm-trace-page-header-errors",children:Nt(Ep,{data:e,period:c})}),Nt("div",{children:Nt(Km,{onOpenModal:l,onChange:h})})]}),n&&Nt("div",{className:"vm-trace-page-header-errors-item vm-trace-page-header-errors-item_margin-bottom",children:[Nt(na,{variant:"error",children:n}),Nt(la,{className:"vm-trace-page-header-errors-item__close",startIcon:Nt(In,{}),variant:"text",color:"error",onClick:()=>{a("")}})]}),o&&Nt(Cp,{data:e,period:c}),!o&&Nt("div",{className:"vm-trace-page-preview",children:[Nt("p",{className:"vm-trace-page-preview__text",children:["Please, upload file with JSON response content.","\n","The file must contain query information in JSON format.","\n","Graph will be displayed after file upload.","\n","Attach files by dragging & dropping, selecting or pasting them."]}),Nt(Km,{onOpenModal:l,onChange:h})]}),i&&Nt(ga,{title:"Paste JSON",onClose:s,children:Nt(Sp,{onClose:s,onUpload:u})}),p&&Nt("div",{className:"vm-trace-page__dropzone"})]})},Ap=()=>{const[e,t]=(0,r.useState)(!1);return Nt(Ct.FK,{children:Nt(Ie,{children:Nt(aa,{children:Nt(Ct.FK,{children:[Nt(Ym,{onLoaded:t}),e&&Nt(xe,{children:Nt(we,{path:"/",element:Nt(Fo,{}),children:[Nt(we,{path:We.home,element:Nt(rm,{})}),Nt(we,{path:We.metrics,element:Nt(up,{})}),Nt(we,{path:We.cardinality,element:Nt(Rm,{})}),Nt(we,{path:We.topQueries,element:Nt(Vm,{})}),Nt(we,{path:We.trace,element:Nt(Qm,{})}),Nt(we,{path:We.queryAnalyzer,element:Nt(Np,{})}),Nt(we,{path:We.dashboards,element:Nt(lm,{})}),Nt(we,{path:We.withTemplate,element:Nt(yp,{})}),Nt(we,{path:We.relabel,element:Nt(wp,{})}),Nt(we,{path:We.activeQueries,element:Nt(xp,{})}),Nt(we,{path:We.icons,element:Nt(dp,{})})]})})]})})})})},Mp=e=>{e&&n.e(685).then(n.bind(n,685)).then((t=>{let{onCLS:n,onINP:r,onFCP:a,onLCP:o,onTTFB:i}=t;n(e),r(e),a(e),o(e),i(e)}))},Tp=document.getElementById("root");Tp&&(0,r.render)(Nt(Ap,{}),Tp),Mp()})()})(); \ No newline at end of file diff --git a/app/vmselect/vmui/static/js/main.9ed27532.js.LICENSE.txt b/app/vmselect/vmui/static/js/main.0e69b7a9.js.LICENSE.txt similarity index 89% rename from app/vmselect/vmui/static/js/main.9ed27532.js.LICENSE.txt rename to app/vmselect/vmui/static/js/main.0e69b7a9.js.LICENSE.txt index 665580a084..c4b51e538d 100644 --- a/app/vmselect/vmui/static/js/main.9ed27532.js.LICENSE.txt +++ b/app/vmselect/vmui/static/js/main.0e69b7a9.js.LICENSE.txt @@ -5,7 +5,7 @@ */ /** - * @remix-run/router v1.17.0 + * @remix-run/router v1.19.2 * * Copyright (c) Remix Software Inc. * @@ -16,7 +16,7 @@ */ /** - * React Router DOM v6.24.0 + * React Router DOM v6.26.2 * * Copyright (c) Remix Software Inc. * @@ -27,7 +27,7 @@ */ /** - * React Router v6.24.0 + * React Router v6.26.2 * * Copyright (c) Remix Software Inc. * diff --git a/app/vmselect/vmui/static/js/main.9ed27532.js b/app/vmselect/vmui/static/js/main.9ed27532.js deleted file mode 100644 index 6ad48bb9f0..0000000000 --- a/app/vmselect/vmui/static/js/main.9ed27532.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.9ed27532.js.LICENSE.txt */ -(()=>{var e={61:(e,t,n)=>{"use strict";var r=n(375),a=n(629),o=a(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&o(e,".prototype.")>-1?a(n):n}},629:(e,t,n)=>{"use strict";var r=n(989),a=n(375),o=n(259),i=n(277),l=a("%Function.prototype.apply%"),s=a("%Function.prototype.call%"),c=a("%Reflect.apply%",!0)||r.call(s,l),u=n(709),d=a("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new i("a function is required");var t=c(r,s,arguments);return o(t,1+d(0,e.length-(arguments.length-1)),!0)};var h=function(){return c(r,l,arguments)};u?u(e.exports,"apply",{value:h}):e.exports.apply=h},159:function(e){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",a="second",o="minute",i="hour",l="day",s="week",c="month",u="quarter",d="year",h="date",m="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,f=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},g=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},y={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),a=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(a,2,"0")},m:function e(t,n){if(t.date()1)return e(i[0])}else{var l=t.name;b[l]=t,a=l}return!r&&a&&(_=a),a||!r&&_},S=function(e,t){if(k(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},C=y;C.l=x,C.i=k,C.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function v(e){this.$L=x(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var g=v.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(C.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(p);if(r){var a=r[2]-1||0,o=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return C},g.isValid=function(){return!(this.$d.toString()===m)},g.isSame=function(e,t){var n=S(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return S(e)=0&&(o[d]=parseInt(u,10))}var h=o[3],m=24===h?0:h,p=o[0]+"-"+o[1]+"-"+o[2]+" "+m+":"+o[4]+":"+o[5]+":000",f=+t;return(a.utc(p).valueOf()-(f-=f%1e3))/6e4},s=r.prototype;s.tz=function(e,t){void 0===e&&(e=o);var n=this.utcOffset(),r=this.toDate(),i=r.toLocaleString("en-US",{timeZone:e}),l=Math.round((r-new Date(i))/1e3/60),s=a(i,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(r.getTimezoneOffset()/15)-l,!0);if(t){var c=s.utcOffset();s=s.add(n-c,"minute")}return s.$x.$timezone=e,s},s.offsetName=function(e){var t=this.$x.$timezone||a.tz.guess(),n=i(this.valueOf(),t,{timeZoneName:e}).find((function(e){return"timezonename"===e.type.toLowerCase()}));return n&&n.value};var c=s.startOf;s.startOf=function(e,t){if(!this.$x||!this.$x.$timezone)return c.call(this,e,t);var n=a(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return c.call(n,e,t).tz(this.$x.$timezone,!0)},a.tz=function(e,t,n){var r=n&&t,i=n||t||o,s=l(+a(),i);if("string"!=typeof e)return a(e).tz(i);var c=function(e,t,n){var r=e-60*t*1e3,a=l(r,n);if(t===a)return[r,t];var o=l(r-=60*(a-t)*1e3,n);return a===o?[r,a]:[e-60*Math.min(a,o)*1e3,Math.max(a,o)]}(a.utc(e,r).valueOf(),s,i),u=c[0],d=c[1],h=a(u).utcOffset(d);return h.$x.$timezone=i,h},a.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},a.tz.setDefault=function(e){o=e}}}()},220:function(e){e.exports=function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,a,o){var i=a.prototype;o.utc=function(e){return new a({date:e,utc:!0,args:arguments})},i.utc=function(t){var n=o(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},i.local=function(){return o(this.toDate(),{locale:this.$L,utc:!1})};var l=i.parse;i.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),l.call(this,e)};var s=i.init;i.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else s.call(this)};var c=i.utcOffset;i.utcOffset=function(r,a){var o=this.$utils().u;if(o(r))return this.$u?0:o(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&(r=function(e){void 0===e&&(e="");var r=e.match(t);if(!r)return null;var a=(""+r[0]).match(n)||["-",0,0],o=a[0],i=60*+a[1]+ +a[2];return 0===i?0:"+"===o?i:-i}(r),null===r))return this;var i=Math.abs(r)<=16?60*r:r,l=this;if(a)return l.$offset=i,l.$u=0===r,l;if(0!==r){var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(l=this.local().add(i+s,e)).$offset=i,l.$x.$localOffset=s}else l=this.utc();return l};var u=i.format;i.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,t)},i.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var d=i.toDate;i.toDate=function(e){return"s"===e&&this.$offset?o(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():d.call(this)};var h=i.diff;i.diff=function(e,t,n){if(e&&this.$u===e.$u)return h.call(this,e,t,n);var r=this.local(),a=o(e).local();return h.call(r,a,t,n)}}}()},411:(e,t,n)=>{"use strict";var r=n(709),a=n(430),o=n(277),i=n(553);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new o("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var l=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(r)r(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===l&&d?d.enumerable:!l,value:n,writable:null===s&&d?d.writable:!s});else{if(!u&&(l||s||c))throw new a("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},709:(e,t,n)=>{"use strict";var r=n(375)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(a){r=!1}e.exports=r},123:e=>{"use strict";e.exports=EvalError},953:e=>{"use strict";e.exports=Error},780:e=>{"use strict";e.exports=RangeError},768:e=>{"use strict";e.exports=ReferenceError},430:e=>{"use strict";e.exports=SyntaxError},277:e=>{"use strict";e.exports=TypeError},619:e=>{"use strict";e.exports=URIError},307:e=>{"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r{"use strict";var r=n(307);e.exports=Function.prototype.bind||r},375:(e,t,n)=>{"use strict";var r,a=n(953),o=n(123),i=n(780),l=n(768),s=n(430),c=n(277),u=n(619),d=Function,h=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(t){}},m=Object.getOwnPropertyDescriptor;if(m)try{m({},"")}catch(R){m=null}var p=function(){throw new c},f=m?function(){try{return p}catch(e){try{return m(arguments,"callee").get}catch(t){return p}}}():p,v=n(757)(),g=n(442)(),y=Object.getPrototypeOf||(g?function(e){return e.__proto__}:null),_={},b="undefined"!==typeof Uint8Array&&y?y(Uint8Array):r,w={__proto__:null,"%AggregateError%":"undefined"===typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":v&&y?y([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":_,"%AsyncGenerator%":_,"%AsyncGeneratorFunction%":_,"%AsyncIteratorPrototype%":_,"%Atomics%":"undefined"===typeof Atomics?r:Atomics,"%BigInt%":"undefined"===typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"===typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"===typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"===typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":a,"%eval%":eval,"%EvalError%":o,"%Float32Array%":"undefined"===typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"===typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"===typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":_,"%Int8Array%":"undefined"===typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"===typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"===typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":v&&y?y(y([][Symbol.iterator]())):r,"%JSON%":"object"===typeof JSON?JSON:r,"%Map%":"undefined"===typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&v&&y?y((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?r:Promise,"%Proxy%":"undefined"===typeof Proxy?r:Proxy,"%RangeError%":i,"%ReferenceError%":l,"%Reflect%":"undefined"===typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"===typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&v&&y?y((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":v&&y?y(""[Symbol.iterator]()):r,"%Symbol%":v?Symbol:r,"%SyntaxError%":s,"%ThrowTypeError%":f,"%TypedArray%":b,"%TypeError%":c,"%Uint8Array%":"undefined"===typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"===typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"===typeof Uint32Array?r:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"===typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"===typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"===typeof WeakSet?r:WeakSet};if(y)try{null.error}catch(R){var k=y(y(R));w["%Error.prototype%"]=k}var x=function e(t){var n;if("%AsyncFunction%"===t)n=h("async function () {}");else if("%GeneratorFunction%"===t)n=h("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=h("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var a=e("%AsyncGenerator%");a&&y&&(n=y(a.prototype))}return w[t]=n,n},S={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},C=n(989),E=n(155),N=C.call(Function.call,Array.prototype.concat),A=C.call(Function.apply,Array.prototype.splice),M=C.call(Function.call,String.prototype.replace),T=C.call(Function.call,String.prototype.slice),L=C.call(Function.call,RegExp.prototype.exec),I=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,P=/\\(\\)?/g,O=function(e,t){var n,r=e;if(E(S,r)&&(r="%"+(n=S[r])[0]+"%"),E(w,r)){var a=w[r];if(a===_&&(a=x(r)),"undefined"===typeof a&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:a}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===L(/^%?[^%]*%?$/,e))throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=T(e,0,1),n=T(e,-1);if("%"===t&&"%"!==n)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var r=[];return M(e,I,(function(e,t,n,a){r[r.length]=n?M(a,P,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",a=O("%"+r+"%",t),o=a.name,i=a.value,l=!1,u=a.alias;u&&(r=u[0],A(n,N([0,1],u)));for(var d=1,h=!0;d=n.length){var g=m(i,p);i=(h=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:i[p]}else h=E(i,p),i=i[p];h&&!l&&(w[o]=i)}}return i}},553:(e,t,n)=>{"use strict";var r=n(375)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(a){r=null}e.exports=r},734:(e,t,n)=>{"use strict";var r=n(709),a=function(){return!!r};a.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=a},442:e=>{"use strict";var t={__proto__:null,foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof n)}},757:(e,t,n)=>{"use strict";var r="undefined"!==typeof Symbol&&Symbol,a=n(175);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&a())))}},175:e=>{"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var a=Object.getOwnPropertyDescriptor(e,t);if(42!==a.value||!0!==a.enumerable)return!1}return!0}},155:(e,t,n)=>{"use strict";var r=Function.prototype.call,a=Object.prototype.hasOwnProperty,o=n(989);e.exports=o.call(r,a)},267:(e,t,n)=>{var r=NaN,a="[object Symbol]",o=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt,u="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,d="object"==typeof self&&self&&self.Object===Object&&self,h=u||d||Function("return this")(),m=Object.prototype.toString,p=Math.max,f=Math.min,v=function(){return h.Date.now()};function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function y(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&m.call(e)==a}(e))return r;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=l.test(e);return n||s.test(e)?c(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,a,o,i,l,s,c=0,u=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=r,o=a;return r=a=void 0,c=t,i=e.apply(o,n)}function _(e){var n=e-s;return void 0===s||n>=t||n<0||d&&e-c>=o}function b(){var e=v();if(_(e))return w(e);l=setTimeout(b,function(e){var n=t-(e-s);return d?f(n,o-(e-c)):n}(e))}function w(e){return l=void 0,h&&r?m(e):(r=a=void 0,i)}function k(){var e=v(),n=_(e);if(r=arguments,a=this,s=e,n){if(void 0===l)return function(e){return c=e,l=setTimeout(b,t),u?m(e):i}(s);if(d)return l=setTimeout(b,t),m(s)}return void 0===l&&(l=setTimeout(b,t)),i}return t=y(t)||0,g(n)&&(u=!!n.leading,o=(d="maxWait"in n)?p(y(n.maxWait)||0,t):o,h="trailing"in n?!!n.trailing:h),k.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=s=a=l=void 0},k.flush=function(){return void 0===l?i:w(v())},k}},424:(e,t,n)=>{var r="__lodash_hash_undefined__",a=1/0,o="[object Function]",i="[object GeneratorFunction]",l="[object Symbol]",s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,u=/^\./,d=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,h=/\\(\\)?/g,m=/^\[object .+?Constructor\]$/,p="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,f="object"==typeof self&&self&&self.Object===Object&&self,v=p||f||Function("return this")();var g=Array.prototype,y=Function.prototype,_=Object.prototype,b=v["__core-js_shared__"],w=function(){var e=/[^.]+$/.exec(b&&b.keys&&b.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),k=y.toString,x=_.hasOwnProperty,S=_.toString,C=RegExp("^"+k.call(x).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),E=v.Symbol,N=g.splice,A=j(v,"Map"),M=j(Object,"create"),T=E?E.prototype:void 0,L=T?T.toString:void 0;function I(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1},P.prototype.set=function(e,t){var n=this.__data__,r=R(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},O.prototype.clear=function(){this.__data__={hash:new I,map:new(A||P),string:new I}},O.prototype.delete=function(e){return F(this,e).delete(e)},O.prototype.get=function(e){return F(this,e).get(e)},O.prototype.has=function(e){return F(this,e).has(e)},O.prototype.set=function(e,t){return F(this,e).set(e,t),this};var H=$((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(q(e))return L?L.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return u.test(e)&&n.push(""),e.replace(d,(function(e,t,r,a){n.push(r?a.replace(h,"$1"):t||e)})),n}));function V(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function $(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i),i};return n.cache=new($.Cache||O),n}$.Cache=O;var U=Array.isArray;function B(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function q(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&S.call(e)==l}e.exports=function(e,t,n){var r=null==e?void 0:D(e,t);return void 0===r?n:r}},141:(e,t,n)=>{var r="function"===typeof Map&&Map.prototype,a=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=r&&a&&"function"===typeof a.get?a.get:null,i=r&&Map.prototype.forEach,l="function"===typeof Set&&Set.prototype,s=Object.getOwnPropertyDescriptor&&l?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=l&&s&&"function"===typeof s.get?s.get:null,u=l&&Set.prototype.forEach,d="function"===typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h="function"===typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,m="function"===typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,f=Object.prototype.toString,v=Function.prototype.toString,g=String.prototype.match,y=String.prototype.slice,_=String.prototype.replace,b=String.prototype.toUpperCase,w=String.prototype.toLowerCase,k=RegExp.prototype.test,x=Array.prototype.concat,S=Array.prototype.join,C=Array.prototype.slice,E=Math.floor,N="function"===typeof BigInt?BigInt.prototype.valueOf:null,A=Object.getOwnPropertySymbols,M="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"===typeof Symbol&&"object"===typeof Symbol.iterator,L="function"===typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,I=Object.prototype.propertyIsEnumerable,P=("function"===typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function O(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||k.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"===typeof e){var r=e<0?-E(-e):E(e);if(r!==e){var a=String(r),o=y.call(t,a.length+1);return _.call(a,n,"$&_")+"."+_.call(_.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return _.call(t,n,"$&_")}var R=n(634),D=R.custom,z=$(D)?D:null;function F(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function j(e){return _.call(String(e),/"/g,""")}function H(e){return"[object Array]"===q(e)&&(!L||!("object"===typeof e&&L in e))}function V(e){return"[object RegExp]"===q(e)&&(!L||!("object"===typeof e&&L in e))}function $(e){if(T)return e&&"object"===typeof e&&e instanceof Symbol;if("symbol"===typeof e)return!0;if(!e||"object"!==typeof e||!M)return!1;try{return M.call(e),!0}catch(t){}return!1}e.exports=function e(t,r,a,l){var s=r||{};if(B(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(B(s,"maxStringLength")&&("number"===typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var f=!B(s,"customInspect")||s.customInspect;if("boolean"!==typeof f&&"symbol"!==f)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(B(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(B(s,"numericSeparator")&&"boolean"!==typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var b=s.numericSeparator;if("undefined"===typeof t)return"undefined";if(null===t)return"null";if("boolean"===typeof t)return t?"true":"false";if("string"===typeof t)return W(t,s);if("number"===typeof t){if(0===t)return 1/0/t>0?"0":"-0";var k=String(t);return b?O(t,k):k}if("bigint"===typeof t){var E=String(t)+"n";return b?O(t,E):E}var A="undefined"===typeof s.depth?5:s.depth;if("undefined"===typeof a&&(a=0),a>=A&&A>0&&"object"===typeof t)return H(t)?"[Array]":"[Object]";var D=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"===typeof e.indent&&e.indent>0))return null;n=S.call(Array(e.indent+1)," ")}return{base:n,prev:S.call(Array(t+1),n)}}(s,a);if("undefined"===typeof l)l=[];else if(Y(l,t)>=0)return"[Circular]";function U(t,n,r){if(n&&(l=C.call(l)).push(n),r){var o={depth:s.depth};return B(s,"quoteStyle")&&(o.quoteStyle=s.quoteStyle),e(t,o,a+1,l)}return e(t,s,a+1,l)}if("function"===typeof t&&!V(t)){var K=function(e){if(e.name)return e.name;var t=g.call(v.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),ee=X(t,U);return"[Function"+(K?": "+K:" (anonymous)")+"]"+(ee.length>0?" { "+S.call(ee,", ")+" }":"")}if($(t)){var te=T?_.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):M.call(t);return"object"!==typeof t||T?te:Q(te)}if(function(e){if(!e||"object"!==typeof e)return!1;if("undefined"!==typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"===typeof e.nodeName&&"function"===typeof e.getAttribute}(t)){for(var ne="<"+w.call(String(t.nodeName)),re=t.attributes||[],ae=0;ae"}if(H(t)){if(0===t.length)return"[]";var oe=X(t,U);return D&&!function(e){for(var t=0;t=0)return!1;return!0}(oe)?"["+J(oe,D)+"]":"[ "+S.call(oe,", ")+" ]"}if(function(e){return"[object Error]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t)){var ie=X(t,U);return"cause"in Error.prototype||!("cause"in t)||I.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+S.call(ie,", ")+" }":"{ ["+String(t)+"] "+S.call(x.call("[cause]: "+U(t.cause),ie),", ")+" }"}if("object"===typeof t&&f){if(z&&"function"===typeof t[z]&&R)return R(t,{depth:A-a});if("symbol"!==f&&"function"===typeof t.inspect)return t.inspect()}if(function(e){if(!o||!e||"object"!==typeof e)return!1;try{o.call(e);try{c.call(e)}catch(ne){return!0}return e instanceof Map}catch(t){}return!1}(t)){var le=[];return i&&i.call(t,(function(e,n){le.push(U(n,t,!0)+" => "+U(e,t))})),G("Map",o.call(t),le,D)}if(function(e){if(!c||!e||"object"!==typeof e)return!1;try{c.call(e);try{o.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var se=[];return u&&u.call(t,(function(e){se.push(U(e,t))})),G("Set",c.call(t),se,D)}if(function(e){if(!d||!e||"object"!==typeof e)return!1;try{d.call(e,d);try{h.call(e,h)}catch(ne){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return Z("WeakMap");if(function(e){if(!h||!e||"object"!==typeof e)return!1;try{h.call(e,h);try{d.call(e,d)}catch(ne){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return Z("WeakSet");if(function(e){if(!m||!e||"object"!==typeof e)return!1;try{return m.call(e),!0}catch(t){}return!1}(t))return Z("WeakRef");if(function(e){return"[object Number]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t))return Q(U(Number(t)));if(function(e){if(!e||"object"!==typeof e||!N)return!1;try{return N.call(e),!0}catch(t){}return!1}(t))return Q(U(N.call(t)));if(function(e){return"[object Boolean]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t))return Q(p.call(t));if(function(e){return"[object String]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t))return Q(U(String(t)));if("undefined"!==typeof window&&t===window)return"{ [object Window] }";if("undefined"!==typeof globalThis&&t===globalThis||"undefined"!==typeof n.g&&t===n.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t)&&!V(t)){var ce=X(t,U),ue=P?P(t)===Object.prototype:t instanceof Object||t.constructor===Object,de=t instanceof Object?"":"null prototype",he=!ue&&L&&Object(t)===t&&L in t?y.call(q(t),8,-1):de?"Object":"",me=(ue||"function"!==typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(he||de?"["+S.call(x.call([],he||[],de||[]),": ")+"] ":"");return 0===ce.length?me+"{}":D?me+"{"+J(ce,D)+"}":me+"{ "+S.call(ce,", ")+" }"}return String(t)};var U=Object.prototype.hasOwnProperty||function(e){return e in this};function B(e,t){return U.call(e,t)}function q(e){return f.call(e)}function Y(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return W(y.call(e,0,t.maxStringLength),t)+r}return F(_.call(_.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,K),"single",t)}function K(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+b.call(t.toString(16))}function Q(e){return"Object("+e+")"}function Z(e){return e+" { ? }"}function G(e,t,n,r){return e+" ("+t+") {"+(r?J(n,r):S.call(n,", "))+"}"}function J(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+S.call(e,","+n)+"\n"+t.prev}function X(e,t){var n=H(e),r=[];if(n){r.length=e.length;for(var a=0;a{"use strict";n.r(t),n.d(t,{Children:()=>Y,Component:()=>l.uA,Fragment:()=>l.FK,PureComponent:()=>H,StrictMode:()=>Pe,Suspense:()=>G,SuspenseList:()=>ee,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>ke,cloneElement:()=>Ae,createContext:()=>l.q6,createElement:()=>l.n,createFactory:()=>Se,createPortal:()=>ae,createRef:()=>l._3,default:()=>Ve,findDOMNode:()=>Te,flushSync:()=>Ie,forwardRef:()=>B,hydrate:()=>he,isElement:()=>Fe,isFragment:()=>Ee,isMemo:()=>Ne,isValidElement:()=>Ce,lazy:()=>X,memo:()=>V,render:()=>de,startTransition:()=>Oe,unmountComponentAtNode:()=>Me,unstable_batchedUpdates:()=>Le,useCallback:()=>E,useContext:()=>N,useDebugValue:()=>A,useDeferredValue:()=>Re,useEffect:()=>w,useErrorBoundary:()=>M,useId:()=>T,useImperativeHandle:()=>S,useInsertionEffect:()=>ze,useLayoutEffect:()=>k,useMemo:()=>C,useReducer:()=>b,useRef:()=>x,useState:()=>_,useSyncExternalStore:()=>je,useTransition:()=>De,version:()=>xe});var r,a,o,i,l=n(746),s=0,c=[],u=[],d=l.fF,h=d.__b,m=d.__r,p=d.diffed,f=d.__c,v=d.unmount,g=d.__;function y(e,t){d.__h&&d.__h(a,e,s||t),s=0;var n=a.__H||(a.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({__V:u}),n.__[e]}function _(e){return s=1,b(z,e)}function b(e,t,n){var o=y(r++,2);if(o.t=e,!o.__c&&(o.__=[n?n(t):z(void 0,t),function(e){var t=o.__N?o.__N[0]:o.__[0],n=o.t(t,e);t!==n&&(o.__N=[n,o.__[1]],o.__c.setState({}))}],o.__c=a,!a.u)){var i=function(e,t,n){if(!o.__c.__H)return!0;var r=o.__c.__H.__.filter((function(e){return!!e.__c}));if(r.every((function(e){return!e.__N})))return!l||l.call(this,e,t,n);var a=!1;return r.forEach((function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(a=!0)}})),!(!a&&o.__c.props===e)&&(!l||l.call(this,e,t,n))};a.u=!0;var l=a.shouldComponentUpdate,s=a.componentWillUpdate;a.componentWillUpdate=function(e,t,n){if(this.__e){var r=l;l=void 0,i(e,t,n),l=r}s&&s.call(this,e,t,n)},a.shouldComponentUpdate=i}return o.__N||o.__}function w(e,t){var n=y(r++,3);!d.__s&&D(n.__H,t)&&(n.__=e,n.i=t,a.__H.__h.push(n))}function k(e,t){var n=y(r++,4);!d.__s&&D(n.__H,t)&&(n.__=e,n.i=t,a.__h.push(n))}function x(e){return s=5,C((function(){return{current:e}}),[])}function S(e,t,n){s=6,k((function(){return"function"==typeof e?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0}),null==n?n:n.concat(e))}function C(e,t){var n=y(r++,7);return D(n.__H,t)?(n.__V=e(),n.i=t,n.__h=e,n.__V):n.__}function E(e,t){return s=8,C((function(){return e}),t)}function N(e){var t=a.context[e.__c],n=y(r++,9);return n.c=e,t?(null==n.__&&(n.__=!0,t.sub(a)),t.props.value):e.__}function A(e,t){d.useDebugValue&&d.useDebugValue(t?t(e):e)}function M(e){var t=y(r++,10),n=_();return t.__=e,a.componentDidCatch||(a.componentDidCatch=function(e,r){t.__&&t.__(e,r),n[1](e)}),[n[0],function(){n[1](void 0)}]}function T(){var e=y(r++,11);if(!e.__){for(var t=a.__v;null!==t&&!t.__m&&null!==t.__;)t=t.__;var n=t.__m||(t.__m=[0,0]);e.__="P"+n[0]+"-"+n[1]++}return e.__}function L(){for(var e;e=c.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(O),e.__H.__h.forEach(R),e.__H.__h=[]}catch(r){e.__H.__h=[],d.__e(r,e.__v)}}d.__b=function(e){a=null,h&&h(e)},d.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),g&&g(e,t)},d.__r=function(e){m&&m(e),r=0;var t=(a=e.__c).__H;t&&(o===a?(t.__h=[],a.__h=[],t.__.forEach((function(e){e.__N&&(e.__=e.__N),e.__V=u,e.__N=e.i=void 0}))):(t.__h.forEach(O),t.__h.forEach(R),t.__h=[],r=0)),o=a},d.diffed=function(e){p&&p(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==c.push(t)&&i===d.requestAnimationFrame||((i=d.requestAnimationFrame)||P)(L)),t.__H.__.forEach((function(e){e.i&&(e.__H=e.i),e.__V!==u&&(e.__=e.__V),e.i=void 0,e.__V=u}))),o=a=null},d.__c=function(e,t){t.some((function(e){try{e.__h.forEach(O),e.__h=e.__h.filter((function(e){return!e.__||R(e)}))}catch(a){t.some((function(e){e.__h&&(e.__h=[])})),t=[],d.__e(a,e.__v)}})),f&&f(e,t)},d.unmount=function(e){v&&v(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach((function(e){try{O(e)}catch(e){t=e}})),n.__H=void 0,t&&d.__e(t,n.__v))};var I="function"==typeof requestAnimationFrame;function P(e){var t,n=function(){clearTimeout(r),I&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);I&&(t=requestAnimationFrame(n))}function O(e){var t=a,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),a=t}function R(e){var t=a;e.__c=e.__(),a=t}function D(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function z(e,t){return"function"==typeof t?t(e):t}function F(e,t){for(var n in t)e[n]=t[n];return e}function j(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function H(e,t){this.props=e,this.context=t}function V(e,t){function n(e){var n=this.props.ref,r=n==e.ref;return!r&&n&&(n.call?n(null):n.current=null),t?!t(this.props,e)||!r:j(this.props,e)}function r(t){return this.shouldComponentUpdate=n,(0,l.n)(e,t)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(H.prototype=new l.uA).isPureReactComponent=!0,H.prototype.shouldComponentUpdate=function(e,t){return j(this.props,e)||j(this.state,t)};var $=l.fF.__b;l.fF.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),$&&$(e)};var U="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function B(e){function t(t){var n=F({},t);return delete n.ref,e(n,t.ref||null)}return t.$$typeof=U,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var q=function(e,t){return null==e?null:(0,l.v2)((0,l.v2)(e).map(t))},Y={map:q,forEach:q,count:function(e){return e?(0,l.v2)(e).length:0},only:function(e){var t=(0,l.v2)(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:l.v2},W=l.fF.__e;l.fF.__e=function(e,t,n,r){if(e.then)for(var a,o=t;o=o.__;)if((a=o.__c)&&a.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),a.__c(e,t);W(e,t,n,r)};var K=l.fF.unmount;function Q(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),e.__c.__H=null),null!=(e=F({},e)).__c&&(e.__c.__P===n&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map((function(e){return Q(e,t,n)}))),e}function Z(e,t,n){return e&&n&&(e.__v=null,e.__k=e.__k&&e.__k.map((function(e){return Z(e,t,n)})),e.__c&&e.__c.__P===t&&(e.__e&&n.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=n)),e}function G(){this.__u=0,this.t=null,this.__b=null}function J(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function X(e){var t,n,r;function a(a){if(t||(t=e()).then((function(e){n=e.default||e}),(function(e){r=e})),r)throw r;if(!n)throw t;return(0,l.n)(n,a)}return a.displayName="Lazy",a.__f=!0,a}function ee(){this.u=null,this.o=null}l.fF.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),K&&K(e)},(G.prototype=new l.uA).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var a=J(r.__v),o=!1,i=function(){o||(o=!0,n.__R=null,a?a(l):l())};n.__R=i;var l=function(){if(! --r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=Z(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(i,i)},G.prototype.componentWillUnmount=function(){this.t=[]},G.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=Q(this.__b,n,r.__O=r.__P)}this.__b=null}var a=t.__a&&(0,l.n)(l.FK,null,e.fallback);return a&&(a.__u&=-33),[(0,l.n)(l.FK,null,t.__a?null:e.children),a]};var te=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),(0,l.XX)((0,l.n)(ne,{context:t.context},e.__v),t.l)}function ae(e,t){var n=(0,l.n)(re,{__v:e,i:t});return n.containerInfo=t,n}(ee.prototype=new l.uA).__a=function(e){var t=this,n=J(t.__v),r=t.o.get(e);return r[0]++,function(a){var o=function(){t.props.revealOrder?(r.push(a),te(t,e,r)):a()};n?n(o):o()}},ee.prototype.render=function(e){this.u=null,this.o=new Map;var t=(0,l.v2)(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},ee.prototype.componentDidUpdate=ee.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){te(e,n,t)}))};var oe="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,ie=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,le=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,se=/[A-Z0-9]/g,ce="undefined"!=typeof document,ue=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(e)};function de(e,t,n){return null==t.__k&&(t.textContent=""),(0,l.XX)(e,t),"function"==typeof n&&n(),e?e.__c:null}function he(e,t,n){return(0,l.Qv)(e,t),"function"==typeof n&&n(),e?e.__c:null}l.uA.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(l.uA.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var me=l.fF.event;function pe(){}function fe(){return this.cancelBubble}function ve(){return this.defaultPrevented}l.fF.event=function(e){return me&&(e=me(e)),e.persist=pe,e.isPropagationStopped=fe,e.isDefaultPrevented=ve,e.nativeEvent=e};var ge,ye={enumerable:!1,configurable:!0,get:function(){return this.class}},_e=l.fF.vnode;l.fF.vnode=function(e){"string"==typeof e.type&&function(e){var t=e.props,n=e.type,r={};for(var a in t){var o=t[a];if(!("value"===a&&"defaultValue"in t&&null==o||ce&&"children"===a&&"noscript"===n||"class"===a||"className"===a)){var i=a.toLowerCase();"defaultValue"===a&&"value"in t&&null==t.value?a="value":"download"===a&&!0===o?o="":"translate"===i&&"no"===o?o=!1:"ondoubleclick"===i?a="ondblclick":"onchange"!==i||"input"!==n&&"textarea"!==n||ue(t.type)?"onfocus"===i?a="onfocusin":"onblur"===i?a="onfocusout":le.test(a)?a=i:-1===n.indexOf("-")&&ie.test(a)?a=a.replace(se,"-$&").toLowerCase():null===o&&(o=void 0):i=a="oninput","oninput"===i&&r[a=i]&&(a="oninputCapture"),r[a]=o}}"select"==n&&r.multiple&&Array.isArray(r.value)&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==n&&null!=r.defaultValue&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",ye)):(t.className&&!t.class||t.class&&t.className)&&(r.class=r.className=t.className),e.props=r}(e),e.$$typeof=oe,_e&&_e(e)};var be=l.fF.__r;l.fF.__r=function(e){be&&be(e),ge=e.__c};var we=l.fF.diffed;l.fF.diffed=function(e){we&&we(e);var t=e.props,n=e.__e;null!=n&&"textarea"===e.type&&"value"in t&&t.value!==n.value&&(n.value=null==t.value?"":t.value),ge=null};var ke={ReactCurrentDispatcher:{current:{readContext:function(e){return ge.__n[e.__c].props.value},useCallback:E,useContext:N,useDebugValue:A,useDeferredValue:Re,useEffect:w,useId:T,useImperativeHandle:S,useInsertionEffect:ze,useLayoutEffect:k,useMemo:C,useReducer:b,useRef:x,useState:_,useSyncExternalStore:je,useTransition:De}}},xe="17.0.2";function Se(e){return l.n.bind(null,e)}function Ce(e){return!!e&&e.$$typeof===oe}function Ee(e){return Ce(e)&&e.type===l.FK}function Ne(e){return!!e&&!!e.displayName&&("string"==typeof e.displayName||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")}function Ae(e){return Ce(e)?l.Ob.apply(null,arguments):e}function Me(e){return!!e.__k&&((0,l.XX)(null,e),!0)}function Te(e){return e&&(e.base||1===e.nodeType&&e)||null}var Le=function(e,t){return e(t)},Ie=function(e,t){return e(t)},Pe=l.FK;function Oe(e){e()}function Re(e){return e}function De(){return[!1,Oe]}var ze=k,Fe=Ce;function je(e,t){var n=t(),r=_({h:{__:n,v:t}}),a=r[0].h,o=r[1];return k((function(){a.__=n,a.v=t,He(a)&&o({h:a})}),[e,n,t]),w((function(){return He(a)&&o({h:a}),e((function(){He(a)&&o({h:a})}))}),[e]),n}function He(e){var t,n,r=e.v,a=e.__;try{var o=r();return!((t=a)===(n=o)&&(0!==t||1/t==1/n)||t!=t&&n!=n)}catch(e){return!0}}var Ve={useState:_,useId:T,useReducer:b,useEffect:w,useLayoutEffect:k,useInsertionEffect:ze,useTransition:De,useDeferredValue:Re,useSyncExternalStore:je,startTransition:Oe,useRef:x,useImperativeHandle:S,useMemo:C,useCallback:E,useContext:N,useDebugValue:A,version:"17.0.2",Children:Y,render:de,hydrate:he,unmountComponentAtNode:Me,createPortal:ae,createElement:l.n,createContext:l.q6,createFactory:Se,cloneElement:Ae,createRef:l._3,Fragment:l.FK,isValidElement:Ce,isElement:Fe,isFragment:Ee,isMemo:Ne,findDOMNode:Te,Component:l.uA,PureComponent:H,memo:V,forwardRef:B,flushSync:Ie,unstable_batchedUpdates:Le,StrictMode:Pe,Suspense:G,SuspenseList:ee,lazy:X,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:ke}},746:(e,t,n)=>{"use strict";n.d(t,{FK:()=>x,Ob:()=>q,Qv:()=>B,XX:()=>U,_3:()=>k,fF:()=>a,n:()=>b,q6:()=>Y,uA:()=>S,v2:()=>I});var r,a,o,i,l,s,c,u,d,h,m,p={},f=[],v=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function y(e,t){for(var n in t)e[n]=t[n];return e}function _(e){var t=e.parentNode;t&&t.removeChild(e)}function b(e,t,n){var a,o,i,l={};for(i in t)"key"==i?a=t[i]:"ref"==i?o=t[i]:l[i]=t[i];if(arguments.length>2&&(l.children=arguments.length>3?r.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===l[i]&&(l[i]=e.defaultProps[i]);return w(e,l,a,o,null)}function w(e,t,n,r,i){var l={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==i?++o:i,__i:-1,__u:0};return null==i&&null!=a.vnode&&a.vnode(l),l}function k(){return{current:null}}function x(e){return e.children}function S(e,t){this.props=e,this.context=t}function C(e,t){if(null==t)return e.__?C(e.__,e.__i+1):null;for(var n;tt&&i.sort(c));A.__r=0}function M(e,t,n,r,a,o,i,l,s,c,u){var d,h,m,v,g,y=r&&r.__k||f,_=t.length;for(n.__d=s,T(n,t,y),s=n.__d,d=0;d<_;d++)null!=(m=n.__k[d])&&"boolean"!=typeof m&&"function"!=typeof m&&(h=-1===m.__i?p:y[m.__i]||p,m.__i=d,z(e,m,h,a,o,i,l,s,c,u),v=m.__e,m.ref&&h.ref!=m.ref&&(h.ref&&H(h.ref,null,m),u.push(m.ref,m.__c||v,m)),null==g&&null!=v&&(g=v),65536&m.__u||h.__k===m.__k?(s&&!s.isConnected&&(s=C(h)),s=L(m,s,e)):"function"==typeof m.type&&void 0!==m.__d?s=m.__d:v&&(s=v.nextSibling),m.__d=void 0,m.__u&=-196609);n.__d=s,n.__e=g}function T(e,t,n){var r,a,o,i,l,s=t.length,c=n.length,u=c,d=0;for(e.__k=[],r=0;r0?w(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):a)?(a.__=e,a.__b=e.__b+1,l=P(a,n,i,u),a.__i=l,o=null,-1!==l&&(u--,(o=n[l])&&(o.__u|=131072)),null==o||null===o.__v?(-1==l&&d--,"function"!=typeof a.type&&(a.__u|=65536)):l!==i&&(l===i+1?d++:l>i?u>s-i?d+=l-i:d--:l(null!=s&&0==(131072&s.__u)?1:0))for(;i>=0||l=0){if((s=t[i])&&0==(131072&s.__u)&&a==s.key&&o===s.type)return i;i--}if(l2&&(s.children=arguments.length>3?r.call(arguments,2):n),w(e.type,s,a||e.key,o||e.ref,null)}function Y(e,t){var n={__c:t="__cC"+m++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some((function(e){e.__e=!0,N(e)}))},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}r=f.slice,a={__e:function(e,t,n,r){for(var a,o,i;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&null!=o.getDerivedStateFromError&&(a.setState(o.getDerivedStateFromError(e)),i=a.__d),null!=a.componentDidCatch&&(a.componentDidCatch(e,r||{}),i=a.__d),i)return a.__E=a}catch(t){e=t}throw e}},o=0,S.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=y({},this.state),"function"==typeof e&&(e=e(y({},n),this.props)),e&&y(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),N(this))},S.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),N(this))},S.prototype.render=x,i=[],s="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(e,t){return e.__v.__b-t.__v.__b},A.__r=0,u=0,d=D(!1),h=D(!0),m=0},640:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",a="RFC3986";e.exports={default:a,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:a}},215:(e,t,n)=>{"use strict";var r=n(518),a=n(968),o=n(640);e.exports={formats:o,parse:a,stringify:r}},968:(e,t,n)=>{"use strict";var r=n(570),a=Object.prototype.hasOwnProperty,o=Array.isArray,i={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:r.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},l=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},s=function(e,t){return e&&"string"===typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},c=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,l=n.depth>0&&/(\[[^[\]]*])/.exec(o),c=l?o.slice(0,l.index):o,u=[];if(c){if(!n.plainObjects&&a.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}for(var d=0;n.depth>0&&null!==(l=i.exec(o))&&d=0;--o){var i,l=e[o];if("[]"===l&&n.parseArrays)i=n.allowEmptyArrays&&""===a?[]:[].concat(a);else{i=n.plainObjects?Object.create(null):{};var c="["===l.charAt(0)&&"]"===l.charAt(l.length-1)?l.slice(1,-1):l,u=n.decodeDotInKeys?c.replace(/%2E/g,"."):c,d=parseInt(u,10);n.parseArrays||""!==u?!isNaN(d)&&l!==u&&String(d)===u&&d>=0&&n.parseArrays&&d<=n.arrayLimit?(i=[])[d]=a:"__proto__"!==u&&(i[u]=a):i={0:a}}a=i}return a}(u,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if("undefined"!==typeof e.allowEmptyArrays&&"boolean"!==typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if("undefined"!==typeof e.decodeDotInKeys&&"boolean"!==typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&"undefined"!==typeof e.decoder&&"function"!==typeof e.decoder)throw new TypeError("Decoder has to be a function.");if("undefined"!==typeof e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t="undefined"===typeof e.charset?i.charset:e.charset,n="undefined"===typeof e.duplicates?i.duplicates:e.duplicates;if("combine"!==n&&"first"!==n&&"last"!==n)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:"undefined"===typeof e.allowDots?!0===e.decodeDotInKeys||i.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"===typeof e.allowEmptyArrays?!!e.allowEmptyArrays:i.allowEmptyArrays,allowPrototypes:"boolean"===typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"===typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"===typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"===typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"===typeof e.comma?e.comma:i.comma,decodeDotInKeys:"boolean"===typeof e.decodeDotInKeys?e.decodeDotInKeys:i.decodeDotInKeys,decoder:"function"===typeof e.decoder?e.decoder:i.decoder,delimiter:"string"===typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"===typeof e.depth||!1===e.depth?+e.depth:i.depth,duplicates:n,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"===typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"===typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"===typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:"boolean"===typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var u="string"===typeof e?function(e,t){var n,c={__proto__:null},u=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,d=t.parameterLimit===1/0?void 0:t.parameterLimit,h=u.split(t.delimiter,d),m=-1,p=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(v=o(v)?[v]:v);var b=a.call(c,f);b&&"combine"===t.duplicates?c[f]=r.combine(c[f],v):b&&"last"!==t.duplicates||(c[f]=v)}return c}(e,n):e,d=n.plainObjects?Object.create(null):{},h=Object.keys(u),m=0;m{"use strict";var r=n(670),a=n(570),o=n(640),i=Object.prototype.hasOwnProperty,l={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},s=Array.isArray,c=Array.prototype.push,u=function(e,t){c.apply(e,s(t)?t:[t])},d=Date.prototype.toISOString,h=o.default,m={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:a.encode,encodeValuesOnly:!1,format:h,formatter:o.formatters[h],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},p={},f=function e(t,n,o,i,l,c,d,h,f,v,g,y,_,b,w,k,x,S){for(var C,E=t,N=S,A=0,M=!1;void 0!==(N=N.get(p))&&!M;){var T=N.get(t);if(A+=1,"undefined"!==typeof T){if(T===A)throw new RangeError("Cyclic object value");M=!0}"undefined"===typeof N.get(p)&&(A=0)}if("function"===typeof v?E=v(n,E):E instanceof Date?E=_(E):"comma"===o&&s(E)&&(E=a.maybeMap(E,(function(e){return e instanceof Date?_(e):e}))),null===E){if(c)return f&&!k?f(n,m.encoder,x,"key",b):n;E=""}if("string"===typeof(C=E)||"number"===typeof C||"boolean"===typeof C||"symbol"===typeof C||"bigint"===typeof C||a.isBuffer(E))return f?[w(k?n:f(n,m.encoder,x,"key",b))+"="+w(f(E,m.encoder,x,"value",b))]:[w(n)+"="+w(String(E))];var L,I=[];if("undefined"===typeof E)return I;if("comma"===o&&s(E))k&&f&&(E=a.maybeMap(E,f)),L=[{value:E.length>0?E.join(",")||null:void 0}];else if(s(v))L=v;else{var P=Object.keys(E);L=g?P.sort(g):P}var O=h?n.replace(/\./g,"%2E"):n,R=i&&s(E)&&1===E.length?O+"[]":O;if(l&&s(E)&&0===E.length)return R+"[]";for(var D=0;D0?b+_:""}},570:(e,t,n)=>{"use strict";var r=n(640),a=Object.prototype.hasOwnProperty,o=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),l=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(o(n)){for(var r=[],a=0;a=s?l.slice(u,u+s):l,h=[],m=0;m=48&&p<=57||p>=65&&p<=90||p>=97&&p<=122||o===r.RFC1738&&(40===p||41===p)?h[h.length]=d.charAt(m):p<128?h[h.length]=i[p]:p<2048?h[h.length]=i[192|p>>6]+i[128|63&p]:p<55296||p>=57344?h[h.length]=i[224|p>>12]+i[128|p>>6&63]+i[128|63&p]:(m+=1,p=65536+((1023&p)<<10|1023&d.charCodeAt(m)),h[h.length]=i[240|p>>18]+i[128|p>>12&63]+i[128|p>>6&63]+i[128|63&p])}c+=h.join("")}return c},isBuffer:function(e){return!(!e||"object"!==typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(o(e)){for(var n=[],r=0;r{e.exports=n(204)},204:(e,t,n)=>{"use strict";var r=function(e){return e&&"object"==typeof e&&"default"in e?e.default:e}(n(609)),a=n(609);function o(){return(o=Object.assign||function(e){for(var t=1;tr.length&&h(e,t.length-1);)t=t.slice(0,t.length-1);return t.length}for(var a=r.length,o=t.length;o>=r.length;o--){var i=t[o];if(!h(e,o)&&m(e,o,i)){a=o+1;break}}return a}function v(e,t){return f(e,t)===e.mask.length}function g(e,t){var n=e.maskChar,r=e.mask,a=e.prefix;if(!n){for((t=y(e,"",t,0)).lengtht.length&&(t+=a.slice(t.length,r)),l.every((function(n){for(;u=n,h(e,c=r)&&u!==a[c];){if(r>=t.length&&(t+=a[r]),l=n,o&&h(e,r)&&l===o)return!0;if(++r>=a.length)return!1}var l,c,u;return!m(e,r,n)&&n!==o||(ra.start?d=(u=function(e,t,n,r){var a=e.mask,o=e.maskChar,i=n.split(""),l=r;return i.every((function(t){for(;i=t,h(e,n=r)&&i!==a[n];)if(++r>=a.length)return!1;var n,i;return(m(e,r,t)||t===o)&&r++,r=o.length?p=o.length:p=i.length&&p{"use strict";var r=n(375),a=n(411),o=n(734)(),i=n(553),l=n(277),s=r("%Math.floor%");e.exports=function(e,t){if("function"!==typeof e)throw new l("`fn` is not a function");if("number"!==typeof t||t<0||t>4294967295||s(t)!==t)throw new l("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],r=!0,c=!0;if("length"in e&&i){var u=i(e,"length");u&&!u.configurable&&(r=!1),u&&!u.writable&&(c=!1)}return(r||c||!n)&&(o?a(e,"length",t,!0,!0):a(e,"length",t)),e}},670:(e,t,n)=>{"use strict";var r=n(375),a=n(61),o=n(141),i=n(277),l=r("%WeakMap%",!0),s=r("%Map%",!0),c=a("WeakMap.prototype.get",!0),u=a("WeakMap.prototype.set",!0),d=a("WeakMap.prototype.has",!0),h=a("Map.prototype.get",!0),m=a("Map.prototype.set",!0),p=a("Map.prototype.has",!0),f=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new i("Side channel does not contain "+o(e))},get:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return c(e,r)}else if(s){if(t)return h(t,r)}else if(n)return function(e,t){var n=f(e,t);return n&&n.value}(n,r)},has:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return d(e,r)}else if(s){if(t)return p(t,r)}else if(n)return function(e,t){return!!f(e,t)}(n,r);return!1},set:function(r,a){l&&r&&("object"===typeof r||"function"===typeof r)?(e||(e=new l),u(e,r,a)):s?(t||(t=new s),m(t,r,a)):(n||(n={key:{},next:null}),function(e,t,n){var r=f(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,a))}};return r}},634:()=>{},738:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e="",t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".bebe1265.chunk.js",n.miniCssF=e=>{},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="vmui:";n.l=(r,a,o,i)=>{if(e[r])e[r].push(a);else{var l,s;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{l.onerror=l.onload=null,clearTimeout(m);var a=e[r];if(delete e[r],l.parentNode&&l.parentNode.removeChild(l),a&&a.forEach((e=>e(n))),t)return t(n)},m=setTimeout(h.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=h.bind(null,l.onerror),l.onload=h.bind(null,l.onload),s&&document.head.appendChild(l)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="./",(()=>{var e={792:0};n.f.j=(t,r)=>{var a=n.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else{var o=new Promise(((n,r)=>a=e[t]=[n,r]));r.push(a[2]=o);var i=n.p+n.u(t),l=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;l.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",l.name="ChunkLoadError",l.type=o,l.request=i,a[1](l)}}),"chunk-"+t,t)}};var t=(t,r)=>{var a,o,i=r[0],l=r[1],s=r[2],c=0;if(i.some((t=>0!==e[t]))){for(a in l)n.o(l,a)&&(n.m[a]=l[a]);if(s)s(n)}for(t&&t(r);c{"use strict";var e={};n.r(e),n.d(e,{AlarmIcon:()=>Un,ArrowDownIcon:()=>jn,ArrowDropDownIcon:()=>Hn,CalendarIcon:()=>$n,ChartIcon:()=>Wn,ClockIcon:()=>Vn,CloseIcon:()=>In,CodeIcon:()=>Qn,CollapseIcon:()=>kr,CopyIcon:()=>rr,DeleteIcon:()=>Zn,DoneIcon:()=>Xn,DownloadIcon:()=>br,DragIcon:()=>ar,ErrorIcon:()=>Dn,ExpandIcon:()=>wr,FunctionIcon:()=>gr,InfoIcon:()=>On,IssueIcon:()=>lr,KeyboardIcon:()=>Bn,LabelIcon:()=>yr,ListIcon:()=>mr,LogoAnomalyIcon:()=>Mn,LogoIcon:()=>Nn,LogoLogsIcon:()=>An,LogoShortIcon:()=>Tn,MetricIcon:()=>vr,MinusIcon:()=>Jn,MoreIcon:()=>ur,PlayCircleOutlineIcon:()=>Yn,PlayIcon:()=>qn,PlusIcon:()=>Gn,Prettify:()=>nr,QuestionIcon:()=>sr,RefreshIcon:()=>Fn,RestartIcon:()=>Pn,SearchIcon:()=>xr,SettingsIcon:()=>Ln,StarBorderIcon:()=>pr,StarIcon:()=>fr,StorageIcon:()=>cr,SuccessIcon:()=>zn,TableIcon:()=>Kn,TimelineIcon:()=>or,TipIcon:()=>hr,TuneIcon:()=>dr,ValueIcon:()=>_r,VisibilityIcon:()=>er,VisibilityOffIcon:()=>tr,WarningIcon:()=>Rn,WikiIcon:()=>ir});var t,r=n(609),a=n(159),o=n.n(a),i=n(7),l=n.n(i),s=n(648),c=n.n(s),u=n(220),d=n.n(u);function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function b(e,n,r,a){void 0===a&&(a={});let{window:o=document.defaultView,v5Compat:i=!1}=a,l=o.history,s=t.Pop,c=null,u=d();function d(){return(l.state||{idx:null}).idx}function f(){s=t.Pop;let e=d(),n=null==e?null:e-u;u=e,c&&c({action:s,location:b.location,delta:n})}function _(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,n="string"===typeof e?e:y(e);return n=n.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,l.replaceState(h({},l.state,{idx:u}),""));let b={get action(){return s},get location(){return e(o,l)},listen(e){if(c)throw new Error("A history only accepts one active listener");return o.addEventListener(m,f),c=e,()=>{o.removeEventListener(m,f),c=null}},createHref:e=>n(o,e),createURL:_,encodeLocation(e){let t=_(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,n){s=t.Push;let a=g(b.location,e,n);r&&r(a,e),u=d()+1;let h=v(a,u),m=b.createHref(a);try{l.pushState(h,"",m)}catch(p){if(p instanceof DOMException&&"DataCloneError"===p.name)throw p;o.location.assign(m)}i&&c&&c({action:s,location:b.location,delta:1})},replace:function(e,n){s=t.Replace;let a=g(b.location,e,n);r&&r(a,e),u=d();let o=v(a,u),h=b.createHref(a);l.replaceState(o,"",h),i&&c&&c({action:s,location:b.location,delta:0})},go:e=>l.go(e)};return b}var w;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(w||(w={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function k(e,t,n){return void 0===n&&(n="/"),x(e,t,n,!1)}function x(e,t,n,r){let a=z(("string"===typeof t?_(t):t).pathname||"/",n);if(null==a)return null;let o=S(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let i=null;for(let l=0;null==i&&l{let i={relativePath:void 0===o?e.path||"":o,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};i.relativePath.startsWith("/")&&(p(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let l=$([r,i.relativePath]),s=n.concat(i);e.children&&e.children.length>0&&(p(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),S(e.children,t,s,l)),(null!=e.path||e.index)&&t.push({path:l,score:P(l,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of C(e.path))a(e,t,r);else a(e,t)})),t}function C(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(0===r.length)return a?[o,""]:[o];let i=C(r.join("/")),l=[];return l.push(...i.map((e=>""===e?o:[o,e].join("/")))),a&&l.push(...i),l.map((t=>e.startsWith("/")&&""===t?"/":t))}const E=/^:[\w-]+$/,N=3,A=2,M=1,T=10,L=-2,I=e=>"*"===e;function P(e,t){let n=e.split("/"),r=n.length;return n.some(I)&&(r+=L),t&&(r+=A),n.filter((e=>!I(e))).reduce(((e,t)=>e+(E.test(t)?N:""===t?M:T)),r)}function O(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,a={},o="/",i=[];for(let l=0;l(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))");let o=new RegExp(a,t?void 0:"i");return[o,r]}(e.path,e.caseSensitive,e.end),a=t.match(n);if(!a)return null;let o=a[0],i=o.replace(/(.)\/+$/,"$1"),l=a.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:a}=t;if("*"===r){let e=l[n]||"";i=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}const s=l[n];return e[r]=a&&!s?void 0:(s||"").replace(/%2F/g,"/"),e}),{}),pathname:o,pathnameBase:i,pattern:e}}function D(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return f(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function z(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function F(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function j(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function H(e,t){let n=j(e);return t?n.map(((t,n)=>n===e.length-1?t.pathname:t.pathnameBase)):n.map((e=>e.pathnameBase))}function V(e,t,n,r){let a;void 0===r&&(r=!1),"string"===typeof e?a=_(e):(a=h({},e),p(!a.pathname||!a.pathname.includes("?"),F("?","pathname","search",a)),p(!a.pathname||!a.pathname.includes("#"),F("#","pathname","hash",a)),p(!a.search||!a.search.includes("#"),F("#","search","hash",a)));let o,i=""===e||""===a.pathname,l=i?"/":a.pathname;if(null==l)o=n;else{let e=t.length-1;if(!r&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:a=""}="string"===typeof e?_(e):e,o=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:o,search:B(r),hash:q(a)}}(a,o),c=l&&"/"!==l&&l.endsWith("/"),u=(i||"."===l)&&n.endsWith("/");return s.pathname.endsWith("/")||!c&&!u||(s.pathname+="/"),s}const $=e=>e.join("/").replace(/\/\/+/g,"/"),U=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",q=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function Y(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const W=["post","put","patch","delete"],K=(new Set(W),["get",...W]);new Set(K),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t{n.current=!0}));let a=r.useCallback((function(r,a){void 0===a&&(a={}),n.current&&("number"===typeof r?e.navigate(r):e.navigate(r,Q({fromRouteId:t},a)))}),[e,t]);return a}():function(){ne()||p(!1);let e=r.useContext(Z),{basename:t,future:n,navigator:a}=r.useContext(J),{matches:o}=r.useContext(ee),{pathname:i}=re(),l=JSON.stringify(H(o,n.v7_relativeSplatPath)),s=r.useRef(!1);ae((()=>{s.current=!0}));let c=r.useCallback((function(n,r){if(void 0===r&&(r={}),!s.current)return;if("number"===typeof n)return void a.go(n);let o=V(n,JSON.parse(l),i,"path"===r.relative);null==e&&"/"!==t&&(o.pathname="/"===o.pathname?t:$([t,o.pathname])),(r.replace?a.replace:a.push)(o,r.state,r)}),[t,a,l,i,e]);return c}()}const ie=r.createContext(null);function le(e,t){let{relative:n}=void 0===t?{}:t,{future:a}=r.useContext(J),{matches:o}=r.useContext(ee),{pathname:i}=re(),l=JSON.stringify(H(o,a.v7_relativeSplatPath));return r.useMemo((()=>V(e,JSON.parse(l),i,"path"===n)),[e,l,i,n])}function se(e,n,a,o){ne()||p(!1);let{navigator:i}=r.useContext(J),{matches:l}=r.useContext(ee),s=l[l.length-1],c=s?s.params:{},u=(s&&s.pathname,s?s.pathnameBase:"/");s&&s.route;let d,h=re();if(n){var m;let e="string"===typeof n?_(n):n;"/"===u||(null==(m=e.pathname)?void 0:m.startsWith(u))||p(!1),d=e}else d=h;let f=d.pathname||"/",v=f;if("/"!==u){let e=u.replace(/^\//,"").split("/");v="/"+f.replace(/^\//,"").split("/").slice(e.length).join("/")}let g=k(e,{pathname:v});let y=me(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},c,e.params),pathname:$([u,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?u:$([u,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,a,o);return n&&y?r.createElement(X.Provider,{value:{location:Q({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:t.Pop}},y):y}function ce(){let e=function(){var e;let t=r.useContext(te),n=ge(fe.UseRouteError),a=ye(fe.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[a]}(),t=Y(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,a="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:a};return r.createElement(r.Fragment,null,r.createElement("h2",null,"Unexpected Application Error!"),r.createElement("h3",{style:{fontStyle:"italic"}},t),n?r.createElement("pre",{style:o},n):null,null)}const ue=r.createElement(ce,null);class de extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?r.createElement(ee.Provider,{value:this.props.routeContext},r.createElement(te.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function he(e){let{routeContext:t,match:n,children:a}=e,o=r.useContext(Z);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),r.createElement(ee.Provider,{value:t},a)}function me(e,t,n,a){var o;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===a&&(a=null),null==e){var i;if(null==(i=n)||!i.errors)return null;e=n.matches}let l=e,s=null==(o=n)?void 0:o.errors;if(null!=s){let e=l.findIndex((e=>e.route.id&&void 0!==(null==s?void 0:s[e.route.id])));e>=0||p(!1),l=l.slice(0,Math.min(l.length,e+1))}let c=!1,u=-1;if(n&&a&&a.v7_partialHydration)for(let r=0;r=0?l.slice(0,u+1):[l[0]];break}}}return l.reduceRight(((e,a,o)=>{let i,d=!1,h=null,m=null;var p;n&&(i=s&&a.route.id?s[a.route.id]:void 0,h=a.route.errorElement||ue,c&&(u<0&&0===o?(p="route-fallback",!1||_e[p]||(_e[p]=!0),d=!0,m=null):u===o&&(d=!0,m=a.route.hydrateFallbackElement||null)));let f=t.concat(l.slice(0,o+1)),v=()=>{let t;return t=i?h:d?m:a.route.Component?r.createElement(a.route.Component,null):a.route.element?a.route.element:e,r.createElement(he,{match:a,routeContext:{outlet:e,matches:f,isDataRoute:null!=n},children:t})};return n&&(a.route.ErrorBoundary||a.route.errorElement||0===o)?r.createElement(de,{location:n.location,revalidation:n.revalidation,component:h,error:i,children:v(),routeContext:{outlet:null,matches:f,isDataRoute:!0}}):v()}),null)}var pe=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(pe||{}),fe=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(fe||{});function ve(e){let t=r.useContext(Z);return t||p(!1),t}function ge(e){let t=r.useContext(G);return t||p(!1),t}function ye(e){let t=function(e){let t=r.useContext(ee);return t||p(!1),t}(),n=t.matches[t.matches.length-1];return n.route.id||p(!1),n.route.id}const _e={};r.startTransition;function be(e){return function(e){let t=r.useContext(ee).outlet;return t?r.createElement(ie.Provider,{value:e},t):t}(e.context)}function we(e){p(!1)}function ke(e){let{basename:n="/",children:a=null,location:o,navigationType:i=t.Pop,navigator:l,static:s=!1,future:c}=e;ne()&&p(!1);let u=n.replace(/^\/*/,"/"),d=r.useMemo((()=>({basename:u,navigator:l,static:s,future:Q({v7_relativeSplatPath:!1},c)})),[u,c,l,s]);"string"===typeof o&&(o=_(o));let{pathname:h="/",search:m="",hash:f="",state:v=null,key:g="default"}=o,y=r.useMemo((()=>{let e=z(h,u);return null==e?null:{location:{pathname:e,search:m,hash:f,state:v,key:g},navigationType:i}}),[u,h,m,f,v,g,i]);return null==y?null:r.createElement(J.Provider,{value:d},r.createElement(X.Provider,{children:a,value:y}))}function xe(e){let{children:t,location:n}=e;return se(Se(t),n)}new Promise((()=>{}));r.Component;function Se(e,t){void 0===t&&(t=[]);let n=[];return r.Children.forEach(e,((e,a)=>{if(!r.isValidElement(e))return;let o=[...t,a];if(e.type===r.Fragment)return void n.push.apply(n,Se(e.props.children,o));e.type!==we&&p(!1),e.props.index&&e.props.children&&p(!1);let i={id:e.props.id||o.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=Se(e.props.children,o)),n.push(i)})),n}function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}function Ne(e){return void 0===e&&(e=""),new URLSearchParams("string"===typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map((e=>[n,e])):[[n,r]])}),[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const Ae=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Me=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"];try{window.__reactRouterVersion="6"}catch(Fp){}const Te=r.createContext({isTransitioning:!1});new Map;const Le=r.startTransition;r.flushSync,r.useId;function Ie(e){let{basename:t,children:n,future:a,window:o}=e,i=r.useRef();null==i.current&&(i.current=function(e){return void 0===e&&(e={}),b((function(e,t){let{pathname:n="/",search:r="",hash:a=""}=_(e.location.hash.substr(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),g("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let n=e.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let t=e.location.href,n=t.indexOf("#");r=-1===n?t:t.slice(0,n)}return r+"#"+("string"===typeof t?t:y(t))}),(function(e,t){f("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)}({window:o,v5Compat:!0}));let l=i.current,[s,c]=r.useState({action:l.action,location:l.location}),{v7_startTransition:u}=a||{},d=r.useCallback((e=>{u&&Le?Le((()=>c(e))):c(e)}),[c,u]);return r.useLayoutEffect((()=>l.listen(d)),[l,d]),r.createElement(ke,{basename:t,children:n,location:s.location,navigationType:s.action,navigator:l,future:a})}const Pe="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,Oe=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Re=r.forwardRef((function(e,t){let n,{onClick:a,relative:o,reloadDocument:i,replace:l,state:s,target:c,to:u,preventScrollReset:d,unstable_viewTransition:h}=e,m=Ee(e,Ae),{basename:f}=r.useContext(J),v=!1;if("string"===typeof u&&Oe.test(u)&&(n=u,Pe))try{let e=new URL(window.location.href),t=u.startsWith("//")?new URL(e.protocol+u):new URL(u),n=z(t.pathname,f);t.origin===e.origin&&null!=n?u=n+t.search+t.hash:v=!0}catch(Fp){}let g=function(e,t){let{relative:n}=void 0===t?{}:t;ne()||p(!1);let{basename:a,navigator:o}=r.useContext(J),{hash:i,pathname:l,search:s}=le(e,{relative:n}),c=l;return"/"!==a&&(c="/"===l?a:$([a,l])),o.createHref({pathname:c,search:s,hash:i})}(u,{relative:o}),_=function(e,t){let{target:n,replace:a,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s}=void 0===t?{}:t,c=oe(),u=re(),d=le(e,{relative:l});return r.useCallback((t=>{if(function(e,t){return 0===e.button&&(!t||"_self"===t)&&!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)}(t,n)){t.preventDefault();let n=void 0!==a?a:y(u)===y(d);c(e,{replace:n,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s})}}),[u,c,d,a,o,n,e,i,l,s])}(u,{replace:l,state:s,target:c,preventScrollReset:d,relative:o,unstable_viewTransition:h});return r.createElement("a",Ce({},m,{href:n||g,onClick:v||i?a:function(e){a&&a(e),e.defaultPrevented||_(e)},ref:t,target:c}))}));const De=r.forwardRef((function(e,t){let{"aria-current":n="page",caseSensitive:a=!1,className:o="",end:i=!1,style:l,to:s,unstable_viewTransition:c,children:u}=e,d=Ee(e,Me),h=le(s,{relative:d.relative}),m=re(),f=r.useContext(G),{navigator:v,basename:g}=r.useContext(J),y=null!=f&&function(e,t){void 0===t&&(t={});let n=r.useContext(Te);null==n&&p(!1);let{basename:a}=je(ze.useViewTransitionState),o=le(e,{relative:t.relative});if(!n.isTransitioning)return!1;let i=z(n.currentLocation.pathname,a)||n.currentLocation.pathname,l=z(n.nextLocation.pathname,a)||n.nextLocation.pathname;return null!=R(o.pathname,l)||null!=R(o.pathname,i)}(h)&&!0===c,_=v.encodeLocation?v.encodeLocation(h).pathname:h.pathname,b=m.pathname,w=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;a||(b=b.toLowerCase(),w=w?w.toLowerCase():null,_=_.toLowerCase()),w&&g&&(w=z(w,g)||w);const k="/"!==_&&_.endsWith("/")?_.length-1:_.length;let x,S=b===_||!i&&b.startsWith(_)&&"/"===b.charAt(k),C=null!=w&&(w===_||!i&&w.startsWith(_)&&"/"===w.charAt(_.length)),E={isActive:S,isPending:C,isTransitioning:y},N=S?n:void 0;x="function"===typeof o?o(E):[o,S?"active":null,C?"pending":null,y?"transitioning":null].filter(Boolean).join(" ");let A="function"===typeof l?l(E):l;return r.createElement(Re,Ce({},d,{"aria-current":N,className:x,ref:t,style:A,to:s,unstable_viewTransition:c}),"function"===typeof u?u(E):u)}));var ze,Fe;function je(e){let t=r.useContext(Z);return t||p(!1),t}function He(e){let t=r.useRef(Ne(e)),n=r.useRef(!1),a=re(),o=r.useMemo((()=>function(e,t){let n=Ne(e);return t&&t.forEach(((e,r)=>{n.has(r)||t.getAll(r).forEach((e=>{n.append(r,e)}))})),n}(a.search,n.current?null:t.current)),[a.search]),i=oe(),l=r.useCallback(((e,t)=>{const r=Ne("function"===typeof e?e(o):e);n.current=!0,i("?"+r,t)}),[i,o]);return[o,l]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(ze||(ze={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Fe||(Fe={}));let Ve=function(e){return e.logs="logs",e.anomaly="anomaly",e}({});const $e={home:"/",metrics:"/metrics",dashboards:"/dashboards",cardinality:"/cardinality",topQueries:"/top-queries",trace:"/trace",withTemplate:"/expand-with-exprs",relabel:"/relabeling",logs:"/logs",activeQueries:"/active-queries",queryAnalyzer:"/query-analyzer",icons:"/icons",anomaly:"/anomaly",query:"/query"},{REACT_APP_TYPE:Ue}={},Be=Ue===Ve.logs,qe={header:{tenant:!0,stepControl:!Be,timeSelector:!Be,executionControls:!Be}},Ye={[$e.home]:{title:"Query",...qe},[$e.metrics]:{title:"Explore Prometheus metrics",header:{tenant:!0,stepControl:!0,timeSelector:!0}},[$e.cardinality]:{title:"Explore cardinality",header:{tenant:!0,cardinalityDatePicker:!0}},[$e.topQueries]:{title:"Top queries",header:{tenant:!0}},[$e.trace]:{title:"Trace analyzer",header:{}},[$e.queryAnalyzer]:{title:"Query analyzer",header:{}},[$e.dashboards]:{title:"Dashboards",...qe},[$e.withTemplate]:{title:"WITH templates",header:{}},[$e.relabel]:{title:"Metric relabel debug",header:{}},[$e.logs]:{title:"Logs Explorer",header:{}},[$e.activeQueries]:{title:"Active Queries",header:{}},[$e.icons]:{title:"Icons",header:{}},[$e.anomaly]:{title:"Anomaly exploration",...qe},[$e.query]:{title:"Query",...qe}},We=$e,Ke=()=>{var e;const t=(null===(e=document.getElementById("root"))||void 0===e?void 0:e.dataset.params)||"{}";try{return JSON.parse(t)}catch(Fp){return console.error(Fp),{}}},Qe=()=>!!Object.keys(Ke()).length,Ze=/(\/select\/)(\d+|\d.+)(\/)(.+)/,Ge=(e,t)=>e.replace(Ze,"$1".concat(t,"/$4")),Je=e=>{var t;return(null===(t=e.match(Ze))||void 0===t?void 0:t[2])||""},Xe=(e,t)=>{t?window.localStorage.setItem(e,JSON.stringify({value:t})):tt([e]),window.dispatchEvent(new Event("storage"))},et=e=>{const t=window.localStorage.getItem(e);if(null!==t)try{var n;return null===(n=JSON.parse(t))||void 0===n?void 0:n.value}catch(Fp){return t}},tt=e=>e.forEach((e=>window.localStorage.removeItem(e))),{REACT_APP_TYPE:nt}={};var rt=n(215),at=n.n(rt),ot=n(424),it=n.n(ot);const lt={table:100,chart:20,code:1e3},st=[{id:"small",isDefault:!0,height:()=>.2*window.innerHeight},{id:"medium",height:()=>.4*window.innerHeight},{id:"large",height:()=>.8*window.innerHeight}],ct=["min","median","max"],ut=(e,t)=>{const n=window.location.hash.split("?")[1],r=at().parse(n,{ignoreQueryPrefix:!0});return it()(r,e,t||"")},dt=()=>{var e;const t=(null===(e=(window.location.hash.split("?")[1]||"").match(/g\d+\.expr/g))||void 0===e?void 0:e.length)||1;return new Array(t>10?10:t).fill(1).map(((e,t)=>ut("g".concat(t,".expr"),"")))};let ht=function(e){return e.yhat="yhat",e.yhatUpper="yhat_upper",e.yhatLower="yhat_lower",e.anomaly="vmui_anomalies_points",e.training="vmui_training_data",e.actual="actual",e.anomalyScore="anomaly_score",e}({}),mt=function(e){return e.table="table",e.chart="chart",e.code="code",e}({}),pt=function(e){return e.emptyServer="Please enter Server URL",e.validServer="Please provide a valid Server URL",e.validQuery="Please enter a valid Query and execute it",e.traceNotFound="Not found the tracing information",e.emptyTitle="Please enter title",e.positiveNumber="Please enter positive number",e.validStep="Please enter a valid step",e.unknownType="Unknown server response format: must have 'errorType'",e}({}),ft=function(e){return e.system="system",e.light="light",e.dark="dark",e}({}),vt=function(e){return e.empty="empty",e.metricsql="metricsql",e.label="label",e.labelValue="labelValue",e}({});const gt=e=>getComputedStyle(document.documentElement).getPropertyValue("--".concat(e)),yt=(e,t)=>{document.documentElement.style.setProperty("--".concat(e),t)},_t=()=>window.matchMedia("(prefers-color-scheme: dark)").matches,bt=e=>{let t;try{t=new URL(e)}catch(n){return!1}return"http:"===t.protocol||"https:"===t.protocol},wt=e=>e.replace(/\/$/,""),kt=ut("g0.tenantID",""),xt={serverUrl:wt((e=>{const{serverURL:t}=Ke(),n=et("SERVER_URL"),r=window.location.href.replace(/\/(select\/)?(vmui)\/.*/,""),a="".concat(window.location.origin).concat(window.location.pathname.replace(/^\/vmui/,"")),o=window.location.href.replace(/\/(?:prometheus\/)?(?:graph|vmui)\/.*/,"/prometheus"),i=t||n||o;switch(nt){case Ve.logs:return r;case Ve.anomaly:return n||a;default:return e?Ge(i,e):i}})(kt)),tenantId:kt,theme:et("THEME")||ft.system,isDarkTheme:null};function St(e,t){switch(t.type){case"SET_SERVER":return{...e,serverUrl:wt(t.payload)};case"SET_TENANT_ID":return{...e,tenantId:t.payload};case"SET_THEME":return Xe("THEME",t.payload),{...e,theme:t.payload};case"SET_DARK_THEME":return{...e,isDarkTheme:(n=e.theme,n===ft.system&&_t()||n===ft.dark)};default:throw new Error}var n}var Ct=n(746);var Et=0;Array.isArray;function Nt(e,t,n,r,a,o){t||(t={});var i,l,s=t;if("ref"in s)for(l in s={},t)"ref"==l?i=t[l]:s[l]=t[l];var c={type:e,props:s,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--Et,__i:-1,__u:0,__source:a,__self:o};if("function"==typeof e&&(i=e.defaultProps))for(l in i)void 0===s[l]&&(s[l]=i[l]);return Ct.fF.vnode&&Ct.fF.vnode(c),c}const At=(0,r.createContext)({}),Mt=()=>(0,r.useContext)(At).state,Tt=()=>(0,r.useContext)(At).dispatch,Lt=Object.entries(xt).reduce(((e,t)=>{let[n,r]=t;return{...e,[n]:ut(n)||r}}),{}),It="YYYY-MM-DD",Pt="YYYY-MM-DD HH:mm:ss",Ot="YYYY-MM-DD HH:mm:ss:SSS (Z)",Rt="YYYY-MM-DD[T]HH:mm:ss",Dt="YYYY-MM-DD_HHmmss",zt=window.innerWidth/4,Ft=window.innerWidth/40,jt=1,Ht=1578e8,Vt=Intl.supportedValuesOf,$t=Vt?Vt("timeZone"):["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Katmandu","Asia/Khandyga","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis"],Ut=[{long:"years",short:"y",possible:"year"},{long:"weeks",short:"w",possible:"week"},{long:"days",short:"d",possible:"day"},{long:"hours",short:"h",possible:"hour"},{long:"minutes",short:"m",possible:"min"},{long:"seconds",short:"s",possible:"sec"},{long:"milliseconds",short:"ms",possible:"millisecond"}],Bt=Ut.map((e=>e.short)),qt=e=>Math.round(1e3*e)/1e3,Yt=e=>en(o().duration(e,"seconds").asMilliseconds()),Wt=e=>{let t=qt(e);const n=Math.round(e);e>=100&&(t=n-n%10),e<100&&e>=10&&(t=n-n%5),e<10&&e>=1&&(t=n),e<1&&e>.01&&(t=Math.round(40*e)/40);return Yt(t||.001).replace(/\s/g,"")},Kt=e=>{const t=e.match(/\d+/g),n=e.match(/[a-zA-Z]+/g);if(n&&t&&Bt.includes(n[0]))return{[n[0]]:t[0]}},Qt=e=>{const t=Ut.map((e=>e.short)).join("|"),n=new RegExp("\\d+(\\.\\d+)?[".concat(t,"]+"),"g"),r=(e.match(n)||[]).reduce(((e,t)=>{const n=Kt(t);return n?{...e,...n}:{...e}}),{});return o().duration(r).asSeconds()},Zt=(e,t)=>Wt(e/(t?Ft:zt)),Gt=(e,t)=>{const n=(t||o()().toDate()).valueOf()/1e3,r=Qt(e);return{start:n-r,end:n,step:Zt(r),date:Jt(t||o()().toDate())}},Jt=e=>o().tz(e).utc().format(Rt),Xt=e=>o().tz(e).format(Rt),en=e=>{const t=Math.floor(e%1e3),n=Math.floor(e/1e3%60),r=Math.floor(e/1e3/60%60),a=Math.floor(e/1e3/3600%24),o=Math.floor(e/864e5),i=["d","h","m","s","ms"],l=[o,a,r,n,t].map(((e,t)=>e?"".concat(e).concat(i[t]):""));return l.filter((e=>e)).join("")},tn=e=>{const t=o()(1e3*e);return t.isValid()?t.toDate():new Date},nn={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE===Ve.logs,rn=[{title:"Last 5 minutes",duration:"5m",isDefault:nn},{title:"Last 15 minutes",duration:"15m"},{title:"Last 30 minutes",duration:"30m",isDefault:!nn},{title:"Last 1 hour",duration:"1h"},{title:"Last 3 hours",duration:"3h"},{title:"Last 6 hours",duration:"6h"},{title:"Last 12 hours",duration:"12h"},{title:"Last 24 hours",duration:"24h"},{title:"Last 2 days",duration:"2d"},{title:"Last 7 days",duration:"7d"},{title:"Last 30 days",duration:"30d"},{title:"Last 90 days",duration:"90d"},{title:"Last 180 days",duration:"180d"},{title:"Last 1 year",duration:"1y"},{title:"Yesterday",duration:"1d",until:()=>o()().tz().subtract(1,"day").endOf("day").toDate()},{title:"Today",duration:"1d",until:()=>o()().tz().endOf("day").toDate()}].map((e=>({id:e.title.replace(/\s/g,"_").toLocaleLowerCase(),until:e.until?e.until:()=>o()().tz().toDate(),...e}))),an=e=>{var t;let{relativeTimeId:n,defaultDuration:r,defaultEndInput:a}=e;const o=null===(t=rn.find((e=>e.isDefault)))||void 0===t?void 0:t.id,i=n||ut("g0.relative_time",o),l=rn.find((e=>e.id===i));return{relativeTimeId:l?i:"none",duration:l?l.duration:r,endInput:l?l.until():a}},on=e=>{const t=o()().tz(e);return"UTC".concat(t.format("Z"))},ln=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=new RegExp(e,"i");return $t.reduce(((n,r)=>{const a=(r.match(/^(.*?)\//)||[])[1]||"unknown",o=on(r),i=o.replace(/UTC|0/,""),l=r.replace(/[/_]/g," "),s={region:r,utc:o,search:"".concat(r," ").concat(o," ").concat(l," ").concat(i)},c=!e||e&&t.test(s.search);return c&&n[a]?n[a].push(s):c&&(n[a]=[s]),n}),{})},sn=e=>{o().tz.setDefault(e)},cn=()=>{const e=o().tz.guess(),t=(e=>{try{return o()().tz(e),!0}catch(Fp){return!1}})(e);return{isValid:t,title:t?"Browser Time (".concat(e,")"):"Browser timezone (UTC)",region:t?e:"UTC"}},un=et("TIMEZONE")||cn().region;sn(un);const dn=()=>{const e=ut("g0.range_input"),{duration:t,endInput:n,relativeTimeId:r}=an({defaultDuration:e||"1h",defaultEndInput:(a=ut("g0.end_input",o()().utc().format(Rt)),o()(a).utcOffset(0,!0).toDate()),relativeTimeId:e?ut("g0.relative_time","none"):void 0});var a;return{duration:t,period:Gt(t,n),relativeTime:r}},hn={...dn(),timezone:un};function mn(e,t){switch(t.type){case"SET_TIME_STATE":return{...e,...t.payload};case"SET_DURATION":return{...e,duration:t.payload,period:Gt(t.payload,tn(e.period.end)),relativeTime:"none"};case"SET_RELATIVE_TIME":return{...e,duration:t.payload.duration,period:Gt(t.payload.duration,t.payload.until),relativeTime:t.payload.id};case"SET_PERIOD":const n=(e=>{const t=e.to.valueOf()-e.from.valueOf();return en(t)})(t.payload);return{...e,duration:n,period:Gt(n,t.payload.to),relativeTime:"none"};case"RUN_QUERY":const{duration:r,endInput:a}=an({relativeTimeId:e.relativeTime,defaultDuration:e.duration,defaultEndInput:tn(e.period.end)});return{...e,period:Gt(r,a)};case"RUN_QUERY_TO_NOW":return{...e,period:Gt(e.duration)};case"SET_TIMEZONE":return sn(t.payload),Xe("TIMEZONE",t.payload),e.defaultTimezone&&Xe("DISABLED_DEFAULT_TIMEZONE",t.payload!==e.defaultTimezone),{...e,timezone:t.payload};case"SET_DEFAULT_TIMEZONE":return{...e,defaultTimezone:t.payload};default:throw new Error}}const pn=(0,r.createContext)({}),fn=()=>(0,r.useContext)(pn).state,vn=()=>(0,r.useContext)(pn).dispatch,gn=e=>{const t=et(e);return t?JSON.parse(t):[]},yn=50,_n=1e3,bn=1e3;const wn=dt(),kn={query:wn,queryHistory:wn.map((e=>({index:0,values:[e]}))),autocomplete:et("AUTOCOMPLETE")||!1,autocompleteQuick:!1,autocompleteCache:new class{constructor(){this.maxSize=void 0,this.map=void 0,this.maxSize=bn,this.map=new Map}get(e){for(const[t,n]of this.map){const r=JSON.parse(t),a=r.start===e.start&&r.end===e.end,o=r.type===e.type,i=e.value&&r.value&&e.value.includes(r.value),l=r.match===e.match||i,s=n.length<_n;if(l&&a&&o&&s)return n}return this.map.get(JSON.stringify(e))}put(e,t){if(this.map.size>=this.maxSize){const e=this.map.keys().next().value;this.map.delete(e)}this.map.set(JSON.stringify(e),t)}},metricsQLFunctions:[]};function xn(e,t){switch(t.type){case"SET_QUERY":return{...e,query:t.payload.map((e=>e))};case"SET_QUERY_HISTORY":return(e=>{const t=e.map((e=>e.values[e.index])),n=gn("QUERY_HISTORY");n[0]||(n[0]=[]);const r=n[0];t.forEach((e=>{!r.includes(e)&&e&&r.unshift(e),r.length>250&&r.shift()})),Xe("QUERY_HISTORY",JSON.stringify(n))})(t.payload),{...e,queryHistory:t.payload};case"SET_QUERY_HISTORY_BY_INDEX":return e.queryHistory.splice(t.payload.queryNumber,1,t.payload.value),{...e,queryHistory:e.queryHistory};case"TOGGLE_AUTOCOMPLETE":return Xe("AUTOCOMPLETE",!e.autocomplete),{...e,autocomplete:!e.autocomplete};case"SET_AUTOCOMPLETE_QUICK":return{...e,autocompleteQuick:t.payload};case"SET_AUTOCOMPLETE_CACHE":return e.autocompleteCache.put(t.payload.key,t.payload.value),{...e};case"SET_METRICSQL_FUNCTIONS":return{...e,metricsQLFunctions:t.payload};default:throw new Error}}const Sn=(0,r.createContext)({}),Cn=()=>(0,r.useContext)(Sn).state,En=()=>(0,r.useContext)(Sn).dispatch,Nn=()=>Nt("svg",{viewBox:"0 0 74 24",fill:"currentColor",children:Nt("path",{d:"M6.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29C15.73 4.1 12.46 3.01 7.43 3h-.06C2.33 3-.93 4.1.24 5.18c0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a454.94 454.94 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44a454.4 454.4 0 0 0 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM35 5l-5.84 14.46h-2.43L20.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H35Zm17.18 0v14.46H49.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L38.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H36.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15Z"})}),An=()=>Nt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:[Nt("path",{d:"M11.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29 1.17-1.09-2.1-2.17-7.13-2.18h-.06c-5.04 0-8.3 1.1-7.13 2.18 0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a455.13 455.13 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44 2.05-1.82 4.09-3.65 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM40 5l-5.84 14.46h-2.43L25.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H40Zm17.18 0v14.46H54.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L43.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H41.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15ZM1.73 36v-5.17l-.67-.07a.6.6 0 0 1-.21-.1.23.23 0 0 1-.08-.18v-.44h.96v-.59c0-.34.05-.65.14-.92a1.79 1.79 0 0 1 1.08-1.11 2.45 2.45 0 0 1 1.62-.02l-.03.53c0 .1-.06.15-.16.16H4c-.18 0-.35.03-.5.08a.95.95 0 0 0-.39.23c-.1.11-.19.25-.25.43-.05.18-.08.4-.08.65v.56h1.75v.78H2.8V36H1.73Zm6.17-6.17c.45 0 .85.07 1.2.22a2.57 2.57 0 0 1 1.5 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.86-.07-1.22-.21a2.57 2.57 0 0 1-1.5-1.62c-.12-.38-.19-.81-.19-1.3 0-.47.07-.9.2-1.28a2.57 2.57 0 0 1 1.5-1.62c.35-.15.76-.22 1.2-.22Zm0 5.42c.6 0 1.05-.2 1.35-.6.3-.4.44-.97.44-1.69s-.15-1.28-.44-1.69c-.3-.4-.75-.6-1.35-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.33.73-.08.28-.11.6-.11.96 0 .72.15 1.29.44 1.69.3.4.76.6 1.36.6Zm5.26-4.11c.2-.42.43-.74.71-.97.28-.24.62-.36 1.03-.36.13 0 .25.02.36.05.12.02.23.07.32.13l-.08.8c-.02.1-.08.15-.18.15l-.24-.04a1.7 1.7 0 0 0-.88.05c-.15.05-.29.14-.4.25-.12.1-.23.24-.32.4-.1.17-.18.35-.26.56V36h-1.07v-6.08h.61c.12 0 .2.02.24.07.05.04.08.12.1.23l.06.92Zm13.73-3.82L23.39 36h-1.46l-3.5-8.68h1.29a.54.54 0 0 1 .54.37l2.04 5.3a11.31 11.31 0 0 1 .37 1.21 11.65 11.65 0 0 1 .35-1.22l2.03-5.29c.03-.1.1-.18.19-.25.1-.08.21-.12.35-.12h1.3Zm2.2 2.52V36H27.6v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.08.36a1 1 0 0 1-.51.5.96.96 0 0 1-.73 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .37.08c.12.05.22.11.3.2a.94.94 0 0 1 .3.67Zm5.72 3.1a.68.68 0 0 1-.13.13c-.04.03-.1.05-.18.05a.42.42 0 0 1-.22-.07 3.95 3.95 0 0 0-.62-.31c-.14-.05-.3-.07-.51-.07-.26 0-.5.04-.69.14-.2.1-.36.23-.49.4-.13.18-.22.4-.29.64-.06.25-.1.53-.1.85 0 .33.04.62.1.88.08.25.18.47.32.64.13.18.29.3.48.4.18.09.4.13.63.13a1.6 1.6 0 0 0 .94-.27l.26-.2a.4.4 0 0 1 .25-.09.3.3 0 0 1 .27.14l.43.54a2.76 2.76 0 0 1-1.77.96c-.22.03-.43.05-.65.05a2.57 2.57 0 0 1-1.96-.83c-.25-.28-.45-.6-.6-1-.14-.4-.21-.85-.21-1.35 0-.45.06-.87.2-1.25a2.61 2.61 0 0 1 1.51-1.67c.37-.16.8-.24 1.28-.24.46 0 .86.07 1.2.22.35.15.66.36.94.64l-.4.54Zm3.43 4.95c-.54 0-.95-.15-1.24-.45-.28-.3-.42-.73-.42-1.26v-3.44h-.63a.29.29 0 0 1-.2-.07c-.06-.06-.09-.13-.09-.24v-.59l.99-.16.31-1.68a.33.33 0 0 1 .12-.18.34.34 0 0 1 .21-.07h.77v1.94h1.64v1.05h-1.64v3.34c0 .2.05.34.14.45.1.1.22.16.39.16a.73.73 0 0 0 .39-.1l.12-.07a.2.2 0 0 1 .11-.03c.05 0 .08.01.11.03l.09.1.44.72c-.21.18-.46.32-.74.4-.28.1-.57.15-.87.15Zm5.09-6.35c.46 0 .87.07 1.24.22a2.7 2.7 0 0 1 1.58 1.63c.14.39.22.83.22 1.31 0 .49-.08.93-.22 1.32-.14.4-.35.73-.62 1-.26.28-.58.49-.96.64-.37.15-.78.22-1.24.22a3.4 3.4 0 0 1-1.25-.22 2.71 2.71 0 0 1-1.59-1.64 3.8 3.8 0 0 1-.21-1.32c0-.48.07-.92.21-1.31a2.75 2.75 0 0 1 1.58-1.63c.38-.15.8-.22 1.26-.22Zm0 5.2c.51 0 .89-.17 1.13-.52.25-.34.38-.84.38-1.5a2.6 2.6 0 0 0-.38-1.53c-.24-.34-.62-.52-1.13-.52-.52 0-.9.18-1.16.53-.25.35-.37.85-.37 1.51s.12 1.17.37 1.51c.25.35.64.52 1.16.52Zm5.56-4.04c.2-.37.42-.65.69-.86.26-.21.57-.32.94-.32.28 0 .5.06.68.19l-.1 1.1a.3.3 0 0 1-.09.16.24.24 0 0 1-.15.04 1.8 1.8 0 0 1-.27-.03 2.01 2.01 0 0 0-.34-.03c-.16 0-.3.03-.44.08a1.1 1.1 0 0 0-.34.2c-.1.1-.2.2-.27.33-.08.13-.15.27-.22.44V36H47.7v-6.16h.87c.15 0 .26.03.31.09.06.05.1.15.13.29l.09.7Zm4.62-1.07V36h-1.49v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.07.36a1 1 0 0 1-.51.5.96.96 0 0 1-.74 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .38.08c.11.05.21.11.3.2a.94.94 0 0 1 .28.67Zm4.56 5.32a7.8 7.8 0 0 0-1.08.12c-.29.05-.52.12-.7.2a.92.92 0 0 0-.38.3.64.64 0 0 0-.11.36c0 .26.07.45.23.56.15.11.35.17.6.17.3 0 .57-.06.79-.17.22-.1.44-.28.65-.5v-1.04Zm-3.4-2.67c.71-.65 1.57-.97 2.56-.97.36 0 .68.06.97.18a1.99 1.99 0 0 1 1.16 1.24c.1.3.16.61.16.96V36h-.67a.7.7 0 0 1-.33-.06c-.07-.04-.13-.13-.18-.26l-.13-.44c-.16.14-.3.26-.46.37a2.8 2.8 0 0 1-.97.43 2.77 2.77 0 0 1-1.32-.05 1.62 1.62 0 0 1-.57-.31 1.41 1.41 0 0 1-.38-.53 1.85 1.85 0 0 1-.05-1.18c.05-.16.14-.3.25-.45.12-.14.28-.27.46-.4a3 3 0 0 1 .7-.32 9.19 9.19 0 0 1 2.2-.33v-.36c0-.41-.09-.71-.26-.91-.18-.2-.43-.3-.76-.3a1.84 1.84 0 0 0-1.02.28l-.33.18c-.1.06-.2.09-.32.09-.1 0-.2-.03-.27-.08a.72.72 0 0 1-.17-.2l-.26-.47Zm11.49 4.32V36h-4.88v-8.6h1.16v7.62h3.72Zm3.16-5.2c.44 0 .84.08 1.2.23a2.57 2.57 0 0 1 1.49 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.85-.07-1.21-.21a2.57 2.57 0 0 1-1.5-1.62c-.13-.38-.2-.81-.2-1.3 0-.47.07-.9.2-1.28.14-.39.33-.72.59-1 .25-.26.55-.47.9-.62.37-.15.77-.22 1.22-.22Zm0 5.43c.6 0 1.05-.2 1.34-.6.3-.4.45-.97.45-1.69s-.15-1.28-.45-1.69c-.3-.4-.74-.6-1.34-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.34.73-.07.28-.1.6-.1.96 0 .72.14 1.29.44 1.69.3.4.75.6 1.36.6Zm6.33-2.22c.22 0 .4-.03.57-.09.16-.06.3-.14.41-.25.12-.11.2-.24.26-.39.05-.15.08-.31.08-.5 0-.37-.11-.66-.34-.88-.23-.22-.55-.33-.98-.33-.43 0-.76.1-.99.33-.22.22-.34.51-.34.89 0 .18.03.34.09.5a1.1 1.1 0 0 0 .67.63c.16.06.35.09.57.09Zm1.93 3.3a.51.51 0 0 0-.13-.36.84.84 0 0 0-.34-.22 8.57 8.57 0 0 0-1.73-.2 7.5 7.5 0 0 1-.62-.05c-.23.1-.41.23-.56.4a.8.8 0 0 0-.1.92c.07.12.18.22.32.3.14.1.32.16.54.21a3.5 3.5 0 0 0 1.55 0c.23-.05.42-.12.57-.22.16-.1.29-.21.37-.34a.8.8 0 0 0 .13-.44Zm1.08-6.17v.4c0 .13-.08.21-.25.25l-.69.09c.14.26.2.56.2.88a1.86 1.86 0 0 1-1.36 1.82 3.07 3.07 0 0 1-1.72.04c-.12.08-.22.16-.29.25a.44.44 0 0 0-.1.27c0 .15.06.26.17.33.12.08.28.13.47.16a5 5 0 0 0 .66.06 16.56 16.56 0 0 1 1.5.13c.26.05.48.12.67.22.19.1.34.24.46.41.12.18.18.4.18.69 0 .26-.07.5-.2.75s-.31.46-.56.65c-.24.2-.54.34-.9.46a4.57 4.57 0 0 1-2.36.04c-.33-.09-.6-.2-.82-.36a1.56 1.56 0 0 1-.5-.51c-.1-.2-.16-.4-.16-.6 0-.3.1-.56.28-.77.19-.2.45-.37.77-.5a1.15 1.15 0 0 1-.43-.32.88.88 0 0 1-.15-.54c0-.09.01-.18.04-.27.04-.1.08-.2.15-.28a1.55 1.55 0 0 1 .58-.5c-.3-.16-.53-.39-.7-.66-.17-.28-.25-.6-.25-.97 0-.3.05-.57.16-.8.12-.25.28-.46.48-.63.2-.17.45-.3.73-.4a3 3 0 0 1 2.3.21h1.64Zm4.65.76a.24.24 0 0 1-.23.14.42.42 0 0 1-.2-.07 3.59 3.59 0 0 0-.67-.3 1.8 1.8 0 0 0-1.03 0c-.14.05-.27.11-.37.2a.87.87 0 0 0-.23.27.75.75 0 0 0-.08.35c0 .15.04.28.13.39.1.1.21.19.36.27.15.07.32.14.5.2a13.63 13.63 0 0 1 1.16.4c.2.08.36.18.5.3a1.33 1.33 0 0 1 .5 1.07 2 2 0 0 1-.15.78c-.1.24-.25.44-.45.62-.2.17-.43.3-.72.4a3.1 3.1 0 0 1-2.14-.05 2.97 2.97 0 0 1-.87-.53l.25-.41c.04-.05.07-.1.12-.12a.3.3 0 0 1 .17-.04.4.4 0 0 1 .22.08l.3.19a1.91 1.91 0 0 0 1.03.27c.2 0 .38-.03.54-.08.16-.06.29-.13.4-.22a.96.96 0 0 0 .3-.7c0-.17-.05-.31-.14-.42-.09-.11-.2-.2-.36-.28a2.6 2.6 0 0 0-.5-.2l-.59-.19c-.2-.06-.39-.14-.58-.22a2.14 2.14 0 0 1-.5-.3 1.45 1.45 0 0 1-.36-.46c-.1-.19-.14-.41-.14-.67a1.6 1.6 0 0 1 .57-1.23c.18-.16.4-.3.68-.39.26-.1.57-.14.91-.14a2.84 2.84 0 0 1 1.9.7l-.23.4Z"}),Nt("defs",{children:Nt("path",{d:"M0 0h85v38H0z"})})]}),Mn=()=>Nt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:Nt("path",{d:"M11.118 10.476c.36.28.801.433 1.257.436h.052c.48-.007.961-.192 1.25-.444 1.509-1.279 5.88-5.287 5.88-5.287 1.168-1.087-2.093-2.174-7.13-2.181h-.06c-5.036.007-8.298 1.094-7.13 2.181 0 0 4.372 4.008 5.88 5.295zm2.559 2.166c-.359.283-.801.439-1.258.444h-.044a2.071 2.071 0 0 1-1.257-.444C10.082 11.755 6.384 8.42 5 7.148v1.93c0 .215.081.496.222.629l.07.064c1.045.955 4.546 4.154 5.825 5.245.358.283.8.438 1.257.444h.044c.489-.015.962-.2 1.258-.444 1.309-1.11 4.948-4.444 5.887-5.31.148-.132.222-.413.222-.628v-1.93a455.127 455.127 0 0 1-6.11 5.494zm-1.258 4.984a2.071 2.071 0 0 0 1.258-.436c2.053-1.815 4.09-3.65 6.11-5.502v1.938c0 .207-.075.488-.223.621-.94.873-4.578 4.2-5.887 5.31-.296.25-.77.436-1.258.443h-.044a2.071 2.071 0 0 1-1.257-.436c-1.204-1.027-4.376-3.928-5.616-5.062l-.28-.255c-.14-.133-.221-.414-.221-.621v-1.938c1.383 1.265 5.081 4.607 6.117 5.495.358.282.8.438 1.257.443h.044zM40 5l-5.84 14.46h-2.43L25.89 5h2.16c.233 0 .423.057.57.17.146.113.256.26.33.44l3.41 8.82c.113.287.22.603.32.95.106.34.206.697.3 1.07.08-.373.166-.73.26-1.07a8.84 8.84 0 0 1 .31-.95l3.39-8.82a.959.959 0 0 1 .31-.42.906.906 0 0 1 .58-.19H40zm17.176 0v14.46h-2.37v-9.34c0-.373.02-.777.06-1.21l-4.37 8.21c-.206.393-.523.59-.95.59h-.38c-.426 0-.743-.197-.95-.59l-4.42-8.24c.02.22.037.437.05.65.014.213.02.41.02.59v9.34h-2.37V5h2.03c.12 0 .224.003.31.01a.778.778 0 0 1 .23.05c.074.027.137.07.19.13.06.06.117.14.17.24l4.33 8.03c.114.213.217.433.31.66.1.227.197.46.29.7.094-.247.19-.483.29-.71.1-.233.207-.457.32-.67l4.27-8.01c.054-.1.11-.18.17-.24a.57.57 0 0 1 .19-.13.903.903 0 0 1 .24-.05c.087-.007.19-.01.31-.01h2.03zm8.887 13.73c.68 0 1.286-.117 1.82-.35.54-.24.996-.57 1.37-.99a4.28 4.28 0 0 0 .85-1.48c.2-.573.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.124 1.51-.37 2.19a5.248 5.248 0 0 1-1.07 1.77c-.46.5-1.024.893-1.69 1.18-.66.287-1.404.43-2.23.43-.827 0-1.574-.143-2.24-.43a5.012 5.012 0 0 1-1.69-1.18 5.33 5.33 0 0 1-1.06-1.77 6.373 6.373 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.096 1.277.29 1.85.2.567.483 1.06.85 1.48.373.42.826.75 1.36.99.54.24 1.15.36 1.83.36zm10.38.73h-1.03V5.31h1.03v14.15zM4.242 35v-5.166l-.672-.078a.595.595 0 0 1-.21-.09.23.23 0 0 1-.078-.186v-.438h.96v-.588c0-.348.048-.656.144-.924.1-.272.24-.5.42-.684a1.79 1.79 0 0 1 .66-.426c.256-.096.544-.144.864-.144.272 0 .522.04.75.12l-.024.534c-.008.096-.062.148-.162.156a4.947 4.947 0 0 1-.39.012c-.184 0-.352.024-.504.072a.949.949 0 0 0-.384.234c-.108.108-.192.25-.252.426a2.184 2.184 0 0 0-.084.654v.558h1.752v.774H5.316V35H4.242zM10.416 28.826a3.1 3.1 0 0 1 1.2.222c.356.148.66.358.912.63s.444.602.576.99c.136.384.204.814.204 1.29 0 .48-.068.912-.204 1.296a2.735 2.735 0 0 1-.576.984 2.572 2.572 0 0 1-.912.63 3.175 3.175 0 0 1-1.2.216c-.448 0-.852-.072-1.212-.216a2.572 2.572 0 0 1-.912-.63 2.805 2.805 0 0 1-.582-.984 3.972 3.972 0 0 1-.198-1.296c0-.476.066-.906.198-1.29.136-.388.33-.718.582-.99.252-.272.556-.482.912-.63.36-.148.764-.222 1.212-.222zm0 5.424c.6 0 1.048-.2 1.344-.6.296-.404.444-.966.444-1.686 0-.724-.148-1.288-.444-1.692-.296-.404-.744-.606-1.344-.606-.304 0-.57.052-.798.156a1.507 1.507 0 0 0-.564.45c-.148.196-.26.438-.336.726a3.941 3.941 0 0 0-.108.966c0 .72.148 1.282.444 1.686.3.4.754.6 1.362.6zM15.677 30.14c.192-.416.428-.74.708-.972.28-.236.622-.354 1.026-.354.128 0 .25.014.366.042.12.028.226.072.318.132l-.078.798c-.024.1-.084.15-.18.15-.056 0-.138-.012-.246-.036a1.694 1.694 0 0 0-.366-.036c-.192 0-.364.028-.516.084-.148.056-.282.14-.402.252a1.782 1.782 0 0 0-.318.408c-.092.16-.176.344-.252.552V35h-1.074v-6.078h.612c.116 0 .196.022.24.066.044.044.074.12.09.228l.072.924zM26.761 28.922 24.283 35h-.96l-2.478-6.078h.87a.33.33 0 0 1 .33.222l1.542 3.912c.048.148.09.292.126.432.036.14.07.28.102.42.032-.14.066-.28.102-.42.036-.14.08-.284.132-.432l1.56-3.912a.33.33 0 0 1 .12-.156.311.311 0 0 1 .198-.066h.834zM27.74 35v-6.078h.643c.152 0 .246.074.282.222l.078.624c.224-.276.476-.502.756-.678.28-.176.604-.264.972-.264.408 0 .738.114.99.342.256.228.44.536.552.924.088-.22.2-.41.336-.57a1.987 1.987 0 0 1 1.014-.624c.196-.048.394-.072.594-.072.32 0 .604.052.852.156.252.1.464.248.636.444.176.196.31.438.402.726.092.284.138.61.138.978V35H34.91v-3.87c0-.476-.104-.836-.312-1.08-.208-.248-.508-.372-.9-.372-.176 0-.344.032-.504.096-.156.06-.294.15-.414.27-.12.12-.216.272-.288.456-.068.18-.102.39-.102.63V35h-1.074v-3.87c0-.488-.098-.852-.294-1.092-.196-.24-.482-.36-.858-.36-.264 0-.508.072-.732.216a2.38 2.38 0 0 0-.618.576V35H27.74zM40.746 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM44.974 29.6c.124-.124.254-.238.39-.342a2.395 2.395 0 0 1 .936-.444c.176-.044.368-.066.576-.066.336 0 .634.058.894.174.26.112.476.272.648.48.176.204.308.45.396.738.092.284.138.598.138.942V35H47.47v-3.918c0-.376-.086-.666-.258-.87-.172-.208-.434-.312-.786-.312-.256 0-.496.058-.72.174a2.58 2.58 0 0 0-.636.474V35h-1.482v-6.156h.906c.192 0 .318.09.378.27l.102.486zM53.085 28.748c.456 0 .87.074 1.242.222a2.692 2.692 0 0 1 1.578 1.626c.144.392.216.83.216 1.314 0 .488-.072.928-.216 1.32-.144.392-.35.726-.618 1.002a2.653 2.653 0 0 1-.96.636 3.333 3.333 0 0 1-1.242.222c-.46 0-.878-.074-1.254-.222a2.712 2.712 0 0 1-.966-.636 2.922 2.922 0 0 1-.618-1.002 3.807 3.807 0 0 1-.216-1.32c0-.484.072-.922.216-1.314.148-.392.354-.724.618-.996.268-.272.59-.482.966-.63a3.397 3.397 0 0 1 1.254-.222zm0 5.202c.512 0 .89-.172 1.134-.516.248-.344.372-.848.372-1.512s-.124-1.17-.372-1.518c-.244-.348-.622-.522-1.134-.522-.52 0-.906.176-1.158.528-.248.348-.372.852-.372 1.512s.124 1.164.372 1.512c.252.344.638.516 1.158.516zM57.252 35v-6.156h.906c.192 0 .318.09.378.27l.096.456c.108-.12.22-.23.336-.33a2.017 2.017 0 0 1 1.32-.492c.388 0 .706.106.954.318.252.208.44.486.564.834a1.93 1.93 0 0 1 .834-.882c.172-.092.354-.16.546-.204.196-.044.392-.066.588-.066.34 0 .642.052.906.156.264.104.486.256.666.456.18.2.316.444.408.732.096.288.144.618.144.99V35h-1.482v-3.918c0-.392-.086-.686-.258-.882-.172-.2-.424-.3-.756-.3-.152 0-.294.026-.426.078a1.026 1.026 0 0 0-.342.228 1.019 1.019 0 0 0-.228.366 1.435 1.435 0 0 0-.084.51V35h-1.488v-3.918c0-.412-.084-.712-.252-.9-.164-.188-.406-.282-.726-.282-.216 0-.418.054-.606.162a1.979 1.979 0 0 0-.516.432V35h-1.482zM70.558 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM74.9 26.084V35h-1.482v-8.916H74.9zM81.969 28.844l-3.354 7.848a.538.538 0 0 1-.174.234c-.068.056-.174.084-.318.084h-1.104l1.152-2.472-2.49-5.694h1.302c.116 0 .206.028.27.084.068.056.118.12.15.192l1.308 3.192c.044.108.08.216.108.324.032.108.062.218.09.33a32.3 32.3 0 0 1 .108-.33c.036-.112.076-.222.12-.33l1.236-3.186a.437.437 0 0 1 .408-.276h1.188z"})}),Tn=()=>Nt("svg",{viewBox:"0 0 15 17",fill:"currentColor",children:Nt("path",{d:"M6.11767 7.47586C6.47736 7.75563 6.91931 7.90898 7.37503 7.91213H7.42681C7.90756 7.90474 8.38832 7.71987 8.67677 7.46846C10.1856 6.18921 14.5568 2.18138 14.5568 2.18138C15.7254 1.09438 12.4637 0.00739 7.42681 0H7.36764C2.3308 0.00739 -0.930935 1.09438 0.237669 2.18138C0.237669 2.18138 4.60884 6.18921 6.11767 7.47586ZM8.67677 9.64243C8.31803 9.92483 7.87599 10.0808 7.41941 10.0861H7.37503C6.91845 10.0808 6.47641 9.92483 6.11767 9.64243C5.0822 8.75513 1.38409 5.42018 0.000989555 4.14832V6.07829C0.000989555 6.29273 0.0823481 6.57372 0.222877 6.70682L0.293316 6.7712L0.293344 6.77122C1.33784 7.72579 4.83903 10.9255 6.11767 12.0161C6.47641 12.2985 6.91845 12.4545 7.37503 12.4597H7.41941C7.90756 12.4449 8.38092 12.2601 8.67677 12.0161C9.9859 10.9069 13.6249 7.57198 14.5642 6.70682C14.7121 6.57372 14.7861 6.29273 14.7861 6.07829V4.14832C12.7662 5.99804 10.7297 7.82949 8.67677 9.64243ZM7.41941 14.6263C7.87513 14.6232 8.31708 14.4698 8.67677 14.19C10.7298 12.3746 12.7663 10.5407 14.7861 8.68853V10.6259C14.7861 10.8329 14.7121 11.1139 14.5642 11.247C13.6249 12.1196 9.9859 15.4471 8.67677 16.5563C8.38092 16.8077 7.90756 16.9926 7.41941 17H7.37503C6.91931 16.9968 6.47736 16.8435 6.11767 16.5637C4.91427 15.5373 1.74219 12.6364 0.502294 11.5025C0.393358 11.4029 0.299337 11.3169 0.222877 11.247C0.0823481 11.1139 0.000989555 10.8329 0.000989555 10.6259V8.68853C1.38409 9.95303 5.0822 13.2953 6.11767 14.1827C6.47641 14.4651 6.91845 14.6211 7.37503 14.6263H7.41941Z"})}),Ln=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"})}),In=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})}),Pn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8zm-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91z"})}),On=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"})}),Rn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})}),Dn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),zn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})}),Fn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})}),jn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"})}),Hn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m7 10 5 5 5-5z"})}),Vn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[Nt("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),Nt("path",{d:"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"})]}),$n=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"})}),Un=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m22 5.72-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"})}),Bn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"})}),qn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M8 5v14l11-7z"})}),Yn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m10 16.5 6-4.5-6-4.5v9zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"})}),Wn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m3.5 18.49 6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"})}),Kn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M10 10.02h5V21h-5zM17 21h3c1.1 0 2-.9 2-2v-9h-5v11zm3-18H5c-1.1 0-2 .9-2 2v3h19V5c0-1.1-.9-2-2-2zM3 19c0 1.1.9 2 2 2h3V10H3v9z"})}),Qn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})}),Zn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"})}),Gn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})}),Jn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 13H5v-2h14v2z"})}),Xn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M8.9999 14.7854L18.8928 4.8925C19.0803 4.70497 19.3347 4.59961 19.5999 4.59961C19.8651 4.59961 20.1195 4.70497 20.307 4.8925L21.707 6.2925C22.0975 6.68303 22.0975 7.31619 21.707 7.70672L9.70701 19.7067C9.31648 20.0972 8.68332 20.0972 8.2928 19.7067L2.6928 14.1067C2.50526 13.9192 2.3999 13.6648 2.3999 13.3996C2.3999 13.1344 2.50526 12.88 2.6928 12.6925L4.0928 11.2925C4.48332 10.902 5.11648 10.902 5.50701 11.2925L8.9999 14.7854Z"})}),er=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"})}),tr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"})}),nr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z"})}),rr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"})}),ar=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M20 9H4v2h16V9zM4 15h16v-2H4v2z"})}),or=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"})}),ir=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21 5C19.89 4.65 18.67 4.5 17.5 4.5C15.55 4.5 13.45 4.9 12 6C10.55 4.9 8.45 4.5 6.5 4.5C5.33 4.5 4.11 4.65 3 5C2.25 5.25 1.6 5.55 1 6V20.6C1 20.85 1.25 21.1 1.5 21.1C1.6 21.1 1.65 21.1 1.75 21.05C3.15 20.3 4.85 20 6.5 20C8.2 20 10.65 20.65 12 21.5C13.35 20.65 15.8 20 17.5 20C19.15 20 20.85 20.3 22.25 21.05C22.35 21.1 22.4 21.1 22.5 21.1C22.75 21.1 23 20.85 23 20.6V6C22.4 5.55 21.75 5.25 21 5ZM21 18.5C19.9 18.15 18.7 18 17.5 18C15.8 18 13.35 18.65 12 19.5C10.65 18.65 8.2 18 6.5 18C5.3 18 4.1 18.15 3 18.5V7C4.1 6.65 5.3 6.5 6.5 6.5C8.2 6.5 10.65 7.15 12 8C13.35 7.15 15.8 6.5 17.5 6.5C18.7 6.5 19.9 6.65 21 7V18.5Z"}),Nt("path",{d:"M17.5 10.5C18.38 10.5 19.23 10.59 20 10.76V9.24C19.21 9.09 18.36 9 17.5 9C15.8 9 14.26 9.29 13 9.83V11.49C14.13 10.85 15.7 10.5 17.5 10.5ZM13 12.49V14.15C14.13 13.51 15.7 13.16 17.5 13.16C18.38 13.16 19.23 13.25 20 13.42V11.9C19.21 11.75 18.36 11.66 17.5 11.66C15.8 11.66 14.26 11.96 13 12.49ZM17.5 14.33C15.8 14.33 14.26 14.62 13 15.16V16.82C14.13 16.18 15.7 15.83 17.5 15.83C18.38 15.83 19.23 15.92 20 16.09V14.57C19.21 14.41 18.36 14.33 17.5 14.33Z"}),Nt("path",{d:"M6.5 10.5C5.62 10.5 4.77 10.59 4 10.76V9.24C4.79 9.09 5.64 9 6.5 9C8.2 9 9.74 9.29 11 9.83V11.49C9.87 10.85 8.3 10.5 6.5 10.5ZM11 12.49V14.15C9.87 13.51 8.3 13.16 6.5 13.16C5.62 13.16 4.77 13.25 4 13.42V11.9C4.79 11.75 5.64 11.66 6.5 11.66C8.2 11.66 9.74 11.96 11 12.49ZM6.5 14.33C8.2 14.33 9.74 14.62 11 15.16V16.82C9.87 16.18 8.3 15.83 6.5 15.83C5.62 15.83 4.77 15.92 4 16.09V14.57C4.79 14.41 5.64 14.33 6.5 14.33Z"})]}),lr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3z"})}),sr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 6C9.79 6 8 7.79 8 10H10C10 8.9 10.9 8 12 8C13.1 8 14 8.9 14 10C14 10.8792 13.4202 11.3236 12.7704 11.8217C11.9421 12.4566 11 13.1787 11 15H13C13 13.9046 13.711 13.2833 14.4408 12.6455C15.21 11.9733 16 11.2829 16 10C16 7.79 14.21 6 12 6ZM13 16V18H11V16H13Z"})}),cr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M4 20h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2zM2 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2zm4 1H4V5h2v2zm-2 7h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2z"})}),ur=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})}),dr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"})}),hr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M7 20h4c0 1.1-.9 2-2 2s-2-.9-2-2zm-2-1h8v-2H5v2zm11.5-9.5c0 3.82-2.66 5.86-3.77 6.5H5.27c-1.11-.64-3.77-2.68-3.77-6.5C1.5 5.36 4.86 2 9 2s7.5 3.36 7.5 7.5zm4.87-2.13L20 8l1.37.63L22 10l.63-1.37L24 8l-1.37-.63L22 6l-.63 1.37zM19 6l.94-2.06L22 3l-2.06-.94L19 0l-.94 2.06L16 3l2.06.94L19 6z"})}),mr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M3 14h4v-4H3v4zm0 5h4v-4H3v4zM3 9h4V5H3v4zm5 5h13v-4H8v4zm0 5h13v-4H8v4zM8 5v4h13V5H8z"})}),pr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"})}),fr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"})}),vr=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-error"),children:Nt("path",{d:"M13.5095 4L8.50952 1H7.50952L2.50952 4L2.01953 4.85999V10.86L2.50952 11.71L7.50952 14.71H8.50952L13.5095 11.71L13.9995 10.86V4.85999L13.5095 4ZM7.50952 13.5601L3.00952 10.86V5.69995L7.50952 8.15002V13.5601ZM3.26953 4.69995L8.00952 1.85999L12.7495 4.69995L8.00952 7.29004L3.26953 4.69995ZM13.0095 10.86L8.50952 13.5601V8.15002L13.0095 5.69995V10.86Z"})}),gr=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-primary"),children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2 5H4V4H1.5L1 4.5V12.5L1.5 13H4V12H2V5ZM14.5 4H12V5H14V12H12V13H14.5L15 12.5V4.5L14.5 4ZM11.76 6.56995L12 7V9.51001L11.7 9.95996L7.19995 11.96H6.73999L4.23999 10.46L4 10.03V7.53003L4.30005 7.06995L8.80005 5.06995H9.26001L11.76 6.56995ZM5 9.70996L6.5 10.61V9.28003L5 8.38V9.70996ZM5.57996 7.56006L7.03003 8.43005L10.42 6.93005L8.96997 6.06006L5.57996 7.56006ZM7.53003 10.73L11.03 9.17004V7.77002L7.53003 9.31995V10.73Z"})}),yr=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-warning"),children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 2H8L7 3V6H8V3H14V8H10V9H14L15 8V3L14 2ZM9 6H13V7H9.41L9 6.59V6ZM7 7H2L1 8V13L2 14H8L9 13V8L8 7H7ZM8 13H2V8H8V9V13ZM3 9H7V10H3V9ZM3 11H7V12H3V11ZM9 4H13V5H9V4Z"})}),_r=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-primary"),children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7 3L8 2H14L15 3V8L14 9H10V8H14V3H8V6H7V3ZM9 9V8L8 7H7H2L1 8V13L2 14H8L9 13V9ZM8 8V9V13H2V8H7H8ZM9.41421 7L9 6.58579V6H13V7H9.41421ZM9 4H13V5H9V4ZM7 10H3V11H7V10Z"})}),br=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})}),wr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 5.83 15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15z"})}),kr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M7.41 18.59 8.83 20 12 16.83 15.17 20l1.41-1.41L12 14zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10z"})}),xr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"})});var Sr=n(738),Cr=n.n(Sr);const Er=e=>{let{to:t,isNavLink:n,children:r,...a}=e;return n?Nt(De,{to:t,...a,children:r}):Nt("div",{...a,children:r})},Nr=e=>{let{activeItem:t,item:n,color:r=gt("color-primary"),activeNavRef:a,onChange:o,isNavLink:i}=e;return Nt(Er,{className:Cr()({"vm-tabs-item":!0,"vm-tabs-item_active":t===n.value,[n.className||""]:n.className}),isNavLink:i,to:n.value,style:{color:r},onClick:(l=n.value,()=>{o&&o(l)}),ref:t===n.value?a:void 0,children:[n.icon&&Nt("div",{className:Cr()({"vm-tabs-item__icon":!0,"vm-tabs-item__icon_single":!n.label}),children:n.icon}),n.label]});var l};const Ar=function(e,t,n,a){const o=(0,r.useRef)(t);(0,r.useEffect)((()=>{o.current=t}),[t]),(0,r.useEffect)((()=>{var t;const r=null!==(t=null===n||void 0===n?void 0:n.current)&&void 0!==t?t:window;if(!r||!r.addEventListener)return;const i=e=>o.current(e);return r.addEventListener(e,i,a),()=>{r.removeEventListener(e,i,a)}}),[e,n,a])},Mr=()=>{const[e,t]=(0,r.useState)({width:0,height:0}),n=()=>{t({width:window.innerWidth,height:window.innerHeight})};return Ar("resize",n),(0,r.useEffect)(n,[]),e},Tr=e=>{let{activeItem:t,items:n,color:a=gt("color-primary"),onChange:o,indicatorPlacement:i="bottom",isNavLink:l}=e;const s=Mr(),c=(0,r.useRef)(null),[u,d]=(0,r.useState)({left:0,width:0,bottom:0});return(0,r.useEffect)((()=>{var e;if((null===(e=c.current)||void 0===e?void 0:e.base)instanceof HTMLElement){const{offsetLeft:e,offsetWidth:t,offsetHeight:n}=c.current.base;d({left:e,width:t,bottom:"top"===i?n-2:0})}}),[s,t,c,n]),Nt("div",{className:"vm-tabs",children:[n.map((e=>Nt(Nr,{activeItem:t,item:e,onChange:o,color:a,activeNavRef:c,isNavLink:l},e.value))),Nt("div",{className:"vm-tabs__indicator",style:{...u,borderColor:a}})]})},Lr=[{value:mt.chart,icon:Nt(Wn,{}),label:"Graph",prometheusCode:0},{value:mt.code,icon:Nt(Qn,{}),label:"JSON",prometheusCode:3},{value:mt.table,icon:Nt(Kn,{}),label:"Table",prometheusCode:1}],Ir=()=>{const{displayType:e}=Fr(),t=jr();return Nt(Tr,{activeItem:e,items:Lr,onChange:n=>{var r;t({type:"SET_DISPLAY_TYPE",payload:null!==(r=n)&&void 0!==r?r:e})}})},Pr=()=>{const e=ut("g0.tab",0),t=Lr.find((t=>t.prometheusCode===+e||t.value===e));return(null===t||void 0===t?void 0:t.value)||mt.chart},Or=et("SERIES_LIMITS"),Rr={displayType:Pr(),nocache:!1,isTracingEnabled:!1,seriesLimits:Or?JSON.parse(Or):lt,tableCompact:et("TABLE_COMPACT")||!1};function Dr(e,t){switch(t.type){case"SET_DISPLAY_TYPE":return{...e,displayType:t.payload};case"SET_SERIES_LIMITS":return Xe("SERIES_LIMITS",JSON.stringify(t.payload)),{...e,seriesLimits:t.payload};case"TOGGLE_QUERY_TRACING":return{...e,isTracingEnabled:!e.isTracingEnabled};case"TOGGLE_NO_CACHE":return{...e,nocache:!e.nocache};case"TOGGLE_TABLE_COMPACT":return Xe("TABLE_COMPACT",!e.tableCompact),{...e,tableCompact:!e.tableCompact};default:throw new Error}}const zr=(0,r.createContext)({}),Fr=()=>(0,r.useContext)(zr).state,jr=()=>(0,r.useContext)(zr).dispatch,Hr={customStep:ut("g0.step_input",""),yaxis:{limits:{enable:!1,range:{1:[0,0]}}},isHistogram:!1,spanGaps:!1};function Vr(e,t){switch(t.type){case"TOGGLE_ENABLE_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,enable:!e.yaxis.limits.enable}}};case"SET_CUSTOM_STEP":return{...e,customStep:t.payload};case"SET_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,range:t.payload}}};case"SET_IS_HISTOGRAM":return{...e,isHistogram:t.payload};case"SET_SPAN_GAPS":return{...e,spanGaps:t.payload};default:throw new Error}}const $r=(0,r.createContext)({}),Ur=()=>(0,r.useContext)($r).state,Br=()=>(0,r.useContext)($r).dispatch,qr={dashboardsSettings:[],dashboardsLoading:!1,dashboardsError:""};function Yr(e,t){switch(t.type){case"SET_DASHBOARDS_SETTINGS":return{...e,dashboardsSettings:t.payload};case"SET_DASHBOARDS_LOADING":return{...e,dashboardsLoading:t.payload};case"SET_DASHBOARDS_ERROR":return{...e,dashboardsError:t.payload};default:throw new Error}}const Wr=(0,r.createContext)({}),Kr=()=>(0,r.useContext)(Wr).state,Qr={markdownParsing:"true"===et("LOGS_MARKDOWN")};function Zr(e,t){if("SET_MARKDOWN_PARSING"===t.type)return Xe("LOGS_MARKDOWN","".concat(t.payload)),{...e,markdownParsing:t.payload};throw new Error}const Gr=(0,r.createContext)({}),Jr={windows:"Windows",mac:"Mac OS",linux:"Linux"},Xr=()=>(Object.values(Jr).find((e=>navigator.userAgent.indexOf(e)>=0))||"unknown")===Jr.mac;function ea(){const e=Mr(),t=()=>{const e=["Android","webOS","iPhone","iPad","iPod","BlackBerry","Windows Phone"].map((e=>navigator.userAgent.match(new RegExp(e,"i")))).some((e=>e)),t=window.innerWidth<500;return e||t},[n,a]=(0,r.useState)(t());return(0,r.useEffect)((()=>{a(t())}),[e]),{isMobile:n}}const ta={success:Nt(zn,{}),error:Nt(Dn,{}),warning:Nt(Rn,{}),info:Nt(On,{})},na=e=>{let{variant:t,children:n}=e;const{isDarkTheme:r}=Mt(),{isMobile:a}=ea();return Nt("div",{className:Cr()({"vm-alert":!0,["vm-alert_".concat(t)]:t,"vm-alert_dark":r,"vm-alert_mobile":a}),children:[Nt("div",{className:"vm-alert__icon",children:ta[t||"info"]}),Nt("div",{className:"vm-alert__content",children:n})]})},ra=(0,r.createContext)({showInfoMessage:()=>{}}),aa=function(){for(var e=arguments.length,t=new Array(e),n=0;nn=>{let{children:r}=n;return Nt(e,{children:Nt(t,{children:r})})}),(e=>{let{children:t}=e;return Nt(Ct.FK,{children:t})}))}(...[e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(St,Lt),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(At.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(mn,hn),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(pn.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(xn,kn),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(Sn.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Dr,Rr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(zr.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Vr,Hr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt($r.Provider,{value:o,children:t})},e=>{let{children:t}=e;const{isMobile:n}=ea(),[a,o]=(0,r.useState)({}),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)(void 0);(0,r.useEffect)((()=>{if(!s)return;o({message:s.text,variant:s.type,key:Date.now()}),l(!0);const e=setTimeout(u,4e3);return()=>clearTimeout(e)}),[s]);const u=()=>{c(void 0),l(!1)};return Nt(ra.Provider,{value:{showInfoMessage:c},children:[i&&Nt("div",{className:Cr()({"vm-snackbar":!0,"vm-snackbar_mobile":n}),children:Nt(na,{variant:a.variant,children:Nt("div",{className:"vm-snackbar-content",children:[Nt("span",{children:a.message}),Nt("div",{className:"vm-snackbar-content__close",onClick:u,children:Nt(In,{})})]})})}),t]})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Yr,qr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(Wr.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Zr,Qr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(Gr.Provider,{value:o,children:t})}]),oa=e=>{let{activeMenu:t,label:n,value:r,color:a}=e;return Nt(De,{className:Cr()({"vm-header-nav-item":!0,"vm-header-nav-item_active":t===r}),style:{color:a},to:r,children:n})},ia=(e,t,n)=>{const a=(0,r.useCallback)((r=>{const a=null===e||void 0===e?void 0:e.current,o=r.target,i=(null===n||void 0===n?void 0:n.current)&&n.current.contains(o);!a||a.contains((null===r||void 0===r?void 0:r.target)||null)||i||t(r)}),[e,t]);Ar("mousedown",a),Ar("touchstart",a)},la=e=>{let{variant:t="contained",color:n="primary",size:r="medium",ariaLabel:a,children:o,endIcon:i,startIcon:l,fullWidth:s=!1,className:c,disabled:u,onClick:d,onMouseDown:h}=e;return Nt("button",{className:Cr()({"vm-button":!0,["vm-button_".concat(t,"_").concat(n)]:!0,["vm-button_".concat(r)]:r,"vm-button_icon":(l||i)&&!o,"vm-button_full-width":s,"vm-button_with-icon":l||i,"vm-button_disabled":u,[c||""]:c}),disabled:u,"aria-label":a,onClick:d,onMouseDown:h,children:Nt(Ct.FK,{children:[l&&Nt("span",{className:"vm-button__start-icon",children:l}),o&&Nt("span",{children:o}),i&&Nt("span",{className:"vm-button__end-icon",children:i})]})})},sa=e=>{let{children:t,buttonRef:n,placement:a="bottom-left",open:o=!1,onClose:i,offset:l={top:6,left:0},clickOutside:s=!0,fullWidth:c,title:u,disabledFullScreen:d,variant:h}=e;const{isMobile:m}=ea(),p=oe(),f=re(),[v,g]=(0,r.useState)({width:0,height:0}),[y,_]=(0,r.useState)(!1),b=(0,r.useRef)(null);(0,r.useEffect)((()=>(_(o),!o&&i&&i(),o&&m&&!d&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="auto"})),[o]),(0,r.useEffect)((()=>{var e,t;g({width:(null===b||void 0===b||null===(e=b.current)||void 0===e?void 0:e.clientWidth)||0,height:(null===b||void 0===b||null===(t=b.current)||void 0===t?void 0:t.clientHeight)||0}),_(!1)}),[b]);const w=(0,r.useMemo)((()=>{const e=n.current;if(!e||!y)return{};const t=e.getBoundingClientRect(),r={top:0,left:0,width:"auto"},o="bottom-right"===a||"top-right"===a,i=null===a||void 0===a?void 0:a.includes("top"),s=(null===l||void 0===l?void 0:l.top)||0,u=(null===l||void 0===l?void 0:l.left)||0;r.left=r.left=t.left+u,r.top=t.height+t.top+s,o&&(r.left=t.right-v.width),i&&(r.top=t.top-v.height-s);const{innerWidth:d,innerHeight:h}=window,m=r.top+v.height+20>h,p=r.top-20<0,f=r.left+v.width+20>d,g=r.left-20<0;return m&&(r.top=t.top-v.height-s),p&&(r.top=t.height+t.top+s),f&&(r.left=t.right-v.width-u),g&&(r.left=t.left+u),c&&(r.width="".concat(t.width,"px")),r.top<0&&(r.top=20),r.left<0&&(r.left=20),r}),[n,a,y,t,c]),k=()=>{_(!1),i()};(0,r.useEffect)((()=>{if(!b.current||!y||m&&!d)return;const{right:e,width:t}=b.current.getBoundingClientRect();if(e>window.innerWidth){const e=window.innerWidth-20-t;b.current.style.left=e{y&&m&&!d&&(p(f,{replace:!0}),i())}),[y,m,d,f,i]);return Ar("scroll",k),Ar("popstate",x),ia(b,(()=>{s&&k()}),n),Nt(Ct.FK,{children:(y||!v.width)&&r.default.createPortal(Nt("div",{className:Cr()({"vm-popper":!0,["vm-popper_".concat(h)]:h,"vm-popper_mobile":m&&!d,"vm-popper_open":(m||Object.keys(w).length)&&y}),ref:b,style:m&&!d?{}:w,children:[(u||m&&!d)&&Nt("div",{className:"vm-popper-header",children:[Nt("p",{className:"vm-popper-header__title",children:u}),Nt(la,{variant:"text",color:"dark"===h?"white":"primary",size:"small",onClick:e=>{e.stopPropagation(),i()},ariaLabel:"close",children:Nt(In,{})})]}),t]}),document.body)})},ca=e=>{const[t,n]=(0,r.useState)(!!e),a=(0,r.useCallback)((()=>n(!0)),[]),o=(0,r.useCallback)((()=>n(!1)),[]),i=(0,r.useCallback)((()=>n((e=>!e))),[]);return{value:t,setValue:n,setTrue:a,setFalse:o,toggle:i}},ua=e=>{let{activeMenu:t,label:n,color:a,background:o,submenu:i,direction:l}=e;const{pathname:s}=re(),[c,u]=(0,r.useState)(null),d=(0,r.useRef)(null),{value:h,setFalse:m,setTrue:p}=ca(!1),f=()=>{c&&clearTimeout(c);const e=setTimeout(m,300);u(e)};return(0,r.useEffect)((()=>{m()}),[s]),"column"===l?Nt(Ct.FK,{children:i.map((e=>Nt(oa,{activeMenu:t,value:e.value||"",label:e.label||""},e.value)))}):Nt("div",{className:Cr()({"vm-header-nav-item":!0,"vm-header-nav-item_sub":!0,"vm-header-nav-item_open":h,"vm-header-nav-item_active":i.find((e=>e.value===t))}),style:{color:a},onMouseEnter:()=>{p(),c&&clearTimeout(c)},onMouseLeave:f,ref:d,children:[n,Nt(Hn,{}),Nt(sa,{open:h,placement:"bottom-left",offset:{top:12,left:0},onClose:m,buttonRef:d,children:Nt("div",{className:"vm-header-nav-item-submenu",style:{background:o},onMouseLeave:f,onMouseEnter:()=>{c&&clearTimeout(c)},children:i.map((e=>Nt(oa,{activeMenu:t,value:e.value||"",label:e.label||"",color:a},e.value)))})})]})},da={label:"Explore",submenu:[{label:Ye[We.metrics].title,value:We.metrics},{label:Ye[We.cardinality].title,value:We.cardinality},{label:Ye[We.topQueries].title,value:We.topQueries},{label:Ye[We.activeQueries].title,value:We.activeQueries}]},ha={label:"Tools",submenu:[{label:Ye[We.trace].title,value:We.trace},{label:Ye[We.queryAnalyzer].title,value:We.queryAnalyzer},{label:Ye[We.withTemplate].title,value:We.withTemplate},{label:Ye[We.relabel].title,value:We.relabel}]},ma=[{label:Ye[We.logs].title,value:We.home}],pa=[{label:Ye[We.anomaly].title,value:We.home}],fa=[{label:Ye[We.home].title,value:We.home},da,ha],va=e=>{let{color:t,background:n,direction:a}=e;const o=Qe(),{dashboardsSettings:i}=Kr(),{pathname:l}=re(),[s,c]=(0,r.useState)(l),u=(0,r.useMemo)((()=>{switch({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE){case Ve.logs:return ma;case Ve.anomaly:return pa;default:return[...fa,{label:Ye[We.dashboards].title,value:We.dashboards,hide:o||!i.length}].filter((e=>!e.hide))}}),[o,i]);return(0,r.useEffect)((()=>{c(l)}),[l]),Nt("nav",{className:Cr()({"vm-header-nav":!0,["vm-header-nav_".concat(a)]:a}),children:u.map((e=>e.submenu?Nt(ua,{activeMenu:s,label:e.label||"",submenu:e.submenu,color:t,background:n,direction:a},e.label):Nt(oa,{activeMenu:s,value:e.value||"",label:e.label||"",color:t},e.value)))})},ga=e=>{let{title:t,children:n,onClose:a,className:o,isOpen:i=!0}=e;const{isMobile:l}=ea(),s=oe(),c=re(),u=(0,r.useCallback)((e=>{i&&"Escape"===e.key&&a()}),[i]),d=e=>{e.stopPropagation()},h=(0,r.useCallback)((()=>{i&&(s(c,{replace:!0}),a())}),[i,c,a]);return(0,r.useEffect)((()=>{if(i)return document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}}),[i]),Ar("popstate",h),Ar("keyup",u),r.default.createPortal(Nt("div",{className:Cr()({"vm-modal":!0,"vm-modal_mobile":l,["".concat(o)]:o}),onMouseDown:a,children:Nt("div",{className:"vm-modal-content",children:[Nt("div",{className:"vm-modal-content-header",onMouseDown:d,children:[t&&Nt("div",{className:"vm-modal-content-header__title",children:t}),Nt("div",{className:"vm-modal-header__close",children:Nt(la,{variant:"text",size:"small",onClick:a,ariaLabel:"close",children:Nt(In,{})})})]}),Nt("div",{className:"vm-modal-content-body",onMouseDown:d,tabIndex:0,children:n})]})}),document.body)},ya=e=>{let{children:t,title:n,open:a,placement:o="bottom-center",offset:i={top:6,left:0}}=e;const{isMobile:l}=ea(),[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)({width:0,height:0}),h=(0,r.useRef)(null),m=(0,r.useRef)(null),p=()=>c(!1);(0,r.useEffect)((()=>{if(m.current&&s)return d({width:m.current.clientWidth,height:m.current.clientHeight}),window.addEventListener("scroll",p),()=>{window.removeEventListener("scroll",p)}}),[s,n]);const f=(0,r.useMemo)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(!t||!s)return{};const n=t.getBoundingClientRect(),r={top:0,left:0},a="bottom-right"===o||"top-right"===o,l="bottom-left"===o||"top-left"===o,c=null===o||void 0===o?void 0:o.includes("top"),d=(null===i||void 0===i?void 0:i.top)||0,m=(null===i||void 0===i?void 0:i.left)||0;r.left=n.left-(u.width-n.width)/2+m,r.top=n.height+n.top+d,a&&(r.left=n.right-u.width),l&&(r.left=n.left+m),c&&(r.top=n.top-u.height-d);const{innerWidth:p,innerHeight:f}=window,v=r.top+u.height+20>f,g=r.top-20<0,y=r.left+u.width+20>p,_=r.left-20<0;return v&&(r.top=n.top-u.height-d),g&&(r.top=n.height+n.top+d),y&&(r.left=n.right-u.width-m),_&&(r.left=n.left+m),r.top<0&&(r.top=20),r.left<0&&(r.left=20),r}),[h,o,s,u]),v=()=>{"boolean"!==typeof a&&c(!0)},g=()=>{c(!1)};return(0,r.useEffect)((()=>{"boolean"===typeof a&&c(a)}),[a]),(0,r.useEffect)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(t)return t.addEventListener("mouseenter",v),t.addEventListener("mouseleave",g),()=>{t.removeEventListener("mouseenter",v),t.removeEventListener("mouseleave",g)}}),[h]),Nt(Ct.FK,{children:[Nt(r.Fragment,{ref:h,children:t}),!l&&s&&r.default.createPortal(Nt("div",{className:"vm-tooltip",ref:m,style:f,children:n}),document.body)]})},_a=Nt("code",{children:Xr()?"Cmd":"Ctrl"}),ba=[{title:"Zoom in",description:Nt(Ct.FK,{children:["To zoom in, hold down the ",_a," + ",Nt("code",{children:"scroll up"}),", or press the ",Nt("code",{children:"+"}),". Also, you can zoom in on a range on the graph by holding down your mouse button and selecting the range."]})},{title:"Zoom out",description:Nt(Ct.FK,{children:["To zoom out, hold down the ",_a," + ",Nt("code",{children:"scroll down"}),", or press the ",Nt("code",{children:"-"}),"."]})},{title:"Move horizontal axis",description:Nt(Ct.FK,{children:["To move the graph, hold down the ",_a," + ",Nt("code",{children:"drag"})," the graph to the right or left."]})},{title:"Fixing a tooltip",description:Nt(Ct.FK,{children:["To fix the tooltip, ",Nt("code",{children:"click"})," mouse when it's open. Then, you can drag the fixed tooltip by ",Nt("code",{children:"clicking"})," and ",Nt("code",{children:"dragging"})," on the ",Nt(ar,{})," icon."]})},{title:"Set a custom range for the vertical axis",description:Nt(Ct.FK,{children:["To set a custom range for the vertical axis, click on the ",Nt(Ln,{})," icon located in the upper right corner of the graph, activate the toggle, and set the values."]})}],wa=[{title:"Show/hide a legend item",description:Nt(Ct.FK,{children:[Nt("code",{children:"click"})," on a legend item to isolate it on the graph.",_a," + ",Nt("code",{children:"click"})," on a legend item to remove it from the graph. To revert to the previous state, click again."]})},{title:"Copy label key-value pairs",description:Nt(Ct.FK,{children:[Nt("code",{children:"click"})," on a label key-value pair to save it to the clipboard."]})},{title:"Collapse/Expand the legend group",description:Nt(Ct.FK,{children:[Nt("code",{children:"click"})," on the group name (e.g. ",Nt("b",{children:'Query 1: {__name__!=""}'}),") to collapse or expand the legend."]})}],ka=ba.concat(wa),xa=()=>{const{value:e,setFalse:t,setTrue:n}=ca(!1);return Nt(Ct.FK,{children:[Nt(ya,{title:"Show tips on working with the graph",children:Nt(la,{variant:"text",color:"gray",startIcon:Nt(hr,{}),onClick:n,ariaLabel:"open the tips"})}),e&&Nt(ga,{title:"Tips on working with the graph and the legend",onClose:t,children:Nt("div",{className:"fc-graph-tips",children:ka.map((e=>{let{title:t,description:n}=e;return Nt("div",{className:"fc-graph-tips-item",children:[Nt("h4",{className:"fc-graph-tips-item__action",children:t}),Nt("p",{className:"fc-graph-tips-item__description",children:n})]},t)}))})})]})},Sa=Nt("code",{children:Xr()?"Cmd":"Ctrl"}),Ca=Nt(Ct.FK,{children:[Nt("code",{children:Xr()?"Option":"Ctrl"})," + ",Nt("code",{children:"Space"})]}),Ea=[{title:"Query",list:[{keys:Nt("code",{children:"Enter"}),description:"Run"},{keys:Nt(Ct.FK,{children:[Nt("code",{children:"Shift"})," + ",Nt("code",{children:"Enter"})]}),description:"Multi-line queries"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"Arrow Up"})]}),description:"Previous command from the Query history"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"Arrow Down"})]}),description:"Next command from the Query history"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"click"})," by ",Nt(er,{})]}),description:"Toggle multiple queries"},{keys:Ca,description:"Show quick autocomplete tips"}]},{title:"Graph",readMore:Nt(xa,{}),list:[{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"scroll Up"})," or ",Nt("code",{children:"+"})]}),description:"Zoom in"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"scroll Down"})," or ",Nt("code",{children:"-"})]}),description:"Zoom out"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"drag"})]}),description:"Move the graph left/right"},{keys:Nt(Ct.FK,{children:Nt("code",{children:"click"})}),description:"Select the series in the legend"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"click"})]}),description:"Toggle multiple series in the legend"}]}],Na="Shortcut keys",Aa=Xr(),Ma=Aa?"Cmd + /":"F1",Ta=e=>{let{showTitle:t}=e;const n=Qe(),{value:a,setTrue:o,setFalse:i}=ca(!1),l=(0,r.useCallback)((e=>{const t=Aa&&"/"===e.key&&e.metaKey,n=!Aa&&"F1"===e.key&&!e.metaKey;(t||n)&&o()}),[o]);return Ar("keydown",l),Nt(Ct.FK,{children:[Nt(ya,{open:!0!==t&&void 0,title:"".concat(Na," (").concat(Ma,")"),placement:"bottom-center",children:Nt(la,{className:n?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt(Bn,{}),onClick:o,ariaLabel:Na,children:t&&Na})}),a&&Nt(ga,{title:"Shortcut keys",onClose:i,children:Nt("div",{className:"vm-shortcuts",children:Ea.map((e=>Nt("div",{className:"vm-shortcuts-section",children:[e.readMore&&Nt("div",{className:"vm-shortcuts-section__read-more",children:e.readMore}),Nt("h3",{className:"vm-shortcuts-section__title",children:e.title}),Nt("div",{className:"vm-shortcuts-section-list",children:e.list.map(((t,n)=>Nt("div",{className:"vm-shortcuts-section-list-item",children:[Nt("div",{className:"vm-shortcuts-section-list-item__key",children:t.keys}),Nt("p",{className:"vm-shortcuts-section-list-item__description",children:t.description})]},"".concat(e.title,"_").concat(n))))})]},e.title)))})})]})},La=e=>{let{open:t}=e;return Nt("button",{className:Cr()({"vm-menu-burger":!0,"vm-menu-burger_opened":t}),"aria-label":"menu",children:Nt("span",{})})},{REACT_APP_TYPE:Ia}={},Pa=Ia===Ve.logs,Oa=e=>{let{background:t,color:n}=e;const{pathname:a}=re(),{isMobile:o}=ea(),i=(0,r.useRef)(null),{value:l,toggle:s,setFalse:c}=ca(!1);return(0,r.useEffect)(c,[a]),ia(i,c),Nt("div",{className:"vm-header-sidebar",ref:i,children:[Nt("div",{className:Cr()({"vm-header-sidebar-button":!0,"vm-header-sidebar-button_open":l}),onClick:s,children:Nt(La,{open:l})}),Nt("div",{className:Cr()({"vm-header-sidebar-menu":!0,"vm-header-sidebar-menu_open":l}),children:[Nt("div",{children:Nt(va,{color:n,background:t,direction:"column"})}),Nt("div",{className:"vm-header-sidebar-menu-settings",children:!o&&!Pa&&Nt(Ta,{showTitle:!0})})]})]})},Ra=e=>{let{controlsComponent:t,isMobile:n,...a}=e;const o=Qe(),{pathname:i}=re(),{accountIds:l}=(()=>{const{useTenantID:e}=Ke(),t=Qe(),{serverUrl:n}=Mt(),[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(),[s,c]=(0,r.useState)([]),u=(0,r.useMemo)((()=>"".concat(n.replace(/^(.+)(\/select.+)/,"$1"),"/admin/tenants")),[n]),d=(0,r.useMemo)((()=>!!Je(n)),[n]),h=t?!e:!d;return(0,r.useEffect)((()=>{h||(async()=>{o(!0);try{const e=await fetch(u),t=await e.json(),n=t.data||[];c(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?l(void 0):l("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Fp){Fp instanceof Error&&l("".concat(Fp.name,": ").concat(Fp.message))}o(!1)})().catch(console.error)}),[u]),{accountIds:s,isLoading:a,error:i}})(),{value:s,toggle:c,setFalse:u}=ca(!1),d=Nt(t,{...a,isMobile:n,accountIds:l,headerSetup:(0,r.useMemo)((()=>(Ye[i]||{}).header||{}),[i])});return n?Nt(Ct.FK,{children:[Nt("div",{children:Nt(la,{className:Cr()({"vm-header-button":!o}),startIcon:Nt(ur,{}),onClick:c,ariaLabel:"controls"})}),Nt(ga,{title:"Controls",onClose:u,isOpen:s,className:Cr()({"vm-header-controls-modal":!0,"vm-header-controls-modal_open":s}),children:d})]}):d},{REACT_APP_TYPE:Da}={},za=Da===Ve.logs||Da===Ve.anomaly,Fa=()=>{switch(Da){case Ve.logs:return Nt(An,{});case Ve.anomaly:return Nt(Mn,{});default:return Nt(Nn,{})}},ja=e=>{let{controlsComponent:t}=e;const{isMobile:n}=ea(),a=Mr(),o=(0,r.useMemo)((()=>window.innerWidth<1e3),[a]),{isDarkTheme:i}=Mt(),l=Qe(),s=(0,r.useMemo)((()=>gt(i?"color-background-block":"color-primary")),[i]),{background:c,color:u}=(0,r.useMemo)((()=>{const{headerStyles:{background:e=(l?"#FFF":s),color:t=(l?s:"#FFF")}={}}=Ke();return{background:e,color:t}}),[s]),d=oe(),h=()=>{d({pathname:We.home}),window.location.reload()};return Nt("header",{className:Cr()({"vm-header":!0,"vm-header_app":l,"vm-header_dark":i,"vm-header_sidebar":o,"vm-header_mobile":n}),style:{background:c,color:u},children:[o?Nt(Oa,{background:c,color:u}):Nt(Ct.FK,{children:[!l&&Nt("div",{className:Cr()({"vm-header-logo":!0,"vm-header-logo_logs":za}),onClick:h,style:{color:u},children:Nt(Fa,{})}),Nt(va,{color:u,background:c})]}),o&&Nt("div",{className:Cr()({"vm-header-logo":!0,"vm-header-logo_mobile":!0,"vm-header-logo_logs":za}),onClick:h,style:{color:u},children:Nt(Fa,{})}),Nt(Ra,{controlsComponent:t,displaySidebar:o,isMobile:n})]})},Ha={href:"https://github.com/VictoriaMetrics/VictoriaMetrics/issues/new/choose",Icon:lr,title:"Create an issue"},Va=[{href:"https://docs.victoriametrics.com/MetricsQL.html",Icon:Qn,title:"MetricsQL"},{href:"https://docs.victoriametrics.com/#vmui",Icon:ir,title:"Documentation"},Ha],$a=(0,r.memo)((e=>{let{links:t=Va}=e;const n="2019-".concat((new Date).getFullYear());return Nt("footer",{className:"vm-footer",children:[Nt("a",{className:"vm-link vm-footer__website",target:"_blank",href:"https://victoriametrics.com/",rel:"me noreferrer",children:[Nt(Tn,{}),"victoriametrics.com"]}),t.map((e=>{let{href:t,Icon:n,title:r}=e;return Nt("a",{className:"vm-link vm-footer__link",target:"_blank",href:t,rel:"help noreferrer",children:[Nt(n,{}),r]},"".concat(t,"-").concat(r))})),Nt("div",{className:"vm-footer__copyright",children:["\xa9 ",n," VictoriaMetrics"]})]})})),Ua=$a,Ba=()=>{const e=Qe(),{serverUrl:t}=Mt(),n=(0,r.useContext)(Wr).dispatch,[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(""),[s,c]=(0,r.useState)([]),u=async()=>{try{const e=window.__VMUI_PREDEFINED_DASHBOARDS__;if(null===e||void 0===e||!e.length)return[];const t=await Promise.all(e.map((async e=>(async e=>{const t=await fetch("./dashboards/".concat(e));return await t.json()})(e))));c((e=>[...t,...e]))}catch(Fp){Fp instanceof Error&&l("".concat(Fp.name,": ").concat(Fp.message))}};return(0,r.useEffect)((()=>{e||(c([]),(async()=>{if(t&&!{NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE){l(""),o(!0);try{const e=await fetch("".concat(t,"/vmui/custom-dashboards")),n=await e.json();if(e.ok){const{dashboardsSettings:e}=n;e&&e.length>0?c((t=>[...t,...e])):await u(),o(!1)}else await u(),l(n.error),o(!1)}catch(Fp){o(!1),Fp instanceof Error&&l("".concat(Fp.name,": ").concat(Fp.message)),await u()}}})())}),[t]),(0,r.useEffect)((()=>{n({type:"SET_DASHBOARDS_SETTINGS",payload:s})}),[s]),(0,r.useEffect)((()=>{n({type:"SET_DASHBOARDS_LOADING",payload:a})}),[a]),(0,r.useEffect)((()=>{n({type:"SET_DASHBOARDS_ERROR",payload:i})}),[i]),{dashboardsSettings:s,isLoading:a,error:i}},qa=e=>{let{error:t,warning:n,info:a}=e;const o=(0,r.useRef)(null),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)(!1),u=(0,r.useMemo)((()=>t?"ERROR: ":n?"WARNING: ":""),[t,n]),d="".concat(u).concat(t||n||a),h=()=>{const e=o.current;if(e){const{offsetWidth:t,scrollWidth:n,offsetHeight:r,scrollHeight:a}=e;l(t+1{c(!1),h()}),[o,d]),Ar("resize",h),t||n||a?Nt("span",{className:Cr()({"vm-text-field__error":!0,"vm-text-field__warning":n&&!t,"vm-text-field__helper-text":!n&&!t,"vm-text-field__error_overflowed":i,"vm-text-field__error_full":s}),"data-show":!!d,ref:o,onClick:()=>{i&&(c(!0),l(!1))},children:d}):null},Ya=e=>{let{label:t,value:n,type:a="text",error:o="",warning:i="",helperText:l="",placeholder:s,endIcon:c,startIcon:u,disabled:d=!1,autofocus:h=!1,inputmode:m="text",caretPosition:p,onChange:f,onEnter:v,onKeyDown:g,onFocus:y,onBlur:_,onChangeCaret:b}=e;const{isDarkTheme:w}=Mt(),{isMobile:k}=ea(),x=(0,r.useRef)(null),S=(0,r.useRef)(null),C=(0,r.useMemo)((()=>"textarea"===a?S:x),[a]),[E,N]=(0,r.useState)([0,0]),A=Cr()({"vm-text-field__input":!0,"vm-text-field__input_error":o,"vm-text-field__input_warning":!o&&i,"vm-text-field__input_icon-start":u,"vm-text-field__input_disabled":d,"vm-text-field__input_textarea":"textarea"===a}),M=e=>{const{selectionStart:t,selectionEnd:n}=e;N([t||0,n||0])},T=e=>{M(e.currentTarget)},L=e=>{g&&g(e);const{key:t,ctrlKey:n,metaKey:r}=e,o="Enter"===t;("textarea"!==a?o:o&&(r||n))&&v&&(e.preventDefault(),v())},I=e=>{M(e.currentTarget)},P=e=>{d||(f&&f(e.currentTarget.value),M(e.currentTarget))},O=()=>{y&&y()},R=()=>{_&&_()},D=e=>{try{C.current&&C.current.setSelectionRange(e[0],e[1])}catch(Fp){return Fp}};return(0,r.useEffect)((()=>{var e;h&&!k&&(null===C||void 0===C||null===(e=C.current)||void 0===e?void 0:e.focus)&&C.current.focus()}),[C,h]),(0,r.useEffect)((()=>{b&&b(E)}),[E]),(0,r.useEffect)((()=>{D(E)}),[n]),(0,r.useEffect)((()=>{p&&D(p)}),[p]),Nt("label",{className:Cr()({"vm-text-field":!0,"vm-text-field_textarea":"textarea"===a,"vm-text-field_dark":w}),"data-replicated-value":n,children:[u&&Nt("div",{className:"vm-text-field__icon-start",children:u}),c&&Nt("div",{className:"vm-text-field__icon-end",children:c}),"textarea"===a?Nt("textarea",{className:A,disabled:d,ref:S,value:n,rows:1,inputMode:m,placeholder:s,autoCapitalize:"none",onInput:P,onKeyDown:L,onKeyUp:I,onFocus:O,onBlur:R,onMouseUp:T}):Nt("input",{className:A,disabled:d,ref:x,value:n,type:a,placeholder:s,inputMode:m,autoCapitalize:"none",onInput:P,onKeyDown:L,onKeyUp:I,onFocus:O,onBlur:R,onMouseUp:T}),t&&Nt("span",{className:"vm-text-field__label",children:t}),Nt(qa,{error:o,warning:i,info:l})]})},Wa=e=>{let{accountIds:t}=e;const n=Qe(),{isMobile:a}=ea(),{tenantId:o,serverUrl:i}=Mt(),l=Tt(),s=vn(),[c,u]=(0,r.useState)(""),d=(0,r.useRef)(null),{value:h,toggle:m,setFalse:p}=ca(!1),f=(0,r.useMemo)((()=>{if(!c)return t;try{const e=new RegExp(c,"i");return t.filter((t=>e.test(t))).sort(((t,n)=>{var r,a;return((null===(r=t.match(e))||void 0===r?void 0:r.index)||0)-((null===(a=n.match(e))||void 0===a?void 0:a.index)||0)}))}catch(Fp){return[]}}),[c,t]),v=(0,r.useMemo)((()=>t.length>1),[t]),g=e=>()=>{const t=e;if(l({type:"SET_TENANT_ID",payload:t}),i){const e=Ge(i,t);if(e===i)return;l({type:"SET_SERVER",payload:e}),s({type:"RUN_QUERY"})}p()};return(0,r.useEffect)((()=>{const e=Je(i);o&&o!==e?g(o)():g(e)()}),[i]),v?Nt("div",{className:"vm-tenant-input",children:[Nt(ya,{title:"Define Tenant ID if you need request to another storage",children:Nt("div",{ref:d,children:a?Nt("div",{className:"vm-mobile-option",onClick:m,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(cr,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Tenant ID"}),Nt("span",{className:"vm-mobile-option-text__value",children:o})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(la,{className:n?"":"vm-header-button",variant:"contained",color:"primary",fullWidth:!0,startIcon:Nt(cr,{}),endIcon:Nt("div",{className:Cr()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":h}),children:Nt(jn,{})}),onClick:m,children:o})})}),Nt(sa,{open:h,placement:"bottom-right",onClose:p,buttonRef:d,title:a?"Define Tenant ID":void 0,children:Nt("div",{className:Cr()({"vm-list vm-tenant-input-list":!0,"vm-list vm-tenant-input-list_mobile":a}),children:[Nt("div",{className:"vm-tenant-input-list__search",children:Nt(Ya,{autofocus:!0,label:"Search",value:c,onChange:u,type:"search"})}),f.map((e=>Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":a,"vm-list-item_active":e===o}),onClick:g(e),children:e},e)))]})})]}):null};const Ka=function(e){const t=(0,r.useRef)();return(0,r.useEffect)((()=>{t.current=e}),[e]),t.current},Qa=()=>{const e=Qe(),{isMobile:t}=ea(),{customStep:n,isHistogram:a}=Ur(),{period:{step:o,end:i,start:l}}=fn(),s=Br(),c=Ka(i-l),u=(0,r.useMemo)((()=>Zt(i-l,a)),[o,a]),[d,h]=(0,r.useState)(n||u),[m,p]=(0,r.useState)(""),{value:f,toggle:v,setFalse:g}=ca(!1),y=(0,r.useRef)(null),_=e=>{const t=e||d||u||"1s",n=(t.match(/[a-zA-Z]+/g)||[]).length?t:"".concat(t,"s");s({type:"SET_CUSTOM_STEP",payload:n}),h(n),p("")},b=()=>{_(),g()},w=e=>{const t=e.match(/[-+]?([0-9]*\.[0-9]+|[0-9]+)/g)||[],n=e.match(/[a-zA-Z]+/g)||[],r=t.length&&t.every((e=>parseFloat(e)>0)),a=n.every((e=>Ut.find((t=>t.short===e)))),o=r&&a;h(e),p(o?"":pt.validStep)};return(0,r.useEffect)((()=>{n&&_(n)}),[n]),(0,r.useEffect)((()=>{!n&&u&&_(u)}),[u]),(0,r.useEffect)((()=>{i-l!==c&&c&&u&&_(u)}),[i,l,c,u]),(0,r.useEffect)((()=>{o!==n&&o!==u||_(u)}),[a]),Nt("div",{className:"vm-step-control",ref:y,children:[t?Nt("div",{className:"vm-mobile-option",onClick:v,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(or,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Step"}),Nt("span",{className:"vm-mobile-option-text__value",children:d})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:"Query resolution step width",children:Nt(la,{className:e?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt(or,{}),onClick:v,children:Nt("p",{children:["STEP",Nt("p",{className:"vm-step-control__value",children:d})]})})}),Nt(sa,{open:f,placement:"bottom-right",onClose:b,buttonRef:y,title:t?"Query resolution step width":void 0,children:Nt("div",{className:Cr()({"vm-step-control-popper":!0,"vm-step-control-popper_mobile":t}),children:[Nt(Ya,{autofocus:!0,label:"Step value",value:d,error:m,onChange:w,onEnter:()=>{_(),b()},onFocus:()=>{document.activeElement instanceof HTMLInputElement&&document.activeElement.select()},onBlur:_,endIcon:Nt(ya,{title:"Set default step value: ".concat(u),children:Nt(la,{size:"small",variant:"text",color:"primary",startIcon:Nt(Pn,{}),onClick:()=>{const e=u||"1s";w(e),_(e)},ariaLabel:"reset step"})})}),Nt("div",{className:"vm-step-control-popper-info",children:[Nt("code",{children:"step"})," - the ",Nt("a",{className:"vm-link vm-link_colored",href:"https://prometheus.io/docs/prometheus/latest/querying/basics/#time-durations",target:"_blank",rel:"noreferrer",children:"interval"}),"between datapoints, which must be returned from the range query. The ",Nt("code",{children:"query"})," is executed at",Nt("code",{children:"start"}),", ",Nt("code",{children:"start+step"}),", ",Nt("code",{children:"start+2*step"}),", \u2026, ",Nt("code",{children:"end"})," timestamps.",Nt("a",{className:"vm-link vm-link_colored",href:"https://docs.victoriametrics.com/keyConcepts.html#range-query",target:"_blank",rel:"help noreferrer",children:"Read more about Range query"})]})]})})]})},Za=e=>{let{relativeTime:t,setDuration:n}=e;const{isMobile:r}=ea();return Nt("div",{className:Cr()({"vm-time-duration":!0,"vm-time-duration_mobile":r}),children:rn.map((e=>{let{id:a,duration:o,until:i,title:l}=e;return Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":r,"vm-list-item_active":a===t}),onClick:(s={duration:o,until:i(),id:a},()=>{n(s)}),children:l||o},a);var s}))})},Ga=e=>{let{viewDate:t,showArrowNav:n,onChangeViewDate:r,toggleDisplayYears:a}=e;return Nt("div",{className:"vm-calendar-header",children:[Nt("div",{className:"vm-calendar-header-left",onClick:a,children:[Nt("span",{className:"vm-calendar-header-left__date",children:t.format("MMMM YYYY")}),Nt("div",{className:"vm-calendar-header-left__select-year",children:Nt(Hn,{})})]}),n&&Nt("div",{className:"vm-calendar-header-right",children:[Nt("div",{className:"vm-calendar-header-right__prev",onClick:()=>{r(t.subtract(1,"month"))},children:Nt(jn,{})}),Nt("div",{className:"vm-calendar-header-right__next",onClick:()=>{r(t.add(1,"month"))},children:Nt(jn,{})})]})]})},Ja=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Xa=e=>{let{viewDate:t,selectDate:n,onChangeSelectDate:a}=e;const i="YYYY-MM-DD",l=o().tz(),s=o()(t.format(i)),c=(0,r.useMemo)((()=>{const e=new Array(42).fill(null),t=s.startOf("month"),n=s.endOf("month").diff(t,"day")+1,r=new Array(n).fill(t).map(((e,t)=>e.add(t,"day"))),a=t.day();return e.splice(a,n,...r),e}),[s]),u=e=>()=>{e&&a(e)};return Nt("div",{className:"vm-calendar-body",children:[Ja.map((e=>Nt(ya,{title:e,children:Nt("div",{className:"vm-calendar-body-cell vm-calendar-body-cell_weekday",children:e[0]})},e))),c.map(((e,t)=>Nt("div",{className:Cr()({"vm-calendar-body-cell":!0,"vm-calendar-body-cell_day":!0,"vm-calendar-body-cell_day_empty":!e,"vm-calendar-body-cell_day_active":(e&&e.format(i))===n.format(i),"vm-calendar-body-cell_day_today":(e&&e.format(i))===l.format(i)}),onClick:u(e),children:e&&e.format("D")},e?e.format(i):t)))]})},eo=e=>{let{viewDate:t,onChangeViewDate:n}=e;const a=o()().format("YYYY"),i=(0,r.useMemo)((()=>t.format("YYYY")),[t]),l=(0,r.useMemo)((()=>{const e=o()().subtract(9,"year");return new Array(18).fill(e).map(((e,t)=>e.add(t,"year")))}),[t]);(0,r.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(i));e&&e.scrollIntoView({block:"center"})}),[]);return Nt("div",{className:"vm-calendar-years",children:l.map((e=>{return Nt("div",{className:Cr()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("YYYY")===i,"vm-calendar-years__year_today":e.format("YYYY")===a}),id:"vm-calendar-year-".concat(e.format("YYYY")),onClick:(t=e,()=>{n(t)}),children:e.format("YYYY")},e.format("YYYY"));var t}))})},to=e=>{let{viewDate:t,selectDate:n,onChangeViewDate:a}=e;const i=o()().format("MM"),l=(0,r.useMemo)((()=>n.format("MM")),[n]),s=(0,r.useMemo)((()=>new Array(12).fill("").map(((e,n)=>o()(t).month(n)))),[t]);(0,r.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(l));e&&e.scrollIntoView({block:"center"})}),[]);return Nt("div",{className:"vm-calendar-years",children:s.map((e=>{return Nt("div",{className:Cr()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("MM")===l,"vm-calendar-years__year_today":e.format("MM")===i}),id:"vm-calendar-year-".concat(e.format("MM")),onClick:(t=e,()=>{a(t)}),children:e.format("MMMM")},e.format("MM"));var t}))})};var no=function(e){return e[e.days=0]="days",e[e.months=1]="months",e[e.years=2]="years",e}(no||{});const ro=e=>{let{date:t,format:n=Pt,onChange:a}=e;const[i,l]=(0,r.useState)(no.days),[s,c]=(0,r.useState)(o().tz(t)),[u,d]=(0,r.useState)(o().tz(t)),h=o().tz(),m=h.format(It)===s.format(It),{isMobile:p}=ea(),f=e=>{c(e),l((e=>e===no.years?no.months:no.days))};return(0,r.useEffect)((()=>{u.format()!==o().tz(t).format()&&a(u.format(n))}),[u]),(0,r.useEffect)((()=>{const e=o().tz(t);c(e),d(e)}),[t]),Nt("div",{className:Cr()({"vm-calendar":!0,"vm-calendar_mobile":p}),children:[Nt(Ga,{viewDate:s,onChangeViewDate:f,toggleDisplayYears:()=>{l((e=>e===no.years?no.days:no.years))},showArrowNav:i===no.days}),i===no.days&&Nt(Xa,{viewDate:s,selectDate:u,onChangeSelectDate:e=>{d(e)}}),i===no.years&&Nt(eo,{viewDate:s,onChangeViewDate:f}),i===no.months&&Nt(to,{selectDate:u,viewDate:s,onChangeViewDate:f}),!m&&i===no.days&&Nt("div",{className:"vm-calendar-footer",children:Nt(la,{variant:"text",size:"small",onClick:()=>{c(h)},children:"show today"})})]})},ao=(0,r.forwardRef)(((e,t)=>{let{date:n,targetRef:a,format:i=Pt,onChange:l,label:s}=e;const c=(0,r.useMemo)((()=>o()(n).isValid()?o().tz(n):o()().tz()),[n]),{isMobile:u}=ea(),{value:d,toggle:h,setFalse:m}=ca(!1);return Ar("click",h,a),Ar("keyup",(e=>{"Escape"!==e.key&&"Enter"!==e.key||m()})),Nt(Ct.FK,{children:Nt(sa,{open:d,buttonRef:a,placement:"bottom-right",onClose:m,title:u?s:void 0,children:Nt("div",{ref:t,children:Nt(ro,{date:c,format:i,onChange:e=>{l(e),m()}})})})})}));var oo=n(494),io=n.n(oo);const lo=e=>o()(e).isValid()?o().tz(e).format(Pt):e,so=e=>{let{value:t="",label:n,pickerLabel:a,pickerRef:i,onChange:l,onEnter:s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(null),[h,m]=(0,r.useState)(lo(t)),[p,f]=(0,r.useState)(!1),[v,g]=(0,r.useState)(!1),y=o()(h).isValid()?"":"Invalid date format";return(0,r.useEffect)((()=>{const e=lo(t);e!==h&&m(e),v&&(s(),g(!1))}),[t]),(0,r.useEffect)((()=>{p&&u&&(u.focus(),u.setSelectionRange(11,11),f(!1))}),[p]),Nt("div",{className:Cr()({"vm-date-time-input":!0,"vm-date-time-input_error":y}),children:[Nt("label",{children:n}),Nt(io(),{tabIndex:1,inputRef:d,mask:"9999-99-99 99:99:99",placeholder:"YYYY-MM-DD HH:mm:ss",value:h,autoCapitalize:"none",inputMode:"numeric",maskChar:null,onChange:e=>{m(e.currentTarget.value)},onBlur:()=>{l(h)},onKeyUp:e=>{"Enter"===e.key&&(l(h),g(!0))}}),y&&Nt("span",{className:"vm-date-time-input__error-text",children:y}),Nt("div",{className:"vm-date-time-input__icon",ref:c,children:Nt(la,{variant:"text",color:"gray",size:"small",startIcon:Nt($n,{}),ariaLabel:"calendar"})}),Nt(ao,{label:a,ref:i,date:h,onChange:e=>{m(e),f(!0)},targetRef:c})]})},co=()=>{const{isMobile:e}=ea(),{isDarkTheme:t}=Mt(),n=(0,r.useRef)(null),a=Mr(),i=(0,r.useMemo)((()=>a.width>1120),[a]),[l,s]=(0,r.useState)(),[c,u]=(0,r.useState)(),{period:{end:d,start:h},relativeTime:m,timezone:p,duration:f}=fn(),v=vn(),g=Qe(),y=Ka(p),{value:_,toggle:b,setFalse:w}=ca(!1),k=(0,r.useMemo)((()=>({region:p,utc:on(p)})),[p]);(0,r.useEffect)((()=>{s(Xt(tn(d)))}),[p,d]),(0,r.useEffect)((()=>{u(Xt(tn(h)))}),[p,h]);const x=e=>{let{duration:t,until:n,id:r}=e;v({type:"SET_RELATIVE_TIME",payload:{duration:t,until:n,id:r}}),w()},S=(0,r.useMemo)((()=>({start:o().tz(tn(h)).format(Pt),end:o().tz(tn(d)).format(Pt)})),[h,d,p]),C=(0,r.useMemo)((()=>m&&"none"!==m?m.replace(/_/g," "):"".concat(S.start," - ").concat(S.end)),[m,S]),E=(0,r.useRef)(null),N=(0,r.useRef)(null),A=(0,r.useRef)(null),M=()=>{c&&l&&v({type:"SET_PERIOD",payload:{from:o().tz(c).toDate(),to:o().tz(l).toDate()}}),w()};return(0,r.useEffect)((()=>{const e=an({relativeTimeId:m,defaultDuration:f,defaultEndInput:tn(d)});y&&p!==y&&x({id:e.relativeTimeId,duration:e.duration,until:e.endInput})}),[p,y]),ia(n,(t=>{var n,r;if(e)return;const a=t.target,o=(null===E||void 0===E?void 0:E.current)&&(null===E||void 0===E||null===(n=E.current)||void 0===n?void 0:n.contains(a)),i=(null===N||void 0===N?void 0:N.current)&&(null===N||void 0===N||null===(r=N.current)||void 0===r?void 0:r.contains(a));o||i||w()})),Nt(Ct.FK,{children:[Nt("div",{ref:A,children:e?Nt("div",{className:"vm-mobile-option",onClick:b,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(Vn,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Time range"}),Nt("span",{className:"vm-mobile-option-text__value",children:C})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:i?"Time range controls":C,children:Nt(la,{className:g?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt(Vn,{}),onClick:b,ariaLabel:"time range controls",children:i&&Nt("span",{children:C})})})}),Nt(sa,{open:_,buttonRef:A,placement:"bottom-right",onClose:w,clickOutside:!1,title:e?"Time range controls":"",children:Nt("div",{className:Cr()({"vm-time-selector":!0,"vm-time-selector_mobile":e}),ref:n,children:[Nt("div",{className:"vm-time-selector-left",children:[Nt("div",{className:Cr()({"vm-time-selector-left-inputs":!0,"vm-time-selector-left-inputs_dark":t}),children:[Nt(so,{value:c,label:"From:",pickerLabel:"Date From",pickerRef:E,onChange:u,onEnter:M}),Nt(so,{value:l,label:"To:",pickerLabel:"Date To",pickerRef:N,onChange:s,onEnter:M})]}),Nt("div",{className:"vm-time-selector-left-timezone",children:[Nt("div",{className:"vm-time-selector-left-timezone__title",children:k.region}),Nt("div",{className:"vm-time-selector-left-timezone__utc",children:k.utc})]}),Nt(la,{variant:"text",startIcon:Nt(Un,{}),onClick:()=>v({type:"RUN_QUERY_TO_NOW"}),children:"switch to now"}),Nt("div",{className:"vm-time-selector-left__controls",children:[Nt(la,{color:"error",variant:"outlined",onClick:()=>{s(Xt(tn(d))),u(Xt(tn(h))),w()},children:"Cancel"}),Nt(la,{color:"primary",onClick:M,children:"Apply"})]})]}),Nt(Za,{relativeTime:m||"",setDuration:x})]})})]})},uo=()=>{const e=oe(),[t,n]=He();return{setSearchParamsFromKeys:(0,r.useCallback)((r=>{const a=!!Array.from(t.values()).length;let o=!1;Object.entries(r).forEach((e=>{let[n,r]=e;t.get(n)!=="".concat(r)&&(t.set(n,"".concat(r)),o=!0)})),o&&(a?n(t):e("?".concat(t.toString()),{replace:!0}))}),[t,e])}},ho=()=>{const{isMobile:e}=ea(),t=Qe(),n=(0,r.useRef)(null),[a]=He(),{setSearchParamsFromKeys:i}=uo(),l=a.get("date")||o()().tz().format(It),s=(0,r.useMemo)((()=>o().tz(l).format(It)),[l]),c=e=>{i({date:e})};return(0,r.useEffect)((()=>{c(l)}),[]),Nt("div",{children:[Nt("div",{ref:n,children:e?Nt("div",{className:"vm-mobile-option",children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt($n,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Date control"}),Nt("span",{className:"vm-mobile-option-text__value",children:s})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:"Date control",children:Nt(la,{className:t?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt($n,{}),children:s})})}),Nt(ao,{label:"Date control",date:l||"",format:It,onChange:c,targetRef:n})]})},mo=[{seconds:0,title:"Off"},{seconds:1,title:"1s"},{seconds:2,title:"2s"},{seconds:5,title:"5s"},{seconds:10,title:"10s"},{seconds:30,title:"30s"},{seconds:60,title:"1m"},{seconds:300,title:"5m"},{seconds:900,title:"15m"},{seconds:1800,title:"30m"},{seconds:3600,title:"1h"},{seconds:7200,title:"2h"}],po=()=>{const{isMobile:e}=ea(),t=vn(),n=Qe(),[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(mo[0]),{value:s,toggle:c,setFalse:u}=ca(!1),d=(0,r.useRef)(null);(0,r.useEffect)((()=>{const e=i.seconds;let n;return a?n=setInterval((()=>{t({type:"RUN_QUERY"})}),1e3*e):l(mo[0]),()=>{n&&clearInterval(n)}}),[i,a]);const h=e=>()=>{(e=>{(a&&!e.seconds||!a&&e.seconds)&&o((e=>!e)),l(e),u()})(e)};return Nt(Ct.FK,{children:[Nt("div",{className:"vm-execution-controls",children:Nt("div",{className:Cr()({"vm-execution-controls-buttons":!0,"vm-execution-controls-buttons_mobile":e,"vm-header-button":!n}),children:[!e&&Nt(ya,{title:"Refresh dashboard",children:Nt(la,{variant:"contained",color:"primary",onClick:()=>{t({type:"RUN_QUERY"})},startIcon:Nt(Fn,{}),ariaLabel:"refresh dashboard"})}),e?Nt("div",{className:"vm-mobile-option",onClick:c,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(Pn,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Auto-refresh"}),Nt("span",{className:"vm-mobile-option-text__value",children:i.title})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:"Auto-refresh control",children:Nt("div",{ref:d,children:Nt(la,{variant:"contained",color:"primary",fullWidth:!0,endIcon:Nt("div",{className:Cr()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":s}),children:Nt(jn,{})}),onClick:c,children:i.title})})})]})}),Nt(sa,{open:s,placement:"bottom-right",onClose:u,buttonRef:d,title:e?"Auto-refresh duration":void 0,children:Nt("div",{className:Cr()({"vm-execution-controls-list":!0,"vm-execution-controls-list_mobile":e}),children:mo.map((t=>Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":e,"vm-list-item_active":t.seconds===i.seconds}),onClick:h(t),children:t.title},t.seconds)))})})]})},fo="Enable to save the modified server URL to local storage, preventing reset upon page refresh.",vo="Disable to stop saving the server URL to local storage, reverting to the default URL on page refresh.",go=(0,r.forwardRef)(((e,t)=>{let{onClose:n}=e;const{serverUrl:a}=Mt(),o=Tt(),{value:i,toggle:l}=ca(!!et("SERVER_URL")),[s,c]=(0,r.useState)(a),[u,d]=(0,r.useState)(""),h=(0,r.useCallback)((()=>{const e=Je(s);""!==e&&o({type:"SET_TENANT_ID",payload:e}),o({type:"SET_SERVER",payload:s}),n()}),[s]);return(0,r.useEffect)((()=>{a||d(pt.emptyServer),bt(a)||d(pt.validServer)}),[a]),(0,r.useEffect)((()=>{i?Xe("SERVER_URL",s):tt(["SERVER_URL"])}),[i]),(0,r.useEffect)((()=>{i&&Xe("SERVER_URL",s)}),[s]),(0,r.useEffect)((()=>{a!==s&&c(a)}),[a]),(0,r.useImperativeHandle)(t,(()=>({handleApply:h})),[h]),Nt("div",{children:[Nt("div",{className:"vm-server-configurator__title",children:"Server URL"}),Nt("div",{className:"vm-server-configurator-url",children:[Nt(Ya,{autofocus:!0,value:s,error:u,onChange:e=>{c(e||""),d("")},onEnter:h,inputmode:"url"}),Nt(ya,{title:i?vo:fo,children:Nt(la,{className:"vm-server-configurator-url__button",variant:"text",color:i?"primary":"gray",onClick:l,startIcon:Nt(cr,{})})})]})]})})),yo=[{label:"Graph",type:mt.chart},{label:"JSON",type:mt.code},{label:"Table",type:mt.table}],_o=(0,r.forwardRef)(((e,t)=>{let{onClose:n}=e;const{isMobile:a}=ea(),{seriesLimits:o}=Fr(),i=jr(),[l,s]=(0,r.useState)(o),[c,u]=(0,r.useState)({table:"",chart:"",code:""}),d=(0,r.useCallback)((()=>{i({type:"SET_SERIES_LIMITS",payload:l}),n()}),[l]);return(0,r.useImperativeHandle)(t,(()=>({handleApply:d})),[d]),Nt("div",{className:"vm-limits-configurator",children:[Nt("div",{className:"vm-server-configurator__title",children:["Series limits by tabs",Nt(ya,{title:"Set to 0 to disable the limit",children:Nt(la,{variant:"text",color:"primary",size:"small",startIcon:Nt(On,{})})}),Nt("div",{className:"vm-limits-configurator-title__reset",children:Nt(la,{variant:"text",color:"primary",size:"small",startIcon:Nt(Pn,{}),onClick:()=>{s(lt)},children:"Reset limits"})})]}),Nt("div",{className:Cr()({"vm-limits-configurator__inputs":!0,"vm-limits-configurator__inputs_mobile":a}),children:yo.map((e=>{return Nt("div",{children:Nt(Ya,{label:e.label,value:l[e.type],error:c[e.type],onChange:(t=e.type,e=>{const n=e||"";u((e=>({...e,[t]:+n<0?pt.positiveNumber:""}))),s({...l,[t]:n||1/0})}),onEnter:d,type:"number"})},e.type);var t}))})]})})),bo=_o,wo=e=>{let{defaultExpanded:t=!1,onChange:n,title:a,children:o}=e;const[i,l]=(0,r.useState)(t);return(0,r.useEffect)((()=>{n&&n(i)}),[i]),Nt(Ct.FK,{children:[Nt("header",{className:"vm-accordion-header ".concat(i&&"vm-accordion-header_open"),onClick:()=>{l((e=>!e))},children:[a,Nt("div",{className:"vm-accordion-header__arrow ".concat(i&&"vm-accordion-header__arrow_open"),children:Nt(jn,{})})]}),i&&Nt("section",{className:"vm-accordion-section",children:o},"content")]})},ko=()=>Nt(ya,{title:"Browser timezone is not recognized, supported, or could not be determined.",children:Nt(Rn,{})}),xo=cn(),So=(0,r.forwardRef)(((e,t)=>{const{isMobile:n}=ea(),a=ln(),{timezone:o,defaultTimezone:i}=fn(),l=vn(),[s,c]=(0,r.useState)(o),[u,d]=(0,r.useState)(""),h=(0,r.useRef)(null),{value:m,toggle:p,setFalse:f}=ca(!1),v=(0,r.useMemo)((()=>[{title:"Default time (".concat(i,")"),region:i,utc:i?on(i):"UTC"},{title:xo.title,region:xo.region,utc:on(xo.region),isInvalid:!xo.isValid},{title:"UTC (Coordinated Universal Time)",region:"UTC",utc:"UTC"}].filter((e=>e.region))),[i]),g=(0,r.useMemo)((()=>{if(!u)return a;try{return ln(u)}catch(Fp){return{}}}),[u,a]),y=(0,r.useMemo)((()=>Object.keys(g)),[g]),_=(0,r.useMemo)((()=>({region:s,utc:on(s)})),[s]),b=e=>()=>{(e=>{c(e.region),d(""),f()})(e)};return(0,r.useEffect)((()=>{c(o)}),[o]),(0,r.useImperativeHandle)(t,(()=>({handleApply:()=>{l({type:"SET_TIMEZONE",payload:s})}})),[s]),Nt("div",{className:"vm-timezones",children:[Nt("div",{className:"vm-server-configurator__title",children:"Time zone"}),Nt("div",{className:"vm-timezones-item vm-timezones-item_selected",onClick:p,ref:h,children:[Nt("div",{className:"vm-timezones-item__title",children:_.region}),Nt("div",{className:"vm-timezones-item__utc",children:_.utc}),Nt("div",{className:Cr()({"vm-timezones-item__icon":!0,"vm-timezones-item__icon_open":m}),children:Nt(Hn,{})})]}),Nt(sa,{open:m,buttonRef:h,placement:"bottom-left",onClose:f,fullWidth:!0,title:n?"Time zone":void 0,children:Nt("div",{className:Cr()({"vm-timezones-list":!0,"vm-timezones-list_mobile":n}),children:[Nt("div",{className:"vm-timezones-list-header",children:[Nt("div",{className:"vm-timezones-list-header__search",children:Nt(Ya,{autofocus:!0,label:"Search",value:u,onChange:e=>{d(e)}})}),v.map(((e,t)=>e&&Nt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[Nt("div",{className:"vm-timezones-item__title",children:[e.title,e.isInvalid&&Nt(ko,{})]}),Nt("div",{className:"vm-timezones-item__utc",children:e.utc})]},"".concat(t,"_").concat(e.region))))]}),y.map((e=>Nt("div",{className:"vm-timezones-list-group",children:Nt(wo,{defaultExpanded:!0,title:Nt("div",{className:"vm-timezones-list-group__title",children:e}),children:Nt("div",{className:"vm-timezones-list-group-options",children:g[e]&&g[e].map((e=>Nt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[Nt("div",{className:"vm-timezones-item__title",children:e.region}),Nt("div",{className:"vm-timezones-item__utc",children:e.utc})]},e.search)))})})},e)))]})})]})})),Co=So,Eo=e=>{let{options:t,value:n,label:a,onChange:o}=e;const i=(0,r.useRef)(null),[l,s]=(0,r.useState)({width:"0px",left:"0px",borderRadius:"0px"}),c=e=>()=>{o(e)};return(0,r.useEffect)((()=>{if(!i.current)return void s({width:"0px",left:"0px",borderRadius:"0px"});const e=t.findIndex((e=>e.value===n)),{width:r}=i.current.getBoundingClientRect();let a=r,o=e*a,l="0";0===e&&(l="16px 0 0 16px"),e===t.length-1&&(l="10px",o-=1,l="0 16px 16px 0"),0!==e&&e!==t.length-1&&(a+=1,o-=1),s({width:"".concat(a,"px"),left:"".concat(o,"px"),borderRadius:l})}),[i,n,t]),Nt("div",{className:"vm-toggles",children:[a&&Nt("label",{className:"vm-toggles__label",children:a}),Nt("div",{className:"vm-toggles-group",style:{gridTemplateColumns:"repeat(".concat(t.length,", 1fr)")},children:[l.borderRadius&&Nt("div",{className:"vm-toggles-group__highlight",style:l}),t.map(((e,t)=>Nt("div",{className:Cr()({"vm-toggles-group-item":!0,"vm-toggles-group-item_first":0===t,"vm-toggles-group-item_active":e.value===n,"vm-toggles-group-item_icon":e.icon&&e.title}),onClick:c(e.value),ref:e.value===n?i:null,children:[e.icon,e.title]},e.value)))]})]})},No=Object.values(ft).map((e=>({title:e,value:e}))),Ao=()=>{const{isMobile:e}=ea(),t=Tt(),{theme:n}=Mt();return Nt("div",{className:Cr()({"vm-theme-control":!0,"vm-theme-control_mobile":e}),children:[Nt("div",{className:"vm-server-configurator__title",children:"Theme preferences"}),Nt("div",{className:"vm-theme-control__toggle",children:Nt(Eo,{options:No,value:n,onChange:e=>{t({type:"SET_THEME",payload:e})}})},"".concat(e))]})},Mo=e=>{let{value:t=!1,disabled:n=!1,label:r,color:a="secondary",fullWidth:o,onChange:i}=e;return Nt("div",{className:Cr()({"vm-switch":!0,"vm-switch_full-width":o,"vm-switch_disabled":n,"vm-switch_active":t,["vm-switch_".concat(a,"_active")]:t,["vm-switch_".concat(a)]:a}),onClick:()=>{n||i(!t)},children:[Nt("div",{className:"vm-switch-track",children:Nt("div",{className:"vm-switch-track__thumb"})}),r&&Nt("span",{className:"vm-switch__label",children:r})]})},To=()=>{const{isMobile:e}=ea(),{markdownParsing:t}=(0,r.useContext)(Gr).state,n=(0,r.useContext)(Gr).dispatch;return Nt("div",{children:[Nt("div",{className:"vm-server-configurator__title",children:"Markdown Parsing for Logs"}),Nt(Mo,{label:t?"Disable markdown parsing":"Enable markdown parsing",value:t,onChange:e=>{n({type:"SET_MARKDOWN_PARSING",payload:e})},fullWidth:e}),Nt("div",{className:"vm-server-configurator__info",children:"Toggle this switch to enable or disable the Markdown formatting for log entries. Enabling this will parse log texts to Markdown."})]})},Lo="Settings",{REACT_APP_TYPE:Io}={},Po=Io===Ve.logs,Oo=()=>{const{isMobile:e}=ea(),t=Qe(),n=(0,r.useRef)(null),a=(0,r.useRef)(null),o=(0,r.useRef)(null),{value:i,setTrue:l,setFalse:s}=ca(!1),c=[{show:!t&&!Po,component:Nt(go,{ref:n,onClose:s})},{show:!Po,component:Nt(bo,{ref:a,onClose:s})},{show:Po,component:Nt(To,{})},{show:!0,component:Nt(Co,{ref:o})},{show:!t,component:Nt(Ao,{})}].filter((e=>e.show));return Nt(Ct.FK,{children:[e?Nt("div",{className:"vm-mobile-option",onClick:l,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(Ln,{})}),Nt("div",{className:"vm-mobile-option-text",children:Nt("span",{className:"vm-mobile-option-text__label",children:Lo})}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:Lo,children:Nt(la,{className:Cr()({"vm-header-button":!t}),variant:"contained",color:"primary",startIcon:Nt(Ln,{}),onClick:l,ariaLabel:"settings"})}),i&&Nt(ga,{title:Lo,onClose:s,children:Nt("div",{className:Cr()({"vm-server-configurator":!0,"vm-server-configurator_mobile":e}),children:[c.map(((e,t)=>Nt("div",{className:"vm-server-configurator__input",children:e.component},t))),Nt("div",{className:"vm-server-configurator-footer",children:[Nt(la,{color:"error",variant:"outlined",onClick:s,children:"Cancel"}),Nt(la,{color:"primary",variant:"contained",onClick:()=>{n.current&&n.current.handleApply(),a.current&&a.current.handleApply(),o.current&&o.current.handleApply(),s()},children:"Apply"})]})]})})]})},Ro=e=>{let{displaySidebar:t,isMobile:n,headerSetup:r,accountIds:a}=e;return Nt("div",{className:Cr()({"vm-header-controls":!0,"vm-header-controls_mobile":n}),children:[(null===r||void 0===r?void 0:r.tenant)&&Nt(Wa,{accountIds:a||[]}),(null===r||void 0===r?void 0:r.stepControl)&&Nt(Qa,{}),(null===r||void 0===r?void 0:r.timeSelector)&&Nt(co,{}),(null===r||void 0===r?void 0:r.cardinalityDatePicker)&&Nt(ho,{}),(null===r||void 0===r?void 0:r.executionControls)&&Nt(po,{}),Nt(Oo,{}),!t&&Nt(Ta,{})]})},Do=Boolean(et("DISABLED_DEFAULT_TIMEZONE")),zo=()=>{const{serverUrl:e}=Mt(),t=vn(),[n,a]=(0,r.useState)(!1),[i,l]=(0,r.useState)(""),s=async()=>{if(e&&!{NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE){l(""),a(!0);try{const n=await fetch("".concat(e,"/vmui/timezone")),r=await n.json();n.ok?((e=>{const n="local"===e.toLowerCase()?cn().region:e;try{if(o()().tz(n).isValid(),t({type:"SET_DEFAULT_TIMEZONE",payload:n}),Do)return;t({type:"SET_TIMEZONE",payload:n})}catch(Fp){Fp instanceof Error&&l("".concat(Fp.name,": ").concat(Fp.message))}})(r.timezone),a(!1)):(l(r.error),a(!1))}catch(Fp){a(!1),Fp instanceof Error&&l("".concat(Fp.name,": ").concat(Fp.message))}}};return(0,r.useEffect)((()=>{s()}),[e]),{isLoading:n,error:i}},Fo=()=>{const e=Qe(),{isMobile:t}=ea(),{pathname:n}=re(),[a,o]=He();Ba(),zo();return(0,r.useEffect)((()=>{var e;const t="vmui",r=null===(e=Ye[n])||void 0===e?void 0:e.title;document.title=r?"".concat(r," - ").concat(t):t}),[n]),(0,r.useEffect)((()=>{const{search:e,href:t}=window.location;if(e){const t=at().parse(e,{ignoreQueryPrefix:!0});Object.entries(t).forEach((e=>{let[t,n]=e;return a.set(t,n)})),o(a),window.location.search=""}const n=t.replace(/\/\?#\//,"/#/");n!==t&&window.location.replace(n)}),[]),Nt("section",{className:"vm-container",children:[Nt(ja,{controlsComponent:Ro}),Nt("div",{className:Cr()({"vm-container-body":!0,"vm-container-body_mobile":t,"vm-container-body_app":e}),children:Nt(be,{})}),!e&&Nt(Ua,{})]})};var jo=function(e){return e[e.mouse=0]="mouse",e[e.keyboard=1]="keyboard",e}(jo||{});const Ho=e=>{var t;let{value:n,options:a,anchor:o,disabled:i,minLength:l=2,fullWidth:s,selected:c,noOptionsText:u,label:d,disabledFullScreen:h,offset:m,maxDisplayResults:p,loading:f,onSelect:v,onOpenAutocomplete:g,onFoundOptions:y,onChangeWrapperRef:_}=e;const{isMobile:b}=ea(),w=(0,r.useRef)(null),[k,x]=(0,r.useState)({index:-1}),[S,C]=(0,r.useState)(""),[E,N]=(0,r.useState)(0),{value:A,setValue:M,setFalse:T}=ca(!1),L=(0,r.useMemo)((()=>{if(!A)return[];try{const e=new RegExp(String(n.trim()),"i"),t=a.filter((t=>e.test(t.value))).sort(((t,r)=>{var a,o;return t.value.toLowerCase()===n.trim().toLowerCase()?-1:r.value.toLowerCase()===n.trim().toLowerCase()?1:((null===(a=t.value.match(e))||void 0===a?void 0:a.index)||0)-((null===(o=r.value.match(e))||void 0===o?void 0:o.index)||0)}));return N(t.length),C(t.length>Number(null===p||void 0===p?void 0:p.limit)&&(null===p||void 0===p?void 0:p.message)||""),null!==p&&void 0!==p&&p.limit?t.slice(0,p.limit):t}catch(Fp){return[]}}),[A,a,n]),I=(0,r.useMemo)((()=>{var e;return 1===L.length&&(null===(e=L[0])||void 0===e?void 0:e.value)===n}),[L]),P=(0,r.useMemo)((()=>u&&!L.length),[u,L]),O=()=>{x({index:-1})},R=(0,r.useCallback)((e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:a}=e,o=n||r||a,i=L.length&&!I;if("ArrowUp"===t&&!o&&i&&(e.preventDefault(),x((e=>{let{index:t}=e;return{index:t<=0?0:t-1,type:jo.keyboard}}))),"ArrowDown"===t&&!o&&i){e.preventDefault();const t=L.length-1;x((e=>{let{index:n}=e;return{index:n>=t?t:n+1,type:jo.keyboard}}))}if("Enter"===t){const e=L[k.index];e&&v(e.value),c||T()}"Escape"===t&&T()}),[k,L,I,T,v,c]);return(0,r.useEffect)((()=>{M(n.length>=l)}),[n,a]),Ar("keydown",R),(0,r.useEffect)((()=>{if(!w.current||k.type===jo.mouse)return;const e=w.current.childNodes[k.index];null!==e&&void 0!==e&&e.scrollIntoView&&e.scrollIntoView({block:"center"})}),[k,L]),(0,r.useEffect)((()=>{x({index:-1})}),[L]),(0,r.useEffect)((()=>{g&&g(A)}),[A]),(0,r.useEffect)((()=>{y&&y(I?[]:L)}),[L,I]),(0,r.useEffect)((()=>{_&&_(w)}),[w]),Nt(sa,{open:A,buttonRef:o,placement:"bottom-left",onClose:T,fullWidth:s,title:b?d:void 0,disabledFullScreen:h,offset:m,children:[Nt("div",{className:Cr()({"vm-autocomplete":!0,"vm-autocomplete_mobile":b&&!h}),ref:w,children:[f&&Nt("div",{className:"vm-autocomplete__loader",children:[Nt(Fn,{}),Nt("span",{children:"Loading..."})]}),P&&Nt("div",{className:"vm-autocomplete__no-options",children:u}),!I&&L.map(((e,t)=>{return Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":b,"vm-list-item_active":t===k.index,"vm-list-item_multiselect":c,"vm-list-item_multiselect_selected":null===c||void 0===c?void 0:c.includes(e.value),"vm-list-item_with-icon":e.icon}),id:"$autocomplete$".concat(e.value),onClick:(r=e.value,()=>{i||(v(r),c||T())}),onMouseEnter:(n=t,()=>{x({index:n,type:jo.mouse})}),onMouseLeave:O,children:[(null===c||void 0===c?void 0:c.includes(e.value))&&Nt(Xn,{}),Nt(Ct.FK,{children:e.icon}),Nt("span",{children:e.value})]},"".concat(t).concat(e.value));var n,r}))]}),S&&Nt("div",{className:"vm-autocomplete-message",children:["Shown ",null===p||void 0===p?void 0:p.limit," results out of ",E,". ",S]}),(null===(t=L[k.index])||void 0===t?void 0:t.description)&&Nt("div",{className:"vm-autocomplete-info",children:[Nt("div",{className:"vm-autocomplete-info__type",children:L[k.index].type}),Nt("div",{className:"vm-autocomplete-info__description",dangerouslySetInnerHTML:{__html:L[k.index].description||""}})]})]})};var Vo=n(267),$o=n.n(Vo);const Uo=e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&"),Bo=e=>JSON.stringify(e).slice(1,-1),qo=e=>{const t=e.match(/["`']/g);return!!t&&t.length%2!==0};var Yo=function(e){return e.metric="metric",e.label="label",e.labelValue="labelValue",e}(Yo||{});const Wo={[Yo.metric]:Nt(vr,{}),[Yo.label]:Nt(yr,{}),[Yo.labelValue]:Nt(_r,{})};function Ko(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function Qo(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function Zo(e){return Zo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Zo(e)}function Go(e){var t=function(e,t){if("object"!=Zo(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Zo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Zo(t)?t:t+""}function Jo(e,t,n){return(t=Go(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Xo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let ei={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function ti(e){ei=e}const ni=/[&<>"']/,ri=new RegExp(ni.source,"g"),ai=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,oi=new RegExp(ai.source,"g"),ii={"&":"&","<":"<",">":">",'"':""","'":"'"},li=e=>ii[e];function si(e,t){if(t){if(ni.test(e))return e.replace(ri,li)}else if(ai.test(e))return e.replace(oi,li);return e}const ci=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function ui(e){return e.replace(ci,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const di=/(^|[^\[])\^/g;function hi(e,t){let n="string"===typeof e?e:e.source;t=t||"";const r={replace:(e,t)=>{let a="string"===typeof t?t:t.source;return a=a.replace(di,"$1"),n=n.replace(e,a),r},getRegex:()=>new RegExp(n,t)};return r}function mi(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch(Fp){return null}return e}const pi={exec:()=>null};function fi(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let r=!1,a=t;for(;--a>=0&&"\\"===n[a];)r=!r;return r?"|":" |"})).split(/ \|/);let r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:vi(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=vi(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=t[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1");e=vi(e.replace(/^ *>[ \t]?/gm,""),"\n");const n=this.lexer.state.top;this.lexer.state.top=!0;const r=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:r,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const r=n.length>1,a={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?"\\d{1,9}\\".concat(n.slice(-1)):"\\".concat(n),this.options.pedantic&&(n=r?n:"[*+-]");const o=new RegExp("^( {0,3}".concat(n,")((?:[\t ][^\\n]*)?(?:\\n|$))"));let i="",l="",s=!1;for(;e;){let n=!1;if(!(t=o.exec(e)))break;if(this.rules.block.hr.test(e))break;i=t[0],e=e.substring(i.length);let r=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],u=0;this.options.pedantic?(u=2,l=r.trimStart()):(u=t[2].search(/[^ ]/),u=u>4?1:u,l=r.slice(u),u+=t[1].length);let d=!1;if(!r&&/^ *$/.test(c)&&(i+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp("^ {0,".concat(Math.min(3,u-1),"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))")),n=new RegExp("^ {0,".concat(Math.min(3,u-1),"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)")),a=new RegExp("^ {0,".concat(Math.min(3,u-1),"}(?:```|~~~)")),o=new RegExp("^ {0,".concat(Math.min(3,u-1),"}#"));for(;e;){const s=e.split("\n",1)[0];if(c=s,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),a.test(c))break;if(o.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=u||!c.trim())l+="\n"+c.slice(u);else{if(d)break;if(r.search(/[^ ]/)>=4)break;if(a.test(r))break;if(o.test(r))break;if(n.test(r))break;l+="\n"+c}d||c.trim()||(d=!0),i+=s+"\n",e=e.substring(s.length+1),r=c.slice(u)}}a.loose||(s?a.loose=!0:/\n *\n *$/.test(i)&&(s=!0));let h,m=null;this.options.gfm&&(m=/^\[[ xX]\] /.exec(l),m&&(h="[ ] "!==m[0],l=l.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:i,task:!!m,checked:h,loose:!1,text:l,tokens:[]}),a.raw+=i}a.items[a.items.length-1].raw=i.trimEnd(),a.items[a.items.length-1].text=l.trimEnd(),a.raw=a.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));a.loose=n}if(a.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:r}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=fi(t[1]),r=t[2].replace(/^\||\| *$/g,"").split("|"),a=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],o={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(const e of r)/^ *-+: *$/.test(e)?o.align.push("right"):/^ *:-+: *$/.test(e)?o.align.push("center"):/^ *:-+ *$/.test(e)?o.align.push("left"):o.align.push(null);for(const e of n)o.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of a)o.rows.push(fi(e,o.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return o}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:si(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^
    /i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=vi(e.slice(0,-1),"\\");if((e.length-t.length)%2===0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let r=0;r-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),gi(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:r?r.replace(this.rules.inline.anyPunctuation,"$1"):r},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return gi(n,e,n[0],this.lexer)}}emStrong(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this.rules.inline.emStrongLDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...r[0]].length-1;let a,o,i=n,l=0;const s="*"===r[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(s.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=s.exec(t));){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){i+=o;continue}if((r[5]||r[6])&&n%3&&!((n+o)%3)){l+=o;continue}if(i-=o,i>0)continue;o=Math.min(o,o+i+l);const t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+o);if(Math.min(n,o)%2){const e=s.slice(1,-1);return{type:"em",raw:s,text:e,tokens:this.lexer.inlineTokens(e)}}const c=s.slice(2,-2);return{type:"strong",raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=si(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=si(t[1]),n="mailto:"+e):(e=si(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,a;if("@"===t[2])e=si(t[0]),a="mailto:"+e;else{let o;do{var n,r;o=t[0],t[0]=null!==(n=null===(r=this.rules.inline._backpedal.exec(t[0]))||void 0===r?void 0:r[0])&&void 0!==n?n:""}while(o!==t[0]);e=si(t[0]),a="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:a,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:si(t[0]),{type:"text",raw:t[0],text:e}}}}const _i=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,bi=/(?:[*+-]|\d{1,9}[.)])/,wi=hi(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,bi).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),ki=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,xi=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Si=hi(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",xi).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Ci=hi(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,bi).getRegex(),Ei="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ni=/|$))/,Ai=hi("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",Ni).replace("tag",Ei).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Mi=hi(ki).replace("hr",_i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Ei).getRegex(),Ti={blockquote:hi(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Mi).getRegex(),code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,def:Si,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:_i,html:Ai,lheading:wi,list:Ci,newline:/^(?: *(?:\n|$))+/,paragraph:Mi,table:pi,text:/^[^\n]+/},Li=hi("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",_i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Ei).getRegex(),Ii={...Ti,table:Li,paragraph:hi(ki).replace("hr",_i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Li).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Ei).getRegex()},Pi={...Ti,html:hi("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",Ni).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:pi,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:hi(ki).replace("hr",_i).replace("heading"," *#{1,6} *[^\n]").replace("lheading",wi).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Oi=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ri=/^( {2,}|\\)\n(?!\s*$)/,Di="\\p{P}\\p{S}",zi=hi(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,Di).getRegex(),Fi=hi(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,Di).getRegex(),ji=hi("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,Di).getRegex(),Hi=hi("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,Di).getRegex(),Vi=hi(/\\([punct])/,"gu").replace(/punct/g,Di).getRegex(),$i=hi(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Ui=hi(Ni).replace("(?:--\x3e|$)","--\x3e").getRegex(),Bi=hi("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Ui).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),qi=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Yi=hi(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",qi).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Wi=hi(/^!?\[(label)\]\[(ref)\]/).replace("label",qi).replace("ref",xi).getRegex(),Ki=hi(/^!?\[(ref)\](?:\[\])?/).replace("ref",xi).getRegex(),Qi={_backpedal:pi,anyPunctuation:Vi,autolink:$i,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:Ri,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:pi,emStrongLDelim:Fi,emStrongRDelimAst:ji,emStrongRDelimUnd:Hi,escape:Oi,link:Yi,nolink:Ki,punctuation:zi,reflink:Wi,reflinkSearch:hi("reflink|nolink(?!\\()","g").replace("reflink",Wi).replace("nolink",Ki).getRegex(),tag:Bi,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\1&&void 0!==arguments[1]?arguments[1]:[];for(e=this.options.pedantic?e.replace(/\t/g," ").replace(/^ +$/gm,""):e.replace(/^( *)(\t+)/gm,((e,t,n)=>t+" ".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((n=>!!(t=n.call({lexer:this},e,o))&&(e=e.substring(t.raw.length),o.push(t),!0)))))if(t=this.tokenizer.space(e))e=e.substring(t.raw.length),1===t.raw.length&&o.length>0?o[o.length-1].raw+="\n":o.push(t);else if(t=this.tokenizer.code(e))e=e.substring(t.raw.length),n=o[o.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?o.push(t):(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.fences(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.heading(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.hr(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.blockquote(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.list(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.html(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.def(e))e=e.substring(t.raw.length),n=o[o.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(n.raw+="\n"+t.raw,n.text+="\n"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.table(e))e=e.substring(t.raw.length),o.push(t);else if(t=this.tokenizer.lheading(e))e=e.substring(t.raw.length),o.push(t);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let a;this.options.extensions.startBlock.forEach((e=>{a=e.call({lexer:this},n),"number"===typeof a&&a>=0&&(t=Math.min(t,a))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(t=this.tokenizer.paragraph(r)))n=o[o.length-1],a&&"paragraph"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):o.push(t),a=r.length!==e.length,e=e.substring(t.raw.length);else if(t=this.tokenizer.text(e))e=e.substring(t.raw.length),n=o[o.length-1],n&&"text"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):o.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,o}inline(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e){let t,n,r,a,o,i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],s=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(s));)e.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(s));)s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(a=this.tokenizer.rules.inline.anyPunctuation.exec(s));)s=s.slice(0,a.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(o||(i=""),o=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((n=>!!(t=n.call({lexer:this},e,l))&&(e=e.substring(t.raw.length),l.push(t),!0)))))if(t=this.tokenizer.escape(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.tag(e))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.link(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.emStrong(e,s,i))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.codespan(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.br(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.del(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.autolink(e))e=e.substring(t.raw.length),l.push(t);else if(this.state.inLink||!(t=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let a;this.options.extensions.startInline.forEach((e=>{a=e.call({lexer:this},n),"number"===typeof a&&a>=0&&(t=Math.min(t,a))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(t=this.tokenizer.inlineText(r))e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(i=t.raw.slice(-1)),o=!0,n=l[l.length-1],n&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(t.raw.length),l.push(t);return l}}class nl{constructor(e){Jo(this,"options",void 0),this.options=e||ei}code(e,t,n){var r;const a=null===(r=(t||"").match(/^\S*/))||void 0===r?void 0:r[0];return e=e.replace(/\n$/,"")+"\n",a?'
    '+(n?e:si(e,!0))+"
    \n":"
    "+(n?e:si(e,!0))+"
    \n"}blockquote(e){return"
    \n".concat(e,"
    \n")}html(e,t){return e}heading(e,t,n){return"").concat(e,"\n")}hr(){return"
    \n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e,t,n){return"
  • ".concat(e,"
  • \n")}checkbox(e){return"'}paragraph(e){return"

    ".concat(e,"

    \n")}table(e,t){return t&&(t="".concat(t,"")),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return"\n".concat(e,"\n")}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<".concat(n,' align="').concat(t.align,'">'):"<".concat(n,">"))+e+"\n")}strong(e){return"".concat(e,"")}em(e){return"".concat(e,"")}codespan(e){return"".concat(e,"")}br(){return"
    "}del(e){return"".concat(e,"")}link(e,t,n){const r=mi(e);if(null===r)return n;let a='
    ",a}image(e,t,n){const r=mi(e);if(null===r)return n;let a='').concat(n,'1&&void 0!==arguments[1])||arguments[1],n="";for(let r=0;r0&&"paragraph"===t.tokens[0].type?(t.tokens[0].text=e+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=e+" "+t.tokens[0].tokens[0].text)):t.tokens.unshift({type:"text",text:e+" "}):l+=e+" "}l+=this.parse(t.tokens,o),i+=this.renderer.listitem(l,a,!!r)}n+=this.renderer.list(i,t,r);continue}case"html":{const e=a;n+=this.renderer.html(e.text,e.block);continue}case"paragraph":{const e=a;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let o=a,i=o.tokens?this.parseInline(o.tokens):o.text;for(;r+1{const a={...r},o={...this.defaults,...a};!0===this.defaults.async&&!1===a.async&&(o.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),o.async=!0);const i=Qo(il,this,sl).call(this,!!o.silent,!!o.async);if("undefined"===typeof n||null===n)return i(new Error("marked(): input parameter is undefined or null"));if("string"!==typeof n)return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(o.hooks&&(o.hooks.options=o),o.async)return Promise.resolve(o.hooks?o.hooks.preprocess(n):n).then((t=>e(t,o))).then((e=>o.hooks?o.hooks.processAllTokens(e):e)).then((e=>o.walkTokens?Promise.all(this.walkTokens(e,o.walkTokens)).then((()=>e)):e)).then((e=>t(e,o))).then((e=>o.hooks?o.hooks.postprocess(e):e)).catch(i);try{o.hooks&&(n=o.hooks.preprocess(n));let r=e(n,o);o.hooks&&(r=o.hooks.processAllTokens(r)),o.walkTokens&&this.walkTokens(r,o.walkTokens);let a=t(r,o);return o.hooks&&(a=o.hooks.postprocess(a)),a}catch(Fp){return i(Fp)}}}function sl(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+si(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}const cl=new class{constructor(){Ko(this,il),Jo(this,"defaults",{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}),Jo(this,"options",this.setOptions),Jo(this,"parse",Qo(il,this,ll).call(this,tl.lex,al.parse)),Jo(this,"parseInline",Qo(il,this,ll).call(this,tl.lexInline,al.parseInline)),Jo(this,"Parser",al),Jo(this,"Renderer",nl),Jo(this,"TextRenderer",rl),Jo(this,"Lexer",tl),Jo(this,"Tokenizer",yi),Jo(this,"Hooks",ol),this.use(...arguments)}walkTokens(e,t){let n=[];for(const a of e)switch(n=n.concat(t.call(this,a)),a.type){case"table":{const e=a;for(const r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(const r of e.rows)for(const e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case"list":{const e=a;n=n.concat(this.walkTokens(e.items,t));break}default:{var r;const e=a;null!==(r=this.defaults.extensions)&&void 0!==r&&null!==(r=r.childTokens)&&void 0!==r&&r[e.type]?this.defaults.extensions.childTokens[e.type].forEach((r=>{const a=e[r].flat(1/0);n=n.concat(this.walkTokens(a,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(){const e=this.defaults.extensions||{renderers:{},childTokens:{}};for(var t=arguments.length,n=new Array(t),r=0;r{const n={...t};if(n.async=this.defaults.async||n.async||!1,t.extensions&&(t.extensions.forEach((t=>{if(!t.name)throw new Error("extension name required");if("renderer"in t){const n=e.renderers[t.name];e.renderers[t.name]=n?function(){for(var e=arguments.length,r=new Array(e),a=0;a{if(this.defaults.async)return Promise.resolve(a.call(e,t)).then((t=>o.call(e,t)));const n=a.call(e,t);return o.call(e,n)}:e[r]=function(){for(var t=arguments.length,n=new Array(t),r=0;r{const t='$1 target="_blank" class="'.concat("vm-link vm-link_colored",'" $2').concat("https://docs.victoriametrics.com/MetricsQL.html","#");return e.replace(/({var n;const r="h3"===e.tagName.toLowerCase();return t=r?null!==(n=e.textContent)&&void 0!==n?n:"":t,r?null:((e,t)=>{var n;const r=null!==(n=t.textContent)&&void 0!==n?n:"",a=(e=>{const t=[];let n=e.nextElementSibling;for(;n&&"p"===n.tagName.toLowerCase();)n&&t.push(n),n=n.nextElementSibling;return t})(t).map((e=>{var t;return null!==(t=e.outerHTML)&&void 0!==t?t:""})).join("\n");return{type:e,value:r,description:hl(a),icon:Nt(gr,{})}})(t,e)})).filter(Boolean)},pl=()=>{const{metricsQLFunctions:e}=Cn(),t=En();return(0,r.useEffect)((()=>{e.length||(async()=>{try{const e=await fetch(dl),n=(e=>{const t=document.createElement("div");t.innerHTML=ul(e);const n=t.querySelectorAll("".concat("h3",", ").concat("h4"));return ml(n)})(await e.text());t({type:"SET_METRICSQL_FUNCTIONS",payload:n})}catch(Fp){console.error("Error fetching or processing the MetricsQL.md file:",Fp)}})()}),[]),e},fl=e=>{let{value:t,anchorEl:n,caretPosition:a,hasHelperText:i,onSelect:l,onFoundOptions:s}=e;const[c,u]=(0,r.useState)({top:0,left:0}),d=pl(),h=(0,r.useMemo)((()=>{if(a[0]!==a[1])return{beforeCursor:t,afterCursor:""};return{beforeCursor:t.substring(0,a[0]),afterCursor:t.substring(a[1])}}),[t,a]),m=(0,r.useMemo)((()=>{const e=h.beforeCursor.split(/\s(or|and|unless|default|ifnot|if|group_left|group_right)\s|}|\+|\|-|\*|\/|\^/i);return e[e.length-1]}),[h]),p=(0,r.useMemo)((()=>{const e=[...m.matchAll(/\w+\((?[^)]+)\)\s+(by|without|on|ignoring)\s*\(\w*/gi)];if(e.length>0&&e[0].groups&&e[0].groups.metricName)return e[0].groups.metricName;const t=[...m.matchAll(/^\s*\b(?[^{}(),\s]+)(?={|$)/g)];return t.length>0&&t[0].groups&&t[0].groups.metricName?t[0].groups.metricName:""}),[m]),f=(0,r.useMemo)((()=>{const e=m.match(/[a-z_:-][\w\-.:/]*\b(?=\s*(=|!=|=~|!~))/g);return e?e[e.length-1]:""}),[m]),v=(0,r.useMemo)((()=>{const e=h.beforeCursor.trim(),t=["}",")"].some((t=>e.endsWith(t))),n=!qo(e)&&["`","'",'"'].some((t=>e.endsWith(t)));if(!h.beforeCursor||t||n||(e=>{const t=e.split(/\s+/),n=t.length,r=t[n-1],a=t[n-2],o=!r&&qo(e),i=(!r||t.length>1)&&!/([{(),+\-*/^]|\b(?:or|and|unless|default|ifnot|if|group_left|group_right|by|without|on|ignoring)\b)/i.test(a);return o||i})(h.beforeCursor))return vt.empty;const r=/(?:by|without|on|ignoring)\s*\(\s*[^)]*$|\{[^}]*$/i,a="(".concat(Uo(p),")?{?.+").concat(Uo(f),'(=|!=|=~|!~)"?([^"]*)$');switch(!0){case new RegExp(a,"g").test(h.beforeCursor):return vt.labelValue;case r.test(h.beforeCursor):return vt.label;default:return vt.metricsql}}),[h,p,f]),g=(0,r.useMemo)((()=>{const e=h.beforeCursor.match(/([\w_.:]+(?![},]))$/);return e?e[0]:""}),[h.beforeCursor]),{metrics:y,labels:_,labelValues:b,loading:w}=(e=>{let{valueByContext:t,metric:n,label:a,context:i}=e;const{serverUrl:l}=Mt(),{period:{start:s,end:c}}=fn(),{autocompleteCache:u}=Cn(),d=En(),[h,m]=(0,r.useState)(!1),[p,f]=(0,r.useState)(t),v=$o()(f,500);(0,r.useEffect)((()=>(v(t),v.cancel)),[t,v]);const[g,y]=(0,r.useState)([]),[_,b]=(0,r.useState)([]),[w,k]=(0,r.useState)([]),x=(0,r.useRef)(new AbortController),S=(0,r.useCallback)((e=>{const t=o()(1e3*s).startOf("day").valueOf()/1e3,n=o()(1e3*c).endOf("day").valueOf()/1e3;return new URLSearchParams({...e||{},limit:"".concat(_n),start:"".concat(t),end:"".concat(n)})}),[s,c]),C=(e,t)=>e.map((e=>({value:e,type:"".concat(t),icon:Wo[t]}))),E=async e=>{let{value:t,urlSuffix:n,setter:r,type:a,params:o}=e;if(!t&&a===Yo.metric)return;x.current.abort(),x.current=new AbortController;const{signal:i}=x.current,s={type:a,value:t,start:(null===o||void 0===o?void 0:o.get("start"))||"",end:(null===o||void 0===o?void 0:o.get("end"))||"",match:(null===o||void 0===o?void 0:o.get("match[]"))||""};m(!0);try{const e=u.get(s);if(e)return r(C(e,a)),void m(!1);const t=await fetch("".concat(l,"/api/v1/").concat(n,"?").concat(o),{signal:i});if(t.ok){const{data:e}=await t.json();r(C(e,a)),d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:e}})}m(!1)}catch(Fp){Fp instanceof Error&&"AbortError"!==Fp.name&&(d({type:"SET_AUTOCOMPLETE_CACHE",payload:{key:s,value:[]}}),m(!1),console.error(Fp))}};return(0,r.useEffect)((()=>{const e=i!==vt.metricsql&&i!==vt.empty;if(!l||!n||e)return;y([]);const t=Bo(Uo(n));return E({value:p,urlSuffix:"label/__name__/values",setter:y,type:Yo.metric,params:S({"match[]":'{__name__=~".*'.concat(t,'.*"}')})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,p,i,n]),(0,r.useEffect)((()=>{if(!l||i!==vt.label)return;b([]);const e=Bo(n);return E({value:p,urlSuffix:"labels",setter:b,type:Yo.label,params:S(n?{"match[]":'{__name__="'.concat(e,'"}')}:void 0)}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,p,i,n]),(0,r.useEffect)((()=>{if(!l||!a||i!==vt.labelValue)return;k([]);const e=Bo(n),t=Bo(Uo(p)),r=[n?'__name__="'.concat(e,'"'):"","".concat(a,'=~".*').concat(t,'.*"')].filter(Boolean).join(",");return E({value:p,urlSuffix:"label/".concat(a,"/values"),setter:k,type:Yo.labelValue,params:S({"match[]":"{".concat(r,"}")})}),()=>{var e;return null===(e=x.current)||void 0===e?void 0:e.abort()}}),[l,p,i,n,a]),{metrics:g,labels:_,labelValues:w,loading:h}})({valueByContext:g,metric:p,label:f,context:v}),k=(0,r.useMemo)((()=>{switch(v){case vt.metricsql:return[...y,...d];case vt.label:return _;case vt.labelValue:return b;default:return[]}}),[v,y,_,b]),x=(0,r.useCallback)((e=>{const t=h.beforeCursor;let n=h.afterCursor;const r=t.lastIndexOf(g,a[0]),o=r+g.length,i=t.substring(0,r),s=t.substring(o);if(v===vt.labelValue){const t='"';n=n.replace(/^[^\s"|},]*/,"");const r=/(?:=|!=|=~|!~)$/.test(i),a='"'!==n.trim()[0];e="".concat(r?t:"").concat(e).concat(a?t:"")}v===vt.label&&(n=n.replace(/^[^\s=!,{}()"|+\-/*^]*/,"")),v===vt.metricsql&&(n=n.replace(/^[^\s[\]{}()"|+\-/*^]*/,""));const c="".concat(i).concat(e).concat(s).concat(n);l(c,i.length+e.length)}),[h]);return(0,r.useEffect)((()=>{if(!n.current)return void u({top:0,left:0});const e=n.current.querySelector("textarea")||n.current,t=window.getComputedStyle(e),r="".concat(t.getPropertyValue("font-size")),a="".concat(t.getPropertyValue("font-family")),o=parseInt("".concat(t.getPropertyValue("line-height"))),l=document.createElement("div");l.style.font="".concat(r," ").concat(a),l.style.padding=t.getPropertyValue("padding"),l.style.lineHeight="".concat(o,"px"),l.style.width="".concat(e.offsetWidth,"px"),l.style.maxWidth="".concat(e.offsetWidth,"px"),l.style.whiteSpace=t.getPropertyValue("white-space"),l.style.overflowWrap=t.getPropertyValue("overflow-wrap");const s=document.createElement("span");l.appendChild(document.createTextNode(h.beforeCursor)),l.appendChild(s),l.appendChild(document.createTextNode(h.afterCursor)),document.body.appendChild(l);const c=l.getBoundingClientRect(),d=s.getBoundingClientRect(),m=d.left-c.left,p=d.bottom-c.bottom-(i?o:0);u({top:p,left:m}),l.remove(),s.remove()}),[n,a,i]),Nt(Ct.FK,{children:Nt(Ho,{loading:w,disabledFullScreen:!0,value:g,options:k,anchor:n,minLength:0,offset:c,onSelect:x,onFoundOptions:s,maxDisplayResults:{limit:yn,message:"Please, specify the query more precisely."}})})},vl="No match! \nThis query hasn't selected any time series from database.\nEither the requested metrics are missing in the database,\nor there is a typo in series selector.",gl="The shown results are marked as PARTIAL.\nThe result is marked as partial if one or more vmstorage nodes failed to respond to the query.",yl=e=>{let{value:t,onChange:n,onEnter:a,onArrowUp:o,onArrowDown:i,autocomplete:l,error:s,stats:c,label:u,disabled:d=!1}=e;const{autocompleteQuick:h}=Cn(),{isMobile:m}=ea(),[p,f]=(0,r.useState)(!1),[v,g]=(0,r.useState)([0,0]),y=(0,r.useRef)(null),[_,b]=(0,r.useState)(l),w=(0,r.useRef)($o()(b,500)).current,k=[{show:"0"===(null===c||void 0===c?void 0:c.seriesFetched)&&!c.resultLength,text:vl},{show:null===c||void 0===c?void 0:c.isPartial,text:gl}].filter((e=>e.show)).map((e=>e.text)).join("");c&&(u="".concat(u," (").concat(c.executionTimeMsec||0,"ms)"));return(0,r.useEffect)((()=>{f(l)}),[h]),(0,r.useEffect)((()=>{b(!1),w(!0)}),[v]),Nt("div",{className:"vm-query-editor",ref:y,children:[Nt(Ya,{value:t,label:u,type:"textarea",autofocus:!m,error:s,warning:k,onKeyDown:e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:l}=e,s=(e.target.value||"").split("\n").length>1,c=n||r,u="ArrowDown"===t,d="Enter"===t;"ArrowUp"===t&&c&&(e.preventDefault(),o()),u&&c&&(e.preventDefault(),i()),d&&p&&e.preventDefault(),!d||l||s&&!c||p||(e.preventDefault(),a())},onChange:n,onChangeCaret:e=>{g((t=>t[0]===e[0]&&t[1]===e[1]?t:e))},disabled:d,inputmode:"search",caretPosition:v}),_&&l&&Nt(fl,{value:t,anchorEl:y,caretPosition:v,hasHelperText:Boolean(k||s),onSelect:(e,t)=>{n(e),g([t,t])},onFoundOptions:e=>{f(!!e.length)}})]})},_l=e=>{let{isMobile:t,hideButtons:n}=e;const{autocomplete:r}=Cn(),a=En(),{nocache:o,isTracingEnabled:i}=Fr(),l=jr();return Ar("keydown",(e=>{const{code:t,ctrlKey:n,altKey:r}=e;"Space"===t&&(n||r)&&(e.preventDefault(),a({type:"SET_AUTOCOMPLETE_QUICK",payload:!0}))})),Nt("div",{className:Cr()({"vm-additional-settings":!0,"vm-additional-settings_mobile":t}),children:[!(null!==n&&void 0!==n&&n.autocomplete)&&Nt(ya,{title:Nt(Ct.FK,{children:["Quick tip: ",Ca]}),children:Nt(Mo,{label:"Autocomplete",value:r,onChange:()=>{a({type:"TOGGLE_AUTOCOMPLETE"})},fullWidth:t})}),Nt(Mo,{label:"Disable cache",value:o,onChange:()=>{l({type:"TOGGLE_NO_CACHE"})},fullWidth:t}),!(null!==n&&void 0!==n&&n.traceQuery)&&Nt(Mo,{label:"Trace query",value:i,onChange:()=>{l({type:"TOGGLE_QUERY_TRACING"})},fullWidth:t})]})},bl=e=>{const{isMobile:t}=ea(),n=(0,r.useRef)(null),{value:a,toggle:o,setFalse:i}=ca(!1);return t?Nt(Ct.FK,{children:[Nt("div",{ref:n,children:Nt(la,{variant:"outlined",startIcon:Nt(dr,{}),onClick:o,ariaLabel:"additional the query settings"})}),Nt(sa,{open:a,buttonRef:n,placement:"bottom-left",onClose:i,title:"Query settings",children:Nt(_l,{isMobile:t,...e})})]}):Nt(_l,{...e})},wl=(e,t)=>e.length===t.length&&e.every(((e,n)=>e===t[n]));const kl=()=>{const{showInfoMessage:e}=(0,r.useContext)(ra);return async(t,n)=>{var r;if(null===(r=navigator)||void 0===r||!r.clipboard)return e({text:"Clipboard not supported",type:"error"}),console.warn("Clipboard not supported"),!1;try{return await navigator.clipboard.writeText(t),n&&e({text:n,type:"success"}),!0}catch(a){return a instanceof Error&&e({text:"".concat(a.name,": ").concat(a.message),type:"error"}),console.warn("Copy failed",a),!1}}},xl=e=>{let{query:t,favorites:n,onRun:a,onToggleFavorite:o}=e;const i=kl(),l=(0,r.useMemo)((()=>n.includes(t)),[t,n]);return Nt("div",{className:"vm-query-history-item",children:[Nt("span",{className:"vm-query-history-item__value",children:t}),Nt("div",{className:"vm-query-history-item__buttons",children:[Nt(ya,{title:"Execute query",children:Nt(la,{size:"small",variant:"text",onClick:()=>{a(t)},startIcon:Nt(Yn,{})})}),Nt(ya,{title:"Copy query",children:Nt(la,{size:"small",variant:"text",onClick:async()=>{await i(t,"Query has been copied")},startIcon:Nt(rr,{})})}),Nt(ya,{title:l?"Remove Favorite":"Add to Favorites",children:Nt(la,{size:"small",variant:"text",color:l?"warning":"primary",onClick:()=>{o(t,l)},startIcon:Nt(l?fr:pr,{})})})]})]})},Sl="saved",Cl="favorite",El=[{label:"Session history",value:"session"},{label:"Saved history",value:Sl},{label:"Favorite queries",value:Cl}],Nl=e=>{let{handleSelectQuery:t}=e;const{queryHistory:n}=Cn(),{isMobile:a}=ea(),{value:o,setTrue:i,setFalse:l}=ca(!1),[s,c]=(0,r.useState)(El[0].value),[u,d]=(0,r.useState)(gn("QUERY_HISTORY")),[h,m]=(0,r.useState)(gn("QUERY_FAVORITES")),p=(0,r.useMemo)((()=>n.map((e=>e.values.filter((e=>e)).reverse()))),[n]),f=(0,r.useMemo)((()=>{switch(s){case Cl:return h;case Sl:return u;default:return p}}),[s,h,u,p]),v=null===f||void 0===f?void 0:f.every((e=>!e.length)),g=(0,r.useMemo)((()=>s===Cl?"Favorites queries are empty.\nTo see your favorites, mark a query as a favorite.":"Query history is empty.\nTo see the history, please make a query."),[s]),y=e=>n=>{t(n,e),l()},_=(e,t)=>{m((n=>{const r=n[0]||[];return t?[r.filter((t=>t!==e))]:t||r.includes(e)?n:[[...r,e]]}))};return(0,r.useEffect)((()=>{const e=h[0]||[],t=gn("QUERY_FAVORITES")[0]||[];wl(e,t)||Xe("QUERY_FAVORITES",JSON.stringify(h))}),[h]),Ar("storage",(()=>{d(gn("QUERY_HISTORY")),m(gn("QUERY_FAVORITES"))})),Nt(Ct.FK,{children:[Nt(ya,{title:"Show history",children:Nt(la,{color:"primary",variant:"text",onClick:i,startIcon:Nt(Vn,{}),ariaLabel:"Show history"})}),o&&Nt(ga,{title:"Query history",onClose:l,children:Nt("div",{className:Cr()({"vm-query-history":!0,"vm-query-history_mobile":a}),children:[Nt("div",{className:Cr()({"vm-query-history__tabs":!0,"vm-section-header__tabs":!0,"vm-query-history__tabs_mobile":a}),children:Nt(Tr,{activeItem:s,items:El,onChange:c})}),Nt("div",{className:"vm-query-history-list",children:[v&&Nt("div",{className:"vm-query-history-list__no-data",children:g}),f.map(((e,t)=>Nt("div",{children:[f.length>1&&Nt("div",{className:Cr()({"vm-query-history-list__group-title":!0,"vm-query-history-list__group-title_first":0===t}),children:["Query ",t+1]}),e.map(((e,n)=>Nt(xl,{query:e,favorites:h.flat(),onRun:y(t),onToggleFavorite:_},n)))]},t))),s===Sl&&!v&&Nt("div",{className:"vm-query-history-footer",children:Nt(la,{color:"error",variant:"outlined",size:"small",startIcon:Nt(Zn,{}),onClick:()=>{Xe("QUERY_HISTORY","")},children:"clear history"})})]})]})})]})},Al=e=>{let{containerStyles:t,message:n}=e;const{isDarkTheme:r}=Mt();return Nt("div",{className:Cr()({"vm-spinner":!0,"vm-spinner_dark":r}),style:t,children:[Nt("div",{className:"half-circle-spinner",children:[Nt("div",{className:"circle circle-1"}),Nt("div",{className:"circle circle-2"})]}),n&&Nt("div",{className:"vm-spinner__message",children:n})]})},Ml=()=>{const{serverUrl:e}=Mt(),{isMobile:t}=ea(),{value:n,setTrue:a,setFalse:o}=ca(!1),{query:i}=Cn(),{period:l}=fn(),[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[p,f]=(0,r.useState)("");return Nt(Ct.FK,{children:[Nt(la,{color:"secondary",variant:"outlined",onClick:()=>(a(),f(""),URL.revokeObjectURL(h),d(""),m(""),(async()=>{c(!0);try{const t=encodeURIComponent(i[0]||""),n=encodeURIComponent(l.step||Zt(l.end-l.start,!1)),r="".concat(e,"/api/vmanomaly/config.yaml?query=").concat(t,"&step=").concat(n),a=await fetch(r),o=a.headers.get("Content-Type");if(a.ok)if("application/yaml"==o){const e=await a.blob(),t=await e.text();d(t),m(URL.createObjectURL(e))}else f("Response Content-Type is not YAML, does `Server URL` point to VMAnomaly server?");else{const e=await a.text();f(" ".concat(a.status," ").concat(a.statusText,": ").concat(e))}}catch(p){console.error(p),f(String(p))}c(!1)})()),children:"Open Config"}),n&&Nt(ga,{title:"Download config",onClose:o,children:Nt("div",{className:Cr()({"vm-anomaly-config":!0,"vm-anomaly-config_mobile":t}),children:[s&&Nt(Al,{containerStyles:{position:"relative"},message:"Loading config..."}),!s&&p&&Nt("div",{className:"vm-anomaly-config-error",children:[Nt("div",{className:"vm-anomaly-config-error__icon",children:Nt(Dn,{})}),Nt("h3",{className:"vm-anomaly-config-error__title",children:"Cannot download config"}),Nt("p",{className:"vm-anomaly-config-error__text",children:p})]}),!s&&u&&Nt(Ya,{value:u,label:"config.yaml",type:"textarea",disabled:!0}),Nt("div",{className:"vm-anomaly-config-footer",children:h&&Nt("a",{href:h,download:"config.yaml",children:Nt(la,{variant:"contained",startIcon:Nt(br,{}),children:"download"})})})]})})]})},Tl=e=>{let{queryErrors:t,setQueryErrors:n,setHideError:a,stats:o,onHideQuery:i,onRunQuery:l,hideButtons:s}=e;const{isMobile:c}=ea(),{query:u,queryHistory:d,autocomplete:h,autocompleteQuick:m}=Cn(),p=En(),f=vn(),[v,g]=(0,r.useState)(u||[]),[y,_]=(0,r.useState)([]),[b,w]=(0,r.useState)(!1),k=Ka(v),x=(()=>{const{serverUrl:e}=Mt();return async t=>{try{const n=encodeURIComponent(t),r="".concat(e,"/prettify-query?query=").concat(n),a=await fetch(r);if(200!=a.status)return{query:t,error:"Error requesting /prettify-query, status: "+a.status};const o=await a.json();return"success"!=o.status?{query:t,error:String(o.msg)}:{query:String(o.query),error:""}}catch(Fp){return console.error(Fp),Fp instanceof Error&&"AbortError"!==Fp.name?{query:t,error:"".concat(Fp.name,": ").concat(Fp.message)}:{query:t,error:String(Fp)}}}})(),S=()=>{p({type:"SET_QUERY_HISTORY",payload:v.map(((e,t)=>{const n=d[t]||{values:[]},r=e===n.values[n.values.length-1],a=!r&&e?[...n.values,e]:n.values;return a.length>25&&a.shift(),{index:n.values.length-Number(r),values:a}}))}),p({type:"SET_QUERY",payload:v}),f({type:"RUN_QUERY"}),l()},C=(e,t)=>{g((n=>n.map(((n,r)=>r===t?e:n))))},E=(e,t)=>()=>{((e,t)=>{const{index:n,values:r}=d[t],a=n+e;a<0||a>=r.length||(C(r[a]||"",t),p({type:"SET_QUERY_HISTORY_BY_INDEX",payload:{value:{values:r,index:a},queryNumber:t}}))})(e,t)},N=e=>t=>{C(t,e),p({type:"SET_AUTOCOMPLETE_QUICK",payload:!1})},A=e=>()=>{var t;t=e,g((e=>e.filter(((e,n)=>n!==t)))),_((t=>t.includes(e)?t.filter((t=>t!==e)):t.map((t=>t>e?t-1:t))))},M=e=>t=>{((e,t)=>{const{ctrlKey:n,metaKey:r}=e;if(n||r){const e=v.map(((e,t)=>t)).filter((e=>e!==t));_((t=>wl(e,t)?[]:e))}else _((e=>e.includes(t)?e.filter((e=>e!==t)):[...e,t]))})(t,e)};return(0,r.useEffect)((()=>{k&&v.length{i&&i(y)}),[y]),(0,r.useEffect)((()=>{b&&(S(),w(!1))}),[v,b]),(0,r.useEffect)((()=>{g(u||[])}),[u]),Nt("div",{className:Cr()({"vm-query-configurator":!0,"vm-block":!0,"vm-block_mobile":c}),children:[Nt("div",{className:"vm-query-configurator-list",children:v.map(((e,r)=>Nt("div",{className:Cr()({"vm-query-configurator-list-row":!0,"vm-query-configurator-list-row_disabled":y.includes(r),"vm-query-configurator-list-row_mobile":c}),children:[Nt(yl,{value:v[r],autocomplete:!(null!==s&&void 0!==s&&s.autocomplete)&&(h||m),error:t[r],stats:o[r],onArrowUp:E(-1,r),onArrowDown:E(1,r),onEnter:S,onChange:N(r),label:"Query ".concat(v.length>1?r+1:""),disabled:y.includes(r)}),i&&Nt(ya,{title:y.includes(r)?"Enable query":"Disable query",children:Nt("div",{className:"vm-query-configurator-list-row__button",children:Nt(la,{variant:"text",color:"gray",startIcon:y.includes(r)?Nt(tr,{}):Nt(er,{}),onClick:M(r),ariaLabel:"visibility query"})})}),!(null!==s&&void 0!==s&&s.prettify)&&Nt(ya,{title:"Prettify query",children:Nt("div",{className:"vm-query-configurator-list-row__button",children:Nt(la,{variant:"text",color:"gray",startIcon:Nt(nr,{}),onClick:async()=>await(async e=>{const t=await x(v[e]);a(!1),C(t.query,e),n((n=>(n[e]=t.error,[...n])))})(r),className:"prettify",ariaLabel:"prettify the query"})})}),v.length>1&&Nt(ya,{title:"Remove Query",children:Nt("div",{className:"vm-query-configurator-list-row__button",children:Nt(la,{variant:"text",color:"error",startIcon:Nt(Zn,{}),onClick:A(r),ariaLabel:"remove query"})})})]},r)))}),Nt("div",{className:"vm-query-configurator-settings",children:[Nt(bl,{hideButtons:s}),Nt("div",{className:"vm-query-configurator-settings__buttons",children:[Nt(Nl,{handleSelectQuery:(e,t)=>{C(e,t),w(!0)}}),(null===s||void 0===s?void 0:s.anomalyConfig)&&Nt(Ml,{}),!(null!==s&&void 0!==s&&s.addQuery)&&v.length<10&&Nt(la,{variant:"outlined",onClick:()=>{g((e=>[...e,""]))},startIcon:Nt(Gn,{}),children:"Add Query"}),Nt(la,{variant:"contained",onClick:S,startIcon:Nt(qn,{}),children:c?"Execute":"Execute Query"})]})]})]})};let Ll=0;class Il{constructor(e,t){this.tracing=void 0,this.query=void 0,this.tracingChildren=void 0,this.originalTracing=void 0,this.id=void 0,this.tracing=e,this.originalTracing=JSON.parse(JSON.stringify(e)),this.query=t,this.id=Ll++;const n=e.children||[];this.tracingChildren=n.map((e=>new Il(e,t)))}get queryValue(){return this.query}get idValue(){return this.id}get children(){return this.tracingChildren}get message(){return this.tracing.message}get duration(){return this.tracing.duration_msec}get JSON(){return JSON.stringify(this.tracing,null,2)}get originalJSON(){return JSON.stringify(this.originalTracing,null,2)}setTracing(e){this.tracing=e;const t=e.children||[];this.tracingChildren=t.map((e=>new Il(e,this.query)))}setQuery(e){this.query=e}resetTracing(){this.tracing=this.originalTracing}}const Pl=function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const{__name__:r,...a}=e.metric,o=t||"".concat(n?"[Query ".concat(e.group,"] "):"").concat(r||"");return 0==Object.keys(a).length?o||"value":"".concat(o,"{").concat(Object.entries(a).map((e=>"".concat(e[0],"=").concat(JSON.stringify(e[1])))).join(", "),"}")},Ol=e=>{switch(e){case"NaN":return NaN;case"Inf":case"+Inf":return 1/0;case"-Inf":return-1/0;default:return parseFloat(e)}},Rl=e=>{if(e.length<2)return!1;const t=["le","vmrange"],n=Object.keys(e[0].metric).filter((e=>!t.includes(e))),r=e.every((r=>{const a=Object.keys(r.metric).filter((e=>!t.includes(e)));return n.length===a.length&&a.every((t=>r.metric[t]===e[0].metric[t]))}));return r&&e.every((e=>t.some((t=>t in e.metric))))},Dl=Ve.anomaly==={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE,zl=e=>{let{predefinedQuery:t,visible:n,display:a,customStep:o,hideQuery:i,showAllSeries:l}=e;const{query:s}=Cn(),{period:c}=fn(),{displayType:u,nocache:d,isTracingEnabled:h,seriesLimits:m}=Fr(),{serverUrl:p}=Mt(),{isHistogram:f}=Ur(),[v,g]=(0,r.useState)(!1),[y,_]=(0,r.useState)(),[b,w]=(0,r.useState)(),[k,x]=(0,r.useState)(),[S,C]=(0,r.useState)(),[E,N]=(0,r.useState)([]),[A,M]=(0,r.useState)([]),[T,L]=(0,r.useState)(),[I,P]=(0,r.useState)([]),[O,R]=(0,r.useState)(!1),D=(0,r.useMemo)((()=>{const{end:e,start:t}=c;return Zt(e-t,f)}),[c,f]),z=(0,r.useCallback)($o()((async e=>{let{fetchUrl:t,fetchQueue:n,displayType:r,query:a,stateSeriesLimits:o,showAllSeries:i,hideQuery:l}=e;const s=new AbortController;P([...n,s]);try{const e=r===mt.chart,n=i?1/0:+o[r]||1/0;let c=n;const u=[],d=[];let h=1,m=0,p=!1;for await(const r of t){if(null===l||void 0===l?void 0:l.includes(h-1)){N((e=>[...e,""])),M((e=>[...e,{}])),h++;continue}const t=await fetch(r,{signal:s.signal}),o=await t.json();if(t.ok){if(M((e=>[...e,{...null===o||void 0===o?void 0:o.stats,isPartial:null===o||void 0===o?void 0:o.isPartial,resultLength:o.data.result.length}])),N((e=>[...e,""])),o.trace){const e=new Il(o.trace,a[h-1]);d.push(e)}p=!Dl&&e&&Rl(o.data.result),c=p?1/0:n;const t=c-u.length;o.data.result.slice(0,t).forEach((e=>{e.group=h,u.push(e)})),m+=o.data.result.length}else{u.push({metric:{},values:[],group:h});const e=o.errorType||pt.unknownType,t=[e,(null===o||void 0===o?void 0:o.error)||(null===o||void 0===o?void 0:o.message)||"see console for more details"].join(",\r\n");N((e=>[...e,"".concat(t)])),console.error("Fetch query error: ".concat(e),o)}h++}const f="Showing ".concat(u.length," series out of ").concat(m," series due to performance reasons. Please narrow down the query, so it returns less series");L(m>c?f:""),e?_(u):w(u),x(d),R((e=>m?p:e))}catch(Fp){const t=Fp;if("AbortError"===t.name)return;const n="Please check your serverURL settings and confirm server availability.";let r="Error executing query: ".concat(t.message,". ").concat(n);"Unexpected end of JSON input"===t.message&&(r+="\nAdditionally, this error can occur if the server response is too large to process. Apply more specific filters to reduce the data volume."),C(r)}g(!1)}),300),[]),F=(0,r.useMemo)((()=>{C(""),N([]),M([]);const e=null!==t&&void 0!==t?t:s,n=(a||u)===mt.chart;if(c)if(p)if(e.every((e=>!e.trim())))N(e.map((()=>pt.validQuery)));else{if(bt(p)){const t={...c};return t.step=o,e.map((e=>n?((e,t,n,r,a)=>"".concat(e,"/api/v1/query_range?query=").concat(encodeURIComponent(t),"&start=").concat(n.start,"&end=").concat(n.end,"&step=").concat(n.step).concat(r?"&nocache=1":"").concat(a?"&trace=1":""))(p,e,t,d,h):((e,t,n,r,a)=>"".concat(e,"/api/v1/query?query=").concat(encodeURIComponent(t),"&time=").concat(n.end,"&step=").concat(n.step).concat(r?"&nocache=1":"").concat(a?"&trace=1":""))(p,e,t,d,h)))}C(pt.validServer)}else C(pt.emptyServer)}),[p,c,u,o,i]),[j,H]=(0,r.useState)([]);return(0,r.useEffect)((()=>{const e=F===j&&!!t;if(!n||null===F||void 0===F||!F.length||e)return;g(!0);z({fetchUrl:F,fetchQueue:I,displayType:a||u,query:null!==t&&void 0!==t?t:s,stateSeriesLimits:m,showAllSeries:l,hideQuery:i}),H(F)}),[F,n,m,l]),(0,r.useEffect)((()=>{const e=I.slice(0,-1);e.length&&(e.map((e=>e.abort())),P(I.filter((e=>!e.signal.aborted))))}),[I]),(0,r.useEffect)((()=>{D===o&&_([])}),[O]),{fetchUrl:F,isLoading:v,graphData:y,liveData:b,error:S,queryErrors:E,setQueryErrors:N,queryStats:A,warning:T,traces:k,isHistogram:O}},Fl=()=>{const{tenantId:e}=Mt(),{displayType:t}=Fr(),{query:n}=Cn(),{duration:a,relativeTime:o,period:{date:i,step:l}}=fn(),{customStep:s}=Ur(),[c,u]=He(),d=Tt(),h=vn(),m=Br(),p=En(),f=jr(),[v,g]=(0,r.useState)(!1),y=(0,r.useCallback)((()=>{if(v)return void g(!1);const r=new URLSearchParams(c);n.forEach(((n,u)=>{var d;const h="g".concat(u);c.get("".concat(h,".expr"))!==n&&n&&r.set("".concat(h,".expr"),n),c.get("".concat(h,".range_input"))!==a&&r.set("".concat(h,".range_input"),a),c.get("".concat(h,".end_input"))!==i&&r.set("".concat(h,".end_input"),i),c.get("".concat(h,".relative_time"))!==o&&r.set("".concat(h,".relative_time"),o||"none");const m=c.get("".concat(h,".step_input"))||l;m&&m!==s&&r.set("".concat(h,".step_input"),s);const p="".concat((null===(d=Lr.find((e=>e.value===t)))||void 0===d?void 0:d.prometheusCode)||0);c.get("".concat(h,".tab"))!==p&&r.set("".concat(h,".tab"),"".concat(p)),c.get("".concat(h,".tenantID"))!==e&&e&&r.set("".concat(h,".tenantID"),e)})),!((e,t)=>{if(Array.from(e.entries()).length!==Array.from(t.entries()).length)return!1;for(const[n,r]of e)if(t.get(n)!==r)return!1;return!0})(r,c)&&r.size&&u(r)}),[e,t,n,a,o,i,l,s]);(0,r.useEffect)((()=>{const e=setTimeout(y,200);return()=>clearTimeout(e)}),[y]),(0,r.useEffect)((()=>{if(!v)return;const r=dn(),u=r.duration!==a,g=r.relativeTime!==o,y="none"===r.relativeTime&&r.period.date!==i;(u||g||y)&&h({type:"SET_TIME_STATE",payload:r});const _=Pr();_!==t&&f({type:"SET_DISPLAY_TYPE",payload:_});const b=c.get("g0.tenantID")||"";b!==e&&d({type:"SET_TENANT_ID",payload:b});const w=dt();wl(w,n)||(p({type:"SET_QUERY",payload:w}),h({type:"RUN_QUERY"}));const k=setTimeout((()=>{const e=c.get("g0.step_input")||l;e&&e!==s&&m({type:"SET_CUSTOM_STEP",payload:e})}),50);return()=>clearTimeout(k)}),[c,v]),Ar("popstate",(()=>{g(!0)}))},jl=e=>{let{text:t,href:n,children:r,colored:a=!0,underlined:o=!1,withIcon:i=!1}=e;return Nt("a",{href:n,className:Cr()({"vm-link":!0,"vm-link_colored":a,"vm-link_underlined":o,"vm-link_with-icon":i}),target:"_blank",rel:"noreferrer",children:t||r})},Hl=Nt(jl,{text:"last_over_time",href:"https://docs.victoriametrics.com/MetricsQL.html#last_over_time",underlined:!0}),Vl=Nt(jl,{text:"instant query",href:"https://docs.victoriametrics.com/keyConcepts.html#instant-query",underlined:!0}),$l=()=>Nt("div",{children:[Nt("p",{children:["This tab shows ",Vl," results for the last 5 minutes ending at the selected time range."]}),Nt("p",{children:["Please wrap the query into ",Hl," if you need results over arbitrary lookbehind interval."]})]}),Ul=e=>{let{value:t}=e;return Nt("div",{className:"vm-line-progress",children:[Nt("div",{className:"vm-line-progress-track",children:Nt("div",{className:"vm-line-progress-track__thumb",style:{width:"".concat(t,"%")}})}),Nt("span",{children:[t.toFixed(2),"%"]})]})},Bl=e=>{let{isRoot:t,trace:n,totalMsec:a,isExpandedAll:o}=e;const{isDarkTheme:i}=Mt(),{isMobile:l}=ea(),[s,c]=(0,r.useState)({}),u=(0,r.useRef)(null),[d,h]=(0,r.useState)(!1),[m,p]=(0,r.useState)(!1),f=Yt(n.duration/1e3)||"".concat(n.duration,"ms");(0,r.useEffect)((()=>{if(!u.current)return;const e=u.current,t=u.current.children[0],{height:n}=t.getBoundingClientRect();h(n>e.clientHeight)}),[n]);const v=n.children&&!!n.children.length,g=n.duration/a*100,y=e=>{var t;const n=[e.idValue];return null===e||void 0===e||null===(t=e.children)||void 0===t||t.forEach((e=>{n.push(...y(e))})),n};return(0,r.useEffect)((()=>{if(!o)return void c([]);const e=y(n),t={};e.forEach((e=>{t[e]=!0})),c(t)}),[o]),Nt("div",{className:Cr()({"vm-nested-nav":!0,"vm-nested-nav_root":t,"vm-nested-nav_dark":i,"vm-nested-nav_mobile":l}),children:[Nt("div",{className:Cr()({"vm-nested-nav-header":!0,"vm-nested-nav-header_open":s[n.idValue]}),onClick:(_=n.idValue,()=>{v&&c((e=>({...e,[_]:!e[_]})))}),children:[v&&Nt("div",{className:Cr()({"vm-nested-nav-header__icon":!0,"vm-nested-nav-header__icon_open":s[n.idValue]}),children:Nt(jn,{})}),Nt("div",{className:"vm-nested-nav-header__progress",children:Nt(Ul,{value:g})}),Nt("div",{className:Cr()({"vm-nested-nav-header__message":!0,"vm-nested-nav-header__message_show-full":m}),ref:u,children:[Nt("span",{className:"vm-nested-nav-header__message_duration",children:f}),":\xa0",Nt("span",{children:n.message})]}),Nt("div",{className:"vm-nested-nav-header-bottom",children:(d||m)&&Nt(la,{variant:"text",size:"small",onClick:e=>{e.stopPropagation(),p((e=>!e))},children:m?"Hide":"Show full query"})})]}),s[n.idValue]&&Nt("div",{className:"vm-nested-nav__childrens",children:v&&n.children.map((e=>Nt(Bl,{trace:e,totalMsec:a,isExpandedAll:o},e.duration)))})]});var _},ql=Bl,Yl=e=>{let{editable:t=!1,defaultTile:n="JSON",displayTitle:a=!0,defaultJson:o="",resetValue:i="",onClose:l,onUpload:s}=e;const c=kl(),{isMobile:u}=ea(),[d,h]=(0,r.useState)(o),[m,p]=(0,r.useState)(n),[f,v]=(0,r.useState)(""),[g,y]=(0,r.useState)(""),_=(0,r.useMemo)((()=>{try{const e=JSON.parse(d),t=e.trace||e;return t.duration_msec?(new Il(t,""),""):pt.traceNotFound}catch(Fp){return Fp instanceof Error?Fp.message:"Unknown error"}}),[d]),b=()=>{y(_);m.trim()||v(pt.emptyTitle),_||f||(s(d,m),l())};return Nt("div",{className:Cr()({"vm-json-form":!0,"vm-json-form_one-field":!a,"vm-json-form_one-field_mobile":!a&&u,"vm-json-form_mobile":u}),children:[a&&Nt(Ya,{value:m,label:"Title",error:f,onEnter:b,onChange:e=>{p(e)}}),Nt(Ya,{value:d,label:"JSON",type:"textarea",error:g,autofocus:!0,onChange:e=>{y(""),h(e)},onEnter:b,disabled:!t}),Nt("div",{className:"vm-json-form-footer",children:[Nt("div",{className:"vm-json-form-footer__controls",children:[Nt(la,{variant:"outlined",startIcon:Nt(rr,{}),onClick:async()=>{await c(d,"Formatted JSON has been copied")},children:"Copy JSON"}),i&&Nt(la,{variant:"text",startIcon:Nt(Pn,{}),onClick:()=>{h(i)},children:"Reset JSON"})]}),Nt("div",{className:"vm-json-form-footer__controls vm-json-form-footer__controls_right",children:[Nt(la,{variant:"outlined",color:"error",onClick:l,children:"Cancel"}),Nt(la,{variant:"contained",onClick:b,children:"apply"})]})]})]})},Wl=e=>{let{traces:t,jsonEditor:n=!1,onDeleteClick:a}=e;const{isMobile:o}=ea(),[i,l]=(0,r.useState)(null),[s,c]=(0,r.useState)([]),u=()=>{l(null)};if(!t.length)return Nt(na,{variant:"info",children:"Please re-run the query to see results of the tracing"});const d=e=>()=>{a(e)},h=e=>()=>{l(e)},m=e=>()=>{const t=new Blob([e.originalJSON],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download="vmui_trace_".concat(e.queryValue,".json"),document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)};return Nt(Ct.FK,{children:[Nt("div",{className:"vm-tracings-view",children:t.map((e=>{return Nt("div",{className:"vm-tracings-view-trace vm-block vm-block_empty-padding",children:[Nt("div",{className:"vm-tracings-view-trace-header",children:[Nt("h3",{className:"vm-tracings-view-trace-header-title",children:["Trace for ",Nt("b",{className:"vm-tracings-view-trace-header-title__query",children:e.queryValue})]}),Nt(ya,{title:s.includes(e.idValue)?"Collapse All":"Expand All",children:Nt(la,{variant:"text",startIcon:s.includes(e.idValue)?Nt(kr,{}):Nt(wr,{}),onClick:(t=e,()=>{c((e=>e.includes(t.idValue)?e.filter((e=>e!==t.idValue)):[...e,t.idValue]))}),ariaLabel:s.includes(e.idValue)?"Collapse All":"Expand All"})}),Nt(ya,{title:"Save Trace to JSON",children:Nt(la,{variant:"text",startIcon:Nt(br,{}),onClick:m(e),ariaLabel:"Save trace to JSON"})}),Nt(ya,{title:"Open JSON",children:Nt(la,{variant:"text",startIcon:Nt(Qn,{}),onClick:h(e),ariaLabel:"open JSON"})}),Nt(ya,{title:"Remove trace",children:Nt(la,{variant:"text",color:"error",startIcon:Nt(Zn,{}),onClick:d(e),ariaLabel:"remove trace"})})]}),Nt("nav",{className:Cr()({"vm-tracings-view-trace__nav":!0,"vm-tracings-view-trace__nav_mobile":o}),children:Nt(ql,{isRoot:!0,trace:e,totalMsec:e.duration,isExpandedAll:s.includes(e.idValue)})})]},e.idValue);var t}))}),i&&Nt(ga,{title:i.queryValue,onClose:u,children:Nt(Yl,{editable:n,displayTitle:n,defaultTile:i.queryValue,defaultJson:i.JSON,resetValue:i.originalJSON,onClose:u,onUpload:(e,t)=>{if(n&&i)try{i.setTracing(JSON.parse(e)),i.setQuery(t),l(null)}catch(Fp){console.error(Fp)}}})})]})},Kl=e=>{let{traces:t,displayType:n}=e;const{isTracingEnabled:a}=Fr(),[o,i]=(0,r.useState)([]);return(0,r.useEffect)((()=>{t&&i([...o,...t])}),[t]),(0,r.useEffect)((()=>{i([])}),[n]),Nt(Ct.FK,{children:a&&Nt("div",{className:"vm-custom-panel__trace",children:Nt(Wl,{traces:o,onDeleteClick:e=>{const t=o.filter((t=>t.idValue!==e.idValue));i([...t])}})})})},Ql=e=>{let{warning:t,query:n,onChange:a}=e;const{isMobile:o}=ea(),{value:i,setTrue:l,setFalse:s}=ca(!1);return(0,r.useEffect)(s,[n]),(0,r.useEffect)((()=>{a(i)}),[i]),Nt(na,{variant:"warning",children:Nt("div",{className:Cr()({"vm-custom-panel__warning":!0,"vm-custom-panel__warning_mobile":o}),children:[Nt("p",{children:t}),Nt(la,{color:"warning",variant:"outlined",onClick:l,children:"Show all"})]})})},Zl="u-off",Gl="u-label",Jl="width",Xl="height",es="top",ts="bottom",ns="left",rs="right",as="#000",os=as+"0",is="mousemove",ls="mousedown",ss="mouseup",cs="mouseenter",us="mouseleave",ds="dblclick",hs="change",ms="dppxchange",ps="--",fs="undefined"!=typeof window,vs=fs?document:null,gs=fs?window:null,ys=fs?navigator:null;let _s,bs;function ws(e,t){if(null!=t){let n=e.classList;!n.contains(t)&&n.add(t)}}function ks(e,t){let n=e.classList;n.contains(t)&&n.remove(t)}function xs(e,t,n){e.style[t]=n+"px"}function Ss(e,t,n,r){let a=vs.createElement(e);return null!=t&&ws(a,t),null!=n&&n.insertBefore(a,r),a}function Cs(e,t){return Ss("div",e,t)}const Es=new WeakMap;function Ns(e,t,n,r,a){let o="translate("+t+"px,"+n+"px)";o!=Es.get(e)&&(e.style.transform=o,Es.set(e,o),t<0||n<0||t>r||n>a?ws(e,Zl):ks(e,Zl))}const As=new WeakMap;function Ms(e,t,n){let r=t+n;r!=As.get(e)&&(As.set(e,r),e.style.background=t,e.style.borderColor=n)}const Ts=new WeakMap;function Ls(e,t,n,r){let a=t+""+n;a!=Ts.get(e)&&(Ts.set(e,a),e.style.height=n+"px",e.style.width=t+"px",e.style.marginLeft=r?-t/2+"px":0,e.style.marginTop=r?-n/2+"px":0)}const Is={passive:!0},Ps={...Is,capture:!0};function Os(e,t,n,r){t.addEventListener(e,n,r?Ps:Is)}function Rs(e,t,n,r){t.removeEventListener(e,n,r?Ps:Is)}function Ds(e,t,n,r){let a;n=n||0;let o=(r=r||t.length-1)<=2147483647;for(;r-n>1;)a=o?n+r>>1:Js((n+r)/2),t[a]=t&&a<=n;a+=r)if(null!=e[a])return a;return-1}function Fs(e,t,n,r){let a=ac(e),o=ac(t);e==t&&(-1==a?(e*=n,t/=n):(e/=n,t*=n));let i=10==n?oc:ic,l=1==o?ec:Js,s=(1==a?Js:ec)(i(Gs(e))),c=l(i(Gs(t))),u=rc(n,s),d=rc(n,c);return 10==n&&(s<0&&(u=wc(u,-s)),c<0&&(d=wc(d,-c))),r||2==n?(e=u*a,t=d*o):(e=bc(e,u),t=_c(t,d)),[e,t]}function js(e,t,n,r){let a=Fs(e,t,n,r);return 0==e&&(a[0]=0),0==t&&(a[1]=0),a}fs&&function e(){let t=devicePixelRatio;_s!=t&&(_s=t,bs&&Rs(hs,bs,e),bs=matchMedia("(min-resolution: ".concat(_s-.001,"dppx) and (max-resolution: ").concat(_s+.001,"dppx)")),Os(hs,bs,e),gs.dispatchEvent(new CustomEvent(ms)))}();const Hs=.1,Vs={mode:3,pad:Hs},$s={pad:0,soft:null,mode:0},Us={min:$s,max:$s};function Bs(e,t,n,r){return Lc(n)?Ys(e,t,n):($s.pad=n,$s.soft=r?0:null,$s.mode=r?3:0,Ys(e,t,Us))}function qs(e,t){return null==e?t:e}function Ys(e,t,n){let r=n.min,a=n.max,o=qs(r.pad,0),i=qs(a.pad,0),l=qs(r.hard,-sc),s=qs(a.hard,sc),c=qs(r.soft,sc),u=qs(a.soft,-sc),d=qs(r.mode,0),h=qs(a.mode,0),m=t-e,p=oc(m),f=nc(Gs(e),Gs(t)),v=oc(f),g=Gs(v-p);(m<1e-9||g>10)&&(m=0,0!=e&&0!=t||(m=1e-9,2==d&&c!=sc&&(o=0),2==h&&u!=-sc&&(i=0)));let y=m||f||1e3,_=oc(y),b=rc(10,Js(_)),w=wc(bc(e-y*(0==m?0==e?.1:1:o),b/10),9),k=e>=c&&(1==d||3==d&&w<=c||2==d&&w>=c)?c:sc,x=nc(l,w=k?k:tc(k,w)),S=wc(_c(t+y*(0==m?0==t?.1:1:i),b/10),9),C=t<=u&&(1==h||3==h&&S>=u||2==h&&S<=u)?u:-sc,E=tc(s,S>C&&t<=C?C:nc(C,S));return x==E&&0==x&&(E=100),[x,E]}const Ws=new Intl.NumberFormat(fs?ys.language:"en-US"),Ks=e=>Ws.format(e),Qs=Math,Zs=Qs.PI,Gs=Qs.abs,Js=Qs.floor,Xs=Qs.round,ec=Qs.ceil,tc=Qs.min,nc=Qs.max,rc=Qs.pow,ac=Qs.sign,oc=Qs.log10,ic=Qs.log2,lc=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Qs.asinh(e/t)},sc=1/0;function cc(e){return 1+(0|oc((e^e>>31)-(e>>31)))}function uc(e,t,n){return tc(nc(e,t),n)}function dc(e){return"function"==typeof e?e:()=>e}const hc=e=>e,mc=(e,t)=>t,pc=e=>null,fc=e=>!0,vc=(e,t)=>e==t,gc=e=>wc(e,14);function yc(e,t){return gc(wc(gc(e/t))*t)}function _c(e,t){return gc(ec(gc(e/t))*t)}function bc(e,t){return gc(Js(gc(e/t))*t)}function wc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(Mc(e))return e;let n=10**t,r=e*n*(1+Number.EPSILON);return Xs(r)/n}const kc=new Map;function xc(e){return((""+e).split(".")[1]||"").length}function Sc(e,t,n,r){let a=[],o=r.map(xc);for(let i=t;i=0&&i>=0?0:t)+(i>=o[e]?0:o[e]),c=wc(l,s);a.push(c),kc.set(c,s)}}return a}const Cc={},Ec=[],Nc=[null,null],Ac=Array.isArray,Mc=Number.isInteger;function Tc(e){return"string"==typeof e}function Lc(e){let t=!1;if(null!=e){let n=e.constructor;t=null==n||n==Object}return t}function Ic(e){return null!=e&&"object"==typeof e}const Pc=Object.getPrototypeOf(Uint8Array);function Oc(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Lc;if(Ac(e)){let r=e.find((e=>null!=e));if(Ac(r)||n(r)){t=Array(e.length);for(let r=0;ro){for(r=i-1;r>=0&&null==e[r];)e[r--]=null;for(r=i+1;rPromise.resolve().then(e):queueMicrotask;const Fc=["January","February","March","April","May","June","July","August","September","October","November","December"],jc=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function Hc(e){return e.slice(0,3)}const Vc=jc.map(Hc),$c=Fc.map(Hc),Uc={MMMM:Fc,MMM:$c,WWWW:jc,WWW:Vc};function Bc(e){return(e<10?"0":"")+e}const qc={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+"").slice(2),MMMM:(e,t)=>t.MMMM[e.getMonth()],MMM:(e,t)=>t.MMM[e.getMonth()],MM:e=>Bc(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>Bc(e.getDate()),D:e=>e.getDate(),WWWW:(e,t)=>t.WWWW[e.getDay()],WWW:(e,t)=>t.WWW[e.getDay()],HH:e=>Bc(e.getHours()),H:e=>e.getHours(),h:e=>{let t=e.getHours();return 0==t?12:t>12?t-12:t},AA:e=>e.getHours()>=12?"PM":"AM",aa:e=>e.getHours()>=12?"pm":"am",a:e=>e.getHours()>=12?"p":"a",mm:e=>Bc(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>Bc(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>{return((t=e.getMilliseconds())<10?"00":t<100?"0":"")+t;var t}};function Yc(e,t){t=t||Uc;let n,r=[],a=/\{([a-z]+)\}|[^{]+/gi;for(;n=a.exec(e);)r.push("{"==n[0][0]?qc[n[1]]:n[0]);return e=>{let n="";for(let a=0;ae%1==0,Qc=[1,2,2.5,5],Zc=Sc(10,-16,0,Qc),Gc=Sc(10,0,16,Qc),Jc=Gc.filter(Kc),Xc=Zc.concat(Gc),eu="{YYYY}",tu="\n"+eu,nu="{M}/{D}",ru="\n"+nu,au=ru+"/{YY}",ou="{aa}",iu="{h}:{mm}"+ou,lu="\n"+iu,su=":{ss}",cu=null;function uu(e){let t=1e3*e,n=60*t,r=60*n,a=24*r,o=30*a,i=365*a;return[(1==e?Sc(10,0,3,Qc).filter(Kc):Sc(10,-3,0,Qc)).concat([t,5*t,10*t,15*t,30*t,n,5*n,10*n,15*n,30*n,r,2*r,3*r,4*r,6*r,8*r,12*r,a,2*a,3*a,4*a,5*a,6*a,7*a,8*a,9*a,10*a,15*a,o,2*o,3*o,4*o,6*o,i,2*i,5*i,10*i,25*i,50*i,100*i]),[[i,eu,cu,cu,cu,cu,cu,cu,1],[28*a,"{MMM}",tu,cu,cu,cu,cu,cu,1],[a,nu,tu,cu,cu,cu,cu,cu,1],[r,"{h}"+ou,au,cu,ru,cu,cu,cu,1],[n,iu,au,cu,ru,cu,cu,cu,1],[t,su,au+" "+iu,cu,ru+" "+iu,cu,lu,cu,1],[e,su+".{fff}",au+" "+iu,cu,ru+" "+iu,cu,lu,cu,1]],function(t){return(l,s,c,u,d,h)=>{let m=[],p=d>=i,f=d>=o&&d=a?a:d,i=_+(Js(c)-Js(g))+_c(g-_,o);m.push(i);let p=t(i),f=p.getHours()+p.getMinutes()/n+p.getSeconds()/r,v=d/r,y=h/l.axes[s]._space;for(;i=wc(i+d,1==e?0:3),!(i>u);)if(v>1){let e=Js(wc(f+v,6))%24,n=t(i).getHours()-e;n>1&&(n=-1),i-=n*r,f=(f+v)%24,wc((i-m[m.length-1])/d,3)*y>=.7&&m.push(i)}else m.push(i)}return m}}]}const[du,hu,mu]=uu(1),[pu,fu,vu]=uu(.001);function gu(e,t){return e.map((e=>e.map(((n,r)=>0==r||8==r||null==n?n:t(1==r||0==e[8]?n:e[1]+n)))))}function yu(e,t){return(n,r,a,o,i)=>{let l,s,c,u,d,h,m=t.find((e=>i>=e[0]))||t[t.length-1];return r.map((t=>{let n=e(t),r=n.getFullYear(),a=n.getMonth(),o=n.getDate(),i=n.getHours(),p=n.getMinutes(),f=n.getSeconds(),v=r!=l&&m[2]||a!=s&&m[3]||o!=c&&m[4]||i!=u&&m[5]||p!=d&&m[6]||f!=h&&m[7]||m[1];return l=r,s=a,c=o,u=i,d=p,h=f,v(n)}))}}function _u(e,t,n){return new Date(e,t,n)}function bu(e,t){return t(e)}Sc(2,-53,53,[1]);function wu(e,t){return(n,r,a,o)=>null==o?ps:t(e(r))}const ku={show:!0,live:!0,isolate:!1,mount:()=>{},markers:{show:!0,width:2,stroke:function(e,t){let n=e.series[t];return n.width?n.stroke(e,t):n.points.width?n.points.stroke(e,t):null},fill:function(e,t){return e.series[t].fill(e,t)},dash:"solid"},idx:null,idxs:null,values:[]};const xu=[0,0];function Su(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{0==e.button&&(!r||e.target==t)&&n(e)}}function Cu(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return e=>{(!r||e.target==t)&&n(e)}}const Eu={show:!0,x:!0,y:!0,lock:!1,move:function(e,t,n){return xu[0]=t,xu[1]=n,xu},points:{show:function(e,t){let n=e.cursor.points,r=Cs(),a=n.size(e,t);xs(r,Jl,a),xs(r,Xl,a);let o=a/-2;xs(r,"marginLeft",o),xs(r,"marginTop",o);let i=n.width(e,t,a);return i&&xs(r,"borderWidth",i),r},size:function(e,t){return e.series[t].points.size},width:0,stroke:function(e,t){let n=e.series[t].points;return n._stroke||n._fill},fill:function(e,t){let n=e.series[t].points;return n._fill||n._stroke}},bind:{mousedown:Su,mouseup:Su,click:Su,dblclick:Su,mousemove:Cu,mouseleave:Cu,mouseenter:Cu},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,t)=>{t.stopPropagation(),t.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,t,n,r,a)=>r-a,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},Nu={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},Au=Rc({},Nu,{filter:mc}),Mu=Rc({},Au,{size:10}),Tu=Rc({},Nu,{show:!1}),Lu='12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',Iu="bold "+Lu,Pu={show:!0,scale:"x",stroke:as,space:50,gap:5,size:50,labelGap:0,labelSize:30,labelFont:Iu,side:2,grid:Au,ticks:Mu,border:Tu,font:Lu,lineGap:1.5,rotate:0},Ou={show:!0,scale:"x",auto:!1,sorted:1,min:sc,max:-sc,idxs:[]};function Ru(e,t,n,r,a){return t.map((e=>null==e?"":Ks(e)))}function Du(e,t,n,r,a,o,i){let l=[],s=kc.get(a)||0;for(let c=n=i?n:wc(_c(n,a),s);c<=r;c=wc(c+a,s))l.push(Object.is(c,-0)?0:c);return l}function zu(e,t,n,r,a,o,i){const l=[],s=e.scales[e.axes[t].scale].log,c=Js((10==s?oc:ic)(n));a=rc(s,c),10==s&&c<0&&(a=wc(a,-c));let u=n;do{l.push(u),u+=a,10==s&&(u=wc(u,kc.get(a))),u>=a*s&&(a=u)}while(u<=r);return l}function Fu(e,t,n,r,a,o,i){let l=e.scales[e.axes[t].scale].asinh,s=r>l?zu(e,t,nc(l,n),r,a):[l],c=r>=0&&n<=0?[0]:[];return(n<-l?zu(e,t,nc(l,-r),-n,a):[l]).reverse().map((e=>-e)).concat(c,s)}const ju=/./,Hu=/[12357]/,Vu=/[125]/,$u=/1/,Uu=(e,t,n,r)=>e.map(((e,a)=>4==t&&0==e||a%r==0&&n.test(e.toExponential()[e<0?1:0])?e:null));function Bu(e,t,n,r,a){let o=e.axes[n],i=o.scale,l=e.scales[i],s=e.valToPos,c=o._space,u=s(10,i),d=s(9,i)-u>=c?ju:s(7,i)-u>=c?Hu:s(5,i)-u>=c?Vu:$u;if(d==$u){let e=Gs(s(1,i)-u);if(ea,Zu={show:!0,auto:!0,sorted:0,gaps:Qu,alpha:1,facets:[Rc({},Ku,{scale:"x"}),Rc({},Ku,{scale:"y"})]},Gu={scale:"y",auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:Qu,alpha:1,points:{show:function(e,t){let{scale:n,idxs:r}=e.series[0],a=e._data[0],o=e.valToPos(a[r[0]],n,!0),i=e.valToPos(a[r[1]],n,!0),l=Gs(i-o)/(e.series[t].points.space*_s);return r[1]-r[0]<=l},filter:null},values:null,min:sc,max:-sc,idxs:[],path:null,clip:null};function Ju(e,t,n,r,a){return n/10}const Xu={time:!0,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},ed=Rc({},Xu,{time:!1,ori:1}),td={};function nd(e,t){let n=td[e];return n||(n={key:e,plots:[],sub(e){n.plots.push(e)},unsub(e){n.plots=n.plots.filter((t=>t!=e))},pub(e,t,r,a,o,i,l){for(let s=0;s{let f=e.pxRound;const v=l.dir*(0==l.ori?1:-1),g=0==l.ori?pd:fd;let y,_;1==v?(y=n,_=r):(y=r,_=n);let b=f(c(t[y],l,m,d)),w=f(u(i[y],s,p,h)),k=f(c(t[_],l,m,d)),x=f(u(1==o?s.max:s.min,s,p,h)),S=new Path2D(a);return g(S,k,x),g(S,b,x),g(S,b,w),S}))}function sd(e,t,n,r,a,o){let i=null;if(e.length>0){i=new Path2D;const l=0==t?vd:gd;let s=n;for(let t=0;tn[0]){let e=n[0]-s;e>0&&l(i,s,r,e,r+o),s=n[1]}}let c=n+a-s,u=10;c>0&&l(i,s,r-u/2,c,r+o+u)}return i}function cd(e,t,n,r,a,o,i){let l=[],s=e.length;for(let c=1==a?n:r;c>=n&&c<=r;c+=a){if(null===t[c]){let u=c,d=c;if(1==a)for(;++c<=r&&null===t[c];)d=c;else for(;--c>=n&&null===t[c];)d=c;let h=o(e[u]),m=d==u?h:o(e[d]),p=u-a;h=i<=0&&p>=0&&p=0&&f>=0&&f=h&&l.push([h,m])}}return l}function ud(e){return 0==e?hc:1==e?Xs:t=>yc(t,e)}function dd(e){let t=0==e?hd:md,n=0==e?(e,t,n,r,a,o)=>{e.arcTo(t,n,r,a,o)}:(e,t,n,r,a,o)=>{e.arcTo(n,t,a,r,o)},r=0==e?(e,t,n,r,a)=>{e.rect(t,n,r,a)}:(e,t,n,r,a)=>{e.rect(n,t,a,r)};return function(e,a,o,i,l){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0;0==s&&0==c?r(e,a,o,i,l):(s=tc(s,i/2,l/2),c=tc(c,i/2,l/2),t(e,a+s,o),n(e,a+i,o,a+i,o+l,s),n(e,a+i,o+l,a,o+l,c),n(e,a,o+l,a,o,c),n(e,a,o,a+i,o,s),e.closePath())}}const hd=(e,t,n)=>{e.moveTo(t,n)},md=(e,t,n)=>{e.moveTo(n,t)},pd=(e,t,n)=>{e.lineTo(t,n)},fd=(e,t,n)=>{e.lineTo(n,t)},vd=dd(0),gd=dd(1),yd=(e,t,n,r,a,o)=>{e.arc(t,n,r,a,o)},_d=(e,t,n,r,a,o)=>{e.arc(n,t,r,a,o)},bd=(e,t,n,r,a,o,i)=>{e.bezierCurveTo(t,n,r,a,o,i)},wd=(e,t,n,r,a,o,i)=>{e.bezierCurveTo(n,t,a,r,i,o)};function kd(e){return(e,t,n,r,a)=>ad(e,t,((t,o,i,l,s,c,u,d,h,m,p)=>{let f,v,{pxRound:g,points:y}=t;0==l.ori?(f=hd,v=yd):(f=md,v=_d);const _=wc(y.width*_s,3);let b=(y.size-y.width)/2*_s,w=wc(2*b,3),k=new Path2D,x=new Path2D,{left:S,top:C,width:E,height:N}=e.bbox;vd(x,S-w,C-w,E+2*w,N+2*w);const A=e=>{if(null!=i[e]){let t=g(c(o[e],l,m,d)),n=g(u(i[e],s,p,h));f(k,t+b,n),v(k,t,n,b,0,2*Zs)}};if(a)a.forEach(A);else for(let e=n;e<=r;e++)A(e);return{stroke:_>0?k:null,fill:k,clip:x,flags:2|rd}}))}function xd(e){return(t,n,r,a,o,i)=>{r!=a&&(o!=r&&i!=r&&e(t,n,r),o!=a&&i!=a&&e(t,n,a),e(t,n,i))}}const Sd=xd(pd),Cd=xd(fd);function Ed(e){const t=qs(null===e||void 0===e?void 0:e.alignGaps,0);return(e,n,r,a)=>ad(e,n,((o,i,l,s,c,u,d,h,m,p,f)=>{let v,g,y=o.pxRound,_=e=>y(u(e,s,p,h)),b=e=>y(d(e,c,f,m));0==s.ori?(v=pd,g=Sd):(v=fd,g=Cd);const w=s.dir*(0==s.ori?1:-1),k={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:rd},x=k.stroke;let S,C,E,N=sc,A=-sc,M=_(i[1==w?r:a]),T=zs(l,r,a,1*w),L=zs(l,r,a,-1*w),I=_(i[T]),P=_(i[L]),O=!1;for(let e=1==w?r:a;e>=r&&e<=a;e+=w){let t=_(i[e]),n=l[e];t==M?null!=n?(C=b(n),N==sc&&(v(x,t,C),S=C),N=tc(C,N),A=nc(C,A)):null===n&&(O=!0):(N!=sc&&(g(x,M,N,A,S,C),E=M),null!=n?(C=b(n),v(x,t,C),N=A=S=C):(N=sc,A=-sc,null===n&&(O=!0)),M=t)}N!=sc&&N!=A&&E!=M&&g(x,M,N,A,S,C);let[R,D]=od(e,n);if(null!=o.fill||0!=R){let t=k.fill=new Path2D(x),r=b(o.fillTo(e,n,o.min,o.max,R));v(t,P,r),v(t,I,r)}if(!o.spanGaps){let c=[];O&&c.push(...cd(i,l,r,a,w,_,t)),k.gaps=c=o.gaps(e,n,r,a,c),k.clip=sd(c,s.ori,h,m,p,f)}return 0!=D&&(k.band=2==D?[ld(e,n,r,a,x,-1),ld(e,n,r,a,x,1)]:ld(e,n,r,a,x,D)),k}))}function Nd(e,t,n,r,a,o){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:sc;if(e.length>1){let l=null;for(let s=0,c=1/0;s0!==r[e]>0?n[e]=0:(n[e]=3*(s[e-1]+s[e])/((2*s[e]+s[e-1])/r[e-1]+(s[e]+2*s[e-1])/r[e]),isFinite(n[e])||(n[e]=0));n[i-1]=r[i-2];for(let c=0;c{qd.pxRatio=_s})));const Ld=Ed(),Id=kd();function Pd(e,t,n,r){return(r?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map(((e,r)=>Od(e,r,t,n)))}function Od(e,t,n,r){return Rc({},0==t?n:r,e)}function Rd(e,t,n){return null==t?Nc:[t,n]}const Dd=Rd;function zd(e,t,n){return null==t?Nc:Bs(t,n,Hs,!0)}function Fd(e,t,n,r){return null==t?Nc:Fs(t,n,e.scales[r].log,!1)}const jd=Fd;function Hd(e,t,n,r){return null==t?Nc:js(t,n,e.scales[r].log,!1)}const Vd=Hd;function $d(e,t,n,r,a){let o=nc(cc(e),cc(t)),i=t-e,l=Ds(a/r*i,n);do{let e=n[l],t=r*e/i;if(t>=a&&o+(e<5?kc.get(e):0)<=17)return[e,t]}while(++l(t=Xs((n=+r)*_s))+"px")),t,n]}function Bd(e){e.show&&[e.font,e.labelFont].forEach((e=>{let t=wc(e[2]*_s,1);e[0]=e[0].replace(/[0-9.]+px/,t+"px"),e[1]=t}))}function qd(e,t,n){const r={mode:qs(e.mode,1)},a=r.mode;function o(e,t){return((3==t.distr?oc(e>0?e:t.clamp(r,e,t.min,t.max,t.key)):4==t.distr?lc(e,t.asinh):e)-t._min)/(t._max-t._min)}function i(e,t,n,r){let a=o(e,t);return r+n*(-1==t.dir?1-a:a)}function l(e,t,n,r){let a=o(e,t);return r+n*(-1==t.dir?a:1-a)}function s(e,t,n,r){return 0==t.ori?i(e,t,n,r):l(e,t,n,r)}r.valToPosH=i,r.valToPosV=l;let c=!1;r.status=0;const u=r.root=Cs("uplot");if(null!=e.id&&(u.id=e.id),ws(u,e.class),e.title){Cs("u-title",u).textContent=e.title}const d=Ss("canvas"),h=r.ctx=d.getContext("2d"),m=Cs("u-wrap",u);Os("click",m,(e=>{if(e.target===f){(Mt!=Ct||Tt!=Et)&&jt.click(r,e)}}),!0);const p=r.under=Cs("u-under",m);m.appendChild(d);const f=r.over=Cs("u-over",m),v=+qs((e=Oc(e)).pxAlign,1),g=ud(v);(e.plugins||[]).forEach((t=>{t.opts&&(e=t.opts(r,e)||e)}));const y=e.ms||.001,_=r.series=1==a?Pd(e.series||[],Ou,Gu,!1):(b=e.series||[null],w=Zu,b.map(((e,t)=>0==t?null:Rc({},w,e))));var b,w;const k=r.axes=Pd(e.axes||[],Pu,Wu,!0),x=r.scales={},S=r.bands=e.bands||[];S.forEach((e=>{e.fill=dc(e.fill||null),e.dir=qs(e.dir,-1)}));const C=2==a?_[1].facets[0].scale:_[0].scale,E={axes:function(){for(let e=0;ett[e])):y,b=2==m.distr?tt[y[1]]-tt[y[0]]:u,w=t.ticks,S=t.border,C=w.show?Xs(w.size*_s):0,E=t._rotate*-Zs/180,N=g(t._pos*_s),A=N+(C+v)*c;a=0==i?A:0,n=1==i?A:0,it(t.font[0],l,1==t.align?ns:2==t.align?rs:E>0?ns:E<0?rs:0==i?"center":3==o?rs:ns,E||1==i?"middle":2==o?es:ts);let M=t.font[1]*t.lineGap,T=y.map((e=>g(s(e,m,p,f)))),L=t._values;for(let e=0;e0&&(_.forEach(((e,n)=>{if(n>0&&e.show&&(ct(n,!1),ct(n,!0),null==e._paths)){et!=e.alpha&&(h.globalAlpha=et=e.alpha);let o=2==a?[0,t[n][0].length-1]:function(e){let t=uc($e-1,0,Ve-1),n=uc(Ue+1,0,Ve-1);for(;null==e[t]&&t>0;)t--;for(;null==e[n]&&n{if(t>0&&e.show){et!=e.alpha&&(h.globalAlpha=et=e.alpha),null!=e._paths&&ut(t,!1);{let n=null!=e._paths?e._paths.gaps:null,a=e.points.show(r,t,$e,Ue,n),o=e.points.filter(r,t,a,n);(a||o)&&(e.points._paths=e.points.paths(r,t,$e,Ue,o),ut(t,!0))}1!=et&&(h.globalAlpha=et=1),kn("drawSeries",t)}})))}},N=(e.drawOrder||["axes","series"]).map((e=>E[e]));function A(t){let n=x[t];if(null==n){let r=(e.scales||Cc)[t]||Cc;if(null!=r.from)A(r.from),x[t]=Rc({},x[r.from],r,{key:t});else{n=x[t]=Rc({},t==C?Xu:ed,r),n.key=t;let e=n.time,o=n.range,i=Ac(o);if((t!=C||2==a&&!e)&&(!i||null!=o[0]&&null!=o[1]||(o={min:null==o[0]?Vs:{mode:1,hard:o[0],soft:o[0]},max:null==o[1]?Vs:{mode:1,hard:o[1],soft:o[1]}},i=!1),!i&&Lc(o))){let e=o;o=(t,n,r)=>null==n?Nc:Bs(n,r,e)}n.range=dc(o||(e?Dd:t==C?3==n.distr?jd:4==n.distr?Vd:Rd:3==n.distr?Fd:4==n.distr?Hd:zd)),n.auto=dc(!i&&n.auto),n.clamp=dc(n.clamp||Ju),n._min=n._max=null}}}A("x"),A("y"),1==a&&_.forEach((e=>{A(e.scale)})),k.forEach((e=>{A(e.scale)}));for(let Mn in e.scales)A(Mn);const M=x[C],T=M.distr;let L,I;0==M.ori?(ws(u,"u-hz"),L=i,I=l):(ws(u,"u-vt"),L=l,I=i);const P={};for(let Mn in x){let e=x[Mn];null==e.min&&null==e.max||(P[Mn]={min:e.min,max:e.max},e.min=e.max=null)}const O=e.tzDate||(e=>new Date(Xs(e/y))),R=e.fmtDate||Yc,D=1==y?mu(O):vu(O),z=yu(O,gu(1==y?hu:fu,R)),F=wu(O,bu("{YYYY}-{MM}-{DD} {h}:{mm}{aa}",R)),j=[],H=r.legend=Rc({},ku,e.legend),V=H.show,$=H.markers;let U,B,q;H.idxs=j,$.width=dc($.width),$.dash=dc($.dash),$.stroke=dc($.stroke),$.fill=dc($.fill);let Y,W=[],K=[],Q=!1,Z={};if(H.live){const e=_[1]?_[1].values:null;Q=null!=e,Y=Q?e(r,1,0):{_:0};for(let t in Y)Z[t]=ps}if(V)if(U=Ss("table","u-legend",u),q=Ss("tbody",null,U),H.mount(r,U),Q){B=Ss("thead",null,U,q);let e=Ss("tr",null,B);for(var G in Ss("th",null,e),Y)Ss("th",Gl,e).textContent=G}else ws(U,"u-inline"),H.live&&ws(U,"u-live");const J={show:!0},X={show:!1};const ee=new Map;function te(e,t,n){let a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const o=ee.get(t)||{},i=Ee.bind[e](r,t,n,a);i&&(Os(e,t,o[e]=i),ee.set(t,o))}function ne(e,t,n){const r=ee.get(t)||{};for(let a in r)null!=e&&a!=e||(Rs(a,t,r[a]),delete r[a]);null==e&&ee.delete(t)}let re=0,ae=0,oe=0,ie=0,le=0,se=0,ce=le,ue=se,de=oe,he=ie,me=0,pe=0,fe=0,ve=0;r.bbox={};let ge=!1,ye=!1,_e=!1,be=!1,we=!1,ke=!1;function xe(e,t,n){(n||e!=r.width||t!=r.height)&&Se(e,t),yt(!1),_e=!0,ye=!0,Rt()}function Se(e,t){r.width=re=oe=e,r.height=ae=ie=t,le=se=0,function(){let e=!1,t=!1,n=!1,r=!1;k.forEach(((a,o)=>{if(a.show&&a._show){let{side:o,_size:i}=a,l=o%2,s=i+(null!=a.label?a.labelSize:0);s>0&&(l?(oe-=s,3==o?(le+=s,r=!0):n=!0):(ie-=s,0==o?(se+=s,e=!0):t=!0))}})),ze[0]=e,ze[1]=n,ze[2]=t,ze[3]=r,oe-=He[1]+He[3],le+=He[3],ie-=He[2]+He[0],se+=He[0]}(),function(){let e=le+oe,t=se+ie,n=le,r=se;function a(a,o){switch(a){case 1:return e+=o,e-o;case 2:return t+=o,t-o;case 3:return n-=o,n+o;case 0:return r-=o,r+o}}k.forEach(((e,t)=>{if(e.show&&e._show){let t=e.side;e._pos=a(t,e._size),null!=e.label&&(e._lpos=a(t,e.labelSize))}}))}();let n=r.bbox;me=n.left=yc(le*_s,.5),pe=n.top=yc(se*_s,.5),fe=n.width=yc(oe*_s,.5),ve=n.height=yc(ie*_s,.5)}const Ce=3;r.setSize=function(e){let{width:t,height:n}=e;xe(t,n)};const Ee=r.cursor=Rc({},Eu,{drag:{y:2==a}},e.cursor);if(null==Ee.dataIdx){var Ne,Ae;let e=Ee.hover,n=e.skip=new Set(null!==(Ne=e.skip)&&void 0!==Ne?Ne:[]);n.add(void 0);let r=e.prox=dc(e.prox),a=null!==(Ae=e.bias)&&void 0!==Ae?Ae:e.bias=0;Ee.dataIdx=(e,o,i,l)=>{var s;if(0==o)return i;let c=i,u=null!==(s=r(e,o,i,l))&&void 0!==s?s:sc,d=u>=0&&u0;)n.has(f[e])||(t=e);if(0==a||1==a)for(e=i;null==r&&e++u&&(c=null)}return c}}const Me=e=>{Ee.event=e};Ee.idxs=j,Ee._lock=!1;let Te=Ee.points;Te.show=dc(Te.show),Te.size=dc(Te.size),Te.stroke=dc(Te.stroke),Te.width=dc(Te.width),Te.fill=dc(Te.fill);const Le=r.focus=Rc({},e.focus||{alpha:.3},Ee.focus),Ie=Le.prox>=0;let Pe=[null],Oe=[null],Re=[null];function De(e,t){if(1==a||t>0){let t=1==a&&x[e.scale].time,n=e.value;e.value=t?Tc(n)?wu(O,bu(n,R)):n||F:n||Yu,e.label=e.label||(t?"Time":"Value")}if(t>0){e.width=null==e.width?1:e.width,e.paths=e.paths||Ld||pc,e.fillTo=dc(e.fillTo||id),e.pxAlign=+qs(e.pxAlign,v),e.pxRound=ud(e.pxAlign),e.stroke=dc(e.stroke||null),e.fill=dc(e.fill||null),e._stroke=e._fill=e._paths=e._focus=null;let t=wc((3+2*(nc(1,e.width)||1))*1,3),n=e.points=Rc({},{size:t,width:nc(1,.2*t),stroke:e.stroke,space:2*t,paths:Id,_stroke:null,_fill:null},e.points);n.show=dc(n.show),n.filter=dc(n.filter),n.fill=dc(n.fill),n.stroke=dc(n.stroke),n.paths=dc(n.paths),n.pxAlign=e.pxAlign}if(V){let n=function(e,t){if(0==t&&(Q||!H.live||2==a))return Nc;let n=[],o=Ss("tr","u-series",q,q.childNodes[t]);ws(o,e.class),e.show||ws(o,Zl);let i=Ss("th",null,o);if($.show){let e=Cs("u-marker",i);if(t>0){let n=$.width(r,t);n&&(e.style.border=n+"px "+$.dash(r,t)+" "+$.stroke(r,t)),e.style.background=$.fill(r,t)}}let l=Cs(Gl,i);for(var s in l.textContent=e.label,t>0&&($.show||(l.style.color=e.width>0?$.stroke(r,t):$.fill(r,t)),te("click",i,(t=>{if(Ee._lock)return;Me(t);let n=_.indexOf(e);if((t.ctrlKey||t.metaKey)!=H.isolate){let e=_.some(((e,t)=>t>0&&t!=n&&e.show));_.forEach(((t,r)=>{r>0&&Yt(r,e?r==n?J:X:J,!0,Sn.setSeries)}))}else Yt(n,{show:!e.show},!0,Sn.setSeries)}),!1),Ie&&te(cs,i,(t=>{Ee._lock||(Me(t),Yt(_.indexOf(e),Zt,!0,Sn.setSeries))}),!1)),Y){let e=Ss("td","u-value",o);e.textContent="--",n.push(e)}return[o,n]}(e,t);W.splice(t,0,n[0]),K.splice(t,0,n[1]),H.values.push(null)}if(Ee.show){j.splice(t,0,null);let n=function(e,t){if(t>0){let n=Ee.points.show(r,t);if(n)return ws(n,"u-cursor-pt"),ws(n,e.class),Ns(n,-10,-10,oe,ie),f.insertBefore(n,Pe[t]),n}}(e,t);null!=n&&(Pe.splice(t,0,n),Oe.splice(t,0,0),Re.splice(t,0,0))}kn("addSeries",t)}r.addSeries=function(e,t){t=null==t?_.length:t,e=1==a?Od(e,t,Ou,Gu):Od(e,t,null,Zu),_.splice(t,0,e),De(_[t],t)},r.delSeries=function(e){if(_.splice(e,1),V){H.values.splice(e,1),K.splice(e,1);let t=W.splice(e,1)[0];ne(null,t.firstChild),t.remove()}Ee.show&&(j.splice(e,1),Pe.length>1&&(Pe.splice(e,1)[0].remove(),Oe.splice(e,1),Re.splice(e,1))),kn("delSeries",e)};const ze=[!1,!1,!1,!1];function Fe(e,t,n,r){let[a,o,i,l]=n,s=t%2,c=0;return 0==s&&(l||o)&&(c=0==t&&!a||2==t&&!i?Xs(Pu.size/3):0),1==s&&(a||i)&&(c=1==t&&!o||3==t&&!l?Xs(Wu.size/2):0),c}const je=r.padding=(e.padding||[Fe,Fe,Fe,Fe]).map((e=>dc(qs(e,Fe)))),He=r._padding=je.map(((e,t)=>e(r,t,ze,0)));let Ve,$e=null,Ue=null;const Be=1==a?_[0].idxs:null;let qe,Ye,We,Ke,Qe,Ze,Ge,Je,Xe,et,tt=null,nt=!1;function rt(e,n){if(t=null==e?[]:e,r.data=r._data=t,2==a){Ve=0;for(let e=1;e<_.length;e++)Ve+=t[e][0].length}else{0==t.length&&(r.data=r._data=t=[[]]),tt=t[0],Ve=tt.length;let e=t;if(2==T){e=t.slice();let n=e[0]=Array(Ve);for(let e=0;e=0,ke=!0,Rt()}}function at(){let e,n;nt=!0,1==a&&(Ve>0?($e=Be[0]=0,Ue=Be[1]=Ve-1,e=t[0][$e],n=t[0][Ue],2==T?(e=$e,n=Ue):e==n&&(3==T?[e,n]=Fs(e,e,M.log,!1):4==T?[e,n]=js(e,e,M.log,!1):M.time?n=e+Xs(86400/y):[e,n]=Bs(e,n,Hs,!0))):($e=Be[0]=e=null,Ue=Be[1]=n=null)),qt(C,e,n)}function ot(e,t,n,r,a,o){var i,l,s,c,u;null!==(i=e)&&void 0!==i||(e=os),null!==(l=n)&&void 0!==l||(n=Ec),null!==(s=r)&&void 0!==s||(r="butt"),null!==(c=a)&&void 0!==c||(a=os),null!==(u=o)&&void 0!==u||(o="round"),e!=qe&&(h.strokeStyle=qe=e),a!=Ye&&(h.fillStyle=Ye=a),t!=We&&(h.lineWidth=We=t),o!=Qe&&(h.lineJoin=Qe=o),r!=Ze&&(h.lineCap=Ze=r),n!=Ke&&h.setLineDash(Ke=n)}function it(e,t,n,r){t!=Ye&&(h.fillStyle=Ye=t),e!=Ge&&(h.font=Ge=e),n!=Je&&(h.textAlign=Je=n),r!=Xe&&(h.textBaseline=Xe=r)}function lt(e,t,n,a){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(a.length>0&&e.auto(r,nt)&&(null==t||null==t.min)){let t=qs($e,0),r=qs(Ue,a.length-1),i=null==n.min?3==e.distr?function(e,t,n){let r=sc,a=-sc;for(let o=t;o<=n;o++){let t=e[o];null!=t&&t>0&&(ta&&(a=t))}return[r,a]}(a,t,r):function(e,t,n,r){let a=sc,o=-sc;if(1==r)a=e[t],o=e[n];else if(-1==r)a=e[n],o=e[t];else for(let i=t;i<=n;i++){let t=e[i];null!=t&&(to&&(o=t))}return[a,o]}(a,t,r,o):[n.min,n.max];e.min=tc(e.min,n.min=i[0]),e.max=nc(e.max,n.max=i[1])}}r.setData=rt;const st={min:null,max:null};function ct(e,t){let n=t?_[e].points:_[e];n._stroke=n.stroke(r,e),n._fill=n.fill(r,e)}function ut(e,n){let a=n?_[e].points:_[e],{stroke:o,fill:i,clip:l,flags:s,_stroke:c=a._stroke,_fill:u=a._fill,_width:d=a.width}=a._paths;d=wc(d*_s,3);let m=null,p=d%2/2;n&&null==u&&(u=d>0?"#fff":c);let f=1==a.pxAlign&&p>0;if(f&&h.translate(p,p),!n){let e=me-d/2,t=pe-d/2,n=fe+d,r=ve+d;m=new Path2D,m.rect(e,t,n,r)}n?ht(c,d,a.dash,a.cap,u,o,i,s,l):function(e,n,a,o,i,l,s,c,u,d,h){let m=!1;0!=u&&S.forEach(((p,f)=>{if(p.series[0]==e){let e,v=_[p.series[1]],g=t[p.series[1]],y=(v._paths||Cc).band;Ac(y)&&(y=1==p.dir?y[0]:y[1]);let b=null;v.show&&y&&function(e,t,n){for(t=qs(t,0),n=qs(n,e.length-1);t<=n;){if(null!=e[t])return!0;t++}return!1}(g,$e,Ue)?(b=p.fill(r,f)||l,e=v._paths.clip):y=null,ht(n,a,o,i,b,s,c,u,d,h,e,y),m=!0}})),m||ht(n,a,o,i,l,s,c,u,d,h)}(e,c,d,a.dash,a.cap,u,o,i,s,m,l),f&&h.translate(-p,-p)}const dt=2|rd;function ht(e,t,n,r,a,o,i,l,s,c,u,d){ot(e,t,n,r,a),(s||c||d)&&(h.save(),s&&h.clip(s),c&&h.clip(c)),d?(l&dt)==dt?(h.clip(d),u&&h.clip(u),pt(a,i),mt(e,o,t)):2&l?(pt(a,i),h.clip(d),mt(e,o,t)):l&rd&&(h.save(),h.clip(d),u&&h.clip(u),pt(a,i),h.restore(),mt(e,o,t)):(pt(a,i),mt(e,o,t)),(s||c||d)&&h.restore()}function mt(e,t,n){n>0&&(t instanceof Map?t.forEach(((e,t)=>{h.strokeStyle=qe=t,h.stroke(e)})):null!=t&&e&&h.stroke(t))}function pt(e,t){t instanceof Map?t.forEach(((e,t)=>{h.fillStyle=Ye=t,h.fill(e)})):null!=t&&e&&h.fill(t)}function ft(e,t,n,r,a,o,i,l,s,c){let u=i%2/2;1==v&&h.translate(u,u),ot(l,i,s,c,l),h.beginPath();let d,m,p,f,g=a+(0==r||3==r?-o:o);0==n?(m=a,f=g):(d=a,p=g);for(let v=0;v{if(!n.show)return;let o=x[n.scale];if(null==o.min)return void(n._show&&(t=!1,n._show=!1,yt(!1)));n._show||(t=!1,n._show=!0,yt(!1));let i=n.side,l=i%2,{min:s,max:c}=o,[u,d]=function(e,t,n,a){let o,i=k[e];if(a<=0)o=[0,0];else{let l=i._space=i.space(r,e,t,n,a);o=$d(t,n,i._incrs=i.incrs(r,e,t,n,a,l),a,l)}return i._found=o}(a,s,c,0==l?oe:ie);if(0==d)return;let h=2==o.distr,m=n._splits=n.splits(r,a,s,c,u,d,h),p=2==o.distr?m.map((e=>tt[e])):m,f=2==o.distr?tt[m[1]]-tt[m[0]]:u,v=n._values=n.values(r,n.filter(r,p,a,d,f),a,d,f);n._rotate=2==i?n.rotate(r,v,a,d):0;let g=n._size;n._size=ec(n.size(r,v,a,e)),null!=g&&n._size!=g&&(t=!1)})),t}function gt(e){let t=!0;return je.forEach(((n,a)=>{let o=n(r,a,ze,e);o!=He[a]&&(t=!1),He[a]=o})),t}function yt(e){_.forEach(((t,n)=>{n>0&&(t._paths=null,e&&(1==a?(t.min=null,t.max=null):t.facets.forEach((e=>{e.min=null,e.max=null}))))}))}let _t,bt,wt,kt,xt,St,Ct,Et,Nt,At,Mt,Tt,Lt=!1,It=!1,Pt=[];function Ot(){It=!1;for(let e=0;e0){_.forEach(((n,o)=>{if(1==a){let a=n.scale,i=P[a];if(null==i)return;let l=e[a];if(0==o){let e=l.range(r,l.min,l.max,a);l.min=e[0],l.max=e[1],$e=Ds(l.min,t[0]),Ue=Ds(l.max,t[0]),Ue-$e>1&&(t[0][$e]l.max&&Ue--),n.min=tt[$e],n.max=tt[Ue]}else n.show&&n.auto&<(l,i,n,t[o],n.sorted);n.idxs[0]=$e,n.idxs[1]=Ue}else if(o>0&&n.show&&n.auto){let[r,a]=n.facets,i=r.scale,l=a.scale,[s,c]=t[o],u=e[i],d=e[l];null!=u&<(u,P[i],r,s,r.sorted),null!=d&<(d,P[l],a,c,a.sorted),n.min=a.min,n.max=a.max}}));for(let t in e){let n=e[t],a=P[t];if(null==n.from&&(null==a||null==a.min)){let e=n.range(r,n.min==sc?null:n.min,n.max==-sc?null:n.max,t);n.min=e[0],n.max=e[1]}}}for(let t in e){let n=e[t];if(null!=n.from){let a=e[n.from];if(null==a.min)n.min=n.max=null;else{let e=n.range(r,a.min,a.max,t);n.min=e[0],n.max=e[1]}}}let n={},o=!1;for(let t in e){let r=e[t],a=x[t];if(a.min!=r.min||a.max!=r.max){a.min=r.min,a.max=r.max;let e=a.distr;a._min=3==e?oc(a.min):4==e?lc(a.min,a.asinh):a.min,a._max=3==e?oc(a.max):4==e?lc(a.max,a.asinh):a.max,n[t]=o=!0}}if(o){_.forEach(((e,t)=>{2==a?t>0&&n.y&&(e._paths=null):n[e.scale]&&(e._paths=null)}));for(let e in n)_e=!0,kn("setScale",e);Ee.show&&Ee.left>=0&&(be=ke=!0)}for(let t in P)P[t]=null}(),ge=!1),_e&&(!function(){let e=!1,t=0;for(;!e;){t++;let n=vt(t),a=gt(t);e=t==Ce||n&&a,e||(Se(r.width,r.height),ye=!0)}}(),_e=!1),ye){if(xs(p,ns,le),xs(p,es,se),xs(p,Jl,oe),xs(p,Xl,ie),xs(f,ns,le),xs(f,es,se),xs(f,Jl,oe),xs(f,Xl,ie),xs(m,Jl,re),xs(m,Xl,ae),d.width=Xs(re*_s),d.height=Xs(ae*_s),k.forEach((e=>{let{_el:t,_show:n,_size:r,_pos:a,side:o}=e;if(null!=t)if(n){let e=o%2==1;xs(t,e?"left":"top",a-(3===o||0===o?r:0)),xs(t,e?"width":"height",r),xs(t,e?"top":"left",e?se:le),xs(t,e?"height":"width",e?ie:oe),ks(t,Zl)}else ws(t,Zl)})),qe=Ye=We=Qe=Ze=Ge=Je=Xe=Ke=null,et=1,ln(!0),le!=ce||se!=ue||oe!=de||ie!=he){yt(!1);let e=oe/de,t=ie/he;if(Ee.show&&!be&&Ee.left>=0){Ee.left*=e,Ee.top*=t,wt&&Ns(wt,Xs(Ee.left),0,oe,ie),kt&&Ns(kt,0,Xs(Ee.top),oe,ie);for(let n=1;n=0&&$t.width>0){$t.left*=e,$t.width*=e,$t.top*=t,$t.height*=t;for(let e in un)xs(Ut,e,$t[e])}ce=le,ue=se,de=oe,he=ie}kn("setSize"),ye=!1}re>0&&ae>0&&(h.clearRect(0,0,d.width,d.height),kn("drawClear"),N.forEach((e=>e())),kn("draw")),$t.show&&we&&(Bt($t),we=!1),Ee.show&&be&&(an(null,!0,!1),be=!1),H.show&&H.live&&ke&&(nn(),ke=!1),c||(c=!0,r.status=1,kn("ready")),nt=!1,Lt=!1}function zt(e,n){let a=x[e];if(null==a.from){if(0==Ve){let t=a.range(r,n.min,n.max,e);n.min=t[0],n.max=t[1]}if(n.min>n.max){let e=n.min;n.min=n.max,n.max=e}if(Ve>1&&null!=n.min&&null!=n.max&&n.max-n.min<1e-16)return;e==C&&2==a.distr&&Ve>0&&(n.min=Ds(n.min,t[0]),n.max=Ds(n.max,t[0]),n.min==n.max&&n.max++),P[e]=n,ge=!0,Rt()}}r.batch=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Lt=!0,It=t,e(r),Dt(),t&&Pt.length>0&&queueMicrotask(Ot)},r.redraw=(e,t)=>{_e=t||!1,!1!==e?qt(C,M.min,M.max):Rt()},r.setScale=zt;let Ft=!1;const jt=Ee.drag;let Ht=jt.x,Vt=jt.y;Ee.show&&(Ee.x&&(_t=Cs("u-cursor-x",f)),Ee.y&&(bt=Cs("u-cursor-y",f)),0==M.ori?(wt=_t,kt=bt):(wt=bt,kt=_t),Mt=Ee.left,Tt=Ee.top);const $t=r.select=Rc({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Ut=$t.show?Cs("u-select",$t.over?f:p):null;function Bt(e,t){if($t.show){for(let t in e)$t[t]=e[t],t in un&&xs(Ut,t,e[t]);!1!==t&&kn("setSelect")}}function qt(e,t,n){zt(e,{min:t,max:n})}function Yt(e,t,n,o){null!=t.focus&&function(e){if(e!=Qt){let t=null==e,n=1!=Le.alpha;_.forEach(((r,o)=>{if(1==a||o>0){let a=t||0==o||o==e;r._focus=t?null:a,n&&function(e,t){_[e].alpha=t,Ee.show&&Pe[e]&&(Pe[e].style.opacity=t);V&&W[e]&&(W[e].style.opacity=t)}(o,a?1:Le.alpha)}})),Qt=e,n&&Rt()}}(e),null!=t.show&&_.forEach(((n,r)=>{r>0&&(e==r||null==e)&&(n.show=t.show,function(e,t){let n=_[e],r=V?W[e]:null;n.show?r&&ks(r,Zl):(r&&ws(r,Zl),Pe.length>1&&Ns(Pe[e],-10,-10,oe,ie))}(r,t.show),2==a?(qt(n.facets[0].scale,null,null),qt(n.facets[1].scale,null,null)):qt(n.scale,null,null),Rt())})),!1!==n&&kn("setSeries",e,t),o&&Nn("setSeries",r,e,t)}let Wt,Kt,Qt;r.setSelect=Bt,r.setSeries=Yt,r.addBand=function(e,t){e.fill=dc(e.fill||null),e.dir=qs(e.dir,-1),t=null==t?S.length:t,S.splice(t,0,e)},r.setBand=function(e,t){Rc(S[e],t)},r.delBand=function(e){null==e?S.length=0:S.splice(e,1)};const Zt={focus:!0};function Gt(e,t,n){let r=x[t];n&&(e=e/_s-(1==r.ori?se:le));let a=oe;1==r.ori&&(a=ie,e=a-e),-1==r.dir&&(e=a-e);let o=r._min,i=o+(r._max-o)*(e/a),l=r.distr;return 3==l?rc(10,i):4==l?function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Qs.sinh(e)*t}(i,r.asinh):i}function Jt(e,t){xs(Ut,ns,$t.left=e),xs(Ut,Jl,$t.width=t)}function Xt(e,t){xs(Ut,es,$t.top=e),xs(Ut,Xl,$t.height=t)}V&&Ie&&te(us,U,(e=>{Ee._lock||(Me(e),null!=Qt&&Yt(null,Zt,!0,Sn.setSeries))})),r.valToIdx=e=>Ds(e,t[0]),r.posToIdx=function(e,n){return Ds(Gt(e,C,n),t[0],$e,Ue)},r.posToVal=Gt,r.valToPos=(e,t,n)=>0==x[t].ori?i(e,x[t],n?fe:oe,n?me:0):l(e,x[t],n?ve:ie,n?pe:0),r.setCursor=(e,t,n)=>{Mt=e.left,Tt=e.top,an(null,t,n)};let en=0==M.ori?Jt:Xt,tn=1==M.ori?Jt:Xt;function nn(e,t){null!=e&&(e.idxs?e.idxs.forEach(((e,t)=>{j[t]=e})):void 0!==e.idx&&j.fill(e.idx),H.idx=j[0]);for(let n=0;n<_.length;n++)(n>0||1==a&&!Q)&&rn(n,j[n]);V&&H.live&&function(){if(V&&H.live)for(let e=2==a?1:0;e<_.length;e++){if(0==e&&Q)continue;let t=H.values[e],n=0;for(let r in t)K[e][n++].firstChild.nodeValue=t[r]}}(),ke=!1,!1!==t&&kn("setLegend")}function rn(e,n){var a;let o,i=_[e],l=0==e&&2==T?tt:t[e];Q?o=null!==(a=i.values(r,e,n))&&void 0!==a?a:Z:(o=i.value(r,null==n?null:l[n],e,n),o=null==o?Z:{_:o}),H.values[e]=o}function an(e,n,o){let i;Nt=Mt,At=Tt,[Mt,Tt]=Ee.move(r,Mt,Tt),Ee.left=Mt,Ee.top=Tt,Ee.show&&(wt&&Ns(wt,Xs(Mt),0,oe,ie),kt&&Ns(kt,0,Xs(Tt),oe,ie));let l=$e>Ue;Wt=sc;let s=0==M.ori?oe:ie,c=1==M.ori?oe:ie;if(Mt<0||0==Ve||l){i=Ee.idx=null;for(let e=0;e<_.length;e++)e>0&&Pe.length>1&&Ns(Pe[e],-10,-10,oe,ie);Ie&&Yt(null,Zt,!0,null==e&&Sn.setSeries),H.live&&(j.fill(i),ke=!0)}else{let e,n,o;1==a&&(e=0==M.ori?Mt:Tt,n=Gt(e,C),i=Ee.idx=Ds(n,t[0],$e,Ue),o=L(t[0][i],M,s,0));for(let l=2==a?1:0;l<_.length;l++){let e=_[l],u=j[l],d=null==u?null:1==a?t[l][u]:t[l][1][u],h=Ee.dataIdx(r,l,i,n),m=null==h?null:1==a?t[l][h]:t[l][1][h];ke=ke||m!=d||h!=u,j[l]=h;let p=h==i?o:L(1==a?t[0][h]:t[l][0][h],M,s,0);if(l>0&&e.show){let t,n,o=null==m?-10:I(m,1==a?x[e.scale]:x[e.facets[1].scale],c,0);if(Ie&&null!=m){let t=1==M.ori?Mt:Tt,n=Gs(Le.dist(r,l,h,o,t));if(n=0?1:-1;o==(m>=0?1:-1)&&(1==o?1==r?m>=a:m<=a:1==r?m<=a:m>=a)&&(Wt=n,Kt=l)}else Wt=n,Kt=l}}if(0==M.ori?(t=p,n=o):(t=o,n=p),ke&&Pe.length>1){Ms(Pe[l],Ee.points.fill(r,l),Ee.points.stroke(r,l));let e,a,o,i,s=!0,c=Ee.points.bbox;if(null!=c){s=!1;let t=c(r,l);o=t.left,i=t.top,e=t.width,a=t.height}else o=t,i=n,e=a=Ee.points.size(r,l);Ls(Pe[l],e,a,s),Oe[l]=o,Re[l]=i,Ns(Pe[l],_c(o,1),_c(i,1),oe,ie)}}}}if($t.show&&Ft)if(null!=e){let[t,n]=Sn.scales,[r,a]=Sn.match,[o,i]=e.cursor.sync.scales,l=e.cursor.drag;if(Ht=l._x,Vt=l._y,Ht||Vt){let l,u,d,h,m,{left:p,top:f,width:v,height:g}=e.select,y=e.scales[t].ori,_=e.posToVal,b=null!=t&&r(t,o),w=null!=n&&a(n,i);b&&Ht?(0==y?(l=p,u=v):(l=f,u=g),d=x[t],h=L(_(l,o),d,s,0),m=L(_(l+u,o),d,s,0),en(tc(h,m),Gs(m-h))):en(0,s),w&&Vt?(1==y?(l=p,u=v):(l=f,u=g),d=x[n],h=I(_(l,i),d,c,0),m=I(_(l+u,i),d,c,0),tn(tc(h,m),Gs(m-h))):tn(0,c)}else dn()}else{let e=Gs(Nt-xt),t=Gs(At-St);if(1==M.ori){let n=e;e=t,t=n}Ht=jt.x&&e>=jt.dist,Vt=jt.y&&t>=jt.dist;let n,r,a=jt.uni;null!=a?Ht&&Vt&&(Ht=e>=a,Vt=t>=a,Ht||Vt||(t>e?Vt=!0:Ht=!0)):jt.x&&jt.y&&(Ht||Vt)&&(Ht=Vt=!0),Ht&&(0==M.ori?(n=Ct,r=Mt):(n=Et,r=Tt),en(tc(n,r),Gs(r-n)),Vt||tn(0,c)),Vt&&(1==M.ori?(n=Ct,r=Mt):(n=Et,r=Tt),tn(tc(n,r),Gs(r-n)),Ht||en(0,s)),Ht||Vt||(en(0,0),tn(0,0))}if(jt._x=Ht,jt._y=Vt,null==e){if(o){if(null!=Cn){let[e,t]=Sn.scales;Sn.values[0]=null!=e?Gt(0==M.ori?Mt:Tt,e):null,Sn.values[1]=null!=t?Gt(1==M.ori?Mt:Tt,t):null}Nn(is,r,Mt,Tt,oe,ie,i)}if(Ie){let e=o&&Sn.setSeries,t=Le.prox;null==Qt?Wt<=t&&Yt(Kt,Zt,!0,e):Wt>t?Yt(null,Zt,!0,e):Kt!=Qt&&Yt(Kt,Zt,!0,e)}}ke&&(H.idx=i,nn()),!1!==n&&kn("setCursor")}r.setLegend=nn;let on=null;function ln(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?on=null:(on=f.getBoundingClientRect(),kn("syncRect",on))}function sn(e,t,n,r,a,o,i){Ee._lock||Ft&&null!=e&&0==e.movementX&&0==e.movementY||(cn(e,t,n,r,a,o,i,!1,null!=e),null!=e?an(null,!0,!0):an(t,!0,!1))}function cn(e,t,n,a,o,i,l,c,u){if(null==on&&ln(!1),Me(e),null!=e)n=e.clientX-on.left,a=e.clientY-on.top;else{if(n<0||a<0)return Mt=-10,void(Tt=-10);let[e,r]=Sn.scales,l=t.cursor.sync,[c,u]=l.values,[d,h]=l.scales,[m,p]=Sn.match,f=t.axes[0].side%2==1,v=0==M.ori?oe:ie,g=1==M.ori?oe:ie,y=f?i:o,_=f?o:i,b=f?a:n,w=f?n:a;if(n=null!=d?m(e,d)?s(c,x[e],v,0):-10:v*(b/y),a=null!=h?p(r,h)?s(u,x[r],g,0):-10:g*(w/_),1==M.ori){let e=n;n=a,a=e}}u&&((n<=1||n>=oe-1)&&(n=yc(n,oe)),(a<=1||a>=ie-1)&&(a=yc(a,ie))),c?(xt=n,St=a,[Ct,Et]=Ee.move(r,n,a)):(Mt=n,Tt=a)}Object.defineProperty(r,"rect",{get:()=>(null==on&&ln(!1),on)});const un={width:0,height:0,left:0,top:0};function dn(){Bt(un,!1)}let hn,mn,pn,fn;function vn(e,t,n,a,o,i,l){Ft=!0,Ht=Vt=jt._x=jt._y=!1,cn(e,t,n,a,o,i,0,!0,!1),null!=e&&(te(ss,vs,gn,!1),Nn(ls,r,Ct,Et,oe,ie,null));let{left:s,top:c,width:u,height:d}=$t;hn=s,mn=c,pn=u,fn=d,dn()}function gn(e,t,n,a,o,i,l){Ft=jt._x=jt._y=!1,cn(e,t,n,a,o,i,0,!1,!0);let{left:s,top:c,width:u,height:d}=$t,h=u>0||d>0,m=hn!=s||mn!=c||pn!=u||fn!=d;if(h&&m&&Bt($t),jt.setScale&&h&&m){let e=s,t=u,n=c,r=d;if(1==M.ori&&(e=c,t=d,n=s,r=u),Ht&&qt(C,Gt(e,C),Gt(e+t,C)),Vt)for(let a in x){let e=x[a];a!=C&&null==e.from&&e.min!=sc&&qt(a,Gt(n+r,a),Gt(n,a))}dn()}else Ee.lock&&(Ee._lock=!Ee._lock,Ee._lock||an(null,!0,!1));null!=e&&(ne(ss,vs),Nn(ss,r,Mt,Tt,oe,ie,null))}function yn(e,t,n,a,o,i,l){Ee._lock||(Me(e),at(),dn(),null!=e&&Nn(ds,r,Mt,Tt,oe,ie,null))}function _n(){k.forEach(Bd),xe(r.width,r.height,!0)}Os(ms,gs,_n);const bn={};bn.mousedown=vn,bn.mousemove=sn,bn.mouseup=gn,bn.dblclick=yn,bn.setSeries=(e,t,n,a)=>{-1!=(n=(0,Sn.match[2])(r,t,n))&&Yt(n,a,!0,!1)},Ee.show&&(te(ls,f,vn),te(is,f,sn),te(cs,f,(e=>{Me(e),ln(!1)})),te(us,f,(function(e,t,n,r,a,o,i){if(Ee._lock)return;Me(e);let l=Ft;if(Ft){let e,t,n=!0,r=!0,a=10;0==M.ori?(e=Ht,t=Vt):(e=Vt,t=Ht),e&&t&&(n=Mt<=a||Mt>=oe-a,r=Tt<=a||Tt>=ie-a),e&&n&&(Mt=Mt{e.call(null,r,t,n)}))}(e.plugins||[]).forEach((e=>{for(let t in e.hooks)wn[t]=(wn[t]||[]).concat(e.hooks[t])}));const xn=(e,t,n)=>n,Sn=Rc({key:null,setSeries:!1,filters:{pub:fc,sub:fc},scales:[C,_[1]?_[1].scale:null],match:[vc,vc,xn],values:[null,null]},Ee.sync);2==Sn.match.length&&Sn.match.push(xn),Ee.sync=Sn;const Cn=Sn.key,En=nd(Cn);function Nn(e,t,n,r,a,o,i){Sn.filters.pub(e,t,n,r,a,o,i)&&En.pub(e,t,n,r,a,o,i)}function An(){kn("init",e,t),rt(t||e.data,!1),P[C]?zt(C,P[C]):at(),we=$t.show&&($t.width>0||$t.height>0),be=ke=!0,xe(e.width,e.height)}return En.sub(r),r.pub=function(e,t,n,r,a,o,i){Sn.filters.sub(e,t,n,r,a,o,i)&&bn[e](null,t,n,r,a,o,i)},r.destroy=function(){var e;En.unsub(r),Md.delete(r),ee.clear(),Rs(ms,gs,_n),u.remove(),null===(e=U)||void 0===e||e.remove(),kn("destroy")},_.forEach(De),k.forEach((function(e,t){if(e._show=e.show,e.show){let n=e.side%2,a=x[e.scale];null==a&&(e.scale=n?_[1].scale:C,a=x[e.scale]);let o=a.time;e.size=dc(e.size),e.space=dc(e.space),e.rotate=dc(e.rotate),Ac(e.incrs)&&e.incrs.forEach((e=>{!kc.has(e)&&kc.set(e,xc(e))})),e.incrs=dc(e.incrs||(2==a.distr?Jc:o?1==y?du:pu:Xc)),e.splits=dc(e.splits||(o&&1==a.distr?D:3==a.distr?zu:4==a.distr?Fu:Du)),e.stroke=dc(e.stroke),e.grid.stroke=dc(e.grid.stroke),e.ticks.stroke=dc(e.ticks.stroke),e.border.stroke=dc(e.border.stroke);let i=e.values;e.values=Ac(i)&&!Ac(i[0])?dc(i):o?Ac(i)?yu(O,gu(i,R)):Tc(i)?function(e,t){let n=Yc(t);return(t,r,a,o,i)=>r.map((t=>n(e(t))))}(O,i):i||z:i||Ru,e.filter=dc(e.filter||(a.distr>=3&&10==a.log?Bu:3==a.distr&&2==a.log?qu:mc)),e.font=Ud(e.font),e.labelFont=Ud(e.labelFont),e._size=e.size(r,null,t,0),e._space=e._rotate=e._incrs=e._found=e._splits=e._values=null,e._size>0&&(ze[t]=!0,e._el=Cs("u-axis",m))}})),n?n instanceof HTMLElement?(n.appendChild(u),An()):n(r,An):An(),r}qd.assign=Rc,qd.fmtNum=Ks,qd.rangeNum=Bs,qd.rangeLog=Fs,qd.rangeAsinh=js,qd.orient=ad,qd.pxRatio=_s,qd.join=function(e,t){if(function(e){let t=e[0][0],n=t.length;for(let r=1;r1&&void 0!==arguments[1]?arguments[1]:100;const n=e.length;if(n<=1)return!0;let r=0,a=n-1;for(;r<=a&&null==e[r];)r++;for(;a>=r&&null==e[a];)a--;if(a<=r)return!0;const o=nc(1,Js((a-r+1)/t));for(let i=e[r],l=r+o;l<=a;l+=o){const t=e[l];if(null!=t){if(t<=i)return!1;i=t}}return!0}(t[0])||(t=function(e){let t=e[0],n=t.length,r=Array(n);for(let o=0;ot[e]-t[n]));let a=[];for(let o=0;oe-t))],a=r[0].length,o=new Map;for(let i=0;iad(e,o,((s,c,u,d,h,m,p,f,v,g,y)=>{let _=s.pxRound,{left:b,width:w}=e.bbox,k=e=>_(m(e,d,g,f)),x=e=>_(p(e,h,y,v)),S=0==d.ori?pd:fd;const C={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:rd},E=C.stroke,N=d.dir*(0==d.ori?1:-1);i=zs(u,i,l,1),l=zs(u,i,l,-1);let A=x(u[1==N?i:l]),M=k(c[1==N?i:l]),T=M,L=M;a&&-1==t&&(L=b,S(E,L,A)),S(E,M,A);for(let e=1==N?i:l;e>=i&&e<=l;e+=N){let n=u[e];if(null==n)continue;let r=k(c[e]),a=x(n);1==t?S(E,r,A):S(E,T,a),S(E,r,a),A=a,T=r}let I=T;a&&1==t&&(I=b+w,S(E,I,A));let[P,O]=od(e,o);if(null!=s.fill||0!=P){let t=C.fill=new Path2D(E),n=x(s.fillTo(e,o,s.min,s.max,P));S(t,I,n),S(t,L,n)}if(!s.spanGaps){let a=[];a.push(...cd(c,u,i,l,N,k,r));let h=s.width*_s/2,m=n||1==t?h:-h,p=n||-1==t?-h:h;a.forEach((e=>{e[0]+=m,e[1]+=p})),C.gaps=a=s.gaps(e,o,i,l,a),C.clip=sd(a,d.ori,f,v,g,y)}return 0!=O&&(C.band=2==O?[ld(e,o,i,l,E,-1),ld(e,o,i,l,E,1)]:ld(e,o,i,l,E,O)),C}))},e.bars=function(e){const t=qs((e=e||Cc).size,[.6,sc,1]),n=e.align||0,r=e.gap||0;let a=e.radius;a=null==a?[0,0]:"number"==typeof a?[a,0]:a;const o=dc(a),i=1-t[0],l=qs(t[1],sc),s=qs(t[2],1),c=qs(e.disp,Cc),u=qs(e.each,(e=>{})),{fill:d,stroke:h}=c;return(e,t,a,m)=>ad(e,t,((p,f,v,g,y,_,b,w,k,x,S)=>{let C,E,N=p.pxRound,A=n,M=r*_s,T=l*_s,L=s*_s;0==g.ori?[C,E]=o(e,t):[E,C]=o(e,t);const I=g.dir*(0==g.ori?1:-1);let P,O,R,D=0==g.ori?vd:gd,z=0==g.ori?u:(e,t,n,r,a,o,i)=>{u(e,t,n,a,r,i,o)},F=qs(e.bands,Ec).find((e=>e.series[0]==t)),j=null!=F?F.dir:0,H=p.fillTo(e,t,p.min,p.max,j),V=N(b(H,y,S,k)),$=x,U=N(p.width*_s),B=!1,q=null,Y=null,W=null,K=null;null==d||0!=U&&null==h||(B=!0,q=d.values(e,t,a,m),Y=new Map,new Set(q).forEach((e=>{null!=e&&Y.set(e,new Path2D)})),U>0&&(W=h.values(e,t,a,m),K=new Map,new Set(W).forEach((e=>{null!=e&&K.set(e,new Path2D)}))));let{x0:Q,size:Z}=c;if(null!=Q&&null!=Z){A=1,f=Q.values(e,t,a,m),2==Q.unit&&(f=f.map((t=>e.posToVal(w+t*x,g.key,!0))));let n=Z.values(e,t,a,m);O=2==Z.unit?n[0]*x:_(n[0],g,x,w)-_(0,g,x,w),$=Nd(f,v,_,g,x,w,$),R=$-O+M}else $=Nd(f,v,_,g,x,w,$),R=$*i+M,O=$-R;R<1&&(R=0),U>=O/2&&(U=0),R<5&&(N=hc);let G=R>0;O=N(uc($-R-(G?U:0),L,T)),P=(0==A?O/2:A==I?0:O)-A*I*((0==A?M/2:0)+(G?U/2:0));const J={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},X=B?null:new Path2D;let ee=null;if(null!=F)ee=e.data[F.series[1]];else{let{y0:n,y1:r}=c;null!=n&&null!=r&&(v=r.values(e,t,a,m),ee=n.values(e,t,a,m))}let te=C*O,ne=E*O;for(let n=1==I?a:m;n>=a&&n<=m;n+=I){let r=v[n];if(null==r)continue;if(null!=ee){var re;let e=null!==(re=ee[n])&&void 0!==re?re:0;if(r-e==0)continue;V=b(e,y,S,k)}let a=_(2!=g.distr||null!=c?f[n]:n,g,x,w),o=b(qs(r,H),y,S,k),i=N(a-P),l=N(nc(o,V)),s=N(tc(o,V)),u=l-s;if(null!=r){let a=r<0?ne:te,o=r<0?te:ne;B?(U>0&&null!=W[n]&&D(K.get(W[n]),i,s+Js(U/2),O,nc(0,u-U),a,o),null!=q[n]&&D(Y.get(q[n]),i,s+Js(U/2),O,nc(0,u-U),a,o)):D(X,i,s+Js(U/2),O,nc(0,u-U),a,o),z(e,t,n,i-U/2,s,O+U,u)}}if(U>0)J.stroke=B?K:X;else if(!B){var ae;J._fill=0==p.width?p._fill:null!==(ae=p._stroke)&&void 0!==ae?ae:p._fill,J.width=0}return J.fill=B?Y:X,J}))},e.spline=function(e){return function(e,t){const n=qs(null===t||void 0===t?void 0:t.alignGaps,0);return(t,r,a,o)=>ad(t,r,((i,l,s,c,u,d,h,m,p,f,v)=>{let g,y,_,b=i.pxRound,w=e=>b(d(e,c,f,m)),k=e=>b(h(e,u,v,p));0==c.ori?(g=hd,_=pd,y=bd):(g=md,_=fd,y=wd);const x=c.dir*(0==c.ori?1:-1);a=zs(s,a,o,1),o=zs(s,a,o,-1);let S=w(l[1==x?a:o]),C=S,E=[],N=[];for(let e=1==x?a:o;e>=a&&e<=o;e+=x)if(null!=s[e]){let t=w(l[e]);E.push(C=t),N.push(k(s[e]))}const A={stroke:e(E,N,g,_,y,b),fill:null,clip:null,band:null,gaps:null,flags:rd},M=A.stroke;let[T,L]=od(t,r);if(null!=i.fill||0!=T){let e=A.fill=new Path2D(M),n=k(i.fillTo(t,r,i.min,i.max,T));_(e,C,n),_(e,S,n)}if(!i.spanGaps){let e=[];e.push(...cd(l,s,a,o,x,w,n)),A.gaps=e=i.gaps(t,r,a,o,e),A.clip=sd(e,c.ori,m,p,f,v)}return 0!=L&&(A.band=2==L?[ld(t,r,a,o,M,-1),ld(t,r,a,o,M,1)]:ld(t,r,a,o,M,L)),A}))}(Ad,e)}}const Yd=e=>{let t=e.length,n=-1/0;for(;t--;){const r=e[t];Number.isFinite(r)&&r>n&&(n=r)}return Number.isFinite(n)?n:null},Wd=e=>{let t=e.length,n=1/0;for(;t--;){const r=e[t];Number.isFinite(r)&&r{let t=e.length;const n=[];for(;t--;){const r=e[t];Number.isFinite(r)&&n.push(r)}return n.sort(),n[n.length>>1]},Qd=e=>{let t=e.length;for(;t--;){const n=e[t];if(Number.isFinite(n))return n}},Zd=(e,t,n)=>{if(void 0===e||null===e)return"";n=n||0,t=t||0;const r=Math.abs(n-t);if(isNaN(r)||0==r)return Math.abs(e)>=1e3?e.toLocaleString("en-US"):e.toString();let a=3+Math.floor(1+Math.log10(Math.max(Math.abs(t),Math.abs(n)))-Math.log10(r));return(isNaN(a)||a>20)&&(a=20),e.toLocaleString("en-US",{minimumSignificantDigits:1,maximumSignificantDigits:a})},Gd=e=>{const t=(null===e||void 0===e?void 0:e.metric)||{},n=Object.keys(t).filter((e=>"__name__"!=e)).map((e=>"".concat(e,"=").concat(JSON.stringify(t[e]))));let r=t.__name__||"";return n.length>0&&(r+="{"+n.join(",")+"}"),r},Jd=[[31536e3,"{YYYY}",null,null,null,null,null,null,1],[2419200,"{MMM}","\n{YYYY}",null,null,null,null,null,1],[86400,"{MM}-{DD}","\n{YYYY}",null,null,null,null,null,1],[3600,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[60,"{HH}:{mm}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD}",null,null,null,1],[1,"{HH}:{mm}:{ss}","\n{YYYY}-{MM}-{DD}",null,"\n{MM}-{DD} {HH}:{mm}",null,null,null,1],[.001,":{ss}.{fff}","\n{YYYY}-{MM}-{DD} {HH}:{mm}",null,"\n{MM}-{DD} {HH}:{mm}",null,"\n{HH}:{mm}",null,1]],Xd=(e,t)=>Array.from(new Set(e.map((e=>e.scale)))).map((e=>{const n="10px Arial",r=gt("color-text"),a={scale:e,show:!0,size:th,stroke:r,font:n,values:(e,n)=>function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const r=t[0],a=t[t.length-1];return n?t.map((e=>"".concat(Zd(e,r,a)," ").concat(n))):t.map((e=>Zd(e,r,a)))}(e,n,t)};return e?Number(e)%2||"y"===e?a:{...a,side:1}:{space:80,values:Jd,stroke:r,font:n}})),eh=(e,t)=>{if(null==e||null==t)return[-1,1];const n=.02*(Math.abs(t-e)||Math.abs(e)||1);return[e-n,t+n]},th=(e,t,n,r)=>{var a;const o=e.axes[n];if(r>1)return o._size||60;let i=6+((null===o||void 0===o||null===(a=o.ticks)||void 0===a?void 0:a.size)||0)+(o.gap||0);const l=(null!==t&&void 0!==t?t:[]).reduce(((e,t)=>(null===t||void 0===t?void 0:t.length)>e.length?t:e),"");return""!=l&&(i+=((e,t)=>{const n=document.createElement("span");n.innerText=e,n.style.cssText="position: absolute; z-index: -1; pointer-events: none; opacity: 0; font: ".concat(t),document.body.appendChild(n);const r=n.offsetWidth;return n.remove(),r})(l,"10px Arial")),Math.ceil(i)},nh=["#e54040","#32a9dc","#2ee329","#7126a1","#e38f0f","#3d811a","#ffea00","#2d2d2d","#da42a6","#a44e0c"],rh=e=>{if(7!=e.length)return"0, 0, 0";const t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return"".concat(t,", ").concat(n,", ").concat(r)},ah={[ht.yhatUpper]:"#7126a1",[ht.yhatLower]:"#7126a1",[ht.yhat]:"#da42a6",[ht.anomaly]:"#da4242",[ht.anomalyScore]:"#7126a1",[ht.actual]:"#203ea9",[ht.training]:"rgba(".concat(rh("#203ea9"),", 0.2)")},oh=e=>{const t=16777215;let n=1,r=0,a=1;if(e.length>0)for(let i=0;ir&&(r=e[i].charCodeAt(0)),a=parseInt(String(t/r)),n=(n+e[i].charCodeAt(0)*a*49979693)%t;let o=(n*e.length%t).toString(16);return o=o.padEnd(6,o),"#".concat(o)},ih=((e,t,n)=>{const r=[];for(let a=0;aMath.round(e))).join(", "))}return r.map((e=>"rgb(".concat(e,")")))})([246,226,219],[127,39,4],16),lh=()=>(e,t)=>{const n=Math.round(devicePixelRatio);qd.orient(e,t,((r,a,o,i,l,s,c,u,d,h,m,p,f,v)=>{const[g,y,_]=e.data[t],b=g.length,w=((e,t)=>{const n=e.data[t][2],r=ih;let a=1/0,o=-1/0;for(let c=0;c0&&(a=Math.min(a,n[c]),o=Math.max(o,n[c]));const i=o-a,l=r.length,s=Array(n.length);for(let c=0;cnew Path2D)),S=b-y.lastIndexOf(y[0]),C=b/S,E=y[1]-y[0],N=g[S]-g[0],A=s(N,i,h,u)-s(0,i,h,u)-n,M=c(E,l,m,d)-c(0,l,m,d)+n,T=y.slice(0,S).map((e=>Math.round(c(e,l,m,d)-M/2))),L=Array.from({length:C},((e,t)=>Math.round(s(g[t*S],i,h,u)-A)));for(let e=0;e0&&g[e]>=(i.min||-1/0)&&g[e]<=(i.max||1/0)&&y[e]>=(l.min||-1/0)&&y[e]<=(l.max||1/0)){const t=L[~~(e/S)],n=T[e%S];v(x[w[e]],t,n,A,M)}e.ctx.save(),e.ctx.rect(e.bbox.left,e.bbox.top,e.bbox.width,e.bbox.height),e.ctx.clip(),x.forEach(((t,n)=>{e.ctx.fillStyle=k[n],e.ctx.fill(t)})),e.ctx.restore()}))},sh=e=>{const t=(e.metric.vmrange||e.metric.le||"").split("...");return Ol(t[t.length-1])},ch=(e,t)=>sh(e)-sh(t),uh=(e,t)=>{if(!t)return e;const n=(e=>{var t;if(!e.every((e=>e.metric.le)))return e;const n=e.sort(((e,t)=>parseFloat(e.metric.le)-parseFloat(t.metric.le))),r=(null===(t=e[0])||void 0===t?void 0:t.group)||1;let a={metric:{le:""},values:[],group:r};const o=[];for(const l of n){const e=[a.metric.le,l.metric.le].filter((e=>e)).join("..."),t=[];for(const[n,r]of l.values){var i;const e=+r-+((null===(i=a.values.find((e=>e[0]===n)))||void 0===i?void 0:i[1])||0);t.push([n,"".concat(e)])}o.push({metric:{vmrange:e},values:t,group:r}),a=l}return o})(e.sort(ch)),r={};n.forEach((e=>e.values.forEach((e=>{let[t,n]=e;r[t]=(r[t]||0)+ +n}))));return n.map((e=>{const t=e.values.map((e=>{let[t,n]=e;const a=r[t];return[t,"".concat(Math.round(+n/a*100))]}));return{...e,values:t}})).filter((e=>!e.values.every((e=>"0"===e[1]))))},dh=e=>{const t=["__name__","for"];return Object.entries(e).filter((e=>{let[n]=e;return!t.includes(n)})).map((e=>{let[t,n]=e;return"".concat(t,": ").concat(n)})).join(",")},hh=(e,t,n,r)=>{const a={},o=r?0:Math.min(e.length,nh.length);for(let i=0;i{const l=r?(e=>{const t=(null===e||void 0===e?void 0:e.__name__)||"",n=new RegExp("(".concat(Object.values(ht).join("|"),")$")),r=t.match(n),a=r&&r[0];return{value:/(?:^|[^a-zA-Z0-9_])y(?:$|[^a-zA-Z0-9_])/.test(t)?ht.actual:a,group:dh(e)}})(e[i].metric):null,s=r?(null===l||void 0===l?void 0:l.group)||"":Pl(o,n[o.group-1]);return{label:s,dash:gh(l),width:yh(l),stroke:bh({metricInfo:l,label:s,isAnomalyUI:r,colorState:a}),points:_h(l),spanGaps:!1,forecast:null===l||void 0===l?void 0:l.value,forecastGroup:null===l||void 0===l?void 0:l.group,freeFormFields:o.metric,show:!fh(s,t),scale:"1",...mh(o)}}},mh=e=>{const t=e.values.map((e=>Ol(e[1]))),{min:n,max:r,median:a,last:o}={min:Wd(t),max:Yd(t),median:Kd(t),last:Qd(t)};return{median:a,statsFormatted:{min:Zd(n,n,r),max:Zd(r,n,r),median:Zd(a,n,r),last:Zd(o,n,r)}}},ph=(e,t)=>({group:t,label:e.label||"",color:e.stroke,checked:e.show||!1,freeFormFields:e.freeFormFields,statsFormatted:e.statsFormatted,median:e.median}),fh=(e,t)=>t.includes("".concat(e)),vh=e=>{for(let t=e.series.length-1;t>=0;t--)e.delSeries(t)},gh=e=>{const t=(null===e||void 0===e?void 0:e.value)===ht.yhatLower,n=(null===e||void 0===e?void 0:e.value)===ht.yhatUpper,r=(null===e||void 0===e?void 0:e.value)===ht.yhat;return t||n?[10,5]:r?[10,2]:[]},yh=e=>{const t=(null===e||void 0===e?void 0:e.value)===ht.yhatLower,n=(null===e||void 0===e?void 0:e.value)===ht.yhatUpper,r=(null===e||void 0===e?void 0:e.value)===ht.yhat,a=(null===e||void 0===e?void 0:e.value)===ht.anomaly;return n||t?.7:r?1:a?0:1.4},_h=e=>(null===e||void 0===e?void 0:e.value)===ht.anomaly?{size:8,width:4,space:0}:{size:4.2,width:1.4},bh=e=>{let{metricInfo:t,label:n,isAnomalyUI:r,colorState:a}=e;const o=a[n]||oh(n),i=(null===t||void 0===t?void 0:t.value)===ht.anomaly;return r&&i?ah[ht.anomaly]:!r||i||null!==t&&void 0!==t&&t.value?null!==t&&void 0!==t&&t.value?null!==t&&void 0!==t&&t.value?ah[null===t||void 0===t?void 0:t.value]:o:a[n]||oh(n):ah[ht.actual]},wh=e=>{let{width:t=400,height:n=500}=e;return{width:t,height:n,series:[],tzDate:e=>o()(Xt(tn(e))).local().toDate(),legend:{show:!1},cursor:{drag:{x:!0,y:!1},focus:{prox:30},points:{size:5.6,width:1.4},bind:{click:()=>null,dblclick:()=>null}}}},kh=e=>{vh(e),(e=>{Object.keys(e.hooks).forEach((t=>{e.hooks[t]=[]}))})(e),e.setData([])},xh=e=>{let{min:t,max:n}=e;return[t,n]},Sh=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;return a.limits.enable?a.limits.range[r]:eh(t,n)},Ch=(e,t)=>{const n={x:{range:()=>xh(t)}},r=Object.keys(e.limits.range);return(r.length?r:["1"]).forEach((t=>{n[t]={range:function(n){return Sh(n,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,t,e)}}})),n},Eh=e=>t=>{const n=t.posToVal(t.select.left,"x"),r=t.posToVal(t.select.left+t.select.width,"x");e({min:n,max:r})};function Nh(e){const t=rh(ah[e]);return"rgba(".concat(t,", 0.05)")}const Ah=e=>(e=>e instanceof MouseEvent)(e)?e.clientX:e.touches[0].clientX,Mh=e=>{let{dragSpeed:t=.85,setPanning:n,setPlotScale:a}=e;const o=(0,r.useRef)({leftStart:0,xUnitsPerPx:0,scXMin:0,scXMax:0}),i=e=>{e.preventDefault();const n=Ah(e),{leftStart:r,xUnitsPerPx:i,scXMin:l,scXMax:s}=o.current,c=i*((n-r)*t);a({min:l-c,max:s-c})},l=()=>{n(!1),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",l),document.removeEventListener("touchmove",i),document.removeEventListener("touchend",l)};return e=>{let{e:t,u:r}=e;t.preventDefault(),n(!0),o.current={leftStart:Ah(t),xUnitsPerPx:r.posToVal(1,"x")-r.posToVal(0,"x"),scXMin:r.scales.x.min||0,scXMax:r.scales.x.max||0},document.addEventListener("mousemove",i),document.addEventListener("mouseup",l),document.addEventListener("touchmove",i),document.addEventListener("touchend",l)}},Th=e=>{const[t,n]=(0,r.useState)(!1),a=Mh({dragSpeed:.9,setPanning:n,setPlotScale:e});return{onReadyChart:t=>{const n=e=>{const n=e instanceof MouseEvent&&(e=>{const{ctrlKey:t,metaKey:n,button:r}=e;return 0===r&&(t||n)})(e),r=window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1;(n||r)&&a({u:t,e:e})};t.over.addEventListener("mousedown",n),t.over.addEventListener("touchstart",n),t.over.addEventListener("wheel",(n=>{if(!n.ctrlKey&&!n.metaKey)return;n.preventDefault();const{width:r}=t.over.getBoundingClientRect(),a=t.cursor.left&&t.cursor.left>0?t.cursor.left:0,o=t.posToVal(a,"x"),i=(t.scales.x.max||0)-(t.scales.x.min||0),l=n.deltaY<0?.9*i:i/.9,s=o-a/r*l,c=s+l;t.batch((()=>e({min:s,max:c})))}))},isPanning:t}},Lh=e=>{const t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.sqrt(t*t+n*n)},Ih=e=>{let{uPlotInst:t,xRange:n,setPlotScale:a}=e;const[o,i]=(0,r.useState)(0),l=(0,r.useCallback)((e=>{const{target:r,ctrlKey:o,metaKey:i,key:l}=e,s=r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement;if(!t||s)return;const c="+"===l||"="===l;if(("-"===l||c)&&!(o||i)){e.preventDefault();const t=(n.max-n.min)/10*(c?1:-1);a({min:n.min+t,max:n.max-t})}}),[t,n]),s=(0,r.useCallback)((e=>{if(!t||2!==e.touches.length)return;e.preventDefault();const r=Lh(e.touches),i=o-r,l=t.scales.x.max||n.max,s=t.scales.x.min||n.min,c=(l-s)/50*(i>0?-1:1);t.batch((()=>a({min:s+c,max:l-c})))}),[t,o,n]);return Ar("keydown",l),Ar("touchmove",s),Ar("touchstart",(e=>{2===e.touches.length&&(e.preventDefault(),i(Lh(e.touches)))})),null},Ph=e=>{let{period:t,setPeriod:n}=e;const[a,i]=(0,r.useState)({min:t.start,max:t.end});return(0,r.useEffect)((()=>{i({min:t.start,max:t.end})}),[t]),{xRange:a,setPlotScale:e=>{let{min:t,max:r}=e;const a=1e3*(r-t);aHt||n({from:o()(1e3*t).toDate(),to:o()(1e3*r).toDate()})}}},Oh=e=>{let{u:t,metrics:n,series:a,unit:i,isAnomalyView:l}=e;const[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)({seriesIdx:-1,dataIdx:-1}),[h,m]=(0,r.useState)([]),p=(0,r.useCallback)((()=>{const{seriesIdx:e,dataIdx:r}=u,s=n[e-1],c=a[e],d=new Set(n.map((e=>e.group))),h=(null===s||void 0===s?void 0:s.group)||0,m=it()(t,["data",e,r],0),p=it()(t,["scales","1","min"],0),f=it()(t,["scales","1","max"],1),v=it()(t,["data",0,r],0),g={top:t?t.valToPos(m||0,(null===c||void 0===c?void 0:c.scale)||"1"):0,left:t?t.valToPos(v,"x"):0};return{unit:i,point:g,u:t,id:"".concat(e,"_").concat(r),title:d.size>1&&!l?"Query ".concat(h):"",dates:[v?o()(1e3*v).tz().format(Ot):"-"],value:Zd(m,p,f),info:Gd(s),statsFormatted:null===c||void 0===c?void 0:c.statsFormatted,marker:"".concat(null===c||void 0===c?void 0:c.stroke)}}),[t,u,n,a,i,l]),f=(0,r.useCallback)((()=>{if(!s)return;const e=p();h.find((t=>t.id===e.id))||m((t=>[...t,e]))}),[p,h,s]);return(0,r.useEffect)((()=>{c(-1!==u.dataIdx&&-1!==u.seriesIdx)}),[u]),Ar("click",f),{showTooltip:s,stickyTooltips:h,handleUnStick:e=>{m((t=>t.filter((t=>t.id!==e))))},getTooltipProps:p,seriesFocus:(e,t)=>{const n=null!==t&&void 0!==t?t:-1;d((e=>({...e,seriesIdx:n})))},setCursor:e=>{var t;const n=null!==(t=e.cursor.idx)&&void 0!==t?t:-1;d((e=>({...e,dataIdx:n})))},resetTooltips:()=>{m([]),d({seriesIdx:-1,dataIdx:-1})}}},Rh=e=>{let{u:t,id:n,title:a,dates:o,value:i,point:l,unit:s="",info:c,statsFormatted:u,isSticky:d,marker:h,onClose:m}=e;const p=(0,r.useRef)(null),[f,v]=(0,r.useState)({top:-999,left:-999}),[g,y]=(0,r.useState)(!1),[_,b]=(0,r.useState)(!1),w=(0,r.useCallback)((e=>{if(!g)return;const{clientX:t,clientY:n}=e;v({top:n,left:t})}),[g]);return(0,r.useEffect)((()=>{if(!p.current||!t)return;const{top:e,left:n}=l,r=parseFloat(t.over.style.left),a=parseFloat(t.over.style.top),{width:o,height:i}=t.over.getBoundingClientRect(),{width:s,height:c}=p.current.getBoundingClientRect(),u={top:e+a+10-(e+c>=i?c+20:0),left:n+r+10-(n+s>=o?s+20:0)};u.left<0&&(u.left=20),u.top<0&&(u.top=20),v(u)}),[t,i,l,p]),Ar("mousemove",w),Ar("mouseup",(()=>{y(!1)})),t?r.default.createPortal(Nt("div",{className:Cr()({"vm-chart-tooltip":!0,"vm-chart-tooltip_sticky":d,"vm-chart-tooltip_moved":_}),ref:p,style:f,children:[Nt("div",{className:"vm-chart-tooltip-header",children:[a&&Nt("div",{className:"vm-chart-tooltip-header__title",children:a}),Nt("div",{className:"vm-chart-tooltip-header__date",children:o.map(((e,t)=>Nt("span",{children:e},t)))}),d&&Nt(Ct.FK,{children:[Nt(la,{className:"vm-chart-tooltip-header__drag",variant:"text",size:"small",startIcon:Nt(ar,{}),onMouseDown:e=>{b(!0),y(!0);const{clientX:t,clientY:n}=e;v({top:n,left:t})},ariaLabel:"drag the tooltip"}),Nt(la,{className:"vm-chart-tooltip-header__close",variant:"text",size:"small",startIcon:Nt(In,{}),onClick:()=>{m&&m(n)},ariaLabel:"close the tooltip"})]})]}),Nt("div",{className:"vm-chart-tooltip-data",children:[h&&Nt("span",{className:"vm-chart-tooltip-data__marker",style:{background:h}}),Nt("p",{className:"vm-chart-tooltip-data__value",children:[Nt("b",{children:i}),s]})]}),u&&Nt("table",{className:"vm-chart-tooltip-stats",children:ct.map(((e,t)=>Nt("div",{className:"vm-chart-tooltip-stats-row",children:[Nt("span",{className:"vm-chart-tooltip-stats-row__key",children:[e,":"]}),Nt("span",{className:"vm-chart-tooltip-stats-row__value",children:u[e]})]},t)))}),c&&Nt("p",{className:"vm-chart-tooltip__info",children:c})]}),t.root):null},Dh=e=>{let{showTooltip:t,tooltipProps:n,stickyTooltips:a,handleUnStick:o}=e;return Nt(Ct.FK,{children:[t&&n&&Nt(Rh,{...n}),a.map((e=>(0,r.createElement)(Rh,{...e,isSticky:!0,key:e.id,onClose:o})))]})},zh=e=>{let{data:t,series:n,metrics:a=[],period:o,yaxis:i,unit:l,setPeriod:s,layoutSize:c,height:u,isAnomalyView:d,spanGaps:h=!1}=e;const{isDarkTheme:m}=Mt(),p=(0,r.useRef)(null),[f,v]=(0,r.useState)(),{xRange:g,setPlotScale:y}=Ph({period:o,setPeriod:s}),{onReadyChart:_,isPanning:b}=Th(y);Ih({uPlotInst:f,xRange:g,setPlotScale:y});const{showTooltip:w,stickyTooltips:k,handleUnStick:x,getTooltipProps:S,seriesFocus:C,setCursor:E,resetTooltips:N}=Oh({u:f,metrics:a,series:n,unit:l,isAnomalyView:d}),A={...wh({width:c.width,height:u}),series:n,axes:Xd([{},{scale:"1"}],l),scales:Ch(i,g),hooks:{ready:[_],setSeries:[C],setCursor:[E],setSelect:[Eh(y)],destroy:[kh]},bands:[]};return(0,r.useEffect)((()=>{if(N(),!p.current)return;f&&f.destroy();const e=new qd(A,t,p.current);return v(e),e.destroy}),[p,m]),(0,r.useEffect)((()=>{f&&(f.setData(t),f.redraw())}),[t]),(0,r.useEffect)((()=>{f&&(vh(f),function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t.forEach((t=>{t.label&&(t.spanGaps=n),e.addSeries(t)}))}(f,n,h),((e,t)=>{if(e.delBand(),t.length<2)return;const n=t.map(((e,t)=>({...e,index:t}))),r=n.filter((e=>e.forecast===ht.yhatUpper)),a=n.filter((e=>e.forecast===ht.yhatLower)),o=r.map((e=>{const t=a.find((t=>t.forecastGroup===e.forecastGroup));return t?{series:[e.index,t.index],fill:Nh(ht.yhatUpper)}:null})).filter((e=>null!==e));o.length&&o.forEach((t=>{e.addBand(t)}))})(f,n),f.redraw())}),[n,h]),(0,r.useEffect)((()=>{f&&(Object.keys(i.limits.range).forEach((e=>{f.scales[e]&&(f.scales[e].range=function(t){return Sh(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,e,i)})})),f.redraw())}),[i]),(0,r.useEffect)((()=>{f&&(f.scales.x.range=()=>xh(g),f.redraw())}),[g]),(0,r.useEffect)((()=>{f&&(f.setSize({width:c.width||400,height:u||500}),f.redraw())}),[u,c]),Nt("div",{className:Cr()({"vm-line-chart":!0,"vm-line-chart_panning":b}),style:{minWidth:"".concat(c.width||400,"px"),minHeight:"".concat(u||500,"px")},children:[Nt("div",{className:"vm-line-chart__u-plot",ref:p}),Nt(Dh,{showTooltip:w,tooltipProps:S(),stickyTooltips:k,handleUnStick:x})]})},Fh=e=>{let{legend:t,onChange:n,isHeatmap:a,isAnomalyView:o}=e;const i=kl(),l=(0,r.useMemo)((()=>{const e=(e=>{const t=Object.keys(e.freeFormFields).filter((e=>"__name__"!==e));return t.map((t=>{const n="".concat(t,"=").concat(JSON.stringify(e.freeFormFields[t]));return{id:"".concat(e.label,".").concat(n),freeField:n,key:t}}))})(t);return a?e.filter((e=>"vmrange"!==e.key)):e}),[t,a]),s=t.statsFormatted,c=Object.values(s).some((e=>e)),u=e=>t=>{t.stopPropagation(),(async e=>{await i(e,"".concat(e," has been copied"))})(e)};return Nt("div",{className:Cr()({"vm-legend-item":!0,"vm-legend-row":!0,"vm-legend-item_hide":!t.checked&&!a,"vm-legend-item_static":a}),onClick:(e=>t=>{n&&n(e,t.ctrlKey||t.metaKey)})(t),children:[!o&&!a&&Nt("div",{className:"vm-legend-item__marker",style:{backgroundColor:t.color}}),Nt("div",{className:"vm-legend-item-info",children:Nt("span",{className:"vm-legend-item-info__label",children:[t.freeFormFields.__name__,!!l.length&&Nt(Ct.FK,{children:"{"}),l.map(((e,t)=>Nt("span",{className:"vm-legend-item-info__free-fields",onClick:u(e.freeField),title:"copy to clipboard",children:[e.freeField,t+1Nt("div",{className:"vm-legend-item-stats-row",children:[Nt("span",{className:"vm-legend-item-stats-row__key",children:[e,":"]}),Nt("span",{className:"vm-legend-item-stats-row__value",children:s[e]})]},t)))})]})},jh=e=>{let{labels:t,query:n,isAnomalyView:a,onChange:o}=e;const i=(0,r.useMemo)((()=>Array.from(new Set(t.map((e=>e.group))))),[t]),l=i.length>1;return Nt(Ct.FK,{children:Nt("div",{className:"vm-legend",children:i.map((e=>Nt("div",{className:"vm-legend-group",children:Nt(wo,{defaultExpanded:!0,title:Nt("div",{className:"vm-legend-group-title",children:[l&&Nt("span",{className:"vm-legend-group-title__count",children:["Query ",e,": "]}),Nt("span",{className:"vm-legend-group-title__query",children:n[e-1]})]}),children:Nt("div",{children:t.filter((t=>t.group===e)).sort(((e,t)=>(t.median||0)-(e.median||0))).map((e=>Nt(Fh,{legend:e,isAnomalyView:a,onChange:o},e.label)))})})},e)))})})},Hh=e=>{var t;let{min:n,max:a,legendValue:o,series:i}=e;const[l,s]=(0,r.useState)(0),[c,u]=(0,r.useState)(""),[d,h]=(0,r.useState)(""),[m,p]=(0,r.useState)(""),f=(0,r.useMemo)((()=>parseFloat(String((null===o||void 0===o?void 0:o.value)||0).replace("%",""))),[o]);return(0,r.useEffect)((()=>{s(f?(f-n)/(a-n)*100:0),u(f?"".concat(f,"%"):""),h("".concat(n,"%")),p("".concat(a,"%"))}),[f,n,a]),Nt("div",{className:"vm-legend-heatmap__wrapper",children:[Nt("div",{className:"vm-legend-heatmap",children:[Nt("div",{className:"vm-legend-heatmap-gradient",style:{background:"linear-gradient(to right, ".concat(ih.join(", "),")")},children:!!f&&Nt("div",{className:"vm-legend-heatmap-gradient__value",style:{left:"".concat(l,"%")},children:Nt("span",{children:c})})}),Nt("div",{className:"vm-legend-heatmap__value",children:d}),Nt("div",{className:"vm-legend-heatmap__value",children:m})]}),i[1]&&Nt(Fh,{legend:i[1],isHeatmap:!0},null===(t=i[1])||void 0===t?void 0:t.label)]})},Vh=e=>{let{u:t,metrics:n,unit:a}=e;const[i,l]=(0,r.useState)({left:0,top:0}),[s,c]=(0,r.useState)([]),u=(0,r.useCallback)((()=>{var e;const{left:r,top:l}=i,s=it()(t,["data",1,0],[])||[],c=t?t.posToVal(r,"x"):0,u=t?t.posToVal(l,"y"):0,d=s.findIndex(((e,t)=>c>=e&&ce[0]===h))||[],v=s[d],g=o()(1e3*v).tz().format(Ot),y=o()(1e3*p).tz().format(Ot),_=(null===m||void 0===m||null===(e=m.metric)||void 0===e?void 0:e.vmrange)||"";return{unit:a,point:i,u:t,id:"".concat(_,"_").concat(g),dates:[g,y],value:"".concat(f,"%"),info:_,show:+f>0}}),[t,i,n,a]),d=(0,r.useCallback)((()=>{const e=u();e.show&&(s.find((t=>t.id===e.id))||c((t=>[...t,e])))}),[u,s]);return Ar("click",d),{stickyTooltips:s,handleUnStick:e=>{c((t=>t.filter((t=>t.id!==e))))},getTooltipProps:u,setCursor:e=>{const t=e.cursor.left||0,n=e.cursor.top||0;l({left:t,top:n})},resetTooltips:()=>{c([]),l({left:0,top:0})}}},$h=e=>{let{data:t,metrics:n=[],period:a,unit:o,setPeriod:i,layoutSize:l,height:s,onChangeLegend:c}=e;const{isDarkTheme:u}=Mt(),d=(0,r.useRef)(null),[h,m]=(0,r.useState)(),{xRange:p,setPlotScale:f}=Ph({period:a,setPeriod:i}),{onReadyChart:v,isPanning:g}=Th(f);Ih({uPlotInst:h,xRange:p,setPlotScale:f});const{stickyTooltips:y,handleUnStick:_,getTooltipProps:b,setCursor:w,resetTooltips:k}=Vh({u:h,metrics:n,unit:o}),x=(0,r.useMemo)((()=>b()),[b]),S={...wh({width:l.width,height:s}),mode:2,series:[{},{paths:lh(),facets:[{scale:"x",auto:!0,sorted:1},{scale:"y",auto:!0}]}],axes:(()=>{const e=Xd([{}],o);return[...e,{scale:"y",stroke:e[0].stroke,font:e[0].font,size:th,splits:n.map(((e,t)=>t)),values:n.map((e=>e.metric.vmrange))}]})(),scales:{x:{time:!0},y:{log:2,time:!1,range:(e,t,n)=>[t-1,n+1]}},hooks:{ready:[v],setCursor:[w],setSelect:[Eh(f)],destroy:[kh]}};return(0,r.useEffect)((()=>{k();const e=null===t[0]&&Array.isArray(t[1]);if(!d.current||!e)return;const n=new qd(S,t,d.current);return m(n),n.destroy}),[d,t,u]),(0,r.useEffect)((()=>{h&&(h.setSize({width:l.width||400,height:s||500}),h.redraw())}),[s,l]),(0,r.useEffect)((()=>{c(x)}),[x]),Nt("div",{className:Cr()({"vm-line-chart":!0,"vm-line-chart_panning":g}),style:{minWidth:"".concat(l.width||400,"px"),minHeight:"".concat(s||500,"px")},children:[Nt("div",{className:"vm-line-chart__u-plot",ref:d}),Nt(Dh,{showTooltip:!!x.show,tooltipProps:x,stickyTooltips:y,handleUnStick:_})]})},Uh=()=>{const[e,t]=(0,r.useState)(null),[n,a]=(0,r.useState)({width:0,height:0}),o=(0,r.useCallback)((()=>{a({width:(null===e||void 0===e?void 0:e.offsetWidth)||0,height:(null===e||void 0===e?void 0:e.offsetHeight)||0})}),[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]);return Ar("resize",o),(0,r.useEffect)(o,[null===e||void 0===e?void 0:e.offsetHeight,null===e||void 0===e?void 0:e.offsetWidth]),[t,n]},Bh={[ht.yhat]:"yhat",[ht.yhatLower]:"yhat_upper - yhat_lower",[ht.yhatUpper]:"yhat_upper - yhat_lower",[ht.anomaly]:"anomalies",[ht.training]:"training data",[ht.actual]:"y"},qh=e=>{let{series:t}=e;const n=(0,r.useMemo)((()=>{const e=t.reduce(((e,t)=>{const n=Object.prototype.hasOwnProperty.call(t,"forecast"),r=t.forecast!==ht.yhatUpper,a=!e.find((e=>e.forecast===t.forecast));return n&&a&&r&&e.push(t),e}),[]),n={...e[0],forecast:ht.training,color:ah[ht.training]};return e.splice(1,0,n),e.map((e=>({...e,color:"string"===typeof e.stroke?e.stroke:ah[e.forecast||ht.actual]})))}),[t]);return Nt(Ct.FK,{children:Nt("div",{className:"vm-legend-anomaly",children:n.filter((e=>e.forecast!==ht.training)).map(((e,t)=>{var n;return Nt("div",{className:"vm-legend-anomaly-item",children:[Nt("svg",{children:e.forecast===ht.anomaly?Nt("circle",{cx:"15",cy:"7",r:"4",fill:e.color,stroke:e.color,strokeWidth:"1.4"}):Nt("line",{x1:"0",y1:"7",x2:"30",y2:"7",stroke:e.color,strokeWidth:e.width||1,strokeDasharray:null===(n=e.dash)||void 0===n?void 0:n.join(",")})}),Nt("div",{className:"vm-legend-anomaly-item__title",children:Bh[e.forecast||ht.actual]})]},"".concat(t,"_").concat(e.forecast))}))})})},Yh=e=>{let{data:t=[],period:n,customStep:a,query:o,yaxis:i,unit:l,showLegend:s=!0,setYaxisLimits:c,setPeriod:u,alias:d=[],fullWidth:h=!0,height:m,isHistogram:p,isAnomalyView:f,spanGaps:v}=e;const{isMobile:g}=ea(),{timezone:y}=fn(),_=(0,r.useMemo)((()=>a||n.step||"1s"),[n.step,a]),b=(0,r.useMemo)((()=>uh(t,p)),[p,t]),[w,k]=(0,r.useState)([[]]),[x,S]=(0,r.useState)([]),[C,E]=(0,r.useState)([]),[N,A]=(0,r.useState)([]),[M,T]=(0,r.useState)(null),L=(0,r.useMemo)((()=>hh(b,N,d,f)),[b,N,d,f]),I=e=>{const t=((e,t)=>{const n={},r=Object.values(e).flat(),a=Wd(r)||0,o=Yd(r)||1;return n[1]=t?eh(a,o):[a,o],n})(e,!p);c(t)},P=e=>{if(!f)return e;const t=function(e,t){const n=e.reduce(((e,n)=>{const r=t.map((e=>"".concat(e,": ").concat(n[e]||"-"))).join("|");return(e[r]=e[r]||[]).push(n),e}),{});return Object.entries(n).map((e=>{let[t,n]=e;return{keys:t.split("|"),values:n}}))}(e,["group","label"]);return t.map((e=>{const t=e.values[0];return{...t,freeFormFields:{...t.freeFormFields,__name__:""}}}))};(0,r.useEffect)((()=>{const e=[],t={},r=[],a=[{}];null===b||void 0===b||b.forEach(((n,o)=>{const i=L(n,o);a.push(i),r.push(ph(i,n.group));const l=t[n.group]||[];for(const t of n.values)e.push(t[0]),l.push(Ol(t[1]));t[n.group]=l}));const o=((e,t,n)=>{const r=Qt(t)||1,a=Array.from(new Set(e)).sort(((e,t)=>e-t));let o=n.start;const i=qt(n.end+r);let l=0;const s=[];for(;o<=i;){for(;l=a.length||a[l]>o)&&s.push(o)}for(;s.length<2;)s.push(o),o=qt(o+r);return s})(e,_,n),i=b.map((e=>{const t=[],n=e.values,r=n.length;let a=0;for(const u of o){for(;anull!==e)),l=Math.abs((e=>{let t=e[0],n=1;for(let r=1;r1e10*c&&!f?t.map((()=>l)):t}));i.unshift(o),I(t);const l=p?(e=>{const t=e.slice(1,e.length),n=[],r=[];t.forEach(((e,n)=>{e.forEach(((e,a)=>{const o=a*t.length+n;r[o]=e}))})),e[0].forEach((e=>{const r=new Array(t.length).fill(e);n.push(...r)}));const a=new Array(n.length).fill(0).map(((e,n)=>n%t.length));return[null,[n,a,r]]})(i):i;k(l),S(a);const s=P(r);E(s),f&&A(s.map((e=>e.label||"")).slice(1))}),[b,y,p]),(0,r.useEffect)((()=>{const e=[],t=[{}];null===b||void 0===b||b.forEach(((n,r)=>{const a=L(n,r);t.push(a),e.push(ph(a,n.group))})),S(t),E(P(e))}),[N]);const[O,R]=Uh();return Nt("div",{className:Cr()({"vm-graph-view":!0,"vm-graph-view_full-width":h,"vm-graph-view_full-width_mobile":h&&g}),ref:O,children:[!p&&Nt(zh,{data:w,series:x,metrics:b,period:n,yaxis:i,unit:l,setPeriod:u,layoutSize:R,height:m,isAnomalyView:f,spanGaps:v}),p&&Nt($h,{data:w,metrics:b,period:n,unit:l,setPeriod:u,layoutSize:R,height:m,onChangeLegend:T}),f&&s&&Nt(qh,{series:x}),!p&&s&&Nt(jh,{labels:C,query:o,isAnomalyView:f,onChange:(e,t)=>{A((e=>{let{hideSeries:t,legend:n,metaKey:r,series:a,isAnomalyView:o}=e;const{label:i}=n,l=fh(i,t),s=a.map((e=>e.label||""));return o?s.filter((e=>e!==i)):r?l?t.filter((e=>e!==i)):[...t,i]:t.length?l?[...s.filter((e=>e!==i))]:[]:[...s.filter((e=>e!==i))]})({hideSeries:N,legend:e,metaKey:t,series:x,isAnomalyView:f}))}}),p&&s&&Nt(Hh,{series:x,min:i.limits.range[1][0]||0,max:i.limits.range[1][1]||0,legendValue:M})]})},Wh=e=>{let{yaxis:t,setYaxisLimits:n,toggleEnableLimits:a}=e;const{isMobile:o}=ea(),i=(0,r.useMemo)((()=>Object.keys(t.limits.range)),[t.limits.range]),l=(0,r.useCallback)($o()(((e,r,a)=>{const o=t.limits.range;o[r][a]=+e,o[r][0]===o[r][1]||o[r][0]>o[r][1]||n(o)}),500),[t.limits.range]),s=(e,t)=>n=>{l(n,e,t)};return Nt("div",{className:Cr()({"vm-axes-limits":!0,"vm-axes-limits_mobile":o}),children:[Nt(Mo,{value:t.limits.enable,onChange:a,label:"Fix the limits for y-axis",fullWidth:o}),Nt("div",{className:"vm-axes-limits-list",children:i.map((e=>Nt("div",{className:"vm-axes-limits-list__inputs",children:[Nt(Ya,{label:"Min ".concat(e),type:"number",disabled:!t.limits.enable,value:t.limits.range[e][0],onChange:s(e,0)}),Nt(Ya,{label:"Max ".concat(e),type:"number",disabled:!t.limits.enable,value:t.limits.range[e][1],onChange:s(e,1)})]},e)))})]})},Kh=e=>{let{spanGaps:t,onChange:n}=e;const{isMobile:r}=ea();return Nt("div",{children:Nt(Mo,{value:t,onChange:n,label:"Connect null values",fullWidth:r})})},Qh="Graph settings",Zh=e=>{let{yaxis:t,setYaxisLimits:n,toggleEnableLimits:a,spanGaps:o}=e;const i=(0,r.useRef)(null),l=(0,r.useRef)(null),{value:s,toggle:c,setFalse:u}=ca(!1);return Nt("div",{className:"vm-graph-settings",children:[Nt(ya,{title:Qh,children:Nt("div",{ref:l,children:Nt(la,{variant:"text",startIcon:Nt(Ln,{}),onClick:c,ariaLabel:"settings"})})}),Nt(sa,{open:s,buttonRef:l,placement:"bottom-right",onClose:u,title:Qh,children:Nt("div",{className:"vm-graph-settings-popper",ref:i,children:Nt("div",{className:"vm-graph-settings-popper__body",children:[Nt(Wh,{yaxis:t,setYaxisLimits:n,toggleEnableLimits:a}),Nt(Kh,{spanGaps:o.value,onChange:o.onChange})]})})})]})},Gh=e=>{let{isHistogram:t,graphData:n,controlsRef:a,isAnomalyView:o}=e;const{isMobile:i}=ea(),{customStep:l,yaxis:s,spanGaps:c}=Ur(),{period:u}=fn(),{query:d}=Cn(),h=vn(),m=Br(),p=e=>{m({type:"SET_YAXIS_LIMITS",payload:e})},f=Nt("div",{className:"vm-custom-panel-body-header__graph-controls",children:[Nt(xa,{}),Nt(Zh,{yaxis:s,setYaxisLimits:p,toggleEnableLimits:()=>{m({type:"TOGGLE_ENABLE_YAXIS_LIMITS"})},spanGaps:{value:c,onChange:e=>{m({type:"SET_SPAN_GAPS",payload:e})}}})]});return Nt(Ct.FK,{children:[a.current&&(0,r.createPortal)(f,a.current),Nt(Yh,{data:n,period:u,customStep:l,query:d,yaxis:s,setYaxisLimits:p,setPeriod:e=>{let{from:t,to:n}=e;h({type:"SET_PERIOD",payload:{from:t,to:n}})},height:i?.5*window.innerHeight:500,isHistogram:t,isAnomalyView:o,spanGaps:c})]})},Jh=e=>{let{data:t}=e;const n=kl(),a=(0,r.useMemo)((()=>{const e=t.map((e=>1===Object.keys(e).length?JSON.stringify(e):JSON.stringify(e,null,2))).join(",\n").replace(/^/gm,"".concat(" "));return"[\n".concat(e,"\n]")}),[t]);return Nt("div",{className:"vm-json-view",children:[Nt("div",{className:"vm-json-view__copy",children:Nt(la,{variant:"outlined",onClick:async()=>{await n(a,"Formatted JSON has been copied")},children:"Copy JSON"})}),Nt("pre",{className:"vm-json-view__code",children:Nt("code",{children:a})})]})},Xh=e=>{const t={};return e.forEach((e=>Object.entries(e.metric).forEach((e=>t[e[0]]?t[e[0]].options.add(e[1]):t[e[0]]={options:new Set([e[1]])})))),Object.entries(t).map((e=>({key:e[0],variations:e[1].options.size}))).sort(((e,t)=>e.variations-t.variations))},em=(e,t)=>(0,r.useMemo)((()=>{if(!t)return[];return Xh(e).filter((e=>t.includes(e.key)))}),[e,t]),tm=e=>{let{data:t,displayColumns:n}=e;const a=kl(),{isMobile:o}=ea(),{tableCompact:i}=Fr(),l=(0,r.useRef)(null),[s,c]=(0,r.useState)(""),[u,d]=(0,r.useState)("asc"),h=i?em([{group:0,metric:{Data:"Data"}}],["Data"]):em(t,n),m=e=>{const{__name__:t,...n}=e;return t||Object.keys(n).length?t?"".concat(t," ").concat(JSON.stringify(n)):"".concat(JSON.stringify(n)):""},p=new Set(null===t||void 0===t?void 0:t.map((e=>e.group))).size>1,f=(0,r.useMemo)((()=>{const e=null===t||void 0===t?void 0:t.map((e=>({metadata:h.map((t=>i?Pl(e,"",p):e.metric[t.key]||"-")),value:e.value?e.value[1]:"-",values:e.values?e.values.map((e=>{let[t,n]=e;return"".concat(n," @").concat(t)})):[],copyValue:m(e.metric)}))),n="Value"===s,r=h.findIndex((e=>e.key===s));return n||-1!==r?e.sort(((e,t)=>{const a=n?Number(e.value):e.metadata[r],o=n?Number(t.value):t.metadata[r];return("asc"===u?ao)?-1:1})):e}),[h,t,s,u,i]),v=(0,r.useMemo)((()=>f.some((e=>e.copyValue))),[f]),g=e=>()=>{(e=>{d((t=>"asc"===t&&s===e?"desc":"asc")),c(e)})(e)};return f.length?Nt("div",{className:Cr()({"vm-table-view":!0,"vm-table-view_mobile":o}),children:Nt("table",{className:"vm-table",ref:l,children:[Nt("thead",{className:"vm-table-header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:[h.map(((e,t)=>Nt("td",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:g(e.key),children:Nt("div",{className:"vm-table-cell__content",children:[e.key,Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":s===e.key,"vm-table__sort-icon_desc":"desc"===u&&s===e.key}),children:Nt(Hn,{})})]})},t))),Nt("td",{className:"vm-table-cell vm-table-cell_header vm-table-cell_right vm-table-cell_sort",onClick:g("Value"),children:Nt("div",{className:"vm-table-cell__content",children:[Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":"Value"===s,"vm-table__sort-icon_desc":"desc"===u}),children:Nt(Hn,{})}),"Value"]})}),v&&Nt("td",{className:"vm-table-cell vm-table-cell_header"})]})}),Nt("tbody",{className:"vm-table-body",children:f.map(((e,t)=>{return Nt("tr",{className:"vm-table__row",children:[e.metadata.map(((e,n)=>Nt("td",{className:Cr()({"vm-table-cell vm-table-cell_no-wrap":!0,"vm-table-cell_gray":f[t-1]&&f[t-1].metadata[n]===e}),children:e},n))),Nt("td",{className:"vm-table-cell vm-table-cell_right vm-table-cell_no-wrap",children:e.values.length?e.values.map((e=>Nt("p",{children:e},e))):e.value}),v&&Nt("td",{className:"vm-table-cell vm-table-cell_right",children:e.copyValue&&Nt("div",{className:"vm-table-cell__content",children:Nt(ya,{title:"Copy row",children:Nt(la,{variant:"text",color:"gray",size:"small",startIcon:Nt(rr,{}),onClick:(n=e.copyValue,async()=>{await a(n,"Row has been copied")}),ariaLabel:"copy row"})})})})]},t);var n}))})]})}):Nt(na,{variant:"warning",children:"No data to show"})},nm=e=>{let{checked:t=!1,disabled:n=!1,label:r,color:a="secondary",onChange:o}=e;return Nt("div",{className:Cr()({"vm-checkbox":!0,"vm-checkbox_disabled":n,"vm-checkbox_active":t,["vm-checkbox_".concat(a,"_active")]:t,["vm-checkbox_".concat(a)]:a}),onClick:()=>{n||o(!t)},children:[Nt("div",{className:"vm-checkbox-track",children:Nt("div",{className:"vm-checkbox-track__thumb",children:Nt(Xn,{})})}),r&&Nt("span",{className:"vm-checkbox__label",children:r})]})},rm="Table settings",am=e=>{let{columns:t,defaultColumns:n=[],tableCompact:a,onChangeColumns:o,toggleTableCompact:i}=e;const{isMobile:l}=ea(),s=(0,r.useRef)(null),{value:c,toggle:u,setFalse:d}=ca(!1),{value:h,toggle:m}=ca(!1),[p,f]=(0,r.useState)(""),[v,g]=(0,r.useState)(-1),y=(0,r.useMemo)((()=>p?t.filter((e=>e.includes(p))):t),[t,p]),_=(0,r.useMemo)((()=>y.every((e=>n.includes(e)))),[n,y]),b=(0,r.useMemo)((()=>!t.length),[t]),w=e=>{o(n.includes(e)?n.filter((t=>t!==e)):[...n,e])};return(0,r.useEffect)((()=>{wl(t,n)||o(t)}),[t]),Nt("div",{className:"vm-table-settings",children:[Nt(ya,{title:rm,children:Nt("div",{ref:s,children:Nt(la,{variant:"text",startIcon:Nt(Ln,{}),onClick:u,disabled:b,ariaLabel:rm})})}),Nt(sa,{open:c,onClose:d,placement:"bottom-right",buttonRef:s,title:rm,children:Nt("div",{className:Cr()({"vm-table-settings-popper":!0,"vm-table-settings-popper_mobile":l}),children:[Nt("div",{className:"vm-table-settings-popper-list vm-table-settings-popper-list_first",children:Nt(Mo,{label:"Compact view",value:a,onChange:i})}),Nt("div",{className:"vm-table-settings-popper-list",children:Nt("div",{children:[Nt("div",{className:"vm-table-settings-popper-list-header",children:[Nt("h3",{className:"vm-table-settings-popper-list-header__title",children:"Display columns"}),Nt(ya,{title:"search column",children:Nt(la,{color:"primary",variant:"text",onClick:m,startIcon:Nt(xr,{}),ariaLabel:"reset columns"})})]}),h&&Nt(Ya,{placeholder:"search column",startIcon:Nt(xr,{}),value:p,onChange:f,onBlur:()=>{g(-1)},onKeyDown:e=>{const t="ArrowUp"===e.key,n="ArrowDown"===e.key,r="Enter"===e.key;(n||t||r)&&e.preventDefault(),n?g((e=>e+1>y.length-1?e:e+1)):t?g((e=>e-1<0?e:e-1)):r&&w(y[v])},type:"search"}),!y.length&&Nt("p",{className:"vm-table-settings-popper-list__no-found",children:"No columns found"}),Nt("div",{className:"vm-table-settings-popper-list-header",children:!!y.length&&Nt("div",{className:"vm-table-settings-popper-list__item vm-table-settings-popper-list__item_check_all",children:Nt(nm,{checked:_,onChange:()=>{o(_?n.filter((e=>!y.includes(e))):y)},label:_?"Uncheck all":"Check all",disabled:a})})}),Nt("div",{className:"vm-table-settings-popper-list-columns",children:y.map(((e,t)=>{return Nt("div",{className:Cr()({"vm-table-settings-popper-list__item":!0,"vm-table-settings-popper-list__item_focus":t===v}),children:Nt(nm,{checked:n.includes(e),onChange:(r=e,()=>{w(r)}),label:e,disabled:a})},e);var r}))})]})})]})})]})},om=e=>{let{liveData:t,controlsRef:n}=e;const{tableCompact:a}=Fr(),o=jr(),[i,l]=(0,r.useState)(),s=(0,r.useMemo)((()=>Xh(t||[]).map((e=>e.key))),[t]),c=Nt(am,{columns:s,defaultColumns:i,onChangeColumns:l,tableCompact:a,toggleTableCompact:()=>{o({type:"TOGGLE_TABLE_COMPACT"})}});return Nt(Ct.FK,{children:[n.current&&(0,r.createPortal)(c,n.current),Nt(tm,{data:t,displayColumns:i})]})},im=e=>{let{graphData:t,liveData:n,isHistogram:r,displayType:a,controlsRef:o}=e;return a===mt.code&&n?Nt(Jh,{data:n}):a===mt.table&&n?Nt(om,{liveData:n,controlsRef:o}):a===mt.chart&&t?Nt(Gh,{graphData:t,isHistogram:r,controlsRef:o}):null},lm=[Nt(Ct.FK,{children:[Nt("p",{children:"Filename - specify the name for your report file."}),Nt("p",{children:["Default format: ",Nt("code",{children:["vmui_report_$",Dt,".json"]}),"."]}),Nt("p",{children:"This name will be used when saving your report on your device."})]}),Nt(Ct.FK,{children:[Nt("p",{children:"Comment (optional) - add a comment to your report."}),Nt("p",{children:"This can be any additional information that will be useful when reviewing the report later."})]}),Nt(Ct.FK,{children:[Nt("p",{children:"Query trace - enable this option to include a query trace in your report."}),Nt("p",{children:"This will assist in analyzing and diagnosing the query processing."})]}),Nt(Ct.FK,{children:[Nt("p",{children:"Generate Report - click this button to generate and save your report. "}),Nt("p",{children:["After creation, the report can be downloaded and examined on the ",Nt(Re,{to:We.queryAnalyzer,target:"_blank",rel:"noreferrer",className:"vm-link vm-link_underlined",children:Ye[We.queryAnalyzer].title})," page."]})]})],sm=()=>"vmui_report_".concat(o()().utc().format(Dt)),cm=e=>{let{fetchUrl:t}=e;const{query:n}=Cn(),[a,o]=(0,r.useState)(sm()),[i,l]=(0,r.useState)(""),[s,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(),[h,m]=(0,r.useState)(!1),p=(0,r.useRef)(null),f=(0,r.useRef)(null),v=(0,r.useRef)(null),g=(0,r.useRef)(null),y=[p,f,v,g],[_,b]=(0,r.useState)(0),{value:w,toggle:k,setFalse:x}=ca(!1),{value:S,toggle:C,setFalse:E}=ca(!1),N=(0,r.useMemo)((()=>{if(t)return t.map(((e,t)=>{const n=new URL(e);return s?n.searchParams.set("trace","1"):n.searchParams.delete("trace"),{id:t,url:n}}))}),[t,s]),A=(0,r.useCallback)((e=>{const t=JSON.stringify(e,null,2),n=new Blob([t],{type:"application/json"}),r=URL.createObjectURL(n),o=document.createElement("a");o.href=r,o.download="".concat(a||sm(),".json"),document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(r),x()}),[a]),M=(0,r.useCallback)((async()=>{if(N){d(""),m(!0);try{const e=[];for await(const{url:t,id:n}of N){const r=await fetch(t),a=await r.json();if(r.ok)a.vmui={id:n,comment:i,params:at().parse(new URL(t).search.replace(/^\?/,""))},e.push(a);else{const e=a.errorType?"".concat(a.errorType,"\r\n"):"";d("".concat(e).concat((null===a||void 0===a?void 0:a.error)||(null===a||void 0===a?void 0:a.message)||"unknown error"))}}e.length&&A(e)}catch(Fp){Fp instanceof Error&&"AbortError"!==Fp.name&&d("".concat(Fp.name,": ").concat(Fp.message))}finally{m(!1)}}else d(pt.validQuery)}),[N,i,A,n]),T=e=>()=>{b((t=>t+e))};return(0,r.useEffect)((()=>{d(""),o(sm()),l("")}),[w]),(0,r.useEffect)((()=>{b(0)}),[S]),Nt(Ct.FK,{children:[Nt(ya,{title:"Export query",children:Nt(la,{variant:"text",startIcon:Nt(br,{}),onClick:k,ariaLabel:"export query"})}),w&&Nt(ga,{title:"Export query",onClose:x,isOpen:w,children:Nt("div",{className:"vm-download-report",children:[Nt("div",{className:"vm-download-report-settings",children:[Nt("div",{ref:p,children:Nt(Ya,{label:"Filename",value:a,onChange:o})}),Nt("div",{ref:f,children:Nt(Ya,{type:"textarea",label:"Comment",value:i,onChange:l})}),Nt("div",{ref:v,children:Nt(nm,{checked:s,onChange:c,label:"Include query trace"})})]}),u&&Nt(na,{variant:"error",children:u}),Nt("div",{className:"vm-download-report__buttons",children:[Nt(la,{variant:"text",onClick:C,children:"Help"}),Nt("div",{ref:g,children:Nt(la,{onClick:M,disabled:h,children:h?"Loading data...":"Generate Report"})})]}),Nt(sa,{open:S,buttonRef:y[_],placement:"top-left",variant:"dark",onClose:E,children:Nt("div",{className:"vm-download-report-helper",children:[Nt("div",{className:"vm-download-report-helper__description",children:lm[_]}),Nt("div",{className:"vm-download-report-helper__buttons",children:[0!==_&&Nt(la,{onClick:T(-1),size:"small",color:"white",children:"Prev"}),Nt(la,{onClick:_===y.length-1?E:T(1),size:"small",color:"white",variant:"text",children:_===y.length-1?"Close":"Next"})]})]})})]})})]})},um=()=>{Fl();const{isMobile:e}=ea(),{displayType:t}=Fr(),{query:n}=Cn(),{customStep:a}=Ur(),o=Br(),[i,l]=(0,r.useState)([]),[s,c]=(0,r.useState)(!n[0]),[u,d]=(0,r.useState)(!1),h=(0,r.useRef)(null),{fetchUrl:m,isLoading:p,liveData:f,graphData:v,error:g,queryErrors:y,setQueryErrors:_,queryStats:b,warning:w,traces:k,isHistogram:x}=zl({visible:!0,customStep:a,hideQuery:i,showAllSeries:u}),S=!(null!==f&&void 0!==f&&f.length)&&t!==mt.chart,C=!s&&g;return(0,r.useEffect)((()=>{o({type:"SET_IS_HISTOGRAM",payload:x})}),[v]),Nt("div",{className:Cr()({"vm-custom-panel":!0,"vm-custom-panel_mobile":e}),children:[Nt(Tl,{queryErrors:s?[]:y,setQueryErrors:_,setHideError:c,stats:b,onHideQuery:e=>{l(e)},onRunQuery:()=>{c(!1)}}),Nt(Kl,{traces:k,displayType:t}),p&&Nt(Al,{}),C&&Nt(na,{variant:"error",children:g}),S&&Nt(na,{variant:"info",children:Nt($l,{})}),w&&Nt(Ql,{warning:w,query:n,onChange:d}),Nt("div",{className:Cr()({"vm-custom-panel-body":!0,"vm-custom-panel-body_mobile":e,"vm-block":!0,"vm-block_mobile":e}),children:[Nt("div",{className:"vm-custom-panel-body-header",ref:h,children:[Nt("div",{className:"vm-custom-panel-body-header__tabs",children:Nt(Ir,{})}),(v||f)&&Nt(cm,{fetchUrl:m})]}),Nt(im,{graphData:v,liveData:f,isHistogram:x,displayType:t,controlsRef:h})]})]})},dm=e=>{let{title:t,description:n,unit:a,expr:o,showLegend:i,filename:l,alias:s}=e;const{isMobile:c}=ea(),{period:u}=fn(),{customStep:d}=Ur(),h=vn(),m=(0,r.useRef)(null),[p,f]=(0,r.useState)(!1),[v,g]=(0,r.useState)(!1),[y,_]=(0,r.useState)({limits:{enable:!1,range:{1:[0,0]}}}),b=(0,r.useMemo)((()=>Array.isArray(o)&&o.every((e=>e))),[o]),{isLoading:w,graphData:k,error:x,warning:S}=zl({predefinedQuery:b?o:[],display:mt.chart,visible:p,customStep:d}),C=e=>{const t={...y};t.limits.range=e,_(t)};if((0,r.useEffect)((()=>{const e=new IntersectionObserver((e=>{e.forEach((e=>f(e.isIntersecting)))}),{threshold:.1});return m.current&&e.observe(m.current),()=>{m.current&&e.unobserve(m.current)}}),[m]),!b)return Nt(na,{variant:"error",children:[Nt("code",{children:'"expr"'})," not found. Check the configuration file ",Nt("b",{children:l}),"."]});const E=()=>Nt("div",{className:"vm-predefined-panel-header__description vm-default-styles",children:[n&&Nt(Ct.FK,{children:[Nt("div",{children:[Nt("span",{children:"Description:"}),Nt("div",{dangerouslySetInnerHTML:{__html:ul(n)}})]}),Nt("hr",{})]}),Nt("div",{children:[Nt("span",{children:"Queries:"}),Nt("div",{children:o.map(((e,t)=>Nt("div",{children:e},"".concat(t,"_").concat(e))))})]})]});return Nt("div",{className:"vm-predefined-panel",ref:m,children:[Nt("div",{className:"vm-predefined-panel-header",children:[Nt(ya,{title:Nt(E,{}),children:Nt("div",{className:"vm-predefined-panel-header__info",children:Nt(On,{})})}),Nt("h3",{className:"vm-predefined-panel-header__title",children:t||""}),Nt(Zh,{yaxis:y,setYaxisLimits:C,toggleEnableLimits:()=>{const e={...y};e.limits.enable=!e.limits.enable,_(e)},spanGaps:{value:v,onChange:g}})]}),Nt("div",{className:"vm-predefined-panel-body",children:[w&&Nt(Al,{}),x&&Nt(na,{variant:"error",children:x}),S&&Nt(na,{variant:"warning",children:S}),k&&Nt(Yh,{data:k,period:u,customStep:d,query:o,yaxis:y,unit:a,alias:s,showLegend:i,setYaxisLimits:C,setPeriod:e=>{let{from:t,to:n}=e;h({type:"SET_PERIOD",payload:{from:t,to:n}})},fullWidth:!1,height:c?.5*window.innerHeight:500,spanGaps:v})]})]})},hm=e=>{let{index:t,title:n,panels:a,filename:o}=e;const i=Mr(),l=(0,r.useMemo)((()=>i.width/12),[i]),[s,c]=(0,r.useState)(!t),[u,d]=(0,r.useState)([]);(0,r.useEffect)((()=>{d(a&&a.map((e=>e.width||12)))}),[a]);const[h,m]=(0,r.useState)({start:0,target:0,enable:!1}),p=(0,r.useCallback)((e=>{if(!h.enable)return;const{start:t}=h,n=Math.ceil((t-e.clientX)/l);if(Math.abs(n)>=12)return;const r=u.map(((e,t)=>e-(t===h.target?n:0)));d(r)}),[h,l]),f=(0,r.useCallback)((()=>{m({...h,enable:!1})}),[h]),v=e=>t=>{((e,t)=>{m({start:e.clientX,target:t,enable:!0})})(t,e)};Ar("mousemove",p),Ar("mouseup",f);return Nt("div",{className:"vm-predefined-dashboard",children:Nt(wo,{defaultExpanded:s,onChange:e=>c(e),title:Nt((()=>Nt("div",{className:Cr()({"vm-predefined-dashboard-header":!0,"vm-predefined-dashboard-header_open":s}),children:[(n||o)&&Nt("span",{className:"vm-predefined-dashboard-header__title",children:n||"".concat(t+1,". ").concat(o)}),a&&Nt("span",{className:"vm-predefined-dashboard-header__count",children:["(",a.length," panels)"]})]})),{}),children:Nt("div",{className:"vm-predefined-dashboard-panels",children:Array.isArray(a)&&a.length?a.map(((e,t)=>Nt("div",{className:"vm-predefined-dashboard-panels-panel vm-block vm-block_empty-padding",style:{gridColumn:"span ".concat(u[t])},children:[Nt(dm,{title:e.title,description:e.description,unit:e.unit,expr:e.expr,alias:e.alias,filename:o,showLegend:e.showLegend}),Nt("button",{className:"vm-predefined-dashboard-panels-panel__resizer",onMouseDown:v(t),"aria-label":"resize the panel"})]},t))):Nt("div",{className:"vm-predefined-dashboard-panels-panel__alert",children:Nt(na,{variant:"error",children:[Nt("code",{children:'"panels"'})," not found. Check the configuration file ",Nt("b",{children:o}),"."]})})})})})};function mm(e){return function(e,t){return Object.fromEntries(Object.entries(e).filter(t))}(e,(e=>!!e[1]||"number"===typeof e[1]))}const pm=()=>{(()=>{const{duration:e,relativeTime:t,period:{date:n}}=fn(),{customStep:a}=Ur(),{setSearchParamsFromKeys:o}=uo(),i=()=>{const r=mm({"g0.range_input":e,"g0.end_input":n,"g0.step_input":a,"g0.relative_time":t});o(r)};(0,r.useEffect)(i,[e,t,n,a]),(0,r.useEffect)(i,[])})();const{isMobile:e}=ea(),{dashboardsSettings:t,dashboardsLoading:n,dashboardsError:a}=Kr(),[o,i]=(0,r.useState)(0),l=(0,r.useMemo)((()=>t.map(((e,t)=>({label:e.title||"",value:t})))),[t]),s=(0,r.useMemo)((()=>t[o]||{}),[t,o]),c=(0,r.useMemo)((()=>null===s||void 0===s?void 0:s.rows),[s]),u=(0,r.useMemo)((()=>s.title||s.filename||""),[s]),d=(0,r.useMemo)((()=>Array.isArray(c)&&!!c.length),[c]),h=e=>()=>{(e=>{i(e)})(e)};return Nt("div",{className:"vm-predefined-panels",children:[n&&Nt(Al,{}),!t.length&&a&&Nt(na,{variant:"error",children:a}),!t.length&&Nt(na,{variant:"info",children:"Dashboards not found"}),l.length>1&&Nt("div",{className:Cr()({"vm-predefined-panels-tabs":!0,"vm-predefined-panels-tabs_mobile":e}),children:l.map((e=>Nt("div",{className:Cr()({"vm-predefined-panels-tabs__tab":!0,"vm-predefined-panels-tabs__tab_active":e.value==o}),onClick:h(e.value),children:e.label},e.value)))}),Nt("div",{className:"vm-predefined-panels__dashboards",children:[d&&c.map(((e,t)=>Nt(hm,{index:t,filename:u,title:e.title,panels:e.panels},"".concat(o,"_").concat(t)))),!!t.length&&!d&&Nt(na,{variant:"error",children:[Nt("code",{children:'"rows"'})," not found. Check the configuration file ",Nt("b",{children:u}),"."]})]})]})},fm=(e,t)=>{const n=t.match?"&match[]="+encodeURIComponent(t.match):"",r=t.focusLabel?"&focusLabel="+encodeURIComponent(t.focusLabel):"";return"".concat(e,"/api/v1/status/tsdb?topN=").concat(t.topN,"&date=").concat(t.date).concat(n).concat(r)};class vm{constructor(){this.tsdbStatus=void 0,this.tabsNames=void 0,this.isPrometheus=void 0,this.tsdbStatus=this.defaultTSDBStatus,this.tabsNames=["table","graph"],this.isPrometheus=!1,this.getDefaultState=this.getDefaultState.bind(this)}set tsdbStatusData(e){this.isPrometheus=!(null===e||void 0===e||!e.headStats),this.tsdbStatus=e}get tsdbStatusData(){return this.tsdbStatus}get defaultTSDBStatus(){return{totalSeries:0,totalSeriesPrev:0,totalSeriesByAll:0,totalLabelValuePairs:0,seriesCountByMetricName:[],seriesCountByLabelName:[],seriesCountByFocusLabelValue:[],seriesCountByLabelValuePair:[],labelValueCountByLabelName:[]}}get isPrometheusData(){return this.isPrometheus}keys(e,t){const n=e&&/__name__=".+"/.test(e),r=e&&/{.+=".+"}/g.test(e),a=e&&/__name__=".+", .+!=""/g.test(e);let o=[];return o=t||a?o.concat("seriesCountByFocusLabelValue"):n?o.concat("labelValueCountByLabelName"):r?o.concat("seriesCountByMetricName","seriesCountByLabelName"):o.concat("seriesCountByMetricName","seriesCountByLabelName","seriesCountByLabelValuePair","labelValueCountByLabelName"),o}getDefaultState(e,t){return this.keys(e,t).reduce(((e,t)=>({...e,tabs:{...e.tabs,[t]:this.tabsNames},containerRefs:{...e.containerRefs,[t]:(0,r.useRef)(null)}})),{tabs:{},containerRefs:{}})}sectionsTitles(e){return{seriesCountByMetricName:"Metric names with the highest number of series",seriesCountByLabelName:"Labels with the highest number of series",seriesCountByFocusLabelValue:'Values for "'.concat(e,'" label with the highest number of series'),seriesCountByLabelValuePair:"Label=value pairs with the highest number of series",labelValueCountByLabelName:"Labels with the highest number of unique values"}}get sectionsTips(){return{seriesCountByMetricName:"\n

    \n This table returns a list of metrics with the highest cardinality.\n The cardinality of a metric is the number of time series associated with that metric,\n where each time series is defined as a unique combination of key-value label pairs.\n

    \n

    \n When looking to reduce the number of active series in your data source,\n you can start by inspecting individual metrics with high cardinality\n (i.e. that have lots of active time series associated with them),\n since that single metric contributes a large fraction of the series that make up your total series count.\n

    ",seriesCountByLabelName:"\n

    \n This table returns a list of the labels with the highest number of series.\n

    \n

    \n Use this table to identify labels that are storing dimensions with high cardinality\n (many different label values).\n

    \n

    \n It is recommended to choose labels such that they have a finite set of values,\n since every unique combination of key-value label pairs creates a new time series\n and therefore can dramatically increase the number of time series in your system.\n

    ",seriesCountByFocusLabelValue:"\n

    \n This table returns a list of unique label values per selected label.\n

    \n

    \n Use this table to identify label values that are storing per each selected series.\n

    ",labelValueCountByLabelName:"\n

    \n This table returns a list of labels with the highest number of the unique values.\n

    \n ",seriesCountByLabelValuePair:"\n

    \n This table returns a list of the label values pairs with the highest number of series.\n

    \n

    \n Use this table to identify unique label values pairs. This helps to identify same labels \n is applied to count timeseries in your system, since every unique combination of key-value label pairs \n creates a new time series and therefore can dramatically increase the number of time series in your system\n

    "}}get tablesHeaders(){return{seriesCountByMetricName:gm,seriesCountByLabelName:ym,seriesCountByFocusLabelValue:_m,seriesCountByLabelValuePair:bm,labelValueCountByLabelName:wm}}totalSeries(e){return"labelValueCountByLabelName"===e?-1:arguments.length>1&&void 0!==arguments[1]&&arguments[1]?this.tsdbStatus.totalSeriesPrev:this.tsdbStatus.totalSeries}}const gm=[{id:"name",label:"Metric name"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total",info:"Shows the share of a metric to the total number of series"},{id:"action",label:""}],ym=[{id:"name",label:"Label name"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total",info:"Shows the share of the label to the total number of series"},{id:"action",label:""}],_m=[{id:"name",label:"Label value"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total"},{disablePadding:!1,id:"action",label:"",numeric:!1}],bm=[{id:"name",label:"Label=value pair"},{id:"value",label:"Number of series"},{id:"percentage",label:"Share in total",info:"Shows the share of the label value pair to the total number of series"},{id:"action",label:""}],wm=[{id:"name",label:"Label name"},{id:"value",label:"Number of unique values"},{id:"action",label:""}],km=()=>{const e=new vm,[t]=He(),n=t.get("match"),a=t.get("focusLabel"),i=+(t.get("topN")||10),l=t.get("date")||o()().tz().format(It),s=Ka(l),c=(0,r.useRef)(),{serverUrl:u}=Mt(),[d,h]=(0,r.useState)(!1),[m,p]=(0,r.useState)(),[f,v]=(0,r.useState)(e.defaultTSDBStatus),[g,y]=(0,r.useState)(!1),_=async e=>{const t=await fetch(e);if(t.ok)return await t.json();throw new Error("Request failed with status ".concat(t.status))},b=async t=>{if(!u)return;p(""),h(!0),v(e.defaultTSDBStatus);const r={...t,date:t.date,topN:0,match:"",focusLabel:""},a={...t,date:o()(t.date).subtract(1,"day").format(It)},i=[fm(u,t),fm(u,a)];s!==l&&(t.match||t.focusLabel)&&i.push(fm(u,r));try{var d,m,g,y,b,w,k,x,S,C;const[e,t,r]=await Promise.all(i.map(_)),a={...t.data},{data:o}=r||c.current||e;c.current={data:o};const l={...e.data,totalSeries:(null===(d=e.data)||void 0===d?void 0:d.totalSeries)||(null===(m=e.data)||void 0===m||null===(g=m.headStats)||void 0===g?void 0:g.numSeries)||0,totalLabelValuePairs:(null===(y=e.data)||void 0===y?void 0:y.totalLabelValuePairs)||(null===(b=e.data)||void 0===b||null===(w=b.headStats)||void 0===w?void 0:w.numLabelValuePairs)||0,seriesCountByLabelName:(null===(k=e.data)||void 0===k?void 0:k.seriesCountByLabelName)||[],seriesCountByFocusLabelValue:(null===(x=e.data)||void 0===x?void 0:x.seriesCountByFocusLabelValue)||[],totalSeriesByAll:(null===o||void 0===o?void 0:o.totalSeries)||(null===o||void 0===o||null===(S=o.headStats)||void 0===S?void 0:S.numSeries)||f.totalSeriesByAll||0,totalSeriesPrev:(null===a||void 0===a?void 0:a.totalSeries)||(null===a||void 0===a||null===(C=a.headStats)||void 0===C?void 0:C.numSeries)||0},s=null===n||void 0===n?void 0:n.replace(/[{}"]/g,"");l.seriesCountByLabelValuePair=l.seriesCountByLabelValuePair.filter((e=>e.name!==s)),((e,t)=>{Object.keys(e).forEach((n=>{const r=n,a=e[r],o=t[r];Array.isArray(a)&&Array.isArray(o)&&a.forEach((e=>{var t;const n=null===(t=o.find((t=>t.name===e.name)))||void 0===t?void 0:t.value;e.diff=n?e.value-n:0,e.valuePrev=n||0}))}))})(l,a),v(l),h(!1)}catch(Fp){h(!1),Fp instanceof Error&&p("".concat(Fp.name,": ").concat(Fp.message))}};return(0,r.useEffect)((()=>{b({topN:i,match:n,date:l,focusLabel:a})}),[u,n,a,i,l]),(0,r.useEffect)((()=>{m&&(v(e.defaultTSDBStatus),h(!1))}),[m]),(0,r.useEffect)((()=>{const e=Je(u);y(!!e)}),[u]),e.tsdbStatusData=f,{isLoading:d,appConfigurator:e,error:m,isCluster:g}},xm={seriesCountByMetricName:e=>{let{query:t}=e;return Sm("__name__",t)},seriesCountByLabelName:e=>{let{query:t}=e;return"{".concat(t,'!=""}')},seriesCountByFocusLabelValue:e=>{let{query:t,focusLabel:n}=e;return Sm(n,t)},seriesCountByLabelValuePair:e=>{let{query:t}=e;const n=t.split("="),r=n[0],a=n.slice(1).join("=");return Sm(r,a)},labelValueCountByLabelName:e=>{let{query:t,match:n}=e;return""===n?"{".concat(t,'!=""}'):"".concat(n.replace("}",""),", ").concat(t,'!=""}')}},Sm=(e,t)=>e?"{"+e+"="+JSON.stringify(t)+"}":"",Cm=e=>{var t;let{totalSeries:n=0,totalSeriesPrev:r=0,totalSeriesAll:a=0,seriesCountByMetricName:o=[],isPrometheus:i}=e;const{isMobile:l}=ea(),[s]=He(),c=s.get("match"),u=s.get("focusLabel"),d=/__name__/.test(c||""),h=(null===(t=o[0])||void 0===t?void 0:t.value)/a*100,m=n-r,p=Math.abs(m)/r*100,f=[{title:"Total series",value:n.toLocaleString("en-US"),dynamic:n&&r&&!i?"".concat(p.toFixed(2),"%"):"",display:!u,info:'The total number of active time series. \n A time series is uniquely identified by its name plus a set of its labels. \n For example, temperature{city="NY",country="US"} and temperature{city="SF",country="US"} \n are two distinct series, since they differ by the city label.'},{title:"Percentage from total",value:isNaN(h)?"-":"".concat(h.toFixed(2),"%"),display:d,info:"The share of these series in the total number of time series."}].filter((e=>e.display));return f.length?Nt("div",{className:Cr()({"vm-cardinality-totals":!0,"vm-cardinality-totals_mobile":l}),children:f.map((e=>{let{title:t,value:n,info:a,dynamic:o}=e;return Nt("div",{className:"vm-cardinality-totals-card",children:[Nt("h4",{className:"vm-cardinality-totals-card__title",children:[t,a&&Nt(ya,{title:Nt("p",{className:"vm-cardinality-totals-card__tooltip",children:a}),children:Nt("div",{className:"vm-cardinality-totals-card__info-icon",children:Nt(On,{})})})]}),Nt("span",{className:"vm-cardinality-totals-card__value",children:n}),!!o&&Nt(ya,{title:"in relation to the previous day: ".concat(r.toLocaleString("en-US")),children:Nt("span",{className:Cr()({"vm-dynamic-number":!0,"vm-dynamic-number_positive vm-dynamic-number_down":m<0,"vm-dynamic-number_negative vm-dynamic-number_up":m>0}),children:o})})]},t)}))}):null},Em=(e,t)=>{const[n]=He(),a=n.get(t)?n.get(t):e,[o,i]=(0,r.useState)(a);return(0,r.useEffect)((()=>{a!==o&&i(a)}),[a]),[o,i]},Nm=e=>{let{isPrometheus:t,isCluster:n,...a}=e;const{isMobile:o}=ea(),[i]=He(),{setSearchParamsFromKeys:l}=uo(),s=i.get("tips")||"",[c,u]=Em("","match"),[d,h]=Em("","focusLabel"),[m,p]=Em(10,"topN"),f=(0,r.useMemo)((()=>m<0?"Number must be bigger than zero":""),[m]),v=()=>{l({match:c,topN:m,focusLabel:d})};return(0,r.useEffect)((()=>{const e=i.get("match"),t=+(i.get("topN")||10),n=i.get("focusLabel");e!==c&&u(e||""),t!==m&&p(t),n!==d&&h(n||"")}),[i]),Nt("div",{className:Cr()({"vm-cardinality-configurator":!0,"vm-cardinality-configurator_mobile":o,"vm-block":!0,"vm-block_mobile":o}),children:[Nt("div",{className:"vm-cardinality-configurator-controls",children:[Nt("div",{className:"vm-cardinality-configurator-controls__query",children:Nt(Ya,{label:"Time series selector",type:"string",value:c,onChange:u,onEnter:v})}),Nt("div",{className:"vm-cardinality-configurator-controls__item",children:Nt(Ya,{label:"Focus label",type:"text",value:d||"",onChange:h,onEnter:v,endIcon:Nt(ya,{title:Nt("div",{children:Nt("p",{children:"To identify values with the highest number of series for the selected label."})}),children:Nt(sr,{})})})}),Nt("div",{className:"vm-cardinality-configurator-controls__item vm-cardinality-configurator-controls__item_limit",children:Nt(Ya,{label:"Limit entries",type:"number",value:t?10:m,error:f,disabled:t,helperText:t?"not available for Prometheus":"",onChange:e=>{const t=+e;p(isNaN(t)?0:t)},onEnter:v})})]}),Nt("div",{className:"vm-cardinality-configurator-bottom",children:[Nt(Cm,{isPrometheus:t,isCluster:n,...a}),n&&Nt("div",{className:"vm-cardinality-configurator-bottom-helpful",children:Nt(jl,{href:"https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cardinality-explorer-statistic-inaccuracy",withIcon:!0,children:[Nt(ir,{}),"Statistic inaccuracy explanation"]})}),Nt("div",{className:"vm-cardinality-configurator-bottom-helpful",children:Nt(jl,{href:"https://docs.victoriametrics.com/#cardinality-explorer",withIcon:!0,children:[Nt(ir,{}),"Documentation"]})}),Nt("div",{className:"vm-cardinality-configurator-bottom__execute",children:[Nt(ya,{title:s?"Hide tips":"Show tips",children:Nt(la,{variant:"text",color:s?"warning":"gray",startIcon:Nt(hr,{}),onClick:()=>{const e=i.get("tips")||"";l({tips:e?"":"true"})},ariaLabel:"visibility tips"})}),Nt(la,{variant:"text",startIcon:Nt(Pn,{}),onClick:()=>{l({match:"",focusLabel:""})},children:"Reset"}),Nt(la,{startIcon:Nt(qn,{}),onClick:v,children:"Execute Query"})]})]})]})};function Am(e){const{order:t,orderBy:n,onRequestSort:r,headerCells:a}=e;return Nt("thead",{className:"vm-table-header vm-cardinality-panel-table__header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:a.map((e=>{return Nt("th",{className:Cr()({"vm-table-cell vm-table-cell_header":!0,"vm-table-cell_sort":"action"!==e.id&&"percentage"!==e.id,"vm-table-cell_right":"action"===e.id}),onClick:(a=e.id,e=>{r(e,a)}),children:Nt("div",{className:"vm-table-cell__content",children:[e.info?Nt(ya,{title:e.info,children:[Nt("div",{className:"vm-metrics-content-header__tip-icon",children:Nt(On,{})}),e.label]}):Nt(Ct.FK,{children:e.label}),"action"!==e.id&&"percentage"!==e.id&&Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":n===e.id,"vm-table__sort-icon_desc":"desc"===t&&n===e.id}),children:Nt(Hn,{})})]})},e.id);var a}))})})}const Mm=["date","timestamp","time"];function Tm(e,t,n){const r=e[n],a=t[n],i=Mm.includes("".concat(n))?o()("".concat(r)).unix():r,l=Mm.includes("".concat(n))?o()("".concat(a)).unix():a;return li?1:0}function Lm(e,t){return"desc"===e?(e,n)=>Tm(e,n,t):(e,n)=>-Tm(e,n,t)}function Im(e,t){const n=e.map(((e,t)=>[e,t]));return n.sort(((e,n)=>{const r=t(e[0],n[0]);return 0!==r?r:e[1]-n[1]})),n.map((e=>e[0]))}const Pm=e=>{let{rows:t,headerCells:n,defaultSortColumn:a,tableCells:o}=e;const[i,l]=(0,r.useState)("desc"),[s,c]=(0,r.useState)(a),u=Im(t,Lm(i,s));return Nt("table",{className:"vm-table vm-cardinality-panel-table",children:[Nt(Am,{order:i,orderBy:s,onRequestSort:(e,t)=>{l(s===t&&"asc"===i?"desc":"asc"),c(t)},rowCount:t.length,headerCells:n}),Nt("tbody",{className:"vm-table-header",children:u.map((e=>Nt("tr",{className:"vm-table__row",children:o(e)},e.name)))})]})},Om=e=>{let{row:t,totalSeries:n,totalSeriesPrev:r,onActionClick:a}=e;const o=n>0?t.value/n*100:-1,i=r>0?t.valuePrev/r*100:-1,l=[o,i].some((e=>-1===e)),s=o-i,c=l?"":"".concat(s.toFixed(2),"%"),u=()=>{a(t.name)};return Nt(Ct.FK,{children:[Nt("td",{className:"vm-table-cell",children:Nt("span",{className:"vm-link vm-link_colored",onClick:u,children:t.name})},t.name),Nt("td",{className:"vm-table-cell",children:[t.value,!!t.diff&&Nt(ya,{title:"in relation to the previous day: ".concat(t.valuePrev),children:Nt("span",{className:Cr()({"vm-dynamic-number":!0,"vm-dynamic-number_positive":t.diff<0,"vm-dynamic-number_negative":t.diff>0}),children:["\xa0",t.diff>0?"+":"",t.diff]})})]},t.value),o>0&&Nt("td",{className:"vm-table-cell",children:Nt("div",{className:"vm-cardinality-panel-table__progress",children:[Nt(Ul,{value:o}),c&&Nt(ya,{title:"in relation to the previous day",children:Nt("span",{className:Cr()({"vm-dynamic-number":!0,"vm-dynamic-number_positive vm-dynamic-number_down":s<0,"vm-dynamic-number_negative vm-dynamic-number_up":s>0}),children:c})})]})},t.progressValue),Nt("td",{className:"vm-table-cell vm-table-cell_right",children:Nt("div",{className:"vm-table-cell__content",children:Nt(ya,{title:"Filter by ".concat(t.name),children:Nt(la,{variant:"text",size:"small",onClick:u,children:Nt(Yn,{})})})})},"action")]})},Rm=e=>{let{data:t}=e;const[n,a]=(0,r.useState)([]),[o,i]=(0,r.useState)([0,0]);return(0,r.useEffect)((()=>{const e=t.sort(((e,t)=>t.value-e.value)),n=(e=>{const t=e.map((e=>e.value)),n=Math.ceil(t[0]||1),r=n/9;return new Array(11).fill(n+r).map(((e,t)=>Math.round(e-r*t)))})(e);i(n),a(e.map((e=>({...e,percentage:e.value/n[0]*100}))))}),[t]),Nt("div",{className:"vm-simple-bar-chart",children:[Nt("div",{className:"vm-simple-bar-chart-y-axis",children:o.map((e=>Nt("div",{className:"vm-simple-bar-chart-y-axis__tick",children:e},e)))}),Nt("div",{className:"vm-simple-bar-chart-data",children:n.map((e=>{let{name:t,value:n,percentage:r}=e;return Nt(ya,{title:"".concat(t,": ").concat(n),placement:"top-center",children:Nt("div",{className:"vm-simple-bar-chart-data-item",style:{maxHeight:"".concat(r||0,"%")}})},"".concat(t,"_").concat(n))}))})]})},Dm=e=>{let{rows:t,tabs:n=[],chartContainer:a,totalSeries:o,totalSeriesPrev:i,onActionClick:l,sectionTitle:s,tip:c,tableHeaderCells:u,isPrometheus:d}=e;const{isMobile:h}=ea(),[m,p]=(0,r.useState)("table"),f=d&&!t.length,v=(0,r.useMemo)((()=>n.map(((e,t)=>({value:e,label:e,icon:Nt(0===t?Kn:Wn,{})})))),[n]);return Nt("div",{className:Cr()({"vm-metrics-content":!0,"vm-metrics-content_mobile":h,"vm-block":!0,"vm-block_mobile":h}),children:[Nt("div",{className:"vm-metrics-content-header vm-section-header",children:[Nt("h5",{className:Cr()({"vm-metrics-content-header__title":!0,"vm-section-header__title":!0,"vm-section-header__title_mobile":h}),children:[!h&&c&&Nt(ya,{title:Nt("p",{dangerouslySetInnerHTML:{__html:c},className:"vm-metrics-content-header__tip"}),children:Nt("div",{className:"vm-metrics-content-header__tip-icon",children:Nt(On,{})})}),s]}),Nt("div",{className:"vm-section-header__tabs",children:Nt(Tr,{activeItem:m,items:v,onChange:p})})]}),f&&Nt("div",{className:"vm-metrics-content-prom-data",children:[Nt("div",{className:"vm-metrics-content-prom-data__icon",children:Nt(On,{})}),Nt("h3",{className:"vm-metrics-content-prom-data__title",children:"Prometheus Data Limitation"}),Nt("p",{className:"vm-metrics-content-prom-data__text",children:["Due to missing data from your Prometheus source, some tables may appear empty.",Nt("br",{}),"This does not indicate an issue with your system or our tool."]})]}),!f&&"table"===m&&Nt("div",{ref:a,className:Cr()({"vm-metrics-content__table":!0,"vm-metrics-content__table_mobile":h}),children:Nt(Pm,{rows:t,headerCells:u,defaultSortColumn:"value",tableCells:e=>Nt(Om,{row:e,totalSeries:o,totalSeriesPrev:i,onActionClick:l})})}),!f&&"graph"===m&&Nt("div",{className:"vm-metrics-content__chart",children:Nt(Rm,{data:t.map((e=>{let{name:t,value:n}=e;return{name:t,value:n}}))})})]})},zm=e=>{let{title:t,children:n}=e;return Nt("div",{className:"vm-cardinality-tip",children:[Nt("div",{className:"vm-cardinality-tip-header",children:[Nt("div",{className:"vm-cardinality-tip-header__tip-icon",children:Nt(hr,{})}),Nt("h4",{className:"vm-cardinality-tip-header__title",children:t||"Tips"})]}),Nt("p",{className:"vm-cardinality-tip__description",children:n})]})},Fm=()=>Nt(zm,{title:"Metrics with a high number of series",children:Nt("ul",{children:[Nt("li",{children:["Identify and eliminate labels with frequently changed values to reduce their\xa0",Nt(jl,{href:"https://docs.victoriametrics.com/FAQ.html#what-is-high-cardinality",children:"cardinality"}),"\xa0and\xa0",Nt(jl,{href:"https://docs.victoriametrics.com/FAQ.html#what-is-high-churn-rate",children:"high churn rate"})]}),Nt("li",{children:["Find unused time series and\xa0",Nt(jl,{href:"https://docs.victoriametrics.com/relabeling.html",children:"drop entire metrics"})]}),Nt("li",{children:["Aggregate time series before they got ingested into the database via\xa0",Nt(jl,{href:"https://docs.victoriametrics.com/stream-aggregation.html",children:"streaming aggregation"})]})]})}),jm=()=>Nt(zm,{title:"Labels with a high number of unique values",children:Nt("ul",{children:[Nt("li",{children:"Decrease the number of unique label values to reduce cardinality"}),Nt("li",{children:["Drop the label entirely via\xa0",Nt(jl,{href:"https://docs.victoriametrics.com/relabeling.html",children:"relabeling"})]}),Nt("li",{children:"For volatile label values (such as URL path, user session, etc.) consider printing them to the log file instead of adding to time series"})]})}),Hm=()=>Nt(zm,{title:"Dashboard of a single metric",children:[Nt("p",{children:"This dashboard helps to understand the cardinality of a single metric."}),Nt("p",{children:"Each time series is a unique combination of key-value label pairs. Therefore a label key with many values can create a lot of time series for a particular metric. If you\u2019re trying to decrease the cardinality of a metric, start by looking at the labels with the highest number of values."}),Nt("p",{children:"Use the series selector at the top of the page to apply additional filters."})]}),Vm=()=>Nt(zm,{title:"Dashboard of a label",children:[Nt("p",{children:"This dashboard helps you understand the count of time series per label."}),Nt("p",{children:"Use the selector at the top of the page to pick a label name you\u2019d like to inspect. For the selected label name, you\u2019ll see the label values that have the highest number of series associated with them. So if you\u2019ve chosen `instance` as your label name, you may see that `657` time series have value \u201chost-1\u201d attached to them and `580` time series have value `host-2` attached to them."}),Nt("p",{children:"This can be helpful in allowing you to determine where the bulk of your time series are coming from. If the label \u201cinstance=host-1\u201d was applied to 657 series and the label \u201cinstance=host-2\u201d was only applied to 580 series, you\u2019d know, for example, that host-01 was responsible for sending the majority of the time series."})]}),$m=()=>{const{isMobile:e}=ea(),[t]=He(),{setSearchParamsFromKeys:n}=uo(),r=t.get("tips")||"",a=t.get("match")||"",o=t.get("focusLabel")||"",{isLoading:i,appConfigurator:l,error:s,isCluster:c}=km(),{tsdbStatusData:u,getDefaultState:d,tablesHeaders:h,sectionsTips:m}=l,p=d(a,o);return Nt("div",{className:Cr()({"vm-cardinality-panel":!0,"vm-cardinality-panel_mobile":e}),children:[i&&Nt(Al,{message:"Please wait while cardinality stats is calculated. \n This may take some time if the db contains big number of time series."}),Nt(Nm,{isPrometheus:l.isPrometheusData,totalSeries:u.totalSeries,totalSeriesPrev:u.totalSeriesPrev,totalSeriesAll:u.totalSeriesByAll,totalLabelValuePairs:u.totalLabelValuePairs,seriesCountByMetricName:u.seriesCountByMetricName,isCluster:c}),r&&Nt("div",{className:"vm-cardinality-panel-tips",children:[!a&&!o&&Nt(Fm,{}),a&&!o&&Nt(Hm,{}),!a&&!o&&Nt(jm,{}),o&&Nt(Vm,{})]}),s&&Nt(na,{variant:"error",children:s}),l.keys(a,o).map((e=>{return Nt(Dm,{sectionTitle:l.sectionsTitles(o)[e],tip:m[e],rows:u[e],onActionClick:(t=e,e=>{const r={match:xm[t]({query:e,focusLabel:o,match:a})};"labelValueCountByLabelName"!==t&&"seriesCountByLabelName"!=t||(r.focusLabel=e),"seriesCountByFocusLabelValue"==t&&(r.focusLabel=""),n(r)}),tabs:p.tabs[e],chartContainer:p.containerRefs[e],totalSeriesPrev:l.totalSeries(e,!0),totalSeries:l.totalSeries(e),tableHeaderCells:h[e],isPrometheus:l.isPrometheusData},e);var t}))]})},Um=e=>(["topByAvgDuration","topByCount","topBySumDuration"].forEach((t=>{const n=e[t];Array.isArray(n)&&n.forEach((e=>{const t=en(1e3*e.timeRangeSeconds);e.url=((e,t)=>{var n;const{query:r,timeRangeSeconds:a}=e,o=["g0.expr=".concat(encodeURIComponent(r))],i=null===(n=rn.find((e=>e.duration===t)))||void 0===n?void 0:n.id;return i&&o.push("g0.relative_time=".concat(i)),a&&o.push("g0.range_input=".concat(t)),"".concat(We.home,"?").concat(o.join("&"))})(e,t),e.timeRange=t}))})),e),Bm=e=>{let{topN:t,maxLifetime:n}=e;const{serverUrl:a}=Mt(),{setSearchParamsFromKeys:o}=uo(),[i,l]=(0,r.useState)(null),[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)(),h=(0,r.useMemo)((()=>((e,t,n)=>"".concat(e,"/api/v1/status/top_queries?topN=").concat(t||"","&maxLifetime=").concat(n||""))(a,t,n)),[a,t,n]);return{data:i,error:u,loading:s,fetch:async()=>{c(!0),o({topN:t,maxLifetime:n});try{const e=await fetch(h),t=await e.json();l(e.ok?Um(t):null),d(String(t.error||""))}catch(Fp){Fp instanceof Error&&"AbortError"!==Fp.name&&d("".concat(Fp.name,": ").concat(Fp.message))}c(!1)}}},qm=e=>{let{rows:t,columns:n,defaultOrderBy:a}=e;const o=kl(),[i,l]=(0,r.useState)(a||"count"),[s,c]=(0,r.useState)("desc"),u=(0,r.useMemo)((()=>Im(t,Lm(s,i))),[t,i,s]),d=e=>()=>{var t;t=e,c((e=>"asc"===e&&i===t?"desc":"asc")),l(t)},h=e=>{let{query:t}=e;return async()=>{await o(t,"Query has been copied")}};return Nt("table",{className:"vm-table",children:[Nt("thead",{className:"vm-table-header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:[n.map((e=>Nt("th",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:d(e.sortBy||e.key),children:Nt("div",{className:"vm-table-cell__content",children:[e.title||e.key,Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":i===e.key,"vm-table__sort-icon_desc":"desc"===s&&i===e.key}),children:Nt(Hn,{})})]})},e.key))),Nt("th",{className:"vm-table-cell vm-table-cell_header"})," "]})}),Nt("tbody",{className:"vm-table-body",children:u.map(((e,t)=>Nt("tr",{className:"vm-table__row",children:[n.map((t=>Nt("td",{className:"vm-table-cell",children:e[t.key]||"-"},t.key))),Nt("td",{className:"vm-table-cell vm-table-cell_no-padding",children:Nt("div",{className:"vm-top-queries-panels__table-actions",children:[e.url&&Nt(ya,{title:"Execute query",children:Nt(Re,{to:e.url,target:"_blank",rel:"noreferrer","aria-disabled":!0,children:Nt(la,{variant:"text",size:"small",startIcon:Nt(Yn,{}),ariaLabel:"execute query"})})}),Nt(ya,{title:"Copy query",children:Nt(la,{variant:"text",size:"small",startIcon:Nt(rr,{}),onClick:h(e),ariaLabel:"copy query"})})]})})]},t)))})]})},Ym=["table","JSON"].map(((e,t)=>({value:String(t),label:e,icon:Nt(0===t?Kn:Qn,{})}))),Wm=e=>{let{rows:t,title:n,columns:a,defaultOrderBy:o}=e;const{isMobile:i}=ea(),[l,s]=(0,r.useState)(0);return Nt("div",{className:Cr()({"vm-top-queries-panel":!0,"vm-block":!0,"vm-block_mobile":i}),children:[Nt("div",{className:Cr()({"vm-top-queries-panel-header":!0,"vm-section-header":!0,"vm-top-queries-panel-header_mobile":i}),children:[Nt("h5",{className:Cr()({"vm-section-header__title":!0,"vm-section-header__title_mobile":i}),children:n}),Nt("div",{className:"vm-section-header__tabs",children:Nt(Tr,{activeItem:String(l),items:Ym,onChange:e=>{s(+e)}})})]}),Nt("div",{className:Cr()({"vm-top-queries-panel__table":!0,"vm-top-queries-panel__table_mobile":i}),children:[0===l&&Nt(qm,{rows:t,columns:a,defaultOrderBy:o}),1===l&&Nt(Jh,{data:t})]})]})},Km=()=>{const{isMobile:e}=ea(),[t,n]=Em(10,"topN"),[a,i]=Em("10m","maxLifetime"),{data:l,error:s,loading:c,fetch:u}=Bm({topN:t,maxLifetime:a}),d=(0,r.useMemo)((()=>{const e=a.trim().split(" ").reduce(((e,t)=>{const n=Kt(t);return n?{...e,...n}:{...e}}),{});return!!o().duration(e).asMilliseconds()}),[a]),h=(0,r.useMemo)((()=>!!t&&t<1),[t]),m=(0,r.useMemo)((()=>h?"Number must be bigger than zero":""),[h]),p=(0,r.useMemo)((()=>d?"":"Invalid duration value"),[d]),f=e=>{if(!l)return e;const t=l[e];return"number"===typeof t?Zd(t,t,t):t||e},v=e=>{"Enter"===e.key&&u()};return(0,r.useEffect)((()=>{l&&(t||n(+l.topN),a||i(l.maxLifetime))}),[l]),(0,r.useEffect)((()=>(u(),window.addEventListener("popstate",u),()=>{window.removeEventListener("popstate",u)})),[]),Nt("div",{className:Cr()({"vm-top-queries":!0,"vm-top-queries_mobile":e}),children:[c&&Nt(Al,{containerStyles:{height:"500px"}}),Nt("div",{className:Cr()({"vm-top-queries-controls":!0,"vm-block":!0,"vm-block_mobile":e}),children:[Nt("div",{className:"vm-top-queries-controls-fields",children:[Nt("div",{className:"vm-top-queries-controls-fields__item",children:Nt(Ya,{label:"Max lifetime",value:a,error:p,helperText:"For example ".concat("30ms, 15s, 3d4h, 1y2w"),onChange:e=>{i(e)},onKeyDown:v})}),Nt("div",{className:"vm-top-queries-controls-fields__item",children:Nt(Ya,{label:"Number of returned queries",type:"number",value:t||"",error:m,onChange:e=>{n(+e)},onKeyDown:v})})]}),Nt("div",{className:Cr()({"vm-top-queries-controls-bottom":!0,"vm-top-queries-controls-bottom_mobile":e}),children:[Nt("div",{className:"vm-top-queries-controls-bottom__info",children:["VictoriaMetrics tracks the last\xa0",Nt(ya,{title:"search.queryStats.lastQueriesCount",children:Nt("b",{children:f("search.queryStats.lastQueriesCount")})}),"\xa0queries with durations at least\xa0",Nt(ya,{title:"search.queryStats.minQueryDuration",children:Nt("b",{children:f("search.queryStats.minQueryDuration")})})]}),Nt("div",{className:"vm-top-queries-controls-bottom__button",children:Nt(la,{startIcon:Nt(qn,{}),onClick:u,children:"Execute"})})]})]}),s&&Nt(na,{variant:"error",children:s}),l&&Nt(Ct.FK,{children:Nt("div",{className:"vm-top-queries-panels",children:[Nt(Wm,{rows:l.topBySumDuration,title:"Queries with most summary time to execute",columns:[{key:"query"},{key:"sumDurationSeconds",title:"sum duration, sec"},{key:"timeRange",sortBy:"timeRangeSeconds",title:"query time interval"},{key:"count"}],defaultOrderBy:"sumDurationSeconds"}),Nt(Wm,{rows:l.topByAvgDuration,title:"Most heavy queries",columns:[{key:"query"},{key:"avgDurationSeconds",title:"avg duration, sec"},{key:"timeRange",sortBy:"timeRangeSeconds",title:"query time interval"},{key:"count"}],defaultOrderBy:"avgDurationSeconds"}),Nt(Wm,{rows:l.topByCount,title:"Most frequently executed queries",columns:[{key:"query"},{key:"timeRange",sortBy:"timeRangeSeconds",title:"query time interval"},{key:"count"}]})]})})]})},Qm={"color-primary":"#589DF6","color-secondary":"#316eca","color-error":"#e5534b","color-warning":"#c69026","color-info":"#539bf5","color-success":"#57ab5a","color-background-body":"#22272e","color-background-block":"#2d333b","color-background-tooltip":"rgba(22, 22, 22, 0.8)","color-text":"#cdd9e5","color-text-secondary":"#768390","color-text-disabled":"#636e7b","box-shadow":"rgba(0, 0, 0, 0.16) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.2) 0px 2px 8px 0px","border-divider":"1px solid rgba(99, 110, 123, 0.5)","color-hover-black":"rgba(0, 0, 0, 0.12)","color-log-hits-bar-0":"rgba(255, 255, 255, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Zm={"color-primary":"#3F51B5","color-secondary":"#E91E63","color-error":"#FD080E","color-warning":"#FF8308","color-info":"#03A9F4","color-success":"#4CAF50","color-background-body":"#FEFEFF","color-background-block":"#FFFFFF","color-background-tooltip":"rgba(80,80,80,0.9)","color-text":"#110f0f","color-text-secondary":"#706F6F","color-text-disabled":"#A09F9F","box-shadow":"rgba(0, 0, 0, 0.08) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.1) 0px 2px 8px 0px","border-divider":"1px solid rgba(0, 0, 0, 0.15)","color-hover-black":"rgba(0, 0, 0, 0.06)","color-log-hits-bar-0":"rgba(0, 0, 0, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Gm=()=>{const[e,t]=(0,r.useState)(_t()),n=e=>{t(e.matches)};return(0,r.useEffect)((()=>{const e=window.matchMedia("(prefers-color-scheme: dark)");return e.addEventListener("change",n),()=>e.removeEventListener("change",n)}),[]),e},Jm=["primary","secondary","error","warning","info","success"],Xm=e=>{let{onLoaded:t}=e;const n=Qe(),{palette:a={}}=Ke(),{theme:o}=Mt(),i=Gm(),l=Tt(),s=Mr(),[c,u]=(0,r.useState)({[ft.dark]:Qm,[ft.light]:Zm,[ft.system]:_t()?Qm:Zm}),d=()=>{const{innerWidth:e,innerHeight:t}=window,{clientWidth:n,clientHeight:r}=document.documentElement;yt("scrollbar-width","".concat(e-n,"px")),yt("scrollbar-height","".concat(t-r,"px")),yt("vh","".concat(.01*t,"px"))},h=()=>{Jm.forEach(((e,n)=>{const r=(e=>{let t=e.replace("#","").trim();if(3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),6!==t.length)throw new Error("Invalid HEX color.");return(299*parseInt(t.slice(0,2),16)+587*parseInt(t.slice(2,4),16)+114*parseInt(t.slice(4,6),16))/1e3>=128?"#000000":"#FFFFFF"})(gt("color-".concat(e)));yt("".concat(e,"-text"),r),n===Jm.length-1&&(l({type:"SET_DARK_THEME"}),t(!0))}))},m=()=>{const e=et("THEME")||ft.system,t=c[e];Object.entries(t).forEach((e=>{let[t,n]=e;yt(t,n)})),h(),n&&(Jm.forEach((e=>{const t=a[e];t&&yt("color-".concat(e),t)})),h())};return(0,r.useEffect)((()=>{d(),m()}),[c]),(0,r.useEffect)(d,[s]),(0,r.useEffect)((()=>{const e=_t()?Qm:Zm;c[ft.system]!==e?u((t=>({...t,[ft.system]:e}))):m()}),[o,i]),(0,r.useEffect)((()=>{n&&l({type:"SET_THEME",payload:ft.light})}),[]),null},ep=()=>{const[e,t]=(0,r.useState)([]),[n,a]=(0,r.useState)(!1),o=(0,r.useRef)(document.body),i=e=>{e.preventDefault(),e.stopPropagation(),"dragenter"===e.type||"dragover"===e.type?a(!0):"dragleave"===e.type&&a(!1)};return Ar("dragenter",i,o),Ar("dragleave",i,o),Ar("dragover",i,o),Ar("drop",(e=>{var n;e.preventDefault(),e.stopPropagation(),a(!1),null!==e&&void 0!==e&&null!==(n=e.dataTransfer)&&void 0!==n&&n.files&&e.dataTransfer.files[0]&&(e=>{const n=Array.from(e||[]);t(n)})(e.dataTransfer.files)}),o),Ar("paste",(e=>{var n;const r=null===(n=e.clipboardData)||void 0===n?void 0:n.items;if(!r)return;const a=Array.from(r).filter((e=>"application/json"===e.type)).map((e=>e.getAsFile())).filter((e=>null!==e));t(a)}),o),{files:e,dragging:n}},tp=e=>{let{onOpenModal:t,onChange:n}=e;return Nt("div",{className:"vm-upload-json-buttons",children:[Nt(la,{variant:"outlined",onClick:t,children:"Paste JSON"}),Nt(la,{children:["Upload Files",Nt("input",{id:"json",type:"file",accept:"application/json",multiple:!0,title:" ",onChange:n})]})]})},np=()=>{const[e,t]=(0,r.useState)([]),[n,a]=(0,r.useState)([]),o=(0,r.useMemo)((()=>!!e.length),[e]),{value:i,setTrue:l,setFalse:s}=ca(!1),c=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";a((n=>[{filename:t,text:": ".concat(e.message)},...n]))},u=(e,n)=>{try{const r=JSON.parse(e),a=r.trace||r;if(!a.duration_msec)return void c(new Error(pt.traceNotFound),n);const o=new Il(a,n);t((e=>[o,...e]))}catch(Fp){Fp instanceof Error&&c(Fp,n)}},d=e=>{e.map((e=>{const t=new FileReader,n=(null===e||void 0===e?void 0:e.name)||"";t.onload=e=>{var t;const r=String(null===(t=e.target)||void 0===t?void 0:t.result);u(r,n)},t.readAsText(e)}))},h=e=>{a([]);const t=Array.from(e.target.files||[]);d(t),e.target.value=""},m=e=>()=>{(e=>{a((t=>t.filter(((t,n)=>n!==e))))})(e)},{files:p,dragging:f}=ep();return(0,r.useEffect)((()=>{d(p)}),[p]),Nt("div",{className:"vm-trace-page",children:[Nt("div",{className:"vm-trace-page-header",children:[Nt("div",{className:"vm-trace-page-header-errors",children:n.map(((e,t)=>Nt("div",{className:"vm-trace-page-header-errors-item",children:[Nt(na,{variant:"error",children:[Nt("b",{className:"vm-trace-page-header-errors-item__filename",children:e.filename}),Nt("span",{children:e.text})]}),Nt(la,{className:"vm-trace-page-header-errors-item__close",startIcon:Nt(In,{}),variant:"text",color:"error",onClick:m(t)})]},"".concat(e,"_").concat(t))))}),Nt("div",{children:o&&Nt(tp,{onOpenModal:l,onChange:h})})]}),o&&Nt("div",{children:Nt(Wl,{jsonEditor:!0,traces:e,onDeleteClick:n=>{const r=e.filter((e=>e.idValue!==n.idValue));t([...r])}})}),!o&&Nt("div",{className:"vm-trace-page-preview",children:[Nt("p",{className:"vm-trace-page-preview__text",children:["Please, upload file with JSON response content.","\n","The file must contain tracing information in JSON format.","\n","In order to use tracing please refer to the doc:\xa0",Nt("a",{className:"vm-link vm-link_colored",href:"https://docs.victoriametrics.com/#query-tracing",target:"_blank",rel:"help noreferrer",children:"https://docs.victoriametrics.com/#query-tracing"}),"\n","Tracing graph will be displayed after file upload.","\n","Attach files by dragging & dropping, selecting or pasting them."]}),Nt(tp,{onOpenModal:l,onChange:h})]}),i&&Nt(ga,{title:"Paste JSON",onClose:s,children:Nt(Yl,{editable:!0,displayTitle:!0,defaultTile:"JSON ".concat(e.length+1),onClose:s,onUpload:u})}),f&&Nt("div",{className:"vm-trace-page__dropzone"})]})},rp=e=>{const{serverUrl:t}=Mt(),{period:n}=fn(),[a,o]=(0,r.useState)([]),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)(),u=(0,r.useMemo)((()=>((e,t,n)=>{const r="{job=".concat(JSON.stringify(n),"}");return"".concat(e,"/api/v1/label/instance/values?match[]=").concat(encodeURIComponent(r),"&start=").concat(t.start,"&end=").concat(t.end)})(t,n,e)),[t,n,e]);return(0,r.useEffect)((()=>{if(!e)return;(async()=>{l(!0);try{const e=await fetch(u),t=await e.json(),n=t.data||[];o(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?c(void 0):c("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Fp){Fp instanceof Error&&c("".concat(Fp.name,": ").concat(Fp.message))}l(!1)})().catch(console.error)}),[u]),{instances:a,isLoading:i,error:s}},ap=(e,t)=>{const{serverUrl:n}=Mt(),{period:a}=fn(),[o,i]=(0,r.useState)([]),[l,s]=(0,r.useState)(!1),[c,u]=(0,r.useState)(),d=(0,r.useMemo)((()=>((e,t,n,r)=>{const a=Object.entries({job:n,instance:r}).filter((e=>e[1])).map((e=>{let[t,n]=e;return"".concat(t,"=").concat(JSON.stringify(n))})).join(","),o="{".concat(a,"}");return"".concat(e,"/api/v1/label/__name__/values?match[]=").concat(encodeURIComponent(o),"&start=").concat(t.start,"&end=").concat(t.end)})(n,a,e,t)),[n,a,e,t]);return(0,r.useEffect)((()=>{if(!e)return;(async()=>{s(!0);try{const e=await fetch(d),t=await e.json(),n=t.data||[];i(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?u(void 0):u("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Fp){Fp instanceof Error&&u("".concat(Fp.name,": ").concat(Fp.message))}s(!1)})().catch(console.error)}),[d]),{names:o,isLoading:l,error:c}},op=e=>{let{name:t,job:n,instance:a,rateEnabled:o,isBucket:i,height:l}=e;const{isMobile:s}=ea(),{customStep:c,yaxis:u}=Ur(),{period:d}=fn(),h=Br(),m=vn(),p=Zt(d.end-d.start),f=Qt(c),v=en(10*f*1e3),[g,y]=(0,r.useState)(!1),[_,b]=(0,r.useState)(!1),w=g&&c===p?v:c,k=(0,r.useMemo)((()=>{const e=Object.entries({job:n,instance:a}).filter((e=>e[1])).map((e=>{let[t,n]=e;return"".concat(t,"=").concat(JSON.stringify(n))}));e.push("__name__=".concat(JSON.stringify(t))),"node_cpu_seconds_total"==t&&e.push('mode!="idle"');const r="{".concat(e.join(","),"}");if(i)return"sum(rate(".concat(r,")) by (vmrange, le)");const l=o?"rollup_rate(".concat(r,")"):"rollup(".concat(r,")");return"\nwith (q = ".concat(l,') (\n alias(min(label_match(q, "rollup", "min")), "min"),\n alias(max(label_match(q, "rollup", "max")), "max"),\n alias(avg(label_match(q, "rollup", "avg")), "avg"),\n)')}),[t,n,a,o,i]),{isLoading:x,graphData:S,error:C,queryErrors:E,warning:N,isHistogram:A}=zl({predefinedQuery:[k],visible:!0,customStep:w,showAllSeries:_});return(0,r.useEffect)((()=>{y(A)}),[A]),Nt("div",{className:Cr()({"vm-explore-metrics-graph":!0,"vm-explore-metrics-graph_mobile":s}),children:[x&&Nt(Al,{}),C&&Nt(na,{variant:"error",children:C}),E[0]&&Nt(na,{variant:"error",children:E[0]}),N&&Nt(Ql,{warning:N,query:[k],onChange:b}),S&&d&&Nt(Yh,{data:S,period:d,customStep:w,query:[k],yaxis:u,setYaxisLimits:e=>{h({type:"SET_YAXIS_LIMITS",payload:e})},setPeriod:e=>{let{from:t,to:n}=e;m({type:"SET_PERIOD",payload:{from:t,to:n}})},showLegend:!1,height:l,isHistogram:A})]})},ip=e=>{let{name:t,index:n,length:r,isBucket:a,rateEnabled:o,onChangeRate:i,onRemoveItem:l,onChangeOrder:s}=e;const{isMobile:c}=ea(),{value:u,setTrue:d,setFalse:h}=ca(!1),m=()=>{l(t)},p=()=>{s(t,n,n+1)},f=()=>{s(t,n,n-1)};return Nt("div",c?{className:"vm-explore-metrics-item-header vm-explore-metrics-item-header_mobile",children:[Nt("div",{className:"vm-explore-metrics-item-header__name",children:t}),Nt(la,{variant:"text",size:"small",startIcon:Nt(ur,{}),onClick:d,ariaLabel:"open panel settings"}),u&&Nt(ga,{title:t,onClose:h,children:Nt("div",{className:"vm-explore-metrics-item-header-modal",children:[Nt("div",{className:"vm-explore-metrics-item-header-modal-order",children:[Nt(la,{startIcon:Nt(Jn,{}),variant:"outlined",onClick:f,disabled:0===n,ariaLabel:"move graph up"}),Nt("p",{children:["position:",Nt("span",{className:"vm-explore-metrics-item-header-modal-order__index",children:["#",n+1]})]}),Nt(la,{endIcon:Nt(Gn,{}),variant:"outlined",onClick:p,disabled:n===r-1,ariaLabel:"move graph down"})]}),!a&&Nt("div",{className:"vm-explore-metrics-item-header-modal__rate",children:[Nt(Mo,{label:Nt("span",{children:["enable ",Nt("code",{children:"rate()"})]}),value:o,onChange:i,fullWidth:!0}),Nt("p",{children:"calculates the average per-second speed of metrics change"})]}),Nt(la,{startIcon:Nt(In,{}),color:"error",variant:"outlined",onClick:m,fullWidth:!0,children:"Remove graph"})]})})]}:{className:"vm-explore-metrics-item-header",children:[Nt("div",{className:"vm-explore-metrics-item-header-order",children:[Nt(ya,{title:"move graph up",children:Nt(la,{className:"vm-explore-metrics-item-header-order__up",startIcon:Nt(jn,{}),variant:"text",color:"gray",size:"small",onClick:f,ariaLabel:"move graph up"})}),Nt("div",{className:"vm-explore-metrics-item-header__index",children:["#",n+1]}),Nt(ya,{title:"move graph down",children:Nt(la,{className:"vm-explore-metrics-item-header-order__down",startIcon:Nt(jn,{}),variant:"text",color:"gray",size:"small",onClick:p,ariaLabel:"move graph down"})})]}),Nt("div",{className:"vm-explore-metrics-item-header__name",children:t}),!a&&Nt("div",{className:"vm-explore-metrics-item-header__rate",children:Nt(ya,{title:"calculates the average per-second speed of metric's change",children:Nt(Mo,{label:Nt("span",{children:["enable ",Nt("code",{children:"rate()"})]}),value:o,onChange:i})})}),Nt("div",{className:"vm-explore-metrics-item-header__close",children:Nt(ya,{title:"close graph",children:Nt(la,{startIcon:Nt(In,{}),variant:"text",color:"gray",size:"small",onClick:m,ariaLabel:"close graph"})})})]})},lp=e=>{let{name:t,job:n,instance:a,index:o,length:i,size:l,onRemoveItem:s,onChangeOrder:c}=e;const u=(0,r.useMemo)((()=>/_sum?|_total?|_count?/.test(t)),[t]),d=(0,r.useMemo)((()=>/_bucket?/.test(t)),[t]),[h,m]=(0,r.useState)(u),p=Mr(),f=(0,r.useMemo)(l.height,[l,p]);return(0,r.useEffect)((()=>{m(u)}),[n]),Nt("div",{className:"vm-explore-metrics-item vm-block vm-block_empty-padding",children:[Nt(ip,{name:t,index:o,length:i,isBucket:d,rateEnabled:h,size:l.id,onChangeRate:m,onRemoveItem:s,onChangeOrder:c}),Nt(op,{name:t,job:n,instance:a,rateEnabled:h,isBucket:d,height:f},"".concat(t,"_").concat(n,"_").concat(a,"_").concat(h))]})},sp=e=>{let{values:t,onRemoveItem:n}=e;const{isMobile:r}=ea();return r?Nt("span",{className:"vm-select-input-content__counter",children:["selected ",t.length]}):Nt(Ct.FK,{children:t.map((e=>{return Nt("div",{className:"vm-select-input-content__selected",children:[Nt("span",{children:e}),Nt("div",{onClick:(t=e,e=>{n(t),e.stopPropagation()}),children:Nt(In,{})})]},e);var t}))})},cp=e=>{let{value:t,list:n,label:a,placeholder:o,noOptionsText:i,clearable:l=!1,searchable:s=!1,autofocus:c,disabled:u,onChange:d}=e;const{isDarkTheme:h}=Mt(),{isMobile:m}=ea(),[p,f]=(0,r.useState)(""),v=(0,r.useRef)(null),[g,y]=(0,r.useState)(null),[_,b]=(0,r.useState)(!1),w=(0,r.useRef)(null),k=Array.isArray(t),x=Array.isArray(t)?t:void 0,S=m&&k&&!(null===x||void 0===x||!x.length),C=(0,r.useMemo)((()=>_?p:Array.isArray(t)?"":t),[t,p,_,k]),E=(0,r.useMemo)((()=>_?p||"(.+)":""),[p,_]),N=()=>{w.current&&w.current.blur()},A=()=>{b(!1),N()},M=e=>{f(""),d(e),k||A(),k&&w.current&&w.current.focus()};return(0,r.useEffect)((()=>{f(""),_&&w.current&&w.current.focus(),_||N()}),[_,w]),(0,r.useEffect)((()=>{c&&w.current&&!m&&w.current.focus()}),[c,w]),Ar("keyup",(e=>{w.current!==e.target&&b(!1)})),ia(v,A,g),Nt("div",{className:Cr()({"vm-select":!0,"vm-select_dark":h,"vm-select_disabled":u}),children:[Nt("div",{className:"vm-select-input",onClick:e=>{e.target instanceof HTMLInputElement||u||b((e=>!e))},ref:v,children:[Nt("div",{className:"vm-select-input-content",children:[!(null===x||void 0===x||!x.length)&&Nt(sp,{values:x,onRemoveItem:M}),!S&&Nt("input",{value:C,type:"text",placeholder:o,onInput:e=>{f(e.target.value)},onFocus:()=>{u||b(!0)},onBlur:()=>{n.includes(p)&&d(p)},ref:w,readOnly:m||!s})]}),a&&Nt("span",{className:"vm-text-field__label",children:a}),l&&t&&Nt("div",{className:"vm-select-input__icon",onClick:(e=>t=>{M(e),t.stopPropagation()})(""),children:Nt(In,{})}),Nt("div",{className:Cr()({"vm-select-input__icon":!0,"vm-select-input__icon_open":_}),children:Nt(Hn,{})})]}),Nt(Ho,{label:a,value:E,options:n.map((e=>({value:e}))),anchor:v,selected:x,minLength:1,fullWidth:!0,noOptionsText:i,onSelect:M,onOpenAutocomplete:b,onChangeWrapperRef:y})]})},up=st.map((e=>e.id)),dp=e=>{let{jobs:t,instances:n,names:a,job:o,instance:i,size:l,selectedMetrics:s,onChangeJob:c,onChangeInstance:u,onToggleMetric:d,onChangeSize:h}=e;const m=(0,r.useMemo)((()=>o?"":"No instances. Please select job"),[o]),p=(0,r.useMemo)((()=>o?"":"No metric names. Please select job"),[o]),{isMobile:f}=ea(),{value:v,toggle:g,setFalse:y}=ca("false"!==et("EXPLORE_METRICS_TIPS"));return(0,r.useEffect)((()=>{Xe("EXPLORE_METRICS_TIPS","".concat(v))}),[v]),Nt(Ct.FK,{children:[Nt("div",{className:Cr()({"vm-explore-metrics-header":!0,"vm-explore-metrics-header_mobile":f,"vm-block":!0,"vm-block_mobile":f}),children:[Nt("div",{className:"vm-explore-metrics-header__job",children:Nt(cp,{value:o,list:t,label:"Job",placeholder:"Please select job",onChange:c,autofocus:!o&&!!t.length&&!f,searchable:!0})}),Nt("div",{className:"vm-explore-metrics-header__instance",children:Nt(cp,{value:i,list:n,label:"Instance",placeholder:"Please select instance",onChange:u,noOptionsText:m,clearable:!0,searchable:!0})}),Nt("div",{className:"vm-explore-metrics-header__size",children:[Nt(cp,{label:"Size graphs",value:l,list:up,onChange:h}),Nt(ya,{title:"".concat(v?"Hide":"Show"," tip"),children:Nt(la,{variant:"text",color:v?"warning":"gray",startIcon:Nt(hr,{}),onClick:g,ariaLabel:"visibility tips"})})]}),Nt("div",{className:"vm-explore-metrics-header-metrics",children:Nt(cp,{label:"Metrics",value:s,list:a,placeholder:"Search metric name",onChange:d,noOptionsText:p,clearable:!0,searchable:!0})})]}),v&&Nt(na,{variant:"warning",children:Nt("div",{className:"vm-explore-metrics-header-description",children:[Nt("p",{children:["Please note: this page is solely designed for exploring Prometheus metrics. Prometheus metrics always contain ",Nt("code",{children:"job"})," and ",Nt("code",{children:"instance"})," labels (see ",Nt("a",{className:"vm-link vm-link_colored",href:"https://prometheus.io/docs/concepts/jobs_instances/",children:"these docs"}),"), and this page relies on them as filters. ",Nt("br",{}),"Please use this page for Prometheus metrics only, in accordance with their naming conventions."]}),Nt(la,{variant:"text",size:"small",startIcon:Nt(In,{}),onClick:y,ariaLabel:"close tips"})]})})]})},hp=ut("job",""),mp=ut("instance",""),pp=ut("metrics",""),fp=ut("size",""),vp=st.find((e=>fp?e.id===fp:e.isDefault))||st[0],gp=()=>{const[e,t]=(0,r.useState)(hp),[n,a]=(0,r.useState)(mp),[o,i]=(0,r.useState)(pp?pp.split("&"):[]),[l,s]=(0,r.useState)(vp);(e=>{let{job:t,instance:n,metrics:a,size:o}=e;const{duration:i,relativeTime:l,period:{date:s}}=fn(),{customStep:c}=Ur(),{setSearchParamsFromKeys:u}=uo(),d=()=>{const e=mm({"g0.range_input":i,"g0.end_input":s,"g0.step_input":c,"g0.relative_time":l,size:o,job:t,instance:n,metrics:a});u(e)};(0,r.useEffect)(d,[i,l,s,c,t,n,a,o]),(0,r.useEffect)(d,[])})({job:e,instance:n,metrics:o.join("&"),size:l.id});const{jobs:c,isLoading:u,error:d}=(()=>{const{serverUrl:e}=Mt(),{period:t}=fn(),[n,a]=(0,r.useState)([]),[o,i]=(0,r.useState)(!1),[l,s]=(0,r.useState)(),c=(0,r.useMemo)((()=>((e,t)=>"".concat(e,"/api/v1/label/job/values?start=").concat(t.start,"&end=").concat(t.end))(e,t)),[e,t]);return(0,r.useEffect)((()=>{(async()=>{i(!0);try{const e=await fetch(c),t=await e.json(),n=t.data||[];a(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?s(void 0):s("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Fp){Fp instanceof Error&&s("".concat(Fp.name,": ").concat(Fp.message))}i(!1)})().catch(console.error)}),[c]),{jobs:n,isLoading:o,error:l}})(),{instances:h,isLoading:m,error:p}=rp(e),{names:f,isLoading:v,error:g}=ap(e,n),y=(0,r.useMemo)((()=>u||m||v),[u,m,v]),_=(0,r.useMemo)((()=>d||p||g),[d,p,g]),b=e=>{i(e?t=>t.includes(e)?t.filter((t=>t!==e)):[...t,e]:[])},w=(e,t,n)=>{const r=n>o.length-1;n<0||r||i((e=>{const r=[...e],[a]=r.splice(t,1);return r.splice(n,0,a),r}))};return(0,r.useEffect)((()=>{n&&h.length&&!h.includes(n)&&a("")}),[h,n]),Nt("div",{className:"vm-explore-metrics",children:[Nt(dp,{jobs:c,instances:h,names:f,job:e,size:l.id,instance:n,selectedMetrics:o,onChangeJob:t,onChangeSize:e=>{const t=st.find((t=>t.id===e));t&&s(t)},onChangeInstance:a,onToggleMetric:b}),y&&Nt(Al,{}),_&&Nt(na,{variant:"error",children:_}),!e&&Nt(na,{variant:"info",children:"Please select job to see list of metric names."}),e&&!o.length&&Nt(na,{variant:"info",children:"Please select metric names to see the graphs."}),Nt("div",{className:"vm-explore-metrics-body",children:o.map(((t,r)=>Nt(lp,{name:t,job:e,instance:n,index:r,length:o.length,size:l,onRemoveItem:b,onChangeOrder:w},t)))})]})},yp=()=>{const t=kl();return Nt("div",{className:"vm-preview-icons",children:Object.entries(e).map((e=>{let[n,r]=e;return Nt("div",{className:"vm-preview-icons-item",onClick:(a=n,async()=>{await t("<".concat(a,"/>"),"<".concat(a,"/> has been copied"))}),children:[Nt("div",{className:"vm-preview-icons-item__svg",children:r()}),Nt("div",{className:"vm-preview-icons-item__name",children:"<".concat(n,"/>")})]},n);var a}))})};var _p=function(e){return e.copy="Copy",e.copied="Copied",e}(_p||{});const bp=e=>{let{code:t}=e;const[n,a]=(0,r.useState)(_p.copy);return(0,r.useEffect)((()=>{let e=null;return n===_p.copied&&(e=setTimeout((()=>a(_p.copy)),1e3)),()=>{e&&clearTimeout(e)}}),[n]),Nt("code",{className:"vm-code-example",children:[t,Nt("div",{className:"vm-code-example__copy",children:Nt(ya,{title:n,children:Nt(la,{size:"small",variant:"text",onClick:()=>{navigator.clipboard.writeText(t),a(_p.copied)},startIcon:Nt(rr,{}),ariaLabel:"close"})})})]})},wp=()=>Nt("a",{className:"vm-link vm-link_colored",href:"https://docs.victoriametrics.com/MetricsQL.html",target:"_blank",rel:"help noreferrer",children:"MetricsQL"}),kp=()=>Nt("a",{className:"vm-link vm-link_colored",href:"https://grafana.com/grafana/dashboards/1860-node-exporter-full/",target:"_blank",rel:"help noreferrer",children:"Node Exporter Full"}),xp=()=>Nt("section",{className:"vm-with-template-tutorial",children:[Nt("h2",{className:"vm-with-template-tutorial__title",children:["Tutorial for WITH expressions in ",Nt(wp,{})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["Let's look at the following real query from ",Nt(kp,{})," dashboard:"]}),Nt(bp,{code:'(\n (\n node_memory_MemTotal_bytes{instance=~"$node:$port", job=~"$job"}\n -\n node_memory_MemFree_bytes{instance=~"$node:$port", job=~"$job"}\n )\n /\n node_memory_MemTotal_bytes{instance=~"$node:$port", job=~"$job"}\n) * 100'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"It is clear the query calculates the percentage of used memory for the given $node, $port and $job. Isn't it? :)"})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"What's wrong with this query? Copy-pasted label filters for distinct timeseries which makes it easy to mistype these filters during modification. Let's simplify the query with WITH expressions:"}),Nt(bp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"}\n)\n(\n node_memory_MemTotal_bytes{commonFilters}\n -\n node_memory_MemFree_bytes{commonFilters}\n)\n /\nnode_memory_MemTotal_bytes{commonFilters} * 100'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["Now label filters are located in a single place instead of three distinct places. The query mentions node_memory_MemTotal_bytes metric twice and ","{commonFilters}"," three times. WITH expressions may improve this:"]}),Nt(bp,{code:'WITH (\n my_resource_utilization(free, limit, filters) = (limit{filters} - free{filters}) / limit{filters} * 100\n)\nmy_resource_utilization(\n node_memory_MemFree_bytes,\n node_memory_MemTotal_bytes,\n {instance=~"$node:$port",job=~"$job"},\n)'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"Now the template function my_resource_utilization() may be used for monitoring arbitrary resources - memory, CPU, network, storage, you name it."})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["Let's take another nice query from ",Nt(kp,{})," dashboard:"]}),Nt(bp,{code:'(\n (\n (\n count(\n count(node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"}) by (cpu)\n )\n )\n -\n avg(\n sum by (mode) (rate(node_cpu_seconds_total{mode=\'idle\',instance=~"$node:$port",job=~"$job"}[5m]))\n )\n )\n *\n 100\n)\n /\ncount(\n count(node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"}) by (cpu)\n)'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"Do you understand what does this mess do? Is it manageable? :) WITH expressions are happy to help in a few iterations."})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"1. Extract common filters used in multiple places into a commonFilters variable:"}),Nt(bp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"}\n)\n(\n (\n (\n count(\n count(node_cpu_seconds_total{commonFilters}) by (cpu)\n )\n )\n -\n avg(\n sum by (mode) (rate(node_cpu_seconds_total{mode=\'idle\',commonFilters}[5m]))\n )\n )\n *\n 100\n)\n /\ncount(\n count(node_cpu_seconds_total{commonFilters}) by (cpu)\n)'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:'2. Extract "count(count(...) by (cpu))" into cpuCount variable:'}),Nt(bp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"},\n cpuCount = count(count(node_cpu_seconds_total{commonFilters}) by (cpu))\n)\n(\n (\n cpuCount\n -\n avg(\n sum by (mode) (rate(node_cpu_seconds_total{mode=\'idle\',commonFilters}[5m]))\n )\n )\n *\n 100\n) / cpuCount'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"3. Extract rate(...) part into cpuIdle variable, since it is clear now that this part calculates the number of idle CPUs:"}),Nt(bp,{code:'WITH (\n commonFilters = {instance=~"$node:$port",job=~"$job"},\n cpuCount = count(count(node_cpu_seconds_total{commonFilters}) by (cpu)),\n cpuIdle = sum(rate(node_cpu_seconds_total{mode=\'idle\',commonFilters}[5m]))\n)\n((cpuCount - cpuIdle) * 100) / cpuCount'})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:["4. Put node_cpu_seconds_total","{commonFilters}"," into its own varialbe with the name cpuSeconds:"]}),Nt(bp,{code:'WITH (\n cpuSeconds = node_cpu_seconds_total{instance=~"$node:$port",job=~"$job"},\n cpuCount = count(count(cpuSeconds) by (cpu)),\n cpuIdle = sum(rate(cpuSeconds{mode=\'idle\'}[5m]))\n)\n((cpuCount - cpuIdle) * 100) / cpuCount'}),Nt("p",{className:"vm-with-template-tutorial-section__text",children:"Now the query became more clear comparing to the initial query."})]}),Nt("div",{className:"vm-with-template-tutorial-section",children:[Nt("p",{className:"vm-with-template-tutorial-section__text",children:"WITH expressions may be nested and may be put anywhere. Try expanding the following query:"}),Nt(bp,{code:"WITH (\n f(a, b) = WITH (\n f1(x) = b-x,\n f2(x) = x+x\n ) f1(a)*f2(b)\n) f(foo, with(x=bar) x)"})]})]}),Sp=()=>{const{serverUrl:e}=Mt(),[t,n]=He(),[a,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)();return{data:a,error:s,loading:i,expand:async r=>{t.set("expr",r),n(t);const a=((e,t)=>"".concat(e,"/expand-with-exprs?query=").concat(encodeURIComponent(t),"&format=json"))(e,r);l(!0);try{const e=await fetch(a),t=await e.json();o((null===t||void 0===t?void 0:t.expr)||""),c(String(t.error||""))}catch(Fp){Fp instanceof Error&&"AbortError"!==Fp.name&&c("".concat(Fp.name,": ").concat(Fp.message))}l(!1)}}},Cp=()=>{const[e]=He(),{data:t,loading:n,error:a,expand:o}=Sp(),[i,l]=(0,r.useState)(e.get("expr")||""),s=()=>{o(i)};return(0,r.useEffect)((()=>{i&&o(i)}),[]),Nt("section",{className:"vm-with-template",children:[n&&Nt(Al,{}),Nt("div",{className:"vm-with-template-body vm-block",children:[Nt("div",{className:"vm-with-template-body__expr",children:Nt(Ya,{type:"textarea",label:"MetricsQL query with optional WITH expressions",value:i,error:a,autofocus:!0,onEnter:s,onChange:e=>{l(e)}})}),Nt("div",{className:"vm-with-template-body__result",children:Nt(Ya,{type:"textarea",label:"MetricsQL query after expanding WITH expressions and applying other optimizations",value:t,disabled:!0})}),Nt("div",{className:"vm-with-template-body-top",children:Nt(la,{variant:"contained",onClick:s,startIcon:Nt(qn,{}),children:"Expand"})})]}),Nt("div",{className:"vm-block",children:Nt(xp,{})})]})},Ep=()=>{const{serverUrl:e}=Mt(),[t,n]=(0,r.useState)(null),[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)();return{data:t,error:i,loading:a,fetchData:async(t,r)=>{const a=((e,t,n)=>{const r=["format=json","relabel_configs=".concat(encodeURIComponent(t)),"metric=".concat(encodeURIComponent(n))];return"".concat(e,"/metric-relabel-debug?").concat(r.join("&"))})(e,t,r);o(!0);try{const e=await fetch(a),t=await e.json();n(t.error?null:t),l(String(t.error||""))}catch(Fp){Fp instanceof Error&&"AbortError"!==Fp.name&&l("".concat(Fp.name,": ").concat(Fp.message))}o(!1)}}},Np={config:'- if: \'{bar_label=~"b.*"}\'\n source_labels: [foo_label, bar_label]\n separator: "_"\n target_label: foobar\n- action: labeldrop\n regex: "foo_.*"\n- target_label: job\n replacement: "my-application-2"',labels:'{__name__="my_metric", bar_label="bar", foo_label="foo", job="my-application", instance="192.168.0.1"}'},Ap=()=>{const[e,t]=He(),{data:n,loading:a,error:o,fetchData:i}=Ep(),[l,s]=Em("","config"),[c,u]=Em("","labels"),d=(0,r.useCallback)((()=>{i(l,c),e.set("config",l),e.set("labels",c),t(e)}),[l,c]);return(0,r.useEffect)((()=>{const t=e.get("config")||"",n=e.get("labels")||"";(n||t)&&(i(t,n),s(t),u(n))}),[]),Nt("section",{className:"vm-relabeling",children:[a&&Nt(Al,{}),Nt("div",{className:"vm-relabeling-header vm-block",children:[Nt("div",{className:"vm-relabeling-header-configs",children:Nt(Ya,{type:"textarea",label:"Relabel configs",value:l,autofocus:!0,onChange:e=>{s(e||"")},onEnter:d})}),Nt("div",{className:"vm-relabeling-header__labels",children:Nt(Ya,{type:"textarea",label:"Labels",value:c,onChange:e=>{u(e||"")},onEnter:d})}),Nt("div",{className:"vm-relabeling-header-bottom",children:[Nt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/relabeling.html",rel:"help noreferrer",children:[Nt(On,{}),"Relabeling cookbook"]}),Nt("a",{className:"vm-link vm-link_with-icon",target:"_blank",href:"https://docs.victoriametrics.com/vmagent.html#relabeling",rel:"help noreferrer",children:[Nt(ir,{}),"Documentation"]}),Nt(la,{variant:"text",onClick:()=>{const{config:n,labels:r}=Np;s(n),u(r),i(n,r),e.set("config",n),e.set("labels",r),t(e)},children:"Try example"}),Nt(la,{variant:"contained",onClick:d,startIcon:Nt(qn,{}),children:"Submit"})]})]}),o&&Nt(na,{variant:"error",children:o}),n&&Nt("div",{className:"vm-relabeling-steps vm-block",children:[n.originalLabels&&Nt("div",{className:"vm-relabeling-steps-item",children:Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Original labels:"}),Nt("code",{dangerouslySetInnerHTML:{__html:n.originalLabels}})]})}),n.steps.map(((e,t)=>Nt("div",{className:"vm-relabeling-steps-item",children:[Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Step:"}),t+1]}),Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Relabeling Rule:"}),Nt("code",{children:Nt("pre",{children:e.rule})})]}),Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Input Labels:"}),Nt("code",{children:Nt("pre",{dangerouslySetInnerHTML:{__html:e.inLabels}})})]}),Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Output labels:"}),Nt("code",{children:Nt("pre",{dangerouslySetInnerHTML:{__html:e.outLabels}})})]})]},t))),n.resultingLabels&&Nt("div",{className:"vm-relabeling-steps-item",children:Nt("div",{className:"vm-relabeling-steps-item__row",children:[Nt("span",{children:"Resulting labels:"}),Nt("code",{dangerouslySetInnerHTML:{__html:n.resultingLabels}})]})})]})]})},Mp=e=>{let{rows:t,columns:n,defaultOrderBy:a,defaultOrderDir:o,copyToClipboard:i,paginationOffset:l}=e;const[s,c]=(0,r.useState)(a),[u,d]=(0,r.useState)(o||"desc"),[h,m]=(0,r.useState)(null),p=(0,r.useMemo)((()=>{const{startIndex:e,endIndex:n}=l;return Im(t,Lm(u,s)).slice(e,n)}),[t,s,u,l]),f=(e,t)=>async()=>{if(h!==t)try{await navigator.clipboard.writeText(String(e)),m(t)}catch(Fp){console.error(Fp)}};return(0,r.useEffect)((()=>{if(null===h)return;const e=setTimeout((()=>m(null)),2e3);return()=>clearTimeout(e)}),[h]),Nt("table",{className:"vm-table",children:[Nt("thead",{className:"vm-table-header",children:Nt("tr",{className:"vm-table__row vm-table__row_header",children:[n.map((e=>{return Nt("th",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:(t=e.key,()=>{d((e=>"asc"===e&&s===t?"desc":"asc")),c(t)}),children:Nt("div",{className:"vm-table-cell__content",children:[Nt("div",{children:String(e.title||e.key)}),Nt("div",{className:Cr()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":s===e.key,"vm-table__sort-icon_desc":"desc"===u&&s===e.key}),children:Nt(Hn,{})})]})},String(e.key));var t})),i&&Nt("th",{className:"vm-table-cell vm-table-cell_header"})]})}),Nt("tbody",{className:"vm-table-body",children:p.map(((e,t)=>Nt("tr",{className:"vm-table__row",children:[n.map((t=>Nt("td",{className:Cr()({"vm-table-cell":!0,["".concat(t.className)]:t.className}),children:e[t.key]||"-"},String(t.key)))),i&&Nt("td",{className:"vm-table-cell vm-table-cell_right",children:e[i]&&Nt("div",{className:"vm-table-cell__content",children:Nt(ya,{title:h===t?"Copied":"Copy row",children:Nt(la,{variant:"text",color:h===t?"success":"gray",size:"small",startIcon:Nt(h===t?Xn:rr,{}),onClick:f(e[i],t),ariaLabel:"copy row"})})})})]},t)))})]})},Tp=()=>{const{isMobile:e}=ea(),{timezone:t}=fn(),{data:n,lastUpdated:a,isLoading:i,error:l,fetchData:s}=(()=>{const{serverUrl:e}=Mt(),[t,n]=(0,r.useState)([]),[a,i]=(0,r.useState)(o()().format(Ot)),[l,s]=(0,r.useState)(!1),[c,u]=(0,r.useState)(),d=(0,r.useMemo)((()=>"".concat(e,"/api/v1/status/active_queries")),[e]),h=async()=>{s(!0);try{const e=await fetch(d),t=await e.json();n(t.data),i(o()().format("HH:mm:ss:SSS")),e.ok?u(void 0):u("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Fp){Fp instanceof Error&&u("".concat(Fp.name,": ").concat(Fp.message))}s(!1)};return(0,r.useEffect)((()=>{h().catch(console.error)}),[d]),{data:t,lastUpdated:a,isLoading:l,error:c,fetchData:h}})(),c=(0,r.useMemo)((()=>n.map((e=>{const t=o()(e.start).tz().format(Pt),n=o()(e.end).tz().format(Pt);return{duration:e.duration,remote_addr:e.remote_addr,query:e.query,args:"".concat(t," to ").concat(n,", step=").concat(Wt(e.step)),data:JSON.stringify(e,null,2)}}))),[n,t]),u=(0,r.useMemo)((()=>{if(null===c||void 0===c||!c.length)return[];const e=Object.keys(c[0]),t={remote_addr:"client address"},n=["data"];return e.filter((e=>!n.includes(e))).map((e=>({key:e,title:t[e]||e})))}),[c]);return Nt("div",{className:"vm-active-queries",children:[i&&Nt(Al,{}),Nt("div",{className:"vm-active-queries-header",children:[!c.length&&!l&&Nt(na,{variant:"info",children:"There are currently no active queries running"}),l&&Nt(na,{variant:"error",children:l}),Nt("div",{className:"vm-active-queries-header-controls",children:[Nt(la,{variant:"contained",onClick:async()=>{s().catch(console.error)},startIcon:Nt(Fn,{}),children:"Update"}),Nt("div",{className:"vm-active-queries-header__update-msg",children:["Last updated: ",a]})]})]}),!!c.length&&Nt("div",{className:Cr()({"vm-block":!0,"vm-block_mobile":e}),children:Nt(Mp,{rows:c,columns:u,defaultOrderBy:"duration",copyToClipboard:"data",paginationOffset:{startIndex:0,endIndex:1/0}})})]})},Lp=e=>{let{onClose:t,onUpload:n}=e;const{isMobile:a}=ea(),[o,i]=(0,r.useState)(""),[l,s]=(0,r.useState)(""),c=(0,r.useMemo)((()=>{try{return JSON.parse(o),""}catch(Fp){return Fp instanceof Error?Fp.message:"Unknown error"}}),[o]),u=()=>{s(c),c||(n(o),t())};return Nt("div",{className:Cr()({"vm-json-form vm-json-form_one-field":!0,"vm-json-form_mobile vm-json-form_one-field_mobile":a}),children:[Nt(Ya,{value:o,label:"JSON",type:"textarea",error:l,autofocus:!0,onChange:e=>{s(""),i(e)},onEnter:u}),Nt("div",{className:"vm-json-form-footer",children:Nt("div",{className:"vm-json-form-footer__controls vm-json-form-footer__controls_right",children:[Nt(la,{variant:"outlined",color:"error",onClick:t,children:"Cancel"}),Nt(la,{variant:"contained",onClick:u,children:"apply"})]})})]})},Ip=e=>{let{data:t,period:n}=e;const{isMobile:a}=ea(),{tableCompact:o}=Fr(),i=jr(),[l,s]=(0,r.useState)([]),[c,u]=(0,r.useState)(),[d,h]=(0,r.useState)(),[m,p]=(0,r.useState)(!1),[f,v]=(0,r.useState)([]),[g,y]=(0,r.useState)(),_=(0,r.useMemo)((()=>Xh(d||[]).map((e=>e.key))),[d]),b=(0,r.useMemo)((()=>{const e=t.some((e=>"matrix"===e.data.resultType));return t.some((e=>"vector"===e.data.resultType))&&e?Lr:e?Lr.filter((e=>"chart"===e.value)):Lr.filter((e=>"chart"!==e.value))}),[t]),[w,k]=(0,r.useState)(b[0].value),{yaxis:x,spanGaps:S}=Ur(),C=Br(),E=e=>{C({type:"SET_YAXIS_LIMITS",payload:e})};return(0,r.useEffect)((()=>{const e="chart"===w?"matrix":"vector",n=t.filter((t=>t.data.resultType===e&&t.trace)).map((e=>{var t,n;return e.trace?new Il(e.trace,(null===e||void 0===e||null===(t=e.vmui)||void 0===t||null===(n=t.params)||void 0===n?void 0:n.query)||"Query"):null}));s(n.filter(Boolean))}),[t,w]),(0,r.useEffect)((()=>{const e=[],n=[],r=[];t.forEach(((t,a)=>{const o=t.data.result.map((e=>{var n,r,o;return{...e,group:Number(null!==(n=null===(r=t.vmui)||void 0===r||null===(o=r.params)||void 0===o?void 0:o.id)&&void 0!==n?n:a)+1}}));var i,l;"matrix"===t.data.resultType?(n.push(...o),e.push((null===(i=t.vmui)||void 0===i||null===(l=i.params)||void 0===l?void 0:l.query)||"Query")):r.push(...o)})),v(e),u(n),h(r)}),[t]),(0,r.useEffect)((()=>{p(!!c&&Rl(c))}),[c]),Nt("div",{className:Cr()({"vm-query-analyzer-view":!0,"vm-query-analyzer-view_mobile":a}),children:[!!l.length&&Nt(Wl,{traces:l,onDeleteClick:e=>{s((t=>t.filter((t=>t.idValue!==e.idValue))))}}),Nt("div",{className:Cr()({"vm-block":!0,"vm-block_mobile":a}),children:[Nt("div",{className:"vm-custom-panel-body-header",children:[Nt("div",{className:"vm-custom-panel-body-header__tabs",children:Nt(Tr,{activeItem:w,items:b,onChange:e=>{k(e)}})}),Nt("div",{className:"vm-custom-panel-body-header__graph-controls",children:["chart"===w&&Nt(xa,{}),"chart"===w&&Nt(Zh,{yaxis:x,setYaxisLimits:E,toggleEnableLimits:()=>{C({type:"TOGGLE_ENABLE_YAXIS_LIMITS"})},spanGaps:{value:S,onChange:e=>{C({type:"SET_SPAN_GAPS",payload:e})}}}),"table"===w&&Nt(am,{columns:_,defaultColumns:g,onChangeColumns:y,tableCompact:o,toggleTableCompact:()=>{i({type:"TOGGLE_TABLE_COMPACT"})}})]})]}),c&&n&&"chart"===w&&Nt(Yh,{data:c,period:n,customStep:n.step||"1s",query:f,yaxis:x,setYaxisLimits:E,setPeriod:()=>null,height:a?.5*window.innerHeight:500,isHistogram:m,spanGaps:S}),d&&"code"===w&&Nt(Jh,{data:d}),d&&"table"===w&&Nt(tm,{data:d,displayColumns:g})]})]})},Pp=e=>{var t,n;let{data:a,period:i}=e;const l=(0,r.useMemo)((()=>a.filter((e=>e.stats&&"matrix"===e.data.resultType))),[a]),s=(0,r.useMemo)((()=>{var e,t;return null===(e=a.find((e=>{var t;return null===e||void 0===e||null===(t=e.vmui)||void 0===t?void 0:t.comment})))||void 0===e||null===(t=e.vmui)||void 0===t?void 0:t.comment}),[a]),c=(0,r.useMemo)((()=>{if(!i)return"";const e=o()(1e3*i.start).tz().format(Pt),t=o()(1e3*i.end).tz().format(Pt);return"".concat(e," - ").concat(t)}),[i]),{value:u,setTrue:d,setFalse:h}=ca(!1);return Nt(Ct.FK,{children:[Nt("div",{className:"vm-query-analyzer-info-header",children:[Nt(la,{startIcon:Nt(On,{}),variant:"outlined",color:"warning",onClick:d,children:"Show report info"}),i&&Nt(Ct.FK,{children:[Nt("div",{className:"vm-query-analyzer-info-header__period",children:[Nt(or,{})," step: ",i.step]}),Nt("div",{className:"vm-query-analyzer-info-header__period",children:[Nt(Vn,{})," ",c]})]})]}),u&&Nt(ga,{title:"Report info",onClose:h,children:Nt("div",{className:"vm-query-analyzer-info",children:[s&&Nt("div",{className:"vm-query-analyzer-info-item vm-query-analyzer-info-item_comment",children:[Nt("div",{className:"vm-query-analyzer-info-item__title",children:"Comment:"}),Nt("div",{className:"vm-query-analyzer-info-item__text",children:s})]}),l.map(((e,t)=>{var n;return Nt("div",{className:"vm-query-analyzer-info-item",children:[Nt("div",{className:"vm-query-analyzer-info-item__title",children:l.length>1?"Query ".concat(t+1,":"):"Stats:"}),Nt("div",{className:"vm-query-analyzer-info-item__text",children:[Object.entries(e.stats||{}).map((e=>{let[t,n]=e;return Nt("div",{children:[t,": ",null!==n&&void 0!==n?n:"-"]},t)})),"isPartial: ",String(null!==(n=e.isPartial)&&void 0!==n?n:"-")]})]},t)})),Nt("div",{className:"vm-query-analyzer-info-type",children:null!==(t=l[0])&&void 0!==t&&null!==(n=t.vmui)&&void 0!==n&&n.params?"The report was created using vmui":"The report was created manually"})]})})]})},Op=()=>{const[e,t]=(0,r.useState)([]),[n,a]=(0,r.useState)(""),o=(0,r.useMemo)((()=>!!e.length),[e]),{value:i,setTrue:l,setFalse:s}=ca(!1),c=(0,r.useMemo)((()=>{var t,n;if(!e)return;const r=null===(t=e[0])||void 0===t||null===(n=t.vmui)||void 0===n?void 0:n.params,a={start:+((null===r||void 0===r?void 0:r.start)||0),end:+((null===r||void 0===r?void 0:r.end)||0),step:null===r||void 0===r?void 0:r.step,date:""};if(!r){const t=e.filter((e=>"matrix"===e.data.resultType)).map((e=>e.data.result)).flat().map((e=>{var t;return e.values?null===(t=e.values)||void 0===t?void 0:t.map((e=>e[0])):[0]})).flat(),n=Array.from(new Set(t.filter(Boolean))).sort(((e,t)=>e-t));a.start=n[0],a.end=n[n.length-1],a.step=Yt((e=>{const t=e.slice(1).map(((t,n)=>t-e[n])),n={};t.forEach((e=>{const t=e.toString();n[t]=(n[t]||0)+1}));let r=0,a=0;for(const o in n)n[o]>a&&(a=n[o],r=Number(o));return r})(n))}return a.date=Jt(tn(a.end)),a}),[e]),u=e=>{try{const n=JSON.parse(e),r=Array.isArray(n)?n:[n];(e=>e.every((e=>{if("object"===typeof e&&null!==e){const t=e.data;if("object"===typeof t&&null!==t){const e=t.result,n=t.resultType;return Array.isArray(e)&&"string"===typeof n}}return!1})))(r)?t(r):a("Invalid structure - JSON does not match the expected format")}catch(Fp){Fp instanceof Error&&a("".concat(Fp.name,": ").concat(Fp.message))}},d=e=>{e.map((e=>{const t=new FileReader;t.onload=e=>{var t;const n=String(null===(t=e.target)||void 0===t?void 0:t.result);u(n)},t.readAsText(e)}))},h=e=>{a("");const t=Array.from(e.target.files||[]);d(t),e.target.value=""},{files:m,dragging:p}=ep();return(0,r.useEffect)((()=>{d(m)}),[m]),Nt("div",{className:"vm-trace-page",children:[o&&Nt("div",{className:"vm-trace-page-header",children:[Nt("div",{className:"vm-trace-page-header-errors",children:Nt(Pp,{data:e,period:c})}),Nt("div",{children:Nt(tp,{onOpenModal:l,onChange:h})})]}),n&&Nt("div",{className:"vm-trace-page-header-errors-item vm-trace-page-header-errors-item_margin-bottom",children:[Nt(na,{variant:"error",children:n}),Nt(la,{className:"vm-trace-page-header-errors-item__close",startIcon:Nt(In,{}),variant:"text",color:"error",onClick:()=>{a("")}})]}),o&&Nt(Ip,{data:e,period:c}),!o&&Nt("div",{className:"vm-trace-page-preview",children:[Nt("p",{className:"vm-trace-page-preview__text",children:["Please, upload file with JSON response content.","\n","The file must contain query information in JSON format.","\n","Graph will be displayed after file upload.","\n","Attach files by dragging & dropping, selecting or pasting them."]}),Nt(tp,{onOpenModal:l,onChange:h})]}),i&&Nt(ga,{title:"Paste JSON",onClose:s,children:Nt(Lp,{onClose:s,onUpload:u})}),p&&Nt("div",{className:"vm-trace-page__dropzone"})]})},Rp=()=>{const[e,t]=(0,r.useState)(!1);return Nt(Ct.FK,{children:Nt(Ie,{children:Nt(aa,{children:Nt(Ct.FK,{children:[Nt(Xm,{onLoaded:t}),e&&Nt(xe,{children:Nt(we,{path:"/",element:Nt(Fo,{}),children:[Nt(we,{path:We.home,element:Nt(um,{})}),Nt(we,{path:We.metrics,element:Nt(gp,{})}),Nt(we,{path:We.cardinality,element:Nt($m,{})}),Nt(we,{path:We.topQueries,element:Nt(Km,{})}),Nt(we,{path:We.trace,element:Nt(np,{})}),Nt(we,{path:We.queryAnalyzer,element:Nt(Op,{})}),Nt(we,{path:We.dashboards,element:Nt(pm,{})}),Nt(we,{path:We.withTemplate,element:Nt(Cp,{})}),Nt(we,{path:We.relabel,element:Nt(Ap,{})}),Nt(we,{path:We.activeQueries,element:Nt(Tp,{})}),Nt(we,{path:We.icons,element:Nt(yp,{})})]})})]})})})})},Dp=e=>{e&&n.e(685).then(n.bind(n,685)).then((t=>{let{getCLS:n,getFID:r,getFCP:a,getLCP:o,getTTFB:i}=t;n(e),r(e),a(e),o(e),i(e)}))},zp=document.getElementById("root");zp&&(0,r.render)(Nt(Rp,{}),zp),Dp()})()})(); \ No newline at end of file diff --git a/app/vmselect/vmui/static/media/MetricsQL.8c2e588d62b87f90dbf0.md b/app/vmselect/vmui/static/media/MetricsQL.a00044c91d9781cf8557.md similarity index 99% rename from app/vmselect/vmui/static/media/MetricsQL.8c2e588d62b87f90dbf0.md rename to app/vmselect/vmui/static/media/MetricsQL.a00044c91d9781cf8557.md index 2f71686b58..7d75c77f7b 100644 --- a/app/vmselect/vmui/static/media/MetricsQL.8c2e588d62b87f90dbf0.md +++ b/app/vmselect/vmui/static/media/MetricsQL.a00044c91d9781cf8557.md @@ -103,7 +103,7 @@ The list of MetricsQL features on top of PromQL: * Trailing commas on all the lists are allowed - label filters, function args and with expressions. For instance, the following queries are valid: `m{foo="bar",}`, `f(a, b,)`, `WITH (x=y,) x`. This simplifies maintenance of multi-line queries. -* Metric names and label names may contain any unicode letter. For example `температура{город="Київ"}` is a valid MetricsQL expression. +* Metric names and label names may contain any unicode letter. For example `ტემპერატურა{πόλη="Київ"}` is a valid MetricsQL expression. * Metric names and labels names may contain escaped chars. For example, `foo\-bar{baz\=aa="b"}` is valid expression. It returns time series with name `foo-bar` containing label `baz=aa` with value `b`. Additionally, the following escape sequences are supported: diff --git a/app/vmselect/vmui/victorialogs.html b/app/vmselect/vmui/victorialogs.html deleted file mode 100644 index 37a3d9cc3e..0000000000 --- a/app/vmselect/vmui/victorialogs.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - VM UI - - - - - - - - - - - - - - -
    - - - diff --git a/app/vmselect/vmui/victoriametrics.html b/app/vmselect/vmui/victoriametrics.html deleted file mode 100644 index a124935409..0000000000 --- a/app/vmselect/vmui/victoriametrics.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - VM UI - - - - - - - - - - - - - - - -
    - - - diff --git a/app/vmselect/vmui/vmanomaly.html b/app/vmselect/vmui/vmanomaly.html deleted file mode 100644 index a124935409..0000000000 --- a/app/vmselect/vmui/vmanomaly.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - VM UI - - - - - - - - - - - - - - - -
    - - - From a3d8077959ba4c6af0731c5c07b6bc53da5e359b Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 19 Sep 2024 15:56:34 +0200 Subject: [PATCH 052/128] lib/logstorage: make sure that getCommonTokens returns common tokens in the original order of tokens inside tokenSets arg This fixes flaky test TestGetCommonTokensForOrFilters: filter_or_test.go:143: unexpected tokens for field "_msg"; got ["foo" "bar"]; want ["bar" "foo"] --- lib/logstorage/filter_in.go | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/lib/logstorage/filter_in.go b/lib/logstorage/filter_in.go index 8b9e14caa1..a230d3708b 100644 --- a/lib/logstorage/filter_in.go +++ b/lib/logstorage/filter_in.go @@ -496,33 +496,27 @@ func getCommonTokensAndTokenSets(values []string) ([]string, [][]string) { return commonTokens, tokenSets } +// getCommonTokens returns common tokens seen at every set of tokens inside tokenSets. +// +// The returned common tokens preserve the original order seen in tokenSets. func getCommonTokens(tokenSets [][]string) []string { if len(tokenSets) == 0 { return nil } - m := make(map[string]struct{}, len(tokenSets[0])) - for _, token := range tokenSets[0] { - m[token] = struct{}{} - } + commonTokens := append([]string{}, tokenSets[0]...) for _, tokens := range tokenSets[1:] { - if len(m) == 0 { + if len(commonTokens) == 0 { return nil } - for token := range m { - if !slices.Contains(tokens, token) { - delete(m, token) + dst := commonTokens[:0] + for _, token := range commonTokens { + if slices.Contains(tokens, token) { + dst = append(dst, token) } } + commonTokens = dst } - if len(m) == 0 { - return nil - } - - tokens := make([]string, 0, len(m)) - for token := range m { - tokens = append(tokens, token) - } - return tokens + return commonTokens } From 258201af04baefb89582cce98401bd2ce790dc0f Mon Sep 17 00:00:00 2001 From: Thomas Danielsson Date: Thu, 19 Sep 2024 14:33:12 +0200 Subject: [PATCH 053/128] docs: fix typo in the changelog Signed-off-by: hagen1778 --- docs/changelog/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 5aebbcd5c1..4670f8613b 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -20,7 +20,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). **Update note 1: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** -**Update note 2: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): default value of `-loggerMaxArgLen` cmd-line flag was increased from 1000 to 5000. This should improve visibility on errors produced by very long queries.** +**Update note 2: all VictoriaMetrics components: default value of `-loggerMaxArgLen` cmd-line flag was increased from 1000 to 5000. This should improve visibility on errors produced by very long queries.** * SECURITY: upgrade Go builder from Go1.23.0 to Go1.23.1. See the list of issues addressed in [Go1.23.1](https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved). * SECURITY: upgrade base docker image (Alpine) from 3.20.2 to 3.20.3. See [alpine 3.20.3 release notes](https://alpinelinux.org/posts/Alpine-3.17.10-3.18.9-3.19.4-3.20.3-released.html). From 6726a5aaed7971f308b21c5ffd559fd3dca91944 Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Fri, 20 Sep 2024 10:39:13 +0200 Subject: [PATCH 054/128] docs: fix typo in link in change line about NaN Signed-off-by: hagen1778 --- docs/changelog/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 4670f8613b..8746e915ba 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -38,7 +38,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes start-up crash on Windows OS. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. -* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this issue [https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069] for details. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly track `vm_missing_tsids_for_metric_id_total` metric. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6931) for details. * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). * BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): properly handle `c1 AND c2` and `c1 OR c1` queries for constants `c1` and `c2`. Previously such queries could return unexpected results. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637). From 59281d53582ef2fd1c447c9ed74b0530dd8a1785 Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Fri, 20 Sep 2024 10:42:07 +0200 Subject: [PATCH 055/128] docs: rm update node about loggerMaxArgLen as it doesn't have incompatibility effect Signed-off-by: hagen1778 --- docs/changelog/CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 8746e915ba..b62fbd9ea3 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -18,9 +18,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). ## tip -**Update note 1: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** - -**Update note 2: all VictoriaMetrics components: default value of `-loggerMaxArgLen` cmd-line flag was increased from 1000 to 5000. This should improve visibility on errors produced by very long queries.** +**Update note: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** * SECURITY: upgrade Go builder from Go1.23.0 to Go1.23.1. See the list of issues addressed in [Go1.23.1](https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved). * SECURITY: upgrade base docker image (Alpine) from 3.20.2 to 3.20.3. See [alpine 3.20.3 release notes](https://alpinelinux.org/posts/Alpine-3.17.10-3.18.9-3.19.4-3.20.3-released.html). From 6167bccc5a87bf5348ea500dabbbc399957a15ec Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Fri, 20 Sep 2024 10:54:43 +0200 Subject: [PATCH 056/128] docs: fix more typos in the changelog Signed-off-by: hagen1778 --- docs/changelog/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index b62fbd9ea3..48a478ac1b 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -26,9 +26,9 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): allow disabling `Bearer` prefix enforcement for authentication header. This is useful for cases when identity token is used instead of access token. -* FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parting `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. -* FEATURE: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Adds new metrics for data ingestion: `vm_rows_received_by_storage_total`, `vm_rows_ignored_total{reason="nan_value"}`, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`. See this [PR](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6663) for details. -* FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change the request method for `/query_range` and `/query` from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). +* FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parsing `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. +* FEATURE: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): add new metrics for data ingestion: `vm_rows_received_by_storage_total`, `vm_rows_ignored_total{reason="nan_value"}`, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`. See this [PR](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6663) for details. +* FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change request method for `/query_range` and `/query` calls from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. From d6d02d7aeb232d64dd9170c3b69e6eed52e9ac6d Mon Sep 17 00:00:00 2001 From: Hui Wang Date: Fri, 20 Sep 2024 17:07:40 +0800 Subject: [PATCH 057/128] vmalert: fix variable `$activeAt` value when templating rule annotation in replay mode Co-authored-by: Roman Khavronenko --- app/vmalert/rule/alerting.go | 2 ++ app/vmalert/rule/alerting_test.go | 31 ++++++++++++++----------------- docs/changelog/CHANGELOG.md | 1 + 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/vmalert/rule/alerting.go b/app/vmalert/rule/alerting.go index a4ce519972..5c9a17393d 100644 --- a/app/vmalert/rule/alerting.go +++ b/app/vmalert/rule/alerting.go @@ -335,6 +335,8 @@ func (ar *AlertingRule) execRange(ctx context.Context, start, end time.Time) ([] // reset to Pending if there are gaps > EvalInterval between DPs a.State = notifier.StatePending a.ActiveAt = at + // re-template the annotations as active timestamp is changed + _, a.Annotations, _ = ar.expandTemplates(s, qFn, at) a.Start = time.Time{} } else if at.Sub(a.ActiveAt) >= ar.For && a.State != notifier.StateFiring { a.State = notifier.StateFiring diff --git a/app/vmalert/rule/alerting_test.go b/app/vmalert/rule/alerting_test.go index 9558e9db9e..0d76a3aa93 100644 --- a/app/vmalert/rule/alerting_test.go +++ b/app/vmalert/rule/alerting_test.go @@ -289,7 +289,7 @@ func TestAlertingRule_Exec(t *testing.T) { 4: {{labels: []string{"name", "foo"}, alert: ¬ifier.Alert{State: notifier.StateFiring}}}, }) - f(newTestAlertingRuleWithKeepFiring("for-pending=>firing=>keepfiring=>firing", defaultStep, defaultStep), [][]datasource.Metric{ + f(newTestAlertingRuleWithCustomFields("for-pending=>firing=>keepfiring=>firing", defaultStep, 0, defaultStep, nil), [][]datasource.Metric{ {metricWithLabels(t, "name", "foo")}, {metricWithLabels(t, "name", "foo")}, // empty step to keep firing @@ -302,7 +302,7 @@ func TestAlertingRule_Exec(t *testing.T) { 3: {{labels: []string{"name", "foo"}, alert: ¬ifier.Alert{State: notifier.StateFiring}}}, }) - f(newTestAlertingRuleWithKeepFiring("for-pending=>firing=>keepfiring=>keepfiring=>inactive=>pending=>firing", defaultStep, 2*defaultStep), [][]datasource.Metric{ + f(newTestAlertingRuleWithCustomFields("for-pending=>firing=>keepfiring=>keepfiring=>inactive=>pending=>firing", defaultStep, 0, 2*defaultStep, nil), [][]datasource.Metric{ {metricWithLabels(t, "name", "foo")}, {metricWithLabels(t, "name", "foo")}, // empty step to keep firing @@ -395,7 +395,7 @@ func TestAlertingRuleExecRange(t *testing.T) { {State: notifier.StateFiring, ActiveAt: time.Unix(3e3, 0)}, }, nil) - f(newTestAlertingRule("for-pending", time.Second), []datasource.Metric{ + f(newTestAlertingRuleWithCustomFields("for-pending", time.Second, 0, 0, map[string]string{"activeAt": "{{ $activeAt.UnixMilli }}"}), []datasource.Metric{ {Values: []float64{1, 1, 1}, Timestamps: []int64{1, 3, 5}}, }, []*notifier.Alert{ {State: notifier.StatePending, ActiveAt: time.Unix(1, 0)}, @@ -406,7 +406,7 @@ func TestAlertingRuleExecRange(t *testing.T) { GroupID: fakeGroup.ID(), Name: "for-pending", Labels: map[string]string{"alertname": "for-pending"}, - Annotations: map[string]string{}, + Annotations: map[string]string{"activeAt": "5000"}, State: notifier.StatePending, ActiveAt: time.Unix(5, 0), Value: 1, @@ -414,7 +414,7 @@ func TestAlertingRuleExecRange(t *testing.T) { }, }) - f(newTestAlertingRule("for-firing", 3*time.Second), []datasource.Metric{ + f(newTestAlertingRuleWithCustomFields("for-firing", 3*time.Second, 0, 0, map[string]string{"activeAt": "{{ $activeAt.UnixMilli }}"}), []datasource.Metric{ {Values: []float64{1, 1, 1}, Timestamps: []int64{1, 3, 5}}, }, []*notifier.Alert{ {State: notifier.StatePending, ActiveAt: time.Unix(1, 0)}, @@ -425,7 +425,7 @@ func TestAlertingRuleExecRange(t *testing.T) { GroupID: fakeGroup.ID(), Name: "for-firing", Labels: map[string]string{"alertname": "for-firing"}, - Annotations: map[string]string{}, + Annotations: map[string]string{"activeAt": "1000"}, State: notifier.StateFiring, ActiveAt: time.Unix(1, 0), Start: time.Unix(5, 0), @@ -434,7 +434,7 @@ func TestAlertingRuleExecRange(t *testing.T) { }, }) - f(newTestAlertingRule("for-hold-pending", time.Second), []datasource.Metric{ + f(newTestAlertingRuleWithCustomFields("for-hold-pending", time.Second, 0, 0, map[string]string{"activeAt": "{{ $activeAt.UnixMilli }}"}), []datasource.Metric{ {Values: []float64{1, 1, 1}, Timestamps: []int64{1, 2, 5}}, }, []*notifier.Alert{ {State: notifier.StatePending, ActiveAt: time.Unix(1, 0)}, @@ -445,7 +445,7 @@ func TestAlertingRuleExecRange(t *testing.T) { GroupID: fakeGroup.ID(), Name: "for-hold-pending", Labels: map[string]string{"alertname": "for-hold-pending"}, - Annotations: map[string]string{}, + Annotations: map[string]string{"activeAt": "5000"}, State: notifier.StatePending, ActiveAt: time.Unix(5, 0), Value: 1, @@ -453,7 +453,7 @@ func TestAlertingRuleExecRange(t *testing.T) { }, }) - f(newTestAlertingRuleWithEvalInterval("firing=>inactive=>inactive=>firing=>firing", 0, time.Second), []datasource.Metric{ + f(newTestAlertingRuleWithCustomFields("firing=>inactive=>inactive=>firing=>firing", 0, time.Second, 0, nil), []datasource.Metric{ {Values: []float64{1, 1, 1, 1}, Timestamps: []int64{1, 4, 5, 6}}, }, []*notifier.Alert{ {State: notifier.StateFiring, ActiveAt: time.Unix(1, 0)}, @@ -538,7 +538,6 @@ func TestAlertingRuleExecRange(t *testing.T) { "source": "vm", }, }, - // { State: notifier.StateFiring, ActiveAt: time.Unix(1, 0), Labels: map[string]string{ @@ -1036,15 +1035,13 @@ func newTestAlertingRule(name string, waitFor time.Duration) *AlertingRule { return &rule } -func newTestAlertingRuleWithEvalInterval(name string, waitFor, evalInterval time.Duration) *AlertingRule { - rule := newTestAlertingRule(name, waitFor) - rule.EvalInterval = evalInterval - return rule -} - -func newTestAlertingRuleWithKeepFiring(name string, waitFor, keepFiringFor time.Duration) *AlertingRule { +func newTestAlertingRuleWithCustomFields(name string, waitFor, evalInterval, keepFiringFor time.Duration, annotation map[string]string) *AlertingRule { rule := newTestAlertingRule(name, waitFor) + if evalInterval != 0 { + rule.EvalInterval = evalInterval + } rule.KeepFiringFor = keepFiringFor + rule.Annotations = annotation return rule } diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 48a478ac1b..b338bdc4a2 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -39,6 +39,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly track `vm_missing_tsids_for_metric_id_total` metric. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6931) for details. * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). +* BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert/): properly update value of variable `$activeAt` in rules annotation during replay mode. Before, `$activeAt` could have provided incorrect values during replay. * BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): properly handle `c1 AND c2` and `c1 OR c1` queries for constants `c1` and `c2`. Previously such queries could return unexpected results. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637). * BUGFIX: all VictoriaMetrics components: increase default value of `-loggerMaxArgLen` cmd-line flag from 1000 to 5000. This should improve visibility on errors produced by very long queries. From cd384c75475f323e4fb377e44fa6cf7c57135eb5 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Fri, 20 Sep 2024 11:11:38 +0200 Subject: [PATCH 058/128] docs: clarify operator name Signed-off-by: Artem Navoiev --- docs/operator/_index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/operator/_index.md b/docs/operator/_index.md index b43dd6b038..3b76537653 100644 --- a/docs/operator/_index.md +++ b/docs/operator/_index.md @@ -1,9 +1,12 @@ --- weight: 0 title: Operator +<<<<<<< Updated upstream menu: docs: weight: 0 +======= +>>>>>>> Stashed changes aliases: - /operator/ - /operator/index.html From 36d58588a7732a9f66abb70b757ebc7e21692424 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Fri, 20 Sep 2024 11:20:16 +0200 Subject: [PATCH 059/128] docs: clarify operator name.2 Signed-off-by: Artem Navoiev --- docs/operator/_index.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/operator/_index.md b/docs/operator/_index.md index 3b76537653..579ee5be4c 100644 --- a/docs/operator/_index.md +++ b/docs/operator/_index.md @@ -1,12 +1,10 @@ --- weight: 0 -title: Operator -<<<<<<< Updated upstream +title: Kubernetes Operator menu: docs: weight: 0 -======= ->>>>>>> Stashed changes + identifier: operator aliases: - /operator/ - /operator/index.html From 7596e239eb9a3c4231ca4876c4279e13a93222d1 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Fri, 20 Sep 2024 11:22:03 +0200 Subject: [PATCH 060/128] docs: set operator menu item weight to 30 Signed-off-by: Artem Navoiev --- docs/operator/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/operator/_index.md b/docs/operator/_index.md index 579ee5be4c..07d5fda1e5 100644 --- a/docs/operator/_index.md +++ b/docs/operator/_index.md @@ -3,7 +3,7 @@ weight: 0 title: Kubernetes Operator menu: docs: - weight: 0 + weight: 30 identifier: operator aliases: - /operator/ From 218c5338747026b5cccbaa557753951da5956930 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Fri, 20 Sep 2024 11:50:47 +0200 Subject: [PATCH 061/128] lib/storage: follow-up after d8f8822fa5be0060551b9e644165066b2797ce16 (#7036) Make function name and comments more clear. https://github.com/VictoriaMetrics/VictoriaMetrics/commit/d8f8822fa5be0060551b9e644165066b2797ce16 Signed-off-by: hagen1778 Co-authored-by: Nikolay --- lib/storage/index_db.go | 9 +++++---- lib/storage/storage.go | 15 ++++----------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/lib/storage/index_db.go b/lib/storage/index_db.go index 2c37c2fd31..0e6ea2a920 100644 --- a/lib/storage/index_db.go +++ b/lib/storage/index_db.go @@ -1518,7 +1518,7 @@ func (db *indexDB) searchMetricNameWithCache(dst []byte, metricID uint64) ([]byt return dst, true } - if db.s.shouldDeleteMissingMetricID(metricID) { + if db.s.wasMetricIDMissingBefore(metricID) { // Cannot find the MetricName for the given metricID for the last 60 seconds. // It is likely the indexDB contains incomplete set of metricID -> metricName entries // after unclean shutdown or after restoring from a snapshot. @@ -1799,9 +1799,10 @@ func (db *indexDB) getTSIDsFromMetricIDs(qt *querytracer.Tracer, metricIDs []uin if !is.getTSIDByMetricID(tsid, metricID) { // Cannot find TSID for the given metricID. // This may be the case on incomplete indexDB - // due to snapshot or due to unflushed entries. - // Just increment errors counter and skip it for now. - if is.db.s.shouldDeleteMissingMetricID(metricID) { + // due to snapshot or due to un-flushed entries. + // Mark the metricID as deleted, so it is created again when new sample + // for the given time series is ingested next time. + if is.db.s.wasMetricIDMissingBefore(metricID) { is.db.missingTSIDsForMetricID.Add(1) metricIDsToDelete = append(metricIDsToDelete, metricID) } diff --git a/lib/storage/storage.go b/lib/storage/storage.go index 71b91b1a56..c3996f1370 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -2711,21 +2711,20 @@ var indexDBTableIdx = func() *atomic.Uint64 { return &x }() -// shouldDeleteMissingMetricID checks if metricID index entry is missing +// wasMetricIDMissingBefore checks if passed metricID was already registered as missing before. +// It returns true if metricID was registered as missing for more than 60s. // -// Broken index entry should be deleted by caller +// This function is called when storage can't find TSID for corresponding metricID. // There are the following expected cases when this may happen: -// // 1. The corresponding metricID -> metricName/tsid entry isn't visible for search yet. // The solution is to wait for some time and try the search again. // It is OK if newly registered time series isn't visible for search during some time. // This should resolve https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5959 -// // 2. The metricID -> metricName/tsid entry doesn't exist in the indexdb. // This is possible after unclean shutdown or after restoring of indexdb from a snapshot. // In this case the metricID must be deleted, so new metricID is registered // again when new sample for the given metric is ingested next time. -func (s *Storage) shouldDeleteMissingMetricID(metricID uint64) bool { +func (s *Storage) wasMetricIDMissingBefore(metricID uint64) bool { ct := fasttime.UnixTimestamp() s.missingMetricIDsLock.Lock() defer s.missingMetricIDsLock.Unlock() @@ -2742,11 +2741,5 @@ func (s *Storage) shouldDeleteMissingMetricID(metricID uint64) bool { deleteDeadline = ct + 60 s.missingMetricIDs[metricID] = deleteDeadline } - // Cannot find index entry for the given metricID for the last 60 seconds. - // It is likely the indexDB contains incomplete set of metricID -> metricName/tsid entries - // after unclean shutdown or after restoring from a snapshot. - // Mark the metricID as deleted, so it is created again when new sample - // for the given time series is ingested next time. - return ct > deleteDeadline } From 6f61e9d49d3604a7960cd637666853c34a93debd Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 20 Sep 2024 11:57:24 +0200 Subject: [PATCH 062/128] lib/storage: simplify indexDB.doExtDB() usage by removing the returned value Previously indexDB.doExtDB() was returning boolean value, which was indicating whether f callback was called. There is no need in returning this boolean value, since the f callback can determine on itself whether it was called. This simplifies the code a bit. While at it, document indexDB.doExtDB(). --- lib/storage/index_db.go | 18 ++++++++++-------- lib/storage/storage.go | 4 ++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/storage/index_db.go b/lib/storage/index_db.go index 0e6ea2a920..4d9ec3cd5a 100644 --- a/lib/storage/index_db.go +++ b/lib/storage/index_db.go @@ -258,19 +258,20 @@ func (db *indexDB) UpdateMetrics(m *IndexDBMetrics) { }) } -func (db *indexDB) doExtDB(f func(extDB *indexDB)) bool { +// doExtDB calls f for non-nil db.extDB. +// +// f isn't called if db.extDB is nil. +func (db *indexDB) doExtDB(f func(extDB *indexDB)) { db.extDBLock.Lock() extDB := db.extDB if extDB != nil { extDB.incRef() } db.extDBLock.Unlock() - if extDB == nil { - return false + if extDB != nil { + f(extDB) + extDB.decRef() } - f(extDB) - extDB.decRef() - return true } // SetExtDB sets external db to search. @@ -1505,7 +1506,7 @@ func (db *indexDB) searchMetricNameWithCache(dst []byte, metricID uint64) ([]byt } // Try searching in the external indexDB. - if db.doExtDB(func(extDB *indexDB) { + db.doExtDB(func(extDB *indexDB) { is := extDB.getIndexSearch(noDeadline) dst, ok = is.searchMetricName(dst, metricID) extDB.putIndexSearch(is) @@ -1514,7 +1515,8 @@ func (db *indexDB) searchMetricNameWithCache(dst []byte, metricID uint64) ([]byt // since the filtering must be performed before calling this func. extDB.putMetricNameToCache(metricID, dst) } - }) && ok { + }) + if ok { return dst, true } diff --git a/lib/storage/storage.go b/lib/storage/storage.go index c3996f1370..bf0e3a2337 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -389,11 +389,11 @@ func (s *Storage) CreateSnapshot() (string, error) { dirsToRemoveOnError = append(dirsToRemoveOnError, idbSnapshot) var err error - ok := idb.doExtDB(func(extDB *indexDB) { + idb.doExtDB(func(extDB *indexDB) { prevSnapshot := filepath.Join(idbSnapshot, extDB.name) err = extDB.tb.CreateSnapshotAt(prevSnapshot) }) - if ok && err != nil { + if err != nil { return "", fmt.Errorf("cannot create prev indexDB snapshot: %w", err) } dstIdbDir := filepath.Join(dstDir, indexdbDirname) From 787b9cd9a09f49ace10f23e1273eb7e21a3c463d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 20 Sep 2024 13:07:17 +0200 Subject: [PATCH 063/128] lib/storage: improve performance for indexSearch.containsTimeRange() The indexSearch.containsTimeRange() function is called for the current indexDB and the previous indexDB every time when searching for metricIDs by label filters. This function consumes a lot of additional CPU time for cases when queries with lightweight label filters are sent to VictoriaMetrics at high rate (e.g. thousands of RPS), like in the issue https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009 . Optimize indexSearch.containsTimeRange() function in the following ways: - Unconditionally return true if this function is called for the current indexDB, since there are very high chances that the current indexDB contains the data with timestamps in the requested time range. - Cache the minimum timestamp, which is missing in the indexed data for the previous indexDB. This is safe to do, since the previous indexDB is readonly. This optimization eliminates potentially slow lookup in the previous indexDB for typical use cases when the requested time range is close to the current time. --- lib/storage/index_db.go | 58 +++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/lib/storage/index_db.go b/lib/storage/index_db.go index 4d9ec3cd5a..d280fa65dd 100644 --- a/lib/storage/index_db.go +++ b/lib/storage/index_db.go @@ -91,6 +91,14 @@ type indexDB struct { // The db must be automatically recovered after that. missingMetricNamesForMetricID atomic.Uint64 + // minMissingTimestamp is the minimum timestamp, which is missing in the given indexDB. + // + // This field is used at containsTimeRange() function only for the previous indexDB, + // since this indexDB is readonly. + // This field cannot be used for the current indexDB, since it may receive data + // with bigger timestamps at any time. + minMissingTimestamp atomic.Int64 + // generation identifies the index generation ID // and is used for syncing items from different indexDBs generation uint64 @@ -274,6 +282,14 @@ func (db *indexDB) doExtDB(f func(extDB *indexDB)) { } } +// hasExtDB returns true if db.extDB != nil +func (db *indexDB) hasExtDB() bool { + db.extDBLock.Lock() + ok := db.extDB != nil + db.extDBLock.Unlock() + return ok +} + // SetExtDB sets external db to search. // // It decrements refCount for the previous extDB. @@ -1904,13 +1920,37 @@ func (is *indexSearch) searchMetricName(dst []byte, metricID uint64) ([]byte, bo return dst, true } -func (is *indexSearch) containsTimeRange(tr TimeRange) (bool, error) { +func (is *indexSearch) containsTimeRange(tr TimeRange) bool { + db := is.db + + if db.hasExtDB() { + // The db corresponds to the current indexDB, which is used for storing index data for newly registered time series. + // This means that it may contain data for the given tr with probability close to 100%. + return true + } + + // The db corresponds to the previous indexDB, which is readonly. + // So it is safe caching the minimum timestamp, which isn't covered by the db. + minMissingTimestamp := db.minMissingTimestamp.Load() + if minMissingTimestamp != 0 && tr.MinTimestamp >= minMissingTimestamp { + return false + } + + if is.containsTimeRangeSlow(tr) { + return true + } + + db.minMissingTimestamp.CompareAndSwap(minMissingTimestamp, tr.MinTimestamp) + return false +} + +func (is *indexSearch) containsTimeRangeSlow(tr TimeRange) bool { ts := &is.ts kb := &is.kb // Verify whether the tr.MinTimestamp is included into `ts` or is smaller than the minimum date stored in `ts`. // Do not check whether tr.MaxTimestamp is included into `ts` or is bigger than the max date stored in `ts` for performance reasons. - // This means that containsTimeRange() can return true if `tr` is located below the min date stored in `ts`. + // This means that containsTimeRangeSlow() can return true if `tr` is located below the min date stored in `ts`. // This is OK, since this case isn't encountered too much in practice. // The main practical case allows skipping searching in prev indexdb (`ts`) when `tr` // is located above the max date stored there. @@ -1921,15 +1961,15 @@ func (is *indexSearch) containsTimeRange(tr TimeRange) (bool, error) { ts.Seek(kb.B) if !ts.NextItem() { if err := ts.Error(); err != nil { - return false, fmt.Errorf("error when searching for minDate=%d, prefix %q: %w", minDate, kb.B, err) + logger.Panicf("FATAL: error when searching for minDate=%d, prefix %q: %w", minDate, kb.B, err) } - return false, nil + return false } if !bytes.HasPrefix(ts.Item, prefix) { // minDate exceeds max date from ts. - return false, nil + return false } - return true, nil + return true } func (is *indexSearch) getTSIDByMetricID(dst *TSID, metricID uint64) bool { @@ -2225,11 +2265,7 @@ func (is *indexSearch) searchMetricIDsInternal(qt *querytracer.Tracer, tfss []*T metricIDs := &uint64set.Set{} - ok, err := is.containsTimeRange(tr) - if err != nil { - return nil, err - } - if !ok { + if !is.containsTimeRange(tr) { qt.Printf("indexdb doesn't contain data for the given timeRange=%s", &tr) return metricIDs, nil } From 5708a854996cb98a445e5dd762cb1f6aa8742ee0 Mon Sep 17 00:00:00 2001 From: Andrii Chubatiuk Date: Fri, 20 Sep 2024 16:14:29 +0300 Subject: [PATCH 064/128] docs: updated root menu items (#7061) ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: Artem Navoiev Co-authored-by: Artem Navoiev --- docs/VictoriaLogs/_index.md | 5 +++++ docs/anomaly-detection/_index.md | 7 ++++++- docs/guides/_index.md | 6 ++++++ docs/operator/_index.md | 3 ++- docs/victoriametrics-cloud/_index.md | 7 ++++++- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/docs/VictoriaLogs/_index.md b/docs/VictoriaLogs/_index.md index 943bb4c92d..47f5b01128 100644 --- a/docs/VictoriaLogs/_index.md +++ b/docs/VictoriaLogs/_index.md @@ -1,6 +1,11 @@ --- title: VictoriaLogs weight: 0 +menu: + docs: + weight: 15 + identifier: victorialogs + pageRef: /victorialogs/ aliases: - /VictoriaLogs/ - /VictoriaLogs/index.html diff --git a/docs/anomaly-detection/_index.md b/docs/anomaly-detection/_index.md index 6adb047e0f..f9f762e270 100644 --- a/docs/anomaly-detection/_index.md +++ b/docs/anomaly-detection/_index.md @@ -1,6 +1,11 @@ --- title: VictoriaMetrics Anomaly Detection -weight: 0 +weight: 50 +menu: + docs: + weight: 50 + identifier: anomaly-detection + pageRef: /anomaly-detection/ aliases: - /anomaly-detection.html - /vmanomaly.html diff --git a/docs/guides/_index.md b/docs/guides/_index.md index cfdde2a8c0..63f3149948 100644 --- a/docs/guides/_index.md +++ b/docs/guides/_index.md @@ -2,5 +2,11 @@ weight: 0 title: Guides disableToc: true + +menu: + docs: + weight: 20 + identifier: guides + pageRef: /guides/ --- {{% section %}} diff --git a/docs/operator/_index.md b/docs/operator/_index.md index 07d5fda1e5..45f1a6d2a3 100644 --- a/docs/operator/_index.md +++ b/docs/operator/_index.md @@ -3,8 +3,9 @@ weight: 0 title: Kubernetes Operator menu: docs: - weight: 30 + weight: 35 identifier: operator + pageRef: /operator/ aliases: - /operator/ - /operator/index.html diff --git a/docs/victoriametrics-cloud/_index.md b/docs/victoriametrics-cloud/_index.md index 6cb7e3412e..27767c8fa4 100644 --- a/docs/victoriametrics-cloud/_index.md +++ b/docs/victoriametrics-cloud/_index.md @@ -1,7 +1,12 @@ --- title: VictoriaMetrics Cloud -weight: 01 +weight: 40 disableToc: true +menu: + docs: + weight: 40 + identifier: cloud + pageRef: /victoriametrics-cloud/ aliases: - /victoriametrics-cloud/index.html - /managed-victoriametrics/index.html From 75a29655f5e84856b4452165a10b460fad7f7cdc Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Fri, 20 Sep 2024 22:03:52 +0800 Subject: [PATCH 065/128] Automatic update operator docs from VictoriaMetrics/operator@fdd3f9f (#7065) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: tenmozes <1381404+tenmozes@users.noreply.github.com> --- docs/operator/CHANGELOG.md | 8 + docs/operator/_index.md | 2 +- docs/operator/api.md | 890 +++++++++++-------------------------- docs/operator/vars.md | 27 +- 4 files changed, 291 insertions(+), 636 deletions(-) diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index d333d3eac1..439aee76f9 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -11,6 +11,14 @@ aliases: - /operator/changelog/index.html --- +- [api](https://docs.victoriametrics.com/operator/api): adds new fields `useVMConfigReloader`, `configReloaderImageTag`, `configReloaderResources` to to the `VMagent`, `VMAlert`, `VMAuth`, and `VMAlertmanager`. +- [api](https://docs.victoriametrics.com/operator/api): adds underscore version of `host_aliases` setting, which has priority over `hostAliases`. +- [api](https://docs.victoriametrics.com/operator/api): adds `useDefaultResources` setting to the all applications. It has priority over global operator setting. +- [api](https://docs.victoriametrics.com/operator/api): adds `clusterDomainName` to the `VMCluster` and `VMAlertmanager`. It defines optional suffix for in-cluster addresses. +- [api](https://docs.victoriametrics.com/operator/api): adds `disableSelfServiceScrape` setting to the all applications. It has priority over global operator setting. +- [api](https://docs.victoriametrics.com/operator/api): Extends applications `securityContext` and apply security configuration parameters to the containers. +- [api](https://docs.victoriametrics.com/operator): deletes unused env variables: `VM_DEFAULTLABELS`, `VM_PODWAITREADYINITDELAY`. Adds new variable `VM_APPREADYTIMEOUT`. +- [vmalert](https://docs.victoriametrics.com/operator/resources/vmalert/): adds missing `hostAliases` fields to spec. See [this](https://github.com/VictoriaMetrics/operator/issues/1099) issue for details. - [operator](https://docs.victoriametrics.com/operator/): updates default vm apps version to v1.103.0 - [vmsingle/vlogs](https://docs.victoriametrics.com/operator/resources): makes better compatible with argo-cd by adding ownerReference to PersistentVolumeClaim. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1091) for details. - [operator](https://docs.victoriametrics.com/operator/): reduces reconcile latency. See this [commit](2a9d09d0131cc10a0f9e32f0e2e054687ada78f7) for details. diff --git a/docs/operator/_index.md b/docs/operator/_index.md index 45f1a6d2a3..ae040d614c 100644 --- a/docs/operator/_index.md +++ b/docs/operator/_index.md @@ -3,7 +3,7 @@ weight: 0 title: Kubernetes Operator menu: docs: - weight: 35 + weight: 30 identifier: operator pageRef: /operator/ aliases: diff --git a/docs/operator/api.md b/docs/operator/api.md index f96c5404f4..f050db77bf 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -42,7 +42,7 @@ Package v1beta1 contains API Schema definitions for the victoriametrics v1beta1 #### APIServerConfig - +_Underlying type:_ _[struct{Host string "json:\"host\""; BasicAuth *BasicAuth "json:\"basicAuth,omitempty\""; BearerToken string "json:\"bearerToken,omitempty\""; BearerTokenFile string "json:\"bearerTokenFile,omitempty\""; TLSConfig *TLSConfig "json:\"tlsConfig,omitempty\""; Authorization *Authorization "json:\"authorization,omitempty\""}](#struct{host-string-"json:\"host\"";-basicauth-*basicauth-"json:\"basicauth,omitempty\"";-bearertoken-string-"json:\"bearertoken,omitempty\"";-bearertokenfile-string-"json:\"bearertokenfile,omitempty\"";-tlsconfig-*tlsconfig-"json:\"tlsconfig,omitempty\"";-authorization-*authorization-"json:\"authorization,omitempty\""})_ APIServerConfig defines a host and auth methods to access apiserver. @@ -51,19 +51,11 @@ APIServerConfig defines a host and auth methods to access apiserver. _Appears in:_ - [VMAgentSpec](#vmagentspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `authorization` | | _[Authorization](#authorization)_ | false | -| `basicAuth` | BasicAuth allow an endpoint to authenticate over basic authentication | _[BasicAuth](#basicauth)_ | false | -| `bearerToken` | Bearer token for accessing apiserver. | _string_ | false | -| `bearerTokenFile` | File to read bearer token for accessing apiserver. | _string_ | false | -| `host` | Host of apiserver.
    A valid string consisting of a hostname or IP followed by an optional port number | _string_ | true | -| `tlsConfig` | TLSConfig Config to use for accessing apiserver. | _[TLSConfig](#tlsconfig)_ | false | #### AdditionalServiceSpec - +_Underlying type:_ _[struct{UseAsDefault bool "json:\"useAsDefault,omitempty\""; EmbeddedObjectMetadata "json:\"metadata,omitempty\""; Spec k8s.io/api/core/v1.ServiceSpec "json:\"spec\""}](#struct{useasdefault-bool-"json:\"useasdefault,omitempty\"";-embeddedobjectmetadata-"json:\"metadata,omitempty\"";-spec-k8sioapicorev1servicespec-"json:\"spec\""})_ ServiceSpec defines additional service for CRD with user-defined params. by default, some of fields can be inherited from default service definition for the CRD: @@ -79,33 +71,10 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) -- [VMStorage](#vmstorage) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `metadata` | Refer to Kubernetes API documentation for fields of `metadata`. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `spec` | ServiceSpec describes the attributes that a user creates on a service.
    More info: https://kubernetes.io/docs/concepts/services-networking/service/ | _[ServiceSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#servicespec-v1-core)_ | true | -| `useAsDefault` | UseAsDefault applies changes from given service definition to the main object Service
    Changing from headless service to clusterIP or loadbalancer may break cross-component communication | _boolean_ | false | - - -#### AlertmanagerGossipConfig -AlertmanagerGossipConfig defines Gossip TLS configuration for alertmanager - - - -_Appears in:_ -- [VMAlertmanagerSpec](#vmalertmanagerspec) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `tls_client_config` | TLSClientConfig defines client TLS configuration for alertmanager | _[TLSClientConfig](#tlsclientconfig)_ | true | -| `tls_server_config` | TLSServerConfig defines server TLS configuration for alertmanager | _[TLSServerConfig](#tlsserverconfig)_ | true | #### AlertmanagerHTTPConfig @@ -125,22 +94,6 @@ _Appears in:_ | `http2` | HTTP2 enables HTTP/2 support. Note that HTTP/2 is only supported with TLS.
    This can not be changed on the fly. | _boolean_ | true | -#### AlertmanagerWebConfig - - - -AlertmanagerWebConfig defines web server configuration for alertmanager - - - -_Appears in:_ -- [VMAlertmanagerSpec](#vmalertmanagerspec) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `basic_auth_users` | BasicAuthUsers Usernames and hashed passwords that have full access to the web server
    Passwords must be hashed with bcrypt | _object (keys:string, values:string)_ | true | -| `http_server_config` | HTTPServerConfig defines http server configuration for alertmanager web server | _[AlertmanagerHTTPConfig](#alertmanagerhttpconfig)_ | true | -| `tls_server_config` | TLSServerConfig defines server TLS configuration for alertmanager | _[TLSServerConfig](#tlsserverconfig)_ | true | #### ArbitraryFSAccessThroughSMsConfig @@ -180,7 +133,6 @@ _Appears in:_ - [KubernetesSDConfig](#kubernetessdconfig) - [PodMetricsEndpoint](#podmetricsendpoint) - [VMPodScrapeSpec](#vmpodscrapespec) -- [VMServiceScrapeSpec](#vmservicescrapespec) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -196,7 +148,6 @@ Authorization configures generic authorization params _Appears in:_ -- [APIServerConfig](#apiserverconfig) - [ConsulSDConfig](#consulsdconfig) - [DigitalOceanSDConfig](#digitaloceansdconfig) - [Endpoint](#endpoint) @@ -250,22 +201,15 @@ BasicAuth allow an endpoint to authenticate over basic authentication _Appears in:_ -- [APIServerConfig](#apiserverconfig) - [ConsulSDConfig](#consulsdconfig) - [Endpoint](#endpoint) - [EndpointAuth](#endpointauth) -- [HTTPAuth](#httpauth) - [HTTPConfig](#httpconfig) - [HTTPSDConfig](#httpsdconfig) - [KubernetesSDConfig](#kubernetessdconfig) - [PodMetricsEndpoint](#podmetricsendpoint) - [ProxyAuth](#proxyauth) - [TargetEndpoint](#targetendpoint) -- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) -- [VMAlertDatasourceSpec](#vmalertdatasourcespec) -- [VMAlertNotifierSpec](#vmalertnotifierspec) -- [VMAlertRemoteReadSpec](#vmalertremotereadspec) -- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) - [VMScrapeConfigSpec](#vmscrapeconfigspec) @@ -277,25 +221,6 @@ _Appears in:_ | `username` | Username defines reference for secret with username value
    The secret needs to be in the same namespace as scrape object | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | -#### BearerAuth - - - -BearerAuth defines auth with bearer token - - - -_Appears in:_ -- [HTTPAuth](#httpauth) -- [VMAlertDatasourceSpec](#vmalertdatasourcespec) -- [VMAlertNotifierSpec](#vmalertnotifierspec) -- [VMAlertRemoteReadSpec](#vmalertremotereadspec) -- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `bearerTokenFile` | Path to bearer token file | _string_ | false | -| `bearerTokenSecret` | Optional bearer auth token to use for -remoteWrite.url | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | @@ -338,21 +263,105 @@ _Appears in:_ | `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -#### ConfigMapKeyReference +#### CommonApplicationDeploymentParams -ConfigMapKeyReference refers to a key in a ConfigMap. +CommonApplicationDeploymentParams defines common params +for deployment and statefulset specifications _Appears in:_ +- [VLogsSpec](#vlogsspec) +- [VMAgentSpec](#vmagentspec) +- [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) +- [VMAuthSpec](#vmauthspec) +- [VMSingleSpec](#vmsinglespec) | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `key` | The ConfigMap key to refer to. | _string_ | true | -| `name` | Name of the referent.
    This field is effectively required, but due to backwards compatibility is
    allowed to be empty. Instances of this type with an empty value here are
    almost certainly wrong.
    TODO: Add other useful fields. apiVersion, kind, uid?
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
    TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. | _string_ | false | +| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | +| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | +| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | +| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | +| `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | +| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | +| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | +| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | +| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | + + +#### CommonConfigReloaderParams + + + + + + + +_Appears in:_ +- [VMAgentSpec](#vmagentspec) +- [VMAlertSpec](#vmalertspec) +- [VMAlertmanagerSpec](#vmalertmanagerspec) +- [VMAuthSpec](#vmauthspec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | + + +#### CommonDefaultableParams + + + +CommonDefaultableParams contains Application settings +with known values populated from operator configuration + + + +_Appears in:_ +- [VLogsSpec](#vlogsspec) +- [VMAgentSpec](#vmagentspec) +- [VMAlertSpec](#vmalertspec) +- [VMAlertmanagerSpec](#vmalertmanagerspec) +- [VMAuthSpec](#vmauthspec) +- [VMSingleSpec](#vmsinglespec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | +| `port` | Port listen address | _string_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | +| `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | + + #### ConsulSDConfig @@ -389,6 +398,26 @@ _Appears in:_ | `tokenRef` | Consul ACL TokenRef, if not provided it will use the ACL from the local Consul Agent. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +#### ContainerSecurityContext + + + +ContainerSecurityContext defines security context for each application container + + + +_Appears in:_ +- [SecurityContext](#securitycontext) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `allowPrivilegeEscalation` | AllowPrivilegeEscalation controls whether a process can gain more
    privileges than its parent process. This bool directly controls if
    the no_new_privs flag will be set on the container process.
    AllowPrivilegeEscalation is true always when the container is:
    1) run as Privileged
    2) has CAP_SYS_ADMIN
    Note that this field cannot be set when spec.os.name is windows. | _boolean_ | false | +| `capabilities` | The capabilities to add/drop when running containers.
    Defaults to the default set of capabilities granted by the container runtime.
    Note that this field cannot be set when spec.os.name is windows. | _[Capabilities](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#capabilities-v1-core)_ | false | +| `privileged` | Run containers in privileged mode.
    Processes in privileged containers are essentially equivalent to root on the host.
    Note that this field cannot be set when spec.os.name is windows. | _boolean_ | false | +| `procMount` | procMount denotes the type of proc mount to use for the containers.
    The default is DefaultProcMount which uses the container runtime defaults for
    readonly paths and masked paths.
    This requires the ProcMountType feature flag to be enabled.
    Note that this field cannot be set when spec.os.name is windows. | _[ProcMountType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#procmounttype-v1-core)_ | false | +| `readOnlyRootFilesystem` | Whether this containers has a read-only root filesystem.
    Default is false.
    Note that this field cannot be set when spec.os.name is windows. | _boolean_ | false | + + #### DNSSDConfig @@ -454,21 +483,6 @@ _Appears in:_ | `webhook_url_secret` | URLSecret defines secret name and key at the CRD namespace.
    It must contain the webhook URL.
    one of `urlSecret` and `url` must be defined. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | -#### DiscoverySelector - - - -DiscoverySelector can be used at CRD components discovery - - - -_Appears in:_ -- [VMAlertNotifierSpec](#vmalertnotifierspec) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `labelSelector` | | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | true | -| `namespaceSelector` | | _[NamespaceSelector](#namespaceselector)_ | true | #### EC2Filter @@ -541,30 +555,11 @@ _Appears in:_ | `to` | The email address to send notifications to. | _string_ | false | -#### EmbeddedHPA - - - -EmbeddedHPA embeds HorizontalPodAutoScaler spec v2. -https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v2/ - - - -_Appears in:_ -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `behaviour` | | _[HorizontalPodAutoscalerBehavior](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerbehavior-v2beta2-autoscaling)_ | true | -| `maxReplicas` | | _integer_ | true | -| `metrics` | | _[MetricSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#metricspec-v2beta2-autoscaling) array_ | true | -| `minReplicas` | | _integer_ | true | #### EmbeddedIngress - +_Underlying type:_ _[struct{ClassName *string "json:\"class_name,omitempty\""; EmbeddedObjectMetadata "json:\",inline\""; TlsHosts []string "json:\"tlsHosts,omitempty\""; TlsSecretName string "json:\"tlsSecretName,omitempty\""; ExtraRules []k8s.io/api/networking/v1.IngressRule "json:\"extraRules,omitempty\""; ExtraTLS []k8s.io/api/networking/v1.IngressTLS "json:\"extraTls,omitempty\""; Host string "json:\"host,omitempty\""}](#struct{classname-*string-"json:\"class_name,omitempty\"";-embeddedobjectmetadata-"json:\",inline\"";-tlshosts-[]string-"json:\"tlshosts,omitempty\"";-tlssecretname-string-"json:\"tlssecretname,omitempty\"";-extrarules-[]k8sioapinetworkingv1ingressrule-"json:\"extrarules,omitempty\"";-extratls-[]k8sioapinetworkingv1ingresstls-"json:\"extratls,omitempty\"";-host-string-"json:\"host,omitempty\""})_ EmbeddedIngress describes ingress configuration options. @@ -573,22 +568,11 @@ EmbeddedIngress describes ingress configuration options. _Appears in:_ - [VMAuthSpec](#vmauthspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `annotations` | Annotations is an unstructured key value map stored with a resource that may be
    set by external tools to store and retrieve arbitrary metadata. They are not
    queryable and should be preserved when modifying objects.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations | _object (keys:string, values:string)_ | false | -| `class_name` | ClassName defines ingress class name for VMAuth | _string_ | false | -| `extraRules` | ExtraRules - additional rules for ingress,
    must be checked for correctness by user. | _[IngressRule](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#ingressrule-v1-networking) array_ | false | -| `extraTls` | ExtraTLS - additional TLS configuration for ingress
    must be checked for correctness by user. | _[IngressTLS](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#ingresstls-v1-networking) array_ | false | -| `host` | Host defines ingress host parameter for default rule
    It will be used, only if TlsHosts is empty | _string_ | false | -| `labels` | Labels Map of string keys and values that can be used to organize and categorize
    (scope and select) objects. May match selectors of replication controllers
    and services.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels | _object (keys:string, values:string)_ | false | -| `name` | Name must be unique within a namespace. Is required when creating resources, although
    some resources may allow a client to request the generation of an appropriate name
    automatically. Name is primarily intended for creation idempotence and configuration
    definition.
    Cannot be updated.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names | _string_ | false | -| `tlsHosts` | TlsHosts configures TLS access for ingress, tlsSecretName must be defined for it. | _string array_ | true | -| `tlsSecretName` | TlsSecretName defines secretname at the VMAuth namespace with cert and key
    https://kubernetes.io/docs/concepts/services-networking/ingress/#tls | _string_ | false | #### EmbeddedObjectMetadata - +_Underlying type:_ _[struct{Name string "json:\"name,omitempty\" protobuf:\"bytes,1,opt,name=name\""; Labels map[string]string "json:\"labels,omitempty\" protobuf:\"bytes,11,rep,name=labels\""; Annotations map[string]string "json:\"annotations,omitempty\" protobuf:\"bytes,12,rep,name=annotations\""}](#struct{name-string-"json:\"name,omitempty\"-protobuf:\"bytes,1,opt,name=name\"";-labels-map[string]string-"json:\"labels,omitempty\"-protobuf:\"bytes,11,rep,name=labels\"";-annotations-map[string]string-"json:\"annotations,omitempty\"-protobuf:\"bytes,12,rep,name=annotations\""})_ EmbeddedObjectMetadata contains a subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta Only fields which are relevant to embedded resources are included. @@ -596,47 +580,21 @@ Only fields which are relevant to embedded resources are included. _Appears in:_ -- [AdditionalServiceSpec](#additionalservicespec) -- [EmbeddedIngress](#embeddedingress) - [EmbeddedPersistentVolumeClaim](#embeddedpersistentvolumeclaim) - [VLogsSpec](#vlogsspec) - [VMAgentSpec](#vmagentspec) - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) -- [VMStorage](#vmstorage) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `annotations` | Annotations is an unstructured key value map stored with a resource that may be
    set by external tools to store and retrieve arbitrary metadata. They are not
    queryable and should be preserved when modifying objects.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations | _object (keys:string, values:string)_ | false | -| `labels` | Labels Map of string keys and values that can be used to organize and categorize
    (scope and select) objects. May match selectors of replication controllers
    and services.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels | _object (keys:string, values:string)_ | false | -| `name` | Name must be unique within a namespace. Is required when creating resources, although
    some resources may allow a client to request the generation of an appropriate name
    automatically. Name is primarily intended for creation idempotence and configuration
    definition.
    Cannot be updated.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names | _string_ | false | - - -#### EmbeddedPersistentVolumeClaim -EmbeddedPersistentVolumeClaim is an embedded version of k8s.io/api/core/v1.PersistentVolumeClaim. -It contains TypeMeta and a reduced ObjectMeta. - - - -_Appears in:_ -- [StorageSpec](#storagespec) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `metadata` | Refer to Kubernetes API documentation for fields of `metadata`. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `spec` | Spec defines the desired characteristics of a volume requested by a pod author.
    More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims | _[PersistentVolumeClaimSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaimspec-v1-core)_ | false | #### EmbeddedPodDisruptionBudgetSpec - +_Underlying type:_ _[struct{MinAvailable *k8s.io/apimachinery/pkg/util/intstr.IntOrString "json:\"minAvailable,omitempty\""; MaxUnavailable *k8s.io/apimachinery/pkg/util/intstr.IntOrString "json:\"maxUnavailable,omitempty\""; SelectorLabels map[string]string "json:\"selectorLabels,omitempty\""}](#struct{minavailable-*k8sioapimachinerypkgutilintstrintorstring-"json:\"minavailable,omitempty\"";-maxunavailable-*k8sioapimachinerypkgutilintstrintorstring-"json:\"maxunavailable,omitempty\"";-selectorlabels-map[string]string-"json:\"selectorlabels,omitempty\""})_ @@ -647,20 +605,12 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) -- [VMStorage](#vmstorage) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `maxUnavailable` | An eviction is allowed if at most "maxUnavailable" pods selected by
    "selector" are unavailable after the eviction, i.e. even in absence of
    the evicted pod. For example, one can prevent all voluntary evictions
    by specifying 0. This is a mutually exclusive setting with "minAvailable". | _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#intorstring-intstr-util)_ | false | -| `minAvailable` | An eviction is allowed if at least "minAvailable" pods selected by
    "selector" will still be available after the eviction, i.e. even in the
    absence of the evicted pod. So for example you can prevent all voluntary
    evictions by specifying "100%". | _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#intorstring-intstr-util)_ | false | -| `selectorLabels` | replaces default labels selector generated by operator
    it's useful when you need to create custom budget | _object (keys:string, values:string)_ | false | #### EmbeddedProbes - +_Underlying type:_ _[struct{LivenessProbe *k8s.io/api/core/v1.Probe "json:\"livenessProbe,omitempty\""; ReadinessProbe *k8s.io/api/core/v1.Probe "json:\"readinessProbe,omitempty\""; StartupProbe *k8s.io/api/core/v1.Probe "json:\"startupProbe,omitempty\""}](#struct{livenessprobe-*k8sioapicorev1probe-"json:\"livenessprobe,omitempty\"";-readinessprobe-*k8sioapicorev1probe-"json:\"readinessprobe,omitempty\"";-startupprobe-*k8sioapicorev1probe-"json:\"startupprobe,omitempty\""})_ EmbeddedProbes - it allows to override some probe params. its not necessary to specify all options, @@ -674,56 +624,10 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) -- [VMStorage](#vmstorage) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `livenessProbe` | LivenessProbe that will be added CRD pod | _[Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#probe-v1-core)_ | false | -| `readinessProbe` | ReadinessProbe that will be added CRD pod | _[Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#probe-v1-core)_ | false | -| `startupProbe` | StartupProbe that will be added to CRD pod | _[Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#probe-v1-core)_ | false | - - -#### Endpoint -Endpoint defines a scrapeable endpoint serving metrics. - - - -_Appears in:_ -- [VMServiceScrapeSpec](#vmservicescrapespec) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `attach_metadata` | AttachMetadata configures metadata attaching from service discovery | _[AttachMetadata](#attachmetadata)_ | false | -| `authorization` | Authorization with http header Authorization | _[Authorization](#authorization)_ | false | -| `basicAuth` | BasicAuth allow an endpoint to authenticate over basic authentication | _[BasicAuth](#basicauth)_ | false | -| `bearerTokenFile` | File to read bearer token for scraping targets. | _string_ | false | -| `bearerTokenSecret` | Secret to mount to read bearer token for scraping targets. The secret
    needs to be in the same namespace as the scrape object and accessible by
    the victoria-metrics operator. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | -| `follow_redirects` | FollowRedirects controls redirects for scraping. | _boolean_ | false | -| `honorLabels` | HonorLabels chooses the metric's labels on collisions with target labels. | _boolean_ | false | -| `honorTimestamps` | HonorTimestamps controls whether vmagent respects the timestamps present in scraped data. | _boolean_ | false | -| `interval` | Interval at which metrics should be scraped | _string_ | false | -| `max_scrape_size` | MaxScrapeSize defines a maximum size of scraped data for a job | _string_ | false | -| `metricRelabelConfigs` | MetricRelabelConfigs to apply to samples after scrapping. | _[RelabelConfig](#relabelconfig) array_ | false | -| `oauth2` | OAuth2 defines auth configuration | _[OAuth2](#oauth2)_ | false | -| `params` | Optional HTTP URL parameters | _object (keys:string, values:string array)_ | false | -| `path` | HTTP path to scrape for metrics. | _string_ | false | -| `port` | Name of the port exposed at Service. | _string_ | false | -| `proxyURL` | ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. | _string_ | false | -| `relabelConfigs` | RelabelConfigs to apply to samples during service discovery. | _[RelabelConfig](#relabelconfig) array_ | false | -| `sampleLimit` | SampleLimit defines per-scrape limit on number of scraped samples that will be accepted. | _integer_ | false | -| `scheme` | HTTP scheme to use for scraping. | _string_ | false | -| `scrapeTimeout` | Timeout after which the scrape is ended | _string_ | false | -| `scrape_interval` | ScrapeInterval is the same as Interval and has priority over it.
    one of scrape_interval or interval can be used | _string_ | false | -| `seriesLimit` | SeriesLimit defines per-scrape limit on number of unique time series
    a single target can expose during all the scrapes on the time window of 24h. | _integer_ | false | -| `targetPort` | TargetPort
    Name or number of the pod port this endpoint refers to. Mutually exclusive with port. | _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#intorstring-intstr-util)_ | false | -| `tlsConfig` | TLSConfig configuration to use when scraping the endpoint | _[TLSConfig](#tlsconfig)_ | false | -| `vm_scrape_params` | VMScrapeParams defines VictoriaMetrics specific scrape parameters | _[VMScrapeParams](#vmscrapeparams)_ | false | #### EndpointAuth @@ -854,7 +758,7 @@ _Appears in:_ #### HTTPAuth - +_Underlying type:_ _[struct{BasicAuth *BasicAuth "json:\"basicAuth,omitempty\""; OAuth2 *OAuth2 "json:\"oauth2,omitempty\""; TLSConfig *TLSConfig "json:\"tlsConfig,omitempty\""; *BearerAuth "json:\",inline,omitempty\""; Headers []string "json:\"headers,omitempty\""}](#struct{basicauth-*basicauth-"json:\"basicauth,omitempty\"";-oauth2-*oauth2-"json:\"oauth2,omitempty\"";-tlsconfig-*tlsconfig-"json:\"tlsconfig,omitempty\"";-*bearerauth-"json:\",inline,omitempty\"";-headers-[]string-"json:\"headers,omitempty\""})_ HTTPAuth generic auth used with http protocols @@ -862,16 +766,7 @@ HTTPAuth generic auth used with http protocols _Appears in:_ - [VMAlertDatasourceSpec](#vmalertdatasourcespec) -- [VMAlertNotifierSpec](#vmalertnotifierspec) -- [VMAlertRemoteReadSpec](#vmalertremotereadspec) -- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | -| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | -| `oauth2` | | _[OAuth2](#oauth2)_ | false | -| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | #### HTTPConfig @@ -932,29 +827,22 @@ _Appears in:_ #### Image - +_Underlying type:_ _[struct{Repository string "json:\"repository,omitempty\""; Tag string "json:\"tag,omitempty\""; PullPolicy k8s.io/api/core/v1.PullPolicy "json:\"pullPolicy,omitempty\""}](#struct{repository-string-"json:\"repository,omitempty\"";-tag-string-"json:\"tag,omitempty\"";-pullpolicy-k8sioapicorev1pullpolicy-"json:\"pullpolicy,omitempty\""})_ Image defines docker image settings _Appears in:_ +- [CommonDefaultableParams](#commondefaultableparams) - [VLogsSpec](#vlogsspec) - [VMAgentSpec](#vmagentspec) - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) - [VMBackup](#vmbackup) -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) -- [VMStorage](#vmstorage) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `pullPolicy` | PullPolicy describes how to pull docker image | _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | true | -| `repository` | Repository contains name of docker image + it's repository if needed | _string_ | true | -| `tag` | Tag contains desired docker image version | _string_ | true | #### ImageConfig @@ -1000,7 +888,7 @@ _Appears in:_ #### InsertPorts - +_Underlying type:_ _[struct{GraphitePort string "json:\"graphitePort,omitempty\""; InfluxPort string "json:\"influxPort,omitempty\""; OpenTSDBHTTPPort string "json:\"openTSDBHTTPPort,omitempty\""; OpenTSDBPort string "json:\"openTSDBPort,omitempty\""}](#struct{graphiteport-string-"json:\"graphiteport,omitempty\"";-influxport-string-"json:\"influxport,omitempty\"";-opentsdbhttpport-string-"json:\"opentsdbhttpport,omitempty\"";-opentsdbport-string-"json:\"opentsdbport,omitempty\""})_ @@ -1008,15 +896,8 @@ _Appears in:_ _Appears in:_ - [VMAgentSpec](#vmagentspec) -- [VMInsert](#vminsert) - [VMSingleSpec](#vmsinglespec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `graphitePort` | GraphitePort listen port | _string_ | false | -| `influxPort` | InfluxPort listen port | _string_ | false | -| `openTSDBHTTPPort` | OpenTSDBHTTPPort for http connections. | _string_ | false | -| `openTSDBPort` | OpenTSDBPort for tcp and udp listen | _string_ | false | #### K8SSelectorConfig @@ -1069,7 +950,7 @@ _Appears in:_ #### License - +_Underlying type:_ _[struct{Key *string "json:\"key,omitempty\""; KeyRef *k8s.io/api/core/v1.SecretKeySelector "json:\"keyRef,omitempty\""}](#struct{key-*string-"json:\"key,omitempty\"";-keyref-*k8sioapicorev1secretkeyselector-"json:\"keyref,omitempty\""})_ License holds license key for enterprise features. Using license key is supported starting from VictoriaMetrics v1.94.0. @@ -1084,10 +965,6 @@ _Appears in:_ - [VMClusterSpec](#vmclusterspec) - [VMSingleSpec](#vmsinglespec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `key` | Enterprise license key. This flag is available only in [VictoriaMetrics enterprise](https://docs.victoriametrics.com/enterprise).
    To request a trial license, [go to](https://victoriametrics.com/products/enterprise/trial) | _string_ | true | -| `keyRef` | KeyRef is reference to secret with license key for enterprise features. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | #### LinkConfig @@ -1161,7 +1038,6 @@ _Appears in:_ - [DiscoverySelector](#discoveryselector) - [ProbeTargetIngress](#probetargetingress) - [VMPodScrapeSpec](#vmpodscrapespec) -- [VMServiceScrapeSpec](#vmservicescrapespec) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -1182,16 +1058,10 @@ _Appears in:_ - [DigitalOceanSDConfig](#digitaloceansdconfig) - [Endpoint](#endpoint) - [EndpointAuth](#endpointauth) -- [HTTPAuth](#httpauth) - [HTTPConfig](#httpconfig) - [KubernetesSDConfig](#kubernetessdconfig) - [PodMetricsEndpoint](#podmetricsendpoint) - [TargetEndpoint](#targetendpoint) -- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) -- [VMAlertDatasourceSpec](#vmalertdatasourcespec) -- [VMAlertNotifierSpec](#vmalertnotifierspec) -- [VMAlertRemoteReadSpec](#vmalertremotereadspec) -- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) - [VMScrapeConfigSpec](#vmscrapeconfigspec) @@ -1479,7 +1349,6 @@ _Appears in:_ - [ProbeTargetIngress](#probetargetingress) - [StreamAggrRule](#streamaggrrule) - [TargetEndpoint](#targetendpoint) -- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) - [VMAgentSpec](#vmagentspec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) @@ -1604,6 +1473,8 @@ _Appears in:_ + + #### Sigv4Config @@ -1792,7 +1663,7 @@ _Appears in:_ #### StorageSpec - +_Underlying type:_ _[struct{DisableMountSubPath bool "json:\"disableMountSubPath,omitempty\""; EmptyDir *k8s.io/api/core/v1.EmptyDirVolumeSource "json:\"emptyDir,omitempty\""; VolumeClaimTemplate EmbeddedPersistentVolumeClaim "json:\"volumeClaimTemplate,omitempty\""}](#struct{disablemountsubpath-bool-"json:\"disablemountsubpath,omitempty\"";-emptydir-*k8sioapicorev1emptydirvolumesource-"json:\"emptydir,omitempty\"";-volumeclaimtemplate-embeddedpersistentvolumeclaim-"json:\"volumeclaimtemplate,omitempty\""})_ StorageSpec defines the configured storage for a group Prometheus servers. If neither `emptyDir` nor `volumeClaimTemplate` is specified, then by default an [EmptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) will be used. @@ -1802,69 +1673,23 @@ If neither `emptyDir` nor `volumeClaimTemplate` is specified, then by default an _Appears in:_ - [VMAgentSpec](#vmagentspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) -- [VMSelect](#vmselect) -- [VMStorage](#vmstorage) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `disableMountSubPath` | Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary.
    DisableMountSubPath allows to remove any subPath usage in volume mounts. | _boolean_ | false | -| `emptyDir` | EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More
    info: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir | _[EmptyDirVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#emptydirvolumesource-v1-core)_ | false | -| `volumeClaimTemplate` | A PVC spec to be used by the VMAlertManager StatefulSets. | _[EmbeddedPersistentVolumeClaim](#embeddedpersistentvolumeclaim)_ | false | #### StreamAggrConfig - +_Underlying type:_ _[struct{Rules []StreamAggrRule "json:\"rules\""; RuleConfigMap *k8s.io/api/core/v1.ConfigMapKeySelector "json:\"configmap,omitempty\""; KeepInput bool "json:\"keepInput,omitempty\""; DropInput bool "json:\"dropInput,omitempty\""; DedupInterval string "json:\"dedupInterval,omitempty\""; DropInputLabels []string "json:\"dropInputLabels,omitempty\""; IgnoreFirstIntervals int "json:\"ignoreFirstIntervals,omitempty\""; IgnoreOldSamples bool "json:\"ignoreOldSamples,omitempty\""}](#struct{rules-[]streamaggrrule-"json:\"rules\"";-ruleconfigmap-*k8sioapicorev1configmapkeyselector-"json:\"configmap,omitempty\"";-keepinput-bool-"json:\"keepinput,omitempty\"";-dropinput-bool-"json:\"dropinput,omitempty\"";-dedupinterval-string-"json:\"dedupinterval,omitempty\"";-dropinputlabels-[]string-"json:\"dropinputlabels,omitempty\"";-ignorefirstintervals-int-"json:\"ignorefirstintervals,omitempty\"";-ignoreoldsamples-bool-"json:\"ignoreoldsamples,omitempty\""})_ StreamAggrConfig defines the stream aggregation config _Appears in:_ -- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) - [VMAgentSpec](#vmagentspec) - [VMSingleSpec](#vmsinglespec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `configmap` | ConfigMap with stream aggregation rules | _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#configmapkeyselector-v1-core)_ | false | -| `dedupInterval` | Allows setting different de-duplication intervals per each configured remote storage | _string_ | false | -| `dropInput` | Allow drop all the input samples after the aggregation | _boolean_ | false | -| `dropInputLabels` | labels to drop from samples for aggregator before stream de-duplication and aggregation | _string array_ | false | -| `ignoreFirstIntervals` | | _integer_ | true | -| `ignoreOldSamples` | IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. | _boolean_ | false | -| `keepInput` | Allows writing both raw and aggregate data | _boolean_ | false | -| `rules` | Stream aggregation rules | _[StreamAggrRule](#streamaggrrule) array_ | false | -#### StreamAggrRule - - - -StreamAggrRule defines the rule in stream aggregation config - - - -_Appears in:_ -- [StreamAggrConfig](#streamaggrconfig) - -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `by` | By is an optional list of labels for grouping input series.

    See also Without.

    If neither By nor Without are set, then the Outputs are calculated
    individually per each input time series. | _string array_ | false | -| `dedup_interval` | DedupInterval is an optional interval for deduplication. | _string_ | false | -| `drop_input_labels` | DropInputLabels is an optional list with labels, which must be dropped before further processing of input samples.

    Labels are dropped before de-duplication and aggregation. | _string_ | false | -| `flush_on_shutdown` | FlushOnShutdown defines whether to flush the aggregation state on process termination
    or config reload. Is `false` by default.
    It is not recommended changing this setting, unless unfinished aggregations states
    are preferred to missing data points. | _boolean_ | false | -| `ignore_first_intervals` | | _integer_ | true | -| `ignore_old_samples` | IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. | _boolean_ | false | -| `input_relabel_configs` | InputRelabelConfigs is an optional relabeling rules, which are applied on the input
    before aggregation. | _[RelabelConfig](#relabelconfig) array_ | false | -| `interval` | Interval is the interval between aggregations. | _string_ | true | -| `keep_metric_names` | KeepMetricNames instructs to leave metric names as is for the output time series without adding any suffix. | _boolean_ | false | -| `match` | Match is a label selector (or list of label selectors) for filtering time series for the given selector.

    If the match isn't set, then all the input time series are processed. | _[StringOrArray](#stringorarray)_ | false | -| `no_align_flush_to_interval` | NoAlignFlushToInterval disables aligning of flushes to multiples of Interval.
    By default flushes are aligned to Interval. | _boolean_ | false | -| `output_relabel_configs` | OutputRelabelConfigs is an optional relabeling rules, which are applied
    on the aggregated output before being sent to remote storage. | _[RelabelConfig](#relabelconfig) array_ | false | -| `outputs` | Outputs is a list of output aggregate functions to produce.

    The following names are allowed:

    - total - aggregates input counters
    - increase - counts the increase over input counters
    - count_series - counts the input series
    - count_samples - counts the input samples
    - sum_samples - sums the input samples
    - last - the last biggest sample value
    - min - the minimum sample value
    - max - the maximum sample value
    - avg - the average value across all the samples
    - stddev - standard deviation across all the samples
    - stdvar - standard variance across all the samples
    - histogram_bucket - creates VictoriaMetrics histogram for input samples
    - quantiles(phi1, ..., phiN) - quantiles' estimation for phi in the range [0..1]

    The output time series will have the following names:

    input_name:aggr__ | _string array_ | true | -| `staleness_interval` | Staleness interval is interval after which the series state will be reset if no samples have been sent during it.
    The parameter is only relevant for outputs: total, total_prometheus, increase, increase_prometheus and histogram_bucket. | _string_ | false | -| `without` | Without is an optional list of labels, which must be excluded when grouping input series.

    See also By.

    If neither By nor Without are set, then the Outputs are calculated
    individually per each input time series. | _string array_ | false | #### StringOrArray @@ -1915,13 +1740,11 @@ TLSConfig specifies TLSConfig configuration parameters. _Appears in:_ -- [APIServerConfig](#apiserverconfig) - [ConsulSDConfig](#consulsdconfig) - [DigitalOceanSDConfig](#digitaloceansdconfig) - [EmailConfig](#emailconfig) - [Endpoint](#endpoint) - [EndpointAuth](#endpointauth) -- [HTTPAuth](#httpauth) - [HTTPConfig](#httpconfig) - [HTTPSDConfig](#httpsdconfig) - [KubernetesSDConfig](#kubernetessdconfig) @@ -1930,11 +1753,6 @@ _Appears in:_ - [ProxyAuth](#proxyauth) - [TargetEndpoint](#targetendpoint) - [UserConfigOption](#userconfigoption) -- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) -- [VMAlertDatasourceSpec](#vmalertdatasourcespec) -- [VMAlertNotifierSpec](#vmalertnotifierspec) -- [VMAlertRemoteReadSpec](#vmalertremotereadspec) -- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - [VMAuthSpec](#vmauthspec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) @@ -2153,7 +1971,6 @@ URLMapCommon contains common fields for unauthorized user and user in vmuser _Appears in:_ - [TargetRef](#targetref) -- [UnauthorizedAccessConfigURLMap](#unauthorizedaccessconfigurlmap) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -2169,7 +1986,7 @@ _Appears in:_ #### UnauthorizedAccessConfigURLMap - +_Underlying type:_ _[struct{SrcPaths []string "json:\"src_paths,omitempty\""; SrcHosts []string "json:\"src_hosts,omitempty\""; URLPrefix []string "json:\"url_prefix,omitempty\""; URLMapCommon "json:\",omitempty\""}](#struct{srcpaths-[]string-"json:\"src_paths,omitempty\"";-srchosts-[]string-"json:\"src_hosts,omitempty\"";-urlprefix-[]string-"json:\"url_prefix,omitempty\"";-urlmapcommon-"json:\",omitempty\""})_ @@ -2178,12 +1995,6 @@ _Appears in:_ _Appears in:_ - [VMAuthSpec](#vmauthspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `URLMapCommon` | | _[URLMapCommon](#urlmapcommon)_ | true | -| `src_hosts` | SrcHosts is an optional list of regular expressions, which must match the request hostname. | _string array_ | true | -| `src_paths` | SrcPaths is an optional list of regular expressions, which must match the request path. | _string array_ | true | -| `url_prefix` | UrlPrefix contains backend url prefixes for the proxied request url. | _string array_ | true | #### UpdateStatus @@ -2262,49 +2073,53 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VLogs
    object, which shall be mounted into the VLogs Pods. | _string array_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | -| `extraArgs` | ExtraArgs that will be passed to VLogs pod
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VLogs pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | | `futureRetention` | FutureRetention for the stored logs
    Log entries with timestamps bigger than now+futureRetention are rejected during data ingestion; see https://docs.victoriametrics.com/victorialogs/#retention | _string_ | true | | `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `image` | Image - docker image settings for VLogs
    if no specified operator uses default config version | _[Image](#image)_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the VLogs configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `logFormat` | LogFormat for VLogs to be configured with. | _string_ | false | | `logIngestedRows` | Whether to log all the ingested log entries; this can be useful for debugging of data ingestion; see https://docs.victoriametrics.com/victorialogs/data-ingestion/ | _boolean_ | true | | `logLevel` | LogLevel for VictoriaLogs to be configured with. | _string_ | false | | `logNewStreams` | LogNewStreams Whether to log creation of new streams; this can be useful for debugging of high cardinality issues with log streams; see https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields | _boolean_ | true | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | | `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | | `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | | `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VLogs pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `port` | Port listen port | _string_ | false | -| `priorityClassName` | PriorityClassName assigned to the Pods | _string_ | false | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | | `removePvcAfterDelete` | RemovePvcAfterDelete - if true, controller adds ownership to pvc
    and after VLogs object deletion - pvc will be garbage collected
    by controller manager | _boolean_ | false | -| `replicaCount` | ReplicaCount is the expected size of the VLogs
    it can be 0 or 1
    if you need more - use vm cluster | _integer_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | | `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `retentionPeriod` | RetentionPeriod for the stored logs | _string_ | true | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | | `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VLogs
    object, which shall be mounted into the VLogs Pods. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the
    VLogs Pods. | _string_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vlogs VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vlogs service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `storage` | Storage is the definition of how storage will be used by the VLogs
    by default it`s empty dir | _[PersistentVolumeClaimSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaimspec-v1-core)_ | false | | `storageDataPath` | StorageDataPath disables spec.storage option and overrides arg for victoria-logs binary --storageDataPath,
    its users responsibility to mount proper device into given path. | _string_ | false | | `storageMetadata` | StorageMeta defines annotations and labels attached to PVC for given vlogs CR | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VLogs container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output deploy definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -2330,7 +2145,7 @@ or any other Prometheus-compatible storage system that supports the remote_write #### VMAgentRemoteWriteSettings - +_Underlying type:_ _[struct{MaxBlockSize *int32 "json:\"maxBlockSize,omitempty\""; MaxDiskUsagePerURL *int64 "json:\"maxDiskUsagePerURL,omitempty\""; Queues *int32 "json:\"queues,omitempty\""; ShowURL *bool "json:\"showURL,omitempty\""; TmpDataPath *string "json:\"tmpDataPath,omitempty\""; FlushInterval *string "json:\"flushInterval,omitempty\""; Labels map[string]string "json:\"label,omitempty\""; UseMultiTenantMode bool "json:\"useMultiTenantMode,omitempty\""}](#struct{maxblocksize-*int32-"json:\"maxblocksize,omitempty\"";-maxdiskusageperurl-*int64-"json:\"maxdiskusageperurl,omitempty\"";-queues-*int32-"json:\"queues,omitempty\"";-showurl-*bool-"json:\"showurl,omitempty\"";-tmpdatapath-*string-"json:\"tmpdatapath,omitempty\"";-flushinterval-*string-"json:\"flushinterval,omitempty\"";-labels-map[string]string-"json:\"label,omitempty\"";-usemultitenantmode-bool-"json:\"usemultitenantmode,omitempty\""})_ VMAgentRemoteWriteSettings - defines global settings for all remoteWrite urls. @@ -2339,21 +2154,11 @@ VMAgentRemoteWriteSettings - defines global settings for all remoteWrite urls. _Appears in:_ - [VMAgentSpec](#vmagentspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `flushInterval` | Interval for flushing the data to remote storage. (default 1s) | _string_ | false | -| `label` | Labels in the form 'name=value' to add to all the metrics before sending them. This overrides the label if it already exists. | _object (keys:string, values:string)_ | false | -| `maxBlockSize` | The maximum size in bytes of unpacked request to send to remote storage | _integer_ | false | -| `maxDiskUsagePerURL` | The maximum file-based buffer size in bytes at -remoteWrite.tmpDataPath | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | -| `queues` | The number of concurrent queues | _integer_ | false | -| `showURL` | Whether to show -remoteWrite.url in the exported metrics. It is hidden by default, since it can contain sensitive auth info | _boolean_ | false | -| `tmpDataPath` | Path to directory where temporary data for remote write component is stored (default vmagent-remotewrite-data) | _string_ | false | -| `useMultiTenantMode` | Configures vmagent accepting data via the same multitenant endpoints as vminsert at VictoriaMetrics cluster does,
    see [here](https://docs.victoriametrics.com/vmagent/#multitenancy).
    it's global setting and affects all remote storage configurations | _boolean_ | false | #### VMAgentRemoteWriteSpec - +_Underlying type:_ _[struct{URL string "json:\"url\""; BasicAuth *BasicAuth "json:\"basicAuth,omitempty\""; BearerTokenSecret *k8s.io/api/core/v1.SecretKeySelector "json:\"bearerTokenSecret,omitempty\""; UrlRelabelConfig *k8s.io/api/core/v1.ConfigMapKeySelector "json:\"urlRelabelConfig,omitempty\""; InlineUrlRelabelConfig []RelabelConfig "json:\"inlineUrlRelabelConfig,omitempty\""; OAuth2 *OAuth2 "json:\"oauth2,omitempty\""; TLSConfig *TLSConfig "json:\"tlsConfig,omitempty\""; SendTimeout *string "json:\"sendTimeout,omitempty\""; Headers []string "json:\"headers,omitempty\""; StreamAggrConfig *StreamAggrConfig "json:\"streamAggrConfig,omitempty\""}](#struct{url-string-"json:\"url\"";-basicauth-*basicauth-"json:\"basicauth,omitempty\"";-bearertokensecret-*k8sioapicorev1secretkeyselector-"json:\"bearertokensecret,omitempty\"";-urlrelabelconfig-*k8sioapicorev1configmapkeyselector-"json:\"urlrelabelconfig,omitempty\"";-inlineurlrelabelconfig-[]relabelconfig-"json:\"inlineurlrelabelconfig,omitempty\"";-oauth2-*oauth2-"json:\"oauth2,omitempty\"";-tlsconfig-*tlsconfig-"json:\"tlsconfig,omitempty\"";-sendtimeout-*string-"json:\"sendtimeout,omitempty\"";-headers-[]string-"json:\"headers,omitempty\"";-streamaggrconfig-*streamaggrconfig-"json:\"streamaggrconfig,omitempty\""})_ VMAgentRemoteWriteSpec defines the remote storage configuration for VmAgent @@ -2362,18 +2167,6 @@ VMAgentRemoteWriteSpec defines the remote storage configuration for VmAgent _Appears in:_ - [VMAgentSpec](#vmagentspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `basicAuth` | BasicAuth allow an endpoint to authenticate over basic authentication | _[BasicAuth](#basicauth)_ | false | -| `bearerTokenSecret` | Optional bearer auth token to use for -remoteWrite.url | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | -| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName: headerValue
    vmagent supports since 1.79.0 version | _string array_ | false | -| `inlineUrlRelabelConfig` | InlineUrlRelabelConfig defines relabeling config for remoteWriteURL, it can be defined at crd spec. | _[RelabelConfig](#relabelconfig) array_ | false | -| `oauth2` | OAuth2 defines auth configuration | _[OAuth2](#oauth2)_ | false | -| `sendTimeout` | Timeout for sending a single block of data to -remoteWrite.url (default 1m0s) | _string_ | false | -| `streamAggrConfig` | StreamAggrConfig defines stream aggregation configuration for VMAgent for -remoteWrite.url | _[StreamAggrConfig](#streamaggrconfig)_ | false | -| `tlsConfig` | TLSConfig describes tls configuration for remote write target | _[TLSConfig](#tlsconfig)_ | false | -| `url` | URL of the endpoint to send samples to. | _string_ | true | -| `urlRelabelConfig` | ConfigMap with relabeling config which is applied to metrics before sending them to the corresponding -remoteWrite.url | _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#configmapkeyselector-v1-core)_ | false | #### VMAgentSecurityEnforcements @@ -2414,22 +2207,26 @@ _Appears in:_ | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | | `arbitraryFSAccessThroughSMs` | ArbitraryFSAccessThroughSMs configures whether configuration
    based on EndpointAuth can access arbitrary files on the file system
    of the VMAgent container e.g. bearer token files, basic auth, tls certs | _[ArbitraryFSAccessThroughSMsConfig](#arbitraryfsaccessthroughsmsconfig)_ | false | | `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for VMAgent in StatefulMode | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the vmagent
    object, which shall be mounted into the vmagent Pods.
    will be mounted at path /etc/vm/configs | _string array_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | -| `dnsPolicy` | DNSPolicy set DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | +| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `enforcedNamespaceLabel` | EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert
    and metric that is user created. The label value will always be the namespace of the object that is
    being created. | _string_ | false | | `externalLabels` | ExternalLabels The labels to add to any time series scraped by vmagent.
    it doesn't affect metrics ingested directly by push API's | _object (keys:string, values:string)_ | false | -| `extraArgs` | ExtraArgs that will be passed to VMAgent pod
    for example remoteWrite.tmpDataPath: /tmp
    it would be converted to flag --remoteWrite.tmpDataPath=/tmp | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMAgent pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `host_aliases` | HostAliases provides mapping between ip and hostnames,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `ignoreNamespaceSelectors` | IgnoreNamespaceSelectors if set to true will ignore NamespaceSelector settings from
    scrape objects, and they will only discover endpoints
    within their current namespace. Defaults to false. | _boolean_ | false | -| `image` | Image - docker image settings for VMAgent
    if no specified operator uses default config version | _[Image](#image)_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | | `ingestOnlyMode` | IngestOnlyMode switches vmagent into unmanaged mode
    it disables any config generation for scraping
    Currently it prevents vmagent from managing tls and auth options for remote write | _boolean_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the vmagent configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `inlineRelabelConfig` | InlineRelabelConfig - defines GlobalRelabelConfig for vmagent, can be defined directly at CRD. | _[RelabelConfig](#relabelconfig) array_ | false | | `inlineScrapeConfig` | InlineScrapeConfig As scrape configs are appended, the user is responsible to make sure it
    is valid. Note that using this feature may expose the possibility to
    break upgrades of VMAgent. It is advised to review VMAgent release
    notes to ensure that no incompatible scrape configs are going to break
    VMAgent after the upgrade.
    it should be defined as single yaml file.
    inlineScrapeConfig: \|
    - job_name: "prometheus"
    static_configs:
    - targets: ["localhost:9090"] | _string_ | false | | `insertPorts` | InsertPorts - additional listen ports for data ingestion. | _[InsertPorts](#insertports)_ | true | @@ -2437,7 +2234,7 @@ _Appears in:_ | `logFormat` | LogFormat for VMAgent to be configured with. | _string_ | false | | `logLevel` | LogLevel for VMAgent to be configured with.
    INFO, WARN, ERROR, FATAL, PANIC | _string_ | false | | `maxScrapeInterval` | MaxScrapeInterval allows limiting maximum scrape interval for VMServiceScrape, VMPodScrape and other scrapes
    If interval is higher than defined limit, `maxScrapeInterval` will be used. | _string_ | true | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | | `minScrapeInterval` | MinScrapeInterval allows limiting minimal scrape interval for VMServiceScrape, VMPodScrape and other scrapes
    If interval is lower than defined limit, `minScrapeInterval` will be used. | _string_ | true | | `nodeScrapeNamespaceSelector` | NodeScrapeNamespaceSelector defines Namespaces to be selected for VMNodeScrape discovery.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `nodeScrapeRelabelTemplate` | NodeScrapeRelabelTemplate defines relabel config, that will be added to each VMNodeScrape.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | @@ -2452,7 +2249,7 @@ _Appears in:_ | `podScrapeRelabelTemplate` | PodScrapeRelabelTemplate defines relabel config, that will be added to each VMPodScrape.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | | `podScrapeSelector` | PodScrapeSelector defines PodScrapes to be selected for target discovery.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `port` | Port listen address | _string_ | false | -| `priorityClassName` | PriorityClassName assigned to the Pods | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | | `probeNamespaceSelector` | ProbeNamespaceSelector defines Namespaces to be selected for VMProbe discovery.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `probeScrapeRelabelTemplate` | ProbeScrapeRelabelTemplate defines relabel config, that will be added to each VMProbeScrape.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | | `probeSelector` | ProbeSelector defines VMProbe to be selected for target probing.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | @@ -2460,21 +2257,21 @@ _Appears in:_ | `relabelConfig` | RelabelConfig ConfigMap with global relabel config -remoteWrite.relabelConfig
    This relabeling is applied to all the collected metrics before sending them to remote storage. | _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#configmapkeyselector-v1-core)_ | false | | `remoteWrite` | RemoteWrite list of victoria metrics /some other remote write system
    for vm it must looks like: http://victoria-metrics-single:8429/api/v1/write
    or for cluster different url
    https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vmagent#splitting-data-streams-among-multiple-systems | _[VMAgentRemoteWriteSpec](#vmagentremotewritespec) array_ | true | | `remoteWriteSettings` | RemoteWriteSettings defines global settings for all remoteWrite urls. | _[VMAgentRemoteWriteSettings](#vmagentremotewritesettings)_ | false | -| `replicaCount` | ReplicaCount is the expected size of the VMAgent cluster. The controller will
    eventually make the size of the running cluster equal to the expected
    size.
    NOTE enable VMSingle deduplication for replica usage | _integer_ | false | -| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not specified - default setting will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | | `rollingUpdate` | RollingUpdate - overrides deployment update params. | _[RollingUpdateDeployment](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#rollingupdatedeployment-v1-apps)_ | false | -| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | true | +| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | | `scrapeConfigNamespaceSelector` | ScrapeConfigNamespaceSelector defines Namespaces to be selected for VMScrapeConfig discovery.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `scrapeConfigRelabelTemplate` | ScrapeConfigRelabelTemplate defines relabel config, that will be added to each VMScrapeConfig.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | | `scrapeConfigSelector` | ScrapeConfigSelector defines VMScrapeConfig to be selected for target discovery.
    Works in combination with NamespaceSelector. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `scrapeInterval` | ScrapeInterval defines how often scrape targets by default | _string_ | false | | `scrapeTimeout` | ScrapeTimeout defines global timeout for targets scrape | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the vmagent
    object, which shall be mounted into the vmagent Pods.
    will be mounted at path /etc/vm/secrets | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | | `selectAllByDefault` | SelectAllByDefault changes default behavior for empty CRD selectors, such ServiceScrapeSelector.
    with selectAllByDefault: true and empty serviceScrapeSelector and ServiceScrapeNamespaceSelector
    Operator selects all exist serviceScrapes
    with selectAllByDefault: false - selects nothing | _boolean_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the
    VMAgent Pods. | _string_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeNamespaceSelector` | ServiceScrapeNamespaceSelector Namespaces to be selected for VMServiceScrape discovery.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `serviceScrapeRelabelTemplate` | ServiceScrapeRelabelTemplate defines relabel config, that will be added to each VMServiceScrape.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | | `serviceScrapeSelector` | ServiceScrapeSelector defines ServiceScrapes to be selected for target discovery.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | @@ -2488,14 +2285,16 @@ _Appears in:_ | `staticScrapeRelabelTemplate` | StaticScrapeRelabelTemplate defines relabel config, that will be added to each VMStaticScrape.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | | `staticScrapeSelector` | StaticScrapeSelector defines PodScrapes to be selected for target discovery.
    Works in combination with NamespaceSelector.
    If both nil - match everything.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `streamAggrConfig` | StreamAggrConfig defines global stream aggregation configuration for VMAgent | _[StreamAggrConfig](#streamaggrconfig)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `updateStrategy` | UpdateStrategy - overrides default update strategy.
    works only for deployments, statefulset always use OnDelete. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | | `vmAgentExternalLabelName` | VMAgentExternalLabelName Name of vmAgent external label used to denote vmAgent instance
    name. Defaults to the value of `prometheus`. External label will
    _not_ be added when value is set to empty string (`""`). | _string_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output deploy definition.
    VolumeMounts specified will be appended to other VolumeMounts in the vmagent container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output deploy definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -2531,16 +2330,12 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | -| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | -| `oauth2` | | _[OAuth2](#oauth2)_ | false | -| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | | `url` | Victoria Metrics or VMSelect url. Required parameter. E.g. http://127.0.0.1:8428 | _string_ | true | #### VMAlertNotifierSpec - +_Underlying type:_ _[struct{URL string "json:\"url,omitempty\""; Selector *DiscoverySelector "json:\"selector,omitempty\""; HTTPAuth "json:\",inline,omitempty\""}](#struct{url-string-"json:\"url,omitempty\"";-selector-*discoveryselector-"json:\"selector,omitempty\"";-httpauth-"json:\",inline,omitempty\""})_ VMAlertNotifierSpec defines the notifier url for sending information about alerts @@ -2549,19 +2344,11 @@ VMAlertNotifierSpec defines the notifier url for sending information about alert _Appears in:_ - [VMAlertSpec](#vmalertspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | -| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | -| `oauth2` | | _[OAuth2](#oauth2)_ | false | -| `selector` | Selector allows service discovery for alertmanager
    in this case all matched vmalertmanager replicas will be added into vmalert notifier.url
    as statefulset pod.fqdn | _[DiscoverySelector](#discoveryselector)_ | false | -| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | -| `url` | AlertManager url. E.g. http://127.0.0.1:9093 | _string_ | false | #### VMAlertRemoteReadSpec - +_Underlying type:_ _[struct{URL string "json:\"url\""; Lookback *string "json:\"lookback,omitempty\""; HTTPAuth "json:\",inline,omitempty\""}](#struct{url-string-"json:\"url\"";-lookback-*string-"json:\"lookback,omitempty\"";-httpauth-"json:\",inline,omitempty\""})_ VMAlertRemoteReadSpec defines the remote storage configuration for VmAlert to read alerts from @@ -2570,19 +2357,11 @@ VMAlertRemoteReadSpec defines the remote storage configuration for VmAlert to re _Appears in:_ - [VMAlertSpec](#vmalertspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | -| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | -| `lookback` | Lookback defines how far to look into past for alerts timeseries. For example, if lookback=1h then range from now() to now()-1h will be scanned. (default 1h0m0s)
    Applied only to RemoteReadSpec | _string_ | false | -| `oauth2` | | _[OAuth2](#oauth2)_ | false | -| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | -| `url` | URL of the endpoint to send samples to. | _string_ | true | #### VMAlertRemoteWriteSpec - +_Underlying type:_ _[struct{URL string "json:\"url\""; Concurrency *int32 "json:\"concurrency,omitempty\""; FlushInterval *string "json:\"flushInterval,omitempty\""; MaxBatchSize *int32 "json:\"maxBatchSize,omitempty\""; MaxQueueSize *int32 "json:\"maxQueueSize,omitempty\""; HTTPAuth "json:\",inline,omitempty\""}](#struct{url-string-"json:\"url\"";-concurrency-*int32-"json:\"concurrency,omitempty\"";-flushinterval-*string-"json:\"flushinterval,omitempty\"";-maxbatchsize-*int32-"json:\"maxbatchsize,omitempty\"";-maxqueuesize-*int32-"json:\"maxqueuesize,omitempty\"";-httpauth-"json:\",inline,omitempty\""})_ VMAlertRemoteWriteSpec defines the remote storage configuration for VmAlert @@ -2591,17 +2370,6 @@ VMAlertRemoteWriteSpec defines the remote storage configuration for VmAlert _Appears in:_ - [VMAlertSpec](#vmalertspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | -| `concurrency` | Defines number of readers that concurrently write into remote storage (default 1) | _integer_ | false | -| `flushInterval` | Defines interval of flushes to remote write endpoint (default 5s) | _string_ | false | -| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | -| `maxBatchSize` | Defines defines max number of timeseries to be flushed at once (default 1000) | _integer_ | false | -| `maxQueueSize` | Defines the max number of pending datapoints to remote write endpoint (default 100000) | _integer_ | false | -| `oauth2` | | _[OAuth2](#oauth2)_ | false | -| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | -| `url` | URL of the endpoint to send samples to. | _string_ | true | #### VMAlertSpec @@ -2618,25 +2386,30 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMAlert
    object, which shall be mounted into the VMAlert Pods.
    The ConfigMaps are mounted into /etc/vm/configs/. | _string array_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `datasource` | Datasource Victoria Metrics or VMSelect url. Required parameter. e.g. http://127.0.0.1:8428 | _[VMAlertDatasourceSpec](#vmalertdatasourcespec)_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `enforcedNamespaceLabel` | EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert
    and metric that is user created. The label value will always be the namespace of the object that is
    being created. | _string_ | false | | `evaluationInterval` | EvaluationInterval defines how often to evaluate rules by default | _string_ | false | | `externalLabels` | ExternalLabels in the form 'name: value' to add to all generated recording rules and alerts. | _object (keys:string, values:string)_ | false | -| `extraArgs` | ExtraArgs that will be passed to VMAlert pod
    for example -remoteWrite.tmpDataPath=/tmp | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMAlert pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `image` | Image - docker image settings for VMAlert
    if no specified operator uses default config version | _[Image](#image)_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the VMAlert configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `license` | License allows to configure license key to be used for enterprise features.
    Using license key is supported starting from VictoriaMetrics v1.94.0.
    See [here](https://docs.victoriametrics.com/enterprise) | _[License](#license)_ | false | | `logFormat` | LogFormat for VMAlert to be configured with.
    default or json | _string_ | false | | `logLevel` | LogLevel for VMAlert to be configured with. | _string_ | false | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | | `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | | `notifier` | Notifier prometheus alertmanager endpoint spec. Required at least one of notifier or notifiers when there are alerting rules. e.g. http://127.0.0.1:9093
    If specified both notifier and notifiers, notifier will be added as last element to notifiers.
    only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier | _[VMAlertNotifierSpec](#vmalertnotifierspec)_ | false | | `notifierConfigRef` | NotifierConfigRef reference for secret with notifier configuration for vmalert
    only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | @@ -2644,33 +2417,35 @@ _Appears in:_ | `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | | `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | | `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMAlert pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | -| `port` | Port for listen | _string_ | false | -| `priorityClassName` | Priority class assigned to the Pods | _string_ | false | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | | `remoteRead` | RemoteRead Optional URL to read vmalert state (persisted via RemoteWrite)
    This configuration only makes sense if alerts state has been successfully
    persisted (via RemoteWrite) before.
    see -remoteRead.url docs in vmalerts for details.
    E.g. http://127.0.0.1:8428 | _[VMAlertRemoteReadSpec](#vmalertremotereadspec)_ | false | | `remoteWrite` | RemoteWrite Optional URL to remote-write compatible storage to persist
    vmalert state and rule results to.
    Rule results will be persisted according to each rule.
    Alerts state will be persisted in the form of time series named ALERTS and ALERTS_FOR_STATE
    see -remoteWrite.url docs in vmalerts for details.
    E.g. http://127.0.0.1:8428 | _[VMAlertRemoteWriteSpec](#vmalertremotewritespec)_ | false | -| `replicaCount` | ReplicaCount is the expected size of the VMAlert cluster. The controller will
    eventually make the size of the running cluster equal to the expected
    size. | _integer_ | false | -| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | | `rollingUpdate` | RollingUpdate - overrides deployment update params. | _[RollingUpdateDeployment](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#rollingupdatedeployment-v1-apps)_ | false | | `ruleNamespaceSelector` | RuleNamespaceSelector to be selected for VMRules discovery.
    Works in combination with Selector.
    If both nil - behaviour controlled by selectAllByDefault
    NamespaceSelector nil - only objects at VMAlert namespace. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `rulePath` | RulePath to the file with alert rules.
    Supports patterns. Flag can be specified multiple times.
    Examples:
    -rule /path/to/file. Path to a single file with alerting rules
    -rule dir/*.yaml -rule /*.yaml. Relative path to all .yaml files in folder,
    absolute path to all .yaml files in root.
    by default operator adds /etc/vmalert/configs/base/vmalert.yaml | _string array_ | false | | `ruleSelector` | RuleSelector selector to select which VMRules to mount for loading alerting
    rules from.
    Works in combination with NamespaceSelector.
    If both nil - behaviour controlled by selectAllByDefault
    NamespaceSelector nil - only objects at VMAlert namespace. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMAlert
    object, which shall be mounted into the VMAlert Pods.
    The Secrets are mounted into /etc/vm/secrets/. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | | `selectAllByDefault` | SelectAllByDefault changes default behavior for empty CRD selectors, such RuleSelector.
    with selectAllByDefault: true and empty serviceScrapeSelector and RuleNamespaceSelector
    Operator selects all exist serviceScrapes
    with selectAllByDefault: false - selects nothing | _boolean_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the
    VMAlert Pods. | _string_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmalert VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmalert service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `updateStrategy` | UpdateStrategy - overrides default update strategy. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VMAlert container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output Deployment definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -2751,59 +2526,67 @@ _Appears in:_ | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | | `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | | `clusterAdvertiseAddress` | ClusterAdvertiseAddress is the explicit address to advertise in cluster.
    Needs to be provided for non RFC1918 [1] (public) addresses.
    [1] RFC1918: https://tools.ietf.org/html/rfc1918 | _string_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMAlertmanager
    object, which shall be mounted into the VMAlertmanager Pods.
    The ConfigMaps are mounted into /etc/vm/configs/. | _string array_ | false | +| `clusterDomainName` | ClusterDomainName defines domain name suffix for in-cluster dns addresses
    aka .cluster.local
    used to build pod peer addresses for in-cluster communication | _string_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configNamespaceSelector` | ConfigNamespaceSelector defines namespace selector for VMAlertmanagerConfig.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAlertmanager namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `configRawYaml` | ConfigRawYaml - raw configuration for alertmanager,
    it helps it to start without secret.
    priority -> hardcoded ConfigRaw -> ConfigRaw, provided by user -> ConfigSecret. | _string_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | | `configSecret` | ConfigSecret is the name of a Kubernetes Secret in the same namespace as the
    VMAlertmanager object, which contains configuration for this VMAlertmanager,
    configuration must be inside secret key: alertmanager.yaml.
    It must be created by user.
    instance. Defaults to 'vmalertmanager-'
    The secret is mounted into /etc/alertmanager/config. | _string_ | false | | `configSelector` | ConfigSelector defines selector for VMAlertmanagerConfig, result config will be merged with with Raw or Secret config.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAlertmanager namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | -| `containers` | Containers allows injecting additional containers or patching existing containers.
    This is meant to allow adding an authentication proxy to an VMAlertmanager pod. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `disableNamespaceMatcher` | DisableNamespaceMatcher disables namespace label matcher for VMAlertmanagerConfig
    It may be useful if alert doesn't have namespace label for some reason | _boolean_ | false | | `disableRouteContinueEnforce` | DisableRouteContinueEnforce cancel the behavior for VMAlertmanagerConfig that always enforce first-level route continue to true | _boolean_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `externalURL` | ExternalURL the VMAlertmanager instances will be available under. This is
    necessary to generate correct URLs. This is necessary if VMAlertmanager is not
    served from root of a DNS name. | _string_ | false | -| `extraArgs` | ExtraArgs that will be passed to VMAlertmanager pod
    for example log.level: debug | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMAlertmanager pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | | `gossipConfig` | GossipConfig defines gossip TLS configuration for Alertmanager cluster | _[AlertmanagerGossipConfig](#alertmanagergossipconfig)_ | true | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `image` | Image - docker image settings for VMAlertmanager
    if no specified operator uses default config version | _[Image](#image)_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the VMAlertmanager configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `listenLocal` | ListenLocal makes the VMAlertmanager server listen on loopback, so that it
    does not bind against the Pod IP. Note this is only for the VMAlertmanager
    UI, not the gossip communication. | _boolean_ | false | | `logFormat` | LogFormat for VMAlertmanager to be configured with. | _string_ | false | | `logLevel` | Log level for VMAlertmanager to be configured with. | _string_ | false | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | | `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | | `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | | `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | | `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the alertmanager pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `port` | Port for listen | _string_ | false | +| `port` | Port listen address | _string_ | false | | `portName` | PortName used for the pods and governing service.
    This defaults to web | _string_ | false | | `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `replicaCount` | ReplicaCount Size is the expected size of the alertmanager cluster. The controller will
    eventually make the size of the running cluster equal to the expected | _integer_ | false | -| `resources` | Resources container resource request and limits,
    https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `retention` | Retention Time duration VMAlertmanager shall retain data for. Default is '120h',
    and must match the regular expression `[0-9]+(ms\|s\|m\|h)` (milliseconds seconds minutes hours). | _string_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | | `rollingUpdateStrategy` | RollingUpdateStrategy defines strategy for application updates
    Default is OnDelete, in this case operator handles update process
    Can be changed for RollingUpdate | _[StatefulSetUpdateStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetupdatestrategytype-v1-apps)_ | false | | `routePrefix` | RoutePrefix VMAlertmanager registers HTTP handlers for. This is useful,
    if using ExternalURL and a proxy is rewriting HTTP routes of a request,
    and the actual ExternalURL is still true, but the server serves requests
    under a different route prefix. For example for use with `kubectl proxy`. | _string_ | false | | `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMAlertmanager
    object, which shall be mounted into the VMAlertmanager Pods.
    The Secrets are mounted into /etc/vm/secrets/ | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | | `selectAllByDefault` | SelectAllByDefault changes default behavior for empty CRD selectors, such ConfigSelector.
    with selectAllByDefault: true and undefined ConfigSelector and ConfigNamespaceSelector
    Operator selects all exist alertManagerConfigs
    with selectAllByDefault: false - selects nothing | _boolean_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use | _string_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmalertmanager VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmalertmanager service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `storage` | Storage is the definition of how storage will be used by the VMAlertmanager
    instances. | _[StorageSpec](#storagespec)_ | false | | `templates` | Templates is a list of ConfigMap key references for ConfigMaps in the same namespace as the VMAlertmanager
    object, which shall be mounted into the VMAlertmanager Pods.
    The Templates are mounted into /etc/vm/templates//. | _[ConfigMapKeyReference](#configmapkeyreference) array_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the alertmanager container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | | `webConfig` | WebConfig defines configuration for webserver
    https://github.com/prometheus/alertmanager/blob/main/docs/https.md | _[AlertmanagerWebConfig](#alertmanagerwebconfig)_ | true | @@ -2841,61 +2624,67 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMAuth
    object, which shall be mounted into the VMAuth Pods. | _string array_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | | `configSecret` | ConfigSecret is the name of a Kubernetes Secret in the same namespace as the
    VMAuth object, which contains auth configuration for vmauth,
    configuration must be inside secret key: config.yaml.
    It must be created and managed manually.
    If it's defined, configuration for vmauth becomes unmanaged and operator'll not create any related secrets/config-reloaders | _string_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `default_url` | DefaultURLs backend url for non-matching paths filter
    usually used for default backend with error message | _string array_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `discover_backend_ips` | DiscoverBackendIPs instructs discovering URLPrefix backend IPs via DNS. | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `drop_src_path_prefix_parts` | DropSrcPathPrefixParts is the number of `/`-delimited request path prefix parts to drop before proxying the request to backend.
    See [here](https://docs.victoriametrics.com/vmauth#dropping-request-path-prefix) for more details. | _integer_ | false | -| `extraArgs` | ExtraArgs that will be passed to VMAuth pod
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMAuth pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | | `headers` | Headers represent additional http headers, that vmauth uses
    in form of ["header_key: header_value"]
    multiple values for header key:
    ["header_key: value1,value2"]
    it's available since 1.68.0 version of vmauth | _string array_ | false | | `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `image` | Image - docker image settings for VMAuth
    if no specified operator uses default config version | _[Image](#image)_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | | `ingress` | Ingress enables ingress configuration for VMAuth. | _[EmbeddedIngress](#embeddedingress)_ | true | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the vmSingle configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `ip_filters` | IPFilters defines per target src ip filters
    supported only with enterprise version of [vmauth](https://docs.victoriametrics.com/vmauth/#ip-filters) | _[VMUserIPFilters](#vmuseripfilters)_ | false | | `license` | License allows to configure license key to be used for enterprise features.
    Using license key is supported starting from VictoriaMetrics v1.94.0.
    See [here](https://docs.victoriametrics.com/enterprise) | _[License](#license)_ | false | | `load_balancing_policy` | LoadBalancingPolicy defines load balancing policy to use for backend urls.
    Supported policies: least_loaded, first_available.
    See [here](https://docs.victoriametrics.com/vmauth#load-balancing) for more details (default "least_loaded") | _string_ | false | | `logFormat` | LogFormat for VMAuth to be configured with. | _string_ | false | | `logLevel` | LogLevel for victoria metrics single to be configured with. | _string_ | false | | `max_concurrent_requests` | MaxConcurrentRequests defines max concurrent requests per user
    300 is default value for vmauth | _integer_ | false | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | | `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | | `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | | `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | | `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMAuth pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `port` | Port listen port | _string_ | false | -| `priorityClassName` | PriorityClassName assigned to the Pods | _string_ | false | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `replicaCount` | ReplicaCount is the expected size of the VMAuth | _integer_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | | `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `response_headers` | ResponseHeaders represent additional http headers, that vmauth adds for request response
    in form of ["header_key: header_value"]
    multiple values for header key:
    ["header_key: value1,value2"]
    it's available since 1.93.0 version of vmauth | _string array_ | false | | `retry_status_codes` | RetryStatusCodes defines http status codes in numeric format for request retries
    e.g. [429,503] | _integer array_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | | `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMAuth
    object, which shall be mounted into the VMAuth Pods. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | | `selectAllByDefault` | SelectAllByDefault changes default behavior for empty CRD selectors, such userSelector.
    with selectAllByDefault: true and empty userSelector and userNamespaceSelector
    Operator selects all exist users
    with selectAllByDefault: false - selects nothing | _boolean_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the
    VMAuth Pods. | _string_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmauth VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmsingle service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | | `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `unauthorizedAccessConfig` | UnauthorizedAccessConfig configures access for un authorized users | _[UnauthorizedAccessConfigURLMap](#unauthorizedaccessconfigurlmap) array_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | | `userNamespaceSelector` | UserNamespaceSelector Namespaces to be selected for VMAuth discovery.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAuth namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `userSelector` | UserSelector defines VMUser to be selected for config file generation.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAuth namespace.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VMAuth container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output deploy definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -2910,7 +2699,6 @@ _Appears in:_ _Appears in:_ - [VMSingleSpec](#vmsinglespec) -- [VMStorage](#vmstorage) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -2969,6 +2757,7 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | +| `clusterDomainName` | ClusterDomainName defines domain name suffix for in-cluster dns addresses
    aka .cluster.local
    used by vminsert and vmselect to build vmstorage address | _string_ | false | | `clusterVersion` | ClusterVersion defines default images tag for all components.
    it can be overwritten with component specific image.tag value. | _string_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | | `license` | License allows to configure license key to be used for enterprise features.
    Using license key is supported starting from VictoriaMetrics v1.94.0.
    See [here](https://docs.victoriametrics.com/enterprise) | _[License](#license)_ | false | @@ -2986,7 +2775,7 @@ _Appears in:_ #### VMInsert - +_Underlying type:_ _[struct{PodMetadata *EmbeddedObjectMetadata "json:\"podMetadata,omitempty\""; LogFormat string "json:\"logFormat,omitempty\""; LogLevel string "json:\"logLevel,omitempty\""; InsertPorts *InsertPorts "json:\"insertPorts,omitempty\""; ClusterNativePort string "json:\"clusterNativeListenPort,omitempty\""; ServiceSpec *AdditionalServiceSpec "json:\"serviceSpec,omitempty\""; ServiceScrapeSpec *VMServiceScrapeSpec "json:\"serviceScrapeSpec,omitempty\""; UpdateStrategy *k8s.io/api/apps/v1.DeploymentStrategyType "json:\"updateStrategy,omitempty\""; RollingUpdate *k8s.io/api/apps/v1.RollingUpdateDeployment "json:\"rollingUpdate,omitempty\""; PodDisruptionBudget *EmbeddedPodDisruptionBudgetSpec "json:\"podDisruptionBudget,omitempty\""; *EmbeddedProbes "json:\",inline\""; HPA *EmbeddedHPA "json:\"hpa,omitempty\""; CommonDefaultableParams "json:\",inline\""; CommonApplicationDeploymentParams "json:\",inline\""}](#struct{podmetadata-*embeddedobjectmetadata-"json:\"podmetadata,omitempty\"";-logformat-string-"json:\"logformat,omitempty\"";-loglevel-string-"json:\"loglevel,omitempty\"";-insertports-*insertports-"json:\"insertports,omitempty\"";-clusternativeport-string-"json:\"clusternativelistenport,omitempty\"";-servicespec-*additionalservicespec-"json:\"servicespec,omitempty\"";-servicescrapespec-*vmservicescrapespec-"json:\"servicescrapespec,omitempty\"";-updatestrategy-*k8sioapiappsv1deploymentstrategytype-"json:\"updatestrategy,omitempty\"";-rollingupdate-*k8sioapiappsv1rollingupdatedeployment-"json:\"rollingupdate,omitempty\"";-poddisruptionbudget-*embeddedpoddisruptionbudgetspec-"json:\"poddisruptionbudget,omitempty\"";-*embeddedprobes-"json:\",inline\"";-hpa-*embeddedhpa-"json:\"hpa,omitempty\"";-commondefaultableparams-"json:\",inline\"";-commonapplicationdeploymentparams-"json:\",inline\""})_ @@ -2995,46 +2784,6 @@ _Appears in:_ _Appears in:_ - [VMClusterSpec](#vmclusterspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `clusterNativeListenPort` | ClusterNativePort for multi-level cluster setup.
    More [details](https://docs.victoriametrics.com/Cluster-VictoriaMetrics#multi-level-cluster-setup) | _string_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMInsert
    object, which shall be mounted into the VMInsert Pods.
    The ConfigMaps are mounted into /etc/vm/configs/. | _string array_ | false | -| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | -| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | -| `extraArgs` | | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMInsert pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | -| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `hpa` | HPA defines kubernetes PodAutoScaling configuration version 2. | _[EmbeddedHPA](#embeddedhpa)_ | true | -| `image` | Image - docker image settings for VMInsert | _[Image](#image)_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the VMInsert configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `insertPorts` | InsertPorts - additional listen ports for data ingestion. | _[InsertPorts](#insertports)_ | true | -| `logFormat` | LogFormat for VMInsert to be configured with.
    default or json | _string_ | false | -| `logLevel` | LogLevel for VMInsert to be configured with. | _string_ | false | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | -| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | -| `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | -| `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMInsert pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | -| `port` | Port listen port | _string_ | false | -| `priorityClassName` | Priority class assigned to the Pods | _string_ | false | -| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `replicaCount` | ReplicaCount is the expected size of the VMInsert cluster. The controller will
    eventually make the size of the running cluster equal to the expected
    size. | _integer_ | true | -| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | -| `rollingUpdate` | RollingUpdate - overrides deployment update params. | _[RollingUpdateDeployment](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#rollingupdatedeployment-v1-apps)_ | false | -| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | -| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMInsert
    object, which shall be mounted into the VMInsert Pods.
    The Secrets are mounted into /etc/vm/secrets/. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | -| `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vminsert VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | -| `serviceSpec` | ServiceSpec that will be added to vminsert service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | -| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | -| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | -| `updateStrategy` | UpdateStrategy - overrides default update strategy. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VMInsert container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output Deployment definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | #### VMNodeScrape @@ -3420,7 +3169,7 @@ _Appears in:_ #### VMSelect - +_Underlying type:_ _[struct{PodMetadata *EmbeddedObjectMetadata "json:\"podMetadata,omitempty\""; LogFormat string "json:\"logFormat,omitempty\""; LogLevel string "json:\"logLevel,omitempty\""; CacheMountPath string "json:\"cacheMountPath,omitempty\""; Storage *StorageSpec "json:\"persistentVolume,omitempty\""; StorageSpec *StorageSpec "json:\"storage,omitempty\""; ClusterNativePort string "json:\"clusterNativeListenPort,omitempty\""; ServiceSpec *AdditionalServiceSpec "json:\"serviceSpec,omitempty\""; ServiceScrapeSpec *VMServiceScrapeSpec "json:\"serviceScrapeSpec,omitempty\""; PodDisruptionBudget *EmbeddedPodDisruptionBudgetSpec "json:\"podDisruptionBudget,omitempty\""; *EmbeddedProbes "json:\",inline\""; HPA *EmbeddedHPA "json:\"hpa,omitempty\""; RollingUpdateStrategy k8s.io/api/apps/v1.StatefulSetUpdateStrategyType "json:\"rollingUpdateStrategy,omitempty\""; ClaimTemplates []k8s.io/api/core/v1.PersistentVolumeClaim "json:\"claimTemplates,omitempty\""; CommonDefaultableParams "json:\",inline\""; CommonApplicationDeploymentParams "json:\",inline\""}](#struct{podmetadata-*embeddedobjectmetadata-"json:\"podmetadata,omitempty\"";-logformat-string-"json:\"logformat,omitempty\"";-loglevel-string-"json:\"loglevel,omitempty\"";-cachemountpath-string-"json:\"cachemountpath,omitempty\"";-storage-*storagespec-"json:\"persistentvolume,omitempty\"";-storagespec-*storagespec-"json:\"storage,omitempty\"";-clusternativeport-string-"json:\"clusternativelistenport,omitempty\"";-servicespec-*additionalservicespec-"json:\"servicespec,omitempty\"";-servicescrapespec-*vmservicescrapespec-"json:\"servicescrapespec,omitempty\"";-poddisruptionbudget-*embeddedpoddisruptionbudgetspec-"json:\"poddisruptionbudget,omitempty\"";-*embeddedprobes-"json:\",inline\"";-hpa-*embeddedhpa-"json:\"hpa,omitempty\"";-rollingupdatestrategy-k8sioapiappsv1statefulsetupdatestrategytype-"json:\"rollingupdatestrategy,omitempty\"";-claimtemplates-[]k8sioapicorev1persistentvolumeclaim-"json:\"claimtemplates,omitempty\"";-commondefaultableparams-"json:\",inline\"";-commonapplicationdeploymentparams-"json:\",inline\""})_ @@ -3429,48 +3178,6 @@ _Appears in:_ _Appears in:_ - [VMClusterSpec](#vmclusterspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `cacheMountPath` | CacheMountPath allows to add cache persistent for VMSelect,
    will use "/cache" as default if not specified. | _string_ | false | -| `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | -| `clusterNativeListenPort` | ClusterNativePort for multi-level cluster setup.
    More [details](https://docs.victoriametrics.com/Cluster-VictoriaMetrics#multi-level-cluster-setup) | _string_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMSelect
    object, which shall be mounted into the VMSelect Pods.
    The ConfigMaps are mounted into /etc/vm/configs/. | _string array_ | false | -| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | -| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | -| `extraArgs` | | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMSelect pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | -| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `hpa` | Configures horizontal pod autoscaling.
    Note, enabling this option disables vmselect to vmselect communication. In most cases it's not an issue. | _[EmbeddedHPA](#embeddedhpa)_ | false | -| `image` | Image - docker image settings for VMSelect | _[Image](#image)_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the VMSelect configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `logFormat` | LogFormat for VMSelect to be configured with.
    default or json | _string_ | false | -| `logLevel` | LogLevel for VMSelect to be configured with. | _string_ | false | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | -| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | -| `persistentVolume` | Storage - add persistent volume for cacheMountPath
    its useful for persistent cache
    use storage instead of persistentVolume. | _[StorageSpec](#storagespec)_ | false | -| `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | -| `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMSelect pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | -| `port` | Port listen port | _string_ | false | -| `priorityClassName` | Priority class assigned to the Pods | _string_ | false | -| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `replicaCount` | ReplicaCount is the expected size of the VMSelect cluster. The controller will
    eventually make the size of the running cluster equal to the expected
    size. | _integer_ | true | -| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | -| `rollingUpdateStrategy` | RollingUpdateStrategy defines strategy for application updates
    Default is OnDelete, in this case operator handles update process
    Can be changed for RollingUpdate | _[StatefulSetUpdateStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetupdatestrategytype-v1-apps)_ | false | -| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | -| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMSelect
    object, which shall be mounted into the VMSelect Pods.
    The Secrets are mounted into /etc/vm/secrets/. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | -| `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmselect VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | -| `serviceSpec` | ServiceSpec that will be added to vmselect service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `storage` | StorageSpec - add persistent volume claim for cacheMountPath
    its needed for persistent cache | _[StorageSpec](#storagespec)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | -| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | -| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VMSelect container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output Deployment definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | #### VMServiceScrape @@ -3496,7 +3203,7 @@ result config will scrape service endpoints #### VMServiceScrapeSpec - +_Underlying type:_ _[struct{DiscoveryRole string "json:\"discoveryRole,omitempty\""; JobLabel string "json:\"jobLabel,omitempty\""; TargetLabels []string "json:\"targetLabels,omitempty\""; PodTargetLabels []string "json:\"podTargetLabels,omitempty\""; Endpoints []Endpoint "json:\"endpoints\""; Selector k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector "json:\"selector,omitempty\""; NamespaceSelector NamespaceSelector "json:\"namespaceSelector,omitempty\""; SampleLimit uint64 "json:\"sampleLimit,omitempty\""; SeriesLimit uint64 "json:\"seriesLimit,omitempty\""; AttachMetadata AttachMetadata "json:\"attach_metadata,omitempty\""}](#struct{discoveryrole-string-"json:\"discoveryrole,omitempty\"";-joblabel-string-"json:\"joblabel,omitempty\"";-targetlabels-[]string-"json:\"targetlabels,omitempty\"";-podtargetlabels-[]string-"json:\"podtargetlabels,omitempty\"";-endpoints-[]endpoint-"json:\"endpoints\"";-selector-k8sioapimachinerypkgapismetav1labelselector-"json:\"selector,omitempty\"";-namespaceselector-namespaceselector-"json:\"namespaceselector,omitempty\"";-samplelimit-uint64-"json:\"samplelimit,omitempty\"";-serieslimit-uint64-"json:\"serieslimit,omitempty\"";-attachmetadata-attachmetadata-"json:\"attach_metadata,omitempty\""})_ VMServiceScrapeSpec defines the desired state of VMServiceScrape @@ -3508,24 +3215,9 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) -- [VMInsert](#vminsert) -- [VMSelect](#vmselect) - [VMServiceScrape](#vmservicescrape) - [VMSingleSpec](#vmsinglespec) -- [VMStorage](#vmstorage) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `attach_metadata` | AttachMetadata configures metadata attaching from service discovery | _[AttachMetadata](#attachmetadata)_ | false | -| `discoveryRole` | DiscoveryRole - defines kubernetes_sd role for objects discovery.
    by default, its endpoints.
    can be changed to service or endpointslices.
    note, that with service setting, you have to use port: "name"
    and cannot use targetPort for endpoints. | _string_ | false | -| `endpoints` | A list of endpoints allowed as part of this ServiceScrape. | _[Endpoint](#endpoint) array_ | true | -| `jobLabel` | The label to use to retrieve the job name from. | _string_ | false | -| `namespaceSelector` | Selector to select which namespaces the Endpoints objects are discovered from. | _[NamespaceSelector](#namespaceselector)_ | false | -| `podTargetLabels` | PodTargetLabels transfers labels on the Kubernetes Pod onto the target. | _string array_ | false | -| `sampleLimit` | SampleLimit defines per-scrape limit on number of scraped samples that will be accepted. | _integer_ | false | -| `selector` | Selector to select Endpoints objects by corresponding Service labels. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | -| `seriesLimit` | SeriesLimit defines per-scrape limit on number of unique time series
    a single target can expose during all the scrapes on the time window of 24h. | _integer_ | false | -| `targetLabels` | TargetLabels transfers labels on the Kubernetes Service onto the target. | _string array_ | false | #### VMSingle @@ -3560,50 +3252,54 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMSingle
    object, which shall be mounted into the VMSingle Pods. | _string array_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | -| `extraArgs` | ExtraArgs that will be passed to VMSingle pod
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMSingle pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | | `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `image` | Image - docker image settings for VMSingle
    if no specified operator uses default config version | _[Image](#image)_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the vmSingle configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `insertPorts` | InsertPorts - additional listen ports for data ingestion. | _[InsertPorts](#insertports)_ | true | | `license` | License allows to configure license key to be used for enterprise features.
    Using license key is supported starting from VictoriaMetrics v1.94.0.
    See [here](https://docs.victoriametrics.com/enterprise) | _[License](#license)_ | false | | `logFormat` | LogFormat for VMSingle to be configured with. | _string_ | false | | `logLevel` | LogLevel for victoria metrics single to be configured with. | _string_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | | `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | | `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | | `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMSingle pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `port` | Port listen port | _string_ | false | -| `priorityClassName` | PriorityClassName assigned to the Pods | _string_ | false | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | | `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | | `removePvcAfterDelete` | RemovePvcAfterDelete - if true, controller adds ownership to pvc
    and after VMSingle object deletion - pvc will be garbage collected
    by controller manager | _boolean_ | false | -| `replicaCount` | ReplicaCount is the expected size of the VMSingle
    it can be 0 or 1
    if you need more - use vm cluster | _integer_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | | `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `retentionPeriod` | RetentionPeriod for the stored metrics
    Note VictoriaMetrics has data/ and indexdb/ folders
    metrics from data/ removed eventually as soon as partition leaves retention period
    reverse index data at indexdb rotates once at the half of configured [retention period](https://docs.victoriametrics.com/Single-server-VictoriaMetrics/#retention) | _string_ | true | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | | `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMSingle
    object, which shall be mounted into the VMSingle Pods. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the
    VMSingle Pods. | _string_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmsingle VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmsingle service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `storage` | Storage is the definition of how storage will be used by the VMSingle
    by default it`s empty dir | _[PersistentVolumeClaimSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaimspec-v1-core)_ | false | | `storageDataPath` | StorageDataPath disables spec.storage option and overrides arg for victoria-metrics binary --storageDataPath,
    its users responsibility to mount proper device into given path. | _string_ | false | | `storageMetadata` | StorageMeta defines annotations and labels attached to PVC for given vmsingle CR | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | | `streamAggrConfig` | StreamAggrConfig defines stream aggregation configuration for VMSingle | _[StreamAggrConfig](#streamaggrconfig)_ | true | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#int64-v1-core)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | | `vmBackup` | VMBackup configuration for backup | _[VMBackup](#vmbackup)_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VMSingle container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output deploy definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -3647,7 +3343,7 @@ _Appears in:_ #### VMStorage - +_Underlying type:_ _[struct{PodMetadata *EmbeddedObjectMetadata "json:\"podMetadata,omitempty\""; LogFormat string "json:\"logFormat,omitempty\""; LogLevel string "json:\"logLevel,omitempty\""; StorageDataPath string "json:\"storageDataPath,omitempty\""; Storage *StorageSpec "json:\"storage,omitempty\""; VMInsertPort string "json:\"vmInsertPort,omitempty\""; VMSelectPort string "json:\"vmSelectPort,omitempty\""; VMBackup *VMBackup "json:\"vmBackup,omitempty\""; ServiceSpec *AdditionalServiceSpec "json:\"serviceSpec,omitempty\""; ServiceScrapeSpec *VMServiceScrapeSpec "json:\"serviceScrapeSpec,omitempty\""; PodDisruptionBudget *EmbeddedPodDisruptionBudgetSpec "json:\"podDisruptionBudget,omitempty\""; *EmbeddedProbes "json:\",inline\""; MaintenanceInsertNodeIDs []int32 "json:\"maintenanceInsertNodeIDs,omitempty\""; MaintenanceSelectNodeIDs []int32 "json:\"maintenanceSelectNodeIDs,omitempty\""; RollingUpdateStrategy k8s.io/api/apps/v1.StatefulSetUpdateStrategyType "json:\"rollingUpdateStrategy,omitempty\""; ClaimTemplates []k8s.io/api/core/v1.PersistentVolumeClaim "json:\"claimTemplates,omitempty\""; CommonDefaultableParams "json:\",inline\""; CommonApplicationDeploymentParams "json:\",inline\""}](#struct{podmetadata-*embeddedobjectmetadata-"json:\"podmetadata,omitempty\"";-logformat-string-"json:\"logformat,omitempty\"";-loglevel-string-"json:\"loglevel,omitempty\"";-storagedatapath-string-"json:\"storagedatapath,omitempty\"";-storage-*storagespec-"json:\"storage,omitempty\"";-vminsertport-string-"json:\"vminsertport,omitempty\"";-vmselectport-string-"json:\"vmselectport,omitempty\"";-vmbackup-*vmbackup-"json:\"vmbackup,omitempty\"";-servicespec-*additionalservicespec-"json:\"servicespec,omitempty\"";-servicescrapespec-*vmservicescrapespec-"json:\"servicescrapespec,omitempty\"";-poddisruptionbudget-*embeddedpoddisruptionbudgetspec-"json:\"poddisruptionbudget,omitempty\"";-*embeddedprobes-"json:\",inline\"";-maintenanceinsertnodeids-[]int32-"json:\"maintenanceinsertnodeids,omitempty\"";-maintenanceselectnodeids-[]int32-"json:\"maintenanceselectnodeids,omitempty\"";-rollingupdatestrategy-k8sioapiappsv1statefulsetupdatestrategytype-"json:\"rollingupdatestrategy,omitempty\"";-claimtemplates-[]k8sioapicorev1persistentvolumeclaim-"json:\"claimtemplates,omitempty\"";-commondefaultableparams-"json:\",inline\"";-commonapplicationdeploymentparams-"json:\",inline\""})_ @@ -3656,50 +3352,6 @@ _Appears in:_ _Appears in:_ - [VMClusterSpec](#vmclusterspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | -| `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | -| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the VMStorage
    object, which shall be mounted into the VMStorage Pods.
    The ConfigMaps are mounted into /etc/vm/configs/. | _string array_ | false | -| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | -| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | -| `extraArgs` | | _object (keys:string, values:string)_ | false | -| `extraEnvs` | ExtraEnvs that will be added to VMStorage pod | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | -| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | -| `image` | Image - docker image settings for VMStorage | _[Image](#image)_ | false | -| `initContainers` | InitContainers allows adding initContainers to the pod definition. Those can be used to e.g.
    fetch secrets for injection into the VMStorage configuration from external sources. Any
    errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    Using initContainers for any use case other then secret fetching is entirely outside the scope
    of what the maintainers will support and by doing so, you accept that this behaviour may break
    at any time without notice. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `logFormat` | LogFormat for VMStorage to be configured with.
    default or json | _string_ | false | -| `logLevel` | LogLevel for VMStorage to be configured with. | _string_ | false | -| `maintenanceInsertNodeIDs` | MaintenanceInsertNodeIDs - excludes given node ids from insert requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc.
    lets say, you have pod-0, pod-1, pod-2, pod-3. to exclude pod-0 and pod-3 from insert routing, define nodeIDs: [0,3].
    Useful at storage expanding, when you want to rebalance some data at cluster. | _integer array_ | false | -| `maintenanceSelectNodeIDs` | MaintenanceInsertNodeIDs - excludes given node ids from select requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. | _integer array_ | true | -| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state | _integer_ | false | -| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | -| `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | -| `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMStorage pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | -| `port` | Port for health check connetions | _string_ | true | -| `priorityClassName` | Priority class assigned to the Pods | _string_ | false | -| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | -| `replicaCount` | ReplicaCount is the expected size of the VMStorage cluster. The controller will
    eventually make the size of the running cluster equal to the expected
    size. | _integer_ | true | -| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | -| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the StatefulSet's revision history.
    Defaults to 10. | _integer_ | false | -| `rollingUpdateStrategy` | RollingUpdateStrategy defines strategy for application updates
    Default is OnDelete, in this case operator handles update process
    Can be changed for RollingUpdate | _[StatefulSetUpdateStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetupdatestrategytype-v1-apps)_ | false | -| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | -| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | -| `secrets` | Secrets is a list of Secrets in the same namespace as the VMStorage
    object, which shall be mounted into the VMStorage Pods.
    The Secrets are mounted into /etc/vm/secrets/. | _string array_ | false | -| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podsecuritycontext-v1-core)_ | false | -| `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmstorage VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | -| `serviceSpec` | ServiceSpec that will be create additional service for vmstorage | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `storage` | Storage - add persistent volume for StorageDataPath
    its useful for persistent cache | _[StorageSpec](#storagespec)_ | false | -| `storageDataPath` | StorageDataPath - path to storage data | _string_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | -| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | -| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | -| `vmBackup` | VMBackup configuration for backup | _[VMBackup](#vmbackup)_ | false | -| `vmInsertPort` | VMInsertPort for VMInsert connections | _string_ | false | -| `vmSelectPort` | VMSelectPort for VMSelect connections | _string_ | false | -| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition.
    VolumeMounts specified will be appended to other VolumeMounts in the VMStorage container,
    that are generated as a result of StorageSpec objects. | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | -| `volumes` | Volumes allows configuration of additional volumes on the output Deployment definition.
    Volumes specified will be appended to other volumes that are generated as a result of
    StorageSpec objects. | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | false | #### VMUser @@ -3722,7 +3374,7 @@ VMUser is the Schema for the vmusers API #### VMUserIPFilters - +_Underlying type:_ _[struct{DenyList []string "json:\"deny_list,omitempty\""; AllowList []string "json:\"allow_list,omitempty\""}](#struct{denylist-[]string-"json:\"deny_list,omitempty\"";-allowlist-[]string-"json:\"allow_list,omitempty\""})_ VMUserIPFilters defines filters for IP addresses supported only with enterprise version of [vmauth](https://docs.victoriametrics.com/vmauth#ip-filters) @@ -3734,10 +3386,6 @@ _Appears in:_ - [VMAuthSpec](#vmauthspec) - [VMUserSpec](#vmuserspec) -| Field | Description | Scheme | Required | -| --- | --- | --- | --- | -| `allow_list` | | _string array_ | true | -| `deny_list` | | _string array_ | true | #### VMUserSpec diff --git a/docs/operator/vars.md b/docs/operator/vars.md index 7496ee1553..4e379301e0 100644 --- a/docs/operator/vars.md +++ b/docs/operator/vars.md @@ -10,7 +10,7 @@ aliases: - /operator/vars/index.html --- - updated at Mon Sep 16 09:04:10 UTC 2024 + updated at Wed Sep 18 22:37:27 UTC 2024 | variable name | variable default value | variable required | variable description | @@ -21,14 +21,18 @@ aliases: | VM_PSPAUTOCREATEENABLED | false | false | - | | VM_VLOGSDEFAULT_IMAGE | victoriametrics/victoria-logs | false | - | | VM_VLOGSDEFAULT_VERSION | v0.28.0-victorialogs | false | - | +| VM_VLOGSDEFAULT_CONFIGRELOADIMAGE | - | false | ignored | | VM_VLOGSDEFAULT_PORT | 9428 | false | - | | VM_VLOGSDEFAULT_USEDEFAULTRESOURCES | true | false | - | | VM_VLOGSDEFAULT_RESOURCE_LIMIT_MEM | 1500Mi | false | - | | VM_VLOGSDEFAULT_RESOURCE_LIMIT_CPU | 1200m | false | - | | VM_VLOGSDEFAULT_RESOURCE_REQUEST_MEM | 500Mi | false | - | | VM_VLOGSDEFAULT_RESOURCE_REQUEST_CPU | 150m | false | - | +| VM_VLOGSDEFAULT_CONFIGRELOADERCPU | - | false | ignored | +| VM_VLOGSDEFAULT_CONFIGRELOADERMEMORY | - | false | ignored | | VM_VMALERTDEFAULT_IMAGE | victoriametrics/vmalert | false | - | | VM_VMALERTDEFAULT_VERSION | v1.103.0 | false | - | +| VM_VMALERTDEFAULT_CONFIGRELOADIMAGE | jimmidyson/configmap-reload:v0.3.0 | false | - | | VM_VMALERTDEFAULT_PORT | 8080 | false | - | | VM_VMALERTDEFAULT_USEDEFAULTRESOURCES | true | false | - | | VM_VMALERTDEFAULT_RESOURCE_LIMIT_MEM | 500Mi | false | - | @@ -37,7 +41,6 @@ aliases: | VM_VMALERTDEFAULT_RESOURCE_REQUEST_CPU | 50m | false | - | | VM_VMALERTDEFAULT_CONFIGRELOADERCPU | 100m | false | - | | VM_VMALERTDEFAULT_CONFIGRELOADERMEMORY | 25Mi | false | - | -| VM_VMALERTDEFAULT_CONFIGRELOADIMAGE | jimmidyson/configmap-reload:v0.3.0 | false | - | | VM_VMAGENTDEFAULT_IMAGE | victoriametrics/vmagent | false | - | | VM_VMAGENTDEFAULT_VERSION | v1.103.0 | false | - | | VM_VMAGENTDEFAULT_CONFIGRELOADIMAGE | quay.io/prometheus-operator/prometheus-config-reloader:v0.68.0 | false | - | @@ -51,14 +54,15 @@ aliases: | VM_VMAGENTDEFAULT_CONFIGRELOADERMEMORY | 25Mi | false | - | | VM_VMSINGLEDEFAULT_IMAGE | victoriametrics/victoria-metrics | false | - | | VM_VMSINGLEDEFAULT_VERSION | v1.103.0 | false | - | +| VM_VMSINGLEDEFAULT_CONFIGRELOADIMAGE | - | false | ignored | | VM_VMSINGLEDEFAULT_PORT | 8429 | false | - | | VM_VMSINGLEDEFAULT_USEDEFAULTRESOURCES | true | false | - | | VM_VMSINGLEDEFAULT_RESOURCE_LIMIT_MEM | 1500Mi | false | - | | VM_VMSINGLEDEFAULT_RESOURCE_LIMIT_CPU | 1200m | false | - | | VM_VMSINGLEDEFAULT_RESOURCE_REQUEST_MEM | 500Mi | false | - | | VM_VMSINGLEDEFAULT_RESOURCE_REQUEST_CPU | 150m | false | - | -| VM_VMSINGLEDEFAULT_CONFIGRELOADERCPU | 100m | false | - | -| VM_VMSINGLEDEFAULT_CONFIGRELOADERMEMORY | 25Mi | false | - | +| VM_VMSINGLEDEFAULT_CONFIGRELOADERCPU | - | false | ignored | +| VM_VMSINGLEDEFAULT_CONFIGRELOADERMEMORY | - | false | ignored | | VM_VMCLUSTERDEFAULT_USEDEFAULTRESOURCES | true | false | - | | VM_VMCLUSTERDEFAULT_VMSELECTDEFAULT_IMAGE | victoriametrics/vmselect | false | - | | VM_VMCLUSTERDEFAULT_VMSELECTDEFAULT_VERSION | v1.103.0-cluster | false | - | @@ -103,7 +107,6 @@ aliases: | VM_VMBACKUP_RESOURCE_LIMIT_CPU | 500m | false | - | | VM_VMBACKUP_RESOURCE_REQUEST_MEM | 200Mi | false | - | | VM_VMBACKUP_RESOURCE_REQUEST_CPU | 150m | false | - | -| VM_VMBACKUP_LOGLEVEL | INFO | false | - | | VM_VMAUTHDEFAULT_IMAGE | victoriametrics/vmauth | false | - | | VM_VMAUTHDEFAULT_VERSION | v1.103.0 | false | - | | VM_VMAUTHDEFAULT_CONFIGRELOADIMAGE | quay.io/prometheus-operator/prometheus-config-reloader:v0.68.0 | false | - | @@ -127,14 +130,10 @@ aliases: | VM_ENABLEDPROMETHEUSCONVERTEROWNERREFERENCES | false | false | - | | VM_FILTERPROMETHEUSCONVERTERLABELPREFIXES | - | false | allows filtering for converted labels, labels with matched prefix will be ignored | | VM_FILTERPROMETHEUSCONVERTERANNOTATIONPREFIXES | - | false | allows filtering for converted annotations, annotations with matched prefix will be ignored | -| VM_HOST | 0.0.0.0 | false | - | -| VM_LISTENADDRESS | 0.0.0.0 | false | - | -| VM_DEFAULTLABELS | managed-by=vm-operator | false | - | -| VM_LABELS | - | false | - | -| VM_CLUSTERDOMAINNAME | - | false | - | -| VM_PODWAITREADYTIMEOUT | 80s | false | - | -| VM_PODWAITREADYINTERVALCHECK | 5s | false | - | -| VM_PODWAITREADYINITDELAY | 10s | false | - | +| VM_CLUSTERDOMAINNAME | - | false | Defines domain name suffix for in-cluster addresses most known ClusterDomainName is .cluster.local | +| VM_APPREADYTIMEOUT | 80s | false | Defines deadline for deploymnet/statefulset to transit into ready state to wait for transition to ready state | +| VM_PODWAITREADYTIMEOUT | 80s | false | Defines single pod deadline to wait for transition to ready state | +| VM_PODWAITREADYINTERVALCHECK | 5s | false | Defines poll interval for pods ready check at statefulset rollout update | | VM_FORCERESYNCINTERVAL | 60s | false | configures force resync interval for VMAgent, VMAlert, VMAlertmanager and VMAuth. | | VM_ENABLESTRICTSECURITY | false | false | EnableStrictSecurity will add default `securityContext` to pods and containers created by operator Default PodSecurityContext include: 1. RunAsNonRoot: true 2. RunAsUser/RunAsGroup/FSGroup: 65534 '65534' refers to 'nobody' in all the used default images like alpine, busybox. If you're using customize image, please make sure '65534' is a valid uid in there or specify SecurityContext. 3. FSGroupChangePolicy: &onRootMismatch If KubeVersion>=1.20, use `FSGroupChangePolicy="onRootMismatch"` to skip the recursive permission change when the root of the volume already has the correct permissions 4. SeccompProfile: type: RuntimeDefault Use `RuntimeDefault` seccomp profile by default, which is defined by the container runtime, instead of using the Unconfined (seccomp disabled) mode. Default container SecurityContext include: 1. AllowPrivilegeEscalation: false 2. ReadOnlyRootFilesystem: true 3. Capabilities: drop: - all turn off `EnableStrictSecurity` by default, see https://github.com/VictoriaMetrics/operator/issues/749 for details | -[envconfig-sum]: b82e81d45e7a9fe6a06ef0a77736d4c3 \ No newline at end of file +[envconfig-sum]: 73a7775dae545fdb60f3dd0ca0e84d31 \ No newline at end of file From 9e9583357d4a3aa097a1f62d76e7c1620bfd93c5 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Fri, 20 Sep 2024 16:06:15 +0200 Subject: [PATCH 066/128] docs add root menu to _index.md as homepage Signed-off-by: Artem Navoiev --- docs/_index.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/_index.md b/docs/_index.md index 182d0a87f7..b05a9015d6 100644 --- a/docs/_index.md +++ b/docs/_index.md @@ -1,4 +1,9 @@ --- title: VictoriaMetrics +menu: + docs: + weight: 10 + identifier: victoriametrics + pageRef: "/" --- {{% content "README.md" %}} From 8645438a792e54f4cb55eb2207ec17a056dcb813 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Fri, 20 Sep 2024 22:11:23 +0800 Subject: [PATCH 067/128] Automatic update helm docs from VictoriaMetrics/helm-charts@f0e007f (#7059) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: AndrewChubatiuk <3162380+AndrewChubatiuk@users.noreply.github.com> --- docs/helm/CHANGELOG.md | 12 + docs/helm/CONTRIBUTING.md | 76 + docs/helm/README.md | 136 + docs/helm/REQUIREMENTS.md | 135 + docs/helm/_index.md | 12 + docs/helm/victoria-logs-single/CHANGELOG.md | 258 ++ docs/helm/victoria-logs-single/README.md | 1091 +++++++ docs/helm/victoria-logs-single/_changelog.md | 13 + docs/helm/victoria-logs-single/_index.md | 13 + docs/helm/victoria-metrics-agent/CHANGELOG.md | 353 +++ docs/helm/victoria-metrics-agent/README.md | 1319 ++++++++ .../helm/victoria-metrics-agent/_changelog.md | 13 + docs/helm/victoria-metrics-agent/_index.md | 13 + docs/helm/victoria-metrics-alert/CHANGELOG.md | 320 ++ docs/helm/victoria-metrics-alert/README.md | 1699 ++++++++++ .../helm/victoria-metrics-alert/_changelog.md | 13 + docs/helm/victoria-metrics-alert/_index.md | 13 + .../victoria-metrics-anomaly/CHANGELOG.md | 288 ++ docs/helm/victoria-metrics-anomaly/README.md | 782 +++++ .../victoria-metrics-anomaly/_changelog.md | 13 + docs/helm/victoria-metrics-anomaly/_index.md | 13 + docs/helm/victoria-metrics-auth/CHANGELOG.md | 249 ++ docs/helm/victoria-metrics-auth/README.md | 891 ++++++ docs/helm/victoria-metrics-auth/_changelog.md | 13 + docs/helm/victoria-metrics-auth/_index.md | 13 + .../victoria-metrics-cluster/CHANGELOG.md | 438 +++ docs/helm/victoria-metrics-cluster/README.md | 2801 +++++++++++++++++ .../victoria-metrics-cluster/_changelog.md | 13 + docs/helm/victoria-metrics-cluster/_index.md | 13 + .../helm/victoria-metrics-common/CHANGELOG.md | 135 + .../victoria-metrics-distributed/CHANGELOG.md | 59 + .../victoria-metrics-distributed/README.md | 665 ++++ .../_changelog.md | 13 + .../victoria-metrics-distributed/_index.md | 13 + .../victoria-metrics-gateway/CHANGELOG.md | 257 ++ docs/helm/victoria-metrics-gateway/README.md | 924 ++++++ .../victoria-metrics-gateway/_changelog.md | 13 + docs/helm/victoria-metrics-gateway/_index.md | 13 + .../victoria-metrics-k8s-stack/CHANGELOG.md | 688 ++++ .../helm/victoria-metrics-k8s-stack/README.md | 2576 +++++++++++++++ .../RELEASE_GUIDE.md | 40 + .../victoria-metrics-k8s-stack/_changelog.md | 13 + .../helm/victoria-metrics-k8s-stack/_index.md | 13 + docs/helm/victoria-metrics-k8s-stack/todo.md | 26 + .../victoria-metrics-operator/CHANGELOG.md | 545 ++++ docs/helm/victoria-metrics-operator/README.md | 918 ++++++ .../victoria-metrics-operator/_changelog.md | 13 + docs/helm/victoria-metrics-operator/_index.md | 13 + .../helm/victoria-metrics-single/CHANGELOG.md | 326 ++ docs/helm/victoria-metrics-single/README.md | 2258 +++++++++++++ .../victoria-metrics-single/_changelog.md | 13 + docs/helm/victoria-metrics-single/_index.md | 13 + 52 files changed, 20563 insertions(+) create mode 100644 docs/helm/CHANGELOG.md create mode 100644 docs/helm/CONTRIBUTING.md create mode 100644 docs/helm/README.md create mode 100644 docs/helm/REQUIREMENTS.md create mode 100644 docs/helm/_index.md create mode 100644 docs/helm/victoria-logs-single/CHANGELOG.md create mode 100644 docs/helm/victoria-logs-single/README.md create mode 100644 docs/helm/victoria-logs-single/_changelog.md create mode 100644 docs/helm/victoria-logs-single/_index.md create mode 100644 docs/helm/victoria-metrics-agent/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-agent/README.md create mode 100644 docs/helm/victoria-metrics-agent/_changelog.md create mode 100644 docs/helm/victoria-metrics-agent/_index.md create mode 100644 docs/helm/victoria-metrics-alert/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-alert/README.md create mode 100644 docs/helm/victoria-metrics-alert/_changelog.md create mode 100644 docs/helm/victoria-metrics-alert/_index.md create mode 100644 docs/helm/victoria-metrics-anomaly/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-anomaly/README.md create mode 100644 docs/helm/victoria-metrics-anomaly/_changelog.md create mode 100644 docs/helm/victoria-metrics-anomaly/_index.md create mode 100644 docs/helm/victoria-metrics-auth/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-auth/README.md create mode 100644 docs/helm/victoria-metrics-auth/_changelog.md create mode 100644 docs/helm/victoria-metrics-auth/_index.md create mode 100644 docs/helm/victoria-metrics-cluster/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-cluster/README.md create mode 100644 docs/helm/victoria-metrics-cluster/_changelog.md create mode 100644 docs/helm/victoria-metrics-cluster/_index.md create mode 100644 docs/helm/victoria-metrics-common/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-distributed/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-distributed/README.md create mode 100644 docs/helm/victoria-metrics-distributed/_changelog.md create mode 100644 docs/helm/victoria-metrics-distributed/_index.md create mode 100644 docs/helm/victoria-metrics-gateway/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-gateway/README.md create mode 100644 docs/helm/victoria-metrics-gateway/_changelog.md create mode 100644 docs/helm/victoria-metrics-gateway/_index.md create mode 100644 docs/helm/victoria-metrics-k8s-stack/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-k8s-stack/README.md create mode 100644 docs/helm/victoria-metrics-k8s-stack/RELEASE_GUIDE.md create mode 100644 docs/helm/victoria-metrics-k8s-stack/_changelog.md create mode 100644 docs/helm/victoria-metrics-k8s-stack/_index.md create mode 100644 docs/helm/victoria-metrics-k8s-stack/todo.md create mode 100644 docs/helm/victoria-metrics-operator/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-operator/README.md create mode 100644 docs/helm/victoria-metrics-operator/_changelog.md create mode 100644 docs/helm/victoria-metrics-operator/_index.md create mode 100644 docs/helm/victoria-metrics-single/CHANGELOG.md create mode 100644 docs/helm/victoria-metrics-single/README.md create mode 100644 docs/helm/victoria-metrics-single/_changelog.md create mode 100644 docs/helm/victoria-metrics-single/_index.md diff --git a/docs/helm/CHANGELOG.md b/docs/helm/CHANGELOG.md new file mode 100644 index 0000000000..5d2a85708c --- /dev/null +++ b/docs/helm/CHANGELOG.md @@ -0,0 +1,12 @@ +# CHANGELOG + +- See [CHANGELOG for `victoria-logs-single` helm chart](charts/victoria-logs-single/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-agent` helm chart](charts/victoria-metrics-agent/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-alert` helm chart](charts/victoria-metrics-alert/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-anomaly` helm chart](charts/victoria-metrics-anomaly/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-auth` helm chart](charts/victoria-metrics-auth/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-cluster` helm chart](charts/victoria-metrics-cluster/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-gateway` helm chart](charts/victoria-metrics-gateway/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-k8s-stack` helm chart](charts/victoria-metrics-k8s-stack/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-operator` helm chart](charts/victoria-metrics-operator/CHANGELOG.md) +- See [CHANGELOG for `victoria-metrics-single` helm chart](charts/victoria-metrics-single/CHANGELOG.md) diff --git a/docs/helm/CONTRIBUTING.md b/docs/helm/CONTRIBUTING.md new file mode 100644 index 0000000000..81fddfeed2 --- /dev/null +++ b/docs/helm/CONTRIBUTING.md @@ -0,0 +1,76 @@ +# Contributing + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](REQUIREMENTS.md). +* [OPTIONAL] Configure authentication on your Github account to use the SSH protocol instead of HTTP. Watch this tutorial to learn how to set up: https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account +* Create a fork this repository. +* Clone the forked repository to your local system: + +```bash +git clone URL_FORKED_REPOSITORY +``` + +* Add the address for the remote original repository: + +```bash +git remote -v +git remote add upstream https://github.com/VictoriaMetrics/helm-charts +git remote -v +``` + +* Create a branch. Example: + +```bash +git checkout -b BRANCH_NAME +``` + +* Make sure you are on the correct branch using the following command. The branch in use contains the '*' before the name. + +```bash +git branch +``` + +* Make your changes and tests to the new branch. +* Run command ``helm-docs`` to update content of ``README.md`` file of all charts using the ``README.md.gotmpl`` template. +* Commit the changes to the branch. +* Push files to repository remote with command: + +```bash +git push --set-upstream origin BRANCH_NAME +``` + +* Create Pull Request (PR) to the `master` branch. See this [tutorial](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork) +* Update the content with the suggestions of the reviewer (if necessary). +* After your pull request is merged to the `master` branch, update your local clone: + +```bash +git checkout master +git pull upstream master +``` + +* Clean up after your pull request is merged with command: + +```bash +git branch -d BRANCH_NAME +``` + +* Then you can update the ``master`` branch in your forked repository. + +```bash +git push origin master +``` + +* And push the deletion of the feature branch to your GitHub repository with command: + +```bash +git push --delete origin BRANCH_NAME +``` + +* To keep your fork in sync with the original repository, use these commands: + +```bash +git pull upstream master +git push origin master +``` + +Reference: +* https://blog.scottlowe.org/2015/01/27/using-fork-branch-git-workflow/ \ No newline at end of file diff --git a/docs/helm/README.md b/docs/helm/README.md new file mode 100644 index 0000000000..b01b9069c3 --- /dev/null +++ b/docs/helm/README.md @@ -0,0 +1,136 @@ +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/search?repo=victoriametrics&verified_publisher=true) +[![License](https://img.shields.io/github/license/VictoriaMetrics/VictoriaMetrics.svg)](https://github.com/VictoriaMetrics/helm-charts/blob/master/LICENSE) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +This repository contains helm charts for VictoriaMetrics and VictoriaLogs. + +## Add a chart helm repository (can be skipped for OCI repository) + +Access a Kubernetes cluster. + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` + +List [all charts](#list-of-charts) and versions of `vm` repository available to installation: + +```console +helm search repo vm/ +``` + +The command must display existing helm chart e.g. + +```shell +NAME CHART VERSION APP VERSION DESCRIPTION +vm/victoria-logs-single 0.5.2 v0.15.0-victorialogs Victoria Logs Single version - high-performance... +vm/victoria-metrics-agent 0.10.9 v1.101.0 Victoria Metrics Agent - collects metrics from ... +vm/victoria-metrics-alert 0.9.9 v1.101.0 Victoria Metrics Alert - executes a list of giv... +vm/victoria-metrics-anomaly 1.3.0 v1.13.0 Victoria Metrics Anomaly Detection - a service ... +vm/victoria-metrics-auth 0.4.13 v1.101.0 Victoria Metrics Auth - is a simple auth proxy ... +vm/victoria-metrics-cluster 0.11.19 v1.101.0 Victoria Metrics Cluster version - high-perform... +vm/victoria-metrics-distributed 0.1.0 v1.101.0 A Helm chart for Running VMCluster on Multiple ... +vm/victoria-metrics-gateway 0.1.62 v1.101.0 Victoria Metrics Gateway - Auth & Rate-Limittin... +vm/victoria-metrics-k8s-stack 0.23.2 v1.101.0 Kubernetes monitoring on VictoriaMetrics stack.... +vm/victoria-metrics-operator 0.32.2 v0.45.0 Victoria Metrics Operator +vm/victoria-metrics-single 0.9.22 v1.101.0 Victoria Metrics Single version - high-performa... +``` + +## Installing the chart + +Export default values of `victoria-metrics-cluster` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-cluster > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-agent > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install victoria-metrics vm/victoria-metrics-cluster -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install victoria-metrics oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-cluster -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install victoria-metrics vm/victoria-metrics-cluster -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install victoria-metrics oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-cluster -f values.yaml -n NAMESPACE + ``` + +## Validate installation + +Get the pods lists by running these commands: + +```console +kubectl get pods -A | grep 'victoria-metrics' + +# or list all resorces of victoria-metrics + +kubectl get all -n NAMESPACE | grep victoria +``` + +Get the application by running this commands: + +```console +helm list -f victoria-metrics -n NAMESPACE +``` + +See the history of versions of ``victoria-metrics`` application with command. + +```console +helm history victoria-metrics -n NAMESPACE +``` + +## How to uninstall VictoriaMetrics + +Remove application with command. + +```console +helm uninstall victoria-metrics -n NAMESPACE +``` + +## Kubernetes compatibility versions + +helm charts tested at kubernetes versions from 1.28 to 1.30. + +## List of Charts + +- [Victoria Logs Single-Node](./charts/victoria-logs-single) +- [Victoria Metrics Agent](./charts/victoria-metrics-agent) +- [Victoria Metrics Alert](./charts/victoria-metrics-alert) +- [Victoria Metrics Anomaly](./charts/victoria-metrics-anomaly) +- [Victoria Metrics Auth](./charts/victoria-metrics-auth) +- [Victoria Metrics Cluster](./charts/victoria-metrics-cluster) +- [Victoria Metrics Gateway](./charts/victoria-metrics-gateway) +- [Victoria Metrics Distributed](./charts/victoria-metrics-distributed) +- [Victoria Metrics k8s Stack](./charts/victoria-metrics-k8s-stack) +- [Victoria Metrics Operator](./charts/victoria-metrics-operator) +- [Victoria Metrics Single-node](./charts/victoria-metrics-single) diff --git a/docs/helm/REQUIREMENTS.md b/docs/helm/REQUIREMENTS.md new file mode 100644 index 0000000000..23c93fb53c --- /dev/null +++ b/docs/helm/REQUIREMENTS.md @@ -0,0 +1,135 @@ +# Prerequisites to develop and test Helm Charts + +## Kubernetes Cluster + +You will need to create a Kubernetes cluster locally using [minikube](https://kubernetes.io/docs/tasks/tools/install-minikube), [microk8s](https://microk8s.io), [kind](https://kind.sigs.k8s.io), [k3s](https://k3s.io) or other tools. + +Or use Kubernetes cluster in [EKS](https://aws.amazon.com/eks), [GKE](https://cloud.google.com/kubernetes-engine), [AKS](https://docs.microsoft.com/en-us/azure/aks), [DOKS](https://www.digitalocean.com/products/kubernetes) or other cloud provider. + +## Install Docker-CE + +Follow instructions of page for install Docker-CE. + +* Ubuntu: https://docs.docker.com/install/linux/docker-ce/ubuntu/ +* Debian: https://docs.docker.com/install/linux/docker-ce/debian/ +* CentOS: https://docs.docker.com/install/linux/docker-ce/centos/ +* MacOS: https://docs.docker.com/docker-for-mac/install/ + +Start the Docker service, configure Docker to boot up with the OS and add your user to the Docker group. + +```bash +# Start the Docker service +sudo systemctl start docker + +# Configure Docker to boot up with the OS +sudo systemctl enable docker + +# Add your user to the Docker group +sudo usermod -aG docker $USER +sudo setfacl -m user:$USER:rw /var/run/docker.sock +``` + +Source: https://docs.docker.com/engine/install/linux-postinstall/#configure-docker-to-start-on-boot + +## Install Kubectl + +Simple shell function for Kubectl installation in Linux 64 bits. Copy and paste this code: + +```bash +sudo su + +VERSION=v1.22.2 +KUBECTL_BIN=kubectl + +function install_kubectl { +if [ -z $(which $KUBECTL_BIN) ]; then + curl -LO https://storage.googleapis.com/kubernetes-release/release/$VERSION/bin/linux/amd64/$KUBECTL_BIN + chmod +x ${KUBECTL_BIN} + sudo mv ${KUBECTL_BIN} /usr/local/bin/${KUBECTL_BIN} + sudo ln -sf /usr/local/bin/${KUBECTL_BIN} /usr/bin/${KUBECTL_BIN} +else + echo "Kubectl is most likely installed" +fi +} + +install_kubectl + +which kubectl + +kubectl version --client + +exit +``` + +Kubectl documentation: + +https://kubernetes.io/docs/reference/kubectl/overview/ + +**Credits:** Juan Pablo Perez - https://www.linkedin.com/in/juanpabloperezpeelmicro/ + +https://github.com/peelmicro/learn-devops-the-complete-kubernetes-course + +## Helm Docs + +Run the following commands to install ``helm-docs``. + +```bash +HELM_DOCS_VERSION=1.5.0 +HELM_DOCS_PACKAGE=helm-docs_``$HELM_DOCS_VERSION``_linux_x86_64.tar.gz + +cd /tmp + +wget https://github.com/norwoodj/helm-docs/releases/download/v$HELM_DOCS_VERSION/$HELM_DOCS_PACKAGE + +tar xzvf $HELM_DOCS_PACKAGE + +sudo mv helm-docs /usr/local/bin/ + +sudo chmod +rx /usr/local/bin/helm-docs + +helm-docs --version +``` + +Documentation: https://github.com/norwoodj/helm-docs + +The documentation generated by ``helm-docs`` is based on the contents of the ``values.yaml``, ``README.md.gotmpl`` and ``Chart.yaml`` file. It tries to overwrite the contents of the ``README.md`` file within the chart directory. + +## Install Helm 3 + +Execute these commands to install helm 3.14+. + +```bash +sudo su + +HELM_TAR_FILE=helm-v3.15.3-linux-amd64.tar.gz +HELM_URL=https://get.helm.sh +HELM_BIN=helm3 + +function install_helm3 { + +if [ -z $(which $HELM_BIN) ]; then + wget ${HELM_URL}/${HELM_TAR_FILE} + tar -xvzf ${HELM_TAR_FILE} + chmod +x linux-amd64/helm + sudo cp linux-amd64/helm /usr/local/bin/$HELM_BIN + sudo ln -sfn /usr/local/bin/$HELM_BIN /usr/local/bin/helm + rm -rf ${HELM_TAR_FILE} linux-amd64 + echo -e "\nwhich ${HELM_BIN}" + which ${HELM_BIN} +else + echo "Helm 3 is most likely installed" +fi +} + +install_helm3 +which $HELM_BIN +$HELM_BIN version + +exit +``` + +Documentation: https://helm.sh/docs/ + +**Credits**: Juan Pablo Perez - https://www.linkedin.com/in/juanpabloperezpeelmicro/ + +https://github.com/peelmicro/learn-devops-the-complete-kubernetes-course diff --git a/docs/helm/_index.md b/docs/helm/_index.md new file mode 100644 index 0000000000..d3de7b0f53 --- /dev/null +++ b/docs/helm/_index.md @@ -0,0 +1,12 @@ +--- +weight: 0 +title: Helm Charts +menu: + docs: + weight: 0 + identifier: helm +aliases: + - /helm + - /helm/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-logs-single/CHANGELOG.md b/docs/helm/victoria-logs-single/CHANGELOG.md new file mode 100644 index 0000000000..25e156d448 --- /dev/null +++ b/docs/helm/victoria-logs-single/CHANGELOG.md @@ -0,0 +1,258 @@ +## Next release + +- TODO + +## 0.6.3 + +**Release date:** 2024-09-16 + +![AppVersion: v0.28.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.28.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Avoid variant if tag is set explicitly + +## 0.6.2 + +**Release date:** 2024-09-12 + +![AppVersion: v0.28.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.28.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Made replicas configurable +- Allow override default for statefulset headless service + +## 0.6.1 + +**Release date:** 2024-09-03 + +![AppVersion: v0.28.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.28.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to configure container port +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Renamed `.Values.server.persistentVolume.storageClass` to `.Values.server.persistentVolume.storageClassName` +- Removed necessity to set `.Values.server.persistentVolume.existingClaim` when volume is expected to be created by chart. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/189) +- Fixed PVC in StatefulSet + +## 0.6.0 + +**Release date:** 2024-08-21 + +![AppVersion: v0.28.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.28.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +**Update note**: main container name was changed to `vlogs`, which will recreate a pod. + +**Update note**: requires Helm 3.14+ + +- Added `basicAuth` support for `ServiceMonitor` +- Set minimal kubernetes version to `1.25` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Updated `.Values.server.readinessProbe` to `.Values.server.probe.readiness` +- Updated `.Values.server.livenessProbe` to `.Values.server.probe.liveness` +- Updated `.Values.server.startupProbe` to `.Values.server.probe.startup` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Added `.Values.server.emptyDir` to customize default data directory +- Merged headless and non-headless services, removed statefulset service specific variables +- Use static container names in a pod +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Added `.Values.server.service.ipFamilies` and `.Values.server.service.ipFamilyPolicy` for service IP family management + +## 0.5.4 + +**Release date:** 2024-07-25 + +![AppVersion: v0.28.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.28.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- update VictoriaLogs to [v0.28.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.28.0-victorialogs). + +## 0.5.3 + +**Release date:** 2024-07-08 + +![AppVersion: v0.15.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.15.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add missing API version and kind for volumeClaimTemplates, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1092). + +## 0.5.2 + +**Release date:** 2024-06-17 + +![AppVersion: v0.15.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.15.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix invalid label selector usage in notes printed after chart installation + +## 0.5.1 + +**Release date:** 2024-05-30 + +![AppVersion: v0.15.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.15.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaLogs to [v0.15.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.15.0-victorialogs). + +## 0.5.0 + +**Release date:** 2024-05-23 + +![AppVersion: v0.8.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.8.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update fluent-bit chart to 0.46.7 and fluentbit to 3.0.4 +- Update VictoriaLogs version to 0.9.1 + +## 0.4.0 + +**Release date:** 2024-05-20 + +![AppVersion: v0.8.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.8.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Upgrade VictoriaLogs to [v0.8.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.8.0-victorialogs) +- Move `.Values.server.name`, `.Values.server.fullnameOverride` to `.Values.global.victoriaLogs.server`. This allows to avoid issues with Fluent Bit output definition. See the [pull request]() for the details. +- Include `kubernetes_namespace_name` field in the [stream fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) configuration of Fluent Bit output. + +## 0.3.8 + +**Release date:** 2024-05-10 + +![AppVersion: v0.5.2-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.5.2-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.3.7 + +**Release date:** 2024-04-16 + +![AppVersion: v0.5.2-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.5.2-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of victorialogs to [0.5.2](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.5.2-victorialogs) + +## 0.3.6 + +**Release date:** 2024-03-28 + +![AppVersion: v0.5.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.5.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.3.5 + +**Release date:** 2024-03-05 + +![AppVersion: v0.5.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.5.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of vlogs single to [0.5.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.5.0-victorialogs) + +## 0.3.4 + +**Release date:** 2023-11-15 + +![AppVersion: v0.4.2-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.4.2-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of vlogs single to [0.4.2](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.4.2-victorialogs) + +## 0.3.3 + +**Release date:** 2023-10-10 + +![AppVersion: v0.4.1-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.4.1-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add `kubernetes_container_name` into default [stream fields](https://docs.victoriametrics.com/victorialogs/keyconcepts#stream-fields) configuration `fluent-bit`. + +## 0.3.2 + +**Release date:** 2023-10-04 + +![AppVersion: v0.4.1-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.4.1-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of vlogs single to [0.4.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.4.1-victorialogs) + +## 0.3.1 + +**Release date:** 2023-09-13 + +![AppVersion: v0.3.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.3.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* added: extraObjects: [] for dynamic supportive objects configuration + +## 0.3.0 + +**Release date:** 2023-08-15 + +![AppVersion: v0.3.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.3.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* vlogs-single: update to 0.3.0 (#598) +* Remove repeated volumeMounts section (#610) + +## 0.1.3 + +**Release date:** 2023-07-27 + +![AppVersion: v0.3.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.3.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* vlogs-single: fix podSecurityContext and securityContext usage (#597) +* charts/victoria-logs-single: fix STS render when using statefulset is disabled (#585) +* charts/victoria-logs-single: add imagePullSecrets (#586) + +## 0.1.2 + +**Release date:** 2023-06-23 + +![AppVersion: v0.1.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.1.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* bump version of logs single +* Fix wrong condition on fluent-bit dependency (#568) + +### Default value changes + +```diff +# No changes in this release +``` + +## 0.1.1 + +**Release date:** 2023-06-22 + +![AppVersion: v0.1.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.1.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* charts/victoria-logs-single: template Host field (#566) + +## 0.1.0 + +**Release date:** 2023-06-22 + +![AppVersion: v0.1.0-victorialogs](https://img.shields.io/static/v1?label=AppVersion&message=v0.1.0-victorialogs&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* fix the chart image and jsonline endpoint +* add victoria-logs to build process, make package +* charts/victoria-logs-single: add fluentbit setup (#563) + +## 0.0.1 + +**Release date:** 2023-06-12 + +![AppVersion: v0.0.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.0.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* charts/victoria-logs-single: add new chart (#560) diff --git a/docs/helm/victoria-logs-single/README.md b/docs/helm/victoria-logs-single/README.md new file mode 100644 index 0000000000..af0c308d38 --- /dev/null +++ b/docs/helm/victoria-logs-single/README.md @@ -0,0 +1,1091 @@ + ![Version: 0.6.3](https://img.shields.io/badge/Version-0.6.3-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-logs-single) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +Victoria Logs Single version - high-performance, cost-effective and scalable logs storage + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +* PV support on underlying infrastructure. + +## Chart Details + +This chart will do the following: + +* Rollout Victoria Logs Single. +* (optional) Rollout [fluentbit](https://fluentbit.io/) to collect logs from pods. + +Chart allows to configure logs collection from Kubernetes pods to VictoriaLogs. +In order to do that you need to enable fluentbit: +```yaml +fluent-bit: + enabled: true +``` +By default, fluentbit will forward logs to VictoriaLogs installation deployed by this chart. + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-logs-single` chart available to installation: + +```console +helm search repo vm/victoria-logs-single -l +``` + +### Install `victoria-logs-single` chart + +Export default values of `victoria-logs-single` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-logs-single > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-logs-single > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vls vm/victoria-logs-single -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vls oci://ghcr.io/victoriametrics/helm-charts/victoria-logs-single -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vls vm/victoria-logs-single -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vls oci://ghcr.io/victoriametrics/helm-charts/victoria-logs-single -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vls' +``` + +Get the application by running this command: + +```console +helm list -f vls -n NAMESPACE +``` + +See the history of versions of `vls` application with command. + +```console +helm history vls -n NAMESPACE +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vls -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-logs-single + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-logs-single/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    fluent-bit.config.filterstpl
    +fluent-bit.config.filters: |
    +  [FILTER]
    +      Name kubernetes
    +      Match kube.*
    +      Merge_Log On
    +      Keep_Log On
    +      K8S-Logging.Parser On
    +      K8S-Logging.Exclude On
    +  [FILTER]
    +      Name                nest
    +      Match               *
    +      Wildcard            pod_name
    +      Operation lift
    +      Nested_under kubernetes
    +      Add_prefix   kubernetes_
    + 
    +
    +

    FluentBit configuration filters

    +
    fluent-bit.config.outputstpl
    +fluent-bit.config.outputs: |
    +  [OUTPUT]
    +      Name http
    +      Match kube.*
    +      Host '{{ include "victoria-logs.server.fullname" . }}'
    +      port 9428
    +      compress gzip
    +      uri /insert/jsonline?_stream_fields=stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name&_msg_field=log&_time_field=date
    +      format json_lines
    +      json_date_format iso8601
    +      header AccountID 0
    +      header ProjectID 0
    + 
    +
    +

    Note that Host must be replaced to match your VictoriaLogs service name Default format points to VictoriaLogs service.

    +
    fluent-bit.daemonSetVolumeMounts[0].mountPathstring
    +/var/log
    +
    +
    fluent-bit.daemonSetVolumeMounts[0].namestring
    +varlog
    +
    +
    fluent-bit.daemonSetVolumeMounts[1].mountPathstring
    +/var/lib/docker/containers
    +
    +
    fluent-bit.daemonSetVolumeMounts[1].namestring
    +varlibdockercontainers
    +
    +
    fluent-bit.daemonSetVolumeMounts[1].readOnlybool
    +true
    +
    +
    fluent-bit.daemonSetVolumes[0].hostPath.pathstring
    +/var/log
    +
    +
    fluent-bit.daemonSetVolumes[0].namestring
    +varlog
    +
    +
    fluent-bit.daemonSetVolumes[1].hostPath.pathstring
    +/var/lib/docker/containers
    +
    +
    fluent-bit.daemonSetVolumes[1].namestring
    +varlibdockercontainers
    +
    +
    fluent-bit.enabledbool
    +false
    +
    +

    Enable deployment of fluent-bit

    +
    fluent-bit.resourcesobject
    +{}
    +
    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    global.nameOverridestring
    +""
    +
    +
    global.victoriaLogs.server.fullnameOverridestring
    +null
    +
    +

    Overrides the full name of server component

    +
    global.victoriaLogs.server.namestring
    +server
    +
    +

    Server container name

    +
    podDisruptionBudget.enabledbool
    +false
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    podDisruptionBudget.extraLabelsobject
    +{}
    +
    +
    printNotesbool
    +true
    +
    +

    Print chart notes

    +
    server.affinityobject
    +{}
    +
    +

    Pod affinity

    +
    server.containerWorkingDirstring
    +""
    +
    +

    Container workdir

    +
    server.emptyDirobject
    +{}
    +
    +

    Use an alternate scheduler, e.g. “stork”. ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ schedulerName:

    +
    server.enabledbool
    +true
    +
    +

    Enable deployment of server component. Deployed as StatefulSet

    +
    server.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables

    +
    server.envFromlist
    +[]
    +
    +
    server.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
    +

    Extra command line arguments for container of component

    +
    server.extraContainerslist
    +[]
    +
    +

    Extra containers to run in a pod with Victoria Logs container

    +
    server.extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    server.extraLabelsobject
    +{}
    +
    +

    Sts/Deploy additional labels

    +
    server.extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    server.extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    server.image.pullPolicystring
    +IfNotPresent
    +
    +

    Image pull policy

    +
    server.image.registrystring
    +""
    +
    +

    Image registry

    +
    server.image.repositorystring
    +victoriametrics/victoria-logs
    +
    +

    Image repository

    +
    server.image.tagstring
    +""
    +
    +

    Image tag

    +
    server.image.variantstring
    +victorialogs
    +
    +
    server.imagePullSecretslist
    +[]
    +
    +

    Image pull secrets

    +
    server.ingress.annotationsstring
    +null
    +
    +

    Ingress annotations

    +
    server.ingress.enabledbool
    +false
    +
    +

    Enable deployment of ingress for server component

    +
    server.ingress.extraLabelsobject
    +{}
    +
    +

    Ingress extra labels

    +
    server.ingress.hostslist
    +[]
    +
    +
    server.ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    server.ingress.tlslist
    +[]
    +
    +

    Array of TLS objects

    +
    server.initContainerslist
    +[]
    +
    +

    Init containers for Victoria Logs Pod

    +
    server.nodeSelectorobject
    +{}
    +
    +

    Pod’s node selector. Details are here

    +
    server.persistentVolume.accessModeslist
    +- ReadWriteOnce
    +
    +

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    +
    server.persistentVolume.annotationsobject
    +{}
    +
    +

    Persistant volume annotations

    +
    server.persistentVolume.enabledbool
    +false
    +
    +

    Create/use Persistent Volume Claim for server component. Empty dir if false

    +
    server.persistentVolume.existingClaimstring
    +""
    +
    +

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    +
    server.persistentVolume.matchLabelsobject
    +{}
    +
    +

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    +
    server.persistentVolume.mountPathstring
    +/storage
    +
    +

    Mount path. Server data Persistent Volume mount root path.

    +
    server.persistentVolume.sizestring
    +3Gi
    +
    +

    Size of the volume. Should be calculated based on the logs you send and retention policy you set.

    +
    server.persistentVolume.storageClassNamestring
    +""
    +
    +

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    +
    server.persistentVolume.subPathstring
    +""
    +
    +

    Mount subpath

    +
    server.podAnnotationsobject
    +{}
    +
    +

    Pod’s annotations

    +
    server.podLabelsobject
    +{}
    +
    +

    Pod’s additional labels

    +
    server.podManagementPolicystring
    +OrderedReady
    +
    +

    Pod’s management policy

    +
    server.podSecurityContextobject
    +enabled: true
    +fsGroup: 2000
    +runAsNonRoot: true
    +runAsUser: 1000
    +
    +

    Pod’s security context. Details are here

    +
    server.priorityClassNamestring
    +""
    +
    +

    Name of Priority Class

    +
    server.probe.livenessobject
    +failureThreshold: 10
    +initialDelaySeconds: 30
    +periodSeconds: 30
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success.

    +
    server.probe.readinessobject
    +failureThreshold: 3
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod’s IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success.

    +
    server.probe.startupobject
    +{}
    +
    +

    Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over.

    +
    server.replicaCountint
    +1
    +
    +

    Replica count

    +
    server.resourcesobject
    +{}
    +
    +

    Resource object. Details are here

    +
    server.retentionPeriodint
    +1
    +
    +

    Data retention period in month

    +
    server.securityContextobject
    +allowPrivilegeEscalation: false
    +capabilities:
    +    drop:
    +        - ALL
    +enabled: true
    +readOnlyRootFilesystem: true
    +
    +

    Security context to be added to server pods

    +
    server.service.annotationsobject
    +{}
    +
    +

    Service annotations

    +
    server.service.clusterIPstring
    +""
    +
    +

    Service ClusterIP

    +
    server.service.externalIPslist
    +[]
    +
    +

    Service External IPs. Details are here

    +
    server.service.externalTrafficPolicystring
    +""
    +
    +
    server.service.healthCheckNodePortstring
    +""
    +
    +
    server.service.ipFamilieslist
    +[]
    +
    +
    server.service.ipFamilyPolicystring
    +""
    +
    +
    server.service.labelsobject
    +{}
    +
    +

    Service labels

    +
    server.service.loadBalancerIPstring
    +""
    +
    +

    Service load balacner IP

    +
    server.service.loadBalancerSourceRangeslist
    +[]
    +
    +

    Load balancer source range

    +
    server.service.servicePortint
    +9428
    +
    +

    Service port

    +
    server.service.typestring
    +ClusterIP
    +
    +

    Service type

    +
    server.serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    server.serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    server.serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    +
    server.serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    server.serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    server.serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    server.statefulSet.enabledbool
    +true
    +
    +

    Creates statefulset instead of deployment, useful when you want to keep the cache

    +
    server.statefulSet.podManagementPolicystring
    +OrderedReady
    +
    +

    Deploy order policy for StatefulSet pods

    +
    server.terminationGracePeriodSecondsint
    +60
    +
    +

    Pod’s termination grace period in seconds

    +
    server.tolerationslist
    +[]
    +
    +

    Node tolerations for server scheduling to nodes with taints. Details are here

    +
    + diff --git a/docs/helm/victoria-logs-single/_changelog.md b/docs/helm/victoria-logs-single/_changelog.md new file mode 100644 index 0000000000..5e29958b43 --- /dev/null +++ b/docs/helm/victoria-logs-single/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victorialogs-single-changelog + parent: helm-victorialogs-single +url: /helm/victorialogs-single/changelog +aliases: + - /helm/victorialogs-single/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-logs-single/_index.md b/docs/helm/victoria-logs-single/_index.md new file mode 100644 index 0000000000..7303996b0b --- /dev/null +++ b/docs/helm/victoria-logs-single/_index.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: VictoriaLogs Single +menu: + docs: + parent: helm + weight: 1 + identifier: helm-victorialogs-single +url: /helm/victorialogs-single +aliases: + - /helm/victorialogs-single/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-agent/CHANGELOG.md b/docs/helm/victoria-metrics-agent/CHANGELOG.md new file mode 100644 index 0000000000..4eaa638a36 --- /dev/null +++ b/docs/helm/victoria-metrics-agent/CHANGELOG.md @@ -0,0 +1,353 @@ +## Next release + +- Fail if no remoteWriteUrls set + +## 0.12.2 + +**Release date:** 2024-09-12 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Removed deprecated API from RBAC. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1438) + +## 0.12.1 + +**Release date:** 2024-09-03 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fixed PVC in StatefulSet + +## 0.12.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Added ability to configure container port +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Removed necessity to set `.Values.persistentVolume.existingClaim` when volume is expected to be created by chart. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/189) + +## 0.11.0 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: main container name was changed to `vmagent`, which will recreate a pod. + +**Update note**: requires Helm 3.14+ + +- Removed `PodSecurityPolicy` +- Set minimal kubernetes version to `1.25` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Added params to configure probes `.Values.probe.readiness`, `.Values.probe.liveness` and `.Values.probe.startup` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Added `.Values.emptyDir` to customize default cache directory +- Use static container names in a pod +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Added `.Values.service.ipFamilies` and `.Values.service.ipFamilyPolicy` for service IP family management + +## 0.10.14 + +**Release date:** 2024-08-14 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add basicAuth support for ServiceMonitor +- fix license volume mount when using statefulset mode + +## 0.10.13 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.10.12 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix possible template error when `.Values.rbac.namespaced=true`. Thanks to @guptaachin for [the pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1179). + +## 0.10.11 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.10.10 + +**Release date:** 2024-07-08 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add missing API version and kind for volumeClaimTemplates, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1092). + +## 0.10.9 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.10.8 + +**Release date:** 2024-05-16 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 0.10.7 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.10.6 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.10.5 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +## 0.10.4 + +**Release date:** 2024-03-28 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.10.3 + +**Release date:** 2024-03-11 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Actually fix templating of HPA for vmagent. Previously, it was rendered with incorrect `kind` and thus was unusable. See [this pull request](https://github.com/VictoriaMetrics/helm-charts/pull/922). + +## 0.10.2 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.10.1 + +**Release date:** 2024-03-05 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix templating of HPA for vmagent. Previously, it was rendered with incorrect `kind` and thus was unusable. See [this pull request](https://github.com/VictoriaMetrics/helm-charts/pull/905). + +## 0.10.0 + +**Release date:** 2024-02-28 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add ability to use HPA for vmagent. See [this](https://github.com/VictoriaMetrics/helm-charts/pull/863) pull request. + +## 0.9.17 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) + +## 0.9.16 + +**Release date:** 2023-12-20 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add init containers for deployment and statefulset. See [#806](https://github.com/VictoriaMetrics/helm-charts/pull/806) by @MemberIT. + +## 0.9.15 + +**Release date:** 2023-12-13 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix configuration of volume mount for license key referenced by using secret. + +## 0.9.14 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) + +## 0.9.13 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.9.12 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) + +## 0.9.11 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) +- Add support of providing enterprise license key for VictoriaMetrics enterprise. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.9.10 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.9.9 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) + +## 0.9.8 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of vmagent to `v1.93.3` + +## 0.9.6 + +**Release date:** 2023-08-30 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix `honor_timestamps` field for cadvisor scrape job (#626) + +## 0.9.5 + +**Release date:** 2023-08-24 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Disable `honorTimestamps` for cadvisor scrape job by default (#617) + +## 0.9.4 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.9.3 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 + +## 0.9.2 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.9.1 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 +- make package merge gen-docs + +## 0.9.0 + +**Release date:** 2023-07-13 + +![AppVersion: v1.91.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.91.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of agent, alert, auth, cluster, single +- feat(vmagent): Add support for topologySpreadConstraints field (#583) +- Feat: Add custom objects to vma helm charts (#558) +- fix(vmagent): Use endpoints instead of endpointslices on kubernetes-apiservers (#574) diff --git a/docs/helm/victoria-metrics-agent/README.md b/docs/helm/victoria-metrics-agent/README.md new file mode 100644 index 0000000000..0e06b28611 --- /dev/null +++ b/docs/helm/victoria-metrics-agent/README.md @@ -0,0 +1,1319 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.12.2](https://img.shields.io/badge/Version-0.12.2-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-agent) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +Victoria Metrics Agent - collects metrics from various sources and stores them to VictoriaMetrics + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-agent` chart available to installation: + +```console +helm search repo vm/victoria-metrics-agent -l +``` + +### Install `victoria-metrics-agent` chart + +Export default values of `victoria-metrics-agent` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-agent > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-agent > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-agent -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-agent -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-agent -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-agent -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vma' +``` + +Get the application by running this command: + +```console +helm list -f vma -n NAMESPACE +``` + +See the history of versions of `vma` application with command. + +```console +helm history vma -n NAMESPACE +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vma -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-agent + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-agent/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    affinityobject
    +{}
    +
    +
    annotationsobject
    +{}
    +
    +

    Annotations to be added to the deployment

    +
    config.global.scrape_intervalstring
    +10s
    +
    +
    config.scrape_configslist
    +- job_name: vmagent
    +  static_configs:
    +    - targets:
    +        - localhost:8429
    +- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +  job_name: kubernetes-apiservers
    +  kubernetes_sd_configs:
    +    - role: endpoints
    +  relabel_configs:
    +    - action: keep
    +      regex: default;kubernetes;https
    +      source_labels:
    +        - __meta_kubernetes_namespace
    +        - __meta_kubernetes_service_name
    +        - __meta_kubernetes_endpoint_port_name
    +  scheme: https
    +  tls_config:
    +    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    insecure_skip_verify: true
    +- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +  job_name: kubernetes-nodes
    +  kubernetes_sd_configs:
    +    - role: node
    +  relabel_configs:
    +    - action: labelmap
    +      regex: __meta_kubernetes_node_label_(.+)
    +    - replacement: kubernetes.default.svc:443
    +      target_label: __address__
    +    - regex: (.+)
    +      replacement: /api/v1/nodes/$1/proxy/metrics
    +      source_labels:
    +        - __meta_kubernetes_node_name
    +      target_label: __metrics_path__
    +  scheme: https
    +  tls_config:
    +    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    insecure_skip_verify: true
    +- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +  honor_timestamps: false
    +  job_name: kubernetes-nodes-cadvisor
    +  kubernetes_sd_configs:
    +    - role: node
    +  relabel_configs:
    +    - action: labelmap
    +      regex: __meta_kubernetes_node_label_(.+)
    +    - replacement: kubernetes.default.svc:443
    +      target_label: __address__
    +    - regex: (.+)
    +      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    +      source_labels:
    +        - __meta_kubernetes_node_name
    +      target_label: __metrics_path__
    +  scheme: https
    +  tls_config:
    +    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    insecure_skip_verify: true
    +- job_name: kubernetes-service-endpoints
    +  kubernetes_sd_configs:
    +    - role: endpointslices
    +  relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scrape
    +    - action: replace
    +      regex: (https?)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +      target_label: __scheme__
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - source_labels:
    +        - __meta_kubernetes_pod_name
    +      target_label: pod
    +    - source_labels:
    +        - __meta_kubernetes_pod_container_name
    +      target_label: container
    +    - source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +    - replacement: ${1}
    +      source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: job
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_node_name
    +      target_label: node
    +- job_name: kubernetes-service-endpoints-slow
    +  kubernetes_sd_configs:
    +    - role: endpointslices
    +  relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    +    - action: replace
    +      regex: (https?)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +      target_label: __scheme__
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - source_labels:
    +        - __meta_kubernetes_pod_name
    +      target_label: pod
    +    - source_labels:
    +        - __meta_kubernetes_pod_container_name
    +      target_label: container
    +    - source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +    - replacement: ${1}
    +      source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: job
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_node_name
    +      target_label: node
    +  scrape_interval: 5m
    +  scrape_timeout: 30s
    +- job_name: kubernetes-services
    +  kubernetes_sd_configs:
    +    - role: service
    +  metrics_path: /probe
    +  params:
    +    module:
    +        - http_2xx
    +  relabel_configs:
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_probe
    +    - source_labels:
    +        - __address__
    +      target_label: __param_target
    +    - replacement: blackbox
    +      target_label: __address__
    +    - source_labels:
    +        - __param_target
    +      target_label: instance
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +- job_name: kubernetes-pods
    +  kubernetes_sd_configs:
    +    - role: pod
    +  relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_pod_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_pod_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_pod_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_pod_label_(.+)
    +    - source_labels:
    +        - __meta_kubernetes_pod_name
    +      target_label: pod
    +    - source_labels:
    +        - __meta_kubernetes_pod_container_name
    +      target_label: container
    +    - source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_node_name
    +      target_label: node
    +
    +

    scrape configuration. scrape self by default

    +
    configMapstring
    +""
    +
    +

    vmagent scraping configuration: https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/docs/vmagent.md#how-to-collect-metrics-in-prometheus-format use existing configmap if specified otherwise .config values will be used

    +
    containerWorkingDirstring
    +/
    +
    +
    deploymentobject
    +enabled: true
    +strategy: {}
    +
    +

    ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

    +
    emptyDirobject
    +{}
    +
    +
    envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    envFromlist
    +[]
    +
    +
    extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
    +

    vmagent extra command line arguments

    +
    extraContainerslist
    +[]
    +
    +
    extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    extraLabelsobject
    +{}
    +
    +

    extra Labels for Pods, Deployment and Statefulset

    +
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    extraScrapeConfigslist
    +[]
    +
    +

    Extra scrape configs that will be appended to config

    +
    extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    fullnameOverridestring
    +""
    +
    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    horizontalPodAutoscalingobject
    +enabled: false
    +maxReplicas: 10
    +metrics: []
    +minReplicas: 1
    +
    +

    Horizontal Pod Autoscaling. Note that it is not intended to be used for vmagents which perform scraping. In order to scale scraping vmagents see: https://docs.victoriametrics.com/vmagent/#scraping-big-number-of-targets

    +
    horizontalPodAutoscaling.enabledbool
    +false
    +
    +

    Use HPA for vmagent

    +
    horizontalPodAutoscaling.maxReplicasint
    +10
    +
    +

    Maximum replicas for HPA to use to to scale vmagent

    +
    horizontalPodAutoscaling.metricslist
    +[]
    +
    +

    Metric for HPA to use to scale vmagent

    +
    horizontalPodAutoscaling.minReplicasint
    +1
    +
    +

    Minimum replicas for HPA to use to scale vmagent

    +
    image.pullPolicystring
    +IfNotPresent
    +
    +
    image.registrystring
    +""
    +
    +

    Image registry

    +
    image.repositorystring
    +victoriametrics/vmagent
    +
    +

    Image repository

    +
    image.tagstring
    +""
    +
    +

    Image tag, set to Chart.AppVersion by default

    +
    image.variantstring
    +""
    +
    +

    Variant of the image to use. e.g. enterprise, scratch

    +
    imagePullSecretslist
    +[]
    +
    +
    ingress.annotationsobject
    +{}
    +
    +
    ingress.enabledbool
    +false
    +
    +
    ingress.extraLabelsobject
    +{}
    +
    +
    ingress.hostslist
    +[]
    +
    +
    ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    ingress.tlslist
    +[]
    +
    +
    initContainerslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +
    license.keystring
    +""
    +
    +

    License key

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    multiTenantUrlslist
    +[]
    +
    +
    nameOverridestring
    +""
    +
    +
    nodeSelectorobject
    +{}
    +
    +
    persistence.accessModes[0]string
    +ReadWriteOnce
    +
    +
    persistence.annotationsobject
    +{}
    +
    +
    persistence.enabledbool
    +false
    +
    +
    persistence.existingClaimstring
    +""
    +
    +
    persistence.extraLabelsobject
    +{}
    +
    +
    persistence.matchLabelsobject
    +{}
    +
    +

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    +
    persistence.sizestring
    +10Gi
    +
    +
    podAnnotationsobject
    +{}
    +
    +

    Annotations to be added to pod

    +
    podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
    +

    See kubectl explain poddisruptionbudget.spec for more ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

    +
    podLabelsobject
    +{}
    +
    +

    extra Labels for Pods only

    +
    podSecurityContext.enabledbool
    +true
    +
    +
    priorityClassNamestring
    +""
    +
    +

    priority class to be assigned to the pod(s)

    +
    probe.livenessobject
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    liveness probe

    +
    probe.readinessobject
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +
    +

    readiness probe

    +
    probe.startupobject
    +{}
    +
    +

    startup probe

    +
    rbac.annotationsobject
    +{}
    +
    +
    rbac.createbool
    +true
    +
    +
    rbac.extraLabelsobject
    +{}
    +
    +
    rbac.namespacedbool
    +false
    +
    +

    if true and rbac.enabled, will deploy a Role/Rolebinding instead of a ClusterRole/ClusterRoleBinding

    +
    remoteWriteUrlslist
    +[]
    +
    +

    WARN: need to specify at least one remote write url or one multi tenant url

    +
    replicaCountint
    +1
    +
    +
    resourcesobject
    +{}
    +
    +
    securityContext.enabledbool
    +true
    +
    +
    service.annotationsobject
    +{}
    +
    +
    service.clusterIPstring
    +""
    +
    +
    service.enabledbool
    +false
    +
    +
    service.externalIPslist
    +[]
    +
    +
    service.externalTrafficPolicystring
    +""
    +
    +
    service.extraLabelsobject
    +{}
    +
    +
    service.healthCheckNodePortstring
    +""
    +
    +
    service.ipFamilieslist
    +[]
    +
    +
    service.ipFamilyPolicystring
    +""
    +
    +
    service.loadBalancerIPstring
    +""
    +
    +
    service.loadBalancerSourceRangeslist
    +[]
    +
    +
    service.servicePortint
    +8429
    +
    +
    service.typestring
    +ClusterIP
    +
    +
    serviceAccount.annotationsobject
    +{}
    +
    +

    Annotations to add to the service account

    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +null
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    +
    serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    statefulsetobject
    +clusterMode: false
    +enabled: false
    +replicationFactor: 1
    +updateStrategy: {}
    +
    +

    ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

    +
    statefulset.clusterModebool
    +false
    +
    +

    create cluster of vmagents. See https://docs.victoriametrics.com/vmagent#scraping-big-number-of-targets available since 1.77.2 version https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.77.2

    +
    statefulset.replicationFactorint
    +1
    +
    +

    replication factor for vmagent in cluster mode

    +
    tolerationslist
    +[]
    +
    +
    topologySpreadConstraintslist
    +[]
    +
    +
    + diff --git a/docs/helm/victoria-metrics-agent/_changelog.md b/docs/helm/victoria-metrics-agent/_changelog.md new file mode 100644 index 0000000000..fdcc6864b9 --- /dev/null +++ b/docs/helm/victoria-metrics-agent/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-agent-changelog + parent: helm-victoriametrics-agent +url: /helm/victoriametrics-agent/changelog +aliases: + - /helm/victoriametrics-agent/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-agent/_index.md b/docs/helm/victoria-metrics-agent/_index.md new file mode 100644 index 0000000000..5f347f4de8 --- /dev/null +++ b/docs/helm/victoria-metrics-agent/_index.md @@ -0,0 +1,13 @@ +--- +weight: 2 +title: VictoriaMetrics Agent +menu: + docs: + parent: helm + weight: 2 + identifier: helm-victoriametrics-agent +url: /helm/victoriametrics-agent +aliases: + - /helm/victoriametrics-agent/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-alert/CHANGELOG.md b/docs/helm/victoria-metrics-alert/CHANGELOG.md new file mode 100644 index 0000000000..61db0e6713 --- /dev/null +++ b/docs/helm/victoria-metrics-alert/CHANGELOG.md @@ -0,0 +1,320 @@ +## Next release + +- TODO + +## 0.11.1 + +**Release date:** 2024-09-10 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Updated alertmanager args for IPv6 compatibility. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/856) +- Added ability to set init containers for alertmanager and vmalert pods + +## 0.11.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Added ability to configure container port +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Renamed `.Values.alertmanager.persistentVolume.storageClass` to `.Values.alertmanager.persistentVolume.storageClassName` + +## 0.10.0 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: `vmalert` main container name was changed to `vmalert`, which will recreate a pod. + +**Update note**: `alertmanager` main container name was changed to `alertmanager`, which will recreate a pod. + +**Update note**: requires Helm 3.14+ + +- Added `basicAuth` support for `ServiceMonitor` +- Removed `PodSecurityPolicy` +- Set minimal kubernetes version to `1.25` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Added `.Values.alertmanager.emptyDir` to customize default cache directory +- Addded alertmanager service `.Values.alertmanager.service.externalTrafficPolicy` and `.Values.alertmanager.service.healthCheckNodePort` +- Use static container names in a pod +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Added `.Values.server.service.ipFamilies`, `.Values.server.service.ipFamilyPolicy`, `.Values.alertmanager.service.ipFamilies` and `.Values.alertmanager.service.ipFamilyPolicy` for services IP family management + +## 0.9.12 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.9.11 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.9.10 + +**Release date:** 2024-07-17 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add an option to provide additional environment variables for Alertmanager via `.Values.alertmanager.envFrom`. + +## 0.9.9 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.9.8 + +**Release date:** 2024-05-16 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 0.9.7 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.9.6 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.9.5 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +## 0.9.4 + +**Release date:** 2024-03-28 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.9.3 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +## 0.9.2 + +**Release date:** 2024-02-28 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix possible null value on flag `notifier.url`, `remoteRead.url` and `remoteWrite.url` in vmalert deployment. +- Fix alertmanager using some of server's values in its deployment template. + +## 0.9.1 + +**Release date:** 2024-02-23 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Allow overriding Alertmanager listen address and port via `alertmanager.listenAddress`. + +## 0.9.0 + +**Release date:** 2024-02-22 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Support adding extra arguments, containers, volumes and volume mounts to the alertmanager deployment. +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.8.7 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) + +## 0.8.6 + +**Release date:** 2023-12-13 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix configuration of volume mount for license key referenced by using secret. + +## 0.8.5 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) + +## 0.8.4 + +**Release date:** 2023-12-08 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix `notifier.url` check, as it's only needed when alerting rule is used. (#767) + +## 0.8.3 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.8.2 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) + +## 0.8.1 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) +- Add support of providing enterprise license key for VictoriaMetrics enterprise. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.8.0 + +**Release date:** 2023-09-28 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add `extraObjects` which to allow deploying additional resources with the chart release (#689) +- Fix vmalert notifier address if builtin alertmanager is enabled and using baseURLPrefix. + +## 0.7.8 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix misplaced `imagePullSecrets` for server (#675) +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.7.7 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) + +## 0.7.6 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of vmalert to `v1.93.3` + +## 0.7.4 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.7.3 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 + +## 0.7.2 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.7.1 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 +- fix misused securityContext and podSecurityContext (#592) + +## 0.7.0 + +**Release date:** 2023-07-13 + +![AppVersion: v1.91.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.91.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of agent, alert, auth, cluster, single +- Update liveness/readiness probes in deployment template with custom values for victoriametrics-alert (#549) diff --git a/docs/helm/victoria-metrics-alert/README.md b/docs/helm/victoria-metrics-alert/README.md new file mode 100644 index 0000000000..517d598cb2 --- /dev/null +++ b/docs/helm/victoria-metrics-alert/README.md @@ -0,0 +1,1699 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.11.1](https://img.shields.io/badge/Version-0.11.1-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-alert) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +Victoria Metrics Alert - executes a list of given MetricsQL expressions (rules) and sends alerts to Alert Manager. + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-alert` chart available to installation: + +```console +helm search repo vm/victoria-metrics-alert -l +``` + +### Install `victoria-metrics-alert` chart + +Export default values of `victoria-metrics-alert` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-alert > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-alert > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-alert -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-alert -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-alert -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-alert -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vma' +``` + +Get the application by running this command: + +```console +helm list -f vma -n NAMESPACE +``` + +See the history of versions of `vma` application with command. + +```console +helm history vma -n NAMESPACE +``` + +## HA configuration for Alertmanager + +There is no option on this chart to set up Alertmanager with [HA mode](https://github.com/prometheus/alertmanager#high-availability). +To enable the HA configuration, you can use: +- [VictoriaMetrics Operator](https://docs.victoriametrics.com/operator/) +- official [Alertmanager Helm chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/alertmanager) + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vma -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-alert + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-alert/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    alertmanager.baseURLstring
    +""
    +
    +

    external URL, that alertmanager will expose to receivers

    +
    alertmanager.baseURLPrefixstring
    +""
    +
    +

    external URL Prefix, Prefix for the internal routes of web endpoints

    +
    alertmanager.config.global.resolve_timeoutstring
    +5m
    +
    +
    alertmanager.config.receivers[0].namestring
    +devnull
    +
    +
    alertmanager.config.route.group_by[0]string
    +alertname
    +
    +
    alertmanager.config.route.group_intervalstring
    +10s
    +
    +
    alertmanager.config.route.group_waitstring
    +30s
    +
    +
    alertmanager.config.route.receiverstring
    +devnull
    +
    +
    alertmanager.config.route.repeat_intervalstring
    +24h
    +
    +
    alertmanager.configMapstring
    +""
    +
    +

    use existing configmap if specified otherwise .config values will be used

    +
    alertmanager.emptyDirobject
    +{}
    +
    +
    alertmanager.enabledbool
    +false
    +
    +
    alertmanager.envFromlist
    +[]
    +
    +
    alertmanager.extraArgsobject
    +{}
    +
    +
    alertmanager.extraContainerslist
    +[]
    +
    +
    alertmanager.extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    alertmanager.extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    alertmanager.extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    alertmanager.imageobject
    +registry: ""
    +repository: prom/alertmanager
    +tag: v0.25.0
    +
    +

    alertmanager image configuration

    +
    alertmanager.imagePullSecretslist
    +[]
    +
    +
    alertmanager.ingress.annotationsobject
    +{}
    +
    +
    alertmanager.ingress.enabledbool
    +false
    +
    +
    alertmanager.ingress.extraLabelsobject
    +{}
    +
    +
    alertmanager.ingress.hostslist
    +[]
    +
    +
    alertmanager.ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    alertmanager.ingress.tlslist
    +[]
    +
    +
    alertmanager.initContainerslist
    +[]
    +
    +

    Additional initContainers to initialize the pod

    +
    alertmanager.listenAddressstring
    +0.0.0.0:9093
    +
    +
    alertmanager.nodeSelectorobject
    +{}
    +
    +
    alertmanager.persistentVolume.accessModeslist
    +- ReadWriteOnce
    +
    +

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    +
    alertmanager.persistentVolume.annotationsobject
    +{}
    +
    +

    Persistant volume annotations

    +
    alertmanager.persistentVolume.enabledbool
    +false
    +
    +

    Create/use Persistent Volume Claim for alertmanager component. Empty dir if false

    +
    alertmanager.persistentVolume.existingClaimstring
    +""
    +
    +

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    +
    alertmanager.persistentVolume.mountPathstring
    +/data
    +
    +

    Mount path. Alertmanager data Persistent Volume mount root path.

    +
    alertmanager.persistentVolume.sizestring
    +50Mi
    +
    +

    Size of the volume. Better to set the same as resource limit memory property.

    +
    alertmanager.persistentVolume.storageClassNamestring
    +""
    +
    +

    StorageClass to use for persistent volume. Requires alertmanager.persistentVolume.enabled: true. If defined, PVC created automatically

    +
    alertmanager.persistentVolume.subPathstring
    +""
    +
    +

    Mount subpath

    +
    alertmanager.podMetadata.annotationsobject
    +{}
    +
    +
    alertmanager.podMetadata.labelsobject
    +{}
    +
    +
    alertmanager.podSecurityContext.enabledbool
    +false
    +
    +
    alertmanager.priorityClassNamestring
    +""
    +
    +
    alertmanager.probe.livenessobject
    +httpGet:
    +    path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/healthy'
    +    port: web
    +
    +

    liveness probe

    +
    alertmanager.probe.readinessobject
    +httpGet:
    +    path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/ready'
    +    port: web
    +
    +

    readiness probe

    +
    alertmanager.probe.startupobject
    +httpGet:
    +    path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/ready'
    +    port: web
    +
    +

    startup probe

    +
    alertmanager.resourcesobject
    +{}
    +
    +
    alertmanager.retentionstring
    +120h
    +
    +
    alertmanager.securityContext.enabledbool
    +false
    +
    +
    alertmanager.service.annotationsobject
    +{}
    +
    +
    alertmanager.service.clusterIPstring
    +""
    +
    +
    alertmanager.service.externalIPslist
    +[]
    +
    +

    Ref: https://kubernetes.io/docs/user-guide/services/#external-ips

    +
    alertmanager.service.externalTrafficPolicystring
    +""
    +
    +

    Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip

    +
    alertmanager.service.healthCheckNodePortstring
    +""
    +
    +
    alertmanager.service.ipFamilieslist
    +[]
    +
    +
    alertmanager.service.ipFamilyPolicystring
    +""
    +
    +
    alertmanager.service.labelsobject
    +{}
    +
    +
    alertmanager.service.loadBalancerIPstring
    +""
    +
    +
    alertmanager.service.loadBalancerSourceRangeslist
    +[]
    +
    +
    alertmanager.service.nodePortstring
    +""
    +
    +

    if you want to force a specific nodePort. Must be use with service.type=NodePort

    +
    alertmanager.service.portint
    +9093
    +
    +
    alertmanager.service.servicePortint
    +8880
    +
    +
    alertmanager.service.typestring
    +ClusterIP
    +
    +
    alertmanager.templatesobject
    +{}
    +
    +
    alertmanager.tolerationslist
    +[]
    +
    +
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +
    license.keystring
    +""
    +
    +

    License key

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    rbac.annotationsobject
    +{}
    +
    +
    rbac.createbool
    +true
    +
    +
    rbac.extraLabelsobject
    +{}
    +
    +
    rbac.namespacedbool
    +false
    +
    +
    server.affinityobject
    +{}
    +
    +
    server.annotationsobject
    +{}
    +
    +

    Annotations to be added to the deployment

    +
    server.config.alerts.groupslist
    +[]
    +
    +
    server.configMapstring
    +""
    +
    +

    vmalert alert rules configuration configuration: use existing configmap if specified otherwise .config values will be used

    +
    server.datasourceobject
    +basicAuth:
    +    password: ""
    +    username: ""
    +bearer:
    +    token: ""
    +    tokenFile: ""
    +url: ""
    +
    +

    vmalert reads metrics from source, next section represents its configuration. It can be any service which supports MetricsQL or PromQL.

    +
    server.datasource.basicAuthobject
    +password: ""
    +username: ""
    +
    +

    Basic auth for datasource

    +
    server.datasource.bearer.tokenstring
    +""
    +
    +

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    +
    server.datasource.bearer.tokenFilestring
    +""
    +
    +

    Token Auth file with Bearer token. You can use one of token or tokenFile

    +
    server.enabledbool
    +true
    +
    +
    server.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    server.envFromlist
    +[]
    +
    +
    server.extraArgs."envflag.enable"string
    +"true"
    +
    +
    server.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    server.extraArgs.loggerFormatstring
    +json
    +
    +
    server.extraContainerslist
    +[]
    +
    +

    Additional containers to run in the same pod

    +
    server.extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    server.extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    server.extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    server.fullnameOverridestring
    +""
    +
    +
    server.imageobject
    +pullPolicy: IfNotPresent
    +registry: ""
    +repository: victoriametrics/vmalert
    +tag: ""
    +variant: ""
    +
    +

    vmalert image configuration

    +
    server.imagePullSecretslist
    +[]
    +
    +
    server.ingress.annotationsobject
    +{}
    +
    +
    server.ingress.enabledbool
    +false
    +
    +
    server.ingress.extraLabelsobject
    +{}
    +
    +
    server.ingress.hostslist
    +[]
    +
    +
    server.ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    server.ingress.tlslist
    +[]
    +
    +
    server.initContainerslist
    +[]
    +
    +

    Additional initContainers to initialize the pod

    +
    server.labelsobject
    +{}
    +
    +

    labels to be added to the deployment

    +
    server.minReadySecondsint
    +0
    +
    +

    specifies the minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating 0 is the standard k8s default

    +
    server.namestring
    +server
    +
    +
    server.nameOverridestring
    +""
    +
    +
    server.nodeSelectorobject
    +{}
    +
    +
    server.notifierobject
    +alertmanager:
    +    basicAuth:
    +        password: ""
    +        username: ""
    +    bearer:
    +        token: ""
    +        tokenFile: ""
    +    url: ""
    +
    +

    Notifier to use for alerts. Multiple notifiers can be enabled by using notifiers section

    +
    server.notifier.alertmanager.basicAuthobject
    +password: ""
    +username: ""
    +
    +

    Basic auth for alertmanager

    +
    server.notifier.alertmanager.bearer.tokenstring
    +""
    +
    +

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    +
    server.notifier.alertmanager.bearer.tokenFilestring
    +""
    +
    +

    Token Auth file with Bearer token. You can use one of token or tokenFile

    +
    server.notifierslist
    +[]
    +
    +

    Additional notifiers to use for alerts

    +
    server.podAnnotationsobject
    +{}
    +
    +

    Annotations to be added to pod

    +
    server.podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Or check docs

    +
    server.podLabelsobject
    +{}
    +
    +
    server.podSecurityContext.enabledbool
    +true
    +
    +
    server.priorityClassNamestring
    +""
    +
    +
    server.probe.livenessobject
    +failureThreshold: 3
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    liveness probe

    +
    server.probe.readinessobject
    +failureThreshold: 3
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    readiness probe

    +
    server.probe.startupobject
    +{}
    +
    +

    startup probe

    +
    server.remote.read.basicAuthobject
    +password: ""
    +username: ""
    +
    +

    Basic auth for remote read

    +
    server.remote.read.bearer.tokenstring
    +""
    +
    +

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    +
    server.remote.read.bearer.tokenFilestring
    +""
    +
    +

    Token Auth file with Bearer token. You can use one of token or tokenFile

    +
    server.remote.read.urlstring
    +""
    +
    +
    server.remote.write.basicAuthobject
    +password: ""
    +username: ""
    +
    +

    Basic auth for remote write

    +
    server.remote.write.bearerobject
    +token: ""
    +tokenFile: ""
    +
    +

    Auth based on Bearer token for remote write

    +
    server.remote.write.bearer.tokenstring
    +""
    +
    +

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    +
    server.remote.write.bearer.tokenFilestring
    +""
    +
    +

    Token Auth file with Bearer token. You can use one of token or tokenFile

    +
    server.remote.write.urlstring
    +""
    +
    +
    server.replicaCountint
    +1
    +
    +
    server.resourcesobject
    +{}
    +
    +
    server.securityContext.enabledbool
    +true
    +
    +
    server.service.annotationsobject
    +{}
    +
    +
    server.service.clusterIPstring
    +""
    +
    +
    server.service.externalIPslist
    +[]
    +
    +
    server.service.externalTrafficPolicystring
    +""
    +
    +
    server.service.healthCheckNodePortstring
    +""
    +
    +
    server.service.ipFamilieslist
    +[]
    +
    +
    server.service.ipFamilyPolicystring
    +""
    +
    +
    server.service.labelsobject
    +{}
    +
    +
    server.service.loadBalancerIPstring
    +""
    +
    +
    server.service.loadBalancerSourceRangeslist
    +[]
    +
    +
    server.service.servicePortint
    +8880
    +
    +
    server.service.typestring
    +ClusterIP
    +
    +
    server.strategyobject
    +rollingUpdate:
    +    maxSurge: 25%
    +    maxUnavailable: 25%
    +type: RollingUpdate
    +
    +

    deployment strategy, set to standard k8s default

    +
    server.tolerationslist
    +[]
    +
    +
    server.verticalPodAutoscalerobject
    +enabled: false
    +
    +

    Vertical Pod Autoscaler

    +
    server.verticalPodAutoscaler.enabledbool
    +false
    +
    +

    Use VPA for vmalert

    +
    serviceAccount.annotationsobject
    +{}
    +
    +

    Annotations to add to the service account

    +
    serviceAccount.automountTokenbool
    +true
    +
    +

    mount API token to pod directly

    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +null
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    +
    serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    + diff --git a/docs/helm/victoria-metrics-alert/_changelog.md b/docs/helm/victoria-metrics-alert/_changelog.md new file mode 100644 index 0000000000..bbb77112f9 --- /dev/null +++ b/docs/helm/victoria-metrics-alert/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-alert-changelog + parent: helm-victoriametrics-alert +url: /helm/victoriametrics-alert/changelog +aliases: + - /helm/victoriametrics-alert/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-alert/_index.md b/docs/helm/victoria-metrics-alert/_index.md new file mode 100644 index 0000000000..621a859620 --- /dev/null +++ b/docs/helm/victoria-metrics-alert/_index.md @@ -0,0 +1,13 @@ +--- +weight: 3 +title: VictoriaMetrics Alert +menu: + docs: + parent: helm + weight: 3 + identifier: helm-victoriametrics-alert +url: /helm/victoriametrics-alert +aliases: + - /helm/victoriametrics-alert/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-anomaly/CHANGELOG.md b/docs/helm/victoria-metrics-anomaly/CHANGELOG.md new file mode 100644 index 0000000000..a24842273a --- /dev/null +++ b/docs/helm/victoria-metrics-anomaly/CHANGELOG.md @@ -0,0 +1,288 @@ +## Next release + +- TODO + +## 1.4.6 + +**Release date:** 2024-09-16 + +![AppVersion: v1.15.9](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.9&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added the ability to add annotations to the configMap using `values.configMapAnnotations` +- Fixed license file flag name + +## 1.4.5 + +**Release date:** 2024-09-12 + +![AppVersion: v1.15.9](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.9&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Removed vmanomaly not existing `loggerFormat` extra arg. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1476) + +## 1.4.4 + +**Release date:** 2024-09-03 + +![AppVersion: v1.15.9](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.9&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fixed PVC in StatefulSet + +## 1.4.3 + +**Release date:** 2024-08-27 + +![AppVersion: v1.15.9](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.9&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Removed `eula` support +- Disable PodMonitor, when pull port is not defined +- Upgraded application version to 1.15.9 +- Fixed default podDisruptionBudget configuration + +## 1.4.2 + +**Release date:** 2024-08-26 + +![AppVersion: v1.15.6](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.6&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Set minimal kubernetes version to `1.25` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Fixed volume template. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1280) +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Renamed `.Values.persistentVolume.storageClass` to `.Values.persistentVolume.storageClassName` +- Removed necessity to set `.Values.persistentVolume.existingClaim` when it should be created by chart. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/189) +- Added PDB, PodMonitor, extra volumes and extra volumeMounts + +## 1.4.1 + +**Release date:** 2024-08-15 + +![AppVersion: v1.15.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update vmanomaly to [v1.15.4](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1154). + +## 1.4.0 + +**Release date:** 2024-08-14 + +![AppVersion: v1.15.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.15.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update vmanomaly to [v1.15.3](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1153). +- Update configuration example format to match the latest version of vmanomaly. + +## 1.3.4 + +**Release date:** 2024-07-19 + +![AppVersion: v1.13.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.13.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- leave empty `schedulers` and `models` section to fix aliases error + +## 1.3.3 + +**Release date:** 2024-07-17 + +![AppVersion: v1.13.2](https://img.shields.io/static/v1?label=AppVersion&message=v1.13.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix default value for `.Values.config.schedulers.class`. + +## 1.3.2 + +**Release date:** 2024-07-17 + +![AppVersion: v1.13.2](https://img.shields.io/static/v1?label=AppVersion&message=v1.13.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- changes made for vmanomaly [v1.13.2](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1132) + +## 1.3.1 + +**Release date:** 2024-07-08 + +![AppVersion: v1.13.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.13.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add missing API version and kind for volumeClaimTemplates, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1092). + +## 1.3.0 + +**Release date:** 2024-06-11 + +![AppVersion: v1.13.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.13.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add ability to configure persistent volume for vmanomaly models storage. +- Fix `.Values.podSecurityContext` not being applied to the pod. +- Update vmanomaly to [v1.13.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1130). + +## 1.2.4 + +**Release date:** 2024-05-16 + +![AppVersion: v1.12.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.12.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 1.2.3 + +**Release date:** 2024-05-10 + +![AppVersion: v1.12.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.12.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 1.2.2 + +**Release date:** 2024-04-02 + +![AppVersion: v1.12.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.12.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- apply [v1.12](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1120) as a default (no config changes). + +## 1.2.1 + +**Release date:** 2024-03-20 + +![AppVersion: v1.11.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.11.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add support of passing preset configuration. + +## 1.2.0 + +**Release date:** 2024-02-26 + +![AppVersion: v1.11.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.11.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- apply [v1.11](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1110) change in [schedulers section](https://docs.victoriametrics.com/anomaly-detection/components/scheduler/): add configuration for using multiple schedulers at once via `schedulers`. Old `scheduler` field is deprecated and will be automatically converted to `schedulers` definition starting from [v1.11](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1110). +- docs fixes + +## 1.1.1 + +**Release date:** 2024-02-20 + +![AppVersion: v1.10.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.10.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix passing path to license file location when using `license.secret` mount. + +## 1.1.0 + +**Release date:** 2024-02-19 + +![AppVersion: v1.10.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.10.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- apply [v1.10](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1100) change in [models section](https://docs.victoriametrics.com/anomaly-detection/components/models/): add configuration for using multiple models at once via `models`. Old `model` field is deprecated and will be automatically converted to `models` definition starting from [v1.10](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1100). +- docs fixes + +## 1.0.0 + +**Release date:** 2024-02-05 + +![AppVersion: v1.9.2](https://img.shields.io/static/v1?label=AppVersion&message=v1.9.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Breaking change: passing [full vmanomaly config](https://docs.victoriametrics.com/anomaly-detection/components/) via `config` parameter. +- vmanomaly image moving to DockerHub + +## 0.5.0 + +**Release date:** 2023-10-31 + +![AppVersion: v1.6.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.6.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add options to use `bearer_token` for reader and writer authentication. +- Add `verify_tls` option to bypass TLS verification for reader and writer. +- Add `extra_filters` option to supply additional filters to enforce for reader queries. + +## 0.4.1 + +**Release date:** 2023-10-10 + +![AppVersion: v1.5.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.5.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add an options to override default `metric_format` for remote write configuration of vmanomaly. + +## 0.4.0 + +**Release date:** 2023-08-21 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* add ability to provide license key + +## 0.3.5 + +**Release date:** 2023-06-22 + +![AppVersion: v1.1.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.1.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* bump version of vmanomaly +* charts/victoria-metrics-anomaly: fix monitoring config indentation (#567) + +## 0.3.4 + +**Release date:** 2023-06-22 + +![AppVersion: v1.1.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.1.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* bump vmanomaly remove tricky make command +* charts/victoria-metrics-anomaly: make monitoring config more configurable (#562) + +## 0.3.3 + +**Release date:** 2023-06-07 + +![AppVersion: v1.1.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.1.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* bump anomaly chart, make package make merge + +## 0.3.2 + +**Release date:** 2023-06-06 + +![AppVersion: v1.1.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.1.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* Anomaly: change defaults (#518) +* charts/operator: update version to 0.30.4 adds extraArgs and serviceMonitor options for operator +* vmanomaly re-release + +## 0.3.1 + +**Release date:** 2023-01-26 + +![AppVersion: v1.1.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.1.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* vmanomaly: fix monitoring part of config (#457) + +## 0.3.0 + +**Release date:** 2023-01-24 + +![AppVersion: v1.1.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.1.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +* relase vmanomaly v1.1.0 (#454) +* vmanomaly: fix config for pull-based monitoring (#446) diff --git a/docs/helm/victoria-metrics-anomaly/README.md b/docs/helm/victoria-metrics-anomaly/README.md new file mode 100644 index 0000000000..286554f3aa --- /dev/null +++ b/docs/helm/victoria-metrics-anomaly/README.md @@ -0,0 +1,782 @@ +![Version: 1.4.6](https://img.shields.io/badge/Version-1.4.6-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-anomaly) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) +[![GitHub license](https://img.shields.io/github/license/VictoriaMetrics/VictoriaMetrics.svg)](https://github.com/VictoriaMetrics/helm-charts/blob/master/LICENSE) +![Twitter Follow](https://img.shields.io/twitter/follow/VictoriaMetrics?style=social) +![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/VictoriaMetrics?style=social) + +Victoria Metrics Anomaly Detection - a service that continuously scans Victoria Metrics time series and detects unexpected changes within data patterns in real-time. + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +* PV support on underlying infrastructure + +## Chart Details + +This chart will do the following: + +* Rollout victoria metrics anomaly + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-anomaly` chart available to installation: + +```console +helm search repo vm/victoria-metrics-anomaly -l +``` + +### Install `victoria-metrics-anomaly` chart + +Export default values of `victoria-metrics-anomaly` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-anomaly > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-anomaly > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-anomaly -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-anomaly -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-anomaly -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-anomaly -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vma' +``` + +Get the application by running this command: + +```console +helm list -f vma -n NAMESPACE +``` + +See the history of versions of `vma` application with command. + +```console +helm history vma -n NAMESPACE +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vma -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-anomaly + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +For more `vmanomaly` config parameters see https://docs.victoriametrics.com/anomaly-detection/components + +Change the values according to the need of the environment in ``victoria-metrics-anomaly/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    affinityobject
    +{}
    +
    +

    Affinity configurations

    +
    annotationsobject
    +{}
    +
    +

    Annotations to be added to the deployment

    +
    configobject
    +models: {}
    +preset: ""
    +reader:
    +    class: vm
    +    datasource_url: ""
    +    queries: {}
    +    sampling_period: 1m
    +    tenant_id: ""
    +schedulers: {}
    +writer:
    +    class: vm
    +    datasource_url: ""
    +    tenant_id: ""
    +
    +

    Full vmanomaly config section

    +
    config.modelsobject
    +{}
    +
    +

    Models section

    +
    config.presetstring
    +""
    +
    +

    Whether to use preset configuration. If not empty, preset name should be specified.

    +
    config.readerobject
    +class: vm
    +datasource_url: ""
    +queries: {}
    +sampling_period: 1m
    +tenant_id: ""
    +
    +

    Reader section

    +
    config.reader.classstring
    +vm
    +
    +

    Name of the class needed to enable reading from VictoriaMetrics or Prometheus. VmReader is the default option, if not specified.

    +
    config.reader.datasource_urlstring
    +""
    +
    +

    Datasource URL address. Required for example http://single-victoria-metrics-single-server.default.svc.cluster.local:8428 or http://cluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480

    +
    config.reader.queriesobject
    +{}
    +
    +

    Required. PromQL/MetricsQL query to select data in format: QUERY_ALIAS: “QUERY”. As accepted by “/query_range?query=%s”. See https://docs.victoriametrics.com/anomaly-detection/components/reader/#per-query-parameters for more details.

    +
    config.reader.sampling_periodstring
    +1m
    +
    +

    Frequency of the points returned. Will be converted to /query_range?step=%s param (in seconds). Required since 1.9.0.

    +
    config.reader.tenant_idstring
    +""
    +
    +

    For VictoriaMetrics Cluster version only, tenants are identified by accountID or accountID:projectID. See VictoriaMetrics Cluster multitenancy docs

    +
    config.schedulersobject
    +{}
    +
    +

    Scheduler section

    +
    config.writerobject
    +class: vm
    +datasource_url: ""
    +tenant_id: ""
    +
    +

    Writer section

    +
    config.writer.classstring
    +vm
    +
    +

    Name of the class needed to enable writing to VictoriaMetrics or Prometheus. VmWriter is the default option, if not specified.

    +
    config.writer.datasource_urlstring
    +""
    +
    +

    Datasource URL address. Required for example http://single-victoria-metrics-single-server.default.svc.cluster.local:8428 or http://cluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480

    +
    config.writer.tenant_idstring
    +""
    +
    +

    For VictoriaMetrics Cluster version only, tenants are identified by accountID or accountID:projectID. See VictoriaMetrics Cluster multitenancy docs

    +
    configMapAnnotationsobject
    +{}
    +
    +

    Annotations to be added to configMap

    +
    containerWorkingDirstring
    +/vmanomaly
    +
    +
    emptyDirobject
    +{}
    +
    +
    envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags)

    +
    envFromlist
    +[]
    +
    +
    extraArgsobject
    +{}
    +
    +
    extraContainerslist
    +[]
    +
    +
    extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    fullnameOverridestring
    +""
    +
    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    image.pullPolicystring
    +IfNotPresent
    +
    +

    Pull policy of Docker image

    +
    image.registrystring
    +""
    +
    +

    Victoria Metrics anomaly Docker registry

    +
    image.repositorystring
    +victoriametrics/vmanomaly
    +
    +

    Victoria Metrics anomaly Docker repository and image name

    +
    image.tagstring
    +v1.15.9
    +
    +

    Tag of Docker image

    +
    imagePullSecretslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    License key configuration for vmanomaly. See docs Required starting from v1.5.0.

    +
    license.keystring
    +""
    +
    +

    License key for vmanomaly

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key for vmanomaly

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    nameOverridestring
    +""
    +
    +
    nodeSelectorobject
    +{}
    +
    +

    NodeSelector configurations. Details are here

    +
    persistentVolumeobject
    +accessModes:
    +    - ReadWriteOnce
    +annotations: {}
    +enabled: false
    +existingClaim: ""
    +matchLabels: {}
    +size: 1Gi
    +storageClassName: ""
    +
    +

    Persistence to store models on disk. Available starting from v1.13.0

    +
    persistentVolume.accessModeslist
    +- ReadWriteOnce
    +
    +

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    +
    persistentVolume.annotationsobject
    +{}
    +
    +

    Persistant volume annotations

    +
    persistentVolume.enabledbool
    +false
    +
    +

    Create/use Persistent Volume Claim for models dump.

    +
    persistentVolume.existingClaimstring
    +""
    +
    +

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    +
    persistentVolume.matchLabelsobject
    +{}
    +
    +

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    +
    persistentVolume.sizestring
    +1Gi
    +
    +

    Size of the volume. Should be calculated based on the metrics you send and retention policy you set.

    +
    persistentVolume.storageClassNamestring
    +""
    +
    +

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    +
    podAnnotationsobject
    +{}
    +
    +

    Annotations to be added to pod

    +
    podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +minAvailable: 1
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    podMonitor.annotationsobject
    +{}
    +
    +
    podMonitor.enabledbool
    +false
    +
    +
    podMonitor.extraLabelsobject
    +{}
    +
    +
    podSecurityContext.enabledbool
    +true
    +
    +
    resourcesobject
    +{}
    +
    +
    securityContextobject
    +enabled: true
    +runAsGroup: 1000
    +runAsNonRoot: true
    +runAsUser: 1000
    +
    +

    Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

    +
    serviceAccount.annotationsobject
    +{}
    +
    +

    Annotations to add to the service account

    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +null
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    tolerationslist
    +[]
    +
    +

    Tolerations configurations. Details are here

    +
    + diff --git a/docs/helm/victoria-metrics-anomaly/_changelog.md b/docs/helm/victoria-metrics-anomaly/_changelog.md new file mode 100644 index 0000000000..0fab8a3b13 --- /dev/null +++ b/docs/helm/victoria-metrics-anomaly/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-anomaly-changelog + parent: helm-victoriametrics-anomaly +url: /helm/victoriametrics-anomaly/changelog +aliases: + - /helm/victoriametrics-anomaly/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-anomaly/_index.md b/docs/helm/victoria-metrics-anomaly/_index.md new file mode 100644 index 0000000000..95b79e6052 --- /dev/null +++ b/docs/helm/victoria-metrics-anomaly/_index.md @@ -0,0 +1,13 @@ +--- +weight: 4 +title: VictoriaMetrics Anomaly +menu: + docs: + parent: helm + weight: 4 + identifier: helm-victoriametrics-anomaly +url: /helm/victoriametrics-anomaly +aliases: + - /helm/victoriametrics-anomaly/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-auth/CHANGELOG.md b/docs/helm/victoria-metrics-auth/CHANGELOG.md new file mode 100644 index 0000000000..8a124ea8ff --- /dev/null +++ b/docs/helm/victoria-metrics-auth/CHANGELOG.md @@ -0,0 +1,249 @@ +## Next release + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables + +## 0.6.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Added ability to configure container port +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) + +## 0.5.0 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: main container name was changed to `vmauth`, which will recreate a pod. + +**Update note**: requires Helm 3.14+ + +- Added `basicAuth` support for `ServiceMonitor` +- Removed `PodSecurityPolicy` +- Set minimal kubernetes version to `1.25` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Added params to configure probes `.Values.probe.readiness`, `.Values.probe.liveness` and `.Values.probe.startup` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Use static container names in a pod +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Added `.Values.service.ipFamilies` and `.Values.service.ipFamilyPolicy` for service IP family management + +## 0.4.14 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.4.13 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.4.12 + +**Release date:** 2024-05-16 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 0.4.11 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.4.10 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.4.9 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +## 0.4.8 + +**Release date:** 2024-03-28 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.4.7 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- replaces httpGet ready probe with tcpSocket check. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/528) for details +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.4.6 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) + +## 0.4.5 + +**Release date:** 2023-12-13 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix configuration of volume mount for license key referenced by using secret. + +## 0.4.4 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) + +## 0.4.3 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.4.2 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) + +## 0.4.1 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) +- Add support of providing enterprise license key for VictoriaMetrics enterprise. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.4.0 + +**Release date:** 2023-09-28 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add `extraObjects` which to allow deploying additional resources with the chart release (#689) + +## 0.3.8 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.3.7 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) + +## 0.3.6 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of vmauth to `v1.93.3` + +## 0.3.4 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.3.3 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 + +## 0.3.2 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.3.1 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 + +## 0.3.0 + +**Release date:** 2023-07-13 + +![AppVersion: v1.91.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.91.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of agent, alert, auth, cluster, single +- charts/victoria-metrics-auth: add support of specifying extra labels (#577) diff --git a/docs/helm/victoria-metrics-auth/README.md b/docs/helm/victoria-metrics-auth/README.md new file mode 100644 index 0000000000..e03f44a932 --- /dev/null +++ b/docs/helm/victoria-metrics-auth/README.md @@ -0,0 +1,891 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.6.0](https://img.shields.io/badge/Version-0.6.0-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-auth) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +Victoria Metrics Auth - is a simple auth proxy and router for VictoriaMetrics. + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-auth` chart available to installation: + +```console +helm search repo vm/victoria-metrics-auth -l +``` + +### Install `victoria-metrics-auth` chart + +Export default values of `victoria-metrics-auth` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-auth > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-auth > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-auth -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-auth -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vma vm/victoria-metrics-auth -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vma oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-auth -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vma' +``` + +Get the application by running this command: + +```console +helm list -f vma -n NAMESPACE +``` + +See the history of versions of `vma` application with command. + +```console +helm history vma -n NAMESPACE +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vma -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-auth + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-auth/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    affinityobject
    +{}
    +
    +

    Affinity configurations

    +
    annotationsobject
    +{}
    +
    +

    Annotations to be added to the deployment

    +
    configstring
    +null
    +
    +

    Config file content.

    +
    containerWorkingDirstring
    +/
    +
    +
    envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    envFromlist
    +[]
    +
    +
    extraArgs."envflag.enable"string
    +"true"
    +
    +
    extraArgs."envflag.prefix"string
    +VM_
    +
    +
    extraArgs.loggerFormatstring
    +json
    +
    +
    extraContainerslist
    +[]
    +
    +
    extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    extraLabelsobject
    +{}
    +
    +

    Labels to be added to the deployment and pods

    +
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    fullnameOverridestring
    +""
    +
    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    image.pullPolicystring
    +IfNotPresent
    +
    +

    Pull policy of Docker image

    +
    image.registrystring
    +""
    +
    +

    Image registry

    +
    image.repositorystring
    +victoriametrics/vmauth
    +
    +

    Victoria Metrics Auth Docker repository and image name

    +
    image.tagstring
    +""
    +
    +

    Tag of Docker image

    +
    image.variantstring
    +""
    +
    +
    imagePullSecretslist
    +[]
    +
    +
    ingress.annotationsobject
    +{}
    +
    +
    ingress.enabledbool
    +false
    +
    +
    ingress.extraLabelsobject
    +{}
    +
    +
    ingress.hostslist
    +[]
    +
    +
    ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    ingress.tlslist
    +[]
    +
    +
    ingressInternal.annotationsobject
    +{}
    +
    +
    ingressInternal.enabledbool
    +false
    +
    +
    ingressInternal.extraLabelsobject
    +{}
    +
    +
    ingressInternal.hostslist
    +[]
    +
    +
    ingressInternal.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    ingressInternal.tlslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +
    license.keystring
    +""
    +
    +

    License key

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    nameOverridestring
    +""
    +
    +
    nodeSelectorobject
    +{}
    +
    +

    NodeSelector configurations. Ref: https://kubernetes.io/docs/user-guide/node-selection/

    +
    podAnnotationsobject
    +{}
    +
    +

    Annotations to be added to pod

    +
    podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

    +
    podSecurityContext.enabledbool
    +true
    +
    +
    probe.livenessobject
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    liveness probe

    +
    probe.readinessobject
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +
    +

    readiness probe

    +
    probe.startupobject
    +{}
    +
    +

    startup probe

    +
    rbac.annotationsobject
    +{}
    +
    +
    rbac.extraLabelsobject
    +{}
    +
    +
    replicaCountint
    +1
    +
    +

    Number of replicas of vmauth

    +
    resourcesobject
    +{}
    +
    +

    We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. If you do want to specify resources, uncomment the following lines, adjust them as necessary, and remove the curly braces after resources:.

    +
    secretNamestring
    +""
    +
    +

    Use existing secret if specified otherwise .config values will be used. Ref: https://docs.victoriametrics.com/vmauth. Configuration in the given secret must be stored under auth.yml key.

    +
    securityContext.enabledbool
    +true
    +
    +
    service.annotationsobject
    +{}
    +
    +
    service.clusterIPstring
    +""
    +
    +
    service.enabledbool
    +true
    +
    +
    service.externalIPslist
    +[]
    +
    +
    service.externalTrafficPolicystring
    +""
    +
    +
    service.extraLabelsobject
    +{}
    +
    +
    service.healthCheckNodePortstring
    +""
    +
    +
    service.ipFamilieslist
    +[]
    +
    +
    service.ipFamilyPolicystring
    +""
    +
    +
    service.loadBalancerIPstring
    +""
    +
    +
    service.loadBalancerSourceRangeslist
    +[]
    +
    +
    service.servicePortint
    +8427
    +
    +
    service.typestring
    +ClusterIP
    +
    +
    serviceAccount.annotationsobject
    +{}
    +
    +

    Annotations to add to the service account

    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +null
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    +
    serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    tolerationslist
    +[]
    +
    +

    Tolerations configurations. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

    +
    + diff --git a/docs/helm/victoria-metrics-auth/_changelog.md b/docs/helm/victoria-metrics-auth/_changelog.md new file mode 100644 index 0000000000..ba6ff86316 --- /dev/null +++ b/docs/helm/victoria-metrics-auth/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-auth-changelog + parent: helm-victoriametrics-auth +url: /helm/victoriametrics-auth/changelog +aliases: + - /helm/victoriametrics-auth/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-auth/_index.md b/docs/helm/victoria-metrics-auth/_index.md new file mode 100644 index 0000000000..8316a10f1d --- /dev/null +++ b/docs/helm/victoria-metrics-auth/_index.md @@ -0,0 +1,13 @@ +--- +weight: 5 +title: VictoriaMetrics Auth +menu: + docs: + parent: helm + weight: 5 + identifier: helm-victoriametrics-auth +url: /helm/victoriametrics-auth +aliases: + - /helm/victoriametrics-auth/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-cluster/CHANGELOG.md b/docs/helm/victoria-metrics-cluster/CHANGELOG.md new file mode 100644 index 0000000000..f35f6742db --- /dev/null +++ b/docs/helm/victoria-metrics-cluster/CHANGELOG.md @@ -0,0 +1,438 @@ +## Next release + +- TODO + +## 0.13.7 + +**Release date:** 2024-09-12 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fixed security context for vmstorage statefulset + +## 0.13.6 + +**Release date:** 2024-09-11 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed cluster native address port rendering on vmselect statefulset. Thanks to @Red-M + +## 0.13.5 + +**Release date:** 2024-09-05 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed priority class name templating for vmselect deployment + +## 0.13.4 + +**Release date:** 2024-09-05 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Removed deprecated autoscaling v2beta2 API support +- Added podLabels support + +## 0.13.3 + +**Release date:** 2024-09-04 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed vmstorage resources templating + +## 0.13.2 + +**Release date:** 2024-09-04 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Fixed vmstorage restore cmd args template + +## 0.13.1 + +**Release date:** 2024-09-03 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Deprecated `vmstorage.vmbackupmanager.enable` in a favour of `vmstorage.vmbackupmanager.enabled`. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/940). +- Fixed PVC in StatefulSet + +## 0.13.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Renamed `.Values.vmstorage.persistentVolume.storageClass` to `.Values.vmstorage.persistentVolume.storageClassName` +- Removed necessity to set `.Values.vmstorage.persistentVolume.existintClaim` when it should be created by chart. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/189) +- Removed `eula` support + +## 0.12.1 + +**Release date:** 2024-08-22 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to configure container port +- Fixed volume template. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1280) + +## 0.12.0 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: `vmselect` main container name was changed to `vmselect`, which will recreate a pod. + +**Update note**: `vmstorage` main container name was changed to `vmstorage`, which will recreate a pod. + +**Update note**: `vminsert` main container name was changed to `vminsert`, which will recreate a pod. + +**Update note**: requires Helm 3.14+ + +- Added `basicAuth` support for `ServiceMonitor` +- Removed `PodSecurityPolicy` +- Set minimal kubernetes version to `1.25` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Added ability to override liveness and readiness probes +- Updated `.Values.vmbackupmanager.readinessProbe` to `.Values.vmbackupmanager.probe.readiness` +- Updated `.Values.vmbackupmanager.livenessProbe` to `.Values.vmbackupmanager.probe.liveness` +- Updated `.Values.vmbackupmanager.startupProbe` to `.Values.vmbackupmanager.probe.startup` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Fix templating of Ingress port when using custom port name. +- Added `.Values.vmselect.emptyDir` and `.Values.vmstorage.emptyDir` to customize default cache directory +- Merged headless and non-headless services, removed statefulset service specific variables +- Added `.Values.vmselect.service.healthCheckNodePort` and `.Values.vmselect.service.externalTrafficPolicy` +- Added `.Values.vmstorage.service.healthCheckNodePort` and `.Values.vmstorage.service.externalTrafficPolicy` +- Added `.Values.vminsert.service.healthCheckNodePort` and `.Values.vminsert.service.externalTrafficPolicy` +- Use static container names in a pod +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Added `.Values.vmstorage.service.ipFamilies` and `.Values.vmstorage.service.ipFamilyPolicy` for service IP family management +- Added `.Values.vmselect.service.ipFamilies` and `.Values.vmselect.service.ipFamilyPolicy` for service IP family management +- Added `.Values.vminsert.service.ipFamilies` and `.Values.vminsert.service.ipFamilyPolicy` for service IP family management + +## 0.11.23 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.11.22 + +**Release date:** 2024-07-31 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix mount name for `vmstorage` when using `.Values.vmstorage.persistentVolume.name` to override PVC name. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1181) for the details. Thanks to @srinusanduri for [the pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1182). + +## 0.11.21 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.11.20 + +**Release date:** 2024-07-08 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add missing API version and kind for volumeClaimTemplates, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1092). + +## 0.11.19 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- fix workload's readinessProbe and livenessProbe when using custom port name. Thanks to @hanumanhuda for [the pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1061). +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.11.18 + +**Release date:** 2024-05-16 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 0.11.17 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.11.16 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/931) and [this PR](https://github.com/VictoriaMetrics/helm-charts/pull/936). +- enable templating for `port name` so users can replace the default with custom values in use cases such as outlined in [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/972) and has been addressed in [this PR](https://github.com/VictoriaMetrics/helm-charts/pull/975). +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.11.15 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +## 0.11.14 + +**Release date:** 2024-03-28 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.11.13 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.11.12 + +**Release date:** 2024-02-09 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Remove unsupported `scheme` field under `livenessProbe.tcpSocket`. See [#844](https://github.com/VictoriaMetrics/helm-charts/pull/844) by @MisguidedEmails. + +## 0.11.11 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) +- Switch probes scheme to `HTTPS` if vminsert and vmselect enabled tls in extraArgs. + +## 0.11.10 + +**Release date:** 2023-12-19 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix templating `podManagementPolicy` value in StatefulSet configuration of vmselect. See [#807](https://github.com/VictoriaMetrics/helm-charts/pull/807) by @MemberIT. + +## 0.11.9 + +**Release date:** 2023-12-13 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix configuration of volume mount for license key referenced by using secret. + +## 0.11.8 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) + +## 0.11.7 + +**Release date:** 2023-12-08 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix `vminsert` configuration for volumes when using `extraVolumes`. + +## 0.11.6 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.11.5 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) + +## 0.11.4 + +**Release date:** 2023-10-25 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix deployment `volumeMounts` when providing enterprise license key for VictoriaMetrics enterprise. See [this pr](https://github.com/VictoriaMetrics/helm-charts/pull/734) for details. + +## 0.11.3 + +**Release date:** 2023-10-12 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add license enforcement for vmbackupmanager in order to avoid running it without enterprise license key. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.11.2 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) +- Add support of providing enterprise license key for VictoriaMetrics enterprise. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.11.1 + +**Release date:** 2023-10-04 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- From pod labels removed dynamic label `helm.sh/chart` to avoid restarting every time the chart is updated without changing the pods parameters. **Note that this time it will cause the pods to restart** (#695) + +## 0.11.0 + +**Release date:** 2023-09-28 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add `extraObjects` which to allow deploying additional resources with the chart release (#689) + +## 0.10.9 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Support `behavior` setting in horizontal pod autoscalers for vminsert and vmselect (#679) +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.10.8 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) + +## 0.10.7 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of Victoria Metrics Cluster to `v1.93.3` + +## 0.10.5 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.10.4 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 +- charts/victoria-metrics-cluster: remove incorrect comment (#607) +- vmstorage, vminsert: Add topoloogySpreadConstraints (#596) + +## 0.10.3 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.10.2 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 +- fix misused securityContext and podSecurityContext (#592) + +## 0.10.1 + +**Release date:** 2023-07-25 + +![AppVersion: v1.91.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.91.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix typo in suppressStorageFQDNsRender, address #580 (#581) + +## 0.10.0 + +**Release date:** 2023-07-13 + +![AppVersion: v1.91.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.91.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of agent, alert, auth, cluster, single +- charts/victoria-metrics-cluster: fix indent for vmselect statefulset (#576) diff --git a/docs/helm/victoria-metrics-cluster/README.md b/docs/helm/victoria-metrics-cluster/README.md new file mode 100644 index 0000000000..7f29cb5916 --- /dev/null +++ b/docs/helm/victoria-metrics-cluster/README.md @@ -0,0 +1,2801 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.13.7](https://img.shields.io/badge/Version-0.13.7-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-cluster) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +Victoria Metrics Cluster version - high-performance, cost-effective and scalable TSDB, long-term remote storage for Prometheus + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +* PV support on underlying infrastructure + +## Chart Details + +Note: this chart installs VictoriaMetrics cluster components such as vminsert, vmselect and vmstorage. It doesn't create or configure metrics scraping. If you are looking for a chart to configure monitoring stack in cluster check out [victoria-metrics-k8s-stack chart](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-k8s-stack#helm-chart-for-victoria-metrics-kubernetes-monitoring-stack). + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-cluster` chart available to installation: + +```console +helm search repo vm/victoria-metrics-cluster -l +``` + +### Install `victoria-metrics-cluster` chart + +Export default values of `victoria-metrics-cluster` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-cluster > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-cluster > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vmc vm/victoria-metrics-cluster -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vmc oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-cluster -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vmc vm/victoria-metrics-cluster -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vmc oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-cluster -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vmc' +``` + +Get the application by running this command: + +```console +helm list -f vmc -n NAMESPACE +``` + +See the history of versions of `vmc` application with command. + +```console +helm history vmc -n NAMESPACE +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vmc -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-cluster + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-cluster/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    clusterDomainSuffixstring
    +cluster.local
    +
    +

    k8s cluster domain suffix, uses for building storage pods’ FQDN. Details are here

    +
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    extraSecretslist
    +[]
    +
    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +
    license.keystring
    +""
    +
    +

    License key

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    printNotesbool
    +true
    +
    +
    rbac.createbool
    +true
    +
    +
    rbac.extraLabelsobject
    +{}
    +
    +
    rbac.namespacedbool
    +false
    +
    +
    serviceAccount.automountTokenbool
    +true
    +
    +
    serviceAccount.createbool
    +true
    +
    +
    serviceAccount.extraLabelsobject
    +{}
    +
    +
    vminsert.affinityobject
    +{}
    +
    +

    Pod affinity

    +
    vminsert.annotationsobject
    +{}
    +
    +
    vminsert.automountServiceAccountTokenbool
    +true
    +
    +
    vminsert.containerWorkingDirstring
    +""
    +
    +

    Container workdir

    +
    vminsert.enabledbool
    +true
    +
    +

    Enable deployment of vminsert component. Deployment is used

    +
    vminsert.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    vminsert.envFromlist
    +[]
    +
    +
    vminsert.extraArgs."envflag.enable"string
    +"true"
    +
    +
    vminsert.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    vminsert.extraArgs.loggerFormatstring
    +json
    +
    +
    vminsert.extraContainerslist
    +[]
    +
    +
    vminsert.extraLabelsobject
    +{}
    +
    +
    vminsert.extraVolumeMountslist
    +[]
    +
    +
    vminsert.extraVolumeslist
    +[]
    +
    +
    vminsert.fullnameOverridestring
    +""
    +
    +

    Overrides the full name of vminsert component

    +
    vminsert.horizontalPodAutoscaler.behaviorobject
    +{}
    +
    +

    Behavior settings for scaling by the HPA

    +
    vminsert.horizontalPodAutoscaler.enabledbool
    +false
    +
    +

    Use HPA for vminsert component

    +
    vminsert.horizontalPodAutoscaler.maxReplicasint
    +10
    +
    +

    Maximum replicas for HPA to use to to scale the vminsert component

    +
    vminsert.horizontalPodAutoscaler.metricslist
    +[]
    +
    +

    Metric for HPA to use to scale the vminsert component

    +
    vminsert.horizontalPodAutoscaler.minReplicasint
    +2
    +
    +

    Minimum replicas for HPA to use to scale the vminsert component

    +
    vminsert.image.pullPolicystring
    +IfNotPresent
    +
    +

    Image pull policy

    +
    vminsert.image.registrystring
    +""
    +
    +

    Image registry

    +
    vminsert.image.repositorystring
    +victoriametrics/vminsert
    +
    +

    Image repository

    +
    vminsert.image.tagstring
    +""
    +
    +

    Image tag override Chart.AppVersion

    +
    vminsert.image.variantstring
    +cluster
    +
    +
    vminsert.ingress.annotationsobject
    +{}
    +
    +

    Ingress annotations

    +
    vminsert.ingress.enabledbool
    +false
    +
    +

    Enable deployment of ingress for vminsert component

    +
    vminsert.ingress.extraLabelsobject
    +{}
    +
    +
    vminsert.ingress.hostslist
    +[]
    +
    +

    Array of host objects

    +
    vminsert.ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    vminsert.ingress.tlslist
    +[]
    +
    +

    Array of TLS objects

    +
    vminsert.initContainerslist
    +[]
    +
    +
    vminsert.namestring
    +vminsert
    +
    +

    vminsert container name

    +
    vminsert.nodeSelectorobject
    +{}
    +
    +

    Pod’s node selector. Details are here

    +
    vminsert.podAnnotationsobject
    +{}
    +
    +

    Pod’s annotations

    +
    vminsert.podDisruptionBudget.enabledbool
    +false
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    vminsert.podDisruptionBudget.labelsobject
    +{}
    +
    +
    vminsert.podLabelsobject
    +{}
    +
    +
    vminsert.podSecurityContext.enabledbool
    +false
    +
    +
    vminsert.ports.namestring
    +http
    +
    +
    vminsert.priorityClassNamestring
    +""
    +
    +

    Name of Priority Class

    +
    vminsert.probe.livenessobject
    +failureThreshold: 3
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    vminsert liveness probe

    +
    vminsert.probe.readinessobject
    +failureThreshold: 3
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    vminsert readiness probe

    +
    vminsert.probe.startupobject
    +{}
    +
    +

    vminsert startup probe

    +
    vminsert.replicaCountint
    +2
    +
    +

    Count of vminsert pods

    +
    vminsert.resourcesobject
    +{}
    +
    +

    Resource object

    +
    vminsert.securityContextobject
    +enabled: false
    +
    +

    Pod’s security context. Details are here

    +
    vminsert.service.annotationsobject
    +{}
    +
    +

    Service annotations

    +
    vminsert.service.clusterIPstring
    +""
    +
    +

    Service ClusterIP

    +
    vminsert.service.externalIPslist
    +[]
    +
    +

    Service External IPs. Details are here

    +
    vminsert.service.externalTrafficPolicystring
    +""
    +
    +
    vminsert.service.extraPortslist
    +[]
    +
    +

    Extra service ports

    +
    vminsert.service.healthCheckNodePortstring
    +""
    +
    +
    vminsert.service.ipFamilieslist
    +[]
    +
    +
    vminsert.service.ipFamilyPolicystring
    +""
    +
    +
    vminsert.service.labelsobject
    +{}
    +
    +

    Service labels

    +
    vminsert.service.loadBalancerIPstring
    +""
    +
    +

    Service load balancer IP

    +
    vminsert.service.loadBalancerSourceRangeslist
    +[]
    +
    +

    Load balancer source range

    +
    vminsert.service.servicePortint
    +8480
    +
    +

    Service port

    +
    vminsert.service.targetPortstring
    +http
    +
    +

    Target port

    +
    vminsert.service.typestring
    +ClusterIP
    +
    +

    Service type

    +
    vminsert.service.udpbool
    +false
    +
    +

    Make sure that service is not type “LoadBalancer”, as it requires “MixedProtocolLBService” feature gate. ref: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/

    +
    vminsert.serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    vminsert.serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    vminsert.serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for vminsert component. This is Prometheus operator object

    +
    vminsert.serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    vminsert.serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    vminsert.serviceMonitor.namespacestring
    +""
    +
    +

    Target namespace of ServiceMonitor manifest

    +
    vminsert.serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    vminsert.strategyobject
    +{}
    +
    +
    vminsert.suppressStorageFQDNsRenderbool
    +false
    +
    +

    Suppress rendering --storageNode FQDNs based on vmstorage.replicaCount value. If true suppress rendering --storageNodes, they can be re-defined in extraArgs

    +
    vminsert.tolerationslist
    +[]
    +
    +

    Array of tolerations object. Details are here

    +
    vminsert.topologySpreadConstraintslist
    +[]
    +
    +

    Pod topologySpreadConstraints

    +
    vmselect.affinityobject
    +{}
    +
    +

    Pod affinity

    +
    vmselect.annotationsobject
    +{}
    +
    +
    vmselect.automountServiceAccountTokenbool
    +true
    +
    +
    vmselect.cacheMountPathstring
    +/cache
    +
    +

    Cache root folder

    +
    vmselect.containerWorkingDirstring
    +""
    +
    +

    Container workdir

    +
    vmselect.emptyDirobject
    +{}
    +
    +
    vmselect.enabledbool
    +true
    +
    +

    Enable deployment of vmselect component. Can be deployed as Deployment(default) or StatefulSet

    +
    vmselect.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    vmselect.envFromlist
    +[]
    +
    +
    vmselect.extraArgs."envflag.enable"bool
    +true
    +
    +
    vmselect.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    vmselect.extraArgs.loggerFormatstring
    +json
    +
    +
    vmselect.extraContainerslist
    +[]
    +
    +
    vmselect.extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    vmselect.extraLabelsobject
    +{}
    +
    +
    vmselect.extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    vmselect.extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    vmselect.fullnameOverridestring
    +""
    +
    +

    Overrides the full name of vmselect component

    +
    vmselect.horizontalPodAutoscaler.behaviorobject
    +{}
    +
    +

    Behavior settings for scaling by the HPA

    +
    vmselect.horizontalPodAutoscaler.enabledbool
    +false
    +
    +

    Use HPA for vmselect component

    +
    vmselect.horizontalPodAutoscaler.maxReplicasint
    +10
    +
    +

    Maximum replicas for HPA to use to to scale the vmselect component

    +
    vmselect.horizontalPodAutoscaler.metricslist
    +[]
    +
    +

    Metric for HPA to use to scale the vmselect component

    +
    vmselect.horizontalPodAutoscaler.minReplicasint
    +2
    +
    +

    Minimum replicas for HPA to use to scale the vmselect component

    +
    vmselect.image.pullPolicystring
    +IfNotPresent
    +
    +

    Image pull policy

    +
    vmselect.image.registrystring
    +""
    +
    +

    Image registry

    +
    vmselect.image.repositorystring
    +victoriametrics/vmselect
    +
    +

    Image repository

    +
    vmselect.image.tagstring
    +""
    +
    +

    Image tag override Chart.AppVersion

    +
    vmselect.image.variantstring
    +cluster
    +
    +
    vmselect.ingress.annotationsobject
    +{}
    +
    +

    Ingress annotations

    +
    vmselect.ingress.enabledbool
    +false
    +
    +

    Enable deployment of ingress for vmselect component

    +
    vmselect.ingress.extraLabelsobject
    +{}
    +
    +
    vmselect.ingress.hostslist
    +[]
    +
    +

    Array of host objects

    +
    vmselect.ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    vmselect.ingress.tlslist
    +[]
    +
    +

    Array of TLS objects

    +
    vmselect.initContainerslist
    +[]
    +
    +
    vmselect.namestring
    +vmselect
    +
    +

    Vmselect container name

    +
    vmselect.nodeSelectorobject
    +{}
    +
    +

    Pod’s node selector. Details are here

    +
    vmselect.persistentVolume.accessModeslist
    +- ReadWriteOnce
    +
    +

    Array of access mode. Must match those of existing PV or dynamic provisioner. Details are here

    +
    vmselect.persistentVolume.annotationsobject
    +{}
    +
    +

    Persistent volume annotations

    +
    vmselect.persistentVolume.enabledbool
    +false
    +
    +

    Create/use Persistent Volume Claim for vmselect component. Empty dir if false. If true, vmselect will create/use a Persistent Volume Claim

    +
    vmselect.persistentVolume.existingClaimstring
    +""
    +
    +

    Existing Claim name. Requires vmselect.persistentVolume.enabled: true. If defined, PVC must be created manually before volume will be bound

    +
    vmselect.persistentVolume.labelsobject
    +{}
    +
    +

    Persistent volume labels

    +
    vmselect.persistentVolume.sizestring
    +2Gi
    +
    +

    Size of the volume. Better to set the same as resource limit memory property

    +
    vmselect.persistentVolume.subPathstring
    +""
    +
    +

    Mount subpath

    +
    vmselect.podAnnotationsobject
    +{}
    +
    +

    Pod’s annotations

    +
    vmselect.podDisruptionBudget.enabledbool
    +false
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    vmselect.podDisruptionBudget.labelsobject
    +{}
    +
    +
    vmselect.podLabelsobject
    +{}
    +
    +
    vmselect.podSecurityContext.enabledbool
    +true
    +
    +
    vmselect.ports.namestring
    +http
    +
    +
    vmselect.priorityClassNamestring
    +""
    +
    +

    Name of Priority Class

    +
    vmselect.probe.livenessobject
    +failureThreshold: 3
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    vmselect liveness probe

    +
    vmselect.probe.readinessobject
    +failureThreshold: 3
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    vmselect readiness probe

    +
    vmselect.probe.startupobject
    +{}
    +
    +

    vmselect startup probe

    +
    vmselect.replicaCountint
    +2
    +
    +

    Count of vmselect pods

    +
    vmselect.resourcesobject
    +{}
    +
    +

    Resource object

    +
    vmselect.securityContextobject
    +enabled: true
    +
    +

    Pod’s security context. Details are here

    +
    vmselect.service.annotationsobject
    +{}
    +
    +

    Service annotations

    +
    vmselect.service.clusterIPstring
    +""
    +
    +

    Service ClusterIP

    +
    vmselect.service.externalIPslist
    +[]
    +
    +

    Service External IPs. Details are here

    +
    vmselect.service.externalTrafficPolicystring
    +""
    +
    +
    vmselect.service.extraPortslist
    +[]
    +
    +

    Extra service ports

    +
    vmselect.service.healthCheckNodePortstring
    +""
    +
    +
    vmselect.service.ipFamilieslist
    +[]
    +
    +
    vmselect.service.ipFamilyPolicystring
    +""
    +
    +
    vmselect.service.labelsobject
    +{}
    +
    +

    Service labels

    +
    vmselect.service.loadBalancerIPstring
    +""
    +
    +

    Service load balacner IP

    +
    vmselect.service.loadBalancerSourceRangeslist
    +[]
    +
    +

    Load balancer source range

    +
    vmselect.service.servicePortint
    +8481
    +
    +

    Service port

    +
    vmselect.service.targetPortstring
    +http
    +
    +

    Target port

    +
    vmselect.service.typestring
    +ClusterIP
    +
    +

    Service type

    +
    vmselect.serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    vmselect.serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    vmselect.serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for vmselect component. This is Prometheus operator object

    +
    vmselect.serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    vmselect.serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    vmselect.serviceMonitor.namespacestring
    +""
    +
    +

    Target namespace of ServiceMonitor manifest

    +
    vmselect.serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    vmselect.statefulSet.enabledbool
    +false
    +
    +

    Deploy StatefulSet instead of Deployment for vmselect. Useful if you want to keep cache data.

    +
    vmselect.statefulSet.podManagementPolicystring
    +OrderedReady
    +
    +

    Deploy order policy for StatefulSet pods

    +
    vmselect.strategyobject
    +{}
    +
    +
    vmselect.suppressStorageFQDNsRenderbool
    +false
    +
    +

    Suppress rendering --storageNode FQDNs based on vmstorage.replicaCount value. If true suppress rendering --storageNodes, they can be re-defined in extraArgs

    +
    vmselect.tolerationslist
    +[]
    +
    +

    Array of tolerations object. Details are here

    +
    vmselect.topologySpreadConstraintslist
    +[]
    +
    +

    Pod topologySpreadConstraints

    +
    vmstorage.affinityobject
    +{}
    +
    +

    Pod affinity

    +
    vmstorage.annotationsobject
    +{}
    +
    +
    vmstorage.automountServiceAccountTokenbool
    +true
    +
    +
    vmstorage.containerWorkingDirstring
    +""
    +
    +

    Container workdir

    +
    vmstorage.emptyDirobject
    +{}
    +
    +

    Use an alternate scheduler, e.g. “stork”. ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ schedulerName:

    +
    vmstorage.enabledbool
    +true
    +
    +

    Enable deployment of vmstorage component. StatefulSet is used

    +
    vmstorage.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    vmstorage.envFromlist
    +[]
    +
    +
    vmstorage.extraArgs."envflag.enable"string
    +"true"
    +
    +
    vmstorage.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    vmstorage.extraArgs.loggerFormatstring
    +json
    +
    +
    vmstorage.extraContainerslist
    +[]
    +
    +
    vmstorage.extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    vmstorage.extraLabelsobject
    +{}
    +
    +
    vmstorage.extraSecretMountslist
    +[]
    +
    +
    vmstorage.extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    vmstorage.extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    vmstorage.fullnameOverridestring
    +null
    +
    +

    Overrides the full name of vmstorage component

    +
    vmstorage.image.pullPolicystring
    +IfNotPresent
    +
    +

    Image pull policy

    +
    vmstorage.image.registrystring
    +""
    +
    +

    Image registry

    +
    vmstorage.image.repositorystring
    +victoriametrics/vmstorage
    +
    +

    Image repository

    +
    vmstorage.image.tagstring
    +""
    +
    +

    Image tag override Chart.AppVersion

    +
    vmstorage.image.variantstring
    +cluster
    +
    +
    vmstorage.initContainerslist
    +[]
    +
    +
    vmstorage.namestring
    +vmstorage
    +
    +

    vmstorage container name

    +
    vmstorage.nodeSelectorobject
    +{}
    +
    +

    Pod’s node selector. Details are here

    +
    vmstorage.persistentVolume.accessModeslist
    +- ReadWriteOnce
    +
    +

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    +
    vmstorage.persistentVolume.annotationsobject
    +{}
    +
    +

    Persistent volume annotations

    +
    vmstorage.persistentVolume.enabledbool
    +true
    +
    +

    Create/use Persistent Volume Claim for vmstorage component. Empty dir if false. If true, vmstorage will create/use a Persistent Volume Claim

    +
    vmstorage.persistentVolume.existingClaimstring
    +""
    +
    +

    Existing Claim name. Requires vmstorage.persistentVolume.enabled: true. If defined, PVC must be created manually before volume will be bound

    +
    vmstorage.persistentVolume.labelsobject
    +{}
    +
    +

    Persistent volume labels

    +
    vmstorage.persistentVolume.mountPathstring
    +/storage
    +
    +

    Data root path. Vmstorage data Persistent Volume mount root path

    +
    vmstorage.persistentVolume.namestring
    +vmstorage-volume
    +
    +
    vmstorage.persistentVolume.sizestring
    +8Gi
    +
    +

    Size of the volume.

    +
    vmstorage.persistentVolume.storageClassNamestring
    +""
    +
    +

    Storage class name. Will be empty if not setted

    +
    vmstorage.persistentVolume.subPathstring
    +""
    +
    +

    Mount subpath

    +
    vmstorage.podAnnotationsobject
    +{}
    +
    +

    Pod’s annotations

    +
    vmstorage.podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    vmstorage.podLabelsobject
    +{}
    +
    +
    vmstorage.podManagementPolicystring
    +OrderedReady
    +
    +

    Deploy order policy for StatefulSet pods

    +
    vmstorage.podSecurityContext.enabledbool
    +false
    +
    +
    vmstorage.ports.namestring
    +http
    +
    +
    vmstorage.priorityClassNamestring
    +""
    +
    +

    Name of Priority Class

    +
    vmstorage.probe.livenessobject
    +failureThreshold: 10
    +initialDelaySeconds: 30
    +periodSeconds: 30
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    vmstorage liveness probe

    +
    vmstorage.probe.readinessobject
    +failureThreshold: 3
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    vmstorage readiness probe

    +
    vmstorage.probe.startupobject
    +{}
    +
    +

    vmstorage startup probe

    +
    vmstorage.replicaCountint
    +2
    +
    +

    Count of vmstorage pods

    +
    vmstorage.resourcesobject
    +{}
    +
    +

    Resource object. Details are here

    +
    vmstorage.retentionPeriodint
    +1
    +
    +

    Data retention period. Supported values 1w, 1d, number without measurement means month, e.g. 2 = 2month

    +
    vmstorage.securityContextobject
    +enabled: false
    +
    +

    Pod’s security context. Details are here

    +
    vmstorage.service.annotationsobject
    +{}
    +
    +

    Service annotations

    +
    vmstorage.service.externalTrafficPolicystring
    +""
    +
    +
    vmstorage.service.extraPortslist
    +[]
    +
    +

    Extra service ports

    +
    vmstorage.service.healthCheckNodePortstring
    +""
    +
    +
    vmstorage.service.ipFamilieslist
    +[]
    +
    +
    vmstorage.service.ipFamilyPolicystring
    +""
    +
    +
    vmstorage.service.labelsobject
    +{}
    +
    +

    Service labels

    +
    vmstorage.service.servicePortint
    +8482
    +
    +

    Service port

    +
    vmstorage.service.vminsertPortint
    +8400
    +
    +

    Port for accepting connections from vminsert

    +
    vmstorage.service.vmselectPortint
    +8401
    +
    +

    Port for accepting connections from vmselect

    +
    vmstorage.serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    vmstorage.serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    vmstorage.serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for vmstorage component. This is Prometheus operator object

    +
    vmstorage.serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    vmstorage.serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    vmstorage.serviceMonitor.namespacestring
    +""
    +
    +

    Target namespace of ServiceMonitor manifest

    +
    vmstorage.serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    vmstorage.terminationGracePeriodSecondsint
    +60
    +
    +

    Pod’s termination grace period in seconds

    +
    vmstorage.tolerationslist
    +[]
    +
    +

    Array of tolerations object. Node tolerations for server scheduling to nodes with taints. Details are here #

    +
    vmstorage.topologySpreadConstraintslist
    +[]
    +
    +

    Pod topologySpreadConstraints

    +
    vmstorage.vmbackupmanager.destinationstring
    +""
    +
    +

    backup destination at S3, GCS or local filesystem. Pod name will be included to path!

    +
    vmstorage.vmbackupmanager.disableDailybool
    +false
    +
    +

    disable daily backups

    +
    vmstorage.vmbackupmanager.disableHourlybool
    +false
    +
    +

    disable hourly backups

    +
    vmstorage.vmbackupmanager.disableMonthlybool
    +false
    +
    +

    disable monthly backups

    +
    vmstorage.vmbackupmanager.disableWeeklybool
    +false
    +
    +

    disable weekly backups

    +
    vmstorage.vmbackupmanager.enabledbool
    +false
    +
    +

    enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

    +
    vmstorage.vmbackupmanager.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    vmstorage.vmbackupmanager.extraArgs."envflag.enable"string
    +"true"
    +
    +
    vmstorage.vmbackupmanager.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    vmstorage.vmbackupmanager.extraArgs.loggerFormatstring
    +json
    +
    +
    vmstorage.vmbackupmanager.extraSecretMountslist
    +[]
    +
    +
    vmstorage.vmbackupmanager.image.registrystring
    +""
    +
    +

    vmbackupmanager image registry

    +
    vmstorage.vmbackupmanager.image.repositorystring
    +victoriametrics/vmbackupmanager
    +
    +

    vmbackupmanager image repository

    +
    vmstorage.vmbackupmanager.image.tagstring
    +""
    +
    +

    vmbackupmanager image tag override Chart.AppVersion

    +
    vmstorage.vmbackupmanager.image.variantstring
    +cluster
    +
    +
    vmstorage.vmbackupmanager.probe.livenessobject
    +failureThreshold: 10
    +initialDelaySeconds: 30
    +periodSeconds: 30
    +tcpSocket:
    +    port: manager-http
    +timeoutSeconds: 5
    +
    +

    vmbackupmanager liveness probe

    +
    vmstorage.vmbackupmanager.probe.readinessobject
    +failureThreshold: 3
    +httpGet:
    +    port: manager-http
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    vmbackupmanager readiness probe

    +
    vmstorage.vmbackupmanager.probe.startupobject
    +{}
    +
    +

    vmbackupmanager startup probe

    +
    vmstorage.vmbackupmanager.resourcesobject
    +{}
    +
    +
    vmstorage.vmbackupmanager.restoreobject
    +onStart:
    +    enabled: false
    +
    +

    Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager#restore-commands

    +
    vmstorage.vmbackupmanager.retentionobject
    +keepLastDaily: 2
    +keepLastHourly: 2
    +keepLastMonthly: 2
    +keepLastWeekly: 2
    +
    +

    backups’ retention settings

    +
    vmstorage.vmbackupmanager.retention.keepLastDailyint
    +2
    +
    +

    keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

    +
    vmstorage.vmbackupmanager.retention.keepLastHourlyint
    +2
    +
    +

    keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

    +
    vmstorage.vmbackupmanager.retention.keepLastMonthlyint
    +2
    +
    +

    keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

    +
    vmstorage.vmbackupmanager.retention.keepLastWeeklyint
    +2
    +
    +

    keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

    +
    + diff --git a/docs/helm/victoria-metrics-cluster/_changelog.md b/docs/helm/victoria-metrics-cluster/_changelog.md new file mode 100644 index 0000000000..b6427f0697 --- /dev/null +++ b/docs/helm/victoria-metrics-cluster/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-cluster-changelog + parent: helm-victoriametrics-cluster +url: /helm/victoriametrics-cluster/changelog +aliases: + - /helm/victoriametrics-cluster/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-cluster/_index.md b/docs/helm/victoria-metrics-cluster/_index.md new file mode 100644 index 0000000000..b1f36d856d --- /dev/null +++ b/docs/helm/victoria-metrics-cluster/_index.md @@ -0,0 +1,13 @@ +--- +weight: 6 +title: VictoriaMetrics Cluster +menu: + docs: + parent: helm + weight: 6 + identifier: helm-victoriametrics-cluster +url: /helm/victoriametrics-cluster +aliases: + - /helm/victoriametrics-cluster/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-common/CHANGELOG.md b/docs/helm/victoria-metrics-common/CHANGELOG.md new file mode 100644 index 0000000000..29a97bf5fc --- /dev/null +++ b/docs/helm/victoria-metrics-common/CHANGELOG.md @@ -0,0 +1,135 @@ +# CHANGELOG for `victoria-metrics-common` helm-chart + +## Next release + +- TODO + +## 0.0.13 + +**Release date:** 2024-09-16 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Do not use image variant if custom image tag is set in `vm.image` template +- Support multiple license flag styles, which are different for vmanomaly and other services + +## 0.0.12 + +**Release date:** 2024-09-16 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add enterprise to existing variant if enterprise enabled +- Added `vm.enterprise.disabled` template to check if enterprise license is disabled +- Use `service.servicePort` as a port source if flag is not set in `vm.url` + +## 0.0.11 + +**Release date:** 2024-09-11 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to pass extra prefix for `vm.managed.fullname` + +## 0.0.10 + +**Release date:** 2024-09-10 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fixed protocol extraction with TLS enabled +- Typo fixes +- use appkey as `app` label by default +- support multiple service naming styles for `vm.service` + +## 0.0.9 + +**Release date:** 2024-09-02 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Allow `appKey` argument to be a list to support deeply nested objects +- Added `vm.namespace`, which returns `namespaceOverride` or `global.namespaceOverride` or `Release.Namespace` as a default +- Added `vm.managed.fullname`, which returns default fullname prefixed by `appKey` +- Added `vm.plain.fullname`, which returns default fullname suffixed by `appKey` + +## 0.0.8 + +**Release date:** 2024-08-29 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added `vm.service` for unified service name generation +- Added `vm.url` to construct service base url +- Added `vm.name` for chart name +- Added `vm.fullname` which is actively used in resource name construction +- Added `vm.chart` to construct chart name label value +- Added `vm.labels` for common labels +- Added `vm.sa` for service account name +- Added `vm.release` for release name +- Added `vm.selectorLabels` for common selector labels + +## 0.0.7 + +**Release date:** 2024-08-27 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Support short and long args flags in `vm.args` +- Updated `vm.enterprise.only` error message + +## 0.0.6 + +**Release date:** 2024-08-27 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Changed structure of `vm.args` template output +- Removed `eula` support + +## 0.0.5 + +**Release date:** 2024-08-26 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fixed `vm.enterprise.only` template to check if at least one of both global.licence.eula and .Values.license.eula are defined +- Convert `vm.args` bool `true` values to flags without values + +## 0.0.4 + +**Release date:** 2024-08-26 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Updated `vm.probe.*` templates to remove Helm 3.14 restriction. +- Added `vm.args` template for cmd args generation + +## 0.0.3 + +**Release date:** 2024-08-25 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Moved license templates from other charts `vm.license.volume`, `vm.license.mount`, `vm.license.flag` +- Moved `vm.compatibility.renderSecurityContext` template +- Fixed a case, when null is passed to a `.Values.global`. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1296) + +## 0.0.2 + +**Release date:** 2024-08-23 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added `vm.port.from.flag` template to extract port from cmd flag listen address. + +## 0.0.1 + +**Release date:** 2024-08-15 + +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added `vm.enterprise.only` template to fail rendering if required license arguments weren't set. +- Added `vm.image` template that introduces common chart logic of how to build image name from application variables. +- Added `vm.ingress.port` template to render properly tngress port configuration depending on args type. +- Added `vm.probe.*` templates to render probes params consistently across all templates. diff --git a/docs/helm/victoria-metrics-distributed/CHANGELOG.md b/docs/helm/victoria-metrics-distributed/CHANGELOG.md new file mode 100644 index 0000000000..22f32e599b --- /dev/null +++ b/docs/helm/victoria-metrics-distributed/CHANGELOG.md @@ -0,0 +1,59 @@ +## Next release + +- TODO + +## 0.3.1 + +**Release date:** 2024-09-19 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Do not truncate datasource name +- Support customizing vmauthQueryGlobal spec. Thanks to @olivierbouffet for [the pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1511). +- Support overriding the default name for extra vmagent and vmcluster per zone. + +## 0.3.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) + +## 0.2.2 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.2.1 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.2.0 + +**Release date:** 2024-07-15 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Breaking change: disable multitenancy mode by default, see how to enable it in . See [this pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1137) for details. + +## 0.1.1 + +**Release date:** 2024-06-27 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- [vmauth-read-balancer-zone]: change server from vmselect pod enumeration to service DNS address, so it still work when vmselect scales. diff --git a/docs/helm/victoria-metrics-distributed/README.md b/docs/helm/victoria-metrics-distributed/README.md new file mode 100644 index 0000000000..7008361c81 --- /dev/null +++ b/docs/helm/victoria-metrics-distributed/README.md @@ -0,0 +1,665 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.3.1](https://img.shields.io/badge/Version-0.3.1-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-distributed) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +A Helm chart for Running VMCluster on Multiple Availability Zones + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +* PV support on underlying infrastructure. + +* Multiple availability zones. + +## Chart Details + +This chart sets up multiple VictoriaMetrics cluster instances on multiple [availability zones](https://kubernetes.io/docs/setup/best-practices/multiple-zones/), provides both global write and read entrypoints. + +The default setup is as shown below: + +![victoriametrics-distributed-topology](./victoriametrics-distributed-topology.png) + +For write: +1. extra-vmagent(optional): scrapes external targets and all the components installed by this chart, sends data to global write entrypoint. +2. vmauth-global-write: global write entrypoint, proxies requests to one of the zone `vmagent` with `least_loaded` policy. +3. vmagent(per-zone): remote writes data to availability zones that enabled `.Values.availabilityZones.allowIngest`, and [buffer data on disk](https://docs.victoriametrics.com/vmagent/#calculating-disk-space-for-persistence-queue) when zone is unavailable to ingest. +4. vmauth-write-balancer(per-zone): proxies requests to vminsert instances inside it's zone with `least_loaded` policy. +5. vmcluster(per-zone): processes write requests and stores data. + +For read: +1. vmcluster(per-zone): processes query requests and returns results. +2. vmauth-read-balancer(per-zone): proxies requests to vmselect instances inside it's zone with `least_loaded` policy. +3. vmauth-read-proxy(per-zone): uses all the `vmauth-read-balancer` as servers if zone has `.Values.availabilityZones.allowQuery` enabled, always prefer "local" `vmauth-read-balancer` to reduce cross-zone traffic with `first_available` policy. +4. vmauth-global-read: global query entrypoint, proxies requests to one of the zone `vnauth-read-proxy` with `first_available` policy. +5. grafana(optional): uses `vmauth-global-read` as default datasource. + +>Note: +As the topology shown above, this chart doesn't include components like vmalert, alertmanager, etc by default. +You can install them using dependency [victoria-metrics-k8s-stack](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-k8s-stack) or having separate release. + +### Why use `victoria-metrics-distributed` chart? + +One of the best practice of running production kubernetes cluster is running with [multiple availability zones](https://kubernetes.io/docs/setup/best-practices/multiple-zones/). And apart from kubernetes control plane components, we also want to spread our application pods on multiple zones, to continue serving even if zone outage happens. + +VictoriaMetrics supports [data replication](https://docs.victoriametrics.com/cluster-victoriametrics/#replication-and-data-safety) natively which can guarantees data availability when part of the vmstorage instances failed. But it doesn't works well if vmstorage instances are spread on multiple availability zones, since data replication could be stored on single availability zone, which will be lost when zone outage happens. +To avoid this, vmcluster must be installed on multiple availability zones, each containing a 100% copy of data. As long as one zone is available, both global write and read entrypoints should work without interruption. + +### How to write data? + +The chart provides `vmauth-global-write` as global write entrypoint, it supports [push-based data ingestion protocols](https://docs.victoriametrics.com/vmagent/#how-to-push-data-to-vmagent) as VictoriaMetrics does. +Optionally, you can push data to any of the per-zone vmagents, and they will replicate the received data across zones. + +### How to query data? + +The chart provides `vmauth-global-read` as global read entrypoint, it picks the first available zone (see [first_available](https://docs.victoriametrics.com/vmauth/#high-availability) policy) as it's preferred datasource and switches automatically to next zone if first one is unavailable, check [vmauth `first_available`](https://docs.victoriametrics.com/vmauth/#high-availability) for more details. +If you have services like [vmalert](https://docs.victoriametrics.com/vmalert) or Grafana deployed in each zone, then configure them to use local `vmauth-read-proxy`. Per-zone `vmauth-read-proxy` always prefers "local" vmcluster for querying and reduces cross-zone traffic. + +You can also pick other proxies like kubernetes service which supports [Topology Aware Routing](https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing/) as global read entrypoint. + +### What happens if zone outage happen? + +If availability zone `zone-eu-1` is experiencing an outage, `vmauth-global-write` and `vmauth-global-read` will work without interruption: +1. `vmauth-global-write` stops proxying write requests to `zone-eu-1` automatically; +2. `vmauth-global-read` and `vmauth-read-proxy` stops proxying read requests to `zone-eu-1` automatically; +3. `vmagent` on `zone-us-1` fails to send data to `zone-eu-1.vmauth-write-balancer`, starts to buffer data on disk(unless `-remoteWrite.disableOnDiskQueue` is specified, which is not recommended for this topology); +To keep data completeness for all the availability zones, make sure you have enough disk space on vmagent for buffer, see [this doc](https://docs.victoriametrics.com/vmagent/#calculating-disk-space-for-persistence-queue) for size recommendation. + +And to avoid getting incomplete responses from `zone-eu-1` which gets recovered from outage, check vmagent on `zone-us-1` to see if persistent queue has been drained. If not, remove `zone-eu-1` from serving query by setting `.Values.availabilityZones.{zone-eu-1}.allowQuery=false` and change it back after confirm all data are restored. + +### How to use [multitenancy](https://docs.victoriametrics.com/cluster-victoriametrics/#multitenancy)? + +By default, all the data that written to `vmauth-global-write` belong to tenant `0`. To write data to different tenants, set `.Values.enableMultitenancy=true` and create new tenant users for `vmauth-global-write`. +For example, writing data to tenant `1088` with following steps: +1. create tenant VMUser for vmauth `vmauth-global-write` to use: +``` +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMUser +metadata: + name: tenant-1088-rw + labels: + tenant-test: "true" +spec: + targetRefs: + - static: + ## list all the zone vmagent here + url: "http://vmagent-vmagent-zone-eu-1:8429" + url: "http://vmagent-vmagent-zone-us-1:8429" + paths: + - "/api/v1/write" + - "/prometheus/api/v1/write" + - "/write" + - "/api/v1/import" + - "/api/v1/import/.+" + target_path_suffix: /insert/1088/ + username: tenant-1088 + password: secret +``` + +Add extra VMUser selector in vmauth `vmauth-global-write` +``` +spec: + userSelector: + matchLabels: + tenant-test: "true" +``` + +2. send data to `vmauth-global-write` using above token. +Example command using vmagent: +``` +/path/to/vmagent -remoteWrite.url=http://vmauth-vmauth-global-write-$ReleaseName-vm-distributed:8427/prometheus/api/v1/write -remoteWrite.basicAuth.username=tenant-1088 -remoteWrite.basicAuth.password=secret +``` + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-distributed` chart available to installation: + +```console +helm search repo vm/victoria-metrics-distributed -l +``` + +### Install `victoria-metrics-distributed` chart + +Export default values of `victoria-metrics-distributed` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-distributed > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-distributed > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vmd vm/victoria-metrics-distributed -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vmd oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-distributed -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vmd vm/victoria-metrics-distributed -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vmd oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-distributed -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vmd' +``` + +Get the application by running this command: + +```console +helm list -f vmd -n NAMESPACE +``` + +See the history of versions of `vmd` application with command. + +```console +helm history vmd -n NAMESPACE +``` + +## How to upgrade + +In order to serving query and ingestion while upgrading components version or changing configurations, it's recommended to perform maintenance on availability zone one by one. +First, performing update on availability zone `zone-eu-1`: +1. remove `zone-eu-1` from serving query by setting `.Values.availabilityZones.{zone-eu-1}.allowQuery=false`; +2. run `helm upgrade vm-dis -n NAMESPACE` with updated configurations for `zone-eu-1` in `values.yaml`; +3. wait for all the components on zone `zone-eu-1` running; +4. wait `zone-us-1` vmagent persistent queue for `zone-eu-1` been drained, add `zone-eu-1` back to serving query by setting `.Values.availabilityZones.{zone-eu-1}.allowQuery=true`. + +Then, perform update on availability zone `zone-us-1` with the same steps1~4. + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vmd -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-distributed + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-distributed`/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    availabilityZoneslist
    +- allowIngest: true
    +  allowQuery: true
    +  extraAffinity: {}
    +  name: zone-eu-1
    +  nodeSelector:
    +    topology.kubernetes.io/zone: zone-eu-1
    +  topologySpreadConstraints:
    +    - maxSkew: 1
    +      topologyKey: kubernetes.io/hostname
    +      whenUnsatisfiable: ScheduleAnyway
    +  vmagent:
    +    annotations: {}
    +    enabled: true
    +    name: ""
    +    spec: {}
    +  vmauthCrossAZQuery:
    +    enabled: true
    +    name: ""
    +    spec: {}
    +  vmauthIngest:
    +    enabled: true
    +    name: ""
    +    spec:
    +        extraArgs:
    +            discoverBackendIPs: "true"
    +  vmauthQueryPerZone:
    +    enabled: true
    +    name: ""
    +    spec:
    +        extraArgs:
    +            discoverBackendIPs: "true"
    +  vmcluster:
    +    enabled: true
    +    name: ""
    +    spec:
    +        replicationFactor: 2
    +        retentionPeriod: "14"
    +        vminsert:
    +            extraArgs: {}
    +            replicaCount: 2
    +            resources: {}
    +        vmselect:
    +            extraArgs: {}
    +            replicaCount: 2
    +            resources: {}
    +        vmstorage:
    +            replicaCount: 2
    +            resources: {}
    +            storageDataPath: /vm-data
    +- allowIngest: true
    +  allowQuery: true
    +  extraAffinity: {}
    +  name: zone-us-1
    +  nodeSelector:
    +    topology.kubernetes.io/zone: zone-us-1
    +  topologySpreadConstraints:
    +    - maxSkew: 1
    +      topologyKey: kubernetes.io/hostname
    +      whenUnsatisfiable: ScheduleAnyway
    +  vmagent:
    +    annotations: {}
    +    enabled: true
    +    name: ""
    +    spec: {}
    +  vmauthCrossAZQuery:
    +    enabled: true
    +    name: ""
    +    spec: {}
    +  vmauthIngest:
    +    enabled: true
    +    name: ""
    +    spec:
    +        extraArgs:
    +            discoverBackendIPs: "true"
    +  vmauthQueryPerZone:
    +    enabled: true
    +    name: ""
    +    spec:
    +        extraArgs:
    +            discoverBackendIPs: "true"
    +  vmcluster:
    +    enabled: true
    +    name: ""
    +    spec:
    +        replicationFactor: 2
    +        retentionPeriod: "14"
    +        vminsert:
    +            extraArgs: {}
    +            replicaCount: 2
    +            resources: {}
    +        vmselect:
    +            extraArgs: {}
    +            replicaCount: 2
    +            resources: {}
    +        vmstorage:
    +            replicaCount: 2
    +            resources: {}
    +            storageDataPath: /vm-data
    +
    +

    config per availability zone components, including vmagent, vmcluster, vmauth etc

    +
    availabilityZones[0].allowIngestbool
    +true
    +
    +

    allow data ingestion to this zone

    +
    availabilityZones[0].allowQuerybool
    +true
    +
    +

    allow data query from this zone through global query endpoint

    +
    availabilityZones[0].extraAffinityobject
    +{}
    +
    +

    extraAffinity adds user defined custom affinity rules

    +
    availabilityZones[0].nodeSelectorobject
    +topology.kubernetes.io/zone: zone-eu-1
    +
    +

    nodeselector to restrict where pods of this zone can be placed. usually provided by cloud providers.

    +
    availabilityZones[0].topologySpreadConstraintslist
    +- maxSkew: 1
    +  topologyKey: kubernetes.io/hostname
    +  whenUnsatisfiable: ScheduleAnyway
    +
    +

    topologySpreadConstraints allows to customize the default topologySpreadConstraints.

    +
    availabilityZones[0].vmagentobject
    +annotations: {}
    +enabled: true
    +name: ""
    +spec: {}
    +
    +

    vmagent here only meant to proxy write requests to each az, doesn’t support customized other remote write address.

    +
    availabilityZones[0].vmauthCrossAZQueryobject
    +enabled: true
    +name: ""
    +spec: {}
    +
    +

    set up a vmauth with all the zone with allowQuery: true as query backends

    +
    availabilityZones[0].vmauthIngest.namestring
    +""
    +
    +

    override the name of the vmauth object

    +
    availabilityZones[0].vmcluster.namestring
    +""
    +
    +

    override the name of the vmcluster, by default is vmcluster-

    +
    availabilityZones[0].vmcluster.specobject
    +replicationFactor: 2
    +retentionPeriod: "14"
    +vminsert:
    +    extraArgs: {}
    +    replicaCount: 2
    +    resources: {}
    +vmselect:
    +    extraArgs: {}
    +    replicaCount: 2
    +    resources: {}
    +vmstorage:
    +    replicaCount: 2
    +    resources: {}
    +    storageDataPath: /vm-data
    +
    +

    spec for VMCluster crd, see https://docs.victoriametrics.com/operator/api#vmclusterspec

    +
    availabilityZones[1].allowIngestbool
    +true
    +
    +

    allow data ingestion to this zone

    +
    availabilityZones[1].allowQuerybool
    +true
    +
    +

    allow data query from this zone through global query endpoint

    +
    availabilityZones[1].extraAffinityobject
    +{}
    +
    +

    extraAffinity adds user defined custom affinity rules

    +
    availabilityZones[1].nodeSelectorobject
    +topology.kubernetes.io/zone: zone-us-1
    +
    +

    nodeselector to restrict where pods of this zone can be placed. usually provided by cloud providers.

    +
    availabilityZones[1].topologySpreadConstraintslist
    +- maxSkew: 1
    +  topologyKey: kubernetes.io/hostname
    +  whenUnsatisfiable: ScheduleAnyway
    +
    +

    topologySpreadConstraints allows to customize the default topologySpreadConstraints.

    +
    availabilityZones[1].vmagentobject
    +annotations: {}
    +enabled: true
    +name: ""
    +spec: {}
    +
    +

    vmagent only meant to proxy write requests to each az, doesn’t support customized remote write address

    +
    availabilityZones[1].vmcluster.namestring
    +""
    +
    +

    override the name of the vmcluster, by default is vmcluster-

    +
    availabilityZones[1].vmcluster.specobject
    +replicationFactor: 2
    +retentionPeriod: "14"
    +vminsert:
    +    extraArgs: {}
    +    replicaCount: 2
    +    resources: {}
    +vmselect:
    +    extraArgs: {}
    +    replicaCount: 2
    +    resources: {}
    +vmstorage:
    +    replicaCount: 2
    +    resources: {}
    +    storageDataPath: /vm-data
    +
    +

    spec for VMCluster crd, see https://docs.victoriametrics.com/operator/api#vmclusterspec

    +
    enableMultitenancybool
    +false
    +
    +

    enable multitenancy mode see https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-distributed#how-to-use-multitenancy

    +
    extraVMAgentobject
    +enabled: true
    +name: test-vmagent
    +spec:
    +    selectAllByDefault: true
    +
    +

    set up an extra vmagent to scrape all the scrape objects by default, and write data to above vmauth-global-ingest endpoint.

    +
    fullnameOverridestring
    +""
    +
    +

    overrides the chart’s computed fullname.

    +
    nameOverridestring
    +vm-distributed
    +
    +

    overrides the chart’s name

    +
    victoria-metrics-k8s-stackobject
    +alertmanager:
    +    enabled: false
    +crds:
    +    enabled: true
    +enabled: true
    +grafana:
    +    enabled: true
    +    sidecar:
    +        datasources:
    +            enabled: true
    +victoria-metrics-operator:
    +    enabled: true
    +vmagent:
    +    enabled: false
    +vmalert:
    +    enabled: false
    +vmcluster:
    +    enabled: false
    +vmsingle:
    +    enabled: false
    +
    +

    set up vm operator and other resources like vmalert, grafana if needed

    +
    vmauthIngestGlobalobject
    +enabled: true
    +name: ""
    +spec: {}
    +
    +

    set up a vmauth as the global write entrypoint

    +
    vmauthQueryGlobalobject
    +enabled: true
    +name: ""
    +spec: {}
    +
    +

    set up a vmauth as the global read entrypoint

    +
    + diff --git a/docs/helm/victoria-metrics-distributed/_changelog.md b/docs/helm/victoria-metrics-distributed/_changelog.md new file mode 100644 index 0000000000..91a7f46b2c --- /dev/null +++ b/docs/helm/victoria-metrics-distributed/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-distributed-changelog + parent: helm-victoriametrics-distributed +url: /helm/victoriametrics-distributed/changelog +aliases: + - /helm/victoriametrics-distributed/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-distributed/_index.md b/docs/helm/victoria-metrics-distributed/_index.md new file mode 100644 index 0000000000..52ce6ae860 --- /dev/null +++ b/docs/helm/victoria-metrics-distributed/_index.md @@ -0,0 +1,13 @@ +--- +weight: 7 +title: VictoriaMetrics Distributed +menu: + docs: + parent: helm + weight: 7 + identifier: helm-victoriametrics-distributed +url: /helm/victoriametrics-distributed +aliases: + - /helm/victoriametrics-distrinuted/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-gateway/CHANGELOG.md b/docs/helm/victoria-metrics-gateway/CHANGELOG.md new file mode 100644 index 0000000000..0110f17f7f --- /dev/null +++ b/docs/helm/victoria-metrics-gateway/CHANGELOG.md @@ -0,0 +1,257 @@ +## Next release + +- TODO + +## 0.4.0 + +**Release date:** 2024-09-12 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Deprecated `rateLimiter.enable` in a favour of `rateLimiter.enabled` +- Deprecated `auth.enable` in a favour of `auth.enabled` +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables + +## 0.3.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Added ability to configure container port +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Removed `eula` support + +## 0.2.0 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: main container name was changed to `vmgateway`, which will reacreate a pod. + +**Update note**: requires Helm 3.14+ + +- Added `basicAuth` support for `ServiceMonitor` +- Set minimal kubernetes version to `1.25` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Added params to configure probes `.Values.probe.readiness`, `.Values.probe.liveness` and `.Values.probe.startup` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Use static container names in a pod +- Added `.Values.service.ipFamilies` and `.Values.service.ipFamilyPolicy` for service IP family management + +## 0.1.64 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.1.63 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.1.62 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.1.61 + +**Release date:** 2024-05-16 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 0.1.60 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.1.59 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.1.58 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +## 0.1.57 + +**Release date:** 2024-03-28 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.1.56 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.1.55 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) + +## 0.1.54 + +**Release date:** 2023-12-13 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix configuration of volume mount for license key referenced by using secret. +- Fix `vmbackupmanager` flags configuration when providing license key via secret. + +## 0.1.53 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) + +## 0.1.52 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.1.51 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) + +## 0.1.50 + +**Release date:** 2023-10-25 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix deployment `volumeMounts` when providing enterprise license key for VictoriaMetrics enterprise. See [this pr](https://github.com/VictoriaMetrics/helm-charts/pull/734) for details. + +## 0.1.49 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) +- Add support of providing enterprise license key for VictoriaMetrics enterprise. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.1.48 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.1.47 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) + +## 0.1.46 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of vmgateway to `v1.93.3` + +## 0.1.43 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.1.42 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 + +## 0.1.41 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.1.40 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 diff --git a/docs/helm/victoria-metrics-gateway/README.md b/docs/helm/victoria-metrics-gateway/README.md new file mode 100644 index 0000000000..ade7b31540 --- /dev/null +++ b/docs/helm/victoria-metrics-gateway/README.md @@ -0,0 +1,924 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.4.0](https://img.shields.io/badge/Version-0.4.0-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-gateway) +[![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) + +Victoria Metrics Gateway - Auth & Rate-Limitting proxy for Victoria Metrics + +# Table of Content + +* [Prerequisites](#prerequisites) +* [Chart Details](#chart-details) +* [How to Install](#how-to-install) +* [How to Uninstall](#how-to-uninstall) +* [How to use JWT signature verification](#how-to-use-jwt-signature-verification) +* [Documentation of Helm Chart](#documentation-of-helm-chart) + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). +* PV support on underlying infrastructure + +## Chart Details + +This chart will do the following: + +* Rollout victoria metrics gateway + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-gateway` chart available to installation: + +```console +helm search repo vm/victoria-metrics-gateway -l +``` + +### Install `victoria-metrics-gateway` chart + +Export default values of `victoria-metrics-gateway` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-gateway > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-gateway > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vmg vm/victoria-metrics-gateway -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vmg oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-gateway -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vmg vm/victoria-metrics-gateway -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vmg oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-gateway -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vmg' +``` + +Get the application by running this command: + +```console +helm list -f vmg -n NAMESPACE +``` + +See the history of versions of `vmg` application with command. + +```console +helm history vmg -n NAMESPACE +``` + +# How to use [JWT signature verification](https://docs.victoriametrics.com/vmgateway#jwt-signature-verification) + +Kubernetes best-practice is to store sensitive configuration parts in secrets. For example, 2 keys will be stored as: +```yaml +apiVersion: v1 +data: + key: "<>" +kind: Secret +metadata: + name: key1 +--- +apiVersion: v1 +data: + key: "<>" +kind: Secret +metadata: + name: key2 +``` + +In order to use those secrets it is needed to: +- mount secrets into pod +- provide flag pointing to secret on disk + +Here is an example `values.yml` file configuration to achieve this: +```yaml +auth: + enable: true + +extraVolumes: + - name: key1 + secret: + secretName: key1 + - name: key2 + secret: + secretName: key2 + +extraVolumeMounts: + - name: key1 + mountPath: /key1 + - name: key2 + mountPath: /key2 + +extraArgs: + envflag.enable: "true" + envflag.prefix: VM_ + loggerFormat: json + auth.publicKeyFiles: "/key1/key,/key2/key" +``` +Note that in this configuration all secret keys will be mounted and accessible to pod. +Please, refer to [this](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#secretvolumesource-v1-core) doc to see all available secret source options. + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vmg -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-gateway + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-gateway/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    affinityobject
    +{}
    +
    +

    Affinity configurations

    +
    annotationsobject
    +{}
    +
    +

    Annotations to be added to the deployment

    +
    authobject
    +enabled: false
    +
    +

    Access Control configuration. https://docs.victoriametrics.com/vmgateway#access-control

    +
    auth.enabledbool
    +false
    +
    +

    Enable/Disable access-control

    +
    clusterModebool
    +false
    +
    +

    Specify to True if the source for rate-limiting, reading and writing as a VictoriaMetrics Cluster. Must be true for rate limiting

    +
    configMapstring
    +""
    +
    +

    Use existing configmap if specified otherwise .config values will be used. Ref: https://docs.victoriametrics.com/vmgateway

    +
    containerWorkingDirstring
    +/
    +
    +
    envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables

    +
    envFromlist
    +[]
    +
    +
    extraArgs."envflag.enable"string
    +"true"
    +
    +
    extraArgs."envflag.prefix"string
    +VM_
    +
    +
    extraArgs.loggerFormatstring
    +json
    +
    +
    extraContainerslist
    +[]
    +
    +
    extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    fullnameOverridestring
    +""
    +
    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    image.pullPolicystring
    +IfNotPresent
    +
    +

    Pull policy of Docker image

    +
    image.registrystring
    +""
    +
    +

    Victoria Metrics gateway Docker registry

    +
    image.repositorystring
    +victoriametrics/vmgateway
    +
    +

    Victoria Metrics gateway Docker repository and image name

    +
    image.tagstring
    +""
    +
    +

    Tag of Docker image override Chart.AppVersion

    +
    image.variantstring
    +""
    +
    +
    imagePullSecretslist
    +[]
    +
    +
    ingress.annotationsobject
    +{}
    +
    +
    ingress.enabledbool
    +false
    +
    +
    ingress.extraLabelsobject
    +{}
    +
    +
    ingress.hostslist
    +[]
    +
    +
    ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    ingress.tlslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +
    license.keystring
    +""
    +
    +

    License key

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    nameOverridestring
    +""
    +
    +
    nodeSelectorobject
    +{}
    +
    +

    NodeSelector configurations. Ref: https://kubernetes.io/docs/user-guide/node-selection/

    +
    podAnnotationsobject
    +{}
    +
    +

    Annotations to be added to pod

    +
    podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

    +
    podSecurityContext.enabledbool
    +true
    +
    +
    probe.livenessobject
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
    +

    liveness probe

    +
    probe.readinessobject
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +
    +

    readiness probe

    +
    probe.startupobject
    +{}
    +
    +

    startup probe

    +
    rateLimiterobject
    +config: {}
    +datasource:
    +    url: ""
    +enabled: false
    +
    +

    Rate limiter configuration. Docs https://docs.victoriametrics.com/vmgateway#rate-limiter

    +
    rateLimiter.datasource.urlstring
    +""
    +
    +

    Datasource VictoriaMetrics or vmselects. Required. Example http://victoroametrics:8428 or http://vmselect:8481/select/0/prometheus

    +
    rateLimiter.enabledbool
    +false
    +
    +

    Enable/Disable rate-limiting

    +
    read.urlstring
    +""
    +
    +

    Read endpoint without suffixes, victoriametrics or vmselect. Example http://victoroametrics:8428 or http://vmselect:8481

    +
    replicaCountint
    +1
    +
    +

    Number of replicas of vmgateway

    +
    resourcesobject
    +{}
    +
    +

    We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. If you do want to specify resources, uncomment the following lines, adjust them as necessary, and remove the curly braces after ‘resources:’.

    +
    securityContextobject
    +enabled: true
    +runAsGroup: 1000
    +runAsNonRoot: true
    +runAsUser: 1000
    +
    +

    Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

    +
    service.annotationsobject
    +{}
    +
    +
    service.clusterIPstring
    +""
    +
    +
    service.enabledbool
    +true
    +
    +
    service.externalIPslist
    +[]
    +
    +
    service.extraLabelsobject
    +{}
    +
    +
    service.ipFamilieslist
    +[]
    +
    +
    service.ipFamilyPolicystring
    +""
    +
    +
    service.loadBalancerIPstring
    +""
    +
    +
    service.loadBalancerSourceRangeslist
    +[]
    +
    +
    service.servicePortint
    +8431
    +
    +
    service.typestring
    +ClusterIP
    +
    +
    serviceAccount.annotationsobject
    +{}
    +
    +

    Annotations to add to the service account

    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +null
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    +
    serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    tolerationslist
    +[]
    +
    +

    Tolerations configurations. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

    +
    write.urlstring
    +""
    +
    +

    Write endpoint without suffixes, victoriametrics or vminsert. Example http://victoroametrics:8428 or http://vminsert:8480

    +
    + diff --git a/docs/helm/victoria-metrics-gateway/_changelog.md b/docs/helm/victoria-metrics-gateway/_changelog.md new file mode 100644 index 0000000000..26153f3ad8 --- /dev/null +++ b/docs/helm/victoria-metrics-gateway/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-gateway-changelog + parent: helm-victoriametrics-gateway +url: /helm/victoriametrics-gateway/changelog +aliases: + - /helm/victoriametrics-gateway/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-gateway/_index.md b/docs/helm/victoria-metrics-gateway/_index.md new file mode 100644 index 0000000000..6b6853796f --- /dev/null +++ b/docs/helm/victoria-metrics-gateway/_index.md @@ -0,0 +1,13 @@ +--- +weight: 8 +title: VictoriaMetrics Gateway +menu: + docs: + parent: helm + weight: 8 + identifier: helm-victoriametrics-gateway +url: /helm/victoriametrics-gateway +aliases: + - /helm/victoriametrics-gateway/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-k8s-stack/CHANGELOG.md b/docs/helm/victoria-metrics-k8s-stack/CHANGELOG.md new file mode 100644 index 0000000000..d044b526ad --- /dev/null +++ b/docs/helm/victoria-metrics-k8s-stack/CHANGELOG.md @@ -0,0 +1,688 @@ +## Next release + +- TODO + +## 0.25.17 + +**Release date:** 2024-09-20 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added VMAuth to k8s stack. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/829) +- Fixed ETCD dashboard +- Use path prefix from args as a default path prefix for ingress. Related [issue](https://github.com/VictoriaMetrics/helm-charts/issues/1260) +- Allow using vmalert without notifiers configuration. Note that it is required to use `.vmalert.spec.extraArgs["notifiers.blackhole"]: true` in order to start vmalert with a blackhole configuration. + +## 0.25.16 + +**Release date:** 2024-09-10 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Do not truncate servicemonitor, datasources, rules, dashboard, alertmanager & vmalert templates names +- Use service label for node-exporter instead of podLabel. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1458) +- Added common chart to a k8s-stack. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1456) +- Fixed value of custom alertmanager configSecret. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1461) + +## 0.25.15 + +**Release date:** 2024-09-05 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Drop empty endpoints param from scrape configuration +- Fixed proto when TLS is enabled. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1449) + +## 0.25.14 + +**Release date:** 2024-09-04 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed alertmanager templates + +## 0.25.13 + +**Release date:** 2024-09-04 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Use operator's own service monitor + +## 0.25.12 + +**Release date:** 2024-09-03 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fixed dashboards rendering. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1414) +- Fixed service monitor label name. + +## 0.25.11 + +**Release date:** 2024-09-03 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Merged ingress templates +- Removed custom VMServiceScrape for operator +- Added ability to override default Prometheus-compatible datatasources with all available parameters. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/860). +- Do not use `grafana.dashboards` and `grafana.dashboardProviders`. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1312). +- Migrated Node Exporter dashboard into chart +- Deprecated `grafana.sidecar.jsonData`, `grafana.provisionDefaultDatasource` in a favour of `grafana.sidecar.datasources.default` slice of datasources. +- Fail if no notifiers are set, do not set `notifiers` to null if empty + +## 0.25.10 + +**Release date:** 2024-08-31 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed ingress extraPaths and externalVM urls rendering + +## 0.25.9 + +**Release date:** 2024-08-31 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed vmalert ingress name typo +- Added ability to override default Prometheus-compatible datatasources with all available parameters. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/860). +- Do not use `grafana.dashboards` and `grafana.dashboardProviders`. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1312). + +## 0.25.8 + +**Release date:** 2024-08-30 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed external notifiers rendering, when alertmanager is disabled. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1378) + +## 0.25.7 + +**Release date:** 2024-08-30 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed extra rules template context + +## 0.25.6 + +**Release date:** 2024-08-29 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: Update `kubeProxy.spec` to `kubeProxy.vmScrape.spec` + +**Update note**: Update `kubeScheduler.spec` to `kubeScheduler.vmScrape.spec` + +**Update note**: Update `kubeEtcd.spec` to `kubeEtcd.vmScrape.spec` + +**Update note**: Update `coreDns.spec` to `coreDns.vmScrape.spec` + +**Update note**: Update `kubeDns.spec` to `kubeDns.vmScrape.spec` + +**Update note**: Update `kubeProxy.spec` to `kubeProxy.vmScrape.spec` + +**Update note**: Update `kubeControllerManager.spec` to `kubeControllerManager.vmScrape.spec` + +**Update note**: Update `kubeApiServer.spec` to `kubeApiServer.vmScrape.spec` + +**Update note**: Update `kubelet.spec` to `kubelet.vmScrape.spec` + +**Update note**: Update `kube-state-metrics.spec` to `kube-state-metrics.vmScrape.spec` + +**Update note**: Update `prometheus-node-exporter.spec` to `prometheus-node-exporter.vmScrape.spec` + +**Update note**: Update `grafana.spec` to `grafana.vmScrape.spec` + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Added `dashboards.` bool flag to enable dashboard even if component it is for is not installed. +- Allow extra `vmalert.notifiers` without dropping default notifier if `alertmanager.enabled: true` +- Do not drop default notifier, when vmalert.additionalNotifierConfigs is set +- Replaced static url proto with a template, which selects proto depending on a present tls configuration +- Moved kubernetes components monitoring config from `spec` config to `vmScrape.spec` +- Merged servicemonitor templates + +## 0.25.5 + +**Release date:** 2024-08-26 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- TODO + +## 0.25.4 + +**Release date:** 2024-08-26 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.47.2](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.2) +- kube-state-metrics - 5.16.4 -> 5.25.1 +- prometheus-node-exporter - 4.27.0 -> 4.29.0 +- grafana - 8.3.8 -> 8.4.7 +- added configurable `.Values.global.clusterLabel` to all alerting and recording rules `by` and `on` expressions + +## 0.25.3 + +**Release date:** 2024-08-23 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updated operator to v0.47.1 release +- Build `app.kubernetes.io/instance` label consistently. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1282) + +## 0.25.2 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixed vmalert ingress name. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1271) +- fixed alertmanager ingress host template rendering. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1270) + +## 0.25.1 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added `.Values.global.license` configuration +- Fixed extraLabels rendering. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1248) +- Fixed vmalert url to alertmanager by including its path prefix +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Fixed kubedns servicemonitor template. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1255) + +## 0.25.0 + +**Release date:** 2024-08-16 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: it requires to update CRD dependency manually before upgrade + +**Update note**: requires Helm 3.14+ + +- Moved dashboards templating logic out of sync script to Helm template +- Allow to disable default grafana datasource +- Synchronize Etcd dashboards and rules with mixin provided by Etcd +- Add alerting rules for VictoriaMetrics operator. +- Updated alerting rules for VictoriaMetrics components. +- Fixed exact rule annotations propagation to other rules. +- Set minimal kubernetes version to 1.25 +- updates operator to v0.47.0 version + +## 0.24.5 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.24.4 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update dependencies: grafana -> 8.3.6. +- Added `.Values.defaultRules.alerting` and `.Values.defaultRules.recording` to setup common properties for all alerting an recording rules + +## 0.24.3 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.24.2 + +**Release date:** 2024-07-15 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix vmalertmanager configuration when using `.VMAlertmanagerSpec.ConfigRawYaml`. See [this pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1136). + +## 0.24.1 + +**Release date:** 2024-07-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to v0.46.4 + +## 0.24.0 + +**Release date:** 2024-07-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to override alerting rules labels and annotations: +- globally - `.Values.defaultRules.rule.spec.labels` (before it was `.Values.defaultRules.additionalRuleLabels`) and `.Values.defaultRules.rule.spec.annotations` +- for all rules in a group - `.Values.defaultRules.groups..rules.spec.labels` and `.Valeus.defaultRules.groups..rules.spec.annotations` +- for each rule individually - `.Values.defaultRules.rules..spec.labels` and `.Values.defaultRules.rules..spec.annotations` +- changed `.Values.defaultRules.rules.` to `.Values.defaultRules.groups..create` +- changed `.Values.defaultRules.appNamespacesTarget` to `.Values.defaultRules.groups..targetNamespace` +- changed `.Values.defaultRules.params` to `.Values.defaultRules.group.spec.params` with ability to override it at `.Values.defaultRules.groups..spec.params` + +## 0.23.6 + +**Release date:** 2024-07-08 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to override alerting rules labels and annotations: +- globally - `.Values.defaultRules.rule.spec.labels` (before it was `.Values.defaultRules.additionalRuleLabels`) and `.Values.defaultRules.rule.spec.annotations` +- for all rules in a group - `.Values.defaultRules.groups..rules.spec.labels` and `.Valeus.defaultRules.groups..rules.spec.annotations` +- for each rule individually - `.Values.defaultRules.rules..spec.labels` and `.Values.defaultRules.rules..spec.annotations` +- changed `.Values.defaultRules.rules.` to `.Values.defaultRules.groups..create` +- changed `.Values.defaultRules.appNamespacesTarget` to `.Values.defaultRules.groups..targetNamespace` +- changed `.Values.defaultRules.params` to `.Values.defaultRules.group.spec.params` with ability to override it at `.Values.defaultRules.groups..spec.params` + +## 0.23.5 + +**Release date:** 2024-07-04 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Support configuring vmalert `-notifier.config` with `.Values.vmalert.additionalNotifierConfigs`. + +## 0.23.4 + +**Release date:** 2024-07-02 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add `extraObjects` to allow deploying additional resources with the chart release. + +## 0.23.3 + +**Release date:** 2024-06-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Enable [conversion of Prometheus CRDs](https://docs.victoriametrics.com/operator/migration/#objects-conversion) by default. See [this](https://github.com/VictoriaMetrics/helm-charts/pull/1069) pull request for details. +- use bitnami/kubectl image for cleanup instead of deprecated gcr.io/google_containers/hyperkube + +## 0.23.2 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Do not add `cluster` external label at VMAgent by default. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/774) for the details. + +## 0.23.1 + +**Release date:** 2024-06-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to v0.45.0 release +- sync latest vm alerts and dashboards. + +## 0.23.0 + +**Release date:** 2024-05-30 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- sync latest etcd v3.5.x rules from [upstream](https://github.com/etcd-io/etcd/blob/release-3.5/contrib/mixin/mixin.libsonnet). +- add Prometheus operator CRDs as an optional dependency. See [this PR](https://github.com/VictoriaMetrics/helm-charts/pull/1022) and [related issue](https://github.com/VictoriaMetrics/helm-charts/issues/341) for the details. + +## 0.22.1 + +**Release date:** 2024-05-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix missing serviceaccounts patch permission in VM operator, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1012) for details. + +## 0.22.0 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.44.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.44.0) + +## 0.21.3 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.21.2 + +**Release date:** 2024-04-23 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.43.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.43.3) + +## 0.21.1 + +**Release date:** 2024-04-18 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +## 0.21.0 + +**Release date:** 2024-04-18 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- TODO + +- bump version of VM operator to [0.43.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.43.0) +- updates CRDs definitions. + +## 0.20.1 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- upgraded dashboards and alerting rules, added values file for local (Minikube) setup +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +## 0.20.0 + +**Release date:** 2024-04-02 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.42.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.42.3) + +## 0.19.4 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.19.3 + +**Release date:** 2024-03-05 + +![AppVersion: v1.98.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.98.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Commented default configuration for alertmanager. It simplifies configuration and makes it more explicit. See this [issue](https://github.com/VictoriaMetrics/helm-charts/issues/473) for details. +- Allow enabling/disabling default k8s rules when installing. See [#904](https://github.com/VictoriaMetrics/helm-charts/pull/904) by @passie. + +## 0.19.2 + +**Release date:** 2024-02-26 + +![AppVersion: v1.98.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.98.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix templating of VMAgent `remoteWrite` in case both `VMSingle` and `VMCluster` are disabled. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/865) for details. + +## 0.19.1 + +**Release date:** 2024-02-21 + +![AppVersion: v1.98.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.98.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update dependencies: victoria-metrics-operator -> 0.28.1, grafana -> 7.3.1. +- Update victoriametrics CRD resources yaml. + +## 0.19.0 + +**Release date:** 2024-02-09 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Do not store original labels in `vmagent`'s memory by default. This reduces memory usage of `vmagent` but makes `vmagent`'s debugging UI less informative. See [this docs](https://docs.victoriametrics.com/vmagent/#relabel-debug) for details on relabeling debug. +- Update dependencies: kube-state-metrics -> 5.16.0, prometheus-node-exporter -> 4.27.0, grafana -> 7.3.0. +- Update victoriametrics CRD resources yaml. +- Update builtin dashboards and rules. + +## 0.18.12 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) +- Fix helm lint when ingress resources enabled - split templates of resources per kind. See [#820](https://github.com/VictoriaMetrics/helm-charts/pull/820) by @MemberIT. + +## 0.18.11 + +**Release date:** 2023-12-15 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix missing `.Values.defaultRules.rules.vmcluster` value. See [#801](https://github.com/VictoriaMetrics/helm-charts/pull/801) by @MemberIT. + +## 0.18.10 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) +- Add optional allowCrossNamespaceImport to GrafanaDashboard(s) (#788) + +## 0.18.9 + +**Release date:** 2023-12-08 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Properly use variable from values file for Grafana datasource type. (#769) +- Update dashboards from upstream sources. (#780) + +## 0.18.8 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.18.7 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) +- Support adding extra group parameters for default vmrules. (#752) + +## 0.18.6 + +**Release date:** 2023-11-01 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix kube scheduler default scraping port from 10251 to 10259, Kubernetes changed it since 1.23.0. See [this pr](https://github.com/VictoriaMetrics/helm-charts/pull/736) for details. +- Bump version of operator chart to [0.27.4](https://github.com/VictoriaMetrics/helm-charts/releases/tag/victoria-metrics-operator-0.27.4) + +## 0.18.5 + +**Release date:** 2023-10-08 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update operator chart to [v0.27.3](https://github.com/VictoriaMetrics/helm-charts/releases/tag/victoria-metrics-operator-0.27.3) for fixing [#708](https://github.com/VictoriaMetrics/helm-charts/issues/708) + +## 0.18.4 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update dependencies: [victoria-metrics-operator -> 0.27.2](https://github.com/VictoriaMetrics/helm-charts/releases/tag/victoria-metrics-operator-0.27.2), prometheus-node-exporter -> 4.23.2, grafana -> 6.59.5. + +## 0.18.3 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) + +## 0.18.2 + +**Release date:** 2023-09-28 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix behavior of `vmalert.remoteWriteVMAgent` - remoteWrite.url for VMAlert is correctly generated considering endpoint, name, port and http.pathPrefix of VMAgent + +## 0.18.1 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.18.0 + +**Release date:** 2023-09-12 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of `grafana` helm-chart to `6.59.*` +- Bump version of `prometheus-node-exporter` helm-chart to `4.23.*` +- Bump version of `kube-state-metrics` helm-chart to `0.59.*` +- Update alerting rules +- Update grafana dashboards +- Add `make` commands `sync-rules` and `sync-dashboards` +- Add support of VictoriaMetrics datasource + +## 0.17.8 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) +- Bump version of operator chart to [0.27.0](https://github.com/VictoriaMetrics/helm-charts/releases/tag/victoria-metrics-operator-0.27.0) + +## 0.17.7 + +**Release date:** 2023-09-07 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of operator helm-chart to `0.26.2` + +## 0.17.6 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Move `cleanupCRD` option to victoria-metrics-operator chart (#593) +- Disable `honorTimestamps` for cadvisor scrape job by default (#617) +- For vmalert all replicas of alertmanager are added to notifiers (only if alertmanager is enabled) (#619) +- Add `grafanaOperatorDashboardsFormat` option (#615) +- Fix query expression for memory calculation in `k8s-views-global` dashboard (#636) +- Bump version of Victoria Metrics components to `v1.93.3` +- Bump version of operator helm-chart to `0.26.0` + +## 0.17.5 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.17.4 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 +- delete an obsolete parameter remaining by mistake (see ) (#602) + +## 0.17.3 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.17.2 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 diff --git a/docs/helm/victoria-metrics-k8s-stack/README.md b/docs/helm/victoria-metrics-k8s-stack/README.md new file mode 100644 index 0000000000..d95202e0d7 --- /dev/null +++ b/docs/helm/victoria-metrics-k8s-stack/README.md @@ -0,0 +1,2576 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.25.17](https://img.shields.io/badge/Version-0.25.17-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-k8s-stack) + +Kubernetes monitoring on VictoriaMetrics stack. Includes VictoriaMetrics Operator, Grafana dashboards, ServiceScrapes and VMRules + +* [Overview](#Overview) +* [Configuration](#Configuration) +* [Prerequisites](#Prerequisites) +* [Dependencies](#Dependencies) +* [Quick Start](#How-to-install) +* [Uninstall](#How-to-uninstall) +* [Version Upgrade](#Upgrade-guide) +* [Troubleshooting](#Troubleshooting) +* [Values](#Parameters) + +## Overview +This chart is an All-in-one solution to start monitoring kubernetes cluster. +It installs multiple dependency charts like [grafana](https://github.com/grafana/helm-charts/tree/main/charts/grafana), [node-exporter](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-node-exporter), [kube-state-metrics](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-state-metrics) and [victoria-metrics-operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator). +Also it installs Custom Resources like [VMSingle](https://docs.victoriametrics.com/operator/quick-start#vmsingle), [VMCluster](https://docs.victoriametrics.com/operator/quick-start#vmcluster), [VMAgent](https://docs.victoriametrics.com/operator/quick-start#vmagent), [VMAlert](https://docs.victoriametrics.com/operator/quick-start#vmalert). + +By default, the operator [converts all existing prometheus-operator API objects](https://docs.victoriametrics.com/operator/quick-start#migration-from-prometheus-operator-objects) into corresponding VictoriaMetrics Operator objects. + +To enable metrics collection for kubernetes this chart installs multiple scrape configurations for kuberenetes components like kubelet and kube-proxy, etc. Metrics collection is done by [VMAgent](https://docs.victoriametrics.com/operator/quick-start#vmagent). So if want to ship metrics to external VictoriaMetrics database you can disable VMSingle installation by setting `vmsingle.enabled` to `false` and setting `vmagent.vmagentSpec.remoteWrite.url` to your external VictoriaMetrics database. + +This chart also installs bunch of dashboards and recording rules from [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) project. + +![Overview](img/k8s-stack-overview.png) + +## Configuration + +Configuration of this chart is done through helm values. + +### Dependencies + +Dependencies can be enabled or disabled by setting `enabled` to `true` or `false` in `values.yaml` file. + +**!Important:** for dependency charts anything that you can find in values.yaml of dependency chart can be configured in this chart under key for that dependency. For example if you want to configure `grafana` you can find all possible configuration options in [values.yaml](https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml) and you should set them in values for this chart under grafana: key. For example if you want to configure `grafana.persistence.enabled` you should set it in values.yaml like this: +```yaml +################################################# +### dependencies ##### +################################################# +# Grafana dependency chart configuration. For possible values refer to https://github.com/grafana/helm-charts/tree/main/charts/grafana#configuration +grafana: + enabled: true + persistence: + type: pvc + enabled: false +``` + +### VictoriaMetrics components + +This chart installs multiple VictoriaMetrics components using Custom Resources that are managed by [victoria-metrics-operator](https://docs.victoriametrics.com/operator/design) +Each resource can be configured using `spec` of that resource from API docs of [victoria-metrics-operator](https://docs.victoriametrics.com/operator/api). For example if you want to configure `VMAgent` you can find all possible configuration options in [API docs](https://docs.victoriametrics.com/operator/api#vmagent) and you should set them in values for this chart under `vmagent.spec` key. For example if you want to configure `remoteWrite.url` you should set it in values.yaml like this: +```yaml +vmagent: + spec: + remoteWrite: + - url: "https://insert.vmcluster.domain.com/insert/0/prometheus/api/v1/write" +``` + +### ArgoCD issues + +#### Operator self signed certificates +When deploying K8s stack using ArgoCD without Cert Manager (`.Values.victoria-metrics-operator.admissionWebhooks.certManager.enabled: false`) +it will rerender operator's webhook certificates on each sync since Helm `lookup` function is not respected by ArgoCD. +To prevent this please update you K8s stack Application `spec.syncPolicy` and `spec.ignoreDifferences` with a following: + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +... +spec: + ... + syncPolicy: + syncOptions: + # https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/#respect-ignore-difference-configs + # argocd must also ignore difference during apply stage + # otherwise it ll silently override changes and cause a problem + - RespectIgnoreDifferences=true + ignoreDifferences: + - group: "" + kind: Secret + name: -validation + namespace: kube-system + jsonPointers: + - /data + - group: admissionregistration.k8s.io + kind: ValidatingWebhookConfiguration + name: -admission + jqPathExpressions: + - '.webhooks[]?.clientConfig.caBundle' +``` +where `` is output of `{{ include "vm-operator.fullname" }}` for your setup + +#### `metadata.annotations: Too long: must have at most 262144 bytes` on dashboards + +If one of dashboards ConfigMap is failing with error `Too long: must have at most 262144 bytes`, please make sure you've added `argocd.argoproj.io/sync-options: ServerSideApply=true` annotation to your dashboards: + +```yaml +grafana: + sidecar: + dashboards: + additionalDashboardAnnotations + argocd.argoproj.io/sync-options: ServerSideApply=true +``` + +argocd.argoproj.io/sync-options: ServerSideApply=true + +### Rules and dashboards + +This chart by default install multiple dashboards and recording rules from [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) +you can disable dashboards with `defaultDashboardsEnabled: false` and `experimentalDashboardsEnabled: false` +and rules can be configured under `defaultRules` + +### Prometheus scrape configs +This chart installs multiple scrape configurations for kubernetes monitoring. They are configured under `#ServiceMonitors` section in `values.yaml` file. For example if you want to configure scrape config for `kubelet` you should set it in values.yaml like this: +```yaml +kubelet: + enabled: true + # spec for VMNodeScrape crd + # https://docs.victoriametrics.com/operator/api#vmnodescrapespec + spec: + interval: "30s" +``` + +### Using externally managed Grafana + +If you want to use an externally managed Grafana instance but still want to use the dashboards provided by this chart you can set + `grafana.enabled` to `false` and set `defaultDashboardsEnabled` to `true`. This will install the dashboards + but will not install Grafana. + +For example: +```yaml +defaultDashboardsEnabled: true + +grafana: + enabled: false +``` + +This will create ConfigMaps with dashboards to be imported into Grafana. + +If additional configuration for labels or annotations is needed in order to import dashboard to an existing Grafana you can +set `.grafana.sidecar.dashboards.additionalDashboardLabels` or `.grafana.sidecar.dashboards.additionalDashboardAnnotations` in `values.yaml`: + +For example: +```yaml +defaultDashboardsEnabled: true + +grafana: + enabled: false + sidecar: + dashboards: + additionalDashboardLabels: + key: value + additionalDashboardAnnotations: + key: value +``` + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). + +* Add dependency chart repositories + +```console +helm repo add grafana https://grafana.github.io/helm-charts +helm repo add prometheus-community https://prometheus-community.github.io/helm-charts +helm repo update +``` + +* PV support on underlying infrastructure. + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-k8s-stack` chart available to installation: + +```console +helm search repo vm/victoria-metrics-k8s-stack -l +``` + +### Install `victoria-metrics-k8s-stack` chart + +Export default values of `victoria-metrics-k8s-stack` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-k8s-stack > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-k8s-stack > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vmks vm/victoria-metrics-k8s-stack -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vmks oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-k8s-stack -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vmks vm/victoria-metrics-k8s-stack -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vmks oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-k8s-stack -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vmks' +``` + +Get the application by running this command: + +```console +helm list -f vmks -n NAMESPACE +``` + +See the history of versions of `vmks` application with command. + +```console +helm history vmks -n NAMESPACE +``` + +### Install locally (Minikube) + +To run VictoriaMetrics stack locally it's possible to use [Minikube](https://github.com/kubernetes/minikube). To avoid dashboards and alert rules issues please follow the steps below: + +Run Minikube cluster + +``` +minikube start --container-runtime=containerd --extra-config=scheduler.bind-address=0.0.0.0 --extra-config=controller-manager.bind-address=0.0.0.0 +``` + +Install helm chart + +``` +helm install [RELEASE_NAME] vm/victoria-metrics-k8s-stack -f values.yaml -f values.minikube.yaml -n NAMESPACE --debug --dry-run +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vmks -n NAMESPACE +``` + +CRDs created by this chart are not removed by default and should be manually cleaned up: + +```console +kubectl get crd | grep victoriametrics.com | awk '{print $1 }' | xargs -i kubectl delete crd {} +``` + +## Troubleshooting + +- If you cannot install helm chart with error `configmap already exist`. It could happen because of name collisions, if you set too long release name. + Kubernetes by default, allows only 63 symbols at resource names and all resource names are trimmed by helm to 63 symbols. + To mitigate it, use shorter name for helm chart release name, like: +```bash +# stack - is short enough +helm upgrade -i stack vm/victoria-metrics-k8s-stack +``` + Or use override for helm chart release name: +```bash +helm upgrade -i some-very-long-name vm/victoria-metrics-k8s-stack --set fullnameOverride=stack +``` + +## Upgrade guide + +Usually, helm upgrade doesn't requires manual actions. Just execute command: + +```console +$ helm upgrade [RELEASE_NAME] vm/victoria-metrics-k8s-stack +``` + +But release with CRD update can only be patched manually with kubectl. +Since helm does not perform a CRD update, we recommend that you always perform this when updating the helm-charts version: + +```console +# 1. check the changes in CRD +$ helm show crds vm/victoria-metrics-k8s-stack --version [YOUR_CHART_VERSION] | kubectl diff -f - + +# 2. apply the changes (update CRD) +$ helm show crds vm/victoria-metrics-k8s-stack --version [YOUR_CHART_VERSION] | kubectl apply -f - --server-side +``` + +All other manual actions upgrades listed below: + +### Upgrade to 0.13.0 + +- node-exporter starting from version 4.0.0 is using the Kubernetes recommended labels. Therefore you have to delete the daemonset before you upgrade. + +```bash +kubectl delete daemonset -l app=prometheus-node-exporter +``` +- scrape configuration for kubernetes components was moved from `vmServiceScrape.spec` section to `spec` section. If you previously modified scrape configuration you need to update your `values.yaml` + +- `grafana.defaultDashboardsEnabled` was renamed to `defaultDashboardsEnabled` (moved to top level). You may need to update it in your `values.yaml` + +### Upgrade to 0.6.0 + + All `CRD` must be update to the lastest version with command: + +```bash +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/helm-charts/master/charts/victoria-metrics-k8s-stack/crds/crd.yaml + +``` + +### Upgrade to 0.4.0 + + All `CRD` must be update to `v1` version with command: + +```bash +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/helm-charts/master/charts/victoria-metrics-k8s-stack/crds/crd.yaml + +``` + +### Upgrade from 0.2.8 to 0.2.9 + + Update `VMAgent` crd + +command: +```bash +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.16.0/config/crd/bases/operator.victoriametrics.com_vmagents.yaml +``` + + ### Upgrade from 0.2.5 to 0.2.6 + +New CRD added to operator - `VMUser` and `VMAuth`, new fields added to exist crd. +Manual commands: +```bash +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.15.0/config/crd/bases/operator.victoriametrics.com_vmusers.yaml +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.15.0/config/crd/bases/operator.victoriametrics.com_vmauths.yaml +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.15.0/config/crd/bases/operator.victoriametrics.com_vmalerts.yaml +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.15.0/config/crd/bases/operator.victoriametrics.com_vmagents.yaml +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.15.0/config/crd/bases/operator.victoriametrics.com_vmsingles.yaml +kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.15.0/config/crd/bases/operator.victoriametrics.com_vmclusters.yaml +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-k8s-stack + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-k8s-stack/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    additionalVictoriaMetricsMapstring
    +null
    +
    +
    alertmanager.annotationsobject
    +{}
    +
    +
    alertmanager.configobject
    +receivers:
    +    - name: blackhole
    +route:
    +    receiver: blackhole
    +templates:
    +    - /etc/vm/configs/**/*.tmpl
    +
    +

    alertmanager configuration

    +
    alertmanager.enabledbool
    +true
    +
    +
    alertmanager.ingressobject
    +annotations: {}
    +enabled: false
    +extraPaths: []
    +hosts:
    +    - alertmanager.domain.com
    +labels: {}
    +path: '{{ .Values.alertmanager.spec.routePrefix | default "/" }}'
    +pathType: Prefix
    +tls: []
    +
    +

    alertmanager ingress configuration

    +
    alertmanager.monzoTemplate.enabledbool
    +true
    +
    +
    alertmanager.specobject
    +configSecret: ""
    +externalURL: ""
    +image:
    +    tag: v0.25.0
    +port: "9093"
    +routePrefix: /
    +selectAllByDefault: true
    +
    +

    full spec for VMAlertmanager CRD. Allowed values described here

    +
    alertmanager.spec.configSecretstring
    +""
    +
    +

    if this one defined, it will be used for alertmanager configuration and config parameter will be ignored

    +
    alertmanager.templateFilesobject
    +{}
    +
    +

    extra alert templates

    +
    argocdReleaseOverridestring
    +""
    +
    +

    For correct working need set value ‘argocdReleaseOverride=$ARGOCD_APP_NAME’

    +
    coreDns.enabledbool
    +true
    +
    +
    coreDns.service.enabledbool
    +true
    +
    +
    coreDns.service.portint
    +9153
    +
    +
    coreDns.service.selector.k8s-appstring
    +kube-dns
    +
    +
    coreDns.service.targetPortint
    +9153
    +
    +
    coreDns.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics
    +    jobLabel: jobLabel
    +    namespaceSelector:
    +        matchNames:
    +            - kube-system
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    crds.enabledbool
    +true
    +
    +
    dashboardsobject
    +node-exporter-full: true
    +operator: false
    +vmalert: false
    +
    +

    Enable dashboards despite it’s dependency is not installed

    +
    dashboards.node-exporter-fullbool
    +true
    +
    +

    in ArgoCD using client-side apply this dashboard reaches annotations size limit and causes k8s issues without server side apply See this issue

    +
    defaultDashboardsEnabledbool
    +true
    +
    +

    Create default dashboards

    +
    defaultRulesobject
    +alerting:
    +    spec:
    +        annotations: {}
    +        labels: {}
    +annotations: {}
    +create: true
    +group:
    +    spec:
    +        params: {}
    +groups:
    +    alertmanager:
    +        create: true
    +        rules: {}
    +    etcd:
    +        create: true
    +        rules: {}
    +    general:
    +        create: true
    +        rules: {}
    +    k8sContainerCpuUsageSecondsTotal:
    +        create: true
    +        rules: {}
    +    k8sContainerMemoryCache:
    +        create: true
    +        rules: {}
    +    k8sContainerMemoryRss:
    +        create: true
    +        rules: {}
    +    k8sContainerMemorySwap:
    +        create: true
    +        rules: {}
    +    k8sContainerMemoryWorkingSetBytes:
    +        create: true
    +        rules: {}
    +    k8sContainerResource:
    +        create: true
    +        rules: {}
    +    k8sPodOwner:
    +        create: true
    +        rules: {}
    +    kubeApiserver:
    +        create: true
    +        rules: {}
    +    kubeApiserverAvailability:
    +        create: true
    +        rules: {}
    +    kubeApiserverBurnrate:
    +        create: true
    +        rules: {}
    +    kubeApiserverHistogram:
    +        create: true
    +        rules: {}
    +    kubeApiserverSlos:
    +        create: true
    +        rules: {}
    +    kubePrometheusGeneral:
    +        create: true
    +        rules: {}
    +    kubePrometheusNodeRecording:
    +        create: true
    +        rules: {}
    +    kubeScheduler:
    +        create: true
    +        rules: {}
    +    kubeStateMetrics:
    +        create: true
    +        rules: {}
    +    kubelet:
    +        create: true
    +        rules: {}
    +    kubernetesApps:
    +        create: true
    +        rules: {}
    +        targetNamespace: .*
    +    kubernetesResources:
    +        create: true
    +        rules: {}
    +    kubernetesStorage:
    +        create: true
    +        rules: {}
    +        targetNamespace: .*
    +    kubernetesSystem:
    +        create: true
    +        rules: {}
    +    kubernetesSystemApiserver:
    +        create: true
    +        rules: {}
    +    kubernetesSystemControllerManager:
    +        create: true
    +        rules: {}
    +    kubernetesSystemKubelet:
    +        create: true
    +        rules: {}
    +    kubernetesSystemScheduler:
    +        create: true
    +        rules: {}
    +    node:
    +        create: true
    +        rules: {}
    +    nodeNetwork:
    +        create: true
    +        rules: {}
    +    vmHealth:
    +        create: true
    +        rules: {}
    +    vmagent:
    +        create: true
    +        rules: {}
    +    vmcluster:
    +        create: true
    +        rules: {}
    +    vmoperator:
    +        create: true
    +        rules: {}
    +    vmsingle:
    +        create: true
    +        rules: {}
    +labels: {}
    +recording:
    +    spec:
    +        annotations: {}
    +        labels: {}
    +rule:
    +    spec:
    +        annotations: {}
    +        labels: {}
    +rules: {}
    +runbookUrl: https://runbooks.prometheus-operator.dev/runbooks
    +
    +

    Create default rules for monitoring the cluster

    +
    defaultRules.alertingobject
    +spec:
    +    annotations: {}
    +    labels: {}
    +
    +

    Common properties for VMRules alerts

    +
    defaultRules.alerting.spec.annotationsobject
    +{}
    +
    +

    Additional annotations for VMRule alerts

    +
    defaultRules.alerting.spec.labelsobject
    +{}
    +
    +

    Additional labels for VMRule alerts

    +
    defaultRules.annotationsobject
    +{}
    +
    +

    Annotations for default rules

    +
    defaultRules.groupobject
    +spec:
    +    params: {}
    +
    +

    Common properties for VMRule groups

    +
    defaultRules.group.spec.paramsobject
    +{}
    +
    +

    Optional HTTP URL parameters added to each rule request

    +
    defaultRules.groups.etcd.rulesobject
    +{}
    +
    +

    Common properties for all rules in a group

    +
    defaultRules.labelsobject
    +{}
    +
    +

    Labels for default rules

    +
    defaultRules.recordingobject
    +spec:
    +    annotations: {}
    +    labels: {}
    +
    +

    Common properties for VMRules recording rules

    +
    defaultRules.recording.spec.annotationsobject
    +{}
    +
    +

    Additional annotations for VMRule recording rules

    +
    defaultRules.recording.spec.labelsobject
    +{}
    +
    +

    Additional labels for VMRule recording rules

    +
    defaultRules.ruleobject
    +spec:
    +    annotations: {}
    +    labels: {}
    +
    +

    Common properties for all VMRules

    +
    defaultRules.rule.spec.annotationsobject
    +{}
    +
    +

    Additional annotations for all VMRules

    +
    defaultRules.rule.spec.labelsobject
    +{}
    +
    +

    Additional labels for all VMRules

    +
    defaultRules.rulesobject
    +{}
    +
    +

    Per rule properties

    +
    defaultRules.runbookUrlstring
    +https://runbooks.prometheus-operator.dev/runbooks
    +
    +

    Runbook url prefix for default rules

    +
    experimentalDashboardsEnabledbool
    +true
    +
    +

    Create experimental dashboards

    +
    externalVM.read.urlstring
    +""
    +
    +
    externalVM.write.urlstring
    +""
    +
    +
    extraObjectslist
    +[]
    +
    +

    Add extra objects dynamically to this chart

    +
    fullnameOverridestring
    +""
    +
    +
    global.clusterLabelstring
    +cluster
    +
    +
    global.license.keystring
    +""
    +
    +
    global.license.keyRefobject
    +{}
    +
    +
    grafana.additionalDataSourceslist
    +[]
    +
    +
    grafana.defaultDashboardsTimezonestring
    +utc
    +
    +
    grafana.defaultDatasourceTypestring
    +prometheus
    +
    +
    grafana.enabledbool
    +true
    +
    +
    grafana.forceDeployDatasourcebool
    +false
    +
    +
    grafana.ingress.annotationsobject
    +{}
    +
    +
    grafana.ingress.enabledbool
    +false
    +
    +
    grafana.ingress.extraPathslist
    +[]
    +
    +
    grafana.ingress.hosts[0]string
    +grafana.domain.com
    +
    +
    grafana.ingress.labelsobject
    +{}
    +
    +
    grafana.ingress.pathstring
    +/
    +
    +
    grafana.ingress.pathTypestring
    +Prefix
    +
    +
    grafana.ingress.tlslist
    +[]
    +
    +
    grafana.sidecar.dashboards.additionalDashboardAnnotationsobject
    +{}
    +
    +
    grafana.sidecar.dashboards.additionalDashboardLabelsobject
    +{}
    +
    +
    grafana.sidecar.dashboards.defaultFolderNamestring
    +default
    +
    +
    grafana.sidecar.dashboards.enabledbool
    +true
    +
    +
    grafana.sidecar.dashboards.folderstring
    +/var/lib/grafana/dashboards
    +
    +
    grafana.sidecar.dashboards.multiclusterbool
    +false
    +
    +
    grafana.sidecar.dashboards.provider.namestring
    +default
    +
    +
    grafana.sidecar.dashboards.provider.orgidint
    +1
    +
    +
    grafana.sidecar.datasources.createVMReplicasDatasourcesbool
    +false
    +
    +
    grafana.sidecar.datasources.defaultlist
    +- isDefault: true
    +  name: VictoriaMetrics
    +- isDefault: false
    +  name: VictoriaMetrics (DS)
    +  type: victoriametrics-datasource
    +
    +

    list of default prometheus compatible datasource configurations. VM url will be added to each of them in templates and type will be set to defaultDatasourceType if not defined

    +
    grafana.sidecar.datasources.enabledbool
    +true
    +
    +
    grafana.sidecar.datasources.initDatasourcesbool
    +true
    +
    +
    grafana.vmScrapeobject
    +enabled: true
    +spec:
    +    endpoints:
    +        - port: '{{ .Values.grafana.service.portName }}'
    +    selector:
    +        matchLabels:
    +            app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
    +
    +

    grafana VM scrape config

    +
    grafana.vmScrape.specobject
    +endpoints:
    +    - port: '{{ .Values.grafana.service.portName }}'
    +selector:
    +    matchLabels:
    +        app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
    +
    +

    Scrape configuration for Grafana

    +
    grafanaOperatorDashboardsFormatobject
    +allowCrossNamespaceImport: false
    +enabled: false
    +instanceSelector:
    +    matchLabels:
    +        dashboards: grafana
    +
    +

    Create dashboards as CRDs (reuqires grafana-operator to be installed)

    +
    kube-state-metrics.enabledbool
    +true
    +
    +
    kube-state-metrics.vmScrapeobject
    +enabled: true
    +spec:
    +    endpoints:
    +        - honorLabels: true
    +          metricRelabelConfigs:
    +            - action: labeldrop
    +              regex: (uid|container_id|image_id)
    +          port: http
    +    jobLabel: app.kubernetes.io/name
    +    selector:
    +        matchLabels:
    +            app.kubernetes.io/instance: '{{ include "vm.release" . }}'
    +            app.kubernetes.io/name: '{{ include "kube-state-metrics.name" (index .Subcharts "kube-state-metrics") }}'
    +
    +

    Scrape configuration for Kube State Metrics

    +
    kubeApiServer.enabledbool
    +true
    +
    +
    kubeApiServer.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: https
    +          scheme: https
    +          tlsConfig:
    +            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +            serverName: kubernetes
    +    jobLabel: component
    +    namespaceSelector:
    +        matchNames:
    +            - default
    +    selector:
    +        matchLabels:
    +            component: apiserver
    +            provider: kubernetes
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    kubeControllerManager.enabledbool
    +true
    +
    +
    kubeControllerManager.endpointslist
    +[]
    +
    +
    kubeControllerManager.service.enabledbool
    +true
    +
    +
    kubeControllerManager.service.portint
    +10257
    +
    +
    kubeControllerManager.service.selector.componentstring
    +kube-controller-manager
    +
    +
    kubeControllerManager.service.targetPortint
    +10257
    +
    +
    kubeControllerManager.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics
    +          scheme: https
    +          tlsConfig:
    +            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +            serverName: kubernetes
    +    jobLabel: jobLabel
    +    namespaceSelector:
    +        matchNames:
    +            - kube-system
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    kubeDns.enabledbool
    +false
    +
    +
    kubeDns.service.enabledbool
    +false
    +
    +
    kubeDns.service.ports.dnsmasq.portint
    +10054
    +
    +
    kubeDns.service.ports.dnsmasq.targetPortint
    +10054
    +
    +
    kubeDns.service.ports.skydns.portint
    +10055
    +
    +
    kubeDns.service.ports.skydns.targetPortint
    +10055
    +
    +
    kubeDns.service.selector.k8s-appstring
    +kube-dns
    +
    +
    kubeDns.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics-dnsmasq
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics-skydns
    +    jobLabel: jobLabel
    +    namespaceSelector:
    +        matchNames:
    +            - kube-system
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    kubeEtcd.enabledbool
    +true
    +
    +
    kubeEtcd.endpointslist
    +[]
    +
    +
    kubeEtcd.service.enabledbool
    +true
    +
    +
    kubeEtcd.service.portint
    +2379
    +
    +
    kubeEtcd.service.selector.componentstring
    +etcd
    +
    +
    kubeEtcd.service.targetPortint
    +2379
    +
    +
    kubeEtcd.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics
    +          scheme: https
    +          tlsConfig:
    +            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    jobLabel: jobLabel
    +    namespaceSelector:
    +        matchNames:
    +            - kube-system
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    kubeProxy.enabledbool
    +false
    +
    +
    kubeProxy.endpointslist
    +[]
    +
    +
    kubeProxy.service.enabledbool
    +true
    +
    +
    kubeProxy.service.portint
    +10249
    +
    +
    kubeProxy.service.selector.k8s-appstring
    +kube-proxy
    +
    +
    kubeProxy.service.targetPortint
    +10249
    +
    +
    kubeProxy.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics
    +          scheme: https
    +          tlsConfig:
    +            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    jobLabel: jobLabel
    +    namespaceSelector:
    +        matchNames:
    +            - kube-system
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    kubeScheduler.enabledbool
    +true
    +
    +
    kubeScheduler.endpointslist
    +[]
    +
    +
    kubeScheduler.service.enabledbool
    +true
    +
    +
    kubeScheduler.service.portint
    +10259
    +
    +
    kubeScheduler.service.selector.componentstring
    +kube-scheduler
    +
    +
    kubeScheduler.service.targetPortint
    +10259
    +
    +
    kubeScheduler.vmScrapeobject
    +spec:
    +    endpoints:
    +        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          port: http-metrics
    +          scheme: https
    +          tlsConfig:
    +            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    jobLabel: jobLabel
    +    namespaceSelector:
    +        matchNames:
    +            - kube-system
    +
    +

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +
    kubelet.enabledbool
    +true
    +
    +
    kubelet.vmScrapeobject
    +kind: VMNodeScrape
    +spec:
    +    bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +    honorLabels: true
    +    honorTimestamps: false
    +    interval: 30s
    +    metricRelabelConfigs:
    +        - action: labeldrop
    +          regex: (uid)
    +        - action: labeldrop
    +          regex: (id|name)
    +        - action: drop
    +          regex: (rest_client_request_duration_seconds_bucket|rest_client_request_duration_seconds_sum|rest_client_request_duration_seconds_count)
    +          source_labels:
    +            - __name__
    +    relabelConfigs:
    +        - action: labelmap
    +          regex: __meta_kubernetes_node_label_(.+)
    +        - sourceLabels:
    +            - __metrics_path__
    +          targetLabel: metrics_path
    +        - replacement: kubelet
    +          targetLabel: job
    +    scheme: https
    +    scrapeTimeout: 5s
    +    tlsConfig:
    +        caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecureSkipVerify: true
    +
    +

    spec for VMNodeScrape crd https://docs.victoriametrics.com/operator/api.html#vmnodescrapespec

    +
    kubelet.vmScrapes.cadvisorobject
    +enabled: true
    +spec:
    +    path: /metrics/cadvisor
    +
    +

    Enable scraping /metrics/cadvisor from kubelet’s service

    +
    kubelet.vmScrapes.kubelet.specobject
    +{}
    +
    +
    kubelet.vmScrapes.probesobject
    +enabled: true
    +spec:
    +    path: /metrics/probes
    +
    +

    Enable scraping /metrics/probes from kubelet’s service

    +
    nameOverridestring
    +""
    +
    +
    prometheus-node-exporter.enabledbool
    +true
    +
    +
    prometheus-node-exporter.extraArgs[0]string
    +--collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)
    +
    +
    prometheus-node-exporter.extraArgs[1]string
    +--collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
    +
    +
    prometheus-node-exporter.service.labels.jobLabelstring
    +node-exporter
    +
    +
    prometheus-node-exporter.vmScrapeobject
    +enabled: true
    +spec:
    +    endpoints:
    +        - metricRelabelConfigs:
    +            - action: drop
    +              regex: /var/lib/kubelet/pods.+
    +              source_labels:
    +                - mountpoint
    +          port: metrics
    +    jobLabel: jobLabel
    +    selector:
    +        matchLabels:
    +            app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
    +
    +

    node exporter VM scrape config

    +
    prometheus-node-exporter.vmScrape.specobject
    +endpoints:
    +    - metricRelabelConfigs:
    +        - action: drop
    +          regex: /var/lib/kubelet/pods.+
    +          source_labels:
    +            - mountpoint
    +      port: metrics
    +jobLabel: jobLabel
    +selector:
    +    matchLabels:
    +        app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
    +
    +

    Scrape configuration for Node Exporter

    +
    prometheus-operator-crds.enabledbool
    +false
    +
    +
    serviceAccount.annotationsobject
    +{}
    +
    +

    Annotations to add to the service account

    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +""
    +
    +

    If not set and create is true, a name is generated using the fullname template

    +
    tenantstring
    +"0"
    +
    +
    victoria-metrics-operatorobject
    +crd:
    +    cleanup:
    +        enabled: true
    +        image:
    +            pullPolicy: IfNotPresent
    +            repository: bitnami/kubectl
    +    create: false
    +enabled: true
    +operator:
    +    disable_prometheus_converter: false
    +serviceMonitor:
    +    enabled: true
    +
    +

    also checkout here possible ENV variables to configure operator behaviour https://docs.victoriametrics.com/operator/vars

    +
    victoria-metrics-operator.crd.cleanupobject
    +enabled: true
    +image:
    +    pullPolicy: IfNotPresent
    +    repository: bitnami/kubectl
    +
    +

    tells helm to clean up vm cr resources when uninstalling

    +
    victoria-metrics-operator.crd.createbool
    +false
    +
    +

    we disable crd creation by operator chart as we create them in this chart

    +
    victoria-metrics-operator.operator.disable_prometheus_converterbool
    +false
    +
    +

    By default, operator converts prometheus-operator objects.

    +
    vmagent.additionalRemoteWriteslist
    +[]
    +
    +

    remoteWrite configuration of VMAgent, allowed parameters defined in a spec

    +
    vmagent.annotationsobject
    +{}
    +
    +
    vmagent.enabledbool
    +true
    +
    +
    vmagent.ingressobject
    +annotations: {}
    +enabled: false
    +extraPaths: []
    +hosts:
    +    - vmagent.domain.com
    +labels: {}
    +path: ""
    +pathType: Prefix
    +tls: []
    +
    +

    vmagent ingress configuration

    +
    vmagent.ingress.extraPathslist
    +[]
    +
    +

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +
    vmagent.specobject
    +externalLabels: {}
    +extraArgs:
    +    promscrape.dropOriginalLabels: "true"
    +    promscrape.streamParse: "true"
    +image:
    +    tag: v1.103.0
    +port: "8429"
    +scrapeInterval: 20s
    +selectAllByDefault: true
    +
    +

    full spec for VMAgent CRD. Allowed values described here

    +
    vmalert.additionalNotifierConfigsobject
    +{}
    +
    +
    vmalert.annotationsobject
    +{}
    +
    +
    vmalert.enabledbool
    +true
    +
    +
    vmalert.ingressobject
    +annotations: {}
    +enabled: false
    +extraPaths: []
    +hosts:
    +    - vmalert.domain.com
    +labels: {}
    +path: ""
    +pathType: Prefix
    +tls: []
    +
    +

    vmalert ingress config

    +
    vmalert.remoteWriteVMAgentbool
    +false
    +
    +
    vmalert.specobject
    +evaluationInterval: 15s
    +externalLabels: {}
    +extraArgs:
    +    http.pathPrefix: /
    +image:
    +    tag: v1.103.0
    +port: "8080"
    +selectAllByDefault: true
    +
    +

    full spec for VMAlert CRD. Allowed values described here

    +
    vmalert.templateFilesobject
    +{}
    +
    +

    extra vmalert annotation templates

    +
    vmauth.annotationsobject
    +{}
    +
    +
    vmauth.enabledbool
    +false
    +
    +
    vmauth.specobject
    +discover_backend_ips: true
    +port: "8427"
    +
    +

    full spec for VMAuth CRD. Allowed values described here

    +
    vmcluster.annotationsobject
    +{}
    +
    +
    vmcluster.enabledbool
    +false
    +
    +
    vmcluster.ingress.insert.annotationsobject
    +{}
    +
    +
    vmcluster.ingress.insert.enabledbool
    +false
    +
    +
    vmcluster.ingress.insert.extraPathslist
    +[]
    +
    +
    vmcluster.ingress.insert.hosts[0]string
    +vminsert.domain.com
    +
    +
    vmcluster.ingress.insert.labelsobject
    +{}
    +
    +
    vmcluster.ingress.insert.pathstring
    +'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vminsert }}'
    +
    +
    vmcluster.ingress.insert.pathTypestring
    +Prefix
    +
    +
    vmcluster.ingress.insert.tlslist
    +[]
    +
    +
    vmcluster.ingress.select.annotationsobject
    +{}
    +
    +
    vmcluster.ingress.select.enabledbool
    +false
    +
    +
    vmcluster.ingress.select.extraPathslist
    +[]
    +
    +
    vmcluster.ingress.select.hosts[0]string
    +vmselect.domain.com
    +
    +
    vmcluster.ingress.select.labelsobject
    +{}
    +
    +
    vmcluster.ingress.select.pathstring
    +'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vmselect }}'
    +
    +
    vmcluster.ingress.select.pathTypestring
    +Prefix
    +
    +
    vmcluster.ingress.select.tlslist
    +[]
    +
    +
    vmcluster.ingress.storage.annotationsobject
    +{}
    +
    +
    vmcluster.ingress.storage.enabledbool
    +false
    +
    +
    vmcluster.ingress.storage.extraPathslist
    +[]
    +
    +
    vmcluster.ingress.storage.hosts[0]string
    +vmstorage.domain.com
    +
    +
    vmcluster.ingress.storage.labelsobject
    +{}
    +
    +
    vmcluster.ingress.storage.pathstring
    +""
    +
    +
    vmcluster.ingress.storage.pathTypestring
    +Prefix
    +
    +
    vmcluster.ingress.storage.tlslist
    +[]
    +
    +
    vmcluster.specobject
    +replicationFactor: 2
    +retentionPeriod: "1"
    +vminsert:
    +    extraArgs: {}
    +    image:
    +        tag: v1.103.0-cluster
    +    port: "8480"
    +    replicaCount: 2
    +    resources: {}
    +vmselect:
    +    cacheMountPath: /select-cache
    +    extraArgs: {}
    +    image:
    +        tag: v1.103.0-cluster
    +    port: "8481"
    +    replicaCount: 2
    +    resources: {}
    +    storage:
    +        volumeClaimTemplate:
    +            spec:
    +                resources:
    +                    requests:
    +                        storage: 2Gi
    +vmstorage:
    +    image:
    +        tag: v1.103.0-cluster
    +    replicaCount: 2
    +    resources: {}
    +    storage:
    +        volumeClaimTemplate:
    +            spec:
    +                resources:
    +                    requests:
    +                        storage: 10Gi
    +    storageDataPath: /vm-data
    +
    +

    full spec for VMCluster CRD. Allowed values described here

    +
    vmcluster.spec.retentionPeriodstring
    +"1"
    +
    +

    Data retention period. Possible units character: h(ours), d(ays), w(eeks), y(ears), if no unit character specified - month. The minimum retention period is 24h. See these docs

    +
    vmsingle.annotationsobject
    +{}
    +
    +
    vmsingle.enabledbool
    +true
    +
    +
    vmsingle.ingress.annotationsobject
    +{}
    +
    +
    vmsingle.ingress.enabledbool
    +false
    +
    +
    vmsingle.ingress.extraPathslist
    +[]
    +
    +
    vmsingle.ingress.hosts[0]string
    +vmsingle.domain.com
    +
    +
    vmsingle.ingress.labelsobject
    +{}
    +
    +
    vmsingle.ingress.pathstring
    +""
    +
    +
    vmsingle.ingress.pathTypestring
    +Prefix
    +
    +
    vmsingle.ingress.tlslist
    +[]
    +
    +
    vmsingle.specobject
    +extraArgs: {}
    +image:
    +    tag: v1.103.0
    +port: "8429"
    +replicaCount: 1
    +retentionPeriod: "1"
    +storage:
    +    accessModes:
    +        - ReadWriteOnce
    +    resources:
    +        requests:
    +            storage: 20Gi
    +
    +

    full spec for VMSingle CRD. Allowed values describe here

    +
    vmsingle.spec.retentionPeriodstring
    +"1"
    +
    +

    Data retention period. Possible units character: h(ours), d(ays), w(eeks), y(ears), if no unit character specified - month. The minimum retention period is 24h. See these docs

    +
    + diff --git a/docs/helm/victoria-metrics-k8s-stack/RELEASE_GUIDE.md b/docs/helm/victoria-metrics-k8s-stack/RELEASE_GUIDE.md new file mode 100644 index 0000000000..12e01eb537 --- /dev/null +++ b/docs/helm/victoria-metrics-k8s-stack/RELEASE_GUIDE.md @@ -0,0 +1,40 @@ +# Release process guidance + +## Update version for VictoriaMetrics kubernetes monitoring stack + +1. Update dependency requirements in [Chart.yml](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack/Chart.yaml) +2. Apply changes via `helm dependency update` +3. Update image tag in chart values: + +
    + + ```console + make sync-rules + make sync-dashboards + ``` +
    +4. Bump version of the victoria-metrics-k8s-stack [Chart.yml](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack/Chart.yaml) +5. Run linter: + +
    + + ```console + make lint + ``` + +
    +6. Render templates locally to check for errors: + +
    + + ```console + helm template vm-k8s-stack ./charts/victoria-metrics-k8s-stack --output-dir out --values ./charts/victoria-metrics-k8s-stack/values.yaml --debug + ``` + +
    +7. Test updated chart by installing it to your kubernetes cluster. +8. Update docs with + ```console + helm-docs + ``` +9. Commit the changes and send a [PR](https://github.com/VictoriaMetrics/helm-charts/pulls) diff --git a/docs/helm/victoria-metrics-k8s-stack/_changelog.md b/docs/helm/victoria-metrics-k8s-stack/_changelog.md new file mode 100644 index 0000000000..79e80b8873 --- /dev/null +++ b/docs/helm/victoria-metrics-k8s-stack/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-k8s-stack-changelog + parent: helm-victoriametrics-k8s-stack +url: /helm/victoriametrics-k8s-stack/changelog +aliases: + - /helm/victoriametrics-k8s-stack/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-k8s-stack/_index.md b/docs/helm/victoria-metrics-k8s-stack/_index.md new file mode 100644 index 0000000000..d23dc8331f --- /dev/null +++ b/docs/helm/victoria-metrics-k8s-stack/_index.md @@ -0,0 +1,13 @@ +--- +weight: 9 +title: VictoriaMetrics K8s Stack +menu: + docs: + parent: helm + weight: 9 + identifier: helm-victoriametrics-k8s-stack +url: /helm/victoriametrics-k8s-stack +aliases: + - /helm/victoriametrics-k8s-stack/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-k8s-stack/todo.md b/docs/helm/victoria-metrics-k8s-stack/todo.md new file mode 100644 index 0000000000..33f0a47099 --- /dev/null +++ b/docs/helm/victoria-metrics-k8s-stack/todo.md @@ -0,0 +1,26 @@ +### plans + +* [x] VMCluster +* [x] VMSingle +* [x] VMAgent +* [x] VMAlert +* [x] AlertManager +* [x] Annotations +* [x] ServiceScrapes + * [x] Nodeexporter + * [x] Grafana + * [x] kube-state-metrics + * [x] kube-mixin + * [x] core-dns +* [x] Grafana DS +* [x] Dashboards + * [x] Nodeexporter + * [x] kube-state-metrics + * [x] kube-mixin +* [x] Rules + * [x] kube-mixin + * [x] kube-prometheus + * [x] victoria-metrics +* [ ] ServiceAccounts stuff +* [ ] SelectorOvverride for ServiceScrapes +* [ ] helm hook for uninstall crd objects before chart remove diff --git a/docs/helm/victoria-metrics-operator/CHANGELOG.md b/docs/helm/victoria-metrics-operator/CHANGELOG.md new file mode 100644 index 0000000000..db8b6941dc --- /dev/null +++ b/docs/helm/victoria-metrics-operator/CHANGELOG.md @@ -0,0 +1,545 @@ +## Next release + +- Made webhook port configurable. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1506) +- Changed crd cleanup hook delete policy to prevent `resource already exists` error. + +## 0.34.8 + +**Release date:** 2024-09-10 + +![AppVersion: v0.47.3](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Fixed template for cert-manager certificates +- Fixed operator Role creation when only watching own namespace using `watchNamespaces` +- Changed webhook service port from 443 to 9443 + +## 0.34.7 + +**Release date:** 2024-09-03 + +![AppVersion: v0.47.3](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Do not create ClusterRole if `watchNamespaces` contains only namespace, where operator is deployed + +## 0.34.6 + +**Release date:** 2024-08-29 + +![AppVersion: v0.47.3](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.47.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.3) version +- Made `cleanupCRD` deprecated in a favour of `crd.cleanup.enabled` +- Made `cleanupImage` deprecated in a favour of `crd.cleanup.image` +- Made `watchNamespace` string deprecated in a favour of `watchNamespaces` slice +- Decreased rendering time by 2 seconds + +## 0.34.5 + +**Release date:** 2024-08-26 + +![AppVersion: v0.47.2](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixes typo at clean webhook. vmlogs->vlogs. + +## 0.34.4 + +**Release date:** 2024-08-26 + +![AppVersion: v0.47.2](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fixes RBAC by rollback + +## 0.34.3 + +**Release date:** 2024-08-26 + +![AppVersion: v0.47.2](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- removes not implemented scrape CRDs from validation webhook + +## 0.34.2 + +**Release date:** 2024-08-26 + +![AppVersion: v0.47.2](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- set `admissionWebhooks.keepTLSSecret` to `true` by default +- fixed indent, for Issuer crd, when `cert-manager.enabled: true` +- updates operator to [v0.47.2](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.2) version + +## 0.34.1 + +**Release date:** 2024-08-23 + +![AppVersion: v0.47.1](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: main container name was changed to `operator`, which will recreate a pod. + +- Updated operator to v0.47.1 release +- Added global imagePullSecrets and image.registry +- Use static container names in a pod +- Updated operator service scrape config +- Added `.Values.vmstorage.service.ipFamilies` and `.Values.vmstorage.service.ipFamilyPolicy` for service IP family management +- Enabled webhook by default +- Generate webhook certificate when Cert Manager is not enabled +- Added ability to configure container port +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) + +## 0.34.0 + +**Release date:** 2024-08-15 + +![AppVersion: v0.47.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.47.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Set minimal kubernetes version to 1.25 +- Removed support for policy/v1beta1/PodDisruptionBudget +- Added configurable probes at `.Values.probe` +- updates operator to [v0.47.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.0) release +- adds RBAC permissions to VLogs object + +## 0.33.6 + +**Release date:** 2024-08-07 + +![AppVersion: v0.46.4](https://img.shields.io/static/v1?label=AppVersion&message=v0.46.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add missing permission to allow patching `horizontalpodautoscalers` when operator watches single namespace. + +## 0.33.5 + +**Release date:** 2024-08-01 + +![AppVersion: v0.46.4](https://img.shields.io/static/v1?label=AppVersion&message=v0.46.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix cleanup job image tag when `.Capabilities.KubeVersion.Minor` returns version with plus sign. See [this pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1169) by @dimaslv. + +## 0.33.4 + +**Release date:** 2024-07-10 + +![AppVersion: v0.46.4](https://img.shields.io/static/v1?label=AppVersion&message=v0.46.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.46.4](https://github.com/VictoriaMetrics/operator/releases/tag/v0.46.4) release + +## 0.33.3 + +**Release date:** 2024-07-05 + +![AppVersion: v0.46.3](https://img.shields.io/static/v1?label=AppVersion&message=v0.46.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.46.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.46.3) release + +## 0.33.2 + +**Release date:** 2024-07-04 + +![AppVersion: v0.46.2](https://img.shields.io/static/v1?label=AppVersion&message=v0.46.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- breaking change: operator uses different entrypoint, remove `command` entrypoint +- breaking change: operator uses new flag for leader election `leader-elect` +- removes podsecurity policy. It's longer supported by kubernetes +- updates operator to [v0.46.2](https://github.com/VictoriaMetrics/operator/releases/tag/v0.46.2) release + +## 0.33.1 + +**Release date:** 2024-07-03 + +![AppVersion: v0.46.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.46.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- breaking change: operator uses different entrypoint, remove `command` entrypoint +- breaking change: operator uses new flag for leader election `leader-elect` +- removes podsecurity policy. It's longer supported by kubernetes +- updates operator to [v0.46.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.46.0) release + +## 0.32.3 + +**Release date:** 2024-07-02 + +![AppVersion: v0.45.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.45.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- use bitnami/kubectl image for cleanup instead of deprecated gcr.io/google_containers/hyperkube + +## 0.32.2 + +**Release date:** 2024-06-14 + +![AppVersion: v0.45.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.45.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix default image tag when using `Chart.AppVersion`, previously the version is missing "v". + +## 0.32.1 + +**Release date:** 2024-06-14 + +![AppVersion: 0.45.0](https://img.shields.io/static/v1?label=AppVersion&message=0.45.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.32.0 + +**Release date:** 2024-06-10 + +![AppVersion: 0.45.0](https://img.shields.io/static/v1?label=AppVersion&message=0.45.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.45.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.45.0) + +## 0.31.2 + +**Release date:** 2024-05-14 + +![AppVersion: 0.44.0](https://img.shields.io/static/v1?label=AppVersion&message=0.44.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix missing serviceaccounts patch permission in ClusterRole, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1012) for details. + +## 0.31.1 + +**Release date:** 2024-05-10 + +![AppVersion: 0.44.0](https://img.shields.io/static/v1?label=AppVersion&message=0.44.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix serviceAccount template when `.Values.serviceAccount.create=false`, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1002) by @tylerturk for details. +- support creating aggregated clusterRoles for VM CRDs with admin and read permissions, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/996) by @reegnz for details. + +## 0.31.0 + +**Release date:** 2024-05-09 + +![AppVersion: 0.44.0](https://img.shields.io/static/v1?label=AppVersion&message=0.44.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.44.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.44.0) + +## 0.30.3 + +**Release date:** 2024-04-26 + +![AppVersion: 0.43.5](https://img.shields.io/static/v1?label=AppVersion&message=0.43.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.43.5](https://github.com/VictoriaMetrics/operator/releases/tag/v0.43.5) + +## 0.30.2 + +**Release date:** 2024-04-23 + +![AppVersion: 0.43.3](https://img.shields.io/static/v1?label=AppVersion&message=0.43.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to v0.43.1 version +- fixes typo at single-namespace role for `vmscrapeconfig`. See this [issue](https://github.com/VictoriaMetrics/helm-charts/issues/987) for details. + +## 0.30.1 + +**Release date:** 2024-04-18 + +![AppVersion: 0.43.1](https://img.shields.io/static/v1?label=AppVersion&message=0.43.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- TODO + +- updates operator to v0.43.1 version + +## 0.30.0 + +**Release date:** 2024-04-18 + +![AppVersion: 0.43.0](https://img.shields.io/static/v1?label=AppVersion&message=0.43.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to v0.43.0-0 version +- adds `events` create permission +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. + +## 0.29.6 + +**Release date:** 2024-04-16 + +![AppVersion: 0.42.4](https://img.shields.io/static/v1?label=AppVersion&message=0.42.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- clean up vmauth as well when uninstall chart with `cleanupCRD: true`, since it also has `finalizers`. +- sync new crd VMScrapeConfig from operator, see detail in . + +## 0.29.5 + +**Release date:** 2024-04-02 + +![AppVersion: 0.42.4](https://img.shields.io/static/v1?label=AppVersion&message=0.42.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.42.4](https://github.com/VictoriaMetrics/operator/releases/tag/v0.42.4) + +## 0.29.4 + +**Release date:** 2024-03-28 + +![AppVersion: 0.42.3](https://img.shields.io/static/v1?label=AppVersion&message=0.42.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) + +## 0.29.3 + +**Release date:** 2024-03-12 + +![AppVersion: 0.42.3](https://img.shields.io/static/v1?label=AppVersion&message=0.42.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- TODO + +## 0.29.2 + +**Release date:** 2024-03-06 + +![AppVersion: 0.42.2](https://img.shields.io/static/v1?label=AppVersion&message=0.42.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.42.2](https://github.com/VictoriaMetrics/operator/releases/tag/v0.42.2) + +## 0.29.0 + +**Release date:** 2024-03-06 + +![AppVersion: 0.42.1](https://img.shields.io/static/v1?label=AppVersion&message=0.42.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.42.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.42.1) + +## 0.29.0 + +**Release date:** 2024-03-04 + +![AppVersion: 0.42.0](https://img.shields.io/static/v1?label=AppVersion&message=0.42.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.42.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.42.0) + +## 0.28.1 + +**Release date:** 2024-02-21 + +![AppVersion: 0.41.2](https://img.shields.io/static/v1?label=AppVersion&message=0.41.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.41.2](https://github.com/VictoriaMetrics/operator/releases/tag/v0.41.2) + +## 0.28.0 + +**Release date:** 2024-02-09 + +![AppVersion: 0.41.1](https://img.shields.io/static/v1?label=AppVersion&message=0.41.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update victoriametrics CRD resources yaml. + +## 0.27.11 + +**Release date:** 2024-02-01 + +![AppVersion: 0.41.1](https://img.shields.io/static/v1?label=AppVersion&message=0.41.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.41.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.41.1) + +## 0.27.10 + +**Release date:** 2024-01-24 + +![AppVersion: 0.40.0](https://img.shields.io/static/v1?label=AppVersion&message=0.40.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump operator version to [0.40.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.40.0) + +## 0.27.9 + +**Release date:** 2023-12-12 + +![AppVersion: 0.39.4](https://img.shields.io/static/v1?label=AppVersion&message=0.39.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.39.4](https://github.com/VictoriaMetrics/operator/releases/tag/v0.39.4) + +## 0.27.8 + +**Release date:** 2023-12-08 + +![AppVersion: 0.39.3](https://img.shields.io/static/v1?label=AppVersion&message=0.39.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Sync CRD resources with operator [v0.39.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.39.3). + +## 0.27.7 + +**Release date:** 2023-12-08 + +![AppVersion: 0.39.3](https://img.shields.io/static/v1?label=AppVersion&message=0.39.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Skip deleting victoriametrics CRD resources when uninstall release. + +## 0.27.6 + +**Release date:** 2023-11-16 + +![AppVersion: 0.39.3](https://img.shields.io/static/v1?label=AppVersion&message=0.39.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.39.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.39.3) + +## 0.27.5 + +**Release date:** 2023-11-15 + +![AppVersion: 0.39.2](https://img.shields.io/static/v1?label=AppVersion&message=0.39.2&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.39.2](https://github.com/VictoriaMetrics/operator/releases/tag/v0.39.2) +- Add `extraObjects` to allow deploying additional resources with the chart release. (#751) + +## 0.27.4 + +**Release date:** 2023-11-01 + +![AppVersion: 0.39.1](https://img.shields.io/static/v1?label=AppVersion&message=0.39.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.39.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.39.1) + +## 0.27.3 + +**Release date:** 2023-10-08 + +![AppVersion: 0.39.0](https://img.shields.io/static/v1?label=AppVersion&message=0.39.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added endpointslices permissions to operator roles (#708) + +## 0.27.2 + +**Release date:** 2023-10-04 + +![AppVersion: 0.39.0](https://img.shields.io/static/v1?label=AppVersion&message=0.39.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM operator to [0.39.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.39.0) + +## 0.27.1 + +**Release date:** 2023-09-28 + +![AppVersion: 0.38.0](https://img.shields.io/static/v1?label=AppVersion&message=0.38.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix `relabelConfigs` for operator's VMServiceScrape (#624) + +## 0.27.0 + +**Release date:** 2023-09-11 + +![AppVersion: 0.38.0](https://img.shields.io/static/v1?label=AppVersion&message=0.38.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of operator to [v0.38.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.38.0) + +## 0.26.2 + +**Release date:** 2023-09-07 + +![AppVersion: 0.37.1](https://img.shields.io/static/v1?label=AppVersion&message=0.37.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Updated CRDs for operator + +## 0.26.1 + +**Release date:** 2023-09-04 + +![AppVersion: 0.37.1](https://img.shields.io/static/v1?label=AppVersion&message=0.37.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of Victoria Metrics operator to `v0.37.1` + +## 0.26.0 + +**Release date:** 2023-08-30 + +![AppVersion: 0.37.0](https://img.shields.io/static/v1?label=AppVersion&message=0.37.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump operator version to [v0.37.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.37.0) +- `psp_auto_creation_enabled` for operator is disabled by default + +## 0.25.0 + +**Release date:** 2023-08-24 + +![AppVersion: 0.36.0](https://img.shields.io/static/v1?label=AppVersion&message=0.36.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added `topologySpreadConstraints` for the operator + a small refactoring (#611) +- Fix vm operator appVersion (#589) +- Fixes operator doc description +- Add `cleanupCRD` option to clean up vm cr resources when uninstalling (#593) +- Bump operator version to [v0.36.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.36.0) + +## 0.24.1 + +**Release date:** 2023-07-13 + +![AppVersion: 0.35.](https://img.shields.io/static/v1?label=AppVersion&message=0.35.&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- operator release v0.35.1 + +## 0.24.0 + +**Release date:** 2023-07-03 + +![AppVersion: 0.35.0](https://img.shields.io/static/v1?label=AppVersion&message=0.35.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator for v0.35.0 +- updates for v1.91.1 release + +## 0.23.1 + +**Release date:** 2023-05-29 + +![AppVersion: 0.34.1](https://img.shields.io/static/v1?label=AppVersion&message=0.34.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator for v0.34.1 version + +## 0.23.0 + +**Release date:** 2023-05-25 + +![AppVersion: 0.34.0](https://img.shields.io/static/v1?label=AppVersion&message=0.34.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump operator version +- feat(operator): add PodDisruptionBudget (#546) diff --git a/docs/helm/victoria-metrics-operator/README.md b/docs/helm/victoria-metrics-operator/README.md new file mode 100644 index 0000000000..ce9289ebe8 --- /dev/null +++ b/docs/helm/victoria-metrics-operator/README.md @@ -0,0 +1,918 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.34.8](https://img.shields.io/badge/Version-0.34.8-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-operator) + +Victoria Metrics Operator + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). +* PV support on underlying infrastructure. + +## ArgoCD issues + +When running operator using ArgoCD without Cert Manager (`.Values.admissionWebhooks.certManager.enabled: false`) it will rerender webhook certificates +on each sync since Helm `lookup` function is not respected by ArgoCD. To prevent this please update you operator Application `spec.syncPolicy` and `spec.ignoreDifferences` with a following: + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +... +spec: + ... + syncPolicy: + syncOptions: + # https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/#respect-ignore-difference-configs + # argocd must also ignore difference during apply stage + # otherwise it ll silently override changes and cause a problem + - RespectIgnoreDifferences=true + ignoreDifferences: + - group: "" + kind: Secret + name: -validation + namespace: kube-system + jsonPointers: + - /data + - group: admissionregistration.k8s.io + kind: ValidatingWebhookConfiguration + name: -admission + jqPathExpressions: + - '.webhooks[]?.clientConfig.caBundle' +``` +where `` is output of `{{ include "vm-operator.fullname" }}` for your setup + +## Upgrade guide + + During release an issue with helm CRD was discovered. So for upgrade from version less then 0.1.3 you have to two options: + 1) use helm management for CRD, enabled by default. + 2) use own management system, need to add variable: --set createCRD=false. + +If you choose helm management, following steps must be done before upgrade: + +1) define namespace and helm release name variables + +``` +export NAMESPACE=default +export RELEASE_NAME=operator +``` + +execute kubectl commands: + +``` +kubectl get crd | grep victoriametrics.com | awk '{print $1 }' | xargs -i kubectl label crd {} app.kubernetes.io/managed-by=Helm --overwrite +kubectl get crd | grep victoriametrics.com | awk '{print $1 }' | xargs -i kubectl annotate crd {} meta.helm.sh/release-namespace="$NAMESPACE" meta.helm.sh/release-name="$RELEASE_NAME" --overwrite +``` + +run helm upgrade command. + +## Chart Details + +This chart will do the following: + +* Rollout victoria metrics operator + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-operator` chart available to installation: + +```console +helm search repo vm/victoria-metrics-operator -l +``` + +### Install `victoria-metrics-operator` chart + +Export default values of `victoria-metrics-operator` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-operator > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-operator > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vmo vm/victoria-metrics-operator -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vmo oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-operator -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vmo vm/victoria-metrics-operator -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vmo oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-operator -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vmo' +``` + +Get the application by running this command: + +```console +helm list -f vmo -n NAMESPACE +``` + +See the history of versions of `vmo` application with command. + +```console +helm history vmo -n NAMESPACE +``` + +## Validation webhook + + Its possible to use validation of created resources with operator. For now, you need cert-manager to easily certificate management https://cert-manager.io/docs/ + +```yaml +admissionWebhooks: + enabled: true + # what to do in case, when operator not available to validate request. + certManager: + # enables cert creation and injection by cert-manager + enabled: true +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vmo -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-operator + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-operator/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    admissionWebhooksobject
    +certManager:
    +    enabled: false
    +    issuer: {}
    +enabled: true
    +enabledCRDValidation:
    +    vlogs: true
    +    vmagent: true
    +    vmalert: true
    +    vmalertmanager: true
    +    vmalertmanagerconfig: true
    +    vmauth: true
    +    vmcluster: true
    +    vmrule: true
    +    vmsingle: true
    +    vmuser: true
    +keepTLSSecret: true
    +policy: Fail
    +tls:
    +    caCert: null
    +    cert: null
    +    key: null
    +
    +

    Configures resource validation

    +
    admissionWebhooks.certManagerobject
    +enabled: false
    +issuer: {}
    +
    +

    with keys: tls.key, tls.crt, ca.crt

    +
    admissionWebhooks.certManager.enabledbool
    +false
    +
    +

    Enables cert creation and injection by cert-manager.

    +
    admissionWebhooks.certManager.issuerobject
    +{}
    +
    +

    If needed, provide own issuer. Operator will create self-signed if empty.

    +
    admissionWebhooks.enabledbool
    +true
    +
    +

    Enables validation webhook.

    +
    admissionWebhooks.policystring
    +Fail
    +
    +

    What to do in case, when operator not available to validate request.

    +
    affinityobject
    +{}
    +
    +

    Pod affinity

    +
    annotationsobject
    +{}
    +
    +

    Annotations to be added to the all resources

    +
    crd.cleanup.enabledbool
    +false
    +
    +

    Tells helm to clean up all the vm resources under this release’s namespace when uninstalling

    +
    crd.cleanup.imageobject
    +pullPolicy: IfNotPresent
    +repository: bitnami/kubectl
    +tag: ""
    +
    +

    Image configuration for CRD cleanup Job

    +
    crd.createbool
    +true
    +
    +

    with this option, if you remove this chart, all crd resources will be deleted with it.

    +
    envlist
    +[]
    +
    +

    extra settings for the operator deployment. Full list here

    +
    envFromlist
    +[]
    +
    +
    extraArgsobject
    +{}
    +
    +

    operator container additional commandline arguments

    +
    extraContainerslist
    +[]
    +
    +
    extraHostPathMountslist
    +[]
    +
    +

    Additional hostPath mounts

    +
    extraLabelsobject
    +{}
    +
    +

    Labels to be added to the all resources

    +
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    extraVolumeMountslist
    +[]
    +
    +

    Extra Volume Mounts for the container

    +
    extraVolumeslist
    +[]
    +
    +

    Extra Volumes for the pod

    +
    fullnameOverridestring
    +""
    +
    +

    Overrides the full name of server component

    +
    global.cluster.dnsDomainstring
    +cluster.local
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    imageobject
    +pullPolicy: IfNotPresent
    +registry: ""
    +repository: victoriametrics/operator
    +tag: ""
    +variant: ""
    +
    +

    operator image configuration

    +
    image.pullPolicystring
    +IfNotPresent
    +
    +

    Image pull policy

    +
    image.registrystring
    +""
    +
    +

    Image registry

    +
    image.repositorystring
    +victoriametrics/operator
    +
    +

    Image repository

    +
    image.tagstring
    +""
    +
    +

    Image tag override Chart.AppVersion

    +
    imagePullSecretslist
    +[]
    +
    +

    Secret to pull images

    +
    logLevelstring
    +info
    +
    +

    possible values: info and error.

    +
    nameOverridestring
    +""
    +
    +

    VM operatror deployment name override

    +
    nodeSelectorobject
    +{}
    +
    +

    Pod’s node selector. Details are here

    +
    operator.disable_prometheus_converterbool
    +false
    +
    +

    By default, operator converts prometheus-operator objects.

    +
    operator.enable_converter_ownershipbool
    +false
    +
    +

    Enables ownership reference for converted prometheus-operator objects, it will remove corresponding victoria-metrics objects in case of deletion prometheus one.

    +
    operator.prometheus_converter_add_argocd_ignore_annotationsbool
    +false
    +
    +

    Compare-options and sync-options for prometheus objects converted by operator for properly use with ArgoCD

    +
    operator.useCustomConfigReloaderbool
    +false
    +
    +

    Enables custom config-reloader, bundled with operator. It should reduce vmagent and vmauth config sync-time and make it predictable.

    +
    podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
    +

    See kubectl explain poddisruptionbudget.spec for more or check these docs

    +
    podLabelsobject
    +{}
    +
    +
    podSecurityContextobject
    +{}
    +
    +
    probe.livenessobject
    +failureThreshold: 3
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +tcpSocket:
    +    port: probe
    +timeoutSeconds: 5
    +
    +

    Liveness probe

    +
    probe.readinessobject
    +failureThreshold: 3
    +httpGet:
    +    port: probe
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
    +

    Readiness probe

    +
    probe.startupobject
    +{}
    +
    +

    Startup probe

    +
    rbac.aggregatedClusterRolesobject
    +enabled: true
    +labels:
    +    admin:
    +        rbac.authorization.k8s.io/aggregate-to-admin: "true"
    +    view:
    +        rbac.authorization.k8s.io/aggregate-to-view: "true"
    +
    +

    create aggregated clusterRoles for CRD readonly and admin permissions

    +
    rbac.aggregatedClusterRoles.labelsobject
    +admin:
    +    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    +view:
    +    rbac.authorization.k8s.io/aggregate-to-view: "true"
    +
    +

    labels attached to according clusterRole

    +
    rbac.createbool
    +true
    +
    +

    Specifies whether the RBAC resources should be created

    +
    replicaCountint
    +1
    +
    +
    resourcesobject
    +{}
    +
    +

    Resource object

    +
    securityContextobject
    +{}
    +
    +
    service.annotationsobject
    +{}
    +
    +
    service.clusterIPstring
    +""
    +
    +
    service.externalIPsstring
    +""
    +
    +
    service.externalTrafficPolicystring
    +""
    +
    +
    service.healthCheckNodePortstring
    +""
    +
    +
    service.ipFamilieslist
    +[]
    +
    +
    service.ipFamilyPolicystring
    +""
    +
    +
    service.labelsobject
    +{}
    +
    +
    service.loadBalancerIPstring
    +""
    +
    +
    service.loadBalancerSourceRangeslist
    +[]
    +
    +
    service.servicePortint
    +8080
    +
    +
    service.typestring
    +ClusterIP
    +
    +
    service.webhookPortint
    +9443
    +
    +
    serviceAccount.createbool
    +true
    +
    +

    Specifies whether a service account should be created

    +
    serviceAccount.namestring
    +""
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    serviceMonitorobject
    +annotations: {}
    +basicAuth: {}
    +enabled: false
    +extraLabels: {}
    +interval: ""
    +relabelings: []
    +scheme: ""
    +scrapeTimeout: ""
    +tlsConfig: {}
    +
    +

    configures monitoring with serviceScrape. VMServiceScrape must be pre-installed

    +
    tolerationslist
    +[]
    +
    +

    Array of tolerations object. Spec is here

    +
    topologySpreadConstraintslist
    +[]
    +
    +

    Pod Topology Spread Constraints. Spec is here

    +
    watchNamespaceslist
    +[]
    +
    +

    By default, the operator will watch all the namespaces If you want to override this behavior, specify the namespace. Operator supports multiple namespaces for watching.

    +
    + diff --git a/docs/helm/victoria-metrics-operator/_changelog.md b/docs/helm/victoria-metrics-operator/_changelog.md new file mode 100644 index 0000000000..da8b816238 --- /dev/null +++ b/docs/helm/victoria-metrics-operator/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-operator-changelog + parent: helm-victoriametrics-operator +url: /helm/victoriametrics-operator/changelog +aliases: + - /helm/victoriametrics-operator/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-operator/_index.md b/docs/helm/victoria-metrics-operator/_index.md new file mode 100644 index 0000000000..ec9c24c5c0 --- /dev/null +++ b/docs/helm/victoria-metrics-operator/_index.md @@ -0,0 +1,13 @@ +--- +weight: 10 +title: VictoriaMetrics Operator +menu: + docs: + parent: helm + weight: 10 + identifier: helm-victoriametrics-operator +url: /helm/victoriametrics-operator +aliases: + - /helm/victoriametrics-operator/index.html +--- +{{% content "README.md" %}} diff --git a/docs/helm/victoria-metrics-single/CHANGELOG.md b/docs/helm/victoria-metrics-single/CHANGELOG.md new file mode 100644 index 0000000000..7580642396 --- /dev/null +++ b/docs/helm/victoria-metrics-single/CHANGELOG.md @@ -0,0 +1,326 @@ +## Next release + +- TODO + +## 0.11.2 + +**Release date:** 2024-09-12 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to override deployment namespace using `namespaceOverride` and `global.namespaceOverride` variables +- Removed deprecated API from RBAC. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1438) +- Made replicas configurable +- Allow override default for statefulset headless service + +## 0.11.1 + +**Release date:** 2024-09-03 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Deprecated `server.vmbackupmanager.enable` in a favour of `server.vmbackupmanager.enabled`. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/940). +- Fixed PVC in StatefulSet + +## 0.11.0 + +**Release date:** 2024-08-29 + +![AppVersion: v1.103.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.103.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) +- Fixed image pull secrets. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1285) +- Added global relabelConfig. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/207) +- Renamed `.Values.server.persistentVolume.storageClass` to `.Values.server.persistentVolume.storageClassName` +- Removed necessity to set `.Values.server.persistentVolume.existingClaim` when it should be created by chart. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/189) +- Removed `eula` support + +## 0.10.1 + +**Release date:** 2024-08-22 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Added ability to configure container port +- Fixed volume template. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1280) + +## 0.10.0 + +**Release date:** 2024-08-21 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: main container name was changed to `vmsingle`, which will recreate a pod. + +- Added `basicAuth` support for `ServiceMonitor` +- fix inconsistent relabeling `target_label` in default scrape config. +- Removed `PodSecurityPolicy` +- Removed support for `policy/v1beta1/PodDisruptionBudget` +- Set minimal kubernetes version to `1.25` +- Added ability to override liveness and readiness probes +- Updated `.Values.vmbackupmanager.readinessProbe` to `.Values.vmbackupmanager.probe.readiness` +- Updated `.Values.vmbackupmanager.livenessProbe` to `.Values.vmbackupmanager.probe.liveness` +- Updated `.Values.vmbackupmanager.startupProbe` to `.Values.vmbackupmanager.probe.startup` +- Updated `.Values.server.readinessProbe` to `.Values.server.probe.readiness` +- Updated `.Values.server.livenessProbe` to `.Values.server.probe.liveness` +- Updated `.Values.server.startupProbe` to `.Values.server.probe.startup` +- Added `.Values.global.imagePullSecrets` and `.Values.global.image.registry` +- Merged headless and non-headless services, removed statefulset service specific variables +- Use static container names in a pod +- Removed `networking.k8s.io/v1beta1/Ingress` and `extensions/v1beta1/Ingress` support +- Added `.Values.server.service.ipFamilies` and `.Values.server.service.ipFamilyPolicy` for service IP family management + +## 0.9.26 + +**Release date:** 2024-08-01 + +![AppVersion: v1.102.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.1) + +## 0.9.25 + +**Release date:** 2024-07-23 + +![AppVersion: v1.102.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.102.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.102.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.0) + +## 0.9.24 + +**Release date:** 2024-07-13 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix license flags templates, Thanks to @akatch for [the pull request](https://github.com/VictoriaMetrics/helm-charts/pull/1140). + +## 0.9.23 + +**Release date:** 2024-07-08 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- add missing API version and kind for volumeClaimTemplates, see [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1092). + +## 0.9.22 + +**Release date:** 2024-06-14 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +**Update note**: The VictoriaMetrics components image tag template has been updated. This change introduces `.Values..image.variant` to specify tag suffixes like `-scratch`, `-cluster`, `-enterprise`. Additionally, you can now omit `.Values..image.tag` to automatically use the version specified in `.Chart.AppVersion`. + +- support specifying image tag suffix like "-enterprise" for VictoriaMetrics components using `.Values..image.variant`. + +## 0.9.21 + +**Release date:** 2024-05-16 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- fix lost customized securityContext when introduced new default behavior for securityContext in [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995). + +## 0.9.20 + +**Release date:** 2024-05-10 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- support disabling default securityContext to keep compatible with platform like openshift, see this [pull request](https://github.com/VictoriaMetrics/helm-charts/pull/995) by @Baboulinet-33 for details. + +## 0.9.19 + +**Release date:** 2024-04-26 + +![AppVersion: v1.101.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.101.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- properly truncate value of `app.kubernetes.io/managed-by` and `app.kubernetes.io/instance` labels in case release name exceeds 63 characters. +- bump version of VM components to [v1.101.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.101.0) + +## 0.9.18 + +**Release date:** 2024-04-16 + +![AppVersion: v1.100.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.100.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.100.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.100.1) + +**Release date:** 2024-03-28 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- added ability to use slice variables in extraArgs (#944) +- support adding `metricRelabelings` for server serviceMonitor (#946) + +## 0.9.16 + +**Release date:** 2024-03-05 + +![AppVersion: v1.99.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.99.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.99.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.99.0) + +## 0.9.15 + +**Release date:** 2024-02-01 + +![AppVersion: v1.97.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.97.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.97.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.1) + +## 0.9.14 + +**Release date:** 2023-12-13 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Fix configuration of volume mount for license key referenced by using secret. + +## 0.9.13 + +**Release date:** 2023-12-12 + +![AppVersion: v1.96.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.96.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0) + +## 0.9.12 + +**Release date:** 2023-11-16 + +![AppVersion: v1.95.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.1) + +## 0.9.11 + +**Release date:** 2023-11-15 + +![AppVersion: v1.95.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.95.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.95.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.95.0) + +## 0.9.10 + +**Release date:** 2023-10-12 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Add license enforcement for vmbackupmanager in order to avoid running it without enterprise license key. See [these docs](https://docs.victoriametrics.com/enterprise) for details. +- Fix license flags not being passed to vmsingle when using StatefulSet. + +## 0.9.9 + +**Release date:** 2023-10-04 + +![AppVersion: v1.94.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.94.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of VM components to [v1.94.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.94.0) +- Add support of providing enterprise license key for VictoriaMetrics enterprise. See [these docs](https://docs.victoriametrics.com/enterprise) for details. + +## 0.9.8 + +**Release date:** 2023-09-21 + +![AppVersion: v1.93.5](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.5&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.5) + +## 0.9.7 + +**Release date:** 2023-09-11 + +![AppVersion: v1.93.4](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.4&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of VM components to [v1.93.4](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.4) + +## 0.9.6 + +**Release date:** 2023-09-04 + +![AppVersion: v1.93.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Bump version of Victoria Metrics to `v1.93.3` +- Fixed `kubeVersion` in `Chart.yaml` + +## 0.9.5 + +**Release date:** 2023-08-30 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Disable `honorTimestamps` for cadvisor scrape job by default (#617) + +## 0.9.4 + +**Release date:** 2023-08-23 + +![AppVersion: v1.93.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.93.0 to v1.93.1 + +## 0.9.3 + +**Release date:** 2023-08-12 + +![AppVersion: v1.93.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.93.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.1 to v1.93.0 + +## 0.9.2 + +**Release date:** 2023-07-28 + +![AppVersion: v1.92.1](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.92.0 to v1.92.1 (#599) + +## 0.9.1 + +**Release date:** 2023-07-27 + +![AppVersion: v1.92.0](https://img.shields.io/static/v1?label=AppVersion&message=v1.92.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- Update VictoriaMetrics components from v1.91.3 to v1.92.0 +- fix misused securityContext and podSecurityContext (#592) + +## 0.9.0 + +**Release date:** 2023-07-13 + +![AppVersion: v1.91.3](https://img.shields.io/static/v1?label=AppVersion&message=v1.91.3&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- bump version of agent, alert, auth, cluster, single +- feat(vmsingle): Add ability to deploy extra manifests (#587) diff --git a/docs/helm/victoria-metrics-single/README.md b/docs/helm/victoria-metrics-single/README.md new file mode 100644 index 0000000000..d8075d2634 --- /dev/null +++ b/docs/helm/victoria-metrics-single/README.md @@ -0,0 +1,2258 @@ +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.11.2](https://img.shields.io/badge/Version-0.11.2-informational?style=flat-square) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-single) + +Victoria Metrics Single version - high-performance, cost-effective and scalable TSDB, long-term remote storage for Prometheus + +## Prerequisites + +* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). +* PV support on underlying infrastructure. + +## Chart Details + +This chart will do the following: + +* Rollout Victoria Metrics Single. + +## How to install + +Access a Kubernetes cluster. + +### Setup chart repository (can be omitted for OCI repositories) + +Add a chart helm repository with follow commands: + +```console +helm repo add vm https://victoriametrics.github.io/helm-charts/ + +helm repo update +``` +List versions of `vm/victoria-metrics-single` chart available to installation: + +```console +helm search repo vm/victoria-metrics-single -l +``` + +### Install `victoria-metrics-single` chart + +Export default values of `victoria-metrics-single` chart to file `values.yaml`: + + - For HTTPS repository + + ```console + helm show values vm/victoria-metrics-single > values.yaml + ``` + - For OCI repository + + ```console + helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-single > values.yaml + ``` + +Change the values according to the need of the environment in ``values.yaml`` file. + +Test the installation with command: + + - For HTTPS repository + + ```console + helm install vms vm/victoria-metrics-single -f values.yaml -n NAMESPACE --debug --dry-run + ``` + + - For OCI repository + + ```console + helm install vms oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-single -f values.yaml -n NAMESPACE --debug --dry-run + ``` + +Install chart with command: + + - For HTTPS repository + + ```console + helm install vms vm/victoria-metrics-single -f values.yaml -n NAMESPACE + ``` + + - For OCI repository + + ```console + helm install vms oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-single -f values.yaml -n NAMESPACE + ``` + +Get the pods lists by running this commands: + +```console +kubectl get pods -A | grep 'vms' +``` + +Get the application by running this command: + +```console +helm list -f vms -n NAMESPACE +``` + +See the history of versions of `vms` application with command. + +```console +helm history vms -n NAMESPACE +``` + +## How to uninstall + +Remove application with command. + +```console +helm uninstall vms -n NAMESPACE +``` + +## Documentation of Helm Chart + +Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). + +Generate docs with ``helm-docs`` command. + +```bash +cd charts/victoria-metrics-single + +helm-docs +``` + +The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. + +## Parameters + +The following tables lists the configurable parameters of the chart and their default values. + +Change the values according to the need of the environment in ``victoria-metrics-single/values.yaml`` file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    automountServiceAccountTokenbool
    +true
    +
    +
    extraObjectslist
    +[]
    +
    +

    Add extra specs dynamically to this chart

    +
    global.compatibility.openshift.adaptSecurityContextstring
    +auto
    +
    +
    global.image.registrystring
    +""
    +
    +
    global.imagePullSecretslist
    +[]
    +
    +
    licenseobject
    +key: ""
    +secret:
    +    key: ""
    +    name: ""
    +
    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +
    license.keystring
    +""
    +
    +

    License key

    +
    license.secretobject
    +key: ""
    +name: ""
    +
    +

    Use existing secret with license key

    +
    license.secret.keystring
    +""
    +
    +

    Key in secret with license key

    +
    license.secret.namestring
    +""
    +
    +

    Existing secret name

    +
    podDisruptionBudget.enabledbool
    +false
    +
    +

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    podDisruptionBudget.extraLabelsobject
    +{}
    +
    +
    printNotesbool
    +true
    +
    +

    Print chart notes

    +
    rbac.createbool
    +true
    +
    +
    rbac.extraLabelsobject
    +{}
    +
    +
    rbac.namespacedbool
    +false
    +
    +
    server.affinityobject
    +{}
    +
    +

    Pod affinity

    +
    server.containerWorkingDirstring
    +""
    +
    +

    Container workdir

    +
    server.emptyDirobject
    +{}
    +
    +
    server.enabledbool
    +true
    +
    +

    Enable deployment of server component. Deployed as StatefulSet

    +
    server.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    server.envFromlist
    +[]
    +
    +
    server.extraArgs."envflag.enable"string
    +"true"
    +
    +
    server.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    server.extraArgs.loggerFormatstring
    +json
    +
    +
    server.extraContainerslist
    +[]
    +
    +
    server.extraHostPathMountslist
    +[]
    +
    +
    server.extraLabelsobject
    +{}
    +
    +

    Sts/Deploy additional labels

    +
    server.extraVolumeMountslist
    +[]
    +
    +
    server.extraVolumeslist
    +[]
    +
    +
    server.fullnameOverridestring
    +null
    +
    +

    Overrides the full name of server component

    +
    server.image.pullPolicystring
    +IfNotPresent
    +
    +

    Image pull policy

    +
    server.image.registrystring
    +""
    +
    +

    Image registry

    +
    server.image.repositorystring
    +victoriametrics/victoria-metrics
    +
    +

    Image repository

    +
    server.image.tagstring
    +""
    +
    +

    Image tag

    +
    server.image.variantstring
    +""
    +
    +
    server.imagePullSecretslist
    +[]
    +
    +
    server.ingress.annotationsobject
    +{}
    +
    +

    Ingress annotations

    +
    server.ingress.enabledbool
    +false
    +
    +

    Enable deployment of ingress for server component

    +
    server.ingress.extraLabelsobject
    +{}
    +
    +

    Ingress extra labels

    +
    server.ingress.hostslist
    +[]
    +
    +

    Array of host objects

    +
    server.ingress.pathTypestring
    +Prefix
    +
    +

    pathType is only for k8s >= 1.1=

    +
    server.ingress.tlslist
    +[]
    +
    +

    Array of TLS objects

    +
    server.initContainerslist
    +[]
    +
    +
    server.namestring
    +server
    +
    +

    Server container name

    +
    server.nodeSelectorobject
    +{}
    +
    +

    Pod’s node selector. Details are here

    +
    server.persistentVolume.accessModeslist
    +- ReadWriteOnce
    +
    +

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    +
    server.persistentVolume.annotationsobject
    +{}
    +
    +

    Persistant volume annotations

    +
    server.persistentVolume.enabledbool
    +true
    +
    +

    Create/use Persistent Volume Claim for server component. Empty dir if false

    +
    server.persistentVolume.existingClaimstring
    +""
    +
    +

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    +
    server.persistentVolume.matchLabelsobject
    +{}
    +
    +

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    +
    server.persistentVolume.mountPathstring
    +/storage
    +
    +

    Mount path. Server data Persistent Volume mount root path.

    +
    server.persistentVolume.sizestring
    +16Gi
    +
    +

    Size of the volume. Should be calculated based on the metrics you send and retention policy you set.

    +
    server.persistentVolume.storageClassNamestring
    +""
    +
    +

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    +
    server.persistentVolume.subPathstring
    +""
    +
    +

    Mount subpath

    +
    server.podAnnotationsobject
    +{}
    +
    +

    Pod’s annotations

    +
    server.podLabelsobject
    +{}
    +
    +

    Pod’s additional labels

    +
    server.podManagementPolicystring
    +OrderedReady
    +
    +

    Pod’s management policy

    +
    server.podSecurityContextobject
    +enabled: true
    +
    +

    Pod’s security context. Details are here

    +
    server.priorityClassNamestring
    +""
    +
    +

    Name of Priority Class

    +
    server.probe.liveness.failureThresholdint
    +10
    +
    +
    server.probe.liveness.initialDelaySecondsint
    +30
    +
    +
    server.probe.liveness.periodSecondsint
    +30
    +
    +
    server.probe.liveness.tcpSocketobject
    +{}
    +
    +
    server.probe.liveness.timeoutSecondsint
    +5
    +
    +
    server.probe.readiness.failureThresholdint
    +3
    +
    +
    server.probe.readiness.httpGetobject
    +{}
    +
    +
    server.probe.readiness.initialDelaySecondsint
    +5
    +
    +
    server.probe.readiness.periodSecondsint
    +15
    +
    +
    server.probe.readiness.timeoutSecondsint
    +5
    +
    +
    server.probe.startupobject
    +{}
    +
    +
    server.relabelobject
    +config: []
    +configMap: ""
    +enabled: false
    +
    +

    Global relabel configuration

    +
    server.relabel.configMapstring
    +""
    +
    +

    Use existing configmap if specified otherwise .config values will be used. Relabel config should reside under relabel.yml key

    +
    server.replicaCountint
    +1
    +
    +

    Replica count

    +
    server.resourcesobject
    +{}
    +
    +

    Resource object. Details are here

    +
    server.retentionPeriodint
    +1
    +
    +

    Data retention period in month

    +
    server.scrapeobject
    +config:
    +    global:
    +        scrape_interval: 15s
    +    scrape_configs:
    +        - job_name: victoriametrics
    +          static_configs:
    +            - targets:
    +                - localhost:8428
    +        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          job_name: kubernetes-apiservers
    +          kubernetes_sd_configs:
    +            - role: endpoints
    +          relabel_configs:
    +            - action: keep
    +              regex: default;kubernetes;https
    +              source_labels:
    +                - __meta_kubernetes_namespace
    +                - __meta_kubernetes_service_name
    +                - __meta_kubernetes_endpoint_port_name
    +          scheme: https
    +          tls_config:
    +            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +            insecure_skip_verify: true
    +        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          job_name: kubernetes-nodes
    +          kubernetes_sd_configs:
    +            - role: node
    +          relabel_configs:
    +            - action: labelmap
    +              regex: __meta_kubernetes_node_label_(.+)
    +            - replacement: kubernetes.default.svc:443
    +              target_label: __address__
    +            - regex: (.+)
    +              replacement: /api/v1/nodes/$1/proxy/metrics
    +              source_labels:
    +                - __meta_kubernetes_node_name
    +              target_label: __metrics_path__
    +          scheme: https
    +          tls_config:
    +            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +            insecure_skip_verify: true
    +        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +          honor_timestamps: false
    +          job_name: kubernetes-nodes-cadvisor
    +          kubernetes_sd_configs:
    +            - role: node
    +          relabel_configs:
    +            - action: labelmap
    +              regex: __meta_kubernetes_node_label_(.+)
    +            - replacement: kubernetes.default.svc:443
    +              target_label: __address__
    +            - regex: (.+)
    +              replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    +              source_labels:
    +                - __meta_kubernetes_node_name
    +              target_label: __metrics_path__
    +          scheme: https
    +          tls_config:
    +            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +            insecure_skip_verify: true
    +        - job_name: kubernetes-service-endpoints
    +          kubernetes_sd_configs:
    +            - role: endpoints
    +          relabel_configs:
    +            - action: drop
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_pod_container_init
    +            - action: keep_if_equal
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_port
    +                - __meta_kubernetes_pod_container_port_number
    +            - action: keep
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_scrape
    +            - action: replace
    +              regex: (https?)
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +              target_label: __scheme__
    +            - action: replace
    +              regex: (.+)
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_path
    +              target_label: __metrics_path__
    +            - action: replace
    +              regex: ([^:]+)(?::\d+)?;(\d+)
    +              replacement: $1:$2
    +              source_labels:
    +                - __address__
    +                - __meta_kubernetes_service_annotation_prometheus_io_port
    +              target_label: __address__
    +            - action: labelmap
    +              regex: __meta_kubernetes_service_label_(.+)
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_namespace
    +              target_label: namespace
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_service_name
    +              target_label: service
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_pod_node_name
    +              target_label: node
    +        - job_name: kubernetes-service-endpoints-slow
    +          kubernetes_sd_configs:
    +            - role: endpoints
    +          relabel_configs:
    +            - action: drop
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_pod_container_init
    +            - action: keep_if_equal
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_port
    +                - __meta_kubernetes_pod_container_port_number
    +            - action: keep
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    +            - action: replace
    +              regex: (https?)
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +              target_label: __scheme__
    +            - action: replace
    +              regex: (.+)
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_path
    +              target_label: __metrics_path__
    +            - action: replace
    +              regex: ([^:]+)(?::\d+)?;(\d+)
    +              replacement: $1:$2
    +              source_labels:
    +                - __address__
    +                - __meta_kubernetes_service_annotation_prometheus_io_port
    +              target_label: __address__
    +            - action: labelmap
    +              regex: __meta_kubernetes_service_label_(.+)
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_namespace
    +              target_label: namespace
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_service_name
    +              target_label: service
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_pod_node_name
    +              target_label: node
    +          scrape_interval: 5m
    +          scrape_timeout: 30s
    +        - job_name: kubernetes-services
    +          kubernetes_sd_configs:
    +            - role: service
    +          metrics_path: /probe
    +          params:
    +            module:
    +                - http_2xx
    +          relabel_configs:
    +            - action: keep
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_service_annotation_prometheus_io_probe
    +            - source_labels:
    +                - __address__
    +              target_label: __param_target
    +            - replacement: blackbox
    +              target_label: __address__
    +            - source_labels:
    +                - __param_target
    +              target_label: instance
    +            - action: labelmap
    +              regex: __meta_kubernetes_service_label_(.+)
    +            - source_labels:
    +                - __meta_kubernetes_namespace
    +              target_label: namespace
    +            - source_labels:
    +                - __meta_kubernetes_service_name
    +              target_label: service
    +        - job_name: kubernetes-pods
    +          kubernetes_sd_configs:
    +            - role: pod
    +          relabel_configs:
    +            - action: drop
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_pod_container_init
    +            - action: keep_if_equal
    +              source_labels:
    +                - __meta_kubernetes_pod_annotation_prometheus_io_port
    +                - __meta_kubernetes_pod_container_port_number
    +            - action: keep
    +              regex: true
    +              source_labels:
    +                - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    +            - action: replace
    +              regex: (.+)
    +              source_labels:
    +                - __meta_kubernetes_pod_annotation_prometheus_io_path
    +              target_label: __metrics_path__
    +            - action: replace
    +              regex: ([^:]+)(?::\d+)?;(\d+)
    +              replacement: $1:$2
    +              source_labels:
    +                - __address__
    +                - __meta_kubernetes_pod_annotation_prometheus_io_port
    +              target_label: __address__
    +            - action: labelmap
    +              regex: __meta_kubernetes_pod_label_(.+)
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_namespace
    +              target_label: namespace
    +            - action: replace
    +              source_labels:
    +                - __meta_kubernetes_pod_name
    +              target_label: pod
    +configMap: ""
    +enabled: false
    +extraScrapeConfigs: []
    +
    +

    Scrape configuration for victoriametrics

    +
    server.scrape.configobject
    +global:
    +    scrape_interval: 15s
    +scrape_configs:
    +    - job_name: victoriametrics
    +      static_configs:
    +        - targets:
    +            - localhost:8428
    +    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +      job_name: kubernetes-apiservers
    +      kubernetes_sd_configs:
    +        - role: endpoints
    +      relabel_configs:
    +        - action: keep
    +          regex: default;kubernetes;https
    +          source_labels:
    +            - __meta_kubernetes_namespace
    +            - __meta_kubernetes_service_name
    +            - __meta_kubernetes_endpoint_port_name
    +      scheme: https
    +      tls_config:
    +        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecure_skip_verify: true
    +    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +      job_name: kubernetes-nodes
    +      kubernetes_sd_configs:
    +        - role: node
    +      relabel_configs:
    +        - action: labelmap
    +          regex: __meta_kubernetes_node_label_(.+)
    +        - replacement: kubernetes.default.svc:443
    +          target_label: __address__
    +        - regex: (.+)
    +          replacement: /api/v1/nodes/$1/proxy/metrics
    +          source_labels:
    +            - __meta_kubernetes_node_name
    +          target_label: __metrics_path__
    +      scheme: https
    +      tls_config:
    +        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecure_skip_verify: true
    +    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +      honor_timestamps: false
    +      job_name: kubernetes-nodes-cadvisor
    +      kubernetes_sd_configs:
    +        - role: node
    +      relabel_configs:
    +        - action: labelmap
    +          regex: __meta_kubernetes_node_label_(.+)
    +        - replacement: kubernetes.default.svc:443
    +          target_label: __address__
    +        - regex: (.+)
    +          replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    +          source_labels:
    +            - __meta_kubernetes_node_name
    +          target_label: __metrics_path__
    +      scheme: https
    +      tls_config:
    +        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecure_skip_verify: true
    +    - job_name: kubernetes-service-endpoints
    +      kubernetes_sd_configs:
    +        - role: endpoints
    +      relabel_configs:
    +        - action: drop
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_container_init
    +        - action: keep_if_equal
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +            - __meta_kubernetes_pod_container_port_number
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scrape
    +        - action: replace
    +          regex: (https?)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +          target_label: __scheme__
    +        - action: replace
    +          regex: (.+)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_path
    +          target_label: __metrics_path__
    +        - action: replace
    +          regex: ([^:]+)(?::\d+)?;(\d+)
    +          replacement: $1:$2
    +          source_labels:
    +            - __address__
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +          target_label: __address__
    +        - action: labelmap
    +          regex: __meta_kubernetes_service_label_(.+)
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: service
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_pod_node_name
    +          target_label: node
    +    - job_name: kubernetes-service-endpoints-slow
    +      kubernetes_sd_configs:
    +        - role: endpoints
    +      relabel_configs:
    +        - action: drop
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_container_init
    +        - action: keep_if_equal
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +            - __meta_kubernetes_pod_container_port_number
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    +        - action: replace
    +          regex: (https?)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +          target_label: __scheme__
    +        - action: replace
    +          regex: (.+)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_path
    +          target_label: __metrics_path__
    +        - action: replace
    +          regex: ([^:]+)(?::\d+)?;(\d+)
    +          replacement: $1:$2
    +          source_labels:
    +            - __address__
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +          target_label: __address__
    +        - action: labelmap
    +          regex: __meta_kubernetes_service_label_(.+)
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: service
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_pod_node_name
    +          target_label: node
    +      scrape_interval: 5m
    +      scrape_timeout: 30s
    +    - job_name: kubernetes-services
    +      kubernetes_sd_configs:
    +        - role: service
    +      metrics_path: /probe
    +      params:
    +        module:
    +            - http_2xx
    +      relabel_configs:
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_probe
    +        - source_labels:
    +            - __address__
    +          target_label: __param_target
    +        - replacement: blackbox
    +          target_label: __address__
    +        - source_labels:
    +            - __param_target
    +          target_label: instance
    +        - action: labelmap
    +          regex: __meta_kubernetes_service_label_(.+)
    +        - source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: service
    +    - job_name: kubernetes-pods
    +      kubernetes_sd_configs:
    +        - role: pod
    +      relabel_configs:
    +        - action: drop
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_container_init
    +        - action: keep_if_equal
    +          source_labels:
    +            - __meta_kubernetes_pod_annotation_prometheus_io_port
    +            - __meta_kubernetes_pod_container_port_number
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    +        - action: replace
    +          regex: (.+)
    +          source_labels:
    +            - __meta_kubernetes_pod_annotation_prometheus_io_path
    +          target_label: __metrics_path__
    +        - action: replace
    +          regex: ([^:]+)(?::\d+)?;(\d+)
    +          replacement: $1:$2
    +          source_labels:
    +            - __address__
    +            - __meta_kubernetes_pod_annotation_prometheus_io_port
    +          target_label: __address__
    +        - action: labelmap
    +          regex: __meta_kubernetes_pod_label_(.+)
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_pod_name
    +          target_label: pod
    +
    +

    Scrape config

    +
    server.scrape.config.scrape_configslist
    +- job_name: victoriametrics
    +  static_configs:
    +    - targets:
    +        - localhost:8428
    +- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +  job_name: kubernetes-apiservers
    +  kubernetes_sd_configs:
    +    - role: endpoints
    +  relabel_configs:
    +    - action: keep
    +      regex: default;kubernetes;https
    +      source_labels:
    +        - __meta_kubernetes_namespace
    +        - __meta_kubernetes_service_name
    +        - __meta_kubernetes_endpoint_port_name
    +  scheme: https
    +  tls_config:
    +    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    insecure_skip_verify: true
    +- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +  job_name: kubernetes-nodes
    +  kubernetes_sd_configs:
    +    - role: node
    +  relabel_configs:
    +    - action: labelmap
    +      regex: __meta_kubernetes_node_label_(.+)
    +    - replacement: kubernetes.default.svc:443
    +      target_label: __address__
    +    - regex: (.+)
    +      replacement: /api/v1/nodes/$1/proxy/metrics
    +      source_labels:
    +        - __meta_kubernetes_node_name
    +      target_label: __metrics_path__
    +  scheme: https
    +  tls_config:
    +    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    insecure_skip_verify: true
    +- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +  honor_timestamps: false
    +  job_name: kubernetes-nodes-cadvisor
    +  kubernetes_sd_configs:
    +    - role: node
    +  relabel_configs:
    +    - action: labelmap
    +      regex: __meta_kubernetes_node_label_(.+)
    +    - replacement: kubernetes.default.svc:443
    +      target_label: __address__
    +    - regex: (.+)
    +      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    +      source_labels:
    +        - __meta_kubernetes_node_name
    +      target_label: __metrics_path__
    +  scheme: https
    +  tls_config:
    +    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +    insecure_skip_verify: true
    +- job_name: kubernetes-service-endpoints
    +  kubernetes_sd_configs:
    +    - role: endpoints
    +  relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scrape
    +    - action: replace
    +      regex: (https?)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +      target_label: __scheme__
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_node_name
    +      target_label: node
    +- job_name: kubernetes-service-endpoints-slow
    +  kubernetes_sd_configs:
    +    - role: endpoints
    +  relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    +    - action: replace
    +      regex: (https?)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +      target_label: __scheme__
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_node_name
    +      target_label: node
    +  scrape_interval: 5m
    +  scrape_timeout: 30s
    +- job_name: kubernetes-services
    +  kubernetes_sd_configs:
    +    - role: service
    +  metrics_path: /probe
    +  params:
    +    module:
    +        - http_2xx
    +  relabel_configs:
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_probe
    +    - source_labels:
    +        - __address__
    +      target_label: __param_target
    +    - replacement: blackbox
    +      target_label: __address__
    +    - source_labels:
    +        - __param_target
    +      target_label: instance
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +- job_name: kubernetes-pods
    +  kubernetes_sd_configs:
    +    - role: pod
    +  relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_pod_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_pod_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_pod_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_pod_label_(.+)
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_name
    +      target_label: pod
    +
    +

    Scrape targets

    +
    server.scrape.config.scrape_configs[4]object
    +job_name: kubernetes-service-endpoints
    +kubernetes_sd_configs:
    +    - role: endpoints
    +relabel_configs:
    +    - action: drop
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_pod_container_init
    +    - action: keep_if_equal
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +        - __meta_kubernetes_pod_container_port_number
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scrape
    +    - action: replace
    +      regex: (https?)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +      target_label: __scheme__
    +    - action: replace
    +      regex: (.+)
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_path
    +      target_label: __metrics_path__
    +    - action: replace
    +      regex: ([^:]+)(?::\d+)?;(\d+)
    +      replacement: $1:$2
    +      source_labels:
    +        - __address__
    +        - __meta_kubernetes_service_annotation_prometheus_io_port
    +      target_label: __address__
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +    - action: replace
    +      source_labels:
    +        - __meta_kubernetes_pod_node_name
    +      target_label: node
    +
    +

    Scrape rule using kubernetes service discovery for endpoints

    +
    server.scrape.config.scrape_configs[6]object
    +job_name: kubernetes-services
    +kubernetes_sd_configs:
    +    - role: service
    +metrics_path: /probe
    +params:
    +    module:
    +        - http_2xx
    +relabel_configs:
    +    - action: keep
    +      regex: true
    +      source_labels:
    +        - __meta_kubernetes_service_annotation_prometheus_io_probe
    +    - source_labels:
    +        - __address__
    +      target_label: __param_target
    +    - replacement: blackbox
    +      target_label: __address__
    +    - source_labels:
    +        - __param_target
    +      target_label: instance
    +    - action: labelmap
    +      regex: __meta_kubernetes_service_label_(.+)
    +    - source_labels:
    +        - __meta_kubernetes_namespace
    +      target_label: namespace
    +    - source_labels:
    +        - __meta_kubernetes_service_name
    +      target_label: service
    +
    +

    Example scrape config for probing services via the Blackbox Exporter. The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * prometheus.io/probe: Only probe services that have a value of true

    +
    server.scrape.configMapstring
    +""
    +
    +

    Use existing configmap if specified otherwise .config values will be used. Scrape config should reside under scrape.yml key

    +
    server.scrape.enabledbool
    +false
    +
    +

    If true scrapes targets, creates config map or use specified one with scrape targets

    +
    server.scrape.extraScrapeConfigslist
    +[]
    +
    +

    Extra scrape configs that will be appended to server.scrape.config

    +
    server.securityContextobject
    +enabled: true
    +
    +

    Security context to be added to server pods

    +
    server.service.annotationsobject
    +{}
    +
    +

    Service annotations

    +
    server.service.clusterIPstring
    +""
    +
    +

    Service ClusterIP

    +
    server.service.externalIPslist
    +[]
    +
    +

    Service External IPs. Details are here

    +
    server.service.externalTrafficPolicystring
    +""
    +
    +
    server.service.healthCheckNodePortstring
    +""
    +
    +
    server.service.ipFamilieslist
    +[]
    +
    +
    server.service.ipFamilyPolicystring
    +""
    +
    +
    server.service.labelsobject
    +{}
    +
    +

    Service labels

    +
    server.service.loadBalancerIPstring
    +""
    +
    +

    Service load balacner IP

    +
    server.service.loadBalancerSourceRangeslist
    +[]
    +
    +

    Load balancer source range

    +
    server.service.servicePortint
    +8428
    +
    +

    Service port

    +
    server.service.typestring
    +ClusterIP
    +
    +

    Service type

    +
    server.serviceMonitor.annotationsobject
    +{}
    +
    +

    Service Monitor annotations

    +
    server.serviceMonitor.basicAuthobject
    +{}
    +
    +

    Basic auth params for Service Monitor

    +
    server.serviceMonitor.enabledbool
    +false
    +
    +

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    +
    server.serviceMonitor.extraLabelsobject
    +{}
    +
    +

    Service Monitor labels

    +
    server.serviceMonitor.metricRelabelingslist
    +[]
    +
    +

    Service Monitor metricRelabelings

    +
    server.serviceMonitor.relabelingslist
    +[]
    +
    +

    Service Monitor relabelings

    +
    server.statefulSet.enabledbool
    +true
    +
    +

    Creates statefulset instead of deployment, useful when you want to keep the cache

    +
    server.statefulSet.podManagementPolicystring
    +OrderedReady
    +
    +

    Deploy order policy for StatefulSet pods

    +
    server.terminationGracePeriodSecondsint
    +60
    +
    +

    Pod’s termination grace period in seconds

    +
    server.tolerationslist
    +[]
    +
    +

    Node tolerations for server scheduling to nodes with taints. Details are here

    +
    server.vmbackupmanager.destinationstring
    +""
    +
    +

    backup destination at S3, GCS or local filesystem. Release name will be included to path!

    +
    server.vmbackupmanager.disableDailybool
    +false
    +
    +

    disable daily backups

    +
    server.vmbackupmanager.disableHourlybool
    +false
    +
    +

    disable hourly backups

    +
    server.vmbackupmanager.disableMonthlybool
    +false
    +
    +

    disable monthly backups

    +
    server.vmbackupmanager.disableWeeklybool
    +false
    +
    +

    disable weekly backups

    +
    server.vmbackupmanager.enabledbool
    +false
    +
    +

    enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

    +
    server.vmbackupmanager.envlist
    +[]
    +
    +

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +
    server.vmbackupmanager.extraArgs."envflag.enable"string
    +"true"
    +
    +
    server.vmbackupmanager.extraArgs."envflag.prefix"string
    +VM_
    +
    +
    server.vmbackupmanager.extraArgs.loggerFormatstring
    +json
    +
    +
    server.vmbackupmanager.extraVolumeMountslist
    +[]
    +
    +
    server.vmbackupmanager.image.registrystring
    +""
    +
    +

    vmbackupmanager image registry

    +
    server.vmbackupmanager.image.repositorystring
    +victoriametrics/vmbackupmanager
    +
    +

    vmbackupmanager image repository

    +
    server.vmbackupmanager.image.tagstring
    +""
    +
    +

    vmbackupmanager image tag

    +
    server.vmbackupmanager.image.variantstring
    +""
    +
    +
    server.vmbackupmanager.probe.liveness.failureThresholdint
    +10
    +
    +
    server.vmbackupmanager.probe.liveness.initialDelaySecondsint
    +30
    +
    +
    server.vmbackupmanager.probe.liveness.periodSecondsint
    +30
    +
    +
    server.vmbackupmanager.probe.liveness.tcpSocket.portstring
    +manager-http
    +
    +
    server.vmbackupmanager.probe.liveness.timeoutSecondsint
    +5
    +
    +
    server.vmbackupmanager.probe.readiness.failureThresholdint
    +3
    +
    +
    server.vmbackupmanager.probe.readiness.httpGet.portstring
    +manager-http
    +
    +
    server.vmbackupmanager.probe.readiness.initialDelaySecondsint
    +5
    +
    +
    server.vmbackupmanager.probe.readiness.periodSecondsint
    +15
    +
    +
    server.vmbackupmanager.probe.readiness.timeoutSecondsint
    +5
    +
    +
    server.vmbackupmanager.probe.startup.httpGet.portstring
    +manager-http
    +
    +
    server.vmbackupmanager.resourcesobject
    +{}
    +
    +
    server.vmbackupmanager.restoreobject
    +onStart:
    +    enabled: false
    +
    +

    Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager#restore-commands

    +
    server.vmbackupmanager.retentionobject
    +keepLastDaily: 2
    +keepLastHourly: 2
    +keepLastMonthly: 2
    +keepLastWeekly: 2
    +
    +

    backups’ retention settings

    +
    server.vmbackupmanager.retention.keepLastDailyint
    +2
    +
    +

    keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

    +
    server.vmbackupmanager.retention.keepLastHourlyint
    +2
    +
    +

    keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

    +
    server.vmbackupmanager.retention.keepLastMonthlyint
    +2
    +
    +

    keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

    +
    server.vmbackupmanager.retention.keepLastWeeklyint
    +2
    +
    +

    keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

    +
    serviceAccount.automountTokenbool
    +true
    +
    +

    Mount API token to pod directly

    +
    serviceAccount.createbool
    +true
    +
    +

    Create service account.

    +
    serviceAccount.extraLabelsobject
    +{}
    +
    +
    + diff --git a/docs/helm/victoria-metrics-single/_changelog.md b/docs/helm/victoria-metrics-single/_changelog.md new file mode 100644 index 0000000000..5e197a91bd --- /dev/null +++ b/docs/helm/victoria-metrics-single/_changelog.md @@ -0,0 +1,13 @@ +--- +weight: 1 +title: CHANGELOG +menu: + docs: + weight: 1 + identifier: helm-victoriametrics-single-changelog + parent: helm-victoriametrics-single +url: /helm/victoriametrics-single/changelog +aliases: + - /helm/victoriametrics-single/changelog/index.html +--- +{{% content "CHANGELOG.md" %}} diff --git a/docs/helm/victoria-metrics-single/_index.md b/docs/helm/victoria-metrics-single/_index.md new file mode 100644 index 0000000000..760dc46133 --- /dev/null +++ b/docs/helm/victoria-metrics-single/_index.md @@ -0,0 +1,13 @@ +--- +weight: 11 +title: VictoriaMetrics Single +menu: + docs: + parent: helm + weight: 11 + identifier: helm-victoriametrics-single +url: /helm/victoriametrics-single +aliases: + - /helm/victoriametrics-single/index.html +--- +{{% content "README.md" %}} From a2ecba415416f03012a366c4f18799399889d7e8 Mon Sep 17 00:00:00 2001 From: Artem Navoiev Date: Fri, 20 Sep 2024 16:16:25 +0200 Subject: [PATCH 068/128] docs: cloud siplify menu items names for notification, user managemenr and notifs Signed-off-by: Artem Navoiev --- docs/victoriametrics-cloud/overview.md | 1 + docs/victoriametrics-cloud/setup-notifications.md | 1 + docs/victoriametrics-cloud/user-managment.md | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/victoriametrics-cloud/overview.md b/docs/victoriametrics-cloud/overview.md index f0c8494222..16e0d4b452 100644 --- a/docs/victoriametrics-cloud/overview.md +++ b/docs/victoriametrics-cloud/overview.md @@ -5,6 +5,7 @@ menu: docs: parent: "cloud" weight: 1 + name: Overview aliases: - /victoriametrics-cloud/overview/index.html - /managed-victoriametrics/overview/index.html diff --git a/docs/victoriametrics-cloud/setup-notifications.md b/docs/victoriametrics-cloud/setup-notifications.md index a57db074ee..a07ac7f349 100644 --- a/docs/victoriametrics-cloud/setup-notifications.md +++ b/docs/victoriametrics-cloud/setup-notifications.md @@ -5,6 +5,7 @@ menu: docs: parent: "cloud" weight: 7 + name: Notifications aliases: - /victoriametrics-cloud/setup-notifications/index.html - /managed-victoriametrics/setup-notifications/index.html diff --git a/docs/victoriametrics-cloud/user-managment.md b/docs/victoriametrics-cloud/user-managment.md index 6d82dfcc23..f1c7ae4c4b 100644 --- a/docs/victoriametrics-cloud/user-managment.md +++ b/docs/victoriametrics-cloud/user-managment.md @@ -5,6 +5,7 @@ menu: docs: parent: "cloud" weight: 6 + name: User Management aliases: - /victoriametrics-cloud/user-management/index.html - /managed-victoriametrics/user-management/index.html From 55febc0920ed839a2df08d8fca4c6b7156ca8f42 Mon Sep 17 00:00:00 2001 From: Artem Fetishev <149964189+rtm0@users.noreply.github.com> Date: Fri, 20 Sep 2024 17:21:53 +0200 Subject: [PATCH 069/128] lib/storage: restore ability to put empty metric ID list into tagFiltersToMetricIDsCache (#7064) ### Describe Your Changes Currently it the metricID list is empty it won't be mashalled and as the result won't be put into the tagFiltersToMetricIDsCache which causes the cache misses for the corresponding tagFilters. In some setups this causes severe search speed detradation (see #7009). The empty metric IDs was covered before but then was accidentally removed in 6c21439. This PR restores the coverage of this case. A new unit test can be used as a proof that empty metricID lists are not added to the cache (just remove the fix in index_db.go and run the test to see the result) Also a benchmark has been added to see the implications of the compression. ``` user@laptop:~/p/github.com/rtm0/VictoriaMetrics/01/src$ go test ./lib/storage/ -run=NONE -bench BenchmarkMarshalUnmarshalMetricIDs --loggerLevel=ERROR goos: linux goarch: amd64 pkg: github.com/VictoriaMetrics/VictoriaMetrics/lib/storage cpu: 13th Gen Intel(R) Core(TM) i7-1355U BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-0-12 3237240 363.5 ns/op 0 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-1-12 2831049 451.8 ns/op 0.4706 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-10-12 1152764 1009 ns/op 1.667 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-100-12 297055 3998 ns/op 5.755 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-1000-12 31172 34566 ns/op 8.484 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-10000-12 4900 289659 ns/op 9.416 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-100000-12 447 2341173 ns/op 9.456 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-1000000-12 42 24926928 ns/op 9.468 compression-rate BenchmarkMarshalUnmarshalMetricIDs/numMetricIDs-10000000-12 5 204098872 ns/op 9.467 compression-rate PASS ok github.com/VictoriaMetrics/VictoriaMetrics/lib/storage 15.018s ``` ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: Artem Fetishev Co-authored-by: Aliaksandr Valialkin --- lib/storage/index_db.go | 23 +++++++++++--- lib/storage/index_db_test.go | 48 +++++++++++++++++++++++++++++ lib/storage/index_db_timing_test.go | 31 +++++++++++++++++++ 3 files changed, 98 insertions(+), 4 deletions(-) diff --git a/lib/storage/index_db.go b/lib/storage/index_db.go index d280fa65dd..d27e92ea13 100644 --- a/lib/storage/index_db.go +++ b/lib/storage/index_db.go @@ -436,15 +436,34 @@ func invalidateTagFiltersCache() { var tagFiltersKeyGen atomic.Uint64 func marshalMetricIDs(dst []byte, metricIDs []uint64) []byte { + if len(metricIDs) == 0 { + // Add one zero byte to indicate an empty metricID list and skip + // compression to save CPU cycles. + // + // An empty slice passed to ztsd won't be compressed and therefore + // nothing will be added to dst and if dst is empty the record won't be + // added to the cache. As the result, the search for a given filter will + // be performed again and again. This may lead to cases like this: + // https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009 + return append(dst, 0) + } + // Compress metricIDs, so they occupy less space in the cache. // // The srcBuf is a []byte cast of metricIDs. srcBuf := unsafe.Slice((*byte)(unsafe.Pointer(unsafe.SliceData(metricIDs))), 8*len(metricIDs)) + dst = encoding.CompressZSTDLevel(dst, srcBuf, 1) return dst } func mustUnmarshalMetricIDs(dst []uint64, src []byte) []uint64 { + if len(src) == 1 && src[0] == 0 { + // One zero byte indicates an empty metricID list. + // See marshalMetricIDs(). + return dst + } + // Decompress src into dstBuf. // // dstBuf is a []byte cast of dst. @@ -456,10 +475,6 @@ func mustUnmarshalMetricIDs(dst []uint64, src []byte) []uint64 { if err != nil { logger.Panicf("FATAL: cannot decompress metricIDs: %s", err) } - if len(dstBuf) == dstBufLen { - // Zero metricIDs - return dst - } if (len(dstBuf)-dstBufLen)%8 != 0 { logger.Panicf("FATAL: cannot unmarshal metricIDs from buffer of %d bytes; the buffer length must divide by 8", len(dstBuf)-dstBufLen) } diff --git a/lib/storage/index_db_test.go b/lib/storage/index_db_test.go index 7d20ca6b26..d8f7dcfd3b 100644 --- a/lib/storage/index_db_test.go +++ b/lib/storage/index_db_test.go @@ -64,6 +64,54 @@ func TestMarshalUnmarshalMetricIDs(t *testing.T) { f([]uint64{1, 2, 3, 4, 5, 6, 8989898, 823849234, 1<<64 - 1, 1<<32 - 1, 0}) } +func TestTagFiltersToMetricIDsCache(t *testing.T) { + f := func(want []uint64) { + t.Helper() + + path := t.Name() + defer fs.MustRemoveAll(path) + + s := MustOpenStorage(path, 0, 0, 0) + defer s.MustClose() + + idb := s.idb() + key := []byte("key") + idb.putMetricIDsToTagFiltersCache(nil, want, key) + got, ok := idb.getMetricIDsFromTagFiltersCache(nil, key) + if !ok { + t.Fatalf("expected metricIDs to be found in cache but they weren't: %v", want) + } + if !reflect.DeepEqual(got, want) { + t.Fatalf("unexpected metricIDs in cache: got %v, want %v", got, want) + } + } + + f([]uint64{0}) + f([]uint64{1}) + f([]uint64{1234, 678932943, 843289893843}) + f([]uint64{1, 2, 3, 4, 5, 6, 8989898, 823849234, 1<<64 - 1, 1<<32 - 1, 0}) +} + +func TestTagFiltersToMetricIDsCache_EmptyMetricIDList(t *testing.T) { + path := t.Name() + defer fs.MustRemoveAll(path) + s := MustOpenStorage(path, 0, 0, 0) + defer s.MustClose() + idb := s.idb() + + key := []byte("key") + emptyMetricIDs := []uint64(nil) + idb.putMetricIDsToTagFiltersCache(nil, emptyMetricIDs, key) + got, ok := idb.getMetricIDsFromTagFiltersCache(nil, key) + if !ok { + t.Fatalf("expected empty metricID list to be found in cache but it wasn't") + } + if len(got) > 0 { + t.Fatalf("unexpected found metricID list to be empty but got %v", got) + } + +} + func TestMergeSortedMetricIDs(t *testing.T) { f := func(a, b []uint64) { t.Helper() diff --git a/lib/storage/index_db_timing_test.go b/lib/storage/index_db_timing_test.go index d67bebaa77..cabf735ad3 100644 --- a/lib/storage/index_db_timing_test.go +++ b/lib/storage/index_db_timing_test.go @@ -2,6 +2,7 @@ package storage import ( "fmt" + "math/rand" "regexp" "strconv" "testing" @@ -314,3 +315,33 @@ func BenchmarkIndexDBGetTSIDs(b *testing.B) { s.MustClose() fs.MustRemoveAll(path) } + +func BenchmarkMarshalUnmarshalMetricIDs(b *testing.B) { + rng := rand.New(rand.NewSource(1)) + + f := func(b *testing.B, numMetricIDs int) { + metricIDs := make([]uint64, numMetricIDs) + // metric IDs need to be sorted. + ts := uint64(time.Now().UnixNano()) + for i := range numMetricIDs { + metricIDs[i] = ts + uint64(rng.Intn(100)) + } + + var marshalledLen int + b.ResetTimer() + for range b.N { + marshalled := marshalMetricIDs(nil, metricIDs) + marshalledLen = len(marshalled) + _ = mustUnmarshalMetricIDs(nil, marshalled) + } + b.StopTimer() + compressionRate := float64(numMetricIDs*8) / float64(marshalledLen) + b.ReportMetric(compressionRate, "compression-rate") + } + + for _, n := range []int{0, 1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7} { + b.Run(fmt.Sprintf("numMetricIDs-%d", n), func(b *testing.B) { + f(b, n) + }) + } +} From 8ed99785910c8b4e6b97dcec8a9a6f493d54d21b Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:39:52 +0300 Subject: [PATCH 070/128] Automatic update operator docs from VictoriaMetrics/operator@d661554 (#7069) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: AndrewChubatiuk <3162380+AndrewChubatiuk@users.noreply.github.com> --- docs/operator/README.md | 4 ++-- docs/operator/configuration.md | 6 +++--- docs/operator/migration.md | 4 ++-- docs/operator/monitoring.md | 4 ++-- docs/operator/quick-start.md | 6 +++--- docs/operator/setup.md | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/operator/README.md b/docs/operator/README.md index 642d75cfbf..7cb7706beb 100644 --- a/docs/operator/README.md +++ b/docs/operator/README.md @@ -5,7 +5,7 @@ It allows you to manage Victoria Metrics components in Kubernetes or OpenShift c in a declarative style according to [GitOps](https://www.redhat.com/en/topics/devops/what-is-gitops) and [IaC](https://en.wikipedia.org/wiki/Infrastructure_as_code) concepts. -VictoriaMetrics also provides [helm charts](https://github.com/VictoriaMetrics/helm-charts) without operator. +VictoriaMetrics also provides [helm charts](https://docs.victoriametrics.com/helm) without operator. Operator makes the same, simplifies it and provides [advanced features](#features-of-vmoperator). Learn more about [key concepts](#key-concepts) of `vmoperator` and follow the **[quick start guide](https://docs.victoriametrics.com/operator/quick-start/)** for a better experience. @@ -17,7 +17,7 @@ Learn more about [key concepts](#key-concepts) of `vmoperator` and follow the ** - Simple VictoriaMetrics cluster installation, configuring, upgrading and managing with [crd-objects](https://docs.victoriametrics.com/operator/resources/). - Ability to delegate the configuration (parts of configuration) of applications monitoring to the end-users and managing access to different configurations or configuration sections. - Integration with VictoriaMetrics [vmbackupmanager](https://docs.victoriametrics.com/vmbackupmanager/) - advanced tools for making backups. Check [Backup automation for VMSingle](https://docs.victoriametrics.com/operator/resources/vmsingle#backup-automation) or [Backup automation for VMCluster](https://docs.victoriametrics.com/operator/resources/vmcluster#backup-automation). -- Everything you need for monitoring out of the box in [k8s-stack helm chart](https://victoriametrics.github.io/helm-charts/charts/victoria-metrics-k8s-stack/) with ready-made usecases and solutions. +- Everything you need for monitoring out of the box in [k8s-stack helm chart](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack/) with ready-made usecases and solutions. - Ability to template your own deployment scenarios. ## Key Concepts diff --git a/docs/operator/configuration.md b/docs/operator/configuration.md index 0023ad4461..60759e73c8 100644 --- a/docs/operator/configuration.md +++ b/docs/operator/configuration.md @@ -55,11 +55,11 @@ You can read detailed instructions about configuring prometheus-objects conversi ## Helm-charts -In [helm-charts](https://github.com/VictoriaMetrics/helm-charts) some important configuration parameters are implemented as separate flags in `values.yaml`: +In [Helm charts](https://docs.victoriametrics.com/helm) some important configuration parameters are implemented as separate flags in `values.yaml`: ### victoria-metrics-k8s-stack -For possible values refer to [parameters](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-k8s-stack#parameters). +For possible values refer to [parameters](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack#parameters). Also, checkout [here possible ENV variables](https://docs.victoriametrics.com/operator/vars/) to configure operator behaviour. ENV variables can be set in the `victoria-metrics-operator.env` section. @@ -134,7 +134,7 @@ victoria-metrics-operator: ### victoria-metrics-operator -For possible values refer to [parameters](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator#parameters). +For possible values refer to [parameters](https://docs.victoriametrics.com/helm/victoriametrics-operator#parameters). Also, checkout [here possible ENV variables](https://docs.victoriametrics.com/operator/vars/) to configure operator behaviour. ENV variables can be set in the `env` section. diff --git a/docs/operator/migration.md b/docs/operator/migration.md index aa89014fa8..e35d605053 100644 --- a/docs/operator/migration.md +++ b/docs/operator/migration.md @@ -56,7 +56,7 @@ VM_ENABLEDPROMETHEUSCONVERTER_PROBE=false VM_ENABLEDPROMETHEUSCONVERTER_SCRAPECONFIG=false ``` -For [victoria-metrics-operator helm-chart](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-operator/README.md) you can use following way: +For [victoria-metrics-operator helm-chart](https://docs.victoriametrics.com/helm/victoriametrics-operator) you can use following way: ```yaml # values.yaml @@ -83,7 +83,7 @@ configure adding `OwnerReferences` to converted objects with following [operator VM_ENABLEDPROMETHEUSCONVERTEROWNERREFERENCES=true ``` -For [victoria-metrics-operator helm-chart](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-operator/README.md) you can use following way: +For [victoria-metrics-operator helm-chart](https://docs.victoriametrics.com/helm/victoriametrics-operator) you can use following way: ```yaml # values.yaml diff --git a/docs/operator/monitoring.md b/docs/operator/monitoring.md index 0da0d6def3..a2ef0f2c48 100644 --- a/docs/operator/monitoring.md +++ b/docs/operator/monitoring.md @@ -29,13 +29,13 @@ Alerting rules for VictoriaMetrics operator are available [here](https://github. ### Helm-chart victoria-metrics-k8s-stack -In [victoria-metrics-k8s-stack](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack/README.md) helm-chart operator self-scrapes metrics by default. +In [victoria-metrics-k8s-stack](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack/) helm-chart operator self-scrapes metrics by default. This helm-chart also includes [official grafana dashboard for operator](#dashboard) and [official alerting rules for operator](#alerting-rules). ### Helm-chart victoria-metrics-operator -With [victoria-metrics-operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator/README.md) you can use following parameter in `values.yaml`: +With [victoria-metrics-operator](https://docs.victoriametrics.com/helm/victoriametrics-operator) you can use following parameter in `values.yaml`: ```yaml # values.yaml diff --git a/docs/operator/quick-start.md b/docs/operator/quick-start.md index 493b336065..ea94bdd8e3 100644 --- a/docs/operator/quick-start.md +++ b/docs/operator/quick-start.md @@ -13,7 +13,7 @@ VictoriaMetrics Operator serves to make running VictoriaMetrics applications on while preserving Kubernetes-native configuration options. The shortest way to deploy full-stack monitoring cluster with VictoriaMetrics Operator is -to use Helm-chart [victoria-metrics-k8s-stack](https://victoriametrics.github.io/helm-charts/charts/victoria-metrics-k8s-stack/). +to use Helm-chart [victoria-metrics-k8s-stack](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack/). Also you can follow the other steps in documentation to use VictoriaMetrics Operator: @@ -55,7 +55,7 @@ You can find out how to and instructions for installing the VictoriaMetrics oper on the [Setup page](https://docs.victoriametrics.com/operator/setup). Here we will elaborate on just one of the ways - for instance, we will install operator via Helm-chart -[victoria-metrics-operator](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-operator/README.md): +[victoria-metrics-operator](https://docs.victoriametrics.com/helm/victoriametrics-operator/): Add repo with helm-chart: @@ -136,7 +136,7 @@ helm install vmoperator vm/victoria-metrics-operator -f values.yaml -n vm # victoria-metrics-operator has been installed. Check its status by running: # kubectl --namespace vm get pods -l "app.kubernetes.io/instance=vmoperator" # -# Get more information on https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator. +# Get more information on https://docs.victoriametrics.com/helm/victoriametrics-operator/ # See "Getting started guide for VM Operator" on https://docs.victoriametrics.com/guides/getting-started-with-vm-operator/. ``` diff --git a/docs/operator/setup.md b/docs/operator/setup.md index a963ef67e2..0a7e555477 100644 --- a/docs/operator/setup.md +++ b/docs/operator/setup.md @@ -13,13 +13,13 @@ aliases: You can use one of the following official helm-charts with `vmoperator`: -- [victoria-metrics-operator helm-chart](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-operator/README.md) -- [victoria-metrics-k8s-stack helm chart](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack/README.md) +- [victoria-metrics-operator helm-chart](https://docs.victoriametrics.com/helm/victoriametrics-operator) +- [victoria-metrics-k8s-stack helm chart](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack) (includes the `victoria-metrics-operator` helm-chart and other components for full-fledged k8s monitoring, is an alternative for [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack)). For installing VictoriaMetrics operator with helm-chart follow the instructions from README of the corresponding helm-chart -([this](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-operator/README.md) -or [this](https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack/README.md)). +([this](https://docs.victoriametrics.com/helm/victoriametrics-operator) +or [this](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack)). in addition, you can use [quickstart guide](https://docs.victoriametrics.com/operator/quick-start) for installing VictoriaMetrics operator with helm-chart. From 0ada781cf225dcde369818ce697f322a79038056 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 22 Sep 2024 21:56:27 +0200 Subject: [PATCH 071/128] docs/changelog/CHANGELOG.md: document bugfix for https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/7064 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009 This is a follow-up for 55febc0920ed839a2df08d8fca4c6b7156ca8f42 --- docs/changelog/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index b338bdc4a2..8f7c42732d 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -34,6 +34,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. +* BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly cache empty list of matching time series for the given [labels filter](https://docs.victoriametrics.com/keyconcepts/#filtering). This type of caching was broken since [v1.97.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.0), which could result in the increased CPU usage when performing queries, which match zero time series. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009). * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): Fixes start-up crash on Windows OS. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973) for details. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): fix metric `vm_object_references{type="indexdb"}`. Previously, it was overcounted. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly ingest stale NaN samples. Previously it could be dropped if series didn't exist at storage node. See this [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5069) for details. From 4dc85613a288e12bc34df1a3fdb57f999904d7b2 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:17:34 +0300 Subject: [PATCH 072/128] Automatic update helm docs from VictoriaMetrics/helm-charts@428cb36 (#7072) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: AndrewChubatiuk <3162380+AndrewChubatiuk@users.noreply.github.com> --- docs/helm/README.md | 22 +- docs/helm/_index.md | 3 +- docs/helm/victoria-logs-single/README.md | 637 +++--- docs/helm/victoria-metrics-agent/README.md | 1232 ++++++----- docs/helm/victoria-metrics-alert/README.md | 1199 ++++++----- docs/helm/victoria-metrics-anomaly/README.md | 381 ++-- docs/helm/victoria-metrics-auth/README.md | 587 ++--- docs/helm/victoria-metrics-cluster/README.md | 1898 ++++++++++------- .../victoria-metrics-distributed/README.md | 642 ++++-- .../victoriametrics-distributed-topology.webp | Bin 0 -> 73166 bytes docs/helm/victoria-metrics-gateway/README.md | 544 +++-- .../helm/victoria-metrics-k8s-stack/README.md | 1826 +++++++++------- .../img/k8s-stack-overview.webp | Bin 0 -> 94866 bytes docs/helm/victoria-metrics-operator/README.md | 441 ++-- docs/helm/victoria-metrics-single/README.md | 1586 +++++--------- 15 files changed, 6116 insertions(+), 4882 deletions(-) create mode 100644 docs/helm/victoria-metrics-distributed/img/victoriametrics-distributed-topology.webp create mode 100644 docs/helm/victoria-metrics-k8s-stack/img/k8s-stack-overview.webp diff --git a/docs/helm/README.md b/docs/helm/README.md index b01b9069c3..d62e10fbdc 100644 --- a/docs/helm/README.md +++ b/docs/helm/README.md @@ -123,14 +123,14 @@ helm charts tested at kubernetes versions from 1.28 to 1.30. ## List of Charts -- [Victoria Logs Single-Node](./charts/victoria-logs-single) -- [Victoria Metrics Agent](./charts/victoria-metrics-agent) -- [Victoria Metrics Alert](./charts/victoria-metrics-alert) -- [Victoria Metrics Anomaly](./charts/victoria-metrics-anomaly) -- [Victoria Metrics Auth](./charts/victoria-metrics-auth) -- [Victoria Metrics Cluster](./charts/victoria-metrics-cluster) -- [Victoria Metrics Gateway](./charts/victoria-metrics-gateway) -- [Victoria Metrics Distributed](./charts/victoria-metrics-distributed) -- [Victoria Metrics k8s Stack](./charts/victoria-metrics-k8s-stack) -- [Victoria Metrics Operator](./charts/victoria-metrics-operator) -- [Victoria Metrics Single-node](./charts/victoria-metrics-single) +- [VictoriaLogs Single](https://docs.victoriametrics.com/helm/victorialogs-single) +- [VictoriaMetrics Agent](https://docs.victoriametrics.com/helm/victoriametrics-agent) +- [VictoriaMetrics Alert](https://docs.victoriametrics.com/helm/victoriametrics-alert) +- [VictoriaMetrics Anomaly](https://docs.victoriametrics.com/helm/victoriametrics-anomaly) +- [VictoriaMetrics Auth](https://docs.victoriametrics.com/helm/victoriametrics-auth) +- [VictoriaMetrics Cluster](https://docs.victoriametrics.com/helm/victoriametrics-cluster) +- [VictoriaMetrics Gateway](https://docs.victoriametrics.com/helm/victoriametrics-gateway) +- [VictoriaMetrics Distributed](https://docs.victoriametrics.com/helm/victoriametrics-distributed) +- [VictoriaMetrics K8s Stack](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack) +- [VictoriaMetrics Operator](https://docs.victoriametrics.com/helm/victoriametrics-operator) +- [VictoriaMetrics Single](https://docs.victoriametrics.com/helm/victoriametrics-single) diff --git a/docs/helm/_index.md b/docs/helm/_index.md index d3de7b0f53..e08635ea53 100644 --- a/docs/helm/_index.md +++ b/docs/helm/_index.md @@ -3,8 +3,9 @@ weight: 0 title: Helm Charts menu: docs: - weight: 0 + weight: 35 identifier: helm + pageRef: /helm/ aliases: - /helm - /helm/index.html diff --git a/docs/helm/victoria-logs-single/README.md b/docs/helm/victoria-logs-single/README.md index af0c308d38..a70af8d9b9 100644 --- a/docs/helm/victoria-logs-single/README.md +++ b/docs/helm/victoria-logs-single/README.md @@ -135,29 +135,83 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-logs-single/values.yaml`` file. - +
    - - - - + + + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + - - + - - + - - - - - + + - - + - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - - - - - - - - - - - - - - + + + + + + diff --git a/docs/helm/victoria-metrics-agent/README.md b/docs/helm/victoria-metrics-agent/README.md index 0e06b28611..3d71e22f17 100644 --- a/docs/helm/victoria-metrics-agent/README.md +++ b/docs/helm/victoria-metrics-agent/README.md @@ -118,374 +118,396 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-agent/values.yaml`` file. -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    +
    fluent-bitobject
    +config:
    +    filters: |
    +        [FILTER]
    +            Name kubernetes
    +            Match kube.*
    +            Merge_Log On
    +            Keep_Log On
    +            K8S-Logging.Parser On
    +            K8S-Logging.Exclude On
    +        [FILTER]
    +            Name                nest
    +            Match               *
    +            Wildcard            pod_name
    +            Operation lift
    +            Nested_under kubernetes
    +            Add_prefix   kubernetes_
    +    outputs: |
    +        [OUTPUT]
    +            Name http
    +            Match kube.*
    +            Host '{{ include "victoria-logs.server.fullname" . }}'
    +            port 9428
    +            compress gzip
    +            uri /insert/jsonline?_stream_fields=stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name&_msg_field=log&_time_field=date
    +            format json_lines
    +            json_date_format iso8601
    +            header AccountID 0
    +            header ProjectID 0
    +daemonSetVolumeMounts:
    +    - mountPath: /var/log
    +      name: varlog
    +    - mountPath: /var/lib/docker/containers
    +      name: varlibdockercontainers
    +      readOnly: true
    +daemonSetVolumes:
    +    - hostPath:
    +        path: /var/log
    +      name: varlog
    +    - hostPath:
    +        path: /var/lib/docker/containers
    +      name: varlibdockercontainers
    +enabled: false
    +resources: {}
    +
    +
    +

    Values for fluent-bit helm chart

    fluent-bit.config.filters tpl
    -fluent-bit.config.filters: |
    +      
    +fluent-bit.config.filters: |
       [FILTER]
           Name kubernetes
           Match kube.*
    @@ -173,6 +227,7 @@ fluent-bit.config.filters: |
           Nested_under kubernetes
           Add_prefix   kubernetes_
      
    +
     

    FluentBit configuration filters

    @@ -181,8 +236,8 @@ fluent-bit.config.filters: |
    fluent-bit.config.outputs tpl
    -fluent-bit.config.outputs: |
    +      
    +fluent-bit.config.outputs: |
       [OUTPUT]
           Name http
           Match kube.*
    @@ -195,152 +250,74 @@ fluent-bit.config.outputs: |
           header AccountID 0
           header ProjectID 0
      
    +
     

    Note that Host must be replaced to match your VictoriaLogs service name Default format points to VictoriaLogs service.

    fluent-bit.daemonSetVolumeMounts[0].mountPathstring
    -/var/log
    -
    -
    fluent-bit.daemonSetVolumeMounts[0].namestring
    -varlog
    -
    -
    fluent-bit.daemonSetVolumeMounts[1].mountPathstring
    -/var/lib/docker/containers
    -
    -
    fluent-bit.daemonSetVolumeMounts[1].namestring
    -varlibdockercontainers
    -
    -
    fluent-bit.daemonSetVolumeMounts[1].readOnlybool
    -true
    -
    -
    fluent-bit.daemonSetVolumes[0].hostPath.pathstring
    -/var/log
    -
    -
    fluent-bit.daemonSetVolumes[0].namestring
    -varlog
    -
    -
    fluent-bit.daemonSetVolumes[1].hostPath.pathstring
    -/var/lib/docker/containers
    -
    -
    fluent-bit.daemonSetVolumes[1].namestring
    -varlibdockercontainers
    -
    -
    fluent-bit.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of fluent-bit

    fluent-bit.resourcesglobal.compatibility object
    -{}
    +      
    +openshift:
    +    adaptSecurityContext: auto
    +
     
    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    -
    +

    Openshift security context compatibility configuration

    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    global.nameOverride string
    -""
    +      
    +""
    +
     

    Global name override

    +
    global.victoriaLogs.server.fullnameOverride string
    -null
    +      
    +null
    +
     

    Overrides the full name of server component

    @@ -349,18 +326,21 @@ null
    global.victoriaLogs.server.name string
    -server
    +      
    +server
    +
     

    Server container name

    podDisruptionBudget.enabledbool
    -false
    +      
    podDisruptionBudgetobject
    +enabled: false
    +extraLabels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    @@ -369,17 +349,20 @@ false
    podDisruptionBudget.extraLabels object
    -{}
    +      
    +{}
    +
     

    PodDisruptionBudget extra labels

    +
    printNotes bool
    -true
    +      
    +true
    +
     

    Print chart notes

    @@ -388,8 +371,9 @@ true
    server.affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    @@ -398,8 +382,9 @@ true
    server.containerWorkingDir string
    -""
    +      
    +""
    +
     

    Container workdir

    @@ -408,18 +393,20 @@ true
    server.emptyDir object
    -{}
    +      
    +{}
    +
     

    Use an alternate scheduler, e.g. “stork”. ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ schedulerName:

    +

    Use an alternate scheduler, e.g. “stork”. Check details here schedulerName:

    server.enabled bool
    -true
    +      
    +true
    +
     

    Enable deployment of server component. Deployed as StatefulSet

    @@ -428,29 +415,33 @@ true
    server.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Details are here

    server.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    server.extraArgs object
    -envflag.enable: "true"
    +      
    +envflag.enable: "true"
     envflag.prefix: VM_
     loggerFormat: json
    +
     

    Extra command line arguments for container of component

    @@ -459,8 +450,9 @@ loggerFormat: json
    server.extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with Victoria Logs container

    @@ -469,8 +461,9 @@ loggerFormat: json
    server.extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -479,18 +472,20 @@ loggerFormat: json
    server.extraLabels object
    -{}
    +      
    +{}
    +
     

    Sts/Deploy additional labels

    +

    StatefulSet/Deployment additional labels

    server.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -499,8 +494,9 @@ loggerFormat: json
    server.extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -509,8 +505,9 @@ loggerFormat: json
    server.image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    @@ -519,8 +516,9 @@ IfNotPresent
    server.image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -529,8 +527,9 @@ IfNotPresent
    server.image.repository string
    -victoriametrics/victoria-logs
    +      
    +victoriametrics/victoria-logs
    +
     

    Image repository

    @@ -539,8 +538,9 @@ victoriametrics/victoria-logs
    server.image.tag string
    -""
    +      
    +""
    +
     

    Image tag

    @@ -549,17 +549,20 @@ victoriametrics/victoria-logs
    server.image.variant string
    -victorialogs
    +      
    +victorialogs
    +
     

    Image tag suffix, which is appended to Chart.AppVersion if no server.image.tag is defined

    +
    server.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    @@ -568,8 +571,9 @@ victorialogs
    server.ingress.annotations string
    -null
    +      
    +null
    +
     

    Ingress annotations

    @@ -578,8 +582,9 @@ null
    server.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    @@ -588,8 +593,9 @@ false
    server.ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    @@ -598,27 +604,42 @@ false
    server.ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    server.ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    server.ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    server.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    @@ -627,8 +648,9 @@ Prefix
    server.initContainers list
    -[]
    +      
    +[]
    +
     

    Init containers for Victoria Logs Pod

    @@ -637,8 +659,9 @@ Prefix
    server.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    @@ -647,8 +670,9 @@ Prefix
    server.persistentVolume.accessModes list
    -- ReadWriteOnce
    +      
    +- ReadWriteOnce
    +
     

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    @@ -657,8 +681,9 @@ Prefix
    server.persistentVolume.annotations object
    -{}
    +      
    +{}
    +
     

    Persistant volume annotations

    @@ -667,8 +692,9 @@ Prefix
    server.persistentVolume.enabled bool
    -false
    +      
    +false
    +
     

    Create/use Persistent Volume Claim for server component. Empty dir if false

    @@ -677,8 +703,9 @@ false
    server.persistentVolume.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    @@ -687,8 +714,9 @@ false
    server.persistentVolume.matchLabels object
    -{}
    +      
    +{}
    +
     

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    @@ -697,8 +725,9 @@ false
    server.persistentVolume.mountPath string
    -/storage
    +      
    +/storage
    +
     

    Mount path. Server data Persistent Volume mount root path.

    @@ -707,8 +736,9 @@ false
    server.persistentVolume.size string
    -3Gi
    +      
    +3Gi
    +
     

    Size of the volume. Should be calculated based on the logs you send and retention policy you set.

    @@ -717,8 +747,9 @@ false
    server.persistentVolume.storageClassName string
    -""
    +      
    +""
    +
     

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    @@ -727,8 +758,9 @@ false
    server.persistentVolume.subPath string
    -""
    +      
    +""
    +
     

    Mount subpath

    @@ -737,8 +769,9 @@ false
    server.podAnnotations object
    -{}
    +      
    +{}
    +
     

    Pod’s annotations

    @@ -747,8 +780,9 @@ false
    server.podLabels object
    -{}
    +      
    +{}
    +
     

    Pod’s additional labels

    @@ -757,8 +791,9 @@ false
    server.podManagementPolicy string
    -OrderedReady
    +      
    +OrderedReady
    +
     

    Pod’s management policy

    @@ -767,11 +802,12 @@ OrderedReady
    server.podSecurityContext object
    -enabled: true
    +      
    +enabled: true
     fsGroup: 2000
     runAsNonRoot: true
     runAsUser: 1000
    +
     

    Pod’s security context. Details are here

    @@ -780,8 +816,9 @@ runAsUser: 1000
    server.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    @@ -790,12 +827,13 @@ runAsUser: 1000
    server.probe.liveness object
    -failureThreshold: 10
    +      
    +failureThreshold: 10
     initialDelaySeconds: 30
     periodSeconds: 30
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success.

    @@ -804,12 +842,13 @@ timeoutSeconds: 5
    server.probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod’s IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success.

    @@ -818,8 +857,9 @@ timeoutSeconds: 5
    server.probe.startup object
    -{}
    +      
    +{}
    +
     

    Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over.

    @@ -828,8 +868,9 @@ timeoutSeconds: 5
    server.replicaCount int
    -1
    +      
    +1
    +
     

    Replica count

    @@ -838,8 +879,9 @@ timeoutSeconds: 5
    server.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    @@ -848,8 +890,9 @@ timeoutSeconds: 5
    server.retentionPeriod int
    -1
    +      
    +1
    +
     

    Data retention period in month

    @@ -858,13 +901,14 @@ timeoutSeconds: 5
    server.securityContext object
    -allowPrivilegeEscalation: false
    +      
    +allowPrivilegeEscalation: false
     capabilities:
         drop:
             - ALL
     enabled: true
     readOnlyRootFilesystem: true
    +
     

    Security context to be added to server pods

    @@ -873,8 +917,9 @@ readOnlyRootFilesystem: true
    server.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    @@ -883,8 +928,9 @@ readOnlyRootFilesystem: true
    server.service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    @@ -893,54 +939,64 @@ readOnlyRootFilesystem: true
    server.service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service External IPs. Details are here

    +

    Service external IPs. Details are here

    server.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    server.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    server.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    server.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    server.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    @@ -949,8 +1005,9 @@ readOnlyRootFilesystem: true
    server.service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    @@ -959,8 +1016,9 @@ readOnlyRootFilesystem: true
    server.service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    @@ -969,8 +1027,9 @@ readOnlyRootFilesystem: true
    server.service.servicePort int
    -9428
    +      
    +9428
    +
     

    Service port

    @@ -979,8 +1038,9 @@ readOnlyRootFilesystem: true
    server.service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    @@ -989,8 +1049,9 @@ ClusterIP
    server.serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -999,8 +1060,9 @@ ClusterIP
    server.serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -1009,8 +1071,9 @@ ClusterIP
    server.serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    @@ -1019,8 +1082,9 @@ false
    server.serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -1029,8 +1093,9 @@ false
    server.serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -1039,8 +1104,9 @@ false
    server.serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -1049,8 +1115,9 @@ false
    server.statefulSet.enabled bool
    -true
    +      
    +true
    +
     

    Creates statefulset instead of deployment, useful when you want to keep the cache

    @@ -1059,8 +1126,9 @@ true
    server.statefulSet.podManagementPolicy string
    -OrderedReady
    +      
    +OrderedReady
    +
     

    Deploy order policy for StatefulSet pods

    @@ -1069,8 +1137,9 @@ OrderedReady
    server.terminationGracePeriodSeconds int
    -60
    +      
    +60
    +
     

    Pod’s termination grace period in seconds

    @@ -1079,11 +1148,23 @@ OrderedReady
    server.tolerations list
    -[]
    +      
    +[]
    +
     

    Node tolerations for server scheduling to nodes with taints. Details are here

    +
    server.topologySpreadConstraintslist
    +[]
    +
    +
    +

    Pod topologySpreadConstraints

    +
    - - - - + + + + - - + - - - - + + - - - - - - - - - - - + - - + + + + + + - - + - - - - + - - - - + - - - - - - - - - + - - - + + - + - - + - - + - - - - - - - - + - - - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - + - - - - - - - - + - - + - - + - - - + + - + - - + - - + - - + - - + - - - + + + + + + + - - - - - - - - + + - + - - - - - - - - - - + - - + - - + - - - - - + - - + - - - + + - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - - - - - - - + + - + + + + + + + - - +
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    +
    annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to the deployment

    config.global.scrape_intervalstring
    -10s
    +      
    configobject
    +global:
    +    scrape_interval: 10s
    +scrape_configs:
    +    - job_name: vmagent
    +      static_configs:
    +        - targets:
    +            - localhost:8429
    +    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +      job_name: kubernetes-apiservers
    +      kubernetes_sd_configs:
    +        - role: endpoints
    +      relabel_configs:
    +        - action: keep
    +          regex: default;kubernetes;https
    +          source_labels:
    +            - __meta_kubernetes_namespace
    +            - __meta_kubernetes_service_name
    +            - __meta_kubernetes_endpoint_port_name
    +      scheme: https
    +      tls_config:
    +        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecure_skip_verify: true
    +    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +      job_name: kubernetes-nodes
    +      kubernetes_sd_configs:
    +        - role: node
    +      relabel_configs:
    +        - action: labelmap
    +          regex: __meta_kubernetes_node_label_(.+)
    +        - replacement: kubernetes.default.svc:443
    +          target_label: __address__
    +        - regex: (.+)
    +          replacement: /api/v1/nodes/$1/proxy/metrics
    +          source_labels:
    +            - __meta_kubernetes_node_name
    +          target_label: __metrics_path__
    +      scheme: https
    +      tls_config:
    +        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecure_skip_verify: true
    +    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    +      honor_timestamps: false
    +      job_name: kubernetes-nodes-cadvisor
    +      kubernetes_sd_configs:
    +        - role: node
    +      relabel_configs:
    +        - action: labelmap
    +          regex: __meta_kubernetes_node_label_(.+)
    +        - replacement: kubernetes.default.svc:443
    +          target_label: __address__
    +        - regex: (.+)
    +          replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    +          source_labels:
    +            - __meta_kubernetes_node_name
    +          target_label: __metrics_path__
    +      scheme: https
    +      tls_config:
    +        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +        insecure_skip_verify: true
    +    - job_name: kubernetes-service-endpoints
    +      kubernetes_sd_configs:
    +        - role: endpointslices
    +      relabel_configs:
    +        - action: drop
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_container_init
    +        - action: keep_if_equal
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +            - __meta_kubernetes_pod_container_port_number
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scrape
    +        - action: replace
    +          regex: (https?)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +          target_label: __scheme__
    +        - action: replace
    +          regex: (.+)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_path
    +          target_label: __metrics_path__
    +        - action: replace
    +          regex: ([^:]+)(?::\d+)?;(\d+)
    +          replacement: $1:$2
    +          source_labels:
    +            - __address__
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +          target_label: __address__
    +        - action: labelmap
    +          regex: __meta_kubernetes_service_label_(.+)
    +        - source_labels:
    +            - __meta_kubernetes_pod_name
    +          target_label: pod
    +        - source_labels:
    +            - __meta_kubernetes_pod_container_name
    +          target_label: container
    +        - source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: service
    +        - replacement: ${1}
    +          source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: job
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_pod_node_name
    +          target_label: node
    +    - job_name: kubernetes-service-endpoints-slow
    +      kubernetes_sd_configs:
    +        - role: endpointslices
    +      relabel_configs:
    +        - action: drop
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_container_init
    +        - action: keep_if_equal
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +            - __meta_kubernetes_pod_container_port_number
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    +        - action: replace
    +          regex: (https?)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_scheme
    +          target_label: __scheme__
    +        - action: replace
    +          regex: (.+)
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_path
    +          target_label: __metrics_path__
    +        - action: replace
    +          regex: ([^:]+)(?::\d+)?;(\d+)
    +          replacement: $1:$2
    +          source_labels:
    +            - __address__
    +            - __meta_kubernetes_service_annotation_prometheus_io_port
    +          target_label: __address__
    +        - action: labelmap
    +          regex: __meta_kubernetes_service_label_(.+)
    +        - source_labels:
    +            - __meta_kubernetes_pod_name
    +          target_label: pod
    +        - source_labels:
    +            - __meta_kubernetes_pod_container_name
    +          target_label: container
    +        - source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: service
    +        - replacement: ${1}
    +          source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: job
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_pod_node_name
    +          target_label: node
    +      scrape_interval: 5m
    +      scrape_timeout: 30s
    +    - job_name: kubernetes-services
    +      kubernetes_sd_configs:
    +        - role: service
    +      metrics_path: /probe
    +      params:
    +        module:
    +            - http_2xx
    +      relabel_configs:
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_service_annotation_prometheus_io_probe
    +        - source_labels:
    +            - __address__
    +          target_label: __param_target
    +        - replacement: blackbox
    +          target_label: __address__
    +        - source_labels:
    +            - __param_target
    +          target_label: instance
    +        - action: labelmap
    +          regex: __meta_kubernetes_service_label_(.+)
    +        - source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - source_labels:
    +            - __meta_kubernetes_service_name
    +          target_label: service
    +    - job_name: kubernetes-pods
    +      kubernetes_sd_configs:
    +        - role: pod
    +      relabel_configs:
    +        - action: drop
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_container_init
    +        - action: keep_if_equal
    +          source_labels:
    +            - __meta_kubernetes_pod_annotation_prometheus_io_port
    +            - __meta_kubernetes_pod_container_port_number
    +        - action: keep
    +          regex: true
    +          source_labels:
    +            - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    +        - action: replace
    +          regex: (.+)
    +          source_labels:
    +            - __meta_kubernetes_pod_annotation_prometheus_io_path
    +          target_label: __metrics_path__
    +        - action: replace
    +          regex: ([^:]+)(?::\d+)?;(\d+)
    +          replacement: $1:$2
    +          source_labels:
    +            - __address__
    +            - __meta_kubernetes_pod_annotation_prometheus_io_port
    +          target_label: __address__
    +        - action: labelmap
    +          regex: __meta_kubernetes_pod_label_(.+)
    +        - source_labels:
    +            - __meta_kubernetes_pod_name
    +          target_label: pod
    +        - source_labels:
    +            - __meta_kubernetes_pod_container_name
    +          target_label: container
    +        - source_labels:
    +            - __meta_kubernetes_namespace
    +          target_label: namespace
    +        - action: replace
    +          source_labels:
    +            - __meta_kubernetes_pod_node_name
    +          target_label: node
    +
     
    config.scrape_configslist
    -- job_name: vmagent
    -  static_configs:
    -    - targets:
    -        - localhost:8429
    -- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -  job_name: kubernetes-apiservers
    -  kubernetes_sd_configs:
    -    - role: endpoints
    -  relabel_configs:
    -    - action: keep
    -      regex: default;kubernetes;https
    -      source_labels:
    -        - __meta_kubernetes_namespace
    -        - __meta_kubernetes_service_name
    -        - __meta_kubernetes_endpoint_port_name
    -  scheme: https
    -  tls_config:
    -    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -    insecure_skip_verify: true
    -- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -  job_name: kubernetes-nodes
    -  kubernetes_sd_configs:
    -    - role: node
    -  relabel_configs:
    -    - action: labelmap
    -      regex: __meta_kubernetes_node_label_(.+)
    -    - replacement: kubernetes.default.svc:443
    -      target_label: __address__
    -    - regex: (.+)
    -      replacement: /api/v1/nodes/$1/proxy/metrics
    -      source_labels:
    -        - __meta_kubernetes_node_name
    -      target_label: __metrics_path__
    -  scheme: https
    -  tls_config:
    -    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -    insecure_skip_verify: true
    -- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -  honor_timestamps: false
    -  job_name: kubernetes-nodes-cadvisor
    -  kubernetes_sd_configs:
    -    - role: node
    -  relabel_configs:
    -    - action: labelmap
    -      regex: __meta_kubernetes_node_label_(.+)
    -    - replacement: kubernetes.default.svc:443
    -      target_label: __address__
    -    - regex: (.+)
    -      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    -      source_labels:
    -        - __meta_kubernetes_node_name
    -      target_label: __metrics_path__
    -  scheme: https
    -  tls_config:
    -    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -    insecure_skip_verify: true
    -- job_name: kubernetes-service-endpoints
    -  kubernetes_sd_configs:
    -    - role: endpointslices
    -  relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scrape
    -    - action: replace
    -      regex: (https?)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -      target_label: __scheme__
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - source_labels:
    -        - __meta_kubernetes_pod_name
    -      target_label: pod
    -    - source_labels:
    -        - __meta_kubernetes_pod_container_name
    -      target_label: container
    -    - source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -    - replacement: ${1}
    -      source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: job
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_node_name
    -      target_label: node
    -- job_name: kubernetes-service-endpoints-slow
    -  kubernetes_sd_configs:
    -    - role: endpointslices
    -  relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    -    - action: replace
    -      regex: (https?)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -      target_label: __scheme__
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - source_labels:
    -        - __meta_kubernetes_pod_name
    -      target_label: pod
    -    - source_labels:
    -        - __meta_kubernetes_pod_container_name
    -      target_label: container
    -    - source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -    - replacement: ${1}
    -      source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: job
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_node_name
    -      target_label: node
    -  scrape_interval: 5m
    -  scrape_timeout: 30s
    -- job_name: kubernetes-services
    -  kubernetes_sd_configs:
    -    - role: service
    -  metrics_path: /probe
    -  params:
    -    module:
    -        - http_2xx
    -  relabel_configs:
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_probe
    -    - source_labels:
    -        - __address__
    -      target_label: __param_target
    -    - replacement: blackbox
    -      target_label: __address__
    -    - source_labels:
    -        - __param_target
    -      target_label: instance
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -- job_name: kubernetes-pods
    -  kubernetes_sd_configs:
    -    - role: pod
    -  relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_pod_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_pod_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_pod_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_pod_label_(.+)
    -    - source_labels:
    -        - __meta_kubernetes_pod_name
    -      target_label: pod
    -    - source_labels:
    -        - __meta_kubernetes_pod_container_name
    -      target_label: container
    -    - source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_node_name
    -      target_label: node
    -
    -

    scrape configuration. scrape self by default

    +

    VMAgent scrape configuration

    configMap string
    -""
    +      
    +""
    +
     

    vmagent scraping configuration: https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/docs/vmagent.md#how-to-collect-metrics-in-prometheus-format use existing configmap if specified otherwise .config values will be used

    +

    VMAgent scraping configuration use existing configmap if specified otherwise .config values will be used

    containerWorkingDir string
    -/
    +      
    +/
    +
     

    Container working directory

    +
    deployment object
    -enabled: true
    +      
    +enabled: true
     strategy: {}
    +
     

    ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

    +

    K8s Deployment specific variables

    +
    deployment.strategyobject
    +{}
    +
    +
    +

    Deployment stragegy. Check here for details

    emptyDir object
    -{}
    +      
    +{}
    +
     

    Empty dir configuration for a case, when persistence is disabled

    +
    env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for more details.

    envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    extraArgs object
    -envflag.enable: "true"
    +      
    +envflag.enable: "true"
     envflag.prefix: VM_
     loggerFormat: json
    +
     

    vmagent extra command line arguments

    +

    VMAgent extra command line arguments

    extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with vmagent

    +
    extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -494,18 +516,20 @@ loggerFormat: json
    extraLabels object
    -{}
    +      
    +{}
    +
     

    extra Labels for Pods, Deployment and Statefulset

    +

    Extra labels for Pods, Deployment and Statefulset

    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    @@ -514,8 +538,9 @@ loggerFormat: json
    extraScrapeConfigs list
    -[]
    +      
    +[]
    +
     

    Extra scrape configs that will be appended to config

    @@ -524,8 +549,9 @@ loggerFormat: json
    extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -534,8 +560,9 @@ loggerFormat: json
    extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -544,57 +571,68 @@ loggerFormat: json
    fullnameOverride string
    -""
    +      
    +""
    +
     

    Overrides the fullname prefix

    +
    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    horizontalPodAutoscaling object
    -enabled: false
    +      
    +enabled: false
     maxReplicas: 10
     metrics: []
     minReplicas: 1
    +
     

    Horizontal Pod Autoscaling. Note that it is not intended to be used for vmagents which perform scraping. In order to scale scraping vmagents see: https://docs.victoriametrics.com/vmagent/#scraping-big-number-of-targets

    +

    Horizontal Pod Autoscaling. Note that it is not intended to be used for vmagents which perform scraping. In order to scale scraping vmagents check here

    horizontalPodAutoscaling.enabled bool
    -false
    +      
    +false
    +
     

    Use HPA for vmagent

    @@ -603,8 +641,9 @@ false
    horizontalPodAutoscaling.maxReplicas int
    -10
    +      
    +10
    +
     

    Maximum replicas for HPA to use to to scale vmagent

    @@ -613,8 +652,9 @@ false
    horizontalPodAutoscaling.metrics list
    -[]
    +      
    +[]
    +
     

    Metric for HPA to use to scale vmagent

    @@ -623,8 +663,9 @@ false
    horizontalPodAutoscaling.minReplicas int
    -1
    +      
    +1
    +
     

    Minimum replicas for HPA to use to scale vmagent

    @@ -633,17 +674,20 @@ false
    image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    +
    image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -652,8 +696,9 @@ IfNotPresent
    image.repository string
    -victoriametrics/vmagent
    +      
    +victoriametrics/vmagent
    +
     

    Image repository

    @@ -662,8 +707,9 @@ victoriametrics/vmagent
    image.tag string
    -""
    +      
    +""
    +
     

    Image tag, set to Chart.AppVersion by default

    @@ -672,8 +718,9 @@ victoriametrics/vmagent
    image.variant string
    -""
    +      
    +""
    +
     

    Variant of the image to use. e.g. enterprise, scratch

    @@ -682,94 +729,122 @@ victoriametrics/vmagent
    imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for agent

    +
    ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    initContainers list
    -[]
    +      
    +[]
    +
     

    Init containers for vmagent

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

    license.key string
    -""
    +      
    +""
    +
     

    License key

    @@ -778,9 +853,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key

    @@ -789,8 +865,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -799,8 +876,9 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    @@ -809,80 +887,97 @@ name: ""
    multiTenantUrls list
    -[]
    +      
    +[]
    +
     

    Destination multitenant endpoint for scraped/received metrics

    +
    nameOverride string
    -""
    +      
    +""
    +
     

    Overrides fullname suffix

    +
    nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    +
    persistence.accessModes[0]string
    -ReadWriteOnce
    +      
    persistence.accessModeslist
    +- ReadWriteOnce
    +
     

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    +
    persistence.annotations object
    -{}
    +      
    +{}
    +
     

    Persistant volume annotations

    +
    persistence.enabled bool
    -false
    +      
    +false
    +
     

    Create/use Persistent Volume Claim for server component. Empty dir if false

    +
    persistence.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    +
    persistence.extraLabels object
    -{}
    +      
    +{}
    +
     

    Persistant volume additional labels

    +
    persistence.matchLabels object
    -{}
    +      
    +{}
    +
     

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    @@ -891,17 +986,31 @@ false
    persistence.size string
    -10Gi
    +      
    +10Gi
    +
     

    Size of the volume. Should be calculated based on the logs you send and retention policy you set.

    +
    persistence.storageClassNamestring
    +""
    +
    +
    +

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    +
    podAnnotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to pod

    @@ -910,120 +1019,136 @@ false
    podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

    +

    See kubectl explain poddisruptionbudget.spec for more or check official documentation

    podLabels object
    -{}
    +      
    +{}
    +
     

    extra Labels for Pods only

    +

    Extra labels for Pods only

    podSecurityContext.enabledbool
    -true
    +      
    podSecurityContextobject
    +enabled: true
    +
     

    Security context to be added to pod

    +
    priorityClassName string
    -""
    +      
    +""
    +
     

    priority class to be assigned to the pod(s)

    +

    Priority class to be assigned to the pod(s)

    probe.liveness object
    -initialDelaySeconds: 5
    +      
    +initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    liveness probe

    +

    Liveness probe

    probe.readiness object
    -httpGet: {}
    +      
    +httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
    +
     

    readiness probe

    +

    Readiness probe

    probe.startup object
    -{}
    +      
    +{}
    +
     

    startup probe

    +

    Startup probe

    rbac.annotations object
    -{}
    +      
    +{}
    +
     

    Role/RoleBinding annotations

    +
    rbac.create bool
    -true
    +      
    +true
    +
     

    Enables Role/RoleBinding creation

    +
    rbac.extraLabels object
    -{}
    +      
    +{}
    +
     

    Role/RoleBinding labels

    +
    rbac.namespaced bool
    -false
    +      
    +false
    +
     

    if true and rbac.enabled, will deploy a Role/Rolebinding instead of a ClusterRole/ClusterRoleBinding

    +

    If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

    remoteWriteUrls list
    -[]
    +      
    +[]
    +
     

    WARN: need to specify at least one remote write url or one multi tenant url

    @@ -1032,152 +1157,185 @@ false
    replicaCount int
    -1
    +      
    +1
    +
     

    Replica count

    +
    resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    +
    securityContext.enabledbool
    -true
    +      
    securityContextobject
    +enabled: true
    +
     

    Security context to be added to pod’s containers

    +
    service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    +
    service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    +
    service.enabled bool
    -false
    +      
    +false
    +
     

    Enable agent service

    +
    service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service external IPs. Check here for details

    +
    service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    service.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service labels

    +
    service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    +
    service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    +
    service.servicePort int
    -8429
    +      
    +8429
    +
     

    Service port

    +
    service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    +
    serviceAccount.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to add to the service account

    @@ -1186,8 +1344,9 @@ ClusterIP
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -1196,8 +1355,9 @@ true
    serviceAccount.name string
    -null
    +      
    +null
    +
     

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    @@ -1206,8 +1366,9 @@ null
    serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -1216,8 +1377,9 @@ null
    serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -1226,8 +1388,9 @@ null
    serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    @@ -1236,8 +1399,9 @@ false
    serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -1246,8 +1410,9 @@ false
    serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -1256,8 +1421,9 @@ false
    serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -1266,53 +1432,71 @@ false
    statefulset object
    -clusterMode: false
    +      
    +clusterMode: false
     enabled: false
     replicationFactor: 1
     updateStrategy: {}
    +
     

    ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

    +

    K8s StatefulSet specific variables

    statefulset.clusterMode bool
    -false
    +      
    +false
    +
     

    create cluster of vmagents. See https://docs.victoriametrics.com/vmagent#scraping-big-number-of-targets available since 1.77.2 version https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.77.2

    +

    create cluster of vmagents. Check here available since v1.77.2

    statefulset.replicationFactor int
    -1
    +      
    +1
    +
     

    replication factor for vmagent in cluster mode

    tolerationslist
    -[]
    +      
    statefulset.updateStrategyobject
    +{}
    +
     

    StatefulSet update strategy. Check here for details.

    +
    tolerationslist
    +[]
    +
    +
    +

    Node tolerations for server scheduling to nodes with taints. Details are here

    +
    topologySpreadConstraints list
    -[]
    +      
    +[]
    +
     

    Pod topologySpreadConstraints

    +
    diff --git a/docs/helm/victoria-metrics-alert/README.md b/docs/helm/victoria-metrics-alert/README.md index 517d598cb2..3398480741 100644 --- a/docs/helm/victoria-metrics-alert/README.md +++ b/docs/helm/victoria-metrics-alert/README.md @@ -125,157 +125,129 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-alert/values.yaml`` file. - +
    - - - - + + + + - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - + - - - - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - - + - - + - - - - - - - - - + - - + - + - - - - - - - - - - + - - - - - - - - + - - + - - - + + - + - - + - - + - - - - - - + - - + - - + - - + - - + - - - - - - - - - - - - - - - - + - - + - - + - - + - - - - + + - + - - + - - + - - - - - - - - + - - + - - + - - + - - + - - - - + + - + - - - - - - - - - + - - - - + - - - + + - - - - - - - - - - - - - - - - - - - + - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - - - - - - + - - + - - + - - - - - - - - - + - - - + + - + - - + - - - - - - - + + + + + + - - - - + - - - - - - + - - + - - + - - - + + - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - + - - - - - - - - - - - - -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    alertmanager.baseURL string
    -""
    +      
    +""
    +
     

    external URL, that alertmanager will expose to receivers

    +

    External URL, that alertmanager will expose to receivers

    alertmanager.baseURLPrefix string
    -""
    +      
    +""
    +
     

    external URL Prefix, Prefix for the internal routes of web endpoints

    +

    External URL Prefix, Prefix for the internal routes of web endpoints

    alertmanager.config.global.resolve_timeoutstring
    -5m
    +      
    alertmanager.configobject
    +global:
    +    resolve_timeout: 5m
    +receivers:
    +    - name: devnull
    +route:
    +    group_by:
    +        - alertname
    +    group_interval: 10s
    +    group_wait: 30s
    +    receiver: devnull
    +    repeat_interval: 24h
    +
     
    alertmanager.config.receivers[0].namestring
    -devnull
    -
    +

    Alertmanager configuration

    alertmanager.config.route.group_by[0]string
    -alertname
    -
    -
    alertmanager.config.route.group_intervalstring
    -10s
    -
    -
    alertmanager.config.route.group_waitstring
    -30s
    -
    -
    alertmanager.config.route.receiverstring
    -devnull
    -
    -
    alertmanager.config.route.repeat_intervalstring
    -24h
    -
    -
    alertmanager.configMap string
    -""
    +      
    +""
    +
     

    use existing configmap if specified otherwise .config values will be used

    +

    Use existing configmap if specified otherwise .config values will be used

    alertmanager.emptyDir object
    -{}
    +      
    +{}
    +
     

    Empty dir configuration if persistence is disabled for Alertmanager

    +
    alertmanager.enabled bool
    -false
    +      
    +false
    +
     

    Create alertmanager resources

    +
    alertmanager.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    alertmanager.extraArgs object
    -{}
    +      
    +{}
    +
     

    Extra command line arguments for container of component

    +
    alertmanager.extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with alertmanager

    +
    alertmanager.extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -284,8 +256,9 @@ false
    alertmanager.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -294,8 +267,9 @@ false
    alertmanager.extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -304,84 +278,110 @@ false
    alertmanager.image object
    -registry: ""
    +      
    +registry: ""
     repository: prom/alertmanager
     tag: v0.25.0
    +
     

    alertmanager image configuration

    +

    Alertmanager image configuration

    alertmanager.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    alertmanager.ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    alertmanager.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for alertmanager component

    +
    alertmanager.ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    alertmanager.ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    alertmanager.ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    alertmanager.ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    alertmanager.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    alertmanager.initContainers list
    -[]
    +      
    +[]
    +
     

    Additional initContainers to initialize the pod

    @@ -390,26 +390,31 @@ Prefix
    alertmanager.listenAddress string
    -0.0.0.0:9093
    +      
    +0.0.0.0:9093
    +
     

    Alertmanager listen address

    +
    alertmanager.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    +
    alertmanager.persistentVolume.accessModes list
    -- ReadWriteOnce
    +      
    +- ReadWriteOnce
    +
     

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    @@ -418,8 +423,9 @@ Prefix
    alertmanager.persistentVolume.annotations object
    -{}
    +      
    +{}
    +
     

    Persistant volume annotations

    @@ -428,8 +434,9 @@ Prefix
    alertmanager.persistentVolume.enabled bool
    -false
    +      
    +false
    +
     

    Create/use Persistent Volume Claim for alertmanager component. Empty dir if false

    @@ -438,8 +445,9 @@ false
    alertmanager.persistentVolume.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    @@ -448,8 +456,9 @@ false
    alertmanager.persistentVolume.mountPath string
    -/data
    +      
    +/data
    +
     

    Mount path. Alertmanager data Persistent Volume mount root path.

    @@ -458,8 +467,9 @@ false
    alertmanager.persistentVolume.size string
    -50Mi
    +      
    +50Mi
    +
     

    Size of the volume. Better to set the same as resource limit memory property.

    @@ -468,8 +478,9 @@ false
    alertmanager.persistentVolume.storageClassName string
    -""
    +      
    +""
    +
     

    StorageClass to use for persistent volume. Requires alertmanager.persistentVolume.enabled: true. If defined, PVC created automatically

    @@ -478,314 +489,339 @@ false
    alertmanager.persistentVolume.subPath string
    -""
    +      
    +""
    +
     

    Mount subpath

    alertmanager.podMetadata.annotationsalertmanager.podMetadata object
    -{}
    +      
    +annotations: {}
    +labels: {}
    +
     

    Alertmanager Pod metadata

    +
    alertmanager.podMetadata.labelsalertmanager.podSecurityContext object
    -{}
    +      
    +enabled: false
    +
     
    alertmanager.podSecurityContext.enabledbool
    -false
    -
    +

    Pod’s security context. Details are here

    alertmanager.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    +
    alertmanager.probe.liveness object
    -httpGet:
    +      
    +httpGet:
         path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/healthy'
         port: web
    +
     

    liveness probe

    +

    Liveness probe

    alertmanager.probe.readiness object
    -httpGet:
    +      
    +httpGet:
         path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/ready'
         port: web
    +
     

    readiness probe

    +

    Readiness probe

    alertmanager.probe.startup object
    -httpGet:
    +      
    +httpGet:
         path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/ready'
         port: web
    +
     

    startup probe

    +

    Startup probe

    alertmanager.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    +
    alertmanager.retention string
    -120h
    +      
    +120h
    +
     

    Alertmanager retention

    +
    alertmanager.securityContext.enabledbool
    -false
    +      
    alertmanager.securityContextobject
    +enabled: false
    +
     

    Security context to be added to server pods

    +
    alertmanager.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    +
    alertmanager.service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    +
    alertmanager.service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Ref: https://kubernetes.io/docs/user-guide/services/#external-ips

    +

    Service external IPs. Check here for details

    alertmanager.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip

    +

    Service external traffic policy. Check here for details

    alertmanager.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    alertmanager.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    alertmanager.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    alertmanager.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    +
    alertmanager.service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    +
    alertmanager.service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     
    alertmanager.service.nodePortstring
    -""
    -
    +

    Load balancer source range

    if you want to force a specific nodePort. Must be use with service.type=NodePort

    -
    alertmanager.service.portint
    -9093
    -
    -
    alertmanager.service.servicePort int
    -8880
    +      
    +8880
    +
     

    Service port

    +
    alertmanager.service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    +
    alertmanager.templates object
    -{}
    +      
    +{}
    +
     

    Alertmanager extra templates

    +
    alertmanager.tolerations list
    -[]
    +      
    +[]
    +
     

    Node tolerations for server scheduling to nodes with taints. Details are here

    +
    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

    license.key string
    -""
    +      
    +""
    +
     

    License key

    @@ -794,9 +830,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key

    @@ -805,8 +842,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -815,8 +853,9 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    @@ -825,99 +864,116 @@ name: ""
    rbac.annotations object
    -{}
    +      
    +{}
    +
     

    Role/RoleBinding annotations

    +
    rbac.create bool
    -true
    +      
    +true
    +
     

    Enables Role/RoleBinding creation

    +
    rbac.extraLabels object
    -{}
    +      
    +{}
    +
     

    Role/RoleBinding labels

    +
    rbac.namespaced bool
    -false
    +      
    +false
    +
     

    If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

    +
    server.affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    +
    server.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to the deployment

    server.config.alerts.groupslist
    -[]
    +      
    server.configobject
    +alerts:
    +    groups: []
    +
     

    VMAlert configuration

    +
    server.configMap string
    -""
    +      
    +""
    +
     

    vmalert alert rules configuration configuration: use existing configmap if specified otherwise .config values will be used

    +

    VMAlert alert rules configuration configuration. Use existing configmap if specified

    server.datasource object
    -basicAuth:
    +      
    +basicAuth:
         password: ""
         username: ""
     bearer:
         token: ""
         tokenFile: ""
     url: ""
    +
     

    vmalert reads metrics from source, next section represents its configuration. It can be any service which supports MetricsQL or PromQL.

    +

    VMAlert reads metrics from source, next section represents its configuration. It can be any service which supports MetricsQL or PromQL.

    server.datasource.basicAuth object
    -password: ""
    +      
    +password: ""
     username: ""
    +
     

    Basic auth for datasource

    @@ -926,8 +982,9 @@ username: ""
    server.datasource.bearer.token string
    -""
    +      
    +""
    +
     

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    @@ -936,8 +993,9 @@ username: ""
    server.datasource.bearer.tokenFile string
    -""
    +      
    +""
    +
     

    Token Auth file with Bearer token. You can use one of token or tokenFile

    @@ -946,63 +1004,55 @@ username: ""
    server.enabled bool
    -true
    +      
    +true
    +
     

    Create vmalert component

    +
    server.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details.

    server.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    server.extraArgs."envflag.enable"string
    -"true"
    +      
    server.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    server.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for container of component

    server.extraArgs.loggerFormatstring
    -json
    -
    -
    server.extraContainers list
    -[]
    +      
    +[]
    +
     

    Additional containers to run in the same pod

    @@ -1011,8 +1061,9 @@ json
    server.extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -1021,8 +1072,9 @@ json
    server.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -1031,8 +1083,9 @@ json
    server.extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -1041,95 +1094,123 @@ json
    server.fullnameOverride string
    -""
    +      
    +""
    +
     

    Full name prefix override

    +
    server.image object
    -pullPolicy: IfNotPresent
    +      
    +pullPolicy: IfNotPresent
     registry: ""
     repository: victoriametrics/vmalert
     tag: ""
     variant: ""
    +
     

    vmalert image configuration

    +

    VMAlert image configuration

    server.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    server.ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    server.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for vmalert component

    +
    server.ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    server.ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    server.ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    server.ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    server.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    server.initContainers list
    -[]
    +      
    +[]
    +
     

    Additional initContainers to initialize the pod

    @@ -1138,55 +1219,63 @@ Prefix
    server.labels object
    -{}
    +      
    +{}
    +
     

    labels to be added to the deployment

    +

    Labels to be added to the deployment

    server.minReadySeconds int
    -0
    +      
    +0
    +
     

    specifies the minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating 0 is the standard k8s default

    +

    Specifies the minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating 0 is the standard k8s default

    server.name string
    -server
    +      
    +server
    +
     

    Override fullname suffix

    +
    server.nameOverride string
    -""
    +      
    +""
    +
     

    Full name suffix override

    +
    server.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    +
    server.notifier object
    -alertmanager:
    +      
    +alertmanager:
         basicAuth:
             password: ""
             username: ""
    @@ -1194,6 +1283,7 @@ alertmanager:
             token: ""
             tokenFile: ""
         url: ""
    +
     

    Notifier to use for alerts. Multiple notifiers can be enabled by using notifiers section

    @@ -1202,9 +1292,10 @@ alertmanager:
    server.notifier.alertmanager.basicAuth object
    -password: ""
    +      
    +password: ""
     username: ""
    +
     

    Basic auth for alertmanager

    @@ -1213,8 +1304,9 @@ username: ""
    server.notifier.alertmanager.bearer.token string
    -""
    +      
    +""
    +
     

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    @@ -1223,8 +1315,9 @@ username: ""
    server.notifier.alertmanager.bearer.tokenFile string
    -""
    +      
    +""
    +
     

    Token Auth file with Bearer token. You can use one of token or tokenFile

    @@ -1233,8 +1326,9 @@ username: ""
    server.notifiers list
    -[]
    +      
    +[]
    +
     

    Additional notifiers to use for alerts

    @@ -1243,8 +1337,9 @@ username: ""
    server.podAnnotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to pod

    @@ -1253,9 +1348,10 @@ username: ""
    server.podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Or check docs

    @@ -1264,84 +1360,107 @@ labels: {}
    server.podLabels object
    -{}
    +      
    +{}
    +
     

    Pod’s additional labels

    +
    server.podSecurityContext.enabledbool
    -true
    +      
    server.podSecurityContextobject
    +enabled: true
    +
     

    Pod’s security context. Details are here

    +
    server.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    +
    server.probe.liveness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    liveness probe

    +

    Liveness probe

    server.probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    readiness probe

    +

    Readiness probe

    server.probe.startup object
    -{}
    +      
    +{}
    +
     

    startup probe

    +

    Startup probe

    server.remote.read.basicAuth object
    -password: ""
    +      
    +password: ""
     username: ""
    +
     

    Basic auth for remote read

    +
    server.remote.read.bearerobject
    +token: ""
    +tokenFile: ""
    +
    +
    +

    Auth based on Bearer token for remote read

    server.remote.read.bearer.token string
    -""
    +      
    +""
    +
     

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    @@ -1350,8 +1469,9 @@ username: ""
    server.remote.read.bearer.tokenFile string
    -""
    +      
    +""
    +
     

    Token Auth file with Bearer token. You can use one of token or tokenFile

    @@ -1360,18 +1480,21 @@ username: ""
    server.remote.read.url string
    -""
    +      
    +""
    +
     

    VMAlert remote read URL

    +
    server.remote.write.basicAuth object
    -password: ""
    +      
    +password: ""
     username: ""
    +
     

    Basic auth for remote write

    @@ -1380,9 +1503,10 @@ username: ""
    server.remote.write.bearer object
    -token: ""
    +      
    +token: ""
     tokenFile: ""
    +
     

    Auth based on Bearer token for remote write

    @@ -1391,8 +1515,9 @@ tokenFile: ""
    server.remote.write.bearer.token string
    -""
    +      
    +""
    +
     

    Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

    @@ -1401,8 +1526,9 @@ tokenFile: ""
    server.remote.write.bearer.tokenFile string
    -""
    +      
    +""
    +
     

    Token Auth file with Bearer token. You can use one of token or tokenFile

    @@ -1411,174 +1537,210 @@ tokenFile: ""
    server.remote.write.url string
    -""
    +      
    +""
    +
     

    VMAlert remote write URL

    +
    server.replicaCount int
    -1
    +      
    +1
    +
     

    Replica count

    +
    server.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    +
    server.securityContext.enabledbool
    -true
    +      
    server.securityContextobject
    +enabled: true
    +
     

    Security context to be added to server pods

    +
    server.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    +
    server.service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    +
    server.service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service external IPs. Check here for details

    +
    server.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    server.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    server.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    server.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    server.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    +
    server.service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    +
    server.service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    +
    server.service.servicePort int
    -8880
    +      
    +8880
    +
     

    Service port

    +
    server.service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    +
    server.strategy object
    -rollingUpdate:
    +      
    +rollingUpdate:
         maxSurge: 25%
         maxUnavailable: 25%
     type: RollingUpdate
    +
     

    deployment strategy, set to standard k8s default

    +

    Deployment strategy, set to standard k8s default

    server.tolerations list
    -[]
    +      
    +[]
    +
     

    Node tolerations for server scheduling to nodes with taints. Details are here

    +
    server.verticalPodAutoscaler object
    -enabled: false
    +      
    +enabled: false
    +
     

    Vertical Pod Autoscaler

    @@ -1587,8 +1749,9 @@ enabled: false
    server.verticalPodAutoscaler.enabled bool
    -false
    +      
    +false
    +
     

    Use VPA for vmalert

    @@ -1597,8 +1760,9 @@ false
    serviceAccount.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to add to the service account

    @@ -1607,18 +1771,20 @@ false
    serviceAccount.automountToken bool
    -true
    +      
    +true
    +
     

    mount API token to pod directly

    +

    Mount API token to pod directly

    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -1627,8 +1793,9 @@ true
    serviceAccount.name string
    -null
    +      
    +null
    +
     

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    @@ -1637,8 +1804,9 @@ null
    serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -1647,8 +1815,9 @@ null
    serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -1657,8 +1826,9 @@ null
    serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    @@ -1667,8 +1837,9 @@ false
    serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -1677,8 +1848,9 @@ false
    serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -1687,8 +1859,9 @@ false
    serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    diff --git a/docs/helm/victoria-metrics-anomaly/README.md b/docs/helm/victoria-metrics-anomaly/README.md index 286554f3aa..6fd6a35121 100644 --- a/docs/helm/victoria-metrics-anomaly/README.md +++ b/docs/helm/victoria-metrics-anomaly/README.md @@ -131,19 +131,20 @@ For more `vmanomaly` config parameters see https://docs.victoriametrics.com/anom Change the values according to the need of the environment in ``victoria-metrics-anomaly/values.yaml`` file. - +
    - - - - + + + + - - - - - - - - - - - - - - - - - - - - + - - + - - - + - - + - - + - - - - - + - - - + + - + - - + - - + - - - - - - + - - - - - - - + - - - - - - - - - - - - - + - - + - - + - - - + + - + - - + - - - - - -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    affinity object
    -{}
    +      
    +{}
    +
     

    Affinity configurations

    @@ -152,8 +153,9 @@ Change the values according to the need of the environment in ``victoria-metrics
    annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to the deployment

    @@ -162,8 +164,8 @@ Change the values according to the need of the environment in ``victoria-metrics
    config object
    -models: {}
    +      
    +models: {}
     preset: ""
     reader:
         class: vm
    @@ -176,6 +178,7 @@ writer:
         class: vm
         datasource_url: ""
         tenant_id: ""
    +
     

    Full vmanomaly config section

    @@ -184,8 +187,9 @@ writer:
    config.models object
    -{}
    +      
    +{}
    +
     

    Models section

    @@ -194,8 +198,9 @@ writer:
    config.preset string
    -""
    +      
    +""
    +
     

    Whether to use preset configuration. If not empty, preset name should be specified.

    @@ -204,12 +209,13 @@ writer:
    config.reader object
    -class: vm
    +      
    +class: vm
     datasource_url: ""
     queries: {}
     sampling_period: 1m
     tenant_id: ""
    +
     

    Reader section

    @@ -218,8 +224,9 @@ tenant_id: ""
    config.reader.class string
    -vm
    +      
    +vm
    +
     

    Name of the class needed to enable reading from VictoriaMetrics or Prometheus. VmReader is the default option, if not specified.

    @@ -228,8 +235,9 @@ vm
    config.reader.datasource_url string
    -""
    +      
    +""
    +
     

    Datasource URL address. Required for example http://single-victoria-metrics-single-server.default.svc.cluster.local:8428 or http://cluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480

    @@ -238,18 +246,20 @@ vm
    config.reader.queries object
    -{}
    +      
    +{}
    +
     

    Required. PromQL/MetricsQL query to select data in format: QUERY_ALIAS: “QUERY”. As accepted by “/query_range?query=%s”. See https://docs.victoriametrics.com/anomaly-detection/components/reader/#per-query-parameters for more details.

    +

    Required. PromQL/MetricsQL query to select data in format: QUERY_ALIAS: “QUERY”. As accepted by “/query_range?query=%s”. See here for more details.

    config.reader.sampling_period string
    -1m
    +      
    +1m
    +
     

    Frequency of the points returned. Will be converted to /query_range?step=%s param (in seconds). Required since 1.9.0.

    @@ -258,8 +268,9 @@ vm
    config.reader.tenant_id string
    -""
    +      
    +""
    +
     

    For VictoriaMetrics Cluster version only, tenants are identified by accountID or accountID:projectID. See VictoriaMetrics Cluster multitenancy docs

    @@ -268,8 +279,9 @@ vm
    config.schedulers object
    -{}
    +      
    +{}
    +
     

    Scheduler section

    @@ -278,10 +290,11 @@ vm
    config.writer object
    -class: vm
    +      
    +class: vm
     datasource_url: ""
     tenant_id: ""
    +
     

    Writer section

    @@ -290,8 +303,9 @@ tenant_id: ""
    config.writer.class string
    -vm
    +      
    +vm
    +
     

    Name of the class needed to enable writing to VictoriaMetrics or Prometheus. VmWriter is the default option, if not specified.

    @@ -300,8 +314,9 @@ vm
    config.writer.datasource_url string
    -""
    +      
    +""
    +
     

    Datasource URL address. Required for example http://single-victoria-metrics-single-server.default.svc.cluster.local:8428 or http://cluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480

    @@ -310,8 +325,9 @@ vm
    config.writer.tenant_id string
    -""
    +      
    +""
    +
     

    For VictoriaMetrics Cluster version only, tenants are identified by accountID or accountID:projectID. See VictoriaMetrics Cluster multitenancy docs

    @@ -320,8 +336,9 @@ vm
    configMapAnnotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to configMap

    @@ -330,26 +347,31 @@ vm
    containerWorkingDir string
    -/vmanomaly
    +      
    +/vmanomaly
    +
     

    Container working directory

    +
    emptyDir object
    -{}
    +      
    +{}
    +
     

    Empty dir configuration when persistence is disabled

    +
    env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags)

    @@ -358,35 +380,42 @@ vm
    envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    extraArgs object
    -{}
    +      
    +{}
    +
     

    Extra command line arguments for container of component

    +
    extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with anomaly container

    +
    extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -395,8 +424,9 @@ vm
    extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -405,8 +435,9 @@ vm
    extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -415,44 +446,54 @@ vm
    fullnameOverride string
    -""
    +      
    +""
    +
     

    Full name prefix override

    +
    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Pull policy of Docker image

    @@ -461,8 +502,9 @@ IfNotPresent
    image.registry string
    -""
    +      
    +""
    +
     

    Victoria Metrics anomaly Docker registry

    @@ -471,8 +513,9 @@ IfNotPresent
    image.repository string
    -victoriametrics/vmanomaly
    +      
    +victoriametrics/vmanomaly
    +
     

    Victoria Metrics anomaly Docker repository and image name

    @@ -481,8 +524,9 @@ victoriametrics/vmanomaly
    image.tag string
    -v1.15.9
    +      
    +v1.15.9
    +
     

    Tag of Docker image

    @@ -491,20 +535,23 @@ v1.15.9
    imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    License key configuration for vmanomaly. See docs Required starting from v1.5.0.

    @@ -513,8 +560,9 @@ secret:
    license.key string
    -""
    +      
    +""
    +
     

    License key for vmanomaly

    @@ -523,9 +571,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key for vmanomaly

    @@ -534,8 +583,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -544,8 +594,9 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    @@ -554,17 +605,20 @@ name: ""
    nameOverride string
    -""
    +      
    +""
    +
     

    Full name suffix override

    +
    nodeSelector object
    -{}
    +      
    +{}
    +
     

    NodeSelector configurations. Details are here

    @@ -573,8 +627,8 @@ name: ""
    persistentVolume object
    -accessModes:
    +      
    +accessModes:
         - ReadWriteOnce
     annotations: {}
     enabled: false
    @@ -582,6 +636,7 @@ existingClaim: ""
     matchLabels: {}
     size: 1Gi
     storageClassName: ""
    +
     

    Persistence to store models on disk. Available starting from v1.13.0

    @@ -590,8 +645,9 @@ storageClassName: ""
    persistentVolume.accessModes list
    -- ReadWriteOnce
    +      
    +- ReadWriteOnce
    +
     

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    @@ -600,8 +656,9 @@ storageClassName: ""
    persistentVolume.annotations object
    -{}
    +      
    +{}
    +
     

    Persistant volume annotations

    @@ -610,8 +667,9 @@ storageClassName: ""
    persistentVolume.enabled bool
    -false
    +      
    +false
    +
     

    Create/use Persistent Volume Claim for models dump.

    @@ -620,8 +678,9 @@ false
    persistentVolume.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    @@ -630,8 +689,9 @@ false
    persistentVolume.matchLabels object
    -{}
    +      
    +{}
    +
     

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    @@ -640,8 +700,9 @@ false
    persistentVolume.size string
    -1Gi
    +      
    +1Gi
    +
     

    Size of the volume. Should be calculated based on the metrics you send and retention policy you set.

    @@ -650,8 +711,9 @@ false
    persistentVolume.storageClassName string
    -""
    +      
    +""
    +
     

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    @@ -660,8 +722,9 @@ false
    podAnnotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to pod

    @@ -670,10 +733,11 @@ false
    podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
     minAvailable: 1
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    @@ -682,66 +746,78 @@ minAvailable: 1
    podMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    PodMonitor annotations

    +
    podMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable PodMonitor

    +
    podMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    PodMonitor labels

    +
    podSecurityContext.enabledbool
    -true
    +      
    podSecurityContextobject
    +enabled: true
    +
     

    Pod’s security context. Details are here

    +
    resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    +
    securityContext object
    -enabled: true
    +      
    +enabled: true
     runAsGroup: 1000
     runAsNonRoot: true
     runAsUser: 1000
    +
     

    Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

    +

    Check here for details.

    serviceAccount.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to add to the service account

    @@ -750,8 +826,9 @@ runAsUser: 1000
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -760,8 +837,9 @@ true
    serviceAccount.name string
    -null
    +      
    +null
    +
     

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    @@ -770,8 +848,9 @@ null
    tolerations list
    -[]
    +      
    +[]
    +
     

    Tolerations configurations. Details are here

    diff --git a/docs/helm/victoria-metrics-auth/README.md b/docs/helm/victoria-metrics-auth/README.md index e03f44a932..844662692b 100644 --- a/docs/helm/victoria-metrics-auth/README.md +++ b/docs/helm/victoria-metrics-auth/README.md @@ -118,19 +118,20 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-auth/values.yaml`` file. - +
    - - - - + + + + - - - - @@ -168,63 +172,55 @@ null - - - - + - - - + + - - - - - - - - - - - - - - - + - - - - - - - + - - - + + - + - - + - - + - - - - - - + - - + - - + - - + - - + - - + + + + + + + - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - - - - - - - + - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - diff --git a/docs/helm/victoria-metrics-cluster/README.md b/docs/helm/victoria-metrics-cluster/README.md index 7f29cb5916..3e1dedbb28 100644 --- a/docs/helm/victoria-metrics-cluster/README.md +++ b/docs/helm/victoria-metrics-cluster/README.md @@ -124,29 +124,31 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-cluster/values.yaml`` file. -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    affinity object
    -{}
    +      
    +{}
    +
     

    Affinity configurations

    @@ -139,8 +140,9 @@ Change the values according to the need of the environment in ``victoria-metrics
    annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to the deployment

    @@ -149,8 +151,9 @@ Change the values according to the need of the environment in ``victoria-metrics
    config string
    -null
    +      
    +null
    +
     

    Config file content.

    @@ -159,8 +162,9 @@ null
    containerWorkingDir string
    -/
    +      
    +/
    +
     
    env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details

    envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    extraArgs."envflag.enable"string
    -"true"
    +      
    extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for container of component

    extraArgs.loggerFormatstring
    -json
    -
    -
    extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with vmauth

    +
    extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -233,8 +229,9 @@ json
    extraLabels object
    -{}
    +      
    +{}
    +
     

    Labels to be added to the deployment and pods

    @@ -243,8 +240,9 @@ json
    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    @@ -253,8 +251,9 @@ json
    extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -263,8 +262,9 @@ json
    extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -273,44 +273,54 @@ json
    fullnameOverride string
    -""
    +      
    +""
    +
     

    Full name prefix override

    +
    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Pull policy of Docker image

    @@ -319,8 +329,9 @@ IfNotPresent
    image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -329,8 +340,9 @@ IfNotPresent
    image.repository string
    -victoriametrics/vmauth
    +      
    +victoriametrics/vmauth
    +
     

    Victoria Metrics Auth Docker repository and image name

    @@ -339,8 +351,9 @@ victoriametrics/vmauth
    image.tag string
    -""
    +      
    +""
    +
     

    Tag of Docker image

    @@ -349,149 +362,199 @@ victoriametrics/vmauth
    image.variant string
    -""
    +      
    +""
    +
     

    Variant of the image to use. e.g. enterprise, scratch

    +
    imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for vmauth component

    +
    ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    ingressInternal.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    ingressInternal.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of internal ingress for vmauth component

    +
    ingressInternal.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    ingressInternal.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    ingressInternal.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    ingressInternal.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    ingressInternal.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

    license.key string
    -""
    +      
    +""
    +
     

    License key

    @@ -500,9 +563,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key

    @@ -511,8 +575,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -521,8 +586,9 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    @@ -531,27 +597,31 @@ name: ""
    nameOverride string
    -""
    +      
    +""
    +
     

    Full name suffix override

    +
    nodeSelector object
    -{}
    +      
    +{}
    +
     

    NodeSelector configurations. Ref: https://kubernetes.io/docs/user-guide/node-selection/

    +

    NodeSelector configurations. Check here for details

    podAnnotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to pod

    @@ -560,81 +630,70 @@ name: ""
    podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

    +

    See kubectl explain poddisruptionbudget.spec for more. Official guide is here

    podSecurityContext.enabledbool
    -true
    +      
    podSecurityContextobject
    +enabled: true
    +
     

    Pod’s security context. Details are here

    +
    probe.liveness object
    -initialDelaySeconds: 5
    +      
    +initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    liveness probe

    +

    Liveness probe

    probe.readiness object
    -initialDelaySeconds: 5
    +      
    +initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
    +
     

    readiness probe

    +

    Readiness probe

    probe.startup object
    -{}
    +      
    +{}
    +
     

    startup probe

    +

    Startup probe

    rbac.annotationsobject
    -{}
    -
    -
    rbac.extraLabelsobject
    -{}
    -
    -
    replicaCount int
    -1
    +      
    +1
    +
     

    Number of replicas of vmauth

    @@ -643,8 +702,9 @@ tcpSocket: {}
    resources object
    -{}
    +      
    +{}
    +
     

    We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. If you do want to specify resources, uncomment the following lines, adjust them as necessary, and remove the curly braces after resources:.

    @@ -653,144 +713,174 @@ tcpSocket: {}
    secretName string
    -""
    +      
    +""
    +
     

    Use existing secret if specified otherwise .config values will be used. Ref: https://docs.victoriametrics.com/vmauth. Configuration in the given secret must be stored under auth.yml key.

    +

    Use existing secret if specified otherwise .config values will be used. Check here for details. Configuration in the given secret must be stored under auth.yml key.

    securityContext.enabledbool
    -true
    +      
    securityContextobject
    +enabled: true
    +
     

    Container security context. Check here for details.

    +
    service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    +
    service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    +
    service.enabled bool
    -true
    +      
    +true
    +
     

    Enable vmauth service

    +
    service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service external IPs. Check here for details

    +
    service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    service.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service labels

    +
    service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    +
    service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    +
    service.servicePort int
    -8427
    +      
    +8427
    +
     

    Service port

    +
    service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    +
    serviceAccount.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to add to the service account

    @@ -799,8 +889,9 @@ ClusterIP
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -809,8 +900,9 @@ true
    serviceAccount.name string
    -null
    +      
    +null
    +
     

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    @@ -819,8 +911,9 @@ null
    serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -829,8 +922,9 @@ null
    serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -839,8 +933,9 @@ null
    serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    @@ -849,8 +944,9 @@ false
    serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -859,8 +955,9 @@ false
    serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -869,8 +966,9 @@ false
    serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -879,11 +977,12 @@ false
    tolerations list
    -[]
    +      
    +[]
    +
     

    Tolerations configurations. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

    +

    Tolerations configurations. Check here for details

    +
    - - - - + + + + - - - - - - - + + - + - - + - - + - - - - - - - - + + + + + + + - - + - - + - - + + + + + + + - - + - - + - - + + + + + + + - - - - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - + - - + - - + - - + - - - - - - - - - - - - + - - - - + - - + - - + + + + + + - - - + - - - - - - - + + - - - - - - - - + - - - + + - + - - + - + + + + + + - - - - - - - - - - - - - - - - + - - - + - - + - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - + - - - + + - - - - - - - - - - - - - - - + - - - + - - - - - - - - - - - - - - + - - - - + - - + - - + + + + + + - - - + - - - - - - - - - - - - - - + + - - - + + - + - - + - - - + + - + - - + - + + + + + + - - - - - - - - - - - - - - - - + - - - + - - + - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - + - - - + - - + - - - - - - - - - + - - + - - - - - - - - - - @@ -2169,8 +2441,9 @@ vmstorage-volume - - - - - - - + - - - - + + - + - - + - + + + + + + - - - - - - - - - + + + + + + - - - - + - - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + - - - - - - - - + + + + + + + - - - - - - - - + - - - - - - - - - - - - diff --git a/docs/helm/victoria-metrics-distributed/README.md b/docs/helm/victoria-metrics-distributed/README.md index 7008361c81..4bd2c06376 100644 --- a/docs/helm/victoria-metrics-distributed/README.md +++ b/docs/helm/victoria-metrics-distributed/README.md @@ -18,7 +18,7 @@ This chart sets up multiple VictoriaMetrics cluster instances on multiple [avail The default setup is as shown below: -![victoriametrics-distributed-topology](./victoriametrics-distributed-topology.png) +![victoriametrics-distributed-topology](./img/victoriametrics-distributed-topology.webp) For write: 1. extra-vmagent(optional): scrapes external targets and all the components installed by this chart, sends data to global write entrypoint. @@ -231,223 +231,256 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-distributed`/values.yaml`` file. -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    clusterDomainSuffix string
    -cluster.local
    +      
    +cluster.local
    +
     

    k8s cluster domain suffix, uses for building storage pods’ FQDN. Details are here

    +

    K8s cluster domain suffix, uses for building storage pods’ FQDN. Details are here

    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    @@ -155,57 +157,67 @@ cluster.local
    extraSecrets list
    -[]
    +      
    +[]
    +
     
    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

    license.key string
    -""
    +      
    +""
    +
     

    License key

    @@ -214,9 +226,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key

    @@ -225,8 +238,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -235,8 +249,9 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    @@ -245,71 +260,119 @@ name: ""
    printNotes bool
    -true
    +      
    +true
    +
     

    Print information after deployment

    +
    rbac.annotationsobject
    +{}
    +
    +
    +

    Role/RoleBinding annotations

    +
    rbac.create bool
    -true
    +      
    +true
    +
     

    Enables Role/RoleBinding creation

    +
    rbac.extraLabels object
    -{}
    +      
    +{}
    +
     

    Role/RoleBinding labels

    +
    rbac.namespaced bool
    -false
    +      
    +false
    +
     

    If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

    +
    serviceAccount.annotationsobject
    +{}
    +
    +
    +

    Service account annotations

    +
    serviceAccount.automountToken bool
    -true
    +      
    +true
    +
     

    mount API token to pod directly

    +
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    +
    serviceAccount.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service account labels

    +
    serviceAccount.namestring
    +null
    +
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    vminsert.affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    @@ -318,26 +381,20 @@ true
    vminsert.annotations object
    -{}
    +      
    +{}
    +
     
    vminsert.automountServiceAccountTokenbool
    -true
    -
    +

    StatefulSet/Deployment annotations

    vminsert.containerWorkingDir string
    -""
    +      
    +""
    +
     

    Container workdir

    @@ -346,8 +403,9 @@ true
    vminsert.enabled bool
    -true
    +      
    +true
    +
     

    Enable deployment of vminsert component. Deployment is used

    @@ -356,90 +414,88 @@ true
    vminsert.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details.

    vminsert.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    vminsert.extraArgs."envflag.enable"string
    -"true"
    +      
    vminsert.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    vminsert.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for vminsert component

    vminsert.extraArgs.loggerFormatstring
    -json
    -
    -
    vminsert.extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with vminsert

    +
    vminsert.extraLabels object
    -{}
    +      
    +{}
    +
     

    StatefulSet/Deployment additional labels

    +
    vminsert.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    +
    vminsert.extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    +
    vminsert.fullnameOverride string
    -""
    +      
    +""
    +
     

    Overrides the full name of vminsert component

    @@ -448,8 +504,9 @@ json
    vminsert.horizontalPodAutoscaler.behavior object
    -{}
    +      
    +{}
    +
     

    Behavior settings for scaling by the HPA

    @@ -458,8 +515,9 @@ json
    vminsert.horizontalPodAutoscaler.enabled bool
    -false
    +      
    +false
    +
     

    Use HPA for vminsert component

    @@ -468,8 +526,9 @@ false
    vminsert.horizontalPodAutoscaler.maxReplicas int
    -10
    +      
    +10
    +
     

    Maximum replicas for HPA to use to to scale the vminsert component

    @@ -478,8 +537,9 @@ false
    vminsert.horizontalPodAutoscaler.metrics list
    -[]
    +      
    +[]
    +
     

    Metric for HPA to use to scale the vminsert component

    @@ -488,8 +548,9 @@ false
    vminsert.horizontalPodAutoscaler.minReplicas int
    -2
    +      
    +2
    +
     

    Minimum replicas for HPA to use to scale the vminsert component

    @@ -498,8 +559,9 @@ false
    vminsert.image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    @@ -508,8 +570,9 @@ IfNotPresent
    vminsert.image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -518,8 +581,9 @@ IfNotPresent
    vminsert.image.repository string
    -victoriametrics/vminsert
    +      
    +victoriametrics/vminsert
    +
     

    Image repository

    @@ -528,8 +592,9 @@ victoriametrics/vminsert
    vminsert.image.tag string
    -""
    +      
    +""
    +
     

    Image tag override Chart.AppVersion

    @@ -538,17 +603,20 @@ victoriametrics/vminsert
    vminsert.image.variant string
    -cluster
    +      
    +cluster
    +
     

    Variant of the image to use. e.g. cluster, enterprise-cluster

    +
    vminsert.ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    @@ -557,8 +625,9 @@ cluster
    vminsert.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for vminsert component

    @@ -567,37 +636,53 @@ false
    vminsert.ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    vminsert.ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    vminsert.ingress.pathTypevminsert.ingress.ingressClassName string
    -Prefix
    +      
    +""
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress controller class name

    +
    vminsert.ingress.pathTypestring
    +Prefix
    +
    +
    +

    Ingress path type

    vminsert.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    @@ -606,27 +691,31 @@ Prefix
    vminsert.initContainers list
    -[]
    +      
    +[]
    +
     

    Init containers for vminsert

    +
    vminsert.name string
    -vminsert
    +      
    +vminsert
    +
     

    vminsert container name

    +

    VMInsert container name

    vminsert.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    @@ -635,112 +724,140 @@ vminsert
    vminsert.podAnnotations object
    -{}
    +      
    +{}
    +
     

    Pod’s annotations

    vminsert.podDisruptionBudget.enabledbool
    -false
    +      
    vminsert.podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    vminsert.podDisruptionBudget.labelsobject
    -{}
    -
    -
    vminsert.podLabels object
    -{}
    +      
    +{}
    +
     

    Pod’s additional labels

    +
    vminsert.podSecurityContext.enabledbool
    -false
    +      
    vminsert.podSecurityContextobject
    +enabled: false
    +
     

    Pod’s security context. Details are here

    +
    vminsert.ports.name string
    -http
    +      
    +http
    +
     

    VMInsert http port name

    +
    vminsert.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    +
    vminsert.probeobject
    +liveness:
    +    failureThreshold: 3
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    tcpSocket: {}
    +    timeoutSeconds: 5
    +readiness:
    +    failureThreshold: 3
    +    httpGet: {}
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    timeoutSeconds: 5
    +startup: {}
    +
    +
    +

    Readiness & Liveness probes

    vminsert.probe.liveness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    vminsert liveness probe

    +

    VMInsert liveness probe

    vminsert.probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    vminsert readiness probe

    +

    VMInsert readiness probe

    vminsert.probe.startup object
    -{}
    +      
    +{}
    +
     

    vminsert startup probe

    +

    VMInsert startup probe

    vminsert.replicaCount int
    -2
    +      
    +2
    +
     

    Count of vminsert pods

    @@ -749,18 +866,20 @@ timeoutSeconds: 5
    vminsert.resources object
    -{}
    +      
    +{}
    +
     

    Resource object

    +

    Resource object. Details are here

    vminsert.securityContext object
    -enabled: false
    +      
    +enabled: false
    +
     

    Pod’s security context. Details are here

    @@ -769,8 +888,9 @@ enabled: false
    vminsert.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    @@ -779,8 +899,9 @@ enabled: false
    vminsert.service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    @@ -789,27 +910,31 @@ enabled: false
    vminsert.service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service External IPs. Details are here

    +

    Service external IPs. Details are here

    vminsert.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    vminsert.service.extraPorts list
    -[]
    +      
    +[]
    +
     

    Extra service ports

    @@ -818,35 +943,42 @@ enabled: false
    vminsert.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    vminsert.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    vminsert.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    vminsert.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    @@ -855,8 +987,9 @@ enabled: false
    vminsert.service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balancer IP

    @@ -865,8 +998,9 @@ enabled: false
    vminsert.service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    @@ -875,8 +1009,9 @@ enabled: false
    vminsert.service.servicePort int
    -8480
    +      
    +8480
    +
     

    Service port

    @@ -885,8 +1020,9 @@ enabled: false
    vminsert.service.targetPort string
    -http
    +      
    +http
    +
     

    Target port

    @@ -895,8 +1031,9 @@ http
    vminsert.service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    @@ -905,18 +1042,20 @@ ClusterIP
    vminsert.service.udp bool
    -false
    +      
    +false
    +
     

    Make sure that service is not type “LoadBalancer”, as it requires “MixedProtocolLBService” feature gate. ref: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/

    +

    Enable UDP port. used if you have spec.opentsdbListenAddr specified Make sure that service is not type LoadBalancer, as it requires MixedProtocolLBService feature gate. Check here for details

    vminsert.serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -925,8 +1064,9 @@ false
    vminsert.serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -935,8 +1075,9 @@ false
    vminsert.serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for vminsert component. This is Prometheus operator object

    @@ -945,8 +1086,9 @@ false
    vminsert.serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -955,8 +1097,9 @@ false
    vminsert.serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -965,8 +1108,9 @@ false
    vminsert.serviceMonitor.namespace string
    -""
    +      
    +""
    +
     

    Target namespace of ServiceMonitor manifest

    @@ -975,8 +1119,9 @@ false
    vminsert.serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -985,17 +1130,20 @@ false
    vminsert.strategy object
    -{}
    +      
    +{}
    +
     

    VMInsert strategy

    +
    vminsert.suppressStorageFQDNsRender bool
    -false
    +      
    +false
    +
     

    Suppress rendering --storageNode FQDNs based on vmstorage.replicaCount value. If true suppress rendering --storageNodes, they can be re-defined in extraArgs

    @@ -1004,8 +1152,9 @@ false
    vminsert.tolerations list
    -[]
    +      
    +[]
    +
     

    Array of tolerations object. Details are here

    @@ -1014,8 +1163,9 @@ false
    vminsert.topologySpreadConstraints list
    -[]
    +      
    +[]
    +
     

    Pod topologySpreadConstraints

    @@ -1024,8 +1174,9 @@ false
    vmselect.affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    @@ -1034,26 +1185,20 @@ false
    vmselect.annotations object
    -{}
    +      
    +{}
    +
     
    vmselect.automountServiceAccountTokenbool
    -true
    -
    +

    StatefulSet/Deployment annotations

    vmselect.cacheMountPath string
    -/cache
    +      
    +/cache
    +
     

    Cache root folder

    @@ -1062,8 +1207,9 @@ true
    vmselect.containerWorkingDir string
    -""
    +      
    +""
    +
     

    Container workdir

    @@ -1072,17 +1218,20 @@ true
    vmselect.emptyDir object
    -{}
    +      
    +{}
    +
     

    Empty dir configuration if persistence is disabled

    +
    vmselect.enabled bool
    -true
    +      
    +true
    +
     

    Enable deployment of vmselect component. Can be deployed as Deployment(default) or StatefulSet

    @@ -1091,63 +1240,55 @@ true
    vmselect.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details.

    vmselect.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    vmselect.extraArgs."envflag.enable"bool
    -true
    +      
    vmselect.extraArgsobject
    +envflag.enable: true
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    vmselect.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for vmselect component

    vmselect.extraArgs.loggerFormatstring
    -json
    -
    -
    vmselect.extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with vmselect

    +
    vmselect.extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -1156,17 +1297,20 @@ json
    vmselect.extraLabels object
    -{}
    +      
    +{}
    +
     

    StatefulSet/Deployment additional labels

    +
    vmselect.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -1175,8 +1319,9 @@ json
    vmselect.extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -1185,8 +1330,9 @@ json
    vmselect.fullnameOverride string
    -""
    +      
    +""
    +
     

    Overrides the full name of vmselect component

    @@ -1195,8 +1341,9 @@ json
    vmselect.horizontalPodAutoscaler.behavior object
    -{}
    +      
    +{}
    +
     

    Behavior settings for scaling by the HPA

    @@ -1205,8 +1352,9 @@ json
    vmselect.horizontalPodAutoscaler.enabled bool
    -false
    +      
    +false
    +
     

    Use HPA for vmselect component

    @@ -1215,8 +1363,9 @@ false
    vmselect.horizontalPodAutoscaler.maxReplicas int
    -10
    +      
    +10
    +
     

    Maximum replicas for HPA to use to to scale the vmselect component

    @@ -1225,8 +1374,9 @@ false
    vmselect.horizontalPodAutoscaler.metrics list
    -[]
    +      
    +[]
    +
     

    Metric for HPA to use to scale the vmselect component

    @@ -1235,8 +1385,9 @@ false
    vmselect.horizontalPodAutoscaler.minReplicas int
    -2
    +      
    +2
    +
     

    Minimum replicas for HPA to use to scale the vmselect component

    @@ -1245,8 +1396,9 @@ false
    vmselect.image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    @@ -1255,8 +1407,9 @@ IfNotPresent
    vmselect.image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -1265,8 +1418,9 @@ IfNotPresent
    vmselect.image.repository string
    -victoriametrics/vmselect
    +      
    +victoriametrics/vmselect
    +
     

    Image repository

    @@ -1275,8 +1429,9 @@ victoriametrics/vmselect
    vmselect.image.tag string
    -""
    +      
    +""
    +
     

    Image tag override Chart.AppVersion

    @@ -1285,17 +1440,20 @@ victoriametrics/vmselect
    vmselect.image.variant string
    -cluster
    +      
    +cluster
    +
     

    Variant of the image to use. e.g. cluster, enterprise-cluster

    +
    vmselect.ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    @@ -1304,8 +1462,9 @@ cluster
    vmselect.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for vmselect component

    @@ -1314,37 +1473,53 @@ false
    vmselect.ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    vmselect.ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    vmselect.ingress.pathTypevmselect.ingress.ingressClassName string
    -Prefix
    +      
    +""
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress controller class name

    +
    vmselect.ingress.pathTypestring
    +Prefix
    +
    +
    +

    Ingress path type

    vmselect.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    @@ -1353,27 +1528,31 @@ Prefix
    vmselect.initContainers list
    -[]
    +      
    +[]
    +
     

    Init containers for vmselect

    +
    vmselect.name string
    -vmselect
    +      
    +vmselect
    +
     

    Vmselect container name

    +

    VMSelect container name

    vmselect.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    @@ -1382,8 +1561,9 @@ vmselect
    vmselect.persistentVolume.accessModes list
    -- ReadWriteOnce
    +      
    +- ReadWriteOnce
    +
     

    Array of access mode. Must match those of existing PV or dynamic provisioner. Details are here

    @@ -1392,8 +1572,9 @@ vmselect
    vmselect.persistentVolume.annotations object
    -{}
    +      
    +{}
    +
     

    Persistent volume annotations

    @@ -1402,8 +1583,9 @@ vmselect
    vmselect.persistentVolume.enabled bool
    -false
    +      
    +false
    +
     

    Create/use Persistent Volume Claim for vmselect component. Empty dir if false. If true, vmselect will create/use a Persistent Volume Claim

    @@ -1412,8 +1594,9 @@ false
    vmselect.persistentVolume.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. Requires vmselect.persistentVolume.enabled: true. If defined, PVC must be created manually before volume will be bound

    @@ -1422,8 +1605,9 @@ false
    vmselect.persistentVolume.labels object
    -{}
    +      
    +{}
    +
     

    Persistent volume labels

    @@ -1432,8 +1616,9 @@ false
    vmselect.persistentVolume.size string
    -2Gi
    +      
    +2Gi
    +
     

    Size of the volume. Better to set the same as resource limit memory property

    @@ -1442,8 +1627,9 @@ false
    vmselect.persistentVolume.subPath string
    -""
    +      
    +""
    +
     

    Mount subpath

    @@ -1452,112 +1638,151 @@ false
    vmselect.podAnnotations object
    -{}
    +      
    +{}
    +
     

    Pod’s annotations

    vmselect.podDisruptionBudget.enabledbool
    -false
    +      
    vmselect.podDisruptionBudgetobject
    +enabled: false
    +labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    vmselect.podDisruptionBudget.labelsobject
    -{}
    +      
    vmselect.podDisruptionBudget.enabledbool
    +false
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    +
    vmselect.podLabels object
    -{}
    +      
    +{}
    +
     

    Pod’s additional labels

    +
    vmselect.podSecurityContext.enabledbool
    -true
    +      
    vmselect.podSecurityContextobject
    +enabled: true
    +
     

    Pod’s security context. Details are here

    +
    vmselect.ports.name string
    -http
    +      
    +http
    +
     

    VMSelect http port name

    +
    vmselect.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    +
    vmselect.probeobject
    +liveness:
    +    failureThreshold: 3
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    tcpSocket: {}
    +    timeoutSeconds: 5
    +readiness:
    +    failureThreshold: 3
    +    httpGet: {}
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    timeoutSeconds: 5
    +startup: {}
    +
    +
    +

    Readiness & Liveness probes

    vmselect.probe.liveness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    vmselect liveness probe

    +

    VMSelect liveness probe

    vmselect.probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    vmselect readiness probe

    +

    VMSelect readiness probe

    vmselect.probe.startup object
    -{}
    +      
    +{}
    +
     

    vmselect startup probe

    +

    VMSelect startup probe

    vmselect.replicaCount int
    -2
    +      
    +2
    +
     

    Count of vmselect pods

    @@ -1566,18 +1791,20 @@ timeoutSeconds: 5
    vmselect.resources object
    -{}
    +      
    +{}
    +
     

    Resource object

    +

    Resource object. Details are here

    vmselect.securityContext object
    -enabled: true
    +      
    +enabled: true
    +
     

    Pod’s security context. Details are here

    @@ -1586,8 +1813,9 @@ enabled: true
    vmselect.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    @@ -1596,8 +1824,9 @@ enabled: true
    vmselect.service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    @@ -1606,27 +1835,31 @@ enabled: true
    vmselect.service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service External IPs. Details are here

    +

    Service external IPs. Details are here

    vmselect.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    vmselect.service.extraPorts list
    -[]
    +      
    +[]
    +
     

    Extra service ports

    @@ -1635,35 +1868,42 @@ enabled: true
    vmselect.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    vmselect.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    vmselect.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    vmselect.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    @@ -1672,8 +1912,9 @@ enabled: true
    vmselect.service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    @@ -1682,8 +1923,9 @@ enabled: true
    vmselect.service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    @@ -1692,8 +1934,9 @@ enabled: true
    vmselect.service.servicePort int
    -8481
    +      
    +8481
    +
     

    Service port

    @@ -1702,8 +1945,9 @@ enabled: true
    vmselect.service.targetPort string
    -http
    +      
    +http
    +
     

    Target port

    @@ -1712,8 +1956,9 @@ http
    vmselect.service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    @@ -1722,8 +1967,9 @@ ClusterIP
    vmselect.serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -1732,8 +1978,9 @@ ClusterIP
    vmselect.serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -1742,8 +1989,9 @@ ClusterIP
    vmselect.serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for vmselect component. This is Prometheus operator object

    @@ -1752,8 +2000,9 @@ false
    vmselect.serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -1762,8 +2011,9 @@ false
    vmselect.serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -1772,8 +2022,9 @@ false
    vmselect.serviceMonitor.namespace string
    -""
    +      
    +""
    +
     

    Target namespace of ServiceMonitor manifest

    @@ -1782,8 +2033,9 @@ false
    vmselect.serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -1792,8 +2044,9 @@ false
    vmselect.statefulSet.enabled bool
    -false
    +      
    +false
    +
     

    Deploy StatefulSet instead of Deployment for vmselect. Useful if you want to keep cache data.

    @@ -1802,8 +2055,9 @@ false
    vmselect.statefulSet.podManagementPolicy string
    -OrderedReady
    +      
    +OrderedReady
    +
     

    Deploy order policy for StatefulSet pods

    @@ -1812,17 +2066,20 @@ OrderedReady
    vmselect.strategy object
    -{}
    +      
    +{}
    +
     

    VMSelect strategy

    +
    vmselect.suppressStorageFQDNsRender bool
    -false
    +      
    +false
    +
     

    Suppress rendering --storageNode FQDNs based on vmstorage.replicaCount value. If true suppress rendering --storageNodes, they can be re-defined in extraArgs

    @@ -1831,8 +2088,9 @@ false
    vmselect.tolerations list
    -[]
    +      
    +[]
    +
     

    Array of tolerations object. Details are here

    @@ -1841,8 +2099,9 @@ false
    vmselect.topologySpreadConstraints list
    -[]
    +      
    +[]
    +
     

    Pod topologySpreadConstraints

    @@ -1851,8 +2110,9 @@ false
    vmstorage.affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    @@ -1861,26 +2121,20 @@ false
    vmstorage.annotations object
    -{}
    +      
    +{}
    +
     
    vmstorage.automountServiceAccountTokenbool
    -true
    -
    +

    StatefulSet/Deployment annotations

    vmstorage.containerWorkingDir string
    -""
    +      
    +""
    +
     

    Container workdir

    @@ -1889,18 +2143,20 @@ true
    vmstorage.emptyDir object
    -{}
    +      
    +{}
    +
     

    Use an alternate scheduler, e.g. “stork”. ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ schedulerName:

    +

    Empty dir configuration if persistence is disabled

    vmstorage.enabled bool
    -true
    +      
    +true
    +
     

    Enable deployment of vmstorage component. StatefulSet is used

    @@ -1909,63 +2165,55 @@ true
    vmstorage.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details

    vmstorage.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    vmstorage.extraArgs."envflag.enable"string
    -"true"
    +      
    vmstorage.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    vmstorage.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Additional vmstorage container arguments. Extra command line arguments for vmstorage component

    vmstorage.extraArgs.loggerFormatstring
    -json
    -
    -
    vmstorage.extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with vmstorage

    +
    vmstorage.extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -1974,26 +2222,31 @@ json
    vmstorage.extraLabels object
    -{}
    +      
    +{}
    +
     

    StatefulSet/Deployment additional labels

    +
    vmstorage.extraSecretMounts list
    -[]
    +      
    +[]
    +
     

    Extra secret mounts for vmstorage

    +
    vmstorage.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -2002,8 +2255,9 @@ json
    vmstorage.extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -2012,8 +2266,9 @@ json
    vmstorage.fullnameOverride string
    -null
    +      
    +null
    +
     

    Overrides the full name of vmstorage component

    @@ -2022,8 +2277,9 @@ null
    vmstorage.image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    @@ -2032,8 +2288,9 @@ IfNotPresent
    vmstorage.image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -2042,8 +2299,9 @@ IfNotPresent
    vmstorage.image.repository string
    -victoriametrics/vmstorage
    +      
    +victoriametrics/vmstorage
    +
     

    Image repository

    @@ -2052,8 +2310,9 @@ victoriametrics/vmstorage
    vmstorage.image.tag string
    -""
    +      
    +""
    +
     

    Image tag override Chart.AppVersion

    @@ -2062,36 +2321,42 @@ victoriametrics/vmstorage
    vmstorage.image.variant string
    -cluster
    +      
    +cluster
    +
     

    Variant of the image to use. e.g. cluster, enterprise-cluster

    +
    vmstorage.initContainers list
    -[]
    +      
    +[]
    +
     

    Init containers for vmstorage

    +
    vmstorage.name string
    -vmstorage
    +      
    +vmstorage
    +
     

    vmstorage container name

    +

    VMStorage container name

    vmstorage.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    @@ -2100,8 +2365,9 @@ vmstorage
    vmstorage.persistentVolume.accessModes list
    -- ReadWriteOnce
    +      
    +- ReadWriteOnce
    +
     

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    @@ -2110,8 +2376,9 @@ vmstorage
    vmstorage.persistentVolume.annotations object
    -{}
    +      
    +{}
    +
     

    Persistent volume annotations

    @@ -2120,8 +2387,9 @@ vmstorage
    vmstorage.persistentVolume.enabled bool
    -true
    +      
    +true
    +
     

    Create/use Persistent Volume Claim for vmstorage component. Empty dir if false. If true, vmstorage will create/use a Persistent Volume Claim

    @@ -2130,8 +2398,9 @@ true
    vmstorage.persistentVolume.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. Requires vmstorage.persistentVolume.enabled: true. If defined, PVC must be created manually before volume will be bound

    @@ -2140,8 +2409,9 @@ true
    vmstorage.persistentVolume.labels object
    -{}
    +      
    +{}
    +
     

    Persistent volume labels

    @@ -2150,8 +2420,9 @@ true
    vmstorage.persistentVolume.mountPath string
    -/storage
    +      
    +/storage
    +
     

    Data root path. Vmstorage data Persistent Volume mount root path

    @@ -2160,8 +2431,9 @@ true
    vmstorage.persistentVolume.name string
    -vmstorage-volume
    +      
    +vmstorage-volume
    +
     
    vmstorage.persistentVolume.size string
    -8Gi
    +      
    +8Gi
    +
     

    Size of the volume.

    @@ -2179,8 +2452,9 @@ vmstorage-volume
    vmstorage.persistentVolume.storageClassName string
    -""
    +      
    +""
    +
     

    Storage class name. Will be empty if not setted

    @@ -2189,8 +2463,9 @@ vmstorage-volume
    vmstorage.persistentVolume.subPath string
    -""
    +      
    +""
    +
     

    Mount subpath

    @@ -2199,8 +2474,9 @@ vmstorage-volume
    vmstorage.podAnnotations object
    -{}
    +      
    +{}
    +
     

    Pod’s annotations

    @@ -2209,9 +2485,10 @@ vmstorage-volume
    vmstorage.podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    @@ -2220,93 +2497,128 @@ labels: {}
    vmstorage.podLabels object
    -{}
    +      
    +{}
    +
     

    Pod’s additional labels

    +
    vmstorage.podManagementPolicy string
    -OrderedReady
    +      
    +OrderedReady
    +
     

    Deploy order policy for StatefulSet pods

    vmstorage.podSecurityContext.enabledbool
    -false
    +      
    vmstorage.podSecurityContextobject
    +enabled: false
    +
     

    Pod’s security context. Details are here

    +
    vmstorage.ports.name string
    -http
    +      
    +http
    +
     

    VMStorage http port name

    +
    vmstorage.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    +
    vmstorage.probeobject
    +liveness:
    +    failureThreshold: 10
    +    initialDelaySeconds: 30
    +    periodSeconds: 30
    +    tcpSocket: {}
    +    timeoutSeconds: 5
    +readiness:
    +    failureThreshold: 3
    +    httpGet: {}
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    timeoutSeconds: 5
    +startup: {}
    +
    +
    +

    Readiness & Liveness probes

    vmstorage.probe.liveness object
    -failureThreshold: 10
    +      
    +failureThreshold: 10
     initialDelaySeconds: 30
     periodSeconds: 30
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    vmstorage liveness probe

    +

    VMStorage liveness probe

    vmstorage.probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    vmstorage readiness probe

    +

    VMStorage readiness probe

    vmstorage.probe.startup object
    -{}
    +      
    +{}
    +
     

    vmstorage startup probe

    +

    VMStorage startup probe

    vmstorage.replicaCount int
    -2
    +      
    +2
    +
     

    Count of vmstorage pods

    @@ -2315,8 +2627,9 @@ timeoutSeconds: 5
    vmstorage.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    @@ -2325,18 +2638,31 @@ timeoutSeconds: 5
    vmstorage.retentionPeriod int
    -1
    +      
    +1
    +
     

    Data retention period. Supported values 1w, 1d, number without measurement means month, e.g. 2 = 2month

    +
    vmstorage.schedulerNamestring
    +""
    +
    +
    +

    Use an alternate scheduler, e.g. “stork”. Check here for details

    vmstorage.securityContext object
    -enabled: false
    +      
    +enabled: false
    +
     

    Pod’s security context. Details are here

    @@ -2345,8 +2671,9 @@ enabled: false
    vmstorage.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    @@ -2355,17 +2682,20 @@ enabled: false
    vmstorage.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    vmstorage.service.extraPorts list
    -[]
    +      
    +[]
    +
     

    Extra service ports

    @@ -2374,35 +2704,42 @@ enabled: false
    vmstorage.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    vmstorage.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    vmstorage.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    vmstorage.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    @@ -2411,8 +2748,9 @@ enabled: false
    vmstorage.service.servicePort int
    -8482
    +      
    +8482
    +
     

    Service port

    @@ -2421,8 +2759,9 @@ enabled: false
    vmstorage.service.vminsertPort int
    -8400
    +      
    +8400
    +
     

    Port for accepting connections from vminsert

    @@ -2431,8 +2770,9 @@ enabled: false
    vmstorage.service.vmselectPort int
    -8401
    +      
    +8401
    +
     

    Port for accepting connections from vmselect

    @@ -2441,8 +2781,9 @@ enabled: false
    vmstorage.serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -2451,8 +2792,9 @@ enabled: false
    vmstorage.serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -2461,8 +2803,9 @@ enabled: false
    vmstorage.serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for vmstorage component. This is Prometheus operator object

    @@ -2471,8 +2814,9 @@ false
    vmstorage.serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -2481,8 +2825,9 @@ false
    vmstorage.serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -2491,8 +2836,9 @@ false
    vmstorage.serviceMonitor.namespace string
    -""
    +      
    +""
    +
     

    Target namespace of ServiceMonitor manifest

    @@ -2501,8 +2847,9 @@ false
    vmstorage.serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -2511,8 +2858,9 @@ false
    vmstorage.terminationGracePeriodSeconds int
    -60
    +      
    +60
    +
     

    Pod’s termination grace period in seconds

    @@ -2521,18 +2869,20 @@ false
    vmstorage.tolerations list
    -[]
    +      
    +[]
    +
     

    Array of tolerations object. Node tolerations for server scheduling to nodes with taints. Details are here #

    +

    Array of tolerations object. Node tolerations for server scheduling to nodes with taints. Details are here

    vmstorage.topologySpreadConstraints list
    -[]
    +      
    +[]
    +
     

    Pod topologySpreadConstraints

    @@ -2541,259 +2891,295 @@ false
    vmstorage.vmbackupmanager.destination string
    -""
    +      
    +""
    +
     

    backup destination at S3, GCS or local filesystem. Pod name will be included to path!

    +

    Backup destination at S3, GCS or local filesystem. Pod name will be included to path!

    vmstorage.vmbackupmanager.disableDaily bool
    -false
    +      
    +false
    +
     

    disable daily backups

    +

    Disable daily backups

    vmstorage.vmbackupmanager.disableHourly bool
    -false
    +      
    +false
    +
     

    disable hourly backups

    +

    Disable hourly backups

    vmstorage.vmbackupmanager.disableMonthly bool
    -false
    +      
    +false
    +
     

    disable monthly backups

    +

    Disable monthly backups

    vmstorage.vmbackupmanager.disableWeekly bool
    -false
    +      
    +false
    +
     

    disable weekly backups

    +

    Disable weekly backups

    vmstorage.vmbackupmanager.enabled bool
    -false
    +      
    +false
    +
     

    enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

    +

    Enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

    vmstorage.vmbackupmanager.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details

    vmstorage.vmbackupmanager.extraArgs."envflag.enable"string
    -"true"
    +      
    vmstorage.vmbackupmanager.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    vmstorage.vmbackupmanager.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for container of component

    vmstorage.vmbackupmanager.extraArgs.loggerFormatstring
    -json
    -
    -
    vmstorage.vmbackupmanager.extraSecretMounts list
    -[]
    +      
    +[]
    +
     

    Extra secret mounts for vmbackupmanager

    +
    vmstorage.vmbackupmanager.image.registry string
    -""
    +      
    +""
    +
     

    vmbackupmanager image registry

    +

    VMBackupManager image registry

    vmstorage.vmbackupmanager.image.repository string
    -victoriametrics/vmbackupmanager
    +      
    +victoriametrics/vmbackupmanager
    +
     

    vmbackupmanager image repository

    +

    VMBackupManager image repository

    vmstorage.vmbackupmanager.image.tag string
    -""
    +      
    +""
    +
     

    vmbackupmanager image tag override Chart.AppVersion

    +

    VMBackupManager image tag override Chart.AppVersion

    vmstorage.vmbackupmanager.image.variant string
    -cluster
    +      
    +cluster
    +
     

    Variant of the image tag to use. e.g. enterprise.

    +
    vmstorage.vmbackupmanager.probeobject
    +liveness:
    +    failureThreshold: 10
    +    initialDelaySeconds: 30
    +    periodSeconds: 30
    +    tcpSocket:
    +        port: manager-http
    +    timeoutSeconds: 5
    +readiness:
    +    failureThreshold: 3
    +    httpGet:
    +        port: manager-http
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    timeoutSeconds: 5
    +startup: {}
    +
    +
    +

    Readiness & Liveness probes

    +
    vmstorage.vmbackupmanager.probe.liveness object
    -failureThreshold: 10
    +      
    +failureThreshold: 10
     initialDelaySeconds: 30
     periodSeconds: 30
     tcpSocket:
         port: manager-http
     timeoutSeconds: 5
    +
     

    vmbackupmanager liveness probe

    +

    VMBackupManager liveness probe

    vmstorage.vmbackupmanager.probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet:
         port: manager-http
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    vmbackupmanager readiness probe

    +

    VMBackupManager readiness probe

    vmstorage.vmbackupmanager.probe.startup object
    -{}
    +      
    +{}
    +
     

    vmbackupmanager startup probe

    +

    VMBackupManager startup probe

    vmstorage.vmbackupmanager.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    +
    vmstorage.vmbackupmanager.restore object
    -onStart:
    +      
    +onStart:
         enabled: false
    +
     

    Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager#restore-commands

    +

    Allows to enable restore options for pod. Check here for details

    vmstorage.vmbackupmanager.retention object
    -keepLastDaily: 2
    +      
    +keepLastDaily: 2
     keepLastHourly: 2
     keepLastMonthly: 2
     keepLastWeekly: 2
    +
     

    backups’ retention settings

    +

    Backups’ retention settings

    vmstorage.vmbackupmanager.retention.keepLastDaily int
    -2
    +      
    +2
    +
     

    keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

    +

    Keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

    vmstorage.vmbackupmanager.retention.keepLastHourly int
    -2
    +      
    +2
    +
     

    keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

    +

    Keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

    vmstorage.vmbackupmanager.retention.keepLastMonthly int
    -2
    +      
    +2
    +
     

    keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

    +

    Keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

    vmstorage.vmbackupmanager.retention.keepLastWeekly int
    -2
    +      
    +2
    +
     

    keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

    +

    Keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

    +
    - - - - + + + + - - - - - - - - - - - - + + + + + + - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/helm/victoria-metrics-distributed/img/victoriametrics-distributed-topology.webp b/docs/helm/victoria-metrics-distributed/img/victoriametrics-distributed-topology.webp new file mode 100644 index 0000000000000000000000000000000000000000..06ecb2696ddbde60cdeda5097e445e6b99edee87 GIT binary patch literal 73166 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 Q)0RgVU6yOXzyJUM0CVH4r~m)} literal 0 HcmV?d00001 diff --git a/docs/helm/victoria-metrics-gateway/README.md b/docs/helm/victoria-metrics-gateway/README.md index ade7b31540..76b5a48639 100644 --- a/docs/helm/victoria-metrics-gateway/README.md +++ b/docs/helm/victoria-metrics-gateway/README.md @@ -185,19 +185,20 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-gateway/values.yaml`` file. -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    availabilityZoneslist
    -- allowIngest: true
    -  allowQuery: true
    -  extraAffinity: {}
    -  name: zone-eu-1
    -  nodeSelector:
    -    topology.kubernetes.io/zone: zone-eu-1
    -  topologySpreadConstraints:
    -    - maxSkew: 1
    -      topologyKey: kubernetes.io/hostname
    -      whenUnsatisfiable: ScheduleAnyway
    -  vmagent:
    -    annotations: {}
    -    enabled: true
    -    name: ""
    -    spec: {}
    -  vmauthCrossAZQuery:
    -    enabled: true
    -    name: ""
    -    spec: {}
    -  vmauthIngest:
    -    enabled: true
    -    name: ""
    -    spec:
    -        extraArgs:
    -            discoverBackendIPs: "true"
    -  vmauthQueryPerZone:
    -    enabled: true
    -    name: ""
    -    spec:
    -        extraArgs:
    -            discoverBackendIPs: "true"
    -  vmcluster:
    -    enabled: true
    -    name: ""
    -    spec:
    -        replicationFactor: 2
    -        retentionPeriod: "14"
    -        vminsert:
    -            extraArgs: {}
    -            replicaCount: 2
    -            resources: {}
    -        vmselect:
    -            extraArgs: {}
    -            replicaCount: 2
    -            resources: {}
    -        vmstorage:
    -            replicaCount: 2
    -            resources: {}
    -            storageDataPath: /vm-data
    -- allowIngest: true
    -  allowQuery: true
    -  extraAffinity: {}
    -  name: zone-us-1
    -  nodeSelector:
    -    topology.kubernetes.io/zone: zone-us-1
    -  topologySpreadConstraints:
    -    - maxSkew: 1
    -      topologyKey: kubernetes.io/hostname
    -      whenUnsatisfiable: ScheduleAnyway
    -  vmagent:
    -    annotations: {}
    -    enabled: true
    -    name: ""
    -    spec: {}
    -  vmauthCrossAZQuery:
    -    enabled: true
    -    name: ""
    -    spec: {}
    -  vmauthIngest:
    -    enabled: true
    -    name: ""
    -    spec:
    -        extraArgs:
    -            discoverBackendIPs: "true"
    -  vmauthQueryPerZone:
    -    enabled: true
    -    name: ""
    -    spec:
    -        extraArgs:
    -            discoverBackendIPs: "true"
    -  vmcluster:
    -    enabled: true
    -    name: ""
    -    spec:
    -        replicationFactor: 2
    -        retentionPeriod: "14"
    -        vminsert:
    -            extraArgs: {}
    -            replicaCount: 2
    -            resources: {}
    -        vmselect:
    -            extraArgs: {}
    -            replicaCount: 2
    -            resources: {}
    -        vmstorage:
    -            replicaCount: 2
    -            resources: {}
    -            storageDataPath: /vm-data
    -
    -

    config per availability zone components, including vmagent, vmcluster, vmauth etc

    -
    availabilityZones[0].allowIngest bool
    -true
    +      
    +true
    +
     

    allow data ingestion to this zone

    +

    Allow data ingestion to this zone

    availabilityZones[0].allowQuery bool
    -true
    +      
    +true
    +
     

    allow data query from this zone through global query endpoint

    +

    Allow data query from this zone through global query endpoint

    availabilityZones[0].extraAffinity object
    -{}
    +      
    +{}
    +
     

    extraAffinity adds user defined custom affinity rules

    +

    Extra affinity adds user defined custom affinity rules

    +
    availabilityZones[0].namestring
    +zone-eu-1
    +
    +
    +

    Availability zone name

    availabilityZones[0].nodeSelector object
    -topology.kubernetes.io/zone: zone-eu-1
    +      
    +topology.kubernetes.io/zone: zone-eu-1
    +
     

    nodeselector to restrict where pods of this zone can be placed. usually provided by cloud providers.

    +

    Node selector to restrict where pods of this zone can be placed. usually provided by cloud providers.

    availabilityZones[0].topologySpreadConstraints list
    -- maxSkew: 1
    +      
    +- maxSkew: 1
       topologyKey: kubernetes.io/hostname
       whenUnsatisfiable: ScheduleAnyway
    +
     

    topologySpreadConstraints allows to customize the default topologySpreadConstraints.

    +

    Topology spread constraints allows to customize the default topologySpreadConstraints.

    availabilityZones[0].vmagent object
    -annotations: {}
    +      
    +annotations: {}
     enabled: true
     name: ""
     spec: {}
    +
     

    vmagent here only meant to proxy write requests to each az, doesn’t support customized other remote write address.

    +

    VMAgent here only meant to proxy write requests to each az, doesn’t support customized other remote write address.

    availabilityZones[0].vmauthCrossAZQueryavailabilityZones[0].vmagent.annotations object
    -enabled: true
    -name: ""
    -spec: {}
    +      
    +{}
    +
     

    set up a vmauth with all the zone with allowQuery: true as query backends

    +

    VMAgent annotations

    +
    availabilityZones[0].vmagent.namestring
    +""
    +
    +
    +

    Override the name of the vmagent object

    +
    availabilityZones[0].vmagent.specobject
    +{}
    +
    +
    +

    VMAgent spec. More options can be found here

    +
    availabilityZones[0].vmauthCrossAZQuery.enabledbool
    +true
    +
    +
    +

    Create a vmauth with all the zone with allowQuery: true as query backends

    +
    availabilityZones[0].vmauthCrossAZQuery.namestring
    +""
    +
    +
    +

    Override the name of the vmauth object

    +
    availabilityZones[0].vmauthCrossAZQuery.specobject
    +{}
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    availabilityZones[0].vmauthIngest.enabledbool
    +true
    +
    +
    +

    Create vmauth as a local write endpoint

    availabilityZones[0].vmauthIngest.name string
    -""
    +      
    +""
    +
     

    override the name of the vmauth object

    +

    Override the name of the vmauth object

    availabilityZones[0].vmauthIngest.specobject
    +extraArgs:
    +    discoverBackendIPs: "true"
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    availabilityZones[0].vmauthQueryPerZone.enabledbool
    +true
    +
    +
    +

    Create vmauth as a local read endpoint

    +
    availabilityZones[0].vmauthQueryPerZone.namestring
    +""
    +
    +
    +

    Override the name of the vmauth object

    +
    availabilityZones[0].vmauthQueryPerZone.specobject
    +extraArgs:
    +    discoverBackendIPs: "true"
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    availabilityZones[0].vmcluster.enabledbool
    +true
    +
    +
    +
    availabilityZones[0].vmcluster.name string
    -""
    +      
    +""
    +
     

    override the name of the vmcluster, by default is vmcluster-

    +

    Override the name of the vmcluster, by default is vmcluster-

    availabilityZones[0].vmcluster.spec object
    -replicationFactor: 2
    +      
    +replicationFactor: 2
     retentionPeriod: "14"
     vminsert:
         extraArgs: {}
    @@ -461,91 +494,254 @@ vmstorage:
         replicaCount: 2
         resources: {}
         storageDataPath: /vm-data
    +
     

    spec for VMCluster crd, see https://docs.victoriametrics.com/operator/api#vmclusterspec

    +

    Spec for VMCluster CRD, see here

    availabilityZones[1].allowIngest bool
    -true
    +      
    +true
    +
     

    allow data ingestion to this zone

    +

    Allow data ingestion to this zone

    availabilityZones[1].allowQuery bool
    -true
    +      
    +true
    +
     

    allow data query from this zone through global query endpoint

    +

    Allow data query from this zone through global query endpoint

    availabilityZones[1].extraAffinity object
    -{}
    +      
    +{}
    +
     

    extraAffinity adds user defined custom affinity rules

    +

    Extra affinity adds user defined custom affinity rules

    +
    availabilityZones[1].namestring
    +zone-us-1
    +
    +
    +

    Availability zone name

    availabilityZones[1].nodeSelector object
    -topology.kubernetes.io/zone: zone-us-1
    +      
    +topology.kubernetes.io/zone: zone-us-1
    +
     

    nodeselector to restrict where pods of this zone can be placed. usually provided by cloud providers.

    +

    Node selector to restrict where pods of this zone can be placed. usually provided by cloud providers.

    availabilityZones[1].topologySpreadConstraints list
    -- maxSkew: 1
    +      
    +- maxSkew: 1
       topologyKey: kubernetes.io/hostname
       whenUnsatisfiable: ScheduleAnyway
    +
     

    topologySpreadConstraints allows to customize the default topologySpreadConstraints.

    +

    Topology spread constraints allows to customize the default topologySpreadConstraints.

    availabilityZones[1].vmagent object
    -annotations: {}
    +      
    +annotations: {}
     enabled: true
     name: ""
     spec: {}
    +
     

    vmagent only meant to proxy write requests to each az, doesn’t support customized remote write address

    +

    VMAgent only meant to proxy write requests to each az, doesn’t support customized remote write address

    availabilityZones[1].vmagent.annotationsobject
    +{}
    +
    +
    +

    VMAgent annotations

    +
    availabilityZones[1].vmagent.namestring
    +""
    +
    +
    +

    Override the name of the vmagent object

    +
    availabilityZones[1].vmagent.specobject
    +{}
    +
    +
    +

    VMAgent spec. More options can be found here

    +
    availabilityZones[1].vmauthCrossAZQuery.enabledbool
    +true
    +
    +
    +

    Create a vmauth with all the zone with allowQuery: true as query backends

    +
    availabilityZones[1].vmauthCrossAZQuery.namestring
    +""
    +
    +
    +

    Override the name of the vmauth object

    +
    availabilityZones[1].vmauthCrossAZQuery.specobject
    +{}
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    availabilityZones[1].vmauthIngest.enabledbool
    +true
    +
    +
    +

    Create vmauth as a local write endpoint

    +
    availabilityZones[1].vmauthIngest.namestring
    +""
    +
    +
    +

    Override the name of the vmauth object

    +
    availabilityZones[1].vmauthIngest.specobject
    +extraArgs:
    +    discoverBackendIPs: "true"
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    availabilityZones[1].vmauthQueryPerZone.enabledbool
    +true
    +
    +
    +

    Create vmauth as a local read endpoint

    +
    availabilityZones[1].vmauthQueryPerZone.namestring
    +""
    +
    +
    +

    Override the name of the vmauth object

    +
    availabilityZones[1].vmauthQueryPerZone.specobject
    +extraArgs:
    +    discoverBackendIPs: "true"
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    availabilityZones[1].vmcluster.enabledbool
    +true
    +
    +
    +
    availabilityZones[1].vmcluster.name string
    -""
    +      
    +""
    +
     

    override the name of the vmcluster, by default is vmcluster-

    +

    Override the name of the vmcluster, by default is vmcluster-

    availabilityZones[1].vmcluster.spec object
    -replicationFactor: 2
    +      
    +replicationFactor: 2
     retentionPeriod: "14"
     vminsert:
         extraArgs: {}
    @@ -559,59 +755,64 @@ vmstorage:
         replicaCount: 2
         resources: {}
         storageDataPath: /vm-data
    +
     

    spec for VMCluster crd, see https://docs.victoriametrics.com/operator/api#vmclusterspec

    +

    Spec for VMCluster CRD, see here

    enableMultitenancy bool
    -false
    +      
    +false
    +
     

    enable multitenancy mode see https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-distributed#how-to-use-multitenancy

    +

    Enable multitenancy mode see here

    extraVMAgent object
    -enabled: true
    +      
    +enabled: true
     name: test-vmagent
     spec:
         selectAllByDefault: true
    +
     

    set up an extra vmagent to scrape all the scrape objects by default, and write data to above vmauth-global-ingest endpoint.

    +

    Set up an extra vmagent to scrape all the scrape objects by default, and write data to above vmauth-global-ingest endpoint.

    fullnameOverride string
    -""
    +      
    +""
    +
     

    overrides the chart’s computed fullname.

    +

    Overrides the chart’s computed fullname.

    nameOverride string
    -vm-distributed
    +      
    +vm-distributed
    +
     

    overrides the chart’s name

    +

    Overrides the chart’s name

    victoria-metrics-k8s-stack object
    -alertmanager:
    +      
    +alertmanager:
         enabled: false
     crds:
         enabled: true
    @@ -631,33 +832,76 @@ vmcluster:
         enabled: false
     vmsingle:
         enabled: false
    +
     

    set up vm operator and other resources like vmalert, grafana if needed

    +

    Set up vm operator and other resources like vmalert, grafana if needed

    vmauthIngestGlobalobject
    -enabled: true
    -name: ""
    -spec: {}
    +      
    vmauthIngestGlobal.enabledbool
    +true
    +
     

    set up a vmauth as the global write entrypoint

    +

    Create a vmauth as the global write entrypoint

    vmauthQueryGlobalobject
    -enabled: true
    -name: ""
    -spec: {}
    +      
    vmauthIngestGlobal.namestring
    +""
    +
     

    set up a vmauth as the global read entrypoint

    +

    Override the name of the vmauth object

    +
    vmauthIngestGlobal.specobject
    +{}
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    vmauthQueryGlobal.enabledbool
    +true
    +
    +
    +

    Create vmauth as the global read entrypoint

    +
    vmauthQueryGlobal.namestring
    +""
    +
    +
    +

    Override the name of the vmauth object

    +
    vmauthQueryGlobal.specobject
    +{}
    +
    +
    +

    VMAuth spec. More options can be found here

    +
    - - - - + + + + - - - - - - - - - - + - - - - + - - - + + - - - - - - - - - - - - - - - + - - - - - + - - - + + - + - - + - - + - - - - - - + - - + - - + - - + - - + - - + + + + + + + - - - - + - - - - - - - - + - - - - - - - - + + - + - - - - - - - - - - - - - - - - - + - - + - - + - - + + + + + + + - - + + + + + + + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    affinity object
    -{}
    +      
    +{}
    +
     

    Affinity configurations

    @@ -206,8 +207,9 @@ Change the values according to the need of the environment in ``victoria-metrics
    annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to the deployment

    @@ -216,18 +218,20 @@ Change the values according to the need of the environment in ``victoria-metrics
    auth object
    -enabled: false
    +      
    +enabled: false
    +
     

    Access Control configuration. https://docs.victoriametrics.com/vmgateway#access-control

    +

    Access Control configuration. Check here for details

    auth.enabled bool
    -false
    +      
    +false
    +
     

    Enable/Disable access-control

    @@ -236,8 +240,9 @@ false
    clusterMode bool
    -false
    +      
    +false
    +
     

    Specify to True if the source for rate-limiting, reading and writing as a VictoriaMetrics Cluster. Must be true for rate limiting

    @@ -246,82 +251,77 @@ false
    configMap string
    -""
    +      
    +""
    +
     

    Use existing configmap if specified otherwise .config values will be used. Ref: https://docs.victoriametrics.com/vmgateway

    +

    Use existing configmap if specified otherwise .config values will be used. Check here for details

    containerWorkingDir string
    -/
    +      
    +/
    +
     

    Container working directory

    +
    env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for details.

    envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    extraArgs."envflag.enable"string
    -"true"
    +      
    extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for container of component

    extraArgs.loggerFormatstring
    -json
    -
    -
    extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with vmgateway

    +
    extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -330,8 +330,9 @@ json
    extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -340,8 +341,9 @@ json
    extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -350,44 +352,54 @@ json
    fullnameOverride string
    -""
    +      
    +""
    +
     

    Full name prefix

    +
    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Pull policy of Docker image

    @@ -396,8 +408,9 @@ IfNotPresent
    image.registry string
    -""
    +      
    +""
    +
     

    Victoria Metrics gateway Docker registry

    @@ -406,8 +419,9 @@ IfNotPresent
    image.repository string
    -victoriametrics/vmgateway
    +      
    +victoriametrics/vmgateway
    +
     

    Victoria Metrics gateway Docker repository and image name

    @@ -416,8 +430,9 @@ victoriametrics/vmgateway
    image.tag string
    -""
    +      
    +""
    +
     

    Tag of Docker image override Chart.AppVersion

    @@ -426,94 +441,122 @@ victoriametrics/vmgateway
    image.variant string
    -""
    +      
    +""
    +
     

    Variant of the image to use. e.g. enterprise, enterprise-scratch

    +
    imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    +
    ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    +
    ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    +

    Ingress path type

    ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

    license.key string
    -""
    +      
    +""
    +
     

    License key

    @@ -522,9 +565,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key

    @@ -533,8 +577,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -543,8 +588,9 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    @@ -553,27 +599,31 @@ name: ""
    nameOverride string
    -""
    +      
    +""
    +
     

    Full name suffix

    +
    nodeSelector object
    -{}
    +      
    +{}
    +
     

    NodeSelector configurations. Ref: https://kubernetes.io/docs/user-guide/node-selection/

    +

    NodeSelector configurations. Check here for details

    podAnnotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to pod

    @@ -582,76 +632,84 @@ name: ""
    podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

    +

    See kubectl explain poddisruptionbudget.spec for more. Check here for details

    podSecurityContext.enabledbool
    -true
    +      
    podSecurityContextobject
    +enabled: true
    +
     

    Pod’s security context. Details are here

    +
    probe.liveness object
    -initialDelaySeconds: 5
    +      
    +initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket: {}
     timeoutSeconds: 5
    +
     

    liveness probe

    +

    Liveness probe

    probe.readiness object
    -httpGet: {}
    +      
    +httpGet: {}
     initialDelaySeconds: 5
     periodSeconds: 15
    +
     

    readiness probe

    +

    Readiness probe

    probe.startup object
    -{}
    +      
    +{}
    +
     

    startup probe

    +

    Startup probe

    rateLimiter object
    -config: {}
    +      
    +config: {}
     datasource:
         url: ""
     enabled: false
    +
     

    Rate limiter configuration. Docs https://docs.victoriametrics.com/vmgateway#rate-limiter

    +

    Rate limiter configuration. Docs are here

    rateLimiter.datasource.url string
    -""
    +      
    +""
    +
     

    Datasource VictoriaMetrics or vmselects. Required. Example http://victoroametrics:8428 or http://vmselect:8481/select/0/prometheus

    @@ -660,8 +718,9 @@ enabled: false
    rateLimiter.enabled bool
    -false
    +      
    +false
    +
     

    Enable/Disable rate-limiting

    @@ -670,8 +729,9 @@ false
    read.url string
    -""
    +      
    +""
    +
     

    Read endpoint without suffixes, victoriametrics or vmselect. Example http://victoroametrics:8428 or http://vmselect:8481

    @@ -680,8 +740,9 @@ false
    replicaCount int
    -1
    +      
    +1
    +
     

    Number of replicas of vmgateway

    @@ -690,8 +751,9 @@ false
    resources object
    -{}
    +      
    +{}
    +
     

    We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. If you do want to specify resources, uncomment the following lines, adjust them as necessary, and remove the curly braces after ‘resources:’.

    @@ -700,120 +762,166 @@ false
    securityContext object
    -enabled: true
    +      
    +enabled: true
     runAsGroup: 1000
     runAsNonRoot: true
     runAsUser: 1000
    +
     

    Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

    +

    Pod security context. Check here for details

    service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    +
    service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    +
    service.enabled bool
    -true
    +      
    +true
    +
     

    Enabled vmgateway service

    +
    service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service external IPs. Check here for details

    +
    service.externalTrafficPolicystring
    +""
    +
    +
    +

    Service external traffic policy. Check here for details

    +
    service.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service labels

    +
    service.healthCheckNodePortstring
    +""
    +
    +
    +

    Health check node port for a service. Check here for details

    +
    service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    +
    service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    +
    service.servicePort int
    -8431
    +      
    +8431
    +
     

    Service port

    +
    service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    +
    serviceAccount.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to add to the service account

    @@ -822,8 +930,9 @@ ClusterIP
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -832,8 +941,9 @@ true
    serviceAccount.name string
    -null
    +      
    +null
    +
     

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    @@ -842,8 +952,9 @@ null
    serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -852,8 +963,9 @@ null
    serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -862,8 +974,9 @@ null
    serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    @@ -872,8 +985,9 @@ false
    serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -882,8 +996,9 @@ false
    serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -892,8 +1007,9 @@ false
    serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -902,18 +1018,20 @@ false
    tolerations list
    -[]
    +      
    +[]
    +
     

    Tolerations configurations. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

    +

    Tolerations configurations. Check here for details

    write.url string
    -""
    +      
    +""
    +
     

    Write endpoint without suffixes, victoriametrics or vminsert. Example http://victoroametrics:8428 or http://vminsert:8480

    diff --git a/docs/helm/victoria-metrics-k8s-stack/README.md b/docs/helm/victoria-metrics-k8s-stack/README.md index d95202e0d7..a501c56701 100644 --- a/docs/helm/victoria-metrics-k8s-stack/README.md +++ b/docs/helm/victoria-metrics-k8s-stack/README.md @@ -24,7 +24,7 @@ To enable metrics collection for kubernetes this chart installs multiple scrape This chart also installs bunch of dashboards and recording rules from [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) project. -![Overview](img/k8s-stack-overview.png) +![Overview](img/k8s-stack-overview.webp) ## Configuration @@ -388,61 +388,68 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-k8s-stack/values.yaml`` file. - +
    - - - - + + + + - - + - - + - - - - + - - - - - + + - + + + + + + + - - - - - - - - - - + - - + - - + - - - + + - + - - + - - - - - + + - + - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - + + - - - - - - - - - - + - - - - - - - - - + - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - + - - - - + - - + - - + - - + - - - + + - + - - + - - - - + - - + - - - + + - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - - + + - + - - + - - - - + - - + - - + - - + - - - + + - + - - + - - - - + - - + - - + - - + - - - + + - + - - + - - - - - + + - + - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - + - - - - - - - - - - - - - - - - - - - + - - + - - - - - - - - - - - - + - - + - - + - - + + + + + + - - + - - - - - - + - - + - - - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - - - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - -
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    additionalVictoriaMetricsMap string
    -null
    +      
    +null
    +
     

    Provide custom recording or alerting rules to be deployed into the cluster.

    +
    alertmanager.annotations object
    -{}
    +      
    +{}
    +
     

    Alertmanager annotations

    +
    alertmanager.config object
    -receivers:
    +      
    +receivers:
         - name: blackhole
     route:
         receiver: blackhole
     templates:
         - /etc/vm/configs/**/*.tmpl
    +
     

    alertmanager configuration

    +

    Alertmanager configuration

    alertmanager.enabled bool
    -true
    +      
    +true
    +
     

    Create VMAlertmanager CR

    +
    alertmanager.ingress object
    -annotations: {}
    +      
    +annotations: {}
     enabled: false
     extraPaths: []
     hosts:
    @@ -451,116 +458,144 @@ labels: {}
     path: '{{ .Values.alertmanager.spec.routePrefix | default "/" }}'
     pathType: Prefix
     tls: []
    +
     

    alertmanager ingress configuration

    +

    Alertmanager ingress configuration

    alertmanager.monzoTemplate.enabledbool
    -true
    +      
    alertmanager.ingress.extraPathslist
    +[]
    +
     

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +
    alertmanager.monzoTemplateobject
    +enabled: true
    +
    +
    +

    Better alert templates for slack source

    +
    alertmanager.spec object
    -configSecret: ""
    +      
    +configSecret: ""
     externalURL: ""
     image:
         tag: v0.25.0
     port: "9093"
     routePrefix: /
     selectAllByDefault: true
    +
     

    full spec for VMAlertmanager CRD. Allowed values described here

    +

    Full spec for VMAlertmanager CRD. Allowed values described here

    alertmanager.spec.configSecret string
    -""
    +      
    +""
    +
     

    if this one defined, it will be used for alertmanager configuration and config parameter will be ignored

    +

    If this one defined, it will be used for alertmanager configuration and config parameter will be ignored

    alertmanager.templateFiles object
    -{}
    +      
    +{}
    +
     

    extra alert templates

    +

    Extra alert templates

    argocdReleaseOverride string
    -""
    +      
    +""
    +
     

    For correct working need set value ‘argocdReleaseOverride=$ARGOCD_APP_NAME’

    +

    If this chart is used in “Argocd” with “releaseName” field then VMServiceScrapes couldn’t select the proper services. For correct working need set value ‘argocdReleaseOverride=$ARGOCD_APP_NAME’

    coreDns.enabled bool
    -true
    +      
    +true
    +
     

    Enabled CoreDNS metrics scraping

    +
    coreDns.service.enabled bool
    -true
    +      
    +true
    +
     

    Create service for CoreDNS metrics

    +
    coreDns.service.port int
    -9153
    +      
    +9153
    +
     

    CoreDNS service port

    +
    coreDns.service.selector.k8s-appstring
    -kube-dns
    +      
    coreDns.service.selectorobject
    +k8s-app: kube-dns
    +
     

    CoreDNS service pod selector

    +
    coreDns.service.targetPort int
    -9153
    +      
    +9153
    +
     

    CoreDNS service target port

    +
    coreDns.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: http-metrics
    @@ -568,27 +603,31 @@ spec:
         namespaceSelector:
             matchNames:
                 - kube-system
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    crds.enabledbool
    -true
    +      
    crdsobject
    +enabled: true
    +
     

    Install VM operator CRDs

    +
    dashboards object
    -node-exporter-full: true
    +      
    +node-exporter-full: true
     operator: false
     vmalert: false
    +
     

    Enable dashboards despite it’s dependency is not installed

    @@ -597,18 +636,20 @@ vmalert: false
    dashboards.node-exporter-full bool
    -true
    +      
    +true
    +
     

    in ArgoCD using client-side apply this dashboard reaches annotations size limit and causes k8s issues without server side apply See this issue

    +

    In ArgoCD using client-side apply this dashboard reaches annotations size limit and causes k8s issues without server side apply See this issue

    defaultDashboardsEnabled bool
    -true
    +      
    +true
    +
     

    Create default dashboards

    @@ -617,8 +658,8 @@ true
    defaultRules object
    -alerting:
    +      
    +alerting:
         spec:
             annotations: {}
             labels: {}
    @@ -746,6 +787,7 @@ rule:
             labels: {}
     rules: {}
     runbookUrl: https://runbooks.prometheus-operator.dev/runbooks
    +
     

    Create default rules for monitoring the cluster

    @@ -754,10 +796,11 @@ runbookUrl: https://runbooks.prometheus-operator.dev/runbooks
    defaultRules.alerting object
    -spec:
    +      
    +spec:
         annotations: {}
         labels: {}
    +
     

    Common properties for VMRules alerts

    @@ -766,8 +809,9 @@ spec:
    defaultRules.alerting.spec.annotations object
    -{}
    +      
    +{}
    +
     

    Additional annotations for VMRule alerts

    @@ -776,8 +820,9 @@ spec:
    defaultRules.alerting.spec.labels object
    -{}
    +      
    +{}
    +
     

    Additional labels for VMRule alerts

    @@ -786,8 +831,9 @@ spec:
    defaultRules.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations for default rules

    @@ -796,9 +842,10 @@ spec:
    defaultRules.group object
    -spec:
    +      
    +spec:
         params: {}
    +
     

    Common properties for VMRule groups

    @@ -807,18 +854,137 @@ spec:
    defaultRules.group.spec.params object
    -{}
    +      
    +{}
    +
     

    Optional HTTP URL parameters added to each rule request

    +
    defaultRules.groupsobject
    +alertmanager:
    +    create: true
    +    rules: {}
    +etcd:
    +    create: true
    +    rules: {}
    +general:
    +    create: true
    +    rules: {}
    +k8sContainerCpuUsageSecondsTotal:
    +    create: true
    +    rules: {}
    +k8sContainerMemoryCache:
    +    create: true
    +    rules: {}
    +k8sContainerMemoryRss:
    +    create: true
    +    rules: {}
    +k8sContainerMemorySwap:
    +    create: true
    +    rules: {}
    +k8sContainerMemoryWorkingSetBytes:
    +    create: true
    +    rules: {}
    +k8sContainerResource:
    +    create: true
    +    rules: {}
    +k8sPodOwner:
    +    create: true
    +    rules: {}
    +kubeApiserver:
    +    create: true
    +    rules: {}
    +kubeApiserverAvailability:
    +    create: true
    +    rules: {}
    +kubeApiserverBurnrate:
    +    create: true
    +    rules: {}
    +kubeApiserverHistogram:
    +    create: true
    +    rules: {}
    +kubeApiserverSlos:
    +    create: true
    +    rules: {}
    +kubePrometheusGeneral:
    +    create: true
    +    rules: {}
    +kubePrometheusNodeRecording:
    +    create: true
    +    rules: {}
    +kubeScheduler:
    +    create: true
    +    rules: {}
    +kubeStateMetrics:
    +    create: true
    +    rules: {}
    +kubelet:
    +    create: true
    +    rules: {}
    +kubernetesApps:
    +    create: true
    +    rules: {}
    +    targetNamespace: .*
    +kubernetesResources:
    +    create: true
    +    rules: {}
    +kubernetesStorage:
    +    create: true
    +    rules: {}
    +    targetNamespace: .*
    +kubernetesSystem:
    +    create: true
    +    rules: {}
    +kubernetesSystemApiserver:
    +    create: true
    +    rules: {}
    +kubernetesSystemControllerManager:
    +    create: true
    +    rules: {}
    +kubernetesSystemKubelet:
    +    create: true
    +    rules: {}
    +kubernetesSystemScheduler:
    +    create: true
    +    rules: {}
    +node:
    +    create: true
    +    rules: {}
    +nodeNetwork:
    +    create: true
    +    rules: {}
    +vmHealth:
    +    create: true
    +    rules: {}
    +vmagent:
    +    create: true
    +    rules: {}
    +vmcluster:
    +    create: true
    +    rules: {}
    +vmoperator:
    +    create: true
    +    rules: {}
    +vmsingle:
    +    create: true
    +    rules: {}
    +
    +
    +

    Rule group properties

    defaultRules.groups.etcd.rules object
    -{}
    +      
    +{}
    +
     

    Common properties for all rules in a group

    @@ -827,8 +993,9 @@ spec:
    defaultRules.labels object
    -{}
    +      
    +{}
    +
     

    Labels for default rules

    @@ -837,10 +1004,11 @@ spec:
    defaultRules.recording object
    -spec:
    +      
    +spec:
         annotations: {}
         labels: {}
    +
     

    Common properties for VMRules recording rules

    @@ -849,8 +1017,9 @@ spec:
    defaultRules.recording.spec.annotations object
    -{}
    +      
    +{}
    +
     

    Additional annotations for VMRule recording rules

    @@ -859,8 +1028,9 @@ spec:
    defaultRules.recording.spec.labels object
    -{}
    +      
    +{}
    +
     

    Additional labels for VMRule recording rules

    @@ -869,10 +1039,11 @@ spec:
    defaultRules.rule object
    -spec:
    +      
    +spec:
         annotations: {}
         labels: {}
    +
     

    Common properties for all VMRules

    @@ -881,8 +1052,9 @@ spec:
    defaultRules.rule.spec.annotations object
    -{}
    +      
    +{}
    +
     

    Additional annotations for all VMRules

    @@ -891,8 +1063,9 @@ spec:
    defaultRules.rule.spec.labels object
    -{}
    +      
    +{}
    +
     

    Additional labels for all VMRules

    @@ -901,8 +1074,9 @@ spec:
    defaultRules.rules object
    -{}
    +      
    +{}
    +
     

    Per rule properties

    @@ -911,8 +1085,9 @@ spec:
    defaultRules.runbookUrl string
    -https://runbooks.prometheus-operator.dev/runbooks
    +      
    +https://runbooks.prometheus-operator.dev/runbooks
    +
     

    Runbook url prefix for default rules

    @@ -921,36 +1096,34 @@ https://runbooks.prometheus-operator.dev/runbooks
    experimentalDashboardsEnabled bool
    -true
    +      
    +true
    +
     

    Create experimental dashboards

    externalVM.read.urlstring
    -""
    +      
    externalVMobject
    +read:
    +    url: ""
    +write:
    +    url: ""
    +
     
    externalVM.write.urlstring
    -""
    -
    +

    External VM read and write URLs

    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra objects dynamically to this chart

    @@ -959,294 +1132,166 @@ true
    fullnameOverride string
    -""
    +      
    +""
    +
     

    Resource full name prefix override

    +
    global.clusterLabel string
    -cluster
    +      
    +cluster
    +
     
    global.license.keystring
    -""
    -
    +

    Cluster label to use for dashboards and rules

    global.license.keyRefglobal.license object
    -{}
    +      
    +key: ""
    +keyRef: {}
    +
     

    Global license configuration

    +
    grafanaobject
    +additionalDataSources: []
    +defaultDashboardsTimezone: utc
    +defaultDatasourceType: prometheus
    +enabled: true
    +forceDeployDatasource: false
    +ingress:
    +    annotations: {}
    +    enabled: false
    +    extraPaths: []
    +    hosts:
    +        - grafana.domain.com
    +    labels: {}
    +    path: /
    +    pathType: Prefix
    +    tls: []
    +sidecar:
    +    dashboards:
    +        additionalDashboardAnnotations: {}
    +        additionalDashboardLabels: {}
    +        defaultFolderName: default
    +        enabled: true
    +        folder: /var/lib/grafana/dashboards
    +        multicluster: false
    +        provider:
    +            name: default
    +            orgid: 1
    +    datasources:
    +        createVMReplicasDatasources: false
    +        default:
    +            - isDefault: true
    +              name: VictoriaMetrics
    +            - isDefault: false
    +              name: VictoriaMetrics (DS)
    +              type: victoriametrics-datasource
    +        enabled: true
    +        initDatasources: true
    +vmScrape:
    +    enabled: true
    +    spec:
    +        endpoints:
    +            - port: '{{ .Values.grafana.service.portName }}'
    +        selector:
    +            matchLabels:
    +                app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
    +
    +
    +

    Grafana dependency chart configuration. For possible values refer here

    +
    grafana.additionalDataSources list
    -[]
    +      
    +[]
    +
     
    grafana.defaultDashboardsTimezonestring
    -utc
    -
    +

    Configure additional grafana datasources (passed through tpl). Check here for details

    grafana.defaultDatasourceTypestring
    -prometheus
    -
    -
    grafana.enabledbool
    -true
    -
    -
    grafana.forceDeployDatasource bool
    -false
    +      
    +false
    +
     
    grafana.ingress.annotationsobject
    -{}
    -
    +

    Create datasource configmap even if grafana deployment has been disabled

    grafana.ingress.enabledbool
    -false
    -
    -
    grafana.ingress.extraPaths list
    -[]
    +      
    +[]
    +
     
    grafana.ingress.hosts[0]string
    -grafana.domain.com
    -
    +

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    grafana.ingress.labelsobject
    -{}
    -
    -
    grafana.ingress.pathstring
    -/
    -
    -
    grafana.ingress.pathTypestring
    -Prefix
    -
    -
    grafana.ingress.tlslist
    -[]
    -
    -
    grafana.sidecar.dashboards.additionalDashboardAnnotationsobject
    -{}
    -
    -
    grafana.sidecar.dashboards.additionalDashboardLabelsobject
    -{}
    -
    -
    grafana.sidecar.dashboards.defaultFolderNamestring
    -default
    -
    -
    grafana.sidecar.dashboards.enabledbool
    -true
    -
    -
    grafana.sidecar.dashboards.folderstring
    -/var/lib/grafana/dashboards
    -
    -
    grafana.sidecar.dashboards.multiclusterbool
    -false
    -
    -
    grafana.sidecar.dashboards.provider.namestring
    -default
    -
    -
    grafana.sidecar.dashboards.provider.orgidint
    -1
    -
    -
    grafana.sidecar.datasources.createVMReplicasDatasourcesbool
    -false
    -
    -
    grafana.sidecar.datasources.default list
    -- isDefault: true
    +      
    +- isDefault: true
       name: VictoriaMetrics
     - isDefault: false
       name: VictoriaMetrics (DS)
       type: victoriametrics-datasource
    +
     

    list of default prometheus compatible datasource configurations. VM url will be added to each of them in templates and type will be set to defaultDatasourceType if not defined

    +

    List of default prometheus compatible datasource configurations. VM url will be added to each of them in templates and type will be set to defaultDatasourceType if not defined

    grafana.sidecar.datasources.enabledbool
    -true
    -
    -
    grafana.sidecar.datasources.initDatasourcesbool
    -true
    -
    -
    grafana.vmScrape object
    -enabled: true
    +      
    +enabled: true
     spec:
         endpoints:
             - port: '{{ .Values.grafana.service.portName }}'
         selector:
             matchLabels:
                 app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
    +
     

    grafana VM scrape config

    +

    Grafana VM scrape config

    grafana.vmScrape.spec object
    -endpoints:
    +      
    +endpoints:
         - port: '{{ .Values.grafana.service.portName }}'
     selector:
         matchLabels:
             app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
    +
     

    Scrape configuration for Grafana

    @@ -1255,31 +1300,48 @@ selector:
    grafanaOperatorDashboardsFormat object
    -allowCrossNamespaceImport: false
    +      
    +allowCrossNamespaceImport: false
     enabled: false
     instanceSelector:
         matchLabels:
             dashboards: grafana
    +
     

    Create dashboards as CRDs (reuqires grafana-operator to be installed)

    kube-state-metrics.enabledbool
    -true
    +      
    kube-state-metricsobject
    +enabled: true
    +vmScrape:
    +    enabled: true
    +    spec:
    +        endpoints:
    +            - honorLabels: true
    +              metricRelabelConfigs:
    +                - action: labeldrop
    +                  regex: (uid|container_id|image_id)
    +              port: http
    +        jobLabel: app.kubernetes.io/name
    +        selector:
    +            matchLabels:
    +                app.kubernetes.io/instance: '{{ include "vm.release" . }}'
    +                app.kubernetes.io/name: '{{ include "kube-state-metrics.name" (index .Subcharts "kube-state-metrics") }}'
    +
     

    kube-state-metrics dependency chart configuration. For possible values check here

    +
    kube-state-metrics.vmScrape object
    -enabled: true
    +      
    +enabled: true
     spec:
         endpoints:
             - honorLabels: true
    @@ -1292,6 +1354,7 @@ spec:
             matchLabels:
                 app.kubernetes.io/instance: '{{ include "vm.release" . }}'
                 app.kubernetes.io/name: '{{ include "kube-state-metrics.name" (index .Subcharts "kube-state-metrics") }}'
    +
     

    Scrape configuration for Kube State Metrics

    @@ -1300,17 +1363,19 @@ spec:
    kubeApiServer.enabled bool
    -true
    +      
    +true
    +
     

    Enable Kube Api Server metrics scraping

    +
    kubeApiServer.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: https
    @@ -1326,70 +1391,83 @@ spec:
             matchLabels:
                 component: apiserver
                 provider: kubernetes
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    kubeControllerManager.enabled bool
    -true
    +      
    +true
    +
     

    Enable kube controller manager metrics scraping

    +
    kubeControllerManager.endpoints list
    -[]
    +      
    +[]
    +
     

    If your kube controller manager is not deployed as a pod, specify IPs it can be found on

    +
    kubeControllerManager.service.enabled bool
    -true
    +      
    +true
    +
     

    Create service for kube controller manager metrics scraping

    +
    kubeControllerManager.service.port int
    -10257
    +      
    +10257
    +
     

    Kube controller manager service port

    +
    kubeControllerManager.service.selector.componentstring
    -kube-controller-manager
    +      
    kubeControllerManager.service.selectorobject
    +component: kube-controller-manager
    +
     

    Kube controller manager service pod selector

    +
    kubeControllerManager.service.targetPort int
    -10257
    +      
    +10257
    +
     

    Kube controller manager service target port

    +
    kubeControllerManager.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: http-metrics
    @@ -1401,79 +1479,66 @@ spec:
         namespaceSelector:
             matchNames:
                 - kube-system
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    kubeDns.enabled bool
    -false
    +      
    +false
    +
     

    Enabled KubeDNS metrics scraping

    +
    kubeDns.service.enabled bool
    -false
    +      
    +false
    +
     

    Create Service for KubeDNS metrics

    +
    kubeDns.service.ports.dnsmasq.portint
    -10054
    +      
    kubeDns.service.portsobject
    +dnsmasq:
    +    port: 10054
    +    targetPort: 10054
    +skydns:
    +    port: 10055
    +    targetPort: 10055
    +
     

    KubeDNS service ports

    +
    kubeDns.service.ports.dnsmasq.targetPortint
    -10054
    +      
    kubeDns.service.selectorobject
    +k8s-app: kube-dns
    +
     
    kubeDns.service.ports.skydns.portint
    -10055
    -
    +

    KubeDNS service pods selector

    kubeDns.service.ports.skydns.targetPortint
    -10055
    -
    -
    kubeDns.service.selector.k8s-appstring
    -kube-dns
    -
    -
    kubeDns.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: http-metrics-dnsmasq
    @@ -1483,70 +1548,83 @@ spec:
         namespaceSelector:
             matchNames:
                 - kube-system
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    kubeEtcd.enabled bool
    -true
    +      
    +true
    +
     

    Enabled KubeETCD metrics scraping

    +
    kubeEtcd.endpoints list
    -[]
    +      
    +[]
    +
     

    If your etcd is not deployed as a pod, specify IPs it can be found on

    +
    kubeEtcd.service.enabled bool
    -true
    +      
    +true
    +
     

    Enable service for ETCD metrics scraping

    +
    kubeEtcd.service.port int
    -2379
    +      
    +2379
    +
     

    ETCD service port

    +
    kubeEtcd.service.selector.componentstring
    -etcd
    +      
    kubeEtcd.service.selectorobject
    +component: etcd
    +
     

    ETCD service pods selector

    +
    kubeEtcd.service.targetPort int
    -2379
    +      
    +2379
    +
     

    ETCD service target port

    +
    kubeEtcd.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: http-metrics
    @@ -1557,70 +1635,83 @@ spec:
         namespaceSelector:
             matchNames:
                 - kube-system
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    kubeProxy.enabled bool
    -false
    +      
    +false
    +
     

    Enable kube proxy metrics scraping

    +
    kubeProxy.endpoints list
    -[]
    +      
    +[]
    +
     

    If your kube proxy is not deployed as a pod, specify IPs it can be found on

    +
    kubeProxy.service.enabled bool
    -true
    +      
    +true
    +
     

    Enable service for kube proxy metrics scraping

    +
    kubeProxy.service.port int
    -10249
    +      
    +10249
    +
     

    Kube proxy service port

    +
    kubeProxy.service.selector.k8s-appstring
    -kube-proxy
    +      
    kubeProxy.service.selectorobject
    +k8s-app: kube-proxy
    +
     

    Kube proxy service pod selector

    +
    kubeProxy.service.targetPort int
    -10249
    +      
    +10249
    +
     

    Kube proxy service target port

    +
    kubeProxy.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: http-metrics
    @@ -1631,70 +1722,83 @@ spec:
         namespaceSelector:
             matchNames:
                 - kube-system
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    kubeScheduler.enabled bool
    -true
    +      
    +true
    +
     

    Enable KubeScheduler metrics scraping

    +
    kubeScheduler.endpoints list
    -[]
    +      
    +[]
    +
     

    If your kube scheduler is not deployed as a pod, specify IPs it can be found on

    +
    kubeScheduler.service.enabled bool
    -true
    +      
    +true
    +
     

    Enable service for KubeScheduler metrics scrape

    +
    kubeScheduler.service.port int
    -10259
    +      
    +10259
    +
     

    KubeScheduler service port

    +
    kubeScheduler.service.selector.componentstring
    -kube-scheduler
    +      
    kubeScheduler.service.selectorobject
    +component: kube-scheduler
    +
     

    KubeScheduler service pod selector

    +
    kubeScheduler.service.targetPort int
    -10259
    +      
    +10259
    +
     

    KubeScheduler service target port

    +
    kubeScheduler.vmScrape object
    -spec:
    +      
    +spec:
         endpoints:
             - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
               port: http-metrics
    @@ -1705,25 +1809,68 @@ spec:
         namespaceSelector:
             matchNames:
                 - kube-system
    +
     

    spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

    +

    Spec for VMServiceScrape CRD is here

    kubelet.enabledbool
    -true
    +      
    kubeletobject
    +enabled: true
    +vmScrape:
    +    kind: VMNodeScrape
    +    spec:
    +        bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    +        honorLabels: true
    +        honorTimestamps: false
    +        interval: 30s
    +        metricRelabelConfigs:
    +            - action: labeldrop
    +              regex: (uid)
    +            - action: labeldrop
    +              regex: (id|name)
    +            - action: drop
    +              regex: (rest_client_request_duration_seconds_bucket|rest_client_request_duration_seconds_sum|rest_client_request_duration_seconds_count)
    +              source_labels:
    +                - __name__
    +        relabelConfigs:
    +            - action: labelmap
    +              regex: __meta_kubernetes_node_label_(.+)
    +            - sourceLabels:
    +                - __metrics_path__
    +              targetLabel: metrics_path
    +            - replacement: kubelet
    +              targetLabel: job
    +        scheme: https
    +        scrapeTimeout: 5s
    +        tlsConfig:
    +            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    +            insecureSkipVerify: true
    +vmScrapes:
    +    cadvisor:
    +        enabled: true
    +        spec:
    +            path: /metrics/cadvisor
    +    kubelet:
    +        spec: {}
    +    probes:
    +        enabled: true
    +        spec:
    +            path: /metrics/probes
    +
     

    Component scraping the kubelets

    +
    kubelet.vmScrape object
    -kind: VMNodeScrape
    +      
    +kind: VMNodeScrape
     spec:
         bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
         honorLabels: true
    @@ -1751,39 +1898,33 @@ spec:
         tlsConfig:
             caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
             insecureSkipVerify: true
    +
     

    spec for VMNodeScrape crd https://docs.victoriametrics.com/operator/api.html#vmnodescrapespec

    +

    Spec for VMNodeScrape CRD is here

    kubelet.vmScrapes.cadvisor object
    -enabled: true
    +      
    +enabled: true
     spec:
         path: /metrics/cadvisor
    +
     

    Enable scraping /metrics/cadvisor from kubelet’s service

    kubelet.vmScrapes.kubelet.specobject
    -{}
    -
    -
    kubelet.vmScrapes.probes object
    -enabled: true
    +      
    +enabled: true
     spec:
         path: /metrics/probes
    +
     

    Enable scraping /metrics/probes from kubelet’s service

    @@ -1792,53 +1933,50 @@ spec:
    nameOverride string
    -""
    +      
    +""
    +
     

    Resource full name suffix override

    +
    prometheus-node-exporter.enabledbool
    -true
    +      
    prometheus-node-exporterobject
    +enabled: true
    +extraArgs:
    +    - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)
    +    - --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
    +service:
    +    labels:
    +        jobLabel: node-exporter
    +vmScrape:
    +    enabled: true
    +    spec:
    +        endpoints:
    +            - metricRelabelConfigs:
    +                - action: drop
    +                  regex: /var/lib/kubelet/pods.+
    +                  source_labels:
    +                    - mountpoint
    +              port: metrics
    +        jobLabel: jobLabel
    +        selector:
    +            matchLabels:
    +                app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
    +
     
    prometheus-node-exporter.extraArgs[0]string
    ---collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)
    -
    +

    prometheus-node-exporter dependency chart configuration. For possible values check here

    prometheus-node-exporter.extraArgs[1]string
    ---collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
    -
    -
    prometheus-node-exporter.service.labels.jobLabelstring
    -node-exporter
    -
    -
    prometheus-node-exporter.vmScrape object
    -enabled: true
    +      
    +enabled: true
     spec:
         endpoints:
             - metricRelabelConfigs:
    @@ -1851,16 +1989,17 @@ spec:
         selector:
             matchLabels:
                 app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
    +
     

    node exporter VM scrape config

    +

    Node Exporter VM scrape config

    prometheus-node-exporter.vmScrape.spec object
    -endpoints:
    +      
    +endpoints:
         - metricRelabelConfigs:
             - action: drop
               regex: /var/lib/kubelet/pods.+
    @@ -1871,25 +2010,29 @@ jobLabel: jobLabel
     selector:
         matchLabels:
             app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
    +
     

    Scrape configuration for Node Exporter

    prometheus-operator-crds.enabledbool
    -false
    +      
    prometheus-operator-crdsobject
    +enabled: false
    +
     

    Install prometheus operator CRDs

    +
    serviceAccount.annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to add to the service account

    @@ -1898,8 +2041,9 @@ false
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -1908,27 +2052,30 @@ true
    serviceAccount.name string
    -""
    +      
    +""
    +
     

    If not set and create is true, a name is generated using the fullname template

    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    tenant string
    -"0"
    +      
    +"0"
    +
     

    Tenant to use for Grafana datasources and remote write

    +
    victoria-metrics-operator object
    -crd:
    +      
    +crd:
         cleanup:
             enabled: true
             image:
    @@ -1940,39 +2087,18 @@ operator:
         disable_prometheus_converter: false
     serviceMonitor:
         enabled: true
    +
     

    also checkout here possible ENV variables to configure operator behaviour https://docs.victoriametrics.com/operator/vars

    -
    victoria-metrics-operator.crd.cleanupobject
    -enabled: true
    -image:
    -    pullPolicy: IfNotPresent
    -    repository: bitnami/kubectl
    -
    -

    tells helm to clean up vm cr resources when uninstalling

    -
    victoria-metrics-operator.crd.createbool
    -false
    -
    -

    we disable crd creation by operator chart as we create them in this chart

    +

    VictoriaMetrics Operator dependency chart configuration. More values can be found here. Also checkout here possible ENV variables to configure operator behaviour

    victoria-metrics-operator.operator.disable_prometheus_converter bool
    -false
    +      
    +false
    +
     

    By default, operator converts prometheus-operator objects.

    @@ -1981,36 +2107,41 @@ false
    vmagent.additionalRemoteWrites list
    -[]
    +      
    +[]
    +
     

    remoteWrite configuration of VMAgent, allowed parameters defined in a spec

    +

    Remote write configuration of VMAgent, allowed parameters defined in a spec

    vmagent.annotations object
    -{}
    +      
    +{}
    +
     

    VMAgent annotations

    +
    vmagent.enabled bool
    -true
    +      
    +true
    +
     

    Create VMAgent CR

    +
    vmagent.ingress object
    -annotations: {}
    +      
    +annotations: {}
     enabled: false
     extraPaths: []
     hosts:
    @@ -2019,26 +2150,17 @@ labels: {}
     path: ""
     pathType: Prefix
     tls: []
    +
     

    vmagent ingress configuration

    -
    vmagent.ingress.extraPathslist
    -[]
    -
    -

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +

    VMAgent ingress configuration

    vmagent.spec object
    -externalLabels: {}
    +      
    +externalLabels: {}
     extraArgs:
         promscrape.dropOriginalLabels: "true"
         promscrape.streamParse: "true"
    @@ -2047,43 +2169,50 @@ image:
     port: "8429"
     scrapeInterval: 20s
     selectAllByDefault: true
    +
     

    full spec for VMAgent CRD. Allowed values described here

    +

    Full spec for VMAgent CRD. Allowed values described here

    vmalert.additionalNotifierConfigs object
    -{}
    +      
    +{}
    +
     

    Allows to configure static notifiers, discover notifiers via Consul and DNS, see specification here. This configuration will be created as separate secret and mounted to VMAlert pod.

    +
    vmalert.annotations object
    -{}
    +      
    +{}
    +
     

    VMAlert annotations

    +
    vmalert.enabled bool
    -true
    +      
    +true
    +
     

    Create VMAlert CR

    +
    vmalert.ingress object
    -annotations: {}
    +      
    +annotations: {}
     enabled: false
     extraPaths: []
     hosts:
    @@ -2092,25 +2221,39 @@ labels: {}
     path: ""
     pathType: Prefix
     tls: []
    +
     

    vmalert ingress config

    +

    VMAlert ingress config

    +
    vmalert.ingress.extraPathslist
    +[]
    +
    +
    +

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    vmalert.remoteWriteVMAgent bool
    -false
    +      
    +false
    +
     

    Controls whether VMAlert should use VMAgent or VMInsert as a target for remotewrite

    +
    vmalert.spec object
    -evaluationInterval: 15s
    +      
    +evaluationInterval: 15s
     externalLabels: {}
     extraArgs:
         http.pathPrefix: /
    @@ -2118,289 +2261,381 @@ image:
         tag: v1.103.0
     port: "8080"
     selectAllByDefault: true
    +
     

    full spec for VMAlert CRD. Allowed values described here

    +

    Full spec for VMAlert CRD. Allowed values described here

    vmalert.templateFiles object
    -{}
    +      
    +{}
    +
     

    extra vmalert annotation templates

    +

    Extra VMAlert annotation templates

    vmauth.annotations object
    -{}
    +      
    +{}
    +
     

    VMAuth annotations

    +
    vmauth.enabled bool
    -false
    +      
    +false
    +
     

    Enable VMAuth CR

    +
    vmauth.spec object
    -discover_backend_ips: true
    +      
    +discover_backend_ips: true
     port: "8427"
    +
     

    full spec for VMAuth CRD. Allowed values described here

    +

    Full spec for VMAuth CRD. Allowed values described here

    vmcluster.annotations object
    -{}
    +      
    +{}
    +
     

    VMCluster annotations

    +
    vmcluster.enabled bool
    -false
    +      
    +false
    +
     

    Create VMCluster CR

    +
    vmcluster.ingress.insert.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    vmcluster.ingress.insert.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    +
    vmcluster.ingress.insert.extraPaths list
    -[]
    +      
    +[]
    +
     

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +
    vmcluster.ingress.insert.hosts[0]string
    -vminsert.domain.com
    +      
    vmcluster.ingress.insert.hostslist
    +[]
    +
     

    Array of host objects

    +
    vmcluster.ingress.insert.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    vmcluster.ingress.insert.labels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    vmcluster.ingress.insert.path string
    -'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vminsert }}'
    +      
    +'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vminsert }}'
    +
     

    Ingress default path

    +
    vmcluster.ingress.insert.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    Ingress path type

    +
    vmcluster.ingress.insert.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    vmcluster.ingress.select.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    vmcluster.ingress.select.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    +
    vmcluster.ingress.select.extraPaths list
    -[]
    +      
    +[]
    +
     

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +
    vmcluster.ingress.select.hosts[0]string
    -vmselect.domain.com
    +      
    vmcluster.ingress.select.hostslist
    +[]
    +
     

    Array of host objects

    +
    vmcluster.ingress.select.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    vmcluster.ingress.select.labels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    vmcluster.ingress.select.path string
    -'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vmselect }}'
    +      
    +'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vmselect }}'
    +
     

    Ingress default path

    +
    vmcluster.ingress.select.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    Ingress path type

    +
    vmcluster.ingress.select.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    vmcluster.ingress.storage.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    vmcluster.ingress.storage.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    +
    vmcluster.ingress.storage.extraPaths list
    -[]
    +      
    +[]
    +
     

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +
    vmcluster.ingress.storage.hosts[0]string
    -vmstorage.domain.com
    +      
    vmcluster.ingress.storage.hostslist
    +[]
    +
     

    Array of host objects

    +
    vmcluster.ingress.storage.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    vmcluster.ingress.storage.labels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    vmcluster.ingress.storage.path string
    -""
    +      
    +""
    +
     

    Ingress default path

    +
    vmcluster.ingress.storage.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    Ingress path type

    +
    vmcluster.ingress.storage.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    vmcluster.spec object
    -replicationFactor: 2
    +      
    +replicationFactor: 2
     retentionPeriod: "1"
     vminsert:
         extraArgs: {}
    @@ -2435,16 +2670,18 @@ vmstorage:
                         requests:
                             storage: 10Gi
         storageDataPath: /vm-data
    +
     

    full spec for VMCluster CRD. Allowed values described here

    +

    Full spec for VMCluster CRD. Allowed values described here

    vmcluster.spec.retentionPeriod string
    -"1"
    +      
    +"1"
    +
     

    Data retention period. Possible units character: h(ours), d(ays), w(eeks), y(ears), if no unit character specified - month. The minimum retention period is 24h. See these docs

    @@ -2453,98 +2690,129 @@ vmstorage:
    vmsingle.annotations object
    -{}
    +      
    +{}
    +
     

    VMSingle annotations

    +
    vmsingle.enabled bool
    -true
    +      
    +true
    +
     

    Create VMSingle CR

    +
    vmsingle.ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    +
    vmsingle.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    +
    vmsingle.ingress.extraPaths list
    -[]
    +      
    +[]
    +
     

    Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

    +
    vmsingle.ingress.hosts[0]string
    -vmsingle.domain.com
    +      
    vmsingle.ingress.hostslist
    +[]
    +
     

    Array of host objects

    +
    vmsingle.ingress.ingressClassNamestring
    +""
    +
    +
    +

    Ingress controller class name

    +
    vmsingle.ingress.labels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    +
    vmsingle.ingress.path string
    -""
    +      
    +""
    +
     

    Ingress default path

    +
    vmsingle.ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    Ingress path type

    +
    vmsingle.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    +
    vmsingle.spec object
    -extraArgs: {}
    +      
    +extraArgs: {}
     image:
         tag: v1.103.0
     port: "8429"
    @@ -2556,16 +2824,18 @@ storage:
         resources:
             requests:
                 storage: 20Gi
    +
     

    full spec for VMSingle CRD. Allowed values describe here

    +

    Full spec for VMSingle CRD. Allowed values describe here

    vmsingle.spec.retentionPeriod string
    -"1"
    +      
    +"1"
    +
     

    Data retention period. Possible units character: h(ours), d(ays), w(eeks), y(ears), if no unit character specified - month. The minimum retention period is 24h. See these docs

    diff --git a/docs/helm/victoria-metrics-k8s-stack/img/k8s-stack-overview.webp b/docs/helm/victoria-metrics-k8s-stack/img/k8s-stack-overview.webp new file mode 100644 index 0000000000000000000000000000000000000000..84b6f6aa5e3c8be4fbd1ca030e1729759dec9c3b GIT binary patch literal 94866 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%0DoEZ(|Uyx0`rId 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 + - - - - + + + + - - - - - - - - - - - - - - - - - + - - - - + - - - - - - - + + + + + + - - + - - + - - - - - - - - - - - - - - - - - + - - + - - - - - - - - - - + - - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - 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

    aIt_3#);CUuwK0WRMErW>0R{xbOQah;HkhcX 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 z

    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

    }S2x$xr3VFY3W4)MbGB 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

    _hTBU23p;8C+sMvkqx<@`{1oDF)*QTZNYnJ z1HLTd>pwDF-{z4Cdw_PNh7sW6$MmsQFtiPQ7G4aMp-{|GML7};aww-ADF!yPfCjVM zewo!2>UK@;+E3L7xg&Lb0C6992VDyU$D(1LcKcj_nsch22Fd=T#B{R(tWLvaauy~< z>te;D_CJ~V^M7&V@`vFQ{#DLf*8mf~r+b2Yfeh1YBoK4kH}MtSi=muWpVfRB^>JeZ z_N8FrQ*c_Tys5$G`YK8*^35hEG1BK>TO>JRVrlFbUiL7>Mo9~s9Tf? z<`;CgdyZX*CfNa?&w4}BLGu<8H6#bJiS7vkNf$3esST92C5OfGFNuW;{JC6$-^XED zg7T*Tr>owpdo%FB6Z%~gttMQ1n^0~rwcI3wP0}#E2*K_+_t{ul)DyaD>Ff7~$1RAP1{r z&{gYkS?8yHmE`KIr`Up`$jL;W*U%4lFS`GZ)?eS_e5*Gb>AQ?P)v@#F7q+3=JQs2fQqO6B)j-#P4_g$%jhUTm0%2{%q{&K@+FquuZl#u z^?z)@L0VI=dW$yD-rbyWe7dP^U17krsVSe3U|YlvXu{jXqt(f{(pFG<)FFK+?{b`E z<*3X0+NTPjH@~Fxe?Hs`PMrK|Gj$!6VLle>*F%auQp+Ze!m<9rSIGuV`uXd%^*t!^ z4)@~%D^QUsjii>1k!7!6!o&|l3{KZ0Ct1cw3j+^I#6+e4sligHHkF7P+c2q9em+u( zsq!Q`xmW5Y>8I8f!jnnv%C=e?nnEwl#bI`#IOZ@~*A9326IFZLfaqVCjy?z9xHqp< z1m5*gE{HH-+fT0!r2tnzsK5J_3~knBW9i`~Q2RrkOw)eR;w8d}gX>0wXh|yN65hz! zNujtWm2n%n)M|IJ@_VB!Yp)@7jJwmg3MTeQmFJG5sBp>rj%j&HX&0pK;=!w)AN{R! z>2Ig~QkMKi?X8SE>Qi3X-$Lt3R}@6`kv^Uze-8UK3j6;d{e;r-nW{K6IK z=3=Z3Ij|@n8Q?fl!XImFy_renQI5w3By>#r2dSU6s;bU03$;W8W&2F{!AG0*zQi*0 z2bd!czu_FGx^bdmm!}g%@pW4oT|V<&B&$XWZElT3jN8D7-)$x?#5r?w40919lIz>k zF$J5sd~c-YKmM4zXcx!{b6cn+RfNpX4bAXxFXm0t;}@)@A;Fx=`nkII3OOpfFpP_j zG+ZGh$(TrPgw&;7j+cv3FgRzn0baZ^)NsP;!56eIj%loF(jSR!q}ltYUd+DM8DKit zX-|5Q&#zlPu&3J2Kduj|LqTsC7W7y6h+eR>ZFp_Oh*>}Q<8NgA?+70b{z5RQN3P4X zUO#ES%ImRp?C~+)ie(QEA;^Pmd2ouRleW9D?ev=!PLAq0CM;@T-YQ>i$Y46ZSW@s< zp9w6`z;-I`t!#rlHMB0A0e5Q{Qah0nadG~ovceik0h4ZZcRoyYN_I&vNZ}3x^OJE9 zuTFOLtvCeG6!KK%s?9c{5h5sk0c?l6_u-%4#{DBWAH3A#ovis-YF#O_;Zl`3$iz>R+fbIU)@TaZWy%3Xa(|AqR!|Kn| zar}xiuB*Abcfy`TT+!s+=W;?n>iErsvQQSRV_3NRqTgYM%DwN zAA4Tg<@eH;O40T_<{$noUdEVhW+IWA0zO@~B(Csu*rz8-I%63ES}-N! z>NwxmH?*xs9Zi=Mz_6t9v9{zrnRmN`csF&Qr}>)mBye2xo~_5kdXa3(4BCofKX6Zt zU0vjQl%(Ff!oKgh-A0)|)$m(=b|OV*L5b4PP$#~X>4xVN^`#%k>wBWcgDd9=5$1Qv z>>|ud9>=%zSFK7!vkj>fLcT$!INvpzjxP9UXzKy5eXjF*`W4Ikc>almLguqJCm+5O z*VnLVY75~CE*UgcpJX3s%|W-V^8S2Bf>!*xbV#Q)DTb6E)jE0`bu~Q`e0uF4rHKIj zbR&-RnDXZ7$;56);-hcB`;DG*{gVot7MmlxM+4PaGCv;4dH=g+)+u7;GL~OEN@_%C zcWbyim$Oja&f)4jfvcA9Y@42M=}SVFa^*UuETfy#kx!gqM*)Zt1y94iAsfRiZuw=m zTzC6R=cc+l_PKm^(X8FE=OdVg*>vB-OWQ)0Z^`*^iipf)rpW;HUGJNTLhC|3kSo3l zY2y-5wSq|^q@PZrnGR*)Fq3uRC+waIr~s znSsfo*KWzY04CEy^j0tV8TTK`MusNYJ5G2F=Eii9mZNRR9BF6H|<) zTg)$-|9T_;|7Wn)s%k=&qMsLWzM7Y3HNt)EcoLi&y`vi*alKy??oK6G7wqz2*ZOI5 z`&?4n`&>3E$X|bUkX!VeLi08A1Xt?ry|rtwc)jm2#yb{^lKNh@R~n0>4Jwkz)78NE zfFM<80XQkt+yq+2z|3qoOT=w5VL8v^2R1)seff%@Jo|x&Am^>4kk-MMK*$;(Zut;> zD|E>yk8Onpp~|)CB6cvCTmY(_Y&>Z3o&GmID4i#C>@@oB8&CI=wTBwz}JE3~KDP*WS@P6h(_# zVoB8+L~0jnXG(Rk)E2eH7*f@UJ&9eb6(xu*31X=&N{Ct_B9@=d{oU_x?%Z+jeCK1F$JK2|HtzpxpZFET?hb|SR$Lub-<|w^q-NW5zI1L$;{?c$ z6v)~-k?zzx&5#+NQN5x&Av;ZxdeY^_C^fT6ia76%GKIOS)fir8et9WAu>7HYkp zqDQ>rhcVssPAd~1>l}yKUkZ7b;sz`w`=-NLCe^1OSQs>RC z)`wkImGhIy0NtQ>J3)^NWGejxO=k3bm?bHl_&fKmbm?<;A9xQd&8H2DCfBARNy{V? znZY#Wl%X@%*KgBU`8)N2`+!dLwqv4pZbyA?!8tIe?a^6c)2kWSy@?crv4Sx%|C!MFA$g@aj)WQA1Cy?$QB}gC-Y}dNazWj z@WCMdI?*hrZlICDB@TaP2dO9oYNcYSt~D1o(N$ZLleg9*IcRnYS@NUhW4a*&X@2dM z-fAaZ+#ijiFDlR}pc=d}NjhuoAv_|h_aPE&BefjZdQ$YPN`82S|00;pkgUVA;T&tQimnUHA)rbKKacFEnZ|y@~FytQkmBp$v-_ z*o-P`Zi%M2^vuW+eN*3geyTV9rTGF+%NttkLtA`)sJp6(pNbCt!+!jaII^M?&!-c` znYK$?W_Blz^g1oz>3P_SuAQ^MeZc(02MHi-wrN)JJSx2fi}xA(!B+~J9ptOK5fFJ^ zHjp}jPjY|+UJ$oOyb5i+Db3c4FXc^~d#Iz2v(&&L}mJ*kjX`ZS{D?MUui%=Nzr zYrXD6g|}MKfDXq!W;4psKKP3Z(KRM&Z-#&RlPdfjQHpQS^hQs`c`nSI%Z(am*6cgO z5{8vSwep;YQsH0;gRT4qt@T5ZJ|YCsf6XIbq7qEou}0Vhx89O*xKb<2H6B2a{- zshKbJc9AW+H|cpTg&m35$X1A!8$ers9G2(%7Pwe2S&S44U_akRbOrS+ZJIBr9Yy9A zylI}+^v((Yu)fRyS!z%#%e)0%Kq$3>?G}viJ=W|jTAxFlAubO z5+_worBolGm=}HUMT)&}0>_xink-nPeB80^AFB6>Tzorc7O>It;QVkGNHK4+LKo5P z-k-48DF!MJ=i;XAaqYdk*-&z+eo~*mYZyOa@@mX;DyhStI|+6v2mB&yuI)@4_`y?ueQtj?A;87aVkG23a~b9p0Ro)%_rTPlq1?21A`<2^N-ip|fnNpi=g9V3G-GKM7SMZnxk8RM$?Xaxpf`PG@ynA?J zRU$2Oj~ObnV_Ke_^d|3p)lCAK=7yy;IVV)F6*LeX7d<9G3$~}&LAD#6?i|6m?GtmB zlr#_v*_{?`-7(JW1T0w~KYho{>5T}O;0*RQie7QPjVQ~>67UwXSsyW)F!81imOk%V z85nFR3E?iusr5jZEa1-=W>m%b{8h)gI7(noR=uK#JgTKsAN4dysn4siFn>;8x$Ukj z3Cpf(DDm|z`SjwboUd1E()Gw$#9lL4Dh-rnYtJdV947JImP3?;_vAO2dFvpNAD&@L zBs128S-L^wYvXDPC`UUqi0{EHBof$A8ln(RRFfShN@=GN^kl$z`@f2=%%q&um)R)nCKINaQ(Z6+V=}6+cEL&Mbpy?)3&H7%6vZ@O?^Mg6 zM=fCT`Ob%|?E`N3@t^Z?bXy=QXxlIQuSDuE69rsOO0q9MMf>aXyo4kEiG8UKptjM3aNwQeSR{Rg7x-My&Ki`^}=f zoxI1U@R6}XOR5B;{K&lMa#DN){#LJ>N2#DkNj9ZIZlI+Kb&Q}cOo#}PO1uO=egB#@ zq7D>JPtjPL1gyCjY=FML*CFAr>rv;>c3#}*#$G0(<+Z!7gH5TFR(Sv}bIA=zt`%RZ zfLfWR;Z=H$y}NQqukVq)Hs#Ol&ZLRxsag>7=FH z@rti)`V{IWpZg4w}eVe1%$M z2f6RR9Ue^dOw!Tyl*MQASZ#LX$ z9h!J2nY`*!K{@D|nC2FcI~JkhD#5^Y5JeKD>pS9BeQi+zw&)0^k6ndJF%xBr)+Nc3 zQC8kWD>N`24_>q>)$RY=EM_tLe@zU12#(%p;ffJ&v0aU=xqIa-LT)Jv(+^2k6`1td zSR`hQ)$xkM8*|EygQp$*>1Mq75wyi7idK@RPnx5%O(HAw7OojF&0lB}BTRFVUy|lu z5Fxcik{dgt?A{N{Ij5VBGaVOH1e_S(tc=Uc_Lm+r0gf^Trt{4r8-Z(9jn$1vtBL7+ z*^Nc(46R=%tIYXkyg1QJ<4>^=c7NAZ{2y$k_y@?Ze-PW!*xKaWe;2zHrppI<{ZEHT zh*_2!*oZUn%6mWENuNHwl|NNZY}$b05iF@2JE`v%qvom3mf{MgSF{S({eq%mUu&VX zQ`4~i_MGK4osg#0G$M0h+B0W{`V7atZi@y^V;rA8!N^fQQvuP*2p~@p{qG(8gW(j@w=TWd=ni%3cCDhlU@<1 zDG+$+iw^Gr90a%rH~X^k!(5a?hcdbtzd+_!1t>+5zOB+Zpm-MeRWY!r?R^~mfFoO(FT&F;rabwaQ!U}O1 z@G9f0J#tBR$6CTSu8LE7q;PWuze`_DJ1iLThix*Ke)RqNFca6~Qv3z?C^3(MCm;9# zqj@+_wmaH{T>KN=*+InWsqlFh?5HAra3cXr+Xvi*FE-mpT;t4{w7fj}Ylfl!SwXx< zDHrr;zG6=~pni{U3iNT_fE756k2qJ$qq#mFun*uSH{n!PApr7f z#1@&^fLul_mTOO7n%nPWdHLvg4ad;e6?=%y`E#P_aII_JrOORH^9)Hi@$^%qEyhvQ z*ZPgaAnwhgHbPeOY}=qw8yq3nSc0Zv#JBbIx zJJq&Yd6%GkkwJ+B*R?IeE4#X}awRDb+jyFRL`qYk6!83lr4;bCI~?p8*B5u^JZvkV zX~wN7?_S0ZFEM*8Br9x7&ao!fFUbU57F*MC(ZSsJX)R6UeA1O$$V(kw0l=hkk_S|& zvoIQ%v@8gwPMSfyg&>Cu_~&|-0irT%5(5@mYvP0DkVQKwGee44=P23-Sl+K!hO>*{ zlb9;WQtqHKwCy8(@z|Q$QAcuxY2L<6q}%$kbncv!O`PE+r}?&~B+5niS;m)h<1sB2 zolVyom!hH@KcF}-;^A+~X3Lec`fKYFGiF=c$BEGOB}QqRn*Xw_HQH3wx>UaZ9|@7a z)Ym`V`t2n38tHh+U+W$3ZhL8Na87t=ijX^DXrh|^`u;$Dt)n?Pu!mq{WJlIkJ zui|Zb?!R86{|D>Z$3L*Uw&J$T+G8p*rg~+P8+$~jhwlvxy$&cDpfwKFg;L~vdFq;} zIg9|Dnm?p@lUdx*;hW*p-{k?un`TPa)SxUF_cBZFa>RS}FtigL2o8Uzj<_NZ0gh58 zPwBfw@=ssObEj@?(^jHBKqwNfmU-Lk%q}vPtXbwPmIW0}0F~cOZ6xEz7 zHD|!>9i2M^z-mK3IJIQ3Kou9SHn2-V?aHW_mbs2b4;gfYg0Gnc!KZ&SS6hRrnsagY zethJUZQ4wQO?{f?%u%0{~H0~iI7`+#!NcSrtv zuYkj1@ph{ctLs~niwX0+Kk_Et|BdP=LBgz&#-BmaJLsK+AO7;|-oW!`wk~TB2N7~G zkV~mG8Jj-ta;tryNU+)Ml8(~5ywg=wQk=mDchs}4@wQX@0Fl&3>VKOz)UgkE*E&C8 z@oa%zo)p68kKD!WBvhDLrn7mE!X#OG;J#2{0ZXI&`0=LIq!d-gbJTMieB0@GJg=~= zQ=+Rya}?xy+*?IOxp4|QBm{`=>FEJx@$>VamqxoxH-l%aFg~PLMn0K7q*67{9B`4~ ziyZx`?Kj)M(e3{jaXqKE5l-DSkFx@l%&58GS=SlNDfHw73ZxqUhyobHpAeH?Bk z4zo%^ChOw|5}5}9uWrVIb(*TVz~@~_+DiKSfO8sQ&rytg)z#95S@jmNtc{0Ngyxr& za>amLP1%EIFv8ku$}j0kUn{w8B0O@zdFkAqi?QA@yqOGowJ*u^a(A`YPd9U@Ub>QUg#)Lzaa?Ep>+JD9q1Y>QwtIZ9W7JfWQ_F~}o4o8? zrETR#$L=?yNg{qwu;((G&rnj0 z>z?s-vUjh-ZDx9unqp+;(_jZF&Z+3)--smgJ<)0PUH;uE#&`3*q2r&%Lf(ym%Ey;D zi19qMx{j{D24%z|lQ-fV5(UfX_JI0Y)piU62hp%+EfuDt6Zxi0aOdUg={>}pWY@Jh z;^}(0R=M6{te{8rxjO#1#R)U{0TVUZ5t~_tG19{YYoOf8kxJ~3i>@JK-i+8JCFQMi z${8yU-u`=v)W1V)sm5G#phvzR4tC>4=Gf!UnyE?9xqsQ*-gbHW=M&@MN45%Af*oqh zGudhr{?$2ubxR>_`C>WWFFSUZXVZm3!}C=O0$Hj<^<9gXcTF`SJ-{Um?R#bQ4zEV= zzVuUt$o#n%h6Ciiw#CtH{Pt-4T;_6qgq=nfJWCCUhJ^SA8G%2JIXc}!ILsnUisaYu zr{mm?y%rk)80`1`fg(AeM+~8qQ1Yay$Y;bN^h1{r@oX5*@!jY^2O}%iK)58RoSzr0 z-eU0mT(%$BE{&=V2FqtC3#-AIP>9SR(kpCz$sHH}%=B$`xLan!YL{>cZ&1vGnt%k^ z0GiJXXskB6QP_?@ug!gVO8yfZErh5oFM~o}S=ZGx;t*&g6A28v!1U=uSros)U;Xd+ z@2|jjyXh7zbZO;rGBhhS94c+?Ki&Llnw+4@WZfmWjD8eBKEkC%sQJ_41r-a+pwG2$ zd*+@+U<>tniYID)O@cgZX#;h(D;*uFiq$Y>`kruQw8xmi4cAvg$j9Rwi9-ryTD(ti z0yp6pTJC!xrZB3s3TCQ;SEV{xBQVLPRB8Yih!HHjqSN~)75KjaUD5_P=- z;cw3p^qM9rt6HZmT5rC0x|KF5>@tl>)Dp`Kv}eoS9@^S$qfL}yH;UAC;W3MeWU>mu zB7b@LzDWgE53|G&H)B-ek%VpA0cYL|bbFQQ$2> zMd>txsFy`%vw)@UUi$4)tKuojpH+Y>ben62UcF}$`DHnCzHIb1{tcqF6cSzUuf<~* zI?8u$p{fxHNuAUZb}fPgnQ>Lj6j~4DJ%b}@hVvu79!ArPXl>PaXw!}Gc)HzVf8N55 zCi4{B80>*>$IPqs6jxRIoC}d9GV>4#t0o0+tL^W1MhnEI{L5v{9=)bgN{z?`Eb0@S z9Y#@+&V~B$A6yv#;F8YjvtSU1J1i_Yvhd~9UQ$sg%RK9JBc--*!Pl!-_nPZt%327+ z&By_=RD=s?$DeHG_KcHto^Y#HpAn?7Q!|tY4mtJF@X0Uvf?Kbx=oNpw*bm>dXN03p zcCU&iwL`NE&9fY{P8S9;vwK%qzRa~+ z$-1^w+IPZD;UEjX*dMr@)C}d62M|xVF^Y@~SRoU3SdlY#)e)q619>*RfGTh#4PQ)JB2gnBA z)C3-K!q*4UQueBtEoE_yD|u2Zw|l6jwkT~dQfoxPOlrZJ+W=`M`ru)Bf|jct8R35& zk9^UAz#-1s_wc|k1R2u!&o8${{k{zU4tndKqUS+5JEnng4cOR?dD&p%v!Gf;rzBosgPMRF|J9#nM@)QILZN$crLa%6p(KJadoVAif1@H7JqXgf!%cMH(TS z+hs#aiIPWit{%i`Y6eLK%Pf-En_b+zvCL6{JAXo{8sh!f57Zed5)z6nOpW+3KxCeJQhYb975E zf5$_nUWI^lvhl4YY0nV(!~v%@r^!kApeEP1BPiLl9!Q7PUNhG14z6IbGNu`mu{J$r zHS?{2-Je<+06^&CCzJUic+|~6=T_l0(Hr{!>EH*?usmTRN%(UpJWCy)?G(51(s`}q z)L>(U#RO3gYU<$Cbyq@9PM+Cp;I~>7roh|qo&AI$&0k?j^MZF1wJo=WD|HK%hM_AI znT&^g=6nfy?z`Z>Aa2n9>H;$jw^IjAcccfxp)jwTC{}6c1tj`YyM!ptbiNXL7c6 zUbpYc{ogqx5XuwiVj0g)e++xdy)KbG9b?|dRyxh2+LmuWyJ3zxUppN2Dm77D$`X0E zc(a3iG4;#2N{1#-Lfl)waI=Q6Ex$cE(cE_+tL+7s85L{>v`lfq$iN9a1{^cdZKXXI zlLhEXuajs>w^r3jPbj14UNHlzi%(5A-8rORDdziS5%Y1LGdFwI_9l~ZyzvmFl)Y@z zh+yfgJz2I7eABA!oM&T&-x=-+Tz*G7&b%hIp4X$B;Yedud4?_%Aj1`?+4V-np2}H8 zmHH+cNIXc5xuT+_n?y1t`Irmf!SjjVF>n5k-k%{_{E>Ac*3T}eA^&yF=&lO&IY+Fm z36fg4#Lk#X7=!UUzwsv1Ku6-4y5(*LQ55Rd){O+uC-zFgM946nNqWwDfTC9N}*VES203_RNS|N->8Vc$CdO5yDg|e7N zbC7YZi_8jCE|H9RwK0n6A)G(?kerMpu@;#shK;w0MWoJKT|F`dMNku2qvTS*O*Y}J^^yK{l? zq1<;S`TaeLK+ycDrE?m|Ds#IM&a)?^wXRVmp_hdfH6EJwIugPybvFggw0!aLbLi`B z805HYhL0gIgBEu*^LHHdpTU){ZyUJ}c(K*{aZ+`}lYAK*c`w-4x#xi}PfK00ls zX%N%jP&Kpca;~`4bh<^~Y&&SSy7iKQcJf)#NSEtIYR%uAwwTqwI>vU38Lu}^4HbDv zZC%qCsa(;)4#H79Bj!*2M%O5?o(G!GP~7hD$R>pCHrfX zZ{Wy#kxMhXd!-k_85oN1HLbW*Qr$Gp z%}8)}-mj&Z0E(1YiYLu}N;{QyrtQe+-zE7^&Wu%2TK#h8IX`C9bFgaULO=XKzBQK;Y${`5kKb_RjqRQX9b2_7wTuah2v#CWJRAU5p zv(zx-`v7NT5U~8LrfDM6Z;_}cG+-d@zsDD|z4~*gFS;>Fv@sbMd7WSt z?|ln165NdF%|Eszbb%RP;xhfBxt^}6K35XvtF}IfFex2#9I62SQm6ZEW#Rwl$XL<6 zW6m`T`7SG$o~}p77Ui+<9IsC1L3|uLXrbHuc4rdGj9U4~UsA#37<8X_{n_GtN18aW z;vrpgW}86sg%#fFFzH-nha1qNA91n9?{5zINwMLA7Jd`T=|(Wu(#0@UqZ=V;aI|Xu zV-IYa1Nx=AEcGu>HG5Wq=1x%jW|O}kS$BNFXGeWocf>KN}^`xh^w7 zkGl0dJ##bCbS=V|JUZ_(P+pAMlMON#Lv6lR`0e(R|7ZnH%x)Y9F-WT2EqDgw@_xOb zt&#O(=Mpt^vUbj|GJ=LFpZd(!T?1>v8)2H0H3gHa3-y4cS48C04yTxMYd0L?!iYTAss8#Rp1S6kTA49- zJ;~;-PM%id%8rK?_y4^k{R&?t>z?1an%6O16M|pmlO+$=2NgMb2C9daYrtm~IGTKu zbLG)&#qXvbS1@F5VNgQMOZ8p8gCt}!p<~kOI@N_JT>4|#j$m)o_aiZv`q_g&uy!NU z>k3joWoVqx2_`GyJ+(JQvOfw^H%XEoU z|D#}Akf(QF`v~m?`Hj}tqoH=>%WS;__u(4cW?k7OuA}kQ=u`r&M$l}rR=%pP%te0` z8Ts_dV5e!4%q0Y@@E}6@OJ0oliWXHm!^Nlct*%5i;X{LZ8|VCxnmmZJ!XMDX$xj$i zW{D8%+%64eFW z){H&)MoB#MUV{M$o8PgKL|%!XTr@M5sSbFUnp0{O0kcpXWIjdtKEYCA7OMCigv}zk z_fph-E=*wnNA~;wNZIUYTgpKUvc*M65HMDiyu5R3?8I3v^@LOFOdYxG1!w!46~Ju^ zjk(CKGO~3Q4b{Zg z=mR+quZe=FK^_6nAjwP*p0V)UH4Yi7;3O{nb-;P1o@y3GH%7w+N+*XY80`asr<+I{ ztP30E-%c131uxAM(i9=G=1+(~>Hspxav;A)SZBo7VSvx>4;cLa5j^>c2Jg(;Csdf- z^Df%UF!Wk$MCfrnQ^Y@llkovU9HLr6xYSq z%3k1*&$vB;_>==v?r3R-(EPy@SVhyhi+?48{2CGT+DXf2-Set~JgKEXj8AG@1_bSG zwv2@M8k*W-LkCO@gdjJ$E|M9AW2RmJ`6T!PX)}BK^*{uM%g%%374Q z+3_Fraf`uzQ|cnoEXg&OgAAkMo1hDG5U5oqezJx3@m7fyqgK|*Haz}k zsm*NS#D|qX&CK@u(7n0!ph01`^`b%}cgJ%PgM}E|X+Njt$5X&y?`R2eyXa|O5roA) z;OJANe5(r93^v1Qn)qVWGPrtIPTCY)v>^SHgx?|OKHB1Px$%c*A3-qQ z3Uj&&&U^8BvX%j9)A>J}C23}^+ISDLqBy8MonaL#$2Jurx4)Z3te>0w5on&jnOJs* zy~nC1wqD-Wwu>T__O&&e zXQ3G99L)Qn_X~|sso9WTnH(^UtycFS<=ei#tuAD9Q*85yW!6v#{g-|>TTKdPKG8D= zR`OhT><~F(W8}`K_s%KT-B5_9*(qnY*0kRZ24WdB!GD$sf)d>@eFry^1i=_PdAy*qGk-WEI6 zq^sh(b>D@}&XC!w4A2$oha zzLh@vIZ<}|r4PzYtXw(qz(2(3iQgT@+wyO4^tJ(y7_^a!AKxZxS5Xp0DRN9owm*F- zKY0f7KpN)pVik^zF9LgIFI^H=Rwy@oSb*~lmc~@aJwx&c+b|)@>QlUrS6QLrHlJT> z{l95FJ6pY#x%bWJPCBePeEFk3TPVs4tZ!_!G=GPAJf(Q-AY~=V*FWn>}E`Td+wPq>>Q74Vq2CjwH zX=*;!P97?GW_hhSnMfDVG)G`4M{Q-f)J!tydCtvv-SNzCBR%5hgngdzbgkkfKkBys z1Rg7G&kf~@oM4Wb42 z+$p(sLcW_j9ysUQx%3TmK+OUxh{(4kI3o~yQ%{l0j+0C675JD1thcUhVj*_9JE9ya zNL}NORHHa{Pl-;DE*99E^2%Y%w$M@n!w?+ZkeBzy!(`ep&}?9YjU>wUYNAr=$?YJ^ zG#B!ku}^)=wh9f)dG8jytW92PCO5Z_K^|9xoG?gYdfUP?B;V0D!&J?IwK4+*5~&p- z(LhkK^X{sF^Zy*`mRz;oW2_Z^=skPOstQSVq;^q<1hGAd$~Wq z_HPo#k7rL=SkYH5-vRrLd30;*zwO|>5GtuQ#R-_FhymN0@%l8M5YG-;Kn)4Lh-X}n zqUv<1p#~FWt>KrCWx2U)a*^ zD|qA;`{f4YGJ0$Xi719BN~3(Op!tTy)d}XmUXmlND-RxYX_hq>Jk@s@ZmEwgj%psF z=jBtDvp5Xj=T{yG^Q7+sUU$%z>!=Zdd++CEEj39-SD}B5_QRAq-L&?@ZhbQ~;r5lc zuG_Jo2#06AVAgqM3P|;A<0j7{SRQ8VnWN?vFGqL2=xd_>^wui-@5(w zAMcEXxHru+T-)j|SM+bPy<9eFxF-&buNO(j^DF4X3s}wmjy0mp%#^Le9K4*6UzLnW zu1lYzAR);F6R{B95s6b1|Fulq5m8`+cE^XYUx?gd(?{;PU;owbeAy87{XT%FKv?XD zlP~tZ_x@=^_g`o!FuawdFJWepH?r(3@{vqU=?cZkxCK3=>ASvly7k_ki4%*4s>_a& zF)kS-1^;^d+C)X!I$m{YNoYzdj|2dvYlE$a;xiv{KvR)g157d>>-3e@`xs5xUqvw`b+!xZKTA z&EqL$mAhi7J1UJ|u9WSyypQHT3l0O3W3O+=RFF@S7WFlD9<8idql$u6>vQ9IT82A= z&>;!As4`OdN2;d#UR0MYyxxcKXaDtm|- z`Erz+UhJ%UuJK1$sWE*w-O&C)M%6yxWJyk0hPZm`)q0D(OYpPTHXio0UwOW5WN*$S zWX$qvAybMct1rhz$5c>{wH?`%(HEN3%#?(~A_VIV&l0!`x!KkgwexWjeD;PuAzJ>x zH1oYHMyC>wtZGi4)XY5|Rnr6dX)M+1jJaA>eDd;J2dyH(n3s4H<)-v7brZMUTkz9y zv8W*tx61Hu)=wOG*KAaHD3Er>P&s$opxD?i(Uq@)DUNdSbh9#`Ws#M+oHUh$5Z~9W znUZiVaV*uF*g^(7i^^|bk2;^cNubkpvxR$PGn0TW&r;}}R$#XU&UZsexi_i7O>qG_ z$rV*TuD?6U z_`P%wR!sex6iw;uaLnnFXl{j2bWHs90o+)Kwq1yO$28mEMp1wjR%Ow9pd`#xUEbfv z3>qMm@ndUq*pd=oC@wyHy)uuhaT><=xZcu34~K^U9SmnJZLvAFRi_7JUvvAIoP zY;u~T^;{Q^9iMb?c7yt_Qii;+&6N#x)lE1QAHAT4 zpS3?6TwyyNv1bg#43hR<#zcMmy6(3L*X6m@*67>@Db{4yi;(gS&{gPy+el`-NTTc~z!A8;PDAXO%vvQwzEgh~rdCy@*dp+Z&-8 z6N}rmt>2K#?wrnGbOhG7wmN6d_6~${xh4la(-Kow?}lsC*p-woM6?$)OxpJak3~n2 zW}XaTeaz1@^@8%2I8YJIp-e8N7kr&^cN=N3C+(cpE3Z5Bn*W422( zsFQ9=m8&r+|CEmwlr_3I;?D?ZLPrWp9o*4;Y!;2gY^pYRep~N8n!@&C*>%Q-akAEE z*H8TeHSkv~{jZ4IK24eXfbrHL;_jnO`Ew$GLve(eL%=Wm%E|SjHW-=ksT4iL)9}|P)0i$G2c0KZn|8aTb2XOit_2% ziKf0KchQCQwI5oa4FjFe!c=$8poTDYS(8T1vLQ0WV+4VS*CMa}K_=-9&&e&|NlW1| zo9%r-GhY2$vtyRqRoku5A-?z=dx8K#O+tPEuhJvmmnb3cDt5i?ath^G+t>TQE2L=F z0>uUfY7)(!nm~Pep|p`D9&};K4ejPjE&;w!b#6B_tv^u|JS>faM+~W>r5$P-yJme% zjmE{)XkSA3C{S3LkXkviEA;M*VgBV|$mpR_I}JdO^6BY5ljV0NO= zmqCg}PrHb3oPT&bQ(Q;gYBh)y(p0W(EK=~bT<{X3F_vXa;B8JMcz(pKBu5`OuKHGE z@tJEYl#~fVICbeFffCaV)&y?G3Ib{CmScY2E|fkkkVX8vp@7DDVZSg9Y;Djs!^qz7 zywqlASaL($W>zhP@sV8kb?|@J{r`?5!}{pW0)#fGSIGEo!}xoxWc4`+mpE^?M%Z~> zi~_Xm72Y8*XQJ~_UHlDyLh1anM^ei*VVDIPJ2365fSy~5oMnWVe8)J z;Mj)_Vb*NPH;`0q&k2Z#AVNMdGnIJObw&BFcrM!2sC*vAk zgTv01`?z6~{i_g7HMbEkf8~gA2Yu&vS(=~F5cjjTBUng!$nZM#;augs#yAe#?T!^K z0FP8t*vlzyL>g3fR)yWY36%>7N$>Vl!LiQEjg5`nE(JD&X$aVhgD_A0)15!51D{Wm z`j+{UU6#I6QcL}%Yl#tWex`jpx^8(lP~fHW^e2o54jH@qmp(s5-;sf_dQ~|OmyAA4 zi9vsr25Gjj6_J;z@Nzufry*!izcEVH3;ohO)U!QP$~+6W)uKH= z^9)5Fc5V>yVORr*nlO2%SakWP9RLKx&0hy3ry{OJAJu zK>|oCsTfdN7>}tPG%@%o^7qJD{cTE4M3$oIkgkN3J5;ZeAc<;FB!1x3v2_olb^ zQX+TdX=Z+ZA3P~bol|#F#S&@gS0=}L6!6-XBXq`n0uTR?)ANh)3?AbUHdLdO<;Z z<6Fmsx(^3ZytPoWEw!6ZUs?AU`@O$e zKoK?tSJ}*OJ5fH>aL@laD}Tlb>zykTk?Zzyg$4%Jx)78UeNf^2A7&GB#H7MW!M=TZ$G_CcuLPUgsiSh$IzYL4K`g?-?fk}~o z^B!AQwQ@O^!eiS$-u7>Sbht$F^@uoHkYT$%RJTyMCVtJ)A^7!%5(tdJJ=L@T6eI{r+jg^BCu;=A~J@GeKV_FgQeQZD1k=zL_JU( zWE2S&E+}-9orHmw!3IEJ$fc}JOM$=2{5tsjACUcYOyU(tif@CYjq275t`tR%GqzCZ z$jn|)!4=K3k+$a6T4+d(+r5L3Qx)X81nvZ>!>5;KrD{>U1;ti1?KFmxOxviLZ#_M( z?e(F0{u>-=CdR3DpK!7TLeJ~nAK48Me3Ct0Q_^_RXMMoQ)6>9oShIzD`+L}oJT|*7 zTF#)tL;yiRzQ4>}vMEc#cLfoN5;_xqD0{@8B4$6pS6X|D`vCq}suXEVDK@;wc^jm{ zlsF9%>l#wVw(KO&kWuvQk>mNh9fY(9%Iz($yDg~aC456A#=NQBwxw#5moh53Q||xj z$Bx3UNaVuA(0Ro69nL%9FQY-};jv*9*in<7ewL-ei%8)6zW1Zn&Dgk&x%YRWEjJ)5 z5LqKNsQecsEHa*5qjDX?+gCX)D-8(G z_^i9Itc5&Him;&1V6tIH=&&;GbkCYDyq}$^|DYY%?K|gzQkR7fdK9MAq8E5O-A*N& zlSnKp3oO4WfZ{_~4HdO#+fgiy8oJdwftZ>+k%evTb& zLTE;4y}xLrli#LiHnV~pv3yU}lg-6bppcCx+Fbm1Ja(1d=aME{>_^-DzN&(_Xau9o zEzHL9&3vz$^JJYd6!+^DowhLep#SYm@|o%Uh(Vhf7wG{^i+(?b`fY6ZJG#&dS;~n= zm?VeRmT{-HfdL1UU8&%!G20v;%%z-zm{7d)zohxkary|J*?PA3HB~WzF4zm-VEI(H zGC~*P;VEB3>vG7fTJ5(l=jD+oqo$g-^EXpem+A=FK6lZcah`1>q$~*+2Opctw7MI- zG8vtoYYrl0Uy10fZjY7nwQN7E)n@`@sflPonu&yTtY8xB=*;nD#ZqjCC{0i}7SXQezOiW;R81kvE%9ecZfuvJgLM1$0RlROPu|_VXR8+Q{DzCp zi6m?m6`IoS;OJHcncIldtA!}Y+`=K1ip7~`@<-NwaSy(@VfFkVKRoH}GH~y#=R3Q7 zz|$@CgY&N0c=C3U5{oL5)ZBx%Bqh2s31Y9l{%D{Op12y_YvtULuFXw4KF-{bj-QAX zY>Ut@z}m64xAD;(X77Bdc4ZQ3ZpYfzPQ#TGT^Gd4F5U=AX;YY@!X+C^e+G+8QjW)W zw4im8#b{9s&))o@iJCT8mD8jbVY7O)$9hNh!YU4a#z5br!lT_MTjJ~sZ8siT zmX1#iVjmarq|c~LyjjJ2ndBr&F_W}4qmnx8IO95tnXb%8Bw4`&Za@++UOdj)Oqrsr z?UJ}v1odz)g-gC&)HsE*-u9*V=AH~{x5X6Fg;-4WF78pB%MY7)d}#5c+^{m+d>>tY9Xdz(&yckGr(h3X_)b(W}Y_==COC)K%R?S8br|oA}`idPb=5& zhPl3(9G$yYKX$>hH`(}f_B;2bSCs1a(`%vp=jc>Qk?yaFo$G!h*Ec8T94j0YU$Mm* ztw(3&W!=!Vi1t8pe1&0cRT|PoZ%mb3%3(YiT8O#MEfFp7Y$i_Ko%tFzieY)9+^>{@p|AS(}C`-jocq#$E* zsKQ`C?=&Xb_|_W_Y;=i7@1*0*<($pNA1dp*JlA1~nd7FmbvrI{!oIf6?GZI*7MZd^ z=4!6Tj4pEn*sJT@7#L_devXEW&3wm{j)MjPOPn?upF26kWY?4iSWN15JL+rW2nc6f zYDpE+DpRQ1Ohb;(luV?q&o!d&T|E6StTf4b&3X$$P42y!1jdZi={&?dUGds+JHZK^ zK!v^j-b$)T|!>>P`n14O84=}e& zYvtg!v-bg27u$b)aJVddAG+oO!sT7ewDLObT`TK+dArL&N|{Z#j=QV&O(D%@O%Kha zo;8*l4dB~;XIr-d@ey_U%O3Vu<3agX7n6IQy$w$IZdlydeWVKGugq%xiTa8ES_UvGR@O(-6=I=t!|0OYl%%(pLd0(8 zX2iR`(uK7deNqOwETrKw;xsd%Wf9~M?Zy!oc&$VKX-CDyANIvLU*JZ89BTM>TvZMy zW^V7xK{vy*u@BZO*$B(R>WJ-_VG|EskB#kJ{fe8*c;qJ-?EdgviN@V5yWnG=OR2d~ zjaem6q`=;=P4eSH|7s(ZeE z>~~|*&BI=AZ&a1?p~$BaJ(#=c#+&c7goq!K7`hvCN&A4H2qMH*IibZ&&nu&%l%Q0s z=cWK0z7aKObeg#l=blhevYb#cBqr_n;n8w%bp(|aRB_uU;w{tHJ1W)C(vqIioyLDQ z;_Z&hWSQ8Puus>+tW115#Kv68$IXvjn>B;Q&pj3NF&?;BiBdn|C?Ry2$=rQbun%}H z;+3-{vy%hl(B6cK6=^*Q+zlkeHm~;z(Tep9K7g(1Ew&T?i@f&^YclKlh2uC1R_t^b z1`v^s^y=UY2naZUlmvoE4IzXgoq&!YqY%&lK`CJv2r)tkEujXK5~M37lu)D#flw2A zI5_8=_nnz%e4aVadA{%ZuIu~#d*9c(e|znF@4fb3d#!c;!1T86%jU6QaDMR>p)W^n z#nLz)pS<;f8~cFNW0blN@_y*H*|5lWR-DZFFxy;r4l$~9m-ArWeQ&vAt75X{>af%L zBmEM)o@f`znMZ9xXDJrobDV+hMyNw(R8hVDL^RvqP`{7+QTA}w1fxatq$M%9Rru6m zXI4BpdWC>#3EW7&%21A|D~vMxwb{P9AIHAINF>kbJv*T0>dY5wRH8AQAi|#IM;B3= zrV8e%$QgZcD7cl~T~;@4Sy@(zGoc(W+1~T-kQE0+{o~=vsgn^pdV>BOt7;1i$n;4) zLwX)1yw#a40&m}T7`#1oYr!LiLwft-BvK*O2D(U`irAe7L8kMOZ(1z%)nfW)^t>KA zET{>dEu2sSa_Zum?=EY|!V(0J#WWtQ(8U@NhRU=Qv^sBm^I%U7#5tjP@I5N!xJoW6 z^Qxt(Y*BPk^f#iv53vB8oQW_3-}4N4Gar3l@7u1SZl=C#ab+enb`I2w1s|;ABx#B5 z(_@|L?B^Q>NQbY>&y@6I3EakknFKjcV?THz1q(n)vRG`(?KP>SnyPnGCF-`kgC}EH zP0(rvgHhEp>^KT`9Ja8e^!4?HC0SVJu9@kqb^Lba>rB*@KP!kCY_AizkzX0;xetJH zS%)^fSV?(Jji$R3vS-{TcTAS?tF`79&sWQosxDnF@G?-0F1Np`lt_keQsLL%OF7n_ z=DAXXH*AycsI~xazl|dt_oFnzv^&P6;Ixw7_4r7`^H2TKMG^y5r4fktS?<}Q!MS1# z9=leNKHt>0ynQvofL*jtq^Le@^;TmD1nN zsq}L3NZP&qKzr|(O~{Hq_5Q2wzKFneHe_+H?%NH>$4LFDlO+D!Z7kmOTAg!{H%Y5D ziyUGT{ee^Qh+IXq(Q5kD67~3bzdTouXV3c9{XnqTrk?(aMzjr&ak9BzG4c8lYRWm2&Xtyp# z$jPbFFat;cUqq1k+4WemND+lh%}(T7d1wE`#FqU~|pjU0+(%@@wl> z&lhrVNnN{r0M##_f1IOuKO7Z#Y3Z256O#$357t#SF?!l87y#FB_WE3V5g~dE zJ#~_kZ92%e-N2Eqn@KDX#H9$a zqA5rlV=>zU7N6a&wOdZoBO3cCqt~OFZA57z!a)k-oYj2*O(68d-aa5_xU`HhuxXvI z*HwSNsAlbF3^kQlCk>1}GaW26^KHGcTYOK)^U_jG^0W9pNt9E8h=IFrB{D!J>Zbue zO`S{divgBhQnBp=j`vn87*#*6=R>0oMw9`wb0#^e9+ivgP++|g{nM4huhN~4@jj_r zbY~Ejo<%}vwNE;AakNkNzD#X7$l|+$1s%i~rn@d&yWpBHQ99&SNfh^hr=-FA50rW& zPuVM=MKJ&MkEaqpXNB(hTP`Vp){!YVwaacdi?t7sc{B37PqJoPr&1`3f7M1H^MsGV z_+B@Ys+O#_D6XXQ9H~ih#jY>Fn%k+}!4#N{IQ=b$o)8*mN5Uk#*VKeHyGPb1uW3h<=tk=fSy2;rWC8rIacj z<-f)EFCg@=DT2`AAp9;ZQEr*dD)Yl#{$&4@e@{EK=Nj(|;Z(=A+i0w&&q}4~@iLz) zyNs~DE3_n64l(*Umf@5|KEu^$&)7yK!Ao6?iHs|5M zZjf4vhFR9+ye)4)cf+bR`aROSwpbQHa+Wk*u)bWj{R2i(_1`&O{eJ+v9vBmUGt1oW z770{`&RUm>B+6JawxGvM1tBI|QZG^*ANlG!A7Jw#=gO7d1V*nRURD3o-z~|A+@yqpHbE_puN58^hypj&4`p>gH|12hi z3c;m$Zg;5k7}2hoskkusn%R$5{$2i_#J8~x`+)XQn{rbTo2ggc4mUn@Sg8g=%Kb^l zFOhc?u1qiYy)unz)=`I{a6r?xx!1i&p@c{*CBjB@(8gk;W8qop&v(inYH&T?rZlEm ze7(#g0*wGQ?uN!@NB60W0I47y1d?{` z(a`quv>fbe?u+?LWqXq7jC8qa`fZj;&c3nZv+y)sOtZ0>WjmTU7C7#H+LGdY?wj$(nZxyo}u@~ z6bP)kIO6>7yzR@junYLlEjO%8b8-W{iBvP~fCWvtgex11Re-)hq- zez(hLN$*lxWsj##oi?8$q{@^p38I?<1#4>G7R~s0RMpm2;g7juO>TDSm!urGv??d( zNF={%k(8D|-Jbm01q%L%Lx!T!8}+tq*}fw1kJ{hi!!^Yt>TMH$Ec4z=B-bLF2kBbq z)SAg>rB%4&WonT(njEaj{n`9(+wv43c1qkvQ|m10RNDi<=L%I3u!`5~;dQ-2Q{5dW z91`y+^S!2H|YM$yckD~Yb6hMz4yb; zHrtg^}HQ?PJ}Z9V*_T0fEgniJt^SiYl7yx`fIO z`WaIEyy{rMh@->k@GuzcU|U^NO|+S3GUo{<8|vz+^JWKI{e!)}#peiMkNBQ06&ID? z4j%a)t^a!+@Eg?4mP6Yij<3SE5O5GH^ z!c6nL%Sq0c3Emy?E^B_u21~cTSxZ+ z9Ije-7H*6~adO-TJksY{Q!92^+N<3P?hp^J-ttTAn_FeI=sNQd`x*Oyhpf}{yLNgm zGxPn&yC$27)!)Oyj|@=EvCV4UA)qeUKH!4yX)oSOyaMax7o?&G_L^TpdI%n}wZ#NT zVN0M5M7jf!Sn=T27qUTr=56NmQ~BelU-k5~&vyg|Wf{F&Q}85`7y=)Xy48nL&-*d6 z;c=BQ7B>yU?z0K~+J@)$e9>N3Mx5h{54_`lC+O>8j=B?R)>Qx0PSi}$b-tv({vPi? z`r8k&kaW{NP4QdwkhO?6E|?Zy@wolh>sf{`~7{?@3oN75tYw-oz!^VVGwLOGe< zjavSC*6BKIWRE-%!!w37K z_%G1<+CJjbK7dd3Tc@X|4;H%q`MaypzteWtp2dz;VE)oR;PE~{De#Tse^*EnJ&$?o z9F!sAVLzy3x67_Bp77U@K=)V%Rw;`dc-Qo(>&wfs;ZU9IOZv0_t6?ZVizX2t<7U`JjlVYP+a>d)wOPNa~f(drrwfoo6L^W7^d4sC(n01ENkk{S7^`XYt;Ee z8rUOxwP&OF^oQQ|7LbU>Sau>j3k?%i^9(sqTS=;!QR&C-Rw6jJ@cLM|Ea!tDc!j|C*#ykV~1Ft-=ik3)9SB zHe|*Mvrg>)Bv3eS)X+R}1LyAoU$4!Z+s&_bsl8*dfE+j&ZXUuI(sW&}r|V*|Hc~J_ zm$rKUa%`2!fVYS;#ADAhvP_JRtE^%d@%S>ehd-{Qj5_JZ?)6?!+T8I{3sSQ|uTNv) zPzVGrsdb6gD{Xqr6=m#(ws+<>IP*aN53{$h+M;cu-m{JHv!Js>wMBkh*Lw4z>sJNk z+g<~KtEVsb4+=!dI8F`od`kG9=Dd)IE7X^UiM|${i2cQtQ9X7f@u-ibyISW%wy4W^ z=1;jKWpfb(#W=%bNc2vS1njWBnh^#PBWItBg864kv z=aB$nydJ?Y$o_k-6CHtJA$p<)nF!Q)b z%`9mc_nxh&E$vsjIDdOG0YZcu7&9COoIin^ojUtj@i5uBiPt+~a6=|Z5%a}6VSk0w zOPj46iAcRD!M)qNTkpT~`*YQ4=eEhn9rgRBOLZxA&z8T*_~pMJ9k$*FaJdie39W8` zc-C~YdPZNbfpLqh^{ufR9e%X6)jj=>6#eW2!@^?gM*sH1J7*4B$h}#y+t!=CK6X*q zZ^%WWPx{_9#5?-3dTmmD3ItXfhI1kiVY4jsMZDpdQkg+U6wtV!c+Fx?D6`BU>dilC z$?J``8x2ka{f#2(k@=9-LhWM%weC~%wgD}3mb1JBoBj$DT5^i`b`KEbs)1QmHszco zd0EHnRp!hKr2R=2m*{F2lZfIhZ758)Kl|nnn}k!$h*MeXeW3^4Tpfka+Bv&mcjXIZ zA3h@^tLf}4txnM+SYIIX+6blQJHps7V+23l0p16&LajWg!&LN*7?KVl)53Uj(!MrF zApBIHH04^QK!Ck5p9_IubeS*UALVk%`0fL~4uCtWwF*cb_T##|X2=Lwoiw$cpzwN( zvAJ7pqEaOxD_Z1h(&2{m5$^3ij4`B*+fXU(OtcH&J<+!I+>*TG!^he(?|=&Yffm-3 z7?~GSq5aQf^S%3IrP$Qa#rqKA5xjk8y+ zl=TKNh*0Oz`=csE<;`myp`e=`78$75&nE_a8V?+>P&1^X5rP* z=&^pO0+)Fa(n>0qFYdUDTm5oB&kFpU^AuL@n39fL^EM_1iH^o#hLi{9E8_1INSiLk z=GJz3>mF*o{=a{9nJMOpad~fQ$Kx3v;fY#@hAtBosV4tmk$DhP%}Z$`>_b|!SEC!j z#YFGZcH83m_5{zjTTA1V<&FVqh5VT?Q0@xapLtOnp7rt8=wN;60DZba^JA*~3 zRs%Dnk)(@Jk2)t5AYl=7ojh?VIP_Uj6^_9Zs8u$F5vg-HwEW-?KiKJk`>}Z$AI3&I z{or>t1y5{Sgip0kp;JmytqaA8b6TWiy;RcDPT&YdE6L7l=&?ZN!RBq8yN|#xQJyUa zO6!GKpSZp*nzO4gS)MQC+^2Vfx{I_*T)Ca4UgAig`kF*iGf+t}aNd^R_!3^?vWN9z@EO&mW$WrXpE%C*DfLu^R z%6wm0&8YHN&N@PiH$_1y1JX30m9lu>T&KZ8r3`OKKl~(XBoLf=Rq>sh%*be$1j)xM zEY|RkngRp~5-7J8ntg*?g*^H=r=~D|BVLB1>KYimzE#aC4G{Eok|j22C_n{o`ctoO zma<(vbQjx^nejZ9ap!^RNH@<?jd``HGc_{L$hIa32o3)${6PhF1+YMHE*&$yh$iu72oDoCD6 zEV$Ca7xuk!^RQElOdF4_WUI&KPGX?msOKe7t%+M>j%z9YAc71(;zQ0lN0KfVNSR-g zu{p;f6&`&YY45@pb|;VvN??dArjJJ8Bye;5H5``+^1#SY4rmC&#r z$!|bYQk*9%x`M6XcRg+XRJf>a#%haYN|>FgcV-`dEvyXHeo3%-azW|RC5?hRNX#|f z_)>E7q+i8n!-{X`#8qXG{lLH=y~TXAyR&;Vxopk~CtG5LvNM%E=!i2s3jjdWe(&Eq zs0Yl~`BypioA3In_4mtn`LXpQCkel1_{inxm-M*ysCiu~52`>g3)ErZuaN|eqI2>D^&v1Hg8EP zt!He{)Wwt%p0|5kdl`>}Mno!{k87s)68-$Zxyi4(QINc}a|fGVGxZ7X&D0?9sDlqh z>61;{i=HaH06#Cwj~EAAu6ff4gnu_1J^50xtuT|IfyI`wk_Bg00Wn| zN9@9t!^Y0Ffrqds^BT-A6vA_k5tOdgmv_}Q$J|g6K74b6qF_6jpxR3s;kn*jMAn+g z$(y%}6FN;Id@N3OD=%ss_uU*)V{7aP0+kKU_248*8rYlxsuEB6f3iz{!{J9eN^gMb zURtaUU7x9Zc1-!mW-D)7Uy@5z9;nk7pTqF7O+qF&BwZiD3lBxG0rac^^l&^NslFOt8yv>C5+( z(C>ORWlY+P7o(Mdc`L+8HY{?3F2RySK{IU3lULB^jp%$-k-FQOUkLg*#LDdVqg5=K z(?bsjv;jZf-xIX&^3etdu{~SdVrZm{J2a>^x*BulzyxZ(xA2;V7rnV{Eb-kb@G|?6 z8#4=D%|ApS&RLg4Ot)zVt$8HW;E(r__U`RST8L(`TEQ~BMvmCTu<{PZ0G+$fw;Q~}*wX&8MM2?Uqey#cDFJC)yj>DBT z-24n)!#T{cp8Cb-uM#00>XTm#mWt6jM)R>))YqGhy75T|8iQfp3M^Q^JfLodSydwS zl?m&$Qh>@+WJu#q@X@Y1k2mNUIw*G5vue}ML5;4AA!eQ7 z+)!ZVNH`K27c$Eq5U7TwZX>V0#~s&zMbhR&U(>ey@4TCm86LBZ_VIz5Dc=9m+26kc zq;9-u86Pl3EIvD17);CWowINZ(m_xs;ZX)y?bE(f40}2MO+A6)d=*I)16-PI^Y{i7 zli`tuQNvPFH!4@}Gu|J6Gc+_bFhsW-po0bn?dcy#rKO}C^HCa&HkwfeTO<%ZwMkyR zv@UIY%oSy4VDI+X;yJ_h+o}D@6T7~{rh%Xnle3uxi|$CYwscp9Y4PZeIKO072hgu@ z5<9f}?gm|=r~A$9?0P)HJ-W_zQ|arSzwWeuibEb*fPKK*^5*j4qvHDjm&%V}e@c3E zxQRzo#A$OM(1^RUq((P+0m~^JE{4CLY0;^?ePX~&_FIF|jF;v{bZ^KVT;OT#$yeYH z6*bYtC~xE<$N`}_XE+lc=bM-%?Vl(X02gQOR<{WTK@n56MuYzJ$4iyowgKRoAh|@% zV4EGOq*@}Mse}{(T!1K>Ym*dE8JE-YH#WC-dw}>qC_eNL;F^|L>%jn%XVQ$P(*9S` z4GUR>Tbh0L9KSnSkrnOCs{iIya|6$;h%jR!+&q~b>=V=Mt8v2?r3D_$qC^ksHLhGb z8Y2^C|GGR?RnG^MyvgZ4ce~S6#l5Q4W!zMT0WMHZxpK7p!C!p-jQfJr(prYz#+JfX zm&)mH{)%FF;z#Y4+Vlw=DWY${jME@q1l{5KaVz+GBV=>amPOzCHiG)RY9-+-QkY79 z!}%KuWJsBJq4G6jor)cq>ZhZF*|M%Lbn+Gwowq<_hox3T;_N9Dd9XF3p?qpXx8a)A znEBXT`C6M~p3GT@F7Q1STE&)+IT@+kYMf)zEDSXq&B{%ljy@cH{fk<>q`m1E;<3XW z;`C|eCoI0-GFg~lC-Kb0X zot#7J`pEvp(C)5=$g!==XGbO8{N?A4{6+e$L+M>la80p0zdBxQSykYNW?{8&^rpie zC2Le+wEAae$_ba$tbH^=Pd?Qrr^qW522|X-Bb)baG|HM_tNx^%gk3*&{9+sb z6%JpII&GAkhEdsBECj6{ZP2@xzxN{RSYrgsoH?UXG(>^M#~6n&QkiaPp`IVIkYw3R zV>q;fxfRASm0Co36=N5VZ?)*8NT9KrSd8&BI#defX(q91#$)e}_6)0sxJM(L`4B%o z(EsMI3H3xJ311ZX9g^QrE;wR8_5#uzqSz3;d^(_wth8x|P^^`*HM zar3_D^y8*5Wk2-KKJclwS9x zri2S(%8=oqeh#{?#s)gj^_K5`WOuoxP05n_^6H#*o~IFx4_+BDFvipGuwyccDjW>U zA2)s;hz-Xcym66Ltk99a+8y&);q1>%!0uw|#0puh+lpLLR8*2Jc~u49CYwCha_qOY z;?U~d|044ra%ga&MqMI`Rz#nG^W8LKy;FtB0rHF67IzrL)4erF!Ok0Fc>5l_m3Rtj zG&hy(5SnWoY`CV2kZ@&NVvtzr@z8LH#JF%|1Dhwc+O{JCIRFkBUJc&|$gUQ)gqHbe z>sf|`GvPkYl7gU<2&_J=Q2cOo^X(iLWKlUfvrw;o6iGQIfi*F{EA*!;N{4&1L@(y&0)0OYCL-*NS&>2JwG&RKXMzdk|J%5h8)Zi^`3@j;}506B}9+&CNd|wyWp9y zveev&ImCMUmV!pl2~)AR>6guOrSQi=QYR4#f=Jrjuyu6VxRY&VeNQ$sjRZ1n*#}sP z>2-lFW?MWTH!2t-_MY0IR7eDR=cU>}98FXrM0?B1qscbBDJ zN<{|;t@RM0flzQpX%AkayGvrVUNK&r+wc&Ocra776Uvin3!CG%lJ1f6hdJfr#dbai z)`TUp_6EAl&JcagW>zS$K)0x}>Rs0{Sv82KfiiGbOfIC&Ai<70o;AD5GP*urnYJ(?NY9`l zF0wA%kB{wEM|_hCIvoX>?YdZAA>=d%+;~~D53tzqo|YAnAKfnVAoxig@jvQS_o=`w zbENS-Qa8%Ef>ct6r@g#eL2xE!*|L&mPA_ zq{$uS3my*)8G*y>PNU(V+V95HgbL}^OWGoE_^?{W;)ugzsOunGC#BOxH?z&jCcclT zZ10Vo2D0YO_&RirC;2$<5w8D4A(!fws~e&Q&NuN~*Pvl>?-dAD4O9@?hpHS=xj+V6 z*Y`|2=5?3VS?eXiikYdFcM^9m8oMXwXDN2Z&Q1wfI|l zc{ObXgzRZ~4lVcUJxvc(vHBS##n>IabnK^m!9g*TnKi+HTbF;_x&CL#2gA=LJeg8T zos?ykXbQ#jQ4;h;UEn|_dz;NHNS5V*)gB<*IM}|EuHr@y$K-yagl-g$@5J>d7G4x zj!^E-QE9~`&qO@(KFB=A|MiK_EHFUy}(i2^YaU%8#H8aqM+s?RC!7=6EU zsB-yev+eANyjg71+ZxxX1JWj>lpi-3$&vli$C?<7? zS{S=9V_${-z6kB%?Ul`)UD6&}=Av70Qp*%`v3PSKNNmU!trv* zhgN6=|C5^7+6yw1S9hxy(b!|z=4+bAJgH&qP5RXjr@r}vQjhiS-qW*s4R?5wzgagv zg1Y7<{O<9aFFwB=Dkgr68Z#F?qiL zgF`WYJcZ?Q*{Yuf-N`wd^~!w8Io;+`ujw}2zma*#2mvLaeu-Jp()&m|AYz|K^{ z2co6@Ro9Y!w2jIv#@;>uSRVT9sfm!jP1TBKi}E-A@Fa6Xd@IOkhc14)+?NKICa#c` zm7+;ehO1oCw{da98v@JdD7SF$lZrO$GClDUb+tL_1vel<;%^+pX@&ZYE4EG*S&5s_ z1YdsxzD4Z>Rc}MwBOFj=3J2uO^qhslPCf>%P1i%y+kWn=uEaBRfk|C_9cQNhe6}1I zRhlV1?-am-e}a2ytu^V)#$e$imunnhQS!`&!aF(O-`Om zE-Tu-qVDk+SnqkXWGt~DJKl#K;=HOk`Fc_^YJgL@s1h<-U(@?(Emqi6#ArOc^(=lB zR#;e$^h#-xGgN2kM*fi3aD(R=p4(8de0}@v^sE1Bg~gr>=bgq}GHYH{LA@Nf$WR0bG+pw}LIR4L*k!TXf797;_;L7={=!R(wr7|bCkD*5`$H|BgmMXWXzKAMVoa)CwKH3=Tv4A@_d1O&*;XT^)@X!G@{Zlv_g_Ko0ai6ot}636;bfQjYh| zq-A=k;yZpTcxsP5Fub-8Z~VK2|8qF4G~?qrfvNF}oa@jTuVd&qH${ZTR1ByKPx`c2 zHjOJ*&_miJit~Xu0;rlnPeXwQ2k9*~%xxw?J3Q+p4Gz=sg6Luj`TYE_VW()AcBJ}`JcVQK4BuR_sCIMIlw!WRxM>FzD+Sc@*IM(yxdt|sV_ zqE@HLN^ z)4C_f0f!(`xnkx$U>uL#KH#?3Khz5PU!2pNo_1A<4&_f|MNT54WY$j`GDTXDjLxr8 zC{b>E!so>dYFpYvEs~gM)nav^yhvVMpeS)rugPdWk=T3A`Ae#xIQ>LCP(>~~;oa7m zVP6hI_Z|&gww%&8!V{>uw)Ip4(e{EZ$Y+DL>#l12IQgK7K4Q6H5N7Xy^ww=}~vcJgbqVU|?> zs(k=%OW~Q!0FCn2PygbCJVBBkyt`gDlOt(o_hS_fmROcX;F~Jxw;}uYqP&(dw@VW( zs|XFcQjBKaz_9Pozq$NWKu zXy6IsDngPv{cLUM$5mQSH1*3cVmIWfOo@Qe^(3HbEIDz1ME(<0|)Fy;)L+{&z$FLfmO z{g%a3c7e@oF6>2E5ia!SPG_bh(Eu`Macps^c;o&aZ3CS$g@=YiYzUOFz$?8No02-=Nn>M^TRm2<6 zVR=zbDs2dRbJTvMCr{+BZu|e8MF0N;`lX_Yls2bEuud z!zm@^edT4|`#zN}ankkiC3KgCg*AR)Xol)B*BnEPl#C>n+hSXZUR= z6MMOZ#pSJCl5DN~Xh!m<+YK|YMbDia51{g6*zZIF4*k;gc%xNfRIQp-Xy<>rLCDE& zM_-TUXU%TjR41uZuSbVny-cYY)xpQ|P)N~*&=S{q%UYt2%W*A^t)z-1CRf_v5V+Dk z`h9fw=SuZrDy61;hUX1FyR7&SKStl>`InJCT(olCX4}b*8(w1@@l18w?sWuQvwU$! z?cN0FmN}&WYS&iK8LpXJmBo@P9>} zP&wYe`pMz!>nZm%`*r5o9ww1cR^ZJpHM0cClEc*1HHS%>?ik|$erTQRn8F}8*Ncz8 z=R#O&ke=k)>jFQ#yD|Dhf87sk+j5m6AxbN147i&?%f@yk5^R4CAy2ixm`^LW%psumy-#?eFU;gOD7ZGOnHsqG&YJ2b^rP}FO!XLDAcOvR-|rEp+wiS;`-`9(P~O9-SsfW8wkJ!Lwa|U3 z-}18e{JQG>!a5hjcPGL3iw;$B*cDmR~(+X z{ulpcKe@xydMvPDCbfp4#hJxn;hMPRq$A!YH+jycfo_%f$|5~oL;Z!;SWC6VsemrQ#a**j;GNxp z#q^sa%l#obOyzQ1d$!Z34NFr=<~1?63Ta_UZYJL&9Hx`<>JHu{RO*GstKTNTn{Ec(Ds#4)y{on$!IGOzAJjE9 zIWXy%vE-Rir14k1!rF_8XM*Dh5vD`n6CDkz%|ey=bdQx1o3wc4A+}A5NyT3JtwFg@ zcL?Tfo;_+ZrWx*r@ugi7sWv^km9sd0sTbPve^ND1Y!_qTRQ~z!2SbV>h@>OWu>$-; z@=^S5FB-?*CoblMBj3HRD6PVZZc;-pKhO#QOF*>0EDC8~p^!)V>V|3%>v8S}^O09S zWk4(E%~pC1*>Pr3J)7sb`lE(3SKRgiCoFyuorm{3v33IQDARniWFHWNd(XpCXApNZ4)3*$U24dKHL`SFwUrW|-%E{E5kiXSeP$7@-c&^bGj=W~+^If1G1H%v`A;6oMkadb6IxWec7DlmxZ0oe_$3J~fkH z-{z))=xvqn{v*x&|BSx>|4!u4T3U0wg}{(`3(*G%Pc%>P0zJlNG%jrC^%n%HKUCDd zTwHP&zPMT;7Ypv3C_8a0k5@CM6=+#mR!z<~nHZW#PLb}CU9DF<{pY;Dhfg~RZVXoc z>V()O?8ZL)dirBV?Phul6ACjC07SaxlX4mJl`-CV6WpyMQK=*pbPF?33vb4Ks~FA(H$N>Vvt9T zZr9X*TwfEbI;_LNeK8$^e48+-TlXhd-uCR;^J zJ=d9ac#E+fRTWffjh=m_n@vtjuAMLG|9ILqM^zJ1yAKGwY27;=kJ=GuFhni#8C>0~ zBc2OETqD~7#9ev}J1TY?^t8MtxSSDRM_6w^B?@O4C~ofq3IP-GwOpFSVS^ss$8FB? zIo#AsgAsugFxB_RxRipss87r1`c;bIApThC;ybeLkv7opIRSh|o73prX@^^YP z=4tbziCudqoQq~)umHMhFJ_RURF(IYy1jPgBzJu#0c)JYU2pf(JaDw`NiS*mX#PVI zs+p@`+%JrCsWof!Qb>j>@??+}&0=sH%?|1|=2^Qg`lnE||6uiB5xG$6>h!Ohsq;3b z;pF_-fpD4D-co@mUC7o%0i%$sDYW=9z;i7m!wnN{aQ646+G zq8RX*Q5>pLJYq)vyAe%La!^g@+PmQ=rS8GPW4;4Ev$Y)y>1uBgAjubPQ-!$otyJ~Y z)bm|@pJN8kMwfh!F!)B)_)o03HYSSgb!IGtW9nVtYy24$R^hetPnzt9U6n&`rLe++ zXd1hLF<7mB+w%TYRX5!K41*2LmMw~R;r?DVYSLm{lDXua`)1VwPGsEAiC)5z-&ws` zs0a;kd^%LzCnjfS*}Q@U#hHRNQ8O8(mYCWOKNzYE&+m2PY=HSUqhr@26hoF*N|DXB zjMT%)MpE1v>;=xA2@Jzfo&&_&$2XXFwfOS+m&&leI<%N(pOS{)Vm;36`!x!5t?QAO& zRaxB*9)d95ms+FqNluGZO|{Bv2^&=#>Ss^~rv0rSys;+!R1@1W1mgY4Yg^|wEh1v? zvv0At`tzaY%;iF5UiCV&i5lHbsr2O+ReE!KTb#3%HLb2|Bv-U@i^4j1=PuEz+lwT( zI2G*-Xro#1qw1&N%UkgXrj*>%n#yK3rBH1XHouUML2DU%1O53H#GJ$6DA2(wEfaW0 z5*-%M#_t|2&Ru_K_xgV|aYVh|ZQN={+(H1u0S+%$Bz1)MaqKudJ!Ns)|iDIZr)w{&UWZ zv6rEui0Mw#0XVty`>DkSm$7nWmZXkUUDsl|4|qvCtIg5S&Q#*+nCsH(-uRMwdx?#3 zw`j>|F~Ig8ufWiv9xuhD7Ez|l`$G2tm3PP(A`2ughw(UE*x_v6kfn(`0h*?fD`|=^ ztF_}I)qDKWEAi{4FXMpy>i1nFO=Sbay;i|J$G;Dh!H$4Gm0xt(bb1}3id$yKdaTMg zfuLlozRpEWtqYNfryhmU{qMkokYg@*Q`Y6$){&9n`V291`)Qmk%0xID@DJcx8yNzQ z4Gj;Bfk2~!U^=a=rnEZ8e1gWLO=R@?$Q8mErn*UeW%h z_X@y+T~!eJq(k`?mf_qA3@U%;5Jj8>uG*+Xpm*J=_)*tct67FW(QphN^6tEmr=qy4^2;w$d^Gc4zM zgG;NqzPZ0TG0}Foxh4?|D&VZpLPkd4XB#4K?l9ccYR?zrfT8&=66i_sXsqmIs;Om+ zhRf`6Z-{nnW(zQ~^qo#<8DobUS9N!#S}mu->t(nQhg1q3OgFI|$QV7L8cz&JY`wRt z7MPoFND)Zt!Arc47w0>?`0uj+k3p-4ju{Qy$k91l!PYO;d4!xSl<)r3jbexg%9*y; zMyZFdNj7+CMINPHR1Vi0$s(FS+E^ zam2X$nw6uUloL$3?j{yE-^oiuXFP8W4vK6u%R!Z>@%Blg?Gc;1!X&$)K?6u$6{VKv zleGF?Eo@h9$ty2N(d8n0D3hYJdhIv|?d@LBbaOpUkmXWenmv6uj#NUZu z_nwX~osmeJxi(3-5q|eSsQv%Kip#{&Pee8+q;f$@;G^$80J{Z>^Rs00M$i42y&fL} zHkb$(!dT88ev0J|e?7H9Ik%)r1hp~Ib`EZkE)|5t*U$%F5Dlpw*JY-%30t>&LvZ)n z5Qh`AlU}=qh$@*()U`F=o&pAnk(OtGVc;Haue;@MU zzH_a6?X~y1@3r<`C0tc^F6fFaG~nZH-1?&1%xTl?$79>F2Sd3@VfYu&Uk~CYiX?XQ zJya__7$$-cTbGmQZ!oNFaQ0!lC$A@%ojswJG*gD)m(~}&7*8w+dfGOvV69ZR#@gjK zI@bl7VQem!f3ARgHtoM-g1)cZv+*Z#Pc6K3aGS^A>N3)~ulS5G|2Ut%^5kvH{vxHl^Na}as=Pv4v)c7wh2L$*`+9}d}mJs614 zgTIOWMqc}$A#c`qpEFKvWxa`P&qzK+{mM{J>W0~&ov;%{+67Zwcz%1YD&th;-J5ui zKrPXgigo?TlcTk=*J=%AD7YI|r2|#2RH%39#;Y`=WI|-Ben`O88As)78UNdz{=Z^3 z@IkhB7`E0!0NSe2>Et)QwV%p~oeM!VxLFHj3ByI=x-A_?(Xgb) zE~N#B?C4Riah?d4SmSyX{9@iJ29ru`a;v#c>c6)e>4M;Bys(@{8E_w>q@QX5wHOR? z5d5{3aw5S))JPjWp{F=RBrmja-sr;7;s26}U{g|yQ<=?3jG(-uTgtoXLhrQ~H(m9I z;+A!U;~TQgshf>Eos&kWt-v4@#T5(8V30)(#gJvX*N}IPlee4J9+j~wR;-15E>}ni zU-^#C-;pX7kPfRvO-^>nH&+$Lfs&aTgGR+jqMZTvI5qyfxb(X2WbReFF|w(VDs}C- z7UGX3^)>v{+!GxKQ2A@~0&pG3-~BfBFSYe$G%WKhP>THpz}z*Ik^fwqw3AW~Qs}rI z^@k+dyQ-PH_(W}TEB!l{|)xSdfvSp2K!^#X%GA9*m!F|Q@UIChH1+h zCN2^b+Q1EgSfCe#;!APBxQyY>M}A7am6GdZBlnTMJU4)?jGXs`nyvNYZG(jEnmB*c zJCm8%i#2O_F^}hfasA^@ssn|%6wpN%CQ?Z2*#^>)`A+*AaR>i`00#t*XcXm`gK|SFTYhn^rc{z9%0COzqj(QpmDrqLePh^WW z-}ps(0v6yE?&THg;-|~#WJL297}tRMmt~4@MG_=nG?@@$VP;gvv4M^1HIsId?)@Zv zr{fQ{?thh^;)!;%U zfY;C$e6~S^=|pAsUSu|RU6$>DKQ7g=FK|)C;FHv)XY6bTnTyRhJArz3$2a36cgt)% zF>wfIyxX&8I?kgTZxpN>65yO>(|9)O=ij%FE3|H$p61^T*N|{(6i6?LNL<94EHams zhVz}h>s_5fCJmQhARlgFGiB&Z)%!8?ca!-ad?`7~9)07Jn3~Eo+ft>8GkxFOtN1HU zTJPOCxTRB^03kpGYRyW*`IBno5{M()LsPr~i}jS9L$-$`OYB2Rk>qW3W~gzI{fN9` zU)~9~gc{D6IwIaw$@jw4H52XO1Ila)Ke>?|4O7Rq_ZgQ)NSfP^{as;G{29amf+-C26L_(fV)YrZC0Vx`1(6Vp1$pH1r1H-ZYnznc_*A7>grWY$ad;vC^V&v9|t z$}^OjnUA-kYj<^i@Y-6p_tZqSg3WBg#dhi-&y23+=z>%j7MLFbztJ}xkxH+5*I>H$ z+Q)N9&Z!&}INW*uauB>lYvuLr(q_gi_ZThCs5j!lfTSHTRlbl`gH{~7Q)+HMSv1Ad zziqkflH+$n)M@%b6PK5kF~hSG?9g<`W)`gJ-fj=_F>qE|bXcs7tg(n9czdl@4Jmd7 z*(GeBPKlGiR=yplra|kiKq%!E9JFOdi2l3CHRaLOtZjJ0tr|s(906LHeqT{$>5%+} zzd#IdWqPu*p=2u=cdvShUe=#>VX-)@&I=CvwILz5mz13I7{}9-BQt9FTlP=i(t)FI zxgM>vc!CNJf;E_jY-Nsbe@OVwNy?R99)0w8?nIiq(XzoNHd857}e0uMvZ`NGY>njnJ>QAS6ln zfv~jl*$NWrjLG7cy6`gGZtXVRsoH#Md8e)?lX4pk+q+qqlBkzeIm zB(Q?a-kWimrE?;+s%b)A{_b6KJEc8ceP{@z2+{Bw0GZ5+>1rgN?JG||-+M~c_x*6= z4Qe~1Vx>JJ$NZo$YdvJ;Y&D$M3zXry5nG62?Obp=WaA09$@buz_RnvO&_H5 zobK6VxN=`MIFO!NQ@K<*ED53P&r>^7_%0m0jwohjK_N0CK3SH)>OMSa~cZjmcTo&%mM}L!t>>GtYZ~4 zM2!*k4f#r+J9q!IuJ@vzE9=Zik|^0!yLb@-E_#JR;6$cOT?)$Yeze*-u$T2xFM~{b zrcesY^smf`*5#PH>-Am~O`vk|X`Wiu^SvHLth$mH^u%Zg(4D8Eb9<4S-*p3l+b?Ef z^cS86F9?0Iwv-`*ywg;iqxhbaD!!k0W+}F*Ynp`JV5ob|zTV9eg{pnDD$w~MU>=88 zTj;a3+i95+4|>$|>ODMdSt07_mKj7Yrqxg+3&+!FqkoNy8}5mhC#Kpg#$m`Yx-F9g z%u?JEM+FfT6v!0A_R-pg)!&Y@S>EP+zcJ^;v`+BYOBicX8{gncw4gbSVRy zNm=zBPulZ(iOHMFqx2ngNVR!gG~D@}s}-WoOV9B_nOoSfx)(y^u^XhAQEOl+mk*2uJP29G{Sl9iRc8dey0 zN;0b_J9={Q`__&;(@T{gC0UrAJ}8J5)YryQ!sT-RYhpV>&w7SG0oKvVn3P-IUU`U9 zuD^rsRAG6)Tl=MQU+P7P6|^UsU#GWfUTvWke8`3@ON6*+UXJgQg6SH*+R-YPG~sx9 zVtCt#<-9vS)xys$y4EQ>MFiY!Zd?$uNLIsx>teQY9bfO}lOZX=sOYfzPO{(5wv<=s~rl(erCN!GfDc{@0x@_%orNaQH z?&3ymCMx^v+l=K%Id#4P&C#L8h7*DT(b4=Pu@$*qqS-dms(=1C6v;CON)_-~CO+&d zH{r5toagh#;s?!J?=W#r4y|^R_ky*q$DMG=fyOsac}etOOl?ApKi9eF|DA-yh-*m* zu5{F{Tniddev(cp*Df6x@-B>Ehg15H>B)_krHy8(7E&wiTAFY{G3V&DFx z?w|82&wf7kxl)W2-gV@Oc;9&Kn15Kxoor8khjJ< zJ?{N^M%>#P6&2=Y97LskU8+Oq2k^D|mE%5eu$q%YcK%ur7c|&}`(~s0rWr6^`~*yf z>lM8SgEjI*1<41j%PFX)2(9Dc%To4MNQ$HhPptf>^?LM>_OI^MvuVqzKWJPWu&*bU z-jxqMT~j>C;L$obs-93za`by{Pr%rnEE1M`+<@_MN@}JrdQ0A}B;rg%tn$p1l1RKx zJimxdt+DSZ+7^|Y)oj6AD=>+J8Vkyv6||1gkhjB>`cCF%yKy9TT2)q?xJ@bL7d+jQ zCmKSlP%s88S<4Aj=# zv9f8FJF^(Cv{|9406AA-Ivtx$wfkS|$8{DctVHlt~^lsJpE{Ebu$&* z8l@)nJpy3DAIsE=ZkBjeR=Pnf%W@ehyMS}=N*j=!(_I$@XOtSs5aKvB`EN14(kS*{ z!jW~*46(#p^B9+T|2=hFfyZF!z}_)p;llHp#hJIoZoV|jLLVFZEBw5=3!*5J^GZRR z{@75oWJ-Y*+ExSw%{l&y1Z;JCPwA8AehWJ1(7W=A7(1+K%heMKIlD?3>1PZz*h^Y| z?i%6;#qO}`a?)ia?MccyH>_J1R4=&X!OZJ6%9n9^EmXHiMhmUbjYGDa-X_1S^K-k*n*jt!mRLhp`{YMb#e9IrZhk0U zX}>gXS$2x~Y6I`41?br?Io);tYn&X7t`Y1^bF-=bWLg6r(=`s+gbgQ7UmM*vaET%~ z=YUsuF)-Tp`~ZnJU)SBT-DRdU8i!HSh0c#q6AfL`pxMWx3 zA#(ebV-{))h{59V+~6GSz{*nmh=={>*6X-F$a}jfmfaC$CkeY(dmA&2tabh@JUg6xMEG$_MYCy3fK4s zNqP;Er-Fxk2||Dwr@I4k`QzgwVO2shoSH@fQeibP4}~^36fTnN-X<#PYk1Y?<+sQC zhseP zrFUYdw57`q4`{8<9W-U({Gu#&#TDw>j=zU>Ez*{43 zv+JFGET=jSR|d2cFMtVjmORIt@bY_(STN5?D&5%Z(p`?u94)?K)&K_70H)l~eql!k zm(IKTgy?gY^0bL6!<@bNBwc$i*Nnt}p7ff5I`fdTGeDlKHOhn_3%=ctL(yRft_8I&#>y2^yqNRW1lPo58tUTYd692C`CkVA zE7mWyZ}k$0$64iz$9fp$Xg!ikplQycdck{=SD~+%ZpfesF*+j2Pp7To9pf@2J>{)A z6C+Z^au_z|pz(T~yYaQY82?HK_CEk$0P8x-ZTIT-({7?9s==^gVf@&7kQ^lq0ob@o zYlm&xi@KO&Yp7=FrVGz8=u|xI1U-te@4NFx>e!cbPE_rAH^4ek5&WBnY#odD<;A}K zJh`ui&}VeDT%K&&74Y>gp|8XSbfsW?_cw*(Lp7Zqmv0Wk_VCbz9kJ*(;sviZoN)6Hek|(8-v@TCPJBsRv0bI!l)BpsoJ2~ zN3~OY)=R76)pC&NsRu;<*CxtFC72+r4e$*aRJabTuBR3ibTRv*?($iFo$^_i^_;ys zVUHrNs&gN*LGm87e{ovKuEW$>GNIxd4*2()X-9&-%zrzt&8pvXIAptXx^-bpkCpDQ zBX>S9UFwuy8g8wko^;B%BzVNdF3om_(VLjbX$*Fv_@u}=%}MuJk|%wwFJiY-lQ9pS ze)y7?D;dGRF+>Th#uc}-fv}4fqM>f)oj_)r?q9PQag&4AIkQ+@oV!{bKA9redx zcAhh08GUUcemn&>mg&>_xj$Zd(Hmr9k*G9k{B+~yfvQKZYMtBnRnTE=zDc`U{ni3c zR*gNiA+veZcuuB8Q|56U28>)iWaG%ZVX*Ud^Pg;zA88DKy2!;BVD>8lR9qAoWA#|Sx~|(z#sNS^lPSf^8S|)DNekdn+J_EPdG>n1c1i||EbRgs z!_zIOh3n)q^I!7FwbFdI6fyEj^+a?lczRv^$*vYq{5+C?4^M2PGq^7-Ny`uHNE!{vSbbH9S=}tNL^>o{_qVM%g3!bA(C)ZZ{e&~Rj>*^d%ac1BgtWX znH=@`P3ZQWn*@cBYKrxNYYE4XsH37JdkUmox2b9U1Z$)wcmZ>1uqq3^^)4qfDabzj22u0q6G7M<>ldl>X1TwO8?@bIz@i3Dv zCGmc;A+OqgNT0B7g8C~Rj3BP}6>gsD40hTyy*9V$YNR?egO$T*c6c`pXu5}y91>iR zW9`WVIe*pyuj3LaT(XwwDg7Xjy1BU-xFI8R^)`V($T1ol8X8MZmRVZ*XecA8boDky zy8L5Lj;W2YbZO%`lC;oqy>7v8WjwQA^b2D5;dTx#^P7+jni_RWuEaj|xmcVY_^e`z z{(gc%RTe{GB=!N&kpbtDElYZ3X&oU?f3sydMe|8Wd4WY@Zng|uEAlk)D(gLYCiE;V zEmTlu!%00giKYxTWTbb2;SAcnoCFHO2nJG!NbFlKT4?inG$e`@Y^y;<6e{G!2*j`N=$TzvP7fy+-pV*J1;P_ z9X;fG$aX`1TV0|}hWBdAovm-aO|KjeGs}9@R0mmqOT+J{pFZ(j_?JuKhz&jp#!~RX zkH-Qc)!I*~ev8hR_@l^k!HCJsA`QW-YZYr8Nw?!)G(dOlB}qJu9=Be;ABXGg(79(}g?m4HxK^ZupzF6F?Q=Wrpt8xwW1 zhiuOHc&wj3O_<;|Z(_{*+I>JHWkOkQ?${b(+;+0CZgtytWVB8B2FcWR=Ke1^gv-g( zrzbY0o`iL!zz0>K(^nMdY2W)As4ZKVz&APqV~fDfi`P`PEXYPN#$E$h zR1D#jqideDOWY=i(cWoW|C$o@bFp^ZCtsXaZPB!J@Keo+=m}5d;9J$T6ZPLEU4Ac+ z%6GmIk{RFW>*_HUq1Ip8FBUb9i!T}Wa!c*&Efiijeyn;Y;KPIFpc@jCr2+>1OYCmr z^7nGgO|550Hh!wY2EqotXF8mGYx-Z@)K7ngwsky_gSVNK2npG-h^>a-V$RsQB-%PB ze*Sg*q{hcTX%>mg&;?}^qI<6K%ue?HPkUdih|7{o-0|8Ex6FrTvfOttjTy~}Rm5oQ zM#J6SHELL#o7V|#`>S`WbdHD#KD$;vAtJLU_1RaWk>81W1YJ*%quP`+)4iuOQzbB{YT)opFyuXbvQpXH%e%yEQEY!H9g~i zGxA5!br`As)GWAkz2Y2_A_Rk>+Lvpu*Nl<4YrbobfrY{>g?eW4G;kvPdsjSF0 z*I7$gWFM+5oA6wBYy8~)&t*54MTu+NL6|Jq?+Q*7J8uu^9gCl zOw>b}coNm*l`yOxK^>dPAV>__+uSL!0*GNk-6Hja+t`LqVKBI893d`_P?r*yQpazs zscEFNg!7W|$|LEI{iR_3?QFO%@@b->NR%kb=5wYnTjWoFua#2=w)+$YWb|NquPX7o zvv0oC^17~H%MQ};qLEv0rs5&nUBHv?*}tXTHw`AM*Dvl@WUQMHVeJJLU4nPZYM!$3N znj3N|vB>~x$JNEF@;gHHKYjLYV?{q%2vMK(Mfc48u-9J~728Sbwl&LH13*_nx3=xw zj&Ei1m%k9i(6RIgRT|E*)&AEP1uHlnM(ZV8tCqXI+z9>`vuXA4v)ZbP${r>7AZ^`q z#_($gM#vNa8raoHn(P*&{0=F8>gzLjHv!b{8F1Qo`ZRTs5r8Gg73Q5Da z(+XKgj6k4wG*4K2g|9`L;S87Bf9bGat4%eHwEt$dQ+5Gz)PuQsU^PvC)di&ZC`|#R zj4nzUo6m}8c7ofC$}2OSY?_AcoqbcwNPK}dyC4d7-}XmNbynS4&$}yf)sI^D9VhdF z+c!}f$tqwF9a`vIN@BE1&&bG#3~hyFs+pMM>M{*+61H~>XY#B!0 zcx^W&{psVlQd5JKWBw)}Fx^ozdl!+Of>=maD0AID|9qR>i;n9P-)CGXQUQ?EL(%QJ zohe2sPOx}lRef3t;kXH}%o05@8J$Qv{*&658~W^n8#p;{dU%7))c#QrdD*UI0p08| z6pz6pMWgsTIjG?#=~vJ!$xl85n7A?>L^&1zQW$HKbnW=NyJGG&kq-K}DX- zAcuGK_1$BU;*Qa8?-W;X+um$}$tPE1oRIG(eNajTV{~5x{}AJLwk|S>f&(I)6K%*m zx#gp5RxVyRk&$*j;2nIXHdIxEnPMq7X;LN(|8fEX25?q{i@ zWfWrC1*vHv-QKf!GhW@9V(6XEf{Z-u{+GA<+4kHLjS@{vb4$BK7-SKKnY36ULM%47 zmnGo7( z`+jj^RC0kK-);QUJ{;6!-ARjijiKvq7@r}&t(9bv1{MEHdCxYjq(%j@NN;N|)D@-u z3k%dLK+$dSHcjb zVZ)l$iftzYDVRl+Z{NNQW~G{9M35tdmvJc@Isu1>g(HJ=_(1wKGrH`KKU18o*b0ZLB0|9+A zCa|u~R!AwyZpgg47KvK_E-7?kyoj`Yd3NbZ2>?Ah?>X#hO>MHLmOQO#{ip@aH_ziO z*)bD#CXpQ0+wDzdHc-AABGe7}jbGv7C1qfIlw@ zq_)*8-;FtH+Ed;Em$>w1MAVM#+=%y$Y=b)$*^og$xs$8So&5eoGie@*x^=`khl3Ss zLX_BMUv+uh^wnKV6yvww?{0np$%)k${&u^TdoGhzt^rRP?TKATRB@0sJ-2Pek-`47bGAKBKhI>g{&2`)oatpt#vH*j@R zDl6bIq1u|}kl0eu?37r6whz)^;F3{QVRC1OT5^jqi2TW`RO0(3KV#l~PY*krP)7kI z%r4sAYw08CRyGW#8%Mwq_yRYn)D3!$?pQRhkZByp1!yD4|8*}`S`_uknR7v1dAjrK z?q3CS*=kwPFy!sH_m%clHxE|2{j>wefk$faoNsde;9^LGuaY=1yZmFis|KdxE!LBo zJg;x-y(oLN%RIU7Hjbl$DQTV|K25j#Fui1OnqD@%k`O-DRIcU3k*ZpeVO%$TjZa($ zhPsEOh!&TT#>vrBrp8z(+!Xq%3hRR(r=p?I+bz^AD&m2dz#LV(B_P%{4;v`=TNUg< zg-5`AH}>JQw$6}J=#zmSczq zOpF^3Do0^+0a@1%p1{`0$Mv;WGPxjTo&enkFTW&{p4GCjSv%)8(E#7;e1G)Zov%LZ zPlsQ&NPr(Y+Y3rQwsMCD(nr-p)yyk-}*Xe@@o)NTv2vfrq)8L)o0S& zf03&GI_V!tvj(g;+voOf`N|zMSgy=`EX zwHym-icw<6S&79U$hKmB?HUQ-JEQfZT-#2-}^7$JRm zPA;Xk*S9*5q$S2|?0fLyg(;#)z349`dc;uh0j*ti^UlQOf|gcUPl(R5>aB$Ou^nbm za`l$O;s|e2d)wvo8^i)1EsFO_CDxN<3>wOCON;D&5n}1yhZ^VBy2J1GPp0Dh1nYh6 z%Lo+N{XmA5>bPYC>suIU8meXu<0+M$BX)i5YwYLg5tfV=g}Xkqb6&Rm9*JG17+9f< zp%@BNXLyI_cP&YdRUMqu;n5kk8xe>NL>Pc~;Kw$)B;xA(pmeVYS4H1N9JBnzWy#)z zj@0RqzR55L!$9NbZAy}MF5-sfw6f*~R za)j%TAxnEPBE_e#e902~(1ruIAAPCIda7Q7;2#A1LUUX)Rr}O|J&3 z70Pm-O~8P+gr7Ck;67)N87lRes8ZN0o!)RarDU^K-ohMSExi(Spo7<3OUg@mq_5ww zoh=_L9;ACUKu)}-9UQVHbTY~}nK{NXCB4WE&ne!;5{tcu_7G=1;LC3=3a$r(giOBx zn&MEz)cqze5V|k64K}P&QZgl720CcE-!VvSonC!WtF0f`sUz{IZNT0##|IA1*eEbZ ze{u>HTCP1b9-kCr1uJT6m%XSTXL24*9oR7|cNNL2gl;&6zUT~i;7A4=>eDVit1jSw zvY5p+2j-(W2hIvIJ8EJ1nTX_05kdw%?-1aN|3_G zAN-Td)J0C7WN}vqUBly>GKhHW;1nKwk~?!#eem>*Z@gSgNL^ECgAzmA zdJt%TEd6oXe7snrNAImH)$&w-%nISks|N`pF@mzN*`dckO=gHzrb z{dsrPb=n$)4H7ribZNqJpkO!Eq_=C!8gNR%j_NZ6DC#-6#;ag4Z?UqRHr;qD+s9N# zPBdH}UZ{d;)cU^B!DDLA>;iN5vDzV9Oyv~2+@6L1m>Q*c2hEX*$itK1Ergb(*F>&E(OsN|J;23l-K3n>%i43S{jNM#{THD#kHLBwIu>MG}~2 zjsqo83V?`ws{(T;L=JovjXhros0I^IR%)1n|+$Qq>+ zP&XEoL95u3ds?8x+SmMvGG~8_*tQ}NTSnF=pz(Q=PCn9-)_EruMu6x{0*3!db-&E~ z_nsK(YZ;++UEDiRKw3tftHgHiy1HyhDYz#}0R%sD*E`2g z!%U#at#3RWtdtFhdR&?Rw!qaEP-;(}AjT5{BgAInwfohL<5X|@vv64bv0}BQR9o^u z7mt~Y<|5EMy1AU`wO}X%y67k^Wk*XiDu4CK5FxX@u}?q_&qUYj34<|GH;!=!I=DIa zZVHU$R4xpX&0y5h)Ji~t&7hAeOC}aVcJh`4Is5R|%9@YSL?5?1E$5jS)zyVq&iCd? zyQJCZpN%^D;mxP1-oF$Wgy5{PDlv?o2#ED(N02!2WdfxAV;3Z1s7l)gME;p>H=!V+A z(m{UQ%~sk>?<51q#tzw_c?;70lD!ozBs}l1V4va$U0R2@6YpBx*HFgEPp7EIV23AZ=x%Y|!f zio^OhrCr=fd=39=I3q-OZ=*K4IO-110z-He&U}(qRF?6mTh_R8 zzJ5KFKmFtC0aF$h_TeUG|3;VjC6+z0tBxKapY7uZRP0YPtk9HHFqV9DMTwKVR)s&WO{TKGc=uKA|gm<0M zwyv?PU-y#ptnk1TjtlufJSaE$bq_{_B1tLuye*L;>8txmx%0HTqe>gkBAoW!5ei2p63BdSF@HIoXFu%u*Y~8^PC~+dZaBGlo?y8pJIC7X z_X!zyb3J5xJS(+&`jWkV&1=6!m$bT@EfZLaf*qZUxb^G7mMFrsME>pKK_}CYvc1|u zrW7QKrubX{ML@d0i&~aOS_l;rmcTE94lINobbU~KzFTVwJCXKolv3P&SAkWt1Kb)I zd8M*5_UY{v(oZkYFHADjDkV!hvVDCMs`9Lw1koH@O)%%cYOS>bG9U|P8JOX{N% z2N~Qd*3AyX^lKWm<+E{~5we*eUX$N)pJH`kq43N|&vTC!iLO%MWft)2HamBu= z((tO|<8Bq$_Y%s?~!S; z#^pQUN8}M`I(d##Ro=41((F(gv=8doK*c+80_W{WlHJI%?wV}V+!7Sjk>@+5 z-4l)cT_APZa}8!2N+)M)`64~86&XlEIOoaKZsQaI;lI_?6{i)Jl6@YxnYe7EYjiUc z>u{g|5u{7n*@ySOQK|Uoh+r(F8ZvZ!`T?#c#!Y5NDsDSV&JL%A0~n1PlpQ=?zdWYN zb^krRfUG28=cMdyR!&>zwsMPdNgNim*b{{KXFGk}z`9X38M~aYIfihVkv_&Qvttmi zfpK)C$|!&??o<6{HtafL^iaNnVi~T)oiK!xYHF(q*oLees^x&M)=o4Q`8D(9*I8!w zs|{wJcV0;i)EMor^WaX#&VWrCKWy4#qR_iIzXbU#O(*(jQF56fKt121HZ-PqG;y&K5ECc_!pAdfDv}tf*C?=(7LRrT8NIaI|!vetVTZSf9gG2eiCELK@ z4wpF{bhNB#imF^O+Sh7!Qo>jgvG9`Nege6oS zLpJ18Dc(!OoOp$gd%qlM7(;lRrzAnvO0|_r_b8>c>Rvlx{f}h-2d61ad=8*xSqx}z zW?fAtYfWhpZ4%c%WG8BJ)2Iw#yoW< zpytC2BaURbsE{#HyebI1MmeygRo2x67qpE;dzs>M!>QF<=LbF096C1W%q>GZS3=tP z5WPL0WWf6mpDNFtd;Ahlcce2JX?G7q~4f zNIMxV4;8NNOej4|$URDxy~+abU0t)%G%92Mh!=B}39ql}w4NTjGc@lI8m>c^vnP(0 z@X0{@9Tx;|-mGsZ+YJ9{ga79>lPU2hbj&I4)>)HP>kE#@4U=Q-gR?}@8>xFdmIJ;! zxC7sEA)b(fx_9Fc+OCt}ttE6xlK>#s&Jmv2Ny{`8MQ1Qt4C!ba6A=cP%Mg=hv-6kMtHQ?*x_ye;8f#T6d-L?* zlVHW6*VHISV0>Hl{9wD4qu?+{G9$PkPdq9-vgj;3keG0(UTIq_1)-WCxUV?iF{0~k z`Q9O*AU4m{Wou{mRd!}szf74*8F_(8HmZG=zTXGG&Y+%^>-pfuUaGee*Y0Z2jPGZ+FL4M^ASh-LxySmw8dS z{fwAhX^>ErYF3=4v*uwJCS5(w?_~uwIp1`jmA|D|(HP3^vx9;@G41Iy!_8qoi6k#mxOogSqb4BWyk4pg~4KWGW z+-{^^&QE{0jyD8bf zSPMVHoyd2X3G{lrlfoa_y9=hJRaU;AmJ>^~Ey5Rh^ly?*WJ@0{{vTyK`e75`1RA-w zm9{yGzq6TfOxG+W^1;BG3U3F1sk6QCXJiBghqi4!?nR1 zt>TGQX^7?0@{oylEF@ussneJjl+rjquoy=%TQe~)?9g}J0 zjWd?n|NptbCAv4yLa*W8pv6Klq!IaE)9SS>@i~D|oO8hC1+%FPS$-E9e7QWx;|7QA50vw zJ&a^I0B#+!{W7$*SM%%tyYheWl?Oeir6=pvCQbt=YFQ7<>q6rzY1f-A-p&o_=f&qd zqAAy2mn6U}TJOqNtfHbbb5melN+PH;QNl_;Z~e}`G3uJkXArL}Z=C~}Pnw|APnY}8 zs=uI#SGIt|M&v{`kDV!aNC(hHb%X7k*V29|?ZQpuw_FrOdDu!7gp}QS|AyD%55Ax5 zgUXjx;p3YpBd~w=NEcfupU&Sy0tv4_Fw(`|CgBAK4FqGFKx58uk5<|qpa0B5z>9^} zrj!|j(hG}t<``-v1BQ3ltIGG(I%G?vvSf`Vl^Z5ULw1P5F2xzqen#%$kt;WqJGx_O zJR$mLABLJWHhh-~-&B{8+B{l08anA=HJykFHNDnfbu_)S!rbh*3E#yzPo+v@Zsk!m zgWllVH8}nAdQ1;9t{d+F`jdxjzuD#TfCBsc1ieEI-UnIMmD%ehl#E!vV=YuoZy;Ub zih?YsN%Jb}Emx9^WyU);Tj$YdcRpNR?KwCH=S<5;#&q2~WV`0;-@jkKlisSskcndM z0{{`8YQsXUH8BZ93B7^v|szg z`#$>V{?pi(VVKBc^*Zr+MkQRo1QwAA_F8cSmybl*EYzDi)} z42u>hH<-bhob9D8XY2dbcS}&`Ek1eg{Uw94R-_MkWND{;U>1bAvk(5YciDiYuxGuL z2rS59sKV9qceGi<=1sm3!6hCIKa*V{KgX&yeK$ov(=4X$%@p2-R;8b3i1J}v)(pd- zaM~f;4=Sn3I*^Zit@8IAV7x-RPG)nV)Rgz?Cvp~;y4vKR`TYh6>l)W(#HSbT)%Ej@ zz2LFAjDUBSli%4Io7d7ZE|V%fY>y8aE+|PF7x{gkb>3~odqNIdJ=PvQZPUfH*nYb2 z9vfx9->==zw3d-QUz+JRQ_u0<3a?DaP`8K+T#_V7nVSVIOej>1SfS-Ky|hHq6o6$o zaPn%DlXOok^>pi6`4z8$y*&`2?ro;9G^#mxpf~LX#PXr^v)GQifdcw+I={9JxE9-X1bp&* zUNk#&H#AR|sB3yyS1zJe4yYJAyJ5~<4Te`~;gTbkv3TZB%D;1f{?8KMj`Brv$3Ed&dbAM1|K9D)LYC2tY=NVA z(>kC?fj0hhWM|wb61-F4I|(v31J18UZ=Q_yOvUFWw*A)TA_YV%4BbjRqIm6Vl-VMN zE=Y}9=XiPPeBZLf9{vrR)N3)BK75sXosxT^%gh@sJV#jI&!XIHmFvsotLKI9iANZly8S~xOT_p zbua^9Xcp5o@)Qtl zZevMT?k~r3-%PS< z3a)zlSyQHhb#w4l#%9#bh~D-62G)^vn=RogD#V2cCN9(|!{nX!J6nRQHyL;54;vhQUZ_b9J7GM&ZiVU`d`TlQC4j~HN=>DiC0TIdFsv@u=%DhtUzb5FyQ>fzBA-{;N$HmWRPGl3iRH+f*NH0 z==ylkzPH#;DQ$Ybn|Djvc%IEG1gGO7O6D00-nsy4;r+KA4F>1eo6nPgyM<(osasna2P%xI% zN$4b*di7LS6q!L}dy0$-649m%#6^_n$D$)#;N7Oypm*CxS142i%EVny=jG>%r)d^U z85wd0kx-o+|FS#JUlJN;7MYbZw_x|?=aF_JhK4at=n|J$*Z2t9*UR;O2 z%M#d(E9wv3Ph*JxMw|??vcVPk@k13#Pz^=FgfR!J<`sbajF_37nBed7sc+B~X44@9 z`IZxFCnSndsaVrL&WwIa<%s(ZWOV8JyG>6mdt$h5*t+A|V@>a%epe4`l6`n2C3a)5 z)hE=#H}n+JlSL!vN5G#nL}yJJJb_!PnAlCp_we`xUMUlH9*eJfKkKOlmD{n8*T!9G zUPAA&rE=6a6tOeO_DnWnAVn(QjCOZGg9ln*Z4q5&&V7MLXMp3n$o?(p_*dQb7lx*F zPlI6zdcpT6(|4h5E0wjSbP;QkImjkIkjFlAGbzA|5=$RHNrprWPFcB)7Ad?NyM>iB zEhupD3s!58oyfh-cZoT1cgCP;^?>VQK#_tszYs`rmAPE9dU6?4%|>aTi1X}lV3exT zdNx6lC<7$)_da3;Zq9@{YAW3yT|R@dJ;MK~6J|uErpMPZv<(wNU~xp&c;&NgPyluP zgb=uua;$JI%whyZY;;i`$V032=kUbswu|YT(iL*k4uBhe2K~c8Y4)MEkmChLa@D8&TpVF@7iHf ze*}M;4EHU`KrL&U&}8`Vr1Tzpp-Sb`)bMY{4Sqb}iUA=LUd38P{aAiI^s^fW{|&=7 z@~LQ7fyPtO`mO?;>(OEyzYmix3EYY@+%12`qb6<7zQtb6U*BRr9;pAv3c@e#M%J;m zy@%YZwyU5^tux)~^%ngyNyU$q4m*!qr@aGSP<#r{_L9Hsc)}csM&v> z_f}QNdc4BDBy^&v06I*oBS+mCRt+xqs|vr!f5ydZdRHp7{~=dwJcD z-vMlu9sCG)<*qQ6##YMi)u$7@1j`})c*#Mkfl#!p;|%=@l_;!^WHgI$m| z{CvphJd0>oefch5Dsiwyy4|u{$PeZOZ2u-<+;~pYdPl59YhPeK?Zmu;an2~k$3{|- zyUS}=bTXwPNAT2eaA%Xa<(lXChRj^&g~;d0wbcYkL$jN7NtwGi>7YOU#)e|@6|e&km`k^RHsJU_X&rl7-UwJ zCw+CS>CJPNE`D89q+fB#BS)C}+6e) zXUJ$zjJ&US@`sU>9^blJi1Xq0H&x&n9Z(6n@3tMJx#1781V2<=mYCq(-KFzrr;?am zaW?>%Y?Eb@Ids~ooU0GvaSdC?4 z`Rkb&7u!%bt$~ zS*@d}y`hbsy;UWh{+-O$q-@I!F^f?C(ohr6$hy~4 zw?C10!eLK-0`OtIHxgG!3#cb3TD>G$jVK3eXgRcGC|(M0=}wUWGufFJ=VRdFKFNdS zJZ2jsW9(y`0amw-kehWX6iWO3>N&%|JFX&l{HNXMf+1cn` z%|(dwx+(RCu$I%5a(j2O=XeVMBDnWi$5$4I`pZSd=^~<=tOKq{$jUlQ#% zx`7;t(+e*pKjw+3L1*$@le%a>YAPszL>Kf~74fFIrlK`UX-=-+IOwI3GafdDKdkbz zk)7K;0$4Q!EL>2qx!<=@;6oO7p>7EO(!5c9+{p?MD3MB7Qec?^<`HES0g!|{%F{$_ z{r|U?^jB~My5l&GY27;Dn$2`BAvsSjt63OR_kA+QFU-Un-x_1rw*5!46}WsM2nkY_ zl!^2q!c5-{;mnw$Se}~mn`eJ5#|Y~Uvs)=?r^(AUcvrFrx=&fH5S~`}+@VGH4fSM3 zs*g8r;=bC%6?ZeNt58q=r-5S$4d3h%C^011%^<0gQogAY6!$8*#d$Lq|;aZ;2 zJe=j=;9!k096ELvbt>uV$M#@{-@W}8>7SfhhyLl9vMSX*I_a>}@TY^XP@%_2Vz;{@ zE(?(7*Og_q+SjeruqxWJ3hfyp>Pf&Pwo~;}eGBtJ7SyhoPKMWc_BWNHVtX2aMa{9t zqkhqvrVb^->3${Hlb#Fi0mq=ORWKWXPU@I?-8n#Jl#Myv;g?Qszp_T!7)a7A1zTN< z_X`%FJ_z0UcY5VBJdYyZ==Hoe6j0Sr8~Rx2-KdR^+IAr3r>gSoIUh*po^d?c#e-Cb zNh!TvmhMlN9S)(j3xqBC-mB*BMMH8l|8RBqvfx9z(o_NroZ3PHr^xl-CB4qQ>sFT? zfLfx@^yQlsJVS*B%5=+%%l9C}k2X=cDx!Y#W!_jGinquQa%YJH#jAZXpb6A%FvKHm z){?QWM{qWt=}0@@v%l?j(b;Ec$zP*)Pvze+c7Y=*HgYkq95?1ereNv*IbeG z#mDYphR>VyKqU)0Etz|6F?rBuDrfPmIv2taqBj<+pZ+XBt1jG?O+Ho4UQfW~8i}NT zAEiq4C<`-bO{(qm*1hN~nbqyCa?ZV~f#M#(pZX!>QWxP3VB$E3-OTm^0SY0rh^PX< z*Y09W%)Yki^_EAB-WHuxxkwM^!hVhP%7+GZgUl;;|90@f(!G(SXh)RmQ> zq5Ba%m}~K7(eBZ17~7byCiQ>RwD-db?|`cb+GhARssfNmdoR}Y<#$S_z1Q1k>OG2> zeGgd0NgfXT`BM12rnaOSY8 zW?ADIa~|&?Su(+nQ;g`1#w31NMj45nHI&icn$SxP4n~LBS9T_rHu=EYi-m9CovAUP zg{UTQi+$Wl-Tt|LoF$eZLfN8mUk7>c9G`q5zpkubCU(WF<%H z`)%__w>u}n)9lWiz_M#2m*;Xodzjf108c!5vW}_=V?4HX=ZN% za;(JyOtF>u@{z?Oo2L5$fU_dHxY#a_5U&O(TvtRvaImtz%fW6rB*YmwXIVa6C|OxT z_R}Y%R9=dvPMSB*6fH7Pwh@YOQvVylBd?%aC#-moRJOOMIC$tDHD%$_mhkr)6yBH? z+YfOlB=4&vVlqJ{_oW!V#+jK)r0x8{oAzJ&A6av<8@=nJSfFygVu;FL!6qnq7fD;z zl-ClgaOy&F(0s4HZjrVgD$*|k7tLAjIX?v zQ5A~49_*uA9eN_Gy9S$o1J(azyQ`xE6bR3Kj4Nd-t|MQb*Lc6NyRyCQ&rg)xUqhlG zSR7Y}v#cM#?0fg+-{}?*y3g_xIIlCF+l~ZCQrBaq5~uUfszw>GVxe>Kx>7KUatQ>a zTV2}J(z(!<46xN&_$&qj=!JR{+5r*$A+-p0IC-%xJhsf`{Mt^mmfC1P`p)CI^4wY zHK-vfNHB{zEAp$xm&5p*9Ov(O-)A!btw$6iL4h-Z6JL$?zu^0*eeo#i#1(vxBg)Be z*yZWMtXuZ;>672aWWJGR20roiTc2vHtA-qNM-c`5Dk_tb-`!$th7%r1A~u2QS_A9H zzU|gydtk7pOuS`oKj`BvY4|KAWH%23&tsz@d1!+YL}XR--$_vCq<9Wi<(tKD-;x_D zvNTik>`n4Yh2FxeN#M*|9OW`6|`(Z1a_HfpY5FS{x5Cg{fvI|d?cl_JnB?X8-Z zbtEd@i5vT*d*hMUOg#gpk@X{SNmo6wW@=w_#}VLT7BJ#jbKc3Pi)j|fiCACNHD_a+ zlPK~VJt$SmB}nqa8X~oez`8e}Gx@6Sm)D^)5G$-7V!Ga7aQ!J9kUA$|^JeIktGsVn za9KBRATX{Yl{J_}h0LNo$;v1Hs|(Vh_q3DMMLxq0@kHX=do+XE-zzW_r3b@)LD~h1 z)?K(ghw`@R(wmCjFv82wNTN3@4yt}4o`s&H7 zF-O5Jetv&Qn%Y8DLPo&?W7B3^V@o7f75<0M0oP9zD3#6+(3@4Gj?T>;QH<7dlvz8m9s_rlM}xLq)C1YVm}yHUmT<`7#9uZH=)V^+?u zQe*d!(UX-M&HA4$-@YB&*K{V%0u4{>Mlpjf3nYK}Y5aeiL-|pO6}z$X{GN^OfrR99 z30*AOc{%Z4yKk> z4>bQdMtM${T9OqhXI|9cZ)qJa6@krdLTVop54enK8itl^XU!jHdYy&6^CPFBhy8}7 z9im$DGjWDcs7RDmYbQH&{O%G#0n3gpc+ZY~;bn!J{9Y3dcS0$-EY7O>dE8WI{eFWG zh=cYuWmfw}7q8>N9sAw(l(!*G{OS<#V-i)BBc&x+%^C=S8C{IJ*UxJgc{++OoEIb# z)wXj*CI|;9N2PjI8+gxz=V>~mi7DlJ-74+V`ZG;rO3pP0U~39Vjd!vI0){ZTJ<&b9 zAzG?=q^m3u0*^&)VDiHd6YyCV<2gOY<{g97t=b{^t>(VXP#A%=Fv*J%en}s_?XpHdxl?s$!j@RI*7;ok657!sM6mgOxRv z1PRw;xfnYvnr|I(Xu8{HUu2n&(_GmxzR0;g5Rwqo-bgToOA+e3PK_$Spu0KFGB&*U z(SCYnoD>+6qs9)f70&R;V&@#~WC=XJvODtLCCDBr2a>9SYZ1cWW0?P0g zKiDNptW@oc>%Fkx?%4B7mB}BbD50CgKpC;64T@Pv6ICpsD}c4E9hjV0ItChclAJjy zFcU5@QGG)988N&fA01OSC~KAdtgNzwW=~0Ja@u>*=@S7}hw8qJOzzFsdlub$@+&*u zAHGxG?{h28bv~Y~{iR1gN9lqetx&YJbnF+G0A~iRZ&W?2S4TKE_DV{&XvxYbs)uVA}Y$trwjcq*h9Q1 zoDJ&iyGko_qv;Gc0?f%ywjT{n0;+u@Ge@Y)p96t+rN>j%4Bz}XNQ>~24zOvWE{aJo&%MbQzxH(s?}lt1Fj=BDX@jG z_S#s4ljCr`brz)(9&f>toUml|O&;qAS%CFb^CEqq4j{F11?|J&mL{cy>|^-rxRe%0 zibUDCo7mA9fy-a>!e4L=G`+YQ#VO?!G_ET>-B8NA*KpmxQqv*bMkH`exi;3VRO6ht zY7l$hp}(&h+Z4)XToX}xFKf?KDpSKn_avqC9EX3#Ixy-8KLRk9^#e>41ov>-WI4Dw zt2d9kRJM;EaKStLFM@>D4X)47F37b@cwO%gEJ(Q|u=~Wohr6=c0U>rlQF)bo=;zOB z4*ol`P7hy-I-8Knoyk2X;`H4#5~Wqx8GN2%m<_ejq7 z?p8JAcZ&`+q>!pfIlfTN^%EZ{o0{vT533GgYNbgN!C_K ziwnByv?LP7KyM`VmdzBZ5W>{u>}y5G06eoi>;8{(Mno5e=j(Q9FE15$vqIg#Y5{esLt`0< zxBw4f$<%SBKmDa7??6M%4g8lxuaoNEVM!wGj@|McpMat{6KjDU9By|?89Y{}yFb{dO+ z4RmBg4v$YSk)(*P`UqFln=_1~1g$z3@z3kBfnFWgF{f`PO-!CpD>JuXmOsck`kB1L zz03Ud%C*NBz|t*?LvQ!O{j`L5vpwJmX{8nX{9xEgzrD?+m8@Pvq?@QaCjRu8BD=by|g2wYl z?d_S>hZ9xrzqp>IT4b|o*E;|qchdP<1DEjz%-uyU!`%BfY#!DYNSikNX-BXJc)AdVi zUw~UwMcsC!E9i$-rf1m(^!uHFu*N#o%_?v7O4~B4e#NrQ*2uY=XIKG4`Fg!bQzjd6 zh`vvG|4ZO$mZWuI=D0=c+Y&y!Ku^iY{e5Mc%FVgZD>O-mLd7N^kzmQU&PJcVKLyw# z0|tas$74R+kf%+kq&6uqqQhO=U(l6n%#Z#BlqxbmW{h9{ypu>8N?_bKZ~==i+MAI`2#K& znqSpehRafsi%TE`iH3oI@DCroDf;|>6*L3;8yi4C|HSj4sIn1mR9|N>xE9ggsbLc_xw;CxFv}6E^sx!n zj8cTm#$b=l*;^r`dvNmEWB<@tJ#^6j&zy>Ib;B|mzHv}s#3lH``GN6(r@F*!R^Xx* z4JBELgFKu80xuW@=_0lZ?RACX7AlIYA?{dYM;|IYz5!g>iRDRm&T_eT`tgE?!!`~d z-ro?oRvdZ~iiAUv0k`g@Tj!@^C1iW^k4Y4{CX=17V+swm3ul$t5GU7CjXg zBBR{(mq0b+=zmDRFF?5V)gJqe{v8HEDpTuBVvyn`hOcfXc$TQ&YFmdSaAFulQ+Leh zJYsdQgfiuS(?y-MVX&GSCLDt`Lv5;g_2TuCzq=KFKHSJblc8zVaMzGpb%5djfSSRxX!3HJ#inpJM$#nr*86L$T0zpH9ryA$w# zAD1{QhxaUomyV|g&Kbs^=mw-S@djB10fwIHtb7LyPb{n5a#q9>7~`B>4HJoLA+Z30LHUZ%~gP`%uD}QsfX&*#ao6v!trbDEN=Fi^NwOe4E|~R z8n3d4&pfboPd(3hqSHrsza@~nV$CfeZMBD>D1HQ@=dT^Q?iF5TRgoPW=zXqz1xE)I zU=%_*h_@4UtR!lOGteW6Vd25|WI1R)w#qr_>bSFGi0*^)P$i@Zg5&?7yZlD+8}AueY1Yzy5j zo|gXI6YMcp!RPwRSF7K!%Eegn#rbI{Px7f0zPzspKGXpFHLS*|V;sM7z*X+nU|mqP z-|Ke**%Ect2y56A9{8q;W=l=)Q@x23v0RNI3hcKlkpI1ZOT0WPQv$W57LJNMAXS9hlZ9VL_QtJ7*d6Sk|AW*HAdZFCSf_HVwi zs!kr)AJ6P!r`IQSK$sY>ke&N7MxN~!wwHCkxV`cpIGM1mxi94O)4_-7fAQYq$%iMu zd`f%h=Z1%~o60jn%Z3jQxKg#Hg$RH1o;%KT;niCikw7zg~A_mE8A%%VBV> z4!cVC#x4{vXOnLXD!OC!QV9oKrI80*kMUq!g{O&kWUW(-oqKk~&TEaYBzS(n_s_y_ zgsVo-R<(f+jL2Uqs^)`lm6nd)CBT8t0(Wb6hkkVN+LZ%-Aka8nFDHX8{;)o+Uuih zeFl-liY!E%=~1H!RmbvXSJ_=RG`5Z{Cisl^uUcY=*erTn4NaX85scJbjN)2p)r4B! zsKz3)?!C6ka-&Msrj7W)vA)A23!3HtNo(6s^T6L4N~;hJH$B!7E~lDXpG7_574rb; zx9zLKpN7|!a>T`??6nWLWS~CJ(10Sa)`S5w&feZ3uz3aTd84dkM4pf>pSbDZo|jHl zK5nw1R3H*FZz$=e6;-;YTmQaDd|JPMh^qPK1XXl;qwAd44eal)CPDIBge<38ycsNK zri8e(py(D`lL}$%yng+OD%?NsN!OolD0WJSS%r=)0%z8gq*%n9L6Vfd>s&Bd&!%L! z(`Xh|MDWG$E^InkHI11A&&|n~4YSml_+@l>!TRDOpSOSOy2CBJzqM}3Y%VV~S?!I{ zi%o{V?Bbiyx3Bll>g8;`WpuYM)jhI*_0?$j2t)MhYQG31FtN?i-gelQW>ZHZ)fJgh z`?~t5DT9T+g@sUaNue-ksEWDXTDO{HlC6m{LhNWWU;bLl%*z9=_U^<;3x-dWav=Ow zhKF?nZ(xIv8XGba<*IKb9<1O<1)A17NVKiSw^}djT85@Ds&O8H5D#lrqpqw!LcX44 zttK;FIaRmpku;*d1njsIMU2h2vm-1qW)*L~p1dMc?J{p-hpV1iQbUG21xMnnGu|VG zkuBlY4c4bHXIIr_`_TxaCr(;>$G2E3SV&Cwis5N{e;aN3i$2V9Nq9d{sMbHcTELXE z!?M_>p5N&f=-CA6B^e)bbq&<7>%j#E1geQ!-ro4UZs7g3s_}2;mZQ`zRLxe@@#d`V z3&!xEZH38q8p9*k@^00{Zqmm26Yr(^)#hae>%EU26i=wnmW=Y2Bq*3gmi~N+pP@VT z{lXEh>%-NLTCH0$77n=1*#U!78s2uI1XxbZ^Fe1h>{)ES!>~O)u-=VG%$Delkuwu0 zSm;ISXlz{IEkk-!b1{U7=FR) zgk`@GA)%L6mIR~nq+3`^TZ&rohc)q$mIq(4`QaKTz1{q_NPXS7*W=~%&@{~pq6)M{ z---w?qu#pF#n~zTpBd z-wIA^#UgalgYIkJ%f=Y@u2ClvlO+j0zo$ENT_k}G=5Xb8DC&}(qQdNYKFrB(?q>9d zMayOFzsXqmpCxld&=KW&-Ln25fZyY42`_KGggUQKQSJ;0bb*(9&>s6SDK6Zvrm`r@DUc($I_fvr{{J*1?`pI%wD zZA2BSFyXMGR04s4PaBb=xz4plPII5rFTqzMTc>C7dgZzJW4{`* zUkp~}TgQanlD5gV3{`(YP4Wu#9K@;J#hVedr{ve?tuVHY5Z9w7e6hJd?feyyL%W2< zCB-FaF!(wlFfb6DN+J?TGXLiu3;4e0^&AVkm$wMkxjiU5w`g~?XXB~Z7iv;H-H#1B zt^{X49`)a|x$-jHFgb>&XyMt24qRVTA(4D*V*pLJo(|Q}bVx_%JN3c6MyPeI(<_=u zo$_}ZqDv4xCo{~a$i;J&#!uS40wU`ar+~AULjt9 zn+6t2jzjW(Rfq`bU6-Bm7wt!P4ljMGyiPt1^DNMcH0Bo298o-_AopBtG_g91|HRYA zP@#+1s6ex`Ud(dG{&Ut%KD}$taPpGK3E7Rly7j5mS+rMxxr9;3zLUWjgRuF`!tO2( z7iqNC@Kwm1lB)L7kEHUPh+&LcOMmp>%kHP8O<;R)fC0(X!j`PAjH-A(dfHsR%ylUj z2i`ao-%!!G!u}Po&B~sPtEWHJIN-|4^(W<)&#+^>2CJ4`+ryu`NB1>O zpJlEi++zQ*r;aiwRwpJ_yGTO$z?W);KE8yP?M@TSiMpi0Y^Mp5Odb}D^s+L7Ttq2< zyky;I@PPBhc>Y(bJ#rluk2>EF*RWVJeo{rihLm6ztWc6#wA4x`n<8Wmyt1i^s8{D3PW`fM;<{wDOwtWD!x z@BHqgCIv2B>z@(&Yrv(Lly*`6md&5Et+Etg%4-3l?IwD5L*|jIXBEYNXPVbH?q9nI zt}v)9NEz;lWrvK%2|>#2G{IOyr6KI-m2lva zjTG32sj&~S)hi~ZxMZ-j4bvqtXS{q)TCyPEJ{4!F3pga8ju z=I#ID`Nz867i|o%o(T2aSDnc3sXyMtHrI}oZmၤgf$sd>3*hK+=`6KS`D763{0gY&1V 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

    ^E&o#Zth6-nndH2z)g3XGD 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 z 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Ⓢmf&Jgq_nABQGF3EO9bZ$c>{Q^v)d0rKGbZ+#z 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%0AHnD+CD6o+P-mjp$A9^%>i_@%0RPdE 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

      Ty1}2d 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
      @zNRf~KNp2?CNEILzSVaFm{!fD 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%0DvPprTB_kQ&HfT5u%=f)y8zyH%(n57m) zdZShw93fUbHSigJ?pGep11uq5i7)$PAH1$N2PCfVg8*YHLN+lGg2L0Qy-$lGSqX#? z!KYvPo`j{d#7h@=PNd&>8Wkz`ah71#N^2WF)sE{A`L?rYx+xo>Mv=oM0KY<~mEu5& z!POjss!Nh5c=8NbL{Nsi#yan4?|%x;)uI#nap%4I38>}Zh%|X9pV0{1Oc)J_*{=-}ZWA3-Ik$x*+tIJ$Wy{w3bM z<>sTo^%ZVOL>6xdW?qjMW-E?O75_T+Xmm(4OY%_>Dw-{2zNQqhes>~ByN~zTm#vHn zR;U~=Tt^5ty3UCgjx|gGcGzLO=M>LWa07SIwK)FxPYIWzVu;mBCy3vlNd&gpuj0uY zIw{)Fu8N``1JI2(-6+%A@F~2U2;{33tVX*3^4$^DL4LpjDg!Al$ndkp$dZ2=GRdH` zqEhgar==CF4e}dh*kekXW%$?W$`>`Ua@x;)`G-{ijp5+|cx!PbBwfJ6MIJjrnnP|` zoQc@eOPb&wjJ?OZ(i%j6GhJ(<1cop_PN!%??-Q7TZ?h8*;0bTBXyKNtt4}0ebo)7-Oby_-cVumMvP%e^m+nE`VP2OMj(!(MpaK| zBukw4>vE=7v8N$rV9x-K$J?=s(JD3GYX~GVwyTtm@ZBFPdOn!~olg~vFJv&~mR5?O z4PfQ;AUhv=#U9P|FJbM_-#(7NR1B%xs1J8lf*G=iw@z=ya*&jT(hA#VtHOwEDxN@A z#tHjfZ$AHKEi1^Oy&o3|DnQ&2?QvF%(H?g6rvb=RsAr;t(-%O>^-3O)hZv8~j&8?w zS0k5zLVHyh!|_mFI9j;ftn0ianNI!R$oa_VB2)ZMcjbFXTICFp@+~PVb@izidPm`n z(x(rWpS)>)un~jIzk@R+S1M0oSo-hvN@qA?g$~bB?v)X~It?KR5rkiP4+nxTw5h1a zx7vaWt5)K~Vgzfvqd(3-(eanW0`nml90KKH_Lhi;tXz(Lu7`}!2nb$pu)13fRd~>> zU(E2L>3xQM@^QsKdJtHTsoBqoZ@k#Gd$F8wQ^WlHrO`5oLkdwLCUU?T(iIx?C2t%jL{3A;|PdFjI0}-|6 zMAVM-%`#`E>EptxInTw!X2!!W9{1~4&GI`Za6@k7fBNU`u{RId95RPyjFE3Kn^>4lk~;g37xG7eL%7ylF~Gs7xPhanVRiXzpJ zMW80T&!?QKNMIiuU$j^)_WFJmYcif*mGQ_mmy>lxoDhhA0(a2b1vT9}JO}%jzkCF# z%Wlvub~sx*(G@g;TsLrzD(|(v_Bhm3(YFYG?JVnTV>ERa99Pu!xF^LMAG{qyT5guLWZ}@N6Ys zS-ij{Ft%ZPxsF1s>=U=xhMvxyr9Co^;dpO_6w042qBT1|fI*gy(*!Ry3d>BQTV?qd z$e12>r;Kj-6fe>h96kCMy5W#K;jAQ322MJ+t)^TcL@Ll5Pg9x)oZDaicU3TyaSX0l z%zC(8W2NUzxlg-e8}4+TzOxF&o6%lB0& z3e~@!Y|xH44ENcrS!Tu?#-F^aFs{^bn(14GcU~R+sm#-9(*v(_A{~KM`*h(&2xu3* z=$;pOqe;o(SW_#~o`3lRJs$=`T&=KopBLT6l7-^U=rxd&_&X^9qaR3=Q;yKWUI1(1 z@mdy{mSIe$Uyw%HX8im82tJzb> zA$Oe8)VgO4HabtHQrq|wOw*=Xw(Te}M9cFX$N1jU9)py}9_>Kd%%=+cTl8ye$N&eD z_A2=(B;+bqa%Z${@R!f4iC7A_&Fmyw$KX1!Q7%=ULSLDxU7&x}rgC>)8m`l7;?g5G z88f&5UNbB`h8G;D;IlGc4D} zqVBE~8NtIL{XgFbwG2vQY9~4wyb!O;&|$jteiH^bkujoxX6vVM_-+l^_>GqkfMK|g zcjNLgU$X@sQ=QI(-^pD>Ui|e+jp_q?{(lGd3Sm~}(P?V;CiMC`^f zW=_I?gDW#HE4JroB7TidmI5pR?ZV3$J;NSLTsT@qhCdz`Q!+0ry@QLp-FXJ0nq5(; zIV&M0W?p7U1(NP!WJrZLo#qek=~9SpWKd!x{&T9%V1s||dwkR-_vq5! zbQ;yk@jx3s&k@vJazt$Vs%JurJ5g3V&xL*b!~G}iraDy(_HQp5jr!MDmHO#TiIC&2 zZ1`f>XidG%g3J?`4rZHdW@Tip;ash`0mus5+%SXA`vJycV9&E%WiSDyIvuLESI_@5EPQ9aJkP*o+-_Eo@9m$E zxv5*3z5w@i;@e)}U0>}+t$XBJ#s&8NM+x1Sky{+o_i`TM&P<<}bVSLzDrS#YOD|6| z;*`T>#V4na!vCqS_*P859Y>SHUvc+J(5Ie`5O0F@3?kmj4%f<)q>md|D!Z*Vn~~ zJ^o+6x&N!G@W7H6GqCvBo5}N0cW_9%47YYQYv8fZO6tn{Oy{}F&+EFKcxu-I5dR2n z2;p!&`;EK*ohS<<&sf{(=DY1nooAH2+E{Az#n9t@3wZNi*>4~No&tEba-f{9U5;kf zzxB56_1M=|c-(_41%6%4KA$HeAv;?)WSncr*KfLlT)*S}M=$UUOee^pz|oeooqk%n z0>xJ~1*?^&QO&4Px4P6Au|wVpCJu@0t9)kR%Vt)iMvxkIjVkx9=FrbnPR-R~j%!y=ua2$!PoEb^L} zvgaFX;M2}uo7=w`d<(10oD%hp74x6Hh;MjX*Vbi*sJDxa;$vu5@$!`#WefjDRN1MH zJLn=%Vf)EjAN+SxhXEtU>2R5M+z+Vb(^S)Q_;1XgPubLUW{i~iJ}(9a5J`;CXJgtpmaYjHk!zxyb#f(PBYgFpAYdu}~-V>dN@4TK~dyss}Q<0milF=z8);L;FwIYf8ELd!*s9O?g4cpWYNZvx0QnGhhiJi#-oXHeB z!xw9&-Hzx$VZ%1+v^T_FkUp_pe9-3`k6^Vf@e>mDo7O-Khs>ZIK`Kny%d2)B8$K(- zC!H>?ZSdt1$D5lzv57by)6cm3+=v(x&W7Qr*RsS~go!Dy{fw=HIa%*RL$1^K;I&RF z)|9WcZMwIxuxuKTwMWX)DExOF_%!88bEb2l5xd@lJ}n!V&;}TumB2bnT<=2Gs_CC? ziE$jShI~Za;(m2OHjUH#E~aHozijkc8NR)^jYH)>xeDmj_$In;_U4EL&O5&R z-KRw+JyX&4tcR=^2oiA^oN+$X)T@X&CYE`|45{{r|0#}nQXGRl2eRZNp|Q^5E+*aj zDSe9*IvNWR2&~_wE@hNU|55O`DWJSo+Bwf42lC>TajhCWZRX##6L7=;++{S=6Om~^ z%eRjIk5ZF02LHl!2j`0)=$F#BP|VifLcb2nGXs=rB6+p1$BtKzW8EtteWKAe62fea zs=+t{0A8SanyhHS$krVh$D7>%@Pf{Y{vuvu($$O)GsG|J00dYZ#Agnl>CEZtDLF)i zF@Gu3@F8$C0Uk2n&~;gzp&?=l@!AV<<2>W@bj%J#&VA``LqAi+DXtSk*4gS@~BK%5Z~haabRqn=P=ukq&+M((0+#+wtP6~+U3@2qI-nSFlg}wQ zUC&wtOH+xzEzlo@0m$nhW)v-{=P|I(pKwSmDOfF&XRy^%2Cplm_Yq=r=Z5~-7&){| z7H1rjnB(vR{YEa&U)j2^=jUr)kU<*)>IVbG%D1Tsf|1|;@jL?u+Y8#f%A4?k zt9KjBcHxHR?{|^_iu~GxoKxH=-OBiaT(I3$d7uz})fVa%T;>aPj5e&X5r)>H4A zz|)u*U4T!u4t|q|PwVmW4KV?@>7Gcr&8%uM_Iyuh`*zQQg!F3l9iPQXmiWi(7}Eyj zSm^Wz{hKhic4j~(Ar>2@Ae#y$q!9La$;lpDnp}ljN9vf3GLEQLyM6N5emIC+w(5g$(^(-yI zA4_5lawu*$FZ-nW)@h{5L-MU7*i~2>AMN7Kvz>}{bTIaxysKmx7M~6H4vFIbYNq}G z=_hxkl&Pe3Cr_o*q^OC6fcS-D4!&&^h9dFU5qP5 zM}ZS|oDla~O1(|v36mvAcU6myE3*L$D7fMO8UAW&QHe#b5jJw$s7x99j?4m1fr)U7 zCzIKfyqb#7NFdr=>hAxQ(hA+5Q;w>IrxPzbC%T#a<{Gh`*DD|loV$E^lgSvbqHW}= zSx7mHlsIP_SUUQ|iW#h7MAC>#9!oj+_o6m*-yLhYyyL6{O>_JTWVcrO#5C+{hEnFw zA8CGT9hEnS)J*fhqoTd=-*R}GSAwjutb=?JQsfkxrBJx^1MQ#qPIf-saCkCuG-RlG zKR_DazKFGhfwsj*8H3*aWN7F*<3T@>aSf9o|9OdbLbx-lf@Lsv*J#y_)=^~`s#|{q zf+N?b(#|r8Qw>^%I0pAyysVNK%P&AW5jaepTp``QZM+7?#^z1<>xe|u)ga^OSrkC6 z-u5d}(z@DCL$itz8x;F_!(|oWil!+dyFb zRwxy=-R~eR*h8guK(hUIjQ_OEXWHcMKBU%#b>N^^O`Y%}HjwgFP3}Mp_MX=ssa>zA zixRmb=PR2&v4+#xoHqmLf=-nB4}wEz42Y+(f!E$Rd(r3%)Vlx`X0%*FUrZSU`7crG zxGQ>#1`&v+f6?Wr0_psOnCUDt^*>0I20iE$)=1#F3FmLU1bT8Ec(#nim_{E6J+JH5 z1r{eFy^TmTAu>B0WmYs_o|_+JK{=4uTd4@&lnEftv+|ecfcCT1746(lYOtV$awwp2pb7w1fl8b_IzaqX{1{&xZU=SsB(y!qrmN~D(1R>H{= z_Z-U9TWxLRI^*wAsO4jvD4muO$l>isY`=dS*AxCI+YSDBmet-^(MM207{3vp*?pYI z2n$ThQY^<-kfLR_Vb$SSa61d^cB}zYD!!GEx2+_tf8*;TrP?>jOLe@ml2++IL3npN z5eQ)Wg3cC)$VeCZzCg+$;((8F8lx5lxRy!$A#(q?jg7<~y0t^+)8g8wW5k>tW$5Yx zTSkp{onGQg@ppL`sD)GiM*sy%4H~lZYECCEZTuiE_Tv-!a8Msi5{2W+gyv+X$(Dsw z&sQs~ni~zIsxu3Tjm1(;3ll~cLoZ%KQvDbGfGk;Eu|zi|OVs;DalRXq8ja-mjZ!P~UJ6V=Q(cO);yK{?Jhx*FT+QBP zM~2)|Ef(M%WtO}}%);0++ac)IIfWEkmjL6@z?pV#WdVdn9hX?n?j<#~*N}A{QZw2{ z7u6htn3=|79ZQ-7II1xfPy70*_w%s)m@j)_3*Cq-cJ}^2drw_#5{AMoln{!3ZY25yF_XcxJJ&q)K*6c6o>ye@{b4Fhvbt%6QEQ#w8yFkf*u`yqcR8Qs=Qewuu%6IR-IY3v5 zTu@Jtf05MdDv{mbCj>Q zIUdKkX;*@TYFn1C4)DktuPci_ezj-%9-BxtQT-)BAveSUWUo1YjXzbTK7*6(FYj|k z_*?&KsYeyHaUZ%9jGMvf6nFYE14UFTDWE;(6P8MK)xL6@QcPdoP}+;z{DR&!`#}mM_e%A{^u?i{8D@@4 z3*uF5epcs|BuWV!gA$LVb~L_`O5B0Wq&#+LGYp5btyU#O2DN;4#|l*pb;>0WqC^}6 zkuh>cId+6xL?sV=uLsA9vOxbQ9sy})aTBv|zg}alEZ_cHV#BKXcMNTJn@UxHxtS|e zLUyPJ;qI)d!UQHtl`m9B;0|Qm(4f{(TPE-Dijr!)x}SKHwYcc{L*D%*aoz-Lxn)a7 zPgBF9Xs~<4h6{3FTBdW?#4FsvTgO97cte*ZD9t^D`68j?!VDR1P^cE8jBYY?$-+R=8BKG!w>F+p`T)>$8O7pIqg!c+a@t+UgSH{7}58u`;HtP-blSdQY7W4&Kt1y#3!bGjT zI{pUhnp*6E;3Tzc*aHI(rJEJ9tnUHK9jRa?G`=f*Pb>NUEm2bRovmx9Q9FO-B6At; zl-KXPu0O&FI)4#9IB^^E%@^0Y?KWNAMi(CRI96&z%IP3}Rl&L}qv)+LtnLT5ac8Us ze0uoxH#M7g(=VN%BK`Rfv$oQ2wew^3Roff?^(vZ$0&QZvizZ?&Cn;%THt8RpHK2 zo+LPc-$$$VIwOj#PH`t6nuNdhp6!%WwrUcLB)9m<*)fdB_`q06J1QnZ$KyCC%Bl3C z_WM@6DZ>Y9!42yNi_)nxkq~!9;^K!}=ud=Dnwxu_dj7)4h`X5$yo0)rD9h`3Tw8@4 zCpUdIEKOrB%w}E;bKDNki5*HVkV9i2jdAb#XhOz2eBtmewEd-D*T)QfI_#^N7ZbUc zvUS~KUvC9SncW$Sk7Py2zyg2cWyMTQk;k}B#2zroHoqk2`oR!u{O%q97q_Y)-Xu;* zhKCGS#-K%8qa$W2ZA9i>DlRMCEI~P%e|{Q(=UC;#FoHmhXgQ@p){J|aNLx1iGWDAi zx};s_Xydz3o|!`AKEzG+JL4R#d=(ygaUJdmMUISE@w$Rh=OX7FXWrBQ6{s6+`o@qo zVCgqrDjc-`Y<6fhjGSYFg!^#+fKBupgy^NT=d5fC#VxGMF3m*3Hr!&DESVz5tx6Z$ z=V!(~!g(Xz^;T7#?}f5cdB@*QMT+-eEpo8!h1shVoW+(N3a0a)Qg%9(jw0^6D}4iV z1R4T&?{O&V?X~QE0m|3#l|R7KaZ8cy#~J$XpZGryt**Ph;hT7}jO4oNNl1?EF3)V+#5TOOqqSoEg!4V=X>&pn%g`*B9H9IOFPX9EBQyrj2` zyKSWwwCQU0z64PUak+TsDv3XIZ&8ug`NCOp412$njYdrL?AySnEd}^W?=#L#b+@nL z*Tn+=z^%|L0=9FV!U)5+x=;!WWTF)|rw z)P6E-vZB)g{s!hFSY)`l>tm$&e68%))WQb-V3W`&(mv_EEm0QD%Zrh+G;5@#kH4t% zRjOz~j%I)W_3y{xg}cU>qTRUMg#IWE6|quZGRkMmXTv7-frXKBY(T=o{qA+RlPDgf z0mcdZ%3C#kcmZ89G&c0x=ZL>&B+J;JfTt+`EyvB4 zvg-A8>?IIJzd&^SkAvA4NI%@{P*N_(BMsx%9?losd=-1y3g8j^6~y&6=BNY|qBPRd zX;pQ%%??^N$RIh$`Wme;5gKI2jL~^ayz4tn>B8~)Qr=b58o1yc@veioV=M_i&1~Ib zd{E}Au-TPHysz1EltAeioo6{Gx69YzfGJ}z-u?G$%bzNgb zTlPxn2Vd_SFu`Eu3t$!SvhKEt`#`*ewpH_;WIjEyJ^(M$h_>^V{f@lRp*)#tS)Jwo3(8#Ex0zZd1aup}&*a zTS(2_qH_dXDz3#y9;y&oD8o(di!a+%NJId)>7mhFbiI=@hxlinbU2^-WN5^yg*2B8 z8%Ok~6#PE5uy3z>0Y1@Zdn_~O?axM7T>Ed@hXoW(37ZD?&Tb|~=rQa1IQX6pCq=FVxJn@y0u5|%I;n%l#Xi5w2lFS*+VfqEpsI0Gh*#0?Os~)pxUoVoKLG3yM&3*9cRw5 zV-qkSgQ65k7BoW(qhhNQ=>){ zJxx<)(EFiRksIvJNXglef(ynZwZK5S4Bmd=sI&l(s?rL8<-9a|RNNez3@e$o!V zv}@FVVhWQna45Wzg6i(2^(fb_m2>Khw)q+=ttG<^6Y};8AM1&S1cBh&&F!{`tHLDS z4Wp&TU>MB7v`9UaAbcui=6nr;s6g10&EW&ID;YH-Mx#?%qxc!6U>As9>jUk@&lwahb^mnqcpXHGZWi@9l zirh6-^MTf^Fz<=8-o^2hkcQ(axjONK*L7GcDMGVL6r_?=Xjlk{Xcv63e_V{8Y*epP z-kc1-GimV16i!tL8^H=w!^Kmfze_Cla1j5i6G~798!KzJC^tL)dJn53c)T0%d`U5K30*Lw=Ke7K} zd;Lz7sqJ@8Xywe|wOjI})C3Bz69R*yen|h>2UhsKCcs;pI$tyeX0+$b6E~tpSHsK! zt1N$MmBowk$H1hY()v@EiQM#GC4PO2DjrU`kMhN)lCh*`fqC{l=~+uyK{zY-L4DCQ z?o~5?rzDF1vv$GjF+p{*vE-xydj5-)KuC^qm@jp(gJH>~$gz^=Cs^{F@}i~haM;Kr zaPb#u+EILjWvlc;m@S&yO{j)9b0E!FQ6X-XG@lN-l>8J)KQ{h+s`SnTUVyZoWJ6l0+;D=M+WMK6Q=#yC6sAb$lEg8hl6+@dcJ0nVt=Q(iI|RC`Hv z5a%R9VU;xA0L73wA6?jmP&ZNO#1E0%JelrK2r?&%;**2oiJ%*Kj$t9d4hf(Gl>Qt@ zds{TA&L~H7Xu7Wu3X-LFSb*VZ67()tGhZh&RJ@t>Gr{#%?eHr<(J&XCzlGj}Tw<>P zHEIcCmz4i`B{-+GUxS4cBbG6csS31CNm~peYqZwc5Jb{Pvcr1(p|p?@dCZqraHocM zpn^lssAq#)Wfn51-RW zo$5xqUduo=a9pXDUl{!luxxUa3$qYo`ECdUWN?P`1R)f9CKnhSkcM59-mq1Zv~mM0 z?qNYB>gi*3Q#S3MgP#J+l8qGoDtUOCfP*kwq8CxU8CigNN}XhyfJ?_W-yUE~@>Y~r zFg$SN60Bpw4Y(0wfD7A!wUT(H-WaO$ZAw}jW0jBlP5~WE`lau*ySO2%UhGF1Q`-Fk zgZFSty=0#9I(P3o25?xv1_?gJbC4pIc+JBm>cS)^Iu$Obb;%;IBj;^M^G+Dpyz{Vv zVAQG7jklA7;S)|_HQ?r1iz{&-7 z&;%zR<_mpvW5M!hYc097mu z>`zJcxPUM1S++@OrSKOh!Wb%4ur1=ZcO{=lPbF<%@SfvNs*|i^v)G|@-CY?%8DZh>YlQxLibyC+N&e;N~goUkf!aEw#5@P@=Ys7fI_EQ)wVkoZr) z(-+dGpC}SJF&$SX?Lbkai7or4v$P2pP|ceAa8NR9X@h-*87)>B3Uo@tGiP}n0W462 z*2g#Zng%O$m?Y^L1}LExpz_fgz+lH$7UUk8?7aIqI1v}(`xw*N~Y2fe2qy) zj=~F~BH);L>t_YfEvbK&^2a?DpD+QsJ0C%8c)=!YI6f@FPvw?B7hOh)52hd27$Hr$ zSo#R?!W0G=`3+TS2JN2Ub6{D%k+O$?M)O&7P7eAG8ark@``EjW4zHdQv z{_But)NFYR9yc4i3;{& z31c35o8Afwx)DdwuK6SEn~CG9aHj-prA0P<;7x{s%JgLP+$HPSLi8-AtD*snA?mq~yd-dno*R6P7doNwa23n`hk z6P0=7D^y#{+KcQ*gO^bDsSg>U1pjdN7Qp!?Q`fd_>?*~TK%&<;Xwcu)mXqSvQU8kJ zmY{p?r_+;$HZ62=*t<|`a_=UGweWw2T2q!y-tgtwNI|sD!g?2r=WZbDWrqQKPA-Vk z<~|8KUz>D84FJQ_t(dcIpNIoa3p3Em;ooFs?*0J=u-4R+nKw~=^SP8M!5%5O3oHtv zBGC1fWggb^=A_I_LP;f@o4Gq)h~E3niRo9ArUk&JuDlPjl`>ZPcI$b2*f>=XRMe;c zMn{DvHs8?peFb(F(#Y@p^Q~9cM%|LzlQ=P%58HkdB0l65?ssRJcqa&beZK(4Pi(te z^Q8rmLyfY96k?s+w?A}QQ6(^H&t8s3Cl5peug| zHopfM>-Y!H1`by;cb^oRz%>eJta4M&tMmsS@XG=?SY-emxD?RkNv=ez!gc4>)luBhGTzCRAPuQh_cZ>KM z&>*g$mX?5mg|~F$_WJzUgD!(4zHz5=H=G8%OZzA6cDo}a zPP#P&bmrk}-f(06gY`x|sr0c8jMBHB-vHisFoe*X$gX<3Vu4DE2ZY)TC`)@z|6Zg6(W%rr_8IKw)Hx!0v_OXeyp zc;bKPZZ)Aw-^hWp>9mhNg`lZGK3c@LqGL83qIiMyk{ysci8?-ECI$fw)i zJG$Mw48vQn{g$o`!%9tWDNHm=gN(foV)hzRPO0g@1R;B$J2UFr7_bfIp@`;^Bm@$J z%6cs`Z*)EAtM_M}+VZ4jP48Naug)H8E(u3`g|Nh}VV@ae%F*P^=cwkm_z?07Mkj;E4VUmRD zv`kWFwzJPjSc?mZCk+#JiESix7+bsDTg;DrF$0{<80}}-ApueOuEMaG4J%{gD(CLj z%NWld!|{>`R~0WzMfs>R@9jPa?3-@xXOVK>VWm1`fF%~+hS#j}d!%1tbt}E96bTGfs8&A}-V{O#PIZ5r{vQMX}4I zZCmhc9T`r+e?m5fOeI+tjE?8VK;Q;3W0J9@$DRJAqi*+blC)U{C@hjeXxf0+Ij1v^ ze>w;RFE22xvUDFo<-+-pHUEJnx`4hTPyt)NIh?_rWj!b0F}@)O{2^jNTiu?IqT$;B{ewIK35OD+d(^OU1hU zr;toU{?_wSqZ@a^H1msXKT8wKXM=7eYr>p1f&R`7C>~LL=8zq5bBf_Lb1JaAHAL!V z5LS*^D_$xvYL~@cigbow+?JO4d=+1ZzP3g?@1p9&_d}UjBnx``Sa#~U*C8=~wvLVN z(m}fRYE``_YDaFP_gIX7I!}{who?}xppCBbe;0dnx0*vOF6u!A5@MfgL67z>Y`rEe z9yn(HHd6V+i+LSl!x$=(P)J6%H7x;nrS)veO_*-Af9XxmF%EA^kjICK3##kOM9!7{G1qMV^rLC;CfcFZwq$Ja{t?Y6bE{5ANbpr@x)O9~OVRDggIK19 zEfJXvX!18oSV-iGR2SXtx{D!2`6|u?@n#d5E{Dz)X)vjA!m7u#ZQog8BNkG-*OIZU ze-oOCie;#ytDw%wjFp>NlN{D$>c*jW{$|lD*N)BZ-HwGv`8_N=zDGu~LK_HnSgYo~ z39&)NVNo5_wvyJusRASK-B_AT#~D~r`|22Tc*ZMQPBD@#h<-heKdkmdf@1Fz?th`5Y;QK`+!|>MNmPi z^dg7g*G#0OKIx0&mC3EGB#X-%w1^M(XlKh(}8B zELBZEpw@6T#=l=3BGIzs*7_O$&}?+@v=ih+bd4nZI)eXVe)gCrdYenIOC`Xr*-P32 z0hthD>=9Z?_){?VAZ^6ikU38N|2Q*n9{nDx4i=(K(V7TSFHEUMbe}PLVy7!&f5~P6 z<2qSobXEHFF~DK4yIU8d9VZIIwe{&&kJDw8=Sf&tEc^y+Yt`ms!UV`9+I5nocRYNu zVWvM@Ge{+Yi(ayVZUY>;ff9F@Hvf@$j`Uo373YxM$I^^`L|xx+1RQ$o)M3iY=b}f@ zKN~~3AD;1og`}`ZKVm(vELwx2LHR5tLvP7H$mn94b3$~FYzKxH@|sHmF>mL+#J$~g zi}to9ie>)^cIkwGvtZM&)2j-VZW#u=1eu)KnGSR20lCO{czzK3?Ufox5a|(cPB#OK z;!*egnM?|+HNjO`XBGr!b4f45A2Oj~p@+NWfz1%(DF~|c?qMz#CIXN7gcb$;-;b-R zg@MN272-kEb>aplPv)6gs-pS~>*%C6VB%e5H9<>Gryp-CMh*UDFyhs6&3bMlrGWKE zKtd;OuMbbf0nv1O-~pRT$eOYfXe~uTZ~^MmbJwfst--97B*RLbmuOZxAa`gA$ZS?S zH$az=JfDWb&8Vlt(N{Yc7%`y(MSA#@@6(QUTrvgt-Eq|2KwoqbDZ{$srjlFmc35`^ zZRuAaOdur{XVd8fF2^VbSURij!)vG?Oq2mAMKs>Ik@UuBW9*eY}E!1VKSbQu5hIXm4EHvBtS7@3Zfz~PU~;LNg*6orc3!6{05lx9bh`k$b60@Da!)p zV%-gqsO!H5OZJ?i3|6 ztmUA*04rJa^Qw?6R74wu9p&v)1^zfT+@k7cIN?1a zEnA#+PcUG-F=E&|5jgA*UqG}U`&Ro9*y46?BNdM7Jlnleb;G&fN#=Qhg{1a1MJ_JN z-s+t>|Mp~upR>BNV-IXP1(V8qT|TDHKpxf%1M5oA-O{K1>mr>|%Uz^{PuxXD-3;Ex znP52W?a8+m>;)+L!ur?p%b`4aTX6`;Swd|~(L12Tf+EaSwW~=n4o05!Kk1iLI3m}b z?1KnP8^GXg)PkMEF1)sU5@1!3(dob{m}fi3rsKVwz`f=Xj=!X+)uf6ZS!uBZnl%X zcdQdN_7Pd&N3XG-caRFUfXot{<&Pq?8!h56tZLY)Sw+z=l;Pa4#ObgCuPAs)Z$k37 z(!3O$Rl^>!ce{5v^SQb23=o!zZvGWBXp!0(U4liagPBZ}4r-*#>}6zE&4&e@*n{ej zh|JIsM_cuw#H>%i;N+qiP677PI#&T-Kn&gTmPCpD-qS)g{vVF1V0EM;;58qP5#Eg* ze?U9ngkX(!P5~@2ei^HX?+VCQ0OAh>8liWq?rraT1;VSen2&QFDztnhP3B``{P z%>Ya$4#UG3W1xq|NlGeCn#*aYlaDQn#r0ovJ~${(0di%_`1u3xu&ZZaWI4uf%F1YB z>0Ok~yizcD1@$X>85ZaX{ozg%ihKNHe+0v=+>a@XP=9=~(e+Q^VADAIBAdz3(2}jN2Gp1c?a451LatE2t=pPf0$#|V}f22xwtDssninY{NQUy zy&lzWdv|6MXDP08?_fK)cuoi8A8FEcA1sx$`6h@SJ`rq(={ZBGIAHs($sqsYXdkP2 zhqQ?2`QQWmi7pQDtyQg@R-S!Vs5?~dtj}k=&H$pPJK3oi$!Mu!Ksx|oK%T#Q9hGcQznlu$lJQ`# zR%?j+=US^_*uoXt)j$cb@nf2yu+Y(RMUO;5m-)fNg2#I`S|Kc%Hjw%2W;i~IjyqKh zz-j#4R`|K|#{uJ@ex1^w8ll6|OeV>Fhg1YyIlByDE=V>_8BWDOcfvkg=O9IML|&_Q z?CA6Xx!TDI$(hd=$9hGsfdvDv40o9jLmR3fdKsnA>|o@TJGGH+gr(CchG~o323c->4BMzY}s4oH=Vp33v~&?!5Atwwd?Nxl=$VSEi`yoQzFe zWRSJ_V0SBTIS>u7oO%;>@79`<_!m?)MKc}qQ&T1Zzef3js2Ys2(*J|motIF%puiUO z9z?DzMlRdC1y(jWQv;@{%yhIt-HYj|5!}tfN>qF-iGyhWt zk8W{94U7Q{qv@r%tz6K%M)aez>mv7R%&+>j9iF;$NwEfhP3CIAn*`+}6kuGb0OQz7 zZ+ZoQwcYKWM(nrMv`F5K)(vf)bKT^p57lS|f9wg~1)Z(T&1Sb@Y%Zw8f|Rr32~0_k z-|a`;W*=+k-UP>UkM|XeN6VX=l(T(>ZpxuQy}3DOrK0n~=1*t1XdN?jn095B@}1?I z7it~xns#WK;k2F8c>f$SZ<%`SMyJ~!s_$B(qS~*$Sqv_3D{@XN+od$6BsKH(vVkLt z$&FEt!&fq<1LooEg7OZ``%J?7>(p(@3L zmolb;oFxVWtkGml=9vD0rHg=HsuPnN4X)Nh6mHucBhGtZ+ud6fu}iQ~Ke8%?wJz;* z7`~;4D#iKNq-6kSJ9haJEO@4&;0K=h3tyBc4ID-I182lSNc-QmNm^IkFH z=aC`Kvyxu#p4Ix#&ECXSp8`R{Tk3jaxU_TnnmG7reP1~vmXQWEHdxScqI}azYPedQ zzkKaXDlvc zyH%QZm8_u6TjP~56=)v8qCQ{~KF(Bq{e6R){8*@;>MPU{y@b_t&8t^So7`< z_AV@z_caIL<-wqYH5f&Dmf;Zj0=;iXWFKPO(_laU+qo@WH@}QzSbcb%wrB?6jFw|M zA|K$exN9A&%WnP#>h8Gn8>qMUI^3xb_lC+{3d+UD(qo`Sf&zwyW);7`Cx#w=*8}IF z-f=>hFt(j@d@7$|Q!$)`HZhg&j}cG$gE92>d9e3DQumoZ+=6xe-tm(zMVPThN9D_# zrU1{M3Tu9!Izd1HYaQ;^X^_;LTWzFkhUd&rd4;Z8oz-N{(`=7J?9e)zZakEiTpu& ztp+HhWxig^x1}r~L867H9z2|Y=PghE8LX@{d@6=AWvllRQ}jEIkCRkngX0{GU6`}w zHz=h=cOqy*M8xG|O*2rkTf6wGv<(7SmGy^C3nhR-$NH`*D38TZDrm-6H+TizL2phq zjD6cYoZ*38ujF}IMQUTaoj5D@jdKnBBneMARf+RcC9@#$f#9`LlD;~0q* zfP!_9g;aBmdJ>uRTdM8qO}cv%v3xS9TZ%Ox1!A;`?mE?ogg&}MU5|m^+67E2N#yDO zh&Juzy`U!-U>eRyZfm6d&f8W+We^=inh~#&8#xMB*-BQ;LZNyGtSf(8XyV zGE0N_5*&B|c98oR$&8|}C3B8Zrt()~;n?m@hNImU%rS$Fi}+l0r?k}V`f1Ks$42BG zlu*MCP3=NIaHgwZo4bH!F=@U0^og7cY3!D5*L0nJjCFaiWRrF=z>2hiz-am*1aRO8 zXM9{468qZK{kExhjL=+S=9t#3fk0cVPR!58XS^+GATZYHv~XJ-S`*J1m&^)}u*7PU z6MhM5iM%)Tg`Ki`B3SBVg5^^pSUA11KG{zMZ0i$ozFEfB9wW(&+gncvQ?PuxkS#O% zgIl`pRQ`X;=pSy)r>+MjWaF0eA}m(|S9n3#{)WB=Wm=85dBBJh>Fwh?+$z`d!^gh+ z@S|AC(IDmx$&*b#!2pFFZn@wJ(kIHfM5K7;%On=wJ8NRfX@pa}bg-d^@dgRcA`pud z!Brx&1ph%s3Ud(=DHoe%7>qfSV6a;f1{?m7o`m6r4OBLkIyoLU6dkdh)j*w_=^8Dx z^`iZ>qT{2?Vp@uaA=4I8IK#k#zUf)ChsZ3V3o`!xJ5x6$I`}FbR06AyGK*;?F>(l< zStMblkKKj^cvqGeD`FQ)c<1&Jkz&>^6De_pc%*o;&`m2l$5WR6Onm5QY!?8~zlMj( zf|mstm<3B^CZV+7{q|Nk2@}aATDlSk0=MInh#@8sACxcvClM;~p`c?vNniTmGCuc7 zF^Oe#AERF)IoK_cWH_SriAd~)snfJ)yF^;q_i5t}cgZ3hu5cNXVPWZ|9}J6e6~^=+ z(B$36@}L?SdJ@|8#3id}kBqGl$*3?*ODOTFJcfrv8))8pPn8T?+l2G;acoC35WJ$Tj2_#C zdeSll6Bxw{dI2L?_mtNznz}rV<=CNk!5H_m%+g}9gmTqyOU9d!X6zCvBvL#CdD(A5 z?9>D8Y1-em58tl9`<;~ApwLK~PdEzwt_vOQG3_8)j!Q3q?pul$x{v82p3%^197A7a zlHsSn)veMOA~a3nz4%J^?%vxNLIsEM$Oa3NB`L*GGPuuB9fp3-H)I5I)GP2Jgp(xG z`2Yde35#rpqEX#SwN8@V^uNJPQb&sUvD;H5f{N4a`;oErPZLA?yn@E2ul>P5ki!jf z6Yst-cR?vXM*1xdF+#j}^gJ%JI+rReNIW``e!x3!pnNxhc9~2M%H4^p-n0h>>7e{Uqq5AYC6-euLYii)!g z=TVO16RDz#Q^ke_czzYBKxdCekIAFBs0N%ewoo#ZxcM)zFgiVjT=;%J9;w zOerrNulcC<@Vripo^(-~Cj?7EBC$NdDUxB2xJYU7!KvfXD2!GpNN^%#!~Fn z0XMAP1i`Yi782?Es#k+JKNaH+rYhm`?a%0Hz2^q~?SMcGqoD8}DWg3ztYcHDM%BRW zwCD39W1HJeu*(v>rG$)*%aAljZ0T?j4db)c$8KE%oXwDg23YoxXlSp;-(SR!!Y8u8 zg_H-(c~V)$N%HxK#Nuufn9_SK%^3Q>+fr^grpz2=#$G3Fq;R^kjL_J45|1PCst5nf z7}6f|&7dFsXo-oxM$1HF*-kubaMFBaowJ#6j!!l1oQ(g_3^LMeh8rcmoc2!Cmg-C6 zdjTf?=GjkpYB*EYQ+m5_Puct|@szz}S_W&0MMTJ?5Y4U96e57gm8mpxJ|Wg%REadL z53N&en7HLv93U;9vqfro!Q_wXj2s3zE?xbNvrr5^W5bg&A#s_|PGwE9x%x+fTs3WR zMO$_b59B?VbOOhDn4)EF?#9XFnT+QHp5Q5+sUXu<1Qd=cP}G431m`RNEj?H8X|&2z zep8t6n1@ov)WK@9YxTe_-ZeB3+V|S8_Q?AdAI;fc`V+8E+|OdvF#->ukmC6C zBp<=dTAHrtcnCM^H;JzA)%dWSpr`WWZQ=fAUo3ZtoX<32JRN+2J9O45TDZXn5#Axa z`}n-?Tgl9OQ{}CC)xa7$yiW8SLGXdCkUU>=38+GpYu1CUMl5&e z36`6ArIvmeb&7hpZSIr=*@It2d0};q=X)r8yQJm>cKlT-S?p$ighyV{(1(SswZy>I z#K1w^Hd|`+N!}vC$a)d&Ak7_CRVM5M#*bK{Bp1cBGnH^Y7l|c{6g-~ z38xFf8^|V{*uDtd;0-rPgFkUPzte-#X9PB&neg7`q@DL~`Vt?Eh_DcDn9xj#l|>w~OR^KlToy4i_U;sX60j~f^UwEaANS;ZJs0b9n_We=pb z_WWi+@1YZ3omeut*pjhM`ejb;r0A$2&tUXHmnNZjP8}4GmNhb!bN;rdWA7A zGC{yxK?FhBc1aM_(#CVf0m4(UCgY3gSa~Zb8V=n+d$Ft~q$3S^MMzr*&wLyY{eboA;Z$1cM@GQO?%22qZLia z#t{t`j~lwM+^ShgIJ-;B^G`k>#nxqqx}j_#aBj4C zJo*avN5=AE#U`xSu{r5#{g%piLnVVCFpe6wTy1a&6OW!lL>St{a06q7H8gn?HZ0{6 zh%Ud+#(zrPKeCiBv2shNw%K&0@GfZ`2U1I9_~7(;lyMEH#?`1a61@yHc);|-XJSiO z`!a39S({O;#t1f0DL9twevZa}in}rcT?9!_JD-iyfK3`f12t(d(GD%*JJOyG>r}vb zApe#O>CV$ONnXQVK;^sBmbRDW^coL>)8FEp&VhDr!Y!BPECbPLCKK4_rL0x0+wqt% z-oX+A9}PQJdqg+V%+YwUgozcm7w^bed1mZ{uHnpkC;qPZ#=1|ifm*Q~$MM5+r|08P zqn<0ck#7@ma*6WDt0cGiQX&3d!1YdDhie+(B14TFgH_Vp8PoO=$p~5q z{t}cUJ|Ad8o>dSM3eq!ChR+ADyIQ+P=XWELV){e{t|j5jQ}M#%cH>zr8*+U5c2O$x z@zKkOFchhB+cvu_`1L}KP>FEJHV<$1rS-dQ$ZeOJ>GV2jDvV zvB?Cd5Fr^Hh3KXbxj^tua3qdC%~}%KpvC?C&IU$z9tsS*2afS_I>(!^9-Sx!rw`B7 zG<}>9rlR~Q(9^>wy^H|1AQuK7BbJdwd!{`j?R*WcYjUQU;y*1*IIa`AMUp#31^wo| zS?i>N3B*U>yp(EM6>OaGJ0d56chfq23iV7r_R})+$0gjr3r;O4TZm4}QjLB#$xXoS z*{T#jcJpdfTn(SzPMK5%zrr#cCnlYUn3$at^bvd%w{dDbKHY==t;&y}C#%0+Z3vg$ zpyr@VSXrzzN%p0}8UD25 z5EpojiI8sIVp)z;bBkD@oJ4hapvmyw=KAC5bGbJjhL5?3rqv`gouf2h-kXa1Z>9`zFRY{otMW!_k_rZ!8#_%?i9@)yega?0h@?!PfaAG#riXAC!-5= zB@6>RrZ`SAw!W!@*_!7pUe1S0z-b+n-NDlZC^NyToE#e%-?&-RDfGz7(0pci!u33k#~{yT2ZD991lDnx+hNH1;nwp^ zm7&y}Pb+WzW6vJBiQ<#F?xRWvv_B&3{i~FL%Zi~H*WzX@YQu6JD15pqCDb^>NRsUO zf{dXnqln3TM$CPUgs+v+6PZ)~fhNZ}K~PF&joIcjgGA8|>S&N*Ymu+)GA(gYE$|(- zUOoB@XW*E91Ovxhr>$PM2F1>b?q)nPgY#s#A@#158_K&+36l`JVppflm;BH*`#8~ zPL;646J+a}P8U2Fp2$>zfORghN|T@0HUmjTSw244MA&1Hu1;c*xXqajP3?nEx_!6I z$RjG1x9ZgbY0oHhegtifI-b}C#?XAx!UT5L`Rxey`fabtW(XK2ayu%Fp?Llc<;%ez z334zdLWW~tfr`7{Reeyd1~(V(x5I@1r}q|FI)bp>ctilqS$oiuS9Tb+4Zuc|qUBp*2+i(Xi@h#DO1vb}Z z_;1h@$7;Y*S*!-<5z#C9AZZTC({q^}O2k2oO!R{IiV1S%`Q*xUop=L;YZJq25FI|DW~MV5wPx zmzshh60R}k5U#@~lJ4w=Ah&?ldy8v_)EGPnawa7lJ-SBHjNlk#$duo_Qe1k0HJ4Ex z5i6-92GSI!_E<_DXXnoU>ABPQ%CBhn0yOvnI%+W!Dmve9T5g?jnj zfpeEkgF3QDo0x{0OgUo+(_>1sK7&qSf`8V3L<%yU#wV~=Vpz4irYk~`{xF=7b+K78 zk?!JvMLO?&olKADVhzy)7~Ru-@OZ=RtmToW7yDhKl`NG$T`{?JljqA%KiTB4_GfkH zg&Q3fPFXr-*%Tf4|BE4hRe>{~_bW$3JRfr2joO^q4{Wf?R-Jpfu;spc=P0j`< zZln-{m*-;}nE>-ZK~y$-PMwNAbaFYqiwOjuB&MPAo&{xLB>i;W=EMOnd|MJMow2Qz zfM@Xfcp0O7uKK7i6>}dB^6Vq)mF%{|lcsV)bBQ^Xj4swc z?4*YG5c8OG)Ac-l?T+(pRek!_9yR*4KETW+#;HymfbRqV$_m8P2yr_?CmqgkwE`Gvx zg$?+FtN>@at}LW~K(G7spwP3?f#|&-`wWB%zS)Q8if=6e`rHZNF{k;ncM_wQIN%r! zIFvH8oXR)q$!AW5u*);b=nQGZcL9JTS90Ek%_ULnGj%F<(||y9fbe;MldR8IKCMqT z?a5$Hfn-qI$4cemvY>KJ8ZHaUNCN6_x{G4A3B+!;Q$RC+(Y7vS22Ap<^7pz`tU(O}0} z3p{nUza25`T}(f?i}yRUBl%szKc_lEhR@PBtb?eRA(V4>E51t!FzxZ{Sq!Am4N=ABt{%_4Kxb2cw010Mh!|zgW!~;eXA+N@12ec-HWM?Qi7>udA)^x}OPWaHbJ@HpLqHeWtK9GwQiK@GcRj6TvkiQG#VKFx9No za?yUMvT{xSQv&1%_g1bl$0gq>S7;XRXkj2UyXS(BBU3+rPxcHRNM}lqi11z~vtC^O0;B*2gS@TW*OG;LPLEHDNRD6>+ zkoyVOQ=FoT`t&W{U!l9f2kJhCmGUtXR*P;M?E9d>M;r1ygS&_XC|E&IMDV8WR$aah zUyP;^fN$^wgER1G0QNM;2cL98PX$xXH-T9Vzrz7=Hms6m%q6#UuT#Tz&~(awW|NO5 zfHD`q>k07I>~jw|>2yJO83r3u`6EDWz;Cbzf_a&`8dM{CoI+e4x-qpikC=)h0Y7w4 zq0L@{Q}2*~xO(H`yuh48Mvdb$agIrbaSwWBLO_r|J6?&fi!L5Cpm00PjRWsCQuISW zoM55SEWa0LpP7WghcAwcDnW&NkP1;K1gjGkm%ljRb>YLdV#GfI%0*4`j`*+_WTPN1 zl2!t=h~V9;Rn09_`5VKkV7el%F9RGfRW+!c$0%(sA^o{si_kvI)df*1(HhbDY0D>p zP@XOID;_wU@RhROcgobg9-XgIhMJVNA1MgIDKg|ut-4#6@ewPFs&osY2>k%$%L%M} z+aV?9!Hk-LDHhmw^?#NPHJ3|LRu)-U4BXp^f1M~sfZ0`;q{NpZQIg^{Yw|M&-jUOO z_L!J<8Cx1Z3v(j~lc;}W5{+?_aD3jE7#5Qw+mHq+Gaold+$G36cX0~jRqEhkZQE4{ z6k!a#L6NDD)*a5p#tGOXqj*7?9eTiF9>c&q8}L5MyRC8+r!)>hJX0#_J%dwy~zbnMX9ItakqeQ92bUq% zeBP9OP<2|V)4E#TJw|wYz{{36WFVFhh9a#X6%R;62avlKL2J$>tQksJ({u}BXRp)3 zWsohVgV1Mc;-4Z31cT5tP`R91bwnXNAP>5uD(%*X^)TlXTaq^j8m0(Fcl{# zPLehmkgwmfLOY?j99k~^_9ZMBn$-jM66eU5t#dDKLx$~O7}T5rp40r;JBzikzm`=J zYKmhGv42=4h8}1fP`E$U08$d$)VelrI&gkOVx}vQ(|!vzm9{LTQ^D zX{P6-nKpO3lkf(VlZ*xj(@}=t!DwO&0`^94;jw~T+KA<+11^;l1RA0f5@_o@-_6Dk~F%(Bf6!_PCcwb)`rSaB*;sW zQSs@*ZiaRetzt2TEV^5XVimOPm$j|>#mwhc(0>VTMj+sm1S%hOsBr&z<`ZH{bkTa= z8Fn*Wlk=h)&>J)dxddig3EjxqT!9*V%lKxQsvtNi8#&`3>AabQ^8!|(z)S6J+2|z) z>|LTiFpG%}A25x;*%d5kN+{MD$-X_6Q~u8h_+>IkllZud0cMG4wH9o<>N7y3PJ}|h zY;qdj#X2y3CNXLXqPj`v$`fB);;1p@;@?ROm@8`t?~n~7aBAh5Ng_t1BlfFp4~fZ5 zzh^m(cSY+sjzAnnKk%&WH0+E3Qf~F{E8+9wy z+$DcZV%iXE>nv2Tc+OysLGsE9)Dc}B9 zMHRR0_%}Mp1FmN3=5O&vk209UQ5P*8RVt~SlZ~HX4bds%v0?slGC1=ty zx@0iR8zAGA4Xf2hp&E{-g-P{uIVxHFP~}#l8U~@K2vC{sbi21qd?OM?MIk?l(E&r8 zRh@{R;vP9Az8h-fnD#7&npck39{eCw(UHihAd0xi09>vhQd=gz6Pd8z4N#0cnEhbz z4O=!62aynQxduzv4-Unp^|J-WO{#&>LR%#A@vp@HOsu5L8uD|$qf#=X+{lr$JsYK) z#DRB??h_B@FH#qplC55})!XWy>9Vin#%(Sp zL$k$rXoz4L6?JZplFC}MNv4$>D6?}f6g$dxVc!re`3(m-Z^bR$M>_X)SZcYi*G^;l zMX|f6;JGDlxdV#Wx0t%*Sz_VD;90WS&F^ieD4!gq8vkhRPaVLyg}IkJ1d4zN<)4)- zY)im;xR98o$8Wq|k6YXHC&E9&e^noCFupP4&J3o<0GqW@5jTw8_k^A7PC87ByC7yH zto&8GIt1_h@La#b!-KQ!LPl=s*TuDc3-B@8|4R(n%+ox37p1C`I=^3wBVPdax&WgS0Um5(T7!wm<7aOeJfC6rW>NUU zVx8?@J68JQ{h=qP2{4O{%70ne#!kI`{6%eJ`>ek$H_pNb3^+=Dy97N7crSZSo`1YB zv0-8J!wpbYyzH|5qt&m8}gds&6^PhxJCUV-5@8OE( z58x|uF(g*Bq^92Uf>ZnkrlU&btS7HrRPI{7ob`8YBs`xFUK@HAlIQEPo;T;*Wu;zq zkHweYtyw@_PssCXOcfjBDAPPgEY7pfdS3s#$ht1d>Bix-=*Ik^tDy^`ulprfuyymq z{SC~6Yt|pdeKdTGJYE+XNALSpsnL%Th707~^*@BZSGyP5)gj+9P!S;%i|+4L&Q8YH z8mC3jIOl@O;(2LoAwI{P03zau&na=z!2juQpe%uy9PxQc*oycpQ72%Ce+>1A*%F_J zMC=itZKi}n@ejxQe_0$skHqI<+`mgBKmRUG_Ve%3WIq2cP4@G@FYU1Nl9BPf0RI;+ z^WUWrpMRGo`}ucivY&sKCj0q!X)>RGmnQr9cWJVp|G$zZ=GV`u()KU;g&hPv<^ORG*yvt=2K#lF6Bi6(4}bmhF2yW=1Zro4x0TpTB|G zH^2V5^qZDnSO0j^FHPZpJk6{BWxZYh=h^*x*uRJUd)U8+{d?HIhy8olzlZ&M*uRJU zzkS$`TdO_$$xr+iIsT2ofFZo=sDv9BLUp6>E!b8m^d zy8XL`qC>^OP1bp#)KA2aJkKiYc?GZrP`u7H)%kVB@dd%56+@-X&bOZlgGTb%8LlZ! zej~TXz8xH19;dCMuJ>x#*~2@mF!;jj;2~~r%_qc=@n=yf(s_=%*4Vp8(E5_6m*5jE zTvmBs%_1f9ajo9i*Tl)(<7kYymlw3d9t9W1y^b6TdNr3ANKuCvaYf150Z23Me>D*eiWU$nE{ zJ*5nKwfSo+oz-d_$1ksU9@UF{_qx?V6qnSeIdCVk8=Ic@e~&?!Q}FHacl*|yD~qwX5>6b#)0_

      Fc;Av>E`b2s-s`1OT+<^7f=_f@}bWaxRM*dAXn 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

      7tYcn0qX4{UDm}p#XvPkfN{h`+DaQNFg9F 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Μ`L7wuBUYbb5e96O;ZNP`*VDGW#a!XAEAN-J$d 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 o|*l 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

      *>+1?;LYu#EL*^?V$FbJ~ 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�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
    %T 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�qapQZqXc`aW?oM;d*b?zIr4 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%0DujRf2H6$xRz_%b_1GueJ)I@|-`udGN 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 ZgMqHIM}GQl0N`{Vo9E-dgz&%r{}+)DoMr$3 diff --git a/docs/logo_white.webp b/docs/logo_white.webp index ef724a271bd35f8ca062a7113a02513401858578..7402d7dc6492e2a8717f50f93c5b0fc74916e2ca 100644 GIT binary patch literal 48576 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 Yt-C;m$6R{qm~Au`2dMks)c Date: Tue, 24 Sep 2024 12:18:24 +0200 Subject: [PATCH 084/128] lib/promscrape: show only unhealthy targets if `show_only_unhealthy` filter is enabled (#6960) ### Describe Your Changes It is better to show only unhealthy targets instead of all of them when `show_only_unhealthy` filter is enabled. Related issue: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3536 ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Co-authored-by: Roman Khavronenko --- docs/changelog/CHANGELOG.md | 1 + lib/promscrape/targetstatus.go | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index a0595d63b4..4440233946 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -28,6 +28,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change request method for `/query_range` and `/query` calls from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). * FEATURE: [dashboards](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards) for VM single-node, cluster, vmalert, vmagent, VictoriaLogs: add `Go scheduling latency` panel to show the 99th quantile of Go goroutines scheduling. This panel should help identifying insufficient CPU resources for the service. It is especially useful if CPU gets throttled, which now should be visible on this panel. * FEATURE: [alerts](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/deployment/docker/alerts-health.yml): add alerting rule to track the Go scheduling latency for goroutines. It should notify users if VM component doesn't have enough CPU to run or gets throttled. +* FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/) and [Single-node VictoriaMetrics](https://docs.victoriametrics.com/): hide jobs that contain only healthy targets when `show_only_unhealthy` filter is enabled. Before, jobs without unhealthy targets were still displayed on the page. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3536). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. diff --git a/lib/promscrape/targetstatus.go b/lib/promscrape/targetstatus.go index 742c7e3059..148e07c612 100644 --- a/lib/promscrape/targetstatus.go +++ b/lib/promscrape/targetstatus.go @@ -475,6 +475,9 @@ func (tsm *targetStatusMap) getTargetsStatusByJob(filter *requestFilter) *target } targetsStatuses = append(targetsStatuses, ts) } + if filter.showOnlyUnhealthy && len(targetsStatuses) == 0 { + continue + } jts = append(jts, &jobTargetsStatuses{ jobName: jobName, upCount: ups, @@ -488,7 +491,7 @@ func (tsm *targetStatusMap) getTargetsStatusByJob(filter *requestFilter) *target emptyJobs := getEmptyJobs(jts, jobNames) var err error jts, err = filterTargets(jts, filter.endpointSearch, filter.labelSearch) - if len(filter.endpointSearch) > 0 || len(filter.labelSearch) > 0 { + if len(filter.endpointSearch) > 0 || len(filter.labelSearch) > 0 || filter.showOnlyUnhealthy { // Do not show empty jobs if target filters are set. emptyJobs = nil } From 5319acb8edc88e9718400d79b0881c9915042adb Mon Sep 17 00:00:00 2001 From: Zhu Jiekun Date: Tue, 24 Sep 2024 18:44:03 +0800 Subject: [PATCH 085/128] vmagent: remote write respect Retry-After in header (#6124) ### Describe Your Changes related issue: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6097 #### Changed - Remote write retry policy in `vmagent` is changed into: 1. Respect `Retry-After` duration if exists. 2. Otherwise, calculate next retry duration by backoff policy (x2) and max retry duration limit. #### Docs - `CHANGELOG.md`. --- ### Checklist The following checks are mandatory: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Co-authored-by: Zakhar Bessarab Co-authored-by: hagen1778 --- app/vmagent/remotewrite/client.go | 58 +++++++++++++-- app/vmagent/remotewrite/client_test.go | 99 ++++++++++++++++++++++++++ docs/changelog/CHANGELOG.md | 1 + 3 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 app/vmagent/remotewrite/client_test.go diff --git a/app/vmagent/remotewrite/client.go b/app/vmagent/remotewrite/client.go index 49b92b7bd5..5354962aad 100644 --- a/app/vmagent/remotewrite/client.go +++ b/app/vmagent/remotewrite/client.go @@ -7,12 +7,11 @@ import ( "io" "net/http" "net/url" + "strconv" "strings" "sync" "time" - "github.com/VictoriaMetrics/metrics" - "github.com/VictoriaMetrics/VictoriaMetrics/lib/awsapi" "github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" @@ -23,6 +22,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/ratelimiter" "github.com/VictoriaMetrics/VictoriaMetrics/lib/timerpool" "github.com/VictoriaMetrics/VictoriaMetrics/lib/timeutil" + "github.com/VictoriaMetrics/metrics" ) var ( @@ -463,10 +463,10 @@ again: // Unexpected status code returned retriesCount++ - retryDuration *= 2 - if retryDuration > maxRetryDuration { - retryDuration = maxRetryDuration - } + retryAfterHeader := parseRetryAfterHeader(resp.Header.Get("Retry-After")) + retryDuration = getRetryDuration(retryAfterHeader, retryDuration, maxRetryDuration) + + // Handle response body, err := io.ReadAll(resp.Body) _ = resp.Body.Close() if err != nil { @@ -488,3 +488,49 @@ again: } var remoteWriteRejectedLogger = logger.WithThrottler("remoteWriteRejected", 5*time.Second) + +// getRetryDuration returns retry duration. +// retryAfterDuration has the highest priority. +// If retryAfterDuration is not specified, retryDuration gets doubled. +// retryDuration can't exceed maxRetryDuration. +// +// Also see: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6097 +func getRetryDuration(retryAfterDuration, retryDuration, maxRetryDuration time.Duration) time.Duration { + // retryAfterDuration has the highest priority duration + if retryAfterDuration > 0 { + return timeutil.AddJitterToDuration(retryAfterDuration) + } + + // default backoff retry policy + retryDuration *= 2 + if retryDuration > maxRetryDuration { + retryDuration = maxRetryDuration + } + + return retryDuration +} + +// parseRetryAfterHeader parses `Retry-After` value retrieved from HTTP response header. +// retryAfterString should be in either HTTP-date or a number of seconds. +// It will return time.Duration(0) if `retryAfterString` does not follow RFC 7231. +func parseRetryAfterHeader(retryAfterString string) (retryAfterDuration time.Duration) { + if retryAfterString == "" { + return retryAfterDuration + } + + defer func() { + v := retryAfterDuration.Seconds() + logger.Infof("'Retry-After: %s' parsed into %.2f second(s)", retryAfterString, v) + }() + + // Retry-After could be in "Mon, 02 Jan 2006 15:04:05 GMT" format. + if parsedTime, err := time.Parse(http.TimeFormat, retryAfterString); err == nil { + return time.Duration(time.Until(parsedTime).Seconds()) * time.Second + } + // Retry-After could be in seconds. + if seconds, err := strconv.Atoi(retryAfterString); err == nil { + return time.Duration(seconds) * time.Second + } + + return 0 +} diff --git a/app/vmagent/remotewrite/client_test.go b/app/vmagent/remotewrite/client_test.go new file mode 100644 index 0000000000..fda56e2f85 --- /dev/null +++ b/app/vmagent/remotewrite/client_test.go @@ -0,0 +1,99 @@ +package remotewrite + +import ( + "math" + "net/http" + "testing" + "time" +) + +func TestCalculateRetryDuration(t *testing.T) { + // `testFunc` call `calculateRetryDuration` for `n` times + // and evaluate if the result of `calculateRetryDuration` is + // 1. >= expectMinDuration + // 2. <= expectMinDuration + 10% (see timeutil.AddJitterToDuration) + f := func(retryAfterDuration, retryDuration time.Duration, n int, expectMinDuration time.Duration) { + t.Helper() + + for i := 0; i < n; i++ { + retryDuration = getRetryDuration(retryAfterDuration, retryDuration, time.Minute) + } + + expectMaxDuration := helper(expectMinDuration) + expectMinDuration = expectMinDuration - (1000 * time.Millisecond) // Avoid edge case when calculating time.Until(now) + + if !(retryDuration >= expectMinDuration && retryDuration <= expectMaxDuration) { + t.Fatalf( + "incorrect retry duration, want (ms): [%d, %d], got (ms): %d", + expectMinDuration.Milliseconds(), expectMaxDuration.Milliseconds(), + retryDuration.Milliseconds(), + ) + } + } + + // Call calculateRetryDuration for 1 time. + { + // default backoff policy + f(0, time.Second, 1, 2*time.Second) + // default backoff policy exceed max limit" + f(0, 10*time.Minute, 1, time.Minute) + + // retry after > default backoff policy + f(10*time.Second, 1*time.Second, 1, 10*time.Second) + // retry after < default backoff policy + f(1*time.Second, 10*time.Second, 1, 1*time.Second) + // retry after invalid and < default backoff policy + f(0, time.Second, 1, 2*time.Second) + + } + + // Call calculateRetryDuration for multiple times. + { + // default backoff policy 2 times + f(0, time.Second, 2, 4*time.Second) + // default backoff policy 3 times + f(0, time.Second, 3, 8*time.Second) + // default backoff policy N times exceed max limit + f(0, time.Second, 10, time.Minute) + + // retry after 120s 1 times + f(120*time.Second, time.Second, 1, 120*time.Second) + // retry after 120s 2 times + f(120*time.Second, time.Second, 2, 120*time.Second) + } +} + +func TestParseRetryAfterHeader(t *testing.T) { + f := func(retryAfterString string, expectResult time.Duration) { + t.Helper() + + result := parseRetryAfterHeader(retryAfterString) + // expect `expectResult == result` when retryAfterString is in seconds or invalid + // expect the difference between result and expectResult to be lower than 10% + if !(expectResult == result || math.Abs(float64(expectResult-result))/float64(expectResult) < 0.10) { + t.Fatalf( + "incorrect retry after duration, want (ms): %d, got (ms): %d", + expectResult.Milliseconds(), result.Milliseconds(), + ) + } + } + + // retry after header in seconds + f("10", 10*time.Second) + // retry after header in date time + f(time.Now().Add(30*time.Second).UTC().Format(http.TimeFormat), 30*time.Second) + // retry after header invalid + f("invalid-retry-after", 0) + // retry after header not in GMT + f(time.Now().Add(10*time.Second).Format("Mon, 02 Jan 2006 15:04:05 FAKETZ"), 0) +} + +// helper calculate the max possible time duration calculated by timeutil.AddJitterToDuration. +func helper(d time.Duration) time.Duration { + dv := d / 10 + if dv > 10*time.Second { + dv = 10 * time.Second + } + + return d + dv +} diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 4440233946..0eefe18dcb 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -59,6 +59,7 @@ Released at 2024-08-28 * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/): reduce memory usage when scraping targets with big response body. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6759). * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/) and [Single-node VictoriaMetrics](https://docs.victoriametrics.com/): stop adding default port 80/443 for scrape URLs without a port. The value in `instance` label will still carry port for backward compatibility. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6792). * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): add flags `-remoteWrite.retryMinInterval` and `-remoteWrite.retryMaxTime` for adjusting remote-write requests retry policy. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5486). Thanks to @yorik for the [pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6289). +* FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): respect `Retry-After` header when making retries for pushing the data to remote destination via remote write protocol. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6097). * FEATURE: [vmalert](https://docs.victoriametrics.com/vmalert/): add command-line flag `-notifier.headers` to allow configuring additional headers for all requests sent to the corresponding `-notifier.url`. * FEATURE: [vmalert-tool](https://docs.victoriametrics.com/vmalert-tool/): add `-external.label` and `-external.url` command-line flags, in the same way as these flags are supported by vmalert. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6735). * FEATURE: [vmbackup](https://docs.victoriametrics.com/vmbackup/), [vmrestore](https://docs.victoriametrics.com/vmrestore/), [vmbackupmanager](https://docs.victoriametrics.com/vmbackupmanager/): use exponential backoff for retries when uploading or downloading data from S3. This should reduce the number of failed uploads and downloads when S3 is temporarily unavailable. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6732). From c7569dac5007b3793d7b5a0b824ceb6a63a2a207 Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Tue, 24 Sep 2024 14:59:25 +0200 Subject: [PATCH 086/128] lib/promscrape: temporary disable TestClientProxyReadOk This test is very flaky and prevents other tests from running in CI. Disabling this test should improve tests quality, since it isn't reliable anyway. There is a ticket to fix this test - https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7062 Once fixed, this test should be uncommented. Signed-off-by: hagen1778 --- lib/promscrape/client_test.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/promscrape/client_test.go b/lib/promscrape/client_test.go index bafd8cd342..a9c69304f3 100644 --- a/lib/promscrape/client_test.go +++ b/lib/promscrape/client_test.go @@ -1,9 +1,7 @@ package promscrape import ( - "context" "encoding/base64" - "errors" "fmt" "io" "net" @@ -12,9 +10,7 @@ import ( "testing" "time" - "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth" - "github.com/VictoriaMetrics/VictoriaMetrics/lib/proxy" ) func copyHeader(dst, src http.Header) { @@ -113,7 +109,7 @@ func newTestAuthConfig(t *testing.T, isTLS bool, ba *promauth.BasicAuthConfig) * return ac } -func TestClientProxyReadOk(t *testing.T) { +/*func TestClientProxyReadOk(t *testing.T) { ctx := context.Background() f := func(isBackendTLS, isProxyTLS bool, backendAuth, proxyAuth *promauth.BasicAuthConfig) { t.Helper() @@ -198,4 +194,4 @@ func TestClientProxyReadOk(t *testing.T) { f(false, true, &promauth.BasicAuthConfig{Username: "test", Password: promauth.NewSecret("1234")}, nil) // backend tls and proxy auth f(true, false, nil, &promauth.BasicAuthConfig{Username: "proxy-test", Password: promauth.NewSecret("1234")}) -} +}*/ From 8bb3f2fd4358bf05823fa36580b20964f20edc3a Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Tue, 24 Sep 2024 15:12:55 +0200 Subject: [PATCH 087/128] lib/promscrape: make linter happy Signed-off-by: hagen1778 --- lib/promscrape/client_test.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/lib/promscrape/client_test.go b/lib/promscrape/client_test.go index a9c69304f3..8e53d9ad36 100644 --- a/lib/promscrape/client_test.go +++ b/lib/promscrape/client_test.go @@ -1,18 +1,6 @@ package promscrape -import ( - "encoding/base64" - "fmt" - "io" - "net" - "net/http" - "net/http/httptest" - "testing" - "time" - - "github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth" -) - +/* func copyHeader(dst, src http.Header) { for k, vv := range src { for _, v := range vv { @@ -109,7 +97,7 @@ func newTestAuthConfig(t *testing.T, isTLS bool, ba *promauth.BasicAuthConfig) * return ac } -/*func TestClientProxyReadOk(t *testing.T) { +func TestClientProxyReadOk(t *testing.T) { ctx := context.Background() f := func(isBackendTLS, isProxyTLS bool, backendAuth, proxyAuth *promauth.BasicAuthConfig) { t.Helper() @@ -194,4 +182,5 @@ func newTestAuthConfig(t *testing.T, isTLS bool, ba *promauth.BasicAuthConfig) * f(false, true, &promauth.BasicAuthConfig{Username: "test", Password: promauth.NewSecret("1234")}, nil) // backend tls and proxy auth f(true, false, nil, &promauth.BasicAuthConfig{Username: "proxy-test", Password: promauth.NewSecret("1234")}) -}*/ +} +*/ From e28265fa3993515a28559508ae2289a9eee5a147 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:47:30 +0300 Subject: [PATCH 088/128] Automatic update operator docs from VictoriaMetrics/operator@27ad7e1 (#7086) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: f41gh7 <18450869+f41gh7@users.noreply.github.com> --- docs/operator/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index c36d443b99..2625512b3d 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -26,6 +26,7 @@ aliases: - [operator](https://docs.victoriametrics.com/operator/): reduces load on kubernetes api-server. See this commits: [commit-0](a0145b8a89dd5bb9051f8d4359b6a70c1d1a95ce), [commit-1](e2fbbd3e37146670f656d700ad0f64b2c299b0a0), [commit-2](184ba19a5f1d10dc2ac1bf018b2729f64e2a8c25). - [operator](https://docs.victoriametrics.com/operator/): enables client cache back for `secrets` and `configmaps`. Adds new flag `-controller.disableCacheFor=seccret,configmap` to disable it if needed. - [operator](https://docs.victoriametrics.com/operator/): made webhook port configurable. See [this issue](https://github.com/VictoriaMetrics/operator/issues/1106) for details. +- [operator](https://docs.victoriametrics.com/operator/): operator trims spaces from `Secret` and `Configmap` values by default. This behaviour could be changed with flag `disableSecretKeySpaceTrim`. Related [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6986). ## [v0.47.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.3) - 28 Aug 2024 From 9a0f69762247d00798f4dc06d36073698f86a9c8 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Tue, 24 Sep 2024 18:22:18 +0200 Subject: [PATCH 089/128] docs: update CONTRIBUTING.md with practical requirements (#7087) The change supposed to have more practical recommendations and reflect the real processes for maintaining the project. Signed-off-by: hagen1778 --- docs/CONTRIBUTING.md | 88 +++++++++++++++++++++++--------------------- docs/README.md | 2 +- 2 files changed, 48 insertions(+), 42 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index f57f06e690..4c56b11386 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -22,54 +22,60 @@ If you like VictoriaMetrics and want to contribute, then it would be great: - experience sharing with colleagues. - Convincing your management to sign [Enterprise contract](https://docs.victoriametrics.com/enterprise/) with VictoriaMetrics. +## Issues + +When making a new issue, make sure to create no duplicates. Use GitHub search to find whether similar issues exist already. +The new issue should be written in English and contain concise description of the problem and environment where it exists. +We'd very much prefer to have a specific use-case included in the description, since it could have workaround or alternative solutions. + +When looking for an issue to contribute, always prefer working on [bugs](https://github.com/VictoriaMetrics/VictoriaMetrics/issues?q=is%3Aopen+is%3Aissue+label%3Abug) +instead of [enhancements](https://github.com/VictoriaMetrics/VictoriaMetrics/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement). +Helping other people with their [questions](https://github.com/VictoriaMetrics/VictoriaMetrics/issues?q=is%3Aopen+is%3Aissue+label%3Aquestion) is also a contribution. + +If you'd like to contribute to [documentation](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/docs) please +read the [guideline](https://docs.victoriametrics.com/#documentation). + +### Labels + +We use [labels](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels) +to categorize GitHub issues. We have the following labels: +1. A component label: vmalert, vmagent, etc. Add this label to the issue if it is related to a specific component. +1. An issue type: `bug`, `enhancement`, `question`. +1. `enterprize`, assigned to issues related to ENT features +1. `need more info`, assigned to issues which require elaboration from the issue creator. + For example, if we weren't able to reproduce the reported bug based on the ticket description then we ask additional + questions which could help to reproduce the issue and add `need more info` label. This label helps other maintainers + to understand that this issue wasn't forgotten but waits for the feedback from user. +1. `waiting for release`, assigned to issues that required code changes and those changes were merged to upstream, but not released yet. + Once a release is made, maintainers go through all labeled issues, leave a comment about the new release, remove the label, and close the issue. +1. `vmui`, assigned to issues related to https://docs.victoriametrics.com/#vmui or https://docs.victoriametrics.com/victorialogs/querying/#web-ui + ## Pull request checklist -Before sending a pull request to [VictoriaMetrics repository](https://github.com/VictoriaMetrics/VictoriaMetrics/) please make sure it **conforms all** the following checks: +Implementing a bugfix or enhancement requires sending a pull request to the [corresponding repository](https://github.com/orgs/VictoriaMetrics/repositories). -- The pull request conforms [VictoriaMetrics goals](https://docs.victoriametrics.com/goals/). -- The pull request conforms [`KISS` principle](https://en.wikipedia.org/wiki/KISS_principle). See [these docs](#kiss-principle) for more details. -- The pull request contains clear description of the change, with links to the related GitHub issues and [docs](https://docs.victoriametrics.com/), if needed. -- Commit messages contain concise yet clear descriptions. Include links to related GitHub issues in commit messages, if such issues exist. -- All the commits are signed and include `Signed-off-by` line. Use `git commit -s` to include `Signed-off-by` your commits. - See [this doc](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work) about how to sign git commits. -- All the lint checks are passing locally via `make check-all` command run from the VictoriaMetrics repository root. -- All the tests are passing locally via `make test-full` command run from the VictoriaMetrics repository root. -- If the change fixes some bug, it would be great to cover it by [tests](https://pkg.go.dev/testing) if it isn't covered yet by existsing tests. -- If the change improves performance or reduces resource usage, then it would be great to add [benchmarks](https://pkg.go.dev/testing#hdr-Benchmarks) - and mention benchmark results before and after the change in the description to the pull request. -- If the change implements some specifications or uses some external APIs, then please provide permanent links to these specs and APIs - directly in the relevant source code, in order to simplify further maintenance of the code. -- If the change modifies the existing logic, make sure it doesn't break existing user setups after the upgrade. -- Please investigate git commit history for the code you change in order to make sure your change doesn't break historical conventions in the modified code. +A pull request should contain the following attributes: +1. Don't use `master` branch for making PRs, as it makes it impossible for reviewers to modify the change. +1. All commits need to be [signed](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits). +1. A clear and concise description of what was done and for what purpose. +1. A link to the issue related to this change, if any. +1. Tests proving that the change is effective. See [this style guide](https://itnext.io/f-tests-as-a-replacement-for-table-driven-tests-in-go-8814a8b19e9e) for tests. + To run tests and code checks locally execute commands `make tests-full` and `make check-all`. +1. Try to not extend the scope of the pull requests outside the issue, do not make unrelated changes. +1. Documentation update, if needed. For example, adding a new flag or changing behavior of existing flags or features + requires reflecting these changes in the documentation. +1. A line in the [changelog](https://docs.victoriametrics.com/changelog/#tip) mentioning the change and related issue. +1. Reviewers who you think have the best expertise on the matter. -Further checks are optional for external contributions: +See good example of pull request [here](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6487). -- The change must be described in **clear user-readable** form at [docs/CHANGELOG.md](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/docs/CHANGELOG.md), - since it is read by **VictoriaMetrics users** who may not know implementation details of VictoriaMetrics products. The change description must **clearly** answer the following questions: +To merge the PR it should be approved by at least one reviewer, all CI checks should be green. - - What does this change do? There is no need to provide technical details for the change, since they may confuse VictoriaMetrics users, who do not know Go. - - Why this change is needed? +Once the PR is merged, check if related issues are still opened (GitHub may close it on PR merge). +The issue should be closed only when the change gets included into an actual release. - The change description must link to the related GitHub issues and the related docs, if any. - - Tips for writing a good changelog message: - - - Write a human-readable changelog message that describes the problem and the solution. - - Use specific text, which can be googled by users interested in the change, such as an error message, metric name, command-line flag name, etc. - - Provide a link to the related GitHub issue or pull request. - - Provide a link to the relevant documentation if the change modifies user-visible behaviour of VictoriaMetrics producs. - -- After your pull request is merged, please add a message to the issue with instructions for how to test the change you added before the new release. - [Here is an example](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4048#issuecomment-1546453726). -- Do not close the original issue before the change is released. In some cases Github can automatically close the issue once PR is merged. Re-open the issue in such case. -- If the change introduces a new feature, this feature must be documented in **user-readable** form at the appropriate parts of [VictoriaMetrics docs](https://docs.victoriametrics.com/). - The docs' sources are located in the [`docs` folder](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/docs). - -Examples of good changelog messages: - -* FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/): add support for [VictoriaMetrics remote write protocol](https://docs.victoriametrics.com/vmagent/#victoriametrics-remote-write-protocol) when [sending / receiving data to / from Kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). This protocol allows saving egress network bandwidth costs when sending data from `vmagent` to `Kafka` located in another datacenter or availability zone. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1225). - -* BUGFIX: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): suppress `series after dedup` error message in logs when `-remoteWrite.streamAggr.dedupInterval` command-line flag is set at [vmagent](https://docs.victoriametrics.com/vmagent/) or when `-streamAggr.dedupInterval` command-line flag is set at [single-node VictoriaMetrics](https://docs.victoriametrics.com/). +Label `waiting for release` is added to issues related to the merged PR. It makes easier for the person who makes the release +to track the related tickets and update them once release is published. ## KISS principle diff --git a/docs/README.md b/docs/README.md index 9fc91b0849..33e02541c8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2689,7 +2689,7 @@ To update the documentation follow the steps below: - To update other pages, apply changes to the corresponding file in [docs folder](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/docs). - If your changes contain an image then see [images in documentation](https://docs.victoriametrics.com/#images-in-documentation). - Create [a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) - with proposed changes and wait for it to be merged. + with proposed changes and wait for it to be merged. See [contributing](https://docs.victoriametrics.com/contributing/). Requirements for changes to docs: From 919d2dc90eebe71330896a7a81f7dbf5ad40edd5 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 24 Sep 2024 18:31:21 +0200 Subject: [PATCH 090/128] lib/logstorage: add benchmark for streamID.marshalString --- lib/logstorage/stream_id_test.go | 24 +++++++++++++--------- lib/logstorage/stream_id_timing_test.go | 27 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 lib/logstorage/stream_id_timing_test.go diff --git a/lib/logstorage/stream_id_test.go b/lib/logstorage/stream_id_test.go index 830b9be452..e94ff334b6 100644 --- a/lib/logstorage/stream_id_test.go +++ b/lib/logstorage/stream_id_test.go @@ -6,23 +6,27 @@ import ( ) func TestStreamIDMarshalUnmarshalString(t *testing.T) { - f := func(sid *streamID) { + f := func(sid *streamID, resultExpected string) { t.Helper() - s := string(sid.marshalString(nil)) + result := string(sid.marshalString(nil)) - var sid2 streamID - if !sid2.tryUnmarshalFromString(s) { - t.Fatalf("cannot unmarshal streamID from %q", s) + if result != resultExpected { + t.Fatalf("unexpected result\ngot\n%q\nwant\n%q", result, resultExpected) } - s2 := string(sid2.marshalString(nil)) - if s != s2 { - t.Fatalf("unexpected marshaled streamID; got %s; want %s", s2, s) + var sid2 streamID + if !sid2.tryUnmarshalFromString(result) { + t.Fatalf("cannot unmarshal streamID from %q", result) + } + + result2 := string(sid2.marshalString(nil)) + if result != result2 { + t.Fatalf("unexpected marshaled streamID; got %s; want %s", result2, result) } } - f(&streamID{}) + f(&streamID{}, "000000000000000000000000000000000000000000000000") f(&streamID{ tenantID: TenantID{ AccountID: 123, @@ -32,7 +36,7 @@ func TestStreamIDMarshalUnmarshalString(t *testing.T) { lo: 89, hi: 344334, }, - }) + }, "0000007b000001c8000000000005410e0000000000000059") } func TestStreamIDMarshalUnmarshal(t *testing.T) { diff --git a/lib/logstorage/stream_id_timing_test.go b/lib/logstorage/stream_id_timing_test.go new file mode 100644 index 0000000000..263c6303f1 --- /dev/null +++ b/lib/logstorage/stream_id_timing_test.go @@ -0,0 +1,27 @@ +package logstorage + +import ( + "testing" +) + +func BenchmarkStreamIDMarshalString(b *testing.B) { + b.ReportAllocs() + b.SetBytes(1) + + sid := &streamID{ + tenantID: TenantID{ + AccountID: 123, + ProjectID: 456, + }, + id: u128{ + lo: 89, + hi: 344334, + }, + } + b.RunParallel(func(pb *testing.PB) { + var b []byte + for pb.Next() { + b = sid.marshalString(b[:0]) + } + }) +} From f86e093b20d416b1fd9e5834bde4d250cc51aca6 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 24 Sep 2024 18:33:23 +0200 Subject: [PATCH 091/128] lib/logstorage: improve performance for streamID.marshalString() by more than 2x The streamID.marshalString() is executed in hot path if the query selects _stream_id field. Command to run the benchmark: go test ./lib/logstorage/ -run=NONE -bench=BenchmarkStreamIDMarshalString -benchtime=5s Results before the commit: BenchmarkStreamIDMarshalString-16 438480714 14.04 ns/op 71.23 MB/s 0 B/op 0 allocs/op Results after the commit: BenchmarkStreamIDMarshalString-16 982459660 6.049 ns/op 165.30 MB/s 0 B/op 0 allocs/op --- lib/logstorage/stream_id.go | 6 ++---- lib/logstorage/tenant_id.go | 6 ++++++ lib/logstorage/u128.go | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/logstorage/stream_id.go b/lib/logstorage/stream_id.go index 6d00e35f84..effe3893ed 100644 --- a/lib/logstorage/stream_id.go +++ b/lib/logstorage/stream_id.go @@ -28,10 +28,8 @@ func (sid *streamID) reset() { // marshalString returns _stream_id value for the given sid. func (sid *streamID) marshalString(dst []byte) []byte { - bb := bbPool.Get() - bb.B = sid.marshal(bb.B) - dst = hex.AppendEncode(dst, bb.B) - bbPool.Put(bb) + dst = sid.tenantID.marshalString(dst) + dst = sid.id.marshalString(dst) return dst } diff --git a/lib/logstorage/tenant_id.go b/lib/logstorage/tenant_id.go index 101f53bd7d..235d611e33 100644 --- a/lib/logstorage/tenant_id.go +++ b/lib/logstorage/tenant_id.go @@ -44,6 +44,12 @@ func (tid *TenantID) less(a *TenantID) bool { return tid.ProjectID < a.ProjectID } +func (tid *TenantID) marshalString(dst []byte) []byte { + n := uint64(tid.AccountID)<<32 | uint64(tid.ProjectID) + dst = marshalUint64Hex(dst, n) + return dst +} + // marshal appends the marshaled tid to dst and returns the result func (tid *TenantID) marshal(dst []byte) []byte { dst = encoding.MarshalUint32(dst, tid.AccountID) diff --git a/lib/logstorage/u128.go b/lib/logstorage/u128.go index f28fa20d3b..d564e48624 100644 --- a/lib/logstorage/u128.go +++ b/lib/logstorage/u128.go @@ -32,6 +32,30 @@ func (u *u128) equal(a *u128) bool { return u.hi == a.hi && u.lo == a.lo } +func (u *u128) marshalString(dst []byte) []byte { + dst = marshalUint64Hex(dst, u.hi) + dst = marshalUint64Hex(dst, u.lo) + return dst +} + +func marshalUint64Hex(dst []byte, n uint64) []byte { + dst = marshalByteHex(dst, byte(n>>56)) + dst = marshalByteHex(dst, byte(n>>48)) + dst = marshalByteHex(dst, byte(n>>40)) + dst = marshalByteHex(dst, byte(n>>32)) + dst = marshalByteHex(dst, byte(n>>24)) + dst = marshalByteHex(dst, byte(n>>16)) + dst = marshalByteHex(dst, byte(n>>8)) + dst = marshalByteHex(dst, byte(n)) + return dst +} + +func marshalByteHex(dst []byte, x byte) []byte { + return append(dst, hexByteMap[(x>>4)&15], hexByteMap[x&15]) +} + +var hexByteMap = [16]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} + // marshal appends the marshaled u to dst and returns the result. func (u *u128) marshal(dst []byte) []byte { dst = encoding.MarshalUint64(dst, u.hi) From cf2e7d0d92f43ef42ccfbadfeb05ab5fcd0efa45 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 24 Sep 2024 18:51:23 +0200 Subject: [PATCH 092/128] lib/logstorage/consts.go: document that it isn't recommended setting maxColumnsPerBlock constant to too big values This should help avoiding cases like this one - https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6425#issuecomment-2337446083 --- lib/logstorage/consts.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/logstorage/consts.go b/lib/logstorage/consts.go index 1ef655749d..e20dc5502e 100644 --- a/lib/logstorage/consts.go +++ b/lib/logstorage/consts.go @@ -14,6 +14,10 @@ const maxUncompressedBlockSize = 2 * 1024 * 1024 const maxRowsPerBlock = 8 * 1024 * 1024 // maxColumnsPerBlock is the maximum number of columns per block. +// +// It isn't recommended setting this value to too big value, because this may result +// in excess memory usage during data ingestion and significant slowdown during query execution, +// since every column header is unpacked in every matching block during query execution. const maxColumnsPerBlock = 1_000 // MaxFieldNameSize is the maximum size in bytes for field name. From 7f1ba187196cb68ac9f5876bd413bdc107b2bde7 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 24 Sep 2024 20:51:13 +0200 Subject: [PATCH 093/128] lib/logstorage: improve the performance of obtaining _stream column value Substitute global streamTagsCache with per-blockSearch cache for ((stream.id) -> (_stream value)) entries. This improves scalability of obtaining _stream values on a machine with many CPU cores, since every CPU has its own blockSearch instance. This also should reduce memory usage when querying logs over big number of streams, since per-blockSearch cache of ((stream.id) -> (_stream value)) entries is limited in size, and its lifetime is bounded by a single query. --- lib/logstorage/block_result.go | 38 ++-------------------- lib/logstorage/block_search.go | 58 +++++++++++++++++++++++++++++++--- lib/logstorage/partition.go | 26 --------------- lib/logstorage/storage.go | 15 --------- 4 files changed, 57 insertions(+), 80 deletions(-) diff --git a/lib/logstorage/block_result.go b/lib/logstorage/block_result.go index 2ef7fe8574..2dc30a3fb3 100644 --- a/lib/logstorage/block_result.go +++ b/lib/logstorage/block_result.go @@ -500,43 +500,11 @@ func (br *blockResult) addStreamIDColumn(bs *blockSearch) { } func (br *blockResult) addStreamColumn(bs *blockSearch) bool { - if !bs.prevStreamID.equal(&bs.bsw.bh.streamID) { - return br.addStreamColumnSlow(bs) - } - - if len(bs.prevStream) == 0 { + streamStr := bs.getStreamStr() + if streamStr == "" { return false } - br.addConstColumn("_stream", bytesutil.ToUnsafeString(bs.prevStream)) - return true -} - -func (br *blockResult) addStreamColumnSlow(bs *blockSearch) bool { - bb := bbPool.Get() - defer bbPool.Put(bb) - - streamID := &bs.bsw.bh.streamID - bb.B = bs.bsw.p.pt.appendStreamTagsByStreamID(bb.B[:0], streamID) - if len(bb.B) == 0 { - // Couldn't find stream tags by streamID. This may be the case when the corresponding log stream - // was recently registered and its tags aren't visible to search yet. - // The stream tags must become visible in a few seconds. - // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6042 - bs.prevStreamID = *streamID - bs.prevStream = bs.prevStream[:0] - return false - } - - st := GetStreamTags() - mustUnmarshalStreamTags(st, bb.B) - bb.B = st.marshalString(bb.B[:0]) - PutStreamTags(st) - - s := bytesutil.ToUnsafeString(bb.B) - br.addConstColumn("_stream", s) - - bs.prevStreamID = *streamID - bs.prevStream = append(bs.prevStream[:0], s...) + br.addConstColumn("_stream", streamStr) return true } diff --git a/lib/logstorage/block_search.go b/lib/logstorage/block_search.go index cf39954120..3512dd321d 100644 --- a/lib/logstorage/block_search.go +++ b/lib/logstorage/block_search.go @@ -85,6 +85,10 @@ func getBlockSearch() *blockSearch { func putBlockSearch(bs *blockSearch) { bs.reset() + + // reset seenStreams before returning bs to the pool in order to reduce memory usage. + bs.seenStreams = nil + blockSearchPool.Put(bs) } @@ -115,10 +119,9 @@ type blockSearch struct { // a is used for storing unmarshaled data in csh a arena - // prevStreamID and prevStream are used for speeding up fetching _stream columns - // across sequential blocks belonging to the same stream. - prevStreamID streamID - prevStream []byte + // seenStreams contains seen streamIDs for the recent searches. + // It is used for speeding up fetching _stream column. + seenStreams map[u128]string } func (bs *blockSearch) reset() { @@ -145,6 +148,8 @@ func (bs *blockSearch) reset() { bs.sbu.reset() bs.csh.reset() bs.a.reset() + + // Do not reset seenStreams, since its' lifetime is managed by blockResult.addStreamColumn() code. } func (bs *blockSearch) partPath() string { @@ -326,3 +331,48 @@ func (ih *indexBlockHeader) mustReadBlockHeaders(dst []blockHeader, p *part) []b return dst } + +// getStreamStr returns _stream value for the given block at bs. +func (bs *blockSearch) getStreamStr() string { + sid := bs.bsw.bh.streamID.id + streamStr := bs.seenStreams[sid] + if streamStr != "" { + // Fast path - streamStr is found in the seenStreams. + return streamStr + } + + // Slow path - load streamStr from the storage. + streamStr = bs.getStreamStrSlow() + if streamStr != "" { + // Store the found streamStr in seenStreams. + if len(bs.seenStreams) > 20_000 { + bs.seenStreams = nil + } + if bs.seenStreams == nil { + bs.seenStreams = make(map[u128]string) + } + bs.seenStreams[sid] = streamStr + } + return streamStr +} + +func (bs *blockSearch) getStreamStrSlow() string { + bb := bbPool.Get() + defer bbPool.Put(bb) + + bb.B = bs.bsw.p.pt.idb.appendStreamTagsByStreamID(bb.B[:0], &bs.bsw.bh.streamID) + if len(bb.B) == 0 { + // Couldn't find stream tags by sid. This may be the case when the corresponding log stream + // was recently registered and its tags aren't visible to search yet. + // The stream tags must become visible in a few seconds. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6042 + return "" + } + + st := GetStreamTags() + mustUnmarshalStreamTags(st, bb.B) + bb.B = st.marshalString(bb.B[:0]) + PutStreamTags(st) + + return string(bb.B) +} diff --git a/lib/logstorage/partition.go b/lib/logstorage/partition.go index 64465de209..fc88510ec1 100644 --- a/lib/logstorage/partition.go +++ b/lib/logstorage/partition.go @@ -159,32 +159,6 @@ func (pt *partition) logIngestedRows(lr *LogRows) { } } -// appendStreamTagsByStreamID appends canonical representation of stream tags for the given sid to dst -// and returns the result. -func (pt *partition) appendStreamTagsByStreamID(dst []byte, sid *streamID) []byte { - // Search for the StreamTags in the cache. - key := bbPool.Get() - defer bbPool.Put(key) - - // There is no need in putting partition name into key here, - // since StreamTags is uniquely identified by streamID. - key.B = sid.marshal(key.B) - dstLen := len(dst) - dst = pt.s.streamTagsCache.GetBig(dst, key.B) - if len(dst) > dstLen { - // Fast path - the StreamTags have been found in cache. - return dst - } - - // Slow path - search for StreamTags in idb - dst = pt.idb.appendStreamTagsByStreamID(dst, sid) - if len(dst) > dstLen { - // Store the found StreamTags to cache - pt.s.streamTagsCache.SetBig(key.B, dst[dstLen:]) - } - return dst -} - func (pt *partition) hasStreamIDInCache(sid *streamID) bool { var result [1]byte diff --git a/lib/logstorage/storage.go b/lib/logstorage/storage.go index b0d94babf1..b729ffe30b 100644 --- a/lib/logstorage/storage.go +++ b/lib/logstorage/storage.go @@ -135,15 +135,6 @@ type Storage struct { // the check whether the given stream is already registered in the persistent storage. streamIDCache *workingsetcache.Cache - // streamTagsCache caches StreamTags entries keyed by streamID. - // - // There is no need to put partition into the key for StreamTags, - // since StreamTags are uniquely identified by streamID. - // - // It reduces the load on persistent storage during querying - // when StreamTags must be found for the particular streamID - streamTagsCache *workingsetcache.Cache - // filterStreamCache caches streamIDs keyed by (partition, []TenanID, StreamFilter). // // It reduces the load on persistent storage during querying by _stream:{...} filter. @@ -253,8 +244,6 @@ func MustOpenStorage(path string, cfg *StorageConfig) *Storage { streamIDCachePath := filepath.Join(path, cacheDirname, streamIDCacheFilename) streamIDCache := workingsetcache.Load(streamIDCachePath, mem/16) - streamTagsCache := workingsetcache.New(mem / 10) - filterStreamCache := workingsetcache.New(mem / 10) s := &Storage{ @@ -270,7 +259,6 @@ func MustOpenStorage(path string, cfg *StorageConfig) *Storage { stopCh: make(chan struct{}), streamIDCache: streamIDCache, - streamTagsCache: streamTagsCache, filterStreamCache: filterStreamCache, } @@ -474,9 +462,6 @@ func (s *Storage) MustClose() { s.streamIDCache.Stop() s.streamIDCache = nil - s.streamTagsCache.Stop() - s.streamTagsCache = nil - s.filterStreamCache.Stop() s.filterStreamCache = nil From 6b1b47df541c987b9d795073d7168fed896fcb2f Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Wed, 25 Sep 2024 15:01:39 +0200 Subject: [PATCH 094/128] app/vmalert: bump default values for sending data to `remoteWrite.url` (#7084) * `remoteWrite.maxQueueSize` from `100_000` to `1_000_000`, this should improve resiliency of recording rules that produce many series; * `remoteWrite.maxBatchSize` from `1_000` to `10_000`, this should be more efficient to send from netwroking perspective; * `remoteWrite.concurrency` from `1` to `4`, this should imrpove speed of sending the generated series. The new settings should improve remote write performance of vmalert with default settings. ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: hagen1778 Co-authored-by: Hui Wang --- app/vmalert/remotewrite/init.go | 6 +++--- docs/changelog/CHANGELOG.md | 1 + docs/vmalert.md | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/vmalert/remotewrite/init.go b/app/vmalert/remotewrite/init.go index 412ce9e432..9112ef5428 100644 --- a/app/vmalert/remotewrite/init.go +++ b/app/vmalert/remotewrite/init.go @@ -34,9 +34,9 @@ var ( idleConnectionTimeout = flag.Duration("remoteWrite.idleConnTimeout", 50*time.Second, `Defines a duration for idle (keep-alive connections) to exist. Consider settings this value less to the value of "-http.idleConnTimeout". It must prevent possible "write: broken pipe" and "read: connection reset by peer" errors.`) - maxQueueSize = flag.Int("remoteWrite.maxQueueSize", 1e5, "Defines the max number of pending datapoints to remote write endpoint") - maxBatchSize = flag.Int("remoteWrite.maxBatchSize", 1e3, "Defines max number of timeseries to be flushed at once") - concurrency = flag.Int("remoteWrite.concurrency", 1, "Defines number of writers for concurrent writing into remote write endpoint") + maxQueueSize = flag.Int("remoteWrite.maxQueueSize", 1e6, "Defines the max number of pending datapoints to remote write endpoint") + maxBatchSize = flag.Int("remoteWrite.maxBatchSize", 1e4, "Defines max number of timeseries to be flushed at once") + concurrency = flag.Int("remoteWrite.concurrency", 4, "Defines number of writers for concurrent writing into remote write endpoint") flushInterval = flag.Duration("remoteWrite.flushInterval", 5*time.Second, "Defines interval of flushes to remote write endpoint") tlsInsecureSkipVerify = flag.Bool("remoteWrite.tlsInsecureSkipVerify", false, "Whether to skip tls verification when connecting to -remoteWrite.url") diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 0eefe18dcb..9f3cb9f425 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -29,6 +29,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: [dashboards](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards) for VM single-node, cluster, vmalert, vmagent, VictoriaLogs: add `Go scheduling latency` panel to show the 99th quantile of Go goroutines scheduling. This panel should help identifying insufficient CPU resources for the service. It is especially useful if CPU gets throttled, which now should be visible on this panel. * FEATURE: [alerts](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/deployment/docker/alerts-health.yml): add alerting rule to track the Go scheduling latency for goroutines. It should notify users if VM component doesn't have enough CPU to run or gets throttled. * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent/) and [Single-node VictoriaMetrics](https://docs.victoriametrics.com/): hide jobs that contain only healthy targets when `show_only_unhealthy` filter is enabled. Before, jobs without unhealthy targets were still displayed on the page. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3536). +* FEATURE: [vmalert](https://docs.victoriametrics.com/vmalert): bump default values for sending data to `remoteWrite.url`: `remoteWrite.maxQueueSize` from `100_000` to `1_000_000`, `remoteWrite.maxBatchSize` from `1_000` to `10_000`, `remoteWrite.concurrency` from `1` to `4`. The new settings should improve remote write performance of vmalert with default settings. * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. diff --git a/docs/vmalert.md b/docs/vmalert.md index 2c00e8db49..5ec250eec4 100644 --- a/docs/vmalert.md +++ b/docs/vmalert.md @@ -1367,7 +1367,7 @@ The shortlist of configuration flags is the following: -remoteWrite.bearerTokenFile string Optional path to bearer token file to use for -remoteWrite.url. -remoteWrite.concurrency int - Defines number of writers for concurrent writing into remote write endpoint (default 1) + Defines number of writers for concurrent writing into remote write endpoint (default 4) -remoteWrite.disablePathAppend Whether to disable automatic appending of '/api/v1/write' path to the configured -remoteWrite.url. -remoteWrite.flushInterval duration @@ -1377,9 +1377,9 @@ The shortlist of configuration flags is the following: -remoteWrite.idleConnTimeout duration Defines a duration for idle (keep-alive connections) to exist. Consider settings this value less to the value of "-http.idleConnTimeout". It must prevent possible "write: broken pipe" and "read: connection reset by peer" errors. (default 50s) -remoteWrite.maxBatchSize int - Defines max number of timeseries to be flushed at once (default 1000) + Defines max number of timeseries to be flushed at once (default 10000) -remoteWrite.maxQueueSize int - Defines the max number of pending datapoints to remote write endpoint (default 100000) + Defines the max number of pending datapoints to remote write endpoint (default 1000000) -remoteWrite.oauth2.clientID string Optional OAuth2 clientID to use for -remoteWrite.url -remoteWrite.oauth2.clientSecret string From 612be0954c97b57f344d11e7bfd1c83fd599f38c Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:02:24 +0300 Subject: [PATCH 095/128] Automatic update operator docs from VictoriaMetrics/operator@1feab7d (#7092) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: f41gh7 <18450869+f41gh7@users.noreply.github.com> --- docs/operator/api.md | 100 +++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/docs/operator/api.md b/docs/operator/api.md index 32ea1f4d2c..f98fddba1c 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -90,8 +90,8 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `headers` | Headers defines list of headers that can be added to HTTP responses. | _object (keys:string, values:string)_ | true | -| `http2` | HTTP2 enables HTTP/2 support. Note that HTTP/2 is only supported with TLS.
    This can not be changed on the fly. | _boolean_ | true | +| `headers` | Headers defines list of headers that can be added to HTTP responses. | _object (keys:string, values:string)_ | false | +| `http2` | HTTP2 enables HTTP/2 support. Note that HTTP/2 is only supported with TLS.
    This can not be changed on the fly. | _boolean_ | false | @@ -257,10 +257,10 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `cert_file` | CertFile defines path to the pre-mounted file with certificate
    mutually exclusive with CertSecretRef | _string_ | true | -| `cert_secret_ref` | | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `key_file` | KeyFile defines path to the pre-mounted file with certificate key
    mutually exclusive with KeySecretRef | _string_ | true | -| `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | +| `cert_file` | CertFile defines path to the pre-mounted file with certificate
    mutually exclusive with CertSecretRef | _string_ | false | +| `cert_secret_ref` | CertSecretRef defines reference for secret with certificate content under given key
    mutually exclusive with CertFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `key_file` | KeyFile defines path to the pre-mounted file with certificate key
    mutually exclusive with KeySecretRef | _string_ | false | +| `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | #### CommonApplicationDeploymentParams @@ -330,9 +330,9 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | -| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | -| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | -| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | false | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | false | #### CommonDefaultableParams @@ -354,7 +354,7 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | | `port` | Port listen address | _string_ | false | | `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | @@ -1721,14 +1721,14 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `ca_file` | CAFile defines path to the pre-mounted file with CA
    mutually exclusive with CASecretRef | _string_ | true | -| `ca_secret_ref` | CA defines reference for secret with CA content under given key
    mutually exclusive with CAFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `cert_file` | CertFile defines path to the pre-mounted file with certificate
    mutually exclusive with CertSecretRef | _string_ | true | -| `cert_secret_ref` | | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `insecure_skip_verify` | Cert defines reference for secret with CA content under given key
    mutually exclusive with CertFile | _boolean_ | true | -| `key_file` | KeyFile defines path to the pre-mounted file with certificate key
    mutually exclusive with KeySecretRef | _string_ | true | -| `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `server_name` | ServerName indicates a name of a server | _string_ | true | +| `ca_file` | CAFile defines path to the pre-mounted file with CA
    mutually exclusive with CASecretRef | _string_ | false | +| `ca_secret_ref` | CA defines reference for secret with CA content under given key
    mutually exclusive with CAFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `cert_file` | CertFile defines path to the pre-mounted file with certificate
    mutually exclusive with CertSecretRef | _string_ | false | +| `cert_secret_ref` | CertSecretRef defines reference for secret with certificate content under given key
    mutually exclusive with CertFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `insecure_skip_verify` | Cert defines reference for secret with CA content under given key
    mutually exclusive with CertFile | _boolean_ | false | +| `key_file` | KeyFile defines path to the pre-mounted file with certificate key
    mutually exclusive with KeySecretRef | _string_ | false | +| `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `server_name` | ServerName indicates a name of a server | _string_ | false | #### TLSConfig @@ -1787,18 +1787,18 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | -| `cert_file` | CertFile defines path to the pre-mounted file with certificate
    mutually exclusive with CertSecretRef | _string_ | true | -| `cert_secret_ref` | | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `cipher_suites` | CipherSuites defines list of supported cipher suites for TLS versions up to TLS 1.2
    https://golang.org/pkg/crypto/tls/#pkg-constants | _string array_ | true | -| `client_auth_type` | Cert defines reference for secret with CA content under given key
    mutually exclusive with CertFile
    ClientAuthType defines server policy for client authentication
    If you want to enable client authentication (aka mTLS), you need to use RequireAndVerifyClientCert
    Note, mTLS is supported only at enterprise version of VictoriaMetrics components | _string_ | true | -| `client_ca_file` | ClientCAFile defines path to the pre-mounted file with CA
    mutually exclusive with ClientCASecretRef | _string_ | true | -| `client_ca_secret_ref` | ClientCASecretRef defines reference for secret with CA content under given key
    mutually exclusive with ClientCAFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `curve_preferences` | CurvePreferences defines elliptic curves that will be used in an ECDHE handshake, in preference order.
    https://golang.org/pkg/crypto/tls/#CurveID | _string array_ | true | -| `key_file` | KeyFile defines path to the pre-mounted file with certificate key
    mutually exclusive with KeySecretRef | _string_ | true | -| `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | -| `max_version` | MaxVersion maximum TLS version that is acceptable. | _string_ | true | -| `min_version` | MinVersion minimum TLS version that is acceptable. | _string_ | true | -| `prefer_server_cipher_suites` | PreferServerCipherSuites controls whether the server selects the
    client's most preferred ciphersuite | _boolean_ | true | +| `cert_file` | CertFile defines path to the pre-mounted file with certificate
    mutually exclusive with CertSecretRef | _string_ | false | +| `cert_secret_ref` | CertSecretRef defines reference for secret with certificate content under given key
    mutually exclusive with CertFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `cipher_suites` | CipherSuites defines list of supported cipher suites for TLS versions up to TLS 1.2
    https://golang.org/pkg/crypto/tls/#pkg-constants | _string array_ | false | +| `client_auth_type` | Cert defines reference for secret with CA content under given key
    mutually exclusive with CertFile
    ClientAuthType defines server policy for client authentication
    If you want to enable client authentication (aka mTLS), you need to use RequireAndVerifyClientCert
    Note, mTLS is supported only at enterprise version of VictoriaMetrics components | _string_ | false | +| `client_ca_file` | ClientCAFile defines path to the pre-mounted file with CA
    mutually exclusive with ClientCASecretRef | _string_ | false | +| `client_ca_secret_ref` | ClientCASecretRef defines reference for secret with CA content under given key
    mutually exclusive with ClientCAFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `curve_preferences` | CurvePreferences defines elliptic curves that will be used in an ECDHE handshake, in preference order.
    https://golang.org/pkg/crypto/tls/#CurveID | _string array_ | false | +| `key_file` | KeyFile defines path to the pre-mounted file with certificate key
    mutually exclusive with KeySecretRef | _string_ | false | +| `key_secret_ref` | Key defines reference for secret with certificate key content under given key
    mutually exclusive with KeyFile | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `max_version` | MaxVersion maximum TLS version that is acceptable. | _string_ | false | +| `min_version` | MinVersion minimum TLS version that is acceptable. | _string_ | false | +| `prefer_server_cipher_suites` | PreferServerCipherSuites controls whether the server selects the
    client's most preferred ciphersuite | _boolean_ | false | #### TargetEndpoint @@ -2075,7 +2075,7 @@ _Appears in:_ | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | | `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | @@ -2209,10 +2209,10 @@ _Appears in:_ | `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for VMAgent in StatefulMode | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | | `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | -| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | -| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | false | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `enforcedNamespaceLabel` | EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert
    and metric that is user created. The label value will always be the namespace of the object that is
    being created. | _string_ | false | @@ -2291,7 +2291,7 @@ _Appears in:_ | `updateStrategy` | UpdateStrategy - overrides default update strategy.
    works only for deployments, statefulset always use OnDelete. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | false | | `vmAgentExternalLabelName` | VMAgentExternalLabelName Name of vmAgent external label used to denote vmAgent instance
    name. Defaults to the value of `prometheus`. External label will
    _not_ be added when value is set to empty string (`""`). | _string_ | false | | `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | | `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -2388,11 +2388,11 @@ _Appears in:_ | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | | `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | -| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | -| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | false | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `datasource` | Datasource Victoria Metrics or VMSelect url. Required parameter. e.g. http://127.0.0.1:8428 | _[VMAlertDatasourceSpec](#vmalertdatasourcespec)_ | true | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `enforcedNamespaceLabel` | EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert
    and metric that is user created. The label value will always be the namespace of the object that is
    being created. | _string_ | false | @@ -2443,7 +2443,7 @@ _Appears in:_ | `updateStrategy` | UpdateStrategy - overrides default update strategy. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | false | | `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | | `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | @@ -2531,21 +2531,21 @@ _Appears in:_ | `configNamespaceSelector` | ConfigNamespaceSelector defines namespace selector for VMAlertmanagerConfig.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAlertmanager namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `configRawYaml` | ConfigRawYaml - raw configuration for alertmanager,
    it helps it to start without secret.
    priority -> hardcoded ConfigRaw -> ConfigRaw, provided by user -> ConfigSecret. | _string_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | -| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | -| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | false | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `configSecret` | ConfigSecret is the name of a Kubernetes Secret in the same namespace as the
    VMAlertmanager object, which contains configuration for this VMAlertmanager,
    configuration must be inside secret key: alertmanager.yaml.
    It must be created by user.
    instance. Defaults to 'vmalertmanager-'
    The secret is mounted into /etc/alertmanager/config. | _string_ | false | | `configSelector` | ConfigSelector defines selector for VMAlertmanagerConfig, result config will be merged with with Raw or Secret config.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAlertmanager namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `disableNamespaceMatcher` | DisableNamespaceMatcher disables top route namespace label matcher for VMAlertmanagerConfig
    It may be useful if alert doesn't have namespace label for some reason | _boolean_ | false | | `disableRouteContinueEnforce` | DisableRouteContinueEnforce cancel the behavior for VMAlertmanagerConfig that always enforce first-level route continue to true | _boolean_ | false | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `enforcedTopRouteMatchers` | EnforcedTopRouteMatchers defines label matchers to be added for the top route
    of VMAlertmanagerConfig
    It allows to make some set of labels required for alerts.
    https://prometheus.io/docs/alerting/latest/configuration/#matcher | _string array_ | true | | `externalURL` | ExternalURL the VMAlertmanager instances will be available under. This is
    necessary to generate correct URLs. This is necessary if VMAlertmanager is not
    served from root of a DNS name. | _string_ | false | | `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | | `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | -| `gossipConfig` | GossipConfig defines gossip TLS configuration for Alertmanager cluster | _[AlertmanagerGossipConfig](#alertmanagergossipconfig)_ | true | +| `gossipConfig` | GossipConfig defines gossip TLS configuration for Alertmanager cluster | _[AlertmanagerGossipConfig](#alertmanagergossipconfig)_ | false | | `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | | `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | | `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | @@ -2585,10 +2585,10 @@ _Appears in:_ | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | false | | `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | | `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | -| `webConfig` | WebConfig defines configuration for webserver
    https://github.com/prometheus/alertmanager/blob/main/docs/https.md | _[AlertmanagerWebConfig](#alertmanagerwebconfig)_ | true | +| `webConfig` | WebConfig defines configuration for webserver
    https://github.com/prometheus/alertmanager/blob/main/docs/https.md | _[AlertmanagerWebConfig](#alertmanagerwebconfig)_ | false | @@ -2627,12 +2627,12 @@ _Appears in:_ | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | | `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `configReloaderExtraArgs` | ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container
    for example resyncInterval: "30s" | _object (keys:string, values:string)_ | false | -| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | true | -| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | true | +| `configReloaderImageTag` | ConfigReloaderImageTag defines image:tag for config-reloader container | _string_ | false | +| `configReloaderResources` | ConfigReloaderResources config-reloader container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | | `configSecret` | ConfigSecret is the name of a Kubernetes Secret in the same namespace as the
    VMAuth object, which contains auth configuration for vmauth,
    configuration must be inside secret key: config.yaml.
    It must be created and managed manually.
    If it's defined, configuration for vmauth becomes unmanaged and operator'll not create any related secrets/config-reloaders | _string_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | | `default_url` | DefaultURLs backend url for non-matching paths filter
    usually used for default backend with error message | _string array_ | true | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `discover_backend_ips` | DiscoverBackendIPs instructs discovering URLPrefix backend IPs via DNS. | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | @@ -2681,7 +2681,7 @@ _Appears in:_ | `unauthorizedAccessConfig` | UnauthorizedAccessConfig configures access for un authorized users | _[UnauthorizedAccessConfigURLMap](#unauthorizedaccessconfigurlmap) array_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | -| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | true | +| `useVMConfigReloader` | UseVMConfigReloader replaces prometheus-like config-reloader
    with vm one. It uses secrets watch instead of file watch
    which greatly increases speed of config updates | _boolean_ | false | | `userNamespaceSelector` | UserNamespaceSelector Namespaces to be selected for VMAuth discovery.
    Works in combination with Selector.
    NamespaceSelector nil - only objects at VMAuth namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `userSelector` | UserSelector defines VMUser to be selected for config file generation.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAuth namespace.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | @@ -3255,7 +3255,7 @@ _Appears in:_ | `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | | `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | | `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | From e75ae1b2740d1692f06907ec9aa38e1972e439b6 Mon Sep 17 00:00:00 2001 From: Andrii Chubatiuk Date: Wed, 25 Sep 2024 19:33:26 +0300 Subject: [PATCH 096/128] deployment: restructure victorialogs examples (#6971) ### Describe Your Changes - Use common compose.yaml file for all victorialogs setups to set version in a single place and override it on demand for each agent and protocol - Replaced multiple victorialogs instances in HA setup with single setup with `deploy.replica` parameter set - Added fluentd setup ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- deployment/docker/victorialogs/compose-ha.yml | 4 + .../{telegraf-docker => }/compose.yml | 55 +++++---- .../victorialogs/filebeat-syslog/README.md | 45 -------- .../victorialogs/filebeat-syslog/compose.yml | 23 ---- .../docker/victorialogs/filebeat/README.md | 36 ++---- .../docker/victorialogs/filebeat/compose.yml | 50 +-------- .../filebeat/elasticsearch/compose.yml | 3 + .../filebeat/{ => elasticsearch}/filebeat.yml | 0 .../docker/victorialogs/filebeat/scrape.yml | 16 --- .../victorialogs/filebeat/syslog/compose.yml | 3 + .../syslog}/filebeat.yml | 0 .../fluentbit-ha-single-node/README.md | 88 --------------- .../fluentbit-ha-single-node/auth.yml | 6 - .../fluentbit-ha-single-node/compose.yml | 38 ------- .../docker/victorialogs/fluentbit/README.md | 46 ++------ .../docker/victorialogs/fluentbit/compose.yml | 18 +-- .../fluentbit/jsonline-ha/compose.yml | 5 + .../jsonline-ha}/fluent-bit.conf | 36 +++--- .../fluentbit/jsonline/compose.yml | 3 + .../fluentbit/jsonline/fluent-bit.conf | 30 +++++ .../victorialogs/fluentbit/loki/compose.yml | 3 + .../fluentbit/{ => loki}/fluent-bit.conf | 25 ----- .../docker/victorialogs/fluentd/Dockerfile | 8 ++ .../docker/victorialogs/fluentd/README.md | 35 ++++++ .../docker/victorialogs/fluentd/compose.yml | 11 ++ .../fluentd/elasticsearch/compose.yml | 3 + .../fluentd/elasticsearch/fluent.conf | 13 +++ .../victorialogs/fluentd/jsonline/compose.yml | 3 + .../victorialogs/fluentd/jsonline/fluent.conf | 12 ++ .../victorialogs/fluentd/loki/compose.yml | 3 + .../victorialogs/fluentd/loki/fluent.conf | 17 +++ .../logstash-ha-single-node/README.md | 71 ------------ .../logstash-ha-single-node/auth.yml | 6 - .../logstash-ha-single-node/compose.yml | 41 ------- .../logstash-ha-single-node/logstash.yml | 2 - .../docker/victorialogs/logstash/Dockerfile | 2 +- .../docker/victorialogs/logstash/README.md | 38 ++----- .../docker/victorialogs/logstash/compose.yml | 19 +--- .../logstash/elasticsearch/compose.yml | 3 + .../{ => elasticsearch}/pipeline.conf | 8 -- .../logstash/jsonline-ha/compose.yml | 5 + .../jsonline-ha}/pipeline.conf | 4 +- .../logstash/jsonline/compose.yml | 3 + .../logstash/jsonline/pipeline.conf | 13 +++ .../victorialogs/logstash/loki/compose.yml | 3 + .../victorialogs/logstash/loki/pipeline.conf | 11 ++ .../{elasticsearch => }/README.md | 17 ++- .../opentelemetry-collector/compose.yml | 15 +++ .../elasticsearch-ha/compose.yml | 5 + .../elasticsearch-ha/config.yaml | 15 +++ .../elasticsearch/compose.yml | 51 +-------- .../elasticsearch/config.yaml | 2 +- .../elasticsearch/scrape.yml | 11 -- .../opentelemetry-collector/loki/README.md | 27 ----- .../opentelemetry-collector/loki/compose.yml | 51 +-------- .../opentelemetry-collector/loki/config.yaml | 2 +- .../opentelemetry-collector/loki/scrape.yml | 11 -- .../opentelemetry-collector/otlp/README.md | 27 ----- .../opentelemetry-collector/otlp/compose.yml | 51 +-------- .../opentelemetry-collector/otlp/config.yaml | 2 +- .../opentelemetry-collector/otlp/scrape.yml | 11 -- .../opentelemetry-collector/syslog/README.md | 27 ----- .../syslog/compose.yml | 52 +-------- .../opentelemetry-collector/syslog/scrape.yml | 11 -- .../docker/victorialogs/promtail/compose.yml | 18 +-- .../victorialogs/promtail/loki/compose.yml | 3 + .../promtail/{ => loki}/config.yml | 2 +- .../victorialogs/telegraf-docker/scrape.yml | 11 -- .../{telegraf-docker => telegraf}/README.md | 17 ++- .../docker/victorialogs/telegraf/compose.yml | 20 ++++ .../telegraf/elasticsearch/compose.yml | 3 + .../elasticsearch}/telegraf.conf | 17 --- .../telegraf/jsonline/compose.yml | 3 + .../telegraf/jsonline/telegraf.conf | 43 ++++++++ .../victorialogs/telegraf/loki/compose.yml | 3 + .../victorialogs/telegraf/loki/telegraf.conf | 44 ++++++++ .../victorialogs/telegraf/syslog/compose.yml | 3 + .../telegraf/syslog/telegraf.conf | 41 +++++++ .../vector-ha-single-node/README.md | 104 ------------------ .../vector-ha-single-node/auth.yml | 6 - .../vector-ha-single-node/compose.yml | 48 -------- .../vector-ha-single-node/vector.yaml | 58 ---------- .../docker/victorialogs/vector/README.md | 51 +++------ .../docker/victorialogs/vector/compose.yml | 42 +------ .../vector/elasticsearch/compose.yaml | 3 + .../vector/elasticsearch/vector.yaml | 43 ++++++++ .../vector/jsonline-ha/compose.yml | 5 + .../vector/{ => jsonline-ha}/vector.yaml | 42 +++---- .../victorialogs/vector/jsonline/compose.yml | 3 + .../victorialogs/vector/jsonline/vector.yaml | 43 ++++++++ .../victorialogs/vector/loki/compose.yml | 3 + .../victorialogs/vector/loki/vector.yaml | 38 +++++++ .../docker/victorialogs/vector/scrape.yml | 11 -- docs/VictoriaLogs/data-ingestion/Telegraf.md | 2 +- docs/VictoriaLogs/data-ingestion/Vector.md | 2 +- 95 files changed, 705 insertions(+), 1282 deletions(-) create mode 100644 deployment/docker/victorialogs/compose-ha.yml rename deployment/docker/victorialogs/{telegraf-docker => }/compose.yml (51%) delete mode 100644 deployment/docker/victorialogs/filebeat-syslog/README.md delete mode 100644 deployment/docker/victorialogs/filebeat-syslog/compose.yml create mode 100644 deployment/docker/victorialogs/filebeat/elasticsearch/compose.yml rename deployment/docker/victorialogs/filebeat/{ => elasticsearch}/filebeat.yml (100%) delete mode 100644 deployment/docker/victorialogs/filebeat/scrape.yml create mode 100644 deployment/docker/victorialogs/filebeat/syslog/compose.yml rename deployment/docker/victorialogs/{filebeat-syslog => filebeat/syslog}/filebeat.yml (100%) delete mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/README.md delete mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml delete mode 100644 deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml create mode 100644 deployment/docker/victorialogs/fluentbit/jsonline-ha/compose.yml rename deployment/docker/victorialogs/{fluentbit-ha-single-node => fluentbit/jsonline-ha}/fluent-bit.conf (77%) create mode 100644 deployment/docker/victorialogs/fluentbit/jsonline/compose.yml create mode 100644 deployment/docker/victorialogs/fluentbit/jsonline/fluent-bit.conf create mode 100644 deployment/docker/victorialogs/fluentbit/loki/compose.yml rename deployment/docker/victorialogs/fluentbit/{ => loki}/fluent-bit.conf (54%) create mode 100644 deployment/docker/victorialogs/fluentd/Dockerfile create mode 100644 deployment/docker/victorialogs/fluentd/README.md create mode 100644 deployment/docker/victorialogs/fluentd/compose.yml create mode 100644 deployment/docker/victorialogs/fluentd/elasticsearch/compose.yml create mode 100644 deployment/docker/victorialogs/fluentd/elasticsearch/fluent.conf create mode 100644 deployment/docker/victorialogs/fluentd/jsonline/compose.yml create mode 100644 deployment/docker/victorialogs/fluentd/jsonline/fluent.conf create mode 100644 deployment/docker/victorialogs/fluentd/loki/compose.yml create mode 100644 deployment/docker/victorialogs/fluentd/loki/fluent.conf delete mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/README.md delete mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/auth.yml delete mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/compose.yml delete mode 100644 deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml create mode 100644 deployment/docker/victorialogs/logstash/elasticsearch/compose.yml rename deployment/docker/victorialogs/logstash/{ => elasticsearch}/pipeline.conf (51%) create mode 100644 deployment/docker/victorialogs/logstash/jsonline-ha/compose.yml rename deployment/docker/victorialogs/{logstash-ha-single-node => logstash/jsonline-ha}/pipeline.conf (80%) create mode 100644 deployment/docker/victorialogs/logstash/jsonline/compose.yml create mode 100644 deployment/docker/victorialogs/logstash/jsonline/pipeline.conf create mode 100644 deployment/docker/victorialogs/logstash/loki/compose.yml create mode 100644 deployment/docker/victorialogs/logstash/loki/pipeline.conf rename deployment/docker/victorialogs/opentelemetry-collector/{elasticsearch => }/README.md (66%) create mode 100644 deployment/docker/victorialogs/opentelemetry-collector/compose.yml create mode 100644 deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/compose.yml create mode 100644 deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/config.yaml delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/scrape.yml delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/loki/README.md delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/loki/scrape.yml delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/otlp/README.md delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/otlp/scrape.yml delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/syslog/README.md delete mode 100644 deployment/docker/victorialogs/opentelemetry-collector/syslog/scrape.yml create mode 100644 deployment/docker/victorialogs/promtail/loki/compose.yml rename deployment/docker/victorialogs/promtail/{ => loki}/config.yml (90%) delete mode 100644 deployment/docker/victorialogs/telegraf-docker/scrape.yml rename deployment/docker/victorialogs/{telegraf-docker => telegraf}/README.md (56%) create mode 100644 deployment/docker/victorialogs/telegraf/compose.yml create mode 100644 deployment/docker/victorialogs/telegraf/elasticsearch/compose.yml rename deployment/docker/victorialogs/{telegraf-docker => telegraf/elasticsearch}/telegraf.conf (70%) create mode 100644 deployment/docker/victorialogs/telegraf/jsonline/compose.yml create mode 100644 deployment/docker/victorialogs/telegraf/jsonline/telegraf.conf create mode 100644 deployment/docker/victorialogs/telegraf/loki/compose.yml create mode 100644 deployment/docker/victorialogs/telegraf/loki/telegraf.conf create mode 100644 deployment/docker/victorialogs/telegraf/syslog/compose.yml create mode 100644 deployment/docker/victorialogs/telegraf/syslog/telegraf.conf delete mode 100644 deployment/docker/victorialogs/vector-ha-single-node/README.md delete mode 100644 deployment/docker/victorialogs/vector-ha-single-node/auth.yml delete mode 100644 deployment/docker/victorialogs/vector-ha-single-node/compose.yml delete mode 100644 deployment/docker/victorialogs/vector-ha-single-node/vector.yaml create mode 100644 deployment/docker/victorialogs/vector/elasticsearch/compose.yaml create mode 100644 deployment/docker/victorialogs/vector/elasticsearch/vector.yaml create mode 100644 deployment/docker/victorialogs/vector/jsonline-ha/compose.yml rename deployment/docker/victorialogs/vector/{ => jsonline-ha}/vector.yaml (66%) create mode 100644 deployment/docker/victorialogs/vector/jsonline/compose.yml create mode 100644 deployment/docker/victorialogs/vector/jsonline/vector.yaml create mode 100644 deployment/docker/victorialogs/vector/loki/compose.yml create mode 100644 deployment/docker/victorialogs/vector/loki/vector.yaml delete mode 100644 deployment/docker/victorialogs/vector/scrape.yml diff --git a/deployment/docker/victorialogs/compose-ha.yml b/deployment/docker/victorialogs/compose-ha.yml new file mode 100644 index 0000000000..6de4684545 --- /dev/null +++ b/deployment/docker/victorialogs/compose-ha.yml @@ -0,0 +1,4 @@ +services: + victorialogs-2: + deploy: + replicas: 1 diff --git a/deployment/docker/victorialogs/telegraf-docker/compose.yml b/deployment/docker/victorialogs/compose.yml similarity index 51% rename from deployment/docker/victorialogs/telegraf-docker/compose.yml rename to deployment/docker/victorialogs/compose.yml index 953d4fa5d9..f9ef9ed658 100644 --- a/deployment/docker/victorialogs/telegraf-docker/compose.yml +++ b/deployment/docker/victorialogs/compose.yml @@ -1,49 +1,47 @@ services: - telegraf: - image: bitnami/telegraf:1.31.0 - restart: on-failure - volumes: - - type: bind - source: /var/run/docker.sock - target: /var/run/docker.sock - - type: bind - source: /var/lib/docker - target: /var/lib/docker - - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro - command: --config /etc/telegraf/telegraf.conf - depends_on: - victorialogs: - condition: service_healthy - victoriametrics: - condition: service_healthy - - victorialogs: + # meta service will be ignored by compose + .victorialogs: image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl:/vlogs - ports: - - '9428:9428' command: - -storageDataPath=/vlogs - -loggerFormat=json - -syslog.listenAddr.tcp=0.0.0.0:8094 + deploy: + replicas: 0 healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9428/health"] interval: 1s timeout: 1s retries: 10 + victorialogs: + extends: .victorialogs + ports: + - '9428:9428' + volumes: + - victorialogs:/vlogs + deploy: + replicas: 1 + + # second replica is needed for HA setup and its replica count is set to 1 in compose-ha.yaml file + victorialogs-2: + extends: .victorialogs + ports: + - '9429:9428' + volumes: + - victorialogs-2:/vlogs + deploy: + replicas: 0 + victoriametrics: image: victoriametrics/victoria-metrics:latest ports: - '8428:8428' command: - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - -loggerFormat=json volumes: - - victorialogs-vector-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml + - victoriametrics:/vmsingle healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/health"] interval: 1s @@ -51,5 +49,6 @@ services: retries: 10 volumes: - victorialogs-vector-docker-vl: - victorialogs-vector-docker-vm: + victorialogs: + victorialogs-2: + victoriametrics: diff --git a/deployment/docker/victorialogs/filebeat-syslog/README.md b/deployment/docker/victorialogs/filebeat-syslog/README.md deleted file mode 100644 index 845b363ca2..0000000000 --- a/deployment/docker/victorialogs/filebeat-syslog/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Docker compose Filebeat integration with VictoriaLogs for syslog - -The folder contains the example of integration of [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) with Victorialogs - -To spin-up environment run the following command: -``` -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: -``` -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* filebeat - fileabeat is configured to accept `syslog` logs in `rfc3164` format on `5140` port, you can find configuration in the `filebeat.yml`. It writes data in VictoriaLogs -* VictoriaLogs - the log database, it accepts the data from `filebeat` by elastic protocol - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -the example of filebeat configuration(`filebeat.yml`) - -```yaml -filebeat.inputs: - - type: syslog - format: rfc3164 - protocol.tcp: - host: "0.0.0.0:5140" - -output.elasticsearch: - hosts: [ "http://victorialogs:9428/insert/elasticsearch/" ] - worker: 5 - bulk_max_size: 1000 - parameters: - _msg_field: "message" - _time_field: "@timestamp" - _stream_fields: "host.name,process.program,process.pid,container.name" -``` - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/filebeat-syslog/compose.yml b/deployment/docker/victorialogs/filebeat-syslog/compose.yml deleted file mode 100644 index 94687c3070..0000000000 --- a/deployment/docker/victorialogs/filebeat-syslog/compose.yml +++ /dev/null @@ -1,23 +0,0 @@ -services: - filebeat-vlogs: - image: docker.elastic.co/beats/filebeat:8.8.1 - user: root - command: - - "--strict.perms=false" - volumes: - - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro - depends_on: [victorialogs] - ports: - - "5140:5140" - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-filebeat-syslog-vl:/vlogs - ports: - - "9428:9428" - command: - - -storageDataPath=/vlogs - -volumes: - victorialogs-filebeat-syslog-vl: diff --git a/deployment/docker/victorialogs/filebeat/README.md b/deployment/docker/victorialogs/filebeat/README.md index 200da23e98..40bb451c09 100644 --- a/deployment/docker/victorialogs/filebeat/README.md +++ b/deployment/docker/victorialogs/filebeat/README.md @@ -1,8 +1,11 @@ -# Docker compose Filebeat integration with VictoriaLogs for docker +# Docker compose Filebeat integration with VictoriaLogs using listed below protocols: + +* [syslog](./syslog) +* [elasticsearch](./elasticsearch) The folder contains the example of integration of [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) with Victorialogs -To spin-up environment run the following command: +To spin-up environment `cd` to any of listed above directories run the following command: ``` docker compose up -d ``` @@ -16,39 +19,16 @@ docker compose rm -f The docker compose file contains the following components: * filebeat - fileabeat is configured to collect logs from the `docker`, you can find configuration in the `filebeat.yml`. It writes data in VictoriaLogs -* filebeat-exporter - it export metrics about the filebeat * VictoriaLogs - the log database, it accepts the data from `filebeat` by elastic protocol * VictoriaMetrics - collects metrics from `filebeat` via `filebeat-exporter`, `VictoriaLogs` and `VictoriaMetrics` -* grafana - it comes with two predefined dashboards for `VictoriaLogs` and `VictoriaMetrics` Querying the data * [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) -the example of filebeat configuration(`filebeat.yml`) - -```yaml -filebeat.autodiscover: - providers: - - type: docker - hints.enabled: true - -processors: - - add_docker_metadata: ~ - -output.elasticsearch: - hosts: [ "http://victorialogs:9428/insert/elasticsearch/" ] - worker: 5 - parameters: - _msg_field: "message" - _time_field: "@timestamp" - _stream_fields: "container.name" - -http: - enabled: true - host: 0.0.0.0 - port: 5066 -``` +Filebeat configuration example can be found below: +- [syslog](./syslog/filebeat.yml) +- [elasticsearch](./elasticsearch/filebeat.yml) Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/filebeat/compose.yml b/deployment/docker/victorialogs/filebeat/compose.yml index 0dbd5a69c3..308ff363b6 100644 --- a/deployment/docker/victorialogs/filebeat/compose.yml +++ b/deployment/docker/victorialogs/filebeat/compose.yml @@ -1,6 +1,8 @@ +include: + - ../compose.yml services: filebeat-victorialogs: - image: docker.elastic.co/beats/filebeat:8.8.1 + image: docker.elastic.co/beats/filebeat:8.15.0 restart: on-failure volumes: - type: bind @@ -9,50 +11,8 @@ services: - type: bind source: /var/lib/docker/containers/ target: /var/lib/docker/containers/ - - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro + - ${PWD}/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro user: root command: - "--strict.perms=false" - depends_on: [ victorialogs ] - beat-exporter-victorialogs: - image: trustpilot/beat-exporter:0.4.0 - command: - - -beat.uri=http://filebeat-victorialogs:5066 - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-filebeat-docker-vl:/vlogs - ports: - - '9428:9428' - command: - - -storageDataPath=/vlogs - - -loggerFormat=json - grafana: - container_name: grafana - image: grafana/grafana:9.2.7 - depends_on: - - "victoriametrics" - ports: - - 3000:3000 - volumes: - - victorialogs-filebeat-docker-grafana:/var/lib/grafana - - ./../../provisioning/:/etc/grafana/provisioning/ - - ./../../../../dashboards/victoriametrics.json:/var/lib/grafana/dashboards/vm.json - - ./../../../../dashboards/victorialogs.json:/var/lib/grafana/dashboards/vl.json - victoriametrics: - image: victoriametrics/victoria-metrics:latest - ports: - - '8428:8428' - command: - - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - - -loggerFormat=json - volumes: - - victorialogs-filebeat-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml - -volumes: - victorialogs-filebeat-docker-vl: - victorialogs-filebeat-docker-vm: - victorialogs-filebeat-docker-grafana: + depends_on: [victorialogs] diff --git a/deployment/docker/victorialogs/filebeat/elasticsearch/compose.yml b/deployment/docker/victorialogs/filebeat/elasticsearch/compose.yml new file mode 100644 index 0000000000..f15e3b2f51 --- /dev/null +++ b/deployment/docker/victorialogs/filebeat/elasticsearch/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: filebeat-elasticsearch diff --git a/deployment/docker/victorialogs/filebeat/filebeat.yml b/deployment/docker/victorialogs/filebeat/elasticsearch/filebeat.yml similarity index 100% rename from deployment/docker/victorialogs/filebeat/filebeat.yml rename to deployment/docker/victorialogs/filebeat/elasticsearch/filebeat.yml diff --git a/deployment/docker/victorialogs/filebeat/scrape.yml b/deployment/docker/victorialogs/filebeat/scrape.yml deleted file mode 100644 index 5bf5f9ddff..0000000000 --- a/deployment/docker/victorialogs/filebeat/scrape.yml +++ /dev/null @@ -1,16 +0,0 @@ -scrape_configs: - - job_name: "filebeat" - scrape_interval: 30s - static_configs: - - targets: - - beat-exporter-victorialogs:9479 - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 diff --git a/deployment/docker/victorialogs/filebeat/syslog/compose.yml b/deployment/docker/victorialogs/filebeat/syslog/compose.yml new file mode 100644 index 0000000000..eb908fd0c7 --- /dev/null +++ b/deployment/docker/victorialogs/filebeat/syslog/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: filebeat-syslog diff --git a/deployment/docker/victorialogs/filebeat-syslog/filebeat.yml b/deployment/docker/victorialogs/filebeat/syslog/filebeat.yml similarity index 100% rename from deployment/docker/victorialogs/filebeat-syslog/filebeat.yml rename to deployment/docker/victorialogs/filebeat/syslog/filebeat.yml diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md b/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md deleted file mode 100644 index f845a9d6b1..0000000000 --- a/deployment/docker/victorialogs/fluentbit-ha-single-node/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Docker compose Fluentbit integration with VictoriaLogs for docker. High-Availability example - -The folder contains the example of integration of [fluentbit](https://docs.fluentbit.io/manual) with VictoriaLogs Single-Nodes(s) and [vmauth](https://docs.victoriametrics.com/vmauth/) for achieving High Availability. - -Check [this documentation](https://docs.victoriametrics.com/victorialogs/#high-availability) with a description of the architecture and components. - -To spin-up environment run the following command: - -```shell -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: - -```shell -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* fluentbit - fluentbit is configured to collect logs from the `docker`, you can find configuration in the `fluent-bit.conf`. It writes data in VictoriaLogs -* VictoriaLogs - the two instances of log database, they accept the data from `fluentbit` by json line protocol -* vmauth - load balancer for proxying requests to one of VictoriaLogs - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:8427/select/vmui/` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - - -the example of fluentbit configuration(`fluent-bit.conf`) - -```text -[INPUT] - name tail - path /var/lib/docker/containers/**/*.log - path_key path - multiline.parser docker, cri - Parser docker - Docker_Mode On - -[INPUT] - Name syslog - Listen 0.0.0.0 - Port 5140 - Parser syslog-rfc3164 - Mode tcp - -[SERVICE] - Flush 1 - Parsers_File parsers.conf - -[OUTPUT] - Name http - Match * - host victorialogs-2 - port 9428 - compress gzip - uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date - format json_lines - json_date_format iso8601 - header AccountID 0 - header ProjectID 0 - -[OUTPUT] - Name http - Match * - host victorialogs-1 - port 9428 - compress gzip - uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date - format json_lines - json_date_format iso8601 - header AccountID 0 - header ProjectID 0 -``` - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. - -The example of vmauth configuration (`auth.yml`) - -```yaml -unauthorized_user: - url_prefix: - - http://victorialogs-1:9428 - - http://victorialogs-2:9428 -``` diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml b/deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml deleted file mode 100644 index eeafbb852b..0000000000 --- a/deployment/docker/victorialogs/fluentbit-ha-single-node/auth.yml +++ /dev/null @@ -1,6 +0,0 @@ -# balance load among victorialogs instances -# see https://docs.victoriametrics.com/vmauth/#load-balancing -unauthorized_user: - url_prefix: - - http://victorialogs-1:9428 - - http://victorialogs-2:9428 diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml b/deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml deleted file mode 100644 index 737be03470..0000000000 --- a/deployment/docker/victorialogs/fluentbit-ha-single-node/compose.yml +++ /dev/null @@ -1,38 +0,0 @@ -services: - fluentbit: - image: cr.fluentbit.io/fluent/fluent-bit:3.0.7 - volumes: - - /var/lib/docker/containers:/var/lib/docker/containers:ro - - ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf - depends_on: [victorialogs-1,victorialogs-2] - ports: - - "5140:5140" - - victorialogs-1: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-fluentbit-vl-ha-single-1:/vlogs - command: - - -storageDataPath=/vlogs - victorialogs-2: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-fluentbit-vl-ha-single-2:/vlogs - command: - - -storageDataPath=/vlogs - vmauth: - container_name: vmauth - image: victoriametrics/vmauth:v1.103.0 - depends_on: - - "victorialogs-1" - - "victorialogs-2" - volumes: - - ./auth.yml:/etc/auth.yml - command: - - '--auth.config=/etc/auth.yml' - ports: - - 8427:8427 - restart: always -volumes: - victorialogs-fluentbit-vl-ha-single-1: - victorialogs-fluentbit-vl-ha-single-2: diff --git a/deployment/docker/victorialogs/fluentbit/README.md b/deployment/docker/victorialogs/fluentbit/README.md index 1fce9d455a..5a8f51709d 100644 --- a/deployment/docker/victorialogs/fluentbit/README.md +++ b/deployment/docker/victorialogs/fluentbit/README.md @@ -1,8 +1,12 @@ -# Docker compose Fluentbit integration with VictoriaLogs for docker +# Docker compose Fluentbit integration with VictoriaLogs using given below protocols: + +* [loki](./loki) +* [jsonline single node](./jsonline) +* [jsonline HA setup](./jsonline-ha) The folder contains the example of integration of [fluentbit](https://docs.fluentbit.io/manual) with Victorialogs -To spin-up environment run the following command: +To spin-up environment `cd` to any of listed above directories run the following command: ``` docker compose up -d ``` @@ -23,39 +27,9 @@ Querying the data * [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -the example of fluentbit configuration(`fluent-bit.conf`) - -```shell -[INPUT] - name tail - path /var/lib/docker/containers/**/*.log - multiline.parser docker, cri - Parser docker - Docker_Mode On - -[INPUT] - Name syslog - Listen 0.0.0.0 - Port 5140 - Parser syslog-rfc3164 - Mode tcp - -[SERVICE] - Flush 1 - Parsers_File parsers.conf - -[Output] - Name http - Match * - host victorialogs - port 9428 - compress gzip - uri /insert/jsonline?_stream_fields=stream&_msg_field=log&_time_field=date - format json_lines - json_date_format iso8601 - header AccountID 0 - header ProjectID 0 -``` +FluentBit configuration example can be found below: +* [loki](./loki/fluent-bit.conf) +* [jsonline single node](./jsonline/fluent-bit.conf) +* [jsonline HA setup](./jsonline-ha/fluent-bit.conf) Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/fluentbit/compose.yml b/deployment/docker/victorialogs/fluentbit/compose.yml index ea9b4a7bdf..2f38c9f206 100644 --- a/deployment/docker/victorialogs/fluentbit/compose.yml +++ b/deployment/docker/victorialogs/fluentbit/compose.yml @@ -1,21 +1,11 @@ +include: + - ../compose.yml services: fluentbit: - image: cr.fluentbit.io/fluent/fluent-bit:3.0.7 + image: cr.fluentbit.io/fluent/fluent-bit:3.1.7 volumes: - /var/lib/docker/containers:/var/lib/docker/containers:ro - - ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf + - ${PWD}/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf depends_on: [victorialogs] ports: - "5140:5140" - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-fluentbit-vl:/vlogs - ports: - - "9428:9428" - command: - - -storageDataPath=/vlogs - -volumes: - victorialogs-fluentbit-vl: diff --git a/deployment/docker/victorialogs/fluentbit/jsonline-ha/compose.yml b/deployment/docker/victorialogs/fluentbit/jsonline-ha/compose.yml new file mode 100644 index 0000000000..ffe557c614 --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit/jsonline-ha/compose.yml @@ -0,0 +1,5 @@ +include: + - path: + - ../compose.yml + - ../../compose-ha.yml +name: fluentbit-jsonline-ha diff --git a/deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf b/deployment/docker/victorialogs/fluentbit/jsonline-ha/fluent-bit.conf similarity index 77% rename from deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf rename to deployment/docker/victorialogs/fluentbit/jsonline-ha/fluent-bit.conf index ce6423898f..fb439860c7 100644 --- a/deployment/docker/victorialogs/fluentbit-ha-single-node/fluent-bit.conf +++ b/deployment/docker/victorialogs/fluentbit/jsonline-ha/fluent-bit.conf @@ -1,10 +1,10 @@ [INPUT] - name tail - path /var/lib/docker/containers/**/*.log + name tail + path /var/lib/docker/containers/**/*.log path_key path - multiline.parser docker, cri - Parser docker - Docker_Mode On + multiline.parser docker, cri + Parser docker + Docker_Mode On [INPUT] Name syslog @@ -17,7 +17,19 @@ Flush 1 Parsers_File parsers.conf -[OUTPUT] +[Output] + Name http + Match * + host victorialogs + port 9428 + compress gzip + uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date + format json_lines + json_date_format iso8601 + header AccountID 0 + header ProjectID 0 + +[Output] Name http Match * host victorialogs-2 @@ -28,15 +40,3 @@ json_date_format iso8601 header AccountID 0 header ProjectID 0 - -[OUTPUT] - Name http - Match * - host victorialogs-1 - port 9428 - compress gzip - uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date - format json_lines - json_date_format iso8601 - header AccountID 0 - header ProjectID 0 diff --git a/deployment/docker/victorialogs/fluentbit/jsonline/compose.yml b/deployment/docker/victorialogs/fluentbit/jsonline/compose.yml new file mode 100644 index 0000000000..4edd0c18b7 --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit/jsonline/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: fluentbit-jsonline diff --git a/deployment/docker/victorialogs/fluentbit/jsonline/fluent-bit.conf b/deployment/docker/victorialogs/fluentbit/jsonline/fluent-bit.conf new file mode 100644 index 0000000000..42d349338b --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit/jsonline/fluent-bit.conf @@ -0,0 +1,30 @@ +[INPUT] + name tail + path /var/lib/docker/containers/**/*.log + path_key path + multiline.parser docker, cri + Parser docker + Docker_Mode On + +[INPUT] + Name syslog + Listen 0.0.0.0 + Port 5140 + Parser syslog-rfc3164 + Mode tcp + +[SERVICE] + Flush 1 + Parsers_File parsers.conf + +[Output] + Name http + Match * + host victorialogs + port 9428 + compress gzip + uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date + format json_lines + json_date_format iso8601 + header AccountID 0 + header ProjectID 0 diff --git a/deployment/docker/victorialogs/fluentbit/loki/compose.yml b/deployment/docker/victorialogs/fluentbit/loki/compose.yml new file mode 100644 index 0000000000..1627ba0435 --- /dev/null +++ b/deployment/docker/victorialogs/fluentbit/loki/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: fluentbit-loki diff --git a/deployment/docker/victorialogs/fluentbit/fluent-bit.conf b/deployment/docker/victorialogs/fluentbit/loki/fluent-bit.conf similarity index 54% rename from deployment/docker/victorialogs/fluentbit/fluent-bit.conf rename to deployment/docker/victorialogs/fluentbit/loki/fluent-bit.conf index 0c78d93646..6c7906d0db 100644 --- a/deployment/docker/victorialogs/fluentbit/fluent-bit.conf +++ b/deployment/docker/victorialogs/fluentbit/loki/fluent-bit.conf @@ -17,31 +17,6 @@ Flush 1 Parsers_File parsers.conf -[OUTPUT] - Name http - Match * - host victorialogs - port 9428 - compress gzip - uri /insert/jsonline?_stream_fields=stream,path&_msg_field=log&_time_field=date - format json_lines - json_date_format iso8601 - header AccountID 0 - header ProjectID 0 - -[OUTPUT] - Name es - Match * - host victorialogs - port 9428 - compress gzip - path /insert/elasticsearch - header AccountID 0 - header ProjectID 0 - header VL-Stream-Fields path - header VL-Msg-Field log - header VL-Time-Field @timestamp - [OUTPUT] name loki match * diff --git a/deployment/docker/victorialogs/fluentd/Dockerfile b/deployment/docker/victorialogs/fluentd/Dockerfile new file mode 100644 index 0000000000..b3bba2e0f6 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/Dockerfile @@ -0,0 +1,8 @@ +FROM fluent/fluentd:v1.17 +USER root +RUN \ + gem install \ + fluent-plugin-datadog \ + fluent-plugin-grafana-loki \ + fluent-plugin-elasticsearch +USER fluent diff --git a/deployment/docker/victorialogs/fluentd/README.md b/deployment/docker/victorialogs/fluentd/README.md new file mode 100644 index 0000000000..0d7e422982 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/README.md @@ -0,0 +1,35 @@ +# Docker compose Fluentd integration with VictoriaLogs using given below protocols: + +* [loki](./loki) +* [jsonline](./jsonline) +* [elasticsearch](./elasticsearch) + +The folder contains the example of integration of [fluentd](https://www.fluentd.org/) with Victorialogs + +To spin-up environment `cd` to any of listed above directories run the following command: +``` +docker compose up -d +``` + +To shut down the docker-compose environment run the following command: +``` +docker compose down +docker compose rm -f +``` + +The docker compose file contains the following components: + +* fluentd - fluentd is configured to collect logs from the `docker`, you can find configuration in the `fluent-bit.conf`. It writes data in VictoriaLogs +* VictoriaLogs - the log database, it accepts the data from `fluentd` by json line protocol + +Querying the data + +* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` +* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) + +Fluentd configuration example can be found below: +* [loki](./loki/fluent.conf) +* [jsonline](./jsonline/fluent.conf) +* [elasticsearch](./elasticsearch/fluent.conf) + +Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/fluentd/compose.yml b/deployment/docker/victorialogs/fluentd/compose.yml new file mode 100644 index 0000000000..6a3e33d35a --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/compose.yml @@ -0,0 +1,11 @@ +include: + - ../compose.yml +services: + fluentd: + build: . + volumes: + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - ${PWD}/fluent.conf:/fluentd/etc/fluent.conf + depends_on: [victorialogs] + ports: + - "5140:5140" diff --git a/deployment/docker/victorialogs/fluentd/elasticsearch/compose.yml b/deployment/docker/victorialogs/fluentd/elasticsearch/compose.yml new file mode 100644 index 0000000000..9c65b063e7 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/elasticsearch/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: fluentd-elasticsearch diff --git a/deployment/docker/victorialogs/fluentd/elasticsearch/fluent.conf b/deployment/docker/victorialogs/fluentd/elasticsearch/fluent.conf new file mode 100644 index 0000000000..145c4d32d3 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/elasticsearch/fluent.conf @@ -0,0 +1,13 @@ + + @type tail + format none + tag docker.testlog + path /var/lib/docker/containers/**/*.log + + + + @type elasticsearch + host victorialogs + path /insert/elasticsearch + port 9428 + diff --git a/deployment/docker/victorialogs/fluentd/jsonline/compose.yml b/deployment/docker/victorialogs/fluentd/jsonline/compose.yml new file mode 100644 index 0000000000..efe3cb8256 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/jsonline/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: fluentd-jsonline diff --git a/deployment/docker/victorialogs/fluentd/jsonline/fluent.conf b/deployment/docker/victorialogs/fluentd/jsonline/fluent.conf new file mode 100644 index 0000000000..cac841e00b --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/jsonline/fluent.conf @@ -0,0 +1,12 @@ + + @type tail + format none + tag docker.testlog + path /var/lib/docker/containers/**/*.log + + + + @type http + endpoint "http://victorialogs:9428/insert/jsonline" + headers {"VL-Msg-Field": "log", "VL-Time-Field": "time", "VL-Stream-Fields": "path"} + diff --git a/deployment/docker/victorialogs/fluentd/loki/compose.yml b/deployment/docker/victorialogs/fluentd/loki/compose.yml new file mode 100644 index 0000000000..1627ba0435 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/loki/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: fluentbit-loki diff --git a/deployment/docker/victorialogs/fluentd/loki/fluent.conf b/deployment/docker/victorialogs/fluentd/loki/fluent.conf new file mode 100644 index 0000000000..4604376737 --- /dev/null +++ b/deployment/docker/victorialogs/fluentd/loki/fluent.conf @@ -0,0 +1,17 @@ + + @type tail + format none + tag docker.testlog + path /var/lib/docker/containers/**/*.log + + + + @type loki + url "http://victorialogs:9428/insert" + + flush_interval 10s + flush_at_shutdown true + + custom_headers {"VL-Msg-Field": "log", "VL-Time-Field": "time", "VL-Stream-Fields": "path"} + buffer_chunk_limit 1m + diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/README.md b/deployment/docker/victorialogs/logstash-ha-single-node/README.md deleted file mode 100644 index 7e5805a214..0000000000 --- a/deployment/docker/victorialogs/logstash-ha-single-node/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# Docker compose Logstash integration with VictoriaLogs for docker. High-Availability example - -The folder contains the example of integration of [logstash](https://www.elastic.co/logstash) with VictoriaLogs Single-Node(s) and [vmauth](https://docs.victoriametrics.com/vmauth/) for achieving High Availability. - -Check [this documentation](https://docs.victoriametrics.com/victorialogs/#high-availability) with a description of the architecture and components. - -To spin-up environment run the following command: - -```shell -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: - -```shell -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* logstash - logstash is configured to read docker log files, you can find configuration in the `pipeline.conf`. It writes data in two instances of VictoriaLogs -* VictoriaLogs - the two instances of log database, they accept the data from `fluentbit` by json line protocol -* vmauth - load balancer for proxying requests to one of VictoriaLogs - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:8427/select/vmui/` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - - -Here is an example of logstash configuration(`pipeline.conf`): - -```text -input { - file { - path => "/var/lib/docker/containers/*/*.log" - start_position => "beginning" - type => "docker" - sincedb_path => "/dev/null" - codec => "json" - add_field => { - "path" => "%{[@metadata][path]}" - } - } -} - -output { - http { - url => "http://victorialogs-1:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" - format => "json" - http_method => "post" - } - http { - url => "http://victorialogs-2:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" - format => "json" - http_method => "post" - } -} -``` - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. - -The example of vmauth configuration (`auth.yml`) - -```yaml -unauthorized_user: - url_prefix: - - http://victorialogs-1:9428 - - http://victorialogs-2:9428 -``` \ No newline at end of file diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/auth.yml b/deployment/docker/victorialogs/logstash-ha-single-node/auth.yml deleted file mode 100644 index eeafbb852b..0000000000 --- a/deployment/docker/victorialogs/logstash-ha-single-node/auth.yml +++ /dev/null @@ -1,6 +0,0 @@ -# balance load among victorialogs instances -# see https://docs.victoriametrics.com/vmauth/#load-balancing -unauthorized_user: - url_prefix: - - http://victorialogs-1:9428 - - http://victorialogs-2:9428 diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/compose.yml b/deployment/docker/victorialogs/logstash-ha-single-node/compose.yml deleted file mode 100644 index 6b8153b716..0000000000 --- a/deployment/docker/victorialogs/logstash-ha-single-node/compose.yml +++ /dev/null @@ -1,41 +0,0 @@ -services: - logstash: - image: docker.elastic.co/logstash/logstash:8.8.1 - user: root - volumes: - - ./pipeline.conf:/usr/share/logstash/pipeline/logstash.conf:ro - - ./logstash.yml:/usr/share/logstash/config/logstash.yml:ro - - /var/lib/docker/containers:/var/lib/docker/containers:ro - depends_on: [victorialogs-1,victorialogs-2] - ports: - - "5140:5140" - - victorialogs-1: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-logstash-vl-ha-single-1:/vlogs - command: - - -storageDataPath=/vlogs - victorialogs-2: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-logstash-vl-ha-single-2:/vlogs - command: - - -storageDataPath=/vlogs - vmauth: - container_name: vmauth - image: victoriametrics/vmauth:v1.103.0 - depends_on: - - "victorialogs-1" - - "victorialogs-2" - volumes: - - ./auth.yml:/etc/auth.yml - command: - - '--auth.config=/etc/auth.yml' - ports: - - 8427:8427 - restart: always - -volumes: - victorialogs-logstash-vl-ha-single-1: - victorialogs-logstash-vl-ha-single-2: diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml b/deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml deleted file mode 100644 index c223de3763..0000000000 --- a/deployment/docker/victorialogs/logstash-ha-single-node/logstash.yml +++ /dev/null @@ -1,2 +0,0 @@ -http.host: 0.0.0.0 -xpack.monitoring.enabled: false \ No newline at end of file diff --git a/deployment/docker/victorialogs/logstash/Dockerfile b/deployment/docker/victorialogs/logstash/Dockerfile index a6e809fd16..5b92d20733 100644 --- a/deployment/docker/victorialogs/logstash/Dockerfile +++ b/deployment/docker/victorialogs/logstash/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.elastic.co/logstash/logstash:8.8.1 +FROM docker.elastic.co/logstash/logstash:8.15.0 RUN bin/logstash-plugin install \ logstash-output-opensearch \ diff --git a/deployment/docker/victorialogs/logstash/README.md b/deployment/docker/victorialogs/logstash/README.md index b1e9cb5d81..de39545fa5 100644 --- a/deployment/docker/victorialogs/logstash/README.md +++ b/deployment/docker/victorialogs/logstash/README.md @@ -1,4 +1,9 @@ -# Docker compose Logstash integration with VictoriaLogs for syslog +# Docker compose Logstash integration with VictoriaLogs for given below protocols: + +* [loki](./loki) +* [jsonline single node](./jsonline) +* [jsonline HA setup](./jsonline-ha) +* [elasticsearch](./elasticsearch) It is required to use [OpenSearch plugin](https://github.com/opensearch-project/logstash-output-opensearch) for output configuration. Plugin can be installed by using the following command: @@ -7,7 +12,7 @@ bin/logstash-plugin install logstash-output-opensearch ``` OpenSearch plugin is required because elasticsearch output plugin performs various checks for Elasticsearch version and license which are not applicable for VictoriaLogs. -To spin-up environment run the following command: +To spin-up environment `cd` to any of listed above directories run the following command: ``` docker compose up -d ``` @@ -28,29 +33,10 @@ Querying the data * [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -Here is an example of logstash configuration(`pipeline.conf`): - -``` -input { - syslog { - port => 5140 - } -} -output { - opensearch { - hosts => ["http://victorialogs:9428/insert/elasticsearch"] - custom_headers => { - "AccountID" => "0" - "ProjectID" => "0" - } - parameters => { - "_stream_fields" => "host.ip,process.name" - "_msg_field" => "message" - "_time_field" => "@timestamp" - } - } -} -``` +Logstash configuration example can be found below: +* [loki](./loki/pipeline.conf) +* [jsonline single node](./jsonline/pipeline.conf) +* [jsonline HA setup](./jsonline-ha/pipeline.conf) +* [elasticsearch](./elasticsearch/pipeline.conf) Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/logstash/compose.yml b/deployment/docker/victorialogs/logstash/compose.yml index 2523140f36..4263a392cd 100644 --- a/deployment/docker/victorialogs/logstash/compose.yml +++ b/deployment/docker/victorialogs/logstash/compose.yml @@ -1,24 +1,15 @@ +include: + - ../compose.yml services: logstash: build: context: . - dockerfile: Dockerfile + user: root restart: on-failure volumes: - - ./pipeline.conf:/usr/share/logstash/pipeline/logstash.conf:ro + - /var/lib/docker/containers:/var/lib/docker/containers + - ${PWD}/pipeline.conf:/usr/share/logstash/pipeline/logstash.conf:ro - ./logstash.yml:/usr/share/logstash/config/logstash.yml:ro depends_on: [victorialogs] ports: - "5140:5140" - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-logstash-vl:/vlogs - ports: - - "9428:9428" - command: - - -storageDataPath=/vlogs - -volumes: - victorialogs-logstash-vl: diff --git a/deployment/docker/victorialogs/logstash/elasticsearch/compose.yml b/deployment/docker/victorialogs/logstash/elasticsearch/compose.yml new file mode 100644 index 0000000000..79399ecc2c --- /dev/null +++ b/deployment/docker/victorialogs/logstash/elasticsearch/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: logstash-elasticsearch diff --git a/deployment/docker/victorialogs/logstash/pipeline.conf b/deployment/docker/victorialogs/logstash/elasticsearch/pipeline.conf similarity index 51% rename from deployment/docker/victorialogs/logstash/pipeline.conf rename to deployment/docker/victorialogs/logstash/elasticsearch/pipeline.conf index ab6cd901de..f9b3f18c4a 100644 --- a/deployment/docker/victorialogs/logstash/pipeline.conf +++ b/deployment/docker/victorialogs/logstash/elasticsearch/pipeline.conf @@ -17,12 +17,4 @@ output { "_time_field" => "@timestamp" } } - http { - url => "http://victorialogs:9428/insert/jsonline?_stream_fields=host.ip,process.name&_msg_field=message&_time_field=@timestamp" - format => "json" - http_method => "post" - } - loki { - url => "http://victorialogs:9428/insert/loki/api/v1/push?_stream_fields=host.ip,process.name&_msg_field=message&_time_field=@timestamp" - } } diff --git a/deployment/docker/victorialogs/logstash/jsonline-ha/compose.yml b/deployment/docker/victorialogs/logstash/jsonline-ha/compose.yml new file mode 100644 index 0000000000..d63fa78c08 --- /dev/null +++ b/deployment/docker/victorialogs/logstash/jsonline-ha/compose.yml @@ -0,0 +1,5 @@ +include: + - path: + - ../compose.yml + - ../../compose-ha.yml +name: logstash-jsonline-ha diff --git a/deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf b/deployment/docker/victorialogs/logstash/jsonline-ha/pipeline.conf similarity index 80% rename from deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf rename to deployment/docker/victorialogs/logstash/jsonline-ha/pipeline.conf index 7dacc1d8aa..1d731325c0 100644 --- a/deployment/docker/victorialogs/logstash-ha-single-node/pipeline.conf +++ b/deployment/docker/victorialogs/logstash/jsonline-ha/pipeline.conf @@ -13,7 +13,7 @@ input { output { http { - url => "http://victorialogs-1:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" + url => "http://victorialogs:9428/insert/jsonline?_stream_fields=host.name,stream&_msg_field=log&_time_field=time" format => "json" http_method => "post" } @@ -22,4 +22,4 @@ output { format => "json" http_method => "post" } -} \ No newline at end of file +} diff --git a/deployment/docker/victorialogs/logstash/jsonline/compose.yml b/deployment/docker/victorialogs/logstash/jsonline/compose.yml new file mode 100644 index 0000000000..11d4a05487 --- /dev/null +++ b/deployment/docker/victorialogs/logstash/jsonline/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: logstash-jsonline diff --git a/deployment/docker/victorialogs/logstash/jsonline/pipeline.conf b/deployment/docker/victorialogs/logstash/jsonline/pipeline.conf new file mode 100644 index 0000000000..b399a6fb22 --- /dev/null +++ b/deployment/docker/victorialogs/logstash/jsonline/pipeline.conf @@ -0,0 +1,13 @@ +input { + syslog { + port => 5140 + } +} + +output { + http { + url => "http://victorialogs:9428/insert/jsonline?_stream_fields=host.ip,process.name&_msg_field=message&_time_field=@timestamp" + format => "json" + http_method => "post" + } +} diff --git a/deployment/docker/victorialogs/logstash/loki/compose.yml b/deployment/docker/victorialogs/logstash/loki/compose.yml new file mode 100644 index 0000000000..9e3249883d --- /dev/null +++ b/deployment/docker/victorialogs/logstash/loki/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: logstash-loki diff --git a/deployment/docker/victorialogs/logstash/loki/pipeline.conf b/deployment/docker/victorialogs/logstash/loki/pipeline.conf new file mode 100644 index 0000000000..c5dafc41ea --- /dev/null +++ b/deployment/docker/victorialogs/logstash/loki/pipeline.conf @@ -0,0 +1,11 @@ +input { + syslog { + port => 5140 + } +} + +output { + loki { + url => "http://victorialogs:9428/insert/loki/api/v1/push?_stream_fields=host.ip,process.name&_msg_field=message&_time_field=@timestamp" + } +} diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/README.md b/deployment/docker/victorialogs/opentelemetry-collector/README.md similarity index 66% rename from deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/README.md rename to deployment/docker/victorialogs/opentelemetry-collector/README.md index 30cfc3f2c0..6dab25daf2 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/README.md +++ b/deployment/docker/victorialogs/opentelemetry-collector/README.md @@ -1,8 +1,14 @@ -# Docker compose OpenTelemetry Elasticsearch integration with VictoriaLogs for docker +# Docker compose OpenTelemetry integration with VictoriaLogs using protocols: + +* [loki](./loki) +* [otlp](./otlp) +* [syslog](./syslog) +* [elasticsearch single node](./elasticsearch) +* [elasticsearch HA mode](./elasticsearch-ha/) The folder contains the example of integration of [OpenTelemetry collector](https://opentelemetry.io/docs/collector/) with Victorialogs -To spin-up environment run the following command: +To spin-up environment `cd` to any of listed above directories run the following command: ``` docker compose up -d ``` @@ -24,4 +30,11 @@ Querying the data * [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) +OpenTelemetry collector configuration example can be found below: +* [loki](./loki/config.yaml) +* [otlp](./otlp/config.yaml) +* [syslog](./syslog/config.yaml) +* [elasticsearch single node](./elasticsearch/config.yaml) +* [elasticsearch HA mode](./elasticsearch-ha/config.yaml) + Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/opentelemetry-collector/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/compose.yml new file mode 100644 index 0000000000..794f2382bb --- /dev/null +++ b/deployment/docker/victorialogs/opentelemetry-collector/compose.yml @@ -0,0 +1,15 @@ +include: + - ../compose.yml +services: + collector: + image: docker.io/otel/opentelemetry-collector-contrib:0.108.0 + restart: on-failure + user: 0:0 + volumes: + - ${PWD}/config.yaml:/etc/otelcol-contrib/config.yaml + - /var/lib/docker/containers:/var/lib/docker/containers + depends_on: + victorialogs: + condition: service_healthy + victoriametrics: + condition: service_healthy diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/compose.yml new file mode 100644 index 0000000000..6fc7eafd61 --- /dev/null +++ b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/compose.yml @@ -0,0 +1,5 @@ +include: + - path: + - ../compose.yml + - ../../compose-ha.yml +name: collector-elasticsearch-ha diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/config.yaml b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/config.yaml new file mode 100644 index 0000000000..46b6073a0d --- /dev/null +++ b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch-ha/config.yaml @@ -0,0 +1,15 @@ +exporters: + elasticsearch: + endpoints: + - http://victorialogs:9428/insert/elasticsearch + - http://victorialogs-2:9428/insert/elasticsearch +receivers: + filelog: + include: [/var/lib/docker/containers/**/*.log] + resource: + region: us-east-1 +service: + pipelines: + logs: + receivers: [filelog] + exporters: [elasticsearch] diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml index 5cb5040a60..6d8c4be2df 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/compose.yml @@ -1,48 +1,3 @@ -services: - collector: - image: docker.io/otel/opentelemetry-collector-contrib:0.102.1 - restart: on-failure - volumes: - - $PWD/logs:/tmp/logs - - $PWD/config.yaml:/etc/otelcol-contrib/config.yaml - depends_on: - victorialogs: - condition: service_healthy - victoriametrics: - condition: service_healthy - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl:/vlogs - ports: - - '9428:9428' - command: - - -storageDataPath=/vlogs - - -loggerFormat=json - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9428/health"] - interval: 1s - timeout: 1s - retries: 10 - - victoriametrics: - image: victoriametrics/victoria-metrics:latest - ports: - - '8428:8428' - command: - - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - - -loggerFormat=json - volumes: - - victorialogs-vector-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/health"] - interval: 1s - timeout: 1s - retries: 10 - -volumes: - victorialogs-vector-docker-vl: - victorialogs-vector-docker-vm: +include: + - ../compose.yml +name: collector-elasticsearch diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/config.yaml b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/config.yaml index 84f7deea14..0725251758 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/config.yaml +++ b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/config.yaml @@ -4,7 +4,7 @@ exporters: - http://victorialogs:9428/insert/elasticsearch receivers: filelog: - include: [/tmp/logs/*.log] + include: [/var/lib/docker/containers/**/*.log] resource: region: us-east-1 service: diff --git a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/scrape.yml b/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/scrape.yml deleted file mode 100644 index 8257db8ef0..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/elasticsearch/scrape.yml +++ /dev/null @@ -1,11 +0,0 @@ -scrape_configs: - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 \ No newline at end of file diff --git a/deployment/docker/victorialogs/opentelemetry-collector/loki/README.md b/deployment/docker/victorialogs/opentelemetry-collector/loki/README.md deleted file mode 100644 index eabf498e4d..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/loki/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Docker compose OpenTelemetry Loki integration with VictoriaLogs for docker - -The folder contains the example of integration of [OpenTelemetry collector](https://opentelemetry.io/docs/collector/) with Victorialogs - -To spin-up environment run the following command: -``` -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: -``` -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* collector - vector is configured to collect logs from the `docker`, you can find configuration in the `config.yaml`. It writes data in VictoriaLogs. It pushes metrics to VictoriaMetrics. -* VictoriaLogs - the log database, it accepts the data from `collector` by Loki protocol -* VictoriaMetrics - collects metrics from `VictoriaLogs` and `VictoriaMetrics` - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml index d02b5f9ff2..865979e9b9 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/loki/compose.yml @@ -1,48 +1,3 @@ -services: - collector: - image: docker.io/otel/opentelemetry-collector-contrib:0.102.1 - restart: on-failure - volumes: - - $PWD/logs:/tmp/logs - - $PWD/config.yaml:/etc/otelcol-contrib/config.yaml - depends_on: - victorialogs: - condition: service_healthy - victoriametrics: - condition: service_healthy - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl:/loki - ports: - - '9428:9428' - command: - - -storageDataPath=/loki - - -loggerFormat=json - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9428/health"] - interval: 1s - timeout: 1s - retries: 10 - - victoriametrics: - image: victoriametrics/victoria-metrics:latest - ports: - - '8428:8428' - command: - - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - - -loggerFormat=json - volumes: - - victorialogs-vector-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/health"] - interval: 1s - timeout: 1s - retries: 10 - -volumes: - victorialogs-vector-docker-vl: - victorialogs-vector-docker-vm: +include: + - ../compose.yml +name: collector-loki diff --git a/deployment/docker/victorialogs/opentelemetry-collector/loki/config.yaml b/deployment/docker/victorialogs/opentelemetry-collector/loki/config.yaml index 63df2e614d..1891bd531a 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/loki/config.yaml +++ b/deployment/docker/victorialogs/opentelemetry-collector/loki/config.yaml @@ -3,7 +3,7 @@ exporters: endpoint: http://victorialogs:9428/insert/loki/api/v1/push receivers: filelog: - include: [/tmp/logs/*.log] + include: [/var/lib/docker/containers/**/*.log] resource: region: us-east-1 service: diff --git a/deployment/docker/victorialogs/opentelemetry-collector/loki/scrape.yml b/deployment/docker/victorialogs/opentelemetry-collector/loki/scrape.yml deleted file mode 100644 index 8257db8ef0..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/loki/scrape.yml +++ /dev/null @@ -1,11 +0,0 @@ -scrape_configs: - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 \ No newline at end of file diff --git a/deployment/docker/victorialogs/opentelemetry-collector/otlp/README.md b/deployment/docker/victorialogs/opentelemetry-collector/otlp/README.md deleted file mode 100644 index fc0e993bdc..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/otlp/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Docker compose OpenTelemetry OTLP integration with VictoriaLogs for docker - -The folder contains the example of integration of [OpenTelemetry collector](https://opentelemetry.io/docs/collector/) with Victorialogs - -To spin-up environment run the following command: -``` -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: -``` -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* collector - vector is configured to collect logs from the `docker`, you can find configuration in the `config.yaml`. It writes data in VictoriaLogs. It pushes metrics to VictoriaMetrics. -* VictoriaLogs - the log database, it accepts the data from `collector` by otlp protocol -* VictoriaMetrics - collects metrics from `VictoriaLogs` and `VictoriaMetrics` - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/opentelemetry-collector/otlp/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/otlp/compose.yml index ca17988827..9dcaed9be2 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/otlp/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/otlp/compose.yml @@ -1,48 +1,3 @@ -services: - collector: - image: docker.io/otel/opentelemetry-collector-contrib:0.102.1 - restart: on-failure - volumes: - - $PWD/logs:/tmp/logs - - $PWD/config.yaml:/etc/otelcol-contrib/config.yaml - depends_on: - victorialogs: - condition: service_healthy - victoriametrics: - condition: service_healthy - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl:/otlp - ports: - - '9428:9428' - command: - - -storageDataPath=/otlp - - -loggerFormat=json - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9428/health"] - interval: 1s - timeout: 1s - retries: 10 - - victoriametrics: - image: victoriametrics/victoria-metrics:latest - ports: - - '8428:8428' - command: - - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - - -loggerFormat=json - volumes: - - victorialogs-vector-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/health"] - interval: 1s - timeout: 1s - retries: 10 - -volumes: - victorialogs-vector-docker-vl: - victorialogs-vector-docker-vm: +include: + - ../compose.yml +name: collector-otlp diff --git a/deployment/docker/victorialogs/opentelemetry-collector/otlp/config.yaml b/deployment/docker/victorialogs/opentelemetry-collector/otlp/config.yaml index 1b56a034f7..b06ac851df 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/otlp/config.yaml +++ b/deployment/docker/victorialogs/opentelemetry-collector/otlp/config.yaml @@ -5,7 +5,7 @@ exporters: verbosity: detailed receivers: filelog: - include: [/tmp/logs/*.log] + include: [/var/lib/docker/containers/**/*.log] resource: region: us-east-1 service: diff --git a/deployment/docker/victorialogs/opentelemetry-collector/otlp/scrape.yml b/deployment/docker/victorialogs/opentelemetry-collector/otlp/scrape.yml deleted file mode 100644 index 8257db8ef0..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/otlp/scrape.yml +++ /dev/null @@ -1,11 +0,0 @@ -scrape_configs: - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 \ No newline at end of file diff --git a/deployment/docker/victorialogs/opentelemetry-collector/syslog/README.md b/deployment/docker/victorialogs/opentelemetry-collector/syslog/README.md deleted file mode 100644 index 12a7290ae1..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/syslog/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Docker compose OpenTelemetry Syslog integration with VictoriaLogs for docker - -The folder contains the example of integration of [OpenTelemetry collector](https://opentelemetry.io/docs/collector/) with Victorialogs - -To spin-up environment run the following command: -``` -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: -``` -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* collector - vector is configured to collect logs from the `docker`, you can find configuration in the `config.yaml`. It writes data in VictoriaLogs. It pushes metrics to VictoriaMetrics. -* VictoriaLogs - the log database, it accepts the data from `collector` by syslog protocol -* VictoriaMetrics - collects metrics from `VictoriaLogs` and `VictoriaMetrics` - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml b/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml index 4ac680a477..b87ea641e8 100644 --- a/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml +++ b/deployment/docker/victorialogs/opentelemetry-collector/syslog/compose.yml @@ -1,49 +1,3 @@ -services: - collector: - image: docker.io/otel/opentelemetry-collector-contrib:0.107.0 - restart: on-failure - volumes: - - $PWD/logs:/tmp/logs - - $PWD/config.yaml:/etc/otelcol-contrib/config.yaml - depends_on: - victorialogs: - condition: service_healthy - victoriametrics: - condition: service_healthy - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl:/syslog - ports: - - '9428:9428' - command: - - -storageDataPath=/syslog - - -syslog.listenAddr.tcp=:5410 - - -syslog.useLocalTimestamp.tcp - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9428/health"] - interval: 1s - timeout: 1s - retries: 10 - - victoriametrics: - image: victoriametrics/victoria-metrics:latest - ports: - - '8428:8428' - command: - - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - - -loggerFormat=json - volumes: - - victorialogs-vector-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/health"] - interval: 1s - timeout: 1s - retries: 10 - -volumes: - victorialogs-vector-docker-vl: - victorialogs-vector-docker-vm: +include: + - ../compose.yml +name: collector-syslog diff --git a/deployment/docker/victorialogs/opentelemetry-collector/syslog/scrape.yml b/deployment/docker/victorialogs/opentelemetry-collector/syslog/scrape.yml deleted file mode 100644 index 8257db8ef0..0000000000 --- a/deployment/docker/victorialogs/opentelemetry-collector/syslog/scrape.yml +++ /dev/null @@ -1,11 +0,0 @@ -scrape_configs: - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 \ No newline at end of file diff --git a/deployment/docker/victorialogs/promtail/compose.yml b/deployment/docker/victorialogs/promtail/compose.yml index 256bd54be3..01d8e01d4a 100644 --- a/deployment/docker/victorialogs/promtail/compose.yml +++ b/deployment/docker/victorialogs/promtail/compose.yml @@ -1,22 +1,12 @@ +include: + - ../compose.yml services: promtail: - image: grafana/promtail:2.8.2 + image: grafana/promtail:3.0.1 volumes: - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/log:/var/log:ro - - ./config.yml:/etc/promtail/docker-config.yml:ro + - ${PWD}/config.yml:/etc/promtail/docker-config.yml:ro command: -config.file=/etc/promtail/docker-config.yml ports: - "5140:5140" - - vlogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-promtail-docker:/vlogs - ports: - - '9428:9428' - command: - - -storageDataPath=/vlogs - -volumes: - victorialogs-promtail-docker: diff --git a/deployment/docker/victorialogs/promtail/loki/compose.yml b/deployment/docker/victorialogs/promtail/loki/compose.yml new file mode 100644 index 0000000000..5ee00fa085 --- /dev/null +++ b/deployment/docker/victorialogs/promtail/loki/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: promtail-elasticsearch diff --git a/deployment/docker/victorialogs/promtail/config.yml b/deployment/docker/victorialogs/promtail/loki/config.yml similarity index 90% rename from deployment/docker/victorialogs/promtail/config.yml rename to deployment/docker/victorialogs/promtail/loki/config.yml index 98a78e3c97..85b304f8b7 100644 --- a/deployment/docker/victorialogs/promtail/config.yml +++ b/deployment/docker/victorialogs/promtail/loki/config.yml @@ -6,7 +6,7 @@ positions: filename: /tmp/positions.yaml clients: - - url: http://vlogs:9428/insert/loki/api/v1/push?_stream_fields=instance,job,host,app + - url: http://victorialogs:9428/insert/loki/api/v1/push?_stream_fields=instance,job,host,app tenant_id: "0:0" scrape_configs: diff --git a/deployment/docker/victorialogs/telegraf-docker/scrape.yml b/deployment/docker/victorialogs/telegraf-docker/scrape.yml deleted file mode 100644 index 8257db8ef0..0000000000 --- a/deployment/docker/victorialogs/telegraf-docker/scrape.yml +++ /dev/null @@ -1,11 +0,0 @@ -scrape_configs: - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 \ No newline at end of file diff --git a/deployment/docker/victorialogs/telegraf-docker/README.md b/deployment/docker/victorialogs/telegraf/README.md similarity index 56% rename from deployment/docker/victorialogs/telegraf-docker/README.md rename to deployment/docker/victorialogs/telegraf/README.md index d460ba9fcd..6c08ef8a36 100644 --- a/deployment/docker/victorialogs/telegraf-docker/README.md +++ b/deployment/docker/victorialogs/telegraf/README.md @@ -1,8 +1,13 @@ # Docker compose Telegraf integration with VictoriaLogs for docker -The folder contains the example of integration of [telegraf](https://www.influxdata.com/time-series-platform/telegraf/) with VictoriaLogs +The folder contains the examples of integration of [telegraf](https://www.influxdata.com/time-series-platform/telegraf/) with VictoriaLogs using: -To spin-up environment run the following command: +* [elasticsearch](./elasticsearch) +* [loki](./loki) +* [jsonline](./jsonline) +* [syslog](./syslog) + +To spin-up environment `cd` to any of listed above directories run the following command: ``` docker compose up -d ``` @@ -23,3 +28,11 @@ Querying the data * [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) + +Telegraf configuration example can be found below: +* [elasticsearch](./elasticsearch/telegraf.conf) +* [loki](./loki/telegraf.conf) +* [jsonline](./jsonline/telegraf.conf) +* [syslog](./syslog/telegraf.conf) + +Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/telegraf/compose.yml b/deployment/docker/victorialogs/telegraf/compose.yml new file mode 100644 index 0000000000..3132712ed1 --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/compose.yml @@ -0,0 +1,20 @@ +include: + - ../compose.yml +services: + telegraf: + image: bitnami/telegraf:1.31.3 + restart: on-failure + volumes: + - type: bind + source: /var/run/docker.sock + target: /var/run/docker.sock + - type: bind + source: /var/lib/docker + target: /var/lib/docker + - ${PWD}/telegraf.conf:/etc/telegraf/telegraf.conf:ro + command: --config /etc/telegraf/telegraf.conf + depends_on: + victorialogs: + condition: service_healthy + victoriametrics: + condition: service_healthy diff --git a/deployment/docker/victorialogs/telegraf/elasticsearch/compose.yml b/deployment/docker/victorialogs/telegraf/elasticsearch/compose.yml new file mode 100644 index 0000000000..e9285fa039 --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/elasticsearch/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: telegraf-elasticsearch diff --git a/deployment/docker/victorialogs/telegraf-docker/telegraf.conf b/deployment/docker/victorialogs/telegraf/elasticsearch/telegraf.conf similarity index 70% rename from deployment/docker/victorialogs/telegraf-docker/telegraf.conf rename to deployment/docker/victorialogs/telegraf/elasticsearch/telegraf.conf index 3eafb51b58..ab08dab80a 100644 --- a/deployment/docker/victorialogs/telegraf-docker/telegraf.conf +++ b/deployment/docker/victorialogs/telegraf/elasticsearch/telegraf.conf @@ -16,23 +16,6 @@ [[inputs.cpu]] -[[outputs.http]] - url = "http://victorialogs:9428/insert/jsonline?_msg_field=fields.msg&_stream_fields=tags.log_source,tags.metric_type" - data_format = "json" - namepass = ["docker_log"] - use_batch_format = false - -[[outputs.loki]] - domain = "http://victorialogs:9428" - endpoint = "/insert/loki/api/v1/push?_msg_field=docker_log.msg&_time_field=@timestamp&_stream_fields=log_source,metric_type" - namepass = ["docker_log"] - gzip_request = true - sanitize_label_names = true - -[[outputs.syslog]] - address = "tcp://victorialogs:8094" - namepass = ["docker_log"] - [[outputs.elasticsearch]] urls = ["http://victorialogs:9428/insert/elasticsearch"] timeout = "1m" diff --git a/deployment/docker/victorialogs/telegraf/jsonline/compose.yml b/deployment/docker/victorialogs/telegraf/jsonline/compose.yml new file mode 100644 index 0000000000..68d7844a0e --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/jsonline/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: telegraf-jsonline diff --git a/deployment/docker/victorialogs/telegraf/jsonline/telegraf.conf b/deployment/docker/victorialogs/telegraf/jsonline/telegraf.conf new file mode 100644 index 0000000000..c47978a903 --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/jsonline/telegraf.conf @@ -0,0 +1,43 @@ +[agent] + interval = "10s" + round_interval = true + metric_batch_size = 1000 + metric_buffer_limit = 100000 + collection_jitter = "0s" + flush_interval = "10s" + flush_jitter = "0s" + precision = "" + debug = false + quiet = false + logtarget = "file" + logfile = "/dev/null" + hostname = "pop-os" + omit_hostname = false + +[[inputs.cpu]] + +[[outputs.http]] + url = "http://victorialogs:9428/insert/jsonline?_msg_field=fields.msg&_stream_fields=tags.log_source,tags.metric_type" + data_format = "json" + namepass = ["docker_log"] + use_batch_format = false + +[[outputs.http]] + url = "http://victoriametrics:8428/api/v1/write" + data_format = "prometheusremotewrite" + namepass = ["cpu"] + [outputs.http.headers] + Content-Type = "application/x-protobuf" + Content-Encoding = "snappy" + X-Prometheus-Remote-Write-Version = "0.1.0" + +[[inputs.docker_log]] + [inputs.docker_log.tags] + metric_type = "logs" + log_source = "telegraf" + +[[processors.rename]] + namepass = ["docker_log"] + [[processors.rename.replace]] + field = "message" + dest = "msg" diff --git a/deployment/docker/victorialogs/telegraf/loki/compose.yml b/deployment/docker/victorialogs/telegraf/loki/compose.yml new file mode 100644 index 0000000000..470a80a0a3 --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/loki/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: telegraf-loki diff --git a/deployment/docker/victorialogs/telegraf/loki/telegraf.conf b/deployment/docker/victorialogs/telegraf/loki/telegraf.conf new file mode 100644 index 0000000000..be53392c9c --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/loki/telegraf.conf @@ -0,0 +1,44 @@ +[agent] + interval = "10s" + round_interval = true + metric_batch_size = 1000 + metric_buffer_limit = 100000 + collection_jitter = "0s" + flush_interval = "10s" + flush_jitter = "0s" + precision = "" + debug = false + quiet = false + logtarget = "file" + logfile = "/dev/null" + hostname = "pop-os" + omit_hostname = false + +[[inputs.cpu]] + +[[outputs.loki]] + domain = "http://victorialogs:9428" + endpoint = "/insert/loki/api/v1/push?_msg_field=docker_log.msg&_time_field=@timestamp&_stream_fields=log_source,metric_type" + namepass = ["docker_log"] + gzip_request = true + sanitize_label_names = true + +[[outputs.http]] + url = "http://victoriametrics:8428/api/v1/write" + data_format = "prometheusremotewrite" + namepass = ["cpu"] + [outputs.http.headers] + Content-Type = "application/x-protobuf" + Content-Encoding = "snappy" + X-Prometheus-Remote-Write-Version = "0.1.0" + +[[inputs.docker_log]] + [inputs.docker_log.tags] + metric_type = "logs" + log_source = "telegraf" + +[[processors.rename]] + namepass = ["docker_log"] + [[processors.rename.replace]] + field = "message" + dest = "msg" diff --git a/deployment/docker/victorialogs/telegraf/syslog/compose.yml b/deployment/docker/victorialogs/telegraf/syslog/compose.yml new file mode 100644 index 0000000000..698adb2a9e --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/syslog/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: telegraf-syslog diff --git a/deployment/docker/victorialogs/telegraf/syslog/telegraf.conf b/deployment/docker/victorialogs/telegraf/syslog/telegraf.conf new file mode 100644 index 0000000000..ff44f832c0 --- /dev/null +++ b/deployment/docker/victorialogs/telegraf/syslog/telegraf.conf @@ -0,0 +1,41 @@ +[agent] + interval = "10s" + round_interval = true + metric_batch_size = 1000 + metric_buffer_limit = 100000 + collection_jitter = "0s" + flush_interval = "10s" + flush_jitter = "0s" + precision = "" + debug = false + quiet = false + logtarget = "file" + logfile = "/dev/null" + hostname = "pop-os" + omit_hostname = false + +[[inputs.cpu]] + +[[outputs.syslog]] + address = "tcp://victorialogs:8094" + namepass = ["docker_log"] + +[[outputs.http]] + url = "http://victoriametrics:8428/api/v1/write" + data_format = "prometheusremotewrite" + namepass = ["cpu"] + [outputs.http.headers] + Content-Type = "application/x-protobuf" + Content-Encoding = "snappy" + X-Prometheus-Remote-Write-Version = "0.1.0" + +[[inputs.docker_log]] + [inputs.docker_log.tags] + metric_type = "logs" + log_source = "telegraf" + +[[processors.rename]] + namepass = ["docker_log"] + [[processors.rename.replace]] + field = "message" + dest = "msg" diff --git a/deployment/docker/victorialogs/vector-ha-single-node/README.md b/deployment/docker/victorialogs/vector-ha-single-node/README.md deleted file mode 100644 index 2a6fd630e1..0000000000 --- a/deployment/docker/victorialogs/vector-ha-single-node/README.md +++ /dev/null @@ -1,104 +0,0 @@ -# Docker compose Vector integration with VictoriaLogs for docker. High-Availability example - -The folder contains the example of integration of [vector](https://vector.dev/docs/) with VictoriaLogs Single-Node(s) and [vmauth](https://docs.victoriametrics.com/vmauth/) for achieving High Availability. - -Check [this documentation](https://docs.victoriametrics.com/victorialogs/#high-availability) with a description of the architecture and components. - - -To spin-up environment run the following command: - -```shell -docker compose up -d -``` - -To shut down the docker-compose environment run the following command: - -```shell -docker compose down -docker compose rm -f -``` - -The docker compose file contains the following components: - -* vector - vector is configured to collect logs from the `docker`, you can find configuration in the `vector.yaml`. It writes data in two instances of VictoriaLogs -* VictoriaLogs - the two instances of log database, they accept the data from `vector` by json line protocol -* vmauth - load balancer for proxying requests to one of VictoriaLogs - -Querying the data - -* [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:8427/select/vmui/` -* for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - - -the example of vector configuration(`vector.yaml`) - -```yaml -api: - enabled: true - address: 0.0.0.0:8686 -sources: - docker: - type: docker_logs -transforms: - msg_parser: - type: remap - inputs: - - docker - source: | - if exists(.message) { - .log, err = parse_json(.message) - if err == null { - del(.message) - } - } -sinks: - console_out: - type: console - inputs: - - msg_parser - encoding: - codec: json - vlogs_http_1: - type: http - inputs: - - msg_parser - uri: http://victorialogs-1:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp - encoding: - codec: json - framing: - method: newline_delimited - compression: gzip - healthcheck: - enabled: false - request: - headers: - AccountID: '0' - ProjectID: '0' - vlogs_http_2: - type: http - inputs: - - msg_parser - uri: http://victorialogs-2:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp - encoding: - codec: json - framing: - method: newline_delimited - compression: gzip - healthcheck: - enabled: false - request: - headers: - AccountID: '0' - ProjectID: '0' -``` - -Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. - -The example of vmauth configuration (`auth.yml`) - -```yaml -unauthorized_user: - url_prefix: - - http://victorialogs-1:9428 - - http://victorialogs-2:9428 -``` \ No newline at end of file diff --git a/deployment/docker/victorialogs/vector-ha-single-node/auth.yml b/deployment/docker/victorialogs/vector-ha-single-node/auth.yml deleted file mode 100644 index eeafbb852b..0000000000 --- a/deployment/docker/victorialogs/vector-ha-single-node/auth.yml +++ /dev/null @@ -1,6 +0,0 @@ -# balance load among victorialogs instances -# see https://docs.victoriametrics.com/vmauth/#load-balancing -unauthorized_user: - url_prefix: - - http://victorialogs-1:9428 - - http://victorialogs-2:9428 diff --git a/deployment/docker/victorialogs/vector-ha-single-node/compose.yml b/deployment/docker/victorialogs/vector-ha-single-node/compose.yml deleted file mode 100644 index ae339f83a9..0000000000 --- a/deployment/docker/victorialogs/vector-ha-single-node/compose.yml +++ /dev/null @@ -1,48 +0,0 @@ -services: - vector: - image: docker.io/timberio/vector:0.40.1-distroless-static - restart: on-failure - volumes: - - type: bind - source: /var/run/docker.sock - target: /var/run/docker.sock - - type: bind - source: /var/lib/docker - target: /var/lib/docker - - ./vector.yaml:/etc/vector/vector.yaml:ro - user: root - ports: - - '8686:8686' - depends_on: [victorialogs-1,victorialogs-2] - - victorialogs-1: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl-ha-single-1:/vlogs - command: - - -storageDataPath=/vlogs - - -loggerFormat=json - victorialogs-2: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl-ha-single-2:/vlogs - command: - - -storageDataPath=/vlogs - - -loggerFormat=json - vmauth: - container_name: vmauth - image: victoriametrics/vmauth:v1.103.0 - depends_on: - - "victorialogs-1" - - "victorialogs-2" - volumes: - - ./auth.yml:/etc/auth.yml - command: - - '--auth.config=/etc/auth.yml' - ports: - - 8427:8427 - restart: always - -volumes: - victorialogs-vector-docker-vl-ha-single-1: - victorialogs-vector-docker-vl-ha-single-2: diff --git a/deployment/docker/victorialogs/vector-ha-single-node/vector.yaml b/deployment/docker/victorialogs/vector-ha-single-node/vector.yaml deleted file mode 100644 index e67320b974..0000000000 --- a/deployment/docker/victorialogs/vector-ha-single-node/vector.yaml +++ /dev/null @@ -1,58 +0,0 @@ -api: - enabled: true - address: 0.0.0.0:8686 -sources: - docker: - type: docker_logs -transforms: - msg_parser: - type: remap - inputs: - - docker - source: | - if exists(.message) { - .log, err = parse_json(.message) - if err == null { - del(.message) - } - } -sinks: - console_out: - type: console - inputs: - - msg_parser - encoding: - codec: json - vlogs_http_1: - type: http - inputs: - - msg_parser - uri: http://victorialogs-1:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp - encoding: - codec: json - framing: - method: newline_delimited - compression: gzip - healthcheck: - enabled: false - request: - headers: - AccountID: '0' - ProjectID: '0' - vlogs_http_2: - type: http - inputs: - - msg_parser - uri: http://victorialogs-2:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp - encoding: - codec: json - framing: - method: newline_delimited - compression: gzip - healthcheck: - enabled: false - request: - headers: - AccountID: '0' - ProjectID: '0' - diff --git a/deployment/docker/victorialogs/vector/README.md b/deployment/docker/victorialogs/vector/README.md index 4acd31d361..5022982223 100644 --- a/deployment/docker/victorialogs/vector/README.md +++ b/deployment/docker/victorialogs/vector/README.md @@ -1,8 +1,13 @@ -# Docker compose Vector integration with VictoriaLogs for docker +# Docker compose Vector integration with VictoriaLogs using given below protocols: + +* [elasticsearch](./elasticsearch) +* [loki](./loki) +* [jsonline single node](./jsonline) +* [jsonline HA setup](./jsonline-ha) The folder contains the example of integration of [vector](https://vector.dev/docs/) with Victorialogs -To spin-up environment run the following command: +To spin-up environment `cd` to any of listed above directories run the following command: ``` docker compose up -d ``` @@ -16,7 +21,7 @@ docker compose rm -f The docker compose file contains the following components: * vector - vector is configured to collect logs from the `docker`, you can find configuration in the `vector.yaml`. It writes data in VictoriaLogs. It pushes metrics to VictoriaMetrics. -* VictoriaLogs - the log database, it accepts the data from `vector` by elastic protocol +* VictoriaLogs - the log database, it accepts the data from `vector` by DataDog protocol * VictoriaMetrics - collects metrics from `VictoriaLogs` and `VictoriaMetrics` Querying the data @@ -24,40 +29,10 @@ Querying the data * [vmui](https://docs.victoriametrics.com/victorialogs/querying/#vmui) - a web UI is accessible by `http://localhost:9428/select/vmui` * for querying the data via command-line please check [these docs](https://docs.victoriametrics.com/victorialogs/querying/#command-line) - -the example of vector configuration(`vector.yaml`) - -``` -sources: - docker: - type: docker_logs -transforms: - msg_parser: - type: remap - inputs: - - docker - source: | - .log = parse_json!(.message) - del(.message) -sinks: - vlogs_es: - type: elasticsearch - inputs: - - msg_parser - endpoints: - - http://victorialogs:9428/insert/elasticsearch/ - mode: bulk - api_version: v8 - compression: gzip - healthcheck.enabled: false - query: - _msg_field: log.msg - _time_field: timestamp - _stream_fields: source_type,host,container_name - request: - headers: - AccountID: "0" - ProjectID: "0" -``` +Vector configuration example can be found below: +* [elasticsearch](./elasticsearch/vector.yaml) +* [loki](./loki/vector.yaml) +* [jsonline single node](./jsonline/vector.yaml) +* [jsonline HA setup](./jsonline-ha/vector.yaml) Please, note that `_stream_fields` parameter must follow recommended [best practices](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) to achieve better performance. diff --git a/deployment/docker/victorialogs/vector/compose.yml b/deployment/docker/victorialogs/vector/compose.yml index 9a444d5511..9c9c117d7b 100644 --- a/deployment/docker/victorialogs/vector/compose.yml +++ b/deployment/docker/victorialogs/vector/compose.yml @@ -1,6 +1,8 @@ +include: + - ../compose.yml services: vector: - image: docker.io/timberio/vector:0.38.0-distroless-static + image: docker.io/timberio/vector:0.40.0-distroless-static restart: on-failure volumes: - type: bind @@ -9,7 +11,7 @@ services: - type: bind source: /var/lib/docker target: /var/lib/docker - - ./vector.yaml:/etc/vector/vector.yaml:ro + - ${PWD}/vector.yaml:/etc/vector/vector.yaml:ro user: root ports: - '8686:8686' @@ -18,39 +20,3 @@ services: condition: service_healthy victoriametrics: condition: service_healthy - - victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs - volumes: - - victorialogs-vector-docker-vl:/vlogs - ports: - - '9428:9428' - command: - - -storageDataPath=/vlogs - - -loggerFormat=json - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9428/health"] - interval: 1s - timeout: 1s - retries: 10 - - victoriametrics: - image: victoriametrics/victoria-metrics:latest - ports: - - '8428:8428' - command: - - -storageDataPath=/vmsingle - - -promscrape.config=/promscrape.yml - - -loggerFormat=json - volumes: - - victorialogs-vector-docker-vm:/vmsingle - - ./scrape.yml:/promscrape.yml - healthcheck: - test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/health"] - interval: 1s - timeout: 1s - retries: 10 - -volumes: - victorialogs-vector-docker-vl: - victorialogs-vector-docker-vm: diff --git a/deployment/docker/victorialogs/vector/elasticsearch/compose.yaml b/deployment/docker/victorialogs/vector/elasticsearch/compose.yaml new file mode 100644 index 0000000000..bbb51e727f --- /dev/null +++ b/deployment/docker/victorialogs/vector/elasticsearch/compose.yaml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: vector-elasticsearch diff --git a/deployment/docker/victorialogs/vector/elasticsearch/vector.yaml b/deployment/docker/victorialogs/vector/elasticsearch/vector.yaml new file mode 100644 index 0000000000..520a7a9bd7 --- /dev/null +++ b/deployment/docker/victorialogs/vector/elasticsearch/vector.yaml @@ -0,0 +1,43 @@ +api: + enabled: true + address: 0.0.0.0:8686 +sources: + docker: + type: docker_logs + demo: + type: demo_logs + format: apache_common + interval: 10 + vector_metrics: + type: internal_metrics +transforms: + msg_parser: + type: remap + inputs: [docker] + source: | + .log = parse_json!(.message) + del(.message) +sinks: + elasticsearch: + type: elasticsearch + inputs: [demo] + endpoints: [http://victorialogs:9428/insert/elasticsearch/] + mode: bulk + api_version: v8 + compression: gzip + healthcheck: + enabled: false + query: + _msg_field: message + _time_field: timestamp + _stream_fields: source_type + request: + headers: + AccountID: "0" + ProjectID: "0" + victoriametrics: + type: prometheus_remote_write + endpoint: http://victoriametrics:8428/api/v1/write + inputs: [vector_metrics] + healthcheck: + enabled: false diff --git a/deployment/docker/victorialogs/vector/jsonline-ha/compose.yml b/deployment/docker/victorialogs/vector/jsonline-ha/compose.yml new file mode 100644 index 0000000000..7d873452b4 --- /dev/null +++ b/deployment/docker/victorialogs/vector/jsonline-ha/compose.yml @@ -0,0 +1,5 @@ +include: + - path: + - ../compose.yml + - ../../compose-ha.yml +name: vector-jsonline-ha diff --git a/deployment/docker/victorialogs/vector/vector.yaml b/deployment/docker/victorialogs/vector/jsonline-ha/vector.yaml similarity index 66% rename from deployment/docker/victorialogs/vector/vector.yaml rename to deployment/docker/victorialogs/vector/jsonline-ha/vector.yaml index b409823473..331a4f05a9 100644 --- a/deployment/docker/victorialogs/vector/vector.yaml +++ b/deployment/docker/victorialogs/vector/jsonline-ha/vector.yaml @@ -18,7 +18,7 @@ transforms: .log = parse_json!(.message) del(.message) sinks: - vlogs_http: + vlogs-1: type: http inputs: - msg_parser @@ -34,40 +34,26 @@ sinks: headers: AccountID: '0' ProjectID: '0' - vlogs_loki: - type: loki + vlogs-2: + type: http inputs: - - demo - endpoint: http://victorialogs:9428/insert/loki/ - compression: gzip - path: /api/v1/push?_msg_field=message.message&_time_field=timestamp&_stream_fields=source + - msg_parser + uri: http://victorialogs-2:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp encoding: codec: json - labels: - source: vector - victoriametrics: - type: prometheus_remote_write - endpoint: http://victoriametrics:8428/api/v1/write - inputs: - - metrics - healthcheck: - enabled: false - vlogs_es: - type: elasticsearch - inputs: - - demo - endpoints: - - http://victorialogs:9428/insert/elasticsearch/ - mode: bulk - api_version: v8 + framing: + method: newline_delimited compression: gzip healthcheck: enabled: false - query: - _msg_field: message - _time_field: timestamp - _stream_fields: source_type request: headers: AccountID: '0' ProjectID: '0' + victoriametrics: + type: prometheus_remote_write + endpoint: http://victoriametrics:8428/api/v1/write + inputs: + - metrics + healthcheck: + enabled: false diff --git a/deployment/docker/victorialogs/vector/jsonline/compose.yml b/deployment/docker/victorialogs/vector/jsonline/compose.yml new file mode 100644 index 0000000000..10a44b1404 --- /dev/null +++ b/deployment/docker/victorialogs/vector/jsonline/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: vector-jsonline diff --git a/deployment/docker/victorialogs/vector/jsonline/vector.yaml b/deployment/docker/victorialogs/vector/jsonline/vector.yaml new file mode 100644 index 0000000000..3c09a818f9 --- /dev/null +++ b/deployment/docker/victorialogs/vector/jsonline/vector.yaml @@ -0,0 +1,43 @@ +api: + enabled: true + address: 0.0.0.0:8686 +sources: + docker: + type: docker_logs + demo: + type: demo_logs + format: json + metrics: + type: internal_metrics +transforms: + msg_parser: + type: remap + inputs: + - docker + source: | + .log = parse_json!(.message) + del(.message) +sinks: + http: + type: http + inputs: + - msg_parser + uri: http://victorialogs:9428/insert/jsonline?_stream_fields=source_type,host,container_name&_msg_field=log.msg&_time_field=timestamp + encoding: + codec: json + framing: + method: newline_delimited + compression: gzip + healthcheck: + enabled: false + request: + headers: + AccountID: '0' + ProjectID: '0' + victoriametrics: + type: prometheus_remote_write + endpoint: http://victoriametrics:8428/api/v1/write + inputs: + - metrics + healthcheck: + enabled: false diff --git a/deployment/docker/victorialogs/vector/loki/compose.yml b/deployment/docker/victorialogs/vector/loki/compose.yml new file mode 100644 index 0000000000..433c2bf9a5 --- /dev/null +++ b/deployment/docker/victorialogs/vector/loki/compose.yml @@ -0,0 +1,3 @@ +include: + - ../compose.yml +name: vector-loki diff --git a/deployment/docker/victorialogs/vector/loki/vector.yaml b/deployment/docker/victorialogs/vector/loki/vector.yaml new file mode 100644 index 0000000000..3c8911386a --- /dev/null +++ b/deployment/docker/victorialogs/vector/loki/vector.yaml @@ -0,0 +1,38 @@ +api: + enabled: true + address: 0.0.0.0:8686 +sources: + docker: + type: docker_logs + demo: + type: demo_logs + format: json + metrics: + type: internal_metrics +transforms: + msg_parser: + type: remap + inputs: + - docker + source: | + .log = parse_json!(.message) + del(.message) +sinks: + loki: + type: loki + inputs: + - demo + endpoint: http://victorialogs:9428/insert/loki/ + compression: gzip + path: /api/v1/push?_msg_field=message.message&_time_field=timestamp&_stream_fields=source + encoding: + codec: json + labels: + source: vector + victoriametrics: + type: prometheus_remote_write + endpoint: http://victoriametrics:8428/api/v1/write + inputs: + - metrics + healthcheck: + enabled: false diff --git a/deployment/docker/victorialogs/vector/scrape.yml b/deployment/docker/victorialogs/vector/scrape.yml deleted file mode 100644 index 8257db8ef0..0000000000 --- a/deployment/docker/victorialogs/vector/scrape.yml +++ /dev/null @@ -1,11 +0,0 @@ -scrape_configs: - - job_name: "victoriametrics" - scrape_interval: 30s - static_configs: - - targets: - - victoriametrics:8428 - - job_name: "victorialogs" - scrape_interval: 30s - static_configs: - - targets: - - victorialogs:9428 \ No newline at end of file diff --git a/docs/VictoriaLogs/data-ingestion/Telegraf.md b/docs/VictoriaLogs/data-ingestion/Telegraf.md index 1e8fe76f9b..a31b86d957 100644 --- a/docs/VictoriaLogs/data-ingestion/Telegraf.md +++ b/docs/VictoriaLogs/data-ingestion/Telegraf.md @@ -120,4 +120,4 @@ See also: - [Data ingestion troubleshooting](https://docs.victoriametrics.com/victorialogs/data-ingestion/#troubleshooting). - [How to query VictoriaLogs](https://docs.victoriametrics.com/victorialogs/querying/). - [Elasticsearch output docs for Telegraf](https://github.com/influxdata/telegraf/tree/master/plugins/outputs/elasticsearch). -- [Docker-compose demo for Telegraf integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/telegraf-docker). +- [Docker-compose demo for Telegraf integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/telegraf). diff --git a/docs/VictoriaLogs/data-ingestion/Vector.md b/docs/VictoriaLogs/data-ingestion/Vector.md index 5726314790..85ac76749c 100644 --- a/docs/VictoriaLogs/data-ingestion/Vector.md +++ b/docs/VictoriaLogs/data-ingestion/Vector.md @@ -213,4 +213,4 @@ See also: - [Data ingestion troubleshooting](https://docs.victoriametrics.com/victorialogs/data-ingestion/#troubleshooting). - [How to query VictoriaLogs](https://docs.victoriametrics.com/victorialogs/querying/). - [Elasticsearch output docs for Vector](https://vector.dev/docs/reference/configuration/sinks/elasticsearch/). -- [Docker-compose demo for Filebeat integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector). +- [Docker-compose demo for Vector integration with VictoriaLogs](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/deployment/docker/victorialogs/vector). From f934f717089f6368fb1cfcee60953a676f6587ef Mon Sep 17 00:00:00 2001 From: Andrii Chubatiuk Date: Wed, 25 Sep 2024 19:43:26 +0300 Subject: [PATCH 097/128] docs/victorialogs/data-ingestion: removed FluentBit Elasticsearch from examples (#7093) removed FluentBit Elasticsearch example from docs as custom headers are not supported by elasticsearch output till https://github.com/fluent/fluent-bit/pull/9416 is merged and released fixes https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6985 ### Describe Your Changes Please provide a brief description of the changes you made. Be as specific as possible to help others understand the purpose and impact of your modifications. ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- docs/VictoriaLogs/data-ingestion/Fluentbit.md | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/docs/VictoriaLogs/data-ingestion/Fluentbit.md b/docs/VictoriaLogs/data-ingestion/Fluentbit.md index 6db3a8c28d..645734e18b 100644 --- a/docs/VictoriaLogs/data-ingestion/Fluentbit.md +++ b/docs/VictoriaLogs/data-ingestion/Fluentbit.md @@ -15,30 +15,9 @@ aliases: # Fluentbit setup VictoriaLogs supports given below Fluentbit outputs: -- [Elasticsearch](#elasticsearch) - [Loki](#loki) - [HTTP JSON](#http) -## Elasticsearch - -Specify [elasticsearch output](https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch) section in the `fluentbit.conf` -for sending the collected logs to [VictoriaLogs](https://docs.victoriametrics.com/victorialogs/): - -```conf -[Output] - Name es - Match * - host victorialogs - port 9428 - compress gzip - path /insert/elasticsearch - header AccountID 0 - header ProjectID 0 - header VL-Stream-Fields path - header VL-Msg-Field log - header VL-Time-Field @timestamp -``` - ## Loki Specify [loki output](https://docs.fluentbit.io/manual/pipeline/outputs/loki) section in the `fluentbit.conf` From 4599429f516116ae96c7a6b99e0729626f5e9d9c Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 25 Sep 2024 16:16:53 +0200 Subject: [PATCH 098/128] lib/logstorage: read timestamps column when it is really needed during query execution Previously timestamps column was read unconditionally on every query. This could significantly slow down queries, which do not need reading this column like in https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070 . --- docs/VictoriaLogs/CHANGELOG.md | 1 + lib/logstorage/block_result.go | 246 +++++++++++++++-------- lib/logstorage/block_search.go | 4 +- lib/logstorage/filter_day_range.go | 2 +- lib/logstorage/filter_range.go | 3 +- lib/logstorage/filter_test.go | 3 +- lib/logstorage/filter_time.go | 2 +- lib/logstorage/filter_week_range.go | 2 +- lib/logstorage/pipe_copy.go | 2 +- lib/logstorage/pipe_delete.go | 2 +- lib/logstorage/pipe_drop_empty_fields.go | 4 +- lib/logstorage/pipe_extract.go | 4 +- lib/logstorage/pipe_extract_regexp.go | 4 +- lib/logstorage/pipe_field_names.go | 4 +- lib/logstorage/pipe_fields.go | 2 +- lib/logstorage/pipe_filter.go | 4 +- lib/logstorage/pipe_format.go | 6 +- lib/logstorage/pipe_limit.go | 6 +- lib/logstorage/pipe_math.go | 8 +- lib/logstorage/pipe_offset.go | 6 +- lib/logstorage/pipe_pack.go | 4 +- lib/logstorage/pipe_rename.go | 2 +- lib/logstorage/pipe_sort.go | 18 +- lib/logstorage/pipe_sort_topk.go | 8 +- lib/logstorage/pipe_stats.go | 8 +- lib/logstorage/pipe_stream_context.go | 8 +- lib/logstorage/pipe_top.go | 8 +- lib/logstorage/pipe_uniq.go | 8 +- lib/logstorage/pipe_unpack.go | 6 +- lib/logstorage/pipe_unroll.go | 6 +- lib/logstorage/pipe_update.go | 4 +- lib/logstorage/pipe_utils_test.go | 2 +- lib/logstorage/stats_count.go | 24 +-- lib/logstorage/stats_count_empty.go | 6 +- lib/logstorage/stats_count_uniq.go | 13 +- lib/logstorage/stats_max.go | 12 +- lib/logstorage/stats_min.go | 12 +- lib/logstorage/stats_quantile.go | 2 +- lib/logstorage/stats_row_any.go | 2 +- lib/logstorage/stats_row_max.go | 6 +- lib/logstorage/stats_row_min.go | 6 +- lib/logstorage/stats_values.go | 8 +- lib/logstorage/storage_search.go | 12 +- lib/logstorage/storage_search_test.go | 12 +- 44 files changed, 299 insertions(+), 213 deletions(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index e2c09cc5c2..7c40abde59 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -16,6 +16,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add button for enabling auto refresh, similarly to VictoriaMetrics vmui. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7017). +* FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. diff --git a/lib/logstorage/block_result.go b/lib/logstorage/block_result.go index 2dc30a3fb3..a4e14f6950 100644 --- a/lib/logstorage/block_result.go +++ b/lib/logstorage/block_result.go @@ -21,14 +21,29 @@ import ( // // It is expected that its contents is accessed only from a single goroutine at a time. type blockResult struct { + // rowsLen is the number of rows in the given blockResult. + rowsLen int + + // bs is the associated blockSearch for the given blockResult. + // + // bs is nil for the blockResult constructed by pipes. + bs *blockSearch + + // bm is the associated bitmap for the given blockResult. + // + // bm is nil for the blockResult constructed by pipes. + bm *bitmap + // a holds all the bytes behind the requested column values in the block. a arena - // values holds all the requested column values in the block. + // valuesBuf holds all the requested column values in the block. valuesBuf []string - // timestamps contain timestamps for the selected log entries in the block. - timestamps []int64 + // timestampsBuf contains cached timestamps for the selected log entries in the block. + // + // timestamps must be obtained via blockResult.getTimestamps() call. + timestampsBuf []int64 // csBuf contains requested columns. csBuf []blockResultColumn @@ -47,12 +62,17 @@ type blockResult struct { } func (br *blockResult) reset() { + br.rowsLen = 0 + + br.cs = nil + br.bm = nil + br.a.reset() clear(br.valuesBuf) br.valuesBuf = br.valuesBuf[:0] - br.timestamps = br.timestamps[:0] + br.timestampsBuf = br.timestampsBuf[:0] clear(br.csBuf) br.csBuf = br.csBuf[:0] @@ -76,6 +96,11 @@ func (br *blockResult) reset() { func (br *blockResult) clone() *blockResult { brNew := &blockResult{} + brNew.rowsLen = br.rowsLen + + // do not clone br.cs, since it may be updated at any time. + // do not clone br.bm, since it may be updated at any time. + cs := br.getColumns() // Pre-populate values in every column in order to properly calculate the needed backing buffer size below. @@ -96,8 +121,10 @@ func (br *blockResult) clone() *blockResult { } brNew.valuesBuf = make([]string, 0, valuesBufLen) - brNew.timestamps = make([]int64, len(br.timestamps)) - copy(brNew.timestamps, br.timestamps) + srcTimestamps := br.getTimestamps() + brNew.timestampsBuf = make([]int64, len(srcTimestamps)) + copy(brNew.timestampsBuf, srcTimestamps) + brNew.checkTimestampsLen() csNew := make([]blockResultColumn, len(cs)) for i, c := range cs { @@ -112,18 +139,19 @@ func (br *blockResult) clone() *blockResult { return brNew } -// initFromFilterAllColumns initializes br from brSrc by copying rows identified by set bets at bm. +// initFromFilterAllColumns initializes br from brSrc by copying rows identified by set bits at bm. // // The br is valid until brSrc or bm is updated. func (br *blockResult) initFromFilterAllColumns(brSrc *blockResult, bm *bitmap) { br.reset() - srcTimestamps := brSrc.timestamps - dstTimestamps := br.timestamps[:0] + srcTimestamps := brSrc.getTimestamps() + dstTimestamps := br.timestampsBuf[:0] bm.forEachSetBitReadonly(func(idx int) { dstTimestamps = append(dstTimestamps, srcTimestamps[idx]) }) - br.timestamps = dstTimestamps + br.timestampsBuf = dstTimestamps + br.rowsLen = len(br.timestampsBuf) for _, cSrc := range brSrc.getColumns() { br.appendFilteredColumn(brSrc, cSrc, bm) @@ -134,7 +162,7 @@ func (br *blockResult) initFromFilterAllColumns(brSrc *blockResult, bm *bitmap) // // the br is valid until brSrc, cSrc or bm is updated. func (br *blockResult) appendFilteredColumn(brSrc *blockResult, cSrc *blockResultColumn, bm *bitmap) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } cDst := blockResultColumn{ @@ -211,7 +239,7 @@ func (br *blockResult) sizeBytes() int { n += br.a.sizeBytes() n += cap(br.valuesBuf) * int(unsafe.Sizeof(br.valuesBuf[0])) - n += cap(br.timestamps) * int(unsafe.Sizeof(br.timestamps[0])) + n += cap(br.timestampsBuf) * int(unsafe.Sizeof(br.timestampsBuf[0])) n += cap(br.csBuf) * int(unsafe.Sizeof(br.csBuf[0])) n += cap(br.cs) * int(unsafe.Sizeof(br.cs[0])) @@ -221,10 +249,10 @@ func (br *blockResult) sizeBytes() int { // setResultColumns sets the given rcs as br columns. // // The br is valid only until rcs are modified. -func (br *blockResult) setResultColumns(rcs []resultColumn, rowsCount int) { +func (br *blockResult) setResultColumns(rcs []resultColumn, rowsLen int) { br.reset() - br.timestamps = fastnum.AppendInt64Zeros(br.timestamps[:0], rowsCount) + br.rowsLen = rowsLen for i := range rcs { br.addResultColumn(&rcs[i]) @@ -232,8 +260,8 @@ func (br *blockResult) setResultColumns(rcs []resultColumn, rowsCount int) { } func (br *blockResult) addResultColumn(rc *resultColumn) { - if len(rc.values) != len(br.timestamps) { - logger.Panicf("BUG: column %q must contain %d rows, but it contains %d rows", rc.name, len(br.timestamps), len(rc.values)) + if len(rc.values) != br.rowsLen { + logger.Panicf("BUG: column %q must contain %d rows, but it contains %d rows", rc.name, br.rowsLen, len(rc.values)) } if areConstValues(rc.values) { // This optimization allows reducing memory usage after br cloning @@ -252,11 +280,9 @@ func (br *blockResult) addResultColumn(rc *resultColumn) { br.csInitialized = false } -// initAllColumns initializes all the columns in br according to bs and bm. -// -// The initialized columns are valid until bs and bm are changed. -func (br *blockResult) initAllColumns(bs *blockSearch, bm *bitmap) { - unneededColumnNames := bs.bsw.so.unneededColumnNames +// initAllColumns initializes all the columns in br. +func (br *blockResult) initAllColumns() { + unneededColumnNames := br.bs.bsw.so.unneededColumnNames if !slices.Contains(unneededColumnNames, "_time") { // Add _time column @@ -265,12 +291,12 @@ func (br *blockResult) initAllColumns(bs *blockSearch, bm *bitmap) { if !slices.Contains(unneededColumnNames, "_stream_id") { // Add _stream_id column - br.addStreamIDColumn(bs) + br.addStreamIDColumn() } if !slices.Contains(unneededColumnNames, "_stream") { // Add _stream column - if !br.addStreamColumn(bs) { + if !br.addStreamColumn() { // Skip the current block, since the associated stream tags are missing br.reset() return @@ -279,18 +305,18 @@ func (br *blockResult) initAllColumns(bs *blockSearch, bm *bitmap) { if !slices.Contains(unneededColumnNames, "_msg") { // Add _msg column - v := bs.csh.getConstColumnValue("_msg") + v := br.bs.csh.getConstColumnValue("_msg") if v != "" { br.addConstColumn("_msg", v) - } else if ch := bs.csh.getColumnHeader("_msg"); ch != nil { - br.addColumn(bs, bm, ch) + } else if ch := br.bs.csh.getColumnHeader("_msg"); ch != nil { + br.addColumn(ch) } else { br.addConstColumn("_msg", "") } } // Add other const columns - for _, cc := range bs.csh.constColumns { + for _, cc := range br.bs.csh.constColumns { if isMsgFieldName(cc.Name) { continue } @@ -300,30 +326,28 @@ func (br *blockResult) initAllColumns(bs *blockSearch, bm *bitmap) { } // Add other non-const columns - chs := bs.csh.columnHeaders + chs := br.bs.csh.columnHeaders for i := range chs { ch := &chs[i] if isMsgFieldName(ch.name) { continue } if !slices.Contains(unneededColumnNames, ch.name) { - br.addColumn(bs, bm, ch) + br.addColumn(ch) } } br.csInitFast() } -// initRequestedColumns initialized only requested columns in br according to bs and bm. -// -// The initialized columns are valid until bs and bm are changed. -func (br *blockResult) initRequestedColumns(bs *blockSearch, bm *bitmap) { - for _, columnName := range bs.bsw.so.neededColumnNames { +// initRequestedColumns initialized only requested columns in br. +func (br *blockResult) initRequestedColumns() { + for _, columnName := range br.bs.bsw.so.neededColumnNames { switch columnName { case "_stream_id": - br.addStreamIDColumn(bs) + br.addStreamIDColumn() case "_stream": - if !br.addStreamColumn(bs) { + if !br.addStreamColumn() { // Skip the current block, since the associated stream tags are missing. br.reset() return @@ -331,11 +355,11 @@ func (br *blockResult) initRequestedColumns(bs *blockSearch, bm *bitmap) { case "_time": br.addTimeColumn() default: - v := bs.csh.getConstColumnValue(columnName) + v := br.bs.csh.getConstColumnValue(columnName) if v != "" { br.addConstColumn(columnName, v) - } else if ch := bs.csh.getColumnHeader(columnName); ch != nil { - br.addColumn(bs, bm, ch) + } else if ch := br.bs.csh.getColumnHeader(columnName); ch != nil { + br.addColumn(ch) } else { br.addConstColumn(columnName, "") } @@ -345,38 +369,92 @@ func (br *blockResult) initRequestedColumns(bs *blockSearch, bm *bitmap) { br.csInitFast() } +// mustInit initializes br with the given bs and bm. +// +// br is valid until bs or bm changes. func (br *blockResult) mustInit(bs *blockSearch, bm *bitmap) { br.reset() - if bm.isZero() { - // Nothing to initialize for zero matching log entries in the block. + br.rowsLen = bm.onesCount() + if br.rowsLen == 0 { return } - // Initialize timestamps, since they are required for all the further work with br. - so := bs.bsw.so - if !so.needAllColumns && !slices.Contains(so.neededColumnNames, "_time") || so.needAllColumns && slices.Contains(so.unneededColumnNames, "_time") { - // The fastest path - _time column wasn't requested, so it is enough to initialize br.timestamps with zeroes. - rowsLen := bm.onesCount() - br.timestamps = fastnum.AppendInt64Zeros(br.timestamps[:0], rowsLen) + br.bs = bs + br.bm = bm +} + +func (br *blockResult) getMinTimestamp() int64 { + if br.bm != nil && br.bm.bitsLen == br.rowsLen { + return br.bs.bsw.bh.timestampsHeader.minTimestamp + } + + timestamps := br.getTimestamps() + if len(timestamps) == 0 { + return -1 << 63 + } + minTimestamp := timestamps[0] + for i := 1; i < len(timestamps); i++ { + if timestamps[i] < minTimestamp { + minTimestamp = timestamps[i] + } + } + return minTimestamp +} + +func (br *blockResult) getMaxTimestamp() int64 { + if br.bm != nil && br.bm.bitsLen == br.rowsLen { + return br.bs.bsw.bh.timestampsHeader.maxTimestamp + } + + timestamps := br.getTimestamps() + if len(timestamps) == 0 { + return (1 << 63) - 1 + } + maxTimestamp := timestamps[len(timestamps)-1] + for i := len(timestamps) - 2; i >= 0; i-- { + if timestamps[i] > maxTimestamp { + maxTimestamp = timestamps[i] + } + } + return maxTimestamp +} + +func (br *blockResult) getTimestamps() []int64 { + if br.rowsLen > 0 && len(br.timestampsBuf) == 0 { + br.initTimestamps() + } + return br.timestampsBuf +} + +func (br *blockResult) initTimestamps() { + if br.bs == nil { + br.timestampsBuf = fastnum.AppendInt64Zeros(br.timestampsBuf[:0], br.rowsLen) return } - // Slow path - the _time column is requested, so we need to initialize br.timestamps with real timestamps. - srcTimestamps := bs.getTimestamps() - if bm.areAllBitsSet() { + srcTimestamps := br.bs.getTimestamps() + if br.bm.areAllBitsSet() { // Fast path - all the rows in the block are selected, so copy all the timestamps without any filtering. - br.timestamps = append(br.timestamps[:0], srcTimestamps...) + br.timestampsBuf = append(br.timestampsBuf[:0], srcTimestamps...) + br.checkTimestampsLen() return } // Slow path - copy only the needed timestamps to br according to filter results. - dstTimestamps := br.timestamps[:0] - bm.forEachSetBitReadonly(func(idx int) { + dstTimestamps := br.timestampsBuf[:0] + br.bm.forEachSetBitReadonly(func(idx int) { ts := srcTimestamps[idx] dstTimestamps = append(dstTimestamps, ts) }) - br.timestamps = dstTimestamps + br.timestampsBuf = dstTimestamps + br.checkTimestampsLen() +} + +func (br *blockResult) checkTimestampsLen() { + if len(br.timestampsBuf) != br.rowsLen { + logger.Panicf("BUG: unexpected number of timestamps; got %d; want %d", len(br.timestampsBuf), br.rowsLen) + } } func (br *blockResult) newValuesEncodedFromColumnHeader(bs *blockSearch, bm *bitmap, ch *columnHeader) []string { @@ -454,8 +532,8 @@ func (br *blockResult) newValuesEncodedFromColumnHeader(bs *blockSearch, bm *bit // addColumn adds column for the given ch to br. // -// The added column is valid until bs, bm or ch is changed. -func (br *blockResult) addColumn(bs *blockSearch, bm *bitmap, ch *columnHeader) { +// The added column is valid until ch is changed. +func (br *blockResult) addColumn(ch *columnHeader) { br.csBuf = append(br.csBuf, blockResultColumn{ name: getCanonicalColumnName(ch.name), valueType: ch.valueType, @@ -466,8 +544,8 @@ func (br *blockResult) addColumn(bs *blockSearch, bm *bitmap, ch *columnHeader) c := &br.csBuf[len(br.csBuf)-1] br.svecs = append(br.svecs, searchValuesEncodedCreator{ - bs: bs, - bm: bm, + bs: br.bs, + bm: br.bm, ch: ch, }) c.valuesEncodedCreator = &br.svecs[len(br.svecs)-1] @@ -492,15 +570,15 @@ func (br *blockResult) addTimeColumn() { br.csInitialized = false } -func (br *blockResult) addStreamIDColumn(bs *blockSearch) { +func (br *blockResult) addStreamIDColumn() { bb := bbPool.Get() - bb.B = bs.bsw.bh.streamID.marshalString(bb.B) + bb.B = br.bs.bsw.bh.streamID.marshalString(bb.B) br.addConstColumn("_stream_id", bytesutil.ToUnsafeString(bb.B)) bbPool.Put(bb) } -func (br *blockResult) addStreamColumn(bs *blockSearch) bool { - streamStr := bs.getStreamStr() +func (br *blockResult) addStreamColumn() bool { + streamStr := br.bs.getStreamStr() if streamStr == "" { return false } @@ -562,16 +640,16 @@ func (br *blockResult) newValuesBucketedForColumn(c *blockResultColumn, bf *bySt func (br *blockResult) getBucketedConstValues(v string, bf *byStatsField) []string { if v == "" { // Fast path - return a slice of empty strings without constructing the slice. - return getEmptyStrings(len(br.timestamps)) + return getEmptyStrings(br.rowsLen) } - // Slower path - construct slice of identical values with the len(br.timestamps) + // Slower path - construct slice of identical values with the length equal to br.rowsLen valuesBuf := br.valuesBuf valuesBufLen := len(valuesBuf) v = br.getBucketedValue(v, bf) - for range br.timestamps { + for i := 0; i < br.rowsLen; i++ { valuesBuf = append(valuesBuf, v) } @@ -585,7 +663,7 @@ func (br *blockResult) getBucketedTimestampValues(bf *byStatsField) []string { valuesBuf := br.valuesBuf valuesBufLen := len(valuesBuf) - timestamps := br.timestamps + timestamps := br.getTimestamps() var s string if !bf.hasBucketConfig() { @@ -1401,7 +1479,11 @@ func getBlockResultColumnIdxByName(cs []*blockResultColumn, name string) int { } func (br *blockResult) skipRows(skipRows int) { - br.timestamps = append(br.timestamps[:0], br.timestamps[skipRows:]...) + timestamps := br.getTimestamps() + br.timestampsBuf = append(br.timestampsBuf[:0], timestamps[skipRows:]...) + br.rowsLen -= skipRows + br.checkTimestampsLen() + for _, c := range br.getColumns() { if c.values != nil { c.values = append(c.values[:0], c.values[skipRows:]...) @@ -1421,7 +1503,11 @@ func (br *blockResult) skipRows(skipRows int) { } func (br *blockResult) truncateRows(keepRows int) { - br.timestamps = br.timestamps[:keepRows] + timestamps := br.getTimestamps() + br.timestampsBuf = append(br.timestampsBuf[:0], timestamps[:keepRows]...) + br.rowsLen = keepRows + br.checkTimestampsLen() + for _, c := range br.getColumns() { if c.values != nil { c.values = c.values[:keepRows] @@ -1676,10 +1762,10 @@ func (c *blockResultColumn) getFloatValueAtRow(br *blockResult, rowIdx int) (flo func (c *blockResultColumn) sumLenValues(br *blockResult) uint64 { if c.isConst { v := c.valuesEncoded[0] - return uint64(len(v)) * uint64(len(br.timestamps)) + return uint64(len(v)) * uint64(br.rowsLen) } if c.isTime { - return uint64(len(time.RFC3339Nano)) * uint64(len(br.timestamps)) + return uint64(len(time.RFC3339Nano)) * uint64(br.rowsLen) } switch c.valueType { @@ -1707,7 +1793,7 @@ func (c *blockResultColumn) sumLenValues(br *blockResult) uint64 { case valueTypeIPv4: return c.sumLenStringValues(br) case valueTypeTimestampISO8601: - return uint64(len(iso8601Timestamp)) * uint64(len(br.timestamps)) + return uint64(len(iso8601Timestamp)) * uint64(br.rowsLen) default: logger.Panicf("BUG: unknown valueType=%d", c.valueType) return 0 @@ -1729,7 +1815,7 @@ func (c *blockResultColumn) sumValues(br *blockResult) (float64, int) { if !ok { return 0, 0 } - return f * float64(len(br.timestamps)), len(br.timestamps) + return f * float64(br.rowsLen), br.rowsLen } if c.isTime { return 0, 0 @@ -1780,25 +1866,25 @@ func (c *blockResultColumn) sumValues(br *blockResult) (float64, int) { for _, v := range c.getValuesEncoded(br) { sum += uint64(unmarshalUint8(v)) } - return float64(sum), len(br.timestamps) + return float64(sum), br.rowsLen case valueTypeUint16: sum := uint64(0) for _, v := range c.getValuesEncoded(br) { sum += uint64(unmarshalUint16(v)) } - return float64(sum), len(br.timestamps) + return float64(sum), br.rowsLen case valueTypeUint32: sum := uint64(0) for _, v := range c.getValuesEncoded(br) { sum += uint64(unmarshalUint32(v)) } - return float64(sum), len(br.timestamps) + return float64(sum), br.rowsLen case valueTypeUint64: sum := float64(0) for _, v := range c.getValuesEncoded(br) { sum += float64(unmarshalUint64(v)) } - return sum, len(br.timestamps) + return sum, br.rowsLen case valueTypeFloat64: sum := float64(0) for _, v := range c.getValuesEncoded(br) { @@ -1807,7 +1893,7 @@ func (c *blockResultColumn) sumValues(br *blockResult) (float64, int) { sum += f } } - return sum, len(br.timestamps) + return sum, br.rowsLen case valueTypeIPv4: return 0, 0 case valueTypeTimestampISO8601: @@ -1864,15 +1950,15 @@ func truncateTimestampToYear(timestamp int64) int64 { return time.Date(t.Year(), time.January, 1, 0, 0, 0, 0, time.UTC).UnixNano() } -func getEmptyStrings(rowsCount int) []string { +func getEmptyStrings(rowsLen int) []string { p := emptyStrings.Load() if p == nil { - values := make([]string, rowsCount) + values := make([]string, rowsLen) emptyStrings.Store(&values) return values } values := *p - return slicesutil.SetLength(values, rowsCount) + return slicesutil.SetLength(values, rowsLen) } var emptyStrings atomic.Pointer[[]string] diff --git a/lib/logstorage/block_search.go b/lib/logstorage/block_search.go index 3512dd321d..d260ba2642 100644 --- a/lib/logstorage/block_search.go +++ b/lib/logstorage/block_search.go @@ -177,9 +177,9 @@ func (bs *blockSearch) search(bsw *blockSearchWork, bm *bitmap) { // fetch the requested columns to bs.br. if bs.bsw.so.needAllColumns { - bs.br.initAllColumns(bs, bm) + bs.br.initAllColumns() } else { - bs.br.initRequestedColumns(bs, bm) + bs.br.initRequestedColumns() } } diff --git a/lib/logstorage/filter_day_range.go b/lib/logstorage/filter_day_range.go index 0f76088940..4ad88f0a85 100644 --- a/lib/logstorage/filter_day_range.go +++ b/lib/logstorage/filter_day_range.go @@ -47,7 +47,7 @@ func (fr *filterDayRange) applyToBlockResult(br *blockResult, bm *bitmap) { return } if c.isTime { - timestamps := br.timestamps + timestamps := br.getTimestamps() bm.forEachSetBit(func(idx int) bool { timestamp := timestamps[idx] return fr.matchTimestampValue(timestamp) diff --git a/lib/logstorage/filter_range.go b/lib/logstorage/filter_range.go index 3ad8233fb9..8776730bb1 100644 --- a/lib/logstorage/filter_range.go +++ b/lib/logstorage/filter_range.go @@ -44,9 +44,10 @@ func (fr *filterRange) applyToBlockResult(br *blockResult, bm *bitmap) { return } if c.isTime { + timestamps := br.getTimestamps() minValueInt, maxValueInt := toInt64Range(minValue, maxValue) bm.forEachSetBit(func(idx int) bool { - timestamp := br.timestamps[idx] + timestamp := timestamps[idx] return timestamp >= minValueInt && timestamp <= maxValueInt }) return diff --git a/lib/logstorage/filter_test.go b/lib/logstorage/filter_test.go index 67cc5764a8..90f2882804 100644 --- a/lib/logstorage/filter_test.go +++ b/lib/logstorage/filter_test.go @@ -213,11 +213,12 @@ func testFilterMatchForStorage(t *testing.T, s *Storage, tenantID TenantID, f fi t.Fatalf("unexpected number of columns in blockResult; got %d; want 2", len(cs)) } values := cs[0].getValues(br) + timestamps := br.getTimestamps() resultsMu.Lock() for i, v := range values { results = append(results, result{ value: strings.Clone(v), - timestamp: br.timestamps[i], + timestamp: timestamps[i], }) } resultsMu.Unlock() diff --git a/lib/logstorage/filter_time.go b/lib/logstorage/filter_time.go index 1009657f68..dfe1a5788e 100644 --- a/lib/logstorage/filter_time.go +++ b/lib/logstorage/filter_time.go @@ -41,7 +41,7 @@ func (ft *filterTime) applyToBlockResult(br *blockResult, bm *bitmap) { return } if c.isTime { - timestamps := br.timestamps + timestamps := br.getTimestamps() bm.forEachSetBit(func(idx int) bool { timestamp := timestamps[idx] return ft.matchTimestampValue(timestamp) diff --git a/lib/logstorage/filter_week_range.go b/lib/logstorage/filter_week_range.go index c83ea89f91..3b17845eff 100644 --- a/lib/logstorage/filter_week_range.go +++ b/lib/logstorage/filter_week_range.go @@ -49,7 +49,7 @@ func (fr *filterWeekRange) applyToBlockResult(br *blockResult, bm *bitmap) { return } if c.isTime { - timestamps := br.timestamps + timestamps := br.getTimestamps() bm.forEachSetBit(func(idx int) bool { timestamp := timestamps[idx] return fr.matchTimestampValue(timestamp) diff --git a/lib/logstorage/pipe_copy.go b/lib/logstorage/pipe_copy.go index 1f1c128732..9970231673 100644 --- a/lib/logstorage/pipe_copy.go +++ b/lib/logstorage/pipe_copy.go @@ -79,7 +79,7 @@ type pipeCopyProcessor struct { } func (pcp *pipeCopyProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_delete.go b/lib/logstorage/pipe_delete.go index 15ef3c7ec2..e61fcfcc61 100644 --- a/lib/logstorage/pipe_delete.go +++ b/lib/logstorage/pipe_delete.go @@ -59,7 +59,7 @@ type pipeDeleteProcessor struct { } func (pdp *pipeDeleteProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_drop_empty_fields.go b/lib/logstorage/pipe_drop_empty_fields.go index 98f846f656..ba18ad65bc 100644 --- a/lib/logstorage/pipe_drop_empty_fields.go +++ b/lib/logstorage/pipe_drop_empty_fields.go @@ -66,7 +66,7 @@ type pipeDropEmptyFieldsProcessorShardNopad struct { } func (pdp *pipeDropEmptyFieldsProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -90,7 +90,7 @@ func (pdp *pipeDropEmptyFieldsProcessor) writeBlock(workerID uint, br *blockResu shard.wctx.init(workerID, pdp.ppNext) fields := shard.fields - for rowIdx := range br.timestamps { + for rowIdx := 0; rowIdx < br.rowsLen; rowIdx++ { fields = fields[:0] for i, values := range columnValues { v := values[rowIdx] diff --git a/lib/logstorage/pipe_extract.go b/lib/logstorage/pipe_extract.go index 2aeb49a3c2..89f518e310 100644 --- a/lib/logstorage/pipe_extract.go +++ b/lib/logstorage/pipe_extract.go @@ -151,7 +151,7 @@ type pipeExtractProcessorShardNopad struct { } func (pep *pipeExtractProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -159,7 +159,7 @@ func (pep *pipeExtractProcessor) writeBlock(workerID uint, br *blockResult) { shard := &pep.shards[workerID] bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() if iff := pe.iff; iff != nil { iff.f.applyToBlockResult(br, bm) diff --git a/lib/logstorage/pipe_extract_regexp.go b/lib/logstorage/pipe_extract_regexp.go index 1f7357b218..3ce6ee5033 100644 --- a/lib/logstorage/pipe_extract_regexp.go +++ b/lib/logstorage/pipe_extract_regexp.go @@ -175,7 +175,7 @@ type pipeExtractRegexpProcessorShardNopad struct { } func (pep *pipeExtractRegexpProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -183,7 +183,7 @@ func (pep *pipeExtractRegexpProcessor) writeBlock(workerID uint, br *blockResult shard := &pep.shards[workerID] bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() if iff := pe.iff; iff != nil { iff.f.applyToBlockResult(br, bm) diff --git a/lib/logstorage/pipe_field_names.go b/lib/logstorage/pipe_field_names.go index 177b3eb841..0ef824ed7d 100644 --- a/lib/logstorage/pipe_field_names.go +++ b/lib/logstorage/pipe_field_names.go @@ -94,7 +94,7 @@ func (shard *pipeFieldNamesProcessorShard) getM() map[string]*uint64 { } func (pfp *pipeFieldNamesProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -113,7 +113,7 @@ func (pfp *pipeFieldNamesProcessor) writeBlock(workerID uint, br *blockResult) { // Assume that the column is set for all the rows in the block. // This is much faster than reading all the column values and counting non-empty rows. - *pHits += uint64(len(br.timestamps)) + *pHits += uint64(br.rowsLen) } } diff --git a/lib/logstorage/pipe_fields.go b/lib/logstorage/pipe_fields.go index 0b4f4186e6..f08e5c608a 100644 --- a/lib/logstorage/pipe_fields.go +++ b/lib/logstorage/pipe_fields.go @@ -79,7 +79,7 @@ type pipeFieldsProcessor struct { } func (pfp *pipeFieldsProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_filter.go b/lib/logstorage/pipe_filter.go index 3dd22e5e0b..7b7308342a 100644 --- a/lib/logstorage/pipe_filter.go +++ b/lib/logstorage/pipe_filter.go @@ -83,14 +83,14 @@ type pipeFilterProcessorShardNopad struct { } func (pfp *pipeFilterProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } shard := &pfp.shards[workerID] bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() pfp.pf.f.applyToBlockResult(br, bm) if bm.areAllBitsSet() { diff --git a/lib/logstorage/pipe_format.go b/lib/logstorage/pipe_format.go index b6e80573ee..7658101866 100644 --- a/lib/logstorage/pipe_format.go +++ b/lib/logstorage/pipe_format.go @@ -136,7 +136,7 @@ type pipeFormatProcessorShardNopad struct { } func (pfp *pipeFormatProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -144,7 +144,7 @@ func (pfp *pipeFormatProcessor) writeBlock(workerID uint, br *blockResult) { pf := pfp.pf bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() if iff := pf.iff; iff != nil { iff.f.applyToBlockResult(br, bm) @@ -157,7 +157,7 @@ func (pfp *pipeFormatProcessor) writeBlock(workerID uint, br *blockResult) { shard.rc.name = pf.resultField resultColumn := br.getColumnByName(pf.resultField) - for rowIdx := range br.timestamps { + for rowIdx := 0; rowIdx < br.rowsLen; rowIdx++ { v := "" if bm.isSetBit(rowIdx) { v = shard.formatRow(pf, br, rowIdx) diff --git a/lib/logstorage/pipe_limit.go b/lib/logstorage/pipe_limit.go index 71ddac0980..6dec31baef 100644 --- a/lib/logstorage/pipe_limit.go +++ b/lib/logstorage/pipe_limit.go @@ -57,11 +57,11 @@ type pipeLimitProcessor struct { } func (plp *pipeLimitProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } - rowsProcessed := plp.rowsProcessed.Add(uint64(len(br.timestamps))) + rowsProcessed := plp.rowsProcessed.Add(uint64(br.rowsLen)) limit := plp.pl.limit if rowsProcessed <= limit { // Fast path - write all the rows to ppNext. @@ -73,7 +73,7 @@ func (plp *pipeLimitProcessor) writeBlock(workerID uint, br *blockResult) { } // Slow path - overflow. Write the remaining rows if needed. - rowsProcessed -= uint64(len(br.timestamps)) + rowsProcessed -= uint64(br.rowsLen) if rowsProcessed >= limit { // Nothing to write. There is no need in cancel() call, since it has been called by another goroutine. return diff --git a/lib/logstorage/pipe_math.go b/lib/logstorage/pipe_math.go index 7ce50bfb13..c3999351fb 100644 --- a/lib/logstorage/pipe_math.go +++ b/lib/logstorage/pipe_math.go @@ -293,12 +293,12 @@ func (shard *pipeMathProcessorShard) executeExpr(me *mathExpr, br *blockResult) rIdx := len(shard.rs) shard.rs = slicesutil.SetLength(shard.rs, len(shard.rs)+1) - shard.rsBuf = slicesutil.SetLength(shard.rsBuf, len(shard.rsBuf)+len(br.timestamps)) - shard.rs[rIdx] = shard.rsBuf[len(shard.rsBuf)-len(br.timestamps):] + shard.rsBuf = slicesutil.SetLength(shard.rsBuf, len(shard.rsBuf)+br.rowsLen) + shard.rs[rIdx] = shard.rsBuf[len(shard.rsBuf)-br.rowsLen:] if me.isConst { r := shard.rs[rIdx] - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { r[i] = me.constValue } return @@ -331,7 +331,7 @@ func (shard *pipeMathProcessorShard) executeExpr(me *mathExpr, br *blockResult) } func (pmp *pipeMathProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_offset.go b/lib/logstorage/pipe_offset.go index dc888f4e5b..5f3f923142 100644 --- a/lib/logstorage/pipe_offset.go +++ b/lib/logstorage/pipe_offset.go @@ -51,16 +51,16 @@ type pipeOffsetProcessor struct { } func (pop *pipeOffsetProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } - rowsProcessed := pop.rowsProcessed.Add(uint64(len(br.timestamps))) + rowsProcessed := pop.rowsProcessed.Add(uint64(br.rowsLen)) if rowsProcessed <= pop.po.offset { return } - rowsProcessed -= uint64(len(br.timestamps)) + rowsProcessed -= uint64(br.rowsLen) if rowsProcessed >= pop.po.offset { pop.ppNext.writeBlock(workerID, br) return diff --git a/lib/logstorage/pipe_pack.go b/lib/logstorage/pipe_pack.go index e911121a29..4093d27eea 100644 --- a/lib/logstorage/pipe_pack.go +++ b/lib/logstorage/pipe_pack.go @@ -64,7 +64,7 @@ type pipePackProcessorShardNopad struct { } func (ppp *pipePackProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -86,7 +86,7 @@ func (ppp *pipePackProcessor) writeBlock(workerID uint, br *blockResult) { buf := shard.buf[:0] fields := shard.fields - for rowIdx := range br.timestamps { + for rowIdx := 0; rowIdx < br.rowsLen; rowIdx++ { fields = fields[:0] for _, c := range cs { v := c.getValueAtRow(br, rowIdx) diff --git a/lib/logstorage/pipe_rename.go b/lib/logstorage/pipe_rename.go index ff85a65d8f..c35c409ee7 100644 --- a/lib/logstorage/pipe_rename.go +++ b/lib/logstorage/pipe_rename.go @@ -83,7 +83,7 @@ type pipeRenameProcessor struct { } func (prp *pipeRenameProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_sort.go b/lib/logstorage/pipe_sort.go index 07fa5d553b..caebb08b69 100644 --- a/lib/logstorage/pipe_sort.go +++ b/lib/logstorage/pipe_sort.go @@ -245,11 +245,11 @@ func (shard *pipeSortProcessorShard) writeBlock(br *blockResult) { shard.columnValues = columnValues // Generate byColumns - valuesEncoded := make([]string, len(br.timestamps)) + valuesEncoded := make([]string, br.rowsLen) shard.stateSizeBudget -= len(valuesEncoded) * int(unsafe.Sizeof(valuesEncoded[0])) bb := bbPool.Get() - for rowIdx := range br.timestamps { + for rowIdx := 0; rowIdx < br.rowsLen; rowIdx++ { // Marshal all the columns per each row into a single string // and sort rows by the resulting string. bb.B = bb.B[:0] @@ -267,8 +267,8 @@ func (shard *pipeSortProcessorShard) writeBlock(br *blockResult) { } bbPool.Put(bb) - i64Values := make([]int64, len(br.timestamps)) - f64Values := make([]float64, len(br.timestamps)) + i64Values := make([]int64, br.rowsLen) + f64Values := make([]float64, br.rowsLen) for i := range f64Values { f64Values[i] = nan } @@ -347,7 +347,7 @@ func (shard *pipeSortProcessorShard) writeBlock(br *blockResult) { blockIdx := len(shard.blocks) - 1 rowRefs := shard.rowRefs rowRefsLen := len(rowRefs) - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { rowRefs = append(rowRefs, sortRowRef{ blockIdx: blockIdx, rowIdx: i, @@ -405,7 +405,7 @@ func (shard *pipeSortProcessorShard) Less(i, j int) bool { } func (psp *pipeSortProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -686,8 +686,10 @@ func sortBlockLess(shardA *pipeSortProcessorShard, rowIdxA int, shardB *pipeSort if cA.c.isTime && cB.c.isTime { // Fast path - sort by _time - tA := bA.br.timestamps[rrA.rowIdx] - tB := bB.br.timestamps[rrB.rowIdx] + timestampsA := bA.br.getTimestamps() + timestampsB := bB.br.getTimestamps() + tA := timestampsA[rrA.rowIdx] + tB := timestampsB[rrB.rowIdx] if tA == tB { continue } diff --git a/lib/logstorage/pipe_sort_topk.go b/lib/logstorage/pipe_sort_topk.go index 6d9d26c208..5a25b34442 100644 --- a/lib/logstorage/pipe_sort_topk.go +++ b/lib/logstorage/pipe_sort_topk.go @@ -182,7 +182,8 @@ func (shard *pipeTopkProcessorShard) writeBlock(br *blockResult) { byColumns := shard.byColumns[:0] byColumnsIsTime := shard.byColumnsIsTime[:0] bb := bbPool.Get() - for rowIdx, timestamp := range br.timestamps { + timestamps := br.getTimestamps() + for rowIdx, timestamp := range timestamps { byColumns = byColumns[:0] bb.B = bb.B[:0] for i, values := range byColumnValues { @@ -234,7 +235,8 @@ func (shard *pipeTopkProcessorShard) writeBlock(br *blockResult) { // add rows to shard byColumns := shard.byColumns[:0] - for rowIdx, timestamp := range br.timestamps { + timestamps := br.getTimestamps() + for rowIdx, timestamp := range timestamps { byColumns = byColumns[:0] for i, values := range byColumnValues { @@ -307,7 +309,7 @@ func (shard *pipeTopkProcessorShard) sortRows(stopCh <-chan struct{}) { } func (ptp *pipeTopkProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_stats.go b/lib/logstorage/pipe_stats.go index c26b5a8f81..9d1906fd35 100644 --- a/lib/logstorage/pipe_stats.go +++ b/lib/logstorage/pipe_stats.go @@ -269,7 +269,7 @@ func (shard *pipeStatsProcessorShard) writeBlock(br *blockResult) { // Slower generic path for a column with different values. var psg *pipeStatsGroup keyBuf := shard.keyBuf[:0] - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { if i <= 0 || values[i-1] != values[i] { keyBuf = encoding.MarshalBytes(keyBuf[:0], bytesutil.ToUnsafeBytes(values[i])) psg = shard.getPipeStatsGroup(keyBuf) @@ -312,7 +312,7 @@ func (shard *pipeStatsProcessorShard) writeBlock(br *blockResult) { // The slowest path - group by multiple columns with different values across rows. var psg *pipeStatsGroup keyBuf := shard.keyBuf[:0] - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { // Verify whether the key for 'by (...)' fields equals the previous key sameValue := i > 0 for _, values := range columnValues { @@ -338,7 +338,7 @@ func (shard *pipeStatsProcessorShard) applyPerFunctionFilters(br *blockResult) { funcs := shard.ps.funcs for i := range funcs { bm := &shard.bms[i] - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() iff := funcs[i].iff @@ -400,7 +400,7 @@ func (psg *pipeStatsGroup) updateStatsForRow(bms []bitmap, br *blockResult, rowI } func (psp *pipeStatsProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_stream_context.go b/lib/logstorage/pipe_stream_context.go index b35824a2c4..679e193861 100644 --- a/lib/logstorage/pipe_stream_context.go +++ b/lib/logstorage/pipe_stream_context.go @@ -139,7 +139,8 @@ func getStreamRows(ctx context.Context, s *Storage, streamID string, minTimestam } cs := br.getColumns() - for i, timestamp := range br.timestamps { + timestamps := br.getTimestamps() + for i, timestamp := range timestamps { fields := make([]Field, len(cs)) stateSize += int(unsafe.Sizeof(fields[0])) * len(fields) @@ -210,7 +211,8 @@ func (shard *pipeStreamContextProcessorShard) writeBlock(br *blockResult) { cs := br.getColumns() cStreamID := br.getColumnByName("_stream_id") stateSize := 0 - for i, timestamp := range br.timestamps { + timestamps := br.getTimestamps() + for i, timestamp := range timestamps { fields := make([]Field, len(cs)) stateSize += int(unsafe.Sizeof(fields[0])) * len(fields) @@ -250,7 +252,7 @@ func (shard *pipeStreamContextProcessorShard) getM() map[string][]streamContextR } func (pcp *pipeStreamContextProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } if pcp.pc.linesBefore <= 0 && pcp.pc.linesAfter <= 0 { diff --git a/lib/logstorage/pipe_top.go b/lib/logstorage/pipe_top.go index 26eb55fb7a..6230ad161e 100644 --- a/lib/logstorage/pipe_top.go +++ b/lib/logstorage/pipe_top.go @@ -145,7 +145,7 @@ func (shard *pipeTopProcessorShard) writeBlock(br *blockResult) { // Take into account all the columns in br. keyBuf := shard.keyBuf cs := br.getColumns() - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { keyBuf = keyBuf[:0] for _, c := range cs { v := c.getValueAtRow(br, i) @@ -162,7 +162,7 @@ func (shard *pipeTopProcessorShard) writeBlock(br *blockResult) { c := br.getColumnByName(byFields[0]) if c.isConst { v := c.valuesEncoded[0] - shard.updateState(v, uint64(len(br.timestamps))) + shard.updateState(v, uint64(br.rowsLen)) return } if c.valueType == valueTypeDict { @@ -197,7 +197,7 @@ func (shard *pipeTopProcessorShard) writeBlock(br *blockResult) { shard.columnValues = columnValues keyBuf := shard.keyBuf - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { keyBuf = keyBuf[:0] for _, values := range columnValues { keyBuf = encoding.MarshalBytes(keyBuf, bytesutil.ToUnsafeBytes(values[i])) @@ -228,7 +228,7 @@ func (shard *pipeTopProcessorShard) getM() map[string]*uint64 { } func (ptp *pipeTopProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_uniq.go b/lib/logstorage/pipe_uniq.go index 8e33d7eb05..ef1b2985fb 100644 --- a/lib/logstorage/pipe_uniq.go +++ b/lib/logstorage/pipe_uniq.go @@ -147,7 +147,7 @@ func (shard *pipeUniqProcessorShard) writeBlock(br *blockResult) bool { // Take into account all the columns in br. keyBuf := shard.keyBuf cs := br.getColumns() - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { keyBuf = keyBuf[:0] for _, c := range cs { v := c.getValueAtRow(br, i) @@ -164,7 +164,7 @@ func (shard *pipeUniqProcessorShard) writeBlock(br *blockResult) bool { c := br.getColumnByName(byFields[0]) if c.isConst { v := c.valuesEncoded[0] - shard.updateState(v, uint64(len(br.timestamps))) + shard.updateState(v, uint64(br.rowsLen)) return true } if c.valueType == valueTypeDict { @@ -207,7 +207,7 @@ func (shard *pipeUniqProcessorShard) writeBlock(br *blockResult) bool { shard.columnValues = columnValues keyBuf := shard.keyBuf - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { seenValue := true for _, values := range columnValues { if needHits || i == 0 || values[i-1] != values[i] { @@ -251,7 +251,7 @@ func (shard *pipeUniqProcessorShard) getM() map[string]*uint64 { } func (pup *pipeUniqProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } diff --git a/lib/logstorage/pipe_unpack.go b/lib/logstorage/pipe_unpack.go index fbc4589f15..c4c53fca1f 100644 --- a/lib/logstorage/pipe_unpack.go +++ b/lib/logstorage/pipe_unpack.go @@ -148,7 +148,7 @@ type pipeUnpackProcessorShardNopad struct { } func (pup *pipeUnpackProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -157,7 +157,7 @@ func (pup *pipeUnpackProcessor) writeBlock(workerID uint, br *blockResult) { shard.uctx.init(pup.fieldPrefix) bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() if pup.iff != nil { pup.iff.f.applyToBlockResult(br, bm) @@ -172,7 +172,7 @@ func (pup *pipeUnpackProcessor) writeBlock(workerID uint, br *blockResult) { v := c.valuesEncoded[0] shard.uctx.resetFields() pup.unpackFunc(&shard.uctx, v) - for rowIdx := range br.timestamps { + for rowIdx := 0; rowIdx < br.rowsLen; rowIdx++ { if bm.isSetBit(rowIdx) { shard.wctx.writeRow(rowIdx, shard.uctx.fields) } else { diff --git a/lib/logstorage/pipe_unroll.go b/lib/logstorage/pipe_unroll.go index 11a0125298..edeb3d5d2f 100644 --- a/lib/logstorage/pipe_unroll.go +++ b/lib/logstorage/pipe_unroll.go @@ -106,7 +106,7 @@ type pipeUnrollProcessorShardNopad struct { } func (pup *pipeUnrollProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -115,7 +115,7 @@ func (pup *pipeUnrollProcessor) writeBlock(workerID uint, br *blockResult) { shard.wctx.init(workerID, pup.ppNext, false, false, br) bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() if iff := pu.iff; iff != nil { iff.f.applyToBlockResult(br, bm) @@ -133,7 +133,7 @@ func (pup *pipeUnrollProcessor) writeBlock(workerID uint, br *blockResult) { } fields := shard.fields - for rowIdx := range br.timestamps { + for rowIdx := 0; rowIdx < br.rowsLen; rowIdx++ { if bm.isSetBit(rowIdx) { if needStop(pup.stopCh) { return diff --git a/lib/logstorage/pipe_update.go b/lib/logstorage/pipe_update.go index 2684bd9a5e..15fc024150 100644 --- a/lib/logstorage/pipe_update.go +++ b/lib/logstorage/pipe_update.go @@ -62,14 +62,14 @@ type pipeUpdateProcessorShardNopad struct { } func (pup *pipeUpdateProcessor) writeBlock(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } shard := &pup.shards[workerID] bm := &shard.bm - bm.init(len(br.timestamps)) + bm.init(br.rowsLen) bm.setBits() if iff := pup.iff; iff != nil { iff.f.applyToBlockResult(br, bm) diff --git a/lib/logstorage/pipe_utils_test.go b/lib/logstorage/pipe_utils_test.go index 418f235bc5..5a638c38d1 100644 --- a/lib/logstorage/pipe_utils_test.go +++ b/lib/logstorage/pipe_utils_test.go @@ -136,7 +136,7 @@ func (pp *testPipeProcessor) writeBlock(_ uint, br *blockResult) { columnValues = append(columnValues, values) } - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { row := make([]Field, len(columnValues)) for j, values := range columnValues { r := &row[j] diff --git a/lib/logstorage/stats_count.go b/lib/logstorage/stats_count.go index 8b852ef0ec..9b7255c8ea 100644 --- a/lib/logstorage/stats_count.go +++ b/lib/logstorage/stats_count.go @@ -18,7 +18,7 @@ func (sc *statsCount) String() string { func (sc *statsCount) updateNeededFields(neededFields fieldsSet) { if len(sc.fields) == 0 { - // There is no need in fetching any columns for count(*) - the number of matching rows can be calculated as len(blockResult.timestamps) + // There is no need in fetching any columns for count(*) - the number of matching rows can be calculated as blockResult.rowsLen return } neededFields.addFields(sc.fields) @@ -41,7 +41,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { fields := scp.sc.fields if len(fields) == 0 { // Fast path - unconditionally count all the columns. - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 } if len(fields) == 1 { @@ -49,12 +49,12 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { c := br.getColumnByName(fields[0]) if c.isConst { if c.valuesEncoded[0] != "" { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) } return 0 } if c.isTime { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 } switch c.valueType { @@ -68,7 +68,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { case valueTypeDict: zeroDictIdx := slices.Index(c.dictValues, "") if zeroDictIdx < 0 { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 } for _, v := range c.getValuesEncoded(br) { @@ -78,7 +78,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { } return 0 case valueTypeUint8, valueTypeUint16, valueTypeUint32, valueTypeUint64, valueTypeFloat64, valueTypeIPv4, valueTypeTimestampISO8601: - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 default: logger.Panicf("BUG: unknown valueType=%d", c.valueType) @@ -87,7 +87,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { } // Slow path - count rows containing at least a single non-empty value for the fields enumerated inside count(). - bm := getBitmap(len(br.timestamps)) + bm := getBitmap(br.rowsLen) defer putBitmap(bm) bm.setBits() @@ -95,13 +95,13 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { c := br.getColumnByName(f) if c.isConst { if c.valuesEncoded[0] != "" { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 } continue } if c.isTime { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 } @@ -113,7 +113,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { }) case valueTypeDict: if !slices.Contains(c.dictValues, "") { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 } valuesEncoded := c.getValuesEncoded(br) @@ -122,7 +122,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { return c.dictValues[dictIdx] == "" }) case valueTypeUint8, valueTypeUint16, valueTypeUint32, valueTypeUint64, valueTypeFloat64, valueTypeIPv4, valueTypeTimestampISO8601: - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) return 0 default: logger.Panicf("BUG: unknown valueType=%d", c.valueType) @@ -130,7 +130,7 @@ func (scp *statsCountProcessor) updateStatsForAllRows(br *blockResult) int { } } - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) scp.rowsCount -= uint64(bm.onesCount()) return 0 } diff --git a/lib/logstorage/stats_count_empty.go b/lib/logstorage/stats_count_empty.go index 69c180911d..9d21930801 100644 --- a/lib/logstorage/stats_count_empty.go +++ b/lib/logstorage/stats_count_empty.go @@ -36,7 +36,7 @@ type statsCountEmptyProcessor struct { func (scp *statsCountEmptyProcessor) updateStatsForAllRows(br *blockResult) int { fields := scp.sc.fields if len(fields) == 0 { - bm := getBitmap(len(br.timestamps)) + bm := getBitmap(br.rowsLen) bm.setBits() for _, c := range br.getColumns() { values := c.getValues(br) @@ -53,7 +53,7 @@ func (scp *statsCountEmptyProcessor) updateStatsForAllRows(br *blockResult) int c := br.getColumnByName(fields[0]) if c.isConst { if c.valuesEncoded[0] == "" { - scp.rowsCount += uint64(len(br.timestamps)) + scp.rowsCount += uint64(br.rowsLen) } return 0 } @@ -88,7 +88,7 @@ func (scp *statsCountEmptyProcessor) updateStatsForAllRows(br *blockResult) int } // Slow path - count rows containing empty value for all the fields enumerated inside count_empty(). - bm := getBitmap(len(br.timestamps)) + bm := getBitmap(br.rowsLen) defer putBitmap(bm) bm.setBits() diff --git a/lib/logstorage/stats_count_uniq.go b/lib/logstorage/stats_count_uniq.go index f61d461dbf..b7aa87e4eb 100644 --- a/lib/logstorage/stats_count_uniq.go +++ b/lib/logstorage/stats_count_uniq.go @@ -64,7 +64,7 @@ func (sup *statsCountUniqProcessor) updateStatsForAllRows(br *blockResult) int { sup.columnValues = columnValues keyBuf := sup.keyBuf[:0] - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { seenKey := true for _, values := range columnValues { if i == 0 || values[i-1] != values[i] { @@ -103,8 +103,8 @@ func (sup *statsCountUniqProcessor) updateStatsForAllRows(br *blockResult) int { // This guarantees that keys do not clash for different column types across blocks. c := br.getColumnByName(fields[0]) if c.isTime { - // Count unique br.timestamps - timestamps := br.timestamps + // Count unique timestamps + timestamps := br.getTimestamps() keyBuf := sup.keyBuf[:0] for i, timestamp := range timestamps { if i > 0 && timestamps[i-1] == timestamps[i] { @@ -180,7 +180,7 @@ func (sup *statsCountUniqProcessor) updateStatsForAllRows(br *blockResult) int { sup.columnValues = columnValues keyBuf := sup.keyBuf[:0] - for i := range br.timestamps { + for i := 0; i < br.rowsLen; i++ { seenKey := true for _, values := range columnValues { if i == 0 || values[i-1] != values[i] { @@ -247,10 +247,11 @@ func (sup *statsCountUniqProcessor) updateStatsForRow(br *blockResult, rowIdx in // This guarantees that keys do not clash for different column types across blocks. c := br.getColumnByName(fields[0]) if c.isTime { - // Count unique br.timestamps + // Count unique timestamps + timestamps := br.getTimestamps() keyBuf := sup.keyBuf[:0] keyBuf = append(keyBuf[:0], 1) - keyBuf = encoding.MarshalInt64(keyBuf, br.timestamps[rowIdx]) + keyBuf = encoding.MarshalInt64(keyBuf, timestamps[rowIdx]) stateSizeIncrease += sup.updateState(keyBuf) sup.keyBuf = keyBuf return stateSizeIncrease diff --git a/lib/logstorage/stats_max.go b/lib/logstorage/stats_max.go index c92cd7a754..22eb0cbeec 100644 --- a/lib/logstorage/stats_max.go +++ b/lib/logstorage/stats_max.go @@ -80,20 +80,12 @@ func (smp *statsMaxProcessor) mergeState(sfp statsProcessor) { } func (smp *statsMaxProcessor) updateStateForColumn(br *blockResult, c *blockResultColumn) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } if c.isTime { - // Special case for time column - timestamps := br.timestamps - maxTimestamp := timestamps[len(timestamps)-1] - for _, timestamp := range timestamps[:len(timestamps)-1] { - if timestamp > maxTimestamp { - maxTimestamp = timestamp - } - } - + maxTimestamp := br.getMaxTimestamp() bb := bbPool.Get() bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], maxTimestamp) smp.updateStateBytes(bb.B) diff --git a/lib/logstorage/stats_min.go b/lib/logstorage/stats_min.go index fe9890dabc..4be8d550e0 100644 --- a/lib/logstorage/stats_min.go +++ b/lib/logstorage/stats_min.go @@ -82,20 +82,12 @@ func (smp *statsMinProcessor) mergeState(sfp statsProcessor) { } func (smp *statsMinProcessor) updateStateForColumn(br *blockResult, c *blockResultColumn) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } if c.isTime { - // Special case for time column - timestamps := br.timestamps - minTimestamp := timestamps[0] - for _, timestamp := range timestamps[1:] { - if timestamp < minTimestamp { - minTimestamp = timestamp - } - } - + minTimestamp := br.getMinTimestamp() bb := bbPool.Get() bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], minTimestamp) smp.updateStateBytes(bb.B) diff --git a/lib/logstorage/stats_quantile.go b/lib/logstorage/stats_quantile.go index 4bf988f284..16c8446d6c 100644 --- a/lib/logstorage/stats_quantile.go +++ b/lib/logstorage/stats_quantile.go @@ -96,7 +96,7 @@ func (sqp *statsQuantileProcessor) updateStateForColumn(br *blockResult, c *bloc if c.isConst { f, ok := tryParseFloat64(c.valuesEncoded[0]) if ok { - for range br.timestamps { + for i := 0; i < br.rowsLen; i++ { stateSizeIncrease += h.update(f) } } diff --git a/lib/logstorage/stats_row_any.go b/lib/logstorage/stats_row_any.go index 0060189ce9..04942c6625 100644 --- a/lib/logstorage/stats_row_any.go +++ b/lib/logstorage/stats_row_any.go @@ -39,7 +39,7 @@ type statsRowAnyProcessor struct { } func (sap *statsRowAnyProcessor) updateStatsForAllRows(br *blockResult) int { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return 0 } if sap.captured { diff --git a/lib/logstorage/stats_row_max.go b/lib/logstorage/stats_row_max.go index 31c3689a98..9982abebd9 100644 --- a/lib/logstorage/stats_row_max.go +++ b/lib/logstorage/stats_row_max.go @@ -60,8 +60,9 @@ func (smp *statsRowMaxProcessor) updateStatsForAllRows(br *blockResult) int { return stateSizeIncrease } if c.isTime { + maxTimestamp := br.getMaxTimestamp() bb := bbPool.Get() - bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], br.timestamps[0]) + bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], maxTimestamp) v := bytesutil.ToUnsafeString(bb.B) stateSizeIncrease += smp.updateState(v, br, 0) bbPool.Put(bb) @@ -124,8 +125,9 @@ func (smp *statsRowMaxProcessor) updateStatsForRow(br *blockResult, rowIdx int) return stateSizeIncrease } if c.isTime { + timestamps := br.getTimestamps() bb := bbPool.Get() - bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], br.timestamps[rowIdx]) + bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], timestamps[rowIdx]) v := bytesutil.ToUnsafeString(bb.B) stateSizeIncrease += smp.updateState(v, br, rowIdx) bbPool.Put(bb) diff --git a/lib/logstorage/stats_row_min.go b/lib/logstorage/stats_row_min.go index 66415dd902..e0f724b792 100644 --- a/lib/logstorage/stats_row_min.go +++ b/lib/logstorage/stats_row_min.go @@ -60,8 +60,9 @@ func (smp *statsRowMinProcessor) updateStatsForAllRows(br *blockResult) int { return stateSizeIncrease } if c.isTime { + minTimestamp := br.getMinTimestamp() bb := bbPool.Get() - bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], br.timestamps[0]) + bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], minTimestamp) v := bytesutil.ToUnsafeString(bb.B) stateSizeIncrease += smp.updateState(v, br, 0) bbPool.Put(bb) @@ -124,8 +125,9 @@ func (smp *statsRowMinProcessor) updateStatsForRow(br *blockResult, rowIdx int) return stateSizeIncrease } if c.isTime { + timestamps := br.getTimestamps() bb := bbPool.Get() - bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], br.timestamps[rowIdx]) + bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], timestamps[rowIdx]) v := bytesutil.ToUnsafeString(bb.B) stateSizeIncrease += smp.updateState(v, br, rowIdx) bbPool.Put(bb) diff --git a/lib/logstorage/stats_values.go b/lib/logstorage/stats_values.go index ceab489983..aab5475d5b 100644 --- a/lib/logstorage/stats_values.go +++ b/lib/logstorage/stats_values.go @@ -64,12 +64,12 @@ func (svp *statsValuesProcessor) updateStatsForAllRowsColumn(c *blockResultColum stateSizeIncrease += len(v) values := svp.values - for range br.timestamps { + for i := 0; i < br.rowsLen; i++ { values = append(values, v) } svp.values = values - stateSizeIncrease += len(br.timestamps) * int(unsafe.Sizeof(values[0])) + stateSizeIncrease += br.rowsLen * int(unsafe.Sizeof(values[0])) return stateSizeIncrease } if c.valueType == valueTypeDict { @@ -86,7 +86,7 @@ func (svp *statsValuesProcessor) updateStatsForAllRowsColumn(c *blockResultColum } svp.values = values - stateSizeIncrease += len(br.timestamps) * int(unsafe.Sizeof(values[0])) + stateSizeIncrease += br.rowsLen * int(unsafe.Sizeof(values[0])) return stateSizeIncrease } @@ -100,7 +100,7 @@ func (svp *statsValuesProcessor) updateStatsForAllRowsColumn(c *blockResultColum } svp.values = values - stateSizeIncrease += len(br.timestamps) * int(unsafe.Sizeof(values[0])) + stateSizeIncrease += br.rowsLen * int(unsafe.Sizeof(values[0])) return stateSizeIncrease } diff --git a/lib/logstorage/storage_search.go b/lib/logstorage/storage_search.go index 3f9185f54d..58724fa587 100644 --- a/lib/logstorage/storage_search.go +++ b/lib/logstorage/storage_search.go @@ -86,7 +86,7 @@ func (s *Storage) RunQuery(ctx context.Context, tenantIDs []TenantID, q *Query, } writeBlockResult := func(workerID uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -101,7 +101,9 @@ func (s *Storage) RunQuery(ctx context.Context, tenantIDs []TenantID, q *Query, Values: values, }) } - writeBlock(workerID, br.timestamps, csDst) + + timestamps := br.getTimestamps() + writeBlock(workerID, timestamps, csDst) brs.cs = csDst putBlockRows(brs) @@ -233,7 +235,7 @@ func (s *Storage) getFieldValuesNoHits(ctx context.Context, tenantIDs []TenantID var values []string var valuesLock sync.Mutex writeBlockResult := func(_ uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -396,7 +398,7 @@ func (s *Storage) runValuesWithHitsQuery(ctx context.Context, tenantIDs []Tenant var results []ValueWithHits var resultsLock sync.Mutex writeBlockResult := func(_ uint, br *blockResult) { - if len(br.timestamps) == 0 { + if br.rowsLen == 0 { return } @@ -656,7 +658,7 @@ func (s *Storage) search(workersCount int, so *genericSearchOptions, stopCh <-ch } bs.search(bsw, bm) - if len(bs.br.timestamps) > 0 { + if bs.br.rowsLen > 0 { processBlockResult(workerID, &bs.br) } bsw.reset() diff --git a/lib/logstorage/storage_search_test.go b/lib/logstorage/storage_search_test.go index be39d2d05b..0dd9d4f6af 100644 --- a/lib/logstorage/storage_search_test.go +++ b/lib/logstorage/storage_search_test.go @@ -876,7 +876,7 @@ func TestStorageSearch(t *testing.T) { so := newTestGenericSearchOptions([]TenantID{tenantID}, f, []string{"_msg"}) var rowsCountTotal atomic.Uint32 processBlock := func(_ uint, br *blockResult) { - rowsCountTotal.Add(uint32(len(br.timestamps))) + rowsCountTotal.Add(uint32(br.rowsLen)) } s.search(workersCount, so, nil, processBlock) @@ -893,7 +893,7 @@ func TestStorageSearch(t *testing.T) { so := newTestGenericSearchOptions(allTenantIDs, f, []string{"_msg"}) var rowsCountTotal atomic.Uint32 processBlock := func(_ uint, br *blockResult) { - rowsCountTotal.Add(uint32(len(br.timestamps))) + rowsCountTotal.Add(uint32(br.rowsLen)) } s.search(workersCount, so, nil, processBlock) @@ -926,7 +926,7 @@ func TestStorageSearch(t *testing.T) { so := newTestGenericSearchOptions([]TenantID{tenantID}, f, []string{"_msg"}) var rowsCountTotal atomic.Uint32 processBlock := func(_ uint, br *blockResult) { - rowsCountTotal.Add(uint32(len(br.timestamps))) + rowsCountTotal.Add(uint32(br.rowsLen)) } s.search(workersCount, so, nil, processBlock) @@ -948,7 +948,7 @@ func TestStorageSearch(t *testing.T) { so := newTestGenericSearchOptions([]TenantID{tenantID}, f, []string{"_msg"}) var rowsCountTotal atomic.Uint32 processBlock := func(_ uint, br *blockResult) { - rowsCountTotal.Add(uint32(len(br.timestamps))) + rowsCountTotal.Add(uint32(br.rowsLen)) } s.search(workersCount, so, nil, processBlock) @@ -978,7 +978,7 @@ func TestStorageSearch(t *testing.T) { so := newTestGenericSearchOptions([]TenantID{tenantID}, f, []string{"_msg"}) var rowsCountTotal atomic.Uint32 processBlock := func(_ uint, br *blockResult) { - rowsCountTotal.Add(uint32(len(br.timestamps))) + rowsCountTotal.Add(uint32(br.rowsLen)) } s.search(workersCount, so, nil, processBlock) @@ -999,7 +999,7 @@ func TestStorageSearch(t *testing.T) { so := newTestGenericSearchOptions([]TenantID{tenantID}, f, []string{"_msg"}) var rowsCountTotal atomic.Uint32 processBlock := func(_ uint, br *blockResult) { - rowsCountTotal.Add(uint32(len(br.timestamps))) + rowsCountTotal.Add(uint32(br.rowsLen)) } s.search(workersCount, so, nil, processBlock) From 65b93b17b1a87c970184f026e34ee735613e10b5 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 25 Sep 2024 16:59:58 +0200 Subject: [PATCH 099/128] lib/logstorage: lazily read column headers metadata during queries This improves performance for analytical queries, which do not need column headers metadata. For example, the following query doesn't need column headers metadata, since _stream and min(_time) are stored in block header, which is read separately from colum headers metadata: _time:1w | stats by (_stream) min(_time) min_time This commit significantly improves the performance for this query. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070 --- lib/logstorage/block_result.go | 15 ++++++++------ lib/logstorage/block_search.go | 25 ++++++++++++++++++------ lib/logstorage/filter_and.go | 5 +++-- lib/logstorage/filter_any_case_phrase.go | 5 +++-- lib/logstorage/filter_any_case_prefix.go | 5 +++-- lib/logstorage/filter_exact.go | 5 +++-- lib/logstorage/filter_exact_prefix.go | 5 +++-- lib/logstorage/filter_in.go | 5 +++-- lib/logstorage/filter_ipv4_range.go | 5 +++-- lib/logstorage/filter_len_range.go | 5 +++-- lib/logstorage/filter_or.go | 5 +++-- lib/logstorage/filter_phrase.go | 5 +++-- lib/logstorage/filter_prefix.go | 5 +++-- lib/logstorage/filter_range.go | 5 +++-- lib/logstorage/filter_regexp.go | 5 +++-- lib/logstorage/filter_sequence.go | 5 +++-- lib/logstorage/filter_string_range.go | 5 +++-- 17 files changed, 73 insertions(+), 42 deletions(-) diff --git a/lib/logstorage/block_result.go b/lib/logstorage/block_result.go index a4e14f6950..1d55f94118 100644 --- a/lib/logstorage/block_result.go +++ b/lib/logstorage/block_result.go @@ -305,10 +305,11 @@ func (br *blockResult) initAllColumns() { if !slices.Contains(unneededColumnNames, "_msg") { // Add _msg column - v := br.bs.csh.getConstColumnValue("_msg") + csh := br.bs.getColumnsHeader() + v := csh.getConstColumnValue("_msg") if v != "" { br.addConstColumn("_msg", v) - } else if ch := br.bs.csh.getColumnHeader("_msg"); ch != nil { + } else if ch := csh.getColumnHeader("_msg"); ch != nil { br.addColumn(ch) } else { br.addConstColumn("_msg", "") @@ -316,7 +317,8 @@ func (br *blockResult) initAllColumns() { } // Add other const columns - for _, cc := range br.bs.csh.constColumns { + csh := br.bs.getColumnsHeader() + for _, cc := range csh.constColumns { if isMsgFieldName(cc.Name) { continue } @@ -326,7 +328,7 @@ func (br *blockResult) initAllColumns() { } // Add other non-const columns - chs := br.bs.csh.columnHeaders + chs := csh.columnHeaders for i := range chs { ch := &chs[i] if isMsgFieldName(ch.name) { @@ -355,10 +357,11 @@ func (br *blockResult) initRequestedColumns() { case "_time": br.addTimeColumn() default: - v := br.bs.csh.getConstColumnValue(columnName) + csh := br.bs.getColumnsHeader() + v := csh.getConstColumnValue(columnName) if v != "" { br.addConstColumn(columnName, v) - } else if ch := br.bs.csh.getColumnHeader(columnName); ch != nil { + } else if ch := csh.getColumnHeader(columnName); ch != nil { br.addColumn(ch) } else { br.addConstColumn(columnName, "") diff --git a/lib/logstorage/block_search.go b/lib/logstorage/block_search.go index d260ba2642..80b708a4ce 100644 --- a/lib/logstorage/block_search.go +++ b/lib/logstorage/block_search.go @@ -113,10 +113,15 @@ type blockSearch struct { // sbu is used for unmarshaling local columns sbu stringsBlockUnmarshaler - // csh is the columnsHeader associated with the given block - csh columnsHeader + // cshCached is the columnsHeader associated with the given block + // + // it is initialized lazily by calling getColumnsHeader(). + cshCached columnsHeader - // a is used for storing unmarshaled data in csh + // cshInitialized is set to true if cshCached is initialized. + cshInitialized bool + + // a is used for storing unmarshaled data in cshCached a arena // seenStreams contains seen streamIDs for the recent searches. @@ -146,7 +151,10 @@ func (bs *blockSearch) reset() { } bs.sbu.reset() - bs.csh.reset() + + bs.cshCached.reset() + bs.cshInitialized = false + bs.a.reset() // Do not reset seenStreams, since its' lifetime is managed by blockResult.addStreamColumn() code. @@ -161,8 +169,6 @@ func (bs *blockSearch) search(bsw *blockSearchWork, bm *bitmap) { bs.bsw = bsw - bs.csh.initFromBlockHeader(&bs.a, bsw.p, &bsw.bh) - // search rows matching the given filter bm.init(int(bsw.bh.rowsCount)) bm.setBits() @@ -183,6 +189,13 @@ func (bs *blockSearch) search(bsw *blockSearchWork, bm *bitmap) { } } +func (bs *blockSearch) getColumnsHeader() *columnsHeader { + if !bs.cshInitialized { + bs.cshCached.initFromBlockHeader(&bs.a, bs.bsw.p, &bs.bsw.bh) + } + return &bs.cshCached +} + func (csh *columnsHeader) initFromBlockHeader(a *arena, p *part, bh *blockHeader) { bb := longTermBufPool.Get() columnsHeaderSize := bh.columnsHeaderSize diff --git a/lib/logstorage/filter_and.go b/lib/logstorage/filter_and.go index cf0fa8db28..3d0ac20919 100644 --- a/lib/logstorage/filter_and.go +++ b/lib/logstorage/filter_and.go @@ -81,7 +81,8 @@ func (fa *filterAnd) matchBloomFilters(bs *blockSearch) bool { fieldName := ft.field tokens := ft.tokens - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if matchStringByAllTokens(v, tokens) { continue @@ -89,7 +90,7 @@ func (fa *filterAnd) matchBloomFilters(bs *blockSearch) bool { return false } - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { return false } diff --git a/lib/logstorage/filter_any_case_phrase.go b/lib/logstorage/filter_any_case_phrase.go index 8c3c924c71..63f2ee338e 100644 --- a/lib/logstorage/filter_any_case_phrase.go +++ b/lib/logstorage/filter_any_case_phrase.go @@ -86,7 +86,8 @@ func (fp *filterAnyCasePhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { phraseLowercase := fp.getPhraseLowercase() // Verify whether fp matches const column - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchAnyCasePhrase(v, phraseLowercase) { bm.resetBits() @@ -95,7 +96,7 @@ func (fp *filterAnyCasePhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether fp matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. // It matches anything only for empty phrase. diff --git a/lib/logstorage/filter_any_case_prefix.go b/lib/logstorage/filter_any_case_prefix.go index 10561c18ef..1e569612d4 100644 --- a/lib/logstorage/filter_any_case_prefix.go +++ b/lib/logstorage/filter_any_case_prefix.go @@ -90,7 +90,8 @@ func (fp *filterAnyCasePrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { prefixLowercase := fp.getPrefixLowercase() // Verify whether fp matches const column - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchAnyCasePrefix(v, prefixLowercase) { bm.resetBits() @@ -99,7 +100,7 @@ func (fp *filterAnyCasePrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether fp matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. bm.resetBits() diff --git a/lib/logstorage/filter_exact.go b/lib/logstorage/filter_exact.go index 70c119aba3..3d73590476 100644 --- a/lib/logstorage/filter_exact.go +++ b/lib/logstorage/filter_exact.go @@ -174,7 +174,8 @@ func (fe *filterExact) applyToBlockSearch(bs *blockSearch, bm *bitmap) { fieldName := fe.fieldName value := fe.value - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if value != v { bm.resetBits() @@ -183,7 +184,7 @@ func (fe *filterExact) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. // It matches anything only for empty value. diff --git a/lib/logstorage/filter_exact_prefix.go b/lib/logstorage/filter_exact_prefix.go index 7c241841c9..bf894166f3 100644 --- a/lib/logstorage/filter_exact_prefix.go +++ b/lib/logstorage/filter_exact_prefix.go @@ -51,7 +51,8 @@ func (fep *filterExactPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { fieldName := fep.fieldName prefix := fep.prefix - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchExactPrefix(v, prefix) { bm.resetBits() @@ -60,7 +61,7 @@ func (fep *filterExactPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. if !matchExactPrefix("", prefix) { diff --git a/lib/logstorage/filter_in.go b/lib/logstorage/filter_in.go index a230d3708b..0c062f28d3 100644 --- a/lib/logstorage/filter_in.go +++ b/lib/logstorage/filter_in.go @@ -358,7 +358,8 @@ func (fi *filterIn) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { stringValues := fi.getStringValues() if _, ok := stringValues[v]; !ok { @@ -368,7 +369,7 @@ func (fi *filterIn) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. // It matches anything only for empty phrase. diff --git a/lib/logstorage/filter_ipv4_range.go b/lib/logstorage/filter_ipv4_range.go index 87eb034d5d..a382cd5deb 100644 --- a/lib/logstorage/filter_ipv4_range.go +++ b/lib/logstorage/filter_ipv4_range.go @@ -102,7 +102,8 @@ func (fr *filterIPv4Range) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchIPv4Range(v, minValue, maxValue) { bm.resetBits() @@ -111,7 +112,7 @@ func (fr *filterIPv4Range) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. bm.resetBits() diff --git a/lib/logstorage/filter_len_range.go b/lib/logstorage/filter_len_range.go index 85a1e2f36d..b80ab877e5 100644 --- a/lib/logstorage/filter_len_range.go +++ b/lib/logstorage/filter_len_range.go @@ -125,7 +125,8 @@ func (fr *filterLenRange) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchLenRange(v, minLen, maxLen) { bm.resetBits() @@ -134,7 +135,7 @@ func (fr *filterLenRange) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. if !matchLenRange("", minLen, maxLen) { diff --git a/lib/logstorage/filter_or.go b/lib/logstorage/filter_or.go index 39e49a0d66..7e67717ef4 100644 --- a/lib/logstorage/filter_or.go +++ b/lib/logstorage/filter_or.go @@ -93,7 +93,8 @@ func (fo *filterOr) matchBloomFilters(bs *blockSearch) bool { fieldName := ft.field tokens := ft.tokens - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if matchStringByAllTokens(v, tokens) { return true @@ -101,7 +102,7 @@ func (fo *filterOr) matchBloomFilters(bs *blockSearch) bool { continue } - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { continue } diff --git a/lib/logstorage/filter_phrase.go b/lib/logstorage/filter_phrase.go index aa73d8414c..676711b527 100644 --- a/lib/logstorage/filter_phrase.go +++ b/lib/logstorage/filter_phrase.go @@ -61,7 +61,8 @@ func (fp *filterPhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { phrase := fp.phrase // Verify whether fp matches const column - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchPhrase(v, phrase) { bm.resetBits() @@ -70,7 +71,7 @@ func (fp *filterPhrase) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether fp matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. // It matches anything only for empty phrase. diff --git a/lib/logstorage/filter_prefix.go b/lib/logstorage/filter_prefix.go index 4d0f75fde0..a6a086c006 100644 --- a/lib/logstorage/filter_prefix.go +++ b/lib/logstorage/filter_prefix.go @@ -59,7 +59,8 @@ func (fp *filterPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { prefix := fp.prefix // Verify whether fp matches const column - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchPrefix(v, prefix) { bm.resetBits() @@ -68,7 +69,7 @@ func (fp *filterPrefix) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether fp matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. bm.resetBits() diff --git a/lib/logstorage/filter_range.go b/lib/logstorage/filter_range.go index 8776730bb1..b173c2deb9 100644 --- a/lib/logstorage/filter_range.go +++ b/lib/logstorage/filter_range.go @@ -173,7 +173,8 @@ func (fr *filterRange) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchRange(v, minValue, maxValue) { bm.resetBits() @@ -182,7 +183,7 @@ func (fr *filterRange) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. bm.resetBits() diff --git a/lib/logstorage/filter_regexp.go b/lib/logstorage/filter_regexp.go index df8e59733c..de9121ea1b 100644 --- a/lib/logstorage/filter_regexp.go +++ b/lib/logstorage/filter_regexp.go @@ -78,7 +78,8 @@ func (fr *filterRegexp) applyToBlockSearch(bs *blockSearch, bm *bitmap) { re := fr.re // Verify whether filter matches const column - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !re.MatchString(v) { bm.resetBits() @@ -87,7 +88,7 @@ func (fr *filterRegexp) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. if !re.MatchString("") { diff --git a/lib/logstorage/filter_sequence.go b/lib/logstorage/filter_sequence.go index 1fda32d05d..fd8cdccc53 100644 --- a/lib/logstorage/filter_sequence.go +++ b/lib/logstorage/filter_sequence.go @@ -87,7 +87,8 @@ func (fs *filterSequence) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchSequence(v, phrases) { bm.resetBits() @@ -96,7 +97,7 @@ func (fs *filterSequence) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { // Fast path - there are no matching columns. // It matches anything only for empty phrase. diff --git a/lib/logstorage/filter_string_range.go b/lib/logstorage/filter_string_range.go index f7518c7236..071ade0be9 100644 --- a/lib/logstorage/filter_string_range.go +++ b/lib/logstorage/filter_string_range.go @@ -52,7 +52,8 @@ func (fr *filterStringRange) applyToBlockSearch(bs *blockSearch, bm *bitmap) { return } - v := bs.csh.getConstColumnValue(fieldName) + csh := bs.getColumnsHeader() + v := csh.getConstColumnValue(fieldName) if v != "" { if !matchStringRange(v, minValue, maxValue) { bm.resetBits() @@ -61,7 +62,7 @@ func (fr *filterStringRange) applyToBlockSearch(bs *blockSearch, bm *bitmap) { } // Verify whether filter matches other columns - ch := bs.csh.getColumnHeader(fieldName) + ch := csh.getColumnHeader(fieldName) if ch == nil { if !matchStringRange("", minValue, maxValue) { bm.resetBits() From e9950f63076eba22d34a8fb85913c5c21aad4496 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 25 Sep 2024 19:15:32 +0200 Subject: [PATCH 100/128] lib/logstorage: add `blocks_count` pipe This pipe is useful for debugging purposes when the number of processed blocks must be calculated for the given query: | blocks_count This helps detecting the root cause of query performance slowdown in cases like https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070 --- docs/VictoriaLogs/CHANGELOG.md | 1 + docs/VictoriaLogs/LogsQL.md | 5 + lib/logstorage/parser.go | 3 +- lib/logstorage/parser_test.go | 30 +++++ lib/logstorage/pipe.go | 7 ++ lib/logstorage/pipe_blocks_count.go | 136 +++++++++++++++++++++++ lib/logstorage/pipe_blocks_count_test.go | 48 ++++++++ lib/logstorage/pipe_field_names.go | 2 +- 8 files changed, 230 insertions(+), 2 deletions(-) create mode 100644 lib/logstorage/pipe_blocks_count.go create mode 100644 lib/logstorage/pipe_blocks_count_test.go diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 7c40abde59..4a88ee19e9 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -17,6 +17,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add button for enabling auto refresh, similarly to VictoriaMetrics vmui. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7017). * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). +* FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index a503296232..5e2ee15a8c 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -1281,6 +1281,7 @@ _time:5m | stats by (_stream) count() per_stream_logs | sort by (per_stream_logs LogsQL supports the following pipes: +- [`blocks_count`](#blocks_count-pipe) counts the number of blocks with logs processed by the query. - [`copy`](#copy-pipe) copies [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). - [`delete`](#delete-pipe) deletes [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). - [`drop_empty_fields`](#drop_empty_fields-pipe) drops [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) with empty values. @@ -1310,6 +1311,10 @@ LogsQL supports the following pipes: - [`unpack_syslog`](#unpack_syslog-pipe) unpacks [syslog](https://en.wikipedia.org/wiki/Syslog) messages from [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). - [`unroll`](#unroll-pipe) unrolls JSON arrays from [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). +### blocks_count + +` | blocks_count` [pipe](#pipes) counts the number of blocks with logs processed by ``. This pipe is needed mostly for debugging. + ### copy pipe If some [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) must be copied, then `| copy src1 as dst1, ..., srcN as dstN` [pipe](#pipes) can be used. diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 58ce041b54..ea42a1688f 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -350,7 +350,8 @@ func (q *Query) Clone() *Query { func (q *Query) CanReturnLastNResults() bool { for _, p := range q.pipes { switch p.(type) { - case *pipeFieldNames, + case *pipeBlocksCount, + *pipeFieldNames, *pipeFieldValues, *pipeLimit, *pipeOffset, diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index ca78dd1f5f..3526446328 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -967,6 +967,12 @@ func TestParseQuerySuccess(t *testing.T) { // field_names pipe f(`foo | field_names as x`, `foo | field_names as x`) f(`foo | field_names y`, `foo | field_names as y`) + f(`foo | field_names`, `foo | field_names`) + + // blocks_count pipe + f(`foo | blocks_count as x`, `foo | blocks_count as x`) + f(`foo | blocks_count y`, `foo | blocks_count as y`) + f(`foo | blocks_count`, `foo | blocks_count`) // copy and cp pipe f(`* | copy foo as bar`, `* | copy foo as bar`) @@ -1458,6 +1464,17 @@ func TestParseQueryFailure(t *testing.T) { f(`foo | field_names x y`) f(`foo | field_names x, y`) + // invalid blocks_count + f(`foo | blocks_count |`) + f(`foo | blocks_count (`) + f(`foo | blocks_count )`) + f(`foo | blocks_count ,`) + f(`foo | blocks_count ()`) + f(`foo | blocks_count (x)`) + f(`foo | blocks_count (x,y)`) + f(`foo | blocks_count x y`) + f(`foo | blocks_count x, y`) + // invalid copy and cp pipe f(`foo | copy`) f(`foo | cp`) @@ -1820,6 +1837,14 @@ func TestQueryGetNeededColumns(t *testing.T) { f(`* | fields x,y | field_names as bar | fields baz`, `x,y`, ``) f(`* | rm x,y | field_names as bar | fields baz`, `*`, `x,y`) + f(`* | blocks_count as foo`, ``, ``) + f(`* | blocks_count foo | fields bar`, ``, ``) + f(`* | blocks_count foo | fields foo`, ``, ``) + f(`* | blocks_count foo | rm foo`, ``, ``) + f(`* | blocks_count foo | rm bar`, ``, ``) + f(`* | fields x,y | blocks_count as bar | fields baz`, ``, ``) + f(`* | rm x,y | blocks_count as bar | fields baz`, ``, ``) + f(`* | format "foo" as s1`, `*`, `s1`) f(`* | format "foo" as s1`, `*`, `s1`) f(`* | format "foo" as s1`, `*`, ``) @@ -1932,6 +1957,8 @@ func TestQueryGetNeededColumns(t *testing.T) { f(`* | extract_regexp if (q:w p:a) "(?P.*)bar" from x | count() r1`, `p,q`, ``) f(`* | field_names | count() r1`, `*`, `_time`) f(`* | limit 10 | field_names as abc | count() r1`, `*`, ``) + f(`* | blocks_count | count() r1`, ``, ``) + f(`* | limit 10 | blocks_count as abc | count() r1`, ``, ``) f(`* | fields a, b | count() r1`, ``, ``) f(`* | field_values a | count() r1`, `a`, ``) f(`* | limit 10 | filter a:b c:d | count() r1`, `a,c`, ``) @@ -2030,6 +2057,7 @@ func TestQueryCanReturnLastNResults(t *testing.T) { f("* | limit 10", false) f("* | offset 10", false) f("* | uniq (x)", false) + f("* | blocks_count", false) f("* | field_names", false) f("* | field_values x", false) f("* | top 5 by (x)", false) @@ -2056,6 +2084,7 @@ func TestQueryCanLiveTail(t *testing.T) { f("* | drop_empty_fields", true) f("* | extract 'foobaz'", true) f("* | extract_regexp 'foo(?Pbaz)'", true) + f("* | blocks_count a", false) f("* | field_names a", false) f("* | fields a, b", true) f("* | field_values a", false) @@ -2224,6 +2253,7 @@ func TestQueryGetStatsByFields_Failure(t *testing.T) { f(`foo | count() | drop_empty_fields`) f(`foo | count() | extract "foobaz"`) f(`foo | count() | extract_regexp "(?P([0-9]+[.]){3}[0-9]+)"`) + f(`foo | count() | blocks_count`) f(`foo | count() | field_names`) f(`foo | count() | field_values abc`) f(`foo | by (x) count() | fields a, b`) diff --git a/lib/logstorage/pipe.go b/lib/logstorage/pipe.go index d119fd89f3..6279d98dea 100644 --- a/lib/logstorage/pipe.go +++ b/lib/logstorage/pipe.go @@ -99,6 +99,12 @@ func parsePipes(lex *lexer) ([]pipe, error) { func parsePipe(lex *lexer) (pipe, error) { switch { + case lex.isKeyword("blocks_count"): + pc, err := parsePipeBlocksCount(lex) + if err != nil { + return nil, fmt.Errorf("cannot parse 'blocks_count' pipe: %w", err) + } + return pc, nil case lex.isKeyword("copy", "cp"): pc, err := parsePipeCopy(lex) if err != nil { @@ -284,6 +290,7 @@ func parsePipe(lex *lexer) (pipe, error) { var pipeNames = func() map[string]struct{} { a := []string{ + "blocks_count", "copy", "cp", "delete", "del", "rm", "drop", "drop_empty_fields", diff --git a/lib/logstorage/pipe_blocks_count.go b/lib/logstorage/pipe_blocks_count.go new file mode 100644 index 0000000000..f1381b2414 --- /dev/null +++ b/lib/logstorage/pipe_blocks_count.go @@ -0,0 +1,136 @@ +package logstorage + +import ( + "fmt" + "unsafe" +) + +// pipeBlocksCount processes '| blocks_count' pipe. +// +// See https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe +type pipeBlocksCount struct { + // resultName is an optional name of the column to write results to. + // By default results are written into 'blocks_count' column. + resultName string +} + +func (pc *pipeBlocksCount) String() string { + s := "blocks_count" + if pc.resultName != "blocks_count" { + s += " as " + quoteTokenIfNeeded(pc.resultName) + } + return s +} + +func (pc *pipeBlocksCount) canLiveTail() bool { + return false +} + +func (pc *pipeBlocksCount) updateNeededFields(neededFields, unneededFields fieldsSet) { + neededFields.reset() + unneededFields.reset() +} + +func (pc *pipeBlocksCount) optimize() { + // nothing to do +} + +func (pc *pipeBlocksCount) hasFilterInWithQuery() bool { + return false +} + +func (pc *pipeBlocksCount) initFilterInValues(_ map[string][]string, _ getFieldValuesFunc) (pipe, error) { + return pc, nil +} + +func (pc *pipeBlocksCount) newPipeProcessor(workersCount int, stopCh <-chan struct{}, _ func(), ppNext pipeProcessor) pipeProcessor { + shards := make([]pipeBlocksCountProcessorShard, workersCount) + + pcp := &pipeBlocksCountProcessor{ + pc: pc, + stopCh: stopCh, + ppNext: ppNext, + + shards: shards, + } + return pcp +} + +type pipeBlocksCountProcessor struct { + pc *pipeBlocksCount + stopCh <-chan struct{} + ppNext pipeProcessor + + shards []pipeBlocksCountProcessorShard +} + +type pipeBlocksCountProcessorShard struct { + pipeBlocksCountProcessorShardNopad + + // The padding prevents false sharing on widespread platforms with 128 mod (cache line size) = 0 . + _ [128 - unsafe.Sizeof(pipeBlocksCountProcessorShardNopad{})%128]byte +} + +type pipeBlocksCountProcessorShardNopad struct { + blocksCount uint64 +} + +func (pcp *pipeBlocksCountProcessor) writeBlock(workerID uint, _ *blockResult) { + shard := &pcp.shards[workerID] + shard.blocksCount++ +} + +func (pcp *pipeBlocksCountProcessor) flush() error { + if needStop(pcp.stopCh) { + return nil + } + + // merge state across shards + shards := pcp.shards + blocksCount := shards[0].blocksCount + shards = shards[1:] + for i := range shards { + blocksCount += shards[i].blocksCount + } + + // write result + rowsCountStr := string(marshalUint64String(nil, blocksCount)) + + rcs := [1]resultColumn{} + rcs[0].name = pcp.pc.resultName + rcs[0].addValue(rowsCountStr) + + var br blockResult + br.setResultColumns(rcs[:], 1) + pcp.ppNext.writeBlock(0, &br) + + return nil +} + +func parsePipeBlocksCount(lex *lexer) (*pipeBlocksCount, error) { + if !lex.isKeyword("blocks_count") { + return nil, fmt.Errorf("expecting 'blocks_count'; got %q", lex.token) + } + lex.nextToken() + + resultName := "blocks_count" + if lex.isKeyword("as") { + lex.nextToken() + name, err := parseFieldName(lex) + if err != nil { + return nil, fmt.Errorf("cannot parse result name for 'blocks_count': %w", err) + } + resultName = name + } else if !lex.isKeyword("", "|") { + name, err := parseFieldName(lex) + if err != nil { + return nil, fmt.Errorf("cannot parse result name for 'blocks_count': %w", err) + } + resultName = name + } + + pc := &pipeBlocksCount{ + resultName: resultName, + } + return pc, nil +} diff --git a/lib/logstorage/pipe_blocks_count_test.go b/lib/logstorage/pipe_blocks_count_test.go new file mode 100644 index 0000000000..8907636ca2 --- /dev/null +++ b/lib/logstorage/pipe_blocks_count_test.go @@ -0,0 +1,48 @@ +package logstorage + +import ( + "testing" +) + +func TestParsePipeBlocksCountSuccess(t *testing.T) { + f := func(pipeStr string) { + t.Helper() + expectParsePipeSuccess(t, pipeStr) + } + + f(`blocks_count`) + f(`blocks_count as x`) +} + +func TestParsePipeBlocksCountFailure(t *testing.T) { + f := func(pipeStr string) { + t.Helper() + expectParsePipeFailure(t, pipeStr) + } + + f(`blocks_count(foo)`) + f(`blocks_count a b`) + f(`blocks_count as`) +} + +func TestPipeBlocksCountUpdateNeededFields(t *testing.T) { + f := func(s string, neededFields, unneededFields, neededFieldsExpected, unneededFieldsExpected string) { + t.Helper() + expectPipeNeededFields(t, s, neededFields, unneededFields, neededFieldsExpected, unneededFieldsExpected) + } + + // all the needed fields + f("blocks_count as f1", "*", "", "", "") + + // all the needed fields, unneeded fields do not intersect with src + f("blocks_count as f3", "*", "f1,f2", "", "") + + // all the needed fields, unneeded fields intersect with src + f("blocks_count as f1", "*", "s1,f1,f2", "", "") + + // needed fields do not intersect with src + f("blocks_count as f3", "f1,f2", "", "", "") + + // needed fields intersect with src + f("blocks_count as f1", "s1,f1,f2", "", "", "") +} diff --git a/lib/logstorage/pipe_field_names.go b/lib/logstorage/pipe_field_names.go index 0ef824ed7d..1cc1b79cf4 100644 --- a/lib/logstorage/pipe_field_names.go +++ b/lib/logstorage/pipe_field_names.go @@ -8,7 +8,7 @@ import ( // pipeFieldNames processes '| field_names' pipe. // -// See https://docs.victoriametrics.com/victorialogs/logsql/#field-names-pipe +// See https://docs.victoriametrics.com/victorialogs/logsql/#field_names-pipe type pipeFieldNames struct { // resultName is an optional name of the column to write results to. // By default results are written into 'name' column. From c66da8b0babd6068cf33fe8afe9a0688e5d9162a Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 25 Sep 2024 19:29:30 +0200 Subject: [PATCH 101/128] docs/LTS-releases.md: consistently use `v` prefix in front of VictoriaMetrics releases --- docs/LTS-releases.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/LTS-releases.md b/docs/LTS-releases.md index 589fefe7c4..72520480d3 100644 --- a/docs/LTS-releases.md +++ b/docs/LTS-releases.md @@ -22,5 +22,5 @@ to [the latest available releases](https://docs.victoriametrics.com/changelog/). ## Currently supported LTS release lines -- 1.102.x - the latest one is [v1.102.2 LTS release](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.2) -- 1.97.x - the latest one is [v1.97.7 LTS release](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.7) +- v1.102.x - the latest one is [v1.102.2 LTS release](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.102.2) +- v1.97.x - the latest one is [v1.97.7 LTS release](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.7) From c89a7a0b62dc80d84a22e532ecff26d542bc9947 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Thu, 26 Sep 2024 00:23:08 +0300 Subject: [PATCH 102/128] Automatic update operator docs from VictoriaMetrics/operator@5271a59 (#7099) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: f41gh7 <18450869+f41gh7@users.noreply.github.com> --- docs/operator/CHANGELOG.md | 3 + docs/operator/api.md | 579 ++++++++++++++++++++++++++++++++++++- 2 files changed, 573 insertions(+), 9 deletions(-) diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index 2625512b3d..1dea40489a 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -11,6 +11,8 @@ aliases: - /operator/changelog/index.html --- +## [v0.48.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.48.0) - 25 Sep 2024 + - [api](https://docs.victoriametrics.com/operator/api): adds new fields `useVMConfigReloader`, `configReloaderImageTag`, `configReloaderResources` to to the `VMagent`, `VMAlert`, `VMAuth`, and `VMAlertmanager`. - [api/vmalertmanager](https://docs.victoriametrics.com/operator/api/index.html#vmalertmanagerspec): adds new field `enforcedTopRouteMatchers`. It adds given alert label matchers to the top route of any `VMAlertmanagerConfig`. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1096) for details. - [api](https://docs.victoriametrics.com/operator/api): adds underscore version of `host_aliases` setting, which has priority over `hostAliases`. @@ -27,6 +29,7 @@ aliases: - [operator](https://docs.victoriametrics.com/operator/): enables client cache back for `secrets` and `configmaps`. Adds new flag `-controller.disableCacheFor=seccret,configmap` to disable it if needed. - [operator](https://docs.victoriametrics.com/operator/): made webhook port configurable. See [this issue](https://github.com/VictoriaMetrics/operator/issues/1106) for details. - [operator](https://docs.victoriametrics.com/operator/): operator trims spaces from `Secret` and `Configmap` values by default. This behaviour could be changed with flag `disableSecretKeySpaceTrim`. Related [issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6986). +- [operator](#https://docs.victoriametrics.com/operator/): expose again only command-line flags related to the operator. Release [v0.45.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.45.0) added regression with incorrectly exposed flags. ## [v0.47.3](https://github.com/VictoriaMetrics/operator/releases/tag/v0.47.3) - 28 Aug 2024 diff --git a/docs/operator/api.md b/docs/operator/api.md index f98fddba1c..351b63d80d 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -51,6 +51,14 @@ APIServerConfig defines a host and auth methods to access apiserver. _Appears in:_ - [VMAgentSpec](#vmagentspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `authorization` | | _[Authorization](#authorization)_ | false | +| `basicAuth` | BasicAuth allow an endpoint to authenticate over basic authentication | _[BasicAuth](#basicauth)_ | false | +| `bearerToken` | Bearer token for accessing apiserver. | _string_ | false | +| `bearerTokenFile` | File to read bearer token for accessing apiserver. | _string_ | false | +| `host` | Host of apiserver.
    A valid string consisting of a hostname or IP followed by an optional port number | _string_ | true | +| `tlsConfig` | TLSConfig Config to use for accessing apiserver. | _[TLSConfig](#tlsconfig)_ | false | #### AdditionalServiceSpec @@ -71,10 +79,33 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `metadata` | Refer to Kubernetes API documentation for fields of `metadata`. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | +| `spec` | ServiceSpec describes the attributes that a user creates on a service.
    More info: https://kubernetes.io/docs/concepts/services-networking/service/ | _[ServiceSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#servicespec-v1-core)_ | true | +| `useAsDefault` | UseAsDefault applies changes from given service definition to the main object Service
    Changing from headless service to clusterIP or loadbalancer may break cross-component communication | _boolean_ | false | + + +#### AlertmanagerGossipConfig +AlertmanagerGossipConfig defines Gossip TLS configuration for alertmanager + + + +_Appears in:_ +- [VMAlertmanagerSpec](#vmalertmanagerspec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `tls_client_config` | TLSClientConfig defines client TLS configuration for alertmanager | _[TLSClientConfig](#tlsclientconfig)_ | true | +| `tls_server_config` | TLSServerConfig defines server TLS configuration for alertmanager | _[TLSServerConfig](#tlsserverconfig)_ | true | #### AlertmanagerHTTPConfig @@ -94,6 +125,22 @@ _Appears in:_ | `http2` | HTTP2 enables HTTP/2 support. Note that HTTP/2 is only supported with TLS.
    This can not be changed on the fly. | _boolean_ | false | +#### AlertmanagerWebConfig + + + +AlertmanagerWebConfig defines web server configuration for alertmanager + + + +_Appears in:_ +- [VMAlertmanagerSpec](#vmalertmanagerspec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `basic_auth_users` | BasicAuthUsers Usernames and hashed passwords that have full access to the web server
    Passwords must be hashed with bcrypt | _object (keys:string, values:string)_ | false | +| `http_server_config` | HTTPServerConfig defines http server configuration for alertmanager web server | _[AlertmanagerHTTPConfig](#alertmanagerhttpconfig)_ | false | +| `tls_server_config` | TLSServerConfig defines server TLS configuration for alertmanager | _[TLSServerConfig](#tlsserverconfig)_ | false | #### ArbitraryFSAccessThroughSMsConfig @@ -133,6 +180,7 @@ _Appears in:_ - [KubernetesSDConfig](#kubernetessdconfig) - [PodMetricsEndpoint](#podmetricsendpoint) - [VMPodScrapeSpec](#vmpodscrapespec) +- [VMServiceScrapeSpec](#vmservicescrapespec) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -148,6 +196,7 @@ Authorization configures generic authorization params _Appears in:_ +- [APIServerConfig](#apiserverconfig) - [ConsulSDConfig](#consulsdconfig) - [DigitalOceanSDConfig](#digitaloceansdconfig) - [Endpoint](#endpoint) @@ -201,15 +250,22 @@ BasicAuth allow an endpoint to authenticate over basic authentication _Appears in:_ +- [APIServerConfig](#apiserverconfig) - [ConsulSDConfig](#consulsdconfig) - [Endpoint](#endpoint) - [EndpointAuth](#endpointauth) +- [HTTPAuth](#httpauth) - [HTTPConfig](#httpconfig) - [HTTPSDConfig](#httpsdconfig) - [KubernetesSDConfig](#kubernetessdconfig) - [PodMetricsEndpoint](#podmetricsendpoint) - [ProxyAuth](#proxyauth) - [TargetEndpoint](#targetendpoint) +- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) +- [VMAlertDatasourceSpec](#vmalertdatasourcespec) +- [VMAlertNotifierSpec](#vmalertnotifierspec) +- [VMAlertRemoteReadSpec](#vmalertremotereadspec) +- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) - [VMScrapeConfigSpec](#vmscrapeconfigspec) @@ -221,6 +277,25 @@ _Appears in:_ | `username` | Username defines reference for secret with username value
    The secret needs to be in the same namespace as scrape object | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +#### BearerAuth + + + +BearerAuth defines auth with bearer token + + + +_Appears in:_ +- [HTTPAuth](#httpauth) +- [VMAlertDatasourceSpec](#vmalertdatasourcespec) +- [VMAlertNotifierSpec](#vmalertnotifierspec) +- [VMAlertRemoteReadSpec](#vmalertremotereadspec) +- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `bearerTokenFile` | Path to bearer token file | _string_ | false | +| `bearerTokenSecret` | Optional bearer auth token to use for -remoteWrite.url | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | @@ -278,7 +353,10 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -306,7 +384,7 @@ _Appears in:_ | `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | | `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | | `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | @@ -350,7 +428,10 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -362,6 +443,21 @@ _Appears in:_ | `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | +#### ConfigMapKeyReference + + + +ConfigMapKeyReference refers to a key in a ConfigMap. + + + +_Appears in:_ +- [VMAlertmanagerSpec](#vmalertmanagerspec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `key` | The ConfigMap key to refer to. | _string_ | true | +| `name` | Name of the referent.
    This field is effectively required, but due to backwards compatibility is
    allowed to be empty. Instances of this type with an empty value here are
    almost certainly wrong.
    TODO: Add other useful fields. apiVersion, kind, uid?
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
    TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. | _string_ | false | #### ConsulSDConfig @@ -483,6 +579,21 @@ _Appears in:_ | `webhook_url_secret` | URLSecret defines secret name and key at the CRD namespace.
    It must contain the webhook URL.
    one of `urlSecret` and `url` must be defined. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +#### DiscoverySelector + + + +DiscoverySelector can be used at CRD components discovery + + + +_Appears in:_ +- [VMAlertNotifierSpec](#vmalertnotifierspec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `labelSelector` | | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | true | +| `namespaceSelector` | | _[NamespaceSelector](#namespaceselector)_ | true | #### EC2Filter @@ -555,6 +666,25 @@ _Appears in:_ | `to` | The email address to send notifications to. | _string_ | false | +#### EmbeddedHPA + + + +EmbeddedHPA embeds HorizontalPodAutoScaler spec v2. +https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v2/ + + + +_Appears in:_ +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `behaviour` | | _[HorizontalPodAutoscalerBehavior](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerbehavior-v2beta2-autoscaling)_ | true | +| `maxReplicas` | | _integer_ | true | +| `metrics` | | _[MetricSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#metricspec-v2beta2-autoscaling) array_ | true | +| `minReplicas` | | _integer_ | true | #### EmbeddedIngress @@ -568,6 +698,17 @@ EmbeddedIngress describes ingress configuration options. _Appears in:_ - [VMAuthSpec](#vmauthspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `annotations` | Annotations is an unstructured key value map stored with a resource that may be
    set by external tools to store and retrieve arbitrary metadata. They are not
    queryable and should be preserved when modifying objects.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations | _object (keys:string, values:string)_ | false | +| `class_name` | ClassName defines ingress class name for VMAuth | _string_ | false | +| `extraRules` | ExtraRules - additional rules for ingress,
    must be checked for correctness by user. | _[IngressRule](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#ingressrule-v1-networking) array_ | false | +| `extraTls` | ExtraTLS - additional TLS configuration for ingress
    must be checked for correctness by user. | _[IngressTLS](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#ingresstls-v1-networking) array_ | false | +| `host` | Host defines ingress host parameter for default rule
    It will be used, only if TlsHosts is empty | _string_ | false | +| `labels` | Labels Map of string keys and values that can be used to organize and categorize
    (scope and select) objects. May match selectors of replication controllers
    and services.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels | _object (keys:string, values:string)_ | false | +| `name` | Name must be unique within a namespace. Is required when creating resources, although
    some resources may allow a client to request the generation of an appropriate name
    automatically. Name is primarily intended for creation idempotence and configuration
    definition.
    Cannot be updated.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names | _string_ | false | +| `tlsHosts` | TlsHosts configures TLS access for ingress, tlsSecretName must be defined for it. | _string array_ | true | +| `tlsSecretName` | TlsSecretName defines secretname at the VMAuth namespace with cert and key
    https://kubernetes.io/docs/concepts/services-networking/ingress/#tls | _string_ | false | #### EmbeddedObjectMetadata @@ -580,16 +721,42 @@ Only fields which are relevant to embedded resources are included. _Appears in:_ +- [AdditionalServiceSpec](#additionalservicespec) +- [EmbeddedIngress](#embeddedingress) - [EmbeddedPersistentVolumeClaim](#embeddedpersistentvolumeclaim) - [VLogsSpec](#vlogsspec) - [VMAgentSpec](#vmagentspec) - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `annotations` | Annotations is an unstructured key value map stored with a resource that may be
    set by external tools to store and retrieve arbitrary metadata. They are not
    queryable and should be preserved when modifying objects.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations | _object (keys:string, values:string)_ | false | +| `labels` | Labels Map of string keys and values that can be used to organize and categorize
    (scope and select) objects. May match selectors of replication controllers
    and services.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels | _object (keys:string, values:string)_ | false | +| `name` | Name must be unique within a namespace. Is required when creating resources, although
    some resources may allow a client to request the generation of an appropriate name
    automatically. Name is primarily intended for creation idempotence and configuration
    definition.
    Cannot be updated.
    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names | _string_ | false | + + +#### EmbeddedPersistentVolumeClaim +EmbeddedPersistentVolumeClaim is an embedded version of k8s.io/api/core/v1.PersistentVolumeClaim. +It contains TypeMeta and a reduced ObjectMeta. + + + +_Appears in:_ +- [StorageSpec](#storagespec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `metadata` | Refer to Kubernetes API documentation for fields of `metadata`. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | +| `spec` | Spec defines the desired characteristics of a volume requested by a pod author.
    More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims | _[PersistentVolumeClaimSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaimspec-v1-core)_ | false | #### EmbeddedPodDisruptionBudgetSpec @@ -605,7 +772,15 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) +- [VMStorage](#vmstorage) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `maxUnavailable` | An eviction is allowed if at most "maxUnavailable" pods selected by
    "selector" are unavailable after the eviction, i.e. even in absence of
    the evicted pod. For example, one can prevent all voluntary evictions
    by specifying 0. This is a mutually exclusive setting with "minAvailable". | _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#intorstring-intstr-util)_ | false | +| `minAvailable` | An eviction is allowed if at least "minAvailable" pods selected by
    "selector" will still be available after the eviction, i.e. even in the
    absence of the evicted pod. So for example you can prevent all voluntary
    evictions by specifying "100%". | _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#intorstring-intstr-util)_ | false | +| `selectorLabels` | replaces default labels selector generated by operator
    it's useful when you need to create custom budget | _object (keys:string, values:string)_ | false | #### EmbeddedProbes @@ -624,10 +799,56 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `livenessProbe` | LivenessProbe that will be added CRD pod | _[Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#probe-v1-core)_ | false | +| `readinessProbe` | ReadinessProbe that will be added CRD pod | _[Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#probe-v1-core)_ | false | +| `startupProbe` | StartupProbe that will be added to CRD pod | _[Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#probe-v1-core)_ | false | + + +#### Endpoint +Endpoint defines a scrapeable endpoint serving metrics. + + + +_Appears in:_ +- [VMServiceScrapeSpec](#vmservicescrapespec) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `attach_metadata` | AttachMetadata configures metadata attaching from service discovery | _[AttachMetadata](#attachmetadata)_ | false | +| `authorization` | Authorization with http header Authorization | _[Authorization](#authorization)_ | false | +| `basicAuth` | BasicAuth allow an endpoint to authenticate over basic authentication | _[BasicAuth](#basicauth)_ | false | +| `bearerTokenFile` | File to read bearer token for scraping targets. | _string_ | false | +| `bearerTokenSecret` | Secret to mount to read bearer token for scraping targets. The secret
    needs to be in the same namespace as the scrape object and accessible by
    the victoria-metrics operator. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `follow_redirects` | FollowRedirects controls redirects for scraping. | _boolean_ | false | +| `honorLabels` | HonorLabels chooses the metric's labels on collisions with target labels. | _boolean_ | false | +| `honorTimestamps` | HonorTimestamps controls whether vmagent respects the timestamps present in scraped data. | _boolean_ | false | +| `interval` | Interval at which metrics should be scraped | _string_ | false | +| `max_scrape_size` | MaxScrapeSize defines a maximum size of scraped data for a job | _string_ | false | +| `metricRelabelConfigs` | MetricRelabelConfigs to apply to samples after scrapping. | _[RelabelConfig](#relabelconfig) array_ | false | +| `oauth2` | OAuth2 defines auth configuration | _[OAuth2](#oauth2)_ | false | +| `params` | Optional HTTP URL parameters | _object (keys:string, values:string array)_ | false | +| `path` | HTTP path to scrape for metrics. | _string_ | false | +| `port` | Name of the port exposed at Service. | _string_ | false | +| `proxyURL` | ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. | _string_ | false | +| `relabelConfigs` | RelabelConfigs to apply to samples during service discovery. | _[RelabelConfig](#relabelconfig) array_ | false | +| `sampleLimit` | SampleLimit defines per-scrape limit on number of scraped samples that will be accepted. | _integer_ | false | +| `scheme` | HTTP scheme to use for scraping. | _string_ | false | +| `scrapeTimeout` | Timeout after which the scrape is ended | _string_ | false | +| `scrape_interval` | ScrapeInterval is the same as Interval and has priority over it.
    one of scrape_interval or interval can be used | _string_ | false | +| `seriesLimit` | SeriesLimit defines per-scrape limit on number of unique time series
    a single target can expose during all the scrapes on the time window of 24h. | _integer_ | false | +| `targetPort` | TargetPort
    Name or number of the pod port this endpoint refers to. Mutually exclusive with port. | _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#intorstring-intstr-util)_ | false | +| `tlsConfig` | TLSConfig configuration to use when scraping the endpoint | _[TLSConfig](#tlsconfig)_ | false | +| `vm_scrape_params` | VMScrapeParams defines VictoriaMetrics specific scrape parameters | _[VMScrapeParams](#vmscrapeparams)_ | false | #### EndpointAuth @@ -766,7 +987,16 @@ HTTPAuth generic auth used with http protocols _Appears in:_ - [VMAlertDatasourceSpec](#vmalertdatasourcespec) +- [VMAlertNotifierSpec](#vmalertnotifierspec) +- [VMAlertRemoteReadSpec](#vmalertremotereadspec) +- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | +| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | +| `oauth2` | | _[OAuth2](#oauth2)_ | false | +| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | #### HTTPConfig @@ -841,8 +1071,16 @@ _Appears in:_ - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) - [VMBackup](#vmbackup) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `pullPolicy` | PullPolicy describes how to pull docker image | _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | true | +| `repository` | Repository contains name of docker image + it's repository if needed | _string_ | true | +| `tag` | Tag contains desired docker image version | _string_ | true | #### ImageConfig @@ -896,8 +1134,15 @@ _Appears in:_ _Appears in:_ - [VMAgentSpec](#vmagentspec) +- [VMInsert](#vminsert) - [VMSingleSpec](#vmsinglespec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `graphitePort` | GraphitePort listen port | _string_ | false | +| `influxPort` | InfluxPort listen port | _string_ | false | +| `openTSDBHTTPPort` | OpenTSDBHTTPPort for http connections. | _string_ | false | +| `openTSDBPort` | OpenTSDBPort for tcp and udp listen | _string_ | false | #### K8SSelectorConfig @@ -965,6 +1210,10 @@ _Appears in:_ - [VMClusterSpec](#vmclusterspec) - [VMSingleSpec](#vmsinglespec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `key` | Enterprise license key. This flag is available only in [VictoriaMetrics enterprise](https://docs.victoriametrics.com/enterprise).
    To request a trial license, [go to](https://victoriametrics.com/products/enterprise/trial) | _string_ | true | +| `keyRef` | KeyRef is reference to secret with license key for enterprise features. | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | true | #### LinkConfig @@ -1038,6 +1287,7 @@ _Appears in:_ - [DiscoverySelector](#discoveryselector) - [ProbeTargetIngress](#probetargetingress) - [VMPodScrapeSpec](#vmpodscrapespec) +- [VMServiceScrapeSpec](#vmservicescrapespec) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -1058,10 +1308,16 @@ _Appears in:_ - [DigitalOceanSDConfig](#digitaloceansdconfig) - [Endpoint](#endpoint) - [EndpointAuth](#endpointauth) +- [HTTPAuth](#httpauth) - [HTTPConfig](#httpconfig) - [KubernetesSDConfig](#kubernetessdconfig) - [PodMetricsEndpoint](#podmetricsendpoint) - [TargetEndpoint](#targetendpoint) +- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) +- [VMAlertDatasourceSpec](#vmalertdatasourcespec) +- [VMAlertNotifierSpec](#vmalertnotifierspec) +- [VMAlertRemoteReadSpec](#vmalertremotereadspec) +- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) - [VMScrapeConfigSpec](#vmscrapeconfigspec) @@ -1349,6 +1605,7 @@ _Appears in:_ - [ProbeTargetIngress](#probetargetingress) - [StreamAggrRule](#streamaggrrule) - [TargetEndpoint](#targetendpoint) +- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) - [VMAgentSpec](#vmagentspec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) @@ -1473,6 +1730,27 @@ _Appears in:_ +#### SecurityContext + + + +SecurityContext extends PodSecurityContext with ContainerSecurityContext +It allows to globally configure security params for pod and all containers + + + +_Appears in:_ +- [CommonApplicationDeploymentParams](#commonapplicationdeploymentparams) +- [VLogsSpec](#vlogsspec) +- [VMAgentSpec](#vmagentspec) +- [VMAlertSpec](#vmalertspec) +- [VMAlertmanagerSpec](#vmalertmanagerspec) +- [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) +- [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) + #### Sigv4Config @@ -1673,7 +1951,14 @@ If neither `emptyDir` nor `volumeClaimTemplate` is specified, then by default an _Appears in:_ - [VMAgentSpec](#vmagentspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) +- [VMSelect](#vmselect) +- [VMStorage](#vmstorage) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `disableMountSubPath` | Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary.
    DisableMountSubPath allows to remove any subPath usage in volume mounts. | _boolean_ | false | +| `emptyDir` | EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More
    info: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir | _[EmptyDirVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#emptydirvolumesource-v1-core)_ | false | +| `volumeClaimTemplate` | A PVC spec to be used by the VMAlertManager StatefulSets. | _[EmbeddedPersistentVolumeClaim](#embeddedpersistentvolumeclaim)_ | false | #### StreamAggrConfig @@ -1685,16 +1970,55 @@ StreamAggrConfig defines the stream aggregation config _Appears in:_ +- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) - [VMAgentSpec](#vmagentspec) - [VMSingleSpec](#vmsinglespec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `configmap` | ConfigMap with stream aggregation rules | _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#configmapkeyselector-v1-core)_ | false | +| `dedupInterval` | Allows setting different de-duplication intervals per each configured remote storage | _string_ | false | +| `dropInput` | Allow drop all the input samples after the aggregation | _boolean_ | false | +| `dropInputLabels` | labels to drop from samples for aggregator before stream de-duplication and aggregation | _string array_ | false | +| `ignoreFirstIntervals` | IgnoreFirstIntervals instructs to ignore first interval | _integer_ | false | +| `ignoreOldSamples` | IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. | _boolean_ | false | +| `keepInput` | Allows writing both raw and aggregate data | _boolean_ | false | +| `rules` | Stream aggregation rules | _[StreamAggrRule](#streamaggrrule) array_ | false | +#### StreamAggrRule + + + +StreamAggrRule defines the rule in stream aggregation config + + + +_Appears in:_ +- [StreamAggrConfig](#streamaggrconfig) + +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `by` | By is an optional list of labels for grouping input series.

    See also Without.

    If neither By nor Without are set, then the Outputs are calculated
    individually per each input time series. | _string array_ | false | +| `dedup_interval` | DedupInterval is an optional interval for deduplication. | _string_ | false | +| `drop_input_labels` | DropInputLabels is an optional list with labels, which must be dropped before further processing of input samples.

    Labels are dropped before de-duplication and aggregation. | _string_ | false | +| `flush_on_shutdown` | FlushOnShutdown defines whether to flush the aggregation state on process termination
    or config reload. Is `false` by default.
    It is not recommended changing this setting, unless unfinished aggregations states
    are preferred to missing data points. | _boolean_ | false | +| `ignore_first_intervals` | | _integer_ | true | +| `ignore_old_samples` | IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. | _boolean_ | false | +| `input_relabel_configs` | InputRelabelConfigs is an optional relabeling rules, which are applied on the input
    before aggregation. | _[RelabelConfig](#relabelconfig) array_ | false | +| `interval` | Interval is the interval between aggregations. | _string_ | true | +| `keep_metric_names` | KeepMetricNames instructs to leave metric names as is for the output time series without adding any suffix. | _boolean_ | false | +| `match` | Match is a label selector (or list of label selectors) for filtering time series for the given selector.

    If the match isn't set, then all the input time series are processed. | _[StringOrArray](#stringorarray)_ | false | +| `no_align_flush_to_interval` | NoAlignFlushToInterval disables aligning of flushes to multiples of Interval.
    By default flushes are aligned to Interval. | _boolean_ | false | +| `output_relabel_configs` | OutputRelabelConfigs is an optional relabeling rules, which are applied
    on the aggregated output before being sent to remote storage. | _[RelabelConfig](#relabelconfig) array_ | false | +| `outputs` | Outputs is a list of output aggregate functions to produce.

    The following names are allowed:

    - total - aggregates input counters
    - increase - counts the increase over input counters
    - count_series - counts the input series
    - count_samples - counts the input samples
    - sum_samples - sums the input samples
    - last - the last biggest sample value
    - min - the minimum sample value
    - max - the maximum sample value
    - avg - the average value across all the samples
    - stddev - standard deviation across all the samples
    - stdvar - standard variance across all the samples
    - histogram_bucket - creates VictoriaMetrics histogram for input samples
    - quantiles(phi1, ..., phiN) - quantiles' estimation for phi in the range [0..1]

    The output time series will have the following names:

    input_name:aggr__ | _string array_ | true | +| `staleness_interval` | Staleness interval is interval after which the series state will be reset if no samples have been sent during it.
    The parameter is only relevant for outputs: total, total_prometheus, increase, increase_prometheus and histogram_bucket. | _string_ | false | +| `without` | Without is an optional list of labels, which must be excluded when grouping input series.

    See also By.

    If neither By nor Without are set, then the Outputs are calculated
    individually per each input time series. | _string array_ | false | #### StringOrArray - +_Underlying type:_ _string array_ StringOrArray is a helper type for storing string or array of string. @@ -1740,11 +2064,13 @@ TLSConfig specifies TLSConfig configuration parameters. _Appears in:_ +- [APIServerConfig](#apiserverconfig) - [ConsulSDConfig](#consulsdconfig) - [DigitalOceanSDConfig](#digitaloceansdconfig) - [EmailConfig](#emailconfig) - [Endpoint](#endpoint) - [EndpointAuth](#endpointauth) +- [HTTPAuth](#httpauth) - [HTTPConfig](#httpconfig) - [HTTPSDConfig](#httpsdconfig) - [KubernetesSDConfig](#kubernetessdconfig) @@ -1753,6 +2079,11 @@ _Appears in:_ - [ProxyAuth](#proxyauth) - [TargetEndpoint](#targetendpoint) - [UserConfigOption](#userconfigoption) +- [VMAgentRemoteWriteSpec](#vmagentremotewritespec) +- [VMAlertDatasourceSpec](#vmalertdatasourcespec) +- [VMAlertNotifierSpec](#vmalertnotifierspec) +- [VMAlertRemoteReadSpec](#vmalertremotereadspec) +- [VMAlertRemoteWriteSpec](#vmalertremotewritespec) - [VMAuthSpec](#vmauthspec) - [VMNodeScrapeSpec](#vmnodescrapespec) - [VMProbeSpec](#vmprobespec) @@ -1971,6 +2302,7 @@ URLMapCommon contains common fields for unauthorized user and user in vmuser _Appears in:_ - [TargetRef](#targetref) +- [UnauthorizedAccessConfigURLMap](#unauthorizedaccessconfigurlmap) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -1995,11 +2327,17 @@ _Appears in:_ _Appears in:_ - [VMAuthSpec](#vmauthspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `URLMapCommon` | | _[URLMapCommon](#urlmapcommon)_ | true | +| `src_hosts` | SrcHosts is an optional list of regular expressions, which must match the request hostname. | _string array_ | true | +| `src_paths` | SrcPaths is an optional list of regular expressions, which must match the request path. | _string array_ | true | +| `url_prefix` | UrlPrefix contains backend url prefixes for the proxied request url. | _string array_ | true | #### UpdateStatus - +_Underlying type:_ _string_ UpdateStatus defines status for application @@ -2113,7 +2451,7 @@ _Appears in:_ | `storage` | Storage is the definition of how storage will be used by the VLogs
    by default it`s empty dir | _[PersistentVolumeClaimSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaimspec-v1-core)_ | false | | `storageDataPath` | StorageDataPath disables spec.storage option and overrides arg for victoria-logs binary --storageDataPath,
    its users responsibility to mount proper device into given path. | _string_ | false | | `storageMetadata` | StorageMeta defines annotations and labels attached to PVC for given vlogs CR | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | @@ -2154,6 +2492,16 @@ VMAgentRemoteWriteSettings - defines global settings for all remoteWrite urls. _Appears in:_ - [VMAgentSpec](#vmagentspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `flushInterval` | Interval for flushing the data to remote storage. (default 1s) | _string_ | false | +| `label` | Labels in the form 'name=value' to add to all the metrics before sending them. This overrides the label if it already exists. | _object (keys:string, values:string)_ | false | +| `maxBlockSize` | The maximum size in bytes of unpacked request to send to remote storage | _integer_ | false | +| `maxDiskUsagePerURL` | The maximum file-based buffer size in bytes at -remoteWrite.tmpDataPath | _integer_ | false | +| `queues` | The number of concurrent queues | _integer_ | false | +| `showURL` | Whether to show -remoteWrite.url in the exported metrics. It is hidden by default, since it can contain sensitive auth info | _boolean_ | false | +| `tmpDataPath` | Path to directory where temporary data for remote write component is stored (default vmagent-remotewrite-data) | _string_ | false | +| `useMultiTenantMode` | Configures vmagent accepting data via the same multitenant endpoints as vminsert at VictoriaMetrics cluster does,
    see [here](https://docs.victoriametrics.com/vmagent/#multitenancy).
    it's global setting and affects all remote storage configurations | _boolean_ | false | #### VMAgentRemoteWriteSpec @@ -2167,6 +2515,18 @@ VMAgentRemoteWriteSpec defines the remote storage configuration for VmAgent _Appears in:_ - [VMAgentSpec](#vmagentspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `basicAuth` | BasicAuth allow an endpoint to authenticate over basic authentication | _[BasicAuth](#basicauth)_ | false | +| `bearerTokenSecret` | Optional bearer auth token to use for -remoteWrite.url | _[SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#secretkeyselector-v1-core)_ | false | +| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName: headerValue
    vmagent supports since 1.79.0 version | _string array_ | false | +| `inlineUrlRelabelConfig` | InlineUrlRelabelConfig defines relabeling config for remoteWriteURL, it can be defined at crd spec. | _[RelabelConfig](#relabelconfig) array_ | false | +| `oauth2` | OAuth2 defines auth configuration | _[OAuth2](#oauth2)_ | false | +| `sendTimeout` | Timeout for sending a single block of data to -remoteWrite.url (default 1m0s) | _string_ | false | +| `streamAggrConfig` | StreamAggrConfig defines stream aggregation configuration for VMAgent for -remoteWrite.url | _[StreamAggrConfig](#streamaggrconfig)_ | false | +| `tlsConfig` | TLSConfig describes tls configuration for remote write target | _[TLSConfig](#tlsconfig)_ | false | +| `url` | URL of the endpoint to send samples to. | _string_ | true | +| `urlRelabelConfig` | ConfigMap with relabeling config which is applied to metrics before sending them to the corresponding -remoteWrite.url | _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#configmapkeyselector-v1-core)_ | false | #### VMAgentSecurityEnforcements @@ -2285,7 +2645,7 @@ _Appears in:_ | `staticScrapeRelabelTemplate` | StaticScrapeRelabelTemplate defines relabel config, that will be added to each VMStaticScrape.
    it's useful for adding specific labels to all targets | _[RelabelConfig](#relabelconfig) array_ | false | | `staticScrapeSelector` | StaticScrapeSelector defines PodScrapes to be selected for target discovery.
    Works in combination with NamespaceSelector.
    If both nil - match everything.
    NamespaceSelector nil - only objects at VMAgent namespace.
    Selector nil - only objects at NamespaceSelector namespaces. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `streamAggrConfig` | StreamAggrConfig defines global stream aggregation configuration for VMAgent | _[StreamAggrConfig](#streamaggrconfig)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `updateStrategy` | UpdateStrategy - overrides default update strategy.
    works only for deployments, statefulset always use OnDelete. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | @@ -2330,6 +2690,10 @@ _Appears in:_ | Field | Description | Scheme | Required | | --- | --- | --- | --- | +| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | +| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | +| `oauth2` | | _[OAuth2](#oauth2)_ | false | +| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | | `url` | Victoria Metrics or VMSelect url. Required parameter. E.g. http://127.0.0.1:8428 | _string_ | true | @@ -2344,6 +2708,14 @@ VMAlertNotifierSpec defines the notifier url for sending information about alert _Appears in:_ - [VMAlertSpec](#vmalertspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | +| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | +| `oauth2` | | _[OAuth2](#oauth2)_ | false | +| `selector` | Selector allows service discovery for alertmanager
    in this case all matched vmalertmanager replicas will be added into vmalert notifier.url
    as statefulset pod.fqdn | _[DiscoverySelector](#discoveryselector)_ | false | +| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | +| `url` | AlertManager url. E.g. http://127.0.0.1:9093 | _string_ | false | #### VMAlertRemoteReadSpec @@ -2357,6 +2729,14 @@ VMAlertRemoteReadSpec defines the remote storage configuration for VmAlert to re _Appears in:_ - [VMAlertSpec](#vmalertspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | +| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | +| `lookback` | Lookback defines how far to look into past for alerts timeseries. For example, if lookback=1h then range from now() to now()-1h will be scanned. (default 1h0m0s)
    Applied only to RemoteReadSpec | _string_ | false | +| `oauth2` | | _[OAuth2](#oauth2)_ | false | +| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | +| `url` | URL of the endpoint to send samples to. | _string_ | true | #### VMAlertRemoteWriteSpec @@ -2370,6 +2750,17 @@ VMAlertRemoteWriteSpec defines the remote storage configuration for VmAlert _Appears in:_ - [VMAlertSpec](#vmalertspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `basicAuth` | | _[BasicAuth](#basicauth)_ | false | +| `concurrency` | Defines number of readers that concurrently write into remote storage (default 1) | _integer_ | false | +| `flushInterval` | Defines interval of flushes to remote write endpoint (default 5s) | _string_ | false | +| `headers` | Headers allow configuring custom http headers
    Must be in form of semicolon separated header with value
    e.g.
    headerName:headerValue
    vmalert supports it since 1.79.0 version | _string array_ | false | +| `maxBatchSize` | Defines defines max number of timeseries to be flushed at once (default 1000) | _integer_ | false | +| `maxQueueSize` | Defines the max number of pending datapoints to remote write endpoint (default 100000) | _integer_ | false | +| `oauth2` | | _[OAuth2](#oauth2)_ | false | +| `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | +| `url` | URL of the endpoint to send samples to. | _string_ | true | #### VMAlertSpec @@ -2437,7 +2828,7 @@ _Appears in:_ | `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmalert VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmalert service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `updateStrategy` | UpdateStrategy - overrides default update strategy. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | @@ -2580,7 +2971,7 @@ _Appears in:_ | `serviceSpec` | ServiceSpec that will be added to vmalertmanager service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `storage` | Storage is the definition of how storage will be used by the VMAlertmanager
    instances. | _[StorageSpec](#storagespec)_ | false | | `templates` | Templates is a list of ConfigMap key references for ConfigMaps in the same namespace as the VMAlertmanager
    object, which shall be mounted into the VMAlertmanager Pods.
    The Templates are mounted into /etc/vm/templates//. | _[ConfigMapKeyReference](#configmapkeyreference) array_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | @@ -2674,7 +3065,7 @@ _Appears in:_ | `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmauth VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmsingle service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tlsConfig` | | _[TLSConfig](#tlsconfig)_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | @@ -2700,6 +3091,7 @@ _Appears in:_ _Appears in:_ - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) | Field | Description | Scheme | Required | | --- | --- | --- | --- | @@ -2785,6 +3177,54 @@ _Appears in:_ _Appears in:_ - [VMClusterSpec](#vmclusterspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | +| `clusterNativeListenPort` | ClusterNativePort for multi-level cluster setup.
    More [details](https://docs.victoriametrics.com/Cluster-VictoriaMetrics#multi-level-cluster-setup) | _string_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | +| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | +| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | +| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `hpa` | HPA defines kubernetes PodAutoScaling configuration version 2. | _[EmbeddedHPA](#embeddedhpa)_ | true | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | +| `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `insertPorts` | InsertPorts - additional listen ports for data ingestion. | _[InsertPorts](#insertports)_ | true | +| `logFormat` | LogFormat for VMInsert to be configured with.
    default or json | _string_ | false | +| `logLevel` | LogLevel for VMInsert to be configured with. | _string_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | +| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | +| `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | +| `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | +| `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMInsert pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | +| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | +| `rollingUpdate` | RollingUpdate - overrides deployment update params. | _[RollingUpdateDeployment](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#rollingupdatedeployment-v1-apps)_ | false | +| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | +| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | +| `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vminsert VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | +| `serviceSpec` | ServiceSpec that will be added to vminsert service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | +| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | +| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `updateStrategy` | UpdateStrategy - overrides default update strategy. | _[DeploymentStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategytype-v1-apps)_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | +| `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | #### VMNodeScrape @@ -3179,6 +3619,56 @@ _Appears in:_ _Appears in:_ - [VMClusterSpec](#vmclusterspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | +| `cacheMountPath` | CacheMountPath allows to add cache persistent for VMSelect,
    will use "/cache" as default if not specified. | _string_ | false | +| `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | +| `clusterNativeListenPort` | ClusterNativePort for multi-level cluster setup.
    More [details](https://docs.victoriametrics.com/Cluster-VictoriaMetrics#multi-level-cluster-setup) | _string_ | false | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | +| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | +| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | +| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `hpa` | Configures horizontal pod autoscaling.
    Note, enabling this option disables vmselect to vmselect communication. In most cases it's not an issue. | _[EmbeddedHPA](#embeddedhpa)_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | +| `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `logFormat` | LogFormat for VMSelect to be configured with.
    default or json | _string_ | false | +| `logLevel` | LogLevel for VMSelect to be configured with. | _string_ | false | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | +| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | +| `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | +| `persistentVolume` | Storage - add persistent volume for cacheMountPath
    its useful for persistent cache
    use storage instead of persistentVolume. | _[StorageSpec](#storagespec)_ | false | +| `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | +| `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMSelect pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | +| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | +| `rollingUpdateStrategy` | RollingUpdateStrategy defines strategy for application updates
    Default is OnDelete, in this case operator handles update process
    Can be changed for RollingUpdate | _[StatefulSetUpdateStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetupdatestrategytype-v1-apps)_ | false | +| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | +| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | +| `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmselect VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | +| `serviceSpec` | ServiceSpec that will be added to vmselect service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | +| `storage` | StorageSpec - add persistent volume claim for cacheMountPath
    its needed for persistent cache | _[StorageSpec](#storagespec)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | +| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | +| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | +| `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | #### VMServiceScrape @@ -3216,9 +3706,24 @@ _Appears in:_ - [VMAlertSpec](#vmalertspec) - [VMAlertmanagerSpec](#vmalertmanagerspec) - [VMAuthSpec](#vmauthspec) +- [VMInsert](#vminsert) +- [VMSelect](#vmselect) - [VMServiceScrape](#vmservicescrape) - [VMSingleSpec](#vmsinglespec) +- [VMStorage](#vmstorage) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `attach_metadata` | AttachMetadata configures metadata attaching from service discovery | _[AttachMetadata](#attachmetadata)_ | false | +| `discoveryRole` | DiscoveryRole - defines kubernetes_sd role for objects discovery.
    by default, its endpoints.
    can be changed to service or endpointslices.
    note, that with service setting, you have to use port: "name"
    and cannot use targetPort for endpoints. | _string_ | false | +| `endpoints` | A list of endpoints allowed as part of this ServiceScrape. | _[Endpoint](#endpoint) array_ | true | +| `jobLabel` | The label to use to retrieve the job name from. | _string_ | false | +| `namespaceSelector` | Selector to select which namespaces the Endpoints objects are discovered from. | _[NamespaceSelector](#namespaceselector)_ | false | +| `podTargetLabels` | PodTargetLabels transfers labels on the Kubernetes Pod onto the target. | _string array_ | false | +| `sampleLimit` | SampleLimit defines per-scrape limit on number of scraped samples that will be accepted. | _integer_ | false | +| `selector` | Selector to select Endpoints objects by corresponding Service labels. | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | +| `seriesLimit` | SeriesLimit defines per-scrape limit on number of unique time series
    a single target can expose during all the scrapes on the time window of 24h. | _integer_ | false | +| `targetLabels` | TargetLabels transfers labels on the Kubernetes Service onto the target. | _string array_ | false | #### VMSingle @@ -3293,7 +3798,7 @@ _Appears in:_ | `storageDataPath` | StorageDataPath disables spec.storage option and overrides arg for victoria-metrics binary --storageDataPath,
    its users responsibility to mount proper device into given path. | _string_ | false | | `storageMetadata` | StorageMeta defines annotations and labels attached to PVC for given vmsingle CR | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | false | | `streamAggrConfig` | StreamAggrConfig defines stream aggregation configuration for VMSingle | _[StreamAggrConfig](#streamaggrconfig)_ | true | -| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _[int64](#int64)_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | | `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | @@ -3353,6 +3858,58 @@ _Appears in:_ _Appears in:_ - [VMClusterSpec](#vmclusterspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `affinity` | Affinity If specified, the pod's scheduling constraints. | _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#affinity-v1-core)_ | false | +| `claimTemplates` | ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet | _[PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#persistentvolumeclaim-v1-core) array_ | true | +| `configMaps` | ConfigMaps is a list of ConfigMaps in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/configs/CONFIGMAP_NAME folder | _string array_ | false | +| `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | false | +| `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | +| `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | +| `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | +| `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | +| `hostAliases` | HostAliases provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork. | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `hostNetwork` | HostNetwork controls whether the pod may use the node network namespace | _boolean_ | false | +| `host_aliases` | HostAliasesUnderScore provides mapping for ip and hostname,
    that would be propagated to pod,
    cannot be used with HostNetwork.
    Has Priority over hostAliases field | _[HostAlias](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#hostalias-v1-core) array_ | false | +| `image` | Image - docker image settings
    if no specified operator uses default version from operator config | _[Image](#image)_ | false | +| `imagePullSecrets` | ImagePullSecrets An optional list of references to secrets in the same namespace
    to use for pulling images from registries
    see https://kubernetes.io/docs/concepts/containers/images/#referring-to-an-imagepullsecrets-on-a-pod | _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#localobjectreference-v1-core) array_ | false | +| `initContainers` | InitContainers allows adding initContainers to the pod definition.
    Any errors during the execution of an initContainer will lead to a restart of the Pod.
    More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | +| `logFormat` | LogFormat for VMStorage to be configured with.
    default or json | _string_ | false | +| `logLevel` | LogLevel for VMStorage to be configured with. | _string_ | false | +| `maintenanceInsertNodeIDs` | MaintenanceInsertNodeIDs - excludes given node ids from insert requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc.
    lets say, you have pod-0, pod-1, pod-2, pod-3. to exclude pod-0 and pod-3 from insert routing, define nodeIDs: [0,3].
    Useful at storage expanding, when you want to rebalance some data at cluster. | _integer array_ | false | +| `maintenanceSelectNodeIDs` | MaintenanceInsertNodeIDs - excludes given node ids from select requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. | _integer array_ | true | +| `minReadySeconds` | MinReadySeconds defines a minim number os seconds to wait before starting update next pod
    if previous in healthy state
    Has no effect for VLogs and VMSingle | _integer_ | false | +| `nodeSelector` | NodeSelector Define which Nodes the Pods are scheduled on. | _object (keys:string, values:string)_ | false | +| `paused` | Paused If set to true all actions on the underlying managed objects are not
    going to be performed, except for delete actions. | _boolean_ | false | +| `podDisruptionBudget` | PodDisruptionBudget created by operator | _[EmbeddedPodDisruptionBudgetSpec](#embeddedpoddisruptionbudgetspec)_ | false | +| `podMetadata` | PodMetadata configures Labels and Annotations which are propagated to the VMStorage pods. | _[EmbeddedObjectMetadata](#embeddedobjectmetadata)_ | true | +| `port` | Port listen address | _string_ | false | +| `priorityClassName` | PriorityClassName class assigned to the Pods | _string_ | false | +| `readinessGates` | ReadinessGates defines pod readiness gates | _[PodReadinessGate](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podreadinessgate-v1-core) array_ | true | +| `replicaCount` | ReplicaCount is the expected size of the Application. | _integer_ | false | +| `resources` | Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
    if not defined default resources from operator config will be used | _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | false | +| `revisionHistoryLimitCount` | The number of old ReplicaSets to retain to allow rollback in deployment or
    maximum number of revisions that will be maintained in the Deployment revision history.
    Has no effect at StatefulSets
    Defaults to 10. | _integer_ | false | +| `rollingUpdateStrategy` | RollingUpdateStrategy defines strategy for application updates
    Default is OnDelete, in this case operator handles update process
    Can be changed for RollingUpdate | _[StatefulSetUpdateStrategyType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetupdatestrategytype-v1-apps)_ | false | +| `runtimeClassName` | RuntimeClassName - defines runtime class for kubernetes pod.
    https://kubernetes.io/docs/concepts/containers/runtime-class/ | _string_ | false | +| `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | +| `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | +| `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | +| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | +| `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmstorage VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | +| `serviceSpec` | ServiceSpec that will be create additional service for vmstorage | _[AdditionalServiceSpec](#additionalservicespec)_ | false | +| `storage` | Storage - add persistent volume for StorageDataPath
    its useful for persistent cache | _[StorageSpec](#storagespec)_ | false | +| `storageDataPath` | StorageDataPath - path to storage data | _string_ | false | +| `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | +| `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | +| `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | +| `useDefaultResources` | UseDefaultResources controls resource settings
    By default, operator sets built-in resource requirements | _boolean_ | false | +| `useStrictSecurity` | UseStrictSecurity enables strict security mode for component
    it restricts disk writes access
    uses non-root user out of the box
    drops not needed security permissions | _boolean_ | false | +| `vmBackup` | VMBackup configuration for backup | _[VMBackup](#vmbackup)_ | false | +| `vmInsertPort` | VMInsertPort for VMInsert connections | _string_ | false | +| `vmSelectPort` | VMSelectPort for VMSelect connections | _string_ | false | +| `volumeMounts` | VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition.
    VolumeMounts specified will be appended to other VolumeMounts in the Application container | _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volumemount-v1-core) array_ | false | +| `volumes` | Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition.
    Volumes specified will be appended to other volumes that are generated.
    / +optional | _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#volume-v1-core) array_ | true | #### VMUser @@ -3387,6 +3944,10 @@ _Appears in:_ - [VMAuthSpec](#vmauthspec) - [VMUserSpec](#vmuserspec) +| Field | Description | Scheme | Required | +| --- | --- | --- | --- | +| `allow_list` | | _string array_ | true | +| `deny_list` | | _string array_ | true | #### VMUserSpec From 255d1d4e139acc0bc66cfbec2ecdaffdf9177e14 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 08:54:44 +0200 Subject: [PATCH 103/128] app/vlselect/logsql: clone the query with the current timestamp when performing live tailing requests in the loop Previously the original timestamp was used in the copied query, so _time:duration filters were applied to the original time range: (timestamp-duration ... timestamp]. This resulted in stopped live tailing, since new logs have timestamps bigger than the original time range. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028 --- app/vlselect/logsql/logsql.go | 13 +++++++++---- docs/VictoriaLogs/CHANGELOG.md | 1 + lib/logstorage/parser.go | 3 +-- lib/logstorage/parser_test.go | 3 ++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/vlselect/logsql/logsql.go b/app/vlselect/logsql/logsql.go index 241da42559..7166523837 100644 --- a/app/vlselect/logsql/logsql.go +++ b/app/vlselect/logsql/logsql.go @@ -417,13 +417,17 @@ func ProcessLiveTailRequest(ctx context.Context, w http.ResponseWriter, r *http. if !ok { logger.Panicf("BUG: it is expected that http.ResponseWriter (%T) supports http.Flusher interface", w) } + qOrig := q for { start := end - tailOffsetNsecs end = time.Now().UnixNano() - qCopy := q.Clone() - qCopy.AddTimeFilter(start, end) - if err := vlstorage.RunQuery(ctxWithCancel, tenantIDs, qCopy, tp.writeBlock); err != nil { + q = qOrig.Clone(end) + q.AddTimeFilter(start, end) + // q.Optimize() call is needed for converting '*' into filterNoop. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785#issuecomment-2358547733 + q.Optimize() + if err := vlstorage.RunQuery(ctxWithCancel, tenantIDs, q, tp.writeBlock); err != nil { httpserver.Errorf(w, r, "cannot execute tail query [%s]: %s", q, err) return } @@ -862,7 +866,8 @@ func getLastNQueryResults(ctx context.Context, tenantIDs []logstorage.TenantID, qOrig := q for { - q = qOrig.Clone() + timestamp := qOrig.GetTimestamp() + q = qOrig.Clone(timestamp) q.AddTimeFilter(start, end) // q.Optimize() call is needed for converting '*' into filterNoop. // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785#issuecomment-2358547733 diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 4a88ee19e9..1dfe558af7 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -19,6 +19,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. +* BUGFIX: properly returns logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index ea42a1688f..3bfccbc42c 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -336,9 +336,8 @@ func (q *Query) AddCountByTimePipe(step, off int64, fields []string) { } // Clone returns a copy of q. -func (q *Query) Clone() *Query { +func (q *Query) Clone(timestamp int64) *Query { qStr := q.String() - timestamp := q.GetTimestamp() qCopy, err := ParseQueryAtTimestamp(qStr, timestamp) if err != nil { logger.Panicf("BUG: cannot parse %q: %s", qStr, err) diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index 3526446328..5a2ec2ec9b 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -2000,7 +2000,8 @@ func TestQueryClone(t *testing.T) { if err != nil { t.Fatalf("cannot parse [%s]: %s", qStr, err) } - qCopy := q.Clone() + timestamp := q.GetTimestamp() + qCopy := q.Clone(timestamp) qCopyStr := qCopy.String() if qStr != qCopyStr { t.Fatalf("unexpected cloned query\ngot\n%s\nwant\n%s", qCopyStr, qStr) From c6b2cac8921466bf0cf8c6ec403aa9054ef49947 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 09:00:55 +0200 Subject: [PATCH 104/128] docs/VictoriaLogs/CHANGELOG.md: typo fix after 255d1d4e139acc0bc66cfbec2ecdaffdf9177e14: returns -> return --- docs/VictoriaLogs/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 1dfe558af7..d1e8de1853 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -19,7 +19,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. -* BUGFIX: properly returns logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). +* BUGFIX: properly return logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) From 2ec0cfec62f0aef005c6df182f98028db63cc7e7 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 09:15:25 +0200 Subject: [PATCH 105/128] docs/VictoriaLogs/CHANGELOG.md: document the fix for Windows build This is a follow-up for 264c2ec6bd78fcf222780e9aea91793563591702 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6998 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973 --- docs/VictoriaLogs/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index d1e8de1853..a56ba2bbf6 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -19,6 +19,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. +* BUGFIX: fix Windows build, which has been broken in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973). * BUGFIX: properly return logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. From 7185fe012b14bed0c1a9850a2d054e609e22dff8 Mon Sep 17 00:00:00 2001 From: Zhu Jiekun Date: Thu, 26 Sep 2024 15:35:28 +0800 Subject: [PATCH 106/128] feature: [victorialogs] drop logs without non-empty _msg field (#7056) ### Describe Your Changes VictoriaLogs allows logs without `_msg` field or `_msg` field is empty. This lead to incorrect search result. See: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785 This pull request search for non-empty `_msg` field before log entry is added to `LogRows`. New counter `vl_rows_dropped_total{reason="msg_not_exist"}` is introduced. Example log output: ``` 2024-09-23T02:33:19.719Z warn app/vlinsert/insertutils/common_params.go:189 dropping log line without _msg field; [{@timestamp 2024-09-18T13:42:16.600000000Z} {Attributes.array.attribute ["many","values"]} {Attributes.boolean.attribute true} {Attributes.double.attribute 637.704} {Attributes.int.attribute 10} {Attributes.map.attribute.some.map.key some value} {Attributes.string.attribute some string} {Body Example ddddddddddlog record} {Resource.service.name my.service} {Scope.my.scope.attribute some scope attribute} {Scope.name my.library} {Scope.version 1.0.0} {SeverityNumber 10} {SeverityText Information} {SpanId eee19b7ec3c1b174} {TraceFlags 0} {TraceId 5b8efff798038103d269b633813fc60c}] ``` ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). - [ ] Benchmark for potential performance loss. --------- Co-authored-by: Aliaksandr Valialkin --- app/vlinsert/insertutils/common_params.go | 16 ++++++++++++++++ docs/VictoriaLogs/CHANGELOG.md | 1 + 2 files changed, 17 insertions(+) diff --git a/app/vlinsert/insertutils/common_params.go b/app/vlinsert/insertutils/common_params.go index 12a56ee99d..df4df79c4a 100644 --- a/app/vlinsert/insertutils/common_params.go +++ b/app/vlinsert/insertutils/common_params.go @@ -176,6 +176,21 @@ func (lmp *logMessageProcessor) AddRow(timestamp int64, fields []logstorage.Fiel return } + // _msg field must exist and not empty + msgExist := false + for i := range fields { + if fields[i].Name == `_msg` { + msgExist = len(fields[i].Value) > 0 + break + } + } + if !msgExist { + rf := logstorage.RowFormatter(fields) + logger.Warnf("dropping log line without _msg field; %s", rf) + rowsDroppedTotalMsgNotValid.Inc() + return + } + lmp.lr.MustAdd(lmp.cp.TenantID, timestamp, fields) if lmp.cp.Debug { s := lmp.lr.GetRowString(0) @@ -225,4 +240,5 @@ func (cp *CommonParams) NewLogMessageProcessor() LogMessageProcessor { var ( rowsDroppedTotalDebug = metrics.NewCounter(`vl_rows_dropped_total{reason="debug"}`) rowsDroppedTotalTooManyFields = metrics.NewCounter(`vl_rows_dropped_total{reason="too_many_fields"}`) + rowsDroppedTotalMsgNotValid = metrics.NewCounter(`vl_rows_dropped_total{reason="msg_not_exist"}`) ) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index a56ba2bbf6..0b6b46c1dc 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -16,6 +16,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add button for enabling auto refresh, similarly to VictoriaMetrics vmui. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7017). +* FEATURE: drop logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field or with empty `_msg` field, since this field is required to be non-empty in [VictoriaLogs data model](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. From 7c86835f3c32fb48ca6cb6783c244950a541bd5e Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 09:41:30 +0200 Subject: [PATCH 107/128] docs/VictoriaLogs/CHANGELOG.md: typo fix: itentifying -> identifying --- docs/VictoriaLogs/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 0b6b46c1dc..df52a60609 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -22,7 +22,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * BUGFIX: fix Windows build, which has been broken in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973). * BUGFIX: properly return logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). -* BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for itentifying the root cause of the issue. +* BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for identifying the root cause of the issue. ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) From 6b775ca68c4cd2a4e00ce14db5fb180028186e0f Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 09:53:17 +0200 Subject: [PATCH 108/128] app/vlinsert/insertutils: add a link to docs why _msg field must be non-empty --- app/vlinsert/insertutils/common_params.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/vlinsert/insertutils/common_params.go b/app/vlinsert/insertutils/common_params.go index df4df79c4a..733079ce04 100644 --- a/app/vlinsert/insertutils/common_params.go +++ b/app/vlinsert/insertutils/common_params.go @@ -176,10 +176,11 @@ func (lmp *logMessageProcessor) AddRow(timestamp int64, fields []logstorage.Fiel return } - // _msg field must exist and not empty + // _msg field must be non-empty according to VictoriaLogs data model. + // See https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field msgExist := false for i := range fields { - if fields[i].Name == `_msg` { + if fields[i].Name == "_msg" { msgExist = len(fields[i].Value) > 0 break } From 037652d5aee069289bd762e7dcab5b808735af77 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 12:43:16 +0200 Subject: [PATCH 109/128] app/vlinsert: support `_time` field without timezone information during data ingestion Use local timezone of the host server in this case. The timezone can be overridden with TZ environment variable if needed. While at it, allow using whitespace instead of T as a delimiter between data and time in the ingested _time field. For example, '2024-09-20 10:20:30' is now accepted during data ingestion. This is valid ISO8601 format, which is used by some log shippers, so it should be supported. This format is also known as SQL datetime format. Also assume local time zone when time without timezone information is passed to querying APIs. Previously such a time was parsed in UTC timezone. Add `Z` to the end of the time string if the old behaviour is preferred. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721 --- .../elasticsearch/elasticsearch_test.go | 4 +- app/vlinsert/insertutils/timestamp_test.go | 3 - app/vlinsert/jsonline/jsonline_test.go | 6 +- app/vmctl/utils/time_test.go | 25 ++++----- docs/README.md | 6 +- docs/VictoriaLogs/CHANGELOG.md | 2 + docs/VictoriaLogs/LogsQL.md | 23 ++++---- docs/VictoriaLogs/data-ingestion/README.md | 12 ++-- docs/VictoriaLogs/keyConcepts.md | 5 +- docs/VictoriaLogs/querying/README.md | 4 +- lib/httputils/time_test.go | 23 ++++---- lib/logstorage/parser_test.go | 24 +++----- lib/logstorage/syslog_parser.go | 2 +- lib/logstorage/values_encoder.go | 55 +++++++++++-------- lib/logstorage/values_encoder_test.go | 10 ++-- lib/promutils/time.go | 10 ++++ lib/promutils/time_test.go | 6 -- lib/timeutil/timezone.go | 30 ++++++++++ 18 files changed, 144 insertions(+), 106 deletions(-) create mode 100644 lib/timeutil/timezone.go diff --git a/app/vlinsert/elasticsearch/elasticsearch_test.go b/app/vlinsert/elasticsearch/elasticsearch_test.go index 1874fdefca..ca88d2ccca 100644 --- a/app/vlinsert/elasticsearch/elasticsearch_test.go +++ b/app/vlinsert/elasticsearch/elasticsearch_test.go @@ -76,14 +76,14 @@ func TestReadBulkRequest_Success(t *testing.T) { data := `{"create":{"_index":"filebeat-8.8.0"}} {"@timestamp":"2023-06-06T04:48:11.735Z","log":{"offset":71770,"file":{"path":"/var/log/auth.log"}},"message":"foobar"} {"create":{"_index":"filebeat-8.8.0"}} -{"@timestamp":"2023-06-06T04:48:12.735Z","message":"baz"} +{"@timestamp":"2023-06-06 04:48:12.735+01:00","message":"baz"} {"index":{"_index":"filebeat-8.8.0"}} {"message":"xyz","@timestamp":"2023-06-06T04:48:13.735Z","x":"y"} ` timeField := "@timestamp" msgField := "message" rowsExpected := 3 - timestampsExpected := []int64{1686026891735000000, 1686026892735000000, 1686026893735000000} + timestampsExpected := []int64{1686026891735000000, 1686023292735000000, 1686026893735000000} resultExpected := `{"@timestamp":"","log.offset":"71770","log.file.path":"/var/log/auth.log","_msg":"foobar"} {"@timestamp":"","_msg":"baz"} {"_msg":"xyz","@timestamp":"","x":"y"}` diff --git a/app/vlinsert/insertutils/timestamp_test.go b/app/vlinsert/insertutils/timestamp_test.go index ca7f9d572e..a386f09faa 100644 --- a/app/vlinsert/insertutils/timestamp_test.go +++ b/app/vlinsert/insertutils/timestamp_test.go @@ -66,9 +66,6 @@ func TestExtractTimestampRFC3339NanoFromFields_Error(t *testing.T) { f("foobar") - // no Z at the end - f("2024-06-18T23:37:20") - // incomplete time f("2024-06-18") f("2024-06-18T23:37") diff --git a/app/vlinsert/jsonline/jsonline_test.go b/app/vlinsert/jsonline/jsonline_test.go index 153b4db19f..068bfb92f0 100644 --- a/app/vlinsert/jsonline/jsonline_test.go +++ b/app/vlinsert/jsonline/jsonline_test.go @@ -23,13 +23,13 @@ func TestProcessStreamInternal_Success(t *testing.T) { } data := `{"@timestamp":"2023-06-06T04:48:11.735Z","log":{"offset":71770,"file":{"path":"/var/log/auth.log"}},"message":"foobar"} -{"@timestamp":"2023-06-06T04:48:12.735Z","message":"baz"} -{"message":"xyz","@timestamp":"2023-06-06T04:48:13.735Z","x":"y"} +{"@timestamp":"2023-06-06T04:48:12.735+01:00","message":"baz"} +{"message":"xyz","@timestamp":"2023-06-06 04:48:13.735Z","x":"y"} ` timeField := "@timestamp" msgField := "message" rowsExpected := 3 - timestampsExpected := []int64{1686026891735000000, 1686026892735000000, 1686026893735000000} + timestampsExpected := []int64{1686026891735000000, 1686023292735000000, 1686026893735000000} resultExpected := `{"@timestamp":"","log.offset":"71770","log.file.path":"/var/log/auth.log","_msg":"foobar"} {"@timestamp":"","_msg":"baz"} {"_msg":"xyz","@timestamp":"","x":"y"}` diff --git a/app/vmctl/utils/time_test.go b/app/vmctl/utils/time_test.go index b469a58993..b2210c9e21 100644 --- a/app/vmctl/utils/time_test.go +++ b/app/vmctl/utils/time_test.go @@ -36,40 +36,37 @@ func TestGetTime_Success(t *testing.T) { } // only year - f("2019", time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)) + f("2019Z", time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)) // year and month - f("2019-01", time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)) + f("2019-01Z", time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)) // year and not first month - f("2019-02", time.Date(2019, 2, 1, 0, 0, 0, 0, time.UTC)) + f("2019-02Z", time.Date(2019, 2, 1, 0, 0, 0, 0, time.UTC)) // year, month and day - f("2019-02-01", time.Date(2019, 2, 1, 0, 0, 0, 0, time.UTC)) + f("2019-02-01Z", time.Date(2019, 2, 1, 0, 0, 0, 0, time.UTC)) // year, month and not first day - f("2019-02-10", time.Date(2019, 2, 10, 0, 0, 0, 0, time.UTC)) + f("2019-02-10Z", time.Date(2019, 2, 10, 0, 0, 0, 0, time.UTC)) // year, month, day and time - f("2019-02-02T00", time.Date(2019, 2, 2, 0, 0, 0, 0, time.UTC)) + f("2019-02-02T00Z", time.Date(2019, 2, 2, 0, 0, 0, 0, time.UTC)) // year, month, day and one hour time - f("2019-02-02T01", time.Date(2019, 2, 2, 1, 0, 0, 0, time.UTC)) + f("2019-02-02T01Z", time.Date(2019, 2, 2, 1, 0, 0, 0, time.UTC)) // time with zero minutes - f("2019-02-02T01:00", time.Date(2019, 2, 2, 1, 0, 0, 0, time.UTC)) + f("2019-02-02T01:00Z", time.Date(2019, 2, 2, 1, 0, 0, 0, time.UTC)) // time with one minute - f("2019-02-02T01:01", time.Date(2019, 2, 2, 1, 1, 0, 0, time.UTC)) + f("2019-02-02T01:01Z", time.Date(2019, 2, 2, 1, 1, 0, 0, time.UTC)) // time with zero seconds - f("2019-02-02T01:01:00", time.Date(2019, 2, 2, 1, 1, 0, 0, time.UTC)) + f("2019-02-02T01:01:00Z", time.Date(2019, 2, 2, 1, 1, 0, 0, time.UTC)) // timezone with one second - f("2019-02-02T01:01:01", time.Date(2019, 2, 2, 1, 1, 1, 0, time.UTC)) - - // time with two second and timezone - f("2019-07-07T20:01:02Z", time.Date(2019, 7, 7, 20, 1, 02, 0, time.UTC)) + f("2019-02-02T01:01:01Z", time.Date(2019, 2, 2, 1, 1, 1, 0, time.UTC)) // time with seconds and timezone f("2019-07-07T20:47:40+03:00", func() time.Time { diff --git a/docs/README.md b/docs/README.md index 33e02541c8..f0e2e1af16 100644 --- a/docs/README.md +++ b/docs/README.md @@ -974,11 +974,11 @@ in [export APIs](https://docs.victoriametrics.com/#how-to-export-time-series). - Unix timestamps in milliseconds. For example, `1562529662678`. - [RFC3339](https://www.ietf.org/rfc/rfc3339.txt). For example, `2022-03-29T01:02:03Z` or `2022-03-29T01:02:03+02:30`. - Partial RFC3339. Examples: `2022`, `2022-03`, `2022-03-29`, `2022-03-29T01`, `2022-03-29T01:02`, `2022-03-29T01:02:03`. - The partial RFC3339 time is in UTC timezone by default. It is possible to specify timezone there by adding `+hh:mm` or `-hh:mm` suffix to partial time. - For example, `2022-03-01+06:30` is `2022-03-01` at `06:30` timezone. + The partial RFC3339 time is in local timezone of the host where VictoriaMetrics runs. + It is possible to specify the needed timezone by adding `Z` (UTC), `+hh:mm` or `-hh:mm` suffix to partial time. + For example, `2022-03-01Z` corresponds to the given date in UTC timezone, while `2022-03-01+06:30` corresponds to `2022-03-01` date at `06:30` timezone. - Relative duration comparing to the current time. For example, `1h5m`, `-1h5m` or `now-1h5m` means `one hour and five minutes ago`, while `now` means `now`. - ## Graphite API usage VictoriaMetrics supports data ingestion in Graphite protocol - see [these docs](#how-to-send-data-from-graphite-compatible-agents-such-as-statsd) for details. diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index df52a60609..6402685a4c 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -19,10 +19,12 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: drop logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field or with empty `_msg` field, since this field is required to be non-empty in [VictoriaLogs data model](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. +* FEATURE: support [ingesting logs](https://docs.victoriametrics.com/victorialogs/data-ingestion/) with `_time` field, which doesn't contain timezone information. For example, `2024-09-20T10:20:30`. In this case the local timezone of the host where VictoriaLogs runs is used. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721). * BUGFIX: fix Windows build, which has been broken in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973). * BUGFIX: properly return logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for identifying the root cause of the issue. +* BUGFIX: support [ingesting logs](https://docs.victoriametrics.com/victorialogs/data-ingestion/) with `_time` field containing whitespace delimiter between the date and time instead of `T` delimiter. For example, `2024-09-20 10:20:30`. This is valid [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601) aka `SQL datetime` format, which sometimes is used in production. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721). ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index 5e2ee15a8c..8802cfb38d 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -294,28 +294,31 @@ The following formats are supported for `_time` filter: - `_time:5m` - returns logs for the last 5 minutes - `_time:2.5d15m42.345s` - returns logs for the last 2.5 days, 15 minutes and 42.345 seconds - `_time:1y` - returns logs for the last year -- `_time:YYYY-MM-DD` - matches all the logs for the particular day by UTC. For example, `_time:2023-04-25` matches logs on April 25, 2023 by UTC. -- `_time:YYYY-MM` - matches all the logs for the particular month by UTC. For example, `_time:2023-02` matches logs on February, 2023 by UTC. -- `_time:YYYY` - matches all the logs for the particular year by UTC. For example, `_time:2023` matches logs on 2023 by UTC. -- `_time:YYYY-MM-DDTHH` - matches all the logs for the particular hour by UTC. For example, `_time:2023-04-25T22` matches logs on April 25, 2023 at 22 hour by UTC. -- `_time:YYYY-MM-DDTHH:MM` - matches all the logs for the particular minute by UTC. For example, `_time:2023-04-25T22:45` matches logs on April 25, 2023 at 22:45 by UTC. -- `_time:YYYY-MM-DDTHH:MM:SS` - matches all the logs for the particular second by UTC. For example, `_time:2023-04-25T22:45:59` matches logs on April 25, 2023 at 22:45:59 by UTC. +- `_time:YYYY-MM-DDZ` - matches all the logs for the particular day by UTC. For example, `_time:2023-04-25Z` matches logs on April 25, 2023 by UTC. +- `_time:YYYY-MMZ` - matches all the logs for the particular month by UTC. For example, `_time:2023-02Z` matches logs on February, 2023 by UTC. +- `_time:YYYYZ` - matches all the logs for the particular year by UTC. For example, `_time:2023Z` matches logs on 2023 by UTC. +- `_time:YYYY-MM-DDTHHZ` - matches all the logs for the particular hour by UTC. For example, `_time:2023-04-25T22Z` matches logs on April 25, 2023 at 22 hour by UTC. +- `_time:YYYY-MM-DDTHH:MMZ` - matches all the logs for the particular minute by UTC. For example, `_time:2023-04-25T22:45Z` matches logs on April 25, 2023 at 22:45 by UTC. +- `_time:YYYY-MM-DDTHH:MM:SSZ` - matches all the logs for the particular second by UTC. For example, `_time:2023-04-25T22:45:59Z` matches logs on April 25, 2023 at 22:45:59 by UTC. - `_time:[min_time, max_time]` - matches logs on the time range `[min_time, max_time]`, including both `min_time` and `max_time`. The `min_time` and `max_time` can contain any format specified [here](https://docs.victoriametrics.com/#timestamp-formats). - For example, `_time:[2023-04-01, 2023-04-30]` matches logs for the whole April, 2023 by UTC, e.g. it is equivalent to `_time:2023-04`. + For example, `_time:[2023-04-01Z, 2023-04-30Z]` matches logs for the whole April, 2023 by UTC, e.g. it is equivalent to `_time:2023-04Z`. - `_time:[min_time, max_time)` - matches logs on the time range `[min_time, max_time)`, not including `max_time`. The `min_time` and `max_time` can contain any format specified [here](https://docs.victoriametrics.com/#timestamp-formats). - For example, `_time:[2023-02-01, 2023-03-01)` matches logs for the whole February, 2023 by UTC, e.g. it is equivalent to `_time:2023-02`. + For example, `_time:[2023-02-01Z, 2023-03-01Z)` matches logs for the whole February, 2023 by UTC, e.g. it is equivalent to `_time:2023-02Z`. It is possible to specify time zone offset for all the absolute time formats by appending `+hh:mm` or `-hh:mm` suffix. For example, `_time:2023-04-25+05:30` matches all the logs on April 25, 2023 by India time zone, while `_time:2023-02-07:00` matches all the logs on February, 2023 by California time zone. +If the timezone offset information is missing, then the local time zone of the host where VictoriaLogs runs is used. +For example, `_time:2023-10-20` matches all the logs for `2023-10-20` day according to the local time zone of the host where VictoriaLogs runs. + It is possible to specify generic offset for the selected time range by appending `offset` after the `_time` filter. Examples: - `_time:5m offset 1h` matches logs on the time range `(now-1h5m, now-1h]`. -- `_time:2023-07 offset 5h30m` matches logs on July, 2023 by UTC with offset 5h30m. -- `_time:[2023-02-01, 2023-03-01) offset 1w` matches logs the week before the time range `[2023-02-01, 2023-03-01)` by UTC. +- `_time:2023-07Z offset 5h30m` matches logs on July, 2023 by UTC with offset 5h30m. +- `_time:[2023-02-01Z, 2023-03-01Z) offset 1w` matches logs the week before the time range `[2023-02-01Z, 2023-03-01Z)` by UTC. Performance tips: diff --git a/docs/VictoriaLogs/data-ingestion/README.md b/docs/VictoriaLogs/data-ingestion/README.md index 350c8fd710..523e056971 100644 --- a/docs/VictoriaLogs/data-ingestion/README.md +++ b/docs/VictoriaLogs/data-ingestion/README.md @@ -45,9 +45,9 @@ It is possible to push thousands of log lines in a single request to this API. If the [timestamp field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#time-field) is set to `"0"`, then the current timestamp at VictoriaLogs side is used per each ingested log line. -Otherwise the timestamp field must be in the [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format. For example, `2023-06-20T15:32:10Z`. -Optional fractional part of seconds can be specified after the dot - `2023-06-20T15:32:10.123Z`. -Timezone can be specified instead of `Z` suffix - `2023-06-20T15:32:10+02:00`. +Otherwise the timestamp field must be in the [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) or [RFC3339](https://www.rfc-editor.org/rfc/rfc3339) format. +For example, `2023-06-20T15:32:10Z` or `2023-06-20 15:32:10.123456789+02:00`. +If timezone information is missing (for example, `2023-06-20 15:32:10`), then the time is parsed in the local timezone of the host where VictoriaLogs runs. See [these docs](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) for details on fields, which must be present in the ingested log messages. @@ -95,9 +95,9 @@ It is possible to push unlimited number of log lines in a single request to this If the [timestamp field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#time-field) is set to `"0"`, then the current timestamp at VictoriaLogs side is used per each ingested log line. -Otherwise the timestamp field must be in the [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format. For example, `2023-06-20T15:32:10Z`. -Optional fractional part of seconds can be specified after the dot - `2023-06-20T15:32:10.123Z`. -Timezone can be specified instead of `Z` suffix - `2023-06-20T15:32:10+02:00`. +Otherwise the timestamp field must be in the [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) or [RFC3339](https://www.rfc-editor.org/rfc/rfc3339) format. +For example, `2023-06-20T15:32:10Z` or `2023-06-20 15:32:10.123456789+02:00`. +If timezone information is missing (for example, `2023-06-20 15:32:10`), then the time is parsed in the local timezone of the host where VictoriaLogs runs. See [these docs](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) for details on fields, which must be present in the ingested log messages. diff --git a/docs/VictoriaLogs/keyConcepts.md b/docs/VictoriaLogs/keyConcepts.md index f091ee1ddd..dd1e5f8d72 100644 --- a/docs/VictoriaLogs/keyConcepts.md +++ b/docs/VictoriaLogs/keyConcepts.md @@ -135,8 +135,7 @@ during [data ingestion](https://docs.victoriametrics.com/victorialogs/data-inges ### Time field The ingested [log entries](#data-model) may contain `_time` field with the timestamp of the ingested log entry. -The timestamp must be in [RFC3339](https://www.rfc-editor.org/rfc/rfc3339) format. The most commonly used subset of [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) -is also supported. It is allowed specifying seconds part of the timestamp with any precision up to nanoseconds. +The timestamp must be in [RFC3339](https://www.rfc-editor.org/rfc/rfc3339) or [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format. For example, the following [log entry](#data-model) contains valid timestamp with millisecond precision in the `_time` field: ```json @@ -146,6 +145,8 @@ For example, the following [log entry](#data-model) contains valid timestamp wit } ``` +If timezone information is missing in the `_time` field value, then the local timezone of the host where VictoriaLogs runs is used. + If the actual timestamp has other than `_time` field name, then it is possible to specify the real timestamp field via `_time_field` query arg during [data ingestion](https://docs.victoriametrics.com/victorialogs/data-ingestion/). For example, if timestamp is located in the `event.created` field, then specify `_time_field=event.created` query arg diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index fe727cac6e..3579550503 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -298,7 +298,7 @@ For example, the following command returns the number of logs per each `level` [ across logs over `2024-01-01` day by UTC: ```sh -curl http://localhost:9428/select/logsql/stats_query -d 'query=_time:1d | stats by (level) count(*)' -d 'time=2024-01-02' +curl http://localhost:9428/select/logsql/stats_query -d 'query=_time:1d | stats by (level) count(*)' -d 'time=2024-01-02Z' ``` Below is an example JSON output returned from this endpoint: @@ -373,7 +373,7 @@ For example, the following command returns the number of logs per each `level` [ across logs over `2024-01-01` day by UTC with 6-hour granularity: ```sh -curl http://localhost:9428/select/logsql/stats_query_range -d 'query=* | stats by (level) count(*)' -d 'start=2024-01-01' -d 'end=2024-01-02' -d 'step=6h' +curl http://localhost:9428/select/logsql/stats_query_range -d 'query=* | stats by (level) count(*)' -d 'start=2024-01-01Z' -d 'end=2024-01-02Z' -d 'step=6h' ``` Below is an example JSON output returned from this endpoint: diff --git a/lib/httputils/time_test.go b/lib/httputils/time_test.go index 73667e719a..751f4cf3af 100644 --- a/lib/httputils/time_test.go +++ b/lib/httputils/time_test.go @@ -35,18 +35,17 @@ func TestGetTimeSuccess(t *testing.T) { } } - f("2019", 1546300800000) - f("2019-01", 1546300800000) - f("2019-02", 1548979200000) - f("2019-02-01", 1548979200000) - f("2019-02-02", 1549065600000) - f("2019-02-02T00", 1549065600000) - f("2019-02-02T01", 1549069200000) - f("2019-02-02T01:00", 1549069200000) - f("2019-02-02T01:01", 1549069260000) - f("2019-02-02T01:01:00", 1549069260000) - f("2019-02-02T01:01:01", 1549069261000) - f("2019-07-07T20:01:02Z", 1562529662000) + f("2019Z", 1546300800000) + f("2019-01Z", 1546300800000) + f("2019-02Z", 1548979200000) + f("2019-02-01Z", 1548979200000) + f("2019-02-02Z", 1549065600000) + f("2019-02-02T00Z", 1549065600000) + f("2019-02-02T01Z", 1549069200000) + f("2019-02-02T01:00Z", 1549069200000) + f("2019-02-02T01:01Z", 1549069260000) + f("2019-02-02T01:01:00Z", 1549069260000) + f("2019-02-02T01:01:01Z", 1549069261000) f("2020-02-21T16:07:49.433Z", 1582301269433) f("2019-07-07T20:47:40+03:00", 1562521660000) f("-292273086-05-16T16:47:06Z", minTimeMsecs) diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index 5a2ec2ec9b..a4d393d426 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -159,7 +159,6 @@ func TestParseTimeRange(t *testing.T) { // _time:YYYY -> _time:[YYYY, YYYY+1) minTimestamp = time.Date(2023, time.January, 1, 0, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023", minTimestamp, maxTimestamp) f("2023Z", minTimestamp, maxTimestamp) // _time:YYYY-hh:mm -> _time:[YYYY-hh:mm, (YYYY+1)-hh:mm) @@ -175,7 +174,6 @@ func TestParseTimeRange(t *testing.T) { // _time:YYYY-MM -> _time:[YYYY-MM, YYYY-MM+1) minTimestamp = time.Date(2023, time.February, 1, 0, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-02", minTimestamp, maxTimestamp) f("2023-02Z", minTimestamp, maxTimestamp) // _time:YYYY-MM-hh:mm -> _time:[YYYY-MM-hh:mm, (YYYY-MM+1)-hh:mm) @@ -203,16 +201,15 @@ func TestParseTimeRange(t *testing.T) { // _time:YYYY-MM-DD minTimestamp = time.Date(2023, time.February, 12, 0, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.February, 13, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-02-12", minTimestamp, maxTimestamp) f("2023-02-12Z", minTimestamp, maxTimestamp) // February 28 minTimestamp = time.Date(2023, time.February, 28, 0, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-02-28", minTimestamp, maxTimestamp) + f("2023-02-28Z", minTimestamp, maxTimestamp) // January 31 minTimestamp = time.Date(2023, time.January, 31, 0, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.February, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-01-31", minTimestamp, maxTimestamp) + f("2023-01-31Z", minTimestamp, maxTimestamp) // _time:YYYY-MM-DD-hh:mm minTimestamp = time.Date(2023, time.January, 31, 2, 25, 0, 0, time.UTC).UnixNano() @@ -227,7 +224,6 @@ func TestParseTimeRange(t *testing.T) { // _time:YYYY-MM-DDTHH minTimestamp = time.Date(2023, time.February, 28, 23, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-02-28T23", minTimestamp, maxTimestamp) f("2023-02-28T23Z", minTimestamp, maxTimestamp) // _time:YYYY-MM-DDTHH-hh:mm @@ -243,7 +239,6 @@ func TestParseTimeRange(t *testing.T) { // _time:YYYY-MM-DDTHH:MM minTimestamp = time.Date(2023, time.February, 28, 23, 59, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-02-28T23:59", minTimestamp, maxTimestamp) f("2023-02-28T23:59Z", minTimestamp, maxTimestamp) // _time:YYYY-MM-DDTHH:MM-hh:mm @@ -259,7 +254,6 @@ func TestParseTimeRange(t *testing.T) { // _time:YYYY-MM-DDTHH:MM:SS-hh:mm minTimestamp = time.Date(2023, time.February, 28, 23, 59, 59, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f("2023-02-28T23:59:59", minTimestamp, maxTimestamp) f("2023-02-28T23:59:59Z", minTimestamp, maxTimestamp) // _time:[YYYY-MM-DDTHH:MM:SS.sss, YYYY-MM-DDTHH:MM:SS.sss) @@ -290,28 +284,28 @@ func TestParseTimeRange(t *testing.T) { // _time:(start, end) minTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() + 1 maxTimestamp = time.Date(2023, time.April, 6, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f(`(2023-03-01,2023-04-06)`, minTimestamp, maxTimestamp) + f(`(2023-03-01Z,2023-04-06Z)`, minTimestamp, maxTimestamp) // _time:[start, end) minTimestamp = time.Date(2023, time.March, 1, 0, 0, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.April, 6, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f(`[2023-03-01,2023-04-06)`, minTimestamp, maxTimestamp) + f(`[2023-03-01Z,2023-04-06Z)`, minTimestamp, maxTimestamp) // _time:(start, end] minTimestamp = time.Date(2023, time.March, 1, 21, 20, 0, 0, time.UTC).UnixNano() + 1 maxTimestamp = time.Date(2023, time.April, 7, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f(`(2023-03-01T21:20,2023-04-06]`, minTimestamp, maxTimestamp) + f(`(2023-03-01T21:20Z,2023-04-06Z]`, minTimestamp, maxTimestamp) // _time:[start, end] with timezone minTimestamp = time.Date(2023, time.February, 28, 21, 40, 0, 0, time.UTC).UnixNano() maxTimestamp = time.Date(2023, time.April, 7, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - f(`[2023-03-01+02:20,2023-04-06T23]`, minTimestamp, maxTimestamp) + f(`[2023-03-01+02:20,2023-04-06T23Z]`, minTimestamp, maxTimestamp) // _time:[start, end] with timezone and offset offset := int64(30*time.Minute + 5*time.Second) minTimestamp = time.Date(2023, time.February, 28, 21, 40, 0, 0, time.UTC).UnixNano() - offset maxTimestamp = time.Date(2023, time.April, 7, 0, 0, 0, 0, time.UTC).UnixNano() - 1 - offset - f(`[2023-03-01+02:20,2023-04-06T23] offset 30m5s`, minTimestamp, maxTimestamp) + f(`[2023-03-01+02:20,2023-04-06T23Z] offset 30m5s`, minTimestamp, maxTimestamp) } func TestParseFilterSequence(t *testing.T) { @@ -2030,8 +2024,8 @@ func TestQueryGetFilterTimeRange(t *testing.T) { f("*", -9223372036854775808, 9223372036854775807) f("_time:2024-05-31T10:20:30.456789123Z", 1717150830456789123, 1717150830456789123) - f("_time:2024-05-31", 1717113600000000000, 1717199999999999999) - f("_time:2024-05-31 _time:day_range[08:00, 16:00]", 1717113600000000000, 1717199999999999999) + f("_time:2024-05-31Z", 1717113600000000000, 1717199999999999999) + f("_time:2024-05-31Z _time:day_range[08:00, 16:00]", 1717113600000000000, 1717199999999999999) } func TestQueryCanReturnLastNResults(t *testing.T) { diff --git a/lib/logstorage/syslog_parser.go b/lib/logstorage/syslog_parser.go index b60a242dfa..25c5b49610 100644 --- a/lib/logstorage/syslog_parser.go +++ b/lib/logstorage/syslog_parser.go @@ -62,7 +62,7 @@ type SyslogParser struct { // currentYear is used as the current year for rfc3164 messages. currentYear int - // timezeon is used as the current timezeon for rfc3164 messages. + // timezone is used as the current timezone for rfc3164 messages. timezone *time.Location } diff --git a/lib/logstorage/values_encoder.go b/lib/logstorage/values_encoder.go index 178ad87bf4..dc7dfebee7 100644 --- a/lib/logstorage/values_encoder.go +++ b/lib/logstorage/values_encoder.go @@ -12,6 +12,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/encoding" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/timeutil" ) // valueType is the type of values stored in every column block. @@ -283,11 +284,13 @@ func tryTimestampISO8601Encoding(dstBuf []byte, dstValues, srcValues []string) ( return dstBuf, dstValues, valueTypeTimestampISO8601, uint64(minValue), uint64(maxValue) } -// TryParseTimestampRFC3339Nano parses 'YYYY-MM-DDThh:mm:ss' with optional nanoseconds part and timezone offset and returns unix timestamp in nanoseconds. +// TryParseTimestampRFC3339Nano parses s as RFC3339 with optional nanoseconds part and timezone offset and returns unix timestamp in nanoseconds. +// +// If s doesn't contain timezone offset, then the local timezone is used. // // The returned timestamp can be negative if s is smaller than 1970 year. func TryParseTimestampRFC3339Nano(s string) (int64, bool) { - if len(s) < len("2006-01-02T15:04:05Z") { + if len(s) < len("2006-01-02T15:04:05") { return 0, false } @@ -301,28 +304,29 @@ func TryParseTimestampRFC3339Nano(s string) (int64, bool) { // Parse timezone offset n := strings.IndexAny(s, "Z+-") if n < 0 { - return 0, false - } - offsetStr := s[n+1:] - if s[n] != 'Z' { - isMinus := s[n] == '-' - if len(offsetStr) == 0 { - return 0, false - } - offsetNsecs, ok := tryParseTimezoneOffset(offsetStr) - if !ok { - return 0, false - } - if isMinus { - offsetNsecs = -offsetNsecs - } - nsecs -= offsetNsecs + nsecs -= timeutil.GetLocalTimezoneOffsetNsecs() } else { - if len(offsetStr) != 0 { - return 0, false + offsetStr := s[n+1:] + if s[n] != 'Z' { + isMinus := s[n] == '-' + if len(offsetStr) == 0 { + return 0, false + } + offsetNsecs, ok := tryParseTimezoneOffset(offsetStr) + if !ok { + return 0, false + } + if isMinus { + offsetNsecs = -offsetNsecs + } + nsecs -= offsetNsecs + } else { + if len(offsetStr) != 0 { + return 0, false + } } + s = s[:n] } - s = s[:n] // Parse optional fractional part of seconds. if len(s) == 0 { @@ -434,8 +438,13 @@ func tryParseTimestampSecs(s string) (int64, bool, string) { month := time.Month(n) s = s[len("MM")+1:] - // Parse day - if s[len("DD")] != 'T' { + // Parse day. + // + // Allow whitespace additionally to T as the delimiter after DD, + // so SQL datetime format can be parsed additionally to RFC3339. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721 + delim := s[len("DD")] + if delim != 'T' && delim != ' ' { return 0, false, s } dayStr := s[:len("DD")] diff --git a/lib/logstorage/values_encoder_test.go b/lib/logstorage/values_encoder_test.go index 6ec9f7e50b..b71b457472 100644 --- a/lib/logstorage/values_encoder_test.go +++ b/lib/logstorage/values_encoder_test.go @@ -151,6 +151,7 @@ func TestTryParseIPv4_Failure(t *testing.T) { func TestTryParseTimestampRFC3339NanoString_Success(t *testing.T) { f := func(s, timestampExpected string) { t.Helper() + nsecs, ok := TryParseTimestampRFC3339Nano(s) if !ok { t.Fatalf("cannot parse timestamp %q", s) @@ -184,6 +185,11 @@ func TestTryParseTimestampRFC3339NanoString_Success(t *testing.T) { // timestamp with timezone f("2023-01-16T00:45:51+01:00", "2023-01-15T23:45:51Z") f("2023-01-16T00:45:51.123-01:00", "2023-01-16T01:45:51.123Z") + + // SQL datetime format + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721 + f("2023-01-16 00:45:51+01:00", "2023-01-15T23:45:51Z") + f("2023-01-16 00:45:51.123-01:00", "2023-01-16T01:45:51.123Z") } func TestTryParseTimestampRFC3339Nano_Failure(t *testing.T) { @@ -199,10 +205,6 @@ func TestTryParseTimestampRFC3339Nano_Failure(t *testing.T) { f("") f("foobar") - // Missing Z at the end - f("2023-01-15T22:15:51") - f("2023-01-15T22:15:51.123") - // missing fractional part after dot f("2023-01-15T22:15:51.Z") diff --git a/lib/promutils/time.go b/lib/promutils/time.go index b2ac05dc01..6372d36678 100644 --- a/lib/promutils/time.go +++ b/lib/promutils/time.go @@ -6,6 +6,8 @@ import ( "strconv" "strings" "time" + + "github.com/VictoriaMetrics/VictoriaMetrics/lib/timeutil" ) // ParseTimeMsec parses time s in different formats. @@ -33,6 +35,8 @@ const ( // // See https://docs.victoriametrics.com/single-server-victoriametrics/#timestamp-formats // +// If s doesn't contain timezone information, then the local timezone is used. +// // It returns unix timestamp in nanoseconds. func ParseTimeAt(s string, currentTimestamp int64) (int64, error) { if s == "now" { @@ -58,6 +62,12 @@ func ParseTimeAt(s string, currentTimestamp int64) (int64, error) { tzOffset = -tzOffset } s = sOrig[:len(sOrig)-6] + } else { + if !strings.HasSuffix(s, "Z") { + tzOffset = -timeutil.GetLocalTimezoneOffsetNsecs() + } else { + s = s[:len(s)-1] + } } } s = strings.TrimSuffix(s, "Z") diff --git a/lib/promutils/time_test.go b/lib/promutils/time_test.go index 2f9e76b52b..0c41fb671d 100644 --- a/lib/promutils/time_test.go +++ b/lib/promutils/time_test.go @@ -37,37 +37,31 @@ func TestParseTimeAtSuccess(t *testing.T) { f("now-1h5m", now, now-(3600+5*60)*1e9) // Year - f("2023", now, 1.6725312e+09*1e9) f("2023Z", now, 1.6725312e+09*1e9) f("2023+02:00", now, 1.672524e+09*1e9) f("2023-02:00", now, 1.6725384e+09*1e9) // Year and month - f("2023-05", now, 1.6828992e+09*1e9) f("2023-05Z", now, 1.6828992e+09*1e9) f("2023-05+02:00", now, 1.682892e+09*1e9) f("2023-05-02:00", now, 1.6829064e+09*1e9) // Year, month and day - f("2023-05-20", now, 1.6845408e+09*1e9) f("2023-05-20Z", now, 1.6845408e+09*1e9) f("2023-05-20+02:30", now, 1.6845318e+09*1e9) f("2023-05-20-02:30", now, 1.6845498e+09*1e9) // Year, month, day and hour - f("2023-05-20T04", now, 1.6845552e+09*1e9) f("2023-05-20T04Z", now, 1.6845552e+09*1e9) f("2023-05-20T04+02:30", now, 1.6845462e+09*1e9) f("2023-05-20T04-02:30", now, 1.6845642e+09*1e9) // Year, month, day, hour and minute - f("2023-05-20T04:57", now, 1.68455862e+09*1e9) f("2023-05-20T04:57Z", now, 1.68455862e+09*1e9) f("2023-05-20T04:57+02:30", now, 1.68454962e+09*1e9) f("2023-05-20T04:57-02:30", now, 1.68456762e+09*1e9) // Year, month, day, hour, minute and second - f("2023-05-20T04:57:43", now, 1.684558663e+09*1e9) f("2023-05-20T04:57:43Z", now, 1.684558663e+09*1e9) f("2023-05-20T04:57:43+02:30", now, 1.684549663e+09*1e9) f("2023-05-20T04:57:43-02:30", now, 1.684567663e+09*1e9) diff --git a/lib/timeutil/timezone.go b/lib/timeutil/timezone.go new file mode 100644 index 0000000000..c2f51f7778 --- /dev/null +++ b/lib/timeutil/timezone.go @@ -0,0 +1,30 @@ +package timeutil + +import ( + "sync/atomic" + "time" +) + +// GetLocalTimezoneOffsetNsecs returns local timezone offset in nanoseconds. +func GetLocalTimezoneOffsetNsecs() int64 { + return localTimezoneOffsetNsecs.Load() +} + +var localTimezoneOffsetNsecs atomic.Int64 + +func updateLocalTimezoneOffsetNsecs() { + _, offset := time.Now().Zone() + nsecs := int64(offset) * 1e9 + localTimezoneOffsetNsecs.Store(nsecs) +} + +func init() { + updateLocalTimezoneOffsetNsecs() + // Update local timezone offset in a loop, since it may change over the year due to DST. + go func() { + t := time.NewTicker(5 * time.Second) + for range t.C { + updateLocalTimezoneOffsetNsecs() + } + }() +} From 4b1611267f9baf100fed3efbe60e96d57ec309f2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 16:52:55 +0200 Subject: [PATCH 110/128] lib/logstorage: properly return surrounding logs outside the selected time range by stream_context pipe Previously only logs inside the selected time range could be returned by stream_context pipe. For example, the following query could return up to 10 surrounding logs only for the last 5 minutes, while most users expect this query should return up to 10 surrounding logs without restrictions on the time range. _time:5m panic | stream_context before 10 This enables the ability to implement stream context feature at VictoriaLogs web UI: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7063 . Reduce memory usage when returning stream context over big log streams with millions of entries. The new logic scans over all the log messages for the selected log stream, while keeping in memory only the given number of surrounding logs. Previously all the logs for the given log stream on the selected time range were loaded in memory before selecting the needed surrounding logs. This should help https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6730 . Reduce the scan performance for big log streams by fetching only the requested fields. For example, the following query should be executed much faster than before if logs contain many fields other than _stream, _msg and _time: panic | stream_context after 30 | fields _stream, _msg, _time --- docs/VictoriaLogs/CHANGELOG.md | 2 + lib/contextutil/stop_chan_context.go | 47 +++ lib/logstorage/pipe_stream_context.go | 422 ++++++++++++++++++-------- lib/logstorage/storage_search.go | 2 +- lib/logstorage/storage_search_test.go | 6 +- 5 files changed, 342 insertions(+), 137 deletions(-) create mode 100644 lib/contextutil/stop_chan_context.go diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 6402685a4c..eb8231f561 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -20,11 +20,13 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). * FEATURE: add [`blocks_count` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#blocks_count-pipe), which can be used for counting the number of matching blocks for the given query. For example, `_time:5m | blocks_count` returns the number of blocks with logs for the last 5 minutes. This pipe can be useful for debugging purposes. * FEATURE: support [ingesting logs](https://docs.victoriametrics.com/victorialogs/data-ingestion/) with `_time` field, which doesn't contain timezone information. For example, `2024-09-20T10:20:30`. In this case the local timezone of the host where VictoriaLogs runs is used. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721). +* FEATURE: reduce memory usage when [`stream_context` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stream_context-pipe) is applied to [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) with big number of messages. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6730). * BUGFIX: fix Windows build, which has been broken in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6973). * BUGFIX: properly return logs from [`/select/logsql/tail` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#live-tailing) if the query contains [`_time:some_duration` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) like `_time:5m`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7028). The bug has been introduced in [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs). * BUGFIX: properly return logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field when `*` query is passed to [`/select/logsql/query` endpoint](https://docs.victoriametrics.com/victorialogs/querying/#querying-logs) together with positive `limit` arg. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). Thanks to @jiekun for identifying the root cause of the issue. * BUGFIX: support [ingesting logs](https://docs.victoriametrics.com/victorialogs/data-ingestion/) with `_time` field containing whitespace delimiter between the date and time instead of `T` delimiter. For example, `2024-09-20 10:20:30`. This is valid [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601) aka `SQL datetime` format, which sometimes is used in production. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6721). +* BUGFIX: return all the requested surrounding logs for [`stream_context` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stream_context-pipe). Previously only logs matching the [`_time` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) were returned. This is needed for [this feature](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7063). ## [v0.29.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.29.0-victorialogs) diff --git a/lib/contextutil/stop_chan_context.go b/lib/contextutil/stop_chan_context.go new file mode 100644 index 0000000000..76e487c6da --- /dev/null +++ b/lib/contextutil/stop_chan_context.go @@ -0,0 +1,47 @@ +package contextutil + +import ( + "context" + "time" +) + +// NewStopChanContext returns new context for the given stopCh, together with cancel function. +// +// The returned context is canceled on the following events: +// +// - when stopCh is closed +// - when the returned CancelFunc is called +// +// The caller must call the returned CancelFunc when the context is no longer needed. +func NewStopChanContext(stopCh <-chan struct{}) (context.Context, context.CancelFunc) { + ctx := &stopChanContext{ + stopCh: stopCh, + } + return context.WithCancel(ctx) +} + +// stopChanContext implements context.Context for stopCh passed to newStopChanContext. +type stopChanContext struct { + stopCh <-chan struct{} +} + +func (ctx *stopChanContext) Deadline() (time.Time, bool) { + return time.Time{}, false +} + +func (ctx *stopChanContext) Done() <-chan struct{} { + return ctx.stopCh +} + +func (ctx *stopChanContext) Err() error { + select { + case <-ctx.stopCh: + return context.Canceled + default: + return nil + } +} + +func (ctx *stopChanContext) Value(key any) any { + return nil +} diff --git a/lib/logstorage/pipe_stream_context.go b/lib/logstorage/pipe_stream_context.go index 679e193861..9b4b9f5358 100644 --- a/lib/logstorage/pipe_stream_context.go +++ b/lib/logstorage/pipe_stream_context.go @@ -1,15 +1,17 @@ package logstorage import ( - "context" + "container/heap" "fmt" "math" + "slices" "sort" "strings" "sync" "sync/atomic" "unsafe" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/contextutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" "github.com/VictoriaMetrics/VictoriaMetrics/lib/memory" ) @@ -97,39 +99,64 @@ type pipeStreamContextProcessor struct { cancel func() ppNext pipeProcessor - shards []pipeStreamContextProcessorShard + s *Storage + neededColumnNames []string + unneededColumnNames []string - getStreamRows func(streamID string, stateSizeBudget int) ([]streamContextRow, error) + shards []pipeStreamContextProcessorShard maxStateSize int64 stateSizeBudget atomic.Int64 } -func (pcp *pipeStreamContextProcessor) init(ctx context.Context, s *Storage, minTimestamp, maxTimestamp int64) { - pcp.getStreamRows = func(streamID string, stateSizeBudget int) ([]streamContextRow, error) { - return getStreamRows(ctx, s, streamID, minTimestamp, maxTimestamp, stateSizeBudget) - } +func (pcp *pipeStreamContextProcessor) init(s *Storage, neededColumnNames, unneededColumnNames []string) { + pcp.s = s + pcp.neededColumnNames = neededColumnNames + pcp.unneededColumnNames = unneededColumnNames } -func getStreamRows(ctx context.Context, s *Storage, streamID string, minTimestamp, maxTimestamp int64, stateSizeBudget int) ([]streamContextRow, error) { +func (pcp *pipeStreamContextProcessor) getStreamRowss(streamID string, neededRows []streamContextRow, stateSizeBudget int) ([][]*streamContextRow, error) { tenantID, ok := getTenantIDFromStreamIDString(streamID) if !ok { logger.Panicf("BUG: cannot obtain tenantID from streamID %q", streamID) } + // construct the query for selecting all the rows for the given streamID qStr := "_stream_id:" + streamID + if slices.Contains(pcp.neededColumnNames, "*") { + if len(pcp.unneededColumnNames) > 0 { + qStr += " | delete " + fieldNamesString(pcp.unneededColumnNames) + } + } else { + if len(pcp.neededColumnNames) > 0 { + qStr += " | fields " + fieldNamesString(pcp.neededColumnNames) + } + } q, err := ParseQuery(qStr) if err != nil { logger.Panicf("BUG: cannot parse query [%s]: %s", qStr, err) } - q.AddTimeFilter(minTimestamp, maxTimestamp) - ctxWithCancel, cancel := context.WithCancel(ctx) + // mu protects contextRows and stateSize inside writeBlock callback. + var mu sync.Mutex + + contextRows := make([]streamContextRows, len(neededRows)) + for i := range neededRows { + contextRows[i] = streamContextRows{ + neededTimestamp: neededRows[i].timestamp, + linesBefore: pcp.pc.linesBefore, + linesAfter: pcp.pc.linesAfter, + } + } + sort.Slice(contextRows, func(i, j int) bool { + return contextRows[i].neededTimestamp < contextRows[j].neededTimestamp + }) + + stateSize := 0 + + ctxWithCancel, cancel := contextutil.NewStopChanContext(pcp.stopCh) defer cancel() - var mu sync.Mutex - var rows []streamContextRow - stateSize := 0 writeBlock := func(_ uint, br *blockResult) { mu.Lock() defer mu.Unlock() @@ -138,38 +165,148 @@ func getStreamRows(ctx context.Context, s *Storage, streamID string, minTimestam cancel() } - cs := br.getColumns() timestamps := br.getTimestamps() for i, timestamp := range timestamps { - fields := make([]Field, len(cs)) - stateSize += int(unsafe.Sizeof(fields[0])) * len(fields) - - for j, c := range cs { - v := c.getValueAtRow(br, i) - fields[j] = Field{ - Name: strings.Clone(c.name), - Value: strings.Clone(v), + if needStop(pcp.stopCh) { + break + } + for j := range contextRows { + if j > 0 && timestamp <= contextRows[j-1].neededTimestamp { + continue } - stateSize += len(c.name) + len(v) + if j+1 < len(contextRows) && timestamp >= contextRows[j+1].neededTimestamp { + continue + } + stateSize += contextRows[j].update(br, i, timestamp) } - - row := streamContextRow{ - timestamp: timestamp, - fields: fields, - } - stateSize += int(unsafe.Sizeof(row)) - rows = append(rows, row) } } - if err := s.runQuery(ctxWithCancel, []TenantID{tenantID}, q, writeBlock); err != nil { + if err := pcp.s.runQuery(ctxWithCancel, []TenantID{tenantID}, q, writeBlock); err != nil { return nil, err } if stateSize > stateSizeBudget { - return nil, fmt.Errorf("more than %dMB of memory is needed for query [%s]", stateSizeBudget/(1<<20), q) + return nil, fmt.Errorf("more than %dMB of memory is needed for fetching the surrounding logs for %d matching logs", stateSizeBudget/(1<<20), len(neededRows)) } - return rows, nil + // return sorted results from contextRows + rowss := make([][]*streamContextRow, len(contextRows)) + for i, ctx := range contextRows { + rowss[i] = ctx.getSortedRows() + } + rowss = deduplicateStreamRowss(rowss) + return rowss, nil +} + +func deduplicateStreamRowss(streamRowss [][]*streamContextRow) [][]*streamContextRow { + var lastSeenRow *streamContextRow + for _, streamRows := range streamRowss { + if len(streamRows) > 0 { + lastSeenRow = streamRows[len(streamRows)-1] + break + } + } + if lastSeenRow == nil { + return nil + } + + resultRowss := streamRowss[:1] + for _, streamRows := range streamRowss[1:] { + i := 0 + for i < len(streamRows) && !lastSeenRow.less(streamRows[i]) { + i++ + } + streamRows = streamRows[i:] + if len(streamRows) == 0 { + continue + } + resultRowss = append(resultRowss, streamRows) + lastSeenRow = streamRows[len(streamRows)-1] + } + return resultRowss +} + +type streamContextRows struct { + neededTimestamp int64 + linesBefore int + linesAfter int + + rowsBefore streamContextRowsHeapMin + rowsAfter streamContextRowsHeapMax + rowsMatched []*streamContextRow +} + +func (ctx *streamContextRows) getSortedRows() []*streamContextRow { + var rows []*streamContextRow + rows = append(rows, ctx.rowsBefore...) + rows = append(rows, ctx.rowsMatched...) + rows = append(rows, ctx.rowsAfter...) + sort.Slice(rows, func(i, j int) bool { + return rows[i].less(rows[j]) + }) + return rows +} + +func (ctx *streamContextRows) update(br *blockResult, rowIdx int, rowTimestamp int64) int { + if rowTimestamp < ctx.neededTimestamp { + if ctx.linesBefore <= 0 { + return 0 + } + if len(ctx.rowsBefore) < ctx.linesBefore { + r := ctx.copyRowAtIdx(br, rowIdx, rowTimestamp) + heap.Push(&ctx.rowsBefore, r) + return r.sizeBytes() + } + if rowTimestamp <= ctx.rowsBefore[0].timestamp { + return 0 + } + r := ctx.copyRowAtIdx(br, rowIdx, rowTimestamp) + stateSizeChange := r.sizeBytes() - ctx.rowsBefore[0].sizeBytes() + ctx.rowsBefore[0] = r + heap.Fix(&ctx.rowsBefore, 0) + return stateSizeChange + } + + if rowTimestamp > ctx.neededTimestamp { + if ctx.linesAfter <= 0 { + return 0 + } + if len(ctx.rowsAfter) < ctx.linesAfter { + r := ctx.copyRowAtIdx(br, rowIdx, rowTimestamp) + heap.Push(&ctx.rowsAfter, r) + return r.sizeBytes() + } + if rowTimestamp >= ctx.rowsAfter[0].timestamp { + return 0 + } + r := ctx.copyRowAtIdx(br, rowIdx, rowTimestamp) + stateSizeChange := r.sizeBytes() - ctx.rowsAfter[0].sizeBytes() + ctx.rowsAfter[0] = r + heap.Fix(&ctx.rowsAfter, 0) + return stateSizeChange + } + + // rowTimestamp == ctx.neededTimestamp + r := ctx.copyRowAtIdx(br, rowIdx, rowTimestamp) + ctx.rowsMatched = append(ctx.rowsMatched, r) + return r.sizeBytes() +} + +func (ctx *streamContextRows) copyRowAtIdx(br *blockResult, rowIdx int, rowTimestamp int64) *streamContextRow { + cs := br.getColumns() + + fields := make([]Field, len(cs)) + for i, c := range cs { + v := c.getValueAtRow(br, rowIdx) + fields[i] = Field{ + Name: strings.Clone(c.name), + Value: strings.Clone(v), + } + } + return &streamContextRow{ + timestamp: rowTimestamp, + fields: fields, + } } func getTenantIDFromStreamIDString(s string) (TenantID, bool) { @@ -192,6 +329,44 @@ type streamContextRow struct { fields []Field } +func (r *streamContextRow) sizeBytes() int { + n := 0 + fields := r.fields + for _, f := range fields { + n += len(f.Name) + len(f.Value) + int(unsafe.Sizeof(f)) + } + n += int(unsafe.Sizeof(*r) + unsafe.Sizeof(r)) + return n +} + +func (r *streamContextRow) less(other *streamContextRow) bool { + // compare timestamps at first + if r.timestamp != other.timestamp { + return r.timestamp < other.timestamp + } + + // compare fields then + i := 0 + aFields := r.fields + bFields := other.fields + for i < len(aFields) && i < len(bFields) { + af := &aFields[i] + bf := &bFields[i] + if af.Name != bf.Name { + return af.Name < bf.Name + } + if af.Value != bf.Value { + return af.Value < bf.Value + } + i++ + } + if len(aFields) != len(bFields) { + return len(aFields) < len(bFields) + } + + return false +} + type pipeStreamContextProcessorShardNopad struct { // pc points to the parent pipeStreamContext. pc *pipeStreamContext @@ -320,15 +495,24 @@ func (pcp *pipeStreamContextProcessor) flush() error { } for streamID, rows := range m { - streamRows, err := pcp.getStreamRows(streamID, stateSizeBudget) + streamRowss, err := pcp.getStreamRowss(streamID, rows, stateSizeBudget) if err != nil { - return fmt.Errorf("cannot read rows for _stream_id=%q: %w", streamID, err) + return err } if needStop(pcp.stopCh) { return nil } - if err := wctx.writeStreamContextRows(streamID, streamRows, rows, pcp.pc.linesBefore, pcp.pc.linesAfter); err != nil { - return fmt.Errorf("cannot obtain context rows for _stream_id=%q: %w", streamID, err) + + // Write streamRows to the output. + for _, streamRows := range streamRowss { + for _, streamRow := range streamRows { + wctx.writeRow(streamRow.fields) + } + if len(streamRowss) > 1 { + lastRow := streamRows[len(streamRows)-1] + fields := newDelimiterRowFields(lastRow, streamID) + wctx.writeRow(fields) + } } } @@ -337,103 +521,25 @@ func (pcp *pipeStreamContextProcessor) flush() error { return nil } -func (wctx *pipeStreamContextWriteContext) writeStreamContextRows(streamID string, streamRows, rows []streamContextRow, linesBefore, linesAfter int) error { - sortStreamContextRows(streamRows) - sortStreamContextRows(rows) - - idxNext := 0 - for i := range rows { - r := &rows[i] - idx := getStreamContextRowIdx(streamRows, r) - if idx < 0 { - // This error may happen when streamRows became out of sync with rows. - // For example, when some streamRows were deleted after obtaining rows. - return fmt.Errorf("missing row for timestamp=%d; len(streamRows)=%d, len(rows)=%d; re-execute the query", r.timestamp, len(streamRows), len(rows)) - } - - idxStart := idx - linesBefore - if idxStart < idxNext { - idxStart = idxNext - } else if idxNext > 0 && idxStart > idxNext { - // Write delimiter row between multiple contexts in the same stream. - // This simplifies investigation of the returned logs. - fields := []Field{ - { - Name: "_time", - Value: string(marshalTimestampRFC3339NanoString(nil, r.timestamp+1)), - }, - { - Name: "_stream_id", - Value: streamID, - }, - { - Name: "_stream", - Value: getFieldValue(r.fields, "_stream"), - }, - { - Name: "_msg", - Value: "---", - }, - } - wctx.writeRow(fields) - } - for idxStart < idx { - wctx.writeRow(streamRows[idxStart].fields) - idxStart++ - } - - if idx >= idxNext { - wctx.writeRow(streamRows[idx].fields) - idxNext = idx + 1 - } - - idxEnd := idx + 1 + linesAfter - for idxNext < idxEnd && idxNext < len(streamRows) { - wctx.writeRow(streamRows[idxNext].fields) - idxNext++ - } - - if idxNext >= len(streamRows) { - break - } +func newDelimiterRowFields(r *streamContextRow, streamID string) []Field { + return []Field{ + { + Name: "_time", + Value: string(marshalTimestampRFC3339NanoString(nil, r.timestamp+1)), + }, + { + Name: "_stream_id", + Value: streamID, + }, + { + Name: "_stream", + Value: getFieldValue(r.fields, "_stream"), + }, + { + Name: "_msg", + Value: "---", + }, } - - return nil -} - -func getStreamContextRowIdx(rows []streamContextRow, r *streamContextRow) int { - n := sort.Search(len(rows), func(i int) bool { - return rows[i].timestamp >= r.timestamp - }) - if n == len(rows) { - return -1 - } - - equalFields := func(fields []Field) bool { - for _, f := range r.fields { - if f.Value != getFieldValue(fields, f.Name) { - return false - } - } - return true - } - - for rows[n].timestamp == r.timestamp && !equalFields(rows[n].fields) { - n++ - if n >= len(rows) { - return -1 - } - } - if rows[n].timestamp != r.timestamp { - return -1 - } - return n -} - -func sortStreamContextRows(rows []streamContextRow) { - sort.Slice(rows, func(i, j int) bool { - return rows[i].timestamp < rows[j].timestamp - }) } type pipeStreamContextWriteContext struct { @@ -554,3 +660,53 @@ func parsePipeStreamContextBeforeAfter(lex *lexer) (int, int, error) { } } } + +type streamContextRowsHeapMax []*streamContextRow + +func (h *streamContextRowsHeapMax) Len() int { + return len(*h) +} +func (h *streamContextRowsHeapMax) Less(i, j int) bool { + a := *h + return a[i].timestamp > a[j].timestamp +} +func (h *streamContextRowsHeapMax) Swap(i, j int) { + a := *h + a[i], a[j] = a[j], a[i] +} +func (h *streamContextRowsHeapMax) Push(v any) { + x := v.(*streamContextRow) + *h = append(*h, x) +} +func (h *streamContextRowsHeapMax) Pop() any { + a := *h + x := a[len(a)-1] + a[len(a)-1] = nil + *h = a[:len(a)-1] + return x +} + +type streamContextRowsHeapMin streamContextRowsHeapMax + +func (h *streamContextRowsHeapMin) Len() int { + return len(*h) +} +func (h *streamContextRowsHeapMin) Less(i, j int) bool { + a := *h + return a[i].timestamp < a[j].timestamp +} +func (h *streamContextRowsHeapMin) Swap(i, j int) { + a := *h + a[i], a[j] = a[j], a[i] +} +func (h *streamContextRowsHeapMin) Push(v any) { + x := v.(*streamContextRow) + *h = append(*h, x) +} +func (h *streamContextRowsHeapMin) Pop() any { + a := *h + x := a[len(a)-1] + a[len(a)-1] = nil + *h = a[:len(a)-1] + return x +} diff --git a/lib/logstorage/storage_search.go b/lib/logstorage/storage_search.go index 58724fa587..941c195c8a 100644 --- a/lib/logstorage/storage_search.go +++ b/lib/logstorage/storage_search.go @@ -148,7 +148,7 @@ func (s *Storage) runQuery(ctx context.Context, tenantIDs []TenantID, q *Query, pcp, ok := pp.(*pipeStreamContextProcessor) if ok { - pcp.init(ctx, s, minTimestamp, maxTimestamp) + pcp.init(s, neededColumnNames, unneededColumnNames) if i > 0 { errPipe = fmt.Errorf("[%s] pipe must go after [%s] filter; now it goes after the [%s] pipe", p, q.f, q.pipes[i-1]) } diff --git a/lib/logstorage/storage_search_test.go b/lib/logstorage/storage_search_test.go index 0dd9d4f6af..fb7709fe9b 100644 --- a/lib/logstorage/storage_search_test.go +++ b/lib/logstorage/storage_search_test.go @@ -707,7 +707,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context before 1000 | stats count() rows`, [][]Field{ { - {"rows", "825"}, + {"rows", "990"}, }, }) }) @@ -716,7 +716,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context after 1000 | stats count() rows`, [][]Field{ { - {"rows", "495"}, + {"rows", "660"}, }, }) }) @@ -725,7 +725,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context before 1000 after 1000 | stats count() rows`, [][]Field{ { - {"rows", "1155"}, + {"rows", "1320"}, }, }) }) From 3646724c6fd7c43effa910e508ec554cd78ed7a9 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 17:06:37 +0200 Subject: [PATCH 111/128] lib/contextutil: make golanci-lint happy by substituing unused function arg name with _ This is a follow-up for 4b1611267f9baf100fed3efbe60e96d57ec309f2 --- lib/contextutil/stop_chan_context.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/contextutil/stop_chan_context.go b/lib/contextutil/stop_chan_context.go index 76e487c6da..47575614d5 100644 --- a/lib/contextutil/stop_chan_context.go +++ b/lib/contextutil/stop_chan_context.go @@ -42,6 +42,6 @@ func (ctx *stopChanContext) Err() error { } } -func (ctx *stopChanContext) Value(key any) any { +func (ctx *stopChanContext) Value(_ any) any { return nil } From b82bd0c2ec2c3a3d0031bd0c4ec7ff32c2777d0d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 22:22:21 +0200 Subject: [PATCH 112/128] lib/logstorage: improve performance for stream_context pipe over streams with big number of log entries Do not read timestamps for blocks, which cannot contain surrounding logs. This should improve peformance for https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6730 . Also optimize min(_time) and max(_time) calculations a bit by avoiding conversion of timestamp to string when it isn't needed. This should improve performance for https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070 . --- lib/logstorage/block_result.go | 47 +++++++++------ lib/logstorage/pipe_stream_context.go | 68 +++++++++++++++++----- lib/logstorage/pipe_stream_context_test.go | 68 +--------------------- lib/logstorage/stats_max.go | 10 +++- lib/logstorage/stats_min.go | 10 +++- lib/logstorage/stats_row_max.go | 10 +++- lib/logstorage/stats_row_min.go | 10 +++- 7 files changed, 118 insertions(+), 105 deletions(-) diff --git a/lib/logstorage/block_result.go b/lib/logstorage/block_result.go index 1d55f94118..d703c6c1c4 100644 --- a/lib/logstorage/block_result.go +++ b/lib/logstorage/block_result.go @@ -387,35 +387,46 @@ func (br *blockResult) mustInit(bs *blockSearch, bm *bitmap) { br.bm = bm } -func (br *blockResult) getMinTimestamp() int64 { - if br.bm != nil && br.bm.bitsLen == br.rowsLen { - return br.bs.bsw.bh.timestampsHeader.minTimestamp +// intersectsTimeRange returns true if br timestamps intersect (minTimestamp .. maxTimestamp) time range. +func (br *blockResult) intersectsTimeRange(minTimestamp, maxTimestamp int64) bool { + return minTimestamp < br.getMaxTimestamp(minTimestamp) && maxTimestamp > br.getMinTimestamp(maxTimestamp) +} + +func (br *blockResult) getMinTimestamp(minTimestamp int64) int64 { + if br.bs != nil { + bh := &br.bs.bsw.bh + if bh.rowsCount == uint64(br.rowsLen) { + return min(minTimestamp, bh.timestampsHeader.minTimestamp) + } + if minTimestamp <= bh.timestampsHeader.minTimestamp { + return minTimestamp + } } + // Slow path - need to scan timestamps timestamps := br.getTimestamps() - if len(timestamps) == 0 { - return -1 << 63 - } - minTimestamp := timestamps[0] - for i := 1; i < len(timestamps); i++ { - if timestamps[i] < minTimestamp { - minTimestamp = timestamps[i] + for _, timestamp := range timestamps { + if timestamp < minTimestamp { + minTimestamp = timestamp } } return minTimestamp } -func (br *blockResult) getMaxTimestamp() int64 { - if br.bm != nil && br.bm.bitsLen == br.rowsLen { - return br.bs.bsw.bh.timestampsHeader.maxTimestamp +func (br *blockResult) getMaxTimestamp(maxTimestamp int64) int64 { + if br.bs != nil { + bh := &br.bs.bsw.bh + if bh.rowsCount == uint64(br.rowsLen) { + return max(maxTimestamp, bh.timestampsHeader.maxTimestamp) + } + if maxTimestamp >= bh.timestampsHeader.maxTimestamp { + return maxTimestamp + } } + // Slow path - need to scan timestamps timestamps := br.getTimestamps() - if len(timestamps) == 0 { - return (1 << 63) - 1 - } - maxTimestamp := timestamps[len(timestamps)-1] - for i := len(timestamps) - 2; i >= 0; i-- { + for i := len(timestamps) - 1; i >= 0; i-- { if timestamps[i] > maxTimestamp { maxTimestamp = timestamps[i] } diff --git a/lib/logstorage/pipe_stream_context.go b/lib/logstorage/pipe_stream_context.go index 9b4b9f5358..1f4c4017dd 100644 --- a/lib/logstorage/pipe_stream_context.go +++ b/lib/logstorage/pipe_stream_context.go @@ -35,6 +35,9 @@ func (pc *pipeStreamContext) String() string { if pc.linesAfter > 0 { s += fmt.Sprintf(" after %d", pc.linesAfter) } + if pc.linesBefore <= 0 && pc.linesAfter <= 0 { + s += " after 0" + } return s } @@ -163,21 +166,28 @@ func (pcp *pipeStreamContextProcessor) getStreamRowss(streamID string, neededRow if stateSize > stateSizeBudget { cancel() + return } - timestamps := br.getTimestamps() - for i, timestamp := range timestamps { + for i := range contextRows { if needStop(pcp.stopCh) { break } - for j := range contextRows { - if j > 0 && timestamp <= contextRows[j-1].neededTimestamp { + + if !contextRows[i].canUpdate(br) { + // Fast path - skip reading block timestamps for the given ctx. + continue + } + + timestamps := br.getTimestamps() + for j, timestamp := range timestamps { + if i > 0 && timestamp <= contextRows[i-1].neededTimestamp { continue } - if j+1 < len(contextRows) && timestamp >= contextRows[j+1].neededTimestamp { + if i+1 < len(contextRows) && timestamp >= contextRows[i+1].neededTimestamp { continue } - stateSize += contextRows[j].update(br, i, timestamp) + stateSize += contextRows[i].update(br, j, timestamp) } } } @@ -247,6 +257,42 @@ func (ctx *streamContextRows) getSortedRows() []*streamContextRow { return rows } +func (ctx *streamContextRows) canUpdate(br *blockResult) bool { + if ctx.linesBefore > 0 { + if len(ctx.rowsBefore) < ctx.linesBefore { + return true + } + minTimestamp := ctx.rowsBefore[0].timestamp - 1 + maxTimestamp := ctx.neededTimestamp + if br.intersectsTimeRange(minTimestamp, maxTimestamp) { + return true + } + } + + if ctx.linesAfter > 0 { + if len(ctx.rowsAfter) < ctx.linesAfter { + return true + } + minTimestamp := ctx.neededTimestamp + maxTimestamp := ctx.rowsAfter[0].timestamp + 1 + if br.intersectsTimeRange(minTimestamp, maxTimestamp) { + return true + } + } + + if ctx.linesBefore <= 0 && ctx.linesAfter <= 0 { + if len(ctx.rowsMatched) == 0 { + return true + } + timestamp := ctx.rowsMatched[0].timestamp + if br.intersectsTimeRange(timestamp-1, timestamp+1) { + return true + } + } + + return false +} + func (ctx *streamContextRows) update(br *blockResult, rowIdx int, rowTimestamp int64) int { if rowTimestamp < ctx.neededTimestamp { if ctx.linesBefore <= 0 { @@ -430,11 +476,6 @@ func (pcp *pipeStreamContextProcessor) writeBlock(workerID uint, br *blockResult if br.rowsLen == 0 { return } - if pcp.pc.linesBefore <= 0 && pcp.pc.linesAfter <= 0 { - // Fast path - there is no need to fetch stream context. - pcp.ppNext.writeBlock(workerID, br) - return - } shard := &pcp.shards[workerID] @@ -456,11 +497,6 @@ func (pcp *pipeStreamContextProcessor) writeBlock(workerID uint, br *blockResult } func (pcp *pipeStreamContextProcessor) flush() error { - if pcp.pc.linesBefore <= 0 && pcp.pc.linesAfter <= 0 { - // Fast path - nothing to do. - return nil - } - n := pcp.stateSizeBudget.Load() if n <= 0 { return fmt.Errorf("cannot calculate [%s], since it requires more than %dMB of memory", pcp.pc.String(), pcp.maxStateSize/(1<<20)) diff --git a/lib/logstorage/pipe_stream_context_test.go b/lib/logstorage/pipe_stream_context_test.go index cd63f41283..5fd8d110b7 100644 --- a/lib/logstorage/pipe_stream_context_test.go +++ b/lib/logstorage/pipe_stream_context_test.go @@ -12,6 +12,7 @@ func TestParsePipeStreamContextSuccess(t *testing.T) { f(`stream_context before 5`) f(`stream_context after 10`) + f(`stream_context after 0`) f(`stream_context before 10 after 20`) } @@ -30,73 +31,6 @@ func TestParsePipeStreamContextFailure(t *testing.T) { f(`stream_context after -4`) } -func TestPipeStreamContext(t *testing.T) { - f := func(pipeStr string, rows, rowsExpected [][]Field) { - t.Helper() - expectPipeResults(t, pipeStr, rows, rowsExpected) - } - - f("stream_context before 0", [][]Field{ - { - {"a", `2`}, - {"b", `3`}, - }, - { - {"a", "2"}, - {"b", "3"}, - }, - { - {"a", `2`}, - {"b", `54`}, - {"c", "d"}, - }, - }, [][]Field{ - { - {"a", `2`}, - {"b", `3`}, - }, - { - {"a", "2"}, - {"b", "3"}, - }, - { - {"a", `2`}, - {"b", `54`}, - {"c", "d"}, - }, - }) - - f("stream_context after 0", [][]Field{ - { - {"a", `2`}, - {"b", `3`}, - }, - { - {"a", "2"}, - {"b", "3"}, - }, - { - {"a", `2`}, - {"b", `54`}, - {"c", "d"}, - }, - }, [][]Field{ - { - {"a", `2`}, - {"b", `3`}, - }, - { - {"a", "2"}, - {"b", "3"}, - }, - { - {"a", `2`}, - {"b", `54`}, - {"c", "d"}, - }, - }) -} - func TestPipeStreamContextUpdateNeededFields(t *testing.T) { f := func(s, neededFields, unneededFields, neededFieldsExpected, unneededFieldsExpected string) { t.Helper() diff --git a/lib/logstorage/stats_max.go b/lib/logstorage/stats_max.go index 22eb0cbeec..7075215fc8 100644 --- a/lib/logstorage/stats_max.go +++ b/lib/logstorage/stats_max.go @@ -85,7 +85,15 @@ func (smp *statsMaxProcessor) updateStateForColumn(br *blockResult, c *blockResu } if c.isTime { - maxTimestamp := br.getMaxTimestamp() + timestamp, ok := TryParseTimestampRFC3339Nano(smp.max) + if !ok { + timestamp = -1 << 63 + } + maxTimestamp := br.getMaxTimestamp(timestamp) + if maxTimestamp <= timestamp { + return + } + bb := bbPool.Get() bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], maxTimestamp) smp.updateStateBytes(bb.B) diff --git a/lib/logstorage/stats_min.go b/lib/logstorage/stats_min.go index 4be8d550e0..458fb1ee9d 100644 --- a/lib/logstorage/stats_min.go +++ b/lib/logstorage/stats_min.go @@ -87,7 +87,15 @@ func (smp *statsMinProcessor) updateStateForColumn(br *blockResult, c *blockResu } if c.isTime { - minTimestamp := br.getMinTimestamp() + timestamp, ok := TryParseTimestampRFC3339Nano(smp.min) + if !ok { + timestamp = (1 << 63) - 1 + } + minTimestamp := br.getMinTimestamp(timestamp) + if minTimestamp >= timestamp { + return + } + bb := bbPool.Get() bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], minTimestamp) smp.updateStateBytes(bb.B) diff --git a/lib/logstorage/stats_row_max.go b/lib/logstorage/stats_row_max.go index 9982abebd9..7af6bd9f3f 100644 --- a/lib/logstorage/stats_row_max.go +++ b/lib/logstorage/stats_row_max.go @@ -60,7 +60,15 @@ func (smp *statsRowMaxProcessor) updateStatsForAllRows(br *blockResult) int { return stateSizeIncrease } if c.isTime { - maxTimestamp := br.getMaxTimestamp() + timestamp, ok := TryParseTimestampRFC3339Nano(smp.max) + if !ok { + timestamp = -1 << 63 + } + maxTimestamp := br.getMaxTimestamp(timestamp) + if maxTimestamp <= timestamp { + return stateSizeIncrease + } + bb := bbPool.Get() bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], maxTimestamp) v := bytesutil.ToUnsafeString(bb.B) diff --git a/lib/logstorage/stats_row_min.go b/lib/logstorage/stats_row_min.go index e0f724b792..051ddb57f5 100644 --- a/lib/logstorage/stats_row_min.go +++ b/lib/logstorage/stats_row_min.go @@ -60,7 +60,15 @@ func (smp *statsRowMinProcessor) updateStatsForAllRows(br *blockResult) int { return stateSizeIncrease } if c.isTime { - minTimestamp := br.getMinTimestamp() + timestamp, ok := TryParseTimestampRFC3339Nano(smp.min) + if !ok { + timestamp = (1 << 63) - 1 + } + minTimestamp := br.getMinTimestamp(timestamp) + if minTimestamp >= timestamp { + return stateSizeIncrease + } + bb := bbPool.Get() bb.B = marshalTimestampRFC3339NanoString(bb.B[:0], minTimestamp) v := bytesutil.ToUnsafeString(bb.B) From f65b976eda7f7e29010f35ad54e89da421cfa7aa Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 26 Sep 2024 22:33:05 +0200 Subject: [PATCH 113/128] vendor: run `make vendor-update` --- go.mod | 84 +-- go.sum | 200 +++--- vendor/cloud.google.com/go/auth/CHANGES.md | 16 + vendor/cloud.google.com/go/auth/README.md | 42 +- vendor/cloud.google.com/go/auth/auth.go | 4 +- .../go/auth/credentials/filetypes.go | 6 + .../go/auth/credentials/selfsignedjwt.go | 4 + .../go/auth/grpctransport/directpath.go | 4 +- .../go/auth/grpctransport/grpctransport.go | 23 +- .../go/auth/httptransport/transport.go | 21 +- .../go/auth/internal/compute/compute.go | 66 ++ .../go/auth/internal/compute/manufacturer.go | 22 + .../internal/compute/manufacturer_linux.go | 23 + .../internal/compute/manufacturer_windows.go | 46 ++ .../go/auth/internal/internal.go | 7 +- .../go/compute/metadata/CHANGES.md | 14 + .../go/compute/metadata/metadata.go | 3 + .../go/compute/metadata/retry_linux.go | 9 +- vendor/cloud.google.com/go/iam/CHANGES.md | 7 + .../sdk/storage/azblob/CHANGELOG.md | 14 + .../exported/shared_key_credential.go | 85 ++- .../azblob/internal/exported/version.go | 2 +- .../azblob/internal/generated/autorest.md | 21 +- .../azblob/internal/generated/constants.go | 2 +- .../generated/zz_appendblob_client.go | 16 +- .../internal/generated/zz_blob_client.go | 109 ++-- .../internal/generated/zz_blockblob_client.go | 31 +- .../internal/generated/zz_container_client.go | 85 +-- .../azblob/internal/generated/zz_options.go | 24 +- .../internal/generated/zz_pageblob_client.go | 36 +- .../azblob/internal/generated/zz_responses.go | 9 + .../internal/generated/zz_service_client.go | 38 +- .../aws-sdk-go-v2/aws/go_module_metadata.go | 2 +- .../aws/middleware/request_id_retriever.go | 4 + .../aws/protocol/eventstream/CHANGELOG.md | 4 + .../eventstream/go_module_metadata.go | 2 +- .../aws/retry/attempt_metrics.go | 51 ++ .../aws/aws-sdk-go-v2/aws/retry/middleware.go | 47 +- .../aws-sdk-go-v2/aws/signer/v4/middleware.go | 5 + .../aws/transport/http/client.go | 36 +- .../aws/aws-sdk-go-v2/config/CHANGELOG.md | 20 + .../config/go_module_metadata.go | 2 +- .../config/resolve_credentials.go | 15 +- .../aws-sdk-go-v2/credentials/CHANGELOG.md | 16 + .../credentials/go_module_metadata.go | 2 +- .../feature/ec2/imds/CHANGELOG.md | 4 + .../feature/ec2/imds/go_module_metadata.go | 2 +- .../feature/s3/manager/CHANGELOG.md | 24 + .../feature/s3/manager/go_module_metadata.go | 2 +- .../internal/configsources/CHANGELOG.md | 4 + .../configsources/go_module_metadata.go | 2 +- .../endpoints/awsrulesfn/partitions.json | 2 +- .../internal/endpoints/v2/CHANGELOG.md | 4 + .../endpoints/v2/go_module_metadata.go | 2 +- .../aws-sdk-go-v2/internal/v4a/CHANGELOG.md | 4 + .../internal/v4a/go_module_metadata.go | 2 +- .../internal/accept-encoding/CHANGELOG.md | 4 + .../accept-encoding/go_module_metadata.go | 2 +- .../service/internal/checksum/CHANGELOG.md | 4 + .../internal/checksum/go_module_metadata.go | 2 +- .../internal/presigned-url/CHANGELOG.md | 4 + .../presigned-url/go_module_metadata.go | 2 +- .../service/internal/s3shared/CHANGELOG.md | 4 + .../internal/s3shared/go_module_metadata.go | 2 +- .../internal/s3shared/metadata_retriever.go | 5 + .../aws/aws-sdk-go-v2/service/s3/CHANGELOG.md | 21 + .../aws-sdk-go-v2/service/s3/api_client.go | 349 ++++++++++- .../service/s3/api_op_AbortMultipartUpload.go | 15 + .../s3/api_op_CompleteMultipartUpload.go | 63 +- .../service/s3/api_op_CopyObject.go | 140 +++-- .../service/s3/api_op_CreateBucket.go | 15 + .../s3/api_op_CreateMultipartUpload.go | 162 ++++- .../service/s3/api_op_CreateSession.go | 205 +++++- .../service/s3/api_op_DeleteBucket.go | 15 + ...i_op_DeleteBucketAnalyticsConfiguration.go | 15 + .../service/s3/api_op_DeleteBucketCors.go | 15 + .../s3/api_op_DeleteBucketEncryption.go | 69 +- ...teBucketIntelligentTieringConfiguration.go | 15 + ...i_op_DeleteBucketInventoryConfiguration.go | 15 + .../s3/api_op_DeleteBucketLifecycle.go | 15 + ...api_op_DeleteBucketMetricsConfiguration.go | 15 + .../api_op_DeleteBucketOwnershipControls.go | 15 + .../service/s3/api_op_DeleteBucketPolicy.go | 15 + .../s3/api_op_DeleteBucketReplication.go | 15 + .../service/s3/api_op_DeleteBucketTagging.go | 15 + .../service/s3/api_op_DeleteBucketWebsite.go | 15 + .../service/s3/api_op_DeleteObject.go | 15 + .../service/s3/api_op_DeleteObjectTagging.go | 15 + .../service/s3/api_op_DeleteObjects.go | 15 + .../s3/api_op_DeletePublicAccessBlock.go | 15 + ...api_op_GetBucketAccelerateConfiguration.go | 15 + .../service/s3/api_op_GetBucketAcl.go | 15 + .../api_op_GetBucketAnalyticsConfiguration.go | 15 + .../service/s3/api_op_GetBucketCors.go | 15 + .../service/s3/api_op_GetBucketEncryption.go | 66 +- ...etBucketIntelligentTieringConfiguration.go | 15 + .../api_op_GetBucketInventoryConfiguration.go | 15 + .../api_op_GetBucketLifecycleConfiguration.go | 15 + .../service/s3/api_op_GetBucketLocation.go | 15 + .../service/s3/api_op_GetBucketLogging.go | 15 + .../api_op_GetBucketMetricsConfiguration.go | 15 + ...i_op_GetBucketNotificationConfiguration.go | 15 + .../s3/api_op_GetBucketOwnershipControls.go | 15 + .../service/s3/api_op_GetBucketPolicy.go | 15 + .../s3/api_op_GetBucketPolicyStatus.go | 15 + .../service/s3/api_op_GetBucketReplication.go | 15 + .../s3/api_op_GetBucketRequestPayment.go | 15 + .../service/s3/api_op_GetBucketTagging.go | 15 + .../service/s3/api_op_GetBucketVersioning.go | 15 + .../service/s3/api_op_GetBucketWebsite.go | 15 + .../service/s3/api_op_GetObject.go | 44 +- .../service/s3/api_op_GetObjectAcl.go | 15 + .../service/s3/api_op_GetObjectAttributes.go | 47 +- .../service/s3/api_op_GetObjectLegalHold.go | 15 + .../s3/api_op_GetObjectLockConfiguration.go | 15 + .../service/s3/api_op_GetObjectRetention.go | 15 + .../service/s3/api_op_GetObjectTagging.go | 15 + .../service/s3/api_op_GetObjectTorrent.go | 15 + .../service/s3/api_op_GetPublicAccessBlock.go | 15 + .../service/s3/api_op_HeadBucket.go | 15 + .../service/s3/api_op_HeadObject.go | 50 +- ...pi_op_ListBucketAnalyticsConfigurations.go | 15 + ...tBucketIntelligentTieringConfigurations.go | 15 + ...pi_op_ListBucketInventoryConfigurations.go | 15 + .../api_op_ListBucketMetricsConfigurations.go | 15 + .../service/s3/api_op_ListBuckets.go | 15 + .../service/s3/api_op_ListDirectoryBuckets.go | 15 + .../service/s3/api_op_ListMultipartUploads.go | 15 + .../service/s3/api_op_ListObjectVersions.go | 15 + .../service/s3/api_op_ListObjects.go | 15 + .../service/s3/api_op_ListObjectsV2.go | 15 + .../service/s3/api_op_ListParts.go | 15 + ...api_op_PutBucketAccelerateConfiguration.go | 15 + .../service/s3/api_op_PutBucketAcl.go | 15 + .../api_op_PutBucketAnalyticsConfiguration.go | 15 + .../service/s3/api_op_PutBucketCors.go | 15 + .../service/s3/api_op_PutBucketEncryption.go | 143 ++++- ...utBucketIntelligentTieringConfiguration.go | 15 + .../api_op_PutBucketInventoryConfiguration.go | 15 + .../api_op_PutBucketLifecycleConfiguration.go | 15 + .../service/s3/api_op_PutBucketLogging.go | 15 + .../api_op_PutBucketMetricsConfiguration.go | 15 + ...i_op_PutBucketNotificationConfiguration.go | 15 + .../s3/api_op_PutBucketOwnershipControls.go | 15 + .../service/s3/api_op_PutBucketPolicy.go | 15 + .../service/s3/api_op_PutBucketReplication.go | 15 + .../s3/api_op_PutBucketRequestPayment.go | 15 + .../service/s3/api_op_PutBucketTagging.go | 15 + .../service/s3/api_op_PutBucketVersioning.go | 15 + .../service/s3/api_op_PutBucketWebsite.go | 15 + .../service/s3/api_op_PutObject.go | 165 +++-- .../service/s3/api_op_PutObjectAcl.go | 15 + .../service/s3/api_op_PutObjectLegalHold.go | 15 + .../s3/api_op_PutObjectLockConfiguration.go | 15 + .../service/s3/api_op_PutObjectRetention.go | 15 + .../service/s3/api_op_PutObjectTagging.go | 15 + .../service/s3/api_op_PutPublicAccessBlock.go | 15 + .../service/s3/api_op_RestoreObject.go | 15 + .../service/s3/api_op_SelectObjectContent.go | 15 + .../service/s3/api_op_UploadPart.go | 38 +- .../service/s3/api_op_UploadPartCopy.go | 55 +- .../s3/api_op_WriteGetObjectResponse.go | 15 + .../aws/aws-sdk-go-v2/service/s3/auth.go | 35 +- .../aws-sdk-go-v2/service/s3/deserializers.go | 512 +++++++++++++++ .../aws/aws-sdk-go-v2/service/s3/endpoints.go | 16 +- .../service/s3/go_module_metadata.go | 2 +- .../aws/aws-sdk-go-v2/service/s3/options.go | 11 +- .../aws-sdk-go-v2/service/s3/serializers.go | 591 ++++++++++++++++++ .../aws-sdk-go-v2/service/s3/types/types.go | 110 +++- .../aws-sdk-go-v2/service/sso/CHANGELOG.md | 17 + .../aws-sdk-go-v2/service/sso/api_client.go | 349 ++++++++++- .../service/sso/api_op_GetRoleCredentials.go | 15 + .../service/sso/api_op_ListAccountRoles.go | 15 + .../service/sso/api_op_ListAccounts.go | 15 + .../service/sso/api_op_Logout.go | 15 + .../aws/aws-sdk-go-v2/service/sso/auth.go | 35 +- .../service/sso/deserializers.go | 21 + .../aws-sdk-go-v2/service/sso/endpoints.go | 16 +- .../service/sso/go_module_metadata.go | 2 +- .../aws/aws-sdk-go-v2/service/sso/options.go | 11 +- .../aws-sdk-go-v2/service/sso/serializers.go | 25 + .../service/ssooidc/CHANGELOG.md | 17 + .../service/ssooidc/api_client.go | 349 ++++++++++- .../service/ssooidc/api_op_CreateToken.go | 15 + .../ssooidc/api_op_CreateTokenWithIAM.go | 15 + .../service/ssooidc/api_op_RegisterClient.go | 15 + .../api_op_StartDeviceAuthorization.go | 15 + .../aws/aws-sdk-go-v2/service/ssooidc/auth.go | 35 +- .../service/ssooidc/deserializers.go | 21 + .../service/ssooidc/endpoints.go | 16 +- .../service/ssooidc/go_module_metadata.go | 2 +- .../aws-sdk-go-v2/service/ssooidc/options.go | 11 +- .../service/ssooidc/serializers.go | 25 + .../aws-sdk-go-v2/service/sts/CHANGELOG.md | 17 + .../aws-sdk-go-v2/service/sts/api_client.go | 349 ++++++++++- .../service/sts/api_op_AssumeRole.go | 15 + .../service/sts/api_op_AssumeRoleWithSAML.go | 15 + .../sts/api_op_AssumeRoleWithWebIdentity.go | 15 + .../sts/api_op_DecodeAuthorizationMessage.go | 15 + .../service/sts/api_op_GetAccessKeyInfo.go | 15 + .../service/sts/api_op_GetCallerIdentity.go | 15 + .../service/sts/api_op_GetFederationToken.go | 15 + .../service/sts/api_op_GetSessionToken.go | 15 + .../aws/aws-sdk-go-v2/service/sts/auth.go | 35 +- .../service/sts/deserializers.go | 33 + .../aws-sdk-go-v2/service/sts/endpoints.go | 16 +- .../service/sts/go_module_metadata.go | 2 +- .../aws/aws-sdk-go-v2/service/sts/options.go | 11 +- .../aws-sdk-go-v2/service/sts/serializers.go | 49 ++ vendor/github.com/aws/smithy-go/CHANGELOG.md | 13 + .../aws/smithy-go/go_module_metadata.go | 2 +- .../aws/smithy-go/metrics/metrics.go | 136 ++++ .../github.com/aws/smithy-go/metrics/nop.go | 67 ++ .../aws/smithy-go/middleware/context.go | 41 ++ vendor/github.com/aws/smithy-go/properties.go | 19 +- .../aws/smithy-go/tracing/context.go | 96 +++ .../github.com/aws/smithy-go/tracing/nop.go | 32 + .../aws/smithy-go/tracing/tracing.go | 95 +++ .../aws/smithy-go/transport/http/client.go | 18 + .../cpuguy83/go-md2man/v2/md2man/debug.go | 62 ++ .../cpuguy83/go-md2man/v2/md2man/md2man.go | 9 +- .../cpuguy83/go-md2man/v2/md2man/roff.go | 88 ++- .../github.com/klauspost/compress/README.md | 22 +- .../klauspost/compress/flate/deflate.go | 2 +- .../klauspost/compress/flate/inflate.go | 74 ++- .../klauspost/compress/fse/decompress.go | 2 +- .../klauspost/compress/gzhttp/compress.go | 45 +- .../compress/gzhttp/compress_go119.go | 9 - .../compress/gzhttp/compress_go120.go | 9 - .../klauspost/compress/gzhttp/transport.go | 19 +- .../klauspost/compress/huff0/decompress.go | 4 +- .../klauspost/compress/s2/writer.go | 31 +- .../klauspost/compress/zstd/blockdec.go | 4 +- .../klauspost/compress/zstd/enc_better.go | 32 +- .../klauspost/compress/zstd/enc_dfast.go | 16 +- .../klauspost/compress/zstd/encoder.go | 19 +- .../klauspost/compress/zstd/framedec.go | 4 +- .../klauspost/compress/zstd/seqdec_amd64.go | 4 +- .../klauspost/compress/zstd/seqdec_amd64.s | 8 +- .../client_golang/prometheus/histogram.go | 10 +- .../pdata/internal/data/profileid.go | 79 +++ .../profiles/v1experimental/profiles.pb.go | 121 ++-- .../collector/pdata/internal/otlp/profiles.go | 12 + .../collector/pdata/pcommon/map.go | 9 + .../grpc/otelgrpc/version.go | 2 +- .../internal/request/resp_writer_wrapper.go | 11 +- .../net/http/otelhttp/version.go | 2 +- vendor/go.opentelemetry.io/otel/.golangci.yml | 4 +- vendor/go.opentelemetry.io/otel/CHANGELOG.md | 26 +- .../go.opentelemetry.io/otel/CONTRIBUTING.md | 5 +- vendor/go.opentelemetry.io/otel/Makefile | 4 +- vendor/go.opentelemetry.io/otel/README.md | 7 - .../otel/baggage/baggage.go | 6 +- .../otel/internal/global/meter.go | 274 ++++++-- .../otel/metric/asyncfloat64.go | 2 +- .../otel/metric/asyncint64.go | 2 +- vendor/go.opentelemetry.io/otel/renovate.json | 4 + .../go.opentelemetry.io/otel/trace/context.go | 2 +- vendor/go.opentelemetry.io/otel/trace/doc.go | 2 +- vendor/go.opentelemetry.io/otel/version.go | 2 +- vendor/go.opentelemetry.io/otel/versions.yaml | 8 +- .../google.golang.org/api/internal/version.go | 2 +- .../api/storage/v1/storage-api.json | 68 +- .../api/storage/v1/storage-gen.go | 25 + .../api/transport/grpc/dial.go | 1 + .../api/transport/http/dial.go | 1 + .../grpc/balancer/base/balancer.go | 4 +- .../grpclb/grpc_lb_v1/load_balancer.pb.go | 26 +- .../grpc/balancer/pickfirst/pickfirst.go | 2 +- .../grpc/balancer_wrapper.go | 6 +- .../grpc_binarylog_v1/binarylog.pb.go | 22 +- .../credentials/alts/internal/conn/record.go | 7 - .../alts/internal/handshaker/handshaker.go | 4 +- .../internal/proto/grpc_gcp/altscontext.pb.go | 6 +- .../internal/proto/grpc_gcp/handshaker.pb.go | 295 ++++----- .../grpc_gcp/transport_security_common.pb.go | 8 +- .../grpc/credentials/insecure/insecure.go | 2 +- .../grpc/credentials/oauth/oauth.go | 6 +- vendor/google.golang.org/grpc/dialoptions.go | 2 + .../grpc/experimental/stats/metricregistry.go | 11 +- .../grpc/grpclog/internal/logger.go | 2 +- .../grpc/internal/binarylog/method_logger.go | 2 +- .../grpc/internal/channelz/channelmap.go | 7 - .../grpc/internal/channelz/funcs.go | 2 +- .../internal/channelz/syscall_nonlinux.go | 4 +- .../grpc/internal/envconfig/envconfig.go | 2 +- .../grpc/internal/googlecloud/googlecloud.go | 6 +- .../grpc/internal/internal.go | 11 +- .../resolver/passthrough/passthrough.go | 2 +- .../grpc/internal/status/status.go | 4 +- .../grpc/internal/syscall/syscall_nonlinux.go | 6 +- .../grpc/internal/transport/controlbuf.go | 7 - .../grpc/internal/transport/handler_server.go | 4 +- .../grpc/internal/transport/http2_client.go | 18 +- .../grpc/internal/transport/http2_server.go | 4 +- .../grpc/internal/transport/http_util.go | 2 +- .../grpc/keepalive/keepalive.go | 20 +- .../grpc/mem/buffer_slice.go | 12 +- vendor/google.golang.org/grpc/mem/buffers.go | 4 +- .../grpc/resolver/manual/manual.go | 4 +- vendor/google.golang.org/grpc/rpc_util.go | 34 +- vendor/google.golang.org/grpc/server.go | 1 + .../grpc/stream_interfaces.go | 86 +++ vendor/google.golang.org/grpc/version.go | 2 +- vendor/modules.txt | 103 +-- 305 files changed, 8146 insertions(+), 1465 deletions(-) create mode 100644 vendor/cloud.google.com/go/auth/internal/compute/compute.go create mode 100644 vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go create mode 100644 vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go create mode 100644 vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go create mode 100644 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go create mode 100644 vendor/github.com/aws/smithy-go/metrics/metrics.go create mode 100644 vendor/github.com/aws/smithy-go/metrics/nop.go create mode 100644 vendor/github.com/aws/smithy-go/middleware/context.go create mode 100644 vendor/github.com/aws/smithy-go/tracing/context.go create mode 100644 vendor/github.com/aws/smithy-go/tracing/nop.go create mode 100644 vendor/github.com/aws/smithy-go/tracing/tracing.go create mode 100644 vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go delete mode 100644 vendor/github.com/klauspost/compress/gzhttp/compress_go119.go delete mode 100644 vendor/github.com/klauspost/compress/gzhttp/compress_go120.go create mode 100644 vendor/go.opentelemetry.io/collector/pdata/internal/data/profileid.go create mode 100644 vendor/go.opentelemetry.io/collector/pdata/internal/otlp/profiles.go diff --git a/go.mod b/go.mod index 081fd8f4a7..af6ad6d4b8 100644 --- a/go.mod +++ b/go.mod @@ -6,15 +6,15 @@ require ( cloud.google.com/go/storage v1.43.0 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.0 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.1 github.com/VictoriaMetrics/easyproto v0.1.4 github.com/VictoriaMetrics/fastcache v1.12.2 github.com/VictoriaMetrics/metrics v1.35.1 github.com/VictoriaMetrics/metricsql v0.79.0 - github.com/aws/aws-sdk-go-v2 v1.30.5 - github.com/aws/aws-sdk-go-v2/config v1.27.33 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 - github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2 + github.com/aws/aws-sdk-go-v2 v1.31.0 + github.com/aws/aws-sdk-go-v2/config v1.27.38 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.24 + github.com/aws/aws-sdk-go-v2/service/s3 v1.63.2 github.com/bmatcuk/doublestar/v4 v4.6.1 github.com/cespare/xxhash/v2 v2.3.0 github.com/cheggaaa/pb/v3 v3.1.5 @@ -22,7 +22,7 @@ require ( github.com/golang/snappy v0.0.4 github.com/googleapis/gax-go/v2 v2.13.0 github.com/influxdata/influxdb v1.11.6 - github.com/klauspost/compress v1.17.9 + github.com/klauspost/compress v1.17.10 github.com/prometheus/prometheus v0.54.1 github.com/urfave/cli/v2 v2.27.4 github.com/valyala/fastjson v1.6.4 @@ -34,39 +34,39 @@ require ( golang.org/x/net v0.29.0 golang.org/x/oauth2 v0.23.0 golang.org/x/sys v0.25.0 - google.golang.org/api v0.196.0 + google.golang.org/api v0.199.0 gopkg.in/yaml.v2 v2.4.0 ) require ( cloud.google.com/go v0.115.1 // indirect - cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth v0.9.5 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect - cloud.google.com/go/compute/metadata v0.5.0 // indirect - cloud.google.com/go/iam v1.2.0 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + cloud.google.com/go/iam v1.2.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/VividCortex/ewma v1.2.0 // indirect github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect github.com/aws/aws-sdk-go v1.55.5 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.32 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.5 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.36 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.14 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.18 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.18 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 // indirect - github.com/aws/smithy-go v1.20.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.18 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.20 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.20 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.18 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.23.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.27.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.31.2 // indirect + github.com/aws/smithy-go v1.21.0 // indirect github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dennwc/varint v1.0.0 // indirect github.com/fatih/color v1.17.0 // indirect @@ -80,7 +80,7 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -96,7 +96,7 @@ require ( github.com/oklog/ulid v1.3.1 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.20.3 // indirect + github.com/prometheus/client_golang v1.20.4 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.59.1 // indirect github.com/prometheus/common/sigv4 v0.1.0 // indirect @@ -107,29 +107,29 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/pdata v1.14.1 // indirect - go.opentelemetry.io/collector/semconv v0.108.1 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect - go.opentelemetry.io/otel v1.29.0 // indirect - go.opentelemetry.io/otel/metric v1.29.0 // indirect - go.opentelemetry.io/otel/trace v1.29.0 // indirect + go.opentelemetry.io/collector/pdata v1.16.0 // indirect + go.opentelemetry.io/collector/semconv v0.110.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/goleak v1.3.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.27.0 // indirect - golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.6.0 // indirect - google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/grpc v1.66.0 // indirect + google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 // indirect + google.golang.org/grpc v1.67.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apimachinery v0.31.0 // indirect - k8s.io/client-go v0.31.0 // indirect + k8s.io/apimachinery v0.31.1 // indirect + k8s.io/client-go v0.31.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 // indirect + k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 // indirect ) diff --git a/go.sum b/go.sum index c422b0a229..58d61e07b5 100644 --- a/go.sum +++ b/go.sum @@ -15,8 +15,8 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= -cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= -cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth v0.9.5 h1:4CTn43Eynw40aFVr3GpPqsQponx2jv0BQpjvajsbbzw= +cloud.google.com/go/auth v0.9.5/go.mod h1:Xo0n7n66eHyOWWCnitop6870Ilwo3PiZyodVkkH1xWM= cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -25,14 +25,14 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= -cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8= -cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q= -cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI= -cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts= +cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU= +cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g= +cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc= +cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -57,8 +57,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.0 h1:Be6KInmFEKV81c0pOAEbRYehLMwmmGI1exuFj248AMk= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.0/go.mod h1:WCPBHsOXfBVnivScjs2ypRfimjEW0qPVLGgJkZlrIOA= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.1 h1:cf+OIKbkmMHBaC3u78AXomweqM0oxQSgBXRZf3WH4yM= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.1/go.mod h1:ap1dmS6vQKJxSMNiGJcq4QuUQkOynyD93gLw6MDF7ek= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -92,44 +92,44 @@ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+ github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.30.5 h1:mWSRTwQAb0aLE17dSzztCVJWI9+cRMgqebndjwDyK0g= -github.com/aws/aws-sdk-go-v2 v1.30.5/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= -github.com/aws/aws-sdk-go-v2/config v1.27.33 h1:Nof9o/MsmH4oa0s2q9a0k7tMz5x/Yj5k06lDODWz3BU= -github.com/aws/aws-sdk-go-v2/config v1.27.33/go.mod h1:kEqdYzRb8dd8Sy2pOdEbExTTF5v7ozEXX0McgPE7xks= -github.com/aws/aws-sdk-go-v2/credentials v1.17.32 h1:7Cxhp/BnT2RcGy4VisJ9miUPecY+lyE9I8JvcZofn9I= -github.com/aws/aws-sdk-go-v2/credentials v1.17.32/go.mod h1:P5/QMF3/DCHbXGEGkdbilXHsyTBX5D3HSwcrSc9p20I= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 h1:pfQ2sqNpMVK6xz2RbqLEL0GH87JOwSxPV2rzm8Zsb74= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13/go.mod h1:NG7RXPUlqfsCLLFfi0+IpKN4sCB9D9fw/qTaSB+xRoU= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 h1:9DIp7vhmOPmueCDwpXa45bEbLHHTt1kcxChdTJWWxvI= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18/go.mod h1:aJv/Fwz8r56ozwYFRC4bzoeL1L17GYQYemfblOBux1M= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 h1:pI7Bzt0BJtYA0N/JEC6B8fJ4RBrEMi1LBrkMdFYNSnQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17/go.mod h1:Dh5zzJYMtxfIjYW+/evjQ8uj2OyR/ve2KROHGHlSFqE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 h1:Mqr/V5gvrhA2gvgnF42Zh5iMiQNcOYthFYwCyrnuWlc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17/go.mod h1:aLJpZlCmjE+V+KtN1q1uyZkfnUWpQGpbsn89XPKyzfU= +github.com/aws/aws-sdk-go-v2 v1.31.0 h1:3V05LbxTSItI5kUqNwhJrrrY1BAXxXt0sN0l72QmG5U= +github.com/aws/aws-sdk-go-v2 v1.31.0/go.mod h1:ztolYtaEUtdpf9Wftr31CJfLVjOnD/CVRkKOOYgF8hA= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.5 h1:xDAuZTn4IMm8o1LnBZvmrL8JA1io4o3YWNXgohbf20g= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.5/go.mod h1:wYSv6iDS621sEFLfKvpPE2ugjTuGlAG7iROg0hLOkfc= +github.com/aws/aws-sdk-go-v2/config v1.27.38 h1:mMVyJJuSUdbD4zKXoxDgWrgM60QwlFEg+JhihCq6wCw= +github.com/aws/aws-sdk-go-v2/config v1.27.38/go.mod h1:6xOiNEn58bj/64MPKx89r6G/el9JZn8pvVbquSqTKK4= +github.com/aws/aws-sdk-go-v2/credentials v1.17.36 h1:zwI5WrT+oWWfzSKoTNmSyeBKQhsFRJRv+PGW/UZW+Yk= +github.com/aws/aws-sdk-go-v2/credentials v1.17.36/go.mod h1:3AG/sY1rc9NJrNWcN/3KPU4SIDPGTrd/qegKB0TnFdE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.14 h1:C/d03NAmh8C4BZXhuRNboF/DqhBkBCeDiJDcaqIT5pA= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.14/go.mod h1:7I0Ju7p9mCIdlrfS+JCgqcYD0VXz/N4yozsox+0o078= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.24 h1:WEiv2o2tjSx9tv5jP7rCR1P8FE8c6DxkFpvHGy6SYZg= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.24/go.mod h1:mhxj3DJiOXogLRZ/wlGmI9VHiCW2kzHjHTJLxexOtEk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.18 h1:kYQ3H1u0ANr9KEKlGs/jTLrBFPo8P8NaH/w7A01NeeM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.18/go.mod h1:r506HmK5JDUh9+Mw4CfGJGSSoqIiLCndAuqXuhbv67Y= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.18 h1:Z7IdFUONvTcvS7YuhtVxN99v2cCoHRXOS4mTr0B/pUc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.18/go.mod h1:DkKMmksZVVyat+Y+r1dEOgJEfUeA7UngIHWeKsi0yNc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 h1:Roo69qTpfu8OlJ2Tb7pAYVuF0CpuUMB0IYWwYP/4DZM= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17/go.mod h1:NcWPxQzGM1USQggaTVwz6VpqMZPX1CvDJLDh6jnOCa4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 h1:FLMkfEiRjhgeDTCjjLoc3URo/TBkgeQbocA78lfkzSI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19/go.mod h1:Vx+GucNSsdhaxs3aZIKfSUjKVGsxN25nX2SRcdhuw08= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 h1:rfprUlsdzgl7ZL2KlXiUAoJnI/VxfHCvDFr2QDFj6u4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19/go.mod h1:SCWkEdRq8/7EK60NcvvQ6NXKuTcchAD4ROAsC37VEZE= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 h1:u+EfGmksnJc/x5tq3A+OD7LrMbSSR/5TrKLvkdy/fhY= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17/go.mod h1:VaMx6302JHax2vHJWgRo+5n9zvbacs3bLU/23DNQrTY= -github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2 h1:Kp6PWAlXwP1UvIflkIP6MFZYBNDCa4mFCGtxrpICVOg= -github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2/go.mod h1:5FmD/Dqq57gP+XwaUnd5WFPipAuzrf0HmupX27Gvjvc= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 h1:pIaGg+08llrP7Q5aiz9ICWbY8cqhTkyy+0SHvfzQpTc= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.7/go.mod h1:eEygMHnTKH/3kNp9Jr1n3PdejuSNcgwLe1dWgQtO0VQ= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 h1:/Cfdu0XV3mONYKaOt1Gr0k1KvQzkzPyiKUdlWJqy+J4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7/go.mod h1:bCbAxKDqNvkHxRaIMnyVPXPo+OaPRwvmgzMxbz1VKSA= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 h1:NKTa1eqZYw8tiHSRGpP0VtTdub/8KNk8sDkNPFaOKDE= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.7/go.mod h1:NXi1dIAGteSaRLqYgarlhP/Ij0cFT+qmCwiJqWh/U5o= -github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= -github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.18 h1:OWYvKL53l1rbsUmW7bQyJVsYU/Ii3bbAAQIIFNbM0Tk= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.18/go.mod h1:CUx0G1v3wG6l01tUB+j7Y8kclA8NSqK4ef0YG79a4cg= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.5 h1:QFASJGfT8wMXtuP3D5CRmMjARHv9ZmzFUMJznHDOY3w= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.5/go.mod h1:QdZ3OmoIjSX+8D1OPAzPxDfjXASbBMDsz9qvtyIhtik= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.20 h1:rTWjG6AvWekO2B1LHeM3ktU7MqyX9rzWQ7hgzneZW7E= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.20/go.mod h1:RGW2DDpVc8hu6Y6yG8G5CHVmVOAn1oV8rNKOHRJyswg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.20 h1:Xbwbmk44URTiHNx6PNo0ujDE6ERlsCKJD3u1zfnzAPg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.20/go.mod h1:oAfOFzUB14ltPZj1rWwRc3d/6OgD76R8KlvU3EqM9Fg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.18 h1:eb+tFOIl9ZsUe2259/BKPeniKuz4/02zZFH/i4Nf8Rg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.18/go.mod h1:GVCC2IJNJTmdlyEsSmofEy7EfJncP7DNnXDzRjJ5Keg= +github.com/aws/aws-sdk-go-v2/service/s3 v1.63.2 h1:1iXmXy8SJzQVMGvo40TSzBYS9ig6BSyXfRIMzLfmBfE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.63.2/go.mod h1:NLTqRLe3pUNu3nTEHI6XlHLKYmc8fbHUdMxAB6+s41Q= +github.com/aws/aws-sdk-go-v2/service/sso v1.23.2 h1:yzi/y/vKlLyzOfG7pSu5ONNGRxHIgLeDrV4w2AMRCo0= +github.com/aws/aws-sdk-go-v2/service/sso v1.23.2/go.mod h1:XRlMvmad0ZNL+75C5FYdMvbbLkd6qiqz6foR1nA1PXY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.27.2 h1:3gb6pYhYLjo8rB1h2Tqs61wpjRd3rQymYcVq/pp0yxI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.27.2/go.mod h1:FnvDM4sfa+isJ3kDXIzAB9GAwVSzFzSy97uZ3IsHo4E= +github.com/aws/aws-sdk-go-v2/service/sts v1.31.2 h1:O6tyji8mXmBGsHvTCB0VIhrDw19lGTUSbKIyjnw79s8= +github.com/aws/aws-sdk-go-v2/service/sts v1.31.2/go.mod h1:yMWe0F+XG0DkRZK5ODZhG7BEFYhLXi2dqGsv6tX0cgI= +github.com/aws/smithy-go v1.21.0 h1:H7L8dtDRk0P1Qm6y0ji7MCYMQObJ5R9CRpyPhRUkLYA= +github.com/aws/smithy-go v1.21.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -150,10 +150,10 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= -github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -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/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 h1:N+3sFI5GUjRKBi+i0TxYVST9h4Ie192jJWpHvthBBgg= +github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= +github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -177,11 +177,11 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.12.1-0.20240621013728-1eb8caab5155 h1:IgJPqnrlY2Mr4pYB6oaMKvFvwJ9H+X6CCY5x1vCTcpc= -github.com/envoyproxy/go-control-plane v0.12.1-0.20240621013728-1eb8caab5155/go.mod h1:5Wkq+JduFtdAXihLmeTJf+tRYIT4KBc2vPXDhwVo1pA= +github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= +github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb h1:IT4JYU7k4ikYg1SCxNI1/Tieq/NFvh6dzLdgi7eu0tM= github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb/go.mod h1:bH6Xx7IW64qjjJq8M2u4dxNaBiDfKK+z/3eGDpXEQhc= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= @@ -296,8 +296,8 @@ github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO github.com/google/uuid v1.1.2/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/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0= -github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= @@ -362,8 +362,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= +github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -433,8 +433,8 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4= -github.com/prometheus/client_golang v1.20.3/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI= +github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -521,22 +521,22 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector/pdata v1.14.1 h1:wXZjtQA7Vy5HFqco+yA95ENyMQU5heBB1IxMHQf6mUk= -go.opentelemetry.io/collector/pdata v1.14.1/go.mod h1:z1dTjwwtcoXxZx2/nkHysjxMeaxe9pEmYTEr4SMNIx8= -go.opentelemetry.io/collector/semconv v0.108.1 h1:Txk9tauUnamZaxS5vlf1O0uZ4VD6nioRBR0nX8L/fU4= -go.opentelemetry.io/collector/semconv v0.108.1/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= -go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= -go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= -go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= -go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.opentelemetry.io/collector/pdata v1.16.0 h1:g02K8jlRnmQ7TQDuXpdgVL6vIxIVqr5Gbb1qIR27rto= +go.opentelemetry.io/collector/pdata v1.16.0/go.mod h1:YZZJIt2ehxosYf/Y1pbvexjNWsIGNNrzzlCTO9jC1F4= +go.opentelemetry.io/collector/semconv v0.110.0 h1:KHQnOHe3gUz0zsxe8ph9kN5OTypCFD4V+06AiBTfeNk= +go.opentelemetry.io/collector/semconv v0.110.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 h1:hCq2hNMwsegUvPzI7sPOvtO9cqyy5GbWt/Ybp2xrx8Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0/go.mod h1:LqaApwGx/oUmzsbqxkzuBvyoPpkxk3JQWnqfVrJ3wCA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -561,8 +561,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= -golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -583,8 +583,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 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.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -740,8 +740,8 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= 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= @@ -762,8 +762,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.196.0 h1:k/RafYqebaIJBO3+SMnfEGtFVlvp5vSgqTUF54UN/zg= -google.golang.org/api v0.196.0/go.mod h1:g9IL21uGkYgvQ5BZg6BAtoGJQIm8r6EgaAbpNey5wBE= +google.golang.org/api v0.199.0 h1:aWUXClp+VFJmqE0JPvpZOK3LDQMyFKYIow4etYd9qxs= +google.golang.org/api v0.199.0/go.mod h1:ohG4qSztDJmZdjK/Ar6MhbAmb/Rpi4JHOqagsh90K28= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -799,12 +799,12 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= -google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= -google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= -google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61 h1:KipVMxePgXPFBzXOvpKbny3RVdVmJOD64R/Ob7GPWEs= +google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:HiAZQz/G7n0EywFjmncAwsfnmFm2bjm7qPjwl8hyzjM= +google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 h1:pAjq8XSSzXoP9ya73v/w+9QEAAJNluLrpmMq5qFJQNY= +google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:O6rP0uBq4k0mdi/b4ZEMAZjkhYWhS815kCvaMha4VN8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 h1:N9BgCIAUvn/M+p4NJccWPWb3BWh88+zyL0ll9HgbEeM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -818,8 +818,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= -google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -862,18 +862,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= -k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= -k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= -k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= -k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= -k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= +k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU= +k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI= +k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U= +k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.1 h1:f0ugtWSbWpxHR7sjVpQwuvw9a3ZKLXX0u0itkFXufb0= +k8s.io/client-go v0.31.1/go.mod h1:sKI8871MJN2OyeqRlmA4W4KM9KBdBUpDLu/43eGemCg= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 h1:b2FmK8YH+QEwq/Sy2uAEhmqL5nPfGYbJOcaqjeYYZoA= -k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 h1:MDF6h2H/h4tbzmtIKTuctcwZmY0tY9mD9fNT47QO6HI= +k8s.io/utils v0.0.0-20240921022957-49e7df575cb6/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/cloud.google.com/go/auth/CHANGES.md b/vendor/cloud.google.com/go/auth/CHANGES.md index 5584c350b0..dcdafb0a47 100644 --- a/vendor/cloud.google.com/go/auth/CHANGES.md +++ b/vendor/cloud.google.com/go/auth/CHANGES.md @@ -1,5 +1,21 @@ # Changelog +## [0.9.5](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.4...auth/v0.9.5) (2024-09-25) + + +### Bug Fixes + +* **auth:** Restore support for GOOGLE_CLOUD_UNIVERSE_DOMAIN env ([#10915](https://github.com/googleapis/google-cloud-go/issues/10915)) ([94caaaa](https://github.com/googleapis/google-cloud-go/commit/94caaaa061362d0e00ef6214afcc8a0a3e7ebfb2)) +* **auth:** Skip directpath credentials overwrite when it's not on GCE ([#10833](https://github.com/googleapis/google-cloud-go/issues/10833)) ([7e5e8d1](https://github.com/googleapis/google-cloud-go/commit/7e5e8d10b761b0a6e43e19a028528db361bc07b1)) +* **auth:** Use new context for non-blocking token refresh ([#10919](https://github.com/googleapis/google-cloud-go/issues/10919)) ([cf7102d](https://github.com/googleapis/google-cloud-go/commit/cf7102d33a21be1e5a9d47a49456b3a57c43b350)) + +## [0.9.4](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.3...auth/v0.9.4) (2024-09-11) + + +### Bug Fixes + +* **auth:** Enable self-signed JWT for non-GDU universe domain ([#10831](https://github.com/googleapis/google-cloud-go/issues/10831)) ([f9869f7](https://github.com/googleapis/google-cloud-go/commit/f9869f7903cfd34d1b97c25d0dc5669d2c5138e6)) + ## [0.9.3](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.2...auth/v0.9.3) (2024-09-03) diff --git a/vendor/cloud.google.com/go/auth/README.md b/vendor/cloud.google.com/go/auth/README.md index 36de276a07..6fe4f0763e 100644 --- a/vendor/cloud.google.com/go/auth/README.md +++ b/vendor/cloud.google.com/go/auth/README.md @@ -1,4 +1,40 @@ -# auth +# Google Auth Library for Go -This module is currently EXPERIMENTAL and under active development. It is not -yet intended to be used. +[![Go Reference](https://pkg.go.dev/badge/cloud.google.com/go/auth.svg)](https://pkg.go.dev/cloud.google.com/go/auth) + +## Install + +``` bash +go get cloud.google.com/go/auth@latest +``` + +## Usage + +The most common way this library is used is transitively, by default, from any +of our Go client libraries. + +### Notable use-cases + +- To create a credential directly please see examples in the + [credentials](https://pkg.go.dev/cloud.google.com/go/auth/credentials) + package. +- To create a authenticated HTTP client please see examples in the + [httptransport](https://pkg.go.dev/cloud.google.com/go/auth/httptransport) + package. +- To create a authenticated gRPC connection please see examples in the + [grpctransport](https://pkg.go.dev/cloud.google.com/go/auth/grpctransport) + package. +- To create an ID token please see examples in the + [idtoken](https://pkg.go.dev/cloud.google.com/go/auth/credentials/idtoken) + package. + +## Contributing + +Contributions are welcome. Please, see the +[CONTRIBUTING](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/main/CONTRIBUTING.md) +document for details. + +Please note that this project is released with a Contributor Code of Conduct. +By participating in this project you agree to abide by its terms. +See [Contributor Code of Conduct](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/main/CONTRIBUTING.md#contributor-code-of-conduct) +for more information. diff --git a/vendor/cloud.google.com/go/auth/auth.go b/vendor/cloud.google.com/go/auth/auth.go index bc37ea85fb..32fb058df0 100644 --- a/vendor/cloud.google.com/go/auth/auth.go +++ b/vendor/cloud.google.com/go/auth/auth.go @@ -328,7 +328,9 @@ func (c *cachedTokenProvider) tokenNonBlocking(ctx context.Context) (*Token, err defer c.mu.Unlock() return c.cachedToken, nil case stale: - c.tokenAsync(ctx) + // Call tokenAsync with a new Context because the user-provided context + // may have a short timeout incompatible with async token refresh. + c.tokenAsync(context.Background()) // Return the stale token immediately to not block customer requests to Cloud services. c.mu.Lock() defer c.mu.Unlock() diff --git a/vendor/cloud.google.com/go/auth/credentials/filetypes.go b/vendor/cloud.google.com/go/auth/credentials/filetypes.go index cf56b025a2..6591b18113 100644 --- a/vendor/cloud.google.com/go/auth/credentials/filetypes.go +++ b/vendor/cloud.google.com/go/auth/credentials/filetypes.go @@ -124,8 +124,14 @@ func resolveUniverseDomain(optsUniverseDomain, fileUniverseDomain string) string } func handleServiceAccount(f *credsfile.ServiceAccountFile, opts *DetectOptions) (auth.TokenProvider, error) { + ud := resolveUniverseDomain(opts.UniverseDomain, f.UniverseDomain) if opts.UseSelfSignedJWT { return configureSelfSignedJWT(f, opts) + } else if ud != "" && ud != internalauth.DefaultUniverseDomain { + // For non-GDU universe domains, token exchange is impossible and services + // must support self-signed JWTs. + opts.UseSelfSignedJWT = true + return configureSelfSignedJWT(f, opts) } opts2LO := &auth.Options2LO{ Email: f.ClientEmail, diff --git a/vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go b/vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go index b62a8ae4d5..6ae29de6c2 100644 --- a/vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go +++ b/vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go @@ -17,6 +17,7 @@ package credentials import ( "context" "crypto/rsa" + "errors" "fmt" "strings" "time" @@ -35,6 +36,9 @@ var ( // configureSelfSignedJWT uses the private key in the service account to create // a JWT without making a network call. func configureSelfSignedJWT(f *credsfile.ServiceAccountFile, opts *DetectOptions) (auth.TokenProvider, error) { + if len(opts.scopes()) == 0 && opts.Audience == "" { + return nil, errors.New("credentials: both scopes and audience are empty") + } pk, err := internal.ParseKey([]byte(f.PrivateKey)) if err != nil { return nil, fmt.Errorf("credentials: could not parse key: %w", err) diff --git a/vendor/cloud.google.com/go/auth/grpctransport/directpath.go b/vendor/cloud.google.com/go/auth/grpctransport/directpath.go index efc91c2b0c..69c6f27f04 100644 --- a/vendor/cloud.google.com/go/auth/grpctransport/directpath.go +++ b/vendor/cloud.google.com/go/auth/grpctransport/directpath.go @@ -22,7 +22,7 @@ import ( "strings" "cloud.google.com/go/auth" - "cloud.google.com/go/compute/metadata" + "cloud.google.com/go/auth/internal/compute" "google.golang.org/grpc" grpcgoogle "google.golang.org/grpc/credentials/google" ) @@ -91,7 +91,7 @@ func isDirectPathXdsUsed(o *Options) bool { // configuration allows the use of direct path. If it does not the provided // grpcOpts and endpoint are returned. func configureDirectPath(grpcOpts []grpc.DialOption, opts *Options, endpoint string, creds *auth.Credentials) ([]grpc.DialOption, string) { - if isDirectPathEnabled(endpoint, opts) && metadata.OnGCE() && isTokenProviderDirectPathCompatible(creds, opts) { + if isDirectPathEnabled(endpoint, opts) && compute.OnComputeEngine() && isTokenProviderDirectPathCompatible(creds, opts) { // Overwrite all of the previously specific DialOptions, DirectPath uses its own set of credentials and certificates. grpcOpts = []grpc.DialOption{ grpc.WithCredentialsBundle(grpcgoogle.NewDefaultCredentialsWithOptions(grpcgoogle.DefaultCredentialsOptions{PerRPCCreds: &grpcCredentialsProvider{creds: creds}}))} diff --git a/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go b/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go index 21488e29f0..9d959af74c 100644 --- a/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go +++ b/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go @@ -22,6 +22,7 @@ import ( "errors" "fmt" "net/http" + "os" "cloud.google.com/go/auth" "cloud.google.com/go/auth/credentials" @@ -330,15 +331,23 @@ type grpcCredentialsProvider struct { clientUniverseDomain string } -// getClientUniverseDomain returns the default service domain for a given Cloud universe. -// The default value is "googleapis.com". This is the universe domain -// configured for the client, which will be compared to the universe domain -// that is separately configured for the credentials. +// getClientUniverseDomain returns the default service domain for a given Cloud +// universe, with the following precedence: +// +// 1. A non-empty option.WithUniverseDomain or similar client option. +// 2. A non-empty environment variable GOOGLE_CLOUD_UNIVERSE_DOMAIN. +// 3. The default value "googleapis.com". +// +// This is the universe domain configured for the client, which will be compared +// to the universe domain that is separately configured for the credentials. func (c *grpcCredentialsProvider) getClientUniverseDomain() string { - if c.clientUniverseDomain == "" { - return internal.DefaultUniverseDomain + if c.clientUniverseDomain != "" { + return c.clientUniverseDomain } - return c.clientUniverseDomain + if envUD := os.Getenv(internal.UniverseDomainEnvVar); envUD != "" { + return envUD + } + return internal.DefaultUniverseDomain } func (c *grpcCredentialsProvider) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { diff --git a/vendor/cloud.google.com/go/auth/httptransport/transport.go b/vendor/cloud.google.com/go/auth/httptransport/transport.go index 274bb01254..93c0b1369f 100644 --- a/vendor/cloud.google.com/go/auth/httptransport/transport.go +++ b/vendor/cloud.google.com/go/auth/httptransport/transport.go @@ -19,6 +19,7 @@ import ( "crypto/tls" "net" "net/http" + "os" "time" "cloud.google.com/go/auth" @@ -178,13 +179,23 @@ type authTransport struct { clientUniverseDomain string } -// getClientUniverseDomain returns the universe domain configured for the client. -// The default value is "googleapis.com". +// getClientUniverseDomain returns the default service domain for a given Cloud +// universe, with the following precedence: +// +// 1. A non-empty option.WithUniverseDomain or similar client option. +// 2. A non-empty environment variable GOOGLE_CLOUD_UNIVERSE_DOMAIN. +// 3. The default value "googleapis.com". +// +// This is the universe domain configured for the client, which will be compared +// to the universe domain that is separately configured for the credentials. func (t *authTransport) getClientUniverseDomain() string { - if t.clientUniverseDomain == "" { - return internal.DefaultUniverseDomain + if t.clientUniverseDomain != "" { + return t.clientUniverseDomain } - return t.clientUniverseDomain + if envUD := os.Getenv(internal.UniverseDomainEnvVar); envUD != "" { + return envUD + } + return internal.DefaultUniverseDomain } // RoundTrip authorizes and authenticates the request with an diff --git a/vendor/cloud.google.com/go/auth/internal/compute/compute.go b/vendor/cloud.google.com/go/auth/internal/compute/compute.go new file mode 100644 index 0000000000..651bd61fbb --- /dev/null +++ b/vendor/cloud.google.com/go/auth/internal/compute/compute.go @@ -0,0 +1,66 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package compute + +import ( + "log" + "runtime" + "strings" + "sync" +) + +var ( + vmOnGCEOnce sync.Once + vmOnGCE bool +) + +// OnComputeEngine returns whether the client is running on GCE. +// +// This is a copy of the gRPC internal googlecloud.OnGCE() func at: +// https://github.com/grpc/grpc-go/blob/master/internal/googlecloud/googlecloud.go +// The functionality is similar to the metadata.OnGCE() func at: +// https://github.com/xmenxk/google-cloud-go/blob/main/compute/metadata/metadata.go +// +// The difference is that OnComputeEngine() does not perform HTTP or DNS check on the metadata server. +// In particular, OnComputeEngine() will return false on Serverless. +func OnComputeEngine() bool { + vmOnGCEOnce.Do(func() { + mf, err := manufacturer() + if err != nil { + log.Printf("Failed to read manufacturer, vmOnGCE=false: %v", err) + return + } + vmOnGCE = isRunningOnGCE(mf, runtime.GOOS) + }) + return vmOnGCE +} + +// isRunningOnGCE checks whether the local system, without doing a network request, is +// running on GCP. +func isRunningOnGCE(manufacturer []byte, goos string) bool { + name := string(manufacturer) + switch goos { + case "linux": + name = strings.TrimSpace(name) + return name == "Google" || name == "Google Compute Engine" + case "windows": + name = strings.Replace(name, " ", "", -1) + name = strings.Replace(name, "\n", "", -1) + name = strings.Replace(name, "\r", "", -1) + return name == "Google" + default: + return false + } +} diff --git a/vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go b/vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go new file mode 100644 index 0000000000..af490bf4f4 --- /dev/null +++ b/vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go @@ -0,0 +1,22 @@ +//go:build !(linux || windows) +// +build !linux,!windows + +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package compute + +func manufacturer() ([]byte, error) { + return nil, nil +} diff --git a/vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go b/vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go new file mode 100644 index 0000000000..d92178df86 --- /dev/null +++ b/vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go @@ -0,0 +1,23 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package compute + +import "os" + +const linuxProductNameFile = "/sys/class/dmi/id/product_name" + +func manufacturer() ([]byte, error) { + return os.ReadFile(linuxProductNameFile) +} diff --git a/vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go b/vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go new file mode 100644 index 0000000000..16be9df306 --- /dev/null +++ b/vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go @@ -0,0 +1,46 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package compute + +import ( + "errors" + "os/exec" + "regexp" + "strings" +) + +const ( + windowsCheckCommand = "powershell.exe" + windowsCheckCommandArgs = "Get-WmiObject -Class Win32_BIOS" + powershellOutputFilter = "Manufacturer" + windowsManufacturerRegex = ":(.*)" +) + +func manufacturer() ([]byte, error) { + cmd := exec.Command(windowsCheckCommand, windowsCheckCommandArgs) + out, err := cmd.Output() + if err != nil { + return nil, err + } + for _, line := range strings.Split(strings.TrimSuffix(string(out), "\n"), "\n") { + if strings.HasPrefix(line, powershellOutputFilter) { + re := regexp.MustCompile(windowsManufacturerRegex) + name := re.FindString(line) + name = strings.TrimLeft(name, ":") + return []byte(name), nil + } + } + return nil, errors.New("cannot determine the machine's manufacturer") +} diff --git a/vendor/cloud.google.com/go/auth/internal/internal.go b/vendor/cloud.google.com/go/auth/internal/internal.go index 4308345eda..66a51f19c7 100644 --- a/vendor/cloud.google.com/go/auth/internal/internal.go +++ b/vendor/cloud.google.com/go/auth/internal/internal.go @@ -38,8 +38,11 @@ const ( // QuotaProjectEnvVar is the environment variable for setting the quota // project. QuotaProjectEnvVar = "GOOGLE_CLOUD_QUOTA_PROJECT" - projectEnvVar = "GOOGLE_CLOUD_PROJECT" - maxBodySize = 1 << 20 + // UniverseDomainEnvVar is the environment variable for setting the default + // service domain for a given Cloud universe. + UniverseDomainEnvVar = "GOOGLE_CLOUD_UNIVERSE_DOMAIN" + projectEnvVar = "GOOGLE_CLOUD_PROJECT" + maxBodySize = 1 << 20 // DefaultUniverseDomain is the default value for universe domain. // Universe domain is the default service domain for a given Cloud universe. diff --git a/vendor/cloud.google.com/go/compute/metadata/CHANGES.md b/vendor/cloud.google.com/go/compute/metadata/CHANGES.md index 9594e1e279..da7db19b1c 100644 --- a/vendor/cloud.google.com/go/compute/metadata/CHANGES.md +++ b/vendor/cloud.google.com/go/compute/metadata/CHANGES.md @@ -1,5 +1,19 @@ # Changes +## [0.5.2](https://github.com/googleapis/google-cloud-go/compare/compute/metadata/v0.5.1...compute/metadata/v0.5.2) (2024-09-20) + + +### Bug Fixes + +* **compute/metadata:** Close Response Body for failed request ([#10891](https://github.com/googleapis/google-cloud-go/issues/10891)) ([e91d45e](https://github.com/googleapis/google-cloud-go/commit/e91d45e4757a9e354114509ba9800085d9e0ff1f)) + +## [0.5.1](https://github.com/googleapis/google-cloud-go/compare/compute/metadata/v0.5.0...compute/metadata/v0.5.1) (2024-09-12) + + +### Bug Fixes + +* **compute/metadata:** Check error chain for retryable error ([#10840](https://github.com/googleapis/google-cloud-go/issues/10840)) ([2bdedef](https://github.com/googleapis/google-cloud-go/commit/2bdedeff621b223d63cebc4355fcf83bc68412cd)) + ## [0.5.0](https://github.com/googleapis/google-cloud-go/compare/compute/metadata/v0.4.0...compute/metadata/v0.5.0) (2024-07-10) diff --git a/vendor/cloud.google.com/go/compute/metadata/metadata.go b/vendor/cloud.google.com/go/compute/metadata/metadata.go index 345080b729..c160b4786b 100644 --- a/vendor/cloud.google.com/go/compute/metadata/metadata.go +++ b/vendor/cloud.google.com/go/compute/metadata/metadata.go @@ -456,6 +456,9 @@ func (c *Client) getETag(ctx context.Context, suffix string) (value, etag string code = res.StatusCode } if delay, shouldRetry := retryer.Retry(code, reqErr); shouldRetry { + if res != nil && res.Body != nil { + res.Body.Close() + } if err := sleep(ctx, delay); err != nil { return "", "", err } diff --git a/vendor/cloud.google.com/go/compute/metadata/retry_linux.go b/vendor/cloud.google.com/go/compute/metadata/retry_linux.go index bb412f8917..2e53f01230 100644 --- a/vendor/cloud.google.com/go/compute/metadata/retry_linux.go +++ b/vendor/cloud.google.com/go/compute/metadata/retry_linux.go @@ -17,10 +17,15 @@ package metadata -import "syscall" +import ( + "errors" + "syscall" +) func init() { // Initialize syscallRetryable to return true on transient socket-level // errors. These errors are specific to Linux. - syscallRetryable = func(err error) bool { return err == syscall.ECONNRESET || err == syscall.ECONNREFUSED } + syscallRetryable = func(err error) bool { + return errors.Is(err, syscall.ECONNRESET) || errors.Is(err, syscall.ECONNREFUSED) + } } diff --git a/vendor/cloud.google.com/go/iam/CHANGES.md b/vendor/cloud.google.com/go/iam/CHANGES.md index 89f757b116..498a15a5fc 100644 --- a/vendor/cloud.google.com/go/iam/CHANGES.md +++ b/vendor/cloud.google.com/go/iam/CHANGES.md @@ -1,6 +1,13 @@ # Changes +## [1.2.1](https://github.com/googleapis/google-cloud-go/compare/iam/v1.2.0...iam/v1.2.1) (2024-09-12) + + +### Bug Fixes + +* **iam:** Bump dependencies ([2ddeb15](https://github.com/googleapis/google-cloud-go/commit/2ddeb1544a53188a7592046b98913982f1b0cf04)) + ## [1.2.0](https://github.com/googleapis/google-cloud-go/compare/iam/v1.1.13...iam/v1.2.0) (2024-08-20) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md index 324c8ed0e4..13ab325015 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md @@ -1,5 +1,19 @@ # Release History +## 1.4.1 (2024-09-18) + +### Features Added +* Added crc64 response header to Put Blob. +* Upgraded service version to `2024-08-04`. + +## 1.4.1-beta.1 (2024-08-27) + +### Features Added +* Upgraded service version to `2024-08-04`. + +### Other Changes +* Updated `azcore` version to `1.14.0` + ## 1.4.0 (2024-07-18) ### Other Changes diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/shared_key_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/shared_key_credential.go index adf46b0681..d5bcfb6436 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/shared_key_credential.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/shared_key_credential.go @@ -109,6 +109,85 @@ func getHeader(key string, headers map[string][]string) string { return "" } +func getWeightTables() [][]int { + tableLv0 := [...]int{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x71c, 0x0, 0x71f, 0x721, 0x723, 0x725, + 0x0, 0x0, 0x0, 0x72d, 0x803, 0x0, 0x0, 0x733, 0x0, 0xd03, 0xd1a, 0xd1c, 0xd1e, + 0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe02, 0xe09, 0xe0a, 0xe1a, 0xe21, 0xe23, 0xe25, 0xe2c, 0xe32, 0xe35, 0xe36, 0xe48, 0xe51, + 0xe70, 0xe7c, 0xe7e, 0xe89, 0xe8a, 0xe91, 0xe99, 0xe9f, 0xea2, 0xea4, 0xea6, 0xea7, 0xea9, + 0x0, 0x0, 0x0, 0x743, 0x744, 0x748, 0xe02, 0xe09, 0xe0a, 0xe1a, 0xe21, 0xe23, 0xe25, + 0xe2c, 0xe32, 0xe35, 0xe36, 0xe48, 0xe51, 0xe70, 0xe7c, 0xe7e, 0xe89, 0xe8a, 0xe91, 0xe99, + 0xe9f, 0xea2, 0xea4, 0xea6, 0xea7, 0xea9, 0x0, 0x74c, 0x0, 0x750, 0x0, + } + tableLv2 := [...]int{ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8212, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + } + tables := [][]int{tableLv0[:], tableLv2[:]} + return tables +} + +// NewHeaderStringComparer performs a multi-level, weight-based comparison of two strings +func compareHeaders(lhs, rhs string, tables [][]int) int { + currLevel, i, j := 0, 0, 0 + n := len(tables) + lhsLen := len(lhs) + rhsLen := len(rhs) + + for currLevel < n { + if currLevel == (n-1) && i != j { + if i > j { + return -1 + } + if i < j { + return 1 + } + return 0 + } + + w1 := tables[currLevel][lhs[i]] + if i >= lhsLen { + w1 = 0x1 + } + + w2 := tables[currLevel][rhs[j]] + if j >= rhsLen { + w2 = 0x1 + } + + if w1 == 0x1 && w2 == 0x1 { + i = 0 + j = 0 + currLevel++ + } else if w1 == w2 { + i++ + j++ + } else if w1 == 0 { + i++ + } else if w2 == 0 { + j++ + } else { + if w1 < w2 { + return -1 + } + if w1 > w2 { + return 1 + } + return 0 + } + } + return 0 +} + func (c *SharedKeyCredential) buildCanonicalizedHeader(headers http.Header) string { cm := map[string][]string{} for k, v := range headers { @@ -125,7 +204,11 @@ func (c *SharedKeyCredential) buildCanonicalizedHeader(headers http.Header) stri for key := range cm { keys = append(keys, key) } - sort.Strings(keys) + tables := getWeightTables() + // Sort the keys using the custom comparator + sort.Slice(keys, func(i, j int) bool { + return compareHeaders(keys[i], keys[j], tables) < 0 + }) ch := bytes.NewBufferString("") for i, key := range keys { if i > 0 { diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/version.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/version.go index b3059f6e1f..49377cf52e 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/version.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported/version.go @@ -8,5 +8,5 @@ package exported const ( ModuleName = "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" - ModuleVersion = "v1.4.0" + ModuleVersion = "v1.4.1" ) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/autorest.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/autorest.md index 9714432c2f..805bbba944 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/autorest.md +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/autorest.md @@ -7,7 +7,7 @@ go: true clear-output-folder: false version: "^3.0.0" license-header: MICROSOFT_MIT_NO_VERSION -input-file: "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/a32d0b2423d19835246bb2ef92941503bfd5e734/specification/storage/data-plane/Microsoft.BlobStorage/preview/2021-12-02/blob.json" +input-file: "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/f6f50c6388fd5836fa142384641b8353a99874ef/specification/storage/data-plane/Microsoft.BlobStorage/stable/2024-08-04/blob.json" credential-scope: "https://storage.azure.com/.default" output-folder: ../generated file-prefix: "zz_" @@ -22,7 +22,7 @@ export-clients: true use: "@autorest/go@4.0.0-preview.65" ``` -### Updating service version to 2024-05-04 +### Updating service version to 2024-08-04 ```yaml directive: - from: @@ -35,8 +35,21 @@ directive: where: $ transform: >- return $. - replaceAll(`[]string{"2021-12-02"}`, `[]string{ServiceVersion}`). - replaceAll(`2021-12-02`, `2024-05-04`); + replaceAll(`[]string{"2021-12-02"}`, `[]string{ServiceVersion}`); +``` + +### Fix CRC Response Header in PutBlob response +``` yaml +directive: +- from: swagger-document + where: $["x-ms-paths"]["/{containerName}/{blob}?BlockBlob"].put.responses["201"].headers + transform: > + $["x-ms-content-crc64"] = { + "x-ms-client-name": "ContentCRC64", + "type": "string", + "format": "byte", + "description": "Returned for a block blob so that the client can check the integrity of message content." + }; ``` ### Undo breaking change with BlobName diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/constants.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/constants.go index 1c2a036807..29ba5ef087 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/constants.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/constants.go @@ -6,4 +6,4 @@ package generated -const ServiceVersion = "2024-05-04" +const ServiceVersion = "2024-08-04" diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_appendblob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_appendblob_client.go index 8b24ee0898..ba342d54b3 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_appendblob_client.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_appendblob_client.go @@ -29,7 +29,7 @@ type AppendBlobClient struct { // AppendBlob. Append Block is supported only on version 2015-02-21 version or later. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - body - Initial data // - options - AppendBlobClientAppendBlockOptions contains the optional parameters for the AppendBlobClient.AppendBlock method. @@ -116,7 +116,7 @@ func (client *AppendBlobClient) appendBlockCreateRequest(ctx context.Context, co if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := req.SetBody(body, "application/octet-stream"); err != nil { return nil, err } @@ -198,7 +198,7 @@ func (client *AppendBlobClient) appendBlockHandleResponse(resp *http.Response) ( // created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - sourceURL - Specify a URL to the copy source. // - contentLength - The length of the request. // - options - AppendBlobClientAppendBlockFromURLOptions contains the optional parameters for the AppendBlobClient.AppendBlockFromURL @@ -310,7 +310,7 @@ func (client *AppendBlobClient) appendBlockFromURLCreateRequest(ctx context.Cont if options != nil && options.SourceRange != nil { req.Raw().Header["x-ms-source-range"] = []string{*options.SourceRange} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -384,7 +384,7 @@ func (client *AppendBlobClient) appendBlockFromURLHandleResponse(resp *http.Resp // Create - The Create Append Blob operation creates a new append blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - options - AppendBlobClientCreateOptions contains the optional parameters for the AppendBlobClient.Create method. // - BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the BlobClient.SetHTTPHeaders method. @@ -494,7 +494,7 @@ func (client *AppendBlobClient) createCreateRequest(ctx context.Context, content if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -557,7 +557,7 @@ func (client *AppendBlobClient) createHandleResponse(resp *http.Response) (Appen // or later. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - AppendBlobClientSealOptions contains the optional parameters for the AppendBlobClient.Seal method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -615,7 +615,7 @@ func (client *AppendBlobClient) sealCreateRequest(ctx context.Context, options * if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blob_client.go index f30b81b970..8eea594c59 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blob_client.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blob_client.go @@ -29,7 +29,7 @@ type BlobClient struct { // blob with zero length and full metadata. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - copyID - The copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation. // - options - BlobClientAbortCopyFromURLOptions contains the optional parameters for the BlobClient.AbortCopyFromURL method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -72,7 +72,7 @@ func (client *BlobClient) abortCopyFromURLCreateRequest(ctx context.Context, cop if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -101,7 +101,7 @@ func (client *BlobClient) abortCopyFromURLHandleResponse(resp *http.Response) (B // AcquireLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - duration - Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite // lease can be between 15 and 60 seconds. A lease duration cannot be changed using // renew or change. @@ -161,7 +161,7 @@ func (client *BlobClient) acquireLeaseCreateRequest(ctx context.Context, duratio if options != nil && options.ProposedLeaseID != nil { req.Raw().Header["x-ms-proposed-lease-id"] = []string{*options.ProposedLeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -203,7 +203,7 @@ func (client *BlobClient) acquireLeaseHandleResponse(resp *http.Response) (BlobC // BreakLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientBreakLeaseOptions contains the optional parameters for the BlobClient.BreakLease method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. func (client *BlobClient) BreakLease(ctx context.Context, options *BlobClientBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (BlobClientBreakLeaseResponse, error) { @@ -259,7 +259,7 @@ func (client *BlobClient) breakLeaseCreateRequest(ctx context.Context, options * if options != nil && options.BreakPeriod != nil { req.Raw().Header["x-ms-lease-break-period"] = []string{strconv.FormatInt(int64(*options.BreakPeriod), 10)} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -306,7 +306,7 @@ func (client *BlobClient) breakLeaseHandleResponse(resp *http.Response) (BlobCli // ChangeLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - leaseID - Specifies the current lease ID on the resource. // - proposedLeaseID - Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed // lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID @@ -365,7 +365,7 @@ func (client *BlobClient) changeLeaseCreateRequest(ctx context.Context, leaseID req.Raw().Header["x-ms-lease-action"] = []string{"change"} req.Raw().Header["x-ms-lease-id"] = []string{leaseID} req.Raw().Header["x-ms-proposed-lease-id"] = []string{proposedLeaseID} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -408,7 +408,7 @@ func (client *BlobClient) changeLeaseHandleResponse(resp *http.Response) (BlobCl // until the copy is complete. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies // a page blob snapshot. The value should be URL-encoded as it would appear in a request // URI. The source blob must either be public or must be authenticated via a shared access signature. @@ -517,7 +517,7 @@ func (client *BlobClient) copyFromURLCreateRequest(ctx context.Context, copySour if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -582,7 +582,7 @@ func (client *BlobClient) copyFromURLHandleResponse(resp *http.Response) (BlobCl // CreateSnapshot - The Create Snapshot operation creates a read-only snapshot of a blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientCreateSnapshotOptions contains the optional parameters for the BlobClient.CreateSnapshot method. // - CPKInfo - CPKInfo contains a group of parameters for the BlobClient.Download method. // - CPKScopeInfo - CPKScopeInfo contains a group of parameters for the BlobClient.SetMetadata method. @@ -659,7 +659,7 @@ func (client *BlobClient) createSnapshotCreateRequest(ctx context.Context, optio } } } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -721,7 +721,7 @@ func (client *BlobClient) createSnapshotHandleResponse(resp *http.Response) (Blo // return an HTTP status code of 404 (ResourceNotFound). // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientDeleteOptions contains the optional parameters for the BlobClient.Delete method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -788,7 +788,7 @@ func (client *BlobClient) deleteCreateRequest(ctx context.Context, options *Blob if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -817,7 +817,7 @@ func (client *BlobClient) deleteHandleResponse(resp *http.Response) (BlobClientD // DeleteImmutabilityPolicy - The Delete Immutability Policy operation deletes the immutability policy on the blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientDeleteImmutabilityPolicyOptions contains the optional parameters for the BlobClient.DeleteImmutabilityPolicy // method. func (client *BlobClient) DeleteImmutabilityPolicy(ctx context.Context, options *BlobClientDeleteImmutabilityPolicyOptions) (BlobClientDeleteImmutabilityPolicyResponse, error) { @@ -854,7 +854,7 @@ func (client *BlobClient) deleteImmutabilityPolicyCreateRequest(ctx context.Cont if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -884,7 +884,7 @@ func (client *BlobClient) deleteImmutabilityPolicyHandleResponse(resp *http.Resp // can also call Download to read a snapshot. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientDownloadOptions contains the optional parameters for the BlobClient.Download method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - CPKInfo - CPKInfo contains a group of parameters for the BlobClient.Download method. @@ -965,7 +965,7 @@ func (client *BlobClient) downloadCreateRequest(ctx context.Context, options *Bl if options != nil && options.RangeGetContentMD5 != nil { req.Raw().Header["x-ms-range-get-content-md5"] = []string{strconv.FormatBool(*options.RangeGetContentMD5)} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1192,7 +1192,7 @@ func (client *BlobClient) downloadHandleResponse(resp *http.Response) (BlobClien // GetAccountInfo - Returns the sku name and account kind // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientGetAccountInfoOptions contains the optional parameters for the BlobClient.GetAccountInfo method. func (client *BlobClient) GetAccountInfo(ctx context.Context, options *BlobClientGetAccountInfoOptions) (BlobClientGetAccountInfoResponse, error) { var err error @@ -1221,9 +1221,15 @@ func (client *BlobClient) getAccountInfoCreateRequest(ctx context.Context, optio reqQP := req.Raw().URL.Query() reqQP.Set("comp", "properties") reqQP.Set("restype", "account") + if options != nil && options.Timeout != nil { + reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) + } req.Raw().URL.RawQuery = reqQP.Encode() req.Raw().Header["Accept"] = []string{"application/xml"} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + if options != nil && options.RequestID != nil { + req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} + } + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1243,6 +1249,13 @@ func (client *BlobClient) getAccountInfoHandleResponse(resp *http.Response) (Blo } result.Date = &date } + if val := resp.Header.Get("x-ms-is-hns-enabled"); val != "" { + isHierarchicalNamespaceEnabled, err := strconv.ParseBool(val) + if err != nil { + return BlobClientGetAccountInfoResponse{}, err + } + result.IsHierarchicalNamespaceEnabled = &isHierarchicalNamespaceEnabled + } if val := resp.Header.Get("x-ms-request-id"); val != "" { result.RequestID = &val } @@ -1259,7 +1272,7 @@ func (client *BlobClient) getAccountInfoHandleResponse(resp *http.Response) (Blo // for the blob. It does not return the content of the blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientGetPropertiesOptions contains the optional parameters for the BlobClient.GetProperties method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - CPKInfo - CPKInfo contains a group of parameters for the BlobClient.Download method. @@ -1330,7 +1343,7 @@ func (client *BlobClient) getPropertiesCreateRequest(ctx context.Context, option if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1577,7 +1590,7 @@ func (client *BlobClient) getPropertiesHandleResponse(resp *http.Response) (Blob // GetTags - The Get Tags operation enables users to get the tags associated with a blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientGetTagsOptions contains the optional parameters for the BlobClient.GetTags method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -1627,7 +1640,7 @@ func (client *BlobClient) getTagsCreateRequest(ctx context.Context, options *Blo if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1659,7 +1672,7 @@ func (client *BlobClient) getTagsHandleResponse(resp *http.Response) (BlobClient // Query - The Query operation enables users to select/project on blob data by providing simple query expressions. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientQueryOptions contains the optional parameters for the BlobClient.Query method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - CPKInfo - CPKInfo contains a group of parameters for the BlobClient.Download method. @@ -1729,7 +1742,7 @@ func (client *BlobClient) queryCreateRequest(ctx context.Context, options *BlobC if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if options != nil && options.QueryRequest != nil { if err := runtime.MarshalAsXML(req, *options.QueryRequest); err != nil { return nil, err @@ -1893,7 +1906,7 @@ func (client *BlobClient) queryHandleResponse(resp *http.Response) (BlobClientQu // ReleaseLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - leaseID - Specifies the current lease ID on the resource. // - options - BlobClientReleaseLeaseOptions contains the optional parameters for the BlobClient.ReleaseLease method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -1948,7 +1961,7 @@ func (client *BlobClient) releaseLeaseCreateRequest(ctx context.Context, leaseID } req.Raw().Header["x-ms-lease-action"] = []string{"release"} req.Raw().Header["x-ms-lease-id"] = []string{leaseID} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1987,7 +2000,7 @@ func (client *BlobClient) releaseLeaseHandleResponse(resp *http.Response) (BlobC // RenewLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - leaseID - Specifies the current lease ID on the resource. // - options - BlobClientRenewLeaseOptions contains the optional parameters for the BlobClient.RenewLease method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -2042,7 +2055,7 @@ func (client *BlobClient) renewLeaseCreateRequest(ctx context.Context, leaseID s } req.Raw().Header["x-ms-lease-action"] = []string{"renew"} req.Raw().Header["x-ms-lease-id"] = []string{leaseID} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2084,7 +2097,7 @@ func (client *BlobClient) renewLeaseHandleResponse(resp *http.Response) (BlobCli // SetExpiry - Sets the time a blob will expire and be deleted. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - expiryOptions - Required. Indicates mode of the expiry time // - options - BlobClientSetExpiryOptions contains the optional parameters for the BlobClient.SetExpiry method. func (client *BlobClient) SetExpiry(ctx context.Context, expiryOptions ExpiryOptions, options *BlobClientSetExpiryOptions) (BlobClientSetExpiryResponse, error) { @@ -2125,7 +2138,7 @@ func (client *BlobClient) setExpiryCreateRequest(ctx context.Context, expiryOpti if options != nil && options.ExpiresOn != nil { req.Raw().Header["x-ms-expiry-time"] = []string{*options.ExpiresOn} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2164,7 +2177,7 @@ func (client *BlobClient) setExpiryHandleResponse(resp *http.Response) (BlobClie // SetHTTPHeaders - The Set HTTP Headers operation sets system properties on the blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientSetHTTPHeadersOptions contains the optional parameters for the BlobClient.SetHTTPHeaders method. // - BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the BlobClient.SetHTTPHeaders method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -2239,7 +2252,7 @@ func (client *BlobClient) setHTTPHeadersCreateRequest(ctx context.Context, optio if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2285,7 +2298,7 @@ func (client *BlobClient) setHTTPHeadersHandleResponse(resp *http.Response) (Blo // SetImmutabilityPolicy - The Set Immutability Policy operation sets the immutability policy on the blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientSetImmutabilityPolicyOptions contains the optional parameters for the BlobClient.SetImmutabilityPolicy // method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -2332,7 +2345,7 @@ func (client *BlobClient) setImmutabilityPolicyCreateRequest(ctx context.Context if options != nil && options.ImmutabilityPolicyExpiry != nil { req.Raw().Header["x-ms-immutability-policy-until-date"] = []string{(*options.ImmutabilityPolicyExpiry).In(gmt).Format(time.RFC1123)} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2371,7 +2384,7 @@ func (client *BlobClient) setImmutabilityPolicyHandleResponse(resp *http.Respons // SetLegalHold - The Set Legal Hold operation sets a legal hold on the blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - legalHold - Specified if a legal hold should be set on the blob. // - options - BlobClientSetLegalHoldOptions contains the optional parameters for the BlobClient.SetLegalHold method. func (client *BlobClient) SetLegalHold(ctx context.Context, legalHold bool, options *BlobClientSetLegalHoldOptions) (BlobClientSetLegalHoldResponse, error) { @@ -2409,7 +2422,7 @@ func (client *BlobClient) setLegalHoldCreateRequest(ctx context.Context, legalHo req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } req.Raw().Header["x-ms-legal-hold"] = []string{strconv.FormatBool(legalHold)} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2446,7 +2459,7 @@ func (client *BlobClient) setLegalHoldHandleResponse(resp *http.Response) (BlobC // pairs // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientSetMetadataOptions contains the optional parameters for the BlobClient.SetMetadata method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - CPKInfo - CPKInfo contains a group of parameters for the BlobClient.Download method. @@ -2523,7 +2536,7 @@ func (client *BlobClient) setMetadataCreateRequest(ctx context.Context, options } } } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2578,7 +2591,7 @@ func (client *BlobClient) setMetadataHandleResponse(resp *http.Response) (BlobCl // SetTags - The Set Tags operation enables users to set tags on a blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - tags - Blob tags // - options - BlobClientSetTagsOptions contains the optional parameters for the BlobClient.SetTags method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -2632,7 +2645,7 @@ func (client *BlobClient) setTagsCreateRequest(ctx context.Context, tags BlobTag if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := runtime.MarshalAsXML(req, tags); err != nil { return nil, err } @@ -2667,7 +2680,7 @@ func (client *BlobClient) setTagsHandleResponse(resp *http.Response) (BlobClient // storage type. This operation does not update the blob's ETag. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - tier - Indicates the tier to be set on the blob. // - options - BlobClientSetTierOptions contains the optional parameters for the BlobClient.SetTier method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -2722,7 +2735,7 @@ func (client *BlobClient) setTierCreateRequest(ctx context.Context, tier AccessT if options != nil && options.RehydratePriority != nil { req.Raw().Header["x-ms-rehydrate-priority"] = []string{string(*options.RehydratePriority)} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2744,7 +2757,7 @@ func (client *BlobClient) setTierHandleResponse(resp *http.Response) (BlobClient // StartCopyFromURL - The Start Copy From URL operation copies a blob or an internet resource to a new blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies // a page blob snapshot. The value should be URL-encoded as it would appear in a request // URI. The source blob must either be public or must be authenticated via a shared access signature. @@ -2848,7 +2861,7 @@ func (client *BlobClient) startCopyFromURLCreateRequest(ctx context.Context, cop if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -2896,7 +2909,7 @@ func (client *BlobClient) startCopyFromURLHandleResponse(resp *http.Response) (B // Undelete - Undelete a blob that was previously soft deleted // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - BlobClientUndeleteOptions contains the optional parameters for the BlobClient.Undelete method. func (client *BlobClient) Undelete(ctx context.Context, options *BlobClientUndeleteOptions) (BlobClientUndeleteResponse, error) { var err error @@ -2932,7 +2945,7 @@ func (client *BlobClient) undeleteCreateRequest(ctx context.Context, options *Bl if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blockblob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blockblob_client.go index fe4909d73c..13c286c7ed 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blockblob_client.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_blockblob_client.go @@ -33,7 +33,7 @@ type BlockBlobClient struct { // belong to. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - blocks - Blob Blocks. // - options - BlockBlobClientCommitBlockListOptions contains the optional parameters for the BlockBlobClient.CommitBlockList // method. @@ -152,7 +152,7 @@ func (client *BlockBlobClient) commitBlockListCreateRequest(ctx context.Context, if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := runtime.MarshalAsXML(req, blocks); err != nil { return nil, err } @@ -224,7 +224,7 @@ func (client *BlockBlobClient) commitBlockListHandleResponse(resp *http.Response // GetBlockList - The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - listType - Specifies whether to return the list of committed blocks, the list of uncommitted blocks, or both lists together. // - options - BlockBlobClientGetBlockListOptions contains the optional parameters for the BlockBlobClient.GetBlockList method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -273,7 +273,7 @@ func (client *BlockBlobClient) getBlockListCreateRequest(ctx context.Context, li if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -329,7 +329,7 @@ func (client *BlockBlobClient) getBlockListHandleResponse(resp *http.Response) ( // Block from URL API in conjunction with Put Block List. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies // a page blob snapshot. The value should be URL-encoded as it would appear in a request @@ -470,7 +470,7 @@ func (client *BlockBlobClient) putBlobFromURLCreateRequest(ctx context.Context, if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -532,7 +532,7 @@ func (client *BlockBlobClient) putBlobFromURLHandleResponse(resp *http.Response) // StageBlock - The Stage Block operation creates a new block to be committed as part of a blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - blockID - A valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or equal // to 64 bytes in size. For a given blob, the length of the value specified for the blockid // parameter must be the same size for each block. @@ -599,7 +599,7 @@ func (client *BlockBlobClient) stageBlockCreateRequest(ctx context.Context, bloc if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := req.SetBody(body, "application/octet-stream"); err != nil { return nil, err } @@ -659,7 +659,7 @@ func (client *BlockBlobClient) stageBlockHandleResponse(resp *http.Response) (Bl // are read from a URL. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - blockID - A valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or equal // to 64 bytes in size. For a given blob, the length of the value specified for the blockid // parameter must be the same size for each block. @@ -748,7 +748,7 @@ func (client *BlockBlobClient) stageBlockFromURLCreateRequest(ctx context.Contex if options != nil && options.SourceRange != nil { req.Raw().Header["x-ms-source-range"] = []string{*options.SourceRange} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -807,7 +807,7 @@ func (client *BlockBlobClient) stageBlockFromURLHandleResponse(resp *http.Respon // the content of a block blob, use the Put Block List operation. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - body - Initial data // - options - BlockBlobClientUploadOptions contains the optional parameters for the BlockBlobClient.Upload method. @@ -927,7 +927,7 @@ func (client *BlockBlobClient) uploadCreateRequest(ctx context.Context, contentL if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := req.SetBody(body, "application/octet-stream"); err != nil { return nil, err } @@ -940,6 +940,13 @@ func (client *BlockBlobClient) uploadHandleResponse(resp *http.Response) (BlockB if val := resp.Header.Get("x-ms-client-request-id"); val != "" { result.ClientRequestID = &val } + if val := resp.Header.Get("x-ms-content-crc64"); val != "" { + contentCRC64, err := base64.StdEncoding.DecodeString(val) + if err != nil { + return BlockBlobClientUploadResponse{}, err + } + result.ContentCRC64 = contentCRC64 + } if val := resp.Header.Get("Content-MD5"); val != "" { contentMD5, err := base64.StdEncoding.DecodeString(val) if err != nil { diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_container_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_container_client.go index 39958d9580..337df8872b 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_container_client.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_container_client.go @@ -31,7 +31,7 @@ type ContainerClient struct { // to 60 seconds, or can be infinite // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - duration - Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite // lease can be between 15 and 60 seconds. A lease duration cannot be changed using // renew or change. @@ -83,7 +83,7 @@ func (client *ContainerClient) acquireLeaseCreateRequest(ctx context.Context, du if options != nil && options.ProposedLeaseID != nil { req.Raw().Header["x-ms-proposed-lease-id"] = []string{*options.ProposedLeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -126,7 +126,7 @@ func (client *ContainerClient) acquireLeaseHandleResponse(resp *http.Response) ( // to 60 seconds, or can be infinite // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientBreakLeaseOptions contains the optional parameters for the ContainerClient.BreakLease method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. func (client *ContainerClient) BreakLease(ctx context.Context, options *ContainerClientBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (ContainerClientBreakLeaseResponse, error) { @@ -174,7 +174,7 @@ func (client *ContainerClient) breakLeaseCreateRequest(ctx context.Context, opti if options != nil && options.BreakPeriod != nil { req.Raw().Header["x-ms-lease-break-period"] = []string{strconv.FormatInt(int64(*options.BreakPeriod), 10)} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -222,7 +222,7 @@ func (client *ContainerClient) breakLeaseHandleResponse(resp *http.Response) (Co // to 60 seconds, or can be infinite // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - leaseID - Specifies the current lease ID on the resource. // - proposedLeaseID - Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed // lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID @@ -273,7 +273,7 @@ func (client *ContainerClient) changeLeaseCreateRequest(ctx context.Context, lea req.Raw().Header["x-ms-lease-action"] = []string{"change"} req.Raw().Header["x-ms-lease-id"] = []string{leaseID} req.Raw().Header["x-ms-proposed-lease-id"] = []string{proposedLeaseID} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -316,7 +316,7 @@ func (client *ContainerClient) changeLeaseHandleResponse(resp *http.Response) (C // fails // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientCreateOptions contains the optional parameters for the ContainerClient.Create method. // - ContainerCPKScopeInfo - ContainerCPKScopeInfo contains a group of parameters for the ContainerClient.Create method. func (client *ContainerClient) Create(ctx context.Context, options *ContainerClientCreateOptions, containerCPKScopeInfo *ContainerCPKScopeInfo) (ContainerClientCreateResponse, error) { @@ -369,7 +369,7 @@ func (client *ContainerClient) createCreateRequest(ctx context.Context, options } } } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -409,7 +409,7 @@ func (client *ContainerClient) createHandleResponse(resp *http.Response) (Contai // deleted during garbage collection // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientDeleteOptions contains the optional parameters for the ContainerClient.Delete method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -456,7 +456,7 @@ func (client *ContainerClient) deleteCreateRequest(ctx context.Context, options if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -486,7 +486,7 @@ func (client *ContainerClient) deleteHandleResponse(resp *http.Response) (Contai // Filter blobs searches within the given container. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - where - Filters the results to return only to return only blobs whose tags match the specified expression. // - options - ContainerClientFilterBlobsOptions contains the optional parameters for the ContainerClient.FilterBlobs method. func (client *ContainerClient) FilterBlobs(ctx context.Context, where string, options *ContainerClientFilterBlobsOptions) (ContainerClientFilterBlobsResponse, error) { @@ -534,7 +534,7 @@ func (client *ContainerClient) filterBlobsCreateRequest(ctx context.Context, whe if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -567,7 +567,7 @@ func (client *ContainerClient) filterBlobsHandleResponse(resp *http.Response) (C // be accessed publicly. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientGetAccessPolicyOptions contains the optional parameters for the ContainerClient.GetAccessPolicy // method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -609,7 +609,7 @@ func (client *ContainerClient) getAccessPolicyCreateRequest(ctx context.Context, if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -654,7 +654,7 @@ func (client *ContainerClient) getAccessPolicyHandleResponse(resp *http.Response // GetAccountInfo - Returns the sku name and account kind // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientGetAccountInfoOptions contains the optional parameters for the ContainerClient.GetAccountInfo // method. func (client *ContainerClient) GetAccountInfo(ctx context.Context, options *ContainerClientGetAccountInfoOptions) (ContainerClientGetAccountInfoResponse, error) { @@ -684,9 +684,15 @@ func (client *ContainerClient) getAccountInfoCreateRequest(ctx context.Context, reqQP := req.Raw().URL.Query() reqQP.Set("comp", "properties") reqQP.Set("restype", "account") + if options != nil && options.Timeout != nil { + reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) + } req.Raw().URL.RawQuery = reqQP.Encode() req.Raw().Header["Accept"] = []string{"application/xml"} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + if options != nil && options.RequestID != nil { + req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} + } + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -706,6 +712,13 @@ func (client *ContainerClient) getAccountInfoHandleResponse(resp *http.Response) } result.Date = &date } + if val := resp.Header.Get("x-ms-is-hns-enabled"); val != "" { + isHierarchicalNamespaceEnabled, err := strconv.ParseBool(val) + if err != nil { + return ContainerClientGetAccountInfoResponse{}, err + } + result.IsHierarchicalNamespaceEnabled = &isHierarchicalNamespaceEnabled + } if val := resp.Header.Get("x-ms-request-id"); val != "" { result.RequestID = &val } @@ -722,7 +735,7 @@ func (client *ContainerClient) getAccountInfoHandleResponse(resp *http.Response) // does not include the container's list of blobs // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientGetPropertiesOptions contains the optional parameters for the ContainerClient.GetProperties method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. func (client *ContainerClient) GetProperties(ctx context.Context, options *ContainerClientGetPropertiesOptions, leaseAccessConditions *LeaseAccessConditions) (ContainerClientGetPropertiesResponse, error) { @@ -762,7 +775,7 @@ func (client *ContainerClient) getPropertiesCreateRequest(ctx context.Context, o if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -851,7 +864,7 @@ func (client *ContainerClient) getPropertiesHandleResponse(resp *http.Response) // NewListBlobFlatSegmentPager - [Update] The List Blobs operation returns a list of the blobs under the specified container // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientListBlobFlatSegmentOptions contains the optional parameters for the ContainerClient.NewListBlobFlatSegmentPager // method. // @@ -884,7 +897,7 @@ func (client *ContainerClient) ListBlobFlatSegmentCreateRequest(ctx context.Cont if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -918,7 +931,7 @@ func (client *ContainerClient) ListBlobFlatSegmentHandleResponse(resp *http.Resp // NewListBlobHierarchySegmentPager - [Update] The List Blobs operation returns a list of the blobs under the specified container // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - delimiter - When the request includes this parameter, the operation returns a BlobPrefix element in the response body that // acts as a placeholder for all blobs whose names begin with the same substring up to the // appearance of the delimiter character. The delimiter may be a single character or a string. @@ -975,7 +988,7 @@ func (client *ContainerClient) ListBlobHierarchySegmentCreateRequest(ctx context if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1011,7 +1024,7 @@ func (client *ContainerClient) ListBlobHierarchySegmentHandleResponse(resp *http // to 60 seconds, or can be infinite // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - leaseID - Specifies the current lease ID on the resource. // - options - ContainerClientReleaseLeaseOptions contains the optional parameters for the ContainerClient.ReleaseLease method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -1058,7 +1071,7 @@ func (client *ContainerClient) releaseLeaseCreateRequest(ctx context.Context, le } req.Raw().Header["x-ms-lease-action"] = []string{"release"} req.Raw().Header["x-ms-lease-id"] = []string{leaseID} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1097,7 +1110,7 @@ func (client *ContainerClient) releaseLeaseHandleResponse(resp *http.Response) ( // Rename - Renames an existing container. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - sourceContainerName - Required. Specifies the name of the container to rename. // - options - ContainerClientRenameOptions contains the optional parameters for the ContainerClient.Rename method. func (client *ContainerClient) Rename(ctx context.Context, sourceContainerName string, options *ContainerClientRenameOptions) (ContainerClientRenameResponse, error) { @@ -1139,7 +1152,7 @@ func (client *ContainerClient) renameCreateRequest(ctx context.Context, sourceCo if options != nil && options.SourceLeaseID != nil { req.Raw().Header["x-ms-source-lease-id"] = []string{*options.SourceLeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1169,7 +1182,7 @@ func (client *ContainerClient) renameHandleResponse(resp *http.Response) (Contai // to 60 seconds, or can be infinite // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - leaseID - Specifies the current lease ID on the resource. // - options - ContainerClientRenewLeaseOptions contains the optional parameters for the ContainerClient.RenewLease method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -1216,7 +1229,7 @@ func (client *ContainerClient) renewLeaseCreateRequest(ctx context.Context, leas } req.Raw().Header["x-ms-lease-action"] = []string{"renew"} req.Raw().Header["x-ms-lease-id"] = []string{leaseID} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1258,7 +1271,7 @@ func (client *ContainerClient) renewLeaseHandleResponse(resp *http.Response) (Co // Restore - Restores a previously-deleted container. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientRestoreOptions contains the optional parameters for the ContainerClient.Restore method. func (client *ContainerClient) Restore(ctx context.Context, options *ContainerClientRestoreOptions) (ContainerClientRestoreResponse, error) { var err error @@ -1301,7 +1314,7 @@ func (client *ContainerClient) restoreCreateRequest(ctx context.Context, options if options != nil && options.DeletedContainerVersion != nil { req.Raw().Header["x-ms-deleted-container-version"] = []string{*options.DeletedContainerVersion} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1331,7 +1344,7 @@ func (client *ContainerClient) restoreHandleResponse(resp *http.Response) (Conta // may be accessed publicly. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - containerACL - the acls for the container // - options - ContainerClientSetAccessPolicyOptions contains the optional parameters for the ContainerClient.SetAccessPolicy // method. @@ -1384,7 +1397,7 @@ func (client *ContainerClient) setAccessPolicyCreateRequest(ctx context.Context, if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} type wrapper struct { XMLName xml.Name `xml:"SignedIdentifiers"` ContainerACL *[]*SignedIdentifier `xml:"SignedIdentifier"` @@ -1430,7 +1443,7 @@ func (client *ContainerClient) setAccessPolicyHandleResponse(resp *http.Response // SetMetadata - operation sets one or more user-defined name-value pairs for the specified container. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ContainerClientSetMetadataOptions contains the optional parameters for the ContainerClient.SetMetadata method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. // - ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the ContainerClient.Delete method. @@ -1482,7 +1495,7 @@ func (client *ContainerClient) setMetadataCreateRequest(ctx context.Context, opt } } } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -1521,7 +1534,7 @@ func (client *ContainerClient) setMetadataHandleResponse(resp *http.Response) (C // SubmitBatch - The Batch operation allows multiple API calls to be embedded into a single HTTP request. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - multipartContentType - Required. The value of this header must be multipart/mixed with a batch boundary. Example header // value: multipart/mixed; boundary=batch_ @@ -1565,7 +1578,7 @@ func (client *ContainerClient) submitBatchCreateRequest(ctx context.Context, con if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := req.SetBody(body, multipartContentType); err != nil { return nil, err } diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_options.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_options.go index 35a67a2791..89d05310a8 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_options.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_options.go @@ -302,7 +302,13 @@ type BlobClientDownloadOptions struct { // BlobClientGetAccountInfoOptions contains the optional parameters for the BlobClient.GetAccountInfo method. type BlobClientGetAccountInfoOptions struct { - // placeholder for future optional parameters + // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage + // analytics logging is enabled. + RequestID *string + + // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. + // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] + Timeout *int32 } // BlobClientGetPropertiesOptions contains the optional parameters for the BlobClient.GetProperties method. @@ -873,7 +879,13 @@ type ContainerClientGetAccessPolicyOptions struct { // ContainerClientGetAccountInfoOptions contains the optional parameters for the ContainerClient.GetAccountInfo method. type ContainerClientGetAccountInfoOptions struct { - // placeholder for future optional parameters + // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage + // analytics logging is enabled. + RequestID *string + + // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. + // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] + Timeout *int32 } // ContainerClientGetPropertiesOptions contains the optional parameters for the ContainerClient.GetProperties method. @@ -1357,7 +1369,13 @@ type ServiceClientFilterBlobsOptions struct { // ServiceClientGetAccountInfoOptions contains the optional parameters for the ServiceClient.GetAccountInfo method. type ServiceClientGetAccountInfoOptions struct { - // placeholder for future optional parameters + // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage + // analytics logging is enabled. + RequestID *string + + // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. + // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] + Timeout *int32 } // ServiceClientGetPropertiesOptions contains the optional parameters for the ServiceClient.GetProperties method. diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_pageblob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_pageblob_client.go index dd040e48a2..9e71d24417 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_pageblob_client.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_pageblob_client.go @@ -27,7 +27,7 @@ type PageBlobClient struct { // ClearPages - The Clear Pages operation clears a set of pages from a page blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - options - PageBlobClientClearPagesOptions contains the optional parameters for the PageBlobClient.ClearPages method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -114,7 +114,7 @@ func (client *PageBlobClient) clearPagesCreateRequest(ctx context.Context, conte if options != nil && options.Range != nil { req.Raw().Header["x-ms-range"] = []string{*options.Range} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -178,7 +178,7 @@ func (client *PageBlobClient) clearPagesHandleResponse(resp *http.Response) (Pag // 2016-05-31. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies // a page blob snapshot. The value should be URL-encoded as it would appear in a request // URI. The source blob must either be public or must be authenticated via a shared access signature. @@ -235,7 +235,7 @@ func (client *PageBlobClient) copyIncrementalCreateRequest(ctx context.Context, if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { req.Raw().Header["x-ms-if-tags"] = []string{*modifiedAccessConditions.IfTags} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -280,7 +280,7 @@ func (client *PageBlobClient) copyIncrementalHandleResponse(resp *http.Response) // Create - The Create operation creates a new page blob. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - blobContentLength - This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned // to a 512-byte boundary. @@ -399,7 +399,7 @@ func (client *PageBlobClient) createCreateRequest(ctx context.Context, contentLe if options != nil && options.BlobTagsString != nil { req.Raw().Header["x-ms-tags"] = []string{*options.BlobTagsString} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -461,7 +461,7 @@ func (client *PageBlobClient) createHandleResponse(resp *http.Response) (PageBlo // NewGetPageRangesPager - The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot // of a page blob // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - PageBlobClientGetPageRangesOptions contains the optional parameters for the PageBlobClient.NewGetPageRangesPager // method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -533,7 +533,7 @@ func (client *PageBlobClient) GetPageRangesCreateRequest(ctx context.Context, op if options != nil && options.Range != nil { req.Raw().Header["x-ms-range"] = []string{*options.Range} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -582,7 +582,7 @@ func (client *PageBlobClient) GetPageRangesHandleResponse(resp *http.Response) ( // NewGetPageRangesDiffPager - The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that // were changed between target blob and previous snapshot. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - PageBlobClientGetPageRangesDiffOptions contains the optional parameters for the PageBlobClient.NewGetPageRangesDiffPager // method. // - LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the ContainerClient.GetProperties method. @@ -660,7 +660,7 @@ func (client *PageBlobClient) GetPageRangesDiffCreateRequest(ctx context.Context if options != nil && options.Range != nil { req.Raw().Header["x-ms-range"] = []string{*options.Range} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -709,7 +709,7 @@ func (client *PageBlobClient) GetPageRangesDiffHandleResponse(resp *http.Respons // Resize - Resize the Blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - blobContentLength - This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned // to a 512-byte boundary. // - options - PageBlobClientResizeOptions contains the optional parameters for the PageBlobClient.Resize method. @@ -782,7 +782,7 @@ func (client *PageBlobClient) resizeCreateRequest(ctx context.Context, blobConte if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -828,7 +828,7 @@ func (client *PageBlobClient) resizeHandleResponse(resp *http.Response) (PageBlo // UpdateSequenceNumber - Update the sequence number of the blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - sequenceNumberAction - Required if the x-ms-blob-sequence-number header is set for the request. This property applies to // page blobs only. This property indicates how the service should modify the blob's sequence number // - options - PageBlobClientUpdateSequenceNumberOptions contains the optional parameters for the PageBlobClient.UpdateSequenceNumber @@ -891,7 +891,7 @@ func (client *PageBlobClient) updateSequenceNumberCreateRequest(ctx context.Cont req.Raw().Header["x-ms-lease-id"] = []string{*leaseAccessConditions.LeaseID} } req.Raw().Header["x-ms-sequence-number-action"] = []string{string(sequenceNumberAction)} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -937,7 +937,7 @@ func (client *PageBlobClient) updateSequenceNumberHandleResponse(resp *http.Resp // UploadPages - The Upload Pages operation writes a range of pages to a page blob // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - body - Initial data // - options - PageBlobClientUploadPagesOptions contains the optional parameters for the PageBlobClient.UploadPages method. @@ -1031,7 +1031,7 @@ func (client *PageBlobClient) uploadPagesCreateRequest(ctx context.Context, cont if options != nil && options.Range != nil { req.Raw().Header["x-ms-range"] = []string{*options.Range} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := req.SetBody(body, "application/octet-stream"); err != nil { return nil, err } @@ -1108,7 +1108,7 @@ func (client *PageBlobClient) uploadPagesHandleResponse(resp *http.Response) (Pa // a URL // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - sourceURL - Specify a URL to the copy source. // - sourceRange - Bytes of source data in the specified range. The length of this range should match the ContentLength header // and x-ms-range/Range destination range header. @@ -1224,7 +1224,7 @@ func (client *PageBlobClient) uploadPagesFromURLCreateRequest(ctx context.Contex req.Raw().Header["x-ms-source-if-unmodified-since"] = []string{(*sourceModifiedAccessConditions.SourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)} } req.Raw().Header["x-ms-source-range"] = []string{sourceRange} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_responses.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_responses.go index adb736607f..ff9f3d3de1 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_responses.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_responses.go @@ -490,6 +490,9 @@ type BlobClientGetAccountInfoResponse struct { // Date contains the information returned from the Date header response. Date *time.Time + // IsHierarchicalNamespaceEnabled contains the information returned from the x-ms-is-hns-enabled header response. + IsHierarchicalNamespaceEnabled *bool + // RequestID contains the information returned from the x-ms-request-id header response. RequestID *string @@ -1176,6 +1179,9 @@ type BlockBlobClientUploadResponse struct { // ClientRequestID contains the information returned from the x-ms-client-request-id header response. ClientRequestID *string + // ContentCRC64 contains the information returned from the x-ms-content-crc64 header response. + ContentCRC64 []byte + // ContentMD5 contains the information returned from the Content-MD5 header response. ContentMD5 []byte @@ -1371,6 +1377,9 @@ type ContainerClientGetAccountInfoResponse struct { // Date contains the information returned from the Date header response. Date *time.Time + // IsHierarchicalNamespaceEnabled contains the information returned from the x-ms-is-hns-enabled header response. + IsHierarchicalNamespaceEnabled *bool + // RequestID contains the information returned from the x-ms-request-id header response. RequestID *string diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_service_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_service_client.go index ae58529494..f1533cef0f 100644 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_service_client.go +++ b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated/zz_service_client.go @@ -30,7 +30,7 @@ type ServiceClient struct { // be scoped within the expression to a single container. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - where - Filters the results to return only to return only blobs whose tags match the specified expression. // - options - ServiceClientFilterBlobsOptions contains the optional parameters for the ServiceClient.FilterBlobs method. func (client *ServiceClient) FilterBlobs(ctx context.Context, where string, options *ServiceClientFilterBlobsOptions) (ServiceClientFilterBlobsResponse, error) { @@ -77,7 +77,7 @@ func (client *ServiceClient) filterBlobsCreateRequest(ctx context.Context, where if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -109,7 +109,7 @@ func (client *ServiceClient) filterBlobsHandleResponse(resp *http.Response) (Ser // GetAccountInfo - Returns the sku name and account kind // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ServiceClientGetAccountInfoOptions contains the optional parameters for the ServiceClient.GetAccountInfo method. func (client *ServiceClient) GetAccountInfo(ctx context.Context, options *ServiceClientGetAccountInfoOptions) (ServiceClientGetAccountInfoResponse, error) { var err error @@ -138,9 +138,15 @@ func (client *ServiceClient) getAccountInfoCreateRequest(ctx context.Context, op reqQP := req.Raw().URL.Query() reqQP.Set("comp", "properties") reqQP.Set("restype", "account") + if options != nil && options.Timeout != nil { + reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) + } req.Raw().URL.RawQuery = reqQP.Encode() req.Raw().Header["Accept"] = []string{"application/xml"} - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + if options != nil && options.RequestID != nil { + req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} + } + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -183,7 +189,7 @@ func (client *ServiceClient) getAccountInfoHandleResponse(resp *http.Response) ( // CORS (Cross-Origin Resource Sharing) rules. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ServiceClientGetPropertiesOptions contains the optional parameters for the ServiceClient.GetProperties method. func (client *ServiceClient) GetProperties(ctx context.Context, options *ServiceClientGetPropertiesOptions) (ServiceClientGetPropertiesResponse, error) { var err error @@ -220,7 +226,7 @@ func (client *ServiceClient) getPropertiesCreateRequest(ctx context.Context, opt if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -246,7 +252,7 @@ func (client *ServiceClient) getPropertiesHandleResponse(resp *http.Response) (S // location endpoint when read-access geo-redundant replication is enabled for the storage account. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ServiceClientGetStatisticsOptions contains the optional parameters for the ServiceClient.GetStatistics method. func (client *ServiceClient) GetStatistics(ctx context.Context, options *ServiceClientGetStatisticsOptions) (ServiceClientGetStatisticsResponse, error) { var err error @@ -283,7 +289,7 @@ func (client *ServiceClient) getStatisticsCreateRequest(ctx context.Context, opt if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -316,7 +322,7 @@ func (client *ServiceClient) getStatisticsHandleResponse(resp *http.Response) (S // bearer token authentication. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - keyInfo - Key information // - options - ServiceClientGetUserDelegationKeyOptions contains the optional parameters for the ServiceClient.GetUserDelegationKey // method. @@ -355,7 +361,7 @@ func (client *ServiceClient) getUserDelegationKeyCreateRequest(ctx context.Conte if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := runtime.MarshalAsXML(req, keyInfo); err != nil { return nil, err } @@ -390,7 +396,7 @@ func (client *ServiceClient) getUserDelegationKeyHandleResponse(resp *http.Respo // NewListContainersSegmentPager - The List Containers Segment operation returns a list of the containers under the specified // account // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - options - ServiceClientListContainersSegmentOptions contains the optional parameters for the ServiceClient.NewListContainersSegmentPager // method. // @@ -422,7 +428,7 @@ func (client *ServiceClient) ListContainersSegmentCreateRequest(ctx context.Cont if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} return req, nil } @@ -448,7 +454,7 @@ func (client *ServiceClient) ListContainersSegmentHandleResponse(resp *http.Resp // and CORS (Cross-Origin Resource Sharing) rules // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - storageServiceProperties - The StorageService properties. // - options - ServiceClientSetPropertiesOptions contains the optional parameters for the ServiceClient.SetProperties method. func (client *ServiceClient) SetProperties(ctx context.Context, storageServiceProperties StorageServiceProperties, options *ServiceClientSetPropertiesOptions) (ServiceClientSetPropertiesResponse, error) { @@ -486,7 +492,7 @@ func (client *ServiceClient) setPropertiesCreateRequest(ctx context.Context, sto if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := runtime.MarshalAsXML(req, storageServiceProperties); err != nil { return nil, err } @@ -511,7 +517,7 @@ func (client *ServiceClient) setPropertiesHandleResponse(resp *http.Response) (S // SubmitBatch - The Batch operation allows multiple API calls to be embedded into a single HTTP request. // If the operation fails it returns an *azcore.ResponseError type. // -// Generated from API version 2023-11-03 +// Generated from API version 2024-08-04 // - contentLength - The length of the request. // - multipartContentType - Required. The value of this header must be multipart/mixed with a batch boundary. Example header // value: multipart/mixed; boundary=batch_ @@ -554,7 +560,7 @@ func (client *ServiceClient) submitBatchCreateRequest(ctx context.Context, conte if options != nil && options.RequestID != nil { req.Raw().Header["x-ms-client-request-id"] = []string{*options.RequestID} } - req.Raw().Header["x-ms-version"] = []string{ServiceVersion} + req.Raw().Header["x-ms-version"] = []string{"2024-08-04"} if err := req.SetBody(body, multipartContentType); err != nil { return nil, err } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go index fca15f3822..4321d2f8aa 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go @@ -3,4 +3,4 @@ package aws // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.30.5" +const goModuleVersion = "1.31.0" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go index e7d268c3da..128b60a731 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go @@ -4,6 +4,7 @@ import ( "context" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -45,6 +46,9 @@ func (m *RequestIDRetriever) HandleDeserialize(ctx context.Context, in middlewar if v := resp.Header.Get(h); len(v) != 0 { // set reqID on metadata for successful responses. SetRequestIDMetadata(&metadata, v) + + span, _ := tracing.GetSpan(ctx) + span.SetProperty("aws.request_id", v) break } } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md index 5499113132..3f902af873 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.6.5 (2024-09-20) + +* No change notes available for this release. + # v1.6.4 (2024-08-15) * **Dependency Update**: Bump minimum Go version to 1.21. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go index a107da9084..d1fc3e01c4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go @@ -3,4 +3,4 @@ package eventstream // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.6.4" +const goModuleVersion = "1.6.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go new file mode 100644 index 0000000000..bfa5bf7d13 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go @@ -0,0 +1,51 @@ +package retry + +import ( + "context" + + "github.com/aws/smithy-go/metrics" + "github.com/aws/smithy-go/middleware" +) + +type attemptMetrics struct { + Attempts metrics.Int64Counter + Errors metrics.Int64Counter + + AttemptDuration metrics.Float64Histogram +} + +func newAttemptMetrics(meter metrics.Meter) (*attemptMetrics, error) { + m := &attemptMetrics{} + var err error + + m.Attempts, err = meter.Int64Counter("client.call.attempts", func(o *metrics.InstrumentOptions) { + o.UnitLabel = "{attempt}" + o.Description = "The number of attempts for an individual operation" + }) + if err != nil { + return nil, err + } + m.Errors, err = meter.Int64Counter("client.call.errors", func(o *metrics.InstrumentOptions) { + o.UnitLabel = "{error}" + o.Description = "The number of errors for an operation" + }) + if err != nil { + return nil, err + } + m.AttemptDuration, err = meter.Float64Histogram("client.call.attempt_duration", func(o *metrics.InstrumentOptions) { + o.UnitLabel = "s" + o.Description = "The time it takes to connect to the service, send the request, and get back HTTP status code and headers (including time queued waiting to be sent)" + }) + if err != nil { + return nil, err + } + + return m, nil +} + +func withOperationMetadata(ctx context.Context) metrics.RecordMetricOption { + return func(o *metrics.RecordMetricOptions) { + o.Properties.Set("rpc.service", middleware.GetServiceID(ctx)) + o.Properties.Set("rpc.method", middleware.GetOperationName(ctx)) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go index b645fbdf13..286892adc8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go @@ -8,14 +8,17 @@ import ( "strings" "time" - "github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics" + privatemetrics "github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics" internalcontext "github.com/aws/aws-sdk-go-v2/internal/context" + "github.com/aws/smithy-go" "github.com/aws/aws-sdk-go-v2/aws" awsmiddle "github.com/aws/aws-sdk-go-v2/aws/middleware" "github.com/aws/aws-sdk-go-v2/internal/sdk" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" smithymiddle "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" "github.com/aws/smithy-go/transport/http" ) @@ -38,6 +41,9 @@ type Attempt struct { // attempts are reached. LogAttempts bool + // A Meter instance for recording retry-related metrics. + OperationMeter metrics.Meter + retryer aws.RetryerV2 requestCloner RequestCloner } @@ -55,6 +61,10 @@ func NewAttemptMiddleware(retryer aws.Retryer, requestCloner RequestCloner, optF for _, fn := range optFns { fn(m) } + if m.OperationMeter == nil { + m.OperationMeter = metrics.NopMeterProvider{}.Meter("") + } + return m } @@ -80,6 +90,11 @@ func (r *Attempt) HandleFinalize(ctx context.Context, in smithymiddle.FinalizeIn maxAttempts := r.retryer.MaxAttempts() releaseRetryToken := nopRelease + retryMetrics, err := newAttemptMetrics(r.OperationMeter) + if err != nil { + return out, metadata, err + } + for { attemptNum++ attemptInput := in @@ -97,7 +112,25 @@ func (r *Attempt) HandleFinalize(ctx context.Context, in smithymiddle.FinalizeIn ctx = internalcontext.SetAttemptSkewContext(ctx, attemptClockSkew) var attemptResult AttemptResult + + attemptCtx, span := tracing.StartSpan(attemptCtx, "Attempt", func(o *tracing.SpanOptions) { + o.Properties.Set("operation.attempt", attemptNum) + }) + retryMetrics.Attempts.Add(ctx, 1, withOperationMetadata(ctx)) + + start := sdk.NowTime() out, attemptResult, releaseRetryToken, err = r.handleAttempt(attemptCtx, attemptInput, releaseRetryToken, next) + elapsed := sdk.NowTime().Sub(start) + + retryMetrics.AttemptDuration.Record(ctx, float64(elapsed)/1e9, withOperationMetadata(ctx)) + if err != nil { + retryMetrics.Errors.Add(ctx, 1, withOperationMetadata(ctx), func(o *metrics.RecordMetricOptions) { + o.Properties.Set("exception.type", errorType(err)) + }) + } + + span.End() + attemptClockSkew, _ = awsmiddle.GetAttemptSkew(attemptResult.ResponseMetadata) // AttemptResult Retried states that the attempt was not successful, and @@ -238,7 +271,7 @@ func (r *Attempt) handleAttempt( // that time. Potentially early exist if the sleep is canceled via the // context. retryDelay, reqErr := r.retryer.RetryDelay(attemptNum, err) - mctx := metrics.Context(ctx) + mctx := privatemetrics.Context(ctx) if mctx != nil { attempt, err := mctx.Data().LatestAttempt() if err != nil { @@ -381,3 +414,13 @@ func AddRetryMiddlewares(stack *smithymiddle.Stack, options AddRetryMiddlewaresO } return nil } + +// Determines the value of exception.type for metrics purposes. We prefer an +// API-specific error code, otherwise it's just the Go type for the value. +func errorType(err error) string { + var terr smithy.APIError + if errors.As(err, &terr) { + return terr.ErrorCode() + } + return fmt.Sprintf("%T", err) +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go index a9db6433de..a10ee510af 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go @@ -15,6 +15,7 @@ import ( internalauth "github.com/aws/aws-sdk-go-v2/internal/auth" "github.com/aws/aws-sdk-go-v2/internal/sdk" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -161,6 +162,9 @@ func (m *ComputePayloadSHA256) HandleFinalize( return next.HandleFinalize(ctx, in) } + _, span := tracing.StartSpan(ctx, "ComputePayloadSHA256") + defer span.End() + req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &HashComputationError{ @@ -186,6 +190,7 @@ func (m *ComputePayloadSHA256) HandleFinalize( ctx = SetPayloadHash(ctx, hex.EncodeToString(hash.Sum(nil))) + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go index 26d90719b2..8d7c35a9ec 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go @@ -1,13 +1,16 @@ package http import ( + "context" "crypto/tls" - "github.com/aws/aws-sdk-go-v2/aws" "net" "net/http" "reflect" "sync" "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/smithy-go/tracing" ) // Defaults for the HTTPTransportBuilder. @@ -179,7 +182,7 @@ func defaultHTTPTransport() *http.Transport { tr := &http.Transport{ Proxy: http.ProxyFromEnvironment, - DialContext: dialer.DialContext, + DialContext: traceDialContext(dialer.DialContext), TLSHandshakeTimeout: DefaultHTTPTransportTLSHandleshakeTimeout, MaxIdleConns: DefaultHTTPTransportMaxIdleConns, MaxIdleConnsPerHost: DefaultHTTPTransportMaxIdleConnsPerHost, @@ -194,6 +197,35 @@ func defaultHTTPTransport() *http.Transport { return tr } +type dialContext func(ctx context.Context, network, addr string) (net.Conn, error) + +func traceDialContext(dc dialContext) dialContext { + return func(ctx context.Context, network, addr string) (net.Conn, error) { + span, _ := tracing.GetSpan(ctx) + span.SetProperty("net.peer.name", addr) + + conn, err := dc(ctx, network, addr) + if err != nil { + return conn, err + } + + raddr := conn.RemoteAddr() + if raddr == nil { + return conn, err + } + + host, port, err := net.SplitHostPort(raddr.String()) + if err != nil { // don't blow up just because we couldn't parse + span.SetProperty("net.peer.addr", raddr.String()) + } else { + span.SetProperty("net.peer.host", host) + span.SetProperty("net.peer.port", port) + } + + return conn, err + } +} + // shallowCopyStruct creates a shallow copy of the passed in source struct, and // returns that copy of the same struct type. func shallowCopyStruct(src interface{}) interface{} { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md index 8325c8a0be..e5e148b35a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md @@ -1,3 +1,23 @@ +# v1.27.38 (2024-09-25) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.37 (2024-09-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.36 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.35 (2024-09-17) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.27.34 (2024-09-16) + +* **Bug Fix**: Read `AWS_CONTAINER_CREDENTIALS_FULL_URI` env variable if set when reading a profile with `credential_source`. Also ensure `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` is always read before it + # v1.27.33 (2024-09-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go index 411bda659d..451fa244e1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go @@ -3,4 +3,4 @@ package config // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.27.33" +const goModuleVersion = "1.27.38" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go b/vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go index 89368520f3..7ae252e2e8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go @@ -162,12 +162,12 @@ func resolveCredsFromProfile(ctx context.Context, cfg *aws.Config, envConfig *En // Get credentials from CredentialProcess err = processCredentials(ctx, cfg, sharedConfig, configs) - case len(envConfig.ContainerCredentialsEndpoint) != 0: - err = resolveLocalHTTPCredProvider(ctx, cfg, envConfig.ContainerCredentialsEndpoint, envConfig.ContainerAuthorizationToken, configs) - case len(envConfig.ContainerCredentialsRelativePath) != 0: err = resolveHTTPCredProvider(ctx, cfg, ecsContainerURI(envConfig.ContainerCredentialsRelativePath), envConfig.ContainerAuthorizationToken, configs) + case len(envConfig.ContainerCredentialsEndpoint) != 0: + err = resolveLocalHTTPCredProvider(ctx, cfg, envConfig.ContainerCredentialsEndpoint, envConfig.ContainerAuthorizationToken, configs) + default: err = resolveEC2RoleCredentials(ctx, cfg, configs) } @@ -355,10 +355,13 @@ func resolveCredsFromSource(ctx context.Context, cfg *aws.Config, envConfig *Env cfg.Credentials = credentials.StaticCredentialsProvider{Value: envConfig.Credentials} case credSourceECSContainer: - if len(envConfig.ContainerCredentialsRelativePath) == 0 { - return fmt.Errorf("EcsContainer was specified as the credential_source, but 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' was not set") + if len(envConfig.ContainerCredentialsRelativePath) != 0 { + return resolveHTTPCredProvider(ctx, cfg, ecsContainerURI(envConfig.ContainerCredentialsRelativePath), envConfig.ContainerAuthorizationToken, configs) } - return resolveHTTPCredProvider(ctx, cfg, ecsContainerURI(envConfig.ContainerCredentialsRelativePath), envConfig.ContainerAuthorizationToken, configs) + if len(envConfig.ContainerCredentialsEndpoint) != 0 { + return resolveLocalHTTPCredProvider(ctx, cfg, envConfig.ContainerCredentialsEndpoint, envConfig.ContainerAuthorizationToken, configs) + } + return fmt.Errorf("EcsContainer was specified as the credential_source, but neither 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' or AWS_CONTAINER_CREDENTIALS_FULL_URI' was set") default: return fmt.Errorf("credential_source values must be EcsContainer, Ec2InstanceMetadata, or Environment") diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md index dfb3dc94b7..0e817940d7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md @@ -1,3 +1,19 @@ +# v1.17.36 (2024-09-25) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.35 (2024-09-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.34 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.33 (2024-09-17) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.17.32 (2024-09-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go index e7467a7d98..0679bf3273 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go @@ -3,4 +3,4 @@ package credentials // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.17.32" +const goModuleVersion = "1.17.36" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md index 821fd36539..045ceee610 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.16.14 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.16.13 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go index 949c9ca46b..3134fabd36 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go @@ -3,4 +3,4 @@ package imds // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.16.13" +const goModuleVersion = "1.16.14" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md index 9b15f81b14..3e142b6807 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md @@ -1,3 +1,27 @@ +# v1.17.24 (2024-09-25) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.23 (2024-09-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.22 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.21 (2024-09-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.20 (2024-09-17) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.19 (2024-09-16) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.17.18 (2024-09-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go index 7f32f117f1..c0a0fec160 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go @@ -3,4 +3,4 @@ package manager // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.17.18" +const goModuleVersion = "1.17.24" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md index f6833e54c2..4370f9481f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.3.18 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.3.17 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go index 3bcd95b80c..236805edc9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go @@ -3,4 +3,4 @@ package configsources // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.3.17" +const goModuleVersion = "1.3.18" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json index 712d31e3fe..a2f0680888 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json @@ -9,7 +9,7 @@ "supportsDualStack" : true, "supportsFIPS" : true }, - "regionRegex" : "^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$", + "regionRegex" : "^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$", "regions" : { "af-south-1" : { "description" : "Africa (Cape Town)" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md index a6860c0e23..351e4f2d87 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md @@ -1,3 +1,7 @@ +# v2.6.18 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v2.6.17 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go index 5403b821c1..7b257d351b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go @@ -3,4 +3,4 @@ package endpoints // goModuleVersion is the tagged release for this module -const goModuleVersion = "2.6.17" +const goModuleVersion = "2.6.18" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md index a8eec06b6a..ac92e88744 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.3.18 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.3.17 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go index 7c79484714..efd25fc382 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go @@ -3,4 +3,4 @@ package v4a // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.3.17" +const goModuleVersion = "1.3.18" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md index 56f89df8d5..d4bc00fdee 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.11.5 (2024-09-20) + +* No change notes available for this release. + # v1.11.4 (2024-08-15) * **Dependency Update**: Bump minimum Go version to 1.21. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go index 47d97ccfb9..823c5f1574 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go @@ -3,4 +3,4 @@ package acceptencoding // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.11.4" +const goModuleVersion = "1.11.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md index ce9a0392a8..027bd785b2 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.3.20 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.3.19 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go index ccf8a2e624..d14de9a82e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go @@ -3,4 +3,4 @@ package checksum // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.3.19" +const goModuleVersion = "1.3.20" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md index 1203b556e3..8e859f5b1f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.11.20 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.11.19 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go index 0259bbfb76..fa0269d34f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go @@ -3,4 +3,4 @@ package presignedurl // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.11.19" +const goModuleVersion = "1.11.20" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md index e69aad679e..e6d4667d62 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md @@ -1,3 +1,7 @@ +# v1.17.18 (2024-09-20) + +* **Dependency Update**: Updated to the latest SDK module versions + # v1.17.17 (2024-09-03) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go index 0f195c536b..ecbe3a5cef 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go @@ -3,4 +3,4 @@ package s3shared // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.17.17" +const goModuleVersion = "1.17.18" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/metadata_retriever.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/metadata_retriever.go index f52f2f11e9..7251588b00 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/metadata_retriever.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/metadata_retriever.go @@ -5,6 +5,7 @@ import ( awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -30,6 +31,8 @@ func (m *metadataRetriever) HandleDeserialize(ctx context.Context, in middleware ) { out, metadata, err = next.HandleDeserialize(ctx, in) + span, _ := tracing.GetSpan(ctx) + resp, ok := out.RawResponse.(*smithyhttp.Response) if !ok { // No raw response to wrap with. @@ -40,12 +43,14 @@ func (m *metadataRetriever) HandleDeserialize(ctx context.Context, in middleware if v := resp.Header.Get("X-Amz-Request-Id"); len(v) != 0 { // set reqID on metadata for successful responses. awsmiddleware.SetRequestIDMetadata(&metadata, v) + span.SetProperty("aws.request_id", v) } // look up host-id if v := resp.Header.Get("X-Amz-Id-2"); len(v) != 0 { // set reqID on metadata for successful responses. SetHostIDMetadata(&metadata, v) + span.SetProperty("aws.extended_request_id", v) } return out, metadata, err diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md index 9b34e8b5f7..e1f5090492 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md @@ -1,3 +1,24 @@ +# v1.63.2 (2024-09-25) + +* No change notes available for this release. + +# v1.63.1 (2024-09-23) + +* No change notes available for this release. + +# v1.63.0 (2024-09-20) + +* **Feature**: Add tracing and metrics support to service clients. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.62.0 (2024-09-18) + +* **Feature**: Added SSE-KMS support for directory buckets. + +# v1.61.3 (2024-09-17) + +* **Bug Fix**: **BREAKFIX**: Only generate AccountIDEndpointMode config for services that use it. This is a compiler break, but removes no actual functionality, as no services currently use the account ID in endpoint resolution. + # v1.61.2 (2024-09-04) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go index 97730b2cc6..95295c23b0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go @@ -4,6 +4,7 @@ package s3 import ( "context" + "errors" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/defaults" @@ -26,7 +27,9 @@ import ( smithyauth "github.com/aws/smithy-go/auth" smithydocument "github.com/aws/smithy-go/document" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net" "net/http" @@ -37,6 +40,133 @@ import ( const ServiceID = "S3" const ServiceAPIVersion = "2006-03-01" +type operationMetrics struct { + Duration metrics.Float64Histogram + SerializeDuration metrics.Float64Histogram + ResolveIdentityDuration metrics.Float64Histogram + ResolveEndpointDuration metrics.Float64Histogram + SignRequestDuration metrics.Float64Histogram + DeserializeDuration metrics.Float64Histogram +} + +func (m *operationMetrics) histogramFor(name string) metrics.Float64Histogram { + switch name { + case "client.call.duration": + return m.Duration + case "client.call.serialization_duration": + return m.SerializeDuration + case "client.call.resolve_identity_duration": + return m.ResolveIdentityDuration + case "client.call.resolve_endpoint_duration": + return m.ResolveEndpointDuration + case "client.call.signing_duration": + return m.SignRequestDuration + case "client.call.deserialization_duration": + return m.DeserializeDuration + default: + panic("unrecognized operation metric") + } +} + +func timeOperationMetric[T any]( + ctx context.Context, metric string, fn func() (T, error), + opts ...metrics.RecordMetricOption, +) (T, error) { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + start := time.Now() + v, err := fn() + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + return v, err +} + +func startMetricTimer(ctx context.Context, metric string, opts ...metrics.RecordMetricOption) func() { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + var ended bool + start := time.Now() + return func() { + if ended { + return + } + ended = true + + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + } +} + +func withOperationMetadata(ctx context.Context) metrics.RecordMetricOption { + return func(o *metrics.RecordMetricOptions) { + o.Properties.Set("rpc.service", middleware.GetServiceID(ctx)) + o.Properties.Set("rpc.method", middleware.GetOperationName(ctx)) + } +} + +type operationMetricsKey struct{} + +func withOperationMetrics(parent context.Context, mp metrics.MeterProvider) (context.Context, error) { + meter := mp.Meter("github.com/aws/aws-sdk-go-v2/service/s3") + om := &operationMetrics{} + + var err error + + om.Duration, err = operationMetricTimer(meter, "client.call.duration", + "Overall call duration (including retries and time to send or receive request and response body)") + if err != nil { + return nil, err + } + om.SerializeDuration, err = operationMetricTimer(meter, "client.call.serialization_duration", + "The time it takes to serialize a message body") + if err != nil { + return nil, err + } + om.ResolveIdentityDuration, err = operationMetricTimer(meter, "client.call.auth.resolve_identity_duration", + "The time taken to acquire an identity (AWS credentials, bearer token, etc) from an Identity Provider") + if err != nil { + return nil, err + } + om.ResolveEndpointDuration, err = operationMetricTimer(meter, "client.call.resolve_endpoint_duration", + "The time it takes to resolve an endpoint (endpoint resolver, not DNS) for the request") + if err != nil { + return nil, err + } + om.SignRequestDuration, err = operationMetricTimer(meter, "client.call.auth.signing_duration", + "The time it takes to sign a request") + if err != nil { + return nil, err + } + om.DeserializeDuration, err = operationMetricTimer(meter, "client.call.deserialization_duration", + "The time it takes to deserialize a message body") + if err != nil { + return nil, err + } + + return context.WithValue(parent, operationMetricsKey{}, om), nil +} + +func operationMetricTimer(m metrics.Meter, name, desc string) (metrics.Float64Histogram, error) { + return m.Float64Histogram(name, func(o *metrics.InstrumentOptions) { + o.UnitLabel = "s" + o.Description = desc + }) +} + +func getOperationMetrics(ctx context.Context) *operationMetrics { + return ctx.Value(operationMetricsKey{}).(*operationMetrics) +} + +func operationTracer(p tracing.TracerProvider) tracing.Tracer { + return p.Tracer("github.com/aws/aws-sdk-go-v2/service/s3") +} + // Client provides the API client to make operations call for Amazon Simple // Storage Service. type Client struct { @@ -66,6 +196,10 @@ func New(options Options, optFns ...func(*Options)) *Client { resolveHTTPSignerV4a(&options) + resolveTracerProvider(&options) + + resolveMeterProvider(&options) + resolveAuthSchemeResolver(&options) for _, fn := range optFns { @@ -102,8 +236,15 @@ func (c *Client) Options() Options { return c.options.Copy() } -func (c *Client) invokeOperation(ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error) (result interface{}, metadata middleware.Metadata, err error) { +func (c *Client) invokeOperation( + ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error, +) ( + result interface{}, metadata middleware.Metadata, err error, +) { ctx = middleware.ClearStackValues(ctx) + ctx = middleware.WithServiceID(ctx, ServiceID) + ctx = middleware.WithOperationName(ctx, opID) + stack := middleware.NewStack(opID, smithyhttp.NewStackRequest) options := c.options.Copy() @@ -133,15 +274,54 @@ func (c *Client) invokeOperation(ctx context.Context, opID string, params interf } } - handler := middleware.DecorateHandler(smithyhttp.NewClientHandler(options.HTTPClient), stack) - result, metadata, err = handler.Handle(ctx, params) + ctx, err = withOperationMetrics(ctx, options.MeterProvider) if err != nil { + return nil, metadata, err + } + + tracer := operationTracer(options.TracerProvider) + spanName := fmt.Sprintf("%s.%s", ServiceID, opID) + + ctx = tracing.WithOperationTracer(ctx, tracer) + + ctx, span := tracer.StartSpan(ctx, spanName, func(o *tracing.SpanOptions) { + o.Kind = tracing.SpanKindClient + o.Properties.Set("rpc.system", "aws-api") + o.Properties.Set("rpc.method", opID) + o.Properties.Set("rpc.service", ServiceID) + }) + endTimer := startMetricTimer(ctx, "client.call.duration") + defer endTimer() + defer span.End() + + handler := smithyhttp.NewClientHandler(options.HTTPClient) + decorated := middleware.DecorateHandler(handler, stack) + result, metadata, err = decorated.Handle(ctx, params) + if err != nil { + span.SetProperty("exception.type", fmt.Sprintf("%T", err)) + span.SetProperty("exception.message", err.Error()) + + var aerr smithy.APIError + if errors.As(err, &aerr) { + span.SetProperty("api.error_code", aerr.ErrorCode()) + span.SetProperty("api.error_message", aerr.ErrorMessage()) + span.SetProperty("api.error_fault", aerr.ErrorFault().String()) + } + err = &smithy.OperationError{ ServiceID: ServiceID, OperationName: opID, Err: err, } } + + span.SetProperty("error", err != nil) + if err == nil { + span.SetStatus(tracing.SpanStatusOK) + } else { + span.SetStatus(tracing.SpanStatusError) + } + return result, metadata, err } @@ -179,7 +359,7 @@ func addProtocolFinalizerMiddlewares(stack *middleware.Stack, options Options, o if err := stack.Finalize.Insert(&resolveEndpointV2Middleware{options: options}, "GetIdentity", middleware.After); err != nil { return fmt.Errorf("add ResolveEndpointV2: %v", err) } - if err := stack.Finalize.Insert(&signRequestMiddleware{}, "ResolveEndpointV2", middleware.After); err != nil { + if err := stack.Finalize.Insert(&signRequestMiddleware{options: options}, "ResolveEndpointV2", middleware.After); err != nil { return fmt.Errorf("add Signing: %w", err) } return nil @@ -267,16 +447,15 @@ func setResolvedDefaultsMode(o *Options) { // NewFromConfig returns a new client from the provided config. func NewFromConfig(cfg aws.Config, optFns ...func(*Options)) *Client { opts := Options{ - Region: cfg.Region, - DefaultsMode: cfg.DefaultsMode, - RuntimeEnvironment: cfg.RuntimeEnvironment, - HTTPClient: cfg.HTTPClient, - Credentials: cfg.Credentials, - APIOptions: cfg.APIOptions, - Logger: cfg.Logger, - ClientLogMode: cfg.ClientLogMode, - AppID: cfg.AppID, - AccountIDEndpointMode: cfg.AccountIDEndpointMode, + Region: cfg.Region, + DefaultsMode: cfg.DefaultsMode, + RuntimeEnvironment: cfg.RuntimeEnvironment, + HTTPClient: cfg.HTTPClient, + Credentials: cfg.Credentials, + APIOptions: cfg.APIOptions, + Logger: cfg.Logger, + ClientLogMode: cfg.ClientLogMode, + AppID: cfg.AppID, } resolveAWSRetryerProvider(cfg, &opts) resolveAWSRetryMaxAttempts(cfg, &opts) @@ -468,6 +647,30 @@ func addRawResponseToMetadata(stack *middleware.Stack) error { func addRecordResponseTiming(stack *middleware.Stack) error { return stack.Deserialize.Add(&awsmiddleware.RecordResponseTiming{}, middleware.After) } + +func addSpanRetryLoop(stack *middleware.Stack, options Options) error { + return stack.Finalize.Insert(&spanRetryLoop{options: options}, "Retry", middleware.Before) +} + +type spanRetryLoop struct { + options Options +} + +func (*spanRetryLoop) ID() string { + return "spanRetryLoop" +} + +func (m *spanRetryLoop) HandleFinalize( + ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, +) ( + middleware.FinalizeOutput, middleware.Metadata, error, +) { + tracer := operationTracer(m.options.TracerProvider) + ctx, span := tracer.StartSpan(ctx, "RetryLoop") + defer span.End() + + return next.HandleFinalize(ctx, in) +} func addStreamingEventsPayload(stack *middleware.Stack) error { return stack.Finalize.Add(&v4.StreamingEventsPayload{}, middleware.Before) } @@ -511,6 +714,7 @@ func addIsPaginatorUserAgent(o *Options) { func addRetry(stack *middleware.Stack, o Options) error { attempt := retry.NewAttemptMiddleware(o.Retryer, smithyhttp.RequestCloner, func(m *retry.Attempt) { m.LogAttempts = o.ClientLogMode.IsRetries() + m.OperationMeter = o.MeterProvider.Meter("github.com/aws/aws-sdk-go-v2/service/s3") }) if err := stack.Finalize.Insert(attempt, "Signing", middleware.Before); err != nil { return err @@ -624,25 +828,6 @@ func initializeTimeOffsetResolver(c *Client) { c.timeOffset = new(atomic.Int64) } -func checkAccountID(identity smithyauth.Identity, mode aws.AccountIDEndpointMode) error { - switch mode { - case aws.AccountIDEndpointModeUnset: - case aws.AccountIDEndpointModePreferred: - case aws.AccountIDEndpointModeDisabled: - case aws.AccountIDEndpointModeRequired: - if ca, ok := identity.(*internalauthsmithy.CredentialsAdapter); !ok { - return fmt.Errorf("accountID is required but not set") - } else if ca.Credentials.AccountID == "" { - return fmt.Errorf("accountID is required but not set") - } - // default check in case invalid mode is configured through request config - default: - return fmt.Errorf("invalid accountID endpoint mode %s, must be preferred/required/disabled", mode) - } - - return nil -} - func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { ua, err := getOrAddRequestUserAgent(stack) if err != nil { @@ -658,6 +843,18 @@ func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { return nil } +func resolveTracerProvider(options *Options) { + if options.TracerProvider == nil { + options.TracerProvider = &tracing.NopTracerProvider{} + } +} + +func resolveMeterProvider(options *Options) { + if options.MeterProvider == nil { + options.MeterProvider = metrics.NopMeterProvider{} + } +} + func addMetadataRetrieverMiddleware(stack *middleware.Stack) error { return s3shared.AddMetadataRetrieverMiddleware(stack) } @@ -986,3 +1183,89 @@ func addDisableHTTPSMiddleware(stack *middleware.Stack, o Options) error { DisableHTTPS: o.EndpointOptions.DisableHTTPS, }, "ResolveEndpointV2", middleware.After) } + +type spanInitializeStart struct { +} + +func (*spanInitializeStart) ID() string { + return "spanInitializeStart" +} + +func (m *spanInitializeStart) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "Initialize") + + return next.HandleInitialize(ctx, in) +} + +type spanInitializeEnd struct { +} + +func (*spanInitializeEnd) ID() string { + return "spanInitializeEnd" +} + +func (m *spanInitializeEnd) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleInitialize(ctx, in) +} + +type spanBuildRequestStart struct { +} + +func (*spanBuildRequestStart) ID() string { + return "spanBuildRequestStart" +} + +func (m *spanBuildRequestStart) HandleSerialize( + ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler, +) ( + middleware.SerializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "BuildRequest") + + return next.HandleSerialize(ctx, in) +} + +type spanBuildRequestEnd struct { +} + +func (*spanBuildRequestEnd) ID() string { + return "spanBuildRequestEnd" +} + +func (m *spanBuildRequestEnd) HandleBuild( + ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler, +) ( + middleware.BuildOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleBuild(ctx, in) +} + +func addSpanInitializeStart(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeStart{}, middleware.Before) +} + +func addSpanInitializeEnd(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeEnd{}, middleware.After) +} + +func addSpanBuildRequestStart(stack *middleware.Stack) error { + return stack.Serialize.Add(&spanBuildRequestStart{}, middleware.Before) +} + +func addSpanBuildRequestEnd(stack *middleware.Stack) error { + return stack.Build.Add(&spanBuildRequestEnd{}, middleware.After) +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go index 659ab8a716..ec55f51c77 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go @@ -226,6 +226,9 @@ func (c *Client) addOperationAbortMultipartUploadMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -283,6 +286,18 @@ func (c *Client) addOperationAbortMultipartUploadMiddlewares(stack *middleware.S if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go index e7039d2b11..67397d8b1d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go @@ -59,25 +59,30 @@ import ( // Guide. // // Permissions -// // - General purpose bucket permissions - For information about permissions // required to use the multipart upload API, see [Multipart Upload and Permissions]in the Amazon S3 User Guide. // -// - Directory bucket permissions - To grant access to this API operation on a -// directory bucket, we recommend that you use the [CreateSession]CreateSession API operation -// for session-based authorization. Specifically, you grant the -// s3express:CreateSession permission to the directory bucket in a bucket policy -// or an IAM identity-based policy. Then, you make the CreateSession API call on -// the bucket to obtain a session token. With the session token in your request -// header, you can make API requests to this operation. After the session token -// expires, you make another CreateSession API call to generate a new session -// token for use. Amazon Web Services CLI or SDKs create session and refresh the -// session token automatically to avoid service interruptions when a session -// expires. For more information about authorization, see [CreateSession]CreateSession . +// If you provide an [additional checksum value]in your MultipartUpload requests and the object is encrypted // -// - If you provide an [additional checksum value]in your MultipartUpload requests and the object is -// encrypted with Key Management Service, you must have permission to use the -// kms:Decrypt action for the CompleteMultipartUpload request to succeed. +// with Key Management Service, you must have permission to use the kms:Decrypt +// action for the CompleteMultipartUpload request to succeed. +// +// - Directory bucket permissions - To grant access to this API operation on a +// directory bucket, we recommend that you use the [CreateSession]CreateSession API operation +// for session-based authorization. Specifically, you grant the +// s3express:CreateSession permission to the directory bucket in a bucket policy +// or an IAM identity-based policy. Then, you make the CreateSession API call on +// the bucket to obtain a session token. With the session token in your request +// header, you can make API requests to this operation. After the session token +// expires, you make another CreateSession API call to generate a new session +// token for use. Amazon Web Services CLI or SDKs create session and refresh the +// session token automatically to avoid service interruptions when a session +// expires. For more information about authorization, see [CreateSession]CreateSession . +// +// If the object is encrypted with SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. // // Special errors // @@ -133,10 +138,11 @@ import ( // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html // [additional checksum value]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html // [ListMultipartUploads]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html -// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html // [Multipart Upload and Permissions]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html // [CreateMultipartUpload]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html +// +// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html func (c *Client) CompleteMultipartUpload(ctx context.Context, params *CompleteMultipartUploadInput, optFns ...func(*Options)) (*CompleteMultipartUploadOutput, error) { if params == nil { params = &CompleteMultipartUploadInput{} @@ -317,8 +323,6 @@ type CompleteMultipartUploadOutput struct { // Indicates whether the multipart upload uses an S3 Bucket Key for server-side // encryption with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // The base64-encoded, 32-bit CRC32 checksum of the object. This will only be @@ -394,17 +398,11 @@ type CompleteMultipartUploadOutput struct { // This functionality is not supported for directory buckets. RequestCharged types.RequestCharged - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when storing this object in Amazon S3 // (for example, AES256 , aws:kms ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. ServerSideEncryption types.ServerSideEncryption // Version ID of the newly created object, in case the bucket has versioning @@ -462,6 +460,9 @@ func (c *Client) addOperationCompleteMultipartUploadMiddlewares(stack *middlewar if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -522,6 +523,18 @@ func (c *Client) addOperationCompleteMultipartUploadMiddlewares(stack *middlewar if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go index 5403315af1..81f3a5260d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go @@ -88,6 +88,11 @@ import ( // the object to the destination. The s3express:SessionMode condition key can't // be set to ReadOnly on the copy destination bucket. // +// If the object is encrypted with SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. +// // For example policies, see [Example bucket policies for S3 Express One Zone]and [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone]in the Amazon S3 User Guide. // // Response and special errors When the request is an HTTP 1.1 request, the @@ -309,10 +314,14 @@ type CopyObjectInput struct { // // For more information, see [Amazon S3 Bucket Keys] in the Amazon S3 User Guide. // - // This functionality is not supported when the destination bucket is a directory - // bucket. + // Directory buckets - S3 Bucket Keys aren't supported, when you copy SSE-KMS + // encrypted objects from general purpose buckets to directory buckets, from + // directory buckets to general purpose buckets, or between directory buckets, + // through [CopyObject]. In this case, Amazon S3 makes a call to KMS every time a copy request + // is made for a KMS-encrypted object. // // [Amazon S3 Bucket Keys]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html BucketKeyEnabled *bool // Specifies the caching behavior along the request/reply chain. @@ -554,31 +563,46 @@ type CopyObjectInput struct { // bucket. SSECustomerKeyMD5 *string - // Specifies the Amazon Web Services KMS Encryption Context to use for object - // encryption. The value of this header is a base64-encoded UTF-8 string holding - // JSON with the encryption context key-value pairs. This value must be explicitly - // added to specify encryption context for CopyObject requests. + // Specifies the Amazon Web Services KMS Encryption Context as an additional + // encryption context to use for the destination object encryption. The value of + // this header is a base64-encoded UTF-8 string holding JSON with the encryption + // context key-value pairs. // - // This functionality is not supported when the destination bucket is a directory - // bucket. + // General purpose buckets - This value must be explicitly added to specify + // encryption context for CopyObject requests if you want an additional encryption + // context for your destination object. The additional encryption context of the + // source object won't be copied to the destination object. For more information, + // see [Encryption context]in the Amazon S3 User Guide. + // + // Directory buckets - You can optionally provide an explicit encryption context + // value. The value must match the default encryption context - the bucket Amazon + // Resource Name (ARN). An additional encryption context value is not supported. + // + // [Encryption context]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context SSEKMSEncryptionContext *string - // Specifies the KMS ID (Key ID, Key ARN, or Key Alias) to use for object + // Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object // encryption. All GET and PUT requests for an object protected by KMS will fail if // they're not made via SSL or using SigV4. For information about configuring any // of the officially supported Amazon Web Services SDKs and Amazon Web Services // CLI, see [Specifying the Signature Version in Request Authentication]in the Amazon S3 User Guide. // - // This functionality is not supported when the destination bucket is a directory - // bucket. + // Directory buckets - If you specify x-amz-server-side-encryption with aws:kms , + // you must specify the x-amz-server-side-encryption-aws-kms-key-id header with + // the ID (Key ID or Key ARN) of the KMS symmetric encryption customer managed key + // to use. Otherwise, you get an HTTP 400 Bad Request error. Only use the key ID + // or key ARN. The key alias format of the KMS key isn't supported. Your SSE-KMS + // configuration can only support 1 [customer managed key]per directory bucket for the lifetime of the + // bucket. [Amazon Web Services managed key]( aws/s3 ) isn't supported. // + // [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk // [Specifying the Signature Version in Request Authentication]: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version + // [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk SSEKMSKeyId *string - // The server-side encryption algorithm used when storing this object in Amazon S3 - // (for example, AES256 , aws:kms , aws:kms:dsse ). Unrecognized or unsupported - // values won’t write a destination object and will receive a 400 Bad Request - // response. + // The server-side encryption algorithm used when storing this object in Amazon + // S3. Unrecognized or unsupported values won’t write a destination object and will + // receive a 400 Bad Request response. // // Amazon S3 automatically encrypts all new objects that are copied to an S3 // bucket. When copying an object, if you don't specify encryption information in @@ -586,27 +610,58 @@ type CopyObjectInput struct { // default encryption configuration of the destination bucket. By default, all // buckets have a base level of encryption configuration that uses server-side // encryption with Amazon S3 managed keys (SSE-S3). If the destination bucket has a - // default encryption configuration that uses server-side encryption with Key - // Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with - // Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with - // customer-provided encryption keys (SSE-C), Amazon S3 uses the corresponding KMS - // key, or a customer-provided key to encrypt the target object copy. - // - // When you perform a CopyObject operation, if you want to use a different type of - // encryption setting for the target object, you can specify appropriate - // encryption-related headers to encrypt the target object with an Amazon S3 - // managed key, a KMS key, or a customer-provided key. If the encryption setting in - // your request is different from the default encryption configuration of the - // destination bucket, the encryption setting in your request takes precedence. + // different default encryption configuration, Amazon S3 uses the corresponding + // encryption key to encrypt the target object copy. // // With server-side encryption, Amazon S3 encrypts your data as it writes your // data to disks in its data centers and decrypts the data when you access it. For // more information about server-side encryption, see [Using Server-Side Encryption]in the Amazon S3 User Guide. // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. + // General purpose buckets + // + // - For general purpose buckets, there are the following supported options for + // server-side encryption: server-side encryption with Key Management Service (KMS) + // keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS + // keys (DSSE-KMS), and server-side encryption with customer-provided encryption + // keys (SSE-C). Amazon S3 uses the corresponding KMS key, or a customer-provided + // key to encrypt the target object copy. + // + // - When you perform a CopyObject operation, if you want to use a different type + // of encryption setting for the target object, you can specify appropriate + // encryption-related headers to encrypt the target object with an Amazon S3 + // managed key, a KMS key, or a customer-provided key. If the encryption setting in + // your request is different from the default encryption configuration of the + // destination bucket, the encryption setting in your request takes precedence. + // + // Directory buckets + // + // - For directory buckets, there are only two supported options for server-side + // encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) ( + // AES256 ) and server-side encryption with KMS keys (SSE-KMS) ( aws:kms ). We + // recommend that the bucket's default encryption uses the desired encryption + // configuration and you don't override the bucket default encryption in your + // CreateSession requests or PUT object requests. Then, new objects are + // automatically encrypted with the desired encryption settings. For more + // information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. For more information about the + // encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads]. + // + // - To encrypt new object copies to a directory bucket with SSE-KMS, we + // recommend you specify SSE-KMS as the directory bucket's default encryption + // configuration with a KMS key (specifically, a [customer managed key]). [Amazon Web Services managed key]( aws/s3 ) isn't supported. + // Your SSE-KMS configuration can only support 1 [customer managed key]per directory bucket for the + // lifetime of the bucket. After you specify a customer managed key for SSE-KMS, + // you can't override the customer managed key for the bucket's SSE-KMS + // configuration. Then, when you perform a CopyObject operation and want to + // specify server-side encryption settings for new object copies with SSE-KMS in + // the encryption-related request headers, you must ensure the encryption key is + // the same customer managed key that you specified for the directory bucket's + // default encryption configuration. // // [Using Server-Side Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html + // [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html + // [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk + // [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html + // [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk ServerSideEncryption types.ServerSideEncryption // If the x-amz-storage-class header is not used, the copied object will be stored @@ -752,8 +807,6 @@ type CopyObjectOutput struct { // Indicates whether the copied object uses an S3 Bucket Key for server-side // encryption with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // Container for all response elements. @@ -793,21 +846,13 @@ type CopyObjectOutput struct { // If present, indicates the Amazon Web Services KMS Encryption Context to use for // object encryption. The value of this header is a base64-encoded UTF-8 string // holding JSON with the encryption context key-value pairs. - // - // This functionality is not supported for directory buckets. SSEKMSEncryptionContext *string - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon // S3 (for example, AES256 , aws:kms , aws:kms:dsse ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. ServerSideEncryption types.ServerSideEncryption // Version ID of the newly created copy. @@ -864,6 +909,9 @@ func (c *Client) addOperationCopyObjectMiddlewares(stack *middleware.Stack, opti if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -924,6 +972,18 @@ func (c *Client) addOperationCopyObjectMiddlewares(stack *middleware.Stack, opti if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go index 6334c1cfcf..0dc077111c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go @@ -295,6 +295,9 @@ func (c *Client) addOperationCreateBucketMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -352,6 +355,18 @@ func (c *Client) addOperationCreateBucketMiddlewares(stack *middleware.Stack, op if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go index 4af112049d..de4e367b16 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go @@ -147,8 +147,44 @@ import ( // // encryption keys (SSE-C), see [Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)]in the Amazon S3 User Guide. // -// - Directory buckets -For directory buckets, only server-side encryption with -// Amazon S3 managed keys (SSE-S3) ( AES256 ) is supported. +// - Directory buckets - For directory buckets, there are only two supported +// options for server-side encryption: server-side encryption with Amazon S3 +// managed keys (SSE-S3) ( AES256 ) and server-side encryption with KMS keys +// (SSE-KMS) ( aws:kms ). We recommend that the bucket's default encryption uses +// the desired encryption configuration and you don't override the bucket default +// encryption in your CreateSession requests or PUT object requests. Then, new +// objects are automatically encrypted with the desired encryption settings. For +// more information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. For more information about +// the encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads]. +// +// In the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]) using the REST API, the +// +// encryption request headers must match the encryption settings that are specified +// in the CreateSession request. You can't override the values of the encryption +// settings ( x-amz-server-side-encryption , +// x-amz-server-side-encryption-aws-kms-key-id , +// x-amz-server-side-encryption-context , and +// x-amz-server-side-encryption-bucket-key-enabled ) that are specified in the +// CreateSession request. You don't need to explicitly specify these encryption +// settings values in Zonal endpoint API calls, and Amazon S3 will use the +// encryption settings values from the CreateSession request to protect new +// objects in the directory bucket. +// +// When you use the CLI or the Amazon Web Services SDKs, for CreateSession , the +// +// session token refreshes automatically to avoid service interruptions when a +// session expires. The CLI or the Amazon Web Services SDKs use the bucket's +// default encryption configuration for the CreateSession request. It's not +// supported to override the encryption settings values in the CreateSession +// request. So in the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]), the encryption +// request headers must match the default encryption configuration of the directory +// bucket. +// +// For directory buckets, when you perform a CreateMultipartUpload operation and an +// +// UploadPartCopy operation, the request headers you provide in the +// CreateMultipartUpload request must match the default encryption configuration +// of the destination bucket. // // HTTP Host header syntax Directory buckets - The HTTP Host header syntax is // Bucket_name.s3express-az_id.region.amazonaws.com . @@ -171,6 +207,7 @@ import ( // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html // [Specifying the Signature Version in Request Authentication]: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version // [Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Configuration]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config +// [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html // [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [Multipart upload API and permissions]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html @@ -181,7 +218,9 @@ import ( // [Protecting data using server-side encryption with Amazon Web Services KMS]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html // [ListMultipartUploads]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html // +// [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html // [Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html +// [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html func (c *Client) CreateMultipartUpload(ctx context.Context, params *CreateMultipartUploadInput, optFns ...func(*Options)) (*CreateMultipartUploadOutput, error) { if params == nil { params = &CreateMultipartUploadInput{} @@ -263,13 +302,22 @@ type CreateMultipartUploadInput struct { // Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption // with server-side encryption using Key Management Service (KMS) keys (SSE-KMS). - // Setting this header to true causes Amazon S3 to use an S3 Bucket Key for object - // encryption with SSE-KMS. // - // Specifying this header with an object action doesn’t affect bucket-level - // settings for S3 Bucket Key. + // General purpose buckets - Setting this header to true causes Amazon S3 to use + // an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this + // header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key. // - // This functionality is not supported for directory buckets. + // Directory buckets - S3 Bucket Keys are always enabled for GET and PUT + // operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't + // supported, when you copy SSE-KMS encrypted objects from general purpose buckets + // to directory buckets, from directory buckets to general purpose buckets, or + // between directory buckets, through [CopyObject], [UploadPartCopy], [the Copy operation in Batch Operations], or [the import jobs]. In this case, Amazon S3 makes a + // call to KMS every time a copy request is made for a KMS-encrypted object. + // + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html + // [the import jobs]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job + // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html + // [the Copy operation in Batch Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops BucketKeyEnabled *bool // Specifies caching behavior along the request/reply chain. @@ -581,23 +629,76 @@ type CreateMultipartUploadInput struct { SSECustomerKeyMD5 *string // Specifies the Amazon Web Services KMS Encryption Context to use for object - // encryption. The value of this header is a base64-encoded UTF-8 string holding - // JSON with the encryption context key-value pairs. + // encryption. The value of this header is a Base64-encoded string of a UTF-8 + // encoded JSON, which contains the encryption context as key-value pairs. // - // This functionality is not supported for directory buckets. + // Directory buckets - You can optionally provide an explicit encryption context + // value. The value must match the default encryption context - the bucket Amazon + // Resource Name (ARN). An additional encryption context value is not supported. SSEKMSEncryptionContext *string - // Specifies the ID (Key ID, Key ARN, or Key Alias) of the symmetric encryption - // customer managed key to use for object encryption. + // Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object + // encryption. If the KMS key doesn't exist in the same account that's issuing the + // command, you must use the full Key ARN not the Key ID. // - // This functionality is not supported for directory buckets. + // General purpose buckets - If you specify x-amz-server-side-encryption with + // aws:kms or aws:kms:dsse , this header specifies the ID (Key ID, Key ARN, or Key + // Alias) of the KMS key to use. If you specify + // x-amz-server-side-encryption:aws:kms or + // x-amz-server-side-encryption:aws:kms:dsse , but do not provide + // x-amz-server-side-encryption-aws-kms-key-id , Amazon S3 uses the Amazon Web + // Services managed key ( aws/s3 ) to protect the data. + // + // Directory buckets - If you specify x-amz-server-side-encryption with aws:kms , + // you must specify the x-amz-server-side-encryption-aws-kms-key-id header with + // the ID (Key ID or Key ARN) of the KMS symmetric encryption customer managed key + // to use. Otherwise, you get an HTTP 400 Bad Request error. Only use the key ID + // or key ARN. The key alias format of the KMS key isn't supported. Your SSE-KMS + // configuration can only support 1 [customer managed key]per directory bucket for the lifetime of the + // bucket. [Amazon Web Services managed key]( aws/s3 ) isn't supported. + // + // [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk + // [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon // S3 (for example, AES256 , aws:kms ). // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. + // - Directory buckets - For directory buckets, there are only two supported + // options for server-side encryption: server-side encryption with Amazon S3 + // managed keys (SSE-S3) ( AES256 ) and server-side encryption with KMS keys + // (SSE-KMS) ( aws:kms ). We recommend that the bucket's default encryption uses + // the desired encryption configuration and you don't override the bucket default + // encryption in your CreateSession requests or PUT object requests. Then, new + // objects are automatically encrypted with the desired encryption settings. For + // more information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. For more information about + // the encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads]. + // + // In the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]) using the REST API, the + // encryption request headers must match the encryption settings that are specified + // in the CreateSession request. You can't override the values of the encryption + // settings ( x-amz-server-side-encryption , + // x-amz-server-side-encryption-aws-kms-key-id , + // x-amz-server-side-encryption-context , and + // x-amz-server-side-encryption-bucket-key-enabled ) that are specified in the + // CreateSession request. You don't need to explicitly specify these encryption + // settings values in Zonal endpoint API calls, and Amazon S3 will use the + // encryption settings values from the CreateSession request to protect new + // objects in the directory bucket. + // + // When you use the CLI or the Amazon Web Services SDKs, for CreateSession , the + // session token refreshes automatically to avoid service interruptions when a + // session expires. The CLI or the Amazon Web Services SDKs use the bucket's + // default encryption configuration for the CreateSession request. It's not + // supported to override the encryption settings values in the CreateSession + // request. So in the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]), the encryption + // request headers must match the default encryption configuration of the directory + // bucket. + // + // [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html + // [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html + // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html ServerSideEncryption types.ServerSideEncryption // By default, Amazon S3 uses the STANDARD Storage Class to store newly created @@ -666,8 +767,6 @@ type CreateMultipartUploadOutput struct { // Indicates whether the multipart upload uses an S3 Bucket Key for server-side // encryption with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // The algorithm that was used to create a checksum of the object. @@ -697,23 +796,15 @@ type CreateMultipartUploadOutput struct { SSECustomerKeyMD5 *string // If present, indicates the Amazon Web Services KMS Encryption Context to use for - // object encryption. The value of this header is a base64-encoded UTF-8 string - // holding JSON with the encryption context key-value pairs. - // - // This functionality is not supported for directory buckets. + // object encryption. The value of this header is a Base64-encoded string of a + // UTF-8 encoded JSON, which contains the encryption context as key-value pairs. SSEKMSEncryptionContext *string - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon // S3 (for example, AES256 , aws:kms ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. ServerSideEncryption types.ServerSideEncryption // ID for the initiated multipart upload. @@ -768,6 +859,9 @@ func (c *Client) addOperationCreateMultipartUploadMiddlewares(stack *middleware. if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -828,6 +922,18 @@ func (c *Client) addOperationCreateMultipartUploadMiddlewares(stack *middleware. if err = addSetCreateMPUChecksumAlgorithm(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go index b8c1736b40..557d759e4b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go @@ -15,9 +15,10 @@ import ( ) // Creates a session that establishes temporary security credentials to support -// fast authentication and authorization for the Zonal endpoint APIs on directory -// buckets. For more information about Zonal endpoint APIs that include the -// Availability Zone in the request endpoint, see [S3 Express One Zone APIs]in the Amazon S3 User Guide. +// fast authentication and authorization for the Zonal endpoint API operations on +// directory buckets. For more information about Zonal endpoint API operations that +// include the Availability Zone in the request endpoint, see [S3 Express One Zone APIs]in the Amazon S3 +// User Guide. // // To make Zonal endpoint API requests on a directory bucket, use the CreateSession // API operation. Specifically, you grant s3express:CreateSession permission to a @@ -25,12 +26,12 @@ import ( // credentials to make the CreateSession API request on the bucket, which returns // temporary security credentials that include the access key ID, secret access // key, session token, and expiration. These credentials have associated -// permissions to access the Zonal endpoint APIs. After the session is created, you -// don’t need to use other policies to grant permissions to each Zonal endpoint API -// individually. Instead, in your Zonal endpoint API requests, you sign your -// requests by applying the temporary security credentials of the session to the -// request headers and following the SigV4 protocol for authentication. You also -// apply the session token to the x-amz-s3session-token request header for +// permissions to access the Zonal endpoint API operations. After the session is +// created, you don’t need to use other policies to grant permissions to each Zonal +// endpoint API individually. Instead, in your Zonal endpoint API requests, you +// sign your requests by applying the temporary security credentials of the session +// to the request headers and following the SigV4 protocol for authentication. You +// also apply the session token to the x-amz-s3session-token request header for // authorization. Temporary security credentials are scoped to the bucket and // expire after 5 minutes. After the expiration time, any calls that you make with // those credentials will fail. You must use IAM credentials again to make a @@ -49,17 +50,17 @@ import ( // https://bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests // are not supported. For more information, see [Regional and Zonal endpoints]in the Amazon S3 User Guide. // -// - CopyObject API operation - Unlike other Zonal endpoint APIs, the CopyObject -// API operation doesn't use the temporary security credentials returned from the -// CreateSession API operation for authentication and authorization. For -// information about authentication and authorization of the CopyObject API -// operation on directory buckets, see [CopyObject]. +// - CopyObject API operation - Unlike other Zonal endpoint API operations, the +// CopyObject API operation doesn't use the temporary security credentials +// returned from the CreateSession API operation for authentication and +// authorization. For information about authentication and authorization of the +// CopyObject API operation on directory buckets, see [CopyObject]. // -// - HeadBucket API operation - Unlike other Zonal endpoint APIs, the HeadBucket -// API operation doesn't use the temporary security credentials returned from the -// CreateSession API operation for authentication and authorization. For -// information about authentication and authorization of the HeadBucket API -// operation on directory buckets, see [HeadBucket]. +// - HeadBucket API operation - Unlike other Zonal endpoint API operations, the +// HeadBucket API operation doesn't use the temporary security credentials +// returned from the CreateSession API operation for authentication and +// authorization. For information about authentication and authorization of the +// HeadBucket API operation on directory buckets, see [HeadBucket]. // // Permissions To obtain temporary security credentials, you must create a bucket // policy or an IAM identity-based policy that grants s3express:CreateSession @@ -69,20 +70,72 @@ import ( // x-amz-create-session-mode . For example policies, see [Example bucket policies for S3 Express One Zone] and [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone] in the Amazon S3 // User Guide. // -// To grant cross-account access to Zonal endpoint APIs, the bucket policy should -// also grant both accounts the s3express:CreateSession permission. +// To grant cross-account access to Zonal endpoint API operations, the bucket +// policy should also grant both accounts the s3express:CreateSession permission. +// +// If you want to encrypt objects with SSE-KMS, you must also have the +// kms:GenerateDataKey and the kms:Decrypt permissions in IAM identity-based +// policies and KMS key policies for the target KMS key. +// +// Encryption For directory buckets, there are only two supported options for +// server-side encryption: server-side encryption with Amazon S3 managed keys +// (SSE-S3) ( AES256 ) and server-side encryption with KMS keys (SSE-KMS) ( aws:kms +// ). We recommend that the bucket's default encryption uses the desired encryption +// configuration and you don't override the bucket default encryption in your +// CreateSession requests or PUT object requests. Then, new objects are +// automatically encrypted with the desired encryption settings. For more +// information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. For more information about the +// encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads]. +// +// For [Zonal endpoint (object-level) API operations] except [CopyObject] and [UploadPartCopy], you authenticate and authorize requests through [CreateSession] for low +// latency. To encrypt new objects in a directory bucket with SSE-KMS, you must +// specify SSE-KMS as the directory bucket's default encryption configuration with +// a KMS key (specifically, a [customer managed key]). Then, when a session is created for Zonal +// endpoint API operations, new objects are automatically encrypted and decrypted +// with SSE-KMS and S3 Bucket Keys during the session. +// +// Only 1 [customer managed key] is supported per directory bucket for the lifetime of the bucket. [Amazon Web Services managed key] ( +// aws/s3 ) isn't supported. After you specify SSE-KMS as your bucket's default +// encryption configuration with a customer managed key, you can't change the +// customer managed key for the bucket's SSE-KMS configuration. +// +// In the Zonal endpoint API calls (except [CopyObject] and [UploadPartCopy]) using the REST API, you can't +// override the values of the encryption settings ( x-amz-server-side-encryption , +// x-amz-server-side-encryption-aws-kms-key-id , +// x-amz-server-side-encryption-context , and +// x-amz-server-side-encryption-bucket-key-enabled ) from the CreateSession +// request. You don't need to explicitly specify these encryption settings values +// in Zonal endpoint API calls, and Amazon S3 will use the encryption settings +// values from the CreateSession request to protect new objects in the directory +// bucket. +// +// When you use the CLI or the Amazon Web Services SDKs, for CreateSession , the +// session token refreshes automatically to avoid service interruptions when a +// session expires. The CLI or the Amazon Web Services SDKs use the bucket's +// default encryption configuration for the CreateSession request. It's not +// supported to override the encryption settings values in the CreateSession +// request. Also, in the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]), it's not +// supported to override the values of the encryption settings from the +// CreateSession request. // // HTTP Host header syntax Directory buckets - The HTTP Host header syntax is // Bucket_name.s3express-az_id.region.amazonaws.com . // -// [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html +// [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html // [Performance guidelines and design patterns]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-optimizing-performance-guidelines-design-patterns.html#s3-express-optimizing-performance-session-authentication -// [Example bucket policies for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html -// [x-amz-create-session-mode]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestParameters +// [CreateSession]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html // [S3 Express One Zone APIs]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-APIs.html // [HeadBucket]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html +// [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html +// [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk +// [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html +// [Example bucket policies for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html +// [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk +// [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html +// [x-amz-create-session-mode]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestParameters +// [Zonal endpoint (object-level) API operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-differences.html#s3-express-differences-api-operations func (c *Client) CreateSession(ctx context.Context, params *CreateSessionInput, optFns ...func(*Options)) (*CreateSessionOutput, error) { if params == nil { params = &CreateSessionInput{} @@ -105,12 +158,73 @@ type CreateSessionInput struct { // This member is required. Bucket *string + // Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption + // with server-side encryption using KMS keys (SSE-KMS). + // + // S3 Bucket Keys are always enabled for GET and PUT operations in a directory + // bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy + // SSE-KMS encrypted objects from general purpose buckets to directory buckets, + // from directory buckets to general purpose buckets, or between directory buckets, + // through [CopyObject], [UploadPartCopy], [the Copy operation in Batch Operations], or [the import jobs]. In this case, Amazon S3 makes a call to KMS every time a + // copy request is made for a KMS-encrypted object. + // + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html + // [the import jobs]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job + // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html + // [the Copy operation in Batch Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops + BucketKeyEnabled *bool + + // Specifies the Amazon Web Services KMS Encryption Context as an additional + // encryption context to use for object encryption. The value of this header is a + // Base64-encoded string of a UTF-8 encoded JSON, which contains the encryption + // context as key-value pairs. This value is stored as object metadata and + // automatically gets passed on to Amazon Web Services KMS for future GetObject + // operations on this object. + // + // General purpose buckets - This value must be explicitly added during CopyObject + // operations if you want an additional encryption context for your object. For + // more information, see [Encryption context]in the Amazon S3 User Guide. + // + // Directory buckets - You can optionally provide an explicit encryption context + // value. The value must match the default encryption context - the bucket Amazon + // Resource Name (ARN). An additional encryption context value is not supported. + // + // [Encryption context]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context + SSEKMSEncryptionContext *string + + // If you specify x-amz-server-side-encryption with aws:kms , you must specify the + // x-amz-server-side-encryption-aws-kms-key-id header with the ID (Key ID or Key + // ARN) of the KMS symmetric encryption customer managed key to use. Otherwise, you + // get an HTTP 400 Bad Request error. Only use the key ID or key ARN. The key + // alias format of the KMS key isn't supported. Also, if the KMS key doesn't exist + // in the same account that't issuing the command, you must use the full Key ARN + // not the Key ID. + // + // Your SSE-KMS configuration can only support 1 [customer managed key] per directory bucket for the + // lifetime of the bucket. [Amazon Web Services managed key]( aws/s3 ) isn't supported. + // + // [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk + // [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk + SSEKMSKeyId *string + + // The server-side encryption algorithm to use when you store objects in the + // directory bucket. + // + // For directory buckets, there are only two supported options for server-side + // encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) ( AES256 + // ) and server-side encryption with KMS keys (SSE-KMS) ( aws:kms ). By default, + // Amazon S3 encrypts data with SSE-S3. For more information, see [Protecting data with server-side encryption]in the Amazon S3 + // User Guide. + // + // [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html + ServerSideEncryption types.ServerSideEncryption + // Specifies the mode of the session that will be created, either ReadWrite or // ReadOnly . By default, a ReadWrite session is created. A ReadWrite session is - // capable of executing all the Zonal endpoint APIs on a directory bucket. A - // ReadOnly session is constrained to execute the following Zonal endpoint APIs: - // GetObject , HeadObject , ListObjectsV2 , GetObjectAttributes , ListParts , and - // ListMultipartUploads . + // capable of executing all the Zonal endpoint API operations on a directory + // bucket. A ReadOnly session is constrained to execute the following Zonal + // endpoint API operations: GetObject , HeadObject , ListObjectsV2 , + // GetObjectAttributes , ListParts , and ListMultipartUploads . SessionMode types.SessionMode noSmithyDocumentSerde @@ -129,6 +243,26 @@ type CreateSessionOutput struct { // This member is required. Credentials *types.SessionCredentials + // Indicates whether to use an S3 Bucket Key for server-side encryption with KMS + // keys (SSE-KMS). + BucketKeyEnabled *bool + + // If present, indicates the Amazon Web Services KMS Encryption Context to use for + // object encryption. The value of this header is a Base64-encoded string of a + // UTF-8 encoded JSON, which contains the encryption context as key-value pairs. + // This value is stored as object metadata and automatically gets passed on to + // Amazon Web Services KMS for future GetObject operations on this object. + SSEKMSEncryptionContext *string + + // If you specify x-amz-server-side-encryption with aws:kms , this header indicates + // the ID of the KMS symmetric encryption customer managed key that was used for + // object encryption. + SSEKMSKeyId *string + + // The server-side encryption algorithm used when you store objects in the + // directory bucket. + ServerSideEncryption types.ServerSideEncryption + // Metadata pertaining to the operation's result. ResultMetadata middleware.Metadata @@ -178,6 +312,9 @@ func (c *Client) addOperationCreateSessionMiddlewares(stack *middleware.Stack, o if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -235,6 +372,18 @@ func (c *Client) addOperationCreateSessionMiddlewares(stack *middleware.Stack, o if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go index e0654a0c18..cda4c6ed0d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go @@ -153,6 +153,9 @@ func (c *Client) addOperationDeleteBucketMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -210,6 +213,18 @@ func (c *Client) addOperationDeleteBucketMiddlewares(stack *middleware.Stack, op if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go index e4e0d3b72a..98437e81fd 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go @@ -130,6 +130,9 @@ func (c *Client) addOperationDeleteBucketAnalyticsConfigurationMiddlewares(stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -187,6 +190,18 @@ func (c *Client) addOperationDeleteBucketAnalyticsConfigurationMiddlewares(stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go index cbf7315835..f0cd1be503 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go @@ -118,6 +118,9 @@ func (c *Client) addOperationDeleteBucketCorsMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -175,6 +178,18 @@ func (c *Client) addOperationDeleteBucketCorsMiddlewares(stack *middleware.Stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go index fa37719c0b..f911622178 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go @@ -13,17 +13,32 @@ import ( smithyhttp "github.com/aws/smithy-go/transport/http" ) -// This operation is not supported by directory buckets. -// // This implementation of the DELETE action resets the default encryption for the -// bucket as server-side encryption with Amazon S3 managed keys (SSE-S3). For -// information about the bucket default encryption feature, see [Amazon S3 Bucket Default Encryption]in the Amazon S3 -// User Guide. +// bucket as server-side encryption with Amazon S3 managed keys (SSE-S3). // -// To use this operation, you must have permissions to perform the -// s3:PutEncryptionConfiguration action. The bucket owner has this permission by -// default. The bucket owner can grant this permission to others. For more -// information about permissions, see [Permissions Related to Bucket Subresource Operations]and [Managing Access Permissions to your Amazon S3 Resources] in the Amazon S3 User Guide. +// - General purpose buckets - For information about the bucket default +// encryption feature, see [Amazon S3 Bucket Default Encryption]in the Amazon S3 User Guide. +// +// - Directory buckets - For directory buckets, there are only two supported +// options for server-side encryption: SSE-S3 and SSE-KMS. For information about +// the default encryption configuration in directory buckets, see [Setting default server-side encryption behavior for directory buckets]. +// +// Permissions +// +// - General purpose bucket permissions - The s3:PutEncryptionConfiguration +// permission is required in a policy. The bucket owner has this permission by +// default. The bucket owner can grant this permission to others. For more +// information about permissions, see [Permissions Related to Bucket Operations]and [Managing Access Permissions to Your Amazon S3 Resources]. +// +// - Directory bucket permissions - To grant access to this API operation, you +// must have the s3express:PutEncryptionConfiguration permission in an IAM +// identity-based policy instead of a bucket policy. Cross-account access to this +// API operation isn't supported. This operation can only be performed by the +// Amazon Web Services account that owns the resource. For more information about +// directory bucket policies and permissions, see [Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone]in the Amazon S3 User Guide. +// +// HTTP Host header syntax Directory buckets - The HTTP Host header syntax is +// s3express-control.region.amazonaws.com . // // The following operations are related to DeleteBucketEncryption : // @@ -33,9 +48,11 @@ import ( // // [GetBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html // [PutBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html -// [Permissions Related to Bucket Subresource Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources -// [Managing Access Permissions to your Amazon S3 Resources]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html +// [Setting default server-side encryption behavior for directory buckets]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-bucket-encryption.html // [Amazon S3 Bucket Default Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html +// [Managing Access Permissions to Your Amazon S3 Resources]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html +// [Permissions Related to Bucket Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources +// [Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html func (c *Client) DeleteBucketEncryption(ctx context.Context, params *DeleteBucketEncryptionInput, optFns ...func(*Options)) (*DeleteBucketEncryptionOutput, error) { if params == nil { params = &DeleteBucketEncryptionInput{} @@ -56,12 +73,27 @@ type DeleteBucketEncryptionInput struct { // The name of the bucket containing the server-side encryption configuration to // delete. // + // Directory buckets - When you use this operation with a directory bucket, you + // must use path-style requests in the format + // https://s3express-control.region_code.amazonaws.com/bucket-name . + // Virtual-hosted-style requests aren't supported. Directory bucket names must be + // unique in the chosen Availability Zone. Bucket names must also follow the format + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 + // ). For information about bucket naming restrictions, see [Directory bucket naming rules]in the Amazon S3 User + // Guide + // + // [Directory bucket naming rules]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html + // // This member is required. Bucket *string // The account ID of the expected bucket owner. If the account ID that you provide // does not match the actual owner of the bucket, the request fails with the HTTP // status code 403 Forbidden (access denied). + // + // For directory buckets, this header is not supported in this API operation. If + // you specify this header, the request fails with the HTTP status code 501 Not + // Implemented . ExpectedBucketOwner *string noSmithyDocumentSerde @@ -123,6 +155,9 @@ func (c *Client) addOperationDeleteBucketEncryptionMiddlewares(stack *middleware if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -180,6 +215,18 @@ func (c *Client) addOperationDeleteBucketEncryptionMiddlewares(stack *middleware if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go index 2a64710c17..3bc32aca99 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go @@ -132,6 +132,9 @@ func (c *Client) addOperationDeleteBucketIntelligentTieringConfigurationMiddlewa if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -189,6 +192,18 @@ func (c *Client) addOperationDeleteBucketIntelligentTieringConfigurationMiddlewa if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go index 8fa7d1e438..ffb5e0d4a0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go @@ -130,6 +130,9 @@ func (c *Client) addOperationDeleteBucketInventoryConfigurationMiddlewares(stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -187,6 +190,18 @@ func (c *Client) addOperationDeleteBucketInventoryConfigurationMiddlewares(stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go index 4c843ee5ff..10c8ddbff9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go @@ -125,6 +125,9 @@ func (c *Client) addOperationDeleteBucketLifecycleMiddlewares(stack *middleware. if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -182,6 +185,18 @@ func (c *Client) addOperationDeleteBucketLifecycleMiddlewares(stack *middleware. if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go index 645b5712b7..92dbe8e4d7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go @@ -134,6 +134,9 @@ func (c *Client) addOperationDeleteBucketMetricsConfigurationMiddlewares(stack * if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -191,6 +194,18 @@ func (c *Client) addOperationDeleteBucketMetricsConfigurationMiddlewares(stack * if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go index 893b0f1d55..1b8259d9de 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go @@ -115,6 +115,9 @@ func (c *Client) addOperationDeleteBucketOwnershipControlsMiddlewares(stack *mid if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -172,6 +175,18 @@ func (c *Client) addOperationDeleteBucketOwnershipControlsMiddlewares(stack *mid if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go index f9e53d5495..f0fb41be9c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go @@ -165,6 +165,9 @@ func (c *Client) addOperationDeleteBucketPolicyMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -222,6 +225,18 @@ func (c *Client) addOperationDeleteBucketPolicyMiddlewares(stack *middleware.Sta if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go index c7e9803e53..3967f00fd4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go @@ -125,6 +125,9 @@ func (c *Client) addOperationDeleteBucketReplicationMiddlewares(stack *middlewar if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -182,6 +185,18 @@ func (c *Client) addOperationDeleteBucketReplicationMiddlewares(stack *middlewar if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go index 3f511103b4..2b9d9c414f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go @@ -115,6 +115,9 @@ func (c *Client) addOperationDeleteBucketTaggingMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -172,6 +175,18 @@ func (c *Client) addOperationDeleteBucketTaggingMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go index 58ae1d017a..080d7f7484 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go @@ -124,6 +124,9 @@ func (c *Client) addOperationDeleteBucketWebsiteMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -181,6 +184,18 @@ func (c *Client) addOperationDeleteBucketWebsiteMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go index 9af132c8c6..b5873fb76f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go @@ -280,6 +280,9 @@ func (c *Client) addOperationDeleteObjectMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -337,6 +340,18 @@ func (c *Client) addOperationDeleteObjectMiddlewares(stack *middleware.Stack, op if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go index 473479057b..c0f65ea1e3 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go @@ -151,6 +151,9 @@ func (c *Client) addOperationDeleteObjectTaggingMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -208,6 +211,18 @@ func (c *Client) addOperationDeleteObjectTaggingMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go index fff3d896d5..d08261e5d6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go @@ -317,6 +317,9 @@ func (c *Client) addOperationDeleteObjectsMiddlewares(stack *middleware.Stack, o if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -380,6 +383,18 @@ func (c *Client) addOperationDeleteObjectsMiddlewares(stack *middleware.Stack, o if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go index dee7f1f194..415bffd3b6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go @@ -121,6 +121,9 @@ func (c *Client) addOperationDeletePublicAccessBlockMiddlewares(stack *middlewar if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -178,6 +181,18 @@ func (c *Client) addOperationDeletePublicAccessBlockMiddlewares(stack *middlewar if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go index c8e93d0285..449e43d202 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go @@ -152,6 +152,9 @@ func (c *Client) addOperationGetBucketAccelerateConfigurationMiddlewares(stack * if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -209,6 +212,18 @@ func (c *Client) addOperationGetBucketAccelerateConfigurationMiddlewares(stack * if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go index 73557d2eef..31de039ae6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go @@ -147,6 +147,9 @@ func (c *Client) addOperationGetBucketAclMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -204,6 +207,18 @@ func (c *Client) addOperationGetBucketAclMiddlewares(stack *middleware.Stack, op if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go index d3b27f9ffc..c7cb46d20e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go @@ -136,6 +136,9 @@ func (c *Client) addOperationGetBucketAnalyticsConfigurationMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -193,6 +196,18 @@ func (c *Client) addOperationGetBucketAnalyticsConfigurationMiddlewares(stack *m if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go index ef33218e37..b3d7b70295 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go @@ -146,6 +146,9 @@ func (c *Client) addOperationGetBucketCorsMiddlewares(stack *middleware.Stack, o if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -203,6 +206,18 @@ func (c *Client) addOperationGetBucketCorsMiddlewares(stack *middleware.Stack, o if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go index 8e768fe0d0..26f78cd2b1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go @@ -14,17 +14,33 @@ import ( smithyhttp "github.com/aws/smithy-go/transport/http" ) -// This operation is not supported by directory buckets. -// // Returns the default encryption configuration for an Amazon S3 bucket. By // default, all buckets have a default encryption configuration that uses -// server-side encryption with Amazon S3 managed keys (SSE-S3). For information -// about the bucket default encryption feature, see [Amazon S3 Bucket Default Encryption]in the Amazon S3 User Guide. +// server-side encryption with Amazon S3 managed keys (SSE-S3). // -// To use this operation, you must have permission to perform the -// s3:GetEncryptionConfiguration action. The bucket owner has this permission by -// default. The bucket owner can grant this permission to others. For more -// information about permissions, see [Permissions Related to Bucket Subresource Operations]and [Managing Access Permissions to Your Amazon S3 Resources]. +// - General purpose buckets - For information about the bucket default +// encryption feature, see [Amazon S3 Bucket Default Encryption]in the Amazon S3 User Guide. +// +// - Directory buckets - For directory buckets, there are only two supported +// options for server-side encryption: SSE-S3 and SSE-KMS. For information about +// the default encryption configuration in directory buckets, see [Setting default server-side encryption behavior for directory buckets]. +// +// Permissions +// +// - General purpose bucket permissions - The s3:GetEncryptionConfiguration +// permission is required in a policy. The bucket owner has this permission by +// default. The bucket owner can grant this permission to others. For more +// information about permissions, see [Permissions Related to Bucket Operations]and [Managing Access Permissions to Your Amazon S3 Resources]. +// +// - Directory bucket permissions - To grant access to this API operation, you +// must have the s3express:GetEncryptionConfiguration permission in an IAM +// identity-based policy instead of a bucket policy. Cross-account access to this +// API operation isn't supported. This operation can only be performed by the +// Amazon Web Services account that owns the resource. For more information about +// directory bucket policies and permissions, see [Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone]in the Amazon S3 User Guide. +// +// HTTP Host header syntax Directory buckets - The HTTP Host header syntax is +// s3express-control.region.amazonaws.com . // // The following operations are related to GetBucketEncryption : // @@ -34,9 +50,11 @@ import ( // // [DeleteBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html // [PutBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html -// [Permissions Related to Bucket Subresource Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources +// [Setting default server-side encryption behavior for directory buckets]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-bucket-encryption.html // [Amazon S3 Bucket Default Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html // [Managing Access Permissions to Your Amazon S3 Resources]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html +// [Permissions Related to Bucket Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources +// [Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html func (c *Client) GetBucketEncryption(ctx context.Context, params *GetBucketEncryptionInput, optFns ...func(*Options)) (*GetBucketEncryptionOutput, error) { if params == nil { params = &GetBucketEncryptionInput{} @@ -57,12 +75,27 @@ type GetBucketEncryptionInput struct { // The name of the bucket from which the server-side encryption configuration is // retrieved. // + // Directory buckets - When you use this operation with a directory bucket, you + // must use path-style requests in the format + // https://s3express-control.region_code.amazonaws.com/bucket-name . + // Virtual-hosted-style requests aren't supported. Directory bucket names must be + // unique in the chosen Availability Zone. Bucket names must also follow the format + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 + // ). For information about bucket naming restrictions, see [Directory bucket naming rules]in the Amazon S3 User + // Guide + // + // [Directory bucket naming rules]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html + // // This member is required. Bucket *string // The account ID of the expected bucket owner. If the account ID that you provide // does not match the actual owner of the bucket, the request fails with the HTTP // status code 403 Forbidden (access denied). + // + // For directory buckets, this header is not supported in this API operation. If + // you specify this header, the request fails with the HTTP status code 501 Not + // Implemented . ExpectedBucketOwner *string noSmithyDocumentSerde @@ -128,6 +161,9 @@ func (c *Client) addOperationGetBucketEncryptionMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -185,6 +221,18 @@ func (c *Client) addOperationGetBucketEncryptionMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go index def1765a6b..3cffe9435c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go @@ -137,6 +137,9 @@ func (c *Client) addOperationGetBucketIntelligentTieringConfigurationMiddlewares if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -194,6 +197,18 @@ func (c *Client) addOperationGetBucketIntelligentTieringConfigurationMiddlewares if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go index 8e09aec2c3..3acc99a350 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go @@ -135,6 +135,9 @@ func (c *Client) addOperationGetBucketInventoryConfigurationMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -192,6 +195,18 @@ func (c *Client) addOperationGetBucketInventoryConfigurationMiddlewares(stack *m if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go index 4d3e018d08..325519fb3a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go @@ -149,6 +149,9 @@ func (c *Client) addOperationGetBucketLifecycleConfigurationMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -206,6 +209,18 @@ func (c *Client) addOperationGetBucketLifecycleConfigurationMiddlewares(stack *m if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go index 6ff8e95779..2fe54dd04f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go @@ -153,6 +153,9 @@ func (c *Client) addOperationGetBucketLocationMiddlewares(stack *middleware.Stac if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -213,6 +216,18 @@ func (c *Client) addOperationGetBucketLocationMiddlewares(stack *middleware.Stac if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go index fec538ee64..a5030140a6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go @@ -121,6 +121,9 @@ func (c *Client) addOperationGetBucketLoggingMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -178,6 +181,18 @@ func (c *Client) addOperationGetBucketLoggingMiddlewares(stack *middleware.Stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go index 13cf42f403..fa83bd270c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go @@ -138,6 +138,9 @@ func (c *Client) addOperationGetBucketMetricsConfigurationMiddlewares(stack *mid if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -195,6 +198,18 @@ func (c *Client) addOperationGetBucketMetricsConfigurationMiddlewares(stack *mid if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go index 66915f732f..822da223c8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go @@ -161,6 +161,9 @@ func (c *Client) addOperationGetBucketNotificationConfigurationMiddlewares(stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -218,6 +221,18 @@ func (c *Client) addOperationGetBucketNotificationConfigurationMiddlewares(stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go index f8d2486b55..f97d7a4537 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go @@ -121,6 +121,9 @@ func (c *Client) addOperationGetBucketOwnershipControlsMiddlewares(stack *middle if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -178,6 +181,18 @@ func (c *Client) addOperationGetBucketOwnershipControlsMiddlewares(stack *middle if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go index 1a2f25193a..ca0e446e4a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go @@ -186,6 +186,9 @@ func (c *Client) addOperationGetBucketPolicyMiddlewares(stack *middleware.Stack, if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -243,6 +246,18 @@ func (c *Client) addOperationGetBucketPolicyMiddlewares(stack *middleware.Stack, if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go index 57cee1fb3f..c8ed794ec9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go @@ -129,6 +129,9 @@ func (c *Client) addOperationGetBucketPolicyStatusMiddlewares(stack *middleware. if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -186,6 +189,18 @@ func (c *Client) addOperationGetBucketPolicyStatusMiddlewares(stack *middleware. if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go index 10a0f6a109..65877d1132 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go @@ -136,6 +136,9 @@ func (c *Client) addOperationGetBucketReplicationMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -193,6 +196,18 @@ func (c *Client) addOperationGetBucketReplicationMiddlewares(stack *middleware.S if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go index 2a4c058428..daddf29b0a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go @@ -115,6 +115,9 @@ func (c *Client) addOperationGetBucketRequestPaymentMiddlewares(stack *middlewar if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -172,6 +175,18 @@ func (c *Client) addOperationGetBucketRequestPaymentMiddlewares(stack *middlewar if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go index 61c62de03a..f4020a99ce 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go @@ -128,6 +128,9 @@ func (c *Client) addOperationGetBucketTaggingMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -185,6 +188,18 @@ func (c *Client) addOperationGetBucketTaggingMiddlewares(stack *middleware.Stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go index 86fcc67bb8..98ddae58ea 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go @@ -130,6 +130,9 @@ func (c *Client) addOperationGetBucketVersioningMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -187,6 +190,18 @@ func (c *Client) addOperationGetBucketVersioningMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go index 72254092ae..d4cb0fe490 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go @@ -134,6 +134,9 @@ func (c *Client) addOperationGetBucketWebsiteMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -191,6 +194,18 @@ func (c *Client) addOperationGetBucketWebsiteMiddlewares(stack *middleware.Stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go index 618e9e4daa..3dc9b36a5a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go @@ -79,6 +79,11 @@ import ( // session token automatically to avoid service interruptions when a session // expires. For more information about authorization, see [CreateSession]CreateSession . // +// If the object is encrypted using SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. +// // Storage classes If the object you are retrieving is stored in the S3 Glacier // Flexible Retrieval storage class, the S3 Glacier Deep Archive storage class, the // S3 Intelligent-Tiering Archive Access tier, or the S3 Intelligent-Tiering Deep @@ -99,6 +104,10 @@ import ( // include the header in your GetObject requests for the object that uses these // types of keys, you’ll get an HTTP 400 Bad Request error. // +// Directory buckets - For directory buckets, there are only two supported options +// for server-side encryption: SSE-S3 and SSE-KMS. SSE-C isn't supported. For more +// information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. +// // Overriding response header values through the request There are times when you // want to override certain response header values of a GetObject response. For // example, you might override the Content-Disposition response header value @@ -144,6 +153,7 @@ import ( // // [RestoreObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html +// [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html // [ListBuckets]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html // [HTTP Host Header Bucket Specification]: https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket // [Restoring Archived Objects]: https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html @@ -217,9 +227,10 @@ type GetObjectInput struct { // To retrieve the checksum, this mode must be enabled. // - // In addition, if you enable checksum mode and the object is uploaded with a [checksum] and - // encrypted with an Key Management Service (KMS) key, you must have permission to - // use the kms:Decrypt action to retrieve the checksum. + // General purpose buckets - In addition, if you enable checksum mode and the + // object is uploaded with a [checksum]and encrypted with an Key Management Service (KMS) + // key, you must have permission to use the kms:Decrypt action to retrieve the + // checksum. // // [checksum]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html ChecksumMode types.ChecksumMode @@ -430,8 +441,6 @@ type GetObjectOutput struct { // Indicates whether the object uses an S3 Bucket Key for server-side encryption // with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // Specifies caching behavior along the request/reply chain. @@ -597,17 +606,11 @@ type GetObjectOutput struct { // This functionality is not supported for directory buckets. SSECustomerKeyMD5 *string - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon - // S3 (for example, AES256 , aws:kms , aws:kms:dsse ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. + // S3. ServerSideEncryption types.ServerSideEncryption // Provides storage class information of the object. Amazon S3 returns this header @@ -688,6 +691,9 @@ func (c *Client) addOperationGetObjectMiddlewares(stack *middleware.Stack, optio if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -745,6 +751,18 @@ func (c *Client) addOperationGetObjectMiddlewares(stack *middleware.Stack, optio if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go index debdaab0e3..8b1c8e3b74 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go @@ -179,6 +179,9 @@ func (c *Client) addOperationGetObjectAclMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -236,6 +239,18 @@ func (c *Client) addOperationGetObjectAclMiddlewares(stack *middleware.Stack, op if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go index 98ebb0d7be..17a17b0d12 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go @@ -32,13 +32,13 @@ import ( // // - General purpose bucket permissions - To use GetObjectAttributes , you must // have READ access to the object. The permissions that you need to use this -// operation with depend on whether the bucket is versioned. If the bucket is -// versioned, you need both the s3:GetObjectVersion and -// s3:GetObjectVersionAttributes permissions for this operation. If the bucket is -// not versioned, you need the s3:GetObject and s3:GetObjectAttributes -// permissions. For more information, see [Specifying Permissions in a Policy]in the Amazon S3 User Guide. If the -// object that you request does not exist, the error Amazon S3 returns depends on -// whether you also have the s3:ListBucket permission. +// operation depend on whether the bucket is versioned. If the bucket is versioned, +// you need both the s3:GetObjectVersion and s3:GetObjectVersionAttributes +// permissions for this operation. If the bucket is not versioned, you need the +// s3:GetObject and s3:GetObjectAttributes permissions. For more information, see [Specifying Permissions in a Policy] +// in the Amazon S3 User Guide. If the object that you request does not exist, the +// error Amazon S3 returns depends on whether you also have the s3:ListBucket +// permission. // // - If you have the s3:ListBucket permission on the bucket, Amazon S3 returns an // HTTP status code 404 Not Found ("no such key") error. @@ -58,6 +58,11 @@ import ( // session token automatically to avoid service interruptions when a session // expires. For more information about authorization, see [CreateSession]CreateSession . // +// If the object is encrypted with SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. +// // Encryption Encryption request headers, like x-amz-server-side-encryption , // should not be sent for HEAD requests if your object uses server-side encryption // with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side @@ -83,8 +88,15 @@ import ( // // For more information about SSE-C, see [Server-Side Encryption (Using Customer-Provided Encryption Keys)] in the Amazon S3 User Guide. // -// Directory bucket permissions - For directory buckets, only server-side -// encryption with Amazon S3 managed keys (SSE-S3) ( AES256 ) is supported. +// Directory bucket permissions - For directory buckets, there are only two +// supported options for server-side encryption: server-side encryption with Amazon +// S3 managed keys (SSE-S3) ( AES256 ) and server-side encryption with KMS keys +// (SSE-KMS) ( aws:kms ). We recommend that the bucket's default encryption uses +// the desired encryption configuration and you don't override the bucket default +// encryption in your CreateSession requests or PUT object requests. Then, new +// objects are automatically encrypted with the desired encryption settings. For +// more information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. For more information about +// the encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads]. // // Versioning Directory buckets - S3 Versioning isn't enabled and supported for // directory buckets. For this API operation, only the null value of the version @@ -134,6 +146,7 @@ import ( // // [ListParts] // +// [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html // [GetObjectLegalHold]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLegalHold.html // [ListParts]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html // [Server-Side Encryption (Using Customer-Provided Encryption Keys)]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html @@ -144,6 +157,7 @@ import ( // [RFC 7232]: https://tools.ietf.org/html/rfc7232 // [HeadObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html // [GetObjectLockConfiguration]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLockConfiguration.html +// [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html // [GetObjectAcl]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html // [GetObjectRetention]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectRetention.html // [GetObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html @@ -369,6 +383,9 @@ func (c *Client) addOperationGetObjectAttributesMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -426,6 +443,18 @@ func (c *Client) addOperationGetObjectAttributesMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go index 0c39051e5a..5d31b314de 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go @@ -147,6 +147,9 @@ func (c *Client) addOperationGetObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -204,6 +207,18 @@ func (c *Client) addOperationGetObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go index 28ea0fd129..685bc2e699 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go @@ -126,6 +126,9 @@ func (c *Client) addOperationGetObjectLockConfigurationMiddlewares(stack *middle if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -183,6 +186,18 @@ func (c *Client) addOperationGetObjectLockConfigurationMiddlewares(stack *middle if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go index 678afb91b2..d7aa3633a8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go @@ -147,6 +147,9 @@ func (c *Client) addOperationGetObjectRetentionMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -204,6 +207,18 @@ func (c *Client) addOperationGetObjectRetentionMiddlewares(stack *middleware.Sta if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go index bd70ccadd6..485861e68f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go @@ -177,6 +177,9 @@ func (c *Client) addOperationGetObjectTaggingMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -234,6 +237,18 @@ func (c *Client) addOperationGetObjectTaggingMiddlewares(stack *middleware.Stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go index 5be63e2e33..608e0eefd8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go @@ -145,6 +145,9 @@ func (c *Client) addOperationGetObjectTorrentMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -199,6 +202,18 @@ func (c *Client) addOperationGetObjectTorrentMiddlewares(stack *middleware.Stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go index 3eac86cb6c..d80905d5af 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go @@ -138,6 +138,9 @@ func (c *Client) addOperationGetPublicAccessBlockMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -195,6 +198,18 @@ func (c *Client) addOperationGetPublicAccessBlockMiddlewares(stack *middleware.S if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go index 81a1952857..af7524a5a1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go @@ -216,6 +216,9 @@ func (c *Client) addOperationHeadBucketMiddlewares(stack *middleware.Stack, opti if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -273,6 +276,18 @@ func (c *Client) addOperationHeadBucketMiddlewares(stack *middleware.Stack, opti if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go index 7f3417b16b..8c23e5c0f5 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go @@ -59,6 +59,13 @@ import ( // session token automatically to avoid service interruptions when a session // expires. For more information about authorization, see [CreateSession]CreateSession . // +// If you enable x-amz-checksum-mode in the request and the object is encrypted +// +// with Amazon Web Services Key Management Service (Amazon Web Services KMS), you +// must also have the kms:GenerateDataKey and kms:Decrypt permissions in IAM +// identity-based policies and KMS key policies for the KMS key to retrieve the +// checksum of the object. +// // Encryption Encryption request headers, like x-amz-server-side-encryption , // should not be sent for HEAD requests if your object uses server-side encryption // with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side @@ -84,8 +91,9 @@ import ( // // For more information about SSE-C, see [Server-Side Encryption (Using Customer-Provided Encryption Keys)] in the Amazon S3 User Guide. // -// Directory bucket permissions - For directory buckets, only server-side -// encryption with Amazon S3 managed keys (SSE-S3) ( AES256 ) is supported. +// Directory bucket - For directory buckets, there are only two supported options +// for server-side encryption: SSE-S3 and SSE-KMS. SSE-C isn't supported. For more +// information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. // // Versioning // @@ -121,6 +129,7 @@ import ( // [Server-Side Encryption (Using Customer-Provided Encryption Keys)]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html // [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html // [GetObjectAttributes]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html +// [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html // [Actions, resources, and condition keys for Amazon S3]: https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html // [GetObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html // [Common Request Headers]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html @@ -187,9 +196,15 @@ type HeadObjectInput struct { // To retrieve the checksum, this parameter must be enabled. // - // In addition, if you enable checksum mode and the object is uploaded with a [checksum] and - // encrypted with an Key Management Service (KMS) key, you must have permission to - // use the kms:Decrypt action to retrieve the checksum. + // General purpose buckets - If you enable checksum mode and the object is + // uploaded with a [checksum]and encrypted with an Key Management Service (KMS) key, you + // must have permission to use the kms:Decrypt action to retrieve the checksum. + // + // Directory buckets - If you enable ChecksumMode and the object is encrypted with + // Amazon Web Services Key Management Service (Amazon Web Services KMS), you must + // also have the kms:GenerateDataKey and kms:Decrypt permissions in IAM + // identity-based policies and KMS key policies for the KMS key to retrieve the + // checksum of the object. // // [checksum]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html ChecksumMode types.ChecksumMode @@ -357,8 +372,6 @@ type HeadObjectOutput struct { // Indicates whether the object uses an S3 Bucket Key for server-side encryption // with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // Specifies caching behavior along the request/reply chain. @@ -583,17 +596,11 @@ type HeadObjectOutput struct { // This functionality is not supported for directory buckets. SSECustomerKeyMD5 *string - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon // S3 (for example, AES256 , aws:kms , aws:kms:dsse ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. ServerSideEncryption types.ServerSideEncryption // Provides storage class information of the object. Amazon S3 returns this header @@ -668,6 +675,9 @@ func (c *Client) addOperationHeadObjectMiddlewares(stack *middleware.Stack, opti if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -725,6 +735,18 @@ func (c *Client) addOperationHeadObjectMiddlewares(stack *middleware.Stack, opti if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go index f2ba344395..c78d9e4934 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go @@ -156,6 +156,9 @@ func (c *Client) addOperationListBucketAnalyticsConfigurationsMiddlewares(stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -213,6 +216,18 @@ func (c *Client) addOperationListBucketAnalyticsConfigurationsMiddlewares(stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go index 01b66028e1..f139a43db7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go @@ -150,6 +150,9 @@ func (c *Client) addOperationListBucketIntelligentTieringConfigurationsMiddlewar if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -207,6 +210,18 @@ func (c *Client) addOperationListBucketIntelligentTieringConfigurationsMiddlewar if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go index 889ad02647..449bae064a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go @@ -158,6 +158,9 @@ func (c *Client) addOperationListBucketInventoryConfigurationsMiddlewares(stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -215,6 +218,18 @@ func (c *Client) addOperationListBucketInventoryConfigurationsMiddlewares(stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go index 8a3a080afa..4d34f6e948 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go @@ -160,6 +160,9 @@ func (c *Client) addOperationListBucketMetricsConfigurationsMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -217,6 +220,18 @@ func (c *Client) addOperationListBucketMetricsConfigurationsMiddlewares(stack *m if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go index b047b239c7..a5e103ac62 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go @@ -118,6 +118,9 @@ func (c *Client) addOperationListBucketsMiddlewares(stack *middleware.Stack, opt if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -172,6 +175,18 @@ func (c *Client) addOperationListBucketsMiddlewares(stack *middleware.Stack, opt if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go index 8fccf32bc1..e375413d49 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go @@ -130,6 +130,9 @@ func (c *Client) addOperationListDirectoryBucketsMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -184,6 +187,18 @@ func (c *Client) addOperationListDirectoryBucketsMiddlewares(stack *middleware.S if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go index e84fae68ac..0a4bfe332d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go @@ -388,6 +388,9 @@ func (c *Client) addOperationListMultipartUploadsMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -445,6 +448,18 @@ func (c *Client) addOperationListMultipartUploadsMiddlewares(stack *middleware.S if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go index 4e1b840ce0..72324c49b4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go @@ -253,6 +253,9 @@ func (c *Client) addOperationListObjectVersionsMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -310,6 +313,18 @@ func (c *Client) addOperationListObjectVersionsMiddlewares(stack *middleware.Sta if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go index 599f2cad35..3aba10edab 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go @@ -279,6 +279,9 @@ func (c *Client) addOperationListObjectsMiddlewares(stack *middleware.Stack, opt if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -336,6 +339,18 @@ func (c *Client) addOperationListObjectsMiddlewares(stack *middleware.Stack, opt if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go index e3af9b0bff..fa5a2eefeb 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go @@ -374,6 +374,9 @@ func (c *Client) addOperationListObjectsV2Middlewares(stack *middleware.Stack, o if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -431,6 +434,18 @@ func (c *Client) addOperationListObjectsV2Middlewares(stack *middleware.Stack, o if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go index 9ff3365815..54af48166b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go @@ -344,6 +344,9 @@ func (c *Client) addOperationListPartsMiddlewares(stack *middleware.Stack, optio if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -401,6 +404,18 @@ func (c *Client) addOperationListPartsMiddlewares(stack *middleware.Stack, optio if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go index 03da71d2e4..c400607c8a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go @@ -158,6 +158,9 @@ func (c *Client) addOperationPutBucketAccelerateConfigurationMiddlewares(stack * if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -218,6 +221,18 @@ func (c *Client) addOperationPutBucketAccelerateConfigurationMiddlewares(stack * if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go index 35282558c4..9562fafb5a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go @@ -302,6 +302,9 @@ func (c *Client) addOperationPutBucketAclMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -365,6 +368,18 @@ func (c *Client) addOperationPutBucketAclMiddlewares(stack *middleware.Stack, op if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go index 9d0908613d..99846ef4d4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go @@ -171,6 +171,9 @@ func (c *Client) addOperationPutBucketAnalyticsConfigurationMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -228,6 +231,18 @@ func (c *Client) addOperationPutBucketAnalyticsConfigurationMiddlewares(stack *m if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go index 6ce434d6f7..a08c41c1bc 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go @@ -180,6 +180,9 @@ func (c *Client) addOperationPutBucketCorsMiddlewares(stack *middleware.Stack, o if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -243,6 +246,18 @@ func (c *Client) addOperationPutBucketCorsMiddlewares(stack *middleware.Stack, o if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go index bcf0d44096..e68b84c364 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go @@ -15,19 +15,58 @@ import ( smithyhttp "github.com/aws/smithy-go/transport/http" ) -// This operation is not supported by directory buckets. +// This operation configures default encryption and Amazon S3 Bucket Keys for an +// existing bucket. // -// This action uses the encryption subresource to configure default encryption and -// Amazon S3 Bucket Keys for an existing bucket. +// Directory buckets - For directory buckets, you must make requests for this API +// operation to the Regional endpoint. These endpoints support path-style requests +// in the format https://s3express-control.region_code.amazonaws.com/bucket-name . +// Virtual-hosted-style requests aren't supported. For more information, see [Regional and Zonal endpoints]in +// the Amazon S3 User Guide. // // By default, all buckets have a default encryption configuration that uses -// server-side encryption with Amazon S3 managed keys (SSE-S3). You can optionally -// configure default encryption for a bucket by using server-side encryption with -// Key Management Service (KMS) keys (SSE-KMS) or dual-layer server-side encryption -// with Amazon Web Services KMS keys (DSSE-KMS). If you specify default encryption -// by using SSE-KMS, you can also configure [Amazon S3 Bucket Keys]. If you use PutBucketEncryption to -// set your [default bucket encryption]to SSE-KMS, you should verify that your KMS key ID is correct. Amazon -// S3 does not validate the KMS key ID provided in PutBucketEncryption requests. +// server-side encryption with Amazon S3 managed keys (SSE-S3). +// +// - General purpose buckets +// +// - You can optionally configure default encryption for a bucket by using +// server-side encryption with Key Management Service (KMS) keys (SSE-KMS) or +// dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS). +// If you specify default encryption by using SSE-KMS, you can also configure [Amazon S3 Bucket Keys]. +// For information about the bucket default encryption feature, see [Amazon S3 Bucket Default Encryption]in the +// Amazon S3 User Guide. +// +// - If you use PutBucketEncryption to set your [default bucket encryption]to SSE-KMS, you should verify +// that your KMS key ID is correct. Amazon S3 doesn't validate the KMS key ID +// provided in PutBucketEncryption requests. +// +// - Directory buckets - You can optionally configure default encryption for a +// bucket by using server-side encryption with Key Management Service (KMS) keys +// (SSE-KMS). +// +// - We recommend that the bucket's default encryption uses the desired +// encryption configuration and you don't override the bucket default encryption in +// your CreateSession requests or PUT object requests. Then, new objects are +// automatically encrypted with the desired encryption settings. For more +// information about the encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads] +// . +// +// - Your SSE-KMS configuration can only support 1 [customer managed key]per directory bucket for the +// lifetime of the bucket. [Amazon Web Services managed key]( aws/s3 ) isn't supported. +// +// - S3 Bucket Keys are always enabled for GET and PUT operations in a directory +// bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy +// SSE-KMS encrypted objects from general purpose buckets to directory buckets, +// from directory buckets to general purpose buckets, or between directory buckets, +// through [CopyObject], [UploadPartCopy], [the Copy operation in Batch Operations], or [the import jobs]. In this case, Amazon S3 makes a call to KMS every time a +// copy request is made for a KMS-encrypted object. +// +// - When you specify an [KMS customer managed key]for encryption in your directory bucket, only use the +// key ID or key ARN. The key alias format of the KMS key isn't supported. +// +// - For directory buckets, if you use PutBucketEncryption to set your [default bucket encryption]to +// SSE-KMS, Amazon S3 validates the KMS key ID provided in PutBucketEncryption +// requests. // // If you're specifying a customer managed KMS key, we recommend using a fully // qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the @@ -38,10 +77,27 @@ import ( // Also, this action requires Amazon Web Services Signature Version 4. For more // information, see [Authenticating Requests (Amazon Web Services Signature Version 4)]. // -// To use this operation, you must have permission to perform the -// s3:PutEncryptionConfiguration action. The bucket owner has this permission by -// default. The bucket owner can grant this permission to others. For more -// information about permissions, see [Permissions Related to Bucket Subresource Operations]and [Managing Access Permissions to Your Amazon S3 Resources] in the Amazon S3 User Guide. +// Permissions +// +// - General purpose bucket permissions - The s3:PutEncryptionConfiguration +// permission is required in a policy. The bucket owner has this permission by +// default. The bucket owner can grant this permission to others. For more +// information about permissions, see [Permissions Related to Bucket Operations]and [Managing Access Permissions to Your Amazon S3 Resources]in the Amazon S3 User Guide. +// +// - Directory bucket permissions - To grant access to this API operation, you +// must have the s3express:PutEncryptionConfiguration permission in an IAM +// identity-based policy instead of a bucket policy. Cross-account access to this +// API operation isn't supported. This operation can only be performed by the +// Amazon Web Services account that owns the resource. For more information about +// directory bucket policies and permissions, see [Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone]in the Amazon S3 User Guide. +// +// To set a directory bucket default encryption with SSE-KMS, you must also have +// +// the kms:GenerateDataKey and the kms:Decrypt permissions in IAM identity-based +// policies and KMS key policies for the target KMS key. +// +// HTTP Host header syntax Directory buckets - The HTTP Host header syntax is +// s3express-control.region.amazonaws.com . // // The following operations are related to PutBucketEncryption : // @@ -49,13 +105,24 @@ import ( // // [DeleteBucketEncryption] // +// [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html +// [Regional and Zonal endpoints]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html +// [KMS customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk +// [Amazon S3 Bucket Default Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html +// [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html +// [Managing Access Permissions to Your Amazon S3 Resources]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html +// [Permissions Related to Bucket Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources +// [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html +// [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk +// [Authenticating Requests (Amazon Web Services Signature Version 4)]: https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html +// [Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html // [Amazon S3 Bucket Keys]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html // [GetBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html // [DeleteBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html -// [Permissions Related to Bucket Subresource Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources +// [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk // [default bucket encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html -// [Managing Access Permissions to Your Amazon S3 Resources]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html -// [Authenticating Requests (Amazon Web Services Signature Version 4)]: https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html +// [the import jobs]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job +// [the Copy operation in Batch Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops func (c *Client) PutBucketEncryption(ctx context.Context, params *PutBucketEncryptionInput, optFns ...func(*Options)) (*PutBucketEncryptionOutput, error) { if params == nil { params = &PutBucketEncryptionInput{} @@ -74,14 +141,18 @@ func (c *Client) PutBucketEncryption(ctx context.Context, params *PutBucketEncry type PutBucketEncryptionInput struct { // Specifies default encryption for a bucket using server-side encryption with - // different key options. By default, all buckets have a default encryption - // configuration that uses server-side encryption with Amazon S3 managed keys - // (SSE-S3). You can optionally configure default encryption for a bucket by using - // server-side encryption with an Amazon Web Services KMS key (SSE-KMS) or a - // customer-provided key (SSE-C). For information about the bucket default - // encryption feature, see [Amazon S3 Bucket Default Encryption]in the Amazon S3 User Guide. + // different key options. // - // [Amazon S3 Bucket Default Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html + // Directory buckets - When you use this operation with a directory bucket, you + // must use path-style requests in the format + // https://s3express-control.region_code.amazonaws.com/bucket-name . + // Virtual-hosted-style requests aren't supported. Directory bucket names must be + // unique in the chosen Availability Zone. Bucket names must also follow the format + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 + // ). For information about bucket naming restrictions, see [Directory bucket naming rules]in the Amazon S3 User + // Guide + // + // [Directory bucket naming rules]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html // // This member is required. Bucket *string @@ -101,6 +172,9 @@ type PutBucketEncryptionInput struct { // If you provide an individual checksum, Amazon S3 ignores any provided // ChecksumAlgorithm parameter. // + // For directory buckets, when you use Amazon Web Services SDKs, CRC32 is the + // default checksum algorithm that's used for performance. + // // [Checking object integrity]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html ChecksumAlgorithm types.ChecksumAlgorithm @@ -109,11 +183,17 @@ type PutBucketEncryptionInput struct { // // For requests made using the Amazon Web Services Command Line Interface (CLI) or // Amazon Web Services SDKs, this field is calculated automatically. + // + // This functionality is not supported for directory buckets. ContentMD5 *string // The account ID of the expected bucket owner. If the account ID that you provide // does not match the actual owner of the bucket, the request fails with the HTTP // status code 403 Forbidden (access denied). + // + // For directory buckets, this header is not supported in this API operation. If + // you specify this header, the request fails with the HTTP status code 501 Not + // Implemented . ExpectedBucketOwner *string noSmithyDocumentSerde @@ -175,6 +255,9 @@ func (c *Client) addOperationPutBucketEncryptionMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -238,6 +321,18 @@ func (c *Client) addOperationPutBucketEncryptionMiddlewares(stack *middleware.St if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go index 5087cdee95..b061daac1e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go @@ -158,6 +158,9 @@ func (c *Client) addOperationPutBucketIntelligentTieringConfigurationMiddlewares if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -215,6 +218,18 @@ func (c *Client) addOperationPutBucketIntelligentTieringConfigurationMiddlewares if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go index b15df17a15..87ec6030ae 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go @@ -180,6 +180,9 @@ func (c *Client) addOperationPutBucketInventoryConfigurationMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -237,6 +240,18 @@ func (c *Client) addOperationPutBucketInventoryConfigurationMiddlewares(stack *m if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go index 5f20c6d566..399104dfe0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go @@ -188,6 +188,9 @@ func (c *Client) addOperationPutBucketLifecycleConfigurationMiddlewares(stack *m if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -251,6 +254,18 @@ func (c *Client) addOperationPutBucketLifecycleConfigurationMiddlewares(stack *m if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go index cf2183d0eb..10e04be1dd 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go @@ -187,6 +187,9 @@ func (c *Client) addOperationPutBucketLoggingMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -250,6 +253,18 @@ func (c *Client) addOperationPutBucketLoggingMiddlewares(stack *middleware.Stack if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go index 837e7180cc..fcf7930a34 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go @@ -149,6 +149,9 @@ func (c *Client) addOperationPutBucketMetricsConfigurationMiddlewares(stack *mid if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -206,6 +209,18 @@ func (c *Client) addOperationPutBucketMetricsConfigurationMiddlewares(stack *mid if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go index d6d4e51096..6c08e313a1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go @@ -163,6 +163,9 @@ func (c *Client) addOperationPutBucketNotificationConfigurationMiddlewares(stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -220,6 +223,18 @@ func (c *Client) addOperationPutBucketNotificationConfigurationMiddlewares(stack if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go index 99e26fd558..6d5517e83c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go @@ -129,6 +129,9 @@ func (c *Client) addOperationPutBucketOwnershipControlsMiddlewares(stack *middle if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -192,6 +195,18 @@ func (c *Client) addOperationPutBucketOwnershipControlsMiddlewares(stack *middle if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go index 93f66ab619..b7e93b2cb4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go @@ -227,6 +227,9 @@ func (c *Client) addOperationPutBucketPolicyMiddlewares(stack *middleware.Stack, if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -290,6 +293,18 @@ func (c *Client) addOperationPutBucketPolicyMiddlewares(stack *middleware.Stack, if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go index 2f9d26774f..1b67f7ec33 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go @@ -198,6 +198,9 @@ func (c *Client) addOperationPutBucketReplicationMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -261,6 +264,18 @@ func (c *Client) addOperationPutBucketReplicationMiddlewares(stack *middleware.S if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go index e0f9f31ef7..fb9ffd4756 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go @@ -145,6 +145,9 @@ func (c *Client) addOperationPutBucketRequestPaymentMiddlewares(stack *middlewar if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -208,6 +211,18 @@ func (c *Client) addOperationPutBucketRequestPaymentMiddlewares(stack *middlewar if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go index 2ed4fb6a17..7bd67f9bf9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go @@ -177,6 +177,9 @@ func (c *Client) addOperationPutBucketTaggingMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -240,6 +243,18 @@ func (c *Client) addOperationPutBucketTaggingMiddlewares(stack *middleware.Stack if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go index fefdc109d6..04cbcf08dc 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go @@ -179,6 +179,9 @@ func (c *Client) addOperationPutBucketVersioningMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -242,6 +245,18 @@ func (c *Client) addOperationPutBucketVersioningMiddlewares(stack *middleware.St if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go index 65a7f39e44..ebcb87f4fa 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go @@ -200,6 +200,9 @@ func (c *Client) addOperationPutBucketWebsiteMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -263,6 +266,18 @@ func (c *Client) addOperationPutBucketWebsiteMiddlewares(stack *middleware.Stack if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go index a5e18d5856..d1f61a79b8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go @@ -81,6 +81,11 @@ import ( // session token automatically to avoid service interruptions when a session // expires. For more information about authorization, see [CreateSession]CreateSession . // +// If the object is encrypted with SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. +// // Data integrity with Content-MD5 // // - General purpose bucket - To ensure that data is not corrupted traversing @@ -202,13 +207,22 @@ type PutObjectInput struct { // Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption // with server-side encryption using Key Management Service (KMS) keys (SSE-KMS). - // Setting this header to true causes Amazon S3 to use an S3 Bucket Key for object - // encryption with SSE-KMS. // - // Specifying this header with a PUT action doesn’t affect bucket-level settings - // for S3 Bucket Key. + // General purpose buckets - Setting this header to true causes Amazon S3 to use + // an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this + // header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key. // - // This functionality is not supported for directory buckets. + // Directory buckets - S3 Bucket Keys are always enabled for GET and PUT + // operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't + // supported, when you copy SSE-KMS encrypted objects from general purpose buckets + // to directory buckets, from directory buckets to general purpose buckets, or + // between directory buckets, through [CopyObject], [UploadPartCopy], [the Copy operation in Batch Operations], or [the import jobs]. In this case, Amazon S3 makes a + // call to KMS every time a copy request is made for a KMS-encrypted object. + // + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html + // [the import jobs]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job + // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html + // [the Copy operation in Batch Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops BucketKeyEnabled *bool // Can be used to specify caching behavior along the request/reply chain. For more @@ -433,46 +447,97 @@ type PutObjectInput struct { // This functionality is not supported for directory buckets. SSECustomerKeyMD5 *string - // Specifies the Amazon Web Services KMS Encryption Context to use for object - // encryption. The value of this header is a base64-encoded UTF-8 string holding - // JSON with the encryption context key-value pairs. This value is stored as object - // metadata and automatically gets passed on to Amazon Web Services KMS for future - // GetObject or CopyObject operations on this object. This value must be - // explicitly added during CopyObject operations. + // Specifies the Amazon Web Services KMS Encryption Context as an additional + // encryption context to use for object encryption. The value of this header is a + // Base64-encoded string of a UTF-8 encoded JSON, which contains the encryption + // context as key-value pairs. This value is stored as object metadata and + // automatically gets passed on to Amazon Web Services KMS for future GetObject + // operations on this object. // - // This functionality is not supported for directory buckets. + // General purpose buckets - This value must be explicitly added during CopyObject + // operations if you want an additional encryption context for your object. For + // more information, see [Encryption context]in the Amazon S3 User Guide. + // + // Directory buckets - You can optionally provide an explicit encryption context + // value. The value must match the default encryption context - the bucket Amazon + // Resource Name (ARN). An additional encryption context value is not supported. + // + // [Encryption context]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context SSEKMSEncryptionContext *string - // If x-amz-server-side-encryption has a valid value of aws:kms or aws:kms:dsse , - // this header specifies the ID (Key ID, Key ARN, or Key Alias) of the Key - // Management Service (KMS) symmetric encryption customer managed key that was used - // for the object. If you specify x-amz-server-side-encryption:aws:kms or + // Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object + // encryption. If the KMS key doesn't exist in the same account that's issuing the + // command, you must use the full Key ARN not the Key ID. + // + // General purpose buckets - If you specify x-amz-server-side-encryption with + // aws:kms or aws:kms:dsse , this header specifies the ID (Key ID, Key ARN, or Key + // Alias) of the KMS key to use. If you specify + // x-amz-server-side-encryption:aws:kms or // x-amz-server-side-encryption:aws:kms:dsse , but do not provide // x-amz-server-side-encryption-aws-kms-key-id , Amazon S3 uses the Amazon Web - // Services managed key ( aws/s3 ) to protect the data. If the KMS key does not - // exist in the same account that's issuing the command, you must use the full ARN - // and not just the ID. + // Services managed key ( aws/s3 ) to protect the data. // - // This functionality is not supported for directory buckets. + // Directory buckets - If you specify x-amz-server-side-encryption with aws:kms , + // you must specify the x-amz-server-side-encryption-aws-kms-key-id header with + // the ID (Key ID or Key ARN) of the KMS symmetric encryption customer managed key + // to use. Otherwise, you get an HTTP 400 Bad Request error. Only use the key ID + // or key ARN. The key alias format of the KMS key isn't supported. Your SSE-KMS + // configuration can only support 1 [customer managed key]per directory bucket for the lifetime of the + // bucket. [Amazon Web Services managed key]( aws/s3 ) isn't supported. + // + // [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk + // [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk SSEKMSKeyId *string // The server-side encryption algorithm that was used when you store this object // in Amazon S3 (for example, AES256 , aws:kms , aws:kms:dsse ). // - // General purpose buckets - You have four mutually exclusive options to protect - // data using server-side encryption in Amazon S3, depending on how you choose to - // manage the encryption keys. Specifically, the encryption key options are Amazon - // S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), - // and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side - // encryption by using Amazon S3 managed keys (SSE-S3) by default. You can - // optionally tell Amazon S3 to encrypt data at rest by using server-side - // encryption with other key options. For more information, see [Using Server-Side Encryption]in the Amazon S3 - // User Guide. + // - General purpose buckets - You have four mutually exclusive options to + // protect data using server-side encryption in Amazon S3, depending on how you + // choose to manage the encryption keys. Specifically, the encryption key options + // are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or + // DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with + // server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You + // can optionally tell Amazon S3 to encrypt data at rest by using server-side + // encryption with other key options. For more information, see [Using Server-Side Encryption]in the Amazon S3 + // User Guide. // - // Directory buckets - For directory buckets, only the server-side encryption with - // Amazon S3 managed keys (SSE-S3) ( AES256 ) value is supported. + // - Directory buckets - For directory buckets, there are only two supported + // options for server-side encryption: server-side encryption with Amazon S3 + // managed keys (SSE-S3) ( AES256 ) and server-side encryption with KMS keys + // (SSE-KMS) ( aws:kms ). We recommend that the bucket's default encryption uses + // the desired encryption configuration and you don't override the bucket default + // encryption in your CreateSession requests or PUT object requests. Then, new + // objects are automatically encrypted with the desired encryption settings. For + // more information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. For more information about + // the encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads]. + // + // In the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]) using the REST API, the + // encryption request headers must match the encryption settings that are specified + // in the CreateSession request. You can't override the values of the encryption + // settings ( x-amz-server-side-encryption , + // x-amz-server-side-encryption-aws-kms-key-id , + // x-amz-server-side-encryption-context , and + // x-amz-server-side-encryption-bucket-key-enabled ) that are specified in the + // CreateSession request. You don't need to explicitly specify these encryption + // settings values in Zonal endpoint API calls, and Amazon S3 will use the + // encryption settings values from the CreateSession request to protect new + // objects in the directory bucket. + // + // When you use the CLI or the Amazon Web Services SDKs, for CreateSession , the + // session token refreshes automatically to avoid service interruptions when a + // session expires. The CLI or the Amazon Web Services SDKs use the bucket's + // default encryption configuration for the CreateSession request. It's not + // supported to override the encryption settings values in the CreateSession + // request. So in the Zonal endpoint API calls (except [CopyObject]and [UploadPartCopy]), the encryption + // request headers must match the default encryption configuration of the directory + // bucket. // // [Using Server-Side Encryption]: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html + // [Specifying server-side encryption with KMS for new object uploads]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html + // [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html + // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html ServerSideEncryption types.ServerSideEncryption // By default, Amazon S3 uses the STANDARD Storage Class to store newly created @@ -533,8 +598,6 @@ type PutObjectOutput struct { // Indicates whether the uploaded object uses an S3 Bucket Key for server-side // encryption with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // The base64-encoded, 32-bit CRC32 checksum of the object. This will only be @@ -623,26 +686,17 @@ type PutObjectOutput struct { SSECustomerKeyMD5 *string // If present, indicates the Amazon Web Services KMS Encryption Context to use for - // object encryption. The value of this header is a base64-encoded UTF-8 string - // holding JSON with the encryption context key-value pairs. This value is stored - // as object metadata and automatically gets passed on to Amazon Web Services KMS - // for future GetObject or CopyObject operations on this object. - // - // This functionality is not supported for directory buckets. + // object encryption. The value of this header is a Base64-encoded string of a + // UTF-8 encoded JSON, which contains the encryption context as key-value pairs. + // This value is stored as object metadata and automatically gets passed on to + // Amazon Web Services KMS for future GetObject operations on this object. SSEKMSEncryptionContext *string - // If x-amz-server-side-encryption has a valid value of aws:kms or aws:kms:dsse , - // this header indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon - // S3 (for example, AES256 , aws:kms , aws:kms:dsse ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. + // S3. ServerSideEncryption types.ServerSideEncryption // Version ID of the object. @@ -709,6 +763,9 @@ func (c *Client) addOperationPutObjectMiddlewares(stack *middleware.Stack, optio if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -775,6 +832,18 @@ func (c *Client) addOperationPutObjectMiddlewares(stack *middleware.Stack, optio if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go index b0b50898aa..481384026d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go @@ -354,6 +354,9 @@ func (c *Client) addOperationPutObjectAclMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -417,6 +420,18 @@ func (c *Client) addOperationPutObjectAclMiddlewares(stack *middleware.Stack, op if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go index cbd9af75ef..22737391d5 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go @@ -169,6 +169,9 @@ func (c *Client) addOperationPutObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -232,6 +235,18 @@ func (c *Client) addOperationPutObjectLegalHoldMiddlewares(stack *middleware.Sta if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go index 9a737f2853..3b0501d83b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go @@ -160,6 +160,9 @@ func (c *Client) addOperationPutObjectLockConfigurationMiddlewares(stack *middle if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -223,6 +226,18 @@ func (c *Client) addOperationPutObjectLockConfigurationMiddlewares(stack *middle if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go index 00709c0774..6bb5682fca 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go @@ -176,6 +176,9 @@ func (c *Client) addOperationPutObjectRetentionMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -239,6 +242,18 @@ func (c *Client) addOperationPutObjectRetentionMiddlewares(stack *middleware.Sta if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go index 54485241db..1f637c939b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go @@ -212,6 +212,9 @@ func (c *Client) addOperationPutObjectTaggingMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -275,6 +278,18 @@ func (c *Client) addOperationPutObjectTaggingMiddlewares(stack *middleware.Stack if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go index 97b8a8ae9e..7878fb783d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go @@ -163,6 +163,9 @@ func (c *Client) addOperationPutPublicAccessBlockMiddlewares(stack *middleware.S if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -226,6 +229,18 @@ func (c *Client) addOperationPutPublicAccessBlockMiddlewares(stack *middleware.S if err = s3cust.AddExpressDefaultChecksumMiddleware(stack); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go index 6f168bf2b6..d0ed1312a4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go @@ -319,6 +319,9 @@ func (c *Client) addOperationRestoreObjectMiddlewares(stack *middleware.Stack, o if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -379,6 +382,18 @@ func (c *Client) addOperationRestoreObjectMiddlewares(stack *middleware.Stack, o if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go index 749cf14c09..27c0577c2a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go @@ -279,6 +279,9 @@ func (c *Client) addOperationSelectObjectContentMiddlewares(stack *middleware.St if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -330,6 +333,18 @@ func (c *Client) addOperationSelectObjectContentMiddlewares(stack *middleware.St if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go index a1e8078cc4..90c7bc9ee4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go @@ -77,6 +77,11 @@ import ( // session token automatically to avoid service interruptions when a session // expires. For more information about authorization, see [CreateSession]CreateSession . // +// If the object is encrypted with SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. +// // Data integrity General purpose bucket - To ensure that data is not corrupted // traversing the network, specify the Content-MD5 header in the upload part // request. Amazon S3 checks the part data against the provided MD5 value. If they @@ -118,10 +123,12 @@ import ( // // - x-amz-server-side-encryption-customer-key-MD5 // -// - Directory bucket - For directory buckets, only server-side encryption with -// Amazon S3 managed keys (SSE-S3) ( AES256 ) is supported. +// For more information, see [Using Server-Side Encryption]in the Amazon S3 User Guide. // -// For more information, see [Using Server-Side Encryption] in the Amazon S3 User Guide. +// - Directory buckets - For directory buckets, there are only two supported +// options for server-side encryption: server-side encryption with Amazon S3 +// managed keys (SSE-S3) ( AES256 ) and server-side encryption with KMS keys +// (SSE-KMS) ( aws:kms ). // // Special errors // @@ -350,8 +357,6 @@ type UploadPartOutput struct { // Indicates whether the multipart upload uses an S3 Bucket Key for server-side // encryption with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // The base64-encoded, 32-bit CRC32 checksum of the object. This will only be @@ -421,17 +426,11 @@ type UploadPartOutput struct { // This functionality is not supported for directory buckets. SSECustomerKeyMD5 *string - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon // S3 (for example, AES256 , aws:kms ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. ServerSideEncryption types.ServerSideEncryption // Metadata pertaining to the operation's result. @@ -483,6 +482,9 @@ func (c *Client) addOperationUploadPartMiddlewares(stack *middleware.Stack, opti if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -549,6 +551,18 @@ func (c *Client) addOperationUploadPartMiddlewares(stack *middleware.Stack, opti if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go index 77c77b2f93..a0b4e5eff6 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go @@ -92,6 +92,11 @@ import ( // the object to the destination. The s3express:SessionMode condition key cannot // be set to ReadOnly on the copy destination. // +// If the object is encrypted with SSE-KMS, you must also have the +// +// kms:GenerateDataKey and kms:Decrypt permissions in IAM identity-based policies +// and KMS key policies for the KMS key. +// // For example policies, see [Example bucket policies for S3 Express One Zone]and [Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone]in the Amazon S3 User Guide. // // Encryption @@ -101,8 +106,27 @@ import ( // // encryption keys with the UploadPartCopy operation, see [CopyObject]and [UploadPart]. // -// - Directory buckets - For directory buckets, only server-side encryption with -// Amazon S3 managed keys (SSE-S3) ( AES256 ) is supported. +// - Directory buckets - For directory buckets, there are only two supported +// options for server-side encryption: server-side encryption with Amazon S3 +// managed keys (SSE-S3) ( AES256 ) and server-side encryption with KMS keys +// (SSE-KMS) ( aws:kms ). For more information, see [Protecting data with server-side encryption]in the Amazon S3 User Guide. +// +// For directory buckets, when you perform a CreateMultipartUpload operation and an +// +// UploadPartCopy operation, +// +// the request headers you provide in the CreateMultipartUpload request must match +// +// the default encryption configuration of the destination bucket. +// +// S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from +// +// general purpose buckets +// +// to directory buckets, from directory buckets to general purpose buckets, or +// +// between directory buckets, through [UploadPartCopy]. In this case, Amazon S3 makes a call to +// KMS every time a copy request is made for a KMS-encrypted object. // // Special errors // @@ -155,6 +179,8 @@ import ( // [ListMultipartUploads]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html // // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html +// [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html +// [Protecting data with server-side encryption]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html func (c *Client) UploadPartCopy(ctx context.Context, params *UploadPartCopyInput, optFns ...func(*Options)) (*UploadPartCopyOutput, error) { if params == nil { params = &UploadPartCopyInput{} @@ -421,8 +447,6 @@ type UploadPartCopyOutput struct { // Indicates whether the multipart upload uses an S3 Bucket Key for server-side // encryption with Key Management Service (KMS) keys (SSE-KMS). - // - // This functionality is not supported for directory buckets. BucketKeyEnabled *bool // Container for all response elements. @@ -455,17 +479,11 @@ type UploadPartCopyOutput struct { // This functionality is not supported for directory buckets. SSECustomerKeyMD5 *string - // If present, indicates the ID of the Key Management Service (KMS) symmetric - // encryption customer managed key that was used for the object. - // - // This functionality is not supported for directory buckets. + // If present, indicates the ID of the KMS key that was used for object encryption. SSEKMSKeyId *string // The server-side encryption algorithm used when you store this object in Amazon // S3 (for example, AES256 , aws:kms ). - // - // For directory buckets, only server-side encryption with Amazon S3 managed keys - // (SSE-S3) ( AES256 ) is supported. ServerSideEncryption types.ServerSideEncryption // Metadata pertaining to the operation's result. @@ -517,6 +535,9 @@ func (c *Client) addOperationUploadPartCopyMiddlewares(stack *middleware.Stack, if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -577,6 +598,18 @@ func (c *Client) addOperationUploadPartCopyMiddlewares(stack *middleware.Stack, if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go index 5f065ee791..f1880f5822 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go @@ -382,6 +382,9 @@ func (c *Client) addOperationWriteGetObjectResponseMiddlewares(stack *middleware if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -442,6 +445,18 @@ func (c *Client) addOperationWriteGetObjectResponseMiddlewares(stack *middleware if err = addSerializeImmutableHostnameBucketMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/auth.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/auth.go index 3a7bc64afe..6faedcc0b3 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/auth.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/auth.go @@ -8,7 +8,9 @@ import ( awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" smithy "github.com/aws/smithy-go" smithyauth "github.com/aws/smithy-go/auth" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -179,6 +181,9 @@ func (*resolveAuthSchemeMiddleware) ID() string { func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveAuthScheme") + defer span.End() + params := bindAuthResolverParams(ctx, m.operation, getOperationInput(ctx), m.options) options, err := m.options.AuthSchemeResolver.ResolveAuthSchemes(ctx, params) if err != nil { @@ -191,6 +196,9 @@ func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in mid } ctx = setResolvedAuthScheme(ctx, scheme) + + span.SetProperty("auth.scheme_id", scheme.Scheme.SchemeID()) + span.End() return next.HandleFinalize(ctx, in) } @@ -250,7 +258,10 @@ func (*getIdentityMiddleware) ID() string { func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { - rscheme := getResolvedAuthScheme(ctx) + innerCtx, span := tracing.StartSpan(ctx, "GetIdentity") + defer span.End() + + rscheme := getResolvedAuthScheme(innerCtx) if rscheme == nil { return out, metadata, fmt.Errorf("no resolved auth scheme") } @@ -260,12 +271,20 @@ func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no identity resolver") } - identity, err := resolver.GetIdentity(ctx, rscheme.IdentityProperties) + identity, err := timeOperationMetric(ctx, "client.call.resolve_identity_duration", + func() (smithyauth.Identity, error) { + return resolver.GetIdentity(innerCtx, rscheme.IdentityProperties) + }, + func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) if err != nil { return out, metadata, fmt.Errorf("get identity: %w", err) } ctx = setIdentity(ctx, identity) + + span.End() return next.HandleFinalize(ctx, in) } @@ -281,6 +300,7 @@ func getIdentity(ctx context.Context) smithyauth.Identity { } type signRequestMiddleware struct { + options Options } func (*signRequestMiddleware) ID() string { @@ -290,6 +310,9 @@ func (*signRequestMiddleware) ID() string { func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "SignRequest") + defer span.End() + req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unexpected transport type %T", in.Request) @@ -310,9 +333,15 @@ func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no signer") } - if err := signer.SignRequest(ctx, req, identity, rscheme.SignerProperties); err != nil { + _, err = timeOperationMetric(ctx, "client.call.signing_duration", func() (any, error) { + return nil, signer.SignRequest(ctx, req, identity, rscheme.SignerProperties) + }, func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) + if err != nil { return out, metadata, fmt.Errorf("sign request: %w", err) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go index 62972c320f..bc6b9f4627 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/deserializers.go @@ -20,6 +20,7 @@ import ( "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" smithytime "github.com/aws/smithy-go/time" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "io" "io/ioutil" @@ -51,6 +52,10 @@ func (m *awsRestxml_deserializeOpAbortMultipartUpload) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -67,6 +72,7 @@ func (m *awsRestxml_deserializeOpAbortMultipartUpload) HandleDeserialize(ctx con return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -141,6 +147,10 @@ func (m *awsRestxml_deserializeOpCompleteMultipartUpload) HandleDeserialize(ctx return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -185,6 +195,7 @@ func (m *awsRestxml_deserializeOpCompleteMultipartUpload) HandleDeserialize(ctx } } + span.End() return out, metadata, err } @@ -424,6 +435,10 @@ func (m *awsRestxml_deserializeOpCopyObject) HandleDeserialize(ctx context.Conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -468,6 +483,7 @@ func (m *awsRestxml_deserializeOpCopyObject) HandleDeserialize(ctx context.Conte } } + span.End() return out, metadata, err } @@ -632,6 +648,10 @@ func (m *awsRestxml_deserializeOpCreateBucket) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -648,6 +668,7 @@ func (m *awsRestxml_deserializeOpCreateBucket) HandleDeserialize(ctx context.Con return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -725,6 +746,10 @@ func (m *awsRestxml_deserializeOpCreateMultipartUpload) HandleDeserialize(ctx co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -769,6 +794,7 @@ func (m *awsRestxml_deserializeOpCreateMultipartUpload) HandleDeserialize(ctx co } } + span.End() return out, metadata, err } @@ -967,6 +993,10 @@ func (m *awsRestxml_deserializeOpCreateSession) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -978,6 +1008,11 @@ func (m *awsRestxml_deserializeOpCreateSession) HandleDeserialize(ctx context.Co output := &CreateSessionOutput{} out.Result = output + err = awsRestxml_deserializeOpHttpBindingsCreateSessionOutput(output, response) + if err != nil { + return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} + } + var buff [1024]byte ringBuffer := smithyio.NewRingBuffer(buff[:]) body := io.TeeReader(response.Body, ringBuffer) @@ -1006,6 +1041,7 @@ func (m *awsRestxml_deserializeOpCreateSession) HandleDeserialize(ctx context.Co } } + span.End() return out, metadata, err } @@ -1052,6 +1088,37 @@ func awsRestxml_deserializeOpErrorCreateSession(response *smithyhttp.Response, m } } +func awsRestxml_deserializeOpHttpBindingsCreateSessionOutput(v *CreateSessionOutput, response *smithyhttp.Response) error { + if v == nil { + return fmt.Errorf("unsupported deserialization for nil %T", v) + } + + if headerValues := response.Header.Values("x-amz-server-side-encryption-bucket-key-enabled"); len(headerValues) != 0 { + headerValues[0] = strings.TrimSpace(headerValues[0]) + vv, err := strconv.ParseBool(headerValues[0]) + if err != nil { + return err + } + v.BucketKeyEnabled = ptr.Bool(vv) + } + + if headerValues := response.Header.Values("x-amz-server-side-encryption"); len(headerValues) != 0 { + headerValues[0] = strings.TrimSpace(headerValues[0]) + v.ServerSideEncryption = types.ServerSideEncryption(headerValues[0]) + } + + if headerValues := response.Header.Values("x-amz-server-side-encryption-context"); len(headerValues) != 0 { + headerValues[0] = strings.TrimSpace(headerValues[0]) + v.SSEKMSEncryptionContext = ptr.String(headerValues[0]) + } + + if headerValues := response.Header.Values("x-amz-server-side-encryption-aws-kms-key-id"); len(headerValues) != 0 { + headerValues[0] = strings.TrimSpace(headerValues[0]) + v.SSEKMSKeyId = ptr.String(headerValues[0]) + } + + return nil +} func awsRestxml_deserializeOpDocumentCreateSessionOutput(v **CreateSessionOutput, decoder smithyxml.NodeDecoder) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) @@ -1109,6 +1176,10 @@ func (m *awsRestxml_deserializeOpDeleteBucket) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1126,6 +1197,7 @@ func (m *awsRestxml_deserializeOpDeleteBucket) HandleDeserialize(ctx context.Con } } + span.End() return out, metadata, err } @@ -1184,6 +1256,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketAnalyticsConfiguration) HandleDeser return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1201,6 +1277,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketAnalyticsConfiguration) HandleDeser } } + span.End() return out, metadata, err } @@ -1259,6 +1336,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketCors) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1276,6 +1357,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketCors) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -1334,6 +1416,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketEncryption) HandleDeserialize(ctx c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1351,6 +1437,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketEncryption) HandleDeserialize(ctx c } } + span.End() return out, metadata, err } @@ -1409,6 +1496,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketIntelligentTieringConfiguration) Ha return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1426,6 +1517,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketIntelligentTieringConfiguration) Ha } } + span.End() return out, metadata, err } @@ -1484,6 +1576,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketInventoryConfiguration) HandleDeser return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1501,6 +1597,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketInventoryConfiguration) HandleDeser } } + span.End() return out, metadata, err } @@ -1559,6 +1656,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketLifecycle) HandleDeserialize(ctx co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1576,6 +1677,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketLifecycle) HandleDeserialize(ctx co } } + span.End() return out, metadata, err } @@ -1634,6 +1736,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketMetricsConfiguration) HandleDeseria return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1651,6 +1757,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketMetricsConfiguration) HandleDeseria } } + span.End() return out, metadata, err } @@ -1709,6 +1816,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketOwnershipControls) HandleDeserializ return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1726,6 +1837,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketOwnershipControls) HandleDeserializ } } + span.End() return out, metadata, err } @@ -1784,6 +1896,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketPolicy) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1801,6 +1917,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketPolicy) HandleDeserialize(ctx conte } } + span.End() return out, metadata, err } @@ -1859,6 +1976,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketReplication) HandleDeserialize(ctx return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1876,6 +1997,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketReplication) HandleDeserialize(ctx } } + span.End() return out, metadata, err } @@ -1934,6 +2056,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketTagging) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -1951,6 +2077,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketTagging) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -2009,6 +2136,10 @@ func (m *awsRestxml_deserializeOpDeleteBucketWebsite) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2026,6 +2157,7 @@ func (m *awsRestxml_deserializeOpDeleteBucketWebsite) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -2084,6 +2216,10 @@ func (m *awsRestxml_deserializeOpDeleteObject) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2100,6 +2236,7 @@ func (m *awsRestxml_deserializeOpDeleteObject) HandleDeserialize(ctx context.Con return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -2185,6 +2322,10 @@ func (m *awsRestxml_deserializeOpDeleteObjects) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2229,6 +2370,7 @@ func (m *awsRestxml_deserializeOpDeleteObjects) HandleDeserialize(ctx context.Co } } + span.End() return out, metadata, err } @@ -2347,6 +2489,10 @@ func (m *awsRestxml_deserializeOpDeleteObjectTagging) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2363,6 +2509,7 @@ func (m *awsRestxml_deserializeOpDeleteObjectTagging) HandleDeserialize(ctx cont return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -2434,6 +2581,10 @@ func (m *awsRestxml_deserializeOpDeletePublicAccessBlock) HandleDeserialize(ctx return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2451,6 +2602,7 @@ func (m *awsRestxml_deserializeOpDeletePublicAccessBlock) HandleDeserialize(ctx } } + span.End() return out, metadata, err } @@ -2509,6 +2661,10 @@ func (m *awsRestxml_deserializeOpGetBucketAccelerateConfiguration) HandleDeseria return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2553,6 +2709,7 @@ func (m *awsRestxml_deserializeOpGetBucketAccelerateConfiguration) HandleDeseria } } + span.End() return out, metadata, err } @@ -2672,6 +2829,10 @@ func (m *awsRestxml_deserializeOpGetBucketAcl) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2711,6 +2872,7 @@ func (m *awsRestxml_deserializeOpGetBucketAcl) HandleDeserialize(ctx context.Con } } + span.End() return out, metadata, err } @@ -2817,6 +2979,10 @@ func (m *awsRestxml_deserializeOpGetBucketAnalyticsConfiguration) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2856,6 +3022,7 @@ func (m *awsRestxml_deserializeOpGetBucketAnalyticsConfiguration) HandleDeserial } } + span.End() return out, metadata, err } @@ -2956,6 +3123,10 @@ func (m *awsRestxml_deserializeOpGetBucketCors) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -2995,6 +3166,7 @@ func (m *awsRestxml_deserializeOpGetBucketCors) HandleDeserialize(ctx context.Co } } + span.End() return out, metadata, err } @@ -3095,6 +3267,10 @@ func (m *awsRestxml_deserializeOpGetBucketEncryption) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3134,6 +3310,7 @@ func (m *awsRestxml_deserializeOpGetBucketEncryption) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -3234,6 +3411,10 @@ func (m *awsRestxml_deserializeOpGetBucketIntelligentTieringConfiguration) Handl return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3273,6 +3454,7 @@ func (m *awsRestxml_deserializeOpGetBucketIntelligentTieringConfiguration) Handl } } + span.End() return out, metadata, err } @@ -3373,6 +3555,10 @@ func (m *awsRestxml_deserializeOpGetBucketInventoryConfiguration) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3412,6 +3598,7 @@ func (m *awsRestxml_deserializeOpGetBucketInventoryConfiguration) HandleDeserial } } + span.End() return out, metadata, err } @@ -3512,6 +3699,10 @@ func (m *awsRestxml_deserializeOpGetBucketLifecycleConfiguration) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3551,6 +3742,7 @@ func (m *awsRestxml_deserializeOpGetBucketLifecycleConfiguration) HandleDeserial } } + span.End() return out, metadata, err } @@ -3651,6 +3843,10 @@ func (m *awsRestxml_deserializeOpGetBucketLocation) HandleDeserialize(ctx contex return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3690,6 +3886,7 @@ func (m *awsRestxml_deserializeOpGetBucketLocation) HandleDeserialize(ctx contex } } + span.End() return out, metadata, err } @@ -3797,6 +3994,10 @@ func (m *awsRestxml_deserializeOpGetBucketLogging) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3836,6 +4037,7 @@ func (m *awsRestxml_deserializeOpGetBucketLogging) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -3936,6 +4138,10 @@ func (m *awsRestxml_deserializeOpGetBucketMetricsConfiguration) HandleDeserializ return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -3975,6 +4181,7 @@ func (m *awsRestxml_deserializeOpGetBucketMetricsConfiguration) HandleDeserializ } } + span.End() return out, metadata, err } @@ -4075,6 +4282,10 @@ func (m *awsRestxml_deserializeOpGetBucketNotificationConfiguration) HandleDeser return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4114,6 +4325,7 @@ func (m *awsRestxml_deserializeOpGetBucketNotificationConfiguration) HandleDeser } } + span.End() return out, metadata, err } @@ -4232,6 +4444,10 @@ func (m *awsRestxml_deserializeOpGetBucketOwnershipControls) HandleDeserialize(c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4271,6 +4487,7 @@ func (m *awsRestxml_deserializeOpGetBucketOwnershipControls) HandleDeserialize(c } } + span.End() return out, metadata, err } @@ -4371,6 +4588,10 @@ func (m *awsRestxml_deserializeOpGetBucketPolicy) HandleDeserialize(ctx context. return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4387,6 +4608,7 @@ func (m *awsRestxml_deserializeOpGetBucketPolicy) HandleDeserialize(ctx context. return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to deserialize response payload, %w", err)} } + span.End() return out, metadata, err } @@ -4466,6 +4688,10 @@ func (m *awsRestxml_deserializeOpGetBucketPolicyStatus) HandleDeserialize(ctx co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4505,6 +4731,7 @@ func (m *awsRestxml_deserializeOpGetBucketPolicyStatus) HandleDeserialize(ctx co } } + span.End() return out, metadata, err } @@ -4605,6 +4832,10 @@ func (m *awsRestxml_deserializeOpGetBucketReplication) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4644,6 +4875,7 @@ func (m *awsRestxml_deserializeOpGetBucketReplication) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -4744,6 +4976,10 @@ func (m *awsRestxml_deserializeOpGetBucketRequestPayment) HandleDeserialize(ctx return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4783,6 +5019,7 @@ func (m *awsRestxml_deserializeOpGetBucketRequestPayment) HandleDeserialize(ctx } } + span.End() return out, metadata, err } @@ -4890,6 +5127,10 @@ func (m *awsRestxml_deserializeOpGetBucketTagging) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -4929,6 +5170,7 @@ func (m *awsRestxml_deserializeOpGetBucketTagging) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -5029,6 +5271,10 @@ func (m *awsRestxml_deserializeOpGetBucketVersioning) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -5068,6 +5314,7 @@ func (m *awsRestxml_deserializeOpGetBucketVersioning) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -5188,6 +5435,10 @@ func (m *awsRestxml_deserializeOpGetBucketWebsite) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -5227,6 +5478,7 @@ func (m *awsRestxml_deserializeOpGetBucketWebsite) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -5345,6 +5597,10 @@ func (m *awsRestxml_deserializeOpGetObject) HandleDeserialize(ctx context.Contex return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -5366,6 +5622,7 @@ func (m *awsRestxml_deserializeOpGetObject) HandleDeserialize(ctx context.Contex return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to deserialize response payload, %w", err)} } + span.End() return out, metadata, err } @@ -5666,6 +5923,10 @@ func (m *awsRestxml_deserializeOpGetObjectAcl) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -5710,6 +5971,7 @@ func (m *awsRestxml_deserializeOpGetObjectAcl) HandleDeserialize(ctx context.Con } } + span.End() return out, metadata, err } @@ -5831,6 +6093,10 @@ func (m *awsRestxml_deserializeOpGetObjectAttributes) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -5875,6 +6141,7 @@ func (m *awsRestxml_deserializeOpGetObjectAttributes) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -6062,6 +6329,10 @@ func (m *awsRestxml_deserializeOpGetObjectLegalHold) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6101,6 +6372,7 @@ func (m *awsRestxml_deserializeOpGetObjectLegalHold) HandleDeserialize(ctx conte } } + span.End() return out, metadata, err } @@ -6201,6 +6473,10 @@ func (m *awsRestxml_deserializeOpGetObjectLockConfiguration) HandleDeserialize(c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6240,6 +6516,7 @@ func (m *awsRestxml_deserializeOpGetObjectLockConfiguration) HandleDeserialize(c } } + span.End() return out, metadata, err } @@ -6340,6 +6617,10 @@ func (m *awsRestxml_deserializeOpGetObjectRetention) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6379,6 +6660,7 @@ func (m *awsRestxml_deserializeOpGetObjectRetention) HandleDeserialize(ctx conte } } + span.End() return out, metadata, err } @@ -6479,6 +6761,10 @@ func (m *awsRestxml_deserializeOpGetObjectTagging) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6523,6 +6809,7 @@ func (m *awsRestxml_deserializeOpGetObjectTagging) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -6635,6 +6922,10 @@ func (m *awsRestxml_deserializeOpGetObjectTorrent) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6656,6 +6947,7 @@ func (m *awsRestxml_deserializeOpGetObjectTorrent) HandleDeserialize(ctx context return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to deserialize response payload, %w", err)} } + span.End() return out, metadata, err } @@ -6734,6 +7026,10 @@ func (m *awsRestxml_deserializeOpGetPublicAccessBlock) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6773,6 +7069,7 @@ func (m *awsRestxml_deserializeOpGetPublicAccessBlock) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -6873,6 +7170,10 @@ func (m *awsRestxml_deserializeOpHeadBucket) HandleDeserialize(ctx context.Conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6889,6 +7190,7 @@ func (m *awsRestxml_deserializeOpHeadBucket) HandleDeserialize(ctx context.Conte return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -6982,6 +7284,10 @@ func (m *awsRestxml_deserializeOpHeadObject) HandleDeserialize(ctx context.Conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -6998,6 +7304,7 @@ func (m *awsRestxml_deserializeOpHeadObject) HandleDeserialize(ctx context.Conte return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -7279,6 +7586,10 @@ func (m *awsRestxml_deserializeOpListBucketAnalyticsConfigurations) HandleDeseri return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -7318,6 +7629,7 @@ func (m *awsRestxml_deserializeOpListBucketAnalyticsConfigurations) HandleDeseri } } + span.End() return out, metadata, err } @@ -7460,6 +7772,10 @@ func (m *awsRestxml_deserializeOpListBucketIntelligentTieringConfigurations) Han return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -7499,6 +7815,7 @@ func (m *awsRestxml_deserializeOpListBucketIntelligentTieringConfigurations) Han } } + span.End() return out, metadata, err } @@ -7641,6 +7958,10 @@ func (m *awsRestxml_deserializeOpListBucketInventoryConfigurations) HandleDeseri return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -7680,6 +8001,7 @@ func (m *awsRestxml_deserializeOpListBucketInventoryConfigurations) HandleDeseri } } + span.End() return out, metadata, err } @@ -7822,6 +8144,10 @@ func (m *awsRestxml_deserializeOpListBucketMetricsConfigurations) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -7861,6 +8187,7 @@ func (m *awsRestxml_deserializeOpListBucketMetricsConfigurations) HandleDeserial } } + span.End() return out, metadata, err } @@ -8003,6 +8330,10 @@ func (m *awsRestxml_deserializeOpListBuckets) HandleDeserialize(ctx context.Cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -8042,6 +8373,7 @@ func (m *awsRestxml_deserializeOpListBuckets) HandleDeserialize(ctx context.Cont } } + span.End() return out, metadata, err } @@ -8161,6 +8493,10 @@ func (m *awsRestxml_deserializeOpListDirectoryBuckets) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -8200,6 +8536,7 @@ func (m *awsRestxml_deserializeOpListDirectoryBuckets) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -8313,6 +8650,10 @@ func (m *awsRestxml_deserializeOpListMultipartUploads) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -8357,6 +8698,7 @@ func (m *awsRestxml_deserializeOpListMultipartUploads) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -8612,6 +8954,10 @@ func (m *awsRestxml_deserializeOpListObjects) HandleDeserialize(ctx context.Cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -8656,6 +9002,7 @@ func (m *awsRestxml_deserializeOpListObjects) HandleDeserialize(ctx context.Cont } } + span.End() return out, metadata, err } @@ -8888,6 +9235,10 @@ func (m *awsRestxml_deserializeOpListObjectsV2) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -8932,6 +9283,7 @@ func (m *awsRestxml_deserializeOpListObjectsV2) HandleDeserialize(ctx context.Co } } + span.End() return out, metadata, err } @@ -9194,6 +9546,10 @@ func (m *awsRestxml_deserializeOpListObjectVersions) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -9238,6 +9594,7 @@ func (m *awsRestxml_deserializeOpListObjectVersions) HandleDeserialize(ctx conte } } + span.End() return out, metadata, err } @@ -9499,6 +9856,10 @@ func (m *awsRestxml_deserializeOpListParts) HandleDeserialize(ctx context.Contex return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -9543,6 +9904,7 @@ func (m *awsRestxml_deserializeOpListParts) HandleDeserialize(ctx context.Contex } } + span.End() return out, metadata, err } @@ -9805,6 +10167,10 @@ func (m *awsRestxml_deserializeOpPutBucketAccelerateConfiguration) HandleDeseria return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -9822,6 +10188,7 @@ func (m *awsRestxml_deserializeOpPutBucketAccelerateConfiguration) HandleDeseria } } + span.End() return out, metadata, err } @@ -9880,6 +10247,10 @@ func (m *awsRestxml_deserializeOpPutBucketAcl) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -9897,6 +10268,7 @@ func (m *awsRestxml_deserializeOpPutBucketAcl) HandleDeserialize(ctx context.Con } } + span.End() return out, metadata, err } @@ -9955,6 +10327,10 @@ func (m *awsRestxml_deserializeOpPutBucketAnalyticsConfiguration) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -9972,6 +10348,7 @@ func (m *awsRestxml_deserializeOpPutBucketAnalyticsConfiguration) HandleDeserial } } + span.End() return out, metadata, err } @@ -10030,6 +10407,10 @@ func (m *awsRestxml_deserializeOpPutBucketCors) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10047,6 +10428,7 @@ func (m *awsRestxml_deserializeOpPutBucketCors) HandleDeserialize(ctx context.Co } } + span.End() return out, metadata, err } @@ -10105,6 +10487,10 @@ func (m *awsRestxml_deserializeOpPutBucketEncryption) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10122,6 +10508,7 @@ func (m *awsRestxml_deserializeOpPutBucketEncryption) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -10180,6 +10567,10 @@ func (m *awsRestxml_deserializeOpPutBucketIntelligentTieringConfiguration) Handl return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10197,6 +10588,7 @@ func (m *awsRestxml_deserializeOpPutBucketIntelligentTieringConfiguration) Handl } } + span.End() return out, metadata, err } @@ -10255,6 +10647,10 @@ func (m *awsRestxml_deserializeOpPutBucketInventoryConfiguration) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10272,6 +10668,7 @@ func (m *awsRestxml_deserializeOpPutBucketInventoryConfiguration) HandleDeserial } } + span.End() return out, metadata, err } @@ -10330,6 +10727,10 @@ func (m *awsRestxml_deserializeOpPutBucketLifecycleConfiguration) HandleDeserial return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10347,6 +10748,7 @@ func (m *awsRestxml_deserializeOpPutBucketLifecycleConfiguration) HandleDeserial } } + span.End() return out, metadata, err } @@ -10405,6 +10807,10 @@ func (m *awsRestxml_deserializeOpPutBucketLogging) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10422,6 +10828,7 @@ func (m *awsRestxml_deserializeOpPutBucketLogging) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -10480,6 +10887,10 @@ func (m *awsRestxml_deserializeOpPutBucketMetricsConfiguration) HandleDeserializ return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10497,6 +10908,7 @@ func (m *awsRestxml_deserializeOpPutBucketMetricsConfiguration) HandleDeserializ } } + span.End() return out, metadata, err } @@ -10555,6 +10967,10 @@ func (m *awsRestxml_deserializeOpPutBucketNotificationConfiguration) HandleDeser return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10572,6 +10988,7 @@ func (m *awsRestxml_deserializeOpPutBucketNotificationConfiguration) HandleDeser } } + span.End() return out, metadata, err } @@ -10630,6 +11047,10 @@ func (m *awsRestxml_deserializeOpPutBucketOwnershipControls) HandleDeserialize(c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10647,6 +11068,7 @@ func (m *awsRestxml_deserializeOpPutBucketOwnershipControls) HandleDeserialize(c } } + span.End() return out, metadata, err } @@ -10705,6 +11127,10 @@ func (m *awsRestxml_deserializeOpPutBucketPolicy) HandleDeserialize(ctx context. return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10722,6 +11148,7 @@ func (m *awsRestxml_deserializeOpPutBucketPolicy) HandleDeserialize(ctx context. } } + span.End() return out, metadata, err } @@ -10780,6 +11207,10 @@ func (m *awsRestxml_deserializeOpPutBucketReplication) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10797,6 +11228,7 @@ func (m *awsRestxml_deserializeOpPutBucketReplication) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -10855,6 +11287,10 @@ func (m *awsRestxml_deserializeOpPutBucketRequestPayment) HandleDeserialize(ctx return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10872,6 +11308,7 @@ func (m *awsRestxml_deserializeOpPutBucketRequestPayment) HandleDeserialize(ctx } } + span.End() return out, metadata, err } @@ -10930,6 +11367,10 @@ func (m *awsRestxml_deserializeOpPutBucketTagging) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -10947,6 +11388,7 @@ func (m *awsRestxml_deserializeOpPutBucketTagging) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -11005,6 +11447,10 @@ func (m *awsRestxml_deserializeOpPutBucketVersioning) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11022,6 +11468,7 @@ func (m *awsRestxml_deserializeOpPutBucketVersioning) HandleDeserialize(ctx cont } } + span.End() return out, metadata, err } @@ -11080,6 +11527,10 @@ func (m *awsRestxml_deserializeOpPutBucketWebsite) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11097,6 +11548,7 @@ func (m *awsRestxml_deserializeOpPutBucketWebsite) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -11155,6 +11607,10 @@ func (m *awsRestxml_deserializeOpPutObject) HandleDeserialize(ctx context.Contex return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11171,6 +11627,7 @@ func (m *awsRestxml_deserializeOpPutObject) HandleDeserialize(ctx context.Contex return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11311,6 +11768,10 @@ func (m *awsRestxml_deserializeOpPutObjectAcl) HandleDeserialize(ctx context.Con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11327,6 +11788,7 @@ func (m *awsRestxml_deserializeOpPutObjectAcl) HandleDeserialize(ctx context.Con return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11401,6 +11863,10 @@ func (m *awsRestxml_deserializeOpPutObjectLegalHold) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11417,6 +11883,7 @@ func (m *awsRestxml_deserializeOpPutObjectLegalHold) HandleDeserialize(ctx conte return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11488,6 +11955,10 @@ func (m *awsRestxml_deserializeOpPutObjectLockConfiguration) HandleDeserialize(c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11504,6 +11975,7 @@ func (m *awsRestxml_deserializeOpPutObjectLockConfiguration) HandleDeserialize(c return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11575,6 +12047,10 @@ func (m *awsRestxml_deserializeOpPutObjectRetention) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11591,6 +12067,7 @@ func (m *awsRestxml_deserializeOpPutObjectRetention) HandleDeserialize(ctx conte return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11662,6 +12139,10 @@ func (m *awsRestxml_deserializeOpPutObjectTagging) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11678,6 +12159,7 @@ func (m *awsRestxml_deserializeOpPutObjectTagging) HandleDeserialize(ctx context return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11749,6 +12231,10 @@ func (m *awsRestxml_deserializeOpPutPublicAccessBlock) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11766,6 +12252,7 @@ func (m *awsRestxml_deserializeOpPutPublicAccessBlock) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -11824,6 +12311,10 @@ func (m *awsRestxml_deserializeOpRestoreObject) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11840,6 +12331,7 @@ func (m *awsRestxml_deserializeOpRestoreObject) HandleDeserialize(ctx context.Co return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -11919,6 +12411,10 @@ func (m *awsRestxml_deserializeOpSelectObjectContent) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -11930,6 +12426,7 @@ func (m *awsRestxml_deserializeOpSelectObjectContent) HandleDeserialize(ctx cont output := &SelectObjectContentOutput{} out.Result = output + span.End() return out, metadata, err } @@ -11988,6 +12485,10 @@ func (m *awsRestxml_deserializeOpUploadPart) HandleDeserialize(ctx context.Conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -12004,6 +12505,7 @@ func (m *awsRestxml_deserializeOpUploadPart) HandleDeserialize(ctx context.Conte return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("failed to decode response with invalid Http bindings, %w", err)} } + span.End() return out, metadata, err } @@ -12129,6 +12631,10 @@ func (m *awsRestxml_deserializeOpUploadPartCopy) HandleDeserialize(ctx context.C return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -12173,6 +12679,7 @@ func (m *awsRestxml_deserializeOpUploadPartCopy) HandleDeserialize(ctx context.C } } + span.End() return out, metadata, err } @@ -12319,6 +12826,10 @@ func (m *awsRestxml_deserializeOpWriteGetObjectResponse) HandleDeserialize(ctx c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -12336,6 +12847,7 @@ func (m *awsRestxml_deserializeOpWriteGetObjectResponse) HandleDeserialize(ctx c } } + span.End() return out, metadata, err } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go index 4bc53cb91d..361e4201b9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go @@ -20,6 +20,7 @@ import ( "github.com/aws/smithy-go/endpoints/private/rulesfn" "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" "net/url" @@ -5800,14 +5801,13 @@ func (*resolveEndpointV2Middleware) ID() string { func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveEndpoint") + defer span.End() + if awsmiddleware.GetRequiresLegacyEndpoints(ctx) { return next.HandleFinalize(ctx, in) } - if err := checkAccountID(getIdentity(ctx), m.options.AccountIDEndpointMode); err != nil { - return out, metadata, fmt.Errorf("invalid accountID set: %w", err) - } - req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) @@ -5818,11 +5818,16 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid } params := bindEndpointParams(ctx, getOperationInput(ctx), m.options) - endpt, err := m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + endpt, err := timeOperationMetric(ctx, "client.call.resolve_endpoint_duration", + func() (smithyendpoints.Endpoint, error) { + return m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + }) if err != nil { return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err) } + span.SetProperty("client.call.resolved_endpoint", endpt.URI.String()) + if endpt.URI.RawPath == "" && req.URL.RawPath != "" { endpt.URI.RawPath = endpt.URI.Path } @@ -5847,5 +5852,6 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid backend := s3cust.GetPropertiesBackend(&endpt.Properties) ctx = internalcontext.SetS3Backend(ctx, backend) + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go index 6860d6f751..0ee4d16482 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go @@ -3,4 +3,4 @@ package s3 // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.61.2" +const goModuleVersion = "1.63.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/options.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/options.go index d22a058f19..8c67e4c621 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/options.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/options.go @@ -12,7 +12,9 @@ import ( s3cust "github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations" smithyauth "github.com/aws/smithy-go/auth" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" ) @@ -27,9 +29,6 @@ type Options struct { // modify this list for per operation behavior. APIOptions []func(*middleware.Stack) error - // Indicates how aws account ID is applied in endpoint2.0 routing - AccountIDEndpointMode aws.AccountIDEndpointMode - // The optional application specific identifier appended to the User-Agent header. AppID string @@ -87,6 +86,9 @@ type Options struct { // The logger writer interface to write logging messages to. Logger logging.Logger + // The client meter provider. + MeterProvider metrics.MeterProvider + // The region to send requests to. (Required) Region string @@ -121,6 +123,9 @@ type Options struct { // within your applications. RuntimeEnvironment aws.RuntimeEnvironment + // The client tracer provider. + TracerProvider tracing.TracerProvider + // Allows you to enable arn region support for the service. UseARNRegion bool diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go index 9dd09cd6e6..7f7bdecb68 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/serializers.go @@ -12,6 +12,7 @@ import ( smithyxml "github.com/aws/smithy-go/encoding/xml" "github.com/aws/smithy-go/middleware" smithytime "github.com/aws/smithy-go/time" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" "strconv" @@ -28,6 +29,10 @@ func (*awsRestxml_serializeOpAbortMultipartUpload) ID() string { func (m *awsRestxml_serializeOpAbortMultipartUpload) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -64,6 +69,8 @@ func (m *awsRestxml_serializeOpAbortMultipartUpload) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsAbortMultipartUploadInput(v *AbortMultipartUploadInput, encoder *httpbinding.Encoder) error { @@ -107,6 +114,10 @@ func (*awsRestxml_serializeOpCompleteMultipartUpload) ID() string { func (m *awsRestxml_serializeOpCompleteMultipartUpload) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -167,6 +178,8 @@ func (m *awsRestxml_serializeOpCompleteMultipartUpload) HandleSerialize(ctx cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsCompleteMultipartUploadInput(v *CompleteMultipartUploadInput, encoder *httpbinding.Encoder) error { @@ -250,6 +263,10 @@ func (*awsRestxml_serializeOpCopyObject) ID() string { func (m *awsRestxml_serializeOpCopyObject) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -286,6 +303,8 @@ func (m *awsRestxml_serializeOpCopyObject) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsCopyObjectInput(v *CopyObjectInput, encoder *httpbinding.Encoder) error { @@ -514,6 +533,10 @@ func (*awsRestxml_serializeOpCreateBucket) ID() string { func (m *awsRestxml_serializeOpCreateBucket) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -574,6 +597,8 @@ func (m *awsRestxml_serializeOpCreateBucket) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsCreateBucketInput(v *CreateBucketInput, encoder *httpbinding.Encoder) error { @@ -634,6 +659,10 @@ func (*awsRestxml_serializeOpCreateMultipartUpload) ID() string { func (m *awsRestxml_serializeOpCreateMultipartUpload) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -670,6 +699,8 @@ func (m *awsRestxml_serializeOpCreateMultipartUpload) HandleSerialize(ctx contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsCreateMultipartUploadInput(v *CreateMultipartUploadInput, encoder *httpbinding.Encoder) error { @@ -843,6 +874,10 @@ func (*awsRestxml_serializeOpCreateSession) ID() string { func (m *awsRestxml_serializeOpCreateSession) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -879,6 +914,8 @@ func (m *awsRestxml_serializeOpCreateSession) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsCreateSessionInput(v *CreateSessionInput, encoder *httpbinding.Encoder) error { @@ -886,11 +923,31 @@ func awsRestxml_serializeOpHttpBindingsCreateSessionInput(v *CreateSessionInput, return fmt.Errorf("unsupported serialization of nil %T", v) } + if v.BucketKeyEnabled != nil { + locationName := "X-Amz-Server-Side-Encryption-Bucket-Key-Enabled" + encoder.SetHeader(locationName).Boolean(*v.BucketKeyEnabled) + } + + if len(v.ServerSideEncryption) > 0 { + locationName := "X-Amz-Server-Side-Encryption" + encoder.SetHeader(locationName).String(string(v.ServerSideEncryption)) + } + if len(v.SessionMode) > 0 { locationName := "X-Amz-Create-Session-Mode" encoder.SetHeader(locationName).String(string(v.SessionMode)) } + if v.SSEKMSEncryptionContext != nil && len(*v.SSEKMSEncryptionContext) > 0 { + locationName := "X-Amz-Server-Side-Encryption-Context" + encoder.SetHeader(locationName).String(*v.SSEKMSEncryptionContext) + } + + if v.SSEKMSKeyId != nil && len(*v.SSEKMSKeyId) > 0 { + locationName := "X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id" + encoder.SetHeader(locationName).String(*v.SSEKMSKeyId) + } + return nil } @@ -904,6 +961,10 @@ func (*awsRestxml_serializeOpDeleteBucket) ID() string { func (m *awsRestxml_serializeOpDeleteBucket) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -940,6 +1001,8 @@ func (m *awsRestxml_serializeOpDeleteBucket) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketInput(v *DeleteBucketInput, encoder *httpbinding.Encoder) error { @@ -965,6 +1028,10 @@ func (*awsRestxml_serializeOpDeleteBucketAnalyticsConfiguration) ID() string { func (m *awsRestxml_serializeOpDeleteBucketAnalyticsConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1001,6 +1068,8 @@ func (m *awsRestxml_serializeOpDeleteBucketAnalyticsConfiguration) HandleSeriali } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketAnalyticsConfigurationInput(v *DeleteBucketAnalyticsConfigurationInput, encoder *httpbinding.Encoder) error { @@ -1030,6 +1099,10 @@ func (*awsRestxml_serializeOpDeleteBucketCors) ID() string { func (m *awsRestxml_serializeOpDeleteBucketCors) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1066,6 +1139,8 @@ func (m *awsRestxml_serializeOpDeleteBucketCors) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketCorsInput(v *DeleteBucketCorsInput, encoder *httpbinding.Encoder) error { @@ -1091,6 +1166,10 @@ func (*awsRestxml_serializeOpDeleteBucketEncryption) ID() string { func (m *awsRestxml_serializeOpDeleteBucketEncryption) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1127,6 +1206,8 @@ func (m *awsRestxml_serializeOpDeleteBucketEncryption) HandleSerialize(ctx conte } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketEncryptionInput(v *DeleteBucketEncryptionInput, encoder *httpbinding.Encoder) error { @@ -1152,6 +1233,10 @@ func (*awsRestxml_serializeOpDeleteBucketIntelligentTieringConfiguration) ID() s func (m *awsRestxml_serializeOpDeleteBucketIntelligentTieringConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1188,6 +1273,8 @@ func (m *awsRestxml_serializeOpDeleteBucketIntelligentTieringConfiguration) Hand } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketIntelligentTieringConfigurationInput(v *DeleteBucketIntelligentTieringConfigurationInput, encoder *httpbinding.Encoder) error { @@ -1212,6 +1299,10 @@ func (*awsRestxml_serializeOpDeleteBucketInventoryConfiguration) ID() string { func (m *awsRestxml_serializeOpDeleteBucketInventoryConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1248,6 +1339,8 @@ func (m *awsRestxml_serializeOpDeleteBucketInventoryConfiguration) HandleSeriali } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketInventoryConfigurationInput(v *DeleteBucketInventoryConfigurationInput, encoder *httpbinding.Encoder) error { @@ -1277,6 +1370,10 @@ func (*awsRestxml_serializeOpDeleteBucketLifecycle) ID() string { func (m *awsRestxml_serializeOpDeleteBucketLifecycle) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1313,6 +1410,8 @@ func (m *awsRestxml_serializeOpDeleteBucketLifecycle) HandleSerialize(ctx contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketLifecycleInput(v *DeleteBucketLifecycleInput, encoder *httpbinding.Encoder) error { @@ -1338,6 +1437,10 @@ func (*awsRestxml_serializeOpDeleteBucketMetricsConfiguration) ID() string { func (m *awsRestxml_serializeOpDeleteBucketMetricsConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1374,6 +1477,8 @@ func (m *awsRestxml_serializeOpDeleteBucketMetricsConfiguration) HandleSerialize } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketMetricsConfigurationInput(v *DeleteBucketMetricsConfigurationInput, encoder *httpbinding.Encoder) error { @@ -1403,6 +1508,10 @@ func (*awsRestxml_serializeOpDeleteBucketOwnershipControls) ID() string { func (m *awsRestxml_serializeOpDeleteBucketOwnershipControls) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1439,6 +1548,8 @@ func (m *awsRestxml_serializeOpDeleteBucketOwnershipControls) HandleSerialize(ct } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketOwnershipControlsInput(v *DeleteBucketOwnershipControlsInput, encoder *httpbinding.Encoder) error { @@ -1464,6 +1575,10 @@ func (*awsRestxml_serializeOpDeleteBucketPolicy) ID() string { func (m *awsRestxml_serializeOpDeleteBucketPolicy) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1500,6 +1615,8 @@ func (m *awsRestxml_serializeOpDeleteBucketPolicy) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketPolicyInput(v *DeleteBucketPolicyInput, encoder *httpbinding.Encoder) error { @@ -1525,6 +1642,10 @@ func (*awsRestxml_serializeOpDeleteBucketReplication) ID() string { func (m *awsRestxml_serializeOpDeleteBucketReplication) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1561,6 +1682,8 @@ func (m *awsRestxml_serializeOpDeleteBucketReplication) HandleSerialize(ctx cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketReplicationInput(v *DeleteBucketReplicationInput, encoder *httpbinding.Encoder) error { @@ -1586,6 +1709,10 @@ func (*awsRestxml_serializeOpDeleteBucketTagging) ID() string { func (m *awsRestxml_serializeOpDeleteBucketTagging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1622,6 +1749,8 @@ func (m *awsRestxml_serializeOpDeleteBucketTagging) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketTaggingInput(v *DeleteBucketTaggingInput, encoder *httpbinding.Encoder) error { @@ -1647,6 +1776,10 @@ func (*awsRestxml_serializeOpDeleteBucketWebsite) ID() string { func (m *awsRestxml_serializeOpDeleteBucketWebsite) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1683,6 +1816,8 @@ func (m *awsRestxml_serializeOpDeleteBucketWebsite) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteBucketWebsiteInput(v *DeleteBucketWebsiteInput, encoder *httpbinding.Encoder) error { @@ -1708,6 +1843,10 @@ func (*awsRestxml_serializeOpDeleteObject) ID() string { func (m *awsRestxml_serializeOpDeleteObject) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1744,6 +1883,8 @@ func (m *awsRestxml_serializeOpDeleteObject) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteObjectInput(v *DeleteObjectInput, encoder *httpbinding.Encoder) error { @@ -1797,6 +1938,10 @@ func (*awsRestxml_serializeOpDeleteObjects) ID() string { func (m *awsRestxml_serializeOpDeleteObjects) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1857,6 +2002,8 @@ func (m *awsRestxml_serializeOpDeleteObjects) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteObjectsInput(v *DeleteObjectsInput, encoder *httpbinding.Encoder) error { @@ -1902,6 +2049,10 @@ func (*awsRestxml_serializeOpDeleteObjectTagging) ID() string { func (m *awsRestxml_serializeOpDeleteObjectTagging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -1938,6 +2089,8 @@ func (m *awsRestxml_serializeOpDeleteObjectTagging) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeleteObjectTaggingInput(v *DeleteObjectTaggingInput, encoder *httpbinding.Encoder) error { @@ -1976,6 +2129,10 @@ func (*awsRestxml_serializeOpDeletePublicAccessBlock) ID() string { func (m *awsRestxml_serializeOpDeletePublicAccessBlock) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2012,6 +2169,8 @@ func (m *awsRestxml_serializeOpDeletePublicAccessBlock) HandleSerialize(ctx cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsDeletePublicAccessBlockInput(v *DeletePublicAccessBlockInput, encoder *httpbinding.Encoder) error { @@ -2037,6 +2196,10 @@ func (*awsRestxml_serializeOpGetBucketAccelerateConfiguration) ID() string { func (m *awsRestxml_serializeOpGetBucketAccelerateConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2073,6 +2236,8 @@ func (m *awsRestxml_serializeOpGetBucketAccelerateConfiguration) HandleSerialize } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketAccelerateConfigurationInput(v *GetBucketAccelerateConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2103,6 +2268,10 @@ func (*awsRestxml_serializeOpGetBucketAcl) ID() string { func (m *awsRestxml_serializeOpGetBucketAcl) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2139,6 +2308,8 @@ func (m *awsRestxml_serializeOpGetBucketAcl) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketAclInput(v *GetBucketAclInput, encoder *httpbinding.Encoder) error { @@ -2164,6 +2335,10 @@ func (*awsRestxml_serializeOpGetBucketAnalyticsConfiguration) ID() string { func (m *awsRestxml_serializeOpGetBucketAnalyticsConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2200,6 +2375,8 @@ func (m *awsRestxml_serializeOpGetBucketAnalyticsConfiguration) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketAnalyticsConfigurationInput(v *GetBucketAnalyticsConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2229,6 +2406,10 @@ func (*awsRestxml_serializeOpGetBucketCors) ID() string { func (m *awsRestxml_serializeOpGetBucketCors) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2265,6 +2446,8 @@ func (m *awsRestxml_serializeOpGetBucketCors) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketCorsInput(v *GetBucketCorsInput, encoder *httpbinding.Encoder) error { @@ -2290,6 +2473,10 @@ func (*awsRestxml_serializeOpGetBucketEncryption) ID() string { func (m *awsRestxml_serializeOpGetBucketEncryption) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2326,6 +2513,8 @@ func (m *awsRestxml_serializeOpGetBucketEncryption) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketEncryptionInput(v *GetBucketEncryptionInput, encoder *httpbinding.Encoder) error { @@ -2351,6 +2540,10 @@ func (*awsRestxml_serializeOpGetBucketIntelligentTieringConfiguration) ID() stri func (m *awsRestxml_serializeOpGetBucketIntelligentTieringConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2387,6 +2580,8 @@ func (m *awsRestxml_serializeOpGetBucketIntelligentTieringConfiguration) HandleS } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketIntelligentTieringConfigurationInput(v *GetBucketIntelligentTieringConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2411,6 +2606,10 @@ func (*awsRestxml_serializeOpGetBucketInventoryConfiguration) ID() string { func (m *awsRestxml_serializeOpGetBucketInventoryConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2447,6 +2646,8 @@ func (m *awsRestxml_serializeOpGetBucketInventoryConfiguration) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketInventoryConfigurationInput(v *GetBucketInventoryConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2476,6 +2677,10 @@ func (*awsRestxml_serializeOpGetBucketLifecycleConfiguration) ID() string { func (m *awsRestxml_serializeOpGetBucketLifecycleConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2512,6 +2717,8 @@ func (m *awsRestxml_serializeOpGetBucketLifecycleConfiguration) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketLifecycleConfigurationInput(v *GetBucketLifecycleConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2537,6 +2744,10 @@ func (*awsRestxml_serializeOpGetBucketLocation) ID() string { func (m *awsRestxml_serializeOpGetBucketLocation) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2573,6 +2784,8 @@ func (m *awsRestxml_serializeOpGetBucketLocation) HandleSerialize(ctx context.Co } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketLocationInput(v *GetBucketLocationInput, encoder *httpbinding.Encoder) error { @@ -2598,6 +2811,10 @@ func (*awsRestxml_serializeOpGetBucketLogging) ID() string { func (m *awsRestxml_serializeOpGetBucketLogging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2634,6 +2851,8 @@ func (m *awsRestxml_serializeOpGetBucketLogging) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketLoggingInput(v *GetBucketLoggingInput, encoder *httpbinding.Encoder) error { @@ -2659,6 +2878,10 @@ func (*awsRestxml_serializeOpGetBucketMetricsConfiguration) ID() string { func (m *awsRestxml_serializeOpGetBucketMetricsConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2695,6 +2918,8 @@ func (m *awsRestxml_serializeOpGetBucketMetricsConfiguration) HandleSerialize(ct } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketMetricsConfigurationInput(v *GetBucketMetricsConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2724,6 +2949,10 @@ func (*awsRestxml_serializeOpGetBucketNotificationConfiguration) ID() string { func (m *awsRestxml_serializeOpGetBucketNotificationConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2760,6 +2989,8 @@ func (m *awsRestxml_serializeOpGetBucketNotificationConfiguration) HandleSeriali } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketNotificationConfigurationInput(v *GetBucketNotificationConfigurationInput, encoder *httpbinding.Encoder) error { @@ -2785,6 +3016,10 @@ func (*awsRestxml_serializeOpGetBucketOwnershipControls) ID() string { func (m *awsRestxml_serializeOpGetBucketOwnershipControls) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2821,6 +3056,8 @@ func (m *awsRestxml_serializeOpGetBucketOwnershipControls) HandleSerialize(ctx c } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketOwnershipControlsInput(v *GetBucketOwnershipControlsInput, encoder *httpbinding.Encoder) error { @@ -2846,6 +3083,10 @@ func (*awsRestxml_serializeOpGetBucketPolicy) ID() string { func (m *awsRestxml_serializeOpGetBucketPolicy) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2882,6 +3123,8 @@ func (m *awsRestxml_serializeOpGetBucketPolicy) HandleSerialize(ctx context.Cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketPolicyInput(v *GetBucketPolicyInput, encoder *httpbinding.Encoder) error { @@ -2907,6 +3150,10 @@ func (*awsRestxml_serializeOpGetBucketPolicyStatus) ID() string { func (m *awsRestxml_serializeOpGetBucketPolicyStatus) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -2943,6 +3190,8 @@ func (m *awsRestxml_serializeOpGetBucketPolicyStatus) HandleSerialize(ctx contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketPolicyStatusInput(v *GetBucketPolicyStatusInput, encoder *httpbinding.Encoder) error { @@ -2968,6 +3217,10 @@ func (*awsRestxml_serializeOpGetBucketReplication) ID() string { func (m *awsRestxml_serializeOpGetBucketReplication) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3004,6 +3257,8 @@ func (m *awsRestxml_serializeOpGetBucketReplication) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketReplicationInput(v *GetBucketReplicationInput, encoder *httpbinding.Encoder) error { @@ -3029,6 +3284,10 @@ func (*awsRestxml_serializeOpGetBucketRequestPayment) ID() string { func (m *awsRestxml_serializeOpGetBucketRequestPayment) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3065,6 +3324,8 @@ func (m *awsRestxml_serializeOpGetBucketRequestPayment) HandleSerialize(ctx cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketRequestPaymentInput(v *GetBucketRequestPaymentInput, encoder *httpbinding.Encoder) error { @@ -3090,6 +3351,10 @@ func (*awsRestxml_serializeOpGetBucketTagging) ID() string { func (m *awsRestxml_serializeOpGetBucketTagging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3126,6 +3391,8 @@ func (m *awsRestxml_serializeOpGetBucketTagging) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketTaggingInput(v *GetBucketTaggingInput, encoder *httpbinding.Encoder) error { @@ -3151,6 +3418,10 @@ func (*awsRestxml_serializeOpGetBucketVersioning) ID() string { func (m *awsRestxml_serializeOpGetBucketVersioning) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3187,6 +3458,8 @@ func (m *awsRestxml_serializeOpGetBucketVersioning) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketVersioningInput(v *GetBucketVersioningInput, encoder *httpbinding.Encoder) error { @@ -3212,6 +3485,10 @@ func (*awsRestxml_serializeOpGetBucketWebsite) ID() string { func (m *awsRestxml_serializeOpGetBucketWebsite) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3248,6 +3525,8 @@ func (m *awsRestxml_serializeOpGetBucketWebsite) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetBucketWebsiteInput(v *GetBucketWebsiteInput, encoder *httpbinding.Encoder) error { @@ -3273,6 +3552,10 @@ func (*awsRestxml_serializeOpGetObject) ID() string { func (m *awsRestxml_serializeOpGetObject) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3309,6 +3592,8 @@ func (m *awsRestxml_serializeOpGetObject) HandleSerialize(ctx context.Context, i } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectInput(v *GetObjectInput, encoder *httpbinding.Encoder) error { @@ -3425,6 +3710,10 @@ func (*awsRestxml_serializeOpGetObjectAcl) ID() string { func (m *awsRestxml_serializeOpGetObjectAcl) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3461,6 +3750,8 @@ func (m *awsRestxml_serializeOpGetObjectAcl) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectAclInput(v *GetObjectAclInput, encoder *httpbinding.Encoder) error { @@ -3504,6 +3795,10 @@ func (*awsRestxml_serializeOpGetObjectAttributes) ID() string { func (m *awsRestxml_serializeOpGetObjectAttributes) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3540,6 +3835,8 @@ func (m *awsRestxml_serializeOpGetObjectAttributes) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectAttributesInput(v *GetObjectAttributesInput, encoder *httpbinding.Encoder) error { @@ -3622,6 +3919,10 @@ func (*awsRestxml_serializeOpGetObjectLegalHold) ID() string { func (m *awsRestxml_serializeOpGetObjectLegalHold) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3658,6 +3959,8 @@ func (m *awsRestxml_serializeOpGetObjectLegalHold) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectLegalHoldInput(v *GetObjectLegalHoldInput, encoder *httpbinding.Encoder) error { @@ -3701,6 +4004,10 @@ func (*awsRestxml_serializeOpGetObjectLockConfiguration) ID() string { func (m *awsRestxml_serializeOpGetObjectLockConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3737,6 +4044,8 @@ func (m *awsRestxml_serializeOpGetObjectLockConfiguration) HandleSerialize(ctx c } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectLockConfigurationInput(v *GetObjectLockConfigurationInput, encoder *httpbinding.Encoder) error { @@ -3762,6 +4071,10 @@ func (*awsRestxml_serializeOpGetObjectRetention) ID() string { func (m *awsRestxml_serializeOpGetObjectRetention) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3798,6 +4111,8 @@ func (m *awsRestxml_serializeOpGetObjectRetention) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectRetentionInput(v *GetObjectRetentionInput, encoder *httpbinding.Encoder) error { @@ -3841,6 +4156,10 @@ func (*awsRestxml_serializeOpGetObjectTagging) ID() string { func (m *awsRestxml_serializeOpGetObjectTagging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3877,6 +4196,8 @@ func (m *awsRestxml_serializeOpGetObjectTagging) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectTaggingInput(v *GetObjectTaggingInput, encoder *httpbinding.Encoder) error { @@ -3920,6 +4241,10 @@ func (*awsRestxml_serializeOpGetObjectTorrent) ID() string { func (m *awsRestxml_serializeOpGetObjectTorrent) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -3956,6 +4281,8 @@ func (m *awsRestxml_serializeOpGetObjectTorrent) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetObjectTorrentInput(v *GetObjectTorrentInput, encoder *httpbinding.Encoder) error { @@ -3995,6 +4322,10 @@ func (*awsRestxml_serializeOpGetPublicAccessBlock) ID() string { func (m *awsRestxml_serializeOpGetPublicAccessBlock) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4031,6 +4362,8 @@ func (m *awsRestxml_serializeOpGetPublicAccessBlock) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsGetPublicAccessBlockInput(v *GetPublicAccessBlockInput, encoder *httpbinding.Encoder) error { @@ -4056,6 +4389,10 @@ func (*awsRestxml_serializeOpHeadBucket) ID() string { func (m *awsRestxml_serializeOpHeadBucket) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4092,6 +4429,8 @@ func (m *awsRestxml_serializeOpHeadBucket) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsHeadBucketInput(v *HeadBucketInput, encoder *httpbinding.Encoder) error { @@ -4117,6 +4456,10 @@ func (*awsRestxml_serializeOpHeadObject) ID() string { func (m *awsRestxml_serializeOpHeadObject) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4153,6 +4496,8 @@ func (m *awsRestxml_serializeOpHeadObject) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsHeadObjectInput(v *HeadObjectInput, encoder *httpbinding.Encoder) error { @@ -4269,6 +4614,10 @@ func (*awsRestxml_serializeOpListBucketAnalyticsConfigurations) ID() string { func (m *awsRestxml_serializeOpListBucketAnalyticsConfigurations) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4305,6 +4654,8 @@ func (m *awsRestxml_serializeOpListBucketAnalyticsConfigurations) HandleSerializ } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListBucketAnalyticsConfigurationsInput(v *ListBucketAnalyticsConfigurationsInput, encoder *httpbinding.Encoder) error { @@ -4334,6 +4685,10 @@ func (*awsRestxml_serializeOpListBucketIntelligentTieringConfigurations) ID() st func (m *awsRestxml_serializeOpListBucketIntelligentTieringConfigurations) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4370,6 +4725,8 @@ func (m *awsRestxml_serializeOpListBucketIntelligentTieringConfigurations) Handl } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListBucketIntelligentTieringConfigurationsInput(v *ListBucketIntelligentTieringConfigurationsInput, encoder *httpbinding.Encoder) error { @@ -4394,6 +4751,10 @@ func (*awsRestxml_serializeOpListBucketInventoryConfigurations) ID() string { func (m *awsRestxml_serializeOpListBucketInventoryConfigurations) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4430,6 +4791,8 @@ func (m *awsRestxml_serializeOpListBucketInventoryConfigurations) HandleSerializ } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListBucketInventoryConfigurationsInput(v *ListBucketInventoryConfigurationsInput, encoder *httpbinding.Encoder) error { @@ -4459,6 +4822,10 @@ func (*awsRestxml_serializeOpListBucketMetricsConfigurations) ID() string { func (m *awsRestxml_serializeOpListBucketMetricsConfigurations) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4495,6 +4862,8 @@ func (m *awsRestxml_serializeOpListBucketMetricsConfigurations) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListBucketMetricsConfigurationsInput(v *ListBucketMetricsConfigurationsInput, encoder *httpbinding.Encoder) error { @@ -4524,6 +4893,10 @@ func (*awsRestxml_serializeOpListBuckets) ID() string { func (m *awsRestxml_serializeOpListBuckets) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4560,6 +4933,8 @@ func (m *awsRestxml_serializeOpListBuckets) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListBucketsInput(v *ListBucketsInput, encoder *httpbinding.Encoder) error { @@ -4588,6 +4963,10 @@ func (*awsRestxml_serializeOpListDirectoryBuckets) ID() string { func (m *awsRestxml_serializeOpListDirectoryBuckets) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4624,6 +5003,8 @@ func (m *awsRestxml_serializeOpListDirectoryBuckets) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListDirectoryBucketsInput(v *ListDirectoryBucketsInput, encoder *httpbinding.Encoder) error { @@ -4652,6 +5033,10 @@ func (*awsRestxml_serializeOpListMultipartUploads) ID() string { func (m *awsRestxml_serializeOpListMultipartUploads) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4688,6 +5073,8 @@ func (m *awsRestxml_serializeOpListMultipartUploads) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListMultipartUploadsInput(v *ListMultipartUploadsInput, encoder *httpbinding.Encoder) error { @@ -4742,6 +5129,10 @@ func (*awsRestxml_serializeOpListObjects) ID() string { func (m *awsRestxml_serializeOpListObjects) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4778,6 +5169,8 @@ func (m *awsRestxml_serializeOpListObjects) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListObjectsInput(v *ListObjectsInput, encoder *httpbinding.Encoder) error { @@ -4842,6 +5235,10 @@ func (*awsRestxml_serializeOpListObjectsV2) ID() string { func (m *awsRestxml_serializeOpListObjectsV2) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4878,6 +5275,8 @@ func (m *awsRestxml_serializeOpListObjectsV2) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListObjectsV2Input(v *ListObjectsV2Input, encoder *httpbinding.Encoder) error { @@ -4950,6 +5349,10 @@ func (*awsRestxml_serializeOpListObjectVersions) ID() string { func (m *awsRestxml_serializeOpListObjectVersions) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -4986,6 +5389,8 @@ func (m *awsRestxml_serializeOpListObjectVersions) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListObjectVersionsInput(v *ListObjectVersionsInput, encoder *httpbinding.Encoder) error { @@ -5054,6 +5459,10 @@ func (*awsRestxml_serializeOpListParts) ID() string { func (m *awsRestxml_serializeOpListParts) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5090,6 +5499,8 @@ func (m *awsRestxml_serializeOpListParts) HandleSerialize(ctx context.Context, i } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsListPartsInput(v *ListPartsInput, encoder *httpbinding.Encoder) error { @@ -5156,6 +5567,10 @@ func (*awsRestxml_serializeOpPutBucketAccelerateConfiguration) ID() string { func (m *awsRestxml_serializeOpPutBucketAccelerateConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5216,6 +5631,8 @@ func (m *awsRestxml_serializeOpPutBucketAccelerateConfiguration) HandleSerialize } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketAccelerateConfigurationInput(v *PutBucketAccelerateConfigurationInput, encoder *httpbinding.Encoder) error { @@ -5246,6 +5663,10 @@ func (*awsRestxml_serializeOpPutBucketAcl) ID() string { func (m *awsRestxml_serializeOpPutBucketAcl) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5306,6 +5727,8 @@ func (m *awsRestxml_serializeOpPutBucketAcl) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketAclInput(v *PutBucketAclInput, encoder *httpbinding.Encoder) error { @@ -5371,6 +5794,10 @@ func (*awsRestxml_serializeOpPutBucketAnalyticsConfiguration) ID() string { func (m *awsRestxml_serializeOpPutBucketAnalyticsConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5431,6 +5858,8 @@ func (m *awsRestxml_serializeOpPutBucketAnalyticsConfiguration) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketAnalyticsConfigurationInput(v *PutBucketAnalyticsConfigurationInput, encoder *httpbinding.Encoder) error { @@ -5460,6 +5889,10 @@ func (*awsRestxml_serializeOpPutBucketCors) ID() string { func (m *awsRestxml_serializeOpPutBucketCors) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5520,6 +5953,8 @@ func (m *awsRestxml_serializeOpPutBucketCors) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketCorsInput(v *PutBucketCorsInput, encoder *httpbinding.Encoder) error { @@ -5555,6 +5990,10 @@ func (*awsRestxml_serializeOpPutBucketEncryption) ID() string { func (m *awsRestxml_serializeOpPutBucketEncryption) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5615,6 +6054,8 @@ func (m *awsRestxml_serializeOpPutBucketEncryption) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketEncryptionInput(v *PutBucketEncryptionInput, encoder *httpbinding.Encoder) error { @@ -5650,6 +6091,10 @@ func (*awsRestxml_serializeOpPutBucketIntelligentTieringConfiguration) ID() stri func (m *awsRestxml_serializeOpPutBucketIntelligentTieringConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5710,6 +6155,8 @@ func (m *awsRestxml_serializeOpPutBucketIntelligentTieringConfiguration) HandleS } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketIntelligentTieringConfigurationInput(v *PutBucketIntelligentTieringConfigurationInput, encoder *httpbinding.Encoder) error { @@ -5734,6 +6181,10 @@ func (*awsRestxml_serializeOpPutBucketInventoryConfiguration) ID() string { func (m *awsRestxml_serializeOpPutBucketInventoryConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5794,6 +6245,8 @@ func (m *awsRestxml_serializeOpPutBucketInventoryConfiguration) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketInventoryConfigurationInput(v *PutBucketInventoryConfigurationInput, encoder *httpbinding.Encoder) error { @@ -5823,6 +6276,10 @@ func (*awsRestxml_serializeOpPutBucketLifecycleConfiguration) ID() string { func (m *awsRestxml_serializeOpPutBucketLifecycleConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5883,6 +6340,8 @@ func (m *awsRestxml_serializeOpPutBucketLifecycleConfiguration) HandleSerialize( } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketLifecycleConfigurationInput(v *PutBucketLifecycleConfigurationInput, encoder *httpbinding.Encoder) error { @@ -5913,6 +6372,10 @@ func (*awsRestxml_serializeOpPutBucketLogging) ID() string { func (m *awsRestxml_serializeOpPutBucketLogging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -5973,6 +6436,8 @@ func (m *awsRestxml_serializeOpPutBucketLogging) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketLoggingInput(v *PutBucketLoggingInput, encoder *httpbinding.Encoder) error { @@ -6008,6 +6473,10 @@ func (*awsRestxml_serializeOpPutBucketMetricsConfiguration) ID() string { func (m *awsRestxml_serializeOpPutBucketMetricsConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6068,6 +6537,8 @@ func (m *awsRestxml_serializeOpPutBucketMetricsConfiguration) HandleSerialize(ct } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketMetricsConfigurationInput(v *PutBucketMetricsConfigurationInput, encoder *httpbinding.Encoder) error { @@ -6097,6 +6568,10 @@ func (*awsRestxml_serializeOpPutBucketNotificationConfiguration) ID() string { func (m *awsRestxml_serializeOpPutBucketNotificationConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6157,6 +6632,8 @@ func (m *awsRestxml_serializeOpPutBucketNotificationConfiguration) HandleSeriali } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketNotificationConfigurationInput(v *PutBucketNotificationConfigurationInput, encoder *httpbinding.Encoder) error { @@ -6187,6 +6664,10 @@ func (*awsRestxml_serializeOpPutBucketOwnershipControls) ID() string { func (m *awsRestxml_serializeOpPutBucketOwnershipControls) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6247,6 +6728,8 @@ func (m *awsRestxml_serializeOpPutBucketOwnershipControls) HandleSerialize(ctx c } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketOwnershipControlsInput(v *PutBucketOwnershipControlsInput, encoder *httpbinding.Encoder) error { @@ -6277,6 +6760,10 @@ func (*awsRestxml_serializeOpPutBucketPolicy) ID() string { func (m *awsRestxml_serializeOpPutBucketPolicy) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6325,6 +6812,8 @@ func (m *awsRestxml_serializeOpPutBucketPolicy) HandleSerialize(ctx context.Cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketPolicyInput(v *PutBucketPolicyInput, encoder *httpbinding.Encoder) error { @@ -6365,6 +6854,10 @@ func (*awsRestxml_serializeOpPutBucketReplication) ID() string { func (m *awsRestxml_serializeOpPutBucketReplication) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6425,6 +6918,8 @@ func (m *awsRestxml_serializeOpPutBucketReplication) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketReplicationInput(v *PutBucketReplicationInput, encoder *httpbinding.Encoder) error { @@ -6465,6 +6960,10 @@ func (*awsRestxml_serializeOpPutBucketRequestPayment) ID() string { func (m *awsRestxml_serializeOpPutBucketRequestPayment) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6525,6 +7024,8 @@ func (m *awsRestxml_serializeOpPutBucketRequestPayment) HandleSerialize(ctx cont } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketRequestPaymentInput(v *PutBucketRequestPaymentInput, encoder *httpbinding.Encoder) error { @@ -6560,6 +7061,10 @@ func (*awsRestxml_serializeOpPutBucketTagging) ID() string { func (m *awsRestxml_serializeOpPutBucketTagging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6620,6 +7125,8 @@ func (m *awsRestxml_serializeOpPutBucketTagging) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketTaggingInput(v *PutBucketTaggingInput, encoder *httpbinding.Encoder) error { @@ -6655,6 +7162,10 @@ func (*awsRestxml_serializeOpPutBucketVersioning) ID() string { func (m *awsRestxml_serializeOpPutBucketVersioning) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6715,6 +7226,8 @@ func (m *awsRestxml_serializeOpPutBucketVersioning) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketVersioningInput(v *PutBucketVersioningInput, encoder *httpbinding.Encoder) error { @@ -6755,6 +7268,10 @@ func (*awsRestxml_serializeOpPutBucketWebsite) ID() string { func (m *awsRestxml_serializeOpPutBucketWebsite) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6815,6 +7332,8 @@ func (m *awsRestxml_serializeOpPutBucketWebsite) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutBucketWebsiteInput(v *PutBucketWebsiteInput, encoder *httpbinding.Encoder) error { @@ -6850,6 +7369,10 @@ func (*awsRestxml_serializeOpPutObject) ID() string { func (m *awsRestxml_serializeOpPutObject) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -6898,6 +7421,8 @@ func (m *awsRestxml_serializeOpPutObject) HandleSerialize(ctx context.Context, i } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutObjectInput(v *PutObjectInput, encoder *httpbinding.Encoder) error { @@ -7106,6 +7631,10 @@ func (*awsRestxml_serializeOpPutObjectAcl) ID() string { func (m *awsRestxml_serializeOpPutObjectAcl) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7166,6 +7695,8 @@ func (m *awsRestxml_serializeOpPutObjectAcl) HandleSerialize(ctx context.Context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutObjectAclInput(v *PutObjectAclInput, encoder *httpbinding.Encoder) error { @@ -7249,6 +7780,10 @@ func (*awsRestxml_serializeOpPutObjectLegalHold) ID() string { func (m *awsRestxml_serializeOpPutObjectLegalHold) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7309,6 +7844,8 @@ func (m *awsRestxml_serializeOpPutObjectLegalHold) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutObjectLegalHoldInput(v *PutObjectLegalHoldInput, encoder *httpbinding.Encoder) error { @@ -7362,6 +7899,10 @@ func (*awsRestxml_serializeOpPutObjectLockConfiguration) ID() string { func (m *awsRestxml_serializeOpPutObjectLockConfiguration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7422,6 +7963,8 @@ func (m *awsRestxml_serializeOpPutObjectLockConfiguration) HandleSerialize(ctx c } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutObjectLockConfigurationInput(v *PutObjectLockConfigurationInput, encoder *httpbinding.Encoder) error { @@ -7467,6 +8010,10 @@ func (*awsRestxml_serializeOpPutObjectRetention) ID() string { func (m *awsRestxml_serializeOpPutObjectRetention) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7527,6 +8074,8 @@ func (m *awsRestxml_serializeOpPutObjectRetention) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutObjectRetentionInput(v *PutObjectRetentionInput, encoder *httpbinding.Encoder) error { @@ -7585,6 +8134,10 @@ func (*awsRestxml_serializeOpPutObjectTagging) ID() string { func (m *awsRestxml_serializeOpPutObjectTagging) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7645,6 +8198,8 @@ func (m *awsRestxml_serializeOpPutObjectTagging) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutObjectTaggingInput(v *PutObjectTaggingInput, encoder *httpbinding.Encoder) error { @@ -7698,6 +8253,10 @@ func (*awsRestxml_serializeOpPutPublicAccessBlock) ID() string { func (m *awsRestxml_serializeOpPutPublicAccessBlock) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7758,6 +8317,8 @@ func (m *awsRestxml_serializeOpPutPublicAccessBlock) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsPutPublicAccessBlockInput(v *PutPublicAccessBlockInput, encoder *httpbinding.Encoder) error { @@ -7793,6 +8354,10 @@ func (*awsRestxml_serializeOpRestoreObject) ID() string { func (m *awsRestxml_serializeOpRestoreObject) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7853,6 +8418,8 @@ func (m *awsRestxml_serializeOpRestoreObject) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsRestoreObjectInput(v *RestoreObjectInput, encoder *httpbinding.Encoder) error { @@ -7901,6 +8468,10 @@ func (*awsRestxml_serializeOpSelectObjectContent) ID() string { func (m *awsRestxml_serializeOpSelectObjectContent) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -7955,6 +8526,8 @@ func (m *awsRestxml_serializeOpSelectObjectContent) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsSelectObjectContentInput(v *SelectObjectContentInput, encoder *httpbinding.Encoder) error { @@ -8083,6 +8656,10 @@ func (*awsRestxml_serializeOpUploadPart) ID() string { func (m *awsRestxml_serializeOpUploadPart) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -8131,6 +8708,8 @@ func (m *awsRestxml_serializeOpUploadPart) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsUploadPartInput(v *UploadPartInput, encoder *httpbinding.Encoder) error { @@ -8228,6 +8807,10 @@ func (*awsRestxml_serializeOpUploadPartCopy) ID() string { func (m *awsRestxml_serializeOpUploadPartCopy) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -8264,6 +8847,8 @@ func (m *awsRestxml_serializeOpUploadPartCopy) HandleSerialize(ctx context.Conte } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsUploadPartCopyInput(v *UploadPartCopyInput, encoder *httpbinding.Encoder) error { @@ -8376,6 +8961,10 @@ func (*awsRestxml_serializeOpWriteGetObjectResponse) ID() string { func (m *awsRestxml_serializeOpWriteGetObjectResponse) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -8424,6 +9013,8 @@ func (m *awsRestxml_serializeOpWriteGetObjectResponse) HandleSerialize(ctx conte } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestxml_serializeOpHttpBindingsWriteGetObjectResponseInput(v *WriteGetObjectResponseInput, encoder *httpbinding.Encoder) error { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go index aee73d7cf6..d28e93c1b7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go @@ -1705,10 +1705,12 @@ type EventBridgeConfiguration struct { noSmithyDocumentSerde } -// Optional configuration to replicate existing source bucket objects. For more -// information, see [Replicating Existing Objects]in the Amazon S3 User Guide. +// Optional configuration to replicate existing source bucket objects. // -// [Replicating Existing Objects]: https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-what-is-isnot-replicated.html#existing-object-replication +// This parameter is no longer supported. To replicate existing objects, see [Replicating existing objects with S3 Batch Replication] in +// the Amazon S3 User Guide. +// +// [Replicating existing objects with S3 Batch Replication]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-batch-replication-batch.html type ExistingObjectReplication struct { // Specifies whether Amazon S3 replicates existing source bucket objects. @@ -3303,10 +3305,12 @@ type ReplicationRule struct { // [Backward Compatibility]: https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations DeleteMarkerReplication *DeleteMarkerReplication - // Optional configuration to replicate existing source bucket objects. For more - // information, see [Replicating Existing Objects]in the Amazon S3 User Guide. + // Optional configuration to replicate existing source bucket objects. // - // [Replicating Existing Objects]: https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-what-is-isnot-replicated.html#existing-object-replication + // This parameter is no longer supported. To replicate existing objects, see [Replicating existing objects with S3 Batch Replication] in + // the Amazon S3 User Guide. + // + // [Replicating existing objects with S3 Batch Replication]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-batch-replication-batch.html ExistingObjectReplication *ExistingObjectReplication // A filter that identifies the subset of objects to which the replication rule @@ -3750,29 +3754,41 @@ type SelectParameters struct { // Describes the default server-side encryption to apply to new objects in the // bucket. If a PUT Object request doesn't specify any server-side encryption, this -// default encryption will be applied. If you don't specify a customer managed key -// at configuration, Amazon S3 automatically creates an Amazon Web Services KMS key -// in your Amazon Web Services account the first time that you add an object -// encrypted with SSE-KMS to a bucket. By default, Amazon S3 uses this KMS key for -// SSE-KMS. For more information, see [PUT Bucket encryption]in the Amazon S3 API Reference. +// default encryption will be applied. For more information, see [PutBucketEncryption]. // -// If you're specifying a customer managed KMS key, we recommend using a fully -// qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the -// key within the requester’s account. This behavior can result in data that's -// encrypted with a KMS key that belongs to the requester, and not the bucket -// owner. +// - General purpose buckets - If you don't specify a customer managed key at +// configuration, Amazon S3 automatically creates an Amazon Web Services KMS key ( +// aws/s3 ) in your Amazon Web Services account the first time that you add an +// object encrypted with SSE-KMS to a bucket. By default, Amazon S3 uses this KMS +// key for SSE-KMS. // -// [PUT Bucket encryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html +// - Directory buckets - Your SSE-KMS configuration can only support 1 [customer managed key]per +// directory bucket for the lifetime of the bucket. [Amazon Web Services managed key]( aws/s3 ) isn't supported. +// +// - Directory buckets - For directory buckets, there are only two supported +// options for server-side encryption: SSE-S3 and SSE-KMS. +// +// [PutBucketEncryption]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html +// [customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk +// [Amazon Web Services managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk type ServerSideEncryptionByDefault struct { // Server-side encryption algorithm to use for the default encryption. // + // For directory buckets, there are only two supported values for server-side + // encryption: AES256 and aws:kms . + // // This member is required. SSEAlgorithm ServerSideEncryption - // Amazon Web Services Key Management Service (KMS) customer Amazon Web Services - // KMS key ID to use for the default encryption. This parameter is allowed if and - // only if SSEAlgorithm is set to aws:kms or aws:kms:dsse . + // Amazon Web Services Key Management Service (KMS) customer managed key ID to use + // for the default encryption. + // + // - General purpose buckets - This parameter is allowed if and only if + // SSEAlgorithm is set to aws:kms or aws:kms:dsse . + // + // - Directory buckets - This parameter is allowed if and only if SSEAlgorithm is + // set to aws:kms . // // You can specify the key ID, key alias, or the Amazon Resource Name (ARN) of the // KMS key. @@ -3784,17 +3800,26 @@ type ServerSideEncryptionByDefault struct { // // - Key Alias: alias/alias-name // - // If you use a key ID, you can run into a LogDestination undeliverable error when - // creating a VPC flow log. - // // If you are using encryption with cross-account or Amazon Web Services service - // operations you must use a fully qualified KMS key ARN. For more information, see - // [Using encryption for cross-account operations]. + // operations, you must use a fully qualified KMS key ARN. For more information, + // see [Using encryption for cross-account operations]. + // + // - General purpose buckets - If you're specifying a customer managed KMS key, + // we recommend using a fully qualified KMS key ARN. If you use a KMS key alias + // instead, then KMS resolves the key within the requester’s account. This behavior + // can result in data that's encrypted with a KMS key that belongs to the + // requester, and not the bucket owner. Also, if you use a key ID, you can run into + // a LogDestination undeliverable error when creating a VPC flow log. + // + // - Directory buckets - When you specify an [KMS customer managed key]for encryption in your directory + // bucket, only use the key ID or key ARN. The key alias format of the KMS key + // isn't supported. // // Amazon S3 only supports symmetric encryption KMS keys. For more information, // see [Asymmetric keys in Amazon Web Services KMS]in the Amazon Web Services Key Management Service Developer Guide. // // [Using encryption for cross-account operations]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy + // [KMS customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk // [Asymmetric keys in Amazon Web Services KMS]: https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html KMSMasterKeyID *string @@ -3815,11 +3840,17 @@ type ServerSideEncryptionConfiguration struct { // Specifies the default server-side encryption configuration. // -// If you're specifying a customer managed KMS key, we recommend using a fully -// qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the -// key within the requester’s account. This behavior can result in data that's -// encrypted with a KMS key that belongs to the requester, and not the bucket -// owner. +// - General purpose buckets - If you're specifying a customer managed KMS key, +// we recommend using a fully qualified KMS key ARN. If you use a KMS key alias +// instead, then KMS resolves the key within the requester’s account. This behavior +// can result in data that's encrypted with a KMS key that belongs to the +// requester, and not the bucket owner. +// +// - Directory buckets - When you specify an [KMS customer managed key]for encryption in your directory +// bucket, only use the key ID or key ARN. The key alias format of the KMS key +// isn't supported. +// +// [KMS customer managed key]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk type ServerSideEncryptionRule struct { // Specifies the default server-side encryption to apply to new objects in the @@ -3830,11 +3861,23 @@ type ServerSideEncryptionRule struct { // Specifies whether Amazon S3 should use an S3 Bucket Key with server-side // encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects // are not affected. Setting the BucketKeyEnabled element to true causes Amazon S3 - // to use an S3 Bucket Key. By default, S3 Bucket Key is not enabled. + // to use an S3 Bucket Key. // - // For more information, see [Amazon S3 Bucket Keys] in the Amazon S3 User Guide. + // - General purpose buckets - By default, S3 Bucket Key is not enabled. For + // more information, see [Amazon S3 Bucket Keys]in the Amazon S3 User Guide. + // + // - Directory buckets - S3 Bucket Keys are always enabled for GET and PUT + // operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't + // supported, when you copy SSE-KMS encrypted objects from general purpose buckets + // to directory buckets, from directory buckets to general purpose buckets, or + // between directory buckets, through [CopyObject], [UploadPartCopy], [the Copy operation in Batch Operations], or [the import jobs]. In this case, Amazon S3 makes a + // call to KMS every time a copy request is made for a KMS-encrypted object. // // [Amazon S3 Bucket Keys]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html + // [CopyObject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html + // [the import jobs]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job + // [UploadPartCopy]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html + // [the Copy operation in Batch Operations]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops BucketKeyEnabled *bool noSmithyDocumentSerde @@ -3843,7 +3886,8 @@ type ServerSideEncryptionRule struct { // The established temporary security credentials of the session. // // Directory buckets - These session credentials are only supported for the -// authentication and authorization of Zonal endpoint APIs on directory buckets. +// authentication and authorization of Zonal endpoint API operations on directory +// buckets. type SessionCredentials struct { // A unique identifier that's associated with a secret access key. The access key diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md index a72bd91dfb..4c645319e7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md @@ -1,3 +1,20 @@ +# v1.23.2 (2024-09-25) + +* No change notes available for this release. + +# v1.23.1 (2024-09-23) + +* No change notes available for this release. + +# v1.23.0 (2024-09-20) + +* **Feature**: Add tracing and metrics support to service clients. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.22.8 (2024-09-17) + +* **Bug Fix**: **BREAKFIX**: Only generate AccountIDEndpointMode config for services that use it. This is a compiler break, but removes no actual functionality, as no services currently use the account ID in endpoint resolution. + # v1.22.7 (2024-09-04) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go index a06c6e738f..fe8e46769d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go @@ -4,6 +4,7 @@ package sso import ( "context" + "errors" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/defaults" @@ -19,7 +20,9 @@ import ( smithyauth "github.com/aws/smithy-go/auth" smithydocument "github.com/aws/smithy-go/document" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net" "net/http" @@ -30,6 +33,133 @@ import ( const ServiceID = "SSO" const ServiceAPIVersion = "2019-06-10" +type operationMetrics struct { + Duration metrics.Float64Histogram + SerializeDuration metrics.Float64Histogram + ResolveIdentityDuration metrics.Float64Histogram + ResolveEndpointDuration metrics.Float64Histogram + SignRequestDuration metrics.Float64Histogram + DeserializeDuration metrics.Float64Histogram +} + +func (m *operationMetrics) histogramFor(name string) metrics.Float64Histogram { + switch name { + case "client.call.duration": + return m.Duration + case "client.call.serialization_duration": + return m.SerializeDuration + case "client.call.resolve_identity_duration": + return m.ResolveIdentityDuration + case "client.call.resolve_endpoint_duration": + return m.ResolveEndpointDuration + case "client.call.signing_duration": + return m.SignRequestDuration + case "client.call.deserialization_duration": + return m.DeserializeDuration + default: + panic("unrecognized operation metric") + } +} + +func timeOperationMetric[T any]( + ctx context.Context, metric string, fn func() (T, error), + opts ...metrics.RecordMetricOption, +) (T, error) { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + start := time.Now() + v, err := fn() + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + return v, err +} + +func startMetricTimer(ctx context.Context, metric string, opts ...metrics.RecordMetricOption) func() { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + var ended bool + start := time.Now() + return func() { + if ended { + return + } + ended = true + + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + } +} + +func withOperationMetadata(ctx context.Context) metrics.RecordMetricOption { + return func(o *metrics.RecordMetricOptions) { + o.Properties.Set("rpc.service", middleware.GetServiceID(ctx)) + o.Properties.Set("rpc.method", middleware.GetOperationName(ctx)) + } +} + +type operationMetricsKey struct{} + +func withOperationMetrics(parent context.Context, mp metrics.MeterProvider) (context.Context, error) { + meter := mp.Meter("github.com/aws/aws-sdk-go-v2/service/sso") + om := &operationMetrics{} + + var err error + + om.Duration, err = operationMetricTimer(meter, "client.call.duration", + "Overall call duration (including retries and time to send or receive request and response body)") + if err != nil { + return nil, err + } + om.SerializeDuration, err = operationMetricTimer(meter, "client.call.serialization_duration", + "The time it takes to serialize a message body") + if err != nil { + return nil, err + } + om.ResolveIdentityDuration, err = operationMetricTimer(meter, "client.call.auth.resolve_identity_duration", + "The time taken to acquire an identity (AWS credentials, bearer token, etc) from an Identity Provider") + if err != nil { + return nil, err + } + om.ResolveEndpointDuration, err = operationMetricTimer(meter, "client.call.resolve_endpoint_duration", + "The time it takes to resolve an endpoint (endpoint resolver, not DNS) for the request") + if err != nil { + return nil, err + } + om.SignRequestDuration, err = operationMetricTimer(meter, "client.call.auth.signing_duration", + "The time it takes to sign a request") + if err != nil { + return nil, err + } + om.DeserializeDuration, err = operationMetricTimer(meter, "client.call.deserialization_duration", + "The time it takes to deserialize a message body") + if err != nil { + return nil, err + } + + return context.WithValue(parent, operationMetricsKey{}, om), nil +} + +func operationMetricTimer(m metrics.Meter, name, desc string) (metrics.Float64Histogram, error) { + return m.Float64Histogram(name, func(o *metrics.InstrumentOptions) { + o.UnitLabel = "s" + o.Description = desc + }) +} + +func getOperationMetrics(ctx context.Context) *operationMetrics { + return ctx.Value(operationMetricsKey{}).(*operationMetrics) +} + +func operationTracer(p tracing.TracerProvider) tracing.Tracer { + return p.Tracer("github.com/aws/aws-sdk-go-v2/service/sso") +} + // Client provides the API client to make operations call for AWS Single Sign-On. type Client struct { options Options @@ -56,6 +186,10 @@ func New(options Options, optFns ...func(*Options)) *Client { resolveEndpointResolverV2(&options) + resolveTracerProvider(&options) + + resolveMeterProvider(&options) + resolveAuthSchemeResolver(&options) for _, fn := range optFns { @@ -88,8 +222,15 @@ func (c *Client) Options() Options { return c.options.Copy() } -func (c *Client) invokeOperation(ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error) (result interface{}, metadata middleware.Metadata, err error) { +func (c *Client) invokeOperation( + ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error, +) ( + result interface{}, metadata middleware.Metadata, err error, +) { ctx = middleware.ClearStackValues(ctx) + ctx = middleware.WithServiceID(ctx, ServiceID) + ctx = middleware.WithOperationName(ctx, opID) + stack := middleware.NewStack(opID, smithyhttp.NewStackRequest) options := c.options.Copy() @@ -113,15 +254,54 @@ func (c *Client) invokeOperation(ctx context.Context, opID string, params interf } } - handler := middleware.DecorateHandler(smithyhttp.NewClientHandler(options.HTTPClient), stack) - result, metadata, err = handler.Handle(ctx, params) + ctx, err = withOperationMetrics(ctx, options.MeterProvider) if err != nil { + return nil, metadata, err + } + + tracer := operationTracer(options.TracerProvider) + spanName := fmt.Sprintf("%s.%s", ServiceID, opID) + + ctx = tracing.WithOperationTracer(ctx, tracer) + + ctx, span := tracer.StartSpan(ctx, spanName, func(o *tracing.SpanOptions) { + o.Kind = tracing.SpanKindClient + o.Properties.Set("rpc.system", "aws-api") + o.Properties.Set("rpc.method", opID) + o.Properties.Set("rpc.service", ServiceID) + }) + endTimer := startMetricTimer(ctx, "client.call.duration") + defer endTimer() + defer span.End() + + handler := smithyhttp.NewClientHandler(options.HTTPClient) + decorated := middleware.DecorateHandler(handler, stack) + result, metadata, err = decorated.Handle(ctx, params) + if err != nil { + span.SetProperty("exception.type", fmt.Sprintf("%T", err)) + span.SetProperty("exception.message", err.Error()) + + var aerr smithy.APIError + if errors.As(err, &aerr) { + span.SetProperty("api.error_code", aerr.ErrorCode()) + span.SetProperty("api.error_message", aerr.ErrorMessage()) + span.SetProperty("api.error_fault", aerr.ErrorFault().String()) + } + err = &smithy.OperationError{ ServiceID: ServiceID, OperationName: opID, Err: err, } } + + span.SetProperty("error", err != nil) + if err == nil { + span.SetStatus(tracing.SpanStatusOK) + } else { + span.SetStatus(tracing.SpanStatusError) + } + return result, metadata, err } @@ -159,7 +339,7 @@ func addProtocolFinalizerMiddlewares(stack *middleware.Stack, options Options, o if err := stack.Finalize.Insert(&resolveEndpointV2Middleware{options: options}, "GetIdentity", middleware.After); err != nil { return fmt.Errorf("add ResolveEndpointV2: %v", err) } - if err := stack.Finalize.Insert(&signRequestMiddleware{}, "ResolveEndpointV2", middleware.After); err != nil { + if err := stack.Finalize.Insert(&signRequestMiddleware{options: options}, "ResolveEndpointV2", middleware.After); err != nil { return fmt.Errorf("add Signing: %w", err) } return nil @@ -237,16 +417,15 @@ func setResolvedDefaultsMode(o *Options) { // NewFromConfig returns a new client from the provided config. func NewFromConfig(cfg aws.Config, optFns ...func(*Options)) *Client { opts := Options{ - Region: cfg.Region, - DefaultsMode: cfg.DefaultsMode, - RuntimeEnvironment: cfg.RuntimeEnvironment, - HTTPClient: cfg.HTTPClient, - Credentials: cfg.Credentials, - APIOptions: cfg.APIOptions, - Logger: cfg.Logger, - ClientLogMode: cfg.ClientLogMode, - AppID: cfg.AppID, - AccountIDEndpointMode: cfg.AccountIDEndpointMode, + Region: cfg.Region, + DefaultsMode: cfg.DefaultsMode, + RuntimeEnvironment: cfg.RuntimeEnvironment, + HTTPClient: cfg.HTTPClient, + Credentials: cfg.Credentials, + APIOptions: cfg.APIOptions, + Logger: cfg.Logger, + ClientLogMode: cfg.ClientLogMode, + AppID: cfg.AppID, } resolveAWSRetryerProvider(cfg, &opts) resolveAWSRetryMaxAttempts(cfg, &opts) @@ -434,6 +613,30 @@ func addRawResponseToMetadata(stack *middleware.Stack) error { func addRecordResponseTiming(stack *middleware.Stack) error { return stack.Deserialize.Add(&awsmiddleware.RecordResponseTiming{}, middleware.After) } + +func addSpanRetryLoop(stack *middleware.Stack, options Options) error { + return stack.Finalize.Insert(&spanRetryLoop{options: options}, "Retry", middleware.Before) +} + +type spanRetryLoop struct { + options Options +} + +func (*spanRetryLoop) ID() string { + return "spanRetryLoop" +} + +func (m *spanRetryLoop) HandleFinalize( + ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, +) ( + middleware.FinalizeOutput, middleware.Metadata, error, +) { + tracer := operationTracer(m.options.TracerProvider) + ctx, span := tracer.StartSpan(ctx, "RetryLoop") + defer span.End() + + return next.HandleFinalize(ctx, in) +} func addStreamingEventsPayload(stack *middleware.Stack) error { return stack.Finalize.Add(&v4.StreamingEventsPayload{}, middleware.Before) } @@ -477,6 +680,7 @@ func addIsPaginatorUserAgent(o *Options) { func addRetry(stack *middleware.Stack, o Options) error { attempt := retry.NewAttemptMiddleware(o.Retryer, smithyhttp.RequestCloner, func(m *retry.Attempt) { m.LogAttempts = o.ClientLogMode.IsRetries() + m.OperationMeter = o.MeterProvider.Meter("github.com/aws/aws-sdk-go-v2/service/sso") }) if err := stack.Finalize.Insert(attempt, "Signing", middleware.Before); err != nil { return err @@ -540,25 +744,6 @@ func initializeTimeOffsetResolver(c *Client) { c.timeOffset = new(atomic.Int64) } -func checkAccountID(identity smithyauth.Identity, mode aws.AccountIDEndpointMode) error { - switch mode { - case aws.AccountIDEndpointModeUnset: - case aws.AccountIDEndpointModePreferred: - case aws.AccountIDEndpointModeDisabled: - case aws.AccountIDEndpointModeRequired: - if ca, ok := identity.(*internalauthsmithy.CredentialsAdapter); !ok { - return fmt.Errorf("accountID is required but not set") - } else if ca.Credentials.AccountID == "" { - return fmt.Errorf("accountID is required but not set") - } - // default check in case invalid mode is configured through request config - default: - return fmt.Errorf("invalid accountID endpoint mode %s, must be preferred/required/disabled", mode) - } - - return nil -} - func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { ua, err := getOrAddRequestUserAgent(stack) if err != nil { @@ -574,6 +759,18 @@ func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { return nil } +func resolveTracerProvider(options *Options) { + if options.TracerProvider == nil { + options.TracerProvider = &tracing.NopTracerProvider{} + } +} + +func resolveMeterProvider(options *Options) { + if options.MeterProvider == nil { + options.MeterProvider = metrics.NopMeterProvider{} + } +} + func addRecursionDetection(stack *middleware.Stack) error { return stack.Build.Add(&awsmiddleware.RecursionDetection{}, middleware.After) } @@ -625,3 +822,89 @@ func addDisableHTTPSMiddleware(stack *middleware.Stack, o Options) error { DisableHTTPS: o.EndpointOptions.DisableHTTPS, }, "ResolveEndpointV2", middleware.After) } + +type spanInitializeStart struct { +} + +func (*spanInitializeStart) ID() string { + return "spanInitializeStart" +} + +func (m *spanInitializeStart) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "Initialize") + + return next.HandleInitialize(ctx, in) +} + +type spanInitializeEnd struct { +} + +func (*spanInitializeEnd) ID() string { + return "spanInitializeEnd" +} + +func (m *spanInitializeEnd) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleInitialize(ctx, in) +} + +type spanBuildRequestStart struct { +} + +func (*spanBuildRequestStart) ID() string { + return "spanBuildRequestStart" +} + +func (m *spanBuildRequestStart) HandleSerialize( + ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler, +) ( + middleware.SerializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "BuildRequest") + + return next.HandleSerialize(ctx, in) +} + +type spanBuildRequestEnd struct { +} + +func (*spanBuildRequestEnd) ID() string { + return "spanBuildRequestEnd" +} + +func (m *spanBuildRequestEnd) HandleBuild( + ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler, +) ( + middleware.BuildOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleBuild(ctx, in) +} + +func addSpanInitializeStart(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeStart{}, middleware.Before) +} + +func addSpanInitializeEnd(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeEnd{}, middleware.After) +} + +func addSpanBuildRequestStart(stack *middleware.Stack) error { + return stack.Serialize.Add(&spanBuildRequestStart{}, middleware.Before) +} + +func addSpanBuildRequestEnd(stack *middleware.Stack) error { + return stack.Build.Add(&spanBuildRequestEnd{}, middleware.After) +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go index 5ce00b4961..a656020237 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go @@ -102,6 +102,9 @@ func (c *Client) addOperationGetRoleCredentialsMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -141,6 +144,18 @@ func (c *Client) addOperationGetRoleCredentialsMiddlewares(stack *middleware.Sta if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go index f20e3acbfc..315526ef1a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go @@ -107,6 +107,9 @@ func (c *Client) addOperationListAccountRolesMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -146,6 +149,18 @@ func (c *Client) addOperationListAccountRolesMiddlewares(stack *middleware.Stack if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go index 391b567db9..d867b78a6f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go @@ -106,6 +106,9 @@ func (c *Client) addOperationListAccountsMiddlewares(stack *middleware.Stack, op if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -145,6 +148,18 @@ func (c *Client) addOperationListAccountsMiddlewares(stack *middleware.Stack, op if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go index 456e4a3717..434b430852 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go @@ -101,6 +101,9 @@ func (c *Client) addOperationLogoutMiddlewares(stack *middleware.Stack, options if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -140,6 +143,18 @@ func (c *Client) addOperationLogoutMiddlewares(stack *middleware.Stack, options if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go index a93a77cd7f..366963b49f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go @@ -8,7 +8,9 @@ import ( awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" smithy "github.com/aws/smithy-go" smithyauth "github.com/aws/smithy-go/auth" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -169,6 +171,9 @@ func (*resolveAuthSchemeMiddleware) ID() string { func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveAuthScheme") + defer span.End() + params := bindAuthResolverParams(ctx, m.operation, getOperationInput(ctx), m.options) options, err := m.options.AuthSchemeResolver.ResolveAuthSchemes(ctx, params) if err != nil { @@ -181,6 +186,9 @@ func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in mid } ctx = setResolvedAuthScheme(ctx, scheme) + + span.SetProperty("auth.scheme_id", scheme.Scheme.SchemeID()) + span.End() return next.HandleFinalize(ctx, in) } @@ -240,7 +248,10 @@ func (*getIdentityMiddleware) ID() string { func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { - rscheme := getResolvedAuthScheme(ctx) + innerCtx, span := tracing.StartSpan(ctx, "GetIdentity") + defer span.End() + + rscheme := getResolvedAuthScheme(innerCtx) if rscheme == nil { return out, metadata, fmt.Errorf("no resolved auth scheme") } @@ -250,12 +261,20 @@ func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no identity resolver") } - identity, err := resolver.GetIdentity(ctx, rscheme.IdentityProperties) + identity, err := timeOperationMetric(ctx, "client.call.resolve_identity_duration", + func() (smithyauth.Identity, error) { + return resolver.GetIdentity(innerCtx, rscheme.IdentityProperties) + }, + func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) if err != nil { return out, metadata, fmt.Errorf("get identity: %w", err) } ctx = setIdentity(ctx, identity) + + span.End() return next.HandleFinalize(ctx, in) } @@ -271,6 +290,7 @@ func getIdentity(ctx context.Context) smithyauth.Identity { } type signRequestMiddleware struct { + options Options } func (*signRequestMiddleware) ID() string { @@ -280,6 +300,9 @@ func (*signRequestMiddleware) ID() string { func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "SignRequest") + defer span.End() + req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unexpected transport type %T", in.Request) @@ -300,9 +323,15 @@ func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no signer") } - if err := signer.SignRequest(ctx, req, identity, rscheme.SignerProperties); err != nil { + _, err = timeOperationMetric(ctx, "client.call.signing_duration", func() (any, error) { + return nil, signer.SignRequest(ctx, req, identity, rscheme.SignerProperties) + }, func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) + if err != nil { return out, metadata, fmt.Errorf("sign request: %w", err) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go index d6297fa6a1..5f0cce2bf1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go @@ -14,6 +14,7 @@ import ( "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" smithytime "github.com/aws/smithy-go/time" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "io" "io/ioutil" @@ -44,6 +45,10 @@ func (m *awsRestjson1_deserializeOpGetRoleCredentials) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -83,6 +88,7 @@ func (m *awsRestjson1_deserializeOpGetRoleCredentials) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -200,6 +206,10 @@ func (m *awsRestjson1_deserializeOpListAccountRoles) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -239,6 +249,7 @@ func (m *awsRestjson1_deserializeOpListAccountRoles) HandleDeserialize(ctx conte } } + span.End() return out, metadata, err } @@ -365,6 +376,10 @@ func (m *awsRestjson1_deserializeOpListAccounts) HandleDeserialize(ctx context.C return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -404,6 +419,7 @@ func (m *awsRestjson1_deserializeOpListAccounts) HandleDeserialize(ctx context.C } } + span.End() return out, metadata, err } @@ -530,6 +546,10 @@ func (m *awsRestjson1_deserializeOpLogout) HandleDeserialize(ctx context.Context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -547,6 +567,7 @@ func (m *awsRestjson1_deserializeOpLogout) HandleDeserialize(ctx context.Context } } + span.End() return out, metadata, err } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go index 75ae283ef8..53c6bc7561 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go @@ -16,6 +16,7 @@ import ( smithyendpoints "github.com/aws/smithy-go/endpoints" "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" "net/url" @@ -502,14 +503,13 @@ func (*resolveEndpointV2Middleware) ID() string { func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveEndpoint") + defer span.End() + if awsmiddleware.GetRequiresLegacyEndpoints(ctx) { return next.HandleFinalize(ctx, in) } - if err := checkAccountID(getIdentity(ctx), m.options.AccountIDEndpointMode); err != nil { - return out, metadata, fmt.Errorf("invalid accountID set: %w", err) - } - req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) @@ -520,11 +520,16 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid } params := bindEndpointParams(ctx, getOperationInput(ctx), m.options) - endpt, err := m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + endpt, err := timeOperationMetric(ctx, "client.call.resolve_endpoint_duration", + func() (smithyendpoints.Endpoint, error) { + return m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + }) if err != nil { return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err) } + span.SetProperty("client.call.resolved_endpoint", endpt.URI.String()) + if endpt.URI.RawPath == "" && req.URL.RawPath != "" { endpt.URI.RawPath = endpt.URI.Path } @@ -546,5 +551,6 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid rscheme.SignerProperties.SetAll(&o.SignerProperties) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go index 012580e77f..6e8bd72d61 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go @@ -3,4 +3,4 @@ package sso // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.22.7" +const goModuleVersion = "1.23.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go index 0ba182e976..aa744f1594 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go @@ -9,7 +9,9 @@ import ( internalauthsmithy "github.com/aws/aws-sdk-go-v2/internal/auth/smithy" smithyauth "github.com/aws/smithy-go/auth" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" ) @@ -24,9 +26,6 @@ type Options struct { // modify this list for per operation behavior. APIOptions []func(*middleware.Stack) error - // Indicates how aws account ID is applied in endpoint2.0 routing - AccountIDEndpointMode aws.AccountIDEndpointMode - // The optional application specific identifier appended to the User-Agent header. AppID string @@ -69,6 +68,9 @@ type Options struct { // The logger writer interface to write logging messages to. Logger logging.Logger + // The client meter provider. + MeterProvider metrics.MeterProvider + // The region to send requests to. (Required) Region string @@ -103,6 +105,9 @@ type Options struct { // within your applications. RuntimeEnvironment aws.RuntimeEnvironment + // The client tracer provider. + TracerProvider tracing.TracerProvider + // The initial DefaultsMode used when the client options were constructed. If the // DefaultsMode was set to aws.DefaultsModeAuto this will store what the resolved // value was at that point in time. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go index 02e3141156..4dacb14b68 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go @@ -8,6 +8,7 @@ import ( smithy "github.com/aws/smithy-go" "github.com/aws/smithy-go/encoding/httpbinding" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -21,6 +22,10 @@ func (*awsRestjson1_serializeOpGetRoleCredentials) ID() string { func (m *awsRestjson1_serializeOpGetRoleCredentials) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -57,6 +62,8 @@ func (m *awsRestjson1_serializeOpGetRoleCredentials) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsGetRoleCredentialsInput(v *GetRoleCredentialsInput, encoder *httpbinding.Encoder) error { @@ -90,6 +97,10 @@ func (*awsRestjson1_serializeOpListAccountRoles) ID() string { func (m *awsRestjson1_serializeOpListAccountRoles) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -126,6 +137,8 @@ func (m *awsRestjson1_serializeOpListAccountRoles) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsListAccountRolesInput(v *ListAccountRolesInput, encoder *httpbinding.Encoder) error { @@ -163,6 +176,10 @@ func (*awsRestjson1_serializeOpListAccounts) ID() string { func (m *awsRestjson1_serializeOpListAccounts) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -199,6 +216,8 @@ func (m *awsRestjson1_serializeOpListAccounts) HandleSerialize(ctx context.Conte } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsListAccountsInput(v *ListAccountsInput, encoder *httpbinding.Encoder) error { @@ -232,6 +251,10 @@ func (*awsRestjson1_serializeOpLogout) ID() string { func (m *awsRestjson1_serializeOpLogout) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -268,6 +291,8 @@ func (m *awsRestjson1_serializeOpLogout) HandleSerialize(ctx context.Context, in } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsLogoutInput(v *LogoutInput, encoder *httpbinding.Encoder) error { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md index 6924f05836..5616e31a21 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md @@ -1,3 +1,20 @@ +# v1.27.2 (2024-09-25) + +* No change notes available for this release. + +# v1.27.1 (2024-09-23) + +* No change notes available for this release. + +# v1.27.0 (2024-09-20) + +* **Feature**: Add tracing and metrics support to service clients. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.26.8 (2024-09-17) + +* **Bug Fix**: **BREAKFIX**: Only generate AccountIDEndpointMode config for services that use it. This is a compiler break, but removes no actual functionality, as no services currently use the account ID in endpoint resolution. + # v1.26.7 (2024-09-04) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go index 25cd1c0488..aa1f3ab316 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go @@ -4,6 +4,7 @@ package ssooidc import ( "context" + "errors" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/defaults" @@ -19,7 +20,9 @@ import ( smithyauth "github.com/aws/smithy-go/auth" smithydocument "github.com/aws/smithy-go/document" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net" "net/http" @@ -30,6 +33,133 @@ import ( const ServiceID = "SSO OIDC" const ServiceAPIVersion = "2019-06-10" +type operationMetrics struct { + Duration metrics.Float64Histogram + SerializeDuration metrics.Float64Histogram + ResolveIdentityDuration metrics.Float64Histogram + ResolveEndpointDuration metrics.Float64Histogram + SignRequestDuration metrics.Float64Histogram + DeserializeDuration metrics.Float64Histogram +} + +func (m *operationMetrics) histogramFor(name string) metrics.Float64Histogram { + switch name { + case "client.call.duration": + return m.Duration + case "client.call.serialization_duration": + return m.SerializeDuration + case "client.call.resolve_identity_duration": + return m.ResolveIdentityDuration + case "client.call.resolve_endpoint_duration": + return m.ResolveEndpointDuration + case "client.call.signing_duration": + return m.SignRequestDuration + case "client.call.deserialization_duration": + return m.DeserializeDuration + default: + panic("unrecognized operation metric") + } +} + +func timeOperationMetric[T any]( + ctx context.Context, metric string, fn func() (T, error), + opts ...metrics.RecordMetricOption, +) (T, error) { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + start := time.Now() + v, err := fn() + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + return v, err +} + +func startMetricTimer(ctx context.Context, metric string, opts ...metrics.RecordMetricOption) func() { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + var ended bool + start := time.Now() + return func() { + if ended { + return + } + ended = true + + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + } +} + +func withOperationMetadata(ctx context.Context) metrics.RecordMetricOption { + return func(o *metrics.RecordMetricOptions) { + o.Properties.Set("rpc.service", middleware.GetServiceID(ctx)) + o.Properties.Set("rpc.method", middleware.GetOperationName(ctx)) + } +} + +type operationMetricsKey struct{} + +func withOperationMetrics(parent context.Context, mp metrics.MeterProvider) (context.Context, error) { + meter := mp.Meter("github.com/aws/aws-sdk-go-v2/service/ssooidc") + om := &operationMetrics{} + + var err error + + om.Duration, err = operationMetricTimer(meter, "client.call.duration", + "Overall call duration (including retries and time to send or receive request and response body)") + if err != nil { + return nil, err + } + om.SerializeDuration, err = operationMetricTimer(meter, "client.call.serialization_duration", + "The time it takes to serialize a message body") + if err != nil { + return nil, err + } + om.ResolveIdentityDuration, err = operationMetricTimer(meter, "client.call.auth.resolve_identity_duration", + "The time taken to acquire an identity (AWS credentials, bearer token, etc) from an Identity Provider") + if err != nil { + return nil, err + } + om.ResolveEndpointDuration, err = operationMetricTimer(meter, "client.call.resolve_endpoint_duration", + "The time it takes to resolve an endpoint (endpoint resolver, not DNS) for the request") + if err != nil { + return nil, err + } + om.SignRequestDuration, err = operationMetricTimer(meter, "client.call.auth.signing_duration", + "The time it takes to sign a request") + if err != nil { + return nil, err + } + om.DeserializeDuration, err = operationMetricTimer(meter, "client.call.deserialization_duration", + "The time it takes to deserialize a message body") + if err != nil { + return nil, err + } + + return context.WithValue(parent, operationMetricsKey{}, om), nil +} + +func operationMetricTimer(m metrics.Meter, name, desc string) (metrics.Float64Histogram, error) { + return m.Float64Histogram(name, func(o *metrics.InstrumentOptions) { + o.UnitLabel = "s" + o.Description = desc + }) +} + +func getOperationMetrics(ctx context.Context) *operationMetrics { + return ctx.Value(operationMetricsKey{}).(*operationMetrics) +} + +func operationTracer(p tracing.TracerProvider) tracing.Tracer { + return p.Tracer("github.com/aws/aws-sdk-go-v2/service/ssooidc") +} + // Client provides the API client to make operations call for AWS SSO OIDC. type Client struct { options Options @@ -56,6 +186,10 @@ func New(options Options, optFns ...func(*Options)) *Client { resolveEndpointResolverV2(&options) + resolveTracerProvider(&options) + + resolveMeterProvider(&options) + resolveAuthSchemeResolver(&options) for _, fn := range optFns { @@ -88,8 +222,15 @@ func (c *Client) Options() Options { return c.options.Copy() } -func (c *Client) invokeOperation(ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error) (result interface{}, metadata middleware.Metadata, err error) { +func (c *Client) invokeOperation( + ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error, +) ( + result interface{}, metadata middleware.Metadata, err error, +) { ctx = middleware.ClearStackValues(ctx) + ctx = middleware.WithServiceID(ctx, ServiceID) + ctx = middleware.WithOperationName(ctx, opID) + stack := middleware.NewStack(opID, smithyhttp.NewStackRequest) options := c.options.Copy() @@ -113,15 +254,54 @@ func (c *Client) invokeOperation(ctx context.Context, opID string, params interf } } - handler := middleware.DecorateHandler(smithyhttp.NewClientHandler(options.HTTPClient), stack) - result, metadata, err = handler.Handle(ctx, params) + ctx, err = withOperationMetrics(ctx, options.MeterProvider) if err != nil { + return nil, metadata, err + } + + tracer := operationTracer(options.TracerProvider) + spanName := fmt.Sprintf("%s.%s", ServiceID, opID) + + ctx = tracing.WithOperationTracer(ctx, tracer) + + ctx, span := tracer.StartSpan(ctx, spanName, func(o *tracing.SpanOptions) { + o.Kind = tracing.SpanKindClient + o.Properties.Set("rpc.system", "aws-api") + o.Properties.Set("rpc.method", opID) + o.Properties.Set("rpc.service", ServiceID) + }) + endTimer := startMetricTimer(ctx, "client.call.duration") + defer endTimer() + defer span.End() + + handler := smithyhttp.NewClientHandler(options.HTTPClient) + decorated := middleware.DecorateHandler(handler, stack) + result, metadata, err = decorated.Handle(ctx, params) + if err != nil { + span.SetProperty("exception.type", fmt.Sprintf("%T", err)) + span.SetProperty("exception.message", err.Error()) + + var aerr smithy.APIError + if errors.As(err, &aerr) { + span.SetProperty("api.error_code", aerr.ErrorCode()) + span.SetProperty("api.error_message", aerr.ErrorMessage()) + span.SetProperty("api.error_fault", aerr.ErrorFault().String()) + } + err = &smithy.OperationError{ ServiceID: ServiceID, OperationName: opID, Err: err, } } + + span.SetProperty("error", err != nil) + if err == nil { + span.SetStatus(tracing.SpanStatusOK) + } else { + span.SetStatus(tracing.SpanStatusError) + } + return result, metadata, err } @@ -159,7 +339,7 @@ func addProtocolFinalizerMiddlewares(stack *middleware.Stack, options Options, o if err := stack.Finalize.Insert(&resolveEndpointV2Middleware{options: options}, "GetIdentity", middleware.After); err != nil { return fmt.Errorf("add ResolveEndpointV2: %v", err) } - if err := stack.Finalize.Insert(&signRequestMiddleware{}, "ResolveEndpointV2", middleware.After); err != nil { + if err := stack.Finalize.Insert(&signRequestMiddleware{options: options}, "ResolveEndpointV2", middleware.After); err != nil { return fmt.Errorf("add Signing: %w", err) } return nil @@ -237,16 +417,15 @@ func setResolvedDefaultsMode(o *Options) { // NewFromConfig returns a new client from the provided config. func NewFromConfig(cfg aws.Config, optFns ...func(*Options)) *Client { opts := Options{ - Region: cfg.Region, - DefaultsMode: cfg.DefaultsMode, - RuntimeEnvironment: cfg.RuntimeEnvironment, - HTTPClient: cfg.HTTPClient, - Credentials: cfg.Credentials, - APIOptions: cfg.APIOptions, - Logger: cfg.Logger, - ClientLogMode: cfg.ClientLogMode, - AppID: cfg.AppID, - AccountIDEndpointMode: cfg.AccountIDEndpointMode, + Region: cfg.Region, + DefaultsMode: cfg.DefaultsMode, + RuntimeEnvironment: cfg.RuntimeEnvironment, + HTTPClient: cfg.HTTPClient, + Credentials: cfg.Credentials, + APIOptions: cfg.APIOptions, + Logger: cfg.Logger, + ClientLogMode: cfg.ClientLogMode, + AppID: cfg.AppID, } resolveAWSRetryerProvider(cfg, &opts) resolveAWSRetryMaxAttempts(cfg, &opts) @@ -434,6 +613,30 @@ func addRawResponseToMetadata(stack *middleware.Stack) error { func addRecordResponseTiming(stack *middleware.Stack) error { return stack.Deserialize.Add(&awsmiddleware.RecordResponseTiming{}, middleware.After) } + +func addSpanRetryLoop(stack *middleware.Stack, options Options) error { + return stack.Finalize.Insert(&spanRetryLoop{options: options}, "Retry", middleware.Before) +} + +type spanRetryLoop struct { + options Options +} + +func (*spanRetryLoop) ID() string { + return "spanRetryLoop" +} + +func (m *spanRetryLoop) HandleFinalize( + ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, +) ( + middleware.FinalizeOutput, middleware.Metadata, error, +) { + tracer := operationTracer(m.options.TracerProvider) + ctx, span := tracer.StartSpan(ctx, "RetryLoop") + defer span.End() + + return next.HandleFinalize(ctx, in) +} func addStreamingEventsPayload(stack *middleware.Stack) error { return stack.Finalize.Add(&v4.StreamingEventsPayload{}, middleware.Before) } @@ -477,6 +680,7 @@ func addIsPaginatorUserAgent(o *Options) { func addRetry(stack *middleware.Stack, o Options) error { attempt := retry.NewAttemptMiddleware(o.Retryer, smithyhttp.RequestCloner, func(m *retry.Attempt) { m.LogAttempts = o.ClientLogMode.IsRetries() + m.OperationMeter = o.MeterProvider.Meter("github.com/aws/aws-sdk-go-v2/service/ssooidc") }) if err := stack.Finalize.Insert(attempt, "Signing", middleware.Before); err != nil { return err @@ -540,25 +744,6 @@ func initializeTimeOffsetResolver(c *Client) { c.timeOffset = new(atomic.Int64) } -func checkAccountID(identity smithyauth.Identity, mode aws.AccountIDEndpointMode) error { - switch mode { - case aws.AccountIDEndpointModeUnset: - case aws.AccountIDEndpointModePreferred: - case aws.AccountIDEndpointModeDisabled: - case aws.AccountIDEndpointModeRequired: - if ca, ok := identity.(*internalauthsmithy.CredentialsAdapter); !ok { - return fmt.Errorf("accountID is required but not set") - } else if ca.Credentials.AccountID == "" { - return fmt.Errorf("accountID is required but not set") - } - // default check in case invalid mode is configured through request config - default: - return fmt.Errorf("invalid accountID endpoint mode %s, must be preferred/required/disabled", mode) - } - - return nil -} - func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { ua, err := getOrAddRequestUserAgent(stack) if err != nil { @@ -574,6 +759,18 @@ func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { return nil } +func resolveTracerProvider(options *Options) { + if options.TracerProvider == nil { + options.TracerProvider = &tracing.NopTracerProvider{} + } +} + +func resolveMeterProvider(options *Options) { + if options.MeterProvider == nil { + options.MeterProvider = metrics.NopMeterProvider{} + } +} + func addRecursionDetection(stack *middleware.Stack) error { return stack.Build.Add(&awsmiddleware.RecursionDetection{}, middleware.After) } @@ -625,3 +822,89 @@ func addDisableHTTPSMiddleware(stack *middleware.Stack, o Options) error { DisableHTTPS: o.EndpointOptions.DisableHTTPS, }, "ResolveEndpointV2", middleware.After) } + +type spanInitializeStart struct { +} + +func (*spanInitializeStart) ID() string { + return "spanInitializeStart" +} + +func (m *spanInitializeStart) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "Initialize") + + return next.HandleInitialize(ctx, in) +} + +type spanInitializeEnd struct { +} + +func (*spanInitializeEnd) ID() string { + return "spanInitializeEnd" +} + +func (m *spanInitializeEnd) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleInitialize(ctx, in) +} + +type spanBuildRequestStart struct { +} + +func (*spanBuildRequestStart) ID() string { + return "spanBuildRequestStart" +} + +func (m *spanBuildRequestStart) HandleSerialize( + ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler, +) ( + middleware.SerializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "BuildRequest") + + return next.HandleSerialize(ctx, in) +} + +type spanBuildRequestEnd struct { +} + +func (*spanBuildRequestEnd) ID() string { + return "spanBuildRequestEnd" +} + +func (m *spanBuildRequestEnd) HandleBuild( + ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler, +) ( + middleware.BuildOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleBuild(ctx, in) +} + +func addSpanInitializeStart(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeStart{}, middleware.Before) +} + +func addSpanInitializeEnd(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeEnd{}, middleware.After) +} + +func addSpanBuildRequestStart(stack *middleware.Stack) error { + return stack.Serialize.Add(&spanBuildRequestStart{}, middleware.Before) +} + +func addSpanBuildRequestEnd(stack *middleware.Stack) error { + return stack.Build.Add(&spanBuildRequestEnd{}, middleware.After) +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go index 8b829188eb..5fb8d2ab94 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go @@ -174,6 +174,9 @@ func (c *Client) addOperationCreateTokenMiddlewares(stack *middleware.Stack, opt if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -213,6 +216,18 @@ func (c *Client) addOperationCreateTokenMiddlewares(stack *middleware.Stack, opt if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go index af04c251a2..8abd43690d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go @@ -205,6 +205,9 @@ func (c *Client) addOperationCreateTokenWithIAMMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -244,6 +247,18 @@ func (c *Client) addOperationCreateTokenWithIAMMiddlewares(stack *middleware.Sta if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go index d8c766c989..03a3594be0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go @@ -135,6 +135,9 @@ func (c *Client) addOperationRegisterClientMiddlewares(stack *middleware.Stack, if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -174,6 +177,18 @@ func (c *Client) addOperationRegisterClientMiddlewares(stack *middleware.Stack, if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go index 7c2b38ba90..203ca5e67b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go @@ -125,6 +125,9 @@ func (c *Client) addOperationStartDeviceAuthorizationMiddlewares(stack *middlewa if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -164,6 +167,18 @@ func (c *Client) addOperationStartDeviceAuthorizationMiddlewares(stack *middlewa if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go index e6058da813..e4b87f5bc4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go @@ -8,7 +8,9 @@ import ( awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" smithy "github.com/aws/smithy-go" smithyauth "github.com/aws/smithy-go/auth" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -163,6 +165,9 @@ func (*resolveAuthSchemeMiddleware) ID() string { func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveAuthScheme") + defer span.End() + params := bindAuthResolverParams(ctx, m.operation, getOperationInput(ctx), m.options) options, err := m.options.AuthSchemeResolver.ResolveAuthSchemes(ctx, params) if err != nil { @@ -175,6 +180,9 @@ func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in mid } ctx = setResolvedAuthScheme(ctx, scheme) + + span.SetProperty("auth.scheme_id", scheme.Scheme.SchemeID()) + span.End() return next.HandleFinalize(ctx, in) } @@ -234,7 +242,10 @@ func (*getIdentityMiddleware) ID() string { func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { - rscheme := getResolvedAuthScheme(ctx) + innerCtx, span := tracing.StartSpan(ctx, "GetIdentity") + defer span.End() + + rscheme := getResolvedAuthScheme(innerCtx) if rscheme == nil { return out, metadata, fmt.Errorf("no resolved auth scheme") } @@ -244,12 +255,20 @@ func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no identity resolver") } - identity, err := resolver.GetIdentity(ctx, rscheme.IdentityProperties) + identity, err := timeOperationMetric(ctx, "client.call.resolve_identity_duration", + func() (smithyauth.Identity, error) { + return resolver.GetIdentity(innerCtx, rscheme.IdentityProperties) + }, + func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) if err != nil { return out, metadata, fmt.Errorf("get identity: %w", err) } ctx = setIdentity(ctx, identity) + + span.End() return next.HandleFinalize(ctx, in) } @@ -265,6 +284,7 @@ func getIdentity(ctx context.Context) smithyauth.Identity { } type signRequestMiddleware struct { + options Options } func (*signRequestMiddleware) ID() string { @@ -274,6 +294,9 @@ func (*signRequestMiddleware) ID() string { func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "SignRequest") + defer span.End() + req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unexpected transport type %T", in.Request) @@ -294,9 +317,15 @@ func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no signer") } - if err := signer.SignRequest(ctx, req, identity, rscheme.SignerProperties); err != nil { + _, err = timeOperationMetric(ctx, "client.call.signing_duration", func() (any, error) { + return nil, signer.SignRequest(ctx, req, identity, rscheme.SignerProperties) + }, func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) + if err != nil { return out, metadata, fmt.Errorf("sign request: %w", err) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go index 05e8c6b7e5..ae9f145e62 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go @@ -14,6 +14,7 @@ import ( "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" smithytime "github.com/aws/smithy-go/time" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "io" "strings" @@ -43,6 +44,10 @@ func (m *awsRestjson1_deserializeOpCreateToken) HandleDeserialize(ctx context.Co return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -82,6 +87,7 @@ func (m *awsRestjson1_deserializeOpCreateToken) HandleDeserialize(ctx context.Co } } + span.End() return out, metadata, err } @@ -264,6 +270,10 @@ func (m *awsRestjson1_deserializeOpCreateTokenWithIAM) HandleDeserialize(ctx con return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -303,6 +313,7 @@ func (m *awsRestjson1_deserializeOpCreateTokenWithIAM) HandleDeserialize(ctx con } } + span.End() return out, metadata, err } @@ -502,6 +513,10 @@ func (m *awsRestjson1_deserializeOpRegisterClient) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -541,6 +556,7 @@ func (m *awsRestjson1_deserializeOpRegisterClient) HandleDeserialize(ctx context } } + span.End() return out, metadata, err } @@ -721,6 +737,10 @@ func (m *awsRestjson1_deserializeOpStartDeviceAuthorization) HandleDeserialize(c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -760,6 +780,7 @@ func (m *awsRestjson1_deserializeOpStartDeviceAuthorization) HandleDeserialize(c } } + span.End() return out, metadata, err } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go index d7099721fe..6feea0c9fe 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go @@ -16,6 +16,7 @@ import ( smithyendpoints "github.com/aws/smithy-go/endpoints" "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" "net/url" @@ -502,14 +503,13 @@ func (*resolveEndpointV2Middleware) ID() string { func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveEndpoint") + defer span.End() + if awsmiddleware.GetRequiresLegacyEndpoints(ctx) { return next.HandleFinalize(ctx, in) } - if err := checkAccountID(getIdentity(ctx), m.options.AccountIDEndpointMode); err != nil { - return out, metadata, fmt.Errorf("invalid accountID set: %w", err) - } - req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) @@ -520,11 +520,16 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid } params := bindEndpointParams(ctx, getOperationInput(ctx), m.options) - endpt, err := m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + endpt, err := timeOperationMetric(ctx, "client.call.resolve_endpoint_duration", + func() (smithyendpoints.Endpoint, error) { + return m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + }) if err != nil { return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err) } + span.SetProperty("client.call.resolved_endpoint", endpt.URI.String()) + if endpt.URI.RawPath == "" && req.URL.RawPath != "" { endpt.URI.RawPath = endpt.URI.Path } @@ -546,5 +551,6 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid rscheme.SignerProperties.SetAll(&o.SignerProperties) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go index 880f8bbeff..5d5d5086bc 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go @@ -3,4 +3,4 @@ package ssooidc // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.26.7" +const goModuleVersion = "1.27.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go index a012e4cb8d..55dd80d0e0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go @@ -9,7 +9,9 @@ import ( internalauthsmithy "github.com/aws/aws-sdk-go-v2/internal/auth/smithy" smithyauth "github.com/aws/smithy-go/auth" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" ) @@ -24,9 +26,6 @@ type Options struct { // modify this list for per operation behavior. APIOptions []func(*middleware.Stack) error - // Indicates how aws account ID is applied in endpoint2.0 routing - AccountIDEndpointMode aws.AccountIDEndpointMode - // The optional application specific identifier appended to the User-Agent header. AppID string @@ -69,6 +68,9 @@ type Options struct { // The logger writer interface to write logging messages to. Logger logging.Logger + // The client meter provider. + MeterProvider metrics.MeterProvider + // The region to send requests to. (Required) Region string @@ -103,6 +105,9 @@ type Options struct { // within your applications. RuntimeEnvironment aws.RuntimeEnvironment + // The client tracer provider. + TracerProvider tracing.TracerProvider + // The initial DefaultsMode used when the client options were constructed. If the // DefaultsMode was set to aws.DefaultsModeAuto this will store what the resolved // value was at that point in time. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go index 04411bd616..1ad103d1ed 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go @@ -10,6 +10,7 @@ import ( "github.com/aws/smithy-go/encoding/httpbinding" smithyjson "github.com/aws/smithy-go/encoding/json" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -23,6 +24,10 @@ func (*awsRestjson1_serializeOpCreateToken) ID() string { func (m *awsRestjson1_serializeOpCreateToken) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -66,6 +71,8 @@ func (m *awsRestjson1_serializeOpCreateToken) HandleSerialize(ctx context.Contex } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsCreateTokenInput(v *CreateTokenInput, encoder *httpbinding.Encoder) error { @@ -140,6 +147,10 @@ func (*awsRestjson1_serializeOpCreateTokenWithIAM) ID() string { func (m *awsRestjson1_serializeOpCreateTokenWithIAM) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -183,6 +194,8 @@ func (m *awsRestjson1_serializeOpCreateTokenWithIAM) HandleSerialize(ctx context } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsCreateTokenWithIAMInput(v *CreateTokenWithIAMInput, encoder *httpbinding.Encoder) error { @@ -267,6 +280,10 @@ func (*awsRestjson1_serializeOpRegisterClient) ID() string { func (m *awsRestjson1_serializeOpRegisterClient) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -310,6 +327,8 @@ func (m *awsRestjson1_serializeOpRegisterClient) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsRegisterClientInput(v *RegisterClientInput, encoder *httpbinding.Encoder) error { @@ -378,6 +397,10 @@ func (*awsRestjson1_serializeOpStartDeviceAuthorization) ID() string { func (m *awsRestjson1_serializeOpStartDeviceAuthorization) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -421,6 +444,8 @@ func (m *awsRestjson1_serializeOpStartDeviceAuthorization) HandleSerialize(ctx c } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsRestjson1_serializeOpHttpBindingsStartDeviceAuthorizationInput(v *StartDeviceAuthorizationInput, encoder *httpbinding.Encoder) error { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md index 9bcf2568ed..bdfacaa093 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md @@ -1,3 +1,20 @@ +# v1.31.2 (2024-09-25) + +* No change notes available for this release. + +# v1.31.1 (2024-09-23) + +* No change notes available for this release. + +# v1.31.0 (2024-09-20) + +* **Feature**: Add tracing and metrics support to service clients. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.30.8 (2024-09-17) + +* **Bug Fix**: **BREAKFIX**: Only generate AccountIDEndpointMode config for services that use it. This is a compiler break, but removes no actual functionality, as no services currently use the account ID in endpoint resolution. + # v1.30.7 (2024-09-04) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go index acd2b8e7a1..0df1bddf74 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go @@ -4,6 +4,7 @@ package sts import ( "context" + "errors" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/defaults" @@ -22,7 +23,9 @@ import ( smithyauth "github.com/aws/smithy-go/auth" smithydocument "github.com/aws/smithy-go/document" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net" "net/http" @@ -33,6 +36,133 @@ import ( const ServiceID = "STS" const ServiceAPIVersion = "2011-06-15" +type operationMetrics struct { + Duration metrics.Float64Histogram + SerializeDuration metrics.Float64Histogram + ResolveIdentityDuration metrics.Float64Histogram + ResolveEndpointDuration metrics.Float64Histogram + SignRequestDuration metrics.Float64Histogram + DeserializeDuration metrics.Float64Histogram +} + +func (m *operationMetrics) histogramFor(name string) metrics.Float64Histogram { + switch name { + case "client.call.duration": + return m.Duration + case "client.call.serialization_duration": + return m.SerializeDuration + case "client.call.resolve_identity_duration": + return m.ResolveIdentityDuration + case "client.call.resolve_endpoint_duration": + return m.ResolveEndpointDuration + case "client.call.signing_duration": + return m.SignRequestDuration + case "client.call.deserialization_duration": + return m.DeserializeDuration + default: + panic("unrecognized operation metric") + } +} + +func timeOperationMetric[T any]( + ctx context.Context, metric string, fn func() (T, error), + opts ...metrics.RecordMetricOption, +) (T, error) { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + start := time.Now() + v, err := fn() + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + return v, err +} + +func startMetricTimer(ctx context.Context, metric string, opts ...metrics.RecordMetricOption) func() { + instr := getOperationMetrics(ctx).histogramFor(metric) + opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...) + + var ended bool + start := time.Now() + return func() { + if ended { + return + } + ended = true + + end := time.Now() + + elapsed := end.Sub(start) + instr.Record(ctx, float64(elapsed)/1e9, opts...) + } +} + +func withOperationMetadata(ctx context.Context) metrics.RecordMetricOption { + return func(o *metrics.RecordMetricOptions) { + o.Properties.Set("rpc.service", middleware.GetServiceID(ctx)) + o.Properties.Set("rpc.method", middleware.GetOperationName(ctx)) + } +} + +type operationMetricsKey struct{} + +func withOperationMetrics(parent context.Context, mp metrics.MeterProvider) (context.Context, error) { + meter := mp.Meter("github.com/aws/aws-sdk-go-v2/service/sts") + om := &operationMetrics{} + + var err error + + om.Duration, err = operationMetricTimer(meter, "client.call.duration", + "Overall call duration (including retries and time to send or receive request and response body)") + if err != nil { + return nil, err + } + om.SerializeDuration, err = operationMetricTimer(meter, "client.call.serialization_duration", + "The time it takes to serialize a message body") + if err != nil { + return nil, err + } + om.ResolveIdentityDuration, err = operationMetricTimer(meter, "client.call.auth.resolve_identity_duration", + "The time taken to acquire an identity (AWS credentials, bearer token, etc) from an Identity Provider") + if err != nil { + return nil, err + } + om.ResolveEndpointDuration, err = operationMetricTimer(meter, "client.call.resolve_endpoint_duration", + "The time it takes to resolve an endpoint (endpoint resolver, not DNS) for the request") + if err != nil { + return nil, err + } + om.SignRequestDuration, err = operationMetricTimer(meter, "client.call.auth.signing_duration", + "The time it takes to sign a request") + if err != nil { + return nil, err + } + om.DeserializeDuration, err = operationMetricTimer(meter, "client.call.deserialization_duration", + "The time it takes to deserialize a message body") + if err != nil { + return nil, err + } + + return context.WithValue(parent, operationMetricsKey{}, om), nil +} + +func operationMetricTimer(m metrics.Meter, name, desc string) (metrics.Float64Histogram, error) { + return m.Float64Histogram(name, func(o *metrics.InstrumentOptions) { + o.UnitLabel = "s" + o.Description = desc + }) +} + +func getOperationMetrics(ctx context.Context) *operationMetrics { + return ctx.Value(operationMetricsKey{}).(*operationMetrics) +} + +func operationTracer(p tracing.TracerProvider) tracing.Tracer { + return p.Tracer("github.com/aws/aws-sdk-go-v2/service/sts") +} + // Client provides the API client to make operations call for AWS Security Token // Service. type Client struct { @@ -60,6 +190,10 @@ func New(options Options, optFns ...func(*Options)) *Client { resolveEndpointResolverV2(&options) + resolveTracerProvider(&options) + + resolveMeterProvider(&options) + resolveAuthSchemeResolver(&options) for _, fn := range optFns { @@ -92,8 +226,15 @@ func (c *Client) Options() Options { return c.options.Copy() } -func (c *Client) invokeOperation(ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error) (result interface{}, metadata middleware.Metadata, err error) { +func (c *Client) invokeOperation( + ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error, +) ( + result interface{}, metadata middleware.Metadata, err error, +) { ctx = middleware.ClearStackValues(ctx) + ctx = middleware.WithServiceID(ctx, ServiceID) + ctx = middleware.WithOperationName(ctx, opID) + stack := middleware.NewStack(opID, smithyhttp.NewStackRequest) options := c.options.Copy() @@ -117,15 +258,54 @@ func (c *Client) invokeOperation(ctx context.Context, opID string, params interf } } - handler := middleware.DecorateHandler(smithyhttp.NewClientHandler(options.HTTPClient), stack) - result, metadata, err = handler.Handle(ctx, params) + ctx, err = withOperationMetrics(ctx, options.MeterProvider) if err != nil { + return nil, metadata, err + } + + tracer := operationTracer(options.TracerProvider) + spanName := fmt.Sprintf("%s.%s", ServiceID, opID) + + ctx = tracing.WithOperationTracer(ctx, tracer) + + ctx, span := tracer.StartSpan(ctx, spanName, func(o *tracing.SpanOptions) { + o.Kind = tracing.SpanKindClient + o.Properties.Set("rpc.system", "aws-api") + o.Properties.Set("rpc.method", opID) + o.Properties.Set("rpc.service", ServiceID) + }) + endTimer := startMetricTimer(ctx, "client.call.duration") + defer endTimer() + defer span.End() + + handler := smithyhttp.NewClientHandler(options.HTTPClient) + decorated := middleware.DecorateHandler(handler, stack) + result, metadata, err = decorated.Handle(ctx, params) + if err != nil { + span.SetProperty("exception.type", fmt.Sprintf("%T", err)) + span.SetProperty("exception.message", err.Error()) + + var aerr smithy.APIError + if errors.As(err, &aerr) { + span.SetProperty("api.error_code", aerr.ErrorCode()) + span.SetProperty("api.error_message", aerr.ErrorMessage()) + span.SetProperty("api.error_fault", aerr.ErrorFault().String()) + } + err = &smithy.OperationError{ ServiceID: ServiceID, OperationName: opID, Err: err, } } + + span.SetProperty("error", err != nil) + if err == nil { + span.SetStatus(tracing.SpanStatusOK) + } else { + span.SetStatus(tracing.SpanStatusError) + } + return result, metadata, err } @@ -163,7 +343,7 @@ func addProtocolFinalizerMiddlewares(stack *middleware.Stack, options Options, o if err := stack.Finalize.Insert(&resolveEndpointV2Middleware{options: options}, "GetIdentity", middleware.After); err != nil { return fmt.Errorf("add ResolveEndpointV2: %v", err) } - if err := stack.Finalize.Insert(&signRequestMiddleware{}, "ResolveEndpointV2", middleware.After); err != nil { + if err := stack.Finalize.Insert(&signRequestMiddleware{options: options}, "ResolveEndpointV2", middleware.After); err != nil { return fmt.Errorf("add Signing: %w", err) } return nil @@ -241,16 +421,15 @@ func setResolvedDefaultsMode(o *Options) { // NewFromConfig returns a new client from the provided config. func NewFromConfig(cfg aws.Config, optFns ...func(*Options)) *Client { opts := Options{ - Region: cfg.Region, - DefaultsMode: cfg.DefaultsMode, - RuntimeEnvironment: cfg.RuntimeEnvironment, - HTTPClient: cfg.HTTPClient, - Credentials: cfg.Credentials, - APIOptions: cfg.APIOptions, - Logger: cfg.Logger, - ClientLogMode: cfg.ClientLogMode, - AppID: cfg.AppID, - AccountIDEndpointMode: cfg.AccountIDEndpointMode, + Region: cfg.Region, + DefaultsMode: cfg.DefaultsMode, + RuntimeEnvironment: cfg.RuntimeEnvironment, + HTTPClient: cfg.HTTPClient, + Credentials: cfg.Credentials, + APIOptions: cfg.APIOptions, + Logger: cfg.Logger, + ClientLogMode: cfg.ClientLogMode, + AppID: cfg.AppID, } resolveAWSRetryerProvider(cfg, &opts) resolveAWSRetryMaxAttempts(cfg, &opts) @@ -438,6 +617,30 @@ func addRawResponseToMetadata(stack *middleware.Stack) error { func addRecordResponseTiming(stack *middleware.Stack) error { return stack.Deserialize.Add(&awsmiddleware.RecordResponseTiming{}, middleware.After) } + +func addSpanRetryLoop(stack *middleware.Stack, options Options) error { + return stack.Finalize.Insert(&spanRetryLoop{options: options}, "Retry", middleware.Before) +} + +type spanRetryLoop struct { + options Options +} + +func (*spanRetryLoop) ID() string { + return "spanRetryLoop" +} + +func (m *spanRetryLoop) HandleFinalize( + ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, +) ( + middleware.FinalizeOutput, middleware.Metadata, error, +) { + tracer := operationTracer(m.options.TracerProvider) + ctx, span := tracer.StartSpan(ctx, "RetryLoop") + defer span.End() + + return next.HandleFinalize(ctx, in) +} func addStreamingEventsPayload(stack *middleware.Stack) error { return stack.Finalize.Add(&v4.StreamingEventsPayload{}, middleware.Before) } @@ -481,6 +684,7 @@ func addIsPaginatorUserAgent(o *Options) { func addRetry(stack *middleware.Stack, o Options) error { attempt := retry.NewAttemptMiddleware(o.Retryer, smithyhttp.RequestCloner, func(m *retry.Attempt) { m.LogAttempts = o.ClientLogMode.IsRetries() + m.OperationMeter = o.MeterProvider.Meter("github.com/aws/aws-sdk-go-v2/service/sts") }) if err := stack.Finalize.Insert(attempt, "Signing", middleware.Before); err != nil { return err @@ -544,25 +748,6 @@ func initializeTimeOffsetResolver(c *Client) { c.timeOffset = new(atomic.Int64) } -func checkAccountID(identity smithyauth.Identity, mode aws.AccountIDEndpointMode) error { - switch mode { - case aws.AccountIDEndpointModeUnset: - case aws.AccountIDEndpointModePreferred: - case aws.AccountIDEndpointModeDisabled: - case aws.AccountIDEndpointModeRequired: - if ca, ok := identity.(*internalauthsmithy.CredentialsAdapter); !ok { - return fmt.Errorf("accountID is required but not set") - } else if ca.Credentials.AccountID == "" { - return fmt.Errorf("accountID is required but not set") - } - // default check in case invalid mode is configured through request config - default: - return fmt.Errorf("invalid accountID endpoint mode %s, must be preferred/required/disabled", mode) - } - - return nil -} - func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { ua, err := getOrAddRequestUserAgent(stack) if err != nil { @@ -578,6 +763,18 @@ func addUserAgentRetryMode(stack *middleware.Stack, options Options) error { return nil } +func resolveTracerProvider(options *Options) { + if options.TracerProvider == nil { + options.TracerProvider = &tracing.NopTracerProvider{} + } +} + +func resolveMeterProvider(options *Options) { + if options.MeterProvider == nil { + options.MeterProvider = metrics.NopMeterProvider{} + } +} + func addRecursionDetection(stack *middleware.Stack) error { return stack.Build.Add(&awsmiddleware.RecursionDetection{}, middleware.After) } @@ -777,3 +974,89 @@ func addDisableHTTPSMiddleware(stack *middleware.Stack, o Options) error { DisableHTTPS: o.EndpointOptions.DisableHTTPS, }, "ResolveEndpointV2", middleware.After) } + +type spanInitializeStart struct { +} + +func (*spanInitializeStart) ID() string { + return "spanInitializeStart" +} + +func (m *spanInitializeStart) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "Initialize") + + return next.HandleInitialize(ctx, in) +} + +type spanInitializeEnd struct { +} + +func (*spanInitializeEnd) ID() string { + return "spanInitializeEnd" +} + +func (m *spanInitializeEnd) HandleInitialize( + ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler, +) ( + middleware.InitializeOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleInitialize(ctx, in) +} + +type spanBuildRequestStart struct { +} + +func (*spanBuildRequestStart) ID() string { + return "spanBuildRequestStart" +} + +func (m *spanBuildRequestStart) HandleSerialize( + ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler, +) ( + middleware.SerializeOutput, middleware.Metadata, error, +) { + ctx, _ = tracing.StartSpan(ctx, "BuildRequest") + + return next.HandleSerialize(ctx, in) +} + +type spanBuildRequestEnd struct { +} + +func (*spanBuildRequestEnd) ID() string { + return "spanBuildRequestEnd" +} + +func (m *spanBuildRequestEnd) HandleBuild( + ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler, +) ( + middleware.BuildOutput, middleware.Metadata, error, +) { + ctx, span := tracing.PopSpan(ctx) + span.End() + + return next.HandleBuild(ctx, in) +} + +func addSpanInitializeStart(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeStart{}, middleware.Before) +} + +func addSpanInitializeEnd(stack *middleware.Stack) error { + return stack.Initialize.Add(&spanInitializeEnd{}, middleware.After) +} + +func addSpanBuildRequestStart(stack *middleware.Stack) error { + return stack.Serialize.Add(&spanBuildRequestStart{}, middleware.Before) +} + +func addSpanBuildRequestEnd(stack *middleware.Stack) error { + return stack.Build.Add(&spanBuildRequestEnd{}, middleware.After) +} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go index e74fc8ba9f..be03f017d4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go @@ -445,6 +445,9 @@ func (c *Client) addOperationAssumeRoleMiddlewares(stack *middleware.Stack, opti if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -484,6 +487,18 @@ func (c *Client) addOperationAssumeRoleMiddlewares(stack *middleware.Stack, opti if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go index 4c685abd5f..b8b0c095f7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go @@ -385,6 +385,9 @@ func (c *Client) addOperationAssumeRoleWithSAMLMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -424,6 +427,18 @@ func (c *Client) addOperationAssumeRoleWithSAMLMiddlewares(stack *middleware.Sta if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go index 0b5e5a377c..ffe2479f63 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go @@ -396,6 +396,9 @@ func (c *Client) addOperationAssumeRoleWithWebIdentityMiddlewares(stack *middlew if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -435,6 +438,18 @@ func (c *Client) addOperationAssumeRoleWithWebIdentityMiddlewares(stack *middlew if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go index b1f14d28ce..a56840e1b0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go @@ -126,6 +126,9 @@ func (c *Client) addOperationDecodeAuthorizationMessageMiddlewares(stack *middle if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -165,6 +168,18 @@ func (c *Client) addOperationDecodeAuthorizationMessageMiddlewares(stack *middle if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go index 3ba00873db..c80b0550b0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go @@ -117,6 +117,9 @@ func (c *Client) addOperationGetAccessKeyInfoMiddlewares(stack *middleware.Stack if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -156,6 +159,18 @@ func (c *Client) addOperationGetAccessKeyInfoMiddlewares(stack *middleware.Stack if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go index abac49ad2f..49304bdaf7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go @@ -108,6 +108,9 @@ func (c *Client) addOperationGetCallerIdentityMiddlewares(stack *middleware.Stac if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -144,6 +147,18 @@ func (c *Client) addOperationGetCallerIdentityMiddlewares(stack *middleware.Stac if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go index 2bae67429f..96f59ec63d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go @@ -330,6 +330,9 @@ func (c *Client) addOperationGetFederationTokenMiddlewares(stack *middleware.Sta if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -369,6 +372,18 @@ func (c *Client) addOperationGetFederationTokenMiddlewares(stack *middleware.Sta if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go index c73316a3c0..0ed9ecbc74 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go @@ -179,6 +179,9 @@ func (c *Client) addOperationGetSessionTokenMiddlewares(stack *middleware.Stack, if err = addRecordResponseTiming(stack); err != nil { return err } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } if err = addClientUserAgent(stack, options); err != nil { return err } @@ -215,6 +218,18 @@ func (c *Client) addOperationGetSessionTokenMiddlewares(stack *middleware.Stack, if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go index e842a7f7e8..a90b2b7362 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go @@ -8,7 +8,9 @@ import ( awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" smithy "github.com/aws/smithy-go" smithyauth "github.com/aws/smithy-go/auth" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" ) @@ -157,6 +159,9 @@ func (*resolveAuthSchemeMiddleware) ID() string { func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveAuthScheme") + defer span.End() + params := bindAuthResolverParams(ctx, m.operation, getOperationInput(ctx), m.options) options, err := m.options.AuthSchemeResolver.ResolveAuthSchemes(ctx, params) if err != nil { @@ -169,6 +174,9 @@ func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in mid } ctx = setResolvedAuthScheme(ctx, scheme) + + span.SetProperty("auth.scheme_id", scheme.Scheme.SchemeID()) + span.End() return next.HandleFinalize(ctx, in) } @@ -228,7 +236,10 @@ func (*getIdentityMiddleware) ID() string { func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { - rscheme := getResolvedAuthScheme(ctx) + innerCtx, span := tracing.StartSpan(ctx, "GetIdentity") + defer span.End() + + rscheme := getResolvedAuthScheme(innerCtx) if rscheme == nil { return out, metadata, fmt.Errorf("no resolved auth scheme") } @@ -238,12 +249,20 @@ func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no identity resolver") } - identity, err := resolver.GetIdentity(ctx, rscheme.IdentityProperties) + identity, err := timeOperationMetric(ctx, "client.call.resolve_identity_duration", + func() (smithyauth.Identity, error) { + return resolver.GetIdentity(innerCtx, rscheme.IdentityProperties) + }, + func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) if err != nil { return out, metadata, fmt.Errorf("get identity: %w", err) } ctx = setIdentity(ctx, identity) + + span.End() return next.HandleFinalize(ctx, in) } @@ -259,6 +278,7 @@ func getIdentity(ctx context.Context) smithyauth.Identity { } type signRequestMiddleware struct { + options Options } func (*signRequestMiddleware) ID() string { @@ -268,6 +288,9 @@ func (*signRequestMiddleware) ID() string { func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "SignRequest") + defer span.End() + req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unexpected transport type %T", in.Request) @@ -288,9 +311,15 @@ func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middlewar return out, metadata, fmt.Errorf("no signer") } - if err := signer.SignRequest(ctx, req, identity, rscheme.SignerProperties); err != nil { + _, err = timeOperationMetric(ctx, "client.call.signing_duration", func() (any, error) { + return nil, signer.SignRequest(ctx, req, identity, rscheme.SignerProperties) + }, func(o *metrics.RecordMetricOptions) { + o.Properties.Set("auth.scheme_id", rscheme.Scheme.SchemeID()) + }) + if err != nil { return out, metadata, fmt.Errorf("sign request: %w", err) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go index 7e4346ec9f..cf0cc54e2a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go @@ -16,6 +16,7 @@ import ( "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" smithytime "github.com/aws/smithy-go/time" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "io" "strconv" @@ -46,6 +47,10 @@ func (m *awsAwsquery_deserializeOpAssumeRole) HandleDeserialize(ctx context.Cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -163,6 +168,10 @@ func (m *awsAwsquery_deserializeOpAssumeRoleWithSAML) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -286,6 +295,10 @@ func (m *awsAwsquery_deserializeOpAssumeRoleWithWebIdentity) HandleDeserialize(c return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -412,6 +425,10 @@ func (m *awsAwsquery_deserializeOpDecodeAuthorizationMessage) HandleDeserialize( return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -520,6 +537,10 @@ func (m *awsAwsquery_deserializeOpGetAccessKeyInfo) HandleDeserialize(ctx contex return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -625,6 +646,10 @@ func (m *awsAwsquery_deserializeOpGetCallerIdentity) HandleDeserialize(ctx conte return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -730,6 +755,10 @@ func (m *awsAwsquery_deserializeOpGetFederationToken) HandleDeserialize(ctx cont return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} @@ -844,6 +873,10 @@ func (m *awsAwsquery_deserializeOpGetSessionToken) HandleDeserialize(ctx context return out, metadata, err } + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() response, ok := out.RawResponse.(*smithyhttp.Response) if !ok { return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go index 35305d8976..dca2ce3599 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go @@ -17,6 +17,7 @@ import ( smithyendpoints "github.com/aws/smithy-go/endpoints" "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" "net/url" @@ -1082,14 +1083,13 @@ func (*resolveEndpointV2Middleware) ID() string { func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "ResolveEndpoint") + defer span.End() + if awsmiddleware.GetRequiresLegacyEndpoints(ctx) { return next.HandleFinalize(ctx, in) } - if err := checkAccountID(getIdentity(ctx), m.options.AccountIDEndpointMode); err != nil { - return out, metadata, fmt.Errorf("invalid accountID set: %w", err) - } - req, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) @@ -1100,11 +1100,16 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid } params := bindEndpointParams(ctx, getOperationInput(ctx), m.options) - endpt, err := m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + endpt, err := timeOperationMetric(ctx, "client.call.resolve_endpoint_duration", + func() (smithyendpoints.Endpoint, error) { + return m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) + }) if err != nil { return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err) } + span.SetProperty("client.call.resolved_endpoint", endpt.URI.String()) + if endpt.URI.RawPath == "" && req.URL.RawPath != "" { endpt.URI.RawPath = endpt.URI.Path } @@ -1126,5 +1131,6 @@ func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in mid rscheme.SignerProperties.SetAll(&o.SignerProperties) } + span.End() return next.HandleFinalize(ctx, in) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go index c3a970dff4..b16a2c258f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go @@ -3,4 +3,4 @@ package sts // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.30.7" +const goModuleVersion = "1.31.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go index a9a35881af..e1398f3bb8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go @@ -9,7 +9,9 @@ import ( internalauthsmithy "github.com/aws/aws-sdk-go-v2/internal/auth/smithy" smithyauth "github.com/aws/smithy-go/auth" "github.com/aws/smithy-go/logging" + "github.com/aws/smithy-go/metrics" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "net/http" ) @@ -24,9 +26,6 @@ type Options struct { // modify this list for per operation behavior. APIOptions []func(*middleware.Stack) error - // Indicates how aws account ID is applied in endpoint2.0 routing - AccountIDEndpointMode aws.AccountIDEndpointMode - // The optional application specific identifier appended to the User-Agent header. AppID string @@ -69,6 +68,9 @@ type Options struct { // The logger writer interface to write logging messages to. Logger logging.Logger + // The client meter provider. + MeterProvider metrics.MeterProvider + // The region to send requests to. (Required) Region string @@ -103,6 +105,9 @@ type Options struct { // within your applications. RuntimeEnvironment aws.RuntimeEnvironment + // The client tracer provider. + TracerProvider tracing.TracerProvider + // The initial DefaultsMode used when the client options were constructed. If the // DefaultsMode was set to aws.DefaultsModeAuto this will store what the resolved // value was at that point in time. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go index 4c08061c0c..1bcbc82842 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go @@ -11,6 +11,7 @@ import ( smithy "github.com/aws/smithy-go" "github.com/aws/smithy-go/encoding/httpbinding" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" smithyhttp "github.com/aws/smithy-go/transport/http" "path" ) @@ -25,6 +26,10 @@ func (*awsAwsquery_serializeOpAssumeRole) ID() string { func (m *awsAwsquery_serializeOpAssumeRole) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -76,6 +81,8 @@ func (m *awsAwsquery_serializeOpAssumeRole) HandleSerialize(ctx context.Context, } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -89,6 +96,10 @@ func (*awsAwsquery_serializeOpAssumeRoleWithSAML) ID() string { func (m *awsAwsquery_serializeOpAssumeRoleWithSAML) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -140,6 +151,8 @@ func (m *awsAwsquery_serializeOpAssumeRoleWithSAML) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -153,6 +166,10 @@ func (*awsAwsquery_serializeOpAssumeRoleWithWebIdentity) ID() string { func (m *awsAwsquery_serializeOpAssumeRoleWithWebIdentity) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -204,6 +221,8 @@ func (m *awsAwsquery_serializeOpAssumeRoleWithWebIdentity) HandleSerialize(ctx c } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -217,6 +236,10 @@ func (*awsAwsquery_serializeOpDecodeAuthorizationMessage) ID() string { func (m *awsAwsquery_serializeOpDecodeAuthorizationMessage) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -268,6 +291,8 @@ func (m *awsAwsquery_serializeOpDecodeAuthorizationMessage) HandleSerialize(ctx } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -281,6 +306,10 @@ func (*awsAwsquery_serializeOpGetAccessKeyInfo) ID() string { func (m *awsAwsquery_serializeOpGetAccessKeyInfo) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -332,6 +361,8 @@ func (m *awsAwsquery_serializeOpGetAccessKeyInfo) HandleSerialize(ctx context.Co } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -345,6 +376,10 @@ func (*awsAwsquery_serializeOpGetCallerIdentity) ID() string { func (m *awsAwsquery_serializeOpGetCallerIdentity) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -392,6 +427,8 @@ func (m *awsAwsquery_serializeOpGetCallerIdentity) HandleSerialize(ctx context.C } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -405,6 +442,10 @@ func (*awsAwsquery_serializeOpGetFederationToken) ID() string { func (m *awsAwsquery_serializeOpGetFederationToken) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -456,6 +497,8 @@ func (m *awsAwsquery_serializeOpGetFederationToken) HandleSerialize(ctx context. } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } @@ -469,6 +512,10 @@ func (*awsAwsquery_serializeOpGetSessionToken) ID() string { func (m *awsAwsquery_serializeOpGetSessionToken) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( out middleware.SerializeOutput, metadata middleware.Metadata, err error, ) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() request, ok := in.Request.(*smithyhttp.Request) if !ok { return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} @@ -520,6 +567,8 @@ func (m *awsAwsquery_serializeOpGetSessionToken) HandleSerialize(ctx context.Con } in.Request = request + endTimer() + span.End() return next.HandleSerialize(ctx, in) } func awsAwsquery_serializeDocumentPolicyDescriptorListType(v []types.PolicyDescriptorType, value query.Value) error { diff --git a/vendor/github.com/aws/smithy-go/CHANGELOG.md b/vendor/github.com/aws/smithy-go/CHANGELOG.md index 96d57df805..28d3ccb90f 100644 --- a/vendor/github.com/aws/smithy-go/CHANGELOG.md +++ b/vendor/github.com/aws/smithy-go/CHANGELOG.md @@ -1,3 +1,16 @@ +# Release (2024-09-19) + +## General Highlights +* **Dependency Update**: Updated to the latest SDK module versions + +## Module Highlights +* `github.com/aws/smithy-go`: v1.21.0 + * **Feature**: Add tracing and metrics APIs, and builtin instrumentation for both, in generated clients. +* `github.com/aws/smithy-go/metrics/smithyotelmetrics`: [v1.0.0](metrics/smithyotelmetrics/CHANGELOG.md#v100-2024-09-19) + * **Release**: Initial release of `smithyotelmetrics` module, which is used to adapt an OpenTelemetry SDK meter provider to be used with Smithy clients. +* `github.com/aws/smithy-go/tracing/smithyoteltracing`: [v1.0.0](tracing/smithyoteltracing/CHANGELOG.md#v100-2024-09-19) + * **Release**: Initial release of `smithyoteltracing` module, which is used to adapt an OpenTelemetry SDK tracer provider to be used with Smithy clients. + # Release (2024-08-14) ## Module Highlights diff --git a/vendor/github.com/aws/smithy-go/go_module_metadata.go b/vendor/github.com/aws/smithy-go/go_module_metadata.go index 33355b22c8..24162a6f5b 100644 --- a/vendor/github.com/aws/smithy-go/go_module_metadata.go +++ b/vendor/github.com/aws/smithy-go/go_module_metadata.go @@ -3,4 +3,4 @@ package smithy // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.20.4" +const goModuleVersion = "1.21.0" diff --git a/vendor/github.com/aws/smithy-go/metrics/metrics.go b/vendor/github.com/aws/smithy-go/metrics/metrics.go new file mode 100644 index 0000000000..c009d9f278 --- /dev/null +++ b/vendor/github.com/aws/smithy-go/metrics/metrics.go @@ -0,0 +1,136 @@ +// Package metrics defines the metrics APIs used by Smithy clients. +package metrics + +import ( + "context" + + "github.com/aws/smithy-go" +) + +// MeterProvider is the entry point for creating a Meter. +type MeterProvider interface { + Meter(scope string, opts ...MeterOption) Meter +} + +// MeterOption applies configuration to a Meter. +type MeterOption func(o *MeterOptions) + +// MeterOptions represents configuration for a Meter. +type MeterOptions struct { + Properties smithy.Properties +} + +// Meter is the entry point for creation of measurement instruments. +type Meter interface { + // integer/synchronous + Int64Counter(name string, opts ...InstrumentOption) (Int64Counter, error) + Int64UpDownCounter(name string, opts ...InstrumentOption) (Int64UpDownCounter, error) + Int64Gauge(name string, opts ...InstrumentOption) (Int64Gauge, error) + Int64Histogram(name string, opts ...InstrumentOption) (Int64Histogram, error) + + // integer/asynchronous + Int64AsyncCounter(name string, callback Int64Callback, opts ...InstrumentOption) (AsyncInstrument, error) + Int64AsyncUpDownCounter(name string, callback Int64Callback, opts ...InstrumentOption) (AsyncInstrument, error) + Int64AsyncGauge(name string, callback Int64Callback, opts ...InstrumentOption) (AsyncInstrument, error) + + // floating-point/synchronous + Float64Counter(name string, opts ...InstrumentOption) (Float64Counter, error) + Float64UpDownCounter(name string, opts ...InstrumentOption) (Float64UpDownCounter, error) + Float64Gauge(name string, opts ...InstrumentOption) (Float64Gauge, error) + Float64Histogram(name string, opts ...InstrumentOption) (Float64Histogram, error) + + // floating-point/asynchronous + Float64AsyncCounter(name string, callback Float64Callback, opts ...InstrumentOption) (AsyncInstrument, error) + Float64AsyncUpDownCounter(name string, callback Float64Callback, opts ...InstrumentOption) (AsyncInstrument, error) + Float64AsyncGauge(name string, callback Float64Callback, opts ...InstrumentOption) (AsyncInstrument, error) +} + +// InstrumentOption applies configuration to an instrument. +type InstrumentOption func(o *InstrumentOptions) + +// InstrumentOptions represents configuration for an instrument. +type InstrumentOptions struct { + UnitLabel string + Description string +} + +// Int64Counter measures a monotonically increasing int64 value. +type Int64Counter interface { + Add(context.Context, int64, ...RecordMetricOption) +} + +// Int64UpDownCounter measures a fluctuating int64 value. +type Int64UpDownCounter interface { + Add(context.Context, int64, ...RecordMetricOption) +} + +// Int64Gauge samples a discrete int64 value. +type Int64Gauge interface { + Sample(context.Context, int64, ...RecordMetricOption) +} + +// Int64Histogram records multiple data points for an int64 value. +type Int64Histogram interface { + Record(context.Context, int64, ...RecordMetricOption) +} + +// Float64Counter measures a monotonically increasing float64 value. +type Float64Counter interface { + Add(context.Context, float64, ...RecordMetricOption) +} + +// Float64UpDownCounter measures a fluctuating float64 value. +type Float64UpDownCounter interface { + Add(context.Context, float64, ...RecordMetricOption) +} + +// Float64Gauge samples a discrete float64 value. +type Float64Gauge interface { + Sample(context.Context, float64, ...RecordMetricOption) +} + +// Float64Histogram records multiple data points for an float64 value. +type Float64Histogram interface { + Record(context.Context, float64, ...RecordMetricOption) +} + +// AsyncInstrument is the universal handle returned for creation of all async +// instruments. +// +// Callers use the Stop() API to unregister the callback passed at instrument +// creation. +type AsyncInstrument interface { + Stop() +} + +// Int64Callback describes a function invoked when an async int64 instrument is +// read. +type Int64Callback func(context.Context, Int64Observer) + +// Int64Observer is the interface passed to async int64 instruments. +// +// Callers use the Observe() API of this interface to report metrics to the +// underlying collector. +type Int64Observer interface { + Observe(context.Context, int64, ...RecordMetricOption) +} + +// Float64Callback describes a function invoked when an async float64 +// instrument is read. +type Float64Callback func(context.Context, Float64Observer) + +// Float64Observer is the interface passed to async int64 instruments. +// +// Callers use the Observe() API of this interface to report metrics to the +// underlying collector. +type Float64Observer interface { + Observe(context.Context, float64, ...RecordMetricOption) +} + +// RecordMetricOption applies configuration to a recorded metric. +type RecordMetricOption func(o *RecordMetricOptions) + +// RecordMetricOptions represents configuration for a recorded metric. +type RecordMetricOptions struct { + Properties smithy.Properties +} diff --git a/vendor/github.com/aws/smithy-go/metrics/nop.go b/vendor/github.com/aws/smithy-go/metrics/nop.go new file mode 100644 index 0000000000..fb374e1fb8 --- /dev/null +++ b/vendor/github.com/aws/smithy-go/metrics/nop.go @@ -0,0 +1,67 @@ +package metrics + +import "context" + +// NopMeterProvider is a no-op metrics implementation. +type NopMeterProvider struct{} + +var _ MeterProvider = (*NopMeterProvider)(nil) + +// Meter returns a meter which creates no-op instruments. +func (NopMeterProvider) Meter(string, ...MeterOption) Meter { + return nopMeter{} +} + +type nopMeter struct{} + +var _ Meter = (*nopMeter)(nil) + +func (nopMeter) Int64Counter(string, ...InstrumentOption) (Int64Counter, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Int64UpDownCounter(string, ...InstrumentOption) (Int64UpDownCounter, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Int64Gauge(string, ...InstrumentOption) (Int64Gauge, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Int64Histogram(string, ...InstrumentOption) (Int64Histogram, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Int64AsyncCounter(string, Int64Callback, ...InstrumentOption) (AsyncInstrument, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Int64AsyncUpDownCounter(string, Int64Callback, ...InstrumentOption) (AsyncInstrument, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Int64AsyncGauge(string, Int64Callback, ...InstrumentOption) (AsyncInstrument, error) { + return nopInstrument[int64]{}, nil +} +func (nopMeter) Float64Counter(string, ...InstrumentOption) (Float64Counter, error) { + return nopInstrument[float64]{}, nil +} +func (nopMeter) Float64UpDownCounter(string, ...InstrumentOption) (Float64UpDownCounter, error) { + return nopInstrument[float64]{}, nil +} +func (nopMeter) Float64Gauge(string, ...InstrumentOption) (Float64Gauge, error) { + return nopInstrument[float64]{}, nil +} +func (nopMeter) Float64Histogram(string, ...InstrumentOption) (Float64Histogram, error) { + return nopInstrument[float64]{}, nil +} +func (nopMeter) Float64AsyncCounter(string, Float64Callback, ...InstrumentOption) (AsyncInstrument, error) { + return nopInstrument[float64]{}, nil +} +func (nopMeter) Float64AsyncUpDownCounter(string, Float64Callback, ...InstrumentOption) (AsyncInstrument, error) { + return nopInstrument[float64]{}, nil +} +func (nopMeter) Float64AsyncGauge(string, Float64Callback, ...InstrumentOption) (AsyncInstrument, error) { + return nopInstrument[float64]{}, nil +} + +type nopInstrument[N any] struct{} + +func (nopInstrument[N]) Add(context.Context, N, ...RecordMetricOption) {} +func (nopInstrument[N]) Sample(context.Context, N, ...RecordMetricOption) {} +func (nopInstrument[N]) Record(context.Context, N, ...RecordMetricOption) {} +func (nopInstrument[_]) Stop() {} diff --git a/vendor/github.com/aws/smithy-go/middleware/context.go b/vendor/github.com/aws/smithy-go/middleware/context.go new file mode 100644 index 0000000000..f51aa4f04f --- /dev/null +++ b/vendor/github.com/aws/smithy-go/middleware/context.go @@ -0,0 +1,41 @@ +package middleware + +import "context" + +type ( + serviceIDKey struct{} + operationNameKey struct{} +) + +// WithServiceID adds a service ID to the context, scoped to middleware stack +// values. +// +// This API is called in the client runtime when bootstrapping an operation and +// should not typically be used directly. +func WithServiceID(parent context.Context, id string) context.Context { + return WithStackValue(parent, serviceIDKey{}, id) +} + +// GetServiceID retrieves the service ID from the context. This is typically +// the service shape's name from its Smithy model. Service clients for specific +// systems (e.g. AWS SDK) may use an alternate designated value. +func GetServiceID(ctx context.Context) string { + id, _ := GetStackValue(ctx, serviceIDKey{}).(string) + return id +} + +// WithOperationName adds the operation name to the context, scoped to +// middleware stack values. +// +// This API is called in the client runtime when bootstrapping an operation and +// should not typically be used directly. +func WithOperationName(parent context.Context, id string) context.Context { + return WithStackValue(parent, operationNameKey{}, id) +} + +// GetOperationName retrieves the operation name from the context. This is +// typically the operation shape's name from its Smithy model. +func GetOperationName(ctx context.Context) string { + name, _ := GetStackValue(ctx, operationNameKey{}).(string) + return name +} diff --git a/vendor/github.com/aws/smithy-go/properties.go b/vendor/github.com/aws/smithy-go/properties.go index c9af66c0ea..68df4c4e0e 100644 --- a/vendor/github.com/aws/smithy-go/properties.go +++ b/vendor/github.com/aws/smithy-go/properties.go @@ -1,9 +1,11 @@ package smithy +import "maps" + // PropertiesReader provides an interface for reading metadata from the // underlying metadata container. type PropertiesReader interface { - Get(key interface{}) interface{} + Get(key any) any } // Properties provides storing and reading metadata values. Keys may be any @@ -12,14 +14,14 @@ type PropertiesReader interface { // The zero value for a Properties instance is ready for reads/writes without // any additional initialization. type Properties struct { - values map[interface{}]interface{} + values map[any]any } // Get attempts to retrieve the value the key points to. Returns nil if the // key was not found. // // Panics if key type is not comparable. -func (m *Properties) Get(key interface{}) interface{} { +func (m *Properties) Get(key any) any { m.lazyInit() return m.values[key] } @@ -28,7 +30,7 @@ func (m *Properties) Get(key interface{}) interface{} { // that key it will be replaced with the new value. // // Panics if the key type is not comparable. -func (m *Properties) Set(key, value interface{}) { +func (m *Properties) Set(key, value any) { m.lazyInit() m.values[key] = value } @@ -36,7 +38,7 @@ func (m *Properties) Set(key, value interface{}) { // Has returns whether the key exists in the metadata. // // Panics if the key type is not comparable. -func (m *Properties) Has(key interface{}) bool { +func (m *Properties) Has(key any) bool { m.lazyInit() _, ok := m.values[key] return ok @@ -55,8 +57,13 @@ func (m *Properties) SetAll(other *Properties) { } } +// Values returns a shallow clone of the property set's values. +func (m *Properties) Values() map[any]any { + return maps.Clone(m.values) +} + func (m *Properties) lazyInit() { if m.values == nil { - m.values = map[interface{}]interface{}{} + m.values = map[any]any{} } } diff --git a/vendor/github.com/aws/smithy-go/tracing/context.go b/vendor/github.com/aws/smithy-go/tracing/context.go new file mode 100644 index 0000000000..a404ed9d37 --- /dev/null +++ b/vendor/github.com/aws/smithy-go/tracing/context.go @@ -0,0 +1,96 @@ +package tracing + +import "context" + +type ( + operationTracerKey struct{} + spanLineageKey struct{} +) + +// GetSpan returns the active trace Span on the context. +// +// The boolean in the return indicates whether a Span was actually in the +// context, but a no-op implementation will be returned if not, so callers +// can generally disregard the boolean unless they wish to explicitly confirm +// presence/absence of a Span. +func GetSpan(ctx context.Context) (Span, bool) { + lineage := getLineage(ctx) + if len(lineage) == 0 { + return nopSpan{}, false + } + + return lineage[len(lineage)-1], true +} + +// WithSpan sets the active trace Span on the context. +func WithSpan(parent context.Context, span Span) context.Context { + lineage := getLineage(parent) + if len(lineage) == 0 { + return context.WithValue(parent, spanLineageKey{}, []Span{span}) + } + + lineage = append(lineage, span) + return context.WithValue(parent, spanLineageKey{}, lineage) +} + +// PopSpan pops the current Span off the context, setting the active Span on +// the returned Context back to its parent and returning the REMOVED one. +// +// PopSpan on a context with no active Span will return a no-op instance. +// +// This is mostly necessary for the runtime to manage base trace spans due to +// the wrapped-function nature of the middleware stack. End-users of Smithy +// clients SHOULD NOT generally be using this API. +func PopSpan(parent context.Context) (context.Context, Span) { + lineage := getLineage(parent) + if len(lineage) == 0 { + return parent, nopSpan{} + } + + span := lineage[len(lineage)-1] + lineage = lineage[:len(lineage)-1] + return context.WithValue(parent, spanLineageKey{}, lineage), span +} + +func getLineage(ctx context.Context) []Span { + v := ctx.Value(spanLineageKey{}) + if v == nil { + return nil + } + + return v.([]Span) +} + +// GetOperationTracer returns the embedded operation-scoped Tracer on a +// Context. +// +// The boolean in the return indicates whether a Tracer was actually in the +// context, but a no-op implementation will be returned if not, so callers +// can generally disregard the boolean unless they wish to explicitly confirm +// presence/absence of a Tracer. +func GetOperationTracer(ctx context.Context) (Tracer, bool) { + v := ctx.Value(operationTracerKey{}) + if v == nil { + return nopTracer{}, false + } + + return v.(Tracer), true +} + +// WithOperationTracer returns a child Context embedding the given Tracer. +// +// The runtime will use this embed a scoped tracer for client operations, +// Smithy/SDK client callers DO NOT need to do this explicitly. +func WithOperationTracer(parent context.Context, tracer Tracer) context.Context { + return context.WithValue(parent, operationTracerKey{}, tracer) +} + +// StartSpan is a convenience API for creating tracing Spans from a Context. +// +// StartSpan uses the operation-scoped Tracer, previously stored using +// [WithOperationTracer], to start the Span. If a Tracer has not been embedded +// the returned Span will be a no-op implementation. +func StartSpan(ctx context.Context, name string, opts ...SpanOption) (context.Context, Span) { + tracer, _ := GetOperationTracer(ctx) + return tracer.StartSpan(ctx, name, opts...) +} diff --git a/vendor/github.com/aws/smithy-go/tracing/nop.go b/vendor/github.com/aws/smithy-go/tracing/nop.go new file mode 100644 index 0000000000..573d28b1c1 --- /dev/null +++ b/vendor/github.com/aws/smithy-go/tracing/nop.go @@ -0,0 +1,32 @@ +package tracing + +import "context" + +// NopTracerProvider is a no-op tracing implementation. +type NopTracerProvider struct{} + +var _ TracerProvider = (*NopTracerProvider)(nil) + +// Tracer returns a tracer which creates no-op spans. +func (NopTracerProvider) Tracer(string, ...TracerOption) Tracer { + return nopTracer{} +} + +type nopTracer struct{} + +var _ Tracer = (*nopTracer)(nil) + +func (nopTracer) StartSpan(ctx context.Context, name string, opts ...SpanOption) (context.Context, Span) { + return ctx, nopSpan{} +} + +type nopSpan struct{} + +var _ Span = (*nopSpan)(nil) + +func (nopSpan) Name() string { return "" } +func (nopSpan) Context() SpanContext { return SpanContext{} } +func (nopSpan) AddEvent(string, ...EventOption) {} +func (nopSpan) SetProperty(any, any) {} +func (nopSpan) SetStatus(SpanStatus) {} +func (nopSpan) End() {} diff --git a/vendor/github.com/aws/smithy-go/tracing/tracing.go b/vendor/github.com/aws/smithy-go/tracing/tracing.go new file mode 100644 index 0000000000..089ed3932e --- /dev/null +++ b/vendor/github.com/aws/smithy-go/tracing/tracing.go @@ -0,0 +1,95 @@ +// Package tracing defines tracing APIs to be used by Smithy clients. +package tracing + +import ( + "context" + + "github.com/aws/smithy-go" +) + +// SpanStatus records the "success" state of an observed span. +type SpanStatus int + +// Enumeration of SpanStatus. +const ( + SpanStatusUnset SpanStatus = iota + SpanStatusOK + SpanStatusError +) + +// SpanKind indicates the nature of the work being performed. +type SpanKind int + +// Enumeration of SpanKind. +const ( + SpanKindInternal SpanKind = iota + SpanKindClient + SpanKindServer + SpanKindProducer + SpanKindConsumer +) + +// TracerProvider is the entry point for creating client traces. +type TracerProvider interface { + Tracer(scope string, opts ...TracerOption) Tracer +} + +// TracerOption applies configuration to a tracer. +type TracerOption func(o *TracerOptions) + +// TracerOptions represent configuration for tracers. +type TracerOptions struct { + Properties smithy.Properties +} + +// Tracer is the entry point for creating observed client Spans. +// +// Spans created by tracers propagate by existing on the Context. Consumers of +// the API can use [GetSpan] to pull the active Span from a Context. +// +// Creation of child Spans is implicit through Context persistence. If +// CreateSpan is called with a Context that holds a Span, the result will be a +// child of that Span. +type Tracer interface { + StartSpan(ctx context.Context, name string, opts ...SpanOption) (context.Context, Span) +} + +// SpanOption applies configuration to a span. +type SpanOption func(o *SpanOptions) + +// SpanOptions represent configuration for span events. +type SpanOptions struct { + Kind SpanKind + Properties smithy.Properties +} + +// Span records a conceptually individual unit of work that takes place in a +// Smithy client operation. +type Span interface { + Name() string + Context() SpanContext + AddEvent(name string, opts ...EventOption) + SetStatus(status SpanStatus) + SetProperty(k, v any) + End() +} + +// EventOption applies configuration to a span event. +type EventOption func(o *EventOptions) + +// EventOptions represent configuration for span events. +type EventOptions struct { + Properties smithy.Properties +} + +// SpanContext uniquely identifies a Span. +type SpanContext struct { + TraceID string + SpanID string + IsRemote bool +} + +// IsValid is true when a span has nonzero trace and span IDs. +func (ctx *SpanContext) IsValid() bool { + return len(ctx.TraceID) != 0 && len(ctx.SpanID) != 0 +} diff --git a/vendor/github.com/aws/smithy-go/transport/http/client.go b/vendor/github.com/aws/smithy-go/transport/http/client.go index e691c69bf4..c43c346b6f 100644 --- a/vendor/github.com/aws/smithy-go/transport/http/client.go +++ b/vendor/github.com/aws/smithy-go/transport/http/client.go @@ -7,6 +7,7 @@ import ( smithy "github.com/aws/smithy-go" "github.com/aws/smithy-go/middleware" + "github.com/aws/smithy-go/tracing" ) // ClientDo provides the interface for custom HTTP client implementations. @@ -42,6 +43,9 @@ func NewClientHandler(client ClientDo) ClientHandler { func (c ClientHandler) Handle(ctx context.Context, input interface{}) ( out interface{}, metadata middleware.Metadata, err error, ) { + ctx, span := tracing.StartSpan(ctx, "DoHTTPRequest") + defer span.End() + req, ok := input.(*Request) if !ok { return nil, metadata, fmt.Errorf("expect Smithy http.Request value as input, got unsupported type %T", input) @@ -52,6 +56,16 @@ func (c ClientHandler) Handle(ctx context.Context, input interface{}) ( return nil, metadata, err } + span.SetProperty("http.method", req.Method) + span.SetProperty("http.request_content_length", -1) // at least indicate unknown + length, ok, err := req.StreamLength() + if err != nil { + return nil, metadata, err + } + if ok { + span.SetProperty("http.request_content_length", length) + } + resp, err := c.client.Do(builtRequest) if resp == nil { // Ensure a http response value is always present to prevent unexpected @@ -79,6 +93,10 @@ func (c ClientHandler) Handle(ctx context.Context, input interface{}) ( _ = builtRequest.Body.Close() } + span.SetProperty("net.protocol.version", fmt.Sprintf("%d.%d", resp.ProtoMajor, resp.ProtoMinor)) + span.SetProperty("http.status_code", resp.StatusCode) + span.SetProperty("http.response_content_length", resp.ContentLength) + return &Response{Response: resp}, metadata, err } diff --git a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go new file mode 100644 index 0000000000..0ec4b12c75 --- /dev/null +++ b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go @@ -0,0 +1,62 @@ +package md2man + +import ( + "fmt" + "io" + "os" + "strings" + + "github.com/russross/blackfriday/v2" +) + +func fmtListFlags(flags blackfriday.ListType) string { + knownFlags := []struct { + name string + flag blackfriday.ListType + }{ + {"ListTypeOrdered", blackfriday.ListTypeOrdered}, + {"ListTypeDefinition", blackfriday.ListTypeDefinition}, + {"ListTypeTerm", blackfriday.ListTypeTerm}, + {"ListItemContainsBlock", blackfriday.ListItemContainsBlock}, + {"ListItemBeginningOfList", blackfriday.ListItemBeginningOfList}, + {"ListItemEndOfList", blackfriday.ListItemEndOfList}, + } + + var f []string + for _, kf := range knownFlags { + if flags&kf.flag != 0 { + f = append(f, kf.name) + flags &^= kf.flag + } + } + if flags != 0 { + f = append(f, fmt.Sprintf("Unknown(%#x)", flags)) + } + return strings.Join(f, "|") +} + +type debugDecorator struct { + blackfriday.Renderer +} + +func depth(node *blackfriday.Node) int { + d := 0 + for n := node.Parent; n != nil; n = n.Parent { + d++ + } + return d +} + +func (d *debugDecorator) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus { + fmt.Fprintf(os.Stderr, "%s%s %v %v\n", + strings.Repeat(" ", depth(node)), + map[bool]string{true: "+", false: "-"}[entering], + node, + fmtListFlags(node.ListFlags)) + var b strings.Builder + status := d.Renderer.RenderNode(io.MultiWriter(&b, w), node, entering) + if b.Len() > 0 { + fmt.Fprintf(os.Stderr, ">> %q\n", b.String()) + } + return status +} diff --git a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go index 42bf32aab0..62d91b77d5 100644 --- a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go +++ b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go @@ -1,16 +1,23 @@ package md2man import ( + "os" + "strconv" + "github.com/russross/blackfriday/v2" ) // Render converts a markdown document into a roff formatted document. func Render(doc []byte) []byte { renderer := NewRoffRenderer() + var r blackfriday.Renderer = renderer + if v, _ := strconv.ParseBool(os.Getenv("MD2MAN_DEBUG")); v { + r = &debugDecorator{Renderer: r} + } return blackfriday.Run(doc, []blackfriday.Option{ - blackfriday.WithRenderer(renderer), + blackfriday.WithRenderer(r), blackfriday.WithExtensions(renderer.GetExtensions()), }...) } diff --git a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go index 8a290f1972..9d6c473fdc 100644 --- a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go +++ b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go @@ -14,10 +14,8 @@ import ( // roffRenderer implements the blackfriday.Renderer interface for creating // roff format (manpages) from markdown text type roffRenderer struct { - extensions blackfriday.Extensions listCounters []int firstHeader bool - firstDD bool listDepth int } @@ -43,7 +41,7 @@ const ( quoteTag = "\n.PP\n.RS\n" quoteCloseTag = "\n.RE\n" listTag = "\n.RS\n" - listCloseTag = "\n.RE\n" + listCloseTag = ".RE\n" dtTag = "\n.TP\n" dd2Tag = "\n" tableStart = "\n.TS\nallbox;\n" @@ -56,23 +54,18 @@ const ( // NewRoffRenderer creates a new blackfriday Renderer for generating roff documents // from markdown func NewRoffRenderer() *roffRenderer { // nolint: golint - var extensions blackfriday.Extensions - - extensions |= blackfriday.NoIntraEmphasis - extensions |= blackfriday.Tables - extensions |= blackfriday.FencedCode - extensions |= blackfriday.SpaceHeadings - extensions |= blackfriday.Footnotes - extensions |= blackfriday.Titleblock - extensions |= blackfriday.DefinitionLists - return &roffRenderer{ - extensions: extensions, - } + return &roffRenderer{} } // GetExtensions returns the list of extensions used by this renderer implementation -func (r *roffRenderer) GetExtensions() blackfriday.Extensions { - return r.extensions +func (*roffRenderer) GetExtensions() blackfriday.Extensions { + return blackfriday.NoIntraEmphasis | + blackfriday.Tables | + blackfriday.FencedCode | + blackfriday.SpaceHeadings | + blackfriday.Footnotes | + blackfriday.Titleblock | + blackfriday.DefinitionLists } // RenderHeader handles outputting the header at document start @@ -103,7 +96,23 @@ func (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering switch node.Type { case blackfriday.Text: - escapeSpecialChars(w, node.Literal) + // Special case: format the NAME section as required for proper whatis parsing. + // Refer to the lexgrog(1) and groff_man(7) manual pages for details. + if node.Parent != nil && + node.Parent.Type == blackfriday.Paragraph && + node.Parent.Prev != nil && + node.Parent.Prev.Type == blackfriday.Heading && + node.Parent.Prev.FirstChild != nil && + bytes.EqualFold(node.Parent.Prev.FirstChild.Literal, []byte("NAME")) { + before, after, found := bytes.Cut(node.Literal, []byte(" - ")) + escapeSpecialChars(w, before) + if found { + out(w, ` \- `) + escapeSpecialChars(w, after) + } + } else { + escapeSpecialChars(w, node.Literal) + } case blackfriday.Softbreak: out(w, crTag) case blackfriday.Hardbreak: @@ -141,14 +150,25 @@ func (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering case blackfriday.Document: break case blackfriday.Paragraph: - // roff .PP markers break lists - if r.listDepth > 0 { - return blackfriday.GoToNext - } if entering { - out(w, paraTag) + if r.listDepth > 0 { + // roff .PP markers break lists + if node.Prev != nil { // continued paragraph + if node.Prev.Type == blackfriday.List && node.Prev.ListFlags&blackfriday.ListTypeDefinition == 0 { + out(w, ".IP\n") + } else { + out(w, crTag) + } + } + } else if node.Prev != nil && node.Prev.Type == blackfriday.Heading { + out(w, crTag) + } else { + out(w, paraTag) + } } else { - out(w, crTag) + if node.Next == nil || node.Next.Type != blackfriday.List { + out(w, crTag) + } } case blackfriday.BlockQuote: if entering { @@ -211,6 +231,10 @@ func (r *roffRenderer) handleHeading(w io.Writer, node *blackfriday.Node, enteri func (r *roffRenderer) handleList(w io.Writer, node *blackfriday.Node, entering bool) { openTag := listTag closeTag := listCloseTag + if (entering && r.listDepth == 0) || (!entering && r.listDepth == 1) { + openTag = crTag + closeTag = "" + } if node.ListFlags&blackfriday.ListTypeDefinition != 0 { // tags for definition lists handled within Item node openTag = "" @@ -239,23 +263,25 @@ func (r *roffRenderer) handleItem(w io.Writer, node *blackfriday.Node, entering } else if node.ListFlags&blackfriday.ListTypeTerm != 0 { // DT (definition term): line just before DD (see below). out(w, dtTag) - r.firstDD = true } else if node.ListFlags&blackfriday.ListTypeDefinition != 0 { // DD (definition description): line that starts with ": ". // // We have to distinguish between the first DD and the // subsequent ones, as there should be no vertical // whitespace between the DT and the first DD. - if r.firstDD { - r.firstDD = false - } else { - out(w, dd2Tag) + if node.Prev != nil && node.Prev.ListFlags&(blackfriday.ListTypeTerm|blackfriday.ListTypeDefinition) == blackfriday.ListTypeDefinition { + if node.Prev.Type == blackfriday.Item && + node.Prev.LastChild != nil && + node.Prev.LastChild.Type == blackfriday.List && + node.Prev.LastChild.ListFlags&blackfriday.ListTypeDefinition == 0 { + out(w, ".IP\n") + } else { + out(w, dd2Tag) + } } } else { out(w, ".IP \\(bu 2\n") } - } else { - out(w, "\n") } } diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index 05c7359e48..684a30853a 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -16,6 +16,20 @@ This package provides various compression algorithms. # changelog +* Jun 12th, 2024 - [1.17.9](https://github.com/klauspost/compress/releases/tag/v1.17.9) + * s2: Reduce ReadFrom temporary allocations https://github.com/klauspost/compress/pull/949 + * flate, zstd: Shave some bytes off amd64 matchLen by @greatroar in https://github.com/klauspost/compress/pull/963 + * Upgrade zip/zlib to 1.22.4 upstream https://github.com/klauspost/compress/pull/970 https://github.com/klauspost/compress/pull/971 + * zstd: BuildDict fails with RLE table https://github.com/klauspost/compress/pull/951 + +* Apr 9th, 2024 - [1.17.8](https://github.com/klauspost/compress/releases/tag/v1.17.8) + * zstd: Reject blocks where reserved values are not 0 https://github.com/klauspost/compress/pull/885 + * zstd: Add RLE detection+encoding https://github.com/klauspost/compress/pull/938 + +* Feb 21st, 2024 - [1.17.7](https://github.com/klauspost/compress/releases/tag/v1.17.7) + * s2: Add AsyncFlush method: Complete the block without flushing by @Jille in https://github.com/klauspost/compress/pull/927 + * s2: Fix literal+repeat exceeds dst crash https://github.com/klauspost/compress/pull/930 + * Feb 5th, 2024 - [1.17.6](https://github.com/klauspost/compress/releases/tag/v1.17.6) * zstd: Fix incorrect repeat coding in best mode https://github.com/klauspost/compress/pull/923 * s2: Fix DecodeConcurrent deadlock on errors https://github.com/klauspost/compress/pull/925 @@ -81,7 +95,7 @@ https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/comp * zstd: Various minor improvements by @greatroar in https://github.com/klauspost/compress/pull/788 https://github.com/klauspost/compress/pull/794 https://github.com/klauspost/compress/pull/795 * s2: Fix huge block overflow https://github.com/klauspost/compress/pull/779 * s2: Allow CustomEncoder fallback https://github.com/klauspost/compress/pull/780 - * gzhttp: Suppport ResponseWriter Unwrap() in gzhttp handler by @jgimenez in https://github.com/klauspost/compress/pull/799 + * gzhttp: Support ResponseWriter Unwrap() in gzhttp handler by @jgimenez in https://github.com/klauspost/compress/pull/799 * Mar 13, 2023 - [v1.16.1](https://github.com/klauspost/compress/releases/tag/v1.16.1) * zstd: Speed up + improve best encoder by @greatroar in https://github.com/klauspost/compress/pull/776 @@ -136,7 +150,7 @@ https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/comp * zstd: Add [WithDecodeAllCapLimit](https://pkg.go.dev/github.com/klauspost/compress@v1.15.10/zstd#WithDecodeAllCapLimit) https://github.com/klauspost/compress/pull/649 * Add Go 1.19 - deprecate Go 1.16 https://github.com/klauspost/compress/pull/651 * flate: Improve level 5+6 compression https://github.com/klauspost/compress/pull/656 - * zstd: Improve "better" compresssion https://github.com/klauspost/compress/pull/657 + * zstd: Improve "better" compression https://github.com/klauspost/compress/pull/657 * s2: Improve "best" compression https://github.com/klauspost/compress/pull/658 * s2: Improve "better" compression. https://github.com/klauspost/compress/pull/635 * s2: Slightly faster non-assembly decompression https://github.com/klauspost/compress/pull/646 @@ -339,7 +353,7 @@ While the release has been extensively tested, it is recommended to testing when * s2: Fix binaries. * Feb 25, 2021 (v1.11.8) - * s2: Fixed occational out-of-bounds write on amd64. Upgrade recommended. + * s2: Fixed occasional out-of-bounds write on amd64. Upgrade recommended. * s2: Add AMD64 assembly for better mode. 25-50% faster. [#315](https://github.com/klauspost/compress/pull/315) * s2: Less upfront decoder allocation. [#322](https://github.com/klauspost/compress/pull/322) * zstd: Faster "compression" of incompressible data. [#314](https://github.com/klauspost/compress/pull/314) @@ -518,7 +532,7 @@ While the release has been extensively tested, it is recommended to testing when * Feb 19, 2016: Faster bit writer, level -2 is 15% faster, level 1 is 4% faster. * Feb 19, 2016: Handle small payloads faster in level 1-3. * Feb 19, 2016: Added faster level 2 + 3 compression modes. -* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progresssion in terms of compression. New default level is 5. +* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progression in terms of compression. New default level is 5. * Feb 14, 2016: Snappy: Merge upstream changes. * Feb 14, 2016: Snappy: Fix aggressive skipping. * Feb 14, 2016: Snappy: Update benchmark. diff --git a/vendor/github.com/klauspost/compress/flate/deflate.go b/vendor/github.com/klauspost/compress/flate/deflate.go index 66d1657d2c..af53fb860c 100644 --- a/vendor/github.com/klauspost/compress/flate/deflate.go +++ b/vendor/github.com/klauspost/compress/flate/deflate.go @@ -861,7 +861,7 @@ func (d *compressor) reset(w io.Writer) { } switch d.compressionLevel.chain { case 0: - // level was NoCompression or ConstantCompresssion. + // level was NoCompression or ConstantCompression. d.windowEnd = 0 default: s := d.state diff --git a/vendor/github.com/klauspost/compress/flate/inflate.go b/vendor/github.com/klauspost/compress/flate/inflate.go index 2f410d64f5..0d7b437f1c 100644 --- a/vendor/github.com/klauspost/compress/flate/inflate.go +++ b/vendor/github.com/klauspost/compress/flate/inflate.go @@ -298,6 +298,14 @@ const ( huffmanGenericReader ) +// flushMode tells decompressor when to return data +type flushMode uint8 + +const ( + syncFlush flushMode = iota // return data after sync flush block + partialFlush // return data after each block +) + // Decompress state. type decompressor struct { // Input source. @@ -332,6 +340,8 @@ type decompressor struct { nb uint final bool + + flushMode flushMode } func (f *decompressor) nextBlock() { @@ -618,7 +628,10 @@ func (f *decompressor) dataBlock() { } if n == 0 { - f.toRead = f.dict.readFlush() + if f.flushMode == syncFlush { + f.toRead = f.dict.readFlush() + } + f.finishBlock() return } @@ -657,8 +670,12 @@ func (f *decompressor) finishBlock() { if f.dict.availRead() > 0 { f.toRead = f.dict.readFlush() } + f.err = io.EOF + } else if f.flushMode == partialFlush && f.dict.availRead() > 0 { + f.toRead = f.dict.readFlush() } + f.step = nextBlock } @@ -789,6 +806,41 @@ func (f *decompressor) Reset(r io.Reader, dict []byte) error { return nil } +type ReaderOpt func(*decompressor) + +// WithPartialBlock tells decompressor to return after each block, +// so it can read data written with partial flush +func WithPartialBlock() ReaderOpt { + return func(f *decompressor) { + f.flushMode = partialFlush + } +} + +// WithDict initializes the reader with a preset dictionary +func WithDict(dict []byte) ReaderOpt { + return func(f *decompressor) { + f.dict.init(maxMatchOffset, dict) + } +} + +// NewReaderOpts returns new reader with provided options +func NewReaderOpts(r io.Reader, opts ...ReaderOpt) io.ReadCloser { + fixedHuffmanDecoderInit() + + var f decompressor + f.r = makeReader(r) + f.bits = new([maxNumLit + maxNumDist]int) + f.codebits = new([numCodes]int) + f.step = nextBlock + f.dict.init(maxMatchOffset, nil) + + for _, opt := range opts { + opt(&f) + } + + return &f +} + // NewReader returns a new ReadCloser that can be used // to read the uncompressed version of r. // If r does not also implement io.ByteReader, @@ -798,15 +850,7 @@ func (f *decompressor) Reset(r io.Reader, dict []byte) error { // // The ReadCloser returned by NewReader also implements Resetter. func NewReader(r io.Reader) io.ReadCloser { - fixedHuffmanDecoderInit() - - var f decompressor - f.r = makeReader(r) - f.bits = new([maxNumLit + maxNumDist]int) - f.codebits = new([numCodes]int) - f.step = nextBlock - f.dict.init(maxMatchOffset, nil) - return &f + return NewReaderOpts(r) } // NewReaderDict is like NewReader but initializes the reader @@ -817,13 +861,5 @@ func NewReader(r io.Reader) io.ReadCloser { // // The ReadCloser returned by NewReader also implements Resetter. func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser { - fixedHuffmanDecoderInit() - - var f decompressor - f.r = makeReader(r) - f.bits = new([maxNumLit + maxNumDist]int) - f.codebits = new([numCodes]int) - f.step = nextBlock - f.dict.init(maxMatchOffset, dict) - return &f + return NewReaderOpts(r, WithDict(dict)) } diff --git a/vendor/github.com/klauspost/compress/fse/decompress.go b/vendor/github.com/klauspost/compress/fse/decompress.go index cc05d0f7ea..0c7dd4ffef 100644 --- a/vendor/github.com/klauspost/compress/fse/decompress.go +++ b/vendor/github.com/klauspost/compress/fse/decompress.go @@ -15,7 +15,7 @@ const ( // It is possible, but by no way guaranteed that corrupt data will // return an error. // It is up to the caller to verify integrity of the returned data. -// Use a predefined Scrach to set maximum acceptable output size. +// Use a predefined Scratch to set maximum acceptable output size. func Decompress(b []byte, s *Scratch) ([]byte, error) { s, err := s.prepare(b) if err != nil { diff --git a/vendor/github.com/klauspost/compress/gzhttp/compress.go b/vendor/github.com/klauspost/compress/gzhttp/compress.go index 289ae3e2ee..28fe331950 100644 --- a/vendor/github.com/klauspost/compress/gzhttp/compress.go +++ b/vendor/github.com/klauspost/compress/gzhttp/compress.go @@ -306,7 +306,7 @@ func (w *GzipResponseWriter) startPlain() error { func (w *GzipResponseWriter) WriteHeader(code int) { // Handle informational headers // This is gated to not forward 1xx responses on builds prior to go1.20. - if shouldWrite1xxResponses() && code >= 100 && code <= 199 { + if code >= 100 && code <= 199 { w.ResponseWriter.WriteHeader(code) return } @@ -464,6 +464,11 @@ func NewWrapper(opts ...option) (func(http.Handler) http.HandlerFunc, error) { return func(h http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Add(vary, acceptEncoding) + if c.allowCompressedRequests && contentGzip(r) { + r.Header.Del(contentEncoding) + r.Body = &gzipReader{body: r.Body} + } + if acceptsGzip(r) { gw := grwPool.Get().(*GzipResponseWriter) *gw = GzipResponseWriter{ @@ -536,17 +541,18 @@ func (pct parsedContentType) equals(mediaType string, params map[string]string) // Used for functional configuration. type config struct { - minSize int - level int - writer writer.GzipWriterFactory - contentTypes func(ct string) bool - keepAcceptRanges bool - setContentType bool - suffixETag string - dropETag bool - jitterBuffer int - randomJitter string - sha256Jitter bool + minSize int + level int + writer writer.GzipWriterFactory + contentTypes func(ct string) bool + keepAcceptRanges bool + setContentType bool + suffixETag string + dropETag bool + jitterBuffer int + randomJitter string + sha256Jitter bool + allowCompressedRequests bool } func (c *config) validate() error { @@ -579,6 +585,15 @@ func MinSize(size int) option { } } +// AllowCompressedRequests will enable or disable RFC 7694 compressed requests. +// By default this is Disabled. +// See https://datatracker.ietf.org/doc/html/rfc7694 +func AllowCompressedRequests(b bool) option { + return func(c *config) { + c.allowCompressedRequests = b + } +} + // CompressionLevel sets the compression level func CompressionLevel(level int) option { return func(c *config) { @@ -752,6 +767,12 @@ func RandomJitter(n, buffer int, paranoid bool) option { } } +// contentGzip returns true if the given HTTP request indicates that it gzipped. +func contentGzip(r *http.Request) bool { + // See more detail in `acceptsGzip` + return r.Method != http.MethodHead && r.Body != nil && parseEncodingGzip(r.Header.Get(contentEncoding)) > 0 +} + // acceptsGzip returns true if the given HTTP request indicates that it will // accept a gzipped response. func acceptsGzip(r *http.Request) bool { diff --git a/vendor/github.com/klauspost/compress/gzhttp/compress_go119.go b/vendor/github.com/klauspost/compress/gzhttp/compress_go119.go deleted file mode 100644 index 97fc25acbc..0000000000 --- a/vendor/github.com/klauspost/compress/gzhttp/compress_go119.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build !go1.20 -// +build !go1.20 - -package gzhttp - -// shouldWrite1xxResponses indicates whether the current build supports writes of 1xx status codes. -func shouldWrite1xxResponses() bool { - return false -} diff --git a/vendor/github.com/klauspost/compress/gzhttp/compress_go120.go b/vendor/github.com/klauspost/compress/gzhttp/compress_go120.go deleted file mode 100644 index 2b65f67c79..0000000000 --- a/vendor/github.com/klauspost/compress/gzhttp/compress_go120.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build go1.20 -// +build go1.20 - -package gzhttp - -// shouldWrite1xxResponses indicates whether the current build supports writes of 1xx status codes. -func shouldWrite1xxResponses() bool { - return true -} diff --git a/vendor/github.com/klauspost/compress/gzhttp/transport.go b/vendor/github.com/klauspost/compress/gzhttp/transport.go index 623aea2ed8..3914a06e01 100644 --- a/vendor/github.com/klauspost/compress/gzhttp/transport.go +++ b/vendor/github.com/klauspost/compress/gzhttp/transport.go @@ -61,10 +61,21 @@ func TransportCustomEval(fn func(header http.Header) bool) transportOption { } } +// TransportAlwaysDecompress will always decompress the response, +// regardless of whether we requested it or not. +// Default is false, which will pass compressed data through +// if we did not request compression. +func TransportAlwaysDecompress(enabled bool) transportOption { + return func(c *gzRoundtripper) { + c.alwaysDecomp = enabled + } +} + type gzRoundtripper struct { parent http.RoundTripper acceptEncoding string withZstd, withGzip bool + alwaysDecomp bool customEval func(header http.Header) bool } @@ -90,15 +101,19 @@ func (g *gzRoundtripper) RoundTrip(req *http.Request) (*http.Response, error) { } resp, err := g.parent.RoundTrip(req) - if err != nil || !requestedComp { + if err != nil { return resp, err } - decompress := false + decompress := g.alwaysDecomp if g.customEval != nil { if !g.customEval(resp.Header) { return resp, nil } decompress = true + } else { + if !requestedComp && !g.alwaysDecomp { + return resp, nil + } } // Decompress if (decompress || g.withGzip) && asciiEqualFold(resp.Header.Get("Content-Encoding"), "gzip") { diff --git a/vendor/github.com/klauspost/compress/huff0/decompress.go b/vendor/github.com/klauspost/compress/huff0/decompress.go index 54bd08b25c..0f56b02d74 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress.go @@ -1136,7 +1136,7 @@ func (s *Scratch) matches(ct cTable, w io.Writer) { errs++ } if errs > 0 { - fmt.Fprintf(w, "%d errros in base, stopping\n", errs) + fmt.Fprintf(w, "%d errors in base, stopping\n", errs) continue } // Ensure that all combinations are covered. @@ -1152,7 +1152,7 @@ func (s *Scratch) matches(ct cTable, w io.Writer) { errs++ } if errs > 20 { - fmt.Fprintf(w, "%d errros, stopping\n", errs) + fmt.Fprintf(w, "%d errors, stopping\n", errs) break } } diff --git a/vendor/github.com/klauspost/compress/s2/writer.go b/vendor/github.com/klauspost/compress/s2/writer.go index 0a46f2b984..fd15078f7d 100644 --- a/vendor/github.com/klauspost/compress/s2/writer.go +++ b/vendor/github.com/klauspost/compress/s2/writer.go @@ -83,11 +83,14 @@ type Writer struct { snappy bool flushOnWrite bool appendIndex bool + bufferCB func([]byte) level uint8 } type result struct { b []byte + // return when writing + ret []byte // Uncompressed start offset startOffset int64 } @@ -146,6 +149,10 @@ func (w *Writer) Reset(writer io.Writer) { for write := range toWrite { // Wait for the data to be available. input := <-write + if input.ret != nil && w.bufferCB != nil { + w.bufferCB(input.ret) + input.ret = nil + } in := input.b if len(in) > 0 { if w.err(nil) == nil { @@ -341,7 +348,8 @@ func (w *Writer) AddSkippableBlock(id uint8, data []byte) (err error) { // but the input buffer cannot be written to by the caller // until Flush or Close has been called when concurrency != 1. // -// If you cannot control that, use the regular Write function. +// Use the WriterBufferDone to receive a callback when the buffer is done +// Processing. // // Note that input is not buffered. // This means that each write will result in discrete blocks being created. @@ -364,6 +372,9 @@ func (w *Writer) EncodeBuffer(buf []byte) (err error) { } if w.concurrency == 1 { _, err := w.writeSync(buf) + if w.bufferCB != nil { + w.bufferCB(buf) + } return err } @@ -378,7 +389,7 @@ func (w *Writer) EncodeBuffer(buf []byte) (err error) { hWriter <- result{startOffset: w.uncompWritten, b: magicChunkBytes} } } - + orgBuf := buf for len(buf) > 0 { // Cut input. uncompressed := buf @@ -397,6 +408,9 @@ func (w *Writer) EncodeBuffer(buf []byte) (err error) { startOffset: w.uncompWritten, } w.uncompWritten += int64(len(uncompressed)) + if len(buf) == 0 && w.bufferCB != nil { + res.ret = orgBuf + } go func() { race.ReadSlice(uncompressed) @@ -922,7 +936,7 @@ func WriterBetterCompression() WriterOption { } // WriterBestCompression will enable better compression. -// EncodeBetter compresses better than Encode but typically with a +// EncodeBest compresses better than Encode but typically with a // big speed decrease on compression. func WriterBestCompression() WriterOption { return func(w *Writer) error { @@ -941,6 +955,17 @@ func WriterUncompressed() WriterOption { } } +// WriterBufferDone will perform a callback when EncodeBuffer has finished +// writing a buffer to the output and the buffer can safely be reused. +// If the buffer was split into several blocks, it will be sent after the last block. +// Callbacks will not be done concurrently. +func WriterBufferDone(fn func(b []byte)) WriterOption { + return func(w *Writer) error { + w.bufferCB = fn + return nil + } +} + // WriterBlockSize allows to override the default block size. // Blocks will be this size or smaller. // Minimum size is 4KB and maximum size is 4MB. diff --git a/vendor/github.com/klauspost/compress/zstd/blockdec.go b/vendor/github.com/klauspost/compress/zstd/blockdec.go index 03744fbc76..9c28840c3b 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -598,7 +598,9 @@ func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) { printf("RLE set to 0x%x, code: %v", symb, v) } case compModeFSE: - println("Reading table for", tableIndex(i)) + if debugDecoder { + println("Reading table for", tableIndex(i)) + } if seq.fse == nil || seq.fse.preDefined { seq.fse = fseDecoderPool.Get().(*fseDecoder) } diff --git a/vendor/github.com/klauspost/compress/zstd/enc_better.go b/vendor/github.com/klauspost/compress/zstd/enc_better.go index a4f5bf91fc..84a79fde76 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_better.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_better.go @@ -179,9 +179,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -210,12 +210,12 @@ encodeLoop: // Index match start+1 (long) -> s - 1 index0 := s + repOff - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -241,9 +241,9 @@ encodeLoop: if false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) { // Consider history as well. var seq seq - lenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) + length := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -270,11 +270,11 @@ encodeLoop: } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff2 + s += length + repOff2 nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -708,9 +708,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -738,12 +738,12 @@ encodeLoop: blk.sequences = append(blk.sequences, seq) // Index match start+1 (long) -> s - 1 - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -772,9 +772,9 @@ encodeLoop: if false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) { // Consider history as well. var seq seq - lenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) + length := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -801,11 +801,11 @@ encodeLoop: } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff2 + s += length + repOff2 nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop diff --git a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go index a154c18f74..d36be7bd8c 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go @@ -138,9 +138,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -166,11 +166,11 @@ encodeLoop: println("repeat sequence", seq, "next s:", s) } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -798,9 +798,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -826,11 +826,11 @@ encodeLoop: println("repeat sequence", seq, "next s:", s) } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop diff --git a/vendor/github.com/klauspost/compress/zstd/encoder.go b/vendor/github.com/klauspost/compress/zstd/encoder.go index 72af7ef0fe..a79c4a527c 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder.go @@ -202,7 +202,7 @@ func (e *Encoder) nextBlock(final bool) error { return nil } if final && len(s.filling) > 0 { - s.current = e.EncodeAll(s.filling, s.current[:0]) + s.current = e.encodeAll(s.encoder, s.filling, s.current[:0]) var n2 int n2, s.err = s.w.Write(s.current) if s.err != nil { @@ -469,6 +469,15 @@ func (e *Encoder) Close() error { // Data compressed with EncodeAll can be decoded with the Decoder, // using either a stream or DecodeAll. func (e *Encoder) EncodeAll(src, dst []byte) []byte { + e.init.Do(e.initialize) + enc := <-e.encoders + defer func() { + e.encoders <- enc + }() + return e.encodeAll(enc, src, dst) +} + +func (e *Encoder) encodeAll(enc encoder, src, dst []byte) []byte { if len(src) == 0 { if e.o.fullZero { // Add frame header. @@ -491,13 +500,7 @@ func (e *Encoder) EncodeAll(src, dst []byte) []byte { } return dst } - e.init.Do(e.initialize) - enc := <-e.encoders - defer func() { - // Release encoder reference to last block. - // If a non-single block is needed the encoder will reset again. - e.encoders <- enc - }() + // Use single segments when above minimum window and below window size. single := len(src) <= e.o.windowSize && len(src) > MinWindowSize if e.o.single != nil { diff --git a/vendor/github.com/klauspost/compress/zstd/framedec.go b/vendor/github.com/klauspost/compress/zstd/framedec.go index 53e160f7e5..e47af66e7c 100644 --- a/vendor/github.com/klauspost/compress/zstd/framedec.go +++ b/vendor/github.com/klauspost/compress/zstd/framedec.go @@ -146,7 +146,9 @@ func (d *frameDec) reset(br byteBuffer) error { } return err } - printf("raw: %x, mantissa: %d, exponent: %d\n", wd, wd&7, wd>>3) + if debugDecoder { + printf("raw: %x, mantissa: %d, exponent: %d\n", wd, wd&7, wd>>3) + } windowLog := 10 + (wd >> 3) windowBase := uint64(1) << windowLog windowAdd := (windowBase / 8) * uint64(wd&0x7) diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go index 8adabd8287..c59f17e07a 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go @@ -146,7 +146,7 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) default: - return true, fmt.Errorf("sequenceDecs_decode returned erronous code %d", errCode) + return true, fmt.Errorf("sequenceDecs_decode returned erroneous code %d", errCode) } s.seqSize += ctx.litRemain @@ -292,7 +292,7 @@ func (s *sequenceDecs) decode(seqs []seqVals) error { return io.ErrUnexpectedEOF } - return fmt.Errorf("sequenceDecs_decode_amd64 returned erronous code %d", errCode) + return fmt.Errorf("sequenceDecs_decode_amd64 returned erroneous code %d", errCode) } if ctx.litRemain < 0 { diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index 5b06174b89..f5591fa1e8 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -1814,7 +1814,7 @@ TEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32 MOVQ 40(SP), AX ADDQ AX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R10, 32(SP) // outBase += outPosition @@ -2376,7 +2376,7 @@ TEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32 MOVQ 40(SP), CX ADDQ CX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R9, 32(SP) // outBase += outPosition @@ -2896,7 +2896,7 @@ TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32 MOVQ 40(SP), AX ADDQ AX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R10, 32(SP) // outBase += outPosition @@ -3560,7 +3560,7 @@ TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32 MOVQ 40(SP), CX ADDQ CX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R9, 32(SP) // outBase += outPosition diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index 8a4f49a4c5..519db348a7 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -844,9 +844,7 @@ func (h *histogram) Write(out *dto.Metric) error { }} } - // If exemplars are not configured, the cap will be 0. - // So append is not needed in this case. - if cap(h.nativeExemplars.exemplars) > 0 { + if h.nativeExemplars.isEnabled() { h.nativeExemplars.Lock() his.Exemplars = append(his.Exemplars, h.nativeExemplars.exemplars...) h.nativeExemplars.Unlock() @@ -1665,6 +1663,10 @@ type nativeExemplars struct { exemplars []*dto.Exemplar } +func (n *nativeExemplars) isEnabled() bool { + return n.ttl != -1 +} + func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars { if ttl == 0 { ttl = 5 * time.Minute @@ -1686,7 +1688,7 @@ func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars { } func (n *nativeExemplars) addExemplar(e *dto.Exemplar) { - if n.ttl == -1 { + if !n.isEnabled() { return } diff --git a/vendor/go.opentelemetry.io/collector/pdata/internal/data/profileid.go b/vendor/go.opentelemetry.io/collector/pdata/internal/data/profileid.go new file mode 100644 index 0000000000..5b4e6f53ce --- /dev/null +++ b/vendor/go.opentelemetry.io/collector/pdata/internal/data/profileid.go @@ -0,0 +1,79 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package data // import "go.opentelemetry.io/collector/pdata/internal/data" + +import ( + "errors" + + "github.com/gogo/protobuf/proto" +) + +const profileIDSize = 16 + +var ( + errMarshalProfileID = errors.New("marshal: invalid buffer length for ProfileID") + errUnmarshalProfileID = errors.New("unmarshal: invalid ProfileID length") +) + +// ProfileID is a custom data type that is used for all profile_id fields in OTLP +// Protobuf messages. +type ProfileID [profileIDSize]byte + +var _ proto.Sizer = (*SpanID)(nil) + +// Size returns the size of the data to serialize. +func (tid ProfileID) Size() int { + if tid.IsEmpty() { + return 0 + } + return profileIDSize +} + +// IsEmpty returns true if id contains at leas one non-zero byte. +func (tid ProfileID) IsEmpty() bool { + return tid == [profileIDSize]byte{} +} + +// MarshalTo converts profile ID into a binary representation. Called by Protobuf serialization. +func (tid ProfileID) MarshalTo(data []byte) (n int, err error) { + if tid.IsEmpty() { + return 0, nil + } + + if len(data) < profileIDSize { + return 0, errMarshalProfileID + } + + return copy(data, tid[:]), nil +} + +// Unmarshal inflates this profile ID from binary representation. Called by Protobuf serialization. +func (tid *ProfileID) Unmarshal(data []byte) error { + if len(data) == 0 { + *tid = [profileIDSize]byte{} + return nil + } + + if len(data) != profileIDSize { + return errUnmarshalProfileID + } + + copy(tid[:], data) + return nil +} + +// MarshalJSON converts profile id into a hex string enclosed in quotes. +func (tid ProfileID) MarshalJSON() ([]byte, error) { + if tid.IsEmpty() { + return []byte(`""`), nil + } + return marshalJSON(tid[:]) +} + +// UnmarshalJSON inflates profile id from hex string, possibly enclosed in quotes. +// Called by Protobuf JSON deserialization. +func (tid *ProfileID) UnmarshalJSON(data []byte) error { + *tid = [profileIDSize]byte{} + return unmarshalJSON(tid[:], data) +} diff --git a/vendor/go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1experimental/profiles.pb.go b/vendor/go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1experimental/profiles.pb.go index 6e4662c248..cd1c215adb 100644 --- a/vendor/go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1experimental/profiles.pb.go +++ b/vendor/go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1experimental/profiles.pb.go @@ -13,6 +13,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" + go_opentelemetry_io_collector_pdata_internal_data "go.opentelemetry.io/collector/pdata/internal/data" v11 "go.opentelemetry.io/collector/pdata/internal/data/protogen/common/v1" v1 "go.opentelemetry.io/collector/pdata/internal/data/protogen/resource/v1" ) @@ -231,7 +232,7 @@ type ProfileContainer struct { // all zeroes is considered invalid. // // This field is required. - ProfileId []byte `protobuf:"bytes,1,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"` + ProfileId go_opentelemetry_io_collector_pdata_internal_data.ProfileID `protobuf:"bytes,1,opt,name=profile_id,json=profileId,proto3,customtype=go.opentelemetry.io/collector/pdata/internal/data.ProfileID" json:"profile_id"` // start_time_unix_nano is the start time of the profile. // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. // @@ -304,13 +305,6 @@ func (m *ProfileContainer) XXX_DiscardUnknown() { var xxx_messageInfo_ProfileContainer proto.InternalMessageInfo -func (m *ProfileContainer) GetProfileId() []byte { - if m != nil { - return m.ProfileId - } - return nil -} - func (m *ProfileContainer) GetStartTimeUnixNano() uint64 { if m != nil { return m.StartTimeUnixNano @@ -372,48 +366,49 @@ func init() { } var fileDescriptor_394731f2296acea3 = []byte{ - // 652 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x51, 0x6b, 0xdb, 0x3a, - 0x14, 0xc7, 0xe3, 0xa6, 0x4d, 0x52, 0xb5, 0xb9, 0x4d, 0x45, 0xef, 0xbd, 0xa6, 0x70, 0x73, 0x43, - 0x5e, 0x96, 0xae, 0x60, 0x93, 0x76, 0x8c, 0x51, 0x18, 0x63, 0xed, 0x36, 0xe8, 0xca, 0xd6, 0xe0, - 0xb5, 0x85, 0xed, 0xc5, 0xa8, 0xf1, 0x69, 0xa6, 0x61, 0x4b, 0x46, 0x96, 0x43, 0xba, 0x4f, 0xb1, - 0xcf, 0xb1, 0x4f, 0xd2, 0xc7, 0xee, 0x6d, 0x6c, 0x30, 0x46, 0xfb, 0xb2, 0x7e, 0x8b, 0x61, 0x59, - 0xf6, 0x12, 0x93, 0x51, 0xb2, 0x17, 0x23, 0x9f, 0xf3, 0x3f, 0xbf, 0xa3, 0xff, 0x91, 0x10, 0xda, - 0xe1, 0x21, 0x30, 0x09, 0x3e, 0x04, 0x20, 0xc5, 0xb9, 0x1d, 0x0a, 0x2e, 0x79, 0xf2, 0x3d, 0xa3, - 0x3e, 0x44, 0xf6, 0xb0, 0x0b, 0xa3, 0x10, 0x04, 0x0d, 0x80, 0x49, 0xe2, 0xe7, 0x71, 0x4b, 0xc9, - 0xf0, 0xe6, 0x44, 0x6d, 0x1a, 0xb4, 0x72, 0xcd, 0x64, 0xed, 0xfa, 0xda, 0x80, 0x0f, 0x78, 0x8a, - 0x4f, 0x56, 0xa9, 0x7a, 0xfd, 0xee, 0xb4, 0xf6, 0x7d, 0x1e, 0x04, 0x9c, 0xd9, 0xc3, 0xae, 0x5e, - 0x69, 0xad, 0x35, 0x4d, 0x2b, 0x20, 0xe2, 0xb1, 0xe8, 0x43, 0xa2, 0xce, 0xd6, 0x5a, 0xff, 0x68, - 0x26, 0x6b, 0x49, 0x02, 0x46, 0x12, 0x98, 0x07, 0x5e, 0x0a, 0x68, 0xbf, 0x47, 0xcb, 0x3d, 0x2d, - 0x7f, 0x42, 0x24, 0xc1, 0xef, 0xd0, 0x6a, 0xd6, 0xc2, 0xcd, 0x38, 0xa6, 0xd1, 0x2a, 0x77, 0x96, - 0xb6, 0x1e, 0x5a, 0x33, 0xcc, 0xc2, 0x72, 0x34, 0x25, 0xa3, 0x3b, 0x0d, 0x51, 0x88, 0xb4, 0x6f, - 0x0c, 0xd4, 0x28, 0xca, 0xf0, 0x01, 0xaa, 0x65, 0x42, 0xd3, 0x68, 0x19, 0x9d, 0xa5, 0xad, 0x8d, - 0xa9, 0x7d, 0xf3, 0x41, 0x0c, 0xbb, 0x79, 0xaf, 0xdd, 0xf9, 0x8b, 0x6f, 0xff, 0x97, 0x9c, 0x1c, - 0x80, 0x09, 0xfa, 0x2b, 0xea, 0xf3, 0x70, 0xcc, 0xca, 0x9c, 0xb2, 0xb2, 0x33, 0x93, 0x95, 0x57, - 0x09, 0x22, 0xf7, 0x51, 0x8f, 0xc6, 0x7f, 0xf1, 0x7f, 0x08, 0x45, 0xfd, 0xb7, 0x10, 0x10, 0x37, - 0x16, 0xbe, 0x59, 0x6e, 0x19, 0x9d, 0x45, 0x67, 0x31, 0x8d, 0x1c, 0x0b, 0xff, 0x79, 0xa5, 0xf6, - 0xa3, 0xda, 0xb8, 0xa9, 0xb6, 0xbf, 0x18, 0xa8, 0x3e, 0xc1, 0xc1, 0x87, 0x68, 0x41, 0x91, 0xb4, - 0xcb, 0xed, 0xa9, 0x5b, 0xd2, 0x97, 0x63, 0xd8, 0xb5, 0xf6, 0x59, 0x24, 0x45, 0xac, 0x76, 0x24, - 0x29, 0x67, 0x8a, 0xa5, 0xfd, 0xa6, 0x1c, 0xfc, 0x1a, 0xd5, 0x0a, 0x36, 0x67, 0x3b, 0x31, 0xbd, - 0xb3, 0x3d, 0xce, 0x24, 0xa1, 0x0c, 0x84, 0x93, 0xe3, 0x6e, 0x31, 0xd9, 0xfe, 0x54, 0x46, 0x8d, - 0x62, 0x75, 0x52, 0xa3, 0xeb, 0x5d, 0xea, 0x29, 0x93, 0xcb, 0xce, 0xa2, 0x8e, 0xec, 0x7b, 0xd8, - 0x46, 0x6b, 0x91, 0x24, 0x42, 0xba, 0x92, 0x06, 0xe0, 0xc6, 0x8c, 0x8e, 0x5c, 0x46, 0x18, 0x37, - 0xe7, 0x5a, 0x46, 0xa7, 0xe2, 0xac, 0xaa, 0xdc, 0x11, 0x0d, 0xe0, 0x98, 0xd1, 0xd1, 0x4b, 0xc2, - 0x38, 0xde, 0x44, 0x18, 0x98, 0x57, 0x94, 0x97, 0x95, 0x7c, 0x05, 0x98, 0x37, 0x21, 0x7e, 0x81, - 0x10, 0x91, 0x52, 0xd0, 0xd3, 0x58, 0x42, 0x64, 0xce, 0xab, 0x69, 0xdc, 0xb9, 0x65, 0xc2, 0x07, - 0x70, 0x7e, 0x42, 0xfc, 0x38, 0x9b, 0xea, 0x18, 0x00, 0x3f, 0x40, 0xa6, 0x27, 0x78, 0x18, 0x82, - 0xe7, 0xfe, 0x8a, 0xba, 0x7d, 0x1e, 0x33, 0x69, 0x2e, 0xb4, 0x8c, 0x4e, 0xdd, 0xf9, 0x47, 0xe7, - 0x1f, 0xe7, 0xe9, 0xbd, 0x24, 0x8b, 0xef, 0xa3, 0x7f, 0xb9, 0xa0, 0x03, 0xca, 0x88, 0xef, 0x86, - 0xe4, 0xdc, 0xe7, 0xc4, 0x73, 0xcf, 0xb8, 0x08, 0x88, 0x34, 0x2b, 0x6a, 0x8c, 0x7f, 0x67, 0xe9, - 0x5e, 0x9a, 0x7d, 0xa6, 0x92, 0x78, 0x03, 0x35, 0x8a, 0x75, 0x66, 0x55, 0xcd, 0x70, 0xa5, 0x50, - 0x80, 0x8f, 0x50, 0x55, 0x8f, 0xd5, 0xac, 0xa9, 0xab, 0x74, 0xef, 0x4f, 0x8e, 0x5d, 0xbb, 0xce, - 0x50, 0xbb, 0x5f, 0x8d, 0x8b, 0xab, 0xa6, 0x71, 0x79, 0xd5, 0x34, 0xbe, 0x5f, 0x35, 0x8d, 0x0f, - 0xd7, 0xcd, 0xd2, 0xe5, 0x75, 0xb3, 0xf4, 0xf9, 0xba, 0x59, 0x42, 0x16, 0xe5, 0xb3, 0x74, 0xd8, - 0xad, 0x67, 0x77, 0xbe, 0x97, 0xc8, 0x7a, 0xc6, 0x1b, 0x67, 0x50, 0x04, 0xd0, 0xe4, 0x45, 0xf4, - 0x7d, 0xe8, 0x4b, 0x2e, 0xec, 0xd0, 0x23, 0x92, 0xd8, 0x94, 0x49, 0x10, 0x8c, 0xf8, 0xb6, 0xfa, - 0x53, 0x1d, 0x06, 0xc0, 0x7e, 0xf7, 0xb8, 0x7d, 0x9c, 0xdb, 0x3c, 0x0c, 0x81, 0x1d, 0xe5, 0x44, - 0xd5, 0x2b, 0x33, 0x17, 0x59, 0x27, 0xdd, 0xa7, 0x63, 0xea, 0xd3, 0x8a, 0xe2, 0x6d, 0xff, 0x0c, - 0x00, 0x00, 0xff, 0xff, 0xe1, 0x89, 0x49, 0xa4, 0x1b, 0x06, 0x00, 0x00, + // 671 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xdf, 0x6e, 0xd3, 0x30, + 0x14, 0xc6, 0xeb, 0xfd, 0x69, 0x3b, 0x6f, 0x65, 0x9d, 0x35, 0x20, 0x9a, 0x44, 0x57, 0xf5, 0x86, + 0x8e, 0x49, 0x89, 0xba, 0x21, 0x84, 0x86, 0x10, 0xa2, 0x1b, 0x48, 0x63, 0x82, 0x55, 0x61, 0x9b, + 0x04, 0x37, 0x91, 0xd7, 0x78, 0xc5, 0x28, 0xb1, 0x23, 0xc7, 0xa9, 0x3a, 0x9e, 0x82, 0x2b, 0x1e, + 0x82, 0x27, 0xd9, 0xe5, 0x2e, 0xd1, 0x90, 0x26, 0xb4, 0xdd, 0xb0, 0xb7, 0x40, 0x71, 0x9c, 0xd0, + 0x46, 0x45, 0x53, 0xb9, 0x89, 0x1c, 0x9f, 0xef, 0xfc, 0xce, 0xf9, 0x7c, 0x9c, 0xc0, 0x2d, 0x1e, + 0x10, 0x26, 0x89, 0x47, 0x7c, 0x22, 0xc5, 0xa9, 0x15, 0x08, 0x2e, 0x79, 0xfc, 0x3c, 0xa1, 0x1e, + 0x09, 0xad, 0x7e, 0x8b, 0x0c, 0x02, 0x22, 0xa8, 0x4f, 0x98, 0xc4, 0x5e, 0xb6, 0x6f, 0x2a, 0x19, + 0x5a, 0x1f, 0xc9, 0x4d, 0x36, 0xcd, 0x4c, 0x33, 0x9a, 0xbb, 0xb2, 0xdc, 0xe3, 0x3d, 0x9e, 0xe0, + 0xe3, 0x55, 0xa2, 0x5e, 0x79, 0x34, 0xae, 0x7c, 0x97, 0xfb, 0x3e, 0x67, 0x56, 0xbf, 0xa5, 0x57, + 0x5a, 0x6b, 0x8e, 0xd3, 0x0a, 0x12, 0xf2, 0x48, 0x74, 0x49, 0xac, 0x4e, 0xd7, 0x5a, 0xff, 0x62, + 0x22, 0x6b, 0x71, 0x80, 0x0c, 0x24, 0x61, 0x2e, 0x71, 0x13, 0x40, 0xe3, 0x0b, 0x5c, 0xe8, 0x68, + 0xf9, 0x0e, 0x96, 0x18, 0x7d, 0x86, 0x4b, 0x69, 0x09, 0x27, 0xe5, 0x18, 0xa0, 0x3e, 0xdd, 0x9c, + 0xdf, 0x78, 0x6e, 0x4e, 0x70, 0x16, 0xa6, 0xad, 0x29, 0x29, 0xdd, 0xae, 0x8a, 0xdc, 0x4e, 0xe3, + 0x06, 0xc0, 0x6a, 0x5e, 0x86, 0xf6, 0x60, 0x39, 0x15, 0x1a, 0xa0, 0x0e, 0x9a, 0xf3, 0x1b, 0x6b, + 0x63, 0xeb, 0x66, 0x07, 0xd1, 0x6f, 0x65, 0xb5, 0xda, 0x33, 0x67, 0x97, 0xab, 0x05, 0x3b, 0x03, + 0x20, 0x0c, 0xef, 0x84, 0x5d, 0x1e, 0x0c, 0x59, 0x99, 0x52, 0x56, 0xb6, 0x26, 0xb2, 0xf2, 0x3e, + 0x46, 0x64, 0x3e, 0x2a, 0xe1, 0xf0, 0x2b, 0x7a, 0x00, 0x61, 0xd8, 0xfd, 0x44, 0x7c, 0xec, 0x44, + 0xc2, 0x33, 0xa6, 0xeb, 0xa0, 0x39, 0x67, 0xcf, 0x25, 0x3b, 0x87, 0xc2, 0x7b, 0x53, 0x2c, 0xff, + 0x2e, 0x55, 0x6f, 0x4a, 0x8d, 0x0b, 0x00, 0x2b, 0x23, 0x1c, 0xb4, 0x0f, 0x67, 0x15, 0x49, 0xbb, + 0xdc, 0x1c, 0xdb, 0x92, 0xbe, 0x1c, 0xfd, 0x96, 0xb9, 0xcb, 0x42, 0x29, 0x22, 0xd5, 0x91, 0xa4, + 0x9c, 0x29, 0x96, 0xf6, 0x9b, 0x70, 0xd0, 0x07, 0x58, 0xce, 0xd9, 0x9c, 0x6c, 0x62, 0xba, 0xb3, + 0x6d, 0xce, 0x24, 0xa6, 0x8c, 0x08, 0x3b, 0xc3, 0xdd, 0x62, 0xb2, 0xf1, 0x6d, 0x06, 0x56, 0xf3, + 0xd9, 0xe8, 0x18, 0x42, 0x9d, 0xef, 0x50, 0x57, 0x99, 0x5c, 0x68, 0x6f, 0xc7, 0xfd, 0x5e, 0x5c, + 0xae, 0x3e, 0xeb, 0xf1, 0x5c, 0x6b, 0x34, 0xfe, 0x24, 0x3c, 0x8f, 0x74, 0x25, 0x17, 0x56, 0xe0, + 0x62, 0x89, 0x2d, 0xca, 0x24, 0x11, 0x0c, 0x7b, 0x56, 0xfc, 0x96, 0x76, 0xb7, 0xbb, 0x63, 0xcf, + 0x69, 0xec, 0xae, 0x8b, 0x2c, 0xb8, 0x1c, 0x4a, 0x2c, 0xa4, 0x23, 0xa9, 0x4f, 0x9c, 0x88, 0xd1, + 0x81, 0xc3, 0x30, 0xe3, 0xc6, 0x54, 0x1d, 0x34, 0x8b, 0xf6, 0x92, 0x8a, 0x1d, 0x50, 0x9f, 0x1c, + 0x32, 0x3a, 0x78, 0x87, 0x19, 0x47, 0xeb, 0x10, 0x11, 0xe6, 0xe6, 0xe5, 0xd3, 0x4a, 0xbe, 0x48, + 0x98, 0x3b, 0x22, 0x7e, 0x0b, 0x21, 0x96, 0x52, 0xd0, 0xe3, 0x48, 0x92, 0xd0, 0x98, 0x51, 0x47, + 0xfa, 0xf0, 0x96, 0x31, 0xed, 0x91, 0xd3, 0x23, 0xec, 0x45, 0xe9, 0x68, 0x86, 0x00, 0xe8, 0x29, + 0x34, 0x5c, 0xc1, 0x83, 0x80, 0xb8, 0xce, 0xdf, 0x5d, 0xa7, 0xcb, 0x23, 0x26, 0x8d, 0xd9, 0x3a, + 0x68, 0x56, 0xec, 0x7b, 0x3a, 0xfe, 0x32, 0x0b, 0x6f, 0xc7, 0x51, 0xf4, 0x04, 0xde, 0xe7, 0x82, + 0xf6, 0x28, 0xc3, 0x9e, 0x13, 0xe0, 0x53, 0x8f, 0x63, 0xd7, 0x39, 0xe1, 0xc2, 0xc7, 0xd2, 0x28, + 0xaa, 0x59, 0xdc, 0x4d, 0xc3, 0x9d, 0x24, 0xfa, 0x5a, 0x05, 0xd1, 0x1a, 0xac, 0xe6, 0xf3, 0x8c, + 0x52, 0x3c, 0x08, 0x7b, 0x31, 0x97, 0x80, 0x0e, 0x60, 0x49, 0x1f, 0xab, 0x51, 0x56, 0xf7, 0xf1, + 0xf1, 0xff, 0xdc, 0x1d, 0xed, 0x3a, 0x45, 0xb5, 0x7f, 0x82, 0xb3, 0xab, 0x1a, 0x38, 0xbf, 0xaa, + 0x81, 0x5f, 0x57, 0x35, 0xf0, 0xf5, 0xba, 0x56, 0x38, 0xbf, 0xae, 0x15, 0x7e, 0x5c, 0xd7, 0x0a, + 0xd0, 0xa4, 0x7c, 0x92, 0x0a, 0xed, 0x4a, 0xfa, 0xe1, 0x74, 0x62, 0x59, 0x07, 0x7c, 0xb4, 0x27, + 0xbe, 0x43, 0xc9, 0xef, 0xb1, 0x47, 0xd8, 0xbf, 0xfe, 0x90, 0xdf, 0xa7, 0xd6, 0xf7, 0x03, 0xc2, + 0x0e, 0x32, 0xa2, 0xaa, 0x95, 0x9a, 0x0b, 0xcd, 0xa3, 0xd6, 0xab, 0x21, 0xf5, 0x71, 0x51, 0xf1, + 0x36, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x73, 0x8f, 0x2e, 0xdd, 0x60, 0x06, 0x00, 0x00, } func (m *ProfilesData) Marshal() (dAtA []byte, err error) { @@ -636,13 +631,16 @@ func (m *ProfileContainer) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x11 } - if len(m.ProfileId) > 0 { - i -= len(m.ProfileId) - copy(dAtA[i:], m.ProfileId) - i = encodeVarintProfiles(dAtA, i, uint64(len(m.ProfileId))) - i-- - dAtA[i] = 0xa + { + size := m.ProfileId.Size() + i -= size + if _, err := m.ProfileId.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintProfiles(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -720,10 +718,8 @@ func (m *ProfileContainer) Size() (n int) { } var l int _ = l - l = len(m.ProfileId) - if l > 0 { - n += 1 + l + sovProfiles(uint64(l)) - } + l = m.ProfileId.Size() + n += 1 + l + sovProfiles(uint64(l)) if m.StartTimeUnixNano != 0 { n += 9 } @@ -1198,9 +1194,8 @@ func (m *ProfileContainer) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ProfileId = append(m.ProfileId[:0], dAtA[iNdEx:postIndex]...) - if m.ProfileId == nil { - m.ProfileId = []byte{} + if err := m.ProfileId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex case 2: diff --git a/vendor/go.opentelemetry.io/collector/pdata/internal/otlp/profiles.go b/vendor/go.opentelemetry.io/collector/pdata/internal/otlp/profiles.go new file mode 100644 index 0000000000..d134ccf9c0 --- /dev/null +++ b/vendor/go.opentelemetry.io/collector/pdata/internal/otlp/profiles.go @@ -0,0 +1,12 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package otlp // import "go.opentelemetry.io/collector/pdata/internal/otlp" + +import ( + otlpprofiles "go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1experimental" +) + +// MigrateProfiles implements any translation needed due to deprecation in OTLP profiles protocol. +// Any pprofile.Unmarshaler implementation from OTLP (proto/json) MUST call this, and the gRPC Server implementation. +func MigrateProfiles(_ []*otlpprofiles.ResourceProfiles) {} diff --git a/vendor/go.opentelemetry.io/collector/pdata/pcommon/map.go b/vendor/go.opentelemetry.io/collector/pdata/pcommon/map.go index 5bbfab962b..91b803922a 100644 --- a/vendor/go.opentelemetry.io/collector/pdata/pcommon/map.go +++ b/vendor/go.opentelemetry.io/collector/pdata/pcommon/map.go @@ -225,6 +225,15 @@ func (m Map) Range(f func(k string, v Value) bool) { } } +// MoveTo moves all key/values from the current map overriding the destination and +// resetting the current instance to its zero value +func (m Map) MoveTo(dest Map) { + m.getState().AssertMutable() + dest.getState().AssertMutable() + *dest.getOrig() = *m.getOrig() + *m.getOrig() = nil +} + // CopyTo copies all elements from the current map overriding the destination. func (m Map) CopyTo(dest Map) { dest.getState().AssertMutable() diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go index 04f425edfe..51d28156be 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go @@ -5,7 +5,7 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g // Version is the current release version of the gRPC instrumentation. func Version() string { - return "0.54.0" + return "0.55.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go index aea171fb26..fbc344cbdd 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go @@ -44,7 +44,9 @@ func (w *RespWriterWrapper) Write(p []byte) (int, error) { w.mu.Lock() defer w.mu.Unlock() - w.writeHeader(http.StatusOK) + if !w.wroteHeader { + w.writeHeader(http.StatusOK) + } n, err := w.ResponseWriter.Write(p) n1 := int64(n) @@ -80,7 +82,12 @@ func (w *RespWriterWrapper) writeHeader(statusCode int) { // Flush implements [http.Flusher]. func (w *RespWriterWrapper) Flush() { - w.WriteHeader(http.StatusOK) + w.mu.Lock() + defer w.mu.Unlock() + + if !w.wroteHeader { + w.writeHeader(http.StatusOK) + } if f, ok := w.ResponseWriter.(http.Flusher); ok { f.Flush() diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go index 502c1bdafc..1133961d39 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go @@ -5,7 +5,7 @@ package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http // Version is the current release version of the otelhttp instrumentation. func Version() string { - return "0.54.0" + return "0.55.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/otel/.golangci.yml b/vendor/go.opentelemetry.io/otel/.golangci.yml index d9abe194d9..a5f904197f 100644 --- a/vendor/go.opentelemetry.io/otel/.golangci.yml +++ b/vendor/go.opentelemetry.io/otel/.golangci.yml @@ -64,12 +64,12 @@ issues: - path: _test\.go linters: - gosec - # Igonoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand) + # Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand) # as we commonly use it in tests and examples. - text: "G404:" linters: - gosec - # Igonoring gosec G402: TLS MinVersion too low + # Ignoring gosec G402: TLS MinVersion too low # as the https://pkg.go.dev/crypto/tls#Config handles MinVersion default well. - text: "G402: TLS MinVersion too low." linters: diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md index 6107c17b89..fb107426e7 100644 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ b/vendor/go.opentelemetry.io/otel/CHANGELOG.md @@ -11,6 +11,25 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm +## [1.30.0/0.52.0/0.6.0/0.0.9] 2024-09-09 + +### Added + +- Support `OTEL_EXPORTER_OTLP_LOGS_INSECURE` and `OTEL_EXPORTER_OTLP_INSECURE` environments in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#5739) +- The `WithResource` option for `NewMeterProvider` now merges the provided resources with the ones from environment variables. (#5773) +- The `WithResource` option for `NewLoggerProvider` now merges the provided resources with the ones from environment variables. (#5773) +- Add UTF-8 support to `go.opentelemetry.io/otel/exporters/prometheus`. (#5755) + +### Fixed + +- Fix memory leak in the global `MeterProvider` when identical instruments are repeatedly created. (#5754) +- Fix panic on instruments creation when setting meter provider. (#5758) +- Fix an issue where `SetMeterProvider` in `go.opentelemetry.io/otel` might miss the delegation for instruments and registries. (#5780) + +### Removed + +- Drop support for [Go 1.21]. (#5736, #5740, #5800) + ## [1.29.0/0.51.0/0.5.0] 2024-08-23 This release is the last to support [Go 1.21]. @@ -1895,7 +1914,7 @@ with major version 0. - Setting error status while recording error with Span from oteltest package. (#1729) - The concept of a remote and local Span stored in a context is unified to just the current Span. Because of this `"go.opentelemetry.io/otel/trace".RemoteSpanContextFromContext` is removed as it is no longer needed. - Instead, `"go.opentelemetry.io/otel/trace".SpanContextFromContex` can be used to return the current Span. + Instead, `"go.opentelemetry.io/otel/trace".SpanContextFromContext` can be used to return the current Span. If needed, that Span's `SpanContext.IsRemote()` can then be used to determine if it is remote or not. (#1731) - The `HasRemoteParent` field of the `"go.opentelemetry.io/otel/sdk/trace".SamplingParameters` is removed. This field is redundant to the information returned from the `Remote` method of the `SpanContext` held in the `ParentContext` field. (#1749) @@ -2469,7 +2488,7 @@ This release migrates the default OpenTelemetry SDK into its own Go module, deco - Prometheus exporter will not apply stale updates or forget inactive metrics. (#903) - Add test for api.standard `HTTPClientAttributesFromHTTPRequest`. (#905) - Bump github.com/golangci/golangci-lint from 1.27.0 to 1.28.1 in /tools. (#901, #913) -- Update otel-colector example to use the v0.5.0 collector. (#915) +- Update otel-collector example to use the v0.5.0 collector. (#915) - The `grpctrace` instrumentation uses a span name conforming to the OpenTelemetry semantic conventions (does not contain a leading slash (`/`)). (#922) - The `grpctrace` instrumentation includes an `rpc.method` attribute now set to the gRPC method name. (#900, #922) - The `grpctrace` instrumentation `rpc.service` attribute now contains the package name if one exists. @@ -3062,7 +3081,8 @@ It contains api and sdk for trace and meter. - CircleCI build CI manifest files. - CODEOWNERS file to track owners of this project. -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.29.0...HEAD +[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.30.0...HEAD +[1.30.0/0.52.0/0.6.0/0.0.9]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.30.0 [1.29.0/0.51.0/0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.29.0 [1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0 [1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0 diff --git a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md index b7402576f9..9158072535 100644 --- a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md +++ b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md @@ -578,7 +578,10 @@ See also: The tests should never leak goroutines. Use the term `ConcurrentSafe` in the test name when it aims to verify the -absence of race conditions. +absence of race conditions. The top-level tests with this term will be run +many times in the `test-concurrent-safe` CI job to increase the chance of +catching concurrency issues. This does not apply to subtests when this term +is not in their root name. ### Internal packages diff --git a/vendor/go.opentelemetry.io/otel/Makefile b/vendor/go.opentelemetry.io/otel/Makefile index 070b1e57df..b04695b242 100644 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ b/vendor/go.opentelemetry.io/otel/Makefile @@ -145,12 +145,14 @@ build-tests/%: # Tests -TEST_TARGETS := test-default test-bench test-short test-verbose test-race +TEST_TARGETS := test-default test-bench test-short test-verbose test-race test-concurrent-safe .PHONY: $(TEST_TARGETS) test test-default test-race: ARGS=-race test-bench: ARGS=-run=xxxxxMatchNothingxxxxx -test.benchtime=1ms -bench=. test-short: ARGS=-short test-verbose: ARGS=-v -race +test-concurrent-safe: ARGS=-run=ConcurrentSafe -count=100 -race +test-concurrent-safe: TIMEOUT=120 $(TEST_TARGETS): test test: $(OTEL_GO_MOD_DIRS:%=test/%) test/%: DIR=$* diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md index 657df34710..9a65707038 100644 --- a/vendor/go.opentelemetry.io/otel/README.md +++ b/vendor/go.opentelemetry.io/otel/README.md @@ -51,25 +51,18 @@ Currently, this project supports the following environments. |----------|------------|--------------| | Ubuntu | 1.23 | amd64 | | Ubuntu | 1.22 | amd64 | -| Ubuntu | 1.21 | amd64 | | Ubuntu | 1.23 | 386 | | Ubuntu | 1.22 | 386 | -| Ubuntu | 1.21 | 386 | | Linux | 1.23 | arm64 | | Linux | 1.22 | arm64 | -| Linux | 1.21 | arm64 | | macOS 13 | 1.23 | amd64 | | macOS 13 | 1.22 | amd64 | -| macOS 13 | 1.21 | amd64 | | macOS | 1.23 | arm64 | | macOS | 1.22 | arm64 | -| macOS | 1.21 | arm64 | | Windows | 1.23 | amd64 | | Windows | 1.22 | amd64 | -| Windows | 1.21 | amd64 | | Windows | 1.23 | 386 | | Windows | 1.22 | 386 | -| Windows | 1.21 | 386 | While this project should work for other systems, no compatibility guarantees are made for those systems currently. diff --git a/vendor/go.opentelemetry.io/otel/baggage/baggage.go b/vendor/go.opentelemetry.io/otel/baggage/baggage.go index b3569e95e5..36f5367030 100644 --- a/vendor/go.opentelemetry.io/otel/baggage/baggage.go +++ b/vendor/go.opentelemetry.io/otel/baggage/baggage.go @@ -50,7 +50,7 @@ type Property struct { // component boundaries may impose their own restrictions on Property key. // For example, the W3C Baggage specification restricts the Property keys to strings that // satisfy the token definition from RFC7230, Section 3.2.6. -// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key. +// For maximum compatibility, alphanumeric value are strongly recommended to be used as Property key. func NewKeyProperty(key string) (Property, error) { if !validateBaggageName(key) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) @@ -90,7 +90,7 @@ func NewKeyValueProperty(key, value string) (Property, error) { // component boundaries may impose their own restrictions on Property key. // For example, the W3C Baggage specification restricts the Property keys to strings that // satisfy the token definition from RFC7230, Section 3.2.6. -// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key. +// For maximum compatibility, alphanumeric value are strongly recommended to be used as Property key. func NewKeyValuePropertyRaw(key, value string) (Property, error) { if !validateBaggageName(key) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) @@ -287,7 +287,7 @@ func NewMember(key, value string, props ...Property) (Member, error) { // component boundaries may impose their own restrictions on baggage key. // For example, the W3C Baggage specification restricts the baggage keys to strings that // satisfy the token definition from RFC7230, Section 3.2.6. -// For maximum compatibility, alpha-numeric value are strongly recommended to be used as baggage key. +// For maximum compatibility, alphanumeric value are strongly recommended to be used as baggage key. func NewMemberRaw(key, value string, props ...Property) (Member, error) { m := Member{ key: key, diff --git a/vendor/go.opentelemetry.io/otel/internal/global/meter.go b/vendor/go.opentelemetry.io/otel/internal/global/meter.go index cfd1df9bfa..f2fc3929b1 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/meter.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/meter.go @@ -5,8 +5,8 @@ package global // import "go.opentelemetry.io/otel/internal/global" import ( "container/list" + "reflect" "sync" - "sync/atomic" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/embedded" @@ -76,7 +76,7 @@ func (p *meterProvider) Meter(name string, opts ...metric.MeterOption) metric.Me return val } - t := &meter{name: name, opts: opts} + t := &meter{name: name, opts: opts, instruments: make(map[instID]delegatedInstrument)} p.meters[key] = t return t } @@ -92,17 +92,29 @@ type meter struct { opts []metric.MeterOption mtx sync.Mutex - instruments []delegatedInstrument + instruments map[instID]delegatedInstrument registry list.List - delegate atomic.Value // metric.Meter + delegate metric.Meter } type delegatedInstrument interface { setDelegate(metric.Meter) } +// instID are the identifying properties of a instrument. +type instID struct { + // name is the name of the stream. + name string + // description is the description of the stream. + description string + // kind defines the functional group of the instrument. + kind reflect.Type + // unit is the unit of the stream. + unit string +} + // setDelegate configures m to delegate all Meter functionality to Meters // created by provider. // @@ -110,12 +122,12 @@ type delegatedInstrument interface { // // It is guaranteed by the caller that this happens only once. func (m *meter) setDelegate(provider metric.MeterProvider) { - meter := provider.Meter(m.name, m.opts...) - m.delegate.Store(meter) - m.mtx.Lock() defer m.mtx.Unlock() + meter := provider.Meter(m.name, m.opts...) + m.delegate = meter + for _, inst := range m.instruments { inst.setDelegate(meter) } @@ -133,169 +145,295 @@ func (m *meter) setDelegate(provider metric.MeterProvider) { } func (m *meter) Int64Counter(name string, options ...metric.Int64CounterOption) (metric.Int64Counter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Counter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64Counter(name, options...) + } + i := &siCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64CounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Int64UpDownCounter(name string, options ...metric.Int64UpDownCounterOption) (metric.Int64UpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64UpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64UpDownCounter(name, options...) + } + i := &siUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64UpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Int64Histogram(name string, options ...metric.Int64HistogramOption) (metric.Int64Histogram, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Histogram(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64Histogram(name, options...) + } + i := &siHistogram{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64HistogramConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Int64Gauge(name string, options ...metric.Int64GaugeOption) (metric.Int64Gauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Gauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64Gauge(name, options...) + } + i := &siGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64GaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Int64ObservableCounter(name string, options ...metric.Int64ObservableCounterOption) (metric.Int64ObservableCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64ObservableCounter(name, options...) + } + i := &aiCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64ObservableCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Int64ObservableUpDownCounter(name string, options ...metric.Int64ObservableUpDownCounterOption) (metric.Int64ObservableUpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableUpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64ObservableUpDownCounter(name, options...) + } + i := &aiUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64ObservableUpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Int64ObservableGauge(name string, options ...metric.Int64ObservableGaugeOption) (metric.Int64ObservableGauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableGauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64ObservableGauge(name, options...) + } + i := &aiGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewInt64ObservableGaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64Counter(name string, options ...metric.Float64CounterOption) (metric.Float64Counter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Counter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64Counter(name, options...) + } + i := &sfCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64CounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64UpDownCounter(name string, options ...metric.Float64UpDownCounterOption) (metric.Float64UpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64UpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64UpDownCounter(name, options...) + } + i := &sfUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64UpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64Histogram(name string, options ...metric.Float64HistogramOption) (metric.Float64Histogram, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Histogram(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64Histogram(name, options...) + } + i := &sfHistogram{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64HistogramConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64Gauge(name string, options ...metric.Float64GaugeOption) (metric.Float64Gauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Gauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64Gauge(name, options...) + } + i := &sfGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64GaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64ObservableCounter(name string, options ...metric.Float64ObservableCounterOption) (metric.Float64ObservableCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64ObservableCounter(name, options...) + } + i := &afCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64ObservableCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64ObservableUpDownCounter(name string, options ...metric.Float64ObservableUpDownCounterOption) (metric.Float64ObservableUpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableUpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64ObservableUpDownCounter(name, options...) + } + i := &afUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64ObservableUpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } func (m *meter) Float64ObservableGauge(name string, options ...metric.Float64ObservableGaugeOption) (metric.Float64ObservableGauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableGauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64ObservableGauge(name, options...) + } + i := &afGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + cfg := metric.NewFloat64ObservableGaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf(i), + description: cfg.Description(), + unit: cfg.Unit(), + } + m.instruments[id] = i return i, nil } // RegisterCallback captures the function that will be called during Collect. func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) (metric.Registration, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - insts = unwrapInstruments(insts) - return del.RegisterCallback(f, insts...) - } - m.mtx.Lock() defer m.mtx.Unlock() + if m.delegate != nil { + insts = unwrapInstruments(insts) + return m.delegate.RegisterCallback(f, insts...) + } + reg := ®istration{instruments: insts, function: f} e := m.registry.PushBack(reg) reg.unreg = func() error { diff --git a/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go b/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go index cf23db7780..f8435d8f28 100644 --- a/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go +++ b/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go @@ -213,7 +213,7 @@ type Float64Observer interface { } // Float64Callback is a function registered with a Meter that makes -// observations for a Float64Observerable instrument it is registered with. +// observations for a Float64Observable instrument it is registered with. // Calls to the Float64Observer record measurement values for the // Float64Observable. // diff --git a/vendor/go.opentelemetry.io/otel/metric/asyncint64.go b/vendor/go.opentelemetry.io/otel/metric/asyncint64.go index c82ba5324e..e079aaef16 100644 --- a/vendor/go.opentelemetry.io/otel/metric/asyncint64.go +++ b/vendor/go.opentelemetry.io/otel/metric/asyncint64.go @@ -212,7 +212,7 @@ type Int64Observer interface { } // Int64Callback is a function registered with a Meter that makes observations -// for an Int64Observerable instrument it is registered with. Calls to the +// for an Int64Observable instrument it is registered with. Calls to the // Int64Observer record measurement values for the Int64Observable. // // The function needs to complete in a finite amount of time and the deadline diff --git a/vendor/go.opentelemetry.io/otel/renovate.json b/vendor/go.opentelemetry.io/otel/renovate.json index 8c5ac55ca9..4d36b98cf4 100644 --- a/vendor/go.opentelemetry.io/otel/renovate.json +++ b/vendor/go.opentelemetry.io/otel/renovate.json @@ -19,6 +19,10 @@ "matchManagers": ["gomod"], "matchDepTypes": ["indirect"], "enabled": false + }, + { + "matchPackageNames": ["google.golang.org/genproto/googleapis/**"], + "groupName": "googleapis" } ] } diff --git a/vendor/go.opentelemetry.io/otel/trace/context.go b/vendor/go.opentelemetry.io/otel/trace/context.go index 5650a174b4..8c45a7107f 100644 --- a/vendor/go.opentelemetry.io/otel/trace/context.go +++ b/vendor/go.opentelemetry.io/otel/trace/context.go @@ -22,7 +22,7 @@ func ContextWithSpanContext(parent context.Context, sc SpanContext) context.Cont return ContextWithSpan(parent, nonRecordingSpan{sc: sc}) } -// ContextWithRemoteSpanContext returns a copy of parent with rsc set explicly +// ContextWithRemoteSpanContext returns a copy of parent with rsc set explicitly // as a remote SpanContext and as the current Span. The Span implementation // that wraps rsc is non-recording and performs no operations other than to // return rsc as the SpanContext from the SpanContext method. diff --git a/vendor/go.opentelemetry.io/otel/trace/doc.go b/vendor/go.opentelemetry.io/otel/trace/doc.go index d661c5d100..cdbf41d6d7 100644 --- a/vendor/go.opentelemetry.io/otel/trace/doc.go +++ b/vendor/go.opentelemetry.io/otel/trace/doc.go @@ -96,7 +96,7 @@ can embed the API interface directly. This option is not recommended. It will lead to publishing packages that contain runtime panics when users update to newer versions of -[go.opentelemetry.io/otel/trace], which may be done with a trasitive +[go.opentelemetry.io/otel/trace], which may be done with a transitive dependency. Finally, an author can embed another implementation in theirs. The embedded diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go index f67039ed1f..78b40f3ed2 100644 --- a/vendor/go.opentelemetry.io/otel/version.go +++ b/vendor/go.opentelemetry.io/otel/version.go @@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel" // Version is the current release version of OpenTelemetry in use. func Version() string { - return "1.29.0" + return "1.30.0" } diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml index 3ba611d713..0c32f4fc46 100644 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ b/vendor/go.opentelemetry.io/otel/versions.yaml @@ -3,7 +3,7 @@ module-sets: stable-v1: - version: v1.29.0 + version: v1.30.0 modules: - go.opentelemetry.io/otel - go.opentelemetry.io/otel/bridge/opencensus @@ -29,12 +29,12 @@ module-sets: - go.opentelemetry.io/otel/sdk/metric - go.opentelemetry.io/otel/trace experimental-metrics: - version: v0.51.0 + version: v0.52.0 modules: - go.opentelemetry.io/otel/example/prometheus - go.opentelemetry.io/otel/exporters/prometheus experimental-logs: - version: v0.5.0 + version: v0.6.0 modules: - go.opentelemetry.io/otel/log - go.opentelemetry.io/otel/sdk/log @@ -42,7 +42,7 @@ module-sets: - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp - go.opentelemetry.io/otel/exporters/stdout/stdoutlog experimental-schema: - version: v0.0.8 + version: v0.0.9 modules: - go.opentelemetry.io/otel/schema excluded-modules: diff --git a/vendor/google.golang.org/api/internal/version.go b/vendor/google.golang.org/api/internal/version.go index 36e075d21f..df50575b90 100644 --- a/vendor/google.golang.org/api/internal/version.go +++ b/vendor/google.golang.org/api/internal/version.go @@ -5,4 +5,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.196.0" +const Version = "0.199.0" diff --git a/vendor/google.golang.org/api/storage/v1/storage-api.json b/vendor/google.golang.org/api/storage/v1/storage-api.json index 597daf0a72..6cd48d5973 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-api.json +++ b/vendor/google.golang.org/api/storage/v1/storage-api.json @@ -32,6 +32,11 @@ "endpointUrl": "https://storage.europe-west3.rep.googleapis.com/", "location": "europe-west3" }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.europe-west8.rep.googleapis.com/", + "location": "europe-west8" + }, { "description": "Regional Endpoint", "endpointUrl": "https://storage.europe-west9.rep.googleapis.com/", @@ -41,9 +46,54 @@ "description": "Regional Endpoint", "endpointUrl": "https://storage.me-central2.rep.googleapis.com/", "location": "me-central2" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-central1.rep.googleapis.com/", + "location": "us-central1" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-east1.rep.googleapis.com/", + "location": "us-east1" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-east4.rep.googleapis.com/", + "location": "us-east4" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-east5.rep.googleapis.com/", + "location": "us-east5" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-south1.rep.googleapis.com/", + "location": "us-south1" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-west1.rep.googleapis.com/", + "location": "us-west1" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-west2.rep.googleapis.com/", + "location": "us-west2" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-west3.rep.googleapis.com/", + "location": "us-west3" + }, + { + "description": "Regional Endpoint", + "endpointUrl": "https://storage.us-west4.rep.googleapis.com/", + "location": "us-west4" } ], - "etag": "\"38363036373236373330353534313035333932\"", + "etag": "\"38303531353337323634333935393838333734\"", "icons": { "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" @@ -2829,6 +2879,11 @@ "location": "query", "type": "string" }, + "restoreToken": { + "description": "Restore token used to differentiate soft-deleted objects with the same name and generation. Only applicable for hierarchical namespace buckets and if softDeleted is set to true. This parameter is optional, and is only required in the rare case when there are multiple soft-deleted objects with the same name and generation.", + "location": "query", + "type": "string" + }, "softDeleted": { "description": "If true, only soft-deleted object versions will be listed. The default is false. For more information, see [Soft Delete](https://cloud.google.com/storage/docs/soft-delete).", "location": "query", @@ -3304,6 +3359,11 @@ "location": "query", "type": "string" }, + "restoreToken": { + "description": "Restore token used to differentiate sof-deleted objects with the same name and generation. Only applicable for hierarchical namespace buckets. This parameter is optional, and is only required in the rare case when there are multiple soft-deleted objects with the same name and generation.", + "location": "query", + "type": "string" + }, "userProject": { "description": "The project to be billed for this request. Required for Requester Pays buckets.", "location": "query", @@ -4136,7 +4196,7 @@ } } }, - "revision": "20240819", + "revision": "20240916", "rootUrl": "https://storage.googleapis.com/", "schemas": { "AnywhereCache": { @@ -5597,6 +5657,10 @@ }, "type": "object" }, + "restoreToken": { + "description": "Restore token used to differentiate deleted objects with the same name and generation. This field is only returned for deleted objects in hierarchical namespace buckets.", + "type": "string" + }, "retention": { "description": "A collection of object level retention parameters.", "properties": { diff --git a/vendor/google.golang.org/api/storage/v1/storage-gen.go b/vendor/google.golang.org/api/storage/v1/storage-gen.go index b16e3f227b..c7c9321765 100644 --- a/vendor/google.golang.org/api/storage/v1/storage-gen.go +++ b/vendor/google.golang.org/api/storage/v1/storage-gen.go @@ -2236,6 +2236,10 @@ type Object struct { // Owner: The owner of the object. This will always be the uploader of the // object. Owner *ObjectOwner `json:"owner,omitempty"` + // RestoreToken: Restore token used to differentiate deleted objects with the + // same name and generation. This field is only returned for deleted objects in + // hierarchical namespace buckets. + RestoreToken string `json:"restoreToken,omitempty"` // Retention: A collection of object level retention parameters. Retention *ObjectRetention `json:"retention,omitempty"` // RetentionExpirationTime: A server-determined value that specifies the @@ -9961,6 +9965,17 @@ func (c *ObjectsGetCall) Projection(projection string) *ObjectsGetCall { return c } +// RestoreToken sets the optional parameter "restoreToken": Restore token used +// to differentiate soft-deleted objects with the same name and generation. +// Only applicable for hierarchical namespace buckets and if softDeleted is set +// to true. This parameter is optional, and is only required in the rare case +// when there are multiple soft-deleted objects with the same name and +// generation. +func (c *ObjectsGetCall) RestoreToken(restoreToken string) *ObjectsGetCall { + c.urlParams_.Set("restoreToken", restoreToken) + return c +} + // SoftDeleted sets the optional parameter "softDeleted": If true, only // soft-deleted object versions will be listed. The default is false. For more // information, see Soft Delete @@ -11056,6 +11071,16 @@ func (c *ObjectsRestoreCall) Projection(projection string) *ObjectsRestoreCall { return c } +// RestoreToken sets the optional parameter "restoreToken": Restore token used +// to differentiate sof-deleted objects with the same name and generation. Only +// applicable for hierarchical namespace buckets. This parameter is optional, +// and is only required in the rare case when there are multiple soft-deleted +// objects with the same name and generation. +func (c *ObjectsRestoreCall) RestoreToken(restoreToken string) *ObjectsRestoreCall { + c.urlParams_.Set("restoreToken", restoreToken) + return c +} + // UserProject sets the optional parameter "userProject": The project to be // billed for this request. Required for Requester Pays buckets. func (c *ObjectsRestoreCall) UserProject(userProject string) *ObjectsRestoreCall { diff --git a/vendor/google.golang.org/api/transport/grpc/dial.go b/vendor/google.golang.org/api/transport/grpc/dial.go index d2a4f76645..ff3539d898 100644 --- a/vendor/google.golang.org/api/transport/grpc/dial.go +++ b/vendor/google.golang.org/api/transport/grpc/dial.go @@ -247,6 +247,7 @@ func dialPoolNewAuth(ctx context.Context, secure bool, poolSize int, ds *interna DefaultScopes: ds.DefaultScopes, SkipValidation: skipValidation, }, + UniverseDomain: ds.UniverseDomain, }) return pool, err } diff --git a/vendor/google.golang.org/api/transport/http/dial.go b/vendor/google.golang.org/api/transport/http/dial.go index 2e2b15c6e0..d5b213e0f0 100644 --- a/vendor/google.golang.org/api/transport/http/dial.go +++ b/vendor/google.golang.org/api/transport/http/dial.go @@ -130,6 +130,7 @@ func newClientNewAuth(ctx context.Context, base http.RoundTripper, ds *internal. DefaultScopes: ds.DefaultScopes, SkipValidation: skipValidation, }, + UniverseDomain: ds.UniverseDomain, }) if err != nil { return nil, err diff --git a/vendor/google.golang.org/grpc/balancer/base/balancer.go b/vendor/google.golang.org/grpc/balancer/base/balancer.go index a7f1eeec8e..2b87bd79c7 100644 --- a/vendor/google.golang.org/grpc/balancer/base/balancer.go +++ b/vendor/google.golang.org/grpc/balancer/base/balancer.go @@ -36,7 +36,7 @@ type baseBuilder struct { config Config } -func (bb *baseBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { +func (bb *baseBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer { bal := &baseBalancer{ cc: cc, pickerBuilder: bb.pickerBuilder, @@ -259,6 +259,6 @@ type errPicker struct { err error // Pick() always returns this err. } -func (p *errPicker) Pick(info balancer.PickInfo) (balancer.PickResult, error) { +func (p *errPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) { return balancer.PickResult{}, p.err } diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go index f0b1a274fe..52f54e6a01 100644 --- a/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go +++ b/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer.pb.go @@ -19,7 +19,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.1 +// protoc-gen-go v1.34.2 // protoc v5.27.1 // source: grpc/lb/v1/load_balancer.proto @@ -780,7 +780,7 @@ func file_grpc_lb_v1_load_balancer_proto_rawDescGZIP() []byte { } var file_grpc_lb_v1_load_balancer_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_grpc_lb_v1_load_balancer_proto_goTypes = []interface{}{ +var file_grpc_lb_v1_load_balancer_proto_goTypes = []any{ (*LoadBalanceRequest)(nil), // 0: grpc.lb.v1.LoadBalanceRequest (*InitialLoadBalanceRequest)(nil), // 1: grpc.lb.v1.InitialLoadBalanceRequest (*ClientStatsPerToken)(nil), // 2: grpc.lb.v1.ClientStatsPerToken @@ -818,7 +818,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_grpc_lb_v1_load_balancer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*LoadBalanceRequest); i { case 0: return &v.state @@ -830,7 +830,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*InitialLoadBalanceRequest); i { case 0: return &v.state @@ -842,7 +842,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ClientStatsPerToken); i { case 0: return &v.state @@ -854,7 +854,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ClientStats); i { case 0: return &v.state @@ -866,7 +866,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*LoadBalanceResponse); i { case 0: return &v.state @@ -878,7 +878,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*FallbackResponse); i { case 0: return &v.state @@ -890,7 +890,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*InitialLoadBalanceResponse); i { case 0: return &v.state @@ -902,7 +902,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ServerList); i { case 0: return &v.state @@ -914,7 +914,7 @@ func file_grpc_lb_v1_load_balancer_proto_init() { return nil } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_grpc_lb_v1_load_balancer_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*Server); i { case 0: return &v.state @@ -927,11 +927,11 @@ func file_grpc_lb_v1_load_balancer_proto_init() { } } } - file_grpc_lb_v1_load_balancer_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_grpc_lb_v1_load_balancer_proto_msgTypes[0].OneofWrappers = []any{ (*LoadBalanceRequest_InitialRequest)(nil), (*LoadBalanceRequest_ClientStats)(nil), } - file_grpc_lb_v1_load_balancer_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_grpc_lb_v1_load_balancer_proto_msgTypes[4].OneofWrappers = []any{ (*LoadBalanceResponse_InitialResponse)(nil), (*LoadBalanceResponse_ServerList)(nil), (*LoadBalanceResponse_FallbackResponse)(nil), diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go index 5b592f48ad..4d69b4052f 100644 --- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go +++ b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go @@ -50,7 +50,7 @@ const ( type pickfirstBuilder struct{} -func (pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { +func (pickfirstBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer { b := &pickfirstBalancer{cc: cc} b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b)) return b diff --git a/vendor/google.golang.org/grpc/balancer_wrapper.go b/vendor/google.golang.org/grpc/balancer_wrapper.go index 6561b769eb..8ad6ce2f09 100644 --- a/vendor/google.golang.org/grpc/balancer_wrapper.go +++ b/vendor/google.golang.org/grpc/balancer_wrapper.go @@ -192,7 +192,7 @@ func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer return acbw, nil } -func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) { +func (ccb *ccBalancerWrapper) RemoveSubConn(balancer.SubConn) { // The graceful switch balancer will never call this. logger.Errorf("ccb RemoveSubConn(%v) called unexpectedly, sc") } @@ -342,8 +342,8 @@ func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) ( pData := acbw.producers[pb] if pData == nil { // Not found; create a new one and add it to the producers map. - p, close := pb.Build(acbw) - pData = &refCountedProducer{producer: p, close: close} + p, closeFn := pb.Build(acbw) + pData = &refCountedProducer{producer: p, close: closeFn} acbw.producers[pb] = pData } // Account for this new reference. diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go index fcd1cfe802..55bffaa77e 100644 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go +++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.1 +// protoc-gen-go v1.34.2 // protoc v5.27.1 // source: grpc/binlog/v1/binarylog.proto @@ -1015,7 +1015,7 @@ func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte { var file_grpc_binlog_v1_binarylog_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_grpc_binlog_v1_binarylog_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_grpc_binlog_v1_binarylog_proto_goTypes = []interface{}{ +var file_grpc_binlog_v1_binarylog_proto_goTypes = []any{ (GrpcLogEntry_EventType)(0), // 0: grpc.binarylog.v1.GrpcLogEntry.EventType (GrpcLogEntry_Logger)(0), // 1: grpc.binarylog.v1.GrpcLogEntry.Logger (Address_Type)(0), // 2: grpc.binarylog.v1.Address.Type @@ -1058,7 +1058,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_grpc_binlog_v1_binarylog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GrpcLogEntry); i { case 0: return &v.state @@ -1070,7 +1070,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ClientHeader); i { case 0: return &v.state @@ -1082,7 +1082,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ServerHeader); i { case 0: return &v.state @@ -1094,7 +1094,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*Trailer); i { case 0: return &v.state @@ -1106,7 +1106,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Message); i { case 0: return &v.state @@ -1118,7 +1118,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Metadata); i { case 0: return &v.state @@ -1130,7 +1130,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*MetadataEntry); i { case 0: return &v.state @@ -1142,7 +1142,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { return nil } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_grpc_binlog_v1_binarylog_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*Address); i { case 0: return &v.state @@ -1155,7 +1155,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { } } } - file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []any{ (*GrpcLogEntry_ClientHeader)(nil), (*GrpcLogEntry_ServerHeader)(nil), (*GrpcLogEntry_Message)(nil), diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/conn/record.go b/vendor/google.golang.org/grpc/credentials/alts/internal/conn/record.go index 0d64fb37a1..f1ea7bb208 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/conn/record.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/conn/record.go @@ -266,10 +266,3 @@ func (p *conn) Write(b []byte) (n int, err error) { } return n, nil } - -func min(a, b int) int { - if a < b { - return a - } - return b -} diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go index 6c867dd850..50721f690a 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/handshaker.go @@ -128,7 +128,7 @@ type altsHandshaker struct { // NewClientHandshaker creates a core.Handshaker that performs a client-side // ALTS handshake by acting as a proxy between the peer and the ALTS handshaker // service in the metadata server. -func NewClientHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, opts *ClientHandshakerOptions) (core.Handshaker, error) { +func NewClientHandshaker(_ context.Context, conn *grpc.ClientConn, c net.Conn, opts *ClientHandshakerOptions) (core.Handshaker, error) { return &altsHandshaker{ stream: nil, conn: c, @@ -141,7 +141,7 @@ func NewClientHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, // NewServerHandshaker creates a core.Handshaker that performs a server-side // ALTS handshake by acting as a proxy between the peer and the ALTS handshaker // service in the metadata server. -func NewServerHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, opts *ServerHandshakerOptions) (core.Handshaker, error) { +func NewServerHandshaker(_ context.Context, conn *grpc.ClientConn, c net.Conn, opts *ServerHandshakerOptions) (core.Handshaker, error) { return &altsHandshaker{ stream: nil, conn: c, diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go index f478990dfb..b7de8f05b7 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.1 +// protoc-gen-go v1.34.2 // protoc v5.27.1 // source: grpc/gcp/altscontext.proto @@ -201,7 +201,7 @@ func file_grpc_gcp_altscontext_proto_rawDescGZIP() []byte { } var file_grpc_gcp_altscontext_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_grpc_gcp_altscontext_proto_goTypes = []interface{}{ +var file_grpc_gcp_altscontext_proto_goTypes = []any{ (*AltsContext)(nil), // 0: grpc.gcp.AltsContext nil, // 1: grpc.gcp.AltsContext.PeerAttributesEntry (SecurityLevel)(0), // 2: grpc.gcp.SecurityLevel @@ -225,7 +225,7 @@ func file_grpc_gcp_altscontext_proto_init() { } file_grpc_gcp_transport_security_common_proto_init() if !protoimpl.UnsafeEnabled { - file_grpc_gcp_altscontext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_altscontext_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AltsContext); i { case 0: return &v.state diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go index 377723f2f0..79b5dad476 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.1 +// protoc-gen-go v1.34.2 // protoc v5.27.1 // source: grpc/gcp/handshaker.proto @@ -1071,7 +1071,7 @@ var file_grpc_gcp_handshaker_proto_rawDesc = []byte{ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x22, 0xf6, 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x22, 0xfb, 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x1b, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, @@ -1108,139 +1108,140 @@ var file_grpc_gcp_handshaker_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x72, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x19, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa5, 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0x80, 0x01, + 0x01, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xaf, + 0x01, 0x0a, 0x19, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, + 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0x80, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0xa5, 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x15, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x73, 0x12, 0x6d, 0x0a, 0x14, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x33, 0x0a, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x6d, 0x0a, 0x14, 0x68, 0x61, 0x6e, 0x64, 0x73, - 0x68, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, - 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, - 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x13, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0d, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0f, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, - 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x72, 0x70, 0x63, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, - 0x72, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, - 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, + 0x65, 0x71, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x68, 0x61, 0x6e, + 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x72, 0x70, 0x63, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, + 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, + 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x6b, 0x0a, 0x18, 0x48, + 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x63, 0x70, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, + 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x62, 0x0a, 0x17, 0x4e, 0x65, 0x78, 0x74, + 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2c, + 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, + 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x22, 0xe5, 0x01, 0x0a, + 0x0d, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x46, + 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, + 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x37, + 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x61, 0x6e, 0x64, + 0x73, 0x68, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x9a, 0x03, 0x0a, 0x10, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, + 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x14, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x37, 0x0a, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x70, 0x65, 0x65, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x6b, 0x65, 0x65, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x6e, + 0x12, 0x49, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, + 0x52, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, + 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x1a, 0x6b, 0x0a, 0x18, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x62, - 0x0a, 0x17, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, - 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, - 0x4d, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x0d, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0c, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, - 0x6b, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x4e, 0x65, - 0x78, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, - 0x09, 0x72, 0x65, 0x71, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x9a, 0x03, 0x0a, 0x10, 0x48, - 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x31, 0x0a, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6b, - 0x65, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6b, - 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x6b, 0x65, - 0x65, 0x70, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6b, 0x65, 0x65, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x49, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, - 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x52, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x40, 0x0a, 0x10, 0x48, 0x61, 0x6e, 0x64, 0x73, - 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x0e, 0x48, 0x61, - 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, - 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, - 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, - 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x4a, 0x0a, 0x11, 0x48, 0x61, - 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, - 0x22, 0x0a, 0x1e, 0x48, 0x41, 0x4e, 0x44, 0x53, 0x48, 0x41, 0x4b, 0x45, 0x5f, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, - 0x41, 0x4c, 0x54, 0x53, 0x10, 0x02, 0x2a, 0x45, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x20, 0x0a, 0x1c, 0x4e, 0x45, 0x54, - 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x54, - 0x43, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x02, 0x32, 0x5b, 0x0a, - 0x11, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x44, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, - 0x65, 0x12, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, - 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x6b, 0x0a, 0x15, 0x69, 0x6f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x61, 0x6c, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x42, 0x0f, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, - 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x61, 0x6c, 0x74, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x5f, 0x67, 0x63, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x22, 0x40, 0x0a, 0x10, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x0e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, + 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x2a, 0x4a, 0x0a, 0x11, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x22, 0x0a, 0x1e, 0x48, 0x41, 0x4e, + 0x44, 0x53, 0x48, 0x41, 0x4b, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x54, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x4c, 0x54, 0x53, 0x10, 0x02, + 0x2a, 0x45, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x12, 0x20, 0x0a, 0x1c, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x01, 0x12, 0x07, + 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x02, 0x32, 0x5b, 0x0a, 0x11, 0x48, 0x61, 0x6e, 0x64, 0x73, + 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0b, + 0x44, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x12, 0x17, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, + 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x28, 0x01, 0x30, 0x01, 0x42, 0x6b, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x61, 0x6c, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x42, 0x0f, 0x48, + 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x3f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x61, 0x6c, 0x74, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x63, + 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1257,7 +1258,7 @@ func file_grpc_gcp_handshaker_proto_rawDescGZIP() []byte { var file_grpc_gcp_handshaker_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_grpc_gcp_handshaker_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_grpc_gcp_handshaker_proto_goTypes = []interface{}{ +var file_grpc_gcp_handshaker_proto_goTypes = []any{ (HandshakeProtocol)(0), // 0: grpc.gcp.HandshakeProtocol (NetworkProtocol)(0), // 1: grpc.gcp.NetworkProtocol (*Endpoint)(nil), // 2: grpc.gcp.Endpoint @@ -1313,7 +1314,7 @@ func file_grpc_gcp_handshaker_proto_init() { } file_grpc_gcp_transport_security_common_proto_init() if !protoimpl.UnsafeEnabled { - file_grpc_gcp_handshaker_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Endpoint); i { case 0: return &v.state @@ -1325,7 +1326,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Identity); i { case 0: return &v.state @@ -1337,7 +1338,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*StartClientHandshakeReq); i { case 0: return &v.state @@ -1349,7 +1350,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ServerHandshakeParameters); i { case 0: return &v.state @@ -1361,7 +1362,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*StartServerHandshakeReq); i { case 0: return &v.state @@ -1373,7 +1374,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*NextHandshakeMessageReq); i { case 0: return &v.state @@ -1385,7 +1386,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*HandshakerReq); i { case 0: return &v.state @@ -1397,7 +1398,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*HandshakerResult); i { case 0: return &v.state @@ -1409,7 +1410,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*HandshakerStatus); i { case 0: return &v.state @@ -1421,7 +1422,7 @@ func file_grpc_gcp_handshaker_proto_init() { return nil } } - file_grpc_gcp_handshaker_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_handshaker_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*HandshakerResp); i { case 0: return &v.state @@ -1434,12 +1435,12 @@ func file_grpc_gcp_handshaker_proto_init() { } } } - file_grpc_gcp_handshaker_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_grpc_gcp_handshaker_proto_msgTypes[1].OneofWrappers = []any{ (*Identity_ServiceAccount)(nil), (*Identity_Hostname)(nil), } - file_grpc_gcp_handshaker_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_grpc_gcp_handshaker_proto_msgTypes[6].OneofWrappers = []interface{}{ + file_grpc_gcp_handshaker_proto_msgTypes[3].OneofWrappers = []any{} + file_grpc_gcp_handshaker_proto_msgTypes[6].OneofWrappers = []any{ (*HandshakerReq_ClientStart)(nil), (*HandshakerReq_ServerStart)(nil), (*HandshakerReq_Next)(nil), diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go index 9f2ffc8ab8..6956c14f6a 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.1 +// protoc-gen-go v1.34.2 // protoc v5.27.1 // source: grpc/gcp/transport_security_common.proto @@ -253,7 +253,7 @@ func file_grpc_gcp_transport_security_common_proto_rawDescGZIP() []byte { var file_grpc_gcp_transport_security_common_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_grpc_gcp_transport_security_common_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_grpc_gcp_transport_security_common_proto_goTypes = []interface{}{ +var file_grpc_gcp_transport_security_common_proto_goTypes = []any{ (SecurityLevel)(0), // 0: grpc.gcp.SecurityLevel (*RpcProtocolVersions)(nil), // 1: grpc.gcp.RpcProtocolVersions (*RpcProtocolVersions_Version)(nil), // 2: grpc.gcp.RpcProtocolVersions.Version @@ -274,7 +274,7 @@ func file_grpc_gcp_transport_security_common_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_grpc_gcp_transport_security_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_transport_security_common_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*RpcProtocolVersions); i { case 0: return &v.state @@ -286,7 +286,7 @@ func file_grpc_gcp_transport_security_common_proto_init() { return nil } } - file_grpc_gcp_transport_security_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_grpc_gcp_transport_security_common_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*RpcProtocolVersions_Version); i { case 0: return &v.state diff --git a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go index 82bee1443b..4c805c6446 100644 --- a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go +++ b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go @@ -40,7 +40,7 @@ func NewCredentials() credentials.TransportCredentials { // NoSecurity. type insecureTC struct{} -func (insecureTC) ClientHandshake(ctx context.Context, _ string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) { +func (insecureTC) ClientHandshake(_ context.Context, _ string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) { return conn, info{credentials.CommonAuthInfo{SecurityLevel: credentials.NoSecurity}}, nil } diff --git a/vendor/google.golang.org/grpc/credentials/oauth/oauth.go b/vendor/google.golang.org/grpc/credentials/oauth/oauth.go index d475cbc089..328b838ed1 100644 --- a/vendor/google.golang.org/grpc/credentials/oauth/oauth.go +++ b/vendor/google.golang.org/grpc/credentials/oauth/oauth.go @@ -38,7 +38,7 @@ type TokenSource struct { } // GetRequestMetadata gets the request metadata as a map from a TokenSource. -func (ts TokenSource) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { +func (ts TokenSource) GetRequestMetadata(ctx context.Context, _ ...string) (map[string]string, error) { token, err := ts.Token() if err != nil { return nil, err @@ -127,7 +127,7 @@ func NewOauthAccess(token *oauth2.Token) credentials.PerRPCCredentials { return oauthAccess{token: *token} } -func (oa oauthAccess) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { +func (oa oauthAccess) GetRequestMetadata(ctx context.Context, _ ...string) (map[string]string, error) { ri, _ := credentials.RequestInfoFromContext(ctx) if err := credentials.CheckSecurityLevel(ri.AuthInfo, credentials.PrivacyAndIntegrity); err != nil { return nil, fmt.Errorf("unable to transfer oauthAccess PerRPCCredentials: %v", err) @@ -156,7 +156,7 @@ type serviceAccount struct { t *oauth2.Token } -func (s *serviceAccount) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { +func (s *serviceAccount) GetRequestMetadata(ctx context.Context, _ ...string) (map[string]string, error) { s.mu.Lock() defer s.mu.Unlock() if !s.t.Valid() { diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go index 27c1b9bb63..2b285beee3 100644 --- a/vendor/google.golang.org/grpc/dialoptions.go +++ b/vendor/google.golang.org/grpc/dialoptions.go @@ -518,6 +518,8 @@ func WithUserAgent(s string) DialOption { // WithKeepaliveParams returns a DialOption that specifies keepalive parameters // for the client transport. +// +// Keepalive is disabled by default. func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption { if kp.Time < internal.KeepaliveMinPingTime { logger.Warningf("Adjusting keepalive ping interval to minimum period of %v", internal.KeepaliveMinPingTime) diff --git a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go index 930140f57e..1d827dd5d9 100644 --- a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go +++ b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go @@ -20,7 +20,6 @@ package stats import ( "maps" - "testing" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/internal" @@ -250,9 +249,9 @@ func RegisterInt64Gauge(descriptor MetricDescriptor) *Int64GaugeHandle { } // snapshotMetricsRegistryForTesting snapshots the global data of the metrics -// registry. Registers a cleanup function on the provided testing.T that sets -// the metrics registry to its original state. Only called in testing functions. -func snapshotMetricsRegistryForTesting(t *testing.T) { +// registry. Returns a cleanup function that sets the metrics registry to its +// original state. +func snapshotMetricsRegistryForTesting() func() { oldDefaultMetrics := DefaultMetrics oldRegisteredMetrics := registeredMetrics oldMetricsRegistry := metricsRegistry @@ -262,9 +261,9 @@ func snapshotMetricsRegistryForTesting(t *testing.T) { maps.Copy(registeredMetrics, registeredMetrics) maps.Copy(metricsRegistry, metricsRegistry) - t.Cleanup(func() { + return func() { DefaultMetrics = oldDefaultMetrics registeredMetrics = oldRegisteredMetrics metricsRegistry = oldMetricsRegistry - }) + } } diff --git a/vendor/google.golang.org/grpc/grpclog/internal/logger.go b/vendor/google.golang.org/grpc/grpclog/internal/logger.go index 0d9a824ce1..e524fdd40b 100644 --- a/vendor/google.golang.org/grpc/grpclog/internal/logger.go +++ b/vendor/google.golang.org/grpc/grpclog/internal/logger.go @@ -81,7 +81,7 @@ func (l *LoggerWrapper) Errorf(format string, args ...any) { } // V reports whether verbosity level l is at least the requested verbose level. -func (*LoggerWrapper) V(l int) bool { +func (*LoggerWrapper) V(int) bool { // Returns true for all verbose level. return true } diff --git a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go index aa4505a871..9669328914 100644 --- a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go +++ b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go @@ -106,7 +106,7 @@ func (ml *TruncatingMethodLogger) Build(c LogEntryConfig) *binlogpb.GrpcLogEntry } // Log creates a proto binary log entry, and logs it to the sink. -func (ml *TruncatingMethodLogger) Log(ctx context.Context, c LogEntryConfig) { +func (ml *TruncatingMethodLogger) Log(_ context.Context, c LogEntryConfig) { ml.sink.Write(ml.Build(c)) } diff --git a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go index bb531225d5..64c791953d 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go +++ b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go @@ -234,13 +234,6 @@ func copyMap(m map[int64]string) map[int64]string { return n } -func min(a, b int) int { - if a < b { - return a - } - return b -} - func (c *channelMap) getTopChannels(id int64, maxResults int) ([]*Channel, bool) { if maxResults <= 0 { maxResults = EntriesPerPage diff --git a/vendor/google.golang.org/grpc/internal/channelz/funcs.go b/vendor/google.golang.org/grpc/internal/channelz/funcs.go index 03e24e1507..078bb81238 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/funcs.go +++ b/vendor/google.golang.org/grpc/internal/channelz/funcs.go @@ -33,7 +33,7 @@ var ( // outside this package except by tests. IDGen IDGenerator - db *channelMap = newChannelMap() + db = newChannelMap() // EntriesPerPage defines the number of channelz entries to be shown on a web page. EntriesPerPage = 50 curState int32 diff --git a/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go index d1ed8df6a5..0e6e18e185 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go +++ b/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go @@ -35,13 +35,13 @@ type SocketOptionData struct { // Getsockopt defines the function to get socket options requested by channelz. // It is to be passed to syscall.RawConn.Control(). // Windows OS doesn't support Socket Option -func (s *SocketOptionData) Getsockopt(fd uintptr) { +func (s *SocketOptionData) Getsockopt(uintptr) { once.Do(func() { logger.Warning("Channelz: socket options are not supported on non-linux environments") }) } // GetSocketOption gets the socket option info of the conn. -func GetSocketOption(c any) *SocketOptionData { +func GetSocketOption(any) *SocketOptionData { return nil } diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go index 00abc7c2be..452985f8d8 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go @@ -45,7 +45,7 @@ var ( // option is present for backward compatibility. This option may be overridden // by setting the environment variable "GRPC_ENFORCE_ALPN_ENABLED" to "true" // or "false". - EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", false) + EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", true) // XDSFallbackSupport is the env variable that controls whether support for // xDS fallback is turned on. If this is unset or is false, only the first // xDS server in the list of server configs will be used. diff --git a/vendor/google.golang.org/grpc/internal/googlecloud/googlecloud.go b/vendor/google.golang.org/grpc/internal/googlecloud/googlecloud.go index 6717b757f8..43423d8ad9 100644 --- a/vendor/google.golang.org/grpc/internal/googlecloud/googlecloud.go +++ b/vendor/google.golang.org/grpc/internal/googlecloud/googlecloud.go @@ -62,9 +62,9 @@ func isRunningOnGCE(manufacturer []byte, goos string) bool { name = strings.TrimSpace(name) return name == "Google" || name == "Google Compute Engine" case "windows": - name = strings.Replace(name, " ", "", -1) - name = strings.Replace(name, "\n", "", -1) - name = strings.Replace(name, "\r", "", -1) + name = strings.ReplaceAll(name, " ", "") + name = strings.ReplaceAll(name, "\n", "") + name = strings.ReplaceAll(name, "\r", "") return name == "Google" default: return false diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go index 65f936a623..7aae9240ff 100644 --- a/vendor/google.golang.org/grpc/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -183,7 +183,7 @@ var ( // GRPCResolverSchemeExtraMetadata determines when gRPC will add extra // metadata to RPCs. - GRPCResolverSchemeExtraMetadata string = "xds" + GRPCResolverSchemeExtraMetadata = "xds" // EnterIdleModeForTesting gets the ClientConn to enter IDLE mode. EnterIdleModeForTesting any // func(*grpc.ClientConn) @@ -203,7 +203,7 @@ var ( // UserSetDefaultScheme is set to true if the user has overridden the // default resolver scheme. - UserSetDefaultScheme bool = false + UserSetDefaultScheme = false // ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n // is the number of elements. swap swaps the elements with indexes i and j. @@ -217,10 +217,9 @@ var ( SetConnectedAddress any // func(scs *SubConnState, addr resolver.Address) // SnapshotMetricRegistryForTesting snapshots the global data of the metric - // registry. Registers a cleanup function on the provided testing.T that - // sets the metric registry to its original state. Only called in testing - // functions. - SnapshotMetricRegistryForTesting any // func(t *testing.T) + // registry. Returns a cleanup function that sets the metric registry to its + // original state. Only called in testing functions. + SnapshotMetricRegistryForTesting func() func() // SetDefaultBufferPoolForTesting updates the default buffer pool, for // testing purposes. diff --git a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go index afac56572a..b901c7bace 100644 --- a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go +++ b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go @@ -55,7 +55,7 @@ func (r *passthroughResolver) start() { r.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint()}}}) } -func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOptions) {} +func (*passthroughResolver) ResolveNow(resolver.ResolveNowOptions) {} func (*passthroughResolver) Close() {} diff --git a/vendor/google.golang.org/grpc/internal/status/status.go b/vendor/google.golang.org/grpc/internal/status/status.go index c7dbc82059..757925381f 100644 --- a/vendor/google.golang.org/grpc/internal/status/status.go +++ b/vendor/google.golang.org/grpc/internal/status/status.go @@ -138,11 +138,11 @@ func (s *Status) WithDetails(details ...protoadapt.MessageV1) (*Status, error) { // s.Code() != OK implies that s.Proto() != nil. p := s.Proto() for _, detail := range details { - any, err := anypb.New(protoadapt.MessageV2Of(detail)) + m, err := anypb.New(protoadapt.MessageV2Of(detail)) if err != nil { return nil, err } - p.Details = append(p.Details, any) + p.Details = append(p.Details, m) } return &Status{s: p}, nil } diff --git a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go index 999f52cd75..54c24c2ff3 100644 --- a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go +++ b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go @@ -58,20 +58,20 @@ func GetRusage() *Rusage { // CPUTimeDiff returns the differences of user CPU time and system CPU time used // between two Rusage structs. It a no-op function for non-linux environments. -func CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) { +func CPUTimeDiff(*Rusage, *Rusage) (float64, float64) { log() return 0, 0 } // SetTCPUserTimeout is a no-op function under non-linux environments. -func SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error { +func SetTCPUserTimeout(net.Conn, time.Duration) error { log() return nil } // GetTCPUserTimeout is a no-op function under non-linux environments. // A negative return value indicates the operation is not supported -func GetTCPUserTimeout(conn net.Conn) (int, error) { +func GetTCPUserTimeout(net.Conn) (int, error) { log() return -1, nil } diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go index ea0633bbda..ef72fbb3a0 100644 --- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go +++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go @@ -1033,10 +1033,3 @@ func (l *loopyWriter) processData() (bool, error) { } return false, nil } - -func min(a, b int) int { - if a < b { - return a - } - return b -} diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go index e1cd86b2fc..ce878693bd 100644 --- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go @@ -333,7 +333,7 @@ func (ht *serverHandlerTransport) writeCustomHeaders(s *Stream) { s.hdrMu.Unlock() } -func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error { +func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data mem.BufferSlice, _ *Options) error { // Always take a reference because otherwise there is no guarantee the data will // be available after this function returns. This is what callers to Write // expect. @@ -475,7 +475,7 @@ func (ht *serverHandlerTransport) IncrMsgSent() {} func (ht *serverHandlerTransport) IncrMsgRecv() {} -func (ht *serverHandlerTransport) Drain(debugData string) { +func (ht *serverHandlerTransport) Drain(string) { panic("Drain() is not implemented") } diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go index f46194fdc6..c769deab53 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go @@ -772,7 +772,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, hdr := &headerFrame{ hf: headerFields, endStream: false, - initStream: func(id uint32) error { + initStream: func(uint32) error { t.mu.Lock() // TODO: handle transport closure in loopy instead and remove this // initStream is never called when transport is draining. @@ -1667,11 +1667,10 @@ func (t *http2Client) reader(errCh chan<- error) { t.closeStream(s, status.Error(code, msg), true, http2.ErrCodeProtocol, status.New(code, msg), nil, false) } continue - } else { - // Transport error. - t.Close(connectionErrorf(true, err, "error reading from server: %v", err)) - return } + // Transport error. + t.Close(connectionErrorf(true, err, "error reading from server: %v", err)) + return } switch frame := frame.(type) { case *http2.MetaHeadersFrame: @@ -1696,13 +1695,6 @@ func (t *http2Client) reader(errCh chan<- error) { } } -func minTime(a, b time.Duration) time.Duration { - if a < b { - return a - } - return b -} - // keepalive running in a separate goroutine makes sure the connection is alive by sending pings. func (t *http2Client) keepalive() { p := &ping{data: [8]byte{}} @@ -1770,7 +1762,7 @@ func (t *http2Client) keepalive() { // timeoutLeft. This will ensure that we wait only for kp.Time // before sending out the next ping (for cases where the ping is // acked). - sleepDuration := minTime(t.kp.Time, timeoutLeft) + sleepDuration := min(t.kp.Time, timeoutLeft) timeoutLeft -= sleepDuration timer.Reset(sleepDuration) case <-t.ctx.Done(): diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index f5163f770c..584b50fe55 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -1117,7 +1117,7 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { // Write converts the data into HTTP2 data frame and sends it out. Non-nil error // is returns if it fails (e.g., framing error, transport error). -func (t *http2Server) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error { +func (t *http2Server) Write(s *Stream, hdr []byte, data mem.BufferSlice, _ *Options) error { reader := data.Reader() if !s.isHeaderSent() { // Headers haven't been written yet. @@ -1238,7 +1238,7 @@ func (t *http2Server) keepalive() { // timeoutLeft. This will ensure that we wait only for kp.Time // before sending out the next ping (for cases where the ping is // acked). - sleepDuration := minTime(t.kp.Time, kpTimeoutLeft) + sleepDuration := min(t.kp.Time, kpTimeoutLeft) kpTimeoutLeft -= sleepDuration kpTimer.Reset(sleepDuration) case <-t.done: diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go index f609c6c665..3613d7b648 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http_util.go +++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go @@ -393,7 +393,7 @@ type framer struct { fr *http2.Framer } -var writeBufferPoolMap map[int]*sync.Pool = make(map[int]*sync.Pool) +var writeBufferPoolMap = make(map[int]*sync.Pool) var writeBufferMutex sync.Mutex func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32) *framer { diff --git a/vendor/google.golang.org/grpc/keepalive/keepalive.go b/vendor/google.golang.org/grpc/keepalive/keepalive.go index 34d31b5e7d..eb42b19fb9 100644 --- a/vendor/google.golang.org/grpc/keepalive/keepalive.go +++ b/vendor/google.golang.org/grpc/keepalive/keepalive.go @@ -34,15 +34,29 @@ type ClientParameters struct { // After a duration of this time if the client doesn't see any activity it // pings the server to see if the transport is still alive. // If set below 10s, a minimum value of 10s will be used instead. - Time time.Duration // The current default value is infinity. + // + // Note that gRPC servers have a default EnforcementPolicy.MinTime of 5 + // minutes (which means the client shouldn't ping more frequently than every + // 5 minutes). + // + // Though not ideal, it's not a strong requirement for Time to be less than + // EnforcementPolicy.MinTime. Time will automatically double if the server + // disconnects due to its enforcement policy. + // + // For more details, see + // https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md + Time time.Duration // After having pinged for keepalive check, the client waits for a duration // of Timeout and if no activity is seen even after that the connection is // closed. - Timeout time.Duration // The current default value is 20 seconds. + // + // If keepalive is enabled, and this value is not explicitly set, the default + // is 20 seconds. + Timeout time.Duration // If true, client sends keepalive pings even with no active RPCs. If false, // when there are no active RPCs, Time and Timeout will be ignored and no // keepalive pings will be sent. - PermitWithoutStream bool // false by default. + PermitWithoutStream bool } // ServerParameters is used to set keepalive and max-age parameters on the diff --git a/vendor/google.golang.org/grpc/mem/buffer_slice.go b/vendor/google.golang.org/grpc/mem/buffer_slice.go index d7775cea62..228e9c2f20 100644 --- a/vendor/google.golang.org/grpc/mem/buffer_slice.go +++ b/vendor/google.golang.org/grpc/mem/buffer_slice.go @@ -19,7 +19,6 @@ package mem import ( - "compress/flate" "io" ) @@ -92,9 +91,11 @@ func (s BufferSlice) Materialize() []byte { } // MaterializeToBuffer functions like Materialize except that it writes the data -// to a single Buffer pulled from the given BufferPool. As a special case, if the -// input BufferSlice only actually has one Buffer, this function has nothing to -// do and simply returns said Buffer. +// to a single Buffer pulled from the given BufferPool. +// +// As a special case, if the input BufferSlice only actually has one Buffer, this +// function simply increases the refcount before returning said Buffer. Freeing this +// buffer won't release it until the BufferSlice is itself released. func (s BufferSlice) MaterializeToBuffer(pool BufferPool) Buffer { if len(s) == 1 { s[0].Ref() @@ -124,7 +125,8 @@ func (s BufferSlice) Reader() Reader { // Remaining(), which returns the number of unread bytes remaining in the slice. // Buffers will be freed as they are read. type Reader interface { - flate.Reader + io.Reader + io.ByteReader // Close frees the underlying BufferSlice and never returns an error. Subsequent // calls to Read will return (0, io.EOF). Close() error diff --git a/vendor/google.golang.org/grpc/mem/buffers.go b/vendor/google.golang.org/grpc/mem/buffers.go index 975ceb7185..4d66b2ccc2 100644 --- a/vendor/google.golang.org/grpc/mem/buffers.go +++ b/vendor/google.golang.org/grpc/mem/buffers.go @@ -224,11 +224,11 @@ func (e emptyBuffer) Len() int { return 0 } -func (e emptyBuffer) split(n int) (left, right Buffer) { +func (e emptyBuffer) split(int) (left, right Buffer) { return e, e } -func (e emptyBuffer) read(buf []byte) (int, Buffer) { +func (e emptyBuffer) read([]byte) (int, Buffer) { return 0, e } diff --git a/vendor/google.golang.org/grpc/resolver/manual/manual.go b/vendor/google.golang.org/grpc/resolver/manual/manual.go index f2efa2a2cb..09e864a89d 100644 --- a/vendor/google.golang.org/grpc/resolver/manual/manual.go +++ b/vendor/google.golang.org/grpc/resolver/manual/manual.go @@ -76,9 +76,11 @@ func (r *Resolver) InitialState(s resolver.State) { // Build returns itself for Resolver, because it's both a builder and a resolver. func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { - r.BuildCallback(target, cc, opts) r.mu.Lock() defer r.mu.Unlock() + // Call BuildCallback after locking to avoid a race when UpdateState + // or ReportError is called before Build returns. + r.BuildCallback(target, cc, opts) r.CC = cc if r.lastSeenState != nil { err := r.CC.UpdateState(*r.lastSeenState) diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index db8865ec3f..2d96f1405e 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -220,8 +220,8 @@ type HeaderCallOption struct { HeaderAddr *metadata.MD } -func (o HeaderCallOption) before(c *callInfo) error { return nil } -func (o HeaderCallOption) after(c *callInfo, attempt *csAttempt) { +func (o HeaderCallOption) before(*callInfo) error { return nil } +func (o HeaderCallOption) after(_ *callInfo, attempt *csAttempt) { *o.HeaderAddr, _ = attempt.s.Header() } @@ -242,8 +242,8 @@ type TrailerCallOption struct { TrailerAddr *metadata.MD } -func (o TrailerCallOption) before(c *callInfo) error { return nil } -func (o TrailerCallOption) after(c *callInfo, attempt *csAttempt) { +func (o TrailerCallOption) before(*callInfo) error { return nil } +func (o TrailerCallOption) after(_ *callInfo, attempt *csAttempt) { *o.TrailerAddr = attempt.s.Trailer() } @@ -264,8 +264,8 @@ type PeerCallOption struct { PeerAddr *peer.Peer } -func (o PeerCallOption) before(c *callInfo) error { return nil } -func (o PeerCallOption) after(c *callInfo, attempt *csAttempt) { +func (o PeerCallOption) before(*callInfo) error { return nil } +func (o PeerCallOption) after(_ *callInfo, attempt *csAttempt) { if x, ok := peer.FromContext(attempt.s.Context()); ok { *o.PeerAddr = *x } @@ -304,7 +304,7 @@ func (o FailFastCallOption) before(c *callInfo) error { c.failFast = o.FailFast return nil } -func (o FailFastCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o FailFastCallOption) after(*callInfo, *csAttempt) {} // OnFinish returns a CallOption that configures a callback to be called when // the call completes. The error passed to the callback is the status of the @@ -339,7 +339,7 @@ func (o OnFinishCallOption) before(c *callInfo) error { return nil } -func (o OnFinishCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o OnFinishCallOption) after(*callInfo, *csAttempt) {} // MaxCallRecvMsgSize returns a CallOption which sets the maximum message size // in bytes the client can receive. If this is not set, gRPC uses the default @@ -363,7 +363,7 @@ func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error { c.maxReceiveMessageSize = &o.MaxRecvMsgSize return nil } -func (o MaxRecvMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o MaxRecvMsgSizeCallOption) after(*callInfo, *csAttempt) {} // MaxCallSendMsgSize returns a CallOption which sets the maximum message size // in bytes the client can send. If this is not set, gRPC uses the default @@ -387,7 +387,7 @@ func (o MaxSendMsgSizeCallOption) before(c *callInfo) error { c.maxSendMessageSize = &o.MaxSendMsgSize return nil } -func (o MaxSendMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o MaxSendMsgSizeCallOption) after(*callInfo, *csAttempt) {} // PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials // for a call. @@ -410,7 +410,7 @@ func (o PerRPCCredsCallOption) before(c *callInfo) error { c.creds = o.Creds return nil } -func (o PerRPCCredsCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o PerRPCCredsCallOption) after(*callInfo, *csAttempt) {} // UseCompressor returns a CallOption which sets the compressor used when // sending the request. If WithCompressor is also set, UseCompressor has @@ -438,7 +438,7 @@ func (o CompressorCallOption) before(c *callInfo) error { c.compressorType = o.CompressorType return nil } -func (o CompressorCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o CompressorCallOption) after(*callInfo, *csAttempt) {} // CallContentSubtype returns a CallOption that will set the content-subtype // for a call. For example, if content-subtype is "json", the Content-Type over @@ -475,7 +475,7 @@ func (o ContentSubtypeCallOption) before(c *callInfo) error { c.contentSubtype = o.ContentSubtype return nil } -func (o ContentSubtypeCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o ContentSubtypeCallOption) after(*callInfo, *csAttempt) {} // ForceCodec returns a CallOption that will set codec to be used for all // request and response messages for a call. The result of calling Name() will @@ -514,7 +514,7 @@ func (o ForceCodecCallOption) before(c *callInfo) error { c.codec = newCodecV1Bridge(o.Codec) return nil } -func (o ForceCodecCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o ForceCodecCallOption) after(*callInfo, *csAttempt) {} // ForceCodecV2 returns a CallOption that will set codec to be used for all // request and response messages for a call. The result of calling Name() will @@ -554,7 +554,7 @@ func (o ForceCodecV2CallOption) before(c *callInfo) error { return nil } -func (o ForceCodecV2CallOption) after(c *callInfo, attempt *csAttempt) {} +func (o ForceCodecV2CallOption) after(*callInfo, *csAttempt) {} // CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of // an encoding.Codec. @@ -579,7 +579,7 @@ func (o CustomCodecCallOption) before(c *callInfo) error { c.codec = newCodecV0Bridge(o.Codec) return nil } -func (o CustomCodecCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o CustomCodecCallOption) after(*callInfo, *csAttempt) {} // MaxRetryRPCBufferSize returns a CallOption that limits the amount of memory // used for buffering this RPC's requests for retry purposes. @@ -607,7 +607,7 @@ func (o MaxRetryRPCBufferSizeCallOption) before(c *callInfo) error { c.maxRetryRPCBufferSize = o.MaxRetryRPCBufferSize return nil } -func (o MaxRetryRPCBufferSizeCallOption) after(c *callInfo, attempt *csAttempt) {} +func (o MaxRetryRPCBufferSizeCallOption) after(*callInfo, *csAttempt) {} // The format of the payload: compressed or not? type payloadFormat uint8 diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index 457d27338f..d1e1415a40 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -1359,6 +1359,7 @@ func (s *Server) processUnaryRPC(ctx context.Context, t transport.ServerTranspor } return err } + defer d.Free() if channelz.IsOn() { t.IncrMsgRecv() } diff --git a/vendor/google.golang.org/grpc/stream_interfaces.go b/vendor/google.golang.org/grpc/stream_interfaces.go index 8b813529c0..0037fee0bd 100644 --- a/vendor/google.golang.org/grpc/stream_interfaces.go +++ b/vendor/google.golang.org/grpc/stream_interfaces.go @@ -22,15 +22,35 @@ package grpc // request, many responses) RPC. It is generic over the type of the response // message. It is used in generated code. type ServerStreamingClient[Res any] interface { + // Recv receives the next response message from the server. The client may + // repeatedly call Recv to read messages from the response stream. If + // io.EOF is returned, the stream has terminated with an OK status. Any + // other error is compatible with the status package and indicates the + // RPC's status code and message. Recv() (*Res, error) + + // ClientStream is embedded to provide Context, Header, and Trailer + // functionality. No other methods in the ClientStream should be called + // directly. ClientStream } // ServerStreamingServer represents the server side of a server-streaming (one // request, many responses) RPC. It is generic over the type of the response // message. It is used in generated code. +// +// To terminate the response stream, return from the handler method and return +// an error from the status package, or use nil to indicate an OK status code. type ServerStreamingServer[Res any] interface { + // Send sends a response message to the client. The server handler may + // call Send multiple times to send multiple messages to the client. An + // error is returned if the stream was terminated unexpectedly, and the + // handler method should return, as the stream is no longer usable. Send(*Res) error + + // ServerStream is embedded to provide Context, SetHeader, SendHeader, and + // SetTrailer functionality. No other methods in the ServerStream should + // be called directly. ServerStream } @@ -39,8 +59,22 @@ type ServerStreamingServer[Res any] interface { // message stream and the type of the unary response message. It is used in // generated code. type ClientStreamingClient[Req any, Res any] interface { + // Send sends a request message to the server. The client may call Send + // multiple times to send multiple messages to the server. On error, Send + // aborts the stream. If the error was generated by the client, the status + // is returned directly. Otherwise, io.EOF is returned, and the status of + // the stream may be discovered using CloseAndRecv(). Send(*Req) error + + // CloseAndRecv closes the request stream and waits for the server's + // response. This method must be called once and only once after sending + // all request messages. Any error returned is implemented by the status + // package. CloseAndRecv() (*Res, error) + + // ClientStream is embedded to provide Context, Header, and Trailer + // functionality. No other methods in the ClientStream should be called + // directly. ClientStream } @@ -48,9 +82,28 @@ type ClientStreamingClient[Req any, Res any] interface { // requests, one response) RPC. It is generic over both the type of the request // message stream and the type of the unary response message. It is used in // generated code. +// +// To terminate the RPC, call SendAndClose and return nil from the method +// handler or do not call SendAndClose and return an error from the status +// package. type ClientStreamingServer[Req any, Res any] interface { + // Recv receives the next request message from the client. The server may + // repeatedly call Recv to read messages from the request stream. If + // io.EOF is returned, it indicates the client called CloseAndRecv on its + // ClientStreamingClient. Any other error indicates the stream was + // terminated unexpectedly, and the handler method should return, as the + // stream is no longer usable. Recv() (*Req, error) + + // SendAndClose sends a single response message to the client and closes + // the stream. This method must be called once and only once after all + // request messages have been processed. Recv should not be called after + // calling SendAndClose. SendAndClose(*Res) error + + // ServerStream is embedded to provide Context, SetHeader, SendHeader, and + // SetTrailer functionality. No other methods in the ServerStream should + // be called directly. ServerStream } @@ -59,8 +112,23 @@ type ClientStreamingServer[Req any, Res any] interface { // request message stream and the type of the response message stream. It is // used in generated code. type BidiStreamingClient[Req any, Res any] interface { + // Send sends a request message to the server. The client may call Send + // multiple times to send multiple messages to the server. On error, Send + // aborts the stream. If the error was generated by the client, the status + // is returned directly. Otherwise, io.EOF is returned, and the status of + // the stream may be discovered using Recv(). Send(*Req) error + + // Recv receives the next response message from the server. The client may + // repeatedly call Recv to read messages from the response stream. If + // io.EOF is returned, the stream has terminated with an OK status. Any + // other error is compatible with the status package and indicates the + // RPC's status code and message. Recv() (*Res, error) + + // ClientStream is embedded to provide Context, Header, Trailer, and + // CloseSend functionality. No other methods in the ClientStream should be + // called directly. ClientStream } @@ -68,9 +136,27 @@ type BidiStreamingClient[Req any, Res any] interface { // (many requests, many responses) RPC. It is generic over both the type of the // request message stream and the type of the response message stream. It is // used in generated code. +// +// To terminate the stream, return from the handler method and return +// an error from the status package, or use nil to indicate an OK status code. type BidiStreamingServer[Req any, Res any] interface { + // Recv receives the next request message from the client. The server may + // repeatedly call Recv to read messages from the request stream. If + // io.EOF is returned, it indicates the client called CloseSend on its + // BidiStreamingClient. Any other error indicates the stream was + // terminated unexpectedly, and the handler method should return, as the + // stream is no longer usable. Recv() (*Req, error) + + // Send sends a response message to the client. The server handler may + // call Send multiple times to send multiple messages to the client. An + // error is returned if the stream was terminated unexpectedly, and the + // handler method should return, as the stream is no longer usable. Send(*Res) error + + // ServerStream is embedded to provide Context, SetHeader, SendHeader, and + // SetTrailer functionality. No other methods in the ServerStream should + // be called directly. ServerStream } diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index 1ffec6e2ce..187fbf1195 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.66.0" +const Version = "1.67.0" diff --git a/vendor/modules.txt b/vendor/modules.txt index c0b366f6fa..6f89dc2949 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -4,7 +4,7 @@ cloud.google.com/go/internal cloud.google.com/go/internal/optional cloud.google.com/go/internal/trace cloud.google.com/go/internal/version -# cloud.google.com/go/auth v0.9.3 +# cloud.google.com/go/auth v0.9.5 ## explicit; go 1.21 cloud.google.com/go/auth cloud.google.com/go/auth/credentials @@ -16,6 +16,7 @@ cloud.google.com/go/auth/credentials/internal/stsexchange cloud.google.com/go/auth/grpctransport cloud.google.com/go/auth/httptransport cloud.google.com/go/auth/internal +cloud.google.com/go/auth/internal/compute cloud.google.com/go/auth/internal/credsfile cloud.google.com/go/auth/internal/jwt cloud.google.com/go/auth/internal/transport @@ -23,10 +24,10 @@ cloud.google.com/go/auth/internal/transport/cert # cloud.google.com/go/auth/oauth2adapt v0.2.4 ## explicit; go 1.20 cloud.google.com/go/auth/oauth2adapt -# cloud.google.com/go/compute/metadata v0.5.0 -## explicit; go 1.20 +# cloud.google.com/go/compute/metadata v0.5.2 +## explicit; go 1.21 cloud.google.com/go/compute/metadata -# cloud.google.com/go/iam v1.2.0 +# cloud.google.com/go/iam v1.2.1 ## explicit; go 1.21 cloud.google.com/go/iam cloud.google.com/go/iam/apiv1/iampb @@ -71,7 +72,7 @@ github.com/Azure/azure-sdk-for-go/sdk/internal/log github.com/Azure/azure-sdk-for-go/sdk/internal/poller github.com/Azure/azure-sdk-for-go/sdk/internal/temporal github.com/Azure/azure-sdk-for-go/sdk/internal/uuid -# github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.0 +# github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.1 ## explicit; go 1.18 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/appendblob @@ -172,7 +173,7 @@ github.com/aws/aws-sdk-go/service/sso/ssoiface github.com/aws/aws-sdk-go/service/ssooidc github.com/aws/aws-sdk-go/service/sts github.com/aws/aws-sdk-go/service/sts/stsiface -# github.com/aws/aws-sdk-go-v2 v1.30.5 +# github.com/aws/aws-sdk-go-v2 v1.31.0 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/aws github.com/aws/aws-sdk-go-v2/aws/arn @@ -201,14 +202,14 @@ github.com/aws/aws-sdk-go-v2/internal/shareddefaults github.com/aws/aws-sdk-go-v2/internal/strings github.com/aws/aws-sdk-go-v2/internal/sync/singleflight github.com/aws/aws-sdk-go-v2/internal/timeconv -# github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 +# github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.5 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi -# github.com/aws/aws-sdk-go-v2/config v1.27.33 +# github.com/aws/aws-sdk-go-v2/config v1.27.38 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/config -# github.com/aws/aws-sdk-go-v2/credentials v1.17.32 +# github.com/aws/aws-sdk-go-v2/credentials v1.17.36 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/credentials github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds @@ -217,64 +218,64 @@ github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client github.com/aws/aws-sdk-go-v2/credentials/processcreds github.com/aws/aws-sdk-go-v2/credentials/ssocreds github.com/aws/aws-sdk-go-v2/credentials/stscreds -# github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 +# github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.14 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/feature/ec2/imds github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config -# github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.18 +# github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.24 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/feature/s3/manager -# github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 +# github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.18 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/configsources -# github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 +# github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.18 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 # github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/ini -# github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 +# github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.18 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/internal/v4a github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4 -# github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 +# github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.5 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding -# github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 +# github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.20 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/checksum -# github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 +# github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.20 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url -# github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 +# github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.18 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/internal/s3shared github.com/aws/aws-sdk-go-v2/service/internal/s3shared/arn github.com/aws/aws-sdk-go-v2/service/internal/s3shared/config -# github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2 +# github.com/aws/aws-sdk-go-v2/service/s3 v1.63.2 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/s3 github.com/aws/aws-sdk-go-v2/service/s3/internal/arn github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints github.com/aws/aws-sdk-go-v2/service/s3/types -# github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 +# github.com/aws/aws-sdk-go-v2/service/sso v1.23.2 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/sso github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints github.com/aws/aws-sdk-go-v2/service/sso/types -# github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 +# github.com/aws/aws-sdk-go-v2/service/ssooidc v1.27.2 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/ssooidc github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints github.com/aws/aws-sdk-go-v2/service/ssooidc/types -# github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 +# github.com/aws/aws-sdk-go-v2/service/sts v1.31.2 ## explicit; go 1.21 github.com/aws/aws-sdk-go-v2/service/sts github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints github.com/aws/aws-sdk-go-v2/service/sts/types -# github.com/aws/smithy-go v1.20.4 +# github.com/aws/smithy-go v1.21.0 ## explicit; go 1.21 github.com/aws/smithy-go github.com/aws/smithy-go/auth @@ -292,12 +293,14 @@ github.com/aws/smithy-go/endpoints/private/rulesfn github.com/aws/smithy-go/internal/sync/singleflight github.com/aws/smithy-go/io github.com/aws/smithy-go/logging +github.com/aws/smithy-go/metrics github.com/aws/smithy-go/middleware github.com/aws/smithy-go/private/requestcompression github.com/aws/smithy-go/ptr github.com/aws/smithy-go/rand github.com/aws/smithy-go/sync github.com/aws/smithy-go/time +github.com/aws/smithy-go/tracing github.com/aws/smithy-go/transport/http github.com/aws/smithy-go/transport/http/internal/io github.com/aws/smithy-go/waiter @@ -317,7 +320,7 @@ github.com/cespare/xxhash/v2 ## explicit; go 1.17 github.com/cheggaaa/pb/v3 github.com/cheggaaa/pb/v3/termutil -# github.com/cpuguy83/go-md2man/v2 v2.0.4 +# github.com/cpuguy83/go-md2man/v2 v2.0.5 ## explicit; go 1.11 github.com/cpuguy83/go-md2man/v2/md2man # github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc @@ -396,7 +399,7 @@ github.com/google/s2a-go/stream # github.com/google/uuid v1.6.0 ## explicit github.com/google/uuid -# github.com/googleapis/enterprise-certificate-proxy v0.3.3 +# github.com/googleapis/enterprise-certificate-proxy v0.3.4 ## explicit; go 1.19 github.com/googleapis/enterprise-certificate-proxy/client github.com/googleapis/enterprise-certificate-proxy/client/util @@ -425,8 +428,8 @@ github.com/jpillora/backoff # github.com/json-iterator/go v1.1.12 ## explicit; go 1.12 github.com/json-iterator/go -# github.com/klauspost/compress v1.17.9 -## explicit; go 1.20 +# github.com/klauspost/compress v1.17.10 +## explicit; go 1.21 github.com/klauspost/compress github.com/klauspost/compress/flate github.com/klauspost/compress/fse @@ -476,7 +479,7 @@ github.com/pkg/browser # github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 ## explicit github.com/pmezard/go-difflib/difflib -# github.com/prometheus/client_golang v1.20.3 +# github.com/prometheus/client_golang v1.20.4 ## explicit; go 1.20 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/internal @@ -600,7 +603,7 @@ go.opencensus.io/trace go.opencensus.io/trace/internal go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate -# go.opentelemetry.io/collector/pdata v1.14.1 +# go.opentelemetry.io/collector/pdata v1.16.0 ## explicit; go 1.22.0 go.opentelemetry.io/collector/pdata/internal go.opentelemetry.io/collector/pdata/internal/data @@ -619,21 +622,21 @@ go.opentelemetry.io/collector/pdata/internal/otlp go.opentelemetry.io/collector/pdata/pcommon go.opentelemetry.io/collector/pdata/pmetric go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp -# go.opentelemetry.io/collector/semconv v0.108.1 +# go.opentelemetry.io/collector/semconv v0.110.0 ## explicit; go 1.22.0 go.opentelemetry.io/collector/semconv/v1.6.1 -# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 -## explicit; go 1.21 +# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 +## explicit; go 1.22 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal -# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 -## explicit; go 1.21 +# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 +## explicit; go 1.22 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil -# go.opentelemetry.io/otel v1.29.0 -## explicit; go 1.21 +# go.opentelemetry.io/otel v1.30.0 +## explicit; go 1.22 go.opentelemetry.io/otel go.opentelemetry.io/otel/attribute go.opentelemetry.io/otel/baggage @@ -647,13 +650,13 @@ go.opentelemetry.io/otel/semconv/v1.17.0 go.opentelemetry.io/otel/semconv/v1.20.0 go.opentelemetry.io/otel/semconv/v1.21.0 go.opentelemetry.io/otel/semconv/v1.26.0 -# go.opentelemetry.io/otel/metric v1.29.0 -## explicit; go 1.21 +# go.opentelemetry.io/otel/metric v1.30.0 +## explicit; go 1.22 go.opentelemetry.io/otel/metric go.opentelemetry.io/otel/metric/embedded go.opentelemetry.io/otel/metric/noop -# go.opentelemetry.io/otel/trace v1.29.0 -## explicit; go 1.21 +# go.opentelemetry.io/otel/trace v1.30.0 +## explicit; go 1.22 go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded # go.uber.org/atomic v1.11.0 @@ -677,8 +680,8 @@ golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/pkcs12 golang.org/x/crypto/pkcs12/internal/rc2 -# golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e -## explicit; go 1.20 +# golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 +## explicit; go 1.22.0 golang.org/x/exp/constraints # golang.org/x/net v0.29.0 ## explicit; go 1.18 @@ -723,7 +726,7 @@ golang.org/x/text/unicode/norm # golang.org/x/time v0.6.0 ## explicit; go 1.18 golang.org/x/time/rate -# google.golang.org/api v0.196.0 +# google.golang.org/api v0.199.0 ## explicit; go 1.21 google.golang.org/api/googleapi google.golang.org/api/googleapi/transport @@ -741,20 +744,20 @@ google.golang.org/api/transport google.golang.org/api/transport/grpc google.golang.org/api/transport/http google.golang.org/api/transport/http/internal/propagation -# google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 +# google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61 ## explicit; go 1.21 google.golang.org/genproto/googleapis/type/date google.golang.org/genproto/googleapis/type/expr -# google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 +# google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 ## explicit; go 1.21 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations -# google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 +# google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 ## explicit; go 1.21 google.golang.org/genproto/googleapis/rpc/code google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.66.0 +# google.golang.org/grpc v1.67.0 ## explicit; go 1.21 google.golang.org/grpc google.golang.org/grpc/attributes @@ -869,10 +872,10 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# k8s.io/apimachinery v0.31.0 +# k8s.io/apimachinery v0.31.1 ## explicit; go 1.22.0 k8s.io/apimachinery/pkg/util/runtime -# k8s.io/client-go v0.31.0 +# k8s.io/client-go v0.31.1 ## explicit; go 1.22.0 k8s.io/client-go/tools/metrics k8s.io/client-go/util/workqueue @@ -885,6 +888,6 @@ k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity k8s.io/klog/v2/internal/sloghandler -# k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 +# k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 ## explicit; go 1.18 k8s.io/utils/clock From 31117c66d5077eb230b49b9bb2ab167ce09f3478 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 09:18:31 +0200 Subject: [PATCH 114/128] docs/VictoriaLogs/CHANGELOG.md: cut v0.30.0-victorialogs release --- docs/VictoriaLogs/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index eb8231f561..b3191beb2b 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,10 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +## [v0.30.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.0-victorialogs) + +Released at 2024-09-27 + * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): add button for enabling auto refresh, similarly to VictoriaMetrics vmui. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7017). * FEATURE: drop logs without [`_msg`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) field or with empty `_msg` field, since this field is required to be non-empty in [VictoriaLogs data model](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785). * FEATURE: improve performance of analytical queries, which do not need reading the `_time` field. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7070). From 6f1fde24dc14afc8fc1d71829b2bf7a27aaaba33 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 09:34:07 +0200 Subject: [PATCH 115/128] deployment: update VictoriaLogs docker image from v0.29.0-victorialogs to v0.30.0-victorialogs See https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.0-victorialogs --- deployment/docker/docker-compose-victorialogs.yml | 2 +- deployment/docker/victorialogs/compose.yml | 2 +- deployment/logs-benchmark/docker-compose.yml | 2 +- docs/VictoriaLogs/QuickStart.md | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployment/docker/docker-compose-victorialogs.yml b/deployment/docker/docker-compose-victorialogs.yml index 8647207996..13e84dabf0 100644 --- a/deployment/docker/docker-compose-victorialogs.yml +++ b/deployment/docker/docker-compose-victorialogs.yml @@ -40,7 +40,7 @@ services: # storing logs and serving read queries. victorialogs: container_name: victorialogs - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs command: - "--storageDataPath=/vlogs" - "--httpListenAddr=:9428" diff --git a/deployment/docker/victorialogs/compose.yml b/deployment/docker/victorialogs/compose.yml index f9ef9ed658..726f3a713a 100644 --- a/deployment/docker/victorialogs/compose.yml +++ b/deployment/docker/victorialogs/compose.yml @@ -1,7 +1,7 @@ services: # meta service will be ignored by compose .victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs command: - -storageDataPath=/vlogs - -loggerFormat=json diff --git a/deployment/logs-benchmark/docker-compose.yml b/deployment/logs-benchmark/docker-compose.yml index 1203a123e0..891d6af89c 100644 --- a/deployment/logs-benchmark/docker-compose.yml +++ b/deployment/logs-benchmark/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: # Run `make package-victoria-logs` to build victoria-logs image vlogs: - image: docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs volumes: - vlogs:/vlogs ports: diff --git a/docs/VictoriaLogs/QuickStart.md b/docs/VictoriaLogs/QuickStart.md index 82f87a252a..0f4a18509f 100644 --- a/docs/VictoriaLogs/QuickStart.md +++ b/docs/VictoriaLogs/QuickStart.md @@ -33,8 +33,8 @@ Just download archive for the needed Operating system and architecture, unpack i For example, the following commands download VictoriaLogs archive for Linux/amd64, unpack and run it: ```sh -curl -L -O https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v0.29.0-victorialogs/victoria-logs-linux-amd64-v0.29.0-victorialogs.tar.gz -tar xzf victoria-logs-linux-amd64-v0.29.0-victorialogs.tar.gz +curl -L -O https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v0.30.0-victorialogs/victoria-logs-linux-amd64-v0.30.0-victorialogs.tar.gz +tar xzf victoria-logs-linux-amd64-v0.30.0-victorialogs.tar.gz ./victoria-logs-prod ``` @@ -58,7 +58,7 @@ Here is the command to run VictoriaLogs in a Docker container: ```sh docker run --rm -it -p 9428:9428 -v ./victoria-logs-data:/victoria-logs-data \ - docker.io/victoriametrics/victoria-logs:v0.29.0-victorialogs + docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs ``` See also: From 13cc4a2618561d3e4afa71fcffd7f4af78fddb75 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 09:44:40 +0200 Subject: [PATCH 116/128] docs/VictoriaLogs/LogsQL.md: use proper heading for `blocks_count` pipe docs All the links in docs assume that the heading for pipe docs should end with `pipe` word. This fixes broken links. This is a follow-up for e9950f63076eba22d34a8fb85913c5c21aad4496 --- docs/VictoriaLogs/LogsQL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index 8802cfb38d..78828e863e 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -1314,7 +1314,7 @@ LogsQL supports the following pipes: - [`unpack_syslog`](#unpack_syslog-pipe) unpacks [syslog](https://en.wikipedia.org/wiki/Syslog) messages from [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). - [`unroll`](#unroll-pipe) unrolls JSON arrays from [log fields](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model). -### blocks_count +### blocks_count pipe ` | blocks_count` [pipe](#pipes) counts the number of blocks with logs processed by ``. This pipe is needed mostly for debugging. From b49d1ea809e318ace5666166340b67d3c10361b1 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 11:00:28 +0200 Subject: [PATCH 117/128] lib/logstorage: add _msg="---" delimiter between different log streams in stream_context output This should help investigating contexts, which belong to different log streams. --- lib/logstorage/pipe_stream_context.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/logstorage/pipe_stream_context.go b/lib/logstorage/pipe_stream_context.go index 1f4c4017dd..e9a6d790bd 100644 --- a/lib/logstorage/pipe_stream_context.go +++ b/lib/logstorage/pipe_stream_context.go @@ -544,7 +544,7 @@ func (pcp *pipeStreamContextProcessor) flush() error { for _, streamRow := range streamRows { wctx.writeRow(streamRow.fields) } - if len(streamRowss) > 1 { + if len(m) > 1 || len(streamRowss) > 1 { lastRow := streamRows[len(streamRows)-1] fields := newDelimiterRowFields(lastRow, streamID) wctx.writeRow(fields) From 9367a9a6a2ee788374505d96c87b254abf0ae199 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 11:15:43 +0200 Subject: [PATCH 118/128] lib/logstorage: consistently sort stream contexts belonging to different streams by the minimum time seen in the matching logs This should simplify debugging of stream_context output, since it remains stable over repeated requests. --- docs/VictoriaLogs/CHANGELOG.md | 3 +++ lib/logstorage/pipe_stream_context.go | 33 ++++++++++++++++++++++++++- lib/logstorage/storage_search_test.go | 10 ++++---- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index b3191beb2b..56efffff8e 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,9 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* BUGFIX: consistently return matching log streams sorted by time from [`stream_context` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stream_context-pipe). Previously log streams could be returned in arbitrary order with every request. This could complicate using `stream_context` pipe. +* BUGFIX: add missing `_msg="---"` delimiter between stream contexts belonging to different [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). This should simplify investigating `stream_context` output for multiple matching log streams. + ## [v0.30.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.0-victorialogs) Released at 2024-09-27 diff --git a/lib/logstorage/pipe_stream_context.go b/lib/logstorage/pipe_stream_context.go index e9a6d790bd..06a86c39dc 100644 --- a/lib/logstorage/pipe_stream_context.go +++ b/lib/logstorage/pipe_stream_context.go @@ -530,7 +530,10 @@ func (pcp *pipeStreamContextProcessor) flush() error { pcp: pcp, } - for streamID, rows := range m { + // write output contexts in the ascending order of rows + streamIDs := getStreamIDsSortedByMinRowTimestamp(m) + for _, streamID := range streamIDs { + rows := m[streamID] streamRowss, err := pcp.getStreamRowss(streamID, rows, stateSizeBudget) if err != nil { return err @@ -557,6 +560,34 @@ func (pcp *pipeStreamContextProcessor) flush() error { return nil } +func getStreamIDsSortedByMinRowTimestamp(m map[string][]streamContextRow) []string { + type streamTimestamp struct { + streamID string + timestamp int64 + } + streamTimestamps := make([]streamTimestamp, 0, len(m)) + for streamID, rows := range m { + minTimestamp := rows[0].timestamp + for _, r := range rows[1:] { + if r.timestamp < minTimestamp { + minTimestamp = r.timestamp + } + } + streamTimestamps = append(streamTimestamps, streamTimestamp{ + streamID: streamID, + timestamp: minTimestamp, + }) + } + sort.Slice(streamTimestamps, func(i, j int) bool { + return streamTimestamps[i].timestamp < streamTimestamps[j].timestamp + }) + streamIDs := make([]string, len(streamTimestamps)) + for i := range streamIDs { + streamIDs[i] = streamTimestamps[i].streamID + } + return streamIDs +} + func newDelimiterRowFields(r *streamContextRow, streamID string) []Field { return []Field{ { diff --git a/lib/logstorage/storage_search_test.go b/lib/logstorage/storage_search_test.go index fb7709fe9b..4fd7ed0ac1 100644 --- a/lib/logstorage/storage_search_test.go +++ b/lib/logstorage/storage_search_test.go @@ -662,7 +662,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context before 0 | stats count() rows`, [][]Field{ { - {"rows", "33"}, + {"rows", "66"}, }, }) }) @@ -671,7 +671,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context before 0 after 0 | stats count() rows`, [][]Field{ { - {"rows", "33"}, + {"rows", "66"}, }, }) }) @@ -680,7 +680,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context before 1 | stats count() rows`, [][]Field{ { - {"rows", "66"}, + {"rows", "99"}, }, }) }) @@ -689,7 +689,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context after 1 | stats count() rows`, [][]Field{ { - {"rows", "66"}, + {"rows", "99"}, }, }) }) @@ -698,7 +698,7 @@ func TestStorageRunQuery(t *testing.T) { | stream_context before 1 after 1 | stats count() rows`, [][]Field{ { - {"rows", "99"}, + {"rows", "132"}, }, }) }) From 807758530356a99404664535398b16716e847377 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 11:20:58 +0200 Subject: [PATCH 119/128] docs/VictoriaLogs/CHANGELOG.md: cut v0.30.1-victorialogs release --- docs/VictoriaLogs/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 56efffff8e..1abd6501c2 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,10 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +## [v0.30.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.1-victorialogs) + +Released at 2024-09-27 + * BUGFIX: consistently return matching log streams sorted by time from [`stream_context` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stream_context-pipe). Previously log streams could be returned in arbitrary order with every request. This could complicate using `stream_context` pipe. * BUGFIX: add missing `_msg="---"` delimiter between stream contexts belonging to different [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). This should simplify investigating `stream_context` output for multiple matching log streams. From b670b0e9ff704dbefbd7815f6ff802e628ffdc7a Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 11:26:13 +0200 Subject: [PATCH 120/128] deployment: update VictoriaLogs docker image tag from v0.30.0-victorialogs to v0.30.1-victorialogs See https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.1-victorialogs --- deployment/docker/docker-compose-victorialogs.yml | 2 +- deployment/docker/victorialogs/compose.yml | 2 +- deployment/logs-benchmark/docker-compose.yml | 2 +- docs/VictoriaLogs/QuickStart.md | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployment/docker/docker-compose-victorialogs.yml b/deployment/docker/docker-compose-victorialogs.yml index 13e84dabf0..739842331e 100644 --- a/deployment/docker/docker-compose-victorialogs.yml +++ b/deployment/docker/docker-compose-victorialogs.yml @@ -40,7 +40,7 @@ services: # storing logs and serving read queries. victorialogs: container_name: victorialogs - image: docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.30.1-victorialogs command: - "--storageDataPath=/vlogs" - "--httpListenAddr=:9428" diff --git a/deployment/docker/victorialogs/compose.yml b/deployment/docker/victorialogs/compose.yml index 726f3a713a..a8e7aef054 100644 --- a/deployment/docker/victorialogs/compose.yml +++ b/deployment/docker/victorialogs/compose.yml @@ -1,7 +1,7 @@ services: # meta service will be ignored by compose .victorialogs: - image: docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.30.1-victorialogs command: - -storageDataPath=/vlogs - -loggerFormat=json diff --git a/deployment/logs-benchmark/docker-compose.yml b/deployment/logs-benchmark/docker-compose.yml index 891d6af89c..f30dfc64c7 100644 --- a/deployment/logs-benchmark/docker-compose.yml +++ b/deployment/logs-benchmark/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: # Run `make package-victoria-logs` to build victoria-logs image vlogs: - image: docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs + image: docker.io/victoriametrics/victoria-logs:v0.30.1-victorialogs volumes: - vlogs:/vlogs ports: diff --git a/docs/VictoriaLogs/QuickStart.md b/docs/VictoriaLogs/QuickStart.md index 0f4a18509f..169d509256 100644 --- a/docs/VictoriaLogs/QuickStart.md +++ b/docs/VictoriaLogs/QuickStart.md @@ -33,8 +33,8 @@ Just download archive for the needed Operating system and architecture, unpack i For example, the following commands download VictoriaLogs archive for Linux/amd64, unpack and run it: ```sh -curl -L -O https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v0.30.0-victorialogs/victoria-logs-linux-amd64-v0.30.0-victorialogs.tar.gz -tar xzf victoria-logs-linux-amd64-v0.30.0-victorialogs.tar.gz +curl -L -O https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v0.30.1-victorialogs/victoria-logs-linux-amd64-v0.30.1-victorialogs.tar.gz +tar xzf victoria-logs-linux-amd64-v0.30.1-victorialogs.tar.gz ./victoria-logs-prod ``` @@ -58,7 +58,7 @@ Here is the command to run VictoriaLogs in a Docker container: ```sh docker run --rm -it -p 9428:9428 -v ./victoria-logs-data:/victoria-logs-data \ - docker.io/victoriametrics/victoria-logs:v0.30.0-victorialogs + docker.io/victoriametrics/victoria-logs:v0.30.1-victorialogs ``` See also: From ea3b20622a10c59c44928528107fdd2a7f0187e0 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:41:24 +0300 Subject: [PATCH 121/128] Automatic update helm docs from VictoriaMetrics/helm-charts@ed0f351 (#7115) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: AndrewChubatiuk <3162380+AndrewChubatiuk@users.noreply.github.com> --- docs/helm/victoria-logs-single/CHANGELOG.md | 10 +++ docs/helm/victoria-logs-single/README.md | 80 ++++++++++--------- .../victoria-metrics-operator/CHANGELOG.md | 19 +++++ docs/helm/victoria-metrics-operator/README.md | 2 +- 4 files changed, 73 insertions(+), 38 deletions(-) diff --git a/docs/helm/victoria-logs-single/CHANGELOG.md b/docs/helm/victoria-logs-single/CHANGELOG.md index 25e156d448..fcbb5cdbb5 100644 --- a/docs/helm/victoria-logs-single/CHANGELOG.md +++ b/docs/helm/victoria-logs-single/CHANGELOG.md @@ -2,6 +2,16 @@ - TODO +## 0.6.4 + +**Release date:** 2024-09-23 + +![AppVersion: v0.29.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.29.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- VictoriaLogs 0.29.0 +- Fixed host template in default fluent-bit output configuration + ## 0.6.3 **Release date:** 2024-09-16 diff --git a/docs/helm/victoria-logs-single/README.md b/docs/helm/victoria-logs-single/README.md index a70af8d9b9..64ae7ce22d 100644 --- a/docs/helm/victoria-logs-single/README.md +++ b/docs/helm/victoria-logs-single/README.md @@ -1,4 +1,4 @@ - ![Version: 0.6.3](https://img.shields.io/badge/Version-0.6.3-informational?style=flat-square) + ![Version: 0.6.4](https://img.shields.io/badge/Version-0.6.4-informational?style=flat-square) [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-logs-single) [![Slack](https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg)](https://slack.victoriametrics.com/) @@ -161,31 +161,34 @@ Change the values according to the need of the environment in ``victoria-logs-si config: filters: | [FILTER] - Name kubernetes - Match kube.* - Merge_Log On - Keep_Log On - K8S-Logging.Parser On + Name kubernetes + Match kube.* + Merge_Log On + Keep_Log On + K8S-Logging.Parser On K8S-Logging.Exclude On [FILTER] - Name nest - Match * - Wildcard pod_name - Operation lift + Name nest + Match * + Wildcard pod_name + Operation lift Nested_under kubernetes Add_prefix kubernetes_ outputs: | [OUTPUT] - Name http - Match kube.* - Host '{{ include "victoria-logs.server.fullname" . }}' - port 9428 - compress gzip - uri /insert/jsonline?_stream_fields=stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name&_msg_field=log&_time_field=date - format json_lines + Name http + Match kube.* + Host {{ include "victoria-logs.server.fullname" . }} + port 9428 + compress gzip + uri /insert/jsonline + format json_lines json_date_format iso8601 - header AccountID 0 - header ProjectID 0 + header AccountID 0 + header ProjectID 0 + header VL-Msg-Field log + header VL-Time-Field date + header VL-Stream-Fields stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name daemonSetVolumeMounts: - mountPath: /var/log name: varlog @@ -213,17 +216,17 @@ resources: {}
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    admissionWebhooks object
    -certManager:
    +      
    +certManager:
         enabled: false
         issuer: {}
     enabled: true
    @@ -226,6 +226,7 @@ tls:
         caCert: null
         cert: null
         key: null
    +
     

    Configures resource validation

    @@ -234,19 +235,21 @@ tls:
    admissionWebhooks.certManager object
    -enabled: false
    +      
    +enabled: false
     issuer: {}
    +
     

    with keys: tls.key, tls.crt, ca.crt

    +

    Enables custom ca bundle, if you are not using cert-manager. In case of custom ca, you have to create secret - {chart-name}-validation with keys: tls.key, tls.crt, ca.crt

    admissionWebhooks.certManager.enabled bool
    -false
    +      
    +false
    +
     

    Enables cert creation and injection by cert-manager.

    @@ -255,8 +258,9 @@ false
    admissionWebhooks.certManager.issuer object
    -{}
    +      
    +{}
    +
     

    If needed, provide own issuer. Operator will create self-signed if empty.

    @@ -265,8 +269,9 @@ false
    admissionWebhooks.enabled bool
    -true
    +      
    +true
    +
     

    Enables validation webhook.

    @@ -275,8 +280,9 @@ true
    admissionWebhooks.policy string
    -Fail
    +      
    +Fail
    +
     

    What to do in case, when operator not available to validate request.

    @@ -285,8 +291,9 @@ Fail
    affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    @@ -295,8 +302,9 @@ Fail
    annotations object
    -{}
    +      
    +{}
    +
     

    Annotations to be added to the all resources

    @@ -305,8 +313,9 @@ Fail
    crd.cleanup.enabled bool
    -false
    +      
    +false
    +
     

    Tells helm to clean up all the vm resources under this release’s namespace when uninstalling

    @@ -315,10 +324,11 @@ false
    crd.cleanup.image object
    -pullPolicy: IfNotPresent
    +      
    +pullPolicy: IfNotPresent
     repository: bitnami/kubectl
     tag: ""
    +
     

    Image configuration for CRD cleanup Job

    @@ -327,56 +337,64 @@ tag: ""
    crd.create bool
    -true
    +      
    +true
    +
     

    with this option, if you remove this chart, all crd resources will be deleted with it.

    +

    Enables CRD creation and management. With this option, if you remove this chart, all CRD resources will be deleted with it.

    env list
    -[]
    +      
    +[]
    +
     

    extra settings for the operator deployment. Full list here

    +

    Extra settings for the operator deployment. Full list here

    envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    extraArgs object
    -{}
    +      
    +{}
    +
     

    operator container additional commandline arguments

    +

    Operator container additional commandline arguments

    extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with operator

    +
    extraHostPathMounts list
    -[]
    +      
    +[]
    +
     

    Additional hostPath mounts

    @@ -385,8 +403,9 @@ true
    extraLabels object
    -{}
    +      
    +{}
    +
     

    Labels to be added to the all resources

    @@ -395,8 +414,9 @@ true
    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    @@ -405,8 +425,9 @@ true
    extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    @@ -415,8 +436,9 @@ true
    extraVolumes list
    -[]
    +      
    +[]
    +
     

    Extra Volumes for the pod

    @@ -425,8 +447,9 @@ true
    fullnameOverride string
    -""
    +      
    +""
    +
     

    Overrides the full name of server component

    @@ -435,39 +458,57 @@ true
    global.cluster.dnsDomain string
    -cluster.local
    +      
    +cluster.local
    +
     
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
    +
    +

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    image object
    -pullPolicy: IfNotPresent
    +      
    +pullPolicy: IfNotPresent
     registry: ""
     repository: victoriametrics/operator
     tag: ""
     variant: ""
    +
     

    operator image configuration

    @@ -476,8 +517,9 @@ variant: ""
    image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    @@ -486,8 +528,9 @@ IfNotPresent
    image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -496,8 +539,9 @@ IfNotPresent
    image.repository string
    -victoriametrics/operator
    +      
    +victoriametrics/operator
    +
     

    Image repository

    @@ -506,8 +550,9 @@ victoriametrics/operator
    image.tag string
    -""
    +      
    +""
    +
     

    Image tag override Chart.AppVersion

    @@ -516,8 +561,9 @@ victoriametrics/operator
    imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Secret to pull images

    @@ -526,18 +572,20 @@ victoriametrics/operator
    logLevel string
    -info
    +      
    +info
    +
     

    possible values: info and error.

    +

    VM operator log level. Possible values: info and error.

    nameOverride string
    -""
    +      
    +""
    +
     

    VM operatror deployment name override

    @@ -546,8 +594,9 @@ info
    nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    @@ -556,8 +605,9 @@ info
    operator.disable_prometheus_converter bool
    -false
    +      
    +false
    +
     

    By default, operator converts prometheus-operator objects.

    @@ -566,8 +616,9 @@ false
    operator.enable_converter_ownership bool
    -false
    +      
    +false
    +
     

    Enables ownership reference for converted prometheus-operator objects, it will remove corresponding victoria-metrics objects in case of deletion prometheus one.

    @@ -576,8 +627,9 @@ false
    operator.prometheus_converter_add_argocd_ignore_annotations bool
    -false
    +      
    +false
    +
     

    Compare-options and sync-options for prometheus objects converted by operator for properly use with ArgoCD

    @@ -586,8 +638,9 @@ false
    operator.useCustomConfigReloader bool
    -false
    +      
    +false
    +
     

    Enables custom config-reloader, bundled with operator. It should reduce vmagent and vmauth config sync-time and make it predictable.

    @@ -596,9 +649,10 @@ false
    podDisruptionBudget object
    -enabled: false
    +      
    +enabled: false
     labels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more or check these docs

    @@ -607,31 +661,36 @@ labels: {}
    podLabels object
    -{}
    +      
    +{}
    +
     

    extra Labels for Pods only

    +
    podSecurityContext object
    -{}
    +      
    +{}
    +
     

    Pod’s security context. Details are here

    +
    probe.liveness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     initialDelaySeconds: 5
     periodSeconds: 15
     tcpSocket:
         port: probe
     timeoutSeconds: 5
    +
     

    Liveness probe

    @@ -640,13 +699,14 @@ timeoutSeconds: 5
    probe.readiness object
    -failureThreshold: 3
    +      
    +failureThreshold: 3
     httpGet:
         port: probe
     initialDelaySeconds: 5
     periodSeconds: 15
     timeoutSeconds: 5
    +
     

    Readiness probe

    @@ -655,8 +715,9 @@ timeoutSeconds: 5
    probe.startup object
    -{}
    +      
    +{}
    +
     

    Startup probe

    @@ -665,36 +726,39 @@ timeoutSeconds: 5
    rbac.aggregatedClusterRoles object
    -enabled: true
    +      
    +enabled: true
     labels:
         admin:
             rbac.authorization.k8s.io/aggregate-to-admin: "true"
         view:
             rbac.authorization.k8s.io/aggregate-to-view: "true"
    +
     

    create aggregated clusterRoles for CRD readonly and admin permissions

    +

    Create aggregated clusterRoles for CRD readonly and admin permissions

    rbac.aggregatedClusterRoles.labels object
    -admin:
    +      
    +admin:
         rbac.authorization.k8s.io/aggregate-to-admin: "true"
     view:
         rbac.authorization.k8s.io/aggregate-to-view: "true"
    +
     

    labels attached to according clusterRole

    +

    Labels attached to according clusterRole

    rbac.create bool
    -true
    +      
    +true
    +
     

    Specifies whether the RBAC resources should be created

    @@ -703,17 +767,20 @@ true
    replicaCount int
    -1
    +      
    +1
    +
     

    Number of operator replicas

    +
    resources object
    -{}
    +      
    +{}
    +
     

    Resource object

    @@ -722,134 +789,163 @@ true
    securityContext object
    -{}
    +      
    +{}
    +
     

    Security context to be added to server pods

    +
    service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    +
    service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    +
    service.externalIPs string
    -""
    +      
    +""
    +
     

    Service external IPs. Check here for details

    +
    service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    +
    service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    +
    service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    +
    service.servicePort int
    -8080
    +      
    +8080
    +
     

    Service port

    +
    service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    +
    service.webhookPort int
    -9443
    +      
    +9443
    +
     

    Service webhook port

    +
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Specifies whether a service account should be created

    @@ -858,8 +954,9 @@ true
    serviceAccount.name string
    -""
    +      
    +""
    +
     

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    @@ -868,8 +965,8 @@ true
    serviceMonitor object
    -annotations: {}
    +      
    +annotations: {}
     basicAuth: {}
     enabled: false
     extraLabels: {}
    @@ -878,16 +975,18 @@ relabelings: []
     scheme: ""
     scrapeTimeout: ""
     tlsConfig: {}
    +
     

    configures monitoring with serviceScrape. VMServiceScrape must be pre-installed

    +

    Configures monitoring with serviceScrape. VMServiceScrape must be pre-installed

    tolerations list
    -[]
    +      
    +[]
    +
     

    Array of tolerations object. Spec is here

    @@ -896,8 +995,9 @@ tlsConfig: {}
    topologySpreadConstraints list
    -[]
    +      
    +[]
    +
     

    Pod Topology Spread Constraints. Spec is here

    @@ -906,8 +1006,9 @@ tlsConfig: {}
    watchNamespaces list
    -[]
    +      
    +[]
    +
     

    By default, the operator will watch all the namespaces If you want to override this behavior, specify the namespace. Operator supports multiple namespaces for watching.

    diff --git a/docs/helm/victoria-metrics-single/README.md b/docs/helm/victoria-metrics-single/README.md index d8075d2634..ec661c4b26 100644 --- a/docs/helm/victoria-metrics-single/README.md +++ b/docs/helm/victoria-metrics-single/README.md @@ -124,78 +124,79 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-single/values.yaml`` file. - +
    - - - - + + + + - - - - - - - - - - + + - + - - + - - + - - - - - - - - - + + - - - - - - - - - - + + - + + + + + + + - - + - - + - - - - + - - - - - + - - - + + - - - - - - - - - - - - - - - + - @@ -394,8 +406,9 @@ json - - - + - @@ -422,8 +438,9 @@ json - - - - - - @@ -481,17 +503,20 @@ victoriametrics/victoria-metrics - - + - - - - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - + - - - + + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - @@ -2016,219 +1504,215 @@ json - - - - - - - - - - + + - + - - - + + - + - - - + + - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + + + + + - - - - + + + + + + +
    KeyTypeDefaultDescriptionKeyTypeDefaultDescription
    automountServiceAccountTokenbool
    -true
    -
    -
    extraObjects list
    -[]
    +      
    +[]
    +
     

    Add extra specs dynamically to this chart

    global.compatibility.openshift.adaptSecurityContextstring
    -auto
    +      
    global.compatibilityobject
    +openshift:
    +    adaptSecurityContext: auto
    +
     

    Openshift security context compatibility configuration

    +
    global.image.registry string
    -""
    +      
    +""
    +
     

    Image registry, that can be shared across multiple helm charts

    +
    global.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets, that can be shared across multiple helm charts

    +
    license object
    -key: ""
    +      
    +key: ""
     secret:
         key: ""
         name: ""
    +
     

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

    +

    Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

    license.key string
    -""
    +      
    +""
    +
     

    License key

    @@ -204,9 +205,10 @@ secret:
    license.secret object
    -key: ""
    +      
    +key: ""
     name: ""
    +
     

    Use existing secret with license key

    @@ -215,8 +217,9 @@ name: ""
    license.secret.key string
    -""
    +      
    +""
    +
     

    Key in secret with license key

    @@ -225,74 +228,87 @@ name: ""
    license.secret.name string
    -""
    +      
    +""
    +
     

    Existing secret name

    podDisruptionBudget.enabledbool
    -false
    +      
    podDisruptionBudgetobject
    +enabled: false
    +extraLabels: {}
    +
     

    See kubectl explain poddisruptionbudget.spec for more. Details are here

    podDisruptionBudget.extraLabelsobject
    -{}
    -
    -
    printNotes bool
    -true
    +      
    +true
    +
     

    Print chart notes

    rbac.createbool
    -true
    +      
    rbac.annotationsobject
    +{}
    +
     

    Role/RoleBinding annotations

    +
    rbac.createbool
    +true
    +
    +
    +

    Enables Role/RoleBinding creation

    +
    rbac.extraLabels object
    -{}
    +      
    +{}
    +
     

    Role/RoleBinding labels

    +
    rbac.namespaced bool
    -false
    +      
    +false
    +
     

    If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

    +
    server.affinity object
    -{}
    +      
    +{}
    +
     

    Pod affinity

    @@ -301,8 +317,9 @@ false
    server.containerWorkingDir string
    -""
    +      
    +""
    +
     

    Container workdir

    @@ -311,17 +328,20 @@ false
    server.emptyDir object
    -{}
    +      
    +{}
    +
     

    Use an alternate scheduler, e.g. “stork”. Check here for more details schedulerName:

    +
    server.enabled bool
    -true
    +      
    +true
    +
     

    Enable deployment of server component. Deployed as StatefulSet

    @@ -330,63 +350,55 @@ true
    server.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here for more details

    server.envFrom list
    -[]
    +      
    +[]
    +
     

    Specify alternative source for env variables

    +
    server.extraArgs."envflag.enable"string
    -"true"
    +      
    server.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    server.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for container of component

    server.extraArgs.loggerFormatstring
    -json
    -
    -
    server.extraContainers list
    -[]
    +      
    +[]
    +
     

    Extra containers to run in a pod with VM single

    +
    server.extraHostPathMounts list
    -[]
    +      
    +[]
    +
     
    server.extraLabels object
    -{}
    +      
    +{}
    +
     

    Sts/Deploy additional labels

    @@ -404,17 +417,20 @@ json
    server.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     

    Extra Volume Mounts for the container

    +
    server.extraVolumes list
    -[]
    +      
    +[]
    +
     
    server.fullnameOverride string
    -null
    +      
    +null
    +
     

    Overrides the full name of server component

    @@ -432,8 +449,9 @@ null
    server.image.pullPolicy string
    -IfNotPresent
    +      
    +IfNotPresent
    +
     

    Image pull policy

    @@ -442,8 +460,9 @@ IfNotPresent
    server.image.registry string
    -""
    +      
    +""
    +
     

    Image registry

    @@ -452,8 +471,9 @@ IfNotPresent
    server.image.repository string
    -victoriametrics/victoria-metrics
    +      
    +victoriametrics/victoria-metrics
    +
     

    Image repository

    @@ -462,8 +482,9 @@ victoriametrics/victoria-metrics
    server.image.tag string
    -""
    +      
    +""
    +
     

    Image tag

    @@ -472,8 +493,9 @@ victoriametrics/victoria-metrics
    server.image.variant string
    -""
    +      
    +""
    +
     
    server.imagePullSecrets list
    -[]
    +      
    +[]
    +
     

    Image pull secrets

    +
    server.ingress.annotations object
    -{}
    +      
    +{}
    +
     

    Ingress annotations

    @@ -500,8 +525,9 @@ victoriametrics/victoria-metrics
    server.ingress.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of ingress for server component

    @@ -510,8 +536,9 @@ false
    server.ingress.extraLabels object
    -{}
    +      
    +{}
    +
     

    Ingress extra labels

    @@ -520,8 +547,9 @@ false
    server.ingress.hosts list
    -[]
    +      
    +[]
    +
     

    Array of host objects

    @@ -530,18 +558,19 @@ false
    server.ingress.pathType string
    -Prefix
    +      
    +Prefix
    +
     

    pathType is only for k8s >= 1.1=

    -
    server.ingress.tls list
    -[]
    +      
    +[]
    +
     

    Array of TLS objects

    @@ -550,17 +579,20 @@ Prefix
    server.initContainers list
    -[]
    +      
    +[]
    +
     

    Init containers for VM single pod

    +
    server.name string
    -server
    +      
    +server
    +
     

    Server container name

    @@ -569,8 +601,9 @@ server
    server.nodeSelector object
    -{}
    +      
    +{}
    +
     

    Pod’s node selector. Details are here

    @@ -579,8 +612,9 @@ server
    server.persistentVolume.accessModes list
    -- ReadWriteOnce
    +      
    +- ReadWriteOnce
    +
     

    Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

    @@ -589,8 +623,9 @@ server
    server.persistentVolume.annotations object
    -{}
    +      
    +{}
    +
     

    Persistant volume annotations

    @@ -599,8 +634,9 @@ server
    server.persistentVolume.enabled bool
    -true
    +      
    +true
    +
     

    Create/use Persistent Volume Claim for server component. Empty dir if false

    @@ -609,8 +645,9 @@ true
    server.persistentVolume.existingClaim string
    -""
    +      
    +""
    +
     

    Existing Claim name. If defined, PVC must be created manually before volume will be bound

    @@ -619,8 +656,9 @@ true
    server.persistentVolume.matchLabels object
    -{}
    +      
    +{}
    +
     

    Bind Persistent Volume by labels. Must match all labels of targeted PV.

    @@ -629,8 +667,9 @@ true
    server.persistentVolume.mountPath string
    -/storage
    +      
    +/storage
    +
     

    Mount path. Server data Persistent Volume mount root path.

    @@ -639,8 +678,9 @@ true
    server.persistentVolume.size string
    -16Gi
    +      
    +16Gi
    +
     

    Size of the volume. Should be calculated based on the metrics you send and retention policy you set.

    @@ -649,8 +689,9 @@ true
    server.persistentVolume.storageClassName string
    -""
    +      
    +""
    +
     

    StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

    @@ -659,8 +700,9 @@ true
    server.persistentVolume.subPath string
    -""
    +      
    +""
    +
     

    Mount subpath

    @@ -669,8 +711,9 @@ true
    server.podAnnotations object
    -{}
    +      
    +{}
    +
     

    Pod’s annotations

    @@ -679,8 +722,9 @@ true
    server.podLabels object
    -{}
    +      
    +{}
    +
     

    Pod’s additional labels

    @@ -689,8 +733,9 @@ true
    server.podManagementPolicy string
    -OrderedReady
    +      
    +OrderedReady
    +
     

    Pod’s management policy

    @@ -699,8 +744,9 @@ OrderedReady
    server.podSecurityContext object
    -enabled: true
    +      
    +enabled: true
    +
     

    Pod’s security context. Details are here

    @@ -709,119 +755,86 @@ enabled: true
    server.priorityClassName string
    -""
    +      
    +""
    +
     

    Name of Priority Class

    server.probe.liveness.failureThresholdint
    -10
    -
    -
    server.probe.liveness.initialDelaySecondsint
    -30
    -
    -
    server.probe.liveness.periodSecondsint
    -30
    -
    -
    server.probe.liveness.tcpSocketserver.probe object
    -{}
    +      
    +liveness:
    +    failureThreshold: 10
    +    initialDelaySeconds: 30
    +    periodSeconds: 30
    +    tcpSocket: {}
    +    timeoutSeconds: 5
    +readiness:
    +    failureThreshold: 3
    +    httpGet: {}
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    timeoutSeconds: 5
    +startup: {}
    +
     
    server.probe.liveness.timeoutSecondsint
    -5
    -
    +

    Readiness & Liveness probes

    server.probe.readiness.failureThresholdint
    -3
    -
    -
    server.probe.readiness.httpGetserver.probe.liveness object
    -{}
    +      
    +failureThreshold: 10
    +initialDelaySeconds: 30
    +periodSeconds: 30
    +tcpSocket: {}
    +timeoutSeconds: 5
    +
     

    Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success.

    +
    server.probe.readiness.initialDelaySecondsint
    -5
    +      
    server.probe.readinessobject
    +failureThreshold: 3
    +httpGet: {}
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
     
    server.probe.readiness.periodSecondsint
    -15
    -
    +

    Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod’s IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success.

    server.probe.readiness.timeoutSecondsint
    -5
    -
    -
    server.probe.startup object
    -{}
    +      
    +{}
    +
     

    Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over.

    +
    server.relabel object
    -config: []
    +      
    +config: []
     configMap: ""
     enabled: false
    +
     

    Global relabel configuration

    @@ -830,8 +843,9 @@ enabled: false
    server.relabel.configMap string
    -""
    +      
    +""
    +
     

    Use existing configmap if specified otherwise .config values will be used. Relabel config should reside under relabel.yml key

    @@ -840,18 +854,20 @@ enabled: false
    server.replicaCount int
    -1
    +      
    +1
    +
     

    Replica count

    +

    Number of victoriametrics single replicas

    server.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    @@ -860,252 +876,19 @@ enabled: false
    server.retentionPeriod int
    -1
    +      
    +1
    +
     

    Data retention period in month

    -
    server.scrapeobject
    -config:
    -    global:
    -        scrape_interval: 15s
    -    scrape_configs:
    -        - job_name: victoriametrics
    -          static_configs:
    -            - targets:
    -                - localhost:8428
    -        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -          job_name: kubernetes-apiservers
    -          kubernetes_sd_configs:
    -            - role: endpoints
    -          relabel_configs:
    -            - action: keep
    -              regex: default;kubernetes;https
    -              source_labels:
    -                - __meta_kubernetes_namespace
    -                - __meta_kubernetes_service_name
    -                - __meta_kubernetes_endpoint_port_name
    -          scheme: https
    -          tls_config:
    -            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -            insecure_skip_verify: true
    -        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -          job_name: kubernetes-nodes
    -          kubernetes_sd_configs:
    -            - role: node
    -          relabel_configs:
    -            - action: labelmap
    -              regex: __meta_kubernetes_node_label_(.+)
    -            - replacement: kubernetes.default.svc:443
    -              target_label: __address__
    -            - regex: (.+)
    -              replacement: /api/v1/nodes/$1/proxy/metrics
    -              source_labels:
    -                - __meta_kubernetes_node_name
    -              target_label: __metrics_path__
    -          scheme: https
    -          tls_config:
    -            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -            insecure_skip_verify: true
    -        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -          honor_timestamps: false
    -          job_name: kubernetes-nodes-cadvisor
    -          kubernetes_sd_configs:
    -            - role: node
    -          relabel_configs:
    -            - action: labelmap
    -              regex: __meta_kubernetes_node_label_(.+)
    -            - replacement: kubernetes.default.svc:443
    -              target_label: __address__
    -            - regex: (.+)
    -              replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    -              source_labels:
    -                - __meta_kubernetes_node_name
    -              target_label: __metrics_path__
    -          scheme: https
    -          tls_config:
    -            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -            insecure_skip_verify: true
    -        - job_name: kubernetes-service-endpoints
    -          kubernetes_sd_configs:
    -            - role: endpoints
    -          relabel_configs:
    -            - action: drop
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_pod_container_init
    -            - action: keep_if_equal
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_port
    -                - __meta_kubernetes_pod_container_port_number
    -            - action: keep
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_scrape
    -            - action: replace
    -              regex: (https?)
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -              target_label: __scheme__
    -            - action: replace
    -              regex: (.+)
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_path
    -              target_label: __metrics_path__
    -            - action: replace
    -              regex: ([^:]+)(?::\d+)?;(\d+)
    -              replacement: $1:$2
    -              source_labels:
    -                - __address__
    -                - __meta_kubernetes_service_annotation_prometheus_io_port
    -              target_label: __address__
    -            - action: labelmap
    -              regex: __meta_kubernetes_service_label_(.+)
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_namespace
    -              target_label: namespace
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_service_name
    -              target_label: service
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_pod_node_name
    -              target_label: node
    -        - job_name: kubernetes-service-endpoints-slow
    -          kubernetes_sd_configs:
    -            - role: endpoints
    -          relabel_configs:
    -            - action: drop
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_pod_container_init
    -            - action: keep_if_equal
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_port
    -                - __meta_kubernetes_pod_container_port_number
    -            - action: keep
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    -            - action: replace
    -              regex: (https?)
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -              target_label: __scheme__
    -            - action: replace
    -              regex: (.+)
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_path
    -              target_label: __metrics_path__
    -            - action: replace
    -              regex: ([^:]+)(?::\d+)?;(\d+)
    -              replacement: $1:$2
    -              source_labels:
    -                - __address__
    -                - __meta_kubernetes_service_annotation_prometheus_io_port
    -              target_label: __address__
    -            - action: labelmap
    -              regex: __meta_kubernetes_service_label_(.+)
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_namespace
    -              target_label: namespace
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_service_name
    -              target_label: service
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_pod_node_name
    -              target_label: node
    -          scrape_interval: 5m
    -          scrape_timeout: 30s
    -        - job_name: kubernetes-services
    -          kubernetes_sd_configs:
    -            - role: service
    -          metrics_path: /probe
    -          params:
    -            module:
    -                - http_2xx
    -          relabel_configs:
    -            - action: keep
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_service_annotation_prometheus_io_probe
    -            - source_labels:
    -                - __address__
    -              target_label: __param_target
    -            - replacement: blackbox
    -              target_label: __address__
    -            - source_labels:
    -                - __param_target
    -              target_label: instance
    -            - action: labelmap
    -              regex: __meta_kubernetes_service_label_(.+)
    -            - source_labels:
    -                - __meta_kubernetes_namespace
    -              target_label: namespace
    -            - source_labels:
    -                - __meta_kubernetes_service_name
    -              target_label: service
    -        - job_name: kubernetes-pods
    -          kubernetes_sd_configs:
    -            - role: pod
    -          relabel_configs:
    -            - action: drop
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_pod_container_init
    -            - action: keep_if_equal
    -              source_labels:
    -                - __meta_kubernetes_pod_annotation_prometheus_io_port
    -                - __meta_kubernetes_pod_container_port_number
    -            - action: keep
    -              regex: true
    -              source_labels:
    -                - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    -            - action: replace
    -              regex: (.+)
    -              source_labels:
    -                - __meta_kubernetes_pod_annotation_prometheus_io_path
    -              target_label: __metrics_path__
    -            - action: replace
    -              regex: ([^:]+)(?::\d+)?;(\d+)
    -              replacement: $1:$2
    -              source_labels:
    -                - __address__
    -                - __meta_kubernetes_pod_annotation_prometheus_io_port
    -              target_label: __address__
    -            - action: labelmap
    -              regex: __meta_kubernetes_pod_label_(.+)
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_namespace
    -              target_label: namespace
    -            - action: replace
    -              source_labels:
    -                - __meta_kubernetes_pod_name
    -              target_label: pod
    -configMap: ""
    -enabled: false
    -extraScrapeConfigs: []
    -
    -

    Scrape configuration for victoriametrics

    server.scrape.config object
    -global:
    +      
    +global:
         scrape_interval: 15s
     scrape_configs:
         - job_name: victoriametrics
    @@ -1326,336 +1109,18 @@ scrape_configs:
               source_labels:
                 - __meta_kubernetes_pod_name
               target_label: pod
    +
     

    Scrape config

    -
    server.scrape.config.scrape_configslist
    -- job_name: victoriametrics
    -  static_configs:
    -    - targets:
    -        - localhost:8428
    -- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -  job_name: kubernetes-apiservers
    -  kubernetes_sd_configs:
    -    - role: endpoints
    -  relabel_configs:
    -    - action: keep
    -      regex: default;kubernetes;https
    -      source_labels:
    -        - __meta_kubernetes_namespace
    -        - __meta_kubernetes_service_name
    -        - __meta_kubernetes_endpoint_port_name
    -  scheme: https
    -  tls_config:
    -    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -    insecure_skip_verify: true
    -- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -  job_name: kubernetes-nodes
    -  kubernetes_sd_configs:
    -    - role: node
    -  relabel_configs:
    -    - action: labelmap
    -      regex: __meta_kubernetes_node_label_(.+)
    -    - replacement: kubernetes.default.svc:443
    -      target_label: __address__
    -    - regex: (.+)
    -      replacement: /api/v1/nodes/$1/proxy/metrics
    -      source_labels:
    -        - __meta_kubernetes_node_name
    -      target_label: __metrics_path__
    -  scheme: https
    -  tls_config:
    -    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -    insecure_skip_verify: true
    -- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    -  honor_timestamps: false
    -  job_name: kubernetes-nodes-cadvisor
    -  kubernetes_sd_configs:
    -    - role: node
    -  relabel_configs:
    -    - action: labelmap
    -      regex: __meta_kubernetes_node_label_(.+)
    -    - replacement: kubernetes.default.svc:443
    -      target_label: __address__
    -    - regex: (.+)
    -      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
    -      source_labels:
    -        - __meta_kubernetes_node_name
    -      target_label: __metrics_path__
    -  scheme: https
    -  tls_config:
    -    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    -    insecure_skip_verify: true
    -- job_name: kubernetes-service-endpoints
    -  kubernetes_sd_configs:
    -    - role: endpoints
    -  relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scrape
    -    - action: replace
    -      regex: (https?)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -      target_label: __scheme__
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_node_name
    -      target_label: node
    -- job_name: kubernetes-service-endpoints-slow
    -  kubernetes_sd_configs:
    -    - role: endpoints
    -  relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
    -    - action: replace
    -      regex: (https?)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -      target_label: __scheme__
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_node_name
    -      target_label: node
    -  scrape_interval: 5m
    -  scrape_timeout: 30s
    -- job_name: kubernetes-services
    -  kubernetes_sd_configs:
    -    - role: service
    -  metrics_path: /probe
    -  params:
    -    module:
    -        - http_2xx
    -  relabel_configs:
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_probe
    -    - source_labels:
    -        - __address__
    -      target_label: __param_target
    -    - replacement: blackbox
    -      target_label: __address__
    -    - source_labels:
    -        - __param_target
    -      target_label: instance
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -- job_name: kubernetes-pods
    -  kubernetes_sd_configs:
    -    - role: pod
    -  relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_pod_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_pod_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_pod_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_pod_label_(.+)
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_name
    -      target_label: pod
    -
    -

    Scrape targets

    -
    server.scrape.config.scrape_configs[4]object
    -job_name: kubernetes-service-endpoints
    -kubernetes_sd_configs:
    -    - role: endpoints
    -relabel_configs:
    -    - action: drop
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_pod_container_init
    -    - action: keep_if_equal
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -        - __meta_kubernetes_pod_container_port_number
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scrape
    -    - action: replace
    -      regex: (https?)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_scheme
    -      target_label: __scheme__
    -    - action: replace
    -      regex: (.+)
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_path
    -      target_label: __metrics_path__
    -    - action: replace
    -      regex: ([^:]+)(?::\d+)?;(\d+)
    -      replacement: $1:$2
    -      source_labels:
    -        - __address__
    -        - __meta_kubernetes_service_annotation_prometheus_io_port
    -      target_label: __address__
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -    - action: replace
    -      source_labels:
    -        - __meta_kubernetes_pod_node_name
    -      target_label: node
    -
    -

    Scrape rule using kubernetes service discovery for endpoints

    -
    server.scrape.config.scrape_configs[6]object
    -job_name: kubernetes-services
    -kubernetes_sd_configs:
    -    - role: service
    -metrics_path: /probe
    -params:
    -    module:
    -        - http_2xx
    -relabel_configs:
    -    - action: keep
    -      regex: true
    -      source_labels:
    -        - __meta_kubernetes_service_annotation_prometheus_io_probe
    -    - source_labels:
    -        - __address__
    -      target_label: __param_target
    -    - replacement: blackbox
    -      target_label: __address__
    -    - source_labels:
    -        - __param_target
    -      target_label: instance
    -    - action: labelmap
    -      regex: __meta_kubernetes_service_label_(.+)
    -    - source_labels:
    -        - __meta_kubernetes_namespace
    -      target_label: namespace
    -    - source_labels:
    -        - __meta_kubernetes_service_name
    -      target_label: service
    -
    -

    Example scrape config for probing services via the Blackbox Exporter. The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * prometheus.io/probe: Only probe services that have a value of true

    server.scrape.configMap string
    -""
    +      
    +""
    +
     

    Use existing configmap if specified otherwise .config values will be used. Scrape config should reside under scrape.yml key

    @@ -1664,8 +1129,9 @@ relabel_configs:
    server.scrape.enabled bool
    -false
    +      
    +false
    +
     

    If true scrapes targets, creates config map or use specified one with scrape targets

    @@ -1674,8 +1140,9 @@ false
    server.scrape.extraScrapeConfigs list
    -[]
    +      
    +[]
    +
     

    Extra scrape configs that will be appended to server.scrape.config

    @@ -1684,8 +1151,9 @@ false
    server.securityContext object
    -enabled: true
    +      
    +enabled: true
    +
     

    Security context to be added to server pods

    @@ -1694,8 +1162,9 @@ enabled: true
    server.service.annotations object
    -{}
    +      
    +{}
    +
     

    Service annotations

    @@ -1704,8 +1173,9 @@ enabled: true
    server.service.clusterIP string
    -""
    +      
    +""
    +
     

    Service ClusterIP

    @@ -1714,54 +1184,64 @@ enabled: true
    server.service.externalIPs list
    -[]
    +      
    +[]
    +
     

    Service External IPs. Details are here

    +

    Service external IPs. Details are here

    server.service.externalTrafficPolicy string
    -""
    +      
    +""
    +
     

    Service external traffic policy. Check here for details

    +
    server.service.healthCheckNodePort string
    -""
    +      
    +""
    +
     

    Health check node port for a service. Check here for details

    +
    server.service.ipFamilies list
    -[]
    +      
    +[]
    +
     

    List of service IP families. Check here for details.

    +
    server.service.ipFamilyPolicy string
    -""
    +      
    +""
    +
     

    Service IP family policy. Check here for details.

    +
    server.service.labels object
    -{}
    +      
    +{}
    +
     

    Service labels

    @@ -1770,8 +1250,9 @@ enabled: true
    server.service.loadBalancerIP string
    -""
    +      
    +""
    +
     

    Service load balacner IP

    @@ -1780,8 +1261,9 @@ enabled: true
    server.service.loadBalancerSourceRanges list
    -[]
    +      
    +[]
    +
     

    Load balancer source range

    @@ -1790,8 +1272,9 @@ enabled: true
    server.service.servicePort int
    -8428
    +      
    +8428
    +
     

    Service port

    @@ -1800,8 +1283,9 @@ enabled: true
    server.service.type string
    -ClusterIP
    +      
    +ClusterIP
    +
     

    Service type

    @@ -1810,8 +1294,9 @@ ClusterIP
    server.serviceMonitor.annotations object
    -{}
    +      
    +{}
    +
     

    Service Monitor annotations

    @@ -1820,8 +1305,9 @@ ClusterIP
    server.serviceMonitor.basicAuth object
    -{}
    +      
    +{}
    +
     

    Basic auth params for Service Monitor

    @@ -1830,8 +1316,9 @@ ClusterIP
    server.serviceMonitor.enabled bool
    -false
    +      
    +false
    +
     

    Enable deployment of Service Monitor for server component. This is Prometheus operator object

    @@ -1840,8 +1327,9 @@ false
    server.serviceMonitor.extraLabels object
    -{}
    +      
    +{}
    +
     

    Service Monitor labels

    @@ -1850,8 +1338,9 @@ false
    server.serviceMonitor.metricRelabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor metricRelabelings

    @@ -1860,8 +1349,9 @@ false
    server.serviceMonitor.relabelings list
    -[]
    +      
    +[]
    +
     

    Service Monitor relabelings

    @@ -1870,8 +1360,9 @@ false
    server.statefulSet.enabled bool
    -true
    +      
    +true
    +
     

    Creates statefulset instead of deployment, useful when you want to keep the cache

    @@ -1880,8 +1371,9 @@ true
    server.statefulSet.podManagementPolicy string
    -OrderedReady
    +      
    +OrderedReady
    +
     

    Deploy order policy for StatefulSet pods

    @@ -1890,8 +1382,9 @@ OrderedReady
    server.terminationGracePeriodSeconds int
    -60
    +      
    +60
    +
     

    Pod’s termination grace period in seconds

    @@ -1900,8 +1393,9 @@ OrderedReady
    server.tolerations list
    -[]
    +      
    +[]
    +
     

    Node tolerations for server scheduling to nodes with taints. Details are here

    @@ -1910,105 +1404,99 @@ OrderedReady
    server.vmbackupmanager.destination string
    -""
    +      
    +""
    +
     

    backup destination at S3, GCS or local filesystem. Release name will be included to path!

    +

    Backup destination at S3, GCS or local filesystem. Release name will be included to path!

    server.vmbackupmanager.disableDaily bool
    -false
    +      
    +false
    +
     

    disable daily backups

    +

    Disable daily backups

    server.vmbackupmanager.disableHourly bool
    -false
    +      
    +false
    +
     

    disable hourly backups

    +

    Disable hourly backups

    server.vmbackupmanager.disableMonthly bool
    -false
    +      
    +false
    +
     

    disable monthly backups

    +

    Disable monthly backups

    server.vmbackupmanager.disableWeekly bool
    -false
    +      
    +false
    +
     

    disable weekly backups

    +

    Disable weekly backups

    server.vmbackupmanager.enabled bool
    -false
    +      
    +false
    +
     

    enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

    +

    Enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

    server.vmbackupmanager.env list
    -[]
    +      
    +[]
    +
     

    Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

    +

    Additional environment variables (ex.: secret tokens, flags). Check here

    server.vmbackupmanager.extraArgs."envflag.enable"string
    -"true"
    +      
    server.vmbackupmanager.extraArgsobject
    +envflag.enable: "true"
    +envflag.prefix: VM_
    +loggerFormat: json
    +
     
    server.vmbackupmanager.extraArgs."envflag.prefix"string
    -VM_
    -
    +

    Extra command line arguments for container of component

    server.vmbackupmanager.extraArgs.loggerFormatstring
    -json
    -
    -
    server.vmbackupmanager.extraVolumeMounts list
    -[]
    +      
    +[]
    +
     
    server.vmbackupmanager.image.registry string
    -""
    +      
    +""
    +
     

    vmbackupmanager image registry

    +

    VMBackupManager image registry

    server.vmbackupmanager.image.repository string
    -victoriametrics/vmbackupmanager
    +      
    +victoriametrics/vmbackupmanager
    +
     

    vmbackupmanager image repository

    +

    VMBackupManager image repository

    server.vmbackupmanager.image.tag string
    -""
    +      
    +""
    +
     

    vmbackupmanager image tag

    +

    VMBackupManager image tag

    server.vmbackupmanager.image.variant string
    -""
    +      
    +""
    +
     
    server.vmbackupmanager.probe.liveness.failureThresholdint
    -10
    +      
    server.vmbackupmanager.probeobject
    +liveness:
    +    failureThreshold: 10
    +    initialDelaySeconds: 30
    +    periodSeconds: 30
    +    tcpSocket:
    +        port: manager-http
    +    timeoutSeconds: 5
    +readiness:
    +    failureThreshold: 3
    +    httpGet:
    +        port: manager-http
    +    initialDelaySeconds: 5
    +    periodSeconds: 15
    +    timeoutSeconds: 5
    +startup:
    +    httpGet:
    +        port: manager-http
    +
     

    Readiness & Liveness probes

    +
    server.vmbackupmanager.probe.liveness.initialDelaySecondsint
    -30
    +      
    server.vmbackupmanager.probe.livenessobject
    +failureThreshold: 10
    +initialDelaySeconds: 30
    +periodSeconds: 30
    +tcpSocket:
    +    port: manager-http
    +timeoutSeconds: 5
    +
     

    VMBackupManager liveness probe

    +
    server.vmbackupmanager.probe.liveness.periodSecondsint
    -30
    +      
    server.vmbackupmanager.probe.readinessobject
    +failureThreshold: 3
    +httpGet:
    +    port: manager-http
    +initialDelaySeconds: 5
    +periodSeconds: 15
    +timeoutSeconds: 5
    +
     

    VMBackupManager readiness probe

    +
    server.vmbackupmanager.probe.liveness.tcpSocket.portstring
    -manager-http
    +      
    server.vmbackupmanager.probe.startupobject
    +httpGet:
    +    port: manager-http
    +
     
    server.vmbackupmanager.probe.liveness.timeoutSecondsint
    -5
    -
    +

    VMBackupManager startup probe

    server.vmbackupmanager.probe.readiness.failureThresholdint
    -3
    -
    -
    server.vmbackupmanager.probe.readiness.httpGet.portstring
    -manager-http
    -
    -
    server.vmbackupmanager.probe.readiness.initialDelaySecondsint
    -5
    -
    -
    server.vmbackupmanager.probe.readiness.periodSecondsint
    -15
    -
    -
    server.vmbackupmanager.probe.readiness.timeoutSecondsint
    -5
    -
    -
    server.vmbackupmanager.probe.startup.httpGet.portstring
    -manager-http
    -
    -
    server.vmbackupmanager.resources object
    -{}
    +      
    +{}
    +
     

    Resource object. Details are here

    +
    server.vmbackupmanager.restore object
    -onStart:
    +      
    +onStart:
         enabled: false
    +
     

    Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager#restore-commands

    +

    Allows to enable restore options for pod. Read more here

    server.vmbackupmanager.retention object
    -keepLastDaily: 2
    +      
    +keepLastDaily: 2
     keepLastHourly: 2
     keepLastMonthly: 2
     keepLastWeekly: 2
    +
     

    backups’ retention settings

    +

    Backups’ retention settings

    server.vmbackupmanager.retention.keepLastDaily int
    -2
    +      
    +2
    +
     

    keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

    +

    Keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

    server.vmbackupmanager.retention.keepLastHourly int
    -2
    +      
    +2
    +
     

    keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

    +

    Keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

    server.vmbackupmanager.retention.keepLastMonthly int
    -2
    +      
    +2
    +
     

    keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

    +

    Keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

    server.vmbackupmanager.retention.keepLastWeekly int
    -2
    +      
    +2
    +
     

    keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

    +

    Keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

    +
    serviceAccount.annotationsobject
    +{}
    +
    +
    +

    ServiceAccount annotations

    serviceAccount.automountToken bool
    -true
    +      
    +true
    +
     

    Mount API token to pod directly

    @@ -2237,8 +1721,9 @@ true
    serviceAccount.create bool
    -true
    +      
    +true
    +
     

    Create service account.

    @@ -2247,11 +1732,24 @@ true
    serviceAccount.extraLabels object
    -{}
    +      
    +{}
    +
     

    ServiceAccount labels

    +
    serviceAccount.namestring
    +null
    +
    +
    +

    The name of the service account to use. If not set and create is true, a name is generated using the fullname template

    +
    From 57183c9b612a06685be2bc07d879743c75d2be82 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 23 Sep 2024 08:49:32 +0200 Subject: [PATCH 073/128] docs/changelog/CHANGELOG.md: moved the description of the fix for proper usage of -streamAggr.dedupInterval and -remoteWrite.streamAggr.dedupInterval from FEATURE to BUGFIX section The previous behaviour was incorrect, since it is unexpected that the -streamAggr.dedupInterval and -remoteWrite.streamAggr.dedupInterval is applied to processed samples only if -streamAggr.config isn't set. This is a follow-up for d523015f27832ffe0773245346d90bdecc28683e Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711 --- docs/changelog/CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 8f7c42732d..99abd04619 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -18,12 +18,9 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). ## tip -**Update note: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flag. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details.** - * SECURITY: upgrade Go builder from Go1.23.0 to Go1.23.1. See the list of issues addressed in [Go1.23.1](https://github.com/golang/go/issues?q=milestone%3AGo1.23.1+label%3ACherryPickApproved). * SECURITY: upgrade base docker image (Alpine) from 3.20.2 to 3.20.3. See [alpine 3.20.3 release notes](https://alpinelinux.org/posts/Alpine-3.17.10-3.18.9-3.19.4-3.20.3-released.html). -* FEATURE [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * FEATURE: all VictoriaMetrics [enterprise](https://docs.victoriametrics.com/enterprise/) components: add support of hot-reload for license key supplied by `-licenseFile` command-line flag. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): allow disabling `Bearer` prefix enforcement for authentication header. This is useful for cases when identity token is used instead of access token. * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parsing `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. @@ -32,6 +29,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. +* BUGFIX: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly cache empty list of matching time series for the given [labels filter](https://docs.victoriametrics.com/keyconcepts/#filtering). This type of caching was broken since [v1.97.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.0), which could result in the increased CPU usage when performing queries, which match zero time series. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009). From 78ecfede06ed7630f9847b850180936771e9f846 Mon Sep 17 00:00:00 2001 From: Zakhar Bessarab Date: Wed, 4 Sep 2024 17:23:23 +0400 Subject: [PATCH 074/128] license: add ability to reload keys (#775) * lib/license: add support of license key hot-reload * docs: add info about license key hot reload --------- Signed-off-by: Zakhar Bessarab --- docs/enterprise.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/enterprise.md b/docs/enterprise.md index 43490e1f8a..dc2911b322 100644 --- a/docs/enterprise.md +++ b/docs/enterprise.md @@ -92,6 +92,7 @@ All the VictoriaMetrics Enterprise components require specifying the following c * `-license` - this flag accepts VictoriaMetrics Enterprise license key, which can be obtained at [this page](https://victoriametrics.com/products/enterprise/trial/) * `-licenseFile` - this flag accepts a path to file with VictoriaMetrics Enterprise license key, which can be obtained at [this page](https://victoriametrics.com/products/enterprise/trial/) . Use either `-license` or `-licenseFile`, but not both. +* `-licenseFile.reloadInterval` - specifies the interval for checking the license file for updates. The default value is 1 hour. If the license file is updated, the new license key is read from the file. * `-license.forceOffline` - enables offline verification of VictoriaMetrics Enterprise license key. Contact us via [this page](https://victoriametrics.com/products/enterprise/) if you need license key, which can be verified offline without the need to connect to VictoriaMetrics license server. @@ -208,6 +209,8 @@ Or create secret via `kubectl`: kubectl create secret generic vm-license --from-literal=license={BASE64_ENCODED_LICENSE_KEY} ``` +Note that license key provided by using secret is mounted in a file. This allows to perform updates of the license without the need to restart the pod. + ### Kubernetes operator It is allowed to run VictoriaMetrics Enterprise components in [cases listed here](#valid-cases-for-victoriametrics-enterprise). @@ -267,6 +270,7 @@ Or create secret via `kubectl`: kubectl create secret generic vm-license --from-literal=license={BASE64_ENCODED_LICENSE_KEY} ``` +Note that license key provided by using secret is mounted in a file. This allows to perform updates of the license without the need to restart the pod. See full list of CRD specifications [here](https://docs.victoriametrics.com/operator/api.html). ## Monitoring license expiration From 3ed172eeeb0fb317db261444dfd52ea274a4bc75 Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Mon, 23 Sep 2024 11:58:43 +0200 Subject: [PATCH 075/128] docs: add note about testing new releases on testing env Signed-off-by: hagen1778 --- docs/Release-Guide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Release-Guide.md b/docs/Release-Guide.md index 488897a6b6..117ee10462 100644 --- a/docs/Release-Guide.md +++ b/docs/Release-Guide.md @@ -69,6 +69,7 @@ Bumping the limits may significantly improve build speed. * linux/ppc64le * linux/386 This step can be run manually with the command `make publish` from the needed git tag. +1. Verify that created images are stable and don't introduce regressions on [test environment](https://github.com/VictoriaMetrics/VictoriaMetrics-enterprise/blob/master/Release-Guide.md#testing-releases). 1. Push the tags `v1.xx.y` and `v1.xx.y-cluster` created at previous steps to public GitHub repository at https://github.com/VictoriaMetrics/VictoriaMetrics. Push the tags `v1.xx.y`, `v1.xx.y-cluster`, `v1.xx.y-enterprise` and `v1.xx.y-enterprise-cluster` to the corresponding branches in private repository. From 3964889705e6b485ec7a869e98fb690ccb46570c Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 23 Sep 2024 14:54:39 +0200 Subject: [PATCH 076/128] app/vmselect/promql: consistently replace `NaN` data points with non-`NaN` values for `range_first` and `range_last` functions It is expected that range_first and range_last functions return non-nan const value across all the points if the original series contains at least a single non-NaN value. Previously this rule was violated for NaN data points in the original series. This could confuse users. While at it, add tests for series with NaN values across all the range_* and running_* functions, in order to maintain consistent handling of NaN values across these functions. --- app/vmselect/promql/exec_test.go | 226 +++++++++++++++++++++++++++++++ app/vmselect/promql/transform.go | 12 +- docs/changelog/CHANGELOG.md | 2 + 3 files changed, 232 insertions(+), 8 deletions(-) diff --git a/app/vmselect/promql/exec_test.go b/app/vmselect/promql/exec_test.go index a3edd2c4e5..54e61b810d 100644 --- a/app/vmselect/promql/exec_test.go +++ b/app/vmselect/promql/exec_test.go @@ -7251,6 +7251,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_trim_outliers(time() > 1200)`, func(t *testing.T) { + t.Parallel() + q := `range_trim_outliers(0.5, time() > 1200)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, nan, 1600, 1800, nan}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_trim_spikes()`, func(t *testing.T) { t.Parallel() q := `range_trim_spikes(0.2, time())` @@ -7262,6 +7273,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_trim_spikes(time() > 1200 <= 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_trim_spikes(0.2, time() > 1200 <= 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, nan, 1600, nan, nan}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_trim_zscore()`, func(t *testing.T) { t.Parallel() q := `range_trim_zscore(0.9, time())` @@ -7273,6 +7295,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_trim_zscore(time() > 1200 <= 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_trim_zscore(0.9, time() > 1200 <= 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, nan, 1600, nan, nan}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_zscore()`, func(t *testing.T) { t.Parallel() q := `round(range_zscore(time()), 0.1)` @@ -7284,6 +7317,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_zscore(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `round(range_zscore(time() > 1200 < 1800), 0.1)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, -1, 1, nan, nan}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_quantile(0.5)`, func(t *testing.T) { t.Parallel() q := `range_quantile(0.5, time())` @@ -7295,6 +7339,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_quantile(0.5, time() > 1200 < 2000)`, func(t *testing.T) { + t.Parallel() + q := `range_quantile(0.5, time() > 1200 < 2000)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1600, 1600, 1600, 1600, 1600, 1600}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_stddev()`, func(t *testing.T) { t.Parallel() q := `round(range_stddev(time()),0.01)` @@ -7306,6 +7361,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_stddev(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `round(range_stddev(time() > 1200 < 1800),0.01)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{100, 100, 100, 100, 100, 100}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_stdvar()`, func(t *testing.T) { t.Parallel() q := `round(range_stdvar(time()),0.01)` @@ -7317,6 +7383,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_stdvar(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `round(range_stdvar(time() > 1200 < 1800),0.01)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{10000, 10000, 10000, 10000, 10000, 10000}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_median()`, func(t *testing.T) { t.Parallel() q := `range_median(time())` @@ -7677,6 +7754,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`running_min(abs(1500-time()) < 400 > 100)`, func(t *testing.T) { + t.Parallel() + q := `running_min(abs(1500-time()) < 400 > 100)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, 300, 300, 300, 300, 300}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`running_max(abs(1300-time()))`, func(t *testing.T) { t.Parallel() q := `running_max(abs(1300-time()))` @@ -7688,6 +7776,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`running_max(abs(1300-time()) > 300 < 700)`, func(t *testing.T) { + t.Parallel() + q := `running_max(abs(1300-time()) > 300 < 700)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, nan, nan, 500, 500}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`running_sum(1)`, func(t *testing.T) { t.Parallel() q := `running_sum(1)` @@ -7710,6 +7809,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`running_sum(time() > 1.2 < 1.8)`, func(t *testing.T) { + t.Parallel() + q := `running_sum(time()/1e3 > 1.2 < 1.8)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, 1.4, 3, 3, 3}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`running_avg(time())`, func(t *testing.T) { t.Parallel() q := `running_avg(time())` @@ -7721,6 +7831,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`running_avg(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `running_avg(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, 1400, 1500, 1500, 1500}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`smooth_exponential(time(), 1)`, func(t *testing.T) { t.Parallel() q := `smooth_exponential(time(), 1)` @@ -7801,6 +7922,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_min(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_min(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1400, 1400, 1400, 1400, 1400, 1400}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_normalize(time(),alias(-time(),"negative"))`, func(t *testing.T) { t.Parallel() q := `range_normalize(time(),alias(-time(), "negative"))` @@ -7818,6 +7950,23 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r1, r2} f(q, resultExpected) }) + t.Run(`range_normalize(time() > 1200 < 1800,alias(-(time() > 1400 < 2000),"negative"))`, func(t *testing.T) { + t.Parallel() + q := `range_normalize(time() > 1200 < 1800,alias(-(time() > 1200 < 2000), "negative"))` + r1 := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, 0, 1, nan, nan}, + Timestamps: timestampsExpected, + } + r2 := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{nan, nan, 1, 0.5, 0, nan}, + Timestamps: timestampsExpected, + } + r2.MetricName.MetricGroup = []byte("negative") + resultExpected := []netstorage.Result{r1, r2} + f(q, resultExpected) + }) t.Run(`range_first(time())`, func(t *testing.T) { t.Parallel() q := `range_first(time())` @@ -7829,6 +7978,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_first(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_first(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1400, 1400, 1400, 1400, 1400, 1400}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_mad(time())`, func(t *testing.T) { t.Parallel() q := `range_mad(time())` @@ -7840,6 +8000,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_mad(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_mad(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{100, 100, 100, 100, 100, 100}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_max(time())`, func(t *testing.T) { t.Parallel() q := `range_max(time())` @@ -7851,6 +8022,39 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_max(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_max(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1600, 1600, 1600, 1600, 1600, 1600}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) + t.Run(`range_sum(time())`, func(t *testing.T) { + t.Parallel() + q := `range_sum(time())` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{9000, 9000, 9000, 9000, 9000, 9000}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) + t.Run(`range_sum(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_sum(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{3000, 3000, 3000, 3000, 3000, 3000}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_last(time())`, func(t *testing.T) { t.Parallel() q := `range_last(time())` @@ -7862,6 +8066,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_last(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_last(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1600, 1600, 1600, 1600, 1600, 1600}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_linear_regression(time())`, func(t *testing.T) { t.Parallel() q := `range_linear_regression(time())` @@ -7884,6 +8099,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run(`range_linear_regression(time() > 1200 < 1800)`, func(t *testing.T) { + t.Parallel() + q := `range_linear_regression(time() > 1200 < 1800)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1000, 1200, 1400, 1600, 1800, 2000}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run(`range_linear_regression(100/time())`, func(t *testing.T) { t.Parallel() q := `sort_desc(round(( diff --git a/app/vmselect/promql/transform.go b/app/vmselect/promql/transform.go index 9cac71c790..a0754d692b 100644 --- a/app/vmselect/promql/transform.go +++ b/app/vmselect/promql/transform.go @@ -1544,10 +1544,8 @@ func transformRangeFirst(tfa *transformFuncArg) ([]*timeseries, error) { continue } vFirst := values[0] - for i, v := range values { - if math.IsNaN(v) { - continue - } + values = ts.Values + for i := range values { values[i] = vFirst } } @@ -1571,10 +1569,8 @@ func setLastValues(tss []*timeseries) { continue } vLast := values[len(values)-1] - for i, v := range values { - if math.IsNaN(v) { - continue - } + values = ts.Values + for i := range values { values[i] = vLast } } diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 99abd04619..47188d071f 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -40,6 +40,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert): do not send notifications without labels to Alertmanager. Such notifications are rejected by Alertmanager anyway. Before, vmalert could send alert notifications even if no label-value pairs left after applying `alert_relabel_configs` from [notifier config](https://docs.victoriametrics.com/vmalert/#notifier-configuration-file). * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert/): properly update value of variable `$activeAt` in rules annotation during replay mode. Before, `$activeAt` could have provided incorrect values during replay. * BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): properly handle `c1 AND c2` and `c1 OR c1` queries for constants `c1` and `c2`. Previously such queries could return unexpected results. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6637). +* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): consistently return the first non-`NaN` value from [`range_first`](https://docs.victoriametrics.com/metricsql/#range_first) function across all the returned data points. Previously `NaN` data points weren't replaced with the first non-`NaN` value. +* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/metricsql/): consistently return the last non-`NaN` value from [`range_last`](https://docs.victoriametrics.com/metricsql/#range_last) function across all the returned data points. Previously `NaN` data points weren't replaced with the last non-`NaN` value. * BUGFIX: all VictoriaMetrics components: increase default value of `-loggerMaxArgLen` cmd-line flag from 1000 to 5000. This should improve visibility on errors produced by very long queries. ## [v1.103.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0) From 109772bdc4ae682030636186d26c3ef560c98b7d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 23 Sep 2024 16:09:10 +0200 Subject: [PATCH 077/128] lib/cgroup: round GOMAXPROCS to the lower integer value of cpuQuota Rounding GOMAXPROCS to the upper interger value of cpuQuota increases chances of CPU starvation, non-optimimal goroutine scheduling and additional CPU overhead related to context switching. So it is better to round GOMAXPROCS to the lower integer value of cpuQuota. --- lib/cgroup/cpu.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/cgroup/cpu.go b/lib/cgroup/cpu.go index 15a007adff..0904973e96 100644 --- a/lib/cgroup/cpu.go +++ b/lib/cgroup/cpu.go @@ -37,15 +37,20 @@ func updateGOMAXPROCSToCPUQuota(cpuQuota float64) { // Do not override explicitly set GOMAXPROCS. return } - gomaxprocs := int(cpuQuota + 0.5) + + // Round gomaxprocs to the floor of cpuQuota, since Go runtime doesn't work well + // with fractional available CPU cores. + gomaxprocs := int(cpuQuota) + if gomaxprocs <= 0 { + gomaxprocs = 1 + } + numCPU := runtime.NumCPU() if gomaxprocs > numCPU { // There is no sense in setting more GOMAXPROCS than the number of available CPU cores. gomaxprocs = numCPU } - if gomaxprocs <= 0 { - gomaxprocs = 1 - } + runtime.GOMAXPROCS(gomaxprocs) } From 4d0b41e63b96fcf338026c8cac12322f37588565 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 23 Sep 2024 16:54:42 +0200 Subject: [PATCH 078/128] deployment: add panel and alerts for displying go scheduler latency (#7078) The panel and alerting rule should help to understand whether VM component doesn't have enough CPU resources or gets throttled. The alert is applicable for all VM components. The panel was added to vmalert, vmagent, vmsingle, vm clusert and victorialogs dashes. ------------------- This alerting rule should have help us identify resource shortage for sandbox vmagent - see [this link](https://play.victoriametrics.com/select/accounting/1/6a716b0f-38bc-4856-90ce-448fd713e3fe/prometheus/graph/#/?g0.range_input=23d13h25m25s424ms&g0.end_input=2024-09-23T14%3A11%3A00&g0.relative_time=none&g0.tab=0&g0.expr=histogram_quantile%280.99%2C+sum%28rate%28go_sched_latencies_seconds_bucket%7Bjob%3D%22vmagent-monitoring-vmagent%22%7D%5B5m%5D%29%29+by+%28le%2C+job%2C+instance%29%29+%3E+0.1) for example. We weren't aware of resource shortage, because VM metrics assumed this vmagent had 1vCPU while in fact its limit was 0.2vCPU. Signed-off-by: hagen1778 --- dashboards/victorialogs.json | 2992 ++++++++++---------- dashboards/victoriametrics-cluster.json | 309 +- dashboards/victoriametrics.json | 207 +- dashboards/vm/victoriametrics-cluster.json | 309 +- dashboards/vm/victoriametrics.json | 207 +- dashboards/vm/vmagent.json | 257 +- dashboards/vm/vmalert.json | 142 +- dashboards/vmagent.json | 257 +- dashboards/vmalert.json | 142 +- deployment/docker/alerts-health.yml | 12 + docs/changelog/CHANGELOG.md | 2 + 11 files changed, 2872 insertions(+), 1964 deletions(-) diff --git a/dashboards/victorialogs.json b/dashboards/victorialogs.json index 60f282df5f..68c0d630a0 100644 --- a/dashboards/victorialogs.json +++ b/dashboards/victorialogs.json @@ -1117,1450 +1117,1558 @@ "y": 22 }, "id": 28, - "panels": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Percentage of used memory (resident).\nThe application's performance will significantly degrade when memory usage is close to 100%.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 38, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "exemplar": false, + "expr": "max(\n max_over_time(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)", + "interval": "", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "RSS memory % usage ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 40, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "expr": "sum(go_memstats_sys_bytes{job=~\"$job\", instance=~\"$instance\"}) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "requested from system", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "expr": "sum(go_memstats_heap_inuse_bytes{job=~\"$job\", instance=~\"$instance\"}) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "heap inuse", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "expr": "sum(go_memstats_stack_inuse_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "stack inuse", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "expr": "sum(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "resident", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "exemplar": false, + "expr": "sum(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "resident anonymous", + "refId": "E" + } + ], + "title": "Memory usage ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Share for memory allocated by the process itself. When memory usage reaches 100% it will be likely OOM-killed.\nSafe memory usage % considered to be below 80%", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 42, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "exemplar": false, + "expr": "max(\n max_over_time(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)", + "interval": "", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "RSS anonymous memory % usage ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 44, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "exemplar": false, + "expr": "max(\n rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_cpu_cores{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "CPU % usage ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the percentage of open file descriptors compared to the limit set in the OS.\nReaching the limit of open files can cause various issues and must be prevented.\n\nSee how to change limits here https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 2, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "max" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C4162A", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 46, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max_over_time(process_open_fds{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n/\nprocess_max_fds{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Open FDs ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 48, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU cores used", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "exemplar": false, + "expr": "process_cpu_cores_available{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Limit", + "refId": "B" + } + ], + "title": "CPU ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 27 + }, + "id": 50, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "sum(go_goroutines{job=~\"$job\", instance=~\"$instance\"}) by(instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Goroutines ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the number of bytes read/write from the storage layer.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "read" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 52, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "expr": "sum(rate(process_io_storage_read_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "read", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "expr": "sum(rate(process_io_storage_written_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "write", + "refId": "B" + } + ], + "title": "Disk writes/reads ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 35 + }, + "id": 54, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "sum(process_num_threads{job=~\"$job\", instance=~\"$instance\"}) by(instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Threads ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the number of read/write syscalls such as read, pread, write, pwrite.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "read calls" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 35 + }, + "id": 56, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "sum(rate(process_io_read_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "read calls", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "sum(rate(process_io_write_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "write calls", + "range": true, + "refId": "B" + } + ], + "title": "Disk write/read calls ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 43 + }, + "id": 58, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "sum(rate(vm_tcplistener_accepts_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "TCP connections rate ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 43 + }, + "id": 60, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "sum(vm_tcplistener_conns{job=~\"$job\", instance=~\"$instance\"}) by(instance)", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "TCP connections ($instance)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 51 + }, + "id": 61, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" + } + ], "title": "Resource usage", "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "Percentage of used memory (resident).\nThe application's performance will significantly degrade when memory usage is close to 100%.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 23 - }, - "id": 38, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "exemplar": false, - "expr": "max(\n max_over_time(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)", - "interval": "", - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "RSS memory % usage ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 23 - }, - "id": 40, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "expr": "sum(go_memstats_sys_bytes{job=~\"$job\", instance=~\"$instance\"}) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"})", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "requested from system", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "expr": "sum(go_memstats_heap_inuse_bytes{job=~\"$job\", instance=~\"$instance\"}) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"})", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "heap inuse", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "expr": "sum(go_memstats_stack_inuse_bytes{job=~\"$job\", instance=~\"$instance\"})", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "stack inuse", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "expr": "sum(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"})", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "resident", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "exemplar": false, - "expr": "sum(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"})", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "resident anonymous", - "refId": "E" - } - ], - "title": "Memory usage ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "Share for memory allocated by the process itself. When memory usage reaches 100% it will be likely OOM-killed.\nSafe memory usage % considered to be below 80%", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 31 - }, - "id": 42, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "exemplar": false, - "expr": "max(\n max_over_time(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)", - "interval": "", - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "RSS anonymous memory % usage ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 31 - }, - "id": 44, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "exemplar": false, - "expr": "max(\n rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_cpu_cores{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "CPU % usage ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "Shows the percentage of open file descriptors compared to the limit set in the OS.\nReaching the limit of open files can cause various issues and must be prevented.\n\nSee how to change limits here https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "max" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#C4162A", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 39 - }, - "id": 46, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "max_over_time(process_open_fds{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n/\nprocess_max_fds{job=~\"$job\", instance=~\"$instance\"}", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 2, - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "Open FDs ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Limit" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#F2495C", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 39 - }, - "id": 48, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "CPU cores used", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "exemplar": false, - "expr": "process_cpu_cores_available{job=~\"$job\", instance=~\"$instance\"}", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Limit", - "refId": "B" - } - ], - "title": "CPU ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 47 - }, - "id": 50, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "sum(go_goroutines{job=~\"$job\", instance=~\"$instance\"}) by(instance)", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "Goroutines ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "Shows the number of bytes read/write from the storage layer.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "read" - }, - "properties": [ - { - "id": "custom.transform", - "value": "negative-Y" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 47 - }, - "id": 52, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "expr": "sum(rate(process_io_storage_read_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "read", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "expr": "sum(rate(process_io_storage_written_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "write", - "refId": "B" - } - ], - "title": "Disk writes/reads ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 55 - }, - "id": 54, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "sum(process_num_threads{job=~\"$job\", instance=~\"$instance\"}) by(instance)", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "Threads ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "Shows the number of read/write syscalls such as read, pread, write, pwrite.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "read calls" - }, - "properties": [ - { - "id": "custom.transform", - "value": "negative-Y" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 55 - }, - "id": 56, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "sum(rate(process_io_read_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "read calls", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "sum(rate(process_io_write_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", - "format": "time_series", - "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "write calls", - "range": true, - "refId": "B" - } - ], - "title": "Disk write/read calls ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 63 - }, - "id": 58, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "sum(rate(vm_tcplistener_accepts_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance)", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "TCP connections rate ($instance)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 63 - }, - "id": 60, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last *", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.1.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "$ds" - }, - "editorMode": "code", - "expr": "sum(vm_tcplistener_conns{job=~\"$job\", instance=~\"$instance\"}) by(instance)", - "format": "time_series", - "hide": false, - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "TCP connections ($instance)", - "type": "timeseries" } ], "refresh": "", diff --git a/dashboards/victoriametrics-cluster.json b/dashboards/victoriametrics-cluster.json index 1c57d7d5eb..00104d37ad 100644 --- a/dashboards/victoriametrics-cluster.json +++ b/dashboards/victoriametrics-cluster.json @@ -1659,7 +1659,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1667,8 +1668,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [] }, @@ -1679,7 +1679,6 @@ "y": 3 }, "id": 66, - "links": [], "options": { "legend": { "calcs": [ @@ -2268,8 +2267,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [ { @@ -2293,7 +2291,6 @@ "y": 19 }, "id": 204, - "links": [], "options": { "legend": { "calcs": [ @@ -2399,7 +2396,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2407,8 +2405,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2419,7 +2416,6 @@ "y": 27 }, "id": 68, - "links": [], "options": { "legend": { "calcs": [ @@ -2506,7 +2502,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2514,8 +2511,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2613,7 +2609,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2621,8 +2618,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2633,7 +2629,6 @@ "y": 35 }, "id": 70, - "links": [], "options": { "legend": { "calcs": [ @@ -2720,7 +2715,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2728,8 +2724,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2828,7 +2823,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2836,8 +2832,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [] }, @@ -2848,7 +2843,6 @@ "y": 43 }, "id": 210, - "links": [], "options": { "legend": { "calcs": [ @@ -2884,6 +2878,113 @@ ], "title": "CPU spent on GC ($instance)", "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 43 + }, + "id": 213, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" } ], "title": "Resource usage ($job)", @@ -2913,7 +3014,7 @@ "h": 2, "w": 24, "x": 0, - "y": 4 + "y": 12 }, "id": 211, "links": [], @@ -3011,7 +3112,7 @@ "h": 8, "w": 12, "x": 0, - "y": 23 + "y": 31 }, "id": 102, "options": { @@ -3125,7 +3226,7 @@ "h": 8, "w": 12, "x": 12, - "y": 23 + "y": 31 }, "id": 108, "options": { @@ -3226,7 +3327,7 @@ "h": 8, "w": 12, "x": 0, - "y": 31 + "y": 39 }, "id": 142, "links": [ @@ -3338,7 +3439,7 @@ "h": 8, "w": 12, "x": 12, - "y": 31 + "y": 39 }, "id": 107, "options": { @@ -3439,7 +3540,7 @@ "h": 8, "w": 12, "x": 0, - "y": 39 + "y": 47 }, "id": 170, "links": [], @@ -3545,7 +3646,7 @@ "h": 8, "w": 12, "x": 12, - "y": 39 + "y": 47 }, "id": 116, "links": [], @@ -3647,7 +3748,7 @@ "h": 9, "w": 12, "x": 0, - "y": 47 + "y": 55 }, "id": 144, "options": { @@ -3750,7 +3851,7 @@ "h": 9, "w": 12, "x": 12, - "y": 47 + "y": 55 }, "id": 58, "links": [], @@ -3856,7 +3957,7 @@ "h": 6, "w": 24, "x": 0, - "y": 56 + "y": 64 }, "id": 183, "options": { @@ -3984,7 +4085,7 @@ "h": 8, "w": 12, "x": 0, - "y": 62 + "y": 70 }, "id": 135, "options": { @@ -4106,7 +4207,7 @@ "h": 9, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 76, "links": [], @@ -4222,7 +4323,7 @@ "h": 9, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 86, "links": [], @@ -4347,7 +4448,7 @@ "h": 8, "w": 12, "x": 0, - "y": 46 + "y": 54 }, "id": 80, "links": [], @@ -4452,7 +4553,7 @@ "h": 8, "w": 12, "x": 12, - "y": 46 + "y": 54 }, "id": 78, "links": [], @@ -4568,7 +4669,7 @@ "h": 8, "w": 12, "x": 0, - "y": 54 + "y": 62 }, "id": 82, "options": { @@ -4675,7 +4776,7 @@ "h": 8, "w": 12, "x": 12, - "y": 54 + "y": 62 }, "id": 74, "options": { @@ -4779,8 +4880,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4796,7 +4896,7 @@ "h": 8, "w": 12, "x": 0, - "y": 6 + "y": 14 }, "id": 100, "options": { @@ -4892,8 +4992,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4909,7 +5008,7 @@ "h": 8, "w": 12, "x": 12, - "y": 6 + "y": 14 }, "id": 113, "options": { @@ -5006,8 +5105,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5023,7 +5121,7 @@ "h": 7, "w": 12, "x": 0, - "y": 14 + "y": 22 }, "id": 151, "options": { @@ -5153,8 +5251,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5170,7 +5267,7 @@ "h": 7, "w": 12, "x": 12, - "y": 14 + "y": 22 }, "id": 167, "options": { @@ -5292,8 +5389,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5325,7 +5421,7 @@ "h": 8, "w": 12, "x": 0, - "y": 21 + "y": 29 }, "id": 212, "links": [ @@ -5434,8 +5530,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5467,7 +5562,7 @@ "h": 8, "w": 12, "x": 12, - "y": 21 + "y": 29 }, "id": 133, "options": { @@ -5572,8 +5667,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5589,7 +5683,7 @@ "h": 8, "w": 12, "x": 0, - "y": 29 + "y": 37 }, "id": 54, "options": { @@ -5678,8 +5772,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5695,7 +5788,7 @@ "h": 8, "w": 12, "x": 12, - "y": 29 + "y": 37 }, "id": 55, "options": { @@ -5789,8 +5882,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5806,7 +5898,7 @@ "h": 8, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 20, "options": { @@ -5924,8 +6016,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5941,7 +6032,7 @@ "h": 8, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 22, "options": { @@ -6038,8 +6129,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] }, @@ -6051,7 +6141,7 @@ "h": 8, "w": 12, "x": 0, - "y": 45 + "y": 53 }, "id": 202, "options": { @@ -6155,8 +6245,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -6189,7 +6278,7 @@ "h": 8, "w": 12, "x": 12, - "y": 45 + "y": 53 }, "id": 14, "options": { @@ -6293,8 +6382,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -6323,7 +6411,7 @@ "h": 8, "w": 12, "x": 0, - "y": 53 + "y": 61 }, "id": 206, "options": { @@ -6424,8 +6512,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -6441,7 +6528,7 @@ "h": 8, "w": 12, "x": 12, - "y": 53 + "y": 61 }, "id": 141, "links": [ @@ -6564,7 +6651,7 @@ "h": 8, "w": 12, "x": 0, - "y": 50 + "y": 58 }, "id": 92, "links": [], @@ -6690,7 +6777,7 @@ "h": 8, "w": 12, "x": 12, - "y": 50 + "y": 58 }, "id": 95, "links": [], @@ -6812,7 +6899,7 @@ "h": 8, "w": 12, "x": 0, - "y": 58 + "y": 66 }, "id": 163, "links": [], @@ -6956,7 +7043,7 @@ "h": 8, "w": 12, "x": 12, - "y": 58 + "y": 66 }, "id": 165, "links": [], @@ -7096,7 +7183,7 @@ "h": 8, "w": 12, "x": 0, - "y": 66 + "y": 74 }, "id": 178, "links": [], @@ -7203,7 +7290,7 @@ "h": 8, "w": 12, "x": 12, - "y": 66 + "y": 74 }, "id": 180, "links": [], @@ -7310,7 +7397,7 @@ "h": 8, "w": 12, "x": 0, - "y": 74 + "y": 82 }, "id": 179, "links": [], @@ -7417,7 +7504,7 @@ "h": 8, "w": 12, "x": 12, - "y": 74 + "y": 82 }, "id": 181, "links": [], @@ -7535,7 +7622,7 @@ "h": 8, "w": 12, "x": 0, - "y": 82 + "y": 90 }, "id": 93, "links": [], @@ -7665,7 +7752,7 @@ "h": 8, "w": 12, "x": 12, - "y": 82 + "y": 90 }, "id": 207, "links": [], @@ -7801,7 +7888,7 @@ "h": 8, "w": 12, "x": 0, - "y": 51 + "y": 59 }, "id": 97, "links": [], @@ -7927,7 +8014,7 @@ "h": 8, "w": 12, "x": 12, - "y": 51 + "y": 59 }, "id": 99, "links": [], @@ -8051,7 +8138,7 @@ "h": 8, "w": 12, "x": 0, - "y": 59 + "y": 67 }, "id": 185, "links": [], @@ -8195,7 +8282,7 @@ "h": 8, "w": 12, "x": 12, - "y": 59 + "y": 67 }, "id": 187, "links": [], @@ -8335,7 +8422,7 @@ "h": 8, "w": 12, "x": 0, - "y": 67 + "y": 75 }, "id": 139, "links": [], @@ -8442,7 +8529,7 @@ "h": 8, "w": 12, "x": 12, - "y": 67 + "y": 75 }, "id": 114, "links": [], @@ -8557,7 +8644,7 @@ "h": 8, "w": 12, "x": 0, - "y": 75 + "y": 83 }, "id": 208, "links": [], @@ -8687,7 +8774,7 @@ "h": 8, "w": 12, "x": 12, - "y": 75 + "y": 83 }, "id": 209, "links": [], @@ -8806,7 +8893,7 @@ "h": 8, "w": 12, "x": 12, - "y": 83 + "y": 91 }, "id": 88, "links": [], @@ -8871,7 +8958,7 @@ "h": 2, "w": 24, "x": 0, - "y": 100 + "y": 108 }, "id": 198, "options": { @@ -8947,7 +9034,7 @@ "h": 8, "w": 12, "x": 0, - "y": 102 + "y": 110 }, "id": 189, "links": [], @@ -9048,7 +9135,7 @@ "h": 8, "w": 12, "x": 12, - "y": 102 + "y": 110 }, "id": 190, "links": [], @@ -9149,7 +9236,7 @@ "h": 7, "w": 12, "x": 0, - "y": 110 + "y": 118 }, "id": 192, "links": [], @@ -9256,7 +9343,7 @@ "h": 7, "w": 12, "x": 12, - "y": 110 + "y": 118 }, "id": 196, "links": [], @@ -9358,7 +9445,7 @@ "h": 8, "w": 12, "x": 0, - "y": 117 + "y": 125 }, "id": 200, "links": [], @@ -9459,7 +9546,7 @@ "h": 8, "w": 12, "x": 12, - "y": 117 + "y": 125 }, "id": 201, "links": [], @@ -9578,7 +9665,7 @@ "h": 8, "w": 12, "x": 0, - "y": 125 + "y": 133 }, "id": 203, "links": [], diff --git a/dashboards/victoriametrics.json b/dashboards/victoriametrics.json index 3703a5558d..c189aa5b28 100644 --- a/dashboards/victoriametrics.json +++ b/dashboards/victoriametrics.json @@ -1569,7 +1569,7 @@ "h": 8, "w": 12, "x": 0, - "y": 31 + "y": 3 }, "id": 112, "links": [], @@ -1677,10 +1677,9 @@ "h": 8, "w": 12, "x": 12, - "y": 31 + "y": 3 }, "id": 44, - "links": [], "options": { "legend": { "calcs": [ @@ -1845,7 +1844,7 @@ "h": 8, "w": 12, "x": 0, - "y": 39 + "y": 11 }, "id": 123, "links": [], @@ -1952,10 +1951,9 @@ "h": 8, "w": 12, "x": 12, - "y": 39 + "y": 11 }, "id": 114, - "links": [], "options": { "legend": { "calcs": [ @@ -2046,7 +2044,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2054,8 +2053,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [ { @@ -2079,10 +2077,9 @@ "h": 8, "w": 12, "x": 0, - "y": 47 + "y": 19 }, "id": 75, - "links": [], "options": { "legend": { "calcs": [ @@ -2172,7 +2169,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2180,8 +2178,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [ { @@ -2205,10 +2202,9 @@ "h": 8, "w": 12, "x": 12, - "y": 47 + "y": 19 }, "id": 57, - "links": [], "options": { "legend": { "calcs": [ @@ -2313,7 +2309,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2321,8 +2318,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2330,10 +2326,9 @@ "h": 8, "w": 12, "x": 0, - "y": 55 + "y": 27 }, "id": 47, - "links": [], "options": { "legend": { "calcs": [ @@ -2420,7 +2415,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2428,8 +2424,7 @@ } ] }, - "unit": "bytes", - "unitScale": true + "unit": "bytes" }, "overrides": [ { @@ -2450,10 +2445,9 @@ "h": 8, "w": 12, "x": 12, - "y": 55 + "y": 27 }, "id": 76, - "links": [], "options": { "legend": { "calcs": [ @@ -2558,7 +2552,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2566,8 +2561,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2575,10 +2569,9 @@ "h": 8, "w": 12, "x": 0, - "y": 63 + "y": 35 }, "id": 48, - "links": [], "options": { "legend": { "calcs": [ @@ -2665,7 +2658,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2673,8 +2667,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [ { @@ -2695,10 +2688,9 @@ "h": 8, "w": 12, "x": 12, - "y": 63 + "y": 35 }, "id": 124, - "links": [], "options": { "legend": { "calcs": [ @@ -2803,7 +2795,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2811,8 +2804,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2820,10 +2812,9 @@ "h": 8, "w": 12, "x": 0, - "y": 71 + "y": 43 }, "id": 49, - "links": [], "options": { "legend": { "calcs": [ @@ -2912,7 +2903,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2920,8 +2912,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2929,10 +2920,9 @@ "h": 8, "w": 12, "x": 12, - "y": 71 + "y": 43 }, "id": 37, - "links": [], "options": { "legend": { "calcs": [ @@ -3020,7 +3010,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3028,8 +3019,7 @@ } ] }, - "unit": "decbits", - "unitScale": true + "unit": "decbits" }, "overrides": [ { @@ -3050,10 +3040,9 @@ "h": 8, "w": 12, "x": 0, - "y": 79 + "y": 51 }, "id": 127, - "links": [], "options": { "legend": { "calcs": [ @@ -3157,7 +3146,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3165,8 +3155,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [] }, @@ -3174,10 +3163,9 @@ "h": 8, "w": 12, "x": 12, - "y": 79 + "y": 51 }, "id": 125, - "links": [], "options": { "legend": { "calcs": [ @@ -3213,6 +3201,113 @@ ], "title": "CPU spent on GC", "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 59 + }, + "id": 128, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" } ], "targets": [ diff --git a/dashboards/vm/victoriametrics-cluster.json b/dashboards/vm/victoriametrics-cluster.json index dabd1bcff3..3df5c1a0fa 100644 --- a/dashboards/vm/victoriametrics-cluster.json +++ b/dashboards/vm/victoriametrics-cluster.json @@ -1660,7 +1660,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1668,8 +1669,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [] }, @@ -1680,7 +1680,6 @@ "y": 3 }, "id": 66, - "links": [], "options": { "legend": { "calcs": [ @@ -2269,8 +2268,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [ { @@ -2294,7 +2292,6 @@ "y": 19 }, "id": 204, - "links": [], "options": { "legend": { "calcs": [ @@ -2400,7 +2397,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2408,8 +2406,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2420,7 +2417,6 @@ "y": 27 }, "id": 68, - "links": [], "options": { "legend": { "calcs": [ @@ -2507,7 +2503,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2515,8 +2512,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2614,7 +2610,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2622,8 +2619,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2634,7 +2630,6 @@ "y": 35 }, "id": 70, - "links": [], "options": { "legend": { "calcs": [ @@ -2721,7 +2716,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2729,8 +2725,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2829,7 +2824,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2837,8 +2833,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [] }, @@ -2849,7 +2844,6 @@ "y": 43 }, "id": 210, - "links": [], "options": { "legend": { "calcs": [ @@ -2885,6 +2879,113 @@ ], "title": "CPU spent on GC ($instance)", "type": "timeseries" + }, + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 43 + }, + "id": 213, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" } ], "title": "Resource usage ($job)", @@ -2914,7 +3015,7 @@ "h": 2, "w": 24, "x": 0, - "y": 4 + "y": 12 }, "id": 211, "links": [], @@ -3012,7 +3113,7 @@ "h": 8, "w": 12, "x": 0, - "y": 23 + "y": 31 }, "id": 102, "options": { @@ -3126,7 +3227,7 @@ "h": 8, "w": 12, "x": 12, - "y": 23 + "y": 31 }, "id": 108, "options": { @@ -3227,7 +3328,7 @@ "h": 8, "w": 12, "x": 0, - "y": 31 + "y": 39 }, "id": 142, "links": [ @@ -3339,7 +3440,7 @@ "h": 8, "w": 12, "x": 12, - "y": 31 + "y": 39 }, "id": 107, "options": { @@ -3440,7 +3541,7 @@ "h": 8, "w": 12, "x": 0, - "y": 39 + "y": 47 }, "id": 170, "links": [], @@ -3546,7 +3647,7 @@ "h": 8, "w": 12, "x": 12, - "y": 39 + "y": 47 }, "id": 116, "links": [], @@ -3648,7 +3749,7 @@ "h": 9, "w": 12, "x": 0, - "y": 47 + "y": 55 }, "id": 144, "options": { @@ -3751,7 +3852,7 @@ "h": 9, "w": 12, "x": 12, - "y": 47 + "y": 55 }, "id": 58, "links": [], @@ -3857,7 +3958,7 @@ "h": 6, "w": 24, "x": 0, - "y": 56 + "y": 64 }, "id": 183, "options": { @@ -3985,7 +4086,7 @@ "h": 8, "w": 12, "x": 0, - "y": 62 + "y": 70 }, "id": 135, "options": { @@ -4107,7 +4208,7 @@ "h": 9, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 76, "links": [], @@ -4223,7 +4324,7 @@ "h": 9, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 86, "links": [], @@ -4348,7 +4449,7 @@ "h": 8, "w": 12, "x": 0, - "y": 46 + "y": 54 }, "id": 80, "links": [], @@ -4453,7 +4554,7 @@ "h": 8, "w": 12, "x": 12, - "y": 46 + "y": 54 }, "id": 78, "links": [], @@ -4569,7 +4670,7 @@ "h": 8, "w": 12, "x": 0, - "y": 54 + "y": 62 }, "id": 82, "options": { @@ -4676,7 +4777,7 @@ "h": 8, "w": 12, "x": 12, - "y": 54 + "y": 62 }, "id": 74, "options": { @@ -4780,8 +4881,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4797,7 +4897,7 @@ "h": 8, "w": 12, "x": 0, - "y": 6 + "y": 14 }, "id": 100, "options": { @@ -4893,8 +4993,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4910,7 +5009,7 @@ "h": 8, "w": 12, "x": 12, - "y": 6 + "y": 14 }, "id": 113, "options": { @@ -5007,8 +5106,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5024,7 +5122,7 @@ "h": 7, "w": 12, "x": 0, - "y": 14 + "y": 22 }, "id": 151, "options": { @@ -5154,8 +5252,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5171,7 +5268,7 @@ "h": 7, "w": 12, "x": 12, - "y": 14 + "y": 22 }, "id": 167, "options": { @@ -5293,8 +5390,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5326,7 +5422,7 @@ "h": 8, "w": 12, "x": 0, - "y": 21 + "y": 29 }, "id": 212, "links": [ @@ -5435,8 +5531,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5468,7 +5563,7 @@ "h": 8, "w": 12, "x": 12, - "y": 21 + "y": 29 }, "id": 133, "options": { @@ -5573,8 +5668,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5590,7 +5684,7 @@ "h": 8, "w": 12, "x": 0, - "y": 29 + "y": 37 }, "id": 54, "options": { @@ -5679,8 +5773,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5696,7 +5789,7 @@ "h": 8, "w": 12, "x": 12, - "y": 29 + "y": 37 }, "id": 55, "options": { @@ -5790,8 +5883,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5807,7 +5899,7 @@ "h": 8, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 20, "options": { @@ -5925,8 +6017,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -5942,7 +6033,7 @@ "h": 8, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 22, "options": { @@ -6039,8 +6130,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] }, @@ -6052,7 +6142,7 @@ "h": 8, "w": 12, "x": 0, - "y": 45 + "y": 53 }, "id": 202, "options": { @@ -6156,8 +6246,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -6190,7 +6279,7 @@ "h": 8, "w": 12, "x": 12, - "y": 45 + "y": 53 }, "id": 14, "options": { @@ -6294,8 +6383,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -6324,7 +6412,7 @@ "h": 8, "w": 12, "x": 0, - "y": 53 + "y": 61 }, "id": 206, "options": { @@ -6425,8 +6513,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -6442,7 +6529,7 @@ "h": 8, "w": 12, "x": 12, - "y": 53 + "y": 61 }, "id": 141, "links": [ @@ -6565,7 +6652,7 @@ "h": 8, "w": 12, "x": 0, - "y": 50 + "y": 58 }, "id": 92, "links": [], @@ -6691,7 +6778,7 @@ "h": 8, "w": 12, "x": 12, - "y": 50 + "y": 58 }, "id": 95, "links": [], @@ -6813,7 +6900,7 @@ "h": 8, "w": 12, "x": 0, - "y": 58 + "y": 66 }, "id": 163, "links": [], @@ -6957,7 +7044,7 @@ "h": 8, "w": 12, "x": 12, - "y": 58 + "y": 66 }, "id": 165, "links": [], @@ -7097,7 +7184,7 @@ "h": 8, "w": 12, "x": 0, - "y": 66 + "y": 74 }, "id": 178, "links": [], @@ -7204,7 +7291,7 @@ "h": 8, "w": 12, "x": 12, - "y": 66 + "y": 74 }, "id": 180, "links": [], @@ -7311,7 +7398,7 @@ "h": 8, "w": 12, "x": 0, - "y": 74 + "y": 82 }, "id": 179, "links": [], @@ -7418,7 +7505,7 @@ "h": 8, "w": 12, "x": 12, - "y": 74 + "y": 82 }, "id": 181, "links": [], @@ -7536,7 +7623,7 @@ "h": 8, "w": 12, "x": 0, - "y": 82 + "y": 90 }, "id": 93, "links": [], @@ -7666,7 +7753,7 @@ "h": 8, "w": 12, "x": 12, - "y": 82 + "y": 90 }, "id": 207, "links": [], @@ -7802,7 +7889,7 @@ "h": 8, "w": 12, "x": 0, - "y": 51 + "y": 59 }, "id": 97, "links": [], @@ -7928,7 +8015,7 @@ "h": 8, "w": 12, "x": 12, - "y": 51 + "y": 59 }, "id": 99, "links": [], @@ -8052,7 +8139,7 @@ "h": 8, "w": 12, "x": 0, - "y": 59 + "y": 67 }, "id": 185, "links": [], @@ -8196,7 +8283,7 @@ "h": 8, "w": 12, "x": 12, - "y": 59 + "y": 67 }, "id": 187, "links": [], @@ -8336,7 +8423,7 @@ "h": 8, "w": 12, "x": 0, - "y": 67 + "y": 75 }, "id": 139, "links": [], @@ -8443,7 +8530,7 @@ "h": 8, "w": 12, "x": 12, - "y": 67 + "y": 75 }, "id": 114, "links": [], @@ -8558,7 +8645,7 @@ "h": 8, "w": 12, "x": 0, - "y": 75 + "y": 83 }, "id": 208, "links": [], @@ -8688,7 +8775,7 @@ "h": 8, "w": 12, "x": 12, - "y": 75 + "y": 83 }, "id": 209, "links": [], @@ -8807,7 +8894,7 @@ "h": 8, "w": 12, "x": 12, - "y": 83 + "y": 91 }, "id": 88, "links": [], @@ -8872,7 +8959,7 @@ "h": 2, "w": 24, "x": 0, - "y": 100 + "y": 108 }, "id": 198, "options": { @@ -8948,7 +9035,7 @@ "h": 8, "w": 12, "x": 0, - "y": 102 + "y": 110 }, "id": 189, "links": [], @@ -9049,7 +9136,7 @@ "h": 8, "w": 12, "x": 12, - "y": 102 + "y": 110 }, "id": 190, "links": [], @@ -9150,7 +9237,7 @@ "h": 7, "w": 12, "x": 0, - "y": 110 + "y": 118 }, "id": 192, "links": [], @@ -9257,7 +9344,7 @@ "h": 7, "w": 12, "x": 12, - "y": 110 + "y": 118 }, "id": 196, "links": [], @@ -9359,7 +9446,7 @@ "h": 8, "w": 12, "x": 0, - "y": 117 + "y": 125 }, "id": 200, "links": [], @@ -9460,7 +9547,7 @@ "h": 8, "w": 12, "x": 12, - "y": 117 + "y": 125 }, "id": 201, "links": [], @@ -9579,7 +9666,7 @@ "h": 8, "w": 12, "x": 0, - "y": 125 + "y": 133 }, "id": 203, "links": [], diff --git a/dashboards/vm/victoriametrics.json b/dashboards/vm/victoriametrics.json index c324fafdd0..39cc5f80eb 100644 --- a/dashboards/vm/victoriametrics.json +++ b/dashboards/vm/victoriametrics.json @@ -1570,7 +1570,7 @@ "h": 8, "w": 12, "x": 0, - "y": 31 + "y": 3 }, "id": 112, "links": [], @@ -1678,10 +1678,9 @@ "h": 8, "w": 12, "x": 12, - "y": 31 + "y": 3 }, "id": 44, - "links": [], "options": { "legend": { "calcs": [ @@ -1846,7 +1845,7 @@ "h": 8, "w": 12, "x": 0, - "y": 39 + "y": 11 }, "id": 123, "links": [], @@ -1953,10 +1952,9 @@ "h": 8, "w": 12, "x": 12, - "y": 39 + "y": 11 }, "id": 114, - "links": [], "options": { "legend": { "calcs": [ @@ -2047,7 +2045,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2055,8 +2054,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [ { @@ -2080,10 +2078,9 @@ "h": 8, "w": 12, "x": 0, - "y": 47 + "y": 19 }, "id": 75, - "links": [], "options": { "legend": { "calcs": [ @@ -2173,7 +2170,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2181,8 +2179,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [ { @@ -2206,10 +2203,9 @@ "h": 8, "w": 12, "x": 12, - "y": 47 + "y": 19 }, "id": 57, - "links": [], "options": { "legend": { "calcs": [ @@ -2314,7 +2310,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2322,8 +2319,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2331,10 +2327,9 @@ "h": 8, "w": 12, "x": 0, - "y": 55 + "y": 27 }, "id": 47, - "links": [], "options": { "legend": { "calcs": [ @@ -2421,7 +2416,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2429,8 +2425,7 @@ } ] }, - "unit": "bytes", - "unitScale": true + "unit": "bytes" }, "overrides": [ { @@ -2451,10 +2446,9 @@ "h": 8, "w": 12, "x": 12, - "y": 55 + "y": 27 }, "id": 76, - "links": [], "options": { "legend": { "calcs": [ @@ -2559,7 +2553,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2567,8 +2562,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2576,10 +2570,9 @@ "h": 8, "w": 12, "x": 0, - "y": 63 + "y": 35 }, "id": 48, - "links": [], "options": { "legend": { "calcs": [ @@ -2666,7 +2659,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2674,8 +2668,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [ { @@ -2696,10 +2689,9 @@ "h": 8, "w": 12, "x": 12, - "y": 63 + "y": 35 }, "id": 124, - "links": [], "options": { "legend": { "calcs": [ @@ -2804,7 +2796,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2812,8 +2805,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2821,10 +2813,9 @@ "h": 8, "w": 12, "x": 0, - "y": 71 + "y": 43 }, "id": 49, - "links": [], "options": { "legend": { "calcs": [ @@ -2913,7 +2904,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2921,8 +2913,7 @@ } ] }, - "unit": "short", - "unitScale": true + "unit": "short" }, "overrides": [] }, @@ -2930,10 +2921,9 @@ "h": 8, "w": 12, "x": 12, - "y": 71 + "y": 43 }, "id": 37, - "links": [], "options": { "legend": { "calcs": [ @@ -3021,7 +3011,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3029,8 +3020,7 @@ } ] }, - "unit": "decbits", - "unitScale": true + "unit": "decbits" }, "overrides": [ { @@ -3051,10 +3041,9 @@ "h": 8, "w": 12, "x": 0, - "y": 79 + "y": 51 }, "id": 127, - "links": [], "options": { "legend": { "calcs": [ @@ -3158,7 +3147,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3166,8 +3156,7 @@ } ] }, - "unit": "percentunit", - "unitScale": true + "unit": "percentunit" }, "overrides": [] }, @@ -3175,10 +3164,9 @@ "h": 8, "w": 12, "x": 12, - "y": 79 + "y": 51 }, "id": 125, - "links": [], "options": { "legend": { "calcs": [ @@ -3214,6 +3202,113 @@ ], "title": "CPU spent on GC", "type": "timeseries" + }, + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 59 + }, + "id": 128, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" } ], "targets": [ diff --git a/dashboards/vm/vmagent.json b/dashboards/vm/vmagent.json index 244e83f09a..cbac922ee9 100644 --- a/dashboards/vm/vmagent.json +++ b/dashboards/vm/vmagent.json @@ -1635,7 +1635,7 @@ "h": 8, "w": 12, "x": 0, - "y": 11 + "y": 35 }, "id": 109, "options": { @@ -1733,7 +1733,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1749,7 +1750,7 @@ "h": 8, "w": 12, "x": 12, - "y": 11 + "y": 35 }, "id": 111, "options": { @@ -1844,7 +1845,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1873,7 +1875,7 @@ "h": 8, "w": 12, "x": 0, - "y": 19 + "y": 43 }, "id": 81, "options": { @@ -1979,7 +1981,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2008,7 +2011,7 @@ "h": 8, "w": 12, "x": 12, - "y": 19 + "y": 43 }, "id": 7, "options": { @@ -2110,7 +2113,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2126,7 +2130,7 @@ "h": 8, "w": 12, "x": 0, - "y": 27 + "y": 51 }, "id": 83, "options": { @@ -2215,7 +2219,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2231,7 +2236,7 @@ "h": 8, "w": 12, "x": 12, - "y": 27 + "y": 51 }, "id": 39, "options": { @@ -2321,7 +2326,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2337,7 +2343,7 @@ "h": 8, "w": 12, "x": 0, - "y": 35 + "y": 59 }, "id": 135, "options": { @@ -2376,6 +2382,113 @@ "title": "CPU spent on GC ($instance)", "type": "timeseries" }, + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 59 + }, + "id": 149, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" + }, { "datasource": { "type": "victoriametrics-datasource", @@ -2426,7 +2539,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2442,7 +2556,7 @@ "h": 8, "w": 12, "x": 12, - "y": 35 + "y": 67 }, "id": 41, "options": { @@ -2571,7 +2685,7 @@ "h": 8, "w": 12, "x": 0, - "y": 12 + "y": 20 }, "id": 92, "options": { @@ -2675,7 +2789,7 @@ "h": 8, "w": 12, "x": 12, - "y": 12 + "y": 20 }, "id": 95, "options": { @@ -2782,7 +2896,7 @@ "h": 8, "w": 12, "x": 0, - "y": 20 + "y": 28 }, "id": 98, "options": { @@ -2889,7 +3003,7 @@ "h": 8, "w": 12, "x": 12, - "y": 20 + "y": 28 }, "id": 99, "options": { @@ -2993,7 +3107,7 @@ "h": 8, "w": 12, "x": 0, - "y": 28 + "y": 36 }, "id": 79, "options": { @@ -3097,7 +3211,7 @@ "h": 8, "w": 12, "x": 12, - "y": 28 + "y": 36 }, "id": 18, "links": [ @@ -3207,7 +3321,7 @@ "h": 8, "w": 12, "x": 0, - "y": 36 + "y": 44 }, "id": 127, "options": { @@ -3309,7 +3423,7 @@ "h": 8, "w": 12, "x": 12, - "y": 36 + "y": 44 }, "id": 50, "options": { @@ -3409,7 +3523,7 @@ "h": 7, "w": 24, "x": 0, - "y": 44 + "y": 52 }, "id": 129, "options": { @@ -3548,8 +3662,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3565,7 +3678,7 @@ "h": 7, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 48, "options": { @@ -3655,8 +3768,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3672,7 +3784,7 @@ "h": 7, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 76, "options": { @@ -3760,8 +3872,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3777,7 +3888,7 @@ "h": 7, "w": 12, "x": 0, - "y": 44 + "y": 52 }, "id": 132, "options": { @@ -3867,8 +3978,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3884,7 +3994,7 @@ "h": 7, "w": 12, "x": 12, - "y": 44 + "y": 52 }, "id": 133, "options": { @@ -3973,8 +4083,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3990,7 +4099,7 @@ "h": 8, "w": 12, "x": 0, - "y": 51 + "y": 59 }, "id": 20, "options": { @@ -4078,8 +4187,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4095,7 +4203,7 @@ "h": 8, "w": 12, "x": 12, - "y": 51 + "y": 59 }, "id": 126, "options": { @@ -4182,8 +4290,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4199,7 +4306,7 @@ "h": 8, "w": 12, "x": 0, - "y": 59 + "y": 67 }, "id": 46, "options": { @@ -4286,8 +4393,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4303,7 +4409,7 @@ "h": 8, "w": 12, "x": 12, - "y": 59 + "y": 67 }, "id": 148, "options": { @@ -4390,8 +4496,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4407,7 +4512,7 @@ "h": 8, "w": 12, "x": 12, - "y": 67 + "y": 75 }, "id": 31, "options": { @@ -4586,7 +4691,7 @@ "h": 8, "w": 12, "x": 0, - "y": 14 + "y": 22 }, "id": 73, "options": { @@ -4703,7 +4808,7 @@ "h": 8, "w": 12, "x": 12, - "y": 6 + "y": 14 }, "id": 131, "options": { @@ -4807,7 +4912,7 @@ "h": 8, "w": 12, "x": 0, - "y": 14 + "y": 22 }, "id": 130, "options": { @@ -4924,7 +5029,7 @@ "h": 8, "w": 12, "x": 12, - "y": 14 + "y": 22 }, "id": 77, "options": { @@ -5058,7 +5163,7 @@ "h": 8, "w": 12, "x": 0, - "y": 7 + "y": 15 }, "id": 146, "options": { @@ -5160,7 +5265,7 @@ "h": 8, "w": 12, "x": 12, - "y": 7 + "y": 15 }, "id": 143, "options": { @@ -5256,7 +5361,7 @@ "h": 8, "w": 12, "x": 0, - "y": 15 + "y": 23 }, "id": 147, "options": { @@ -5359,7 +5464,7 @@ "h": 8, "w": 12, "x": 12, - "y": 15 + "y": 23 }, "id": 139, "options": { @@ -5470,7 +5575,7 @@ "h": 8, "w": 12, "x": 0, - "y": 23 + "y": 31 }, "id": 142, "options": { @@ -5567,7 +5672,7 @@ "h": 8, "w": 12, "x": 12, - "y": 23 + "y": 31 }, "id": 137, "options": { @@ -5680,7 +5785,7 @@ "h": 8, "w": 12, "x": 12, - "y": 31 + "y": 39 }, "id": 141, "options": { @@ -5811,7 +5916,7 @@ "h": 8, "w": 12, "x": 0, - "y": 8 + "y": 16 }, "id": 60, "options": { @@ -5915,7 +6020,7 @@ "h": 8, "w": 12, "x": 12, - "y": 8 + "y": 16 }, "id": 66, "options": { @@ -6019,7 +6124,7 @@ "h": 8, "w": 12, "x": 0, - "y": 16 + "y": 24 }, "id": 61, "options": { @@ -6123,7 +6228,7 @@ "h": 8, "w": 12, "x": 12, - "y": 16 + "y": 24 }, "id": 65, "options": { @@ -6226,7 +6331,7 @@ "h": 8, "w": 12, "x": 0, - "y": 24 + "y": 32 }, "id": 88, "options": { @@ -6325,7 +6430,7 @@ "h": 8, "w": 12, "x": 12, - "y": 24 + "y": 32 }, "id": 84, "options": { @@ -6428,7 +6533,7 @@ "h": 8, "w": 12, "x": 0, - "y": 32 + "y": 40 }, "id": 90, "options": { @@ -6494,7 +6599,7 @@ "h": 2, "w": 24, "x": 0, - "y": 17 + "y": 25 }, "id": 115, "options": { @@ -6572,7 +6677,7 @@ "h": 8, "w": 12, "x": 0, - "y": 19 + "y": 27 }, "id": 119, "options": { @@ -6676,7 +6781,7 @@ "h": 8, "w": 12, "x": 12, - "y": 19 + "y": 27 }, "id": 117, "options": { @@ -6782,7 +6887,7 @@ "h": 8, "w": 12, "x": 0, - "y": 27 + "y": 35 }, "id": 125, "links": [ @@ -6904,7 +7009,7 @@ "h": 8, "w": 12, "x": 12, - "y": 27 + "y": 35 }, "id": 123, "options": { @@ -7034,7 +7139,7 @@ "h": 8, "w": 12, "x": 0, - "y": 35 + "y": 43 }, "id": 121, "options": { @@ -7233,4 +7338,4 @@ "uid": "G7Z9GzMGz_vm", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/dashboards/vm/vmalert.json b/dashboards/vm/vmalert.json index 3acf3edb78..3d71e5c18c 100644 --- a/dashboards/vm/vmalert.json +++ b/dashboards/vm/vmalert.json @@ -1532,7 +1532,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1540,8 +1541,7 @@ } ] }, - "unit": "bytes", - "unitScale": true + "unit": "bytes" }, "overrides": [] }, @@ -2167,6 +2167,113 @@ ], "title": "CPU spent on GC ($instance)", "type": "timeseries" + }, + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 61, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "victoriametrics-datasource", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" } ], "targets": [ @@ -2257,7 +2364,7 @@ "h": 8, "w": 12, "x": 0, - "y": 36 + "y": 44 }, "id": 14, "options": { @@ -2359,7 +2466,7 @@ "h": 8, "w": 12, "x": 12, - "y": 36 + "y": 44 }, "id": 13, "options": { @@ -2461,7 +2568,7 @@ "h": 8, "w": 12, "x": 0, - "y": 44 + "y": 52 }, "id": 20, "options": { @@ -2564,7 +2671,7 @@ "h": 8, "w": 12, "x": 12, - "y": 44 + "y": 52 }, "id": 32, "options": { @@ -2663,7 +2770,7 @@ "h": 8, "w": 12, "x": 0, - "y": 52 + "y": 60 }, "id": 26, "options": { @@ -2790,7 +2897,7 @@ "h": 8, "w": 12, "x": 0, - "y": 51 + "y": 59 }, "id": 31, "options": { @@ -2892,7 +2999,7 @@ "h": 8, "w": 12, "x": 12, - "y": 51 + "y": 59 }, "id": 33, "options": { @@ -2993,7 +3100,7 @@ "h": 8, "w": 12, "x": 0, - "y": 59 + "y": 67 }, "id": 30, "options": { @@ -3114,7 +3221,7 @@ "h": 8, "w": 12, "x": 0, - "y": 17 + "y": 25 }, "id": 52, "options": { @@ -3206,7 +3313,7 @@ "h": 8, "w": 12, "x": 12, - "y": 17 + "y": 25 }, "id": 53, "options": { @@ -3303,7 +3410,7 @@ "h": 8, "w": 12, "x": 0, - "y": 44 + "y": 52 }, "id": 54, "options": { @@ -3390,8 +3497,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3407,9 +3513,9 @@ "h": 8, "w": 12, "x": 12, - "y": 44 + "y": 52 }, - "id": 55, + "id": 60, "options": { "legend": { "calcs": [ diff --git a/dashboards/vmagent.json b/dashboards/vmagent.json index cd26420fc4..aa664f4b41 100644 --- a/dashboards/vmagent.json +++ b/dashboards/vmagent.json @@ -1634,7 +1634,7 @@ "h": 8, "w": 12, "x": 0, - "y": 11 + "y": 35 }, "id": 109, "options": { @@ -1732,7 +1732,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1748,7 +1749,7 @@ "h": 8, "w": 12, "x": 12, - "y": 11 + "y": 35 }, "id": 111, "options": { @@ -1843,7 +1844,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1872,7 +1874,7 @@ "h": 8, "w": 12, "x": 0, - "y": 19 + "y": 43 }, "id": 81, "options": { @@ -1978,7 +1980,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2007,7 +2010,7 @@ "h": 8, "w": 12, "x": 12, - "y": 19 + "y": 43 }, "id": 7, "options": { @@ -2109,7 +2112,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2125,7 +2129,7 @@ "h": 8, "w": 12, "x": 0, - "y": 27 + "y": 51 }, "id": 83, "options": { @@ -2214,7 +2218,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2230,7 +2235,7 @@ "h": 8, "w": 12, "x": 12, - "y": 27 + "y": 51 }, "id": 39, "options": { @@ -2320,7 +2325,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2336,7 +2342,7 @@ "h": 8, "w": 12, "x": 0, - "y": 35 + "y": 59 }, "id": 135, "options": { @@ -2375,6 +2381,113 @@ "title": "CPU spent on GC ($instance)", "type": "timeseries" }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 59 + }, + "id": 149, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" + }, { "datasource": { "type": "prometheus", @@ -2425,7 +2538,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2441,7 +2555,7 @@ "h": 8, "w": 12, "x": 12, - "y": 35 + "y": 67 }, "id": 41, "options": { @@ -2570,7 +2684,7 @@ "h": 8, "w": 12, "x": 0, - "y": 12 + "y": 20 }, "id": 92, "options": { @@ -2674,7 +2788,7 @@ "h": 8, "w": 12, "x": 12, - "y": 12 + "y": 20 }, "id": 95, "options": { @@ -2781,7 +2895,7 @@ "h": 8, "w": 12, "x": 0, - "y": 20 + "y": 28 }, "id": 98, "options": { @@ -2888,7 +3002,7 @@ "h": 8, "w": 12, "x": 12, - "y": 20 + "y": 28 }, "id": 99, "options": { @@ -2992,7 +3106,7 @@ "h": 8, "w": 12, "x": 0, - "y": 28 + "y": 36 }, "id": 79, "options": { @@ -3096,7 +3210,7 @@ "h": 8, "w": 12, "x": 12, - "y": 28 + "y": 36 }, "id": 18, "links": [ @@ -3206,7 +3320,7 @@ "h": 8, "w": 12, "x": 0, - "y": 36 + "y": 44 }, "id": 127, "options": { @@ -3308,7 +3422,7 @@ "h": 8, "w": 12, "x": 12, - "y": 36 + "y": 44 }, "id": 50, "options": { @@ -3408,7 +3522,7 @@ "h": 7, "w": 24, "x": 0, - "y": 44 + "y": 52 }, "id": 129, "options": { @@ -3547,8 +3661,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3564,7 +3677,7 @@ "h": 7, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 48, "options": { @@ -3654,8 +3767,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3671,7 +3783,7 @@ "h": 7, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 76, "options": { @@ -3759,8 +3871,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3776,7 +3887,7 @@ "h": 7, "w": 12, "x": 0, - "y": 44 + "y": 52 }, "id": 132, "options": { @@ -3866,8 +3977,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3883,7 +3993,7 @@ "h": 7, "w": 12, "x": 12, - "y": 44 + "y": 52 }, "id": 133, "options": { @@ -3972,8 +4082,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3989,7 +4098,7 @@ "h": 8, "w": 12, "x": 0, - "y": 51 + "y": 59 }, "id": 20, "options": { @@ -4077,8 +4186,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4094,7 +4202,7 @@ "h": 8, "w": 12, "x": 12, - "y": 51 + "y": 59 }, "id": 126, "options": { @@ -4181,8 +4289,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4198,7 +4305,7 @@ "h": 8, "w": 12, "x": 0, - "y": 59 + "y": 67 }, "id": 46, "options": { @@ -4285,8 +4392,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4302,7 +4408,7 @@ "h": 8, "w": 12, "x": 12, - "y": 59 + "y": 67 }, "id": 148, "options": { @@ -4389,8 +4495,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4406,7 +4511,7 @@ "h": 8, "w": 12, "x": 12, - "y": 67 + "y": 75 }, "id": 31, "options": { @@ -4585,7 +4690,7 @@ "h": 8, "w": 12, "x": 0, - "y": 14 + "y": 22 }, "id": 73, "options": { @@ -4702,7 +4807,7 @@ "h": 8, "w": 12, "x": 12, - "y": 6 + "y": 14 }, "id": 131, "options": { @@ -4806,7 +4911,7 @@ "h": 8, "w": 12, "x": 0, - "y": 14 + "y": 22 }, "id": 130, "options": { @@ -4923,7 +5028,7 @@ "h": 8, "w": 12, "x": 12, - "y": 14 + "y": 22 }, "id": 77, "options": { @@ -5057,7 +5162,7 @@ "h": 8, "w": 12, "x": 0, - "y": 7 + "y": 15 }, "id": 146, "options": { @@ -5159,7 +5264,7 @@ "h": 8, "w": 12, "x": 12, - "y": 7 + "y": 15 }, "id": 143, "options": { @@ -5255,7 +5360,7 @@ "h": 8, "w": 12, "x": 0, - "y": 15 + "y": 23 }, "id": 147, "options": { @@ -5358,7 +5463,7 @@ "h": 8, "w": 12, "x": 12, - "y": 15 + "y": 23 }, "id": 139, "options": { @@ -5469,7 +5574,7 @@ "h": 8, "w": 12, "x": 0, - "y": 23 + "y": 31 }, "id": 142, "options": { @@ -5566,7 +5671,7 @@ "h": 8, "w": 12, "x": 12, - "y": 23 + "y": 31 }, "id": 137, "options": { @@ -5679,7 +5784,7 @@ "h": 8, "w": 12, "x": 12, - "y": 31 + "y": 39 }, "id": 141, "options": { @@ -5810,7 +5915,7 @@ "h": 8, "w": 12, "x": 0, - "y": 8 + "y": 16 }, "id": 60, "options": { @@ -5914,7 +6019,7 @@ "h": 8, "w": 12, "x": 12, - "y": 8 + "y": 16 }, "id": 66, "options": { @@ -6018,7 +6123,7 @@ "h": 8, "w": 12, "x": 0, - "y": 16 + "y": 24 }, "id": 61, "options": { @@ -6122,7 +6227,7 @@ "h": 8, "w": 12, "x": 12, - "y": 16 + "y": 24 }, "id": 65, "options": { @@ -6225,7 +6330,7 @@ "h": 8, "w": 12, "x": 0, - "y": 24 + "y": 32 }, "id": 88, "options": { @@ -6324,7 +6429,7 @@ "h": 8, "w": 12, "x": 12, - "y": 24 + "y": 32 }, "id": 84, "options": { @@ -6427,7 +6532,7 @@ "h": 8, "w": 12, "x": 0, - "y": 32 + "y": 40 }, "id": 90, "options": { @@ -6493,7 +6598,7 @@ "h": 2, "w": 24, "x": 0, - "y": 17 + "y": 25 }, "id": 115, "options": { @@ -6571,7 +6676,7 @@ "h": 8, "w": 12, "x": 0, - "y": 19 + "y": 27 }, "id": 119, "options": { @@ -6675,7 +6780,7 @@ "h": 8, "w": 12, "x": 12, - "y": 19 + "y": 27 }, "id": 117, "options": { @@ -6781,7 +6886,7 @@ "h": 8, "w": 12, "x": 0, - "y": 27 + "y": 35 }, "id": 125, "links": [ @@ -6903,7 +7008,7 @@ "h": 8, "w": 12, "x": 12, - "y": 27 + "y": 35 }, "id": 123, "options": { @@ -7033,7 +7138,7 @@ "h": 8, "w": 12, "x": 0, - "y": 35 + "y": 43 }, "id": 121, "options": { @@ -7232,4 +7337,4 @@ "uid": "G7Z9GzMGz", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/dashboards/vmalert.json b/dashboards/vmalert.json index d1d44ecf2e..405f438b0b 100644 --- a/dashboards/vmalert.json +++ b/dashboards/vmalert.json @@ -1531,7 +1531,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1539,8 +1540,7 @@ } ] }, - "unit": "bytes", - "unitScale": true + "unit": "bytes" }, "overrides": [] }, @@ -2166,6 +2166,113 @@ ], "title": "CPU spent on GC ($instance)", "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "description": "Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0.1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 61, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$ds" + }, + "editorMode": "code", + "expr": "max(histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))) by(job)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Go scheduling latency", + "type": "timeseries" } ], "targets": [ @@ -2256,7 +2363,7 @@ "h": 8, "w": 12, "x": 0, - "y": 36 + "y": 44 }, "id": 14, "options": { @@ -2358,7 +2465,7 @@ "h": 8, "w": 12, "x": 12, - "y": 36 + "y": 44 }, "id": 13, "options": { @@ -2460,7 +2567,7 @@ "h": 8, "w": 12, "x": 0, - "y": 44 + "y": 52 }, "id": 20, "options": { @@ -2563,7 +2670,7 @@ "h": 8, "w": 12, "x": 12, - "y": 44 + "y": 52 }, "id": 32, "options": { @@ -2662,7 +2769,7 @@ "h": 8, "w": 12, "x": 0, - "y": 52 + "y": 60 }, "id": 26, "options": { @@ -2789,7 +2896,7 @@ "h": 8, "w": 12, "x": 0, - "y": 51 + "y": 59 }, "id": 31, "options": { @@ -2891,7 +2998,7 @@ "h": 8, "w": 12, "x": 12, - "y": 51 + "y": 59 }, "id": 33, "options": { @@ -2992,7 +3099,7 @@ "h": 8, "w": 12, "x": 0, - "y": 59 + "y": 67 }, "id": 30, "options": { @@ -3113,7 +3220,7 @@ "h": 8, "w": 12, "x": 0, - "y": 17 + "y": 25 }, "id": 52, "options": { @@ -3205,7 +3312,7 @@ "h": 8, "w": 12, "x": 12, - "y": 17 + "y": 25 }, "id": 53, "options": { @@ -3302,7 +3409,7 @@ "h": 8, "w": 12, "x": 0, - "y": 44 + "y": 52 }, "id": 54, "options": { @@ -3389,8 +3496,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3406,9 +3512,9 @@ "h": 8, "w": 12, "x": 12, - "y": 44 + "y": 52 }, - "id": 55, + "id": 60, "options": { "legend": { "calcs": [ diff --git a/deployment/docker/alerts-health.yml b/deployment/docker/alerts-health.yml index 65d7fa41e3..66043210af 100644 --- a/deployment/docker/alerts-health.yml +++ b/deployment/docker/alerts-health.yml @@ -58,6 +58,18 @@ groups: Too high CPU usage may be a sign of insufficient resources and make process unstable. Consider to either increase available CPU resources or decrease the load on the process. + - alert: TooHighGoroutineSchedulingLatency + expr: histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job="vmagent-monitoring-vmagent"}[5m])) by (le, job, instance)) > 0.1 + for: 15m + labels: + severity: critical + annotations: + summary: "\"{{ $labels.job }}\"(\"{{ $labels.instance }}\") has insufficient CPU resources for >15m" + description: > + Go runtime is unable to schedule goroutines execution in acceptable time. This is usually a sign of + insufficient CPU resources or CPU throttling. Verify that service has enough CPU resources. Otherwise, + the service could work unreliably with delays in processing. + - alert: TooManyLogs expr: sum(increase(vm_log_messages_total{level="error"}[5m])) without (app_version, location) > 0 for: 15m diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 47188d071f..a0595d63b4 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -26,6 +26,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parsing `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. * FEATURE: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): add new metrics for data ingestion: `vm_rows_received_by_storage_total`, `vm_rows_ignored_total{reason="nan_value"}`, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`. See this [PR](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6663) for details. * FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change request method for `/query_range` and `/query` calls from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). +* FEATURE: [dashboards](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards) for VM single-node, cluster, vmalert, vmagent, VictoriaLogs: add `Go scheduling latency` panel to show the 99th quantile of Go goroutines scheduling. This panel should help identifying insufficient CPU resources for the service. It is especially useful if CPU gets throttled, which now should be visible on this panel. +* FEATURE: [alerts](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/deployment/docker/alerts-health.yml): add alerting rule to track the Go scheduling latency for goroutines. It should notify users if VM component doesn't have enough CPU to run or gets throttled. * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. From a5c002edef47e9165c9dac008053907b5fa2133a Mon Sep 17 00:00:00 2001 From: hagen1778 Date: Tue, 24 Sep 2024 11:48:19 +0200 Subject: [PATCH 079/128] deployment/alerts: fix copy&paste typo in TooHighGoroutineSchedulingLatency Signed-off-by: hagen1778 --- deployment/docker/alerts-health.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/docker/alerts-health.yml b/deployment/docker/alerts-health.yml index 66043210af..98713d9d19 100644 --- a/deployment/docker/alerts-health.yml +++ b/deployment/docker/alerts-health.yml @@ -59,7 +59,7 @@ groups: Consider to either increase available CPU resources or decrease the load on the process. - alert: TooHighGoroutineSchedulingLatency - expr: histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job="vmagent-monitoring-vmagent"}[5m])) by (le, job, instance)) > 0.1 + expr: histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket[5m])) by (le, job, instance)) > 0.1 for: 15m labels: severity: critical From 524579d9bd8011e0fde587d269ed618d3d701df5 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:50:50 +0300 Subject: [PATCH 080/128] Automatic update operator docs from VictoriaMetrics/operator@75bc1b4 (#7080) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: AndrewChubatiuk <3162380+AndrewChubatiuk@users.noreply.github.com> --- docs/operator/CHANGELOG.md | 1 + docs/operator/api.md | 53 +++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index 439aee76f9..c36d443b99 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -12,6 +12,7 @@ aliases: --- - [api](https://docs.victoriametrics.com/operator/api): adds new fields `useVMConfigReloader`, `configReloaderImageTag`, `configReloaderResources` to to the `VMagent`, `VMAlert`, `VMAuth`, and `VMAlertmanager`. +- [api/vmalertmanager](https://docs.victoriametrics.com/operator/api/index.html#vmalertmanagerspec): adds new field `enforcedTopRouteMatchers`. It adds given alert label matchers to the top route of any `VMAlertmanagerConfig`. See this [issue](https://github.com/VictoriaMetrics/operator/issues/1096) for details. - [api](https://docs.victoriametrics.com/operator/api): adds underscore version of `host_aliases` setting, which has priority over `hostAliases`. - [api](https://docs.victoriametrics.com/operator/api): adds `useDefaultResources` setting to the all applications. It has priority over global operator setting. - [api](https://docs.victoriametrics.com/operator/api): adds `clusterDomainName` to the `VMCluster` and `VMAlertmanager`. It defines optional suffix for in-cluster addresses. diff --git a/docs/operator/api.md b/docs/operator/api.md index f050db77bf..32ea1f4d2c 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -42,7 +42,7 @@ Package v1beta1 contains API Schema definitions for the victoriametrics v1beta1 #### APIServerConfig -_Underlying type:_ _[struct{Host string "json:\"host\""; BasicAuth *BasicAuth "json:\"basicAuth,omitempty\""; BearerToken string "json:\"bearerToken,omitempty\""; BearerTokenFile string "json:\"bearerTokenFile,omitempty\""; TLSConfig *TLSConfig "json:\"tlsConfig,omitempty\""; Authorization *Authorization "json:\"authorization,omitempty\""}](#struct{host-string-"json:\"host\"";-basicauth-*basicauth-"json:\"basicauth,omitempty\"";-bearertoken-string-"json:\"bearertoken,omitempty\"";-bearertokenfile-string-"json:\"bearertokenfile,omitempty\"";-tlsconfig-*tlsconfig-"json:\"tlsconfig,omitempty\"";-authorization-*authorization-"json:\"authorization,omitempty\""})_ + APIServerConfig defines a host and auth methods to access apiserver. @@ -55,7 +55,7 @@ _Appears in:_ #### AdditionalServiceSpec -_Underlying type:_ _[struct{UseAsDefault bool "json:\"useAsDefault,omitempty\""; EmbeddedObjectMetadata "json:\"metadata,omitempty\""; Spec k8s.io/api/core/v1.ServiceSpec "json:\"spec\""}](#struct{useasdefault-bool-"json:\"useasdefault,omitempty\"";-embeddedobjectmetadata-"json:\"metadata,omitempty\"";-spec-k8sioapicorev1servicespec-"json:\"spec\""})_ + ServiceSpec defines additional service for CRD with user-defined params. by default, some of fields can be inherited from default service definition for the CRD: @@ -559,7 +559,7 @@ _Appears in:_ #### EmbeddedIngress -_Underlying type:_ _[struct{ClassName *string "json:\"class_name,omitempty\""; EmbeddedObjectMetadata "json:\",inline\""; TlsHosts []string "json:\"tlsHosts,omitempty\""; TlsSecretName string "json:\"tlsSecretName,omitempty\""; ExtraRules []k8s.io/api/networking/v1.IngressRule "json:\"extraRules,omitempty\""; ExtraTLS []k8s.io/api/networking/v1.IngressTLS "json:\"extraTls,omitempty\""; Host string "json:\"host,omitempty\""}](#struct{classname-*string-"json:\"class_name,omitempty\"";-embeddedobjectmetadata-"json:\",inline\"";-tlshosts-[]string-"json:\"tlshosts,omitempty\"";-tlssecretname-string-"json:\"tlssecretname,omitempty\"";-extrarules-[]k8sioapinetworkingv1ingressrule-"json:\"extrarules,omitempty\"";-extratls-[]k8sioapinetworkingv1ingresstls-"json:\"extratls,omitempty\"";-host-string-"json:\"host,omitempty\""})_ + EmbeddedIngress describes ingress configuration options. @@ -572,7 +572,7 @@ _Appears in:_ #### EmbeddedObjectMetadata -_Underlying type:_ _[struct{Name string "json:\"name,omitempty\" protobuf:\"bytes,1,opt,name=name\""; Labels map[string]string "json:\"labels,omitempty\" protobuf:\"bytes,11,rep,name=labels\""; Annotations map[string]string "json:\"annotations,omitempty\" protobuf:\"bytes,12,rep,name=annotations\""}](#struct{name-string-"json:\"name,omitempty\"-protobuf:\"bytes,1,opt,name=name\"";-labels-map[string]string-"json:\"labels,omitempty\"-protobuf:\"bytes,11,rep,name=labels\"";-annotations-map[string]string-"json:\"annotations,omitempty\"-protobuf:\"bytes,12,rep,name=annotations\""})_ + EmbeddedObjectMetadata contains a subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta Only fields which are relevant to embedded resources are included. @@ -594,7 +594,7 @@ _Appears in:_ #### EmbeddedPodDisruptionBudgetSpec -_Underlying type:_ _[struct{MinAvailable *k8s.io/apimachinery/pkg/util/intstr.IntOrString "json:\"minAvailable,omitempty\""; MaxUnavailable *k8s.io/apimachinery/pkg/util/intstr.IntOrString "json:\"maxUnavailable,omitempty\""; SelectorLabels map[string]string "json:\"selectorLabels,omitempty\""}](#struct{minavailable-*k8sioapimachinerypkgutilintstrintorstring-"json:\"minavailable,omitempty\"";-maxunavailable-*k8sioapimachinerypkgutilintstrintorstring-"json:\"maxunavailable,omitempty\"";-selectorlabels-map[string]string-"json:\"selectorlabels,omitempty\""})_ + @@ -610,7 +610,7 @@ _Appears in:_ #### EmbeddedProbes -_Underlying type:_ _[struct{LivenessProbe *k8s.io/api/core/v1.Probe "json:\"livenessProbe,omitempty\""; ReadinessProbe *k8s.io/api/core/v1.Probe "json:\"readinessProbe,omitempty\""; StartupProbe *k8s.io/api/core/v1.Probe "json:\"startupProbe,omitempty\""}](#struct{livenessprobe-*k8sioapicorev1probe-"json:\"livenessprobe,omitempty\"";-readinessprobe-*k8sioapicorev1probe-"json:\"readinessprobe,omitempty\"";-startupprobe-*k8sioapicorev1probe-"json:\"startupprobe,omitempty\""})_ + EmbeddedProbes - it allows to override some probe params. its not necessary to specify all options, @@ -758,7 +758,7 @@ _Appears in:_ #### HTTPAuth -_Underlying type:_ _[struct{BasicAuth *BasicAuth "json:\"basicAuth,omitempty\""; OAuth2 *OAuth2 "json:\"oauth2,omitempty\""; TLSConfig *TLSConfig "json:\"tlsConfig,omitempty\""; *BearerAuth "json:\",inline,omitempty\""; Headers []string "json:\"headers,omitempty\""}](#struct{basicauth-*basicauth-"json:\"basicauth,omitempty\"";-oauth2-*oauth2-"json:\"oauth2,omitempty\"";-tlsconfig-*tlsconfig-"json:\"tlsconfig,omitempty\"";-*bearerauth-"json:\",inline,omitempty\"";-headers-[]string-"json:\"headers,omitempty\""})_ + HTTPAuth generic auth used with http protocols @@ -827,7 +827,7 @@ _Appears in:_ #### Image -_Underlying type:_ _[struct{Repository string "json:\"repository,omitempty\""; Tag string "json:\"tag,omitempty\""; PullPolicy k8s.io/api/core/v1.PullPolicy "json:\"pullPolicy,omitempty\""}](#struct{repository-string-"json:\"repository,omitempty\"";-tag-string-"json:\"tag,omitempty\"";-pullpolicy-k8sioapicorev1pullpolicy-"json:\"pullpolicy,omitempty\""})_ + Image defines docker image settings @@ -888,7 +888,7 @@ _Appears in:_ #### InsertPorts -_Underlying type:_ _[struct{GraphitePort string "json:\"graphitePort,omitempty\""; InfluxPort string "json:\"influxPort,omitempty\""; OpenTSDBHTTPPort string "json:\"openTSDBHTTPPort,omitempty\""; OpenTSDBPort string "json:\"openTSDBPort,omitempty\""}](#struct{graphiteport-string-"json:\"graphiteport,omitempty\"";-influxport-string-"json:\"influxport,omitempty\"";-opentsdbhttpport-string-"json:\"opentsdbhttpport,omitempty\"";-opentsdbport-string-"json:\"opentsdbport,omitempty\""})_ + @@ -950,7 +950,7 @@ _Appears in:_ #### License -_Underlying type:_ _[struct{Key *string "json:\"key,omitempty\""; KeyRef *k8s.io/api/core/v1.SecretKeySelector "json:\"keyRef,omitempty\""}](#struct{key-*string-"json:\"key,omitempty\"";-keyref-*k8sioapicorev1secretkeyselector-"json:\"keyref,omitempty\""})_ + License holds license key for enterprise features. Using license key is supported starting from VictoriaMetrics v1.94.0. @@ -1663,7 +1663,7 @@ _Appears in:_ #### StorageSpec -_Underlying type:_ _[struct{DisableMountSubPath bool "json:\"disableMountSubPath,omitempty\""; EmptyDir *k8s.io/api/core/v1.EmptyDirVolumeSource "json:\"emptyDir,omitempty\""; VolumeClaimTemplate EmbeddedPersistentVolumeClaim "json:\"volumeClaimTemplate,omitempty\""}](#struct{disablemountsubpath-bool-"json:\"disablemountsubpath,omitempty\"";-emptydir-*k8sioapicorev1emptydirvolumesource-"json:\"emptydir,omitempty\"";-volumeclaimtemplate-embeddedpersistentvolumeclaim-"json:\"volumeclaimtemplate,omitempty\""})_ + StorageSpec defines the configured storage for a group Prometheus servers. If neither `emptyDir` nor `volumeClaimTemplate` is specified, then by default an [EmptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) will be used. @@ -1678,7 +1678,7 @@ _Appears in:_ #### StreamAggrConfig -_Underlying type:_ _[struct{Rules []StreamAggrRule "json:\"rules\""; RuleConfigMap *k8s.io/api/core/v1.ConfigMapKeySelector "json:\"configmap,omitempty\""; KeepInput bool "json:\"keepInput,omitempty\""; DropInput bool "json:\"dropInput,omitempty\""; DedupInterval string "json:\"dedupInterval,omitempty\""; DropInputLabels []string "json:\"dropInputLabels,omitempty\""; IgnoreFirstIntervals int "json:\"ignoreFirstIntervals,omitempty\""; IgnoreOldSamples bool "json:\"ignoreOldSamples,omitempty\""}](#struct{rules-[]streamaggrrule-"json:\"rules\"";-ruleconfigmap-*k8sioapicorev1configmapkeyselector-"json:\"configmap,omitempty\"";-keepinput-bool-"json:\"keepinput,omitempty\"";-dropinput-bool-"json:\"dropinput,omitempty\"";-dedupinterval-string-"json:\"dedupinterval,omitempty\"";-dropinputlabels-[]string-"json:\"dropinputlabels,omitempty\"";-ignorefirstintervals-int-"json:\"ignorefirstintervals,omitempty\"";-ignoreoldsamples-bool-"json:\"ignoreoldsamples,omitempty\""})_ + StreamAggrConfig defines the stream aggregation config @@ -1694,7 +1694,7 @@ _Appears in:_ #### StringOrArray -_Underlying type:_ _string array_ + StringOrArray is a helper type for storing string or array of string. @@ -1986,7 +1986,7 @@ _Appears in:_ #### UnauthorizedAccessConfigURLMap -_Underlying type:_ _[struct{SrcPaths []string "json:\"src_paths,omitempty\""; SrcHosts []string "json:\"src_hosts,omitempty\""; URLPrefix []string "json:\"url_prefix,omitempty\""; URLMapCommon "json:\",omitempty\""}](#struct{srcpaths-[]string-"json:\"src_paths,omitempty\"";-srchosts-[]string-"json:\"src_hosts,omitempty\"";-urlprefix-[]string-"json:\"url_prefix,omitempty\"";-urlmapcommon-"json:\",omitempty\""})_ + @@ -1999,7 +1999,7 @@ _Appears in:_ #### UpdateStatus -_Underlying type:_ _string_ + UpdateStatus defines status for application @@ -2145,7 +2145,7 @@ or any other Prometheus-compatible storage system that supports the remote_write #### VMAgentRemoteWriteSettings -_Underlying type:_ _[struct{MaxBlockSize *int32 "json:\"maxBlockSize,omitempty\""; MaxDiskUsagePerURL *int64 "json:\"maxDiskUsagePerURL,omitempty\""; Queues *int32 "json:\"queues,omitempty\""; ShowURL *bool "json:\"showURL,omitempty\""; TmpDataPath *string "json:\"tmpDataPath,omitempty\""; FlushInterval *string "json:\"flushInterval,omitempty\""; Labels map[string]string "json:\"label,omitempty\""; UseMultiTenantMode bool "json:\"useMultiTenantMode,omitempty\""}](#struct{maxblocksize-*int32-"json:\"maxblocksize,omitempty\"";-maxdiskusageperurl-*int64-"json:\"maxdiskusageperurl,omitempty\"";-queues-*int32-"json:\"queues,omitempty\"";-showurl-*bool-"json:\"showurl,omitempty\"";-tmpdatapath-*string-"json:\"tmpdatapath,omitempty\"";-flushinterval-*string-"json:\"flushinterval,omitempty\"";-labels-map[string]string-"json:\"label,omitempty\"";-usemultitenantmode-bool-"json:\"usemultitenantmode,omitempty\""})_ + VMAgentRemoteWriteSettings - defines global settings for all remoteWrite urls. @@ -2158,7 +2158,7 @@ _Appears in:_ #### VMAgentRemoteWriteSpec -_Underlying type:_ _[struct{URL string "json:\"url\""; BasicAuth *BasicAuth "json:\"basicAuth,omitempty\""; BearerTokenSecret *k8s.io/api/core/v1.SecretKeySelector "json:\"bearerTokenSecret,omitempty\""; UrlRelabelConfig *k8s.io/api/core/v1.ConfigMapKeySelector "json:\"urlRelabelConfig,omitempty\""; InlineUrlRelabelConfig []RelabelConfig "json:\"inlineUrlRelabelConfig,omitempty\""; OAuth2 *OAuth2 "json:\"oauth2,omitempty\""; TLSConfig *TLSConfig "json:\"tlsConfig,omitempty\""; SendTimeout *string "json:\"sendTimeout,omitempty\""; Headers []string "json:\"headers,omitempty\""; StreamAggrConfig *StreamAggrConfig "json:\"streamAggrConfig,omitempty\""}](#struct{url-string-"json:\"url\"";-basicauth-*basicauth-"json:\"basicauth,omitempty\"";-bearertokensecret-*k8sioapicorev1secretkeyselector-"json:\"bearertokensecret,omitempty\"";-urlrelabelconfig-*k8sioapicorev1configmapkeyselector-"json:\"urlrelabelconfig,omitempty\"";-inlineurlrelabelconfig-[]relabelconfig-"json:\"inlineurlrelabelconfig,omitempty\"";-oauth2-*oauth2-"json:\"oauth2,omitempty\"";-tlsconfig-*tlsconfig-"json:\"tlsconfig,omitempty\"";-sendtimeout-*string-"json:\"sendtimeout,omitempty\"";-headers-[]string-"json:\"headers,omitempty\"";-streamaggrconfig-*streamaggrconfig-"json:\"streamaggrconfig,omitempty\""})_ + VMAgentRemoteWriteSpec defines the remote storage configuration for VmAgent @@ -2335,7 +2335,7 @@ _Appears in:_ #### VMAlertNotifierSpec -_Underlying type:_ _[struct{URL string "json:\"url,omitempty\""; Selector *DiscoverySelector "json:\"selector,omitempty\""; HTTPAuth "json:\",inline,omitempty\""}](#struct{url-string-"json:\"url,omitempty\"";-selector-*discoveryselector-"json:\"selector,omitempty\"";-httpauth-"json:\",inline,omitempty\""})_ + VMAlertNotifierSpec defines the notifier url for sending information about alerts @@ -2348,7 +2348,7 @@ _Appears in:_ #### VMAlertRemoteReadSpec -_Underlying type:_ _[struct{URL string "json:\"url\""; Lookback *string "json:\"lookback,omitempty\""; HTTPAuth "json:\",inline,omitempty\""}](#struct{url-string-"json:\"url\"";-lookback-*string-"json:\"lookback,omitempty\"";-httpauth-"json:\",inline,omitempty\""})_ + VMAlertRemoteReadSpec defines the remote storage configuration for VmAlert to read alerts from @@ -2361,7 +2361,7 @@ _Appears in:_ #### VMAlertRemoteWriteSpec -_Underlying type:_ _[struct{URL string "json:\"url\""; Concurrency *int32 "json:\"concurrency,omitempty\""; FlushInterval *string "json:\"flushInterval,omitempty\""; MaxBatchSize *int32 "json:\"maxBatchSize,omitempty\""; MaxQueueSize *int32 "json:\"maxQueueSize,omitempty\""; HTTPAuth "json:\",inline,omitempty\""}](#struct{url-string-"json:\"url\"";-concurrency-*int32-"json:\"concurrency,omitempty\"";-flushinterval-*string-"json:\"flushinterval,omitempty\"";-maxbatchsize-*int32-"json:\"maxbatchsize,omitempty\"";-maxqueuesize-*int32-"json:\"maxqueuesize,omitempty\"";-httpauth-"json:\",inline,omitempty\""})_ + VMAlertRemoteWriteSpec defines the remote storage configuration for VmAlert @@ -2536,11 +2536,12 @@ _Appears in:_ | `configSecret` | ConfigSecret is the name of a Kubernetes Secret in the same namespace as the
    VMAlertmanager object, which contains configuration for this VMAlertmanager,
    configuration must be inside secret key: alertmanager.yaml.
    It must be created by user.
    instance. Defaults to 'vmalertmanager-'
    The secret is mounted into /etc/alertmanager/config. | _string_ | false | | `configSelector` | ConfigSelector defines selector for VMAlertmanagerConfig, result config will be merged with with Raw or Secret config.
    Works in combination with NamespaceSelector.
    NamespaceSelector nil - only objects at VMAlertmanager namespace.
    Selector nil - only objects at NamespaceSelector namespaces.
    If both nil - behaviour controlled by selectAllByDefault | _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#labelselector-v1-meta)_ | false | | `containers` | Containers property allows to inject additions sidecars or to patch existing containers.
    It can be useful for proxies, backup, etc. | _[Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#container-v1-core) array_ | false | -| `disableNamespaceMatcher` | DisableNamespaceMatcher disables namespace label matcher for VMAlertmanagerConfig
    It may be useful if alert doesn't have namespace label for some reason | _boolean_ | false | +| `disableNamespaceMatcher` | DisableNamespaceMatcher disables top route namespace label matcher for VMAlertmanagerConfig
    It may be useful if alert doesn't have namespace label for some reason | _boolean_ | false | | `disableRouteContinueEnforce` | DisableRouteContinueEnforce cancel the behavior for VMAlertmanagerConfig that always enforce first-level route continue to true | _boolean_ | false | | `disableSelfServiceScrape` | DisableSelfServiceScrape controls creation of VMServiceScrape by operator
    for the application.
    Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable | _boolean_ | true | | `dnsConfig` | Specifies the DNS parameters of a pod.
    Parameters specified here will be merged to the generated DNS
    configuration based on DNSPolicy. | _[PodDNSConfig](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#poddnsconfig-v1-core)_ | false | | `dnsPolicy` | DNSPolicy sets DNS policy for the pod | _[DNSPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#dnspolicy-v1-core)_ | false | +| `enforcedTopRouteMatchers` | EnforcedTopRouteMatchers defines label matchers to be added for the top route
    of VMAlertmanagerConfig
    It allows to make some set of labels required for alerts.
    https://prometheus.io/docs/alerting/latest/configuration/#matcher | _string array_ | true | | `externalURL` | ExternalURL the VMAlertmanager instances will be available under. This is
    necessary to generate correct URLs. This is necessary if VMAlertmanager is not
    served from root of a DNS name. | _string_ | false | | `extraArgs` | ExtraArgs that will be passed to the application container
    for example remoteWrite.tmpDataPath: /tmp | _object (keys:string, values:string)_ | false | | `extraEnvs` | ExtraEnvs that will be passed to the application container | _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core) array_ | false | @@ -2775,7 +2776,7 @@ _Appears in:_ #### VMInsert -_Underlying type:_ _[struct{PodMetadata *EmbeddedObjectMetadata "json:\"podMetadata,omitempty\""; LogFormat string "json:\"logFormat,omitempty\""; LogLevel string "json:\"logLevel,omitempty\""; InsertPorts *InsertPorts "json:\"insertPorts,omitempty\""; ClusterNativePort string "json:\"clusterNativeListenPort,omitempty\""; ServiceSpec *AdditionalServiceSpec "json:\"serviceSpec,omitempty\""; ServiceScrapeSpec *VMServiceScrapeSpec "json:\"serviceScrapeSpec,omitempty\""; UpdateStrategy *k8s.io/api/apps/v1.DeploymentStrategyType "json:\"updateStrategy,omitempty\""; RollingUpdate *k8s.io/api/apps/v1.RollingUpdateDeployment "json:\"rollingUpdate,omitempty\""; PodDisruptionBudget *EmbeddedPodDisruptionBudgetSpec "json:\"podDisruptionBudget,omitempty\""; *EmbeddedProbes "json:\",inline\""; HPA *EmbeddedHPA "json:\"hpa,omitempty\""; CommonDefaultableParams "json:\",inline\""; CommonApplicationDeploymentParams "json:\",inline\""}](#struct{podmetadata-*embeddedobjectmetadata-"json:\"podmetadata,omitempty\"";-logformat-string-"json:\"logformat,omitempty\"";-loglevel-string-"json:\"loglevel,omitempty\"";-insertports-*insertports-"json:\"insertports,omitempty\"";-clusternativeport-string-"json:\"clusternativelistenport,omitempty\"";-servicespec-*additionalservicespec-"json:\"servicespec,omitempty\"";-servicescrapespec-*vmservicescrapespec-"json:\"servicescrapespec,omitempty\"";-updatestrategy-*k8sioapiappsv1deploymentstrategytype-"json:\"updatestrategy,omitempty\"";-rollingupdate-*k8sioapiappsv1rollingupdatedeployment-"json:\"rollingupdate,omitempty\"";-poddisruptionbudget-*embeddedpoddisruptionbudgetspec-"json:\"poddisruptionbudget,omitempty\"";-*embeddedprobes-"json:\",inline\"";-hpa-*embeddedhpa-"json:\"hpa,omitempty\"";-commondefaultableparams-"json:\",inline\"";-commonapplicationdeploymentparams-"json:\",inline\""})_ + @@ -3169,7 +3170,7 @@ _Appears in:_ #### VMSelect -_Underlying type:_ _[struct{PodMetadata *EmbeddedObjectMetadata "json:\"podMetadata,omitempty\""; LogFormat string "json:\"logFormat,omitempty\""; LogLevel string "json:\"logLevel,omitempty\""; CacheMountPath string "json:\"cacheMountPath,omitempty\""; Storage *StorageSpec "json:\"persistentVolume,omitempty\""; StorageSpec *StorageSpec "json:\"storage,omitempty\""; ClusterNativePort string "json:\"clusterNativeListenPort,omitempty\""; ServiceSpec *AdditionalServiceSpec "json:\"serviceSpec,omitempty\""; ServiceScrapeSpec *VMServiceScrapeSpec "json:\"serviceScrapeSpec,omitempty\""; PodDisruptionBudget *EmbeddedPodDisruptionBudgetSpec "json:\"podDisruptionBudget,omitempty\""; *EmbeddedProbes "json:\",inline\""; HPA *EmbeddedHPA "json:\"hpa,omitempty\""; RollingUpdateStrategy k8s.io/api/apps/v1.StatefulSetUpdateStrategyType "json:\"rollingUpdateStrategy,omitempty\""; ClaimTemplates []k8s.io/api/core/v1.PersistentVolumeClaim "json:\"claimTemplates,omitempty\""; CommonDefaultableParams "json:\",inline\""; CommonApplicationDeploymentParams "json:\",inline\""}](#struct{podmetadata-*embeddedobjectmetadata-"json:\"podmetadata,omitempty\"";-logformat-string-"json:\"logformat,omitempty\"";-loglevel-string-"json:\"loglevel,omitempty\"";-cachemountpath-string-"json:\"cachemountpath,omitempty\"";-storage-*storagespec-"json:\"persistentvolume,omitempty\"";-storagespec-*storagespec-"json:\"storage,omitempty\"";-clusternativeport-string-"json:\"clusternativelistenport,omitempty\"";-servicespec-*additionalservicespec-"json:\"servicespec,omitempty\"";-servicescrapespec-*vmservicescrapespec-"json:\"servicescrapespec,omitempty\"";-poddisruptionbudget-*embeddedpoddisruptionbudgetspec-"json:\"poddisruptionbudget,omitempty\"";-*embeddedprobes-"json:\",inline\"";-hpa-*embeddedhpa-"json:\"hpa,omitempty\"";-rollingupdatestrategy-k8sioapiappsv1statefulsetupdatestrategytype-"json:\"rollingupdatestrategy,omitempty\"";-claimtemplates-[]k8sioapicorev1persistentvolumeclaim-"json:\"claimtemplates,omitempty\"";-commondefaultableparams-"json:\",inline\"";-commonapplicationdeploymentparams-"json:\",inline\""})_ + @@ -3203,7 +3204,7 @@ result config will scrape service endpoints #### VMServiceScrapeSpec -_Underlying type:_ _[struct{DiscoveryRole string "json:\"discoveryRole,omitempty\""; JobLabel string "json:\"jobLabel,omitempty\""; TargetLabels []string "json:\"targetLabels,omitempty\""; PodTargetLabels []string "json:\"podTargetLabels,omitempty\""; Endpoints []Endpoint "json:\"endpoints\""; Selector k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector "json:\"selector,omitempty\""; NamespaceSelector NamespaceSelector "json:\"namespaceSelector,omitempty\""; SampleLimit uint64 "json:\"sampleLimit,omitempty\""; SeriesLimit uint64 "json:\"seriesLimit,omitempty\""; AttachMetadata AttachMetadata "json:\"attach_metadata,omitempty\""}](#struct{discoveryrole-string-"json:\"discoveryrole,omitempty\"";-joblabel-string-"json:\"joblabel,omitempty\"";-targetlabels-[]string-"json:\"targetlabels,omitempty\"";-podtargetlabels-[]string-"json:\"podtargetlabels,omitempty\"";-endpoints-[]endpoint-"json:\"endpoints\"";-selector-k8sioapimachinerypkgapismetav1labelselector-"json:\"selector,omitempty\"";-namespaceselector-namespaceselector-"json:\"namespaceselector,omitempty\"";-samplelimit-uint64-"json:\"samplelimit,omitempty\"";-serieslimit-uint64-"json:\"serieslimit,omitempty\"";-attachmetadata-attachmetadata-"json:\"attach_metadata,omitempty\""})_ + VMServiceScrapeSpec defines the desired state of VMServiceScrape @@ -3343,7 +3344,7 @@ _Appears in:_ #### VMStorage -_Underlying type:_ _[struct{PodMetadata *EmbeddedObjectMetadata "json:\"podMetadata,omitempty\""; LogFormat string "json:\"logFormat,omitempty\""; LogLevel string "json:\"logLevel,omitempty\""; StorageDataPath string "json:\"storageDataPath,omitempty\""; Storage *StorageSpec "json:\"storage,omitempty\""; VMInsertPort string "json:\"vmInsertPort,omitempty\""; VMSelectPort string "json:\"vmSelectPort,omitempty\""; VMBackup *VMBackup "json:\"vmBackup,omitempty\""; ServiceSpec *AdditionalServiceSpec "json:\"serviceSpec,omitempty\""; ServiceScrapeSpec *VMServiceScrapeSpec "json:\"serviceScrapeSpec,omitempty\""; PodDisruptionBudget *EmbeddedPodDisruptionBudgetSpec "json:\"podDisruptionBudget,omitempty\""; *EmbeddedProbes "json:\",inline\""; MaintenanceInsertNodeIDs []int32 "json:\"maintenanceInsertNodeIDs,omitempty\""; MaintenanceSelectNodeIDs []int32 "json:\"maintenanceSelectNodeIDs,omitempty\""; RollingUpdateStrategy k8s.io/api/apps/v1.StatefulSetUpdateStrategyType "json:\"rollingUpdateStrategy,omitempty\""; ClaimTemplates []k8s.io/api/core/v1.PersistentVolumeClaim "json:\"claimTemplates,omitempty\""; CommonDefaultableParams "json:\",inline\""; CommonApplicationDeploymentParams "json:\",inline\""}](#struct{podmetadata-*embeddedobjectmetadata-"json:\"podmetadata,omitempty\"";-logformat-string-"json:\"logformat,omitempty\"";-loglevel-string-"json:\"loglevel,omitempty\"";-storagedatapath-string-"json:\"storagedatapath,omitempty\"";-storage-*storagespec-"json:\"storage,omitempty\"";-vminsertport-string-"json:\"vminsertport,omitempty\"";-vmselectport-string-"json:\"vmselectport,omitempty\"";-vmbackup-*vmbackup-"json:\"vmbackup,omitempty\"";-servicespec-*additionalservicespec-"json:\"servicespec,omitempty\"";-servicescrapespec-*vmservicescrapespec-"json:\"servicescrapespec,omitempty\"";-poddisruptionbudget-*embeddedpoddisruptionbudgetspec-"json:\"poddisruptionbudget,omitempty\"";-*embeddedprobes-"json:\",inline\"";-maintenanceinsertnodeids-[]int32-"json:\"maintenanceinsertnodeids,omitempty\"";-maintenanceselectnodeids-[]int32-"json:\"maintenanceselectnodeids,omitempty\"";-rollingupdatestrategy-k8sioapiappsv1statefulsetupdatestrategytype-"json:\"rollingupdatestrategy,omitempty\"";-claimtemplates-[]k8sioapicorev1persistentvolumeclaim-"json:\"claimtemplates,omitempty\"";-commondefaultableparams-"json:\",inline\"";-commonapplicationdeploymentparams-"json:\",inline\""})_ + @@ -3374,7 +3375,7 @@ VMUser is the Schema for the vmusers API #### VMUserIPFilters -_Underlying type:_ _[struct{DenyList []string "json:\"deny_list,omitempty\""; AllowList []string "json:\"allow_list,omitempty\""}](#struct{denylist-[]string-"json:\"deny_list,omitempty\"";-allowlist-[]string-"json:\"allow_list,omitempty\""})_ + VMUserIPFilters defines filters for IP addresses supported only with enterprise version of [vmauth](https://docs.victoriametrics.com/vmauth#ip-filters) From 91b28d0527a2fb5d544aba267f17a3737f0a374f Mon Sep 17 00:00:00 2001 From: Dmytro Kozlov Date: Tue, 24 Sep 2024 11:51:18 +0200 Subject: [PATCH 081/128] deployment/docker: update grafana datasources to the latest version (#7083) ### Describe Your Changes Updated grafana plugins to the latest releases ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- deployment/docker/docker-compose-victorialogs.yml | 2 +- deployment/docker/vm-datasource/docker-compose-cluster.yml | 2 +- deployment/docker/vm-datasource/docker-compose.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/docker/docker-compose-victorialogs.yml b/deployment/docker/docker-compose-victorialogs.yml index 67839539e9..8647207996 100644 --- a/deployment/docker/docker-compose-victorialogs.yml +++ b/deployment/docker/docker-compose-victorialogs.yml @@ -16,7 +16,7 @@ services: - ./../../dashboards/victoriametrics.json:/var/lib/grafana/dashboards/vm.json - ./../../dashboards/victorialogs.json:/var/lib/grafana/dashboards/vl.json environment: - - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victorialogs-datasource/releases/download/v0.4.0/victorialogs-datasource-v0.4.0.zip;victorialogs-datasource" + - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victorialogs-datasource/releases/download/v0.5.0/victorialogs-datasource-v0.5.0.zip;victorialogs-datasource" - "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=victorialogs-datasource" networks: - vm_net diff --git a/deployment/docker/vm-datasource/docker-compose-cluster.yml b/deployment/docker/vm-datasource/docker-compose-cluster.yml index 355ae662d8..c1b76ea4d2 100644 --- a/deployment/docker/vm-datasource/docker-compose-cluster.yml +++ b/deployment/docker/vm-datasource/docker-compose-cluster.yml @@ -16,6 +16,6 @@ services: - ./../../dashboards/vm/vmalert.json:/var/lib/grafana/dashboards/vmalert.json - ./../../dashboards/vm/vmauth.json:/var/lib/grafana/dashboards/vmauth.json environment: - - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victoriametrics-datasource/releases/download/v0.9.0/victoriametrics-datasource-v0.9.0.zip;victoriametrics-datasource" + - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victoriametrics-datasource/releases/download/v0.9.1/victoriametrics-datasource-v0.9.1.zip;victoriametrics-datasource" - "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=victoriametrics-datasource" restart: always diff --git a/deployment/docker/vm-datasource/docker-compose.yml b/deployment/docker/vm-datasource/docker-compose.yml index e670112641..30b95d6421 100644 --- a/deployment/docker/vm-datasource/docker-compose.yml +++ b/deployment/docker/vm-datasource/docker-compose.yml @@ -15,7 +15,7 @@ services: - ./../../dashboards/vm/vmagent.json:/var/lib/grafana/dashboards/vmagent.json - ./../../dashboards/vm/vmalert.json:/var/lib/grafana/dashboards/vmalert.json environment: - - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victoriametrics-datasource/releases/download/v0.9.0/victoriametrics-datasource-v0.9.0.zip;victoriametrics-datasource" + - "GF_INSTALL_PLUGINS=https://github.com/VictoriaMetrics/victoriametrics-datasource/releases/download/v0.9.1/victoriametrics-datasource-v0.9.1.zip;victoriametrics-datasource" - "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=victoriametrics-datasource" networks: - vm_net From fea44333621d14470dc7789d6af6fd27dfa838f1 Mon Sep 17 00:00:00 2001 From: Zhu Jiekun Date: Tue, 24 Sep 2024 17:52:09 +0800 Subject: [PATCH 082/128] docs: [VictoriaLogs] OTel Collector elasticsearchexporter header note (#7074) ### Describe Your Changes By default, the `elasticsearchexporter` in OTel Collector puts the log message under a field other than `_msg` (e.g., `Body`). Without specifying via an HTTP header, those logs may not be queried correctly. See also: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6785. This pull request updates the example configuration and notes for the `elasticsearchexporter`. ### Checklist The following checks are **mandatory**: - [X] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- docs/VictoriaLogs/data-ingestion/opentelemetry.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/VictoriaLogs/data-ingestion/opentelemetry.md b/docs/VictoriaLogs/data-ingestion/opentelemetry.md index 414a80281d..db342d9a5f 100644 --- a/docs/VictoriaLogs/data-ingestion/opentelemetry.md +++ b/docs/VictoriaLogs/data-ingestion/opentelemetry.md @@ -56,6 +56,8 @@ exporters: elasticsearch: endpoints: - http://victorialogs:9428/insert/elasticsearch + headers: + VL-Msg-Field: "Body" # Optional. receivers: filelog: include: [/tmp/logs/*.log] @@ -68,6 +70,15 @@ service: exporters: [elasticsearch] ``` +Please note that every ingested log entry **must** contain at least a `_msg` field with the actual log message. By default, +the Elasticsearch exporter may place the log message in the `Body` field. In this case, you can specify the field mapping via: +```yaml + headers: + VL-Msg-Field: "Body" +``` + +VictoriaLogs also support specify `AccountID`, `ProjectID`, log timestamp and other fields via [HTTP headers](https://docs.victoriametrics.com/victorialogs/data-ingestion/#http-headers). + ### Loki ```yaml @@ -104,7 +115,7 @@ exporters: otlphttp: logs_endpoint: http://localhost:9428/insert/opentelemetry/v1/logs headers: - VL-Stream-Fields: telemetry.sdk.language,severity + VL-Stream-Fields: telemetry.sdk.language,severity ``` See also [HTTP headers](https://docs.victoriametrics.com/victorialogs/data-ingestion/#http-headers) From df665a13c90042d6b324aa6a0a8ddf13b7289ca0 Mon Sep 17 00:00:00 2001 From: Phuong Le <39565248+func25@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:53:58 +0700 Subject: [PATCH 083/128] docs: update logos files and usage rules (#6980) ### Describe Your Changes New logos and usage guideline ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --- README.md | 37 +++++++++++++++++++------------------ VM_logo.zip | Bin 1983704 -> 4461282 bytes docs/logo.webp | Bin 8130 -> 31878 bytes docs/logo_white.webp | Bin 8286 -> 48576 bytes 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 4e5f172a82..ecb2ac0d80 100644 --- a/README.md +++ b/README.md @@ -95,30 +95,31 @@ If you like VictoriaMetrics and want to contribute, then please [read these docs ## VictoriaMetrics Logo -[Zip](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/VM_logo.zip) contains three folders with different image orientations (main color and inverted version). +The provided [ZIP file](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/VM_logo.zip) contains three folders with different logo orientations. Each folder includes the following file types: -Files included in each folder: +* JPEG: Preview files +* PNG: Preview files with transparent background +* AI: Adobe Illustrator files -* 2 JPEG Preview files -* 2 PNG Preview files with transparent background -* 2 EPS Adobe Illustrator EPS10 files +### VictoriaMetrics Logo Usage Guidelines -### Logo Usage Guidelines +#### Font -#### Font used - -* Lato Black -* Lato Regular +* Font Used: Lato Black +* Download here: [Lato Font](https://fonts.google.com/specimen/Lato) #### Color Palette -* HEX [#110f0f](https://www.color-hex.com/color/110f0f) -* HEX [#ffffff](https://www.color-hex.com/color/ffffff) +* Black [#000000](https://www.color-hex.com/color/000000) +* Purple [#4d0e82](https://www.color-hex.com/color/4d0e82) +* Orange [#ff2e00](https://www.color-hex.com/color/ff2e00) +* White [#ffffff](https://www.color-hex.com/color/ffffff) -### We kindly ask +### Logo Usage Rules -* Please don't use any other font instead of suggested. -* To keep enough clear space around the logo. -* Do not change spacing, alignment, or relative locations of the design elements. -* Do not change the proportions for any of the design elements or the design itself. - You may resize as needed but must retain all proportions. \ No newline at end of file +* Only use the Lato Black font as specified. +* Maintain sufficient clear space around the logo for visibility. +* Do not modify the spacing, alignment, or positioning of design elements. +* You may resize the logo as needed, but ensure all proportions remain intact. + +Thank you for your cooperation! \ No newline at end of file diff --git a/VM_logo.zip b/VM_logo.zip index 30e5563d91a2cce80f049613f3eda8f0a6967a7e..d4c4f07c96c22918abe11372738aeebc75c4f3f6 100644 GIT binary patch literal 4461282 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ͱz)eKTGq)^?;J#4@7-aCvb#tN^MLuCx+g< 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 Pk$$oEX8Yo~Z@1ZmW(WxS#LMMx?`+1g z2d$)Uhr`6e;oE`4Z18||8Nss(VI+&7@4cg&G`QpyAh|mmX%Ok#sDuF!+GLST||aN>yZMk{RvFE~%Mt|)zhmzfpU!CJ{!awM#y zYDEyKz2d2-E=EftMR5(cSNIuAxs{@*U6h1DW^g81mcqpM>Tr#~E#-cOj$DJMRtHn# z1(h&nkjjz<%ME48eg+MEp+^I~l?^;3iq#i9e1k8XFDTZk2*4MVWVH@`!Q*!r9(93p z{u^WogZ(uGEjZ{eXaUQi@df9PRk2ys?HVQj7i`;THmm)N5$188=cEXW$Po^m8IY7rZ>LUNBgSH7j<|8qMR#hwIVUi4+)` zQ3p*oC)uwgLTm<)nA^CR1>l-sL`xJRaDpk$=Q7<9Gs_ffj}W(1Re}|0UOS#^)2#EB z7^N{?ieI=9vI%9tUSxOzLiP@g33OU1L2XjIJhrv5Fd~3nMXb>D(*?+^v3RdiJHguOoOmLKq2ImPn0+Fwh^T0_id@y2L}{%R-pDU{mGtU489hT?<-$A3dYO@+ z`{BLg!IM*%X%jkT{1d;J#lcHH5cS)M%+cqL?9-)1b}#Vs5^KAEI@nqpzQ#^QmNVkJ z?BmRYaVqOt*GRo>G}9o?zmW0~QZNXYb!R3Rohj>ba$L0!eg++15a?6My4QRCkI1L1 zp?!3HQyI;tQG-0>@;(DUgAwa0v7+tZH$$~gxQu?c9QvdixttUNiuF~~%~N_H&wSQU!H^9L|H?34^U=MV7v^l(d)Mv>;_FOm9^qKj;F*P8w-z;4Hr z8mj#WI3O;O!U2eL)urZK+X+pi_kIo8Iks z;K1(PWAp@t-M=sTVu>wO-X;t!aCj*;6=-Aaz0YsU)xID0QZ4(Z%lr+wO2*`Pt8?9i zZzZ-|L8oASgRr1qE8uhm`S#`pI!K&B}KvwP<`hl)WIWF&0uSHp~WAwHQ zgB@9=V3v~J6s$Lb9q>*%n*%!y0FVR)RmL&}{51j-4KT2^DhGLS$NC0VBk=W5JFq~6 zlW_&-oxt|>t{U1W4bt%4+K^qDi*avPF>qRE#@CSUUNovH8YG7(*)2^x+R(SJ z88(%|0PAP#_Xmjx2bUzDMFUwCT3^X6t1lK-8CPc~JGvpqGX!8H@uqQqS|4>Wa1cU*fz9QNq_3 z&L5xS!ZScP;ku|Nz=lQKyu0Qkw`Xv4 z3OQRGK4;caCYsBh%s-2ZEqJ&VD7pRhD7@efu}B`bPu0-IA0bWwMOVRLqvx-gMpHnE z5H-Jzoi?;eq2h~Jil@3aPP2$6u;+k|a%S!Iy$}H62b4gM{Ag?&=z!mrKxg+R=(S3# z1kTDOauzo#fqsFAyrm;oZtj7=n!O>`@(fP>yXjcsS=8ot!E0KgkZQiHMHMJVF)iWM z-SaA`5~#RlYTY8(umqYeW5@xm6OAeX1-Tm`7R<5~p-Mn?VE{Mo%L#2jJvkv^=?MWiXRkA81nAsK3(RZgp@ejwX3j9YdIDRce0gWNWd>aU&>jp!pq0sTS=R9Q z(=ZvLr9~xNZeJG5mhA+e@1`y_N!yF;xHJ%3G6yIu-vK&G`FG#SdCB7TsGb?4s2!I| z=bl;LH>HRC0-E{%f)bY*8~(JIlfa7tZuIUD+Wl{%e3L-U5MTEF=fI#BhW#&EMYmrZ zJi-f$?rtDFf|P3EB0M6;sOFka`bq*5kC16Rzil5LvB16OC&VMn;gLUc`4Kw~B_3e} zq<$3gU-3vv=d1Tt7l|JeA?J8xSjHkmn~YfWt9*1|rI!{f4wvulSM*59(tnDi0(tZZ zz6ZS9P#HeV*mwOPj^a+!+9OXs5peshByUp!gA#z{?!+Bc`AYu85FXjQogTs=#FA zM+{jsVt;<*ZUV1pfUOn-QFPC?gzmErgu&CAjPCO)26E0d1)PgT%R&#J0zMb5YZE%g zp*~rsO0WElwMfYHZ9roOHvC+{QZdb`#@`0*8tM0L!xt;{_BfAdF zy{QIt_yR-5ySzsRp`FNr4iVNdi5u2k3K>4Fi74={-%}|f0K+3(V$OKX!%G}KKXNUe z#s%Q$oyr*$!8f}n{lb$dyXTr?Bxp5<9}<$@?g`!;u$A*@CO;StC4=C6*9Q1Zi}4GF zyq+K(9kNH0YdZ<}^y`5&!Mb}QEuPzx;S{~)1J|-AnI2y(@ga)UcTNPMHayOmmZ)jp zL}gZnZB9<4Z)+lvkjA7r|NilunGdj#l^OHEFd5VH9OM#a<^Lo4<=qRu(!wql9Q`e? zPpUpGDJ1ID2)VPy_b4#6vSJN^ckm?sJ)>9*`T=t))lwR2B6mo90z=l1*vYIc$U3|vhXf=g&jrp=}*njfDr}JMS7VTAHET9&?W6etps5Sec zwh=7aRdD->c*zNpwXvsppv&gW2N{j&Yj2S572Y)lP@k?DEPX07rUQ#~C?n&Mp0;ed z6*VzCGxB2HbW^-jr$0}~W)5udXo*B@WVvwEb*i!FoK~LJa|#~IuXhkQ7uMjKJLD3R zw4QPkf^n2?jG3h&VJnySFjY|LYzzI7a`63uwyk*8Kz&9UQ=6Q$yqPC|om6(o^D(2_ zz5tsf5f+S+Cv$o-8YRIF-1-ejm9}6ofmDR`><3QBD!nuFeR_hyCaI^VO({MYr}CpX z!VfXpk*YsEGgW^)3QMdgJSQ-rlu)B5UF119;D+@iOhyp)%rlXm9@U;65KwzwUrCrZ zA;S(dbA9B%NAZw>LGZp!J^@W9UjPIb`&7YTIxW0?V04^jYygrf2;HCEXY2a!iE69^E^Yj?ZDLai!)C=n_k^>67gB_&XYTqvG!)58b3;# z5fk>vt?6_4wo;m0%~cd0D8PehXQ2?^rH+3>bF|d_PBga?Cp{}QC3TvS+eyq|Dw>ku=2^i; z$`d8DhU^{=m^rj6M9n`TF&~>}DztcX!}$`WFRCP`%M)uLTO4ps->6YPja^hTKAB9^ zO+9_>p(1~Uf4W2>oFR~P_bDb%N20fPv2E;OT%|h)+-_@_O|t`}GQs3YB*WsT=A$ck zX-%xa@zQKm+aUi8ez@gf@&r1^k5Xa0!Zwqdh<)Eax+CE7#Fg8xGJ&XUV9B#4E`C9p zs;L3TbM{LDi%5eDnTL?Wb0YSS>SDax<1w2Oo_BN};+}ZwqQ>!WaL9<-t(mL{BgJzl z03nOfq3&zIauW;Bn48yGWjfyNB8uBnt-y2onEpb7;7SBPB0At(Q9NDMwyglo1Nm;@ zC!RkK6I73=alD-mhY=*Fq~pL?RXmY7&?>-Q{WGbtJHvC2q`S3X`hWq2XB}PegeNE< zoQzi*gYZPMK|={3Fx@6RH!jeX(Tgn;&zyTG`OHf7M`s}M?w1ON?i|n<8@hpG@$rX< zXQb&s6YvY6Nw%8EsI@3tKpaP2?@k^D8`)5s!I?qrqVkO=^me(_wA;GHD)4FQ2*PTv z>xTI5`^K}3ei@9fb5f1`@J%gfW9L2N$&1M-F~*Z$AK11~+aZ7Nb)=!x--zdG)U|uUQT}mjOJpYA9`jbE6#AyjU<|Y_ zDQEWdhmmKn!Th_((>#@zWz*(YcL>dVxaUhQut9H@@kC=z)9nDOG^s3Ua&2l^noO7Z zyqj6{mVq^46r2uMLAarNyebxAORfbO@$9m(cB?4(-U%G$rz46CN9kqe5fFq@+$W)rW6s1{R_t^dxo4}szpmvE3`)!1 z`46RmsE5iyd*{hMl<5T8obY#gNG$G0{hd0YBX*JyAEA&HlD6C(?^s;1g4n+^3nkY^ z`ge{x#21x5nZmVLT&~?tim6xg9G;B@p}4LxAH*2{`5fgA-`xM=xu$4TI3`NXdB+1n zM=C=XzIp7_2tm_6ztWTaohgt*6i6(M7!DFO^-V3Rjn{S!A`huQNxWLujWiij8;Gv` z$$=LpM|LGPrq?ShRjBh^Ct>!TE#mvh_0w~^BQ5E`9@N9R8hGwb?rnDzN@ZS4m-ppR zDU@#O?tHK#n?T&1ykby&3@pK8Z}%vUiV`1Y<1mZV6u?>KID`H}aVWdJo;W0wBAST| zS8P@85%YYH01A{4SMKzZy*rJeSEW^#wRf;Lm=Z^Z9mt9m(WtpoD5|Xa%I%aTgie9m z8TuZ_{5pX76Q)Awa;GjuW0L}Z?l^XJRi4|~3`h2{bD!10Tu%$NIWWo*B-C_`xs*E% zF!9s`D`U#1JdhOA+}T!t0#R;-)~UPqd_i}T{3$kBgYF!Om!i6(?v%4z=!RAR=GJ<>AdYzObR@LnolHO_%mO=cYd^=zM2h`Kyq-Y6X*V3Wt=J=()(894vV=B+GQIlgB zXc+w94ym1|0F}No{WZ1o3L~np>}+|~^;O=N(x^*|C=2%Tj+A^%x{n}G>aepTIQ2M{ zwGO7+Oi4kMW2#e6A{LDlq-vL;A#`%^Wi96VwB+)DZx` z8BspI&%&H)SPzB9xafqK66Ee?FC3J-!6NC47p#Pe9VUo>fMIU)@A6Cc!fJde@U9yI zu4!DD0Ax_Q;pm1#R1S0%{2FqT8DDRVn~ih-D06bGy)xlu zIb(SPZmMYQ#kU!aia+KQi*$x=6B_6xxXoYA-o~6`$3%LzY1}A3-i+-~Ai;ahZ(TM| zYfj}D{xH2?nA@oN#`9GRa{{5|mNYb9ODWpSFUl8aD6^Fnm=l2#9Gu~rd*gd%(~OY* z%g~p{d{=a$3f&WTEg1DU7y3 z(74j{NeJaqTNyXsc#kWQiB>XFc8^CD-T2GNNsB-KRnlo^Rc&fII@kS%yUMBr70@{S zF{<=`qp37cQSvCxofbEu^4WcU|0(&ikAx;|xli}7zYR=Jq|!#3OM9K78mEEuYW?gU z&uywHo`az`8`6=Kmm_mKH26{G_1GxawoCu1avr89r$&_B-d?++Dp{{%1?dq=)<%?I z6_h(wqE`TAV$QmaTPH}nPv*^y*72Tvy+W`&q8v|Mhbro3Cx^|Gs-c3e86%xaOgS*C zp^M$5@qIZdn;6^#peW*SIo+h1Ba+2{;Fga~P7?luG_m}u)2wBn&n=WRwW)+GRf8AF zLDXua`3!~0#C{TfIxYB;)~5<{zWRffex{NJqt*yZ{-M$^Tg4~gkRj5Zl$s_~Tia|x zB|kJ?1Nl+1hAAusXMB>xc~yyunk0K-$0e1IqKY~i)JTU~NPLK1dZ>p;Qbxr{+B!ug z9e79*^sqDrN!FYbjC?<`_s-Zq(IfpCHbW+>Voht!NTf)1OdOeHrP&x-AUnr`M&9}u znc~aLP$8x1yeRiy)gnvh&3&%AT>rl zKLjV`#Kzcm0*`!x3TDPP$0w1`ak<`1ej=aO3aqE(v&A4Tu=yN<6IcNVt(wK#h`ad| zm3(%7Ahr3-Srtfg>haAdrI>cb0}RBOq|eIMj`dofV<~M?q!O292w?u_jYe6Yu1y9c zne{n_JcPwrpNVqJF|NZFk}^zD)}v4TngeY-`iv_)-F#As%h!mTPd@h`W!-#I%nwyv&M65bhhw-0TUZ~9@6{V#-qLO8 zo}mT}PhssFO!VJ(_)58*irI@C1S9jN9KMpF;yaSan|sV)LHzLT6d&wDXfv<3yj#jB z2SAM(zVxO?;i0%xquwGnR_$Jy^0bjlPiwnD7m+J>l5YPyYJ^A zYPq;IH2G+X+#4md5FFl3?u|b=QOxy|)J=O=axXSu^$ar{ML@aS>pEzsWpOVGV(B8_44W%iu>m^5=580?!vk*l4>wOfSRjlvRY)kX~ zE8`F!7n$|W!p-&i)bB(hSOZ_|SF}b#N2Q_oBoF{nDY6-5uBQ@$ifQOz$nZH9a$cXSeEOCYB6ArI6zNa0&1xTKs zF!P4#-CO#)au;xpVm1M}=MP(dO_m1u!-|xE2>y`B??@VJ6Es?)wg;-h>f;Hh@($jX zT0hyzcjKri$wY>O&>Qz z6T_o}XwJ=tBr3ht)I_sXeR2N^tSNg`m-n4yR@NO#<}w)#5otIt$zr9c#6pd3dAQLKISJ!W`h^nRGSjQxXpln)(q zwSc?W;+9lvzyn|QfLSFL*X^&}^r#jG(7Y(mkmJo^Z61 zly?ms(PXeo!cHotTwon%^~tkDdz+TmL+xx0WktDN*^u;#qDP(9(5KNe!xzgX6F1>> z>>9e5Bg5W*WTtC{121+JDC-0Od1-X$muVBSb7-=dCVN>5#@&#F6)^8#jTayXZ6%Og zDGv}qCQ)c^N7lF`7Iz?B2`Z(LQps=|;>L%n@hz=FbmCdB#RM*pA{vaKN4(NB1$nVx zm@iSaH-IZT7V51feGu(2!FxJ7vZ>I{t#F(j=^-5D9JPCyCo zp{jk5xrT2VWocM%mZD}ywVK9JV{1FHkBxZL_2$cD@YC4*^ZKwNIqi-%Yi&_Oe6u^$n9amNn%W zp3)amOS%7Vz8cXfQqiQak6+b>t4M89qkLktnQ+XIA0$^n1}z**%Nr6dPAogfvV$Cbe*ADt2Mt#}nMBeD zvG=fj6@$K`y$mVZdq{I8`!L^!`BDK4NWcOFaDW6DXn+C?K!AxLx)=(J40S%y#;cW) zN0_gY5U=SPZ;kc9@F-x%_scd>ATMDVJUHAd{I6!Ox+Y`$>R=`sECE$f$nquFDXnP@#+jTP;2{Ic_bx?b(S;ekZhbJl#3a%RYlP3iO5o0geD*=T7l5K~8qaX~;JN5morhK~YgrtY}r$t!h}-C!)~=8EY!K1ETMCn3$vFmko<(qG}CM z6%~c3jsyinH5QRm)mse})jWiJ(nN^Sz(lt!M*3oAs>cLnbf#1~QkGhZQWY0W0qIkx zfU`#-VGrt65h*yM&rClwnMMR_$|r>}jN?qrxZxxh4RI#pnnlAC&B?D=GSSdv$}iE# zv>`++Wk^D^*boUrJCDjCoFUpMW>irz6DlZ%XrwGdd<+o@%~+_Tx=}Qv2{lfthRiAS zaH=!A(5h<8v1aV>gESib^IGwAbu44c`}l&2;<^|s%0#Ck@=T}7pNJ{1qE1XQqn0dk z3R=nX55nDt|6gnxDj| ztRvn$=JGZ^)n~&?gqPGhGM(2aJ1%;z;mytjo)yiQnX0Y^wW|tO=XKccytYr9>b!yL zuQJH~iZ2Cv?9*y?U*l_95v4h!mOY7S&z4*&yojlB3es!Ti2IePn7rJvV?AT@e$QT% z@q{`@EDOoU*IyY=WunYijC;hK(>rT~@``Luk%+#sxk+^Az0k@V%kKyYauOjC?>jLf zBZD$ATjMPWgG3lr5}y@czgk|R5_%dGFVV={hF6nLUDWysFXH`ZWcQe6_JruTspGU9 zr{H3dZgmNnYeiAwxjmjBcOD_TBH4JtA69lt$1daXks+szl1VX}ne$%9G|o&TCOF$r zBp%heP&-*nNQUzvS0KCn#!)i8WkU&1b%J7ZSyWt7o{EVrSYDoLk+kUU&b{Xz)5tb= zMRxhPSaZg%5erEsHNg>KtTgk9nhb@c`msDjMmSx`C_kw}5^@Q;%=Dvairz>?f;y3x zI^|kI^o<^(a za3NKVFF_VllSvg%6<<&jUuvUp1~*e>GnkewFNGl8w(E?eBB-9q6unx(b3@r6;3Wptxd1T0o?=i@@}B)XyrAZi3G;Z3y!k^2 zqsrwMooq@_RDcj|REef0P8CC3T{qPo)J*UMrI5TVGu(@QJLq%~A8LCwW~M_<#RN?< z^uQ$|3C1&5t};?GB+kU^CDP8>h>e|p6Y>;Q$oWI2$}*IS%=7tXR8GCpYIj=aF>&Ub zP^Bh}%@di_P{!Gq95KIoOQ?z?^AwE)C8rY0SZXy>u1m~CMw&8hSO?K%XlKe4t=eN5 zU1aQfT9TpG(3F$}rj1M`e%Gs}s4X#-OkT^dGMVYHB&~7eCCbS97&&MXC6?aVhEAT# zX7)L|Or~U>K&+`)Y4t2q@p=%^iab*B=OgvBs@xRs@$<1{Lzd5UDG>>VNa`ZNnilM3 zL_$?SLu5=vSiviB_?$V*)KA4J0@Z`nNTw)FtU|bchzp=lLL|G6*uE!nwz9k#bi^qP#-ikr=qw>Cn55JUZbu| z(@__+Dx$~5kx-p>)=9`L5~DaSA`yx@)m$Xuk`V(OsY`ld8taYY2ifwCN;Ec7^NbeH z=sv0OkJd_5XFu=7mSlE`eu%WkX*v=wb>f|l(Q(LxGbTqgo#_Zo2#rf2!s_R7l77;P z*R;d!GWyUX^-||h`MS)+KaCMhSFgOIoH9=*eKLJcxhoj`5ZA9}$l8)MBA${=CYu*r zU)AVMJWoXXYgwbAqBMw9QFm3vj~NtJywhOS^hAo1n0xW7DmdOsmuN1*XiRFEiS(+e zE#cSaZZmzt^Xk~av0tj^p2y5#bsqC{Zt46ruQ2B^%R^+gKZ=?S6d-V*9{=ZM#Qg^U z5dIY%{;#*lZ}GiERgHMxz4539*&L#{OdoaHZgJT5YO+@)hd5^9o=9Qu)y}V$Oybs< z7PV+($kH#;^!l=3d5Suw8!zl^JXh%m$8X&PcVg=tdM%pnh}x3Kwtdo_IueJ?AW=0Q z)ruz*4=PRFPf$Z#6H_lc{;9-;x~R&kGFoPuK0K{lB^=ov(z)Gf z=axBYl-t?RrF=W&)NJUoD5ujcvG%ex``M9_smoGE>yQ`mHIj|{it-hmL|y5}KUx&E zvag*|`d4W@&Q6r4^}bI!#3bU@v=1wL+fls2k+v3>y|h$zce>okm2oF`pLP=DT1aAh zblmK0TP07?K&Xt)JSjxX(@8EWo?~ptlibi|Hat&>qAfcgMUIq|-WRN+Iw5KP7E7cP zPs6u05+-@>Br1MI5+Bl!u-r{Zdcn_3{x~?TQoKDXQoBf7t2j6fWo~41baG{3Z4G5^ zWN%_>4KXqxFd%PYY7IO*FHB`_XLM*FHZ?UfHag=8)^#80ut@h{R;_4goB_*RrF?6O{ZF2^@HAvZjY zh|L*KxpqkrK#JGuvs;T$tj;NdM)4fMao27L6 z*P^Q8oEEJ!Ih97ITc@S?Oo`^iM~$B<>`3)sEWUTDe5;MG+K;I#RZvZQ)m0gV&tb+HZi5?G^!PM-rok5`?zGe8bHwLR zKPL4oPF>1<&>hO6AL2--#kVNui})ha6PpXm%UOJj4f4dS4`PrmBBNO6i5N5=(cyWr z@v534Z`L{yFGV75D}Mm5i{*K-D(I^B6uzhQvf=DXMWs0W&Wca5%sH zh7te?K=!|$(PH`v8J5zbQ!`OwM@*F~f6DMbj#Woiz3```Jc{};g+eI(2&tyN+HXkq zLSC6EA?+HL;V&^uP&Y3IwV!B|+0*oZF*qk8r#z!#307PZ^RNVYiCU`IJ>1w%X^5-! z37IGzr@G?qb+y{~I2wxBI6f=ecu5E~YKlr6Co09Gy$HoE3q@l-*PYj-cBX2I&(x2X zl(yd`*-9x{OOAvwatZOm+e142rlR7ZeJ*nQq}wOD*iLEn^w@`5qCEDsBb11B647nb zMt8ejOF>U*h*Ogau|!MV=bk@#r}lQVBHvz@IFFN*@lwtBR6j-3cvK~#T*XbL?oJwS zmHt#+jmAeRZk$z`cm8q}ZAEzMHy%}*@u^nDw)kFhdoshi8GdK4^ms8}`Yu=Wko1XSG(YA?S(^D#MmcY6rQed#km)Cs^F_3I3ne<_g-U*+ z6OEwOCps+G?rC>o$+kP&2wKd}wmWNLJ8dUCv=2+G$<=NKv-C4_sf5ZegTI3OXb(>k4!@arQ;V-U&f%4JR9SQaR^l| zwVEzt`ACClQ5U&G7)*mOnvv9uLbKEq zqDE26U9(rB-c~e5QN)dcD z#ucWkOOgXIC~P6<3YDomR4g(K76yydVoNDZt>%jr-KOAToWov9V9_>WAQ6k96ozCi zR@DM4O3DwX(mX4Xokbx><3%S#roK|A zSRj3}Kr=JJGr>bj@B|M7geI(5p?MrNXE6#L_hHDnECJ!c(x^jICKH0w_JG3;v8 zM=cidWz-$e5Dm}h{6%+iliGIPS(t3NG@0HG5bQkgF>ZMbmT&t*2pZMPugeC zk6KFR!dZ}R?yB$^fJbyPP=LSznh716pfKYJ3NsUC9A*|cl^AMJ)PgI--;y4idOznl ziUe)lRy2CJrZo}SR_i#%Pw45JgSn}Qm_KUk$X@PJ+gL(Aebxw>xx_5AqiS8~P%#G4 zZ1PGatGTtV z1b_aAbV2S8J*R`*6=jIn9y0?42pkZcd!p3_>6DfU({&j0WL_OT9Ooq;?iX#OG}2Ow zewA7q@)A*|<{{3L5Wh4E(YO*t6vCqGo^e7#j6cl~iT?x{#Z^WGuWCY!E{6u~4$Y+# zJo$Agzrm_tMfoAY={B4NH~}4^3raWgd&QkK9x`FbB(ni zwSSdQYUC~=A|~>+a@S07?J+V_Toj)X)6&9veOpD`g)h1A5pMDfKlfyNoDBYwRWWE6@> z)Gi{<4MF+&Fze1JwbIl+RT)0A{!AQ9cBM}k(lZ~KimtjxJJZ?~XCCb+80BKbNkc}u z#DcstdJ=d$B=lj(fkVXC2E}t}BePY46~oJiqctcci$GaS z&7v%qo8C&&@L?TTfepfiZw!r48NCPA1ILI6#zGk=K;XczhE)l}It;^*Vc3OX7%mJ$ zQ7FMdf^;ZPXrM};@$pM1>T!}5c{bARCex)C8ku!!HycPVIpNgoyw={f z8seGvh!K&QGFF;CqoB1UT6bE%(>iBtMz8el#=OPiN?&DEiqOu zYw)xF-CK)JTqb=$)@wvV-l;8zb1M?-NPG{LqVYXg&i~qjCGArcMorylPp;yqoqa8> zET$DZSINXy_PMoHNLSnMTS_UXGSit-e5NnOXF3l}LyyOKo)zB9f;Xu3yyy zIE%V9Pce-gPLZ^y;b>8F6Lu$lnXH5C8l_k{-Jce6s3tjI)g;A2nllk=MmaP;N_kh8 zh|K&LF~_T##ad6oMe(EcF&EFt=_z#4)Q2|{UpOkaD)S0urk{{Rk{QoDJQemAmd_}y z58^~b`XE;#|JWn+oYa>|-r|ZG`keAc`qi9zF^jyQKa)fiVj5|hYG|T+jycarc8wJJ z!IIPt6`h7uw8V;@qF+#`UptO-&l;w3#faX*Dv~=}5+qXOX{1c_)u~Q2Y9jjy*?CWD zd!iI+E`&r3-kYxs{*++ZXbfMJQP9bWj?N;wNLF!*NHkH-*GbeF#<2Wl7-zXCS6XY` zY^^ts*YT+JE-gpixzftIL0QKl2Z!XK*C1BSt0)K0w__!UG=EN&(x8w?;-a&N3Q2Ea z<55%Z&czzykcgCsjQk=}obkqb#u0}jW!Ff%w1lBn#UmnAS?jCJc#5ap$i+zZdy<~a zsge>EzDtqSW%+V*n&58nJQHPxh~h(B%~7&k^Ww&En6g!+8A3P>6i#Q4E@zp&5^}**re$)Q&2GWeN6ojQwW5 zqKh5b=ZPndC%Pvs5}Zkj(nsqbmKxb83T@c3=l1A+98BJ=zj>R&X=Cr(p zKIbT|_!5UQ+R`$`Or=uO$^{!i5=Uxe*Lt-&?X=T4VT&d#(N0Q4nbGbHa-tut8_Q_? zqm^IuQMr&LMT7eYZ89wvZYSMzbGy2{4SUXRr9nGQxza{bxGYcibjhfcQkHWP*+LV# z!QxjYMyxFDP*$%~QeInac@0_F8jds3n@AjsClS|=Tf(6wCTOMukH; zSqE34oQ$Z6oFOM#E|rT0DICTSqe3%o%{Dh#(UnA0Z`wmgNgNZ&97IL;bt;SVbY{7k zr5A2JKZc}&XvSx0dYCUtA8(mmcv|J)$hc7{RcjG%`EMyI1zR-|V$m}pQq5DP7G;Wa zQKqC^>2NwOIIZxAUJJ@!4En{OkZ`sTl0dS?47x0PoEn;>m3vFLHgqGK*q6GWQ2?2kfYd^7D#<8Kt9qbNj&UsW`Q_%roOS__|q zJ~!29%9k?4iLua3kCF)V2v}6{jeIpUqMD&MX!D|Mrc=~f?G-7ZD>D2fLOwyH*RdOW zjFoiXb*m-l)ffMp_2q2s!d$s=>*dDXxQuD3Rjm0$24$tvCq}{xa!#qK8qO)Cuw-2} zN-G_G6elw~yJ_2*&Q=mhtt4`MqkbP{-`9xgL|l8h6vs!a*G`9M!j>f(O<0;n`%k;n zWyPAuS4z=|+0IclS#*`0b%{R_oFmsQ=W1UBqtd!RLlWxo1<8=sx~QrN?EIt}A`Q(Nr6>19xXH;+-kA)A zwvm-jt!hjiI@O#Y?>37u7gN*hsf&5kGeec#LqUj0J%8D!bLuD5lZej$I=;kVR!&v$99PVOMpPU3ACVSXRmrNOI#slDEaW}u+%pGzwW$$f z6ZIyteX26md7PAWZDey+Hm)kGNj0))^^(no%qf1Gl6%&fNX1Y{hD0i6v1TPfmr839 z=EkkPR{uWnrbg!s#h5lDiM2E$$v-5oJHDggX5BuPGYnA(q92HX#Pq6AQV|+o5=@xL zL1sFk)0r#Ksy^aYBvK5G;MdUPWjF8!3J^FzT&v{@Evc&DdY!L8nwWa=AEK#1rd9$c zESGSRa9M@Rg(gZM4I?8YR8kUbPh_Se8JW!rkBH~Fqf-ozvk}s&Q$mqdMr2f(@FP=8 zE+T&uWK>*o#;ghd!U#{?uWxEc7hgj@UOnoMoTOxqMX0MT`dQ6Ng2hUZ>@nWw(n-*m zOm;^ktoXw@kAxT|#b#*of+M7eD4*ghu?tnp?9S7WDmJU2ho(Uf+GzJ0bXGJbet5HI zQpzhPO+AKRG<^ug#aW`17SV)>gp@u;k&v3i^=wb!XknNloGQ&;f(~-c&f*A}i25jL z50b{FA=c@|60bb3L7vE>TAP%G9Y($)$k_Nr91}zSbtZxA>oC^I8&tAz?Vz1SRcwsQ z;2O;l65)`!wC99Ps3F>mKH7$3w)5cFzOy?QkGvOY;~J4uXd*1z4cF+lNX%v7$faHL zJx<37zGm|NprB}SaUT=_4e@*`8;RjCl7WdN=%7*n01*;^gaiNpg#0OXy+Rh4Fk}p1_%q0F z^1B4;)2oBWFiPSAQ~=Y1%;0p8e4qYVGiU zaXJBlS`5R(AIx$j0iUc}SSP8|sUb!Ca*v1KECCN#bER7G@ZYZC@%(uB6CR22bO1;c zI@2emsQU1qKEJd8<#JelO#6i2hkvI~<`&L9--X{V(H1n}-h!CS1j8PrFE`r2!WQW>jSpP-r|lC`$HVAA6q%e} zUReo-3;(-u2d;&GoEM*rlmxSde+z_H91f(lg`WV?mFUX3gf)nbt*>49#T49DM=e`o z(pX&hvs}vAk(4esyYTC3Zbsin@92d5O!WE%7k=BKD4!Q<=`hWu19DvJOScbQH+Hxn=l^T_ydT4oBE``x$-%-!)(W z&6sL4{BgziCToz4lL`DF?`*=(Ltw*D_9pOW_#@bZnAdyQtPFo*{ssMz$R>4J5-I$c zjUZ-o{s=4A-?M|QL2C5_wOGBaW%J;oIyVX#Sq0&@Q#Q11RZAoODlho^OkAF&ii!h2 zlDvp5J1T>BRKTCmG;G5jBQ2pa{{5WW)B}6xTV&|>dHNC;$!`P(X>@%*fB`94T0%@4 z^NQ~?DH7Rcl1z`n+53l#x`M>m`(rh}k!j<~e%|-qIrU=yGv4>Apve}>P&erH?wfc5 zv}FK0Y*hA{6(QLj?LL%KN|*$#fwQ{*$t!Cu0kA@8su}fagz?m%b4?4JqHuHn2C1mD z+2Fu!H6u$(?t>uwzjXh{PuvG`#nfoN*VYJGw*&6uGD*4tj0|SgbGL81%BHgP1iI}T z{;QO8ylNo{mF@q?W-$pQhHD>Bh1>970^{P))c&F4Rk<&sWjYEbrF~mJx+7`dpR6U7 zcI^LR>M4*v<6ts1-0aI05OAR0G`~{nvafuEV73-N*=Sd?Z|$YqAHu@Pse3r~HQ2d8 zPWqS5#6HV$O(qKaIWK}(Byf%w7TVP|7%-vYWuQCR`1;HoxkRy7lKD#s-t|%4|Lg)` zHFtd(i6$NC6~~oH+j9MYOHb#DgJT@Ge(DJ_76sO(wMd^$2-ELwrk$b!xRmu*qq{~i z4LdnlpFz0OavRyIz}2r(^_U&wcoMp=`Z2wcHR1tXB9y5<3*Nq++14$HU!D4ZGP?*Y z0xolWl={}DSRK|);*@1;aB-t^yot-J}fI#LZY{e+M)Clug_F;z9nS`VNia4G10VegLFBHKV_)^#D^k$;(cwmd%GiJ5# z&_5A1t%+PS#pbyM==s~+c6C$`G&?hO}yI!Al|FqrDCo8z6b8Yc6pFg~P z>XjcrqI!M{oD`?$=aQ`m1*r2UUKTt*JMhrjCoyuJ@2vS632@tTbl@KL4?4YP2e4|B`kS!41oY6*LM@5sZa^#$x4@ zp#1Y7I`=7GyglY}06##$zfg=6Nu&Jx@&QzUG?t$H_b}pGC7scv9yR&*$A~aiiDb!l z^@bc1w`@5Z$@ff4K^P`7XynTulKjijqpd&md4D^ zjcqB>2-D6bjMHJhI0Dhx$$7HoA))bg5eqkM9YZF0oT|CkHDq(KfqeO)^OnB&M5%U? zFLWCd3k^EVTKvp8xG>a;zfgB92c-BA(T6n0ox9>_!Mz=gF}_A8oA@W^8$F%e@|v*V zxZ^q3#79)9F+S)8tqtr94lxW~@5@;eKU9z1Y#rt4L=*qjwNmp8=cnB!egcD|-GL$* zz7kIS7YGig_CT$i`1$-TVj&a7;Xa)B4GWnVGvC3)F5x)B-%UY)j_c?&#fh&f6yj$a zL&b>&5x|MBq@CBeL$JPyFDH^(rf;_~PW;ifyEWoyQ~~gM4x}7JSNWWl6Cb@cN{INe z0MUPMI)F?!B{G)d?5%BzY2*w?RMkgCn%g%iIVXZD%uOB+sn zzx{cINlQ3rJFh(M;$!+>$sU)eXTz?l7STsY^{qM%LSbF*YmO*g;nu9L6Tc^7V5o8< zuwT1*1YZbd_}Ym-lA*+`WCg?Mw_k>wjcF0i(DlSmF7xKpWC01o6MsiC@(!RDz36n} zAC#i=-(ev;fbkEJ7;1!Y;y;<8O+73-`xmTLrpAdMx#Qu&nb4_6VB^RlOu_`VWReq~ zFX52&6Uzg?Jjy0M*co*z%PNsqamV95CogV8FHU?=K3PzfSy4`kBhf6{N8i`(CF# z356rysSN+gF*j>1$WHUd{dQdV(=K8B@<(n6YNzluFD4E&OFAT234cV}$`FJ3Wz4u_3!u7Fu`aS6OK*Q2#voV5dMZz#T0kw_o3Ad z;+W9-`yRwCrK)DOE;|eDsb~%MN^A9fq3KGP`d%VaFG&AyEA*SIcSx?*1f~sPXmBV~ zzTdZ3Hv=bNmG2{+tr7E&8bkRWQgK;O#*3F-q6zHFX<+dwwu_YS)ynme^1WCjY;~Vj zr!C*>C0t7d@r7CRFO8Y(q2o*oey?>XW4;ehizcwuWSRM1PUT-hH2;>?)4c{7$o#_c zz2o~BC^6$(HyHALf{hv!85t{$e*k1CDke59JY#Dx|K|+>`TmeSZHgU^@2@qH1PQt< zJI&+!0MBQHr|$j6o5%OUshgqoB%E!w!f7}jH#DTpD&D}$@9};8-@-JFBhaNb@f%Qx zeDA^tyQ~`WebX=9xnT1BO@Be1JqQ(%d>>H+O;j%t$@i?{>_X-BDf@9kt07AkfQmB! zj7a7z)Z@34pM38PepybeGNtz6&QCnzq>}cr$ji%)Ux!T&-SIY@P>sTV`ChbEKVo1i zk>fyC^F1ZX<3JigfT_XM_iK(6OE_2N`y$4S1s3xITSDq$W4@m`_fXrd@)1yysVd)J z0S(`CR3reUe1A5pVBtV61<7899J@>ig9TFr_UOv@txVkKEaR!_rBV@}ylZJBqs4rmF=+*(F_`cBD6WP<$d-r!DYm-C`5+)Cy6PVZ znD2Mv6o!MTWXF8J@b2*@@Kvyx?;R&*vB42+teNl4h9X_6Mfv{G!1PWKf0CN;=o&>L z)P`{W$t9KVDYD~1)1LN&TfW~hDv@eb!aO3Z2~eiY_a7965x4?DWWFCAec9Z1Hv74k z?~z79j_OZ}z8X|J2K>*&c6N`CbMLWGCER20g~6sTBsF0TmMTu6-di?m4%+Fxd@0`d zOK|34Vw98=ykCWRnG6cxU-z*|IdRGlILEoXMwBxUK z{zT=iS-T*dhp)R2^i@)H!YX|wm898NOVsD21)ye|_a7OO5qhF0SSE>} z)2q#3!+GDjMID_Hr94MAg}dH87Du^72bT=dMeE`LiV`6&Ji*HobdhRa+Z9hUL#ehW&p zpZQ*m)&2WE3cs|&=A9@e(4hCmw0>WWL?NSryTj-9GW7oHs%``h*FKK!9HRG2rD;@b zIVY;kxTzPtKQ6TpdcUyGY_&LNp!c5}KJSkxH|ld{j&qi!r~1TPZpNXZ?LPS4M?#VX zBm7(7!I!>!ctHL@?epGjtekzv({RmS{*p7uR4W+cxWwfo;~`@7?wbd@m3-};5vzUP zBe+|ygH+_yKJURy?)5!+dsK9w3_660{Jfu!@Bn&0fmDo#Bn`cnCPOnp_YzMfdjA|4 z5~H3C)}n53Lr7a7&X4h$gkyKhg`)TV4NnT#7_q?+0IMX&4X{E^tR{M&e~_!pUXXS> z04jQauWu4EF?zEP;62o{j52yB_3qEP6vF7eanePNTjNSb?}0rl5jyEPBNvo{`?;0E zj;x4`Lp~Mf6vMG@7Js3iyB-Qm2{?}4_Zg^@d1&6U&p5l{y2`{!+PXg~B2*yPMrYnj z(#*X9`)m~Cy}-|*)HZhNRFY?PEvX>yl~{K$6G3K8$a_x~Lx^yJ;7ycM3?eu-&~JfA z!5RH|{Z2xAyN^AY^mkwXG+!&SpxwPidsucWQ+>AGXPe`E*4(yR5khvKM|mnsT{-yR zYS(PU2A43Nf?HxmqWXJm7V#Kbygbmcy6iz8ySJvxH{Ozi8U)evX~CKSM=kqR^=0?C ztOp6%y$DsLEU4^WN>rBIJ)m2|;eD=_2CIB%n4}gwYzP7Ye=K0+&3#>Cv)LMlmqPU0Xer{gMh z&zOB*p*A$C(7cas-N>n3FO=_uBK9Uia8wXb9rn>S~8e(e<|B~RhuKU z54NZY7IAo>yz;Av@hDf${ql!%d1tI`q^C^cJ#Eh>&b_7P4XR1cmG-&=C6^{r>})-s zV7sp_VBXy4@rBDDF~tvstH+)WxPZ}!5hKK*%3#zw+?PVWxL{Lz$9)>JJrkj4)ASYh zTQKGeEyley9R>{du$}KO55W|u7`R_yMIT6c%4&Nl_T&;2$Zr_uiM%Cy*^kUo3ugdqDz16VJ0Q_q%-Gsf>=~DYPW-y0i`_7eZ3XEC+ zSVZe!lBE+vTq`dM&qN;{$X+GPZ1Q5(%BmXBA{@ID?b!EM*LM|>R{%PhKQ^-DK~(fm`Z%-e^-?CZ zVAzjaP(Ik7naLhrT@c4y1N)?QIrG}fQh&Y5z;{(9lC~3lz52T8$=nvAuGa?|r#oN? zd;J~rxc2%YEZV`0y}Q>FayP7hglW0T2x76fO3vfA3t?=y>z9#0@YLO%^`vXnnN2QL zxH_n$IEo6hDY1JlE$p5S_hW$O-JPC2;s35S&Ae#G=ud|BJBzm zzxCIoX5S}cSEznDstfVID#kY>N5smqw>!J0~1Jn z+(&)!ub}y_MHjg-LM`e?NLXs9pH-j|)bGRVjR7lV?bAp6GR8nG1|N`;`tF~%-y+r{ zdE2X`$eRHzwe(U%Ex+mATv}jF?=>eFa2(ss^xlq?Cp~T!u1i`l(M6U1*zZ zJd17={U}@m@b1zzBqaLrYuEUTVV3*P)c(*500XY%`m~`3)V|J$0f3axqLD!XY_fSN$R1tg}eAJhZTr+6SlDk^}J zN{X=Uywp}B*@RhvTmF!Soj(u)_ntR6jq3ojo;TBKWL4P7a_4zhlrpw~7aA*`kH}y; zMQTPD>gcYVBw30H%R@BqD8K*Zo^*B|W=C%Lv-4xD^5>1Qa9E|P&J!i2au7(_ILW~p zI*-O!S{oz$@$arp$^6wV6+-7-IEO8Bu`Hd?`Rh?7*PIPFGK}Ut7Sm|)GHEY^Lkh#9 zz+p_?-8>Dysq=u@1UNsOcaj%tM!#Ac&Of7vNMBF;<`@2jv>L9TZhrUGMNMIW8jX{# zCK9pKszGuJI*i?tDML1oyIQw4Ld@1Y<~dz5o5)aH$x`zS-U7s=`QaO`+O!~WX9+a# z8$DTjuDMs$aC9@DL~mr!jm!MZ=-20k-jaC=1rps5^>YB7V_xaPdS!qu&L`$w80FpH z`AdldZ<2x0;RSR~;?-TieBd5SwA+GC;*HV*U!K=T8JYzhlSe~;-{nWhdQG$DeEJG} zF7KY)#3djC#JTM)Z!3ykoIWQdtdFYYz16syv4~l)2K4h6Lab6y?oX2ex%PGb0mxI}V~cL|nnhrpj#PY{x`^7vX4-WleciAU9$I3F!m;?Yh}+H`!l z>s0m7KB9~dNz|H)fzLU(JjHH#a6jUPBP=hE^uo|S=bE9F4UG=AME!odqs zK{ZfkJOH`B|D8We0-BC8UIL3usDUxQ%3?RKToSbaxy|z!jF(@-*LR-U*@~kVk3CO3 z{O5e~88w-_YGoHtk0%~bvdSzzv~*Xea@G~^QMe;S&&;7d>{G=TT*MlPh6D^~nb;U``SPbwCOwWfk0R$ ziaPm6uB?dgePYE$JD7dHyZ*uVB=`uH2Ym;A5;YmVXOamK9vAt+S50iDLip!Lf4O6w zCia`BidbN>AE-k9;7hV4BPP4a0K$Lrv14zoOZXNDZxfvob91^ihL7s4nk1%0?g{d}?l0wb_O{pARc|2){?0UD53F0>Xzca<#j}@qB1=Y}yx8KJMVB zz9Kcz)(w6>PtED#@m2;;%gXDV6TzAavOBY?I;EtISS2+sc#79X%0cMYauD0N5pN<3Fa|7fJ zF8FC*ljLhdbit!mo%k9wL04Yz37wJj-BZ+-rnuTpGcsR;ZP;XiA zUSvvNCTYNe|CawQVJwL0Jd3y=xq=VwO(prOOpij$r^kBj7^oBFIYB~%4Deg_X85xmK$j6l*G-A?%cWHQ@lfE?z-YD{rfBqT; zy#xxr%}M?U{`C#39yZC=^?^s7R^KB1UPiu}Kl1dCi^!&c-7%c*|8J?d>tXjUmyz8t5{zd~ zATctPM^QE{MlT7R+D=6XErlH$qf*_*=k_v){FuP` zQoVCj2>S0z=)DmMjzZ$zR}>%PV6-tLIB7TlM@FtQIFylt?WI=oky%Fkf3V|B4A`KI zC>1e#03PTI%E+xdr_R`PMD$2Fh^WZ9dS5EeL6JAlTGd(W1Kz4&BhoP1y}EH~a6}}W zEdX#vI8w~8BAiiODbnI_$7!IIiNoaL+(7;28Sz@=rZotMWMzm4XgQX=OlWx?5KeA~ z#K-w=0V{-3KuV9ieBO6H5DsU7Ze@XgUAGw!j>}+{12v{_MAU2`0*xtC*#DqirsEUK zD07^+YL#$G}gq8QNG zm#_zCCFc5%JEXclzF!Re+H&qtU2jyd5kgkAxZB;{|F)JzPShsR8}<5N5& zI1g07sna>5s?$2gF95c-WHZX(wW0n_!@S8-?hK{^bW9n`jvEXlzDZiu{5B zrP(j8Go0o4e^70kk?Ps&b;7bvh>ATxrR|)IO%2sc1IukjpE0^!GVIzbxPOD`({P+! z-KXt)C1XgOqR|8YAI_*74X1!jcQ^kQ6z!=2stCx5W+8-zqam)U5d(c;z;733KTyt4 zTy?$P5Fq^eO_)$Z{rKv3%xp8t|Jl{mZ4C!iymqo^y~~GjR+)Wg(feVy?DbD+I6o*-d7}`>2k>r@I@!DdxIfM+oWkBG51pIX zD%fjNMukycUxj$&H(Vk#4OU>uh~|w`hVTj__c1*L$f!)^KmtQAw}p(1+sT1IqXo!d z{E(xwj#nYIjgXNDjz{l&;5C7`dc&AWcUX{7li=7#3C#M4#|TPBK8KiGJC4d5bSW7v zPjD#y5c5fJ+;62Fr~Qvha4E?s2QNw)p;ECKbvu-i=yhpV+zMtGiwnCpIB2OxD2JZx ze6m3qACkOf3h|9EodiD4u|>6|x3rt=9g6P<3)LdI|{s zM{ty)3{Hj!MpfI~C&4rt*U;x?f?Ok>{d^gmB3CoozuBrhRjsS3E^PEuG%l7IF{l6%}nV`)|Wz@g`?P|CQIox;x8jOWFLkD z(Jx7`GAg;P@`|uBXJ+IG2Y7`9s^rO^M>sHKOg1@wBgE1poZW~T=p4<){bz(T$*r8; z%Qle0Bb+O`MD<`ssA)1`q*>5UV=bILx&g4^Tz@8vfJq-|MjrL%+p*V=#3CwSMyCfB zNhzk3P3;mllMQRCxqhOIWiWX5r`87WDo z4F*K*wk%a2WqF9~sh;=5X|gSJ$@}IoMuJKYPV6WmK(xVysI3E?V%dKSLQ||HTQZs zo5Y`uIiHdh@yyBJh|C;N#!RB&9L5}XdNgL#MnmKm2=wPUoW8f4M56O^JmdPC7j*ij zmV-ES05OiRwPEw3!?H#=J#5G*&s2muD&JssvU%1~pf^>glEKAHF)+APs)alQ>xl|K zr?Pi&uz+;J6`ebZ1p$+t>2pjH>i9HDL>-Tg$8x|!m!^Q>d0R3~(!y)rlBlJ_jYg`; z>TLe{#yUCQsJ4zmCZXbUsKeCpi}bkYcD3UzCf}w5YU{SWhk>bLfVOP z`zU>`usJ|#6T5SeY?06!-+pApTW%4Wg6Sl(5o6 zK!OB)FIh~2gpDLd{de>q!>~#4EdNb#Qa}wwY2-CGg2b99C{{r7VziTpv_NViEa7Y+ zaeSPl2>8r{u%hCz@}=#hna_9z-`B)CqRivDO^7xu^1#ua^yK-mZy& z8?v6<;*@ti-oMr1Jd!9*`v#75Y(jbRc_cS?Sr0#w?+1PS+SB!4uJRAOLlUfnvOeyM zq&`8C-0Lb??t3PYV1;Mr*uaN_peWl(QuB?Nuo|X{k3;C-{?WPgnE4REd_1kLDXU77 zuTR-GV@j_ix_6{Ube7andbvU9vwZcdmOd*1VCe&sm%5jOxdNhD@KWH+}MoV$i&#ja_aepzsMD)}arTk@Auf3Mn3zMfFCAbTg{fa zVuBQ}!x%28B!}NKO|p$O$eai^Od@ zpWcxQ4r$Gei)*FBxpNMT+$SuZ51q&Zo$ViII-hOvx?4f3@}u*KRFaBT^Q9tmKEJgZ z$M3~X5k)LZx@W|3Po1oc#5y()XkIZxYrOzLX@ui4zUOqyC!yYhc-}s4x`$+YX zfh%!9Fr0PrRi7yb{d;}JWS^5sD;dIljPuj!c5j(*pN4DFY#yiL;7r>#|Wz{q{T$EZ*xVE{HTavz59=M|A>bd~#1$B%UY zXH3|cl*Rx?m2n#hncPRMfm0rgkTKesyW)o9rX+ zl*&i>RU^mHLG>YVACJ2cLM6;=XA)FL*AY&HZPuBjq#^oKMf=cR67TN?Qe{de&rl`> z$#FSqImj9sB+8_mV)gN47V6PHI;Zqvgw`MJ^Tg|eJCRUHyc#n3yVTJ>x?&lBcZe|- zs3??7LvyYbdcr#s;9p*BzM;KvB9ejofWK=AYaf$}m1KPGD>P!x~#jT#6G;0KgYvl|0 z+2XLB8W3Lv@FS40-MJ8S*Z2TGHFwrwggAma_l2%@gZ@4()}FtRZxt=g=%%EGNgBmL zhs`8QBOr&=cbbouuiu|W8QpY?E@L#|gof4n2nf@&sS z)m>&>19>`(vGg0)XD18x+%6u8m{fu-q*vH|d}NKD(U7}zY0?a#EV*_f$lAbA6a031W1o$j)?UKy19(vwNP@loK6$(iN=BJq zCShDdm8YQoeV(tqh@ap^!K#W*RFupKU+RUEkR~_C#LOgd!buXexsTh=v@{L~rfW8@ z&l?|I$j_ti66zkXbizrlr>!MYzk31QX!9{f%j}eY$4@Yoik7whs<<3K?55f>79sQ= zKmG%D9Y4Y45&ZvpNtm0`&x8k+aW$3}zexyqPagof&N3X8)yEE3AhrL6hn+u?iS~z# zg`DIDd@Uo?J>mBiX$2u@=B1m##^b9~F7e3@~$rU)k??hP{u8amKL}?9)($jcXf*p9(+AU(JAz z+2dy@;In0Zgnl--qMy5z?HB7u?5joD&zYRPXdb4%`;q73AQ&h)y zud`xxD-k^&>l;C7poYMr%+Y46-VdKrS%n8ZYF9n>es(a-E?NyrA%K#suVu|!Wq^7= zvi4>CN#0f^lo6C9!rrkn>gp7j+WeESaCQhvS}S9@p(6-Ny@FlZo5mkAv>kvzgeW7! z=JTBNjl@(R5GpB76-P zwh$VH*^{_IlZ>A2Y$x`l4x2r8n4<@MjD4mA=z5SrPqwWs)}8(dv_W z^P*3}7GZG;%KUG*%i~e05+8{jU2lNK8Muvqg zkn!V5&i}_T#MC7l7d;RnSr1ry{1hAZEP2Ri7RjvCPSRIR@3B69IBTDX04hv)>G9Ld zj|6L7MyEz#pzE#NOUF>zV*GBsxC>uV0k_V)rEgoCh-cI^)6R@2%M;||4iY~-3wyxA1KP5_7 zu*^`AgUybg>9I{l2(O(q1~ep8=P}1mdJZg*haEroE5H`q!F1Y5ID#Oj#;y6q%WN>hqny1L_M7$ywK^zm(uA33@HA6pj3 z&o=J$a%!U6`87Cxga#KK7BCqgG_~!drgVnsI)3IXI_C}BNja5LcP;6M#S3cTN83gg ztk=~9;b*0*{$}fm2X@j)@Rf=j%4r{ylic*vwqd|YYCJIXYhfxmb(>W6BC7^->`wa( z>r~(*RLBqaKJpR}esGk#$iO+7KEltYBB{m2%_sbvDy4~E_>qp(0ZC(4VKe*)DKOYO zHo9#1an`HinjFazV(O%$4)q;3V(vZPh98cDp|OQV<0@_VnNZ(6O;>6iV8f66nO@0+ zn^3X>Tg24Y8gb1^J=My*YG?H|VoTcak(f#s1i8n=ft?C`^l zvo>wm!w)YDf;jy6eWVx80t^#mho8zikPbDUH&YM}KfcktB8OYKXosJDY^ev*0sZCh zvyG?`v;%=iCoQRNijMAyY^gl_y!{t|8Z@uyr0Ym8ThFA8PWt*c=6&zcMrsg0dx_Hm zRFG_sHpGus3PXO>7?k;OH=RxHg6Q?E`2Z6@?7y8N739V8Bp)YexX1Ao&5v}4i!Xi1 zaj%;ndGl>XbZsYZeo`qU9_@%#AFQspU!gdHvGSxX@_w=eM>^a|ik;~yOgDk~JR4e5 zr<0D-B(}$R3vYomoiwlV{zn}QpiC#78q-PS!jl|+mus+$LBmHYal}o36X(p&C+K)=q1V)6SIkkhP{i1>V_lfn`j8dT)@iX1+Hg`q%&PG1+H~tMQ zek3V9YzdMlP(R&CL=S7bPQpR}m&aG|;%A{~;{R_|Rol&-#LH0kBtEoO#ZPrT5aJZ> zB%i0jt6cuD+)0?t!&YDHvgE{%^6UYHOg!c}MA}8gDAJGuH8&5DMel#5M6}_Go zkoZ|6r}$+mz2xUQ2dB7sMa)nll?i$qq~u4a`BSg}?D(8Ql5w$?$)NlR}h zYR{1b#^y-|mQ8J*7C(zXcam^dE`-UC(ndFNewr^NAf+G7bL1_hY+OHW?EG4A`;mI^ zhY_TY8k9e9<@Cqx?GHhWsw-Tb1Xtm|`^V)}P~ei1S}}@0<|k;XrO*c2@v6Y zdk)Y+35Y?HuJi(WJ&A4=4oKEs-4S7qg$B(#l^jBsRsL!TeC@&oa?-GbD+6Iv0I<4& z&|(Ld82mKZr00O3rbq{ffu>6qG;$@k;SizbFNLyDjk}WPQP2$!ul=v|N1|aborh&b z@+(+IEJe}*-e@dg3xru)9>*X(*(sUUC>9*;N-RsHlgs!(hlPWVOBcl9ApRipLOO^p zH-eNr2r%&MzkOQTTGN71?nt>0A}w9ap%eWqt$h_croXE_g*a&53~A{QdeDKp!3=&7 z&6$U*QV?<+ZA(bIC4G#k)%-0bT&7Z$5DVZwMJ}<6N6TL)M60js+e4vWU4lya&v(10 zT{?8~z}_Ve)>nQ9iP{Tw^;rlUZ2$@v!cc$_r{#q}&#fs7$sf$Z7ehT;r;{?ItSvFP zGjzF5R|f(nXR8<0>L*&@h8BC#K`J;jCo&zBLo+WkHytt;0+k_$iJ}HRykpE%sk2}y zR<;}_7e<-BSW9IvK-<-2eB+rUcZdvCGAwPZ#?@kV!;70Kj4wCzUYN+$9#ZtH5nW%H zP{1^vxrYnV9Vv$%v18rc)uV~az3H?OBv&kWOz8cm0mXPVQ^hqU-Lw8%d+ z%z>z{+y>!|$qfus;nTw=bm?m$B4deXv?R(}crpw*BkERdEkKJ$WNJks>aJ_jN!032 zx_!%Jwn+m4Gu6;==s=oiWkKAP6NPbXAc{Q^xrHL9e52(kqUO>TF$mm@@tjpXH}?u4 z4IL@Q4m)5{MXs10trATXN{Kh4b?&aHWS|kTNM5!*P-bGmL~T<$9|asejUheob-Dr=U&84H$na z0cxW+KsG(djsrQI(KFk%yu4>cb*1^B2k&axcmZ@-pNM>r(_5*^0TOA_p zz`8iWhtd+|KVVE6ev{~5`)<>H4-43ff_Yct-)%zsc@5_4;>5>gq-!KB#HemP0g0~B zkA;rTpc?IY?XBjLq|AAnmc#hEE$qk5$~J-OyVpT=9+PdVYKRGsub$$U+BB3e&y)z0 zM!xLV_~_25Qkz^i^j2{o* zen#Ey7GuN_uw1>wd069rXvjNePoYbthzmL9BP6feyV)IAd17Zh$4CEtI zKbezoOnzP~K!V#GvExI4bOlR9Exv>!&jHeCpE}g<6gGEbPGhofau3|KU zT}bkP%gI&+29w?4`Yr<`#Ih_hkObY*APW=F21uD)NV=Mn5$xCJHYFJdNRRsN$SoU{ zRx;f#(f;3RPUjpp7+>n7P|8XC2uN*$AX}P~GH`1#Ba4R8oSqt_26*5KX=1KY z&jcj353z-8y4!D50uq~=v_Sg3g%=i6VBvLW9b}*0R69Wg87b#9rA3G2jPMGUb8<%d zbvvL0S_>q+DG@U$NU#ZMjd8#$1xdC~OzISre(gCq<1+Wk;CQy6m>`)*YV4rfzcO8f zmLTa$4VHQmk!+(#kQ6}S6Q2b6;v_vMV)zmIk~*Rw&k3Kdz;Do1H%O%_013$inJQ8` zvFhw!`AO*{GyjSfqusq0(um`WZ8J#vY$0_Je4~zCoP86VW3E#=G2n>I zPA8f^W{PPW#kkZFb9v9(poOJ5E-YWFG(t2)? z>ashA;T^+UwrP;OR5(KN87}jNoY0#r!bR#}0yHR318amd$4T~bCDVOaQ95D4R;@#0 zs)9?-5fUJvn6>(#k&n$IB=(syY9(<=O~5%G!o3h_)3$4n5)2YT+LTU7u@;gJ7$pFi z(n(p%;4C&!I1gN+d~J|Y*1hk(Ab(Lh5hYRSe1fBFqg|gF*tbEN@OR#pW<_$e26(I{ zmLO5(k}#7_Kii9{j#9{%8zk1AQ^q6(pC(Y8(jaL8v>_V|xs~|jB8xZ+FH>%D#gHVx zjjMSqBhl$@jjbg?pHEk_6P=o~4h{pdU984^iB6K=@mD@ETY?}V9S`cC=;Y^K#)>*~ zB}lhzQ#zeHL;-xT6Rn^%NKZ$Fx-Y~!sii?8;4DeJb7>D}()Cmnhcrl&S zA^jGlX=m%?mg)TqIqfDpiW&Dt=Lm^ukd%ca6Z2vXY2u=bC9adIJk6`o%I--p1QQDc zMf!f4X3Zk0ANE;!h4J@N)vKWHNaA&D^y>PG>!14pGZ-P4n~QLOA zZx*+oL@IzCo^ER__mgTzJD=|{gsTLC&y*$8rD-`=DZ;NUg;g7u~uHqx?A*7VjREJ)E(lo zt-R7VWV2u?*~dUasny8`5{of))qe(bG}MJ$iRDn|kkzYVl4@8K#>J9EK!HuWgl{~4 zu{4o*IyJ z-mA_4wel~2E2-vz=-vbEWiul(@WN>sD&be^ z-lNmbuY{hi4fZS*a?7ujICxS4cU5KMS1R)|y9Xwh`;}@yLz2Y4Qa9?noh1c8?TPsm z^+7`!08nf$7nw|}7)6cA)nkZt(jO{4Hoc0F2?w#ubzdpvKif-cqSoSQNhAn0LlMpM zXs$}?nI)`qBOq!@PK4kQ1;hOenb!10#(l;$By-7H-mOGzdz@!^=f*jl=WI@N(9CQ#fG(moAP$k>v% z%W+9j1%Bxn!5lxqLT?mlV>)59=ju)ox5*DqFfj@|U_Zy{*6$2`^kBH6B}uSy9aGK0f-5(+3aqL=`TD2C`J9nJErMP%I>9}pjMacjzDeUXMU)NNW&I1 zTQnm5s*(f*Q3tdc@wgi{cSOr5)>=t!Y+5r&k=bl+cL z??omG)5s^nJo8XGfk@mld67wgz_B5=8|d$V5l`HGOKw1B2lJj13iph3fg{qm$Rvr&mvP-u`$xDQWH%#|biLb*khGCWFbzxq|COPVy%}d|*ENQD zOkH!7qCcFA-5p2chHDH3L%k}ykbtcTK?rN2LbY6l+B6|rWuT~W;k_Bt?D*KE23{MG zknd99)e~u9QZg{rLUm}S!(-25@=b4Fwf9P4*L=S~HCi5%D$7NUu&w1WA&PZo*wr9G zE@@*Eh|f%p5;8+7SdgWXlxIfG2Xj(|&<-Xh9+MeaqhOI~RSiR<)K(~FTCapVQ-BV| zq+F=r(ThyLKdV8U@$&&ZBa_sV__B0oVt>XyFo1okM#qc(18x9VsZQv|Y1`8>*6{ zl;oF8n1lrR60_B+hLTexYn-W*EA<|X34t2wmH%`1xJ4Y2^_YAUbqE#&PgSyOsOer5f&=|;cw{at%n@Jjw=`1b171AM7qP3&w z>G%PNArljYuK~9dji#|1GGRKTIGuIWs0?L*R~kJk3tQ+?&xN?5UfIH_9BSKm|FvAi zMVCocW+MJw>Sp?CwB(&BhnJztG`s;gCoAptL`f3^jcIS1ka8)LnzU$+t){_F0X$pN zJ?wb=HF3QlT2WE_D5*|xN(=V{z_(4SnirDfCJ^g~;3pUL&N>O(i@G?wGV>>la=CmJ z{HB6U0Kq92CYFrq%*$n(#TnHNW@=}A86Ywc-X!_F4czqn7{)mrFy4P%T7d0KrPH`Q zAm&Y-!0F-q!*#MJgM$>yPI~2b;?|Js?z9(>DCMX}u+47=yk&++jUt{(N!=RAlVS;o z4wXlv0f6&4z$d2tC=so#?cIvd*EWPE)6TsEQQtE8|pAG3MWr z5hW3(i=K4oTO+0C{_f+iR*9`A_?dOLboC?(Q=@~dC)h+Mp4-`$PBP%Er_;dSEtYW{ zDOaJW-pLDtNvsVsnTY5+}Ie8HvXB=)U~Y4QnYVu2a@6=ivm88w`oId3G|_N1A$Mp%SJZu7d%yu2>8S? za~;BP8(hGIxCc|Mo2jHq0IEj6mO*`LgJn8*pZLlJE`_)_+q3Nm5%H+!#U4DzCEce!dzceqhZ5lG4^0} zJU?vNm<00|)f4B|yjW@~kJ+had&Uw%#ZdXFnU4|dktw+smEim&jOyR(8ly_k_NQ{2 zqlKd&8P(d)j4H-RjaMT*p01b$s{Dwv1fcvGm8_C4WqfjZb(v8uyfUiMP>7x&hn=XK zjB1&aS=BLv%ag7Fq)7VK-4%#hL`F5Uzxs^o4=bfnC2->$9Dl&OS*{Ht1SrL#N-|8LL9@g{U}n$#$!0(vy5tt9}}F?dF9b;!&|#G|1PZ3dF+KB9BToByf81L3TVU z9>PsM1kwVU1U=a?DiU~98{wg~Vt-rvtIIJWcvS5c7K*!}cT@@MnMWrpn;sb@J%RN( zXgCtwNm^<C;888IbBQVy8NE3L^>|b{s}mg5MB98G zmGrp0q8(K(uE|=CXy@DV20W^;iUZ3K9=}lMQ8E1lKGp#opiY>jKpvGc`s<}Us&?*5 zpp+&3Wp`Pe!NkSL1e0$DN}9bRMx&SzfT$Mg>q+AmLi8c1g5w%F*#(Ku zD0WnWWENk`fj7tKV0+UYm7Jj5^g)pt`RtBrabp9}QMt8N5d$$OC00iz5Pf)z!9pEX z9Au0rfun*dq=D~sCvOnvl^eZ7s<+G=m1qum#^R{3VVoU+1R?>6PI!}XRHor^WSY218^q`mNSs-Y zxN4No&Gtp%KZ6EGwMSi>b~vgGeZ^@+d@$8*+NHCm4=OgKPpz9Mx#LY7@r5$5EwMF}hKuT5UDuAbh$f|1vii zrf&i$t93RiM@UnZ-KCAHFZHVR(o1VoPL2)ZutQIZ$B6Nh_RmHopvTH&48kG`w^2!I zr~9R@qRd7m+Ds=fTA)rgstcY?W?rjz%SL4^KkJ$-l3DdQAO16?S^F_b)&*Hb%9K9=mR&Z z?V=&b7R$SYF|c%_+Hpc-qY|+cs8Q|kSO4t38jj6Z8v0cQW=@pgR6`AkP2Q!tg~gCR zuNswT{wT~#W#Kk?1KaWLz#5eU?*-K_6rQ+Qqv9aSc@-QJwM9LkYs^9e*)m|p! zsjrPjm3^5Df4eeQ>x{|?Bj{Av zG$1ga6awcX&!`q3aL0_w6t5C(kRT14FQlKe%^4k;mzw$*R2f8yzQK8yaw(~&Mt+Ly zl;T2WRMrd@q&GUg3316~9E~b9s3uYv^PQ0hs+8fYmEMPQ!QSzzU1=&W&X%mc<>|;fJ=J~h_nFUoQn-|| z^ri=tHZiJe_-xLBXG@GK`z5ht$BtZH9a<`1-a(x{MkUJ$7}7ljV^rax#?W*gyIHIl zm7XlS1q@c6(H7wGkK@Ovyeh_tU}Qf8i^izP84X2~6Gklm-b(uz)u-<7OZ+nph*9Nn zDMsbuGRs6_RE-ImNMy#@KViC0FKXJ-^@)v0PlSk3rBluP_c_FPEJuLQtLIC;V zjs{R}IQ5J3NO2ZV<-Dh%Vw2S5)NV>$mcN+?76$fwrUDw(Kb&G~$@4s}GOksgzZA}> zh7l=dSPL0d&`K#;Mx_=+I+lN>K1($ZkJk%Ai?0i;D_yXjl{7J`6Uzjmkewi7 zRPKIYEiYAMMX0?X=O}(<%S751AgdUo+IT42{HwJeGPD>KeLjhkOYnWV#+Ok+uJ`tc z3lc$#S(Q;GUv_3hqU{uHkx^A$Y5|Qj(o3081R5|+{tA*PutMYXzoq(ORA0TTGVo|X zh@VP(>Bw>SO);u7ZO`}b{rOqIsLBBSR#tFrQ704yg%U;;jk){s1fxP;j;yK&n9o{( zd=?pYHBQczl%j0^_o6DZv3&29;LqGXn?+O6nDh9eI_)i+o%TowHVQ6td*z&(4r|t7`q%P8Fqh&} zar=eo`R)X0Zd@Q9v+&l=Q;ICO+eITr zZjolXnfRg|=NOJj_@a8!{~yHn1o!)*a!NVNuwGQYt_)zVh9+NB?3!_M>;~JN?~6)q zdMDXr#Rk5p#4P6((~D~3DZFxsD1?j3`n7^kheZR!`5jjiW7 zj>Wi+NCf1gQ~#n8X}y5b^_iIKHH@=q#J#BUu){#zMukzGzFAaP%2fSM4dTvY3*hN> ziLx*%Z#AK$!>H=!Bb};@gS#*)H7nm+eOnAn4xpX_A}3@n!|ba456EG)-m`#qZ(fUQn-9XM;d!YtPG39x{vxiXH-)5a|ks5>VCbI&0H+-M9Pe$QEhHx4Tp0) z_s`@BK!D(F&tw9PY7^&!kYaq)kig+{jY=g^SSt$?SZY+nCh})K1%TMcI|JZ`4k=}g zDk7r`1mJ9DUZYZQ4;X17Ptm9pmorgN+Wk7V z&rZZ_j{P!@_ns2q=U8+VSJ)_JmaF&Oe~>{pa}@G~T<4`3NDErgR=am0leo6s~sT4Dz(z1%MBnwSgQZtN4;ORKG1a96GG9D`8 zUxptbcTZzTMflQQ$oz2NG0O?!040^9>yZEuN0{q zyKwaQcbOI8B30Upy|P_g+6A_(vY!5KcL%uwva^ zER!%lN8o{zN=1rcn>uUf5Kt$T4VOp6zHDy!9w0KJlWM2QMjmH{NTrvPil<4jQ($YI z<)r%6`m<#}Bg09R@IIOZ>YkHo#5Lf(o0AHc*k>+{ftn1$PpUKVu`b5)Xr}n28l@#B zPLbPwKdHjT^lMfa(an9kSSPvQcZ9=5zBspJExvhGiMUG0rb!ASOPBDAZn`J zniTb<62G{mJs}h5N!8dJR#rI0-#wi+}aN`*-sY8TS$K&eK? zJ|jYeeNd`lwd0+PtV@3mN`(lS8D7em6hNs|vl2U$(K`?zO0_PeZDn?woO;b({|_~{ zAf=a4D!I}KF%0LJC{@c2{@4*5Wka@K!5gRLn&VNb%j~sjlxi;Dt}i2WlcH2}{d>sd zv1OFXU(wPp5d-39vl}47s<&~5}e zQUO|qmV6Kq?x~aNrUPXAxk+V4qb*S69SUOfb-Jmn$>bp>RZ!5XRI)sRKrf(|tWt5~ zY2I3;f(&sX^@Ld})iM$mBk`1~6&<4#(7btu#;q|>XG&$7PB!!xK{QQfrc}emz?~EI ztxjOyQJgo`o?{@`xBi!{X8=x;djZ2VX;3o3JXjp#{4={kuEy(1)W3yFgVcr?^CX z)lw3yDwPG0VE{v=>aE=@Er%UxCSRqZQIKW)aof%;D!YA3l`1+uN&RH9>3qw#Nsm>kZ`4g6ilz7S<&e^>R2oKQt3GxVvU{Ig84Myv`eN#BR;qm! zK_h7wTdB?#V23yEwv|eDc4Tj{lv8+0Z1abesxHd;BdD^*+Bf~x`FO63?R1Cr$)XJM^W zsqteM;Rsr(PGBjk52}1?CSlD|An$9fR2rSl98A?H%1X0x#?AV$Krj`;N?K;(V5%@^MV5^i%QI3pbTCx{d|ty`7)qFmZGrv< z_!p*HK#l}K>`Y-Q`WFRtt5{PKrg~MpkF4#(RBfjSXAe^yd4il$z@~)kn5t^;vfre2Q*8!&-9xF_Re!%GI{N620MeZ)4b&-RqF!w;79|;Yn zYUm2Oj6P)E!Bi0tiO3pQIGBpxYy_%%S9LdYu>qFs!T2Kf}|b_XYQ7;4I4_P z?q4dGsu$IRX3aJ*peU>5OI1>w+*(--h+E}fsu6pHD-BTz!v0c0{ZL)<51hl2l}%7( z$d{_CCraivWz3ff7IyV?nF3Q~T+>z2M#i2Yn5y%|y#q}3-;6B(fuwoDi7HuWj*?L> zLNHaUrzmRT9cKqqb#rFuJ+I-7!BqM^tCEeT3x#XLRQ8zZ-kn89a+PxHHmG$O09?`p zlr+;+S&92s;A~-Do5x(x@R$nl!sk#F$5bt7SgagVy|K4k`VYVkb+IuO)6tIJ(wRfi z)|dn*j;XwOw;9Oko>r5PO~R^lzcC_?{Az@asl=Y6uUS;ktDGq6Q8lLe<$hCF$5g6m z9{~Jw)5qBZQe0;_rh2dJWVK5lCMQ$E=hcAi1Zhkq5DJdc1YKjjj;UZKe~Vdt(3%V- zue)SZvxttoF_j!~4?W%GeHl{`M#}TH6OA$5i$9$hdp6 zfrk5-s+y0u@_U)aYium0DzEpy&_6pd750#Y&Z6oMI#MEo<0gr-Vs&jqvJjYa4rW{xP z;9&9R`4ljw@(B5o{Pv7vDiDoSM-O0Q##EPVhzPHa;)ao6;c}>E$5c-N)^b%9Gc_U4 z3fXkVRNyv_-j1ns^r0v{rn;Et$SY=`flNiIIj72usbV8~^RQ&)m*bPE;=>73Ds2Xp zsZ`OEGOBgyytq8LL|mr&Ej6>;fd&PApRL$5c&!E^HWh$5g+=R1qk!&g)+hBP}$MRZywz=BPBkKQUD(`>bul zl}~1`k@|ke&&E`*=ikwhj;YG1I$GoK-8H5XH9-T6o#eS>s-`h6N*~6FITdrbq@pNp zn|(zqSgpjn=1J!4_%K&y@D=dU#=xxf+J;OOPL4H@Nk{H^MW$j}Rp4MYCz)#eM0LSq zq9mm0D$DPn*W)}O3|%$!_|s02slsG~@+MOW##fp&{Xj=dWnWnX{CN6_m?|?RD@M)W z0ZeuN*%C&v;SNlNwNTAI&}IpJnUC!yZUUzA3=%DUK7*;0+8w&cO;bs0wdf)k5ZPFi zSX|vS)vGhh{Jb9~_k~VVZ48@k&hEc9HCjE8rt0CMq!P?)B| z_>@iQdtoV!QZ$v*+A%UTWX+$ds;P)|w4)Tsq@q1J8G(Qs(g3d^|rn*e68kLm{HkFe2SNKuD%ifwQvp36GXW#mo zN>H3*r$}noR8~PhY$k{t`v#xp#+S{jri#0y12K9;YO3%yof01;%4FR$s0Ku9GYCHz^N_|ch{810Lq yrM@X_ z+~Uw^_EK|{{?Lmvr%LjGTRHwKPRf@Wm{UEVyo18MngnF#RQ^lYUrXX4AjweGD5HD)d*aP5{w)=W%SVHrcV_pC_6Jx zdlr6uD(Rf~PBPquTG|0enGNGaoX@r{06`cGvF0Ij{bp2WS^TV#!U^Y7rKqjg78iD# zM@WMlzOdXbpDGk`@ILO}`BV|95l2;d9e^rXRsV=R^g{+zNNrfsx%llc)qU7dT(F~szP_`w6?7uLDekSQrlT92&&8oQ0%yEPf$Qmb$*~YNx9q9I6uK=xV`4k3xdba#qGF#?oa=wEzJQqomUAr+^=-0+%bNFNWnhRJ9(^Kn2pt z^r0%;Zc+*Lx|}*xB|cT>1Q8YHp(?IvQSR}1?TCY@(&GGaQyi-9O{C(g&^wK1Lseeh z=~NUF)=(t?6_Gvpf>k=EJl#xuac8Jf?0QtGn)KCKzLP`P@ojCLk<89bqM<5-ai&Fw zR9EQDmJi(+%iUzTxQP=9^l7L{T}<_PGGo3ffpDYEtHfH`Q$tlh5!43wP!+mgH^)HZ z2OuHEwAdZ0WR{e3@_ZP3cfQ599W0iB5|&ENw>RK0scpcDT(DLKRW|4?>RK1ff;CW59sIq%OA*KINC2ZG?^>L_b6Mlr;)sZs- zzn{gfq&c%nB|pn3^j39jPjT5unX2Z~%0pEW+-$~T}<9k2jl2d>43Dv}Mj z5i(TKtY&cL?Lg{r;60DqN^}SeRmLUP7llYCM0dR*tes3jKK5L4s7kI;Te3f5%tIA7 z%B8FX0ct+}4^>@=_V^``gJv5BL|dcyfne(jRE+7Z=?_BcU~H4N428Lh0t&?|;|^6a zWlwwkso_usvEq6HfXpcmRU^)de(uNN_WT)h2_N`FmD~WrJjWP^fv9@OuT7i9cYvi4 znqM;^s#+U8MXd%=C97E}7&ICuqUt2Iwqp;xt0|0)RQW)(|QZFJb@IRrCz_p2B$oSNvEUgkV37IO%q4e zx_xw7Po*$P9-GyvMAXFZnkUae7o`pCsPg&~gh21T6Lo7b=Ub%M9Y+=FfG)G6 zYAph$JgOwQ5U3J@NRKKppLyoR8CzKDqpIcd1`>FK)38s0QUUa`&UT4hc?;|zdgZoX zi)I5;)&t`nRTJk%3@@vU6PMhVrhHs_Q^Zv1QE@^b$yk4r zwGLt?Wvju5n^6@o?c6-z)z55ndEqhoSkR~Z3K>-?uS&nFmo!F|vdhPFM0)=5{y9d~ zhL@2UGYA;asQL?~4OZ4(ZmvUC&eo$XS*njwWqVd~E`KnpqN7|y zqDBZMglx&YGO7S-yle69R7WJ`hYE1t=VnKsiUW6kQDv?kh35-EndU7ad0rbV!bKIF zd!vAq)Y)Oblxt7@TU6QE%|#}p8MZ=H<@gDO?UhW!u~0yXiE-JQcqG^}OdtFWXcOHW zr!%yruKsB#vZ@03F0shGIUhztR2{`mwVQ;fQb@64&!JquO2LUL)y1IhfIc#W9qDKT znzE@sZ!fC6=8ss|nIUG&S&ATCi>lY-8r!1kh~X@j%nH!TN0_~g}CfqqP-wzsdS(xF|^upGsYTi^JuA3?tB z!ND4{z38IqXVEtChCDLZ#xJeJtSOh_2(^3@MRKY~1gUmb>AEs96oGMTkeLQUrGVbl zqRJ7BBj0lhBmlvj1roQF4tk5Kfc_eYM0ReTdG}()WStEAq+NF!ri{u=>WnJrhGs8L zF{*-F)X&9~8&y{*k+3sOOxs3{Dpr4;QB2Pe2)OgRBOBxZ2{^BP)ETm;S1sskRH1&3 zVLq>x9cffea6xW2i&nZkdUw9Ys6w89S(8Sn8rZ9hDg)vxX^f4kmPy1=km!uGKE^>% zhTo`?klW??Gsd-1MeY9~KcGY2hFtF^sBb(`B*C=Y{Is zY)T!YO8U@MC5uNCf^QiUZrdjeZCSWi)Lgc z#Z*hA5>?kKaQK@Co*rOSWr~Dgsw|33Z&c}1@Cj9>8X*T>1pH^0SpwJv z1ahANqDmEjC~QC?RQ@d0-lR8prn9MarYs!2qkDo#HX#@^x`C8beNUw(4mrH1;t&e) zc`sLi3>gcKR8a9d&Sr1iEoSS*K~;P;l|`m* zu~l8_ibm?eNCBjQAYabNRN1;KAJSi%$t<97*u8bYe4q;7D)zGIt9r<2pwnK!-PaUsM3pl6OC2a z234^RIvxNPKieRV)}JX4NN-x`hR_rpGpMQpR7qtr-^ifK@h1j+?p=~3 zgK~*34NM`YK~>#AVxj;6_UZO{W>6Vah1{EGM)n~yARr8?bep>sri+piG^m<70BocZ zIj9n}DFYXYpvnZ46Wv8Qyu)x%g|BE0rthf+RRL8)xMG;#DPU0LIaTay8ZBXV83TiYPP+!#creW#RTR|+I}|B{hMq4B7553q}!;VpA}OD(LcHNL7W6?$x>=*S1kg- zeZ(v^ui~m<4Ne8bEHVGY8NAChPmY4;-D-sar9~PFK}T<`BDAzaO~g=2v@YLb=fJ}o zB$v9xs~1w93)fn5M)t_ew-(Q$GYm%A*DyB;>M17pFQCIq#cOcM5|L&shwUo#C zcV$S~DQdqTPpAVK;e&Vm6h?gLz?$TwG9}W-L058`j6=++*1@p1vRe*?h-iekZ2pkm z{e=>mXx*{)Wz{zzk-sP!&e=!DdIztL}IS15tT9LDE zZnYPP9Cn2iL2N~ae*pGNdhiN3mtM0L@E_d+a}}WsaLr?pmvH29U_~}q0uhu~att&b z69(~aun72}>ebs`AAkkKdEB9xVX5E+9@minD^$&s4XVHjc>>4F9;6bo2yHq!Pdr9} zFrFvoX6Dd=G^F6AlF)QTYX3#Pl`*v%`e$2ieO+MXTP!W6pM7(ZB)fyWgMK7AFi9 zzuFjd)nbbKe_-6X$_rspQFKo)9KI=ME0B(CcNp>FWj~_wrNdS4+^lwiZNaw&qo540 z`(ZB9VgSfHSdL^iQ7&ehj#=8Zsun0I?>ckcM>Gl z7>$fEhOyc<1r-|SJ<-e&r4Gr2lFf11o&8EO(Uta`mfr5*7mAgPz}$TpP%}ceFhB_b zxunU=A^C&`rlqa-CNt%F+_(~G@#X5;~N-Y%V&Zv zbr@m-9g*c%LKt=4a;ZC>dSZU82W}&*;0>O~1wi6pgM-sdX3Ms`U(NDr1=S)Eep2-? zMtSIlXy<~E1Ly+5aabV)Aa9*s7r!=zjiXQ=pxmlrW>;tvC(+?6X9&!hHJFuzmQa%i zou@&)y0M#j=B}wJ-hSg;YicI$ks1Djcv-F)8es3j@ae&lPjN z*Y(e*;=~gA{&eLVZ3DHukGiJn+j#|61U81>v|i4zT-16)n2Q4urpFvZ#3h+eFuZ{9 z1C4F#zjBhkWhsNLJ)dlVfz9MI#RMRQ77!Pju-@Yke5Uo;kw6jPz46S$evCxC;t%-e zL>`kiN79N`W2Hf0*^iy&xiZnQ&=+$mD7_$lAW%f6TWW?&6OmGfLq+bEvvY`rsKZ)d?9l8a$^l++r_g`jjT zI$S1L=7Y&7z~Zd;2C;@BmFa&ShcXCEX_V@w@a{~i*ag+dQv(EuF5SPxLaXTQFN@ui@la-UY9Vh~&o`%ku6e-9LyI|k=~yN1&(&+1FB zWrNL*?I&r@SSBYqrp_;5_4z+)4e~Qh5Pjrt)U}5)Cu{*)C|{M~1msFsz?|6Wy;}ao zDOtFT0>x?eWh{5QWQ~KS`#HKwnEWi9I)k4^L2mEU(u4mUFBVC{8?u}?mY5bS>BG3p@dWc2?$MA({JTYg8Os9@&z zCQRd^)L72y3whDFwyeV*2Cb$BnR4pi7FpvI=zfJ(VJqb2)^eJ0VNM_l3S=Alm90^U zhAG?Yz~t4l8wy1w3BU&pf~VYQjAIPOC4*%r>|G!xP`*a3aNn0eqh^bIstwraDh(K# zl~k7F&9zFpOz6EHs%!10R+8N8LuzGeIdNx*LW*)+A*xu;xvXVj2A;zJ6WH@Wjv|eS zXn7v5T&$(MG1LPc%PUTf$=q?RVRa=vD#40wx}e24^&d(=O|U93a)ZXfiX3=DDmw}} z-=~Y|o4V3oHn|m}9{j|yo;J%sciXLX+VLENmE@gcZzvRGi&CoDn zQpn)zooFolDA!BJfcldIGN+S7%Gtb->KdJ#2w224L5w^Rx%wSs0{}A!8aDPE&w=lS zCLd$mA_wjL>HXP0Xkw&+j7_Og&s66Dn3FS{tCKcLN6oJ79I`?!G7~ASubP*MAQ&bS z3K-U8<#TT>T1J_Xu*}R6q%Nz3@6CjvM|)!E z64z3zQtC*?r}W~NfQ6kUdvJmV^ImI_%)r>QQt&U#sDp;JMfuEim0FpADI_bSVKyH8 znL42G{Z%Spc-qf!6*4PJ?uPl~aZjI9XAOP;eJtD5EYxS5^K)5bf)WTw1VM#2^U9A_ zGqaem4qy*DVc)}Q>tpl)j)b5Yu@g(da<9%)Pr{qC%=?|=e)?%MOo=)@R6E$ykS)m( zbDH|zOap?z@6SD;sL>TrHtu)PE0TeTI3o@eI-0e_RM!R=;C&q|b`@kE8Nd?M2?`Q| znGAcZc1R|kwIcW{PpU#|p)jIY*zod6MJRAFB5Tv&kpJH1acFa^meFi%Rp*Q~LPDip z@-8Vmn$Rq$2=azdtROs-YCYPeue|7iAUKH#i@r)F?8ZEcb?v90pX|%`H?hqdlw~MN zM=pz-TN+au?P%uh`4XcphR7wZsMAJg+I(lSkQe}GTs#ODS44#7;^6Dqz}^Ku=FN)K z0Ky82$WejGOZ^2%2dtbCgy0b0nY=27p!)ZGezbU7xSnbO6O~Hhb5A2E(vP8TP*cdz zP+XnZm?F7z)TEGU!Ofy>{d5MA1CE;oh=2Ic8|y2+0g;kJPo%@}zM-o9xNKB*N!s0C zB+Ieq7*-?7dA(I&S6McC1Z$=iyV=)`jaJTp;-tV&$dn^CUlk!5bai-rRZu<`)Y?8b zxgsUimglr~{f__>8baMW!B}Ao)C1gYJ4eoV7DSYJWd?c`&Dj}O$J|nD& zDk4gm7Laj*3%ipd+21RTa3-XugA@pkgk0Bb$SLzVflhrvsLMSAX{>5*IujD{Clg}Ks7||l^JBt34B9k-duMhL;5z(VI{^} z9}!&7L>}(=Koe$kj@dz(ohJz-XezaT3Di121t7S8!}QXEkxR~v@R@+&y$}1~gujB0 zq0~Xv$&zB@7QWaAHeU$oN8&~TN`Ga!VQahJC8>l};}LWB3cKv_?H!uau_ppDAs^I)krDEWeg5WD5z4 zApVxP8H$!g6|PBwR`rorhrk5(qUf3jx4Q$m_SC?W>ymzHfp_sBGeBMKv%cB=@ZkG5 znC*mXKxQO9#K03<4N199UBfsLWi$uDq04oFT*u^mopB(PYy}DPWxu+ABBM}Z>deBe zM6%k>O>%k7J%bYu6^{=YD@y#!l?wk&JcxWyXVF#WS)Yz+AJ1EeL%6srUEX(PxBCs}Vc)J~N_DhuT@FJdFSyOXh=i<=QRJI0M zdFldC#ZY+b`0W@*1x~ep(dpaa3bY*#fWe&_ zUmE)YaqfC?5fPsH9udcj^R2ceQQ{*9X0xA}>7jd)agu(TJ(=JZ6`^MQF-}t!Fu9slLlK$_kv5MyIR+X4 zUdY($cK|_B0oDysVuWpb4j4_Bl^X)W@Kmi&$!Y2dc9kKfGv2R!7GUXIw5TJB^9@o? zDlN4m1Mj(`*~`&+q952*xiqhB=-d~R5}2AASdJH0Rfcf1cOxm`oO@;( zCP+iF%?g4n1sMjrfC|Qn!Oy{_B$o61Ave>A4%HomRRlx>7;A+70|PfxdUjDxy~_lI zS1UF{ck{J;!Kzgy@0Zwb_Hy@jS#!dJu7P7bUGx+}0E8Nv#gsM+5$~;K18B~{xF-1u z@;-sIn4fs+W#6_76@@ml88NtW{a}MsJu7s%q~s^xj-EQeCdWc zF-u{bHN@9nvQ4BTXI9q}lZSuR=<+%$>{Y0tx1}tuWSk+x78c(>fB5YqSGd^m8shwH zJ7GSa{?x*!3;)~-7{MDJ{#Iu&_eV@M>_BM42F)p?p8Y^Foc%5us#^Mq8_dQK~T3yX?fsATzbx{JKqX;Fa)#^)H`_J-H+H=oci2>a&DU#QY7Z^XD(mhm%@ zhjcfZ{=N1pgb;Wm$FR{>-fAb*kp{025Y5m)Li@qwY&HK= z{=dilBuNGV{p1XU?Zs6t$<M)b6p&?}QD|hYIulT=8Nm9e^(qf1b!|c+w{t~6=vCOAJw(mXDT2kmugyey*tA*RZ{sHXQfVJXsy$ zP$wrB288=21Qno)8lwpHNX@NMga;oXda4^q_5hNo;p&8gB)E|zz7KwWl{XuFt%tAU z;{gTiCaFfCLN+XIP(?Fb0NHs2&W5YmVBkb;0YWtA9=tTlU}LG>UP2?$oyMI5s|pBF zZk;L*OK=JZI8n6v3r4h4G>}}fATH+~wDQ8F(x^9aRJhvbT6GuAZn@RAd zad}pvkU-{^z}{AsVlv}Z^b<5>82?D-0?sc>*7?y2>d%cuhqMEvC^|a1Q+CGYQT>Jc ziMo0cDf5!UZ6ANN?WpuCHN^2yt3%xRyx+*Lh{AGvS=FzbUFx7+$*yGDvU-viC1jQT zet^YYBegw2rW7e)Mf#dCcZ%TP<4O#aTul*x8X90VJN3*-m#g^Y)?g;6i^nqw`4*gs zT9gx@+qBbQhnr+?+2E5pSLWEH zp1}UOsz5$yvX&fItvpurxw>M!w7Hq>09HV$zk~0r9sK~}8R;1{T#j%;sKZcvo_#&Q z)Mqnxph+6}RxrqLxL43Lj2k8maj8a5X>^_?+mwqOmsYG(0SP=w)B)rG6^f8u)`W?M zF_g;yTkHYE9hKBe>(3ZqR{w4t)>;w{9R zb{&uBO&e&43H(_9zFvjbp`_WE5Kh|mymyWRTG5#Dq*4-xRybZ z-cLk6DR_!Hl(!hI7L_;^X zkPp%k#n4xRGh)|89V7;ZjrFGf$VTT|STA8=48aoib+d~s#48K)M^+>`(nE@R2{w>B zJ2Pu7bb~M&!Z53btA?`%3fEp%4K-`9A`IJV4mqD1G6LJN6$wU#S69c?>D4mX){cRz zq+kM!z6`0E7;%PugUntfNzXiGaO@0O8q|(Pu45?-3*i$S(@f|~zBYr$mM$nCI!yM+ z37X=KjL^$EGSm3vu6PB5?b9145e{=?!{Nj_4sl09M;>2PSQz6+M19Cq8spVwd$+Of zK{Ht_ET*s!ER;bZ!)Oox^!VnXA8XFc{7yZgxhJrnGr~heuoCMV5>^=UrZO`lpH{(B z7Sc*csfu2(41-7rjR_&dBu^Qha}FXMq{BQgmwe=#S{q%ZREVL68WVB)pdUxF>w!P|Yi$5h#n2DMb5tkQO?dBT^^{w2_db~iZ|JCEb-}xr?n12G%?+)y?V`gQZ|F(GhUQo{^|U2Ki|zq9lJb# za2G`4c^8WZsd*P&bWw#ODC={MB?v=!hB+dC5yv-C8h+UXQVMTIg3negGX5HqA%w-y zl}60N9YS0joPHs01*_T2(VbcTtO=4431!g%)`7lRs9`*OUf8O^u&qY?gysn2B>a126zSL0OseS$4BzdYfc89usSxQ}tKWwHFh zet7YX;`OJPTM)(UPchB)ro0008PU|=|aq~8M+00~+u7G?|v2oeeg7D8a5BVh*sAVLC=0{{Sv+5rBz z{vyD|ojQ8p%rTkD-p`=|TtG1=ls%#??VOfF#`w_CQ>xo(a_iYiz1>fXrZT&i=TB{ql9$>}f&VRT zeL+zdGp8hS39byMSc7AkD>XUZ{}!VCUvQ1j^S?#85bTgHrSHE5)um^*-{7$Mzs1i8 zk~OUCQ~d(CfR7neNi5!;u(D*6I)?~wQQn2^j0+y&1(-R=B_J{^^$-Dy|KB3ST=qau z$Msi49nW_y^)C5up`97Ejhjilc$1$?|F__(2I(?@&@)3UoO1wN4Dx!hq`xO~VZ}3B zi7U?V^zQ!_QS#@1Yo=L)3H}8llo_{)4j=@eeA@yV@&7HJrKA$T1!;1C3-}u3aPdJpKX~0c&I>JtMD_kP|&L1TJ2vgi)U$WktC=Lpnq53pn|F>HZ50 z9TP?$&JsF0Ci%@2IrM+Cl#~tCrMm$a>R-sy$VypJjz9os31y$TiS`a`?3ph>S373m z68XegLc>m*td_Kc#%ty>;DQ|NsbsD!hvqDyOgQ}8YgP~pxG;R#i*hk#5eHm2FS7@& z`7$a4E{F#~Te;++y?i3YP%a<{2vNfGOGz5Zr~q?7_y^7s=+~I8+{6w7E|L(<4A%y0 zRI>0_Kzcv5W|Q}VTqeG=^)W$T(rrN{GJuPxdJ+|>Xd{*oiY-B*J5&vPx5%J` z{OA%6I|aCaD9r52rH#LxCB#I3P(pMz1^>+|k?pys3u#MQ72>5(@Kffk0i7j8^Y=ti z#ErR$1bl_JF($x;)~?_OB875(vCa}yr@xw&CO4}Oa3M_c04@?kED9z3--5_tqPI?6 ztoTj1e+$YPPX53ObXY-kec3C$&m)zkyh;BSvPN%B@yL;8__qjnfaqQSbWd0Bmy_kL zpVSW0zT+goP!Zfw49sn9iu++_3CC~zg?^T%30j>c9E<-Vn0zB5I+at4>@1--POw(N zm}}Tsg4a!ZtFzuK_}1%u?-Xr{Vqo? zf#@pXW?K*VVI@#yIai`gR|y%ZKh$S%^wNHdw(8iVt)4(gprn<3u-bkLUdyDQ8)I$G z>78f_iDD;NkA8~;%ElfqGkI`gPI9?I5UvtV)0Xz(a&|~1R|(Xm*>5C~aRu9BaNGGw z1xi?ROY2{|`7E~wxFFtQmR?R4x@%Y9Y!NH|7PLC0t0eI5V#8B{yU563_?f{tL9x}v z^ezQn87OJFLGw%rOFx2_XuV>db;v&L&W_&S;`8ItAVpDxqAq-vW=hcNUr;=qzXgtw zurW2zYI%t3RDg}_RXbC{{;OVR=m9(D@Tp%kC1B2VqjJL36(a|Zhi(&u+MD9De~SsV z+eSy6G*khiUHG?1Yy^efhg0;5*S|$P@tTixER0`E5cs#S)X)<;5yKwtrsOI}$K`#d z1nHB1i}Pn=5SU#cGgoDLri6}JoUjn5!p}5Q0#EqzR%S{3gW5AC$m4qcC-QHh_`{u$ zoqey@Zuj%ULc=v?Qu}Z5fd33}{#$6%sqCA4NvNFgZ}IHR`}_7s{}!Tl2YKKyInw1a z;@^U{orfr=Cd;1_zl;qZ}CQ0G;fX-R5o`C{4E;1H~gRI3q|5@ zQR#l{4s*7jTQqYArel_Gr(|JzF-`z=1QK36c|X_@;i z5Fr_1Z4%^e^ZgcX+HqrSWxBGpkRz zc)!I=C@sfbV`9Gra784z`d=6s-@}ZHou|K3@{oX=zGv8x=p-Z5evA4?QihhDG5($v zzx>%rE|g4J(%Hec%48_lV=;5@94DZZy|}oE-G{>ze;B8Mo)648bU0a;~P3@aoee*Zdxf0=FJMtC;qo^!+23=cm1}L!>b@v_=|K6gH#0h z6;1uOs0-5H@Q@9_g(whij#W_;=iND$P!0br*4F~6_V@dE;Q!%~Mp?T57TD=vFocZH zKOE+Us4YCzC}tRY+5+rThvlHVPFugmOXA7{NqXfS@~L1PhMf8E}})$V*=+bdzP9)8al6Y<~-du8&Wp^lSk3 zx1fRVlXK_IFqXNDqGM?OM~)j{Q-p=vEB$EgDk+^Ej~_%D5Xs0fT^Czh#Y1#!*8|>mE_08t}`v$S6S2djK`>65Fp4?k^rC zL_-KUbvm;N7Ke$3aCtAD^1BlnK^G&u9hGg(MZSf~%6&%8Ly_0=EuO`(-!h<>?{3~! zC-yBK$Pg0EZsisy;A~e@hkOgP@bo!`;0GI^AdcYW<8XAb1LCrYpTHW?P?BO>1Zq8f z88UvlkP$3=3)(B<7eXXbmgLszJ~^hZEgI1@r>oR=0^63qnj-hw7a0L8Z$AKx!{h(eG^F)a5M8^1ev ze2XQ*{x2W^DGoZmMM*2fUkpG*Rmam1#@UWP!Er``nwIC=F<0Im!L2$uJp{I=7;G^R3EwUQR zD)Yn?L^{3&eI9NiVxl2}!JN;V11hsmzD0+^^y5NCL$&|~!G)&z#hr_3GvqsrZ*j)i zH(2fO&mmKM3!`k%CYB)=-@yHr{rT}WB4|C(zO3lfQY_762=+Cw*)v=O@wrP{$PN>hR1ebT zTVQ`MJ4otM0r?hZa{+H$2$e+_x8z&MSza)eZ2(Ix1>Up`W?v}WZ42MljR3=RYG_;h8Pc|A5qnl1DtPh zt@$SFDM`m+?*l#Uq7{0HNflXr3*#TbvytpuT>nM-Q?pLV2>xR~Z@`deC%xPjU}*LG z7V%$Fki@$ssSj#U(=X+>kUcDv#3derGlkL{v9EM}dmq9~$uWDN7BRjg5MF!>r}HAP zT4_F9SNUZPVfI@%V-lQpfac+EAqn?91cQ~b?ziBOLB+E~lKmE~EZM>*P@Qfpm*oz% zlDiHu-zg;c_FHfk%x}ud4mjXsC^Z`vbQ2Vi1kD%SbDo&FD5rjl6j^>x6*A>pIyXUe zYXF=2EfA6?KG{>1exms3w+JG2Tyf)*Km8VBB=8f6^Rlz`TbxEzb9DgJXxc-1piCvH z+XnGFD_?^Otd@@!@>}qj0`OqrY8agafh$8Gl3)5MDKhJa2$x`A2zDMYSr~-dx_#3Y z*9Ut$5BAMqpOf6kJH!69^PmxFjx5v>i*2&=pzHs9%|Rs%klJ|=U7dAD8s_HmTNGa( zGntbPVtpAZ!$W}V`EPP5Q)f#Qe(L8ie+aI29z>66zphS!g4$r3{LX`k>3K)^i2@h-)~WH6xA?WO(~&6s60q~ct#$~Kle(0zi1}Pi4jGU z&EH}PgtiG7i@(Kflt{TAy^)CgEsW-G{)bZ@^d3D6*2??7yQ^vZEq*MlxD(*>w;-%W zJQy?#ho(F@gc*s>xl`aizXc#4v+&|66&C5AQy$#U z@`Kxy6t&;N9qJrPHG4O>BOO+WWnA#mraV}x4=oA0Z2Z63j*VlZWd6n^GbP86+JVG;ePUCHh--7i~RrvNbsDhehA z4i_9*U_*J}jUaf6N>*Lwv=f2}4CO&i>CU=OjAI~p$P4Ac`N zKeB#{75jwVorRl=zU!~dL|e>n;b|zLwl8yiT5fZS{1%*WCG0a3#B|GwOp^j;&q37! zc9e#?n=G8bMtXsP`7MGTz#$K3i33aETUdU0=Pg2*@oqr|V9(VpxC-_&x7fR2#)ezy zGg#JbA*9b6r#LhqwuN6F3{q{84Q=slW(z3D7U{X5j!S-B_q)ERI|(u1gr#6blFmqY?|17Phbwn(>t5un>r* z-Wq@wYED>)8unelf;kQrOHZ&!6j-bSSnS7N!9-#7`--*-oB0Z^C~S4FpiJ0Pub64= z@`?!Z6iSi^uV7NJ$z1_OiinMcGhq?8!X~-Wxgxbt=NrkC0r})Sz*!C3R$TYOe?ICR*(a&7_6}0&5GV-g|p7QUb3Rm z3M*kSdn535LZY6oN2ey!8h9sX$GCIaq|f)TvM|gpCUJn2KXsDnL;x z)*@^msW|te!e^sGP{L-53L_E~&G``=SAoTni1PBF4N z#R}2hN`SGNUh8o&iE5nq91-5V96xrAmm~F#1VS9v)CTyppu$n~*Lja#aDGdK& z0X0PwJ551=6XyR?rZ5sUg=b~(?E}5H-)$;9O+f;uFlG`-V%cGVrZ6tR!lW=33!4rm zoGR?abRz8NH5eKs%y(e`B!-d7>?O(Hb*wU5@PZt5o>NE zhGce<*uR!oZ<+#U69aAl_7l^G6w3-Ac$ydo$6_{6nxeuMdq`8V^T1W`Tl_Anw{vz zUeOea1zCo}tK9970W*vf9!tqf8M?Wh&y|c%ENOA^x&iFa@DW7Bfz0O^^^`HWpxtR~V)aks10+ zaax(FzCtv!VZ9W_QMmc&6>mvuvzqG{0v=zZ5PVK9^%Cy%dBXR$B72|D{;-(r4?J zVgo+2!r?Ck*7d9grocGQ2p!a?cy_}((;gxcV2abKc!u#okauP?Jvo6p$1D@7!+fU# zQ_wzmc6KYv&H%DIbFaj+rxN`YPboPAFa_|=GoS%bUC&g3$`gE6{4c>2y7XDAd#VTv z)yTwPiV5qp_O$7kg(;qAs6G?PAIu0-|^3Ew+27Eg?VC)OKiN8X89Ky%?vhyksioe<@9VieGDRh?*cTtWe@ zs7{y(X!NBMxzLGP&IvRyC%TgpAODQsDy$lRfQ ziC*N7qYaJLLIWb9`L{tkDGlagdkN(uXbR-mpzW`F3E(5NhGh+!q;&KM+9(J#zL&W8 z;+y;b>~4XMdx_3fX=VsCVS5SlFYcE!dkMziMYe^8sJEBMBG8t+#Is$(ayy{)y?9o- zgb0C_=J|99s&Wa=HFAki?|?>Ir3f^FB$psXxx~xDC0My7!eC2`oR&z02Q&r$nSY)o zApNs?`Wg57O!Ie^81WfJS)$zfZ0FH8=x4@YiH%-~TwIA~{|rYf5&pCOR|%$7iSP^t z&8td8Sd}>cGqe(bR#%m%dNr#6ng)PITb1x&XTJhyEh^ADR*5bFO1vmC2{aFy0NT<3 zw4zxhLiYb0wMrzTO6;hriGubv0IhDQs&zRDQVA3W&=@3vCXY%yC1`q&942TgYoMT| z<8cKIcJ^`{12jV_;e08n#BEJ6vY?CY!B{rrKYY&y^ zNCuif2WW5^Xx1ud37ryw2Q7>#fhRPUC?%AUWKN)c&h#!Vf)4GnC}A3+afcF}iMAJ% zU{KL!5Z=|%i>8vh(>bGYc@iQxT1+RAdAB*geI@NkRcb*RruMgj=+Y98l8|~k$G2Cx?qG<-Gt=fs5>!oF5lPVAwDBK_Ij5<1 zBm|yTX(OTM(+V;YF|R-^r=PjH771FR1{y`8Qq(3S5`?3+en^l?YP$`I;ZjpAB;=-6 zAR*!T4H5%X<0VM6q}q@`f=*OzAdmq4KjLZCsQn1ISPgFvq$5nNZ>N=MM=R~wR!*oZZ?IYJ9bha^XoG;1(%L^@ha zfFpovjo*#XnXT1sBTT$CZrg}vT)W9eke+LEYXtAtbd_T9b)?6x{YfKq;I$rTgrwK{ zn-RHt(w7kg*0pmof)@mJMOQ}^W2mdL#(iZhY_eg*|FAg;MuaFfU|>Wo#|2~51MsyJclWqJK;k361GSwn#%q*gGS;SsggyXp)##Oe(iueaB!p~&;sfZs> z5z#C~{2sD#rHBAV5k(yv2t`bGPsGWwaXAsXkS(T(NG;himJG5D{KY8^jRNJ!<A;iFL#h`Yh>DN7a0wz=--vLEw;}Ge zA(k}Xa>Tb{C&IU%58DuczLqp$8Rgz2gnP3ad_%V(WP3=yMH+pBa6=T@Hv-XZh#9}7 zg8f$9Ye9JYZ^GvQ*KG)#Y8%35;K$s^E&4!9@cPPNX7S2u?V3xWW;(Aq)%` zVH&PPZHU10836ja7HK#&nC7pka~!(8IGQMK*_HpnNz!O5`AbRSx1>h(pbX3vMBfhz}>3gLu!CgTVUS zK3oM4nGfd`2O)g=a1xxEgW(_$gt(4p8gW}3#PEd?x4S+k)Qh+}4x%GUT$WDUDkFcF zgNT~q`YZW%;>Ok#XMhAY%|Rq_ibKF@>{jF;@QU*&vnTGBgE-KM+o#0EP2w2BiIa|< zxX4+)If$MUSI~8G5SmHcSq_3|G&Tnj&94iE^sz5oK&C;MDRG{bLBvo!IKm*DlsE)~ z0A~i#?ytPD36G1( zr4UmK!j2PXtWul;C*OUnBbw}69F_qV8dIU6G*0;g!mH{CDsIQ`)gz& zbK>e;gG1`v4#gc&AgsS zh!F-;?dM>oBqqqM3L>F?PK-%ae(qa2{2U$wk+q^8Mj=7u4ncSc_<^`;)O`+pAo8Y| z_PO_eAa)jrML!TsGtyWgNy9$(a{`xg>Y96iAXNXk9FwH=xu4~fLK_DJF=00luhKFQ z23#Nrqii9ca{`P*p8_!^keqXpo(e>3gNt*8#JOT0L|L12o&o`PCI#Z=mU9A9=hP?= zwz_jf0XEEY8gGW*bCmnO&6CGS8;H(#& zy#`p1qx0{72p}CV|KS<+54Ya(VEBjbq;$a35DHs5@caQPnT~e;pxCC1%^!T74ibOp z`st?K5ByNKWIr%S-In@coT<~GAGD}0UVc!ky3FxId|F*-`~ddqK=?r~0D~X6U~zgO zc&GycKO8*oLkjl+diG(YSGRh7fU7>t@1Vd=O7_)h!H1S~nGeB|DIaW*53~B>1K$oG zroFlseBc5GgAeA55x?mVKE$p<9Vxe8q@oM{AlFoPMM2jk5HuGO_L^Uy{d z@W0H1n#)6`RUXL5cqoS!ovf#)19jD;B}uy`u^&0 z10D)QK7Q_?8qml!lYi8YFz_Ad=N+yqsj+V*Pu9t@LsLg9?hty%&j$E*AXlhcw;j5N zMkzC8BCRW02Xo|Ec1SeDjva;#JGAw6_(#_PwbtPl>u^@q(UsMKCZ$POs1BjM&nrrf zI(#L$vhI#g2TK?&m36M^Fr=BVbcjeCfhZ##@}RCYIus~VrWYg|tWy9MKtcp- z5Z#%T49elXB*Ad$c$#nRU7-4nnLekvNF{ zaM%^=Xv1OF!r^kyLlO?%t`2a6L%tC^Ccyzo;Bf5$9HjUg+V30A>DY%>=-#k)bu;w_ z4zKRXykSvKcIY`K9Nml`(^Q@DYP=Sj-9 z!Q#0MJ+%$bunjW;ygDk`-btnY(+1hBLyb0E*|XtU>k!Qb(Y$pL6r?)WnS$+u*C~4q zVo(yXfyGsX4LPi9|1|_r>=GpqsbkmwxSH%NU=8xJi?=nzaCTW*0}k48Bx_JbauHaA zDb)_&YUo|N;i`c|wmVHVP}z2`Q^Oug4VHDg@9?3bZ`Who7w)u~1_9^-)WFKsorb*H zwQd@MPB?_52?@63ya z3V*juG+5Z70V#l&S7?YO@KS>Yv;>bL(4cMb@_q&b7|Lfz47Nq7^bAzKJK!0JgtuR3 zn8w;m=L}_phg+OMg6f3f%`h9`!EA=5s~MgK526`V8N67{%#gQk2P||@Ztx6dh9(l; zrf$M3CE-O|!o$oAH%09=G&49%cmq9n$q^qsN+`TUCp@~FAsAkW#_-B!hCyUu3l+lf zxOl6XK{to@RB3@AUH(cdVoZ(XhKMH-GrT6A^OqsoiiZ?0o`XOaf4x+O=kp-1)GmXn z7$Yyfq>s3gH=g(8p$)5_o$}D@GBl}Btu_F(y-$ZUyq}cIg8j+7tlh6AT$jZ0lm+v^550=Z&CC-QDG67+8kwf{=|rgZ4dxg42n@s4z9C>3jz0Z=0hj*;DD@Y*>=(Y{7gDT!VSf7- zePK+qB40=XT!^CI3;EL5wijY{y|4}}IpYPrqZh8beYiC*#23bDkr!0AZxJs@{#}5! zyRh7LVOL}q4!4h67a%Dsb%7R0y6}{~BhZEa2^h}|-0dsAh0F8-$pxbeZsP*K(svRU z9so_e%WkV|f#2W4+VvJv>=vrWE&QWxf$H{gwuR#MZJ;gCx_xtxEpVF`aC|MywHENJ zW)`d#%&%IgMJ>F`w7`RtWUYl#Ii*G5+|a_(XTckt1XX9Tar*@cB#yfm>evAk{{&sSi95)jJ=w{Mfbf~p{UE3oPn z4%|K-UIBz%p?a?Hz3roM1xdCqM8AVJ5Qfra`$pOdZdWTTZQn#I%xs^|tUv=<0eM&< zi(iHN*gndxLX&P4?y?HIaaGt&Rlq7$xDBdsvwe_pDnOynX+!zgzHxw<3|7)?pCGo6 zrSTFEUMi$(pR`K_WxXT4_I;B%wYakU;jF(@$N+Z=j)^W6NP=sh*B?m%gi#=T#P&(x zgC}QL`%Wk7C29-teUjEbDP!yAB2Ojx)VKy4+gGAfT>GqeyVO!43y?aSwU1%aV_09R z+J|{86?RuDe1J2N)=nxFklNRZWVaH%=-Wx{3-aR9Ks8tUBvJbUP5aod0Vx&A+kr8Y ziJ>;;npLTQiXD~;{!QgbPD=%TrF}HArhOu!_Bm7Sqx?_p!<;Zr`?#foW@157ff7e7 z0^g|c7=7AdXNd~C+P8!XwnV6aFKS;7Dl~#Yg}y%RV>HPG{RGYMg9;%C+xj@|8}?%? zxQ(=L^&nIzF{rSlPWw1{vaF3+Y2Vu0PCvy#Gmg^>d9 zv@daxf<=mCn+Z~wPVJj{6j*>7S+w~NMssl;lZ87H)yz8O|>06U>{I-!-KG!z93^fiHBoN#aLV}cV>7@kmb z-h`?44R8~fKbx@gnxL+lFxJ{PP)*otpSv`Ho6-d4N}6yVX~GoIQYXlIzJwY{CK%h8 zz(`EECQN`Lz=Yntgp2LNa+i?Dq}Or@{oE2X*}i>S0;lc!N=s0ZC2W8tSh|&vxJsBS zl|W$J$9GDYP)bO1QUchD623qQUpxs@ze%XfB>Z+sz@n0nS(0#Z?kD&CBXuDOAc7U- zmv!P79w-J6nflAyZ}tBY_=RW015EADCwmf1z9R~A9$;zd{&A#+byuIVD6-nj^jsHRe5u{_4} zRm0zXl<6X<$Bnjm_l;{29K4UCScG={R8Qe|GFcH8@VXEhYzSP})#TxqzA>B0|k7@Uf2@YLo2pweaYef}Rs`teR3vNm81Iv1!^&<^o8^cW| zpN0VQoemV*`%)T0soqz217h#nPeXWr-TV6NeKA?XP(wi7Hcmr$X%1blP(x@D=!F7 zd>>Rn$oIY)CJ0dTB;md95kYuqy})#MAaG_NJXIi+3W4xqK=?gC0Mr0N-T&Z^{sHm& zgVRxe@bs#+XvTi9?tRzu1H$)B;|J4wpYGlVY5{t+(>~CxJ_x?(gGJ_pz4wtJAC$oN z?c)P>@7snCD8TRNd$6DGf!x{yO0fsu&3eFqdeA(2@W$uCzMbalWF{8H+`i_^iNln#!-4~q^+RCF*C=->^EKJAQzVdtWG&Nm2$uh_$A4K93Tg?!ErGE#sSt{9NZ-i_U~{&R5=`!6Au0Xe#C+U zlnXd$=Qnua8-R7*;PY-UR_g{Y%?(DtZzFE71b*&r1Np$Ok!>JaY=Z)|!It2+<+H)0 z1k~c$09)B$H)8{=!3LdPgSX=vG-wT;Uk$#uY5?WbU{ciJ>h_~Hc^X*B<^xp{SGm)G z{5%cDJK5k-eGvQvDfkuZX&}?>WdK%c;NmS%%0I(W?9EQ{UkvNqG(cotx4RA0Ta0S19XuxOC zU}Zmp89f6+@WVQTK*br<*$nuBUkS}X%`t8-{9O?OVwosB_k z;WsOox|UTOQ=Kku?UL6u*Ub6=)K_fQ><=u8ALQAAl4;OD~^lW3Uy!()0MO zzQ!OA8-r{slr{!6iv`Tx)PDLo9Y3qZK(-WvlOzVq9KQ{TK`|b*%Bq|I81Q@;3^sqs zp(sc5dm5$#9(an#C{IDJd z_5U`y$glBX&^BepTu>r@FR{O0P+uShBLy+|)^%GFV(>N-7#(787Gm%&hyl4Gzt(N! zXE(`DS;?=PBgs$9>xf5w+dTkcpkxq(V1*crf25W)Q8NxPph!%mK1+RnL0IGm0~Gbr z!GVqZI3h$0Y{fJtd5Q2ZV3PcJ9R{tI>g6TBR*e8xIsNv13+=B?=g1I}XY(LcpLw%CCa*Yx?9@!hk`9r_>fOXg-r*lT3&^k<|f% zR*jFqe+fRlAisVAUup{nV0^(w)E%IcpTJB<*IuwoFg0^~fvn_Eet_l+$p=$@{ejsLVIhXT~Ftsk=kuI>axj-qoppwM} z+$g`K-~umi!R_J}{DZat{aP?mervVhv{eiIli!7E!FOpv2IaR4E#OfwR})}j4R&wz zkh4H4kT46_L8n( zym(aLv{4dXQ35^+>NN%27E{n=DR`707D_=Dxg!N1O(O*<*`r|Qf<^(?QhvljZ_WP= zl_sJ7ETkjb3F-(6y8kEGvQMxwKWtA>b24ms^XJ@+rD%>Ps2X>I;L{17%#V~46oV5S z892d?`TcEzRZJlrPh1nAlqOhlCfEQo-) z$2$^~{fH?+h!!PCw@-rQb?EJnk}p4hN6@Y>?nn?S9GO4y<6W7KkJpgkM3BIpeFRQ< z1a&$BD!~zqm*0MkK;w+yPB8+B7eQwh!8WQ06dX}*+cQl|L&`9}M2+%MbP*2+|%1`xC072b|0UU&sR_ zfp}n8e&_FiYIk7yedJ8b^N`fm0jyI8o+%wr1s#|vzYXWWd|wVYmETMbyt{42Y@P#t)92ppB`K^zEVfp#h7|>n$l`RHDkr+s}VIWV@ zH{g@W@=Lo57)jNEfs7(XLQ(QBP!Yp1^#xe{G_a7RN?L##UEm(j1piQ5LvZEbuK@fXXY-3s+#=vjUb^fo7*SI*H3~Oa*vD1zOZ8 zaBi6b)bgWK3N$;Ge+6D~68BLcGsfkYA_UCuKnmC{q(JQC;4eR8mY>f*Ex&ghF3XP< zDUh&es+I%?d~eI|2r0k|eRuupFbwRWK#oBHvE>)qF25od<1Ju60m>q^{2;|opftkf zcaUuE6VNxmbJiy?KMn2jYqi{xAD1O?rBA^8_X#ZI4kHae0jBp8*v;`<8!Kr31hV}T zXd=qFjUVeLkav#c$WI^^lSS6|6=v8LW7Kt6Z)q$zVp1C=E(TKkSPsRRoC`9TSymH2qb zKnZkw^Z<)%5Inlr&Hve465yfkf3HX_z!nE2fr$=&cKAy-(IEjP{70Fp7(w`*KLWVt zhN7^d_F6jv#$5)Vs0s$HsTeLP5{UQ+JJ^nIG6I`Xn@ot=H(LavAq8?4ffk=+(!CE%B_rF=kA*k{2R zlW>z2h-BIAlSRhSSakHCqTvYlp=yfe!uIh2Th2w$RTwJ!gNSQ>)E?m1UJAk?9`^@s zCsGZDp!s&vHwqXADJc)IhtR*yLS;gMT~gu`DM$NzsZ5ywcYq2;8l7XB?wZPa9WXbR zj4@LNP8LlEB%}e^@34aswn@>>0neX1g*mnDWqrMW--^|VsFiiLv^d~O{g`5eL9}hy z_o6oX$2)|6sY3&Z@Ur0sB;J-@(+V+X1CI8~Zd1Cru3jCLReQV!OyN;-*MN8H?+;V* z6PEWqR0Dv71PK~>bH6SBr2*yc-~j-FsFhQ-SVd^S{2#H_QdWrMaX(Z3GWhM zw|!CK8Kat53C^hmJlTAg!xy+Dz|#}rl=%u$#-K9T_ZgoX!LzX=>bh7RxkHvr)z zWdMCOv(Nfc?V1T>zqZNtS_@?J_Ai&h4S3 zfYXQvG5oD^jOGin=sovk;d&`SX5Oxn1@NGv8oRfh_Z1twW&kDJ2-9qnsR(8LyO74M z0CXREhFpANq=Hj&1W=~cqL9XY(|vN^qyW@j>43g*5)(iHP88yI6Cf@gf^hG;$>XKC z1VEM)2sCk-a2jXxk^nkvlqD|2aRlh30+ixL@ zADNN_bL>k6Fs2_vN6z|VB4`f^Ae`ibk2ojC0O2C(5&#VE=Q?hYN1HkVC@^z#^mGGT zslocN00Q6{Xcy?8d^P|)u@EuS2r5`eO#iIcR!0Cgr{>ZICJgAdG(~zzImx!^kUAON z5kP1$4TZFo#gDtpjsQ~Pw8Z}e&~Hv&lFfYXVl zS0exyPr#w_#BH6e+KaFeKw^4l)FN!agfBg;5r8zO`FB8@e7G3_q@7C`EI#N6h5R9f z+~icHh!jr9xeeO&pV(sSAW?3@dot&PE90m z1;Et@+86GO&QyS#@)bJqQmJ{neP=fez^ zZ>dB|hvv!=jQ?e~WoJeJi3fMGu1-Yk-Ae}eGmYVN8ddocEh7NY;=NhafDawV zTo6a?(vOS)%w}6j9L*VjG6FD{{GG**+MUW90Hn51>wuIj0zmaS`bsgOd@a)V7pU&_ zkrn}9$7iQ4ll^3i0G^rWXinB`m9`=PN{WCOsF5$CkRwS1z(D)}+k-*iU?KpCE{ToyIc0YlPn>ggk=&Oa!3IFEN)aB|a~rPDB79jgian|2ZI=>@c(x6oD4w zja!^$?>|w22;eKeLWn21@~f%$B}><=Kep^50?>Sp@z{G0?oo&U@)}qTfRk#3wBgfr zGCz@9iA4lJ+oiY<6@tFFnWbeGnt8$6*%ARnsQt|R%GXF+DKmb##((qq9!KYD zyb}SaI4n**i(;RG)D`g0zX;$#O4qB;FlA;m5xndfyLn97`X#=M03c|BG@M35%rF9I zd(N=wI5*hh=*Me^{$v`|g;_ z!QhaL04|y^QBOuOe?rnWY{f7Fpt~na)WFysQR*@Rpp(MlXA*CUm@B^?0J%oEBb=dU znhGB7e73^qOnGqt5NAQdELr4}h7$)s`Ob>mMFa4#%o%{QX&RL(Yz81~Kt)((0BD<9 zNsX5QAQa*MidcLjm{_7g4v^OhAw&S;Q(Mt{ma(o)1s(e8Eozwopan4&8aFnhGXP)A zdS1@M%oscaz=cQO&e3&6@(e(<%k-*~QV^BB+0FoPf}ERTdY%E0Q~}gIV7ghx@G*M^ z02$UfU(Fl`;n_=w9X*`^5S_$vz>anzx(oo}10llCwOSJMA5ED{DHH~IkXD{tTa2E2 z#P(n3CfFdwY2Ib0$pEDD)7~t25PQ1&j?NE5Z7vPjq~D8PxKAiR<%gTN0lY_aa_hNyF90JtuG zA4u;bHmMDz4hEDF=y+#Wl@W3w0u7o0ked`+jRKj_UKLbjztkOhAPqR6#GEk!jAj6M zpOqC-*?(xiKD@k;BrA3XKypT!8jmJ~l{hh|If}bD+FGeS13+lMGNNwg5#1TO>v79b zg1|pRqc%#huLNmnYF=)re8-x43rf$M>fvYHpD`=~AaSj2eOw{W9u~jf1NP<1Oc}nT z&91xr#xnr%LSzl6A@1d4L&Fe9sxtuG&lz3cn{#V#A5nFHFatp2tjmd4p~=FndqBQ^*WK@@L6DQSu@LGXS~b z?`%@d02r`1=;7|ax1=a%A4X7HMJ{7&ANot7UDkpC;BKrh{MIysp#kvhc7ZFj=;{m( z4M2)ejD}-G8UTy;8SzrT!$Lbq*tVwBQ`w~f$OiG*LeF}{?=%1$1BIAwrUGSC78;th z+G|FGmMP%|B}f_oiS=S3$(84RmF&k?D;HXh6 z$bnKI6VljVWQY`E&9bQmAVd-e#Sr^qytHEERqp?6Rsj@W4M34M)9e$8Nz-?LoD^wbYpGF#j?{q)0WIM)IgYE9guh!zXT0zeN706DeQDRfE!3Iw>A zdje3ITmm3Bemf?tBm6TGBLGx_R|Mes%*6%>Cjv$7veX1v@?Vo0_$7hxdE836N= zSd{JER?{i~&P?djVF~*tpa|0%(IEhoqk$ygMHu)U zOQ$0N0|3;=rYFB(0ER=U{{LKY{lHN({S^d@h5FnN{XeHzf9-w=bU}ChzXtvPKvrQj z4OH>}d{M57jjh^Y2e-EzR;O>lKO6i1`;$WN zSDCevfjR|nzc~eS(SPe+Q55ZKI%x@w-*}8s+dR1ls@;}>s)+vEcSUh6<&x4(oB40R z9+3aalG)+ESpy8+g2bSdIR%4c#rjX5d4E4cvoNox|8w6vK#!(sZF`j@2- zD%<)lCEF>T*;wCv{^wV$fU=(diU${r=b!&HVtA!|7CMD6Vo52sCNO?$wO$a{{W(DO z#@j;yfA`c<{MJ1Dw-4WKD@z%Jf34&WfC9;vuu}d0r0#Y)TT?OQ2}$pNj@an8{Uxap zl|aDYyXyX@Gk9fx%zhn3-I-v}gaSTb)GDpi!r> zzsD8<^!h7}_s^ZS0oa_%T(thV@zi0~|7=+HDc&XGv3{!lJU}zmKTk$2s=wbI`F&kS zIGp-J{<<7#5dH;PlRq7`V>f_}@>%IWDRT3{2uMbM0+Kc8pD93k{^_G;>}HJ?{p~*D z{MiX=3d}_^mjcF9lwaCjWrME&?(! zR!Z9Pa*u;Q#Mu*yWR+vNmL30H5>LlJ|ER4Hrhaf&g3DR+7!QT&u zxT(hzjr(`z`(5Pw-Cu9lo9oOJ*7Edz#r?9+XBWo>?_b{0D-!Wj!!3yMulw`otpBd6 zcbfv^&i$GFutl7)7Pd#M{4a^3B%|YxJPZ_7AEF1OiGd{fP_` zRP7f70oc@<&s%i<1@}HZ(|J7;gsV4N8yw{m+OM4rslV=O%H2eBcxb;h04!7u?^%zZ z9Ee8gIRJv$ze!zWogVv1lUKTw$qx*}{*y|eZrip2ap~(P>>bNUj3pDG()ANL<{hTM z+O72~4OTF_PgcrWp?a$l)^9y-)4S&ov{hC+R=*!%!F!my94dMes=wB8Al0;*(d}9} zL(8iee{5Rm8uKj+mydE@+d`)d%*Cd^9#8q~HB*QKh)}wHL@<|rpq7+0KHHm8wudGC zd~qu2G9T)q&G!|QggE+BDo{Zn@#BD>=!XMy7F41?BzH1dLjQ5v1~YQw1`x&pO$6w# zgbB12r`i1&u#flr-Z9|3w@;uFyYuJN+3gO?+qy+jl=EjA0W!gNmQCFJCqpBCoc(p# zziEDKW^@3eMAh zNM>NF`DYs5nV?+tGEufN_P`fA)qP7Kc@>4`>fVgjlnKacyFN8)eg-x>EqoNtL`oqb zQ(->j?oZ8Mwe9V91jKQ_bS$eYzNq;db-$ATK|NrapFrrLfEo)0RGQ!VJ-MK@hY3L!{cCHg`AgB3jA`RlG zW!FVj<21iw!NgM_OxE}_XTdbTj5a_An0GE*Sef67%|o%myWvI(=6B>1psN8>Vc`8d zUzHkua7A%;Tze9UOSK)Dy2~V2b zx+$%|CDda(V#@m3ggqL-Tp81dwVGu0;x+^y*5!D%)ACMt%{bt?lm%9yL4B~voxbxkJm{NQb6yL_fjlYIl_Qx;Z2CcGgbC?p@>Cp}W)RWOU9{!$VVVf)hlRCt!S=RK5c3r*0hKbNu&jb?2))2j!2I5P{St8n2os*t}>~cC9@gb=4y81Vs+Lv z^QkvlQ(38q5#>!#)nC@DxSCmy)iEcwxC)OU!HJ2M; z1iMmoW@BRPlZ};#Lz>Nh*8Ka=v?o2S8mWcn1k0A|^wQ}>|JO?NU%MddQ*^GLijJeE zl4?m?`B3edU#9fC{n>{5X!}1_(_N#VKq(jqA$NHbCX=46KX-1~Mr+-bO-A}#mm)mz<`j?U`6rEBlemC8e_}$3n zorTaeYG}rWAC_AlZ#3>pwR}e>-Ob=+9BDON?Q@U!;fJv*%Y4(1tWVf0sc}%%U972P zPIMQ;G1uRrk`iBkVpf)lu1=PuWLqLO#k=11U)^#>{&%F7W^JdO&a~uN%8S^V?C&Wj7DJ|bj_P9G@#$taBYRTB{+@oV zP^MwiE8~dMd6H6jr;AKuV&+E-X(bWr$c4I_gh*PM6c@xZM&!h%pRQBWyNL9PA{q46c=aqd(dsZ>l4Jm3(GuoxI#AS;1W*2#JqEMPFeW+K8$ zB%&h19ODS$Z2!V2Bo0AZwy-a#dRh!4QKiC~2~jVHBt*Gd;=r@yPa<9C`81S-N9v@=sR$9Kg{oCaNvK*V(-k31 zmNtwMf@P92MDP?67N-6Z#i|NbsIwGdjE0e(u~=MCRG0}wT~sZ6#CGr%Y(6YJ9#%{+ z(ubz}zaq5r@*AQ)pQ125xz6Vhl}QLk$ndft1{yL@2usWvh?EFKmU9IQK6JqX1_O|k zRMb+5sb~6wn0QLU98if*wZIm6g47*Ef>beqL?uv)2?D#`3zcGm1q>7@kP_AcDRKxY zCNOv)fCCyVU@*WznI)7~umc=SC!yR;od-++0fPdh0R;y_1r@~v1`7@*xGrk~g98va zSPcj`n85=9925eB2oN}!K>!Cc0Due{Fo1yvAaFo{hbih1DTz>Un*t3fgVK7@IGX={ zxl&mWaim`9tfP8F>p#jUbu6);^U9Htb~A#l5NXbe#_gn&i*-fozQrhJvxLmX40j@9 zOzw^hr9Y??yL+z91PDkI7zjW}48t%C#Bdy((Rvhs245%`ZVUzn5(oqoK5i8QSqA_h z0w4fDL;?WFhKuMyL*_|MhW0_m+xd1ivD>ubj#+RnEXhysON5C~;_D<6r>$e>BICH^y&SKDTb(mm8yIi_L-_Z$PgiyGYo4XSp`x&xhoIIe&HLbzH`bg|z#kUH zFfwko`uLl1RL99>{bQP|rcwoF1e6QXZ!X7;G82x z!%O7oe@2aAnK@oa-eg$_%DvN>Q}76a-d`pDV}Z@8c9xYav1$m%cSeStm?K8;G5Pv7 z%zFjA4Y1i>*CAx+ZgljR_xJmP5hH`tkG7VOBv9WPkzo zhUErjC*;o%(2!VPdiGI9B4uR!Txib>2tWc39d!mfYkN?Zz}^qJ`8Dy<=rGvKOQv!F zYPK>2%C~+#{Z3Qbc+v3n*F@jcY4Lb%0l$rViWDO_DN~&HC_}EMa0sf4Cf=s6zL&tx zZ^h8VlW3Kfl`sx{v|M`1tab1U34nkqYxqnFRAMR((i;d%OTZy9Iw}-`+iiV(&dfZ0 zlILR}kmwRIV8;nlOjJp|)qoAO;TquXOrtkTuAW7n2Vwf#sG~4JCp5}Dk9kg3Z2$Nb zQQYGi)sN-=(pX%S1PTvkI?4A};EMS~ifT(7DzQy3a0x`n=E1ChP@N5va!;I0< zY&aJBNhp-x54!NY?7@SksD4p?n;%p9ttx*VKWEEe7z@>yTD1wy_uv8v_}Ax=_s6~ zj8eGGf|A)78%!TT|470bfq_Jc%Cvg~HiONPrSO9elvd;>sAx*VW6Tp+X9);N8H2pA z6a5kdI1;0J9K`E_Jt!#&4s;%vzuCCl^l(n9m^YSlR0A46DKl=QfB2OE!B zW|dRx70BirE1nfd;i!h?7Lo>8l@6m%>F5jMn4&8F#V zuui=#&Z*)?T;$?Zt$aG=G;%5%aU8}Q-y%*sIp4i~%28`rrt{Ru;-3&kCco}E-C}&xyhr^7Kp%|IPTBKak z(7@{|mU|O94abU-E1P)8HSS)4*_1W76%edx55pFS5J&J>YdCol`~rGw(Sbat5Hk5h zaZu5oDN|T9c&I0&nZuy4s_j3=HPfT|)FY*;v6ldcpgMGjU$kpKQVtKz$oGc6C z;`r2+S-trXnEBG~ZxyAwH8&1BpI&Q?yaD5kLyNr*;vEksC!b zpN)D?I6HbiRD$r6mD_yZP7Uq}yi-3;s@}lyylal%1p@64 zcFBMUX#u8NMzE8N-2e@$I+5m77m;SCGa7%JB<$`DzzDI&RYn0Uh2p@DYe=*PB50xI zDW+kqL!@z?%L#eZ>j7nsD7-81wFREktc&zV&2trK+eDMQV)K|Hp^m`xrFiB`HF@;n zydbw?n;I#%_r@`sp7GR!j2r6i-zy6i2gSMZX-#e%_NyUgA$e*|_)FEA@L5}Xqd~*# z%Orv{XoXLNg#U`j#3LSk11~n=^w*z+os`o_4e&SvO2zE!t)ChocV@l`l%sZnvW*wf ziqr9L|M!3`4kJG>+#R(D10JQId_S%w)WHsV4_APmzT5*M*$7)WIp%Ve0302wA-AdJ0l z2#JAV>yQiM1=Q-&st2=|xKK%41c3%OfHvUI;dffEyDo9FzQnrkaG86%ESeF z#?H`aVHj&^lI2_vrVtE+ca&k^reUzlq=_3gj#R^-cd&*@gQ{V4eS(mMv4&-w;sXmq z0>#ByZYi@=#=X#aWsn3NimhQbm zg^G)lBW>~U!YlyM!e&bp=*e4GVXJ!w%lTr(#bC0P7KU3~&@h%#edAy@!86QY*|5_8wP8IrNl(M_CuqcO zDPf$Eogs%gXovan%x%pdY5cJME{Lf)#3H_k$pT31zLXf6Of08&Vqy`+ayQ%*V`CND z6qtbW%K*ce-GOpope$5yl)lMB4p zF|22dW_j#5c?^n}$7o&ZqbxyctU=?VpZ!?0#$6!mjSsRb0wf06XFMjhad9-VJIb*- zWF$lIB*XSI4Sr+`tH}^{PKKRN=4PQRuW`}viu3EeFm(t>D5gv?cRO2E7(8!Dn)b}$Xp6K#)2ZjNjv``}uvLGQfGA;-Pt;7EpG)9aIeYg}mHb*jMtps)AnTWABtsKzOw z6=z&5O=#66G;T&ghK#+?){77t3=IW15@Kj!&(KBnRU#TwXk4r^(ULtwwDzr> zCv%&{V=iZ0)VwI71Pbl;%cxWcVq<6=Q4Sqi)41ruhZ7kp5)(rMb;iX#3qvENMvTVA zilMzl8G-s47oWkoCR8sXwXp5Hqt?ZWL(Ubc@tW9Cp0fT<03cg2M7Hg*Hm3Manyii`_yi-Z(6@T5-`(aba@0Li?%Ed;+Y{q*q)>jzHS0z(q(0t3V17DT=2x(sZHK=#d-6h z^ybd>=FYb_o4_}gUAAL(^bO8w-@1#7rmW_6CYHtU?6*+9{^lt7-!vn`#l;u#{%`Av z$rcw>x4$XhPe`}l@;26Q6zmokS$P0KgC~9i5`MEt{YJC6*qh{U(DiQ(Wo~41baG{3 zZ4G5^WN%_>4KXtyFd%PYY7IO*FHB`_XLM*FHZ?UfHaZuadEeVbNCc)Ef=oo%W%Bi zaQ*IZzzT>POI&0UalJ_5M4PxU;1{N?i3!5s?1>8oDXzY?PZX$!dKbdb`owKQF2#Z8 z#A*FHamX?Ayi3dzhnz{BxH!c{$cbB+#Mx0?2;O8A@>y;)=7E;sjM(L@QizVGr_5aY*)VDXzxiVrH2sF5$V03ti1< z#Zd~d#d&vXan)9&plET1>BXgIj62qXGS9fvehFjT+&|+S;ToZFwHlrnUS*=D%)%2i z4iOY6H&xOC`D5HIW1MOWPsk-mXnJuKUL4vg#&te-P#4HkT*!)XO~nNcw-pyZFD_JZ z@e#%;F2*M%@ob%{;-U(-dU2TIA|jzA$#C&_aU0&k6zZqA07agPiwRa-1UQDxcZ9RJ zI9%8NA&dJ=S{%lJT3=jT*vE^jHc7r9QyEe&E{tNF!a3vKu5n9(`#7Ex zNEpFY4WMJ^Kd0=U;}7)bknNPI;P=n<`p@ZCT=)=L6&Kl} zQe3p)+|-?H5qv{O7m4nE6Erf-?m0nmF+UBCzhuB$EG@dnj|CurpGDW|sTEz*K`5*KckQsCQ^ z@}c89)v8oo=ZqsR2q?NXq_i@Wmw2+vMk{xVT#>BAMP&jL7YvWRqlEamPL0+R7Z>8) z=PusFg?mn1$eHdrv)gmN{eaXy*H0yii-Q18K(W6JeU8@t+)8m_-9U#vVBQBEfovBr zbk}@~)*-rzkri?)y3=TMI6XRCY@`$Sq%)zoU|6~>hw1pF>C`4Js!BN>u6w$;ggR`e zQ8z40ovog_em&K(!Rj{2)k!5ToD$Y)w5-EVt#fO;bvn#-$N}*kd=IO$HgVCACdOP> zekCqENrwlQ>Re~tEo4D_i3?ohO(Y$pgX!Q?Q@+j zQ7JC)r{Y3*>z3Q(ofB%j?8^B=q|_%x*E8=!Xj|`Fgm>V=A`8 z#UFKEcRsz&QqRomt|goyVp(<4!v$*bgqd@}ux{bua6xUuMODK^;YY(3A_&!K)OD{< zeJnStIwgk-RE}XwbUi-ws^Q|+x(*pGE~u_UlYKTBE_C+jbq-Ol>#SWD*rj0Ib@Lza z4Hr6rh6^%mxB%AzPIBENhYLB8L61+=V^KK}`h)isdf9MsPOf8EDhvgO3$n#^o%V$r zE}X^T0&BVM;x1LO*Et~gzm9jfIPGAEu7QORI|9!$V>jJE%wQCFp=WcrnD^`oGyrC_ z!+Y=OX}3Gp?x|rr+^g-zyOcwhzFo87PVaExH|}r_7f~yB(T9sL&t2*O#6<}47Gk=) zLb7$;)%g}p`O6_L%Dk6|i+aHw8gX&;=pBjz3$=FyUMCfvt!LjoRrNbw{daLb;F%>Z znuXxCCN5eAuUz7y*M#t@(>OfA8wiP~!s|<1v<$B+c6dXGcxVgMSz+qH>ooD4*NPWm z;(1qmx921-Haf)f5f_~6Ow=6ox#+Zg%PfgRCQk@ouhr0o z@U4A@Z(-shMSQ=m_bHdKFZ`e z@wZ6TZ{cyj1?`shshXl5LS*$@v=mPmGZQScEyNOI3kxYqqJ1}1+UNeXPk7WmHGc~` z1P0VikXHLfzlDwWbiW0d+Lx88eZ{x-VH~*jg&uu$oI#~QG`O$t#D=1W>3jYb=zfc| zqeBo?^7cjk7ROctqNdwdZGv1;TIn15TL^k|c+KMN>puab$XNRRtCjFlV2cvy?UQ%= z(3M0LVbrOj0+j!6q2Pf?bV-mxQbKBzKy+XxfQxS*0_|bPg#p`G2^ zls(;w)XK2tJ>$2VC!ffG#zPx z;Nl7G8;vYwXy9UqdQYST*?|l0)j}h~9_<@B#0zfVB2YU5X`hLybKrtbI;nk<2?tBV zNQdAe=e3GE%s{n|Q@R3X0HsN~wGYxVF!hw+;;;4vsCf`v6lO^iX){h*`;hCiYbqo` z7V6q3i>!T#GD?Q7eN$ok{#8&M3gjwU8z{+vLfJmS;f&h8(AoBZn~-Fwf{U2kCqU2* zB=D#N(kNI6%6-WM7eUY|xcG2RYLrmemis=a=svyRA}&4m$uYR7Ex1q@4-{Om;RbY{ z#!drFaB;7#f{SeDJ~|WXsNll!p;eCVn=tV{`vn)eXDU#kDY#%UefPN+Tu60Q6M8Ee z(-d5ErOH?EnhAmH!U99u5=^8p(1!LGTy&_Aq!~p4!TW|>!37v>ExataxZ{1iFUtD_ z6$1qqzb3)O-r{&4>r-$6Ai+f%!9~hZQjw^_1eW-o%Sb+;}-F^O&`x3a|fA90tiqiHz zcL%9cy$_@8eV?j;3&3b$3IQ%EMstX`?|ldMKG%of-p4z9pDfZoEFdM`fbaX<`?$g{ z6>zb%vx!cuKKMQ0V)hi2fdVdUjEAWWG_fiJE~+FXaNz{Lud=d~8ByhnZf=48Xa5LX)FV{jqU3M!aes^G!SDD-GQuza zsL9{r1g^iu-zz0H34`L`N1^^LC=7o6zeT6j2o(IjEr{T!sHqkFIsshl6Zmi8b8{Tv zB1_4IZ~+%?zThZYgI~ut!B4?}iw^``l#isq?{fhz(2xnZ_*Dx(?<@Rz7XTK1{(y_X zC57Mng#|8zPBw5cYEOn=s=x&nH2mP=@N25Z4L_v>E)1s?X(ZsHWcaz+i~?2!4Fg03 zP$&kts4IS!q>FLlcLLx-#s3y36h9TffGU3PiIM?aaKhr}LCZgWd=hYB1h}w{$^b5c zYLVDPc|3kIz(p&(I(`)ZE|!@|nK~~8Zi_nsTzI-9_!gXii#qIbz{PHu$1h8Stcg`9 zuR%2e{P>kSm7NTMU`QbYX6!tE>0*oW5&1n{;vs=I6+9$;bg1s00dN6>FWLVsVgX## zbbyQ2GxEFiBtNuEe)lu^Nr_8-;fdNwegTUXaN!AXVF7>(FYc3uNC*Ed%BGP7m&I+1 zb>vqrkz~+@o87bIOQPiY<3uV6l>7;heaSJ@)Z-EZ_TZHZ3V%T`j zi1K^mBw+xBUBs%+VP=r>d+9<0F;#w9>iB;Pndl9`MH0)ea0%FzAKs86DnB~_7yM?V zR{yt{nv@^$>u=%e8C>NjHy$XzS+XP~e~Ub5aFnI|uKllZ4)wQa11i4@Wy)_ke+$e~ z?7^i%`B~Z)vJlVT0@rx-w}`zyg^>qu{w=bpOA-bq(j5tgl;2&aAOvv1nE@_Pr%C`Vj%g>5$;Vs{yMh1B{-@+GODnGuLZ{hihX+Rbz-(tV=tFI+s=gzml z(bKj3ihPS3^DXpX`TaCdvs->W`WAy6rQX_QkTO^8oi`U$@I6?HQ2!Xg;ev57k1E>Ig3)o}@1LU_zrr+YCMX5Kn(Ks%l#f-lN z7W-S2Ex&x`Z=qHDTih-`g1^Ot7?l%TawvQGIk4YCo)(?UFRI@ne0LJ?Y1L$$`CFLA zm*1|&n4jHmA*$cvK&pWG<+uC{`7JgyTz+>0-}1B9Z$T`(rl3gzc)vw;=+>k;y8Jx$ z@`Geo(qR4;cwxikr^5agX!Ol*OjKp0UIs^;UoA*RFFzg@F!`a|7QOy0%=Nbb?<7?4 zx0t-&Vs!kvev5p53mB#a=J*}-TlgBbgZEopmZ6LhFA_;J6q)&3aM0hP=nUp>(WG8~ z3!M)U7DJLyqhNugm;4HUi#d{CFW7IPqZLYiHd9!?1;3e|^Y1Hsan>@F_mtJ3KdpzI z@H1H%e(u#y(N)pb^@LCC9aAsIXGR3?l)YQa&}kYa@PVA7-+~d1vqyOmyjV%bj)5iC z7OFn)-RJueDU-{4zs0t32^n*TSes}5($gL6w@}XXBgFcC3js4`z;tmhM{O?T%dV^9YW6J*}{18`QmTCMfPlE zh%jRWi7mUu5|IqmsAvHBdQfG*g`RwoloUFtL<^NFqarRen!$tp7T5w)P@O5w(t7KZ zGhh!n*}YC&kaXm?;5RTR&tkmk`7NM8@HF}ab!ma36zE=?sg>ViK0%jmVq%+I-WdGa zrG5*%DxXwLP8QK`A?-0Ui03?p7zQN=dJYvi0JeKyh?t|ka5Gq7`z=h@7lY)T%ctLO zvAl@eb~@0zO%z9g+;8FT+OPOa$P|=)FLt*B*YTskk<843snmpKdc>KgmZ`Ac!ee`R zqP4B?8d8l)!sgVTUS9NMD$MBDdc{xt3ISllBSXZ!uoO;7PPuQV@WNafV^Y zk>FOqC0%<%>$SZ=Yw)gAEgYm~`Yxb@p9GbG1&P0f`A0;?g25aL12wEwge?3mPB+|4 z0YH2VeXORW4HbV$5_|GF@#o(n>GJ&-1=@J0qZL*% zQbEScSCDH~;&e-g!i)mi@**dq>Gz_2ofy(Uxf+xfS6yD=3s z^~XbkJO#|Zg;lrw2dICGzrDqbrQW6BJuv(tVVGtl{w**}toVcapzv>jWERM>o*O0% zV34Vd25m8@aKHeDZf|@H>oS8mZ(B#)&cL-)emhpjI;HXQgmJKpqSOdD#*>ad)pikD)n^6m&^yJYLlfY8-I!Qa;^x=?j^d za(R~Y0=x5tqO^gIQ$BxAiLv=73c!MqDt z7p0(oZGoV=3-j5Zh8)}RWCWE&7%(ViF*!tDdb-`52N}3958b66a>%KghX~Iu=rFg$ zzt}|TOr`=C8N5bNuBOfrQjzt#(8d)qv`&YXRFhFjOy~++AWuWzmeSD|3S3YR`+!^k z%*kiWQ3WoD*gQ8jYRncwRznJ0;FiM;jTrfL46MZh7l4BHcxa?Wz6t392Z7F{Iqjb9 zXn&yBs=!6D%H@WHiRK^jf859{{z&D;Iclu#rKy7z4`3`31d% zuCh<|Lb{+!YL-xeizxxNDz}c=tS&QHfeWN0G}b|2Er}es0vFC@v6Zv>Cenq@%uCdU zsNlfGNZO?LApsmyU+CYS!@$Km-84flSq$GVy;_rji##4kJ&3;v%YwTiU7!MDhiQNd zrfNf8R{|fnXy*3V`S!F9T!?R%a`mNr;KKIA=6}zUI&i_B9T?BlCbWx)kuIQ}9;l1I zqMU@_qB6K{>U)0d!T1EMBV9mB%^1>FTZBND@xj3RNEh_e#{d7?=g{TqeuW(8!?}pB zIS4LR8T_uI00fxdp0r38mRg9da1RNNDhLo~MbJjx;5nO!C#1iO2C?v?AsYn-Q0%39=mbxPL zB@@9#xQR?$nl3vAq?Id0@}bj8yvtFakuF?5MV5dRP_tNo9l=Ew-@fH*T~MP)K>F{5 zAzk3gi(L;ZvRp#Cuwr4o5+S$C!D07VpQ0iAQI-EDf*QC)P<1rfMj-SUuoqs)&ij zv8*E9amn+EM;Cba@>E3y7Z6 zEkQX<5J0>lq_Uf_;KKZ#QB2GL>bRh@9sF{RTAe7#M3w%xS zKu_!`i+NNiP<}h~9Ml{32NGPknEc9xCa<2(6z`67p`nz3EV4R>KyYymA-bds^yM;v zNG}R5s)rlMcEQCb!ly!Bqu`HZjYV{ZZx$Opr3>e=M~SIiN*54!1bxYZi_O5lLWn0J zkXY0br3-c#HxrFex`3_&ETR=fHHj#rY?liz@Y^TAm44Ga&s={>o(pML$}C)PAwbE) zdJS+^;#xWGt^aZIjhMtzI3MSm&=7u7c0T+qL4 zJ^V@88C+BbmP%&K=S0tO3@%0t3{Dnpd6kvLTuRv@{kXYcL->qcGk|`KR>p#hQK1vt z*u<)v3tTsY4-!TWair$u=E6iaM&tmDKy$x{w(K*Qf(xP?a*q+Y1c8E!bhX>4Q@Gmc zR|OYOYz5Fy*TEw<7qYp?2V}G)`o%N~E}r8NBg@Z}wqI~@MR5ekR3s#N$)RMG$RwK! ze6ZTM36%LM8x~y1Mh!bTM$0X#4LZZwTtHLM4UbOq^nz~agmL6-E-X#RMf?-^u2d7s zf{Wo8Y0`UnuC+Bb7kE-Lx;!E7m_*7Y>Z>vSyr@rv93RsiIxV+|WNRbbh5XQ6a8ZdtI6|EZE-2i+y#?UE z-~tWN9oZKVxdg}=xw%l#QAWpH_GRpZgFb|foPvul$p)pK2QO*!URqXcb)SUg4_P)S{e% z3qYH#?ICQU)-$Y~f{S(0D@mR$gdlEGaB&DO2oi7w7hvE6RGiyfm~pa}kK^B)Gf1Ix zQX5L1s{t6t7!_QE71VXIu#ob&KJ9=|hSBSGmb4x9%L`VcbP&d6NVvtlnEGfrI*1*D zizWbpUu2xy*kFX5Z$*lM8`kI&gv8MM-#W12CusCB%V? z2=7cl@s@C2jKBgH7~ZDAK2UfA z7bR-!f+cQU&yWQw5xac4RI-Jw7O7nawYPW|Y_3s9^T1?E7ne~MPT*h|2H3;Zx*5x+r7LDB~< zj_N2Nvx#!FG%P$HxM<9jc=KDiD_*yYGQcRny#p6_*ZAT#uy?`(7XuU3CF9Iu6yW%4 z3pk&Fk5IAabG0R{;&fI17R{9ki9VzR`z^JnEv(rW*s-f)=1mdoJZ)j-Jmm|8GzczC zWpp9;c^MJ}7ela#9fJuMmL3)l><>#IxZr@{8ywFAv-Erhi{L`0Oa#RW1Q%-(g2Rl9 zkwpe$aD|*C4jgz*YNnh7M{oglMa>X<#p)$>1|zhA5!Wje!NnmbhYLb*;Vtn4?%;+o zKi-3EsfB`#P<0Zkk&eU6f~bl|OmcSnl_t2LMR}vbD05TISmetD7wzQ+G9YOk=2LaFaFdk5Gm+q8 z1_3!!FZ?`&Z&zYL7ffww`dtt*q*v2?D7*4;B*DeX%JK5l=# zN;Qz+f@Qc`r2{9pSRzI%0m~t{fD!f+rQ-{J=-rkmD!lS`{Dd+u0%wliuP~x&hoo?2 zSMDoR)!KcLJ1^+6i|Q7^g`5_UX|FN>jSYee+@|&m`Zxq*2re-C#_m=$%z!-vLvWG1 zj15ty+rc2+bKN{E6$mZ>n5m3@lCQFLKYLw4tf?J>_I~461g@qDaJhZkxg7o9xJh*# zE&;*C*@Myq7m;+#1YT3kp?XNcMUDcrI-|0v(RY}ZD>$Y_xsq258zbk&6{Z%92DF{b zSStk=V~Wj9dXx2vHb;U7vrx9|e%$;&cjL5q9;4@=3@TNJ?0iwrx#tv9i5Y(@>(?M7&79z>5X-2Adp6m!NU=pExQq~V3xR4p;VZ)FTqp1!_aN!JMm^*J* zDH2>9#*Y*QrcoxXt8hue-$skfqwSQ)VVfAbv*O<|3PnGyt>D4{q8I;9HRw$9wt|Z! zB#HU`62MSWwhAtsewZM$Wt-H{q^&{+dL>azQX~&zuL>@f+Uqf*;G#i4p%+?C{=lY= zKu=o*h3pkBGT#zu;%yZay!4-51s69CAfAjY8)m*91s544FL<@0Nx6kI-AwmOB(PBn zVJJbI$?-JYRsr!?`tU{lxJUzHf(v#~zM!Wnn17Mrf|0Ng-#`KJjun@q3S;XbDsBKm zEwD0s;I~!aRtpps8xg%(whGClY!-l7DE+rr zE4bM6yd*#?ZF5v?wb?2hq$Aj?Op+uHNnvRJlTE=z7Wb&|g)sl`A=WoW^WH(b1b=7) z?Igx-9Er}*Lo`q@#>64P#Q?TIJ?@`CW-p5x5wd2hFwBSn5{ic>VFymN znRHQbA$i11|5`xERI69 zl<$Qne^o%+%fchp1Q#k~3(E#`-_S&>0!ghCx>cjcXP5J$Xg+i?j=sbM7eGI37R?Y` zGzdp}bRoE4YqbAM#BWncgj%f%D=wZ2#uauY!9|uS+_fe@Z&DEgf(y$iC(woZVG#i> zyvM2n|Mj9Y^6z0raA6iM?*rMnOue-cT$ozcN&BF*l_sgefrnJETqZ1Q@2eA4urVni ztU3&VrDC(xZ1f)Gr3599(55dJkG*h@n zo?vE!%~a6koWiQ;QsOIvE*0F!O*bjA7CqU$?f@XLQmLSbD>e-HJ+(_J^mgnG9L``F z=dgj3pWtG_bKb??WNSd(_B>us@E{estXPhLcmD5;4JX0H5VvOK>}wpj417S43h-l? zL>9ENC<|>KF5u1yE?Sz0Gjzg1Do_TJ05e!iizB!ov3GtlAz)V}LU6(IoETil6qQvF zq(Y0-wMNrDMTxBp1Q!(LC6}5?Ns<8e?MNDi7;$l+!de@+sOo`m$`Gbp2B|Q|y)iO8 zY76n&dtf?Ams69$f=F~K6yM91vPKFVO0y|&G4ScWQ)RRlN8wLq;R;g0i1(qpUQJtp zi<=rM&d4d5q`(Cn`JWyEx+3B|vA~6UDo<&+hDKq~#z7K+i`(YbH-3&IzVpRgzNk=i zYI6p;k5(apiz|N>duaS&3kmN8E{3GI5Fu0pNrU|72waePT^MW+>jI{`s!;?kOiEss zTPnTP%U3?8Ad#&S0vB+_c+%uPt_;4Y;2KS*z{Py%NGP~$|Dr-`r*C~j1&e)Afww&p z_G!e!1c8fv+4Lzvwlbfukif+kR|-pi${CX;v%IL_=x>hR0)Y!TGt)1(dn0kaQ(y!x z&{dDN^Z>J)f*^2lKwd|p8tlH|ASmJF7)sbr64EkTzcL_jfu7G|Taan80iS$P0m__Y z^R$cn8*p)GrmBm6U;-{~KoU%~@S;L?gX-0V#1|*hi(KwS1);v20Gq0?e^d&_=ihbb zhh8}rj4Ec_{fi2C$xOST(VU9O7Zo}p?OR51{#XEp0l0`vwq6B*D+%C&S2)(VtacAZ z1v}!`NusB^K7~;M z?MTQV{xHEW1u!c3jEGu6!Kknt-y}cX`el(J0WKt1u-faVz%Qx*7u7K_wm;%IiBZAH zQm}WHtQlKx9^k@uYGc{9BnP-)SKxZ`dSV?BbeoI>i7RpL0Qjs z9dKExBj7^C9LL7Ct7wjZ3;0YN1SE4$*#a)kc?IyR@GNb>1tJ=Hx`G=*AsBG+BQGa= z)y#Af@op#J0ysimg<{l|A1XWrl-&5U@GNK|aKnd$L_dXqm_$r=Z71LY=PP_qPX=79 zNXYiQbnVyCEeyCAS}sX=T-Fo>bPnT(C-s1fZ0L&wO|Swfwp!M?A{ZbY2BmxiTu3al z6rGlFAVv>G0xlBmnx3YL90?aeV+y#~{+J)+>ACP2@wX;Rfg@up{$X*aNsFc6Rtjr> z*b_DUIJd=+fQ!qtJthM+yTj1V-c`6c@yln1_=84Y^s zU2IJzDL{U%H}vtt`PiYCz=eSQF|q^L`i&@3m_D1C7@Qb63jG22Y48m6vAP7C2wcP% zO}zuVB5>i{hnD+4u$;g}o=J=|Hv`X%bP<6I|L|sbCWtbMKHo5bi_6XySJ@o780@H_ zMnNKM)qrM1;DQLTJ$gX2bN(qjiSM2M^>UR2F8Yb?h`D~40RMz1?Fut?>yl{T!l|E&P8y{D1}=W% z^#>SFcJxirSO+cujB^SM?lR8T(EaNnAk<& z;#Q`eS)u`gQ(iu)qaC`7`F-QV{|dARSS*%(GVvhJCi2uz; z!_ayYbVEfIiLY-;n~GJXcy<$j`Jz!ZV3L{#zzHb#0iiz(qPD&(bNHtWtf&b9b7cz>7e- z7CKT@ZS|v1rwNx}y)l~Tk0MIoB6#l2Lto4PS@QJ|xJWa(1elxZmcl3|T8C~BxKLdA z!UQJ0PNl+7ohC@nlhkqsolyxsLLhL#;kHnbB(Wn<47flViTpwDl4SxHpQKlLw(wXl zdrs;!;gZp!X-|x?fn@A&z!D(nf3MSo=zaJ3z{dq5M>|d6T6kRroVvo%)Z*=>!PBsD zJtT~~7|epg>@-2tRZ1wl#(^B>;Q<%W&TUd+z#5MUFF{_w#b8Zs>{*xMG(oJI(sn3? z2aR}57;u3iDH*#b^PppY5l$15WXRY_%c-UIDBlKL@a?r4<+-gFaIrFgoaH6}{v-k} zZuVJ~DBwb+yVyuV@t?m>GENi9tlkqB#{k z;V_{&AwQ zr3IL?(*!Hk!daLxqHmI%*l&?;&R`sE5s|~+;>QWWy&|4)NC~Z}bxISwe7c9d)fKA_ zLGHKEXb)=d9i!G8{5U|ACKzEH&+?J|7A$SHv)CBq;{6uNY>s$1e1I-n2h!}fsQa~0 zQkrn-GteL`ac%=P)xGhx%Ar5}EvU&pHM_Vx2js`TbTkmn6$-UF7r6Z`2)h4!!XcX3 z5sc`WAn_oO5%WdX%<3}@?-XYO&0N~UsvHR_4A{TL?u^Rc-QBHL~Asu*F=SM|1H{`?>sTuS3c~= z{}v_TlpBmw9+&tWE?N-UrYiqiiscJl~2b(;SJxIjPa#su~iX#(H^%!xzS4Tx~^0WK&f>Mb6?{hDe!7BCHP zLGz>5hIoTm@)rRYQjYRjG|*I3!$X3^sU^9DuU^Hx?mmI2B&>jo5z{+nDL4bb2H^rO zV#nLB<+QOtxM@f(LFkK6&WPuS2)Ll;4zj^N;@?z~OZXHi9d;ZD7->P@VejNHS0(^1 zY`_>RAf|eI1Go@PH(SQc6|5v`atVksc)4=QxvVP%$t9fZVkt1OUB&shgf#p@9~^`m z9|^bs5_KX>;Bg7XGEY}U_|DuW%JaAc8max+&j`f%^Qy4vuQlt0fD33mfeYrwIX=Ac z+S&vzB$e+~B3~d40vEEgW4lS<;`~84Z0uMw1WcbHr@+P2JM5V<1uj158MHUM$E@W!yG9xrgcU{RP+={Z`kum%g1K(%B z#ZM4^-Bh{}UCAX}IXft}k==ZMtl}86B14FoY1t%a?Ht%a?Ht%a>6%`mU82LJ#7002PPGi*A9IU_3=uoKB{hwwMZT|Mj>YSEOC zZp4e0A1x&@sgTJhSFsAks6wuMCi&z$xQN+7#Y+Qv*k~e#OpcJ%3X(^qw?!)|dt8V; zUrM48e7^BIxj6kS{q1sDkV)p@mxtiVRaLxNBR@Z)(=S@2940N75Rc-yRYX0Cj(79C zMRCue^rgv1(>r^=oq1kb1HRN!ef-fsrBt^LLm|$EZL!R9ZMvS}azi6W(S4 z?JWCU!4eg*f+dFQ)FSdte7pp&Rqoo8;zw2Wl9WHLb;mR;k&DPzVFJbQ7>36sI0dOC zN@hv$O5)!xB##Tp6Lb1$P@$HezeVsKL(f_IC5eMxsa10kyg@H?mZw$~q2^zXx9GKM zIJBB7nN|7dGANJ3a4|_e8KK6!;o7pxvA+@Q7`M7-Pi1<@OF!5U&Sr`X(IZ} zV}-=T9q@|Pw={u*ASgv8F_fLl=x67feHO4{k@`J61;}mv_D5vyryRMg~KPH z-IdEIA$`PSk9cm8KR4Ym3YTeIB^eaRq`yV(7*@M1`vtA%kCweTu3{E7wrMDtG_MvHFhDnQtC4xzPShmcYGer=Nw3P9-IM%2vFistcXFJ) z?$t6~1Yu5lw`}&f-Xw3(+r@9RqN#ViKW-PjSS_=JJSw1G1xmCM^8Bl6m!nOBAJx3Y zk3YxIdXC)k2`;zv_X>ZP))No8l-{lpW1(W01eaSp`AToE@N@|6s^E3hq9iwM&227r z9y4^=a7?E|bo=D4IvM6CnWLtuRb6e`dQ+B-Z}=a@p3~j==8-4a4TQq@E*}<<-AG>1jgQ)OgqErmHL2$gdVT1PH|-JfHLkEh`FgN`F~bit|!?S{lG zt3^fUsFR-wUSCKblRm->iGo*> z-cH5tCp}%aJaSXj{HEgeN6Qdu{-t*GtcK+D z>0L$oy2bQS!ECBcKjnyjoSSjpZHqha{yf#oisbhQZjab92tDucv%${YvJoT&x!IhY z&dJ&2BiNIk=p0LEd1_TW^kPn9vrfo$_j0U1@AR@G_0&VK?z-CRLh$-m({_I=x>Aj=MjQCrLEx#NKv?9qwtLGW?un zE`D>Txmo6F+3a;Pr{!Pgli@CUx3`5%5=4$8^bD~q4T?7S^&~h-O;_9gqj-N`+;#7! zfBhVYibS%>DdPbsqCwH31{SM|xzQ;M{=vDtPL5S%>^_PUd^F*hJBx0RgDyKV8t(VoYT*y~7T$%om>rETOFabh&x5(`+-%%Vc6T1y$=1#T zp=&OVGPmj9_huT~$x0BA5hTT!A_bWu1c8)tW$X9PiHxOd#%b$8dD8_u}d$X_RO z8@fTEl3Nt~{->FXpUdf(ARuXngM*(Ag0@k!<5Y(hClKd6anSC2{N;%9^1407}5)nRCdVf}fq*1^HgW0D?|yg|?YI(W8PB}$>F3Km+63lqk|6jX`3AtXx)dO0CsQ@8+-z1YgS$@U zaMTSa<#0j}kag=~?>jr4Rm()GDsx`j$;uQdOb`$@%gznw1OYiW9CWjxyY2qEIP1V2 zPTS$6oK4+zI|$AjXKqlaP?<#dzBfzS+ukfwIUTjrkvUH7bkK|gciZfBKWUcE(<6re zX@XSs{=WPJ*KM;sZvQx%+i1^ov&{a!-#l$FBs&}sBn7K=Oy~(3MV9=+>==}mIw{^E zD0dyZacQT6gP%!FODHODS=!;49S)jt=NkxX00+H-BF~hI={6Ul)R;P&u47%h)VKH=CF9;_g#3 zEz>~_Y*f z>3|~5w3EY0IUsiDnIIq~2*{@c3ULGSfuu0A>|a^WnYx;GgP=%N_ppq&&eb?H(>5JY zgqzK}ZEKdn9Or6Wt8s7FwHsGTd<6Y+WVNi- zvi~eYYf5TeliTVcC~w-_aX09-S|{ynLMzLYs6Lt=6TQLk9?97AZV=Q%QT8~Plc+@t zHGtd@g1#8eoA#IFK8kR+l^hUpgM!?EyxfLr*O=2bap-Q-K~LT^9rRRcihtg_ zaW3bz8|QYkmXn1jP?R7bD2EfGK+&N<@opSQEK4XFD$kE-*4;OzNHKe!X;ptQL^+#s zvq`fI%`#ToTCF=f8VCXsTHoDVX;56VEaY&;tfO)q%W1P1mYT+|Y)ana+!kjWn%nBn z%R$gXl5UoTDN>-BW`CjE$?9$UL$P$GBUFVsPWHBU%hJxqbDlOBvYS?apdNyH2=*a} zcbvINVRkki741`W{<;_Js^oTTjzy@MW*f1Sg5@&*L|^W^NAfl2etG6&8FL)l*{GaN zEq*^KciUL4Q-j@qmZ-MP!|(>Zcgx~W zlR*+|QG)fKXG%xZYU&{##&mR9vIMbTP@T690jSOiP0 zb9&hn+m6tbCrMY^V6THej}AXP{Nj!SrKbp9>teWS9J2$GYMp%iLT3p&OPAB&ZiCJ5 zDNS8%J2xP0)_FBe?zsB%R1RnDY;y3!zYh<=chg`^OF5f1%VLgew~f`bwbQA;jzo@M zZ6iTan41l&X(b5A9*(~_=3gjp+}hE=6e+?KDC`eRwXrUWBvpOU^dE*k`0XI*5ydhE z3bnJ*!SBsFGsn@M7jK-p;dnXZ0HQ#FayTZZljWd;rh^V@r_+BT-gzF8#5=F;aMn)e z2EV^7=dN3|jP^SF^FXJGD$#V)0aJj88%}Sg@E5+F$9mmAO>>guP15Buk^@3^HaIzw zQWbQXBQdNpH;vvhIODup#%h|$;e;qs#G0mup&pKP*TJ0DYMq$NVlHDh4cvgV zU3Z7#+Tp}n#)n}qh8|MH!OsrAx7+Hk8<}Gm?Ed8_a~l0|B{x02E8KBoXM>w$C|%ub zLpvS%>-_Lbou)`V^;6tW@(#ZcYMM~A2SJ+C>`v3YE$_A+{C1K=I~-gLOKa*e$vgz# zEyKl+1-HLRn&NghOVp~W-}ilgOH7)W7)%T%4Tc62W8eDv{C?NXq5aW)OI6NK~e;y6(kNlTdR` z7yPG(rrO9$(k6D~8M6{UwY#lpW8*grJLr=#CK>{di7x2MZg&0rDAq{PwSb5J!P$R&kdo5QNAq*$0L|s?O5?&=Uj~l_7kYRXt(5C zg|6=EVf7_=^)xiOQ-CQyGaJ4TJLXQL01X$l?Kz|Ru6&7wJp&o7u4UES| ze@#A7|3UToemQ?pJ344@Hg{KgfYe!FJI=1NOaEipG*Gwj!l{-zRDYq5Lwa-hWA3jQ zt!>Nat?*Nvr+>~~N|?W>Y*989l{dYTm^myP9R_T12#lEVU~_Hg{6&o!vAV9cL*C+I z$)=h|1DE%qFa3ID4zOjsc!es5wYSeT?J$*+bh+ThG5sktJTj1(cY7Y zRy2F?9&Xk-C`Nb{q4;C5Xc-930XT$`4ZZ~Rt#R=NKS&VL;alBF0kl`i#@^eDx3<~t z>E!w9_%H;rimE5g7nTJosuJDNoxSGP*!JCSyOKaPuhK^MY`=32Ui{P41@t}DEV&qd zqeMW_I8EO=nSlyLYMkF-0$1k-6635`)K)GSH2SLIy|YU>y9aeE0B=;8DG`C+cId4a-5}6|%UrZ1$n~cl;w?=2xNZ?gAg_pFaer z9?I3<@dU%_Dh(bjDyg#^BAR;9saUCN@OB@;=t|7%EbvFfNm{n&-8Oh{7kn!AAy^z;Y|xBiQyy?M92V8{_liS?K0 za_%h?ck?YsQBAAVbYYo0_UlTMoyX$yUtoOyqZ1E2lIU4m*e$mf zpwG#f+=w`(6~)oZf7cyi^1i`pO3Ljfz3eMsFibspva;+QI&R$hhT-(NsrW<7A|6$~ zAM_{N*$E3?IiRY;+zOht2gAFyYNn`8hahPfNIkmKkxV20o)j|jQ4ue_=X2l9hpJo0 z-kZgyyD}8_vzWqNZ z^}}sSr@REFsC$Sb{ME(hE>B7?@`$`)yKP`k$YBZM-uftdvG%ZhB{+LDZu+NcghRQ3 zowmkvw8fpnbf{qTpOWVFws$ua#RR{DW7VY(B&JddaY}~tj`YRLJ{te!Wx4EK*Xah( zYAX$1uRMcC0UAIeY<8Ep*eDTG|6{B|$6tPL~&!S3dKTLUT zq9Gh$a_6_mKnnT5eZ`CS;y=HFe>&#)8bxQB#bQ7^SvPb;h-U1DEN4Yjh08D#!ghX& zlSH47?>>x=Pc*2|tFq0ehsMlsGtbAXn62xO952j1^<@O*8$yexgZ$7>MeM>G9sD)U zW%j;PW4qGXrgZXiPPSs08Ag${VD6(N_$7S?-4duC$TOW+8uN1oeuwmIMRg^9h2u@< z`f9*aLJ06wBz?W|r5x!w+BskzfT^;X?W-MDmyEgPbN~M%fo2&jk`e;gML3qz{BImR|-*Z!q$$|K=~rMeox3G9`Q-{TJ%+?)n|4z??DCy*zD|-r{YxeCQQF zwUzkgMk8>9m7DJ7(W`3XWnOE{E@^1?6cP$^KIxjG|0Z?XWvVBF@0E8}uC?NV>t zx2@x_d#!!;lYweYxU@Ojbv5fs^pEWbj9+W>P02aMn=`gd>@S+|w)Mu0bi0815Z}Vy zs6%)8S2O&pJr1uOXqo6Z?&ZrI7DOTw$M{?zoC>ISe}6%>Pp%51_s3p-sFmty7T0-Y zr%i3uC3rUF)@65SXqZsn58{k$RA=>hEkSWmJv|uWscgPxALY~uZ6HnL-U#BGfoTSR zb!qdv>6`q5Gypl(z@0GBC${b8*A2!m$9xAYb@=wLsAMKIg4(OiiRx^2)wf(Gy7_6f zRvH3#|GngQE;&$5(DM0!f-k0Bs>9Ab@>S|7W5YYtKJnvxuwSNLNI&{76XU10cz)r$ zE`&|DY(H0`6DoE=|D-K(Pds}WkEq5p^Li|)w9^m9s`L;hNuL(gwE1cAR;t3aldqdi zZ}g2FZmt9eHjwDfjtJwDXRmh4wab)2gSM(nEY_Nw#ckwGLb3#cOIvN)>Vwv}DfRm+DdT+6RW8sB1Ks`%pfENp`kb`ac6?lvvuZ4(DG@L6%(x zRrk+MM`Qo~eammcd%AXxVmc+D2NvM~m`^2e_+D(G&2g4T7aTsB)GoWzrcD3tw5u>Q zLqFlDY6r9E>iXO_9T}W?m6a7=3GFq)j4+!kZprc89tt844lm8N9GoLR4{01`*LmcH z`2pbQ^J^^cXV{Pmt&25AhSlIL^*S6vx{gQd8<~A0>>6oWF+&JeS)CHr2LnO^A^t4I z?n4mg1UfibELuzSNf3Dzp}M>;Y3D)=V{w(^%XYafZn46%Ss|&^<@Z=)>&S21u02Q*r&av99k&#ttHyk==eGl6WMm@?S)iNWrwFKaD*f^<_>!wIrq0dWG{M5ufTzypFrBM--O1L*> z{%3j&r-Q$82jt`=XX!9jUyOaA`tW8U zgVFfTniI`lfVZ#fJ+rT8%XJ7hhC1l_OKq0sNx=1Io)OMna2O_of212#0=V)T@(B2K zro=sKj^DL)O<}aTKjVKJncT5x%hVIKbo@dB-tfD;;Y<9EqV>gX1wOeUkDFB~7oB#C z)glDm+vuIHOW|cPyE=NZ^B6YPdP~Qo7XT_*J_}5n!zA6VUsW3dN0?c0bRW{UxRlyu zeQbgsW!$BqXfeG`q1%E+1Ze{M7>TJ7+=Z)VMo;$*chFov3 zLMcahiybvb7Rbh(2cx|*$A~PA^;xCnevk(LX`{-gj32zhnhEtOskhtlvL8m&mo%S( zGPV+?*!p^eC^>Xb3lG7&I(7RV!gp#TswK z{tk->ARKEs`u!Eo-#Fcrui+!Sxa_B&wt8ize4l%B<)-M%*<^OfhrSs6Q7FQUzfQtX9IseNm4A{Lw!K&EV4cr z=CE&Be!0^%3ozfyTq4GF!Hu=RW&4?KSAs=suQkKh5O?#m-!d%ju9iZ5V{=mgcn^2DK5oBbtF)6&Uoba=dMxC$H-3BaO1I^ zE);o2Mi0m*|L>*7MvLZ=Rm2W$fPCKDt_pg`gXo?eM0BrpP?lW_a6=aY%`WIAqM}EL zdda@6#dhw2>g6TvnG!*K?7=w-rq!NCtI3~zSTlD7X@P2<7u*&aZj;vfd3TL?zr-&8SV^Ac{|j0ae&&OJpo$dAXF}zR=0?rABx)(Yg;z(2 zV20=b7V2A)Ei8T*;-ogZ#|La(|zJLLiTuHCIH!^;hTt^S5KtlhjE_=XpLyX{ zL+tfyx=t0|;+yI?-IAU5umyR(_Kjy3AXif}I&63(|f9)xe7BBg8$T;zYF39jqAR?>Bn00a^=Byt7rwW%f%Jq!Ue(I}VEA8Kz(Dx%m8d zV%~QhTV+{5A|*!8LWE|K)tD96wzyxum>#=dF7Mp4lTv;e4qX?B>0T=XfW)U_gmt1- z_rgqxJL(_l$^ZQ^HgLFo;5XF^@JP_m;7{#W(7kVMCb{@xjNPNCLUOlQLw>2HIi)y@ zJrm|nn-VdK$`yzV*c-@=`JW{IE%CMzx$F})00)5|%N-KAilf1cYB&3ww|>i~Xu*Ya z!vPMmcT|P%;uc*_om~Z8$JE=;ocH(kea7(6zXgBB|T>2mr`^ z<)Y3b;AW9ploKB2Ihe02FVr8(qOe3UAHi?m z9MpX ze58=y(Z^!BXqCOb%t4naOh=^t3;o#gEw;2@a^Z}UG`_^9|81_!ym-W3Dn_yhh~OBQ zrvHQ&cKa@M1(989D+eCQo9r{KPxW5>iTX74&!0w}ks_>!f0oWj6gpRNYk(lsmveMq z`l9hLMQr1bRU`ZK{I{IPQ9^5oQ#I^2%@*9wGdC|8BA^pl)@)iWG3-(L?9zbS;~kX~ z7T9N7jjX&6mg7y>iphYDwHp!%m&{9_1`6tE3c#~I+otL(^sL9u{^bwiJ}N8q#oSvS z5G1(^d?W^LPzMrHvEjh!Jk^NoBjmm1(Y(hoIdb9RO`)Uo8#)|Ov!QHE%K+)u;V)n- zcm+wVWaCdRfeUE6lNp2lU|6$S`RcUN(Tt z->y;-Gg{&K*WjZ{g0a#7jX-k0YJtP|SPh^)jooXmu@VzUiMLK(uMG|e21VNakS(1~ z6YAe#I)$CMD5lw8AE+p1vLzLMk@4qr)Hp453pE;zBLd-h<5}HuODb9{$B3gu>KamI zc}TF;XR7TiP(wf+06}MJ)v6M@mEaa`%JIYMQWsbjUwv^bi4ro8Et{0B_P!FlLt7E~ z7?;}#-60)|zmF1HRx*_S8h1)_z`fzw^S%P3pk%Ynrks+kZ+(pOy@!WhwR*tJAfi4D zn;@zkDIKO`Z>PaB53lTIe}gTK3{NT1_|b3|fJ6XYV||%HE!1;A=Glu4nJIh-+Ay6zjF9 zt&DS-K?Lk=m%NK{sziiav-Nq5#U@)bRdG}FO-`2Vq6&k*7Mk^v#y&CM6zOo3CI5h2 zMb2UZc{p(#TlM(u@LF8B3FB*F2|cW&BtO$VCWj6&@p|tynwr_LoQ@dVU^j}=yP7gte7YSAOy6D1N&M+V=ml67Lkt;bVxc6i3}Ntt42 zY^8zYff4i~`9i%x{a?y0Q0(jd2svPp+M#KWGHPBYSe4_Aimw4`@8tk=5(^M2?%GjncN&`plm=|kHC(^br=LEXDy z6mnZPeye78S2ktg=O?H-B}lQ=*J%kJp5Xs7No^|XjqapaT$MjhaiZoht#z0Q%pf(H zrYOURU0~|Y2r~>!4(K5&X7{tk^E+y+SL}DUpm<5U*)!gjF{Z2_Jt|9o?L!#51hDQ) zeiONCn4v;obW|}Fdv|whD2hFuTfCjJ#J~~!_J^L4jiVm_{gLgik^L~7_c4aSPYTK! z+~CJ~KMtcPp^56@cx5Llu=;=PE`-|bgl`R}sYH-B;l$Q(axjFln@vKQQ$l+2hY&_v z4t_75+8$3<4yUSxQx3bS?ay~xpHtMs@H^e~ARqcRoLF--86ub-#8>N!!XdQ@`<;XE zj&!6Jh3Tk@@PC@5cad?}weFwM%gDlcjH}A-?uL=}M#x9Cz?b<&mwjS z(b>BXp+TB+=-qNuH3GdWhpE|1*Nh-H$T7Rj@CT<8Ji=)CMh~uK9&}S)%I#_mJ)SSLt>sSxDncy43fZb#)_Oym%l)^Myg0O>&_ND$=>xis$ zq~qj@Ln*9l#1}~0*1#dAM&RK%IvIn&4!V+iU|FrOn+YHR!n5elhdG1vaNJ=B!#jgP zcUs!dX{8JHE@CN%*xKz5%JxjpqCEovA))w4&2I zWOzFc204;~W_xxagS*E)K_Qe~NKFuV4$)B(G*uFkJ-L|E1MOsNpP<+5*O3mbPzM6y zsD&=j3Y}Zu?hG zo?2%@T0%n8Q9T%xHpRcE6=k1}Jec!!ARwIxr#*XXrf*;w8&0%Cb;f@8$jZS8O1qZP zH9~i2rFXS3Zl==(X^VpL^C4k$)mbJmp4ysCZILB~b~BaC@k%}Tumoba57BR!s#HtV zn5B1g(O$+=G!iK4H4LR%MiZRW)U~SuVRlr}g9(fyCu(av1t?GS12Y1{cm2X?LAkWn z=i~ahT=bB2mEqX8rE z0okNBN8*tzEg+oKolw|3sIXudV*^sl_{$Y1BhpHt<3(g^{IMFt9$n8DUjw~t) zjej{pYpOZ*5*?Y%Y?31d$WzswNWnhjmQcEqGpW^w*m;?NfZ&ibHS~iP=xJ*2YJu^R zU_e}mBZKZp2STzSShS?&L3F2>xc`opG4RZP(X^mRyrf3lo>(_v9I;c z!E6YS=#UY32X6OdeKD&S1tbL>*DPk!prMr0X9Ys@MiG$w>CEn4YE}!vj>0_c*(rTH zxYQR&V&*UwAtSq4>C7y`ZcqB500kbL9ui!-*xl=jszr6Dd-q_19MZk*YWHu_)-+-S zon5pL3Q22@xjRPH#HLyNA$WJ&jG+!8t9O&OhiO1L3b2M8EJttXVYE0+GwtW-Cpqyzg2EZQjy1a)IM_@JLI4M! z8bmqtE@t5tPt#B~0VzP(aF|3MEd@bH+g+un$-*DPSk!1`U@6S5UTP@mbdGkjDIxZg z+gQwYPA@b(Xh;phPz)of)RGi?=wWii&}_U?4kOrXH>kYyumcCzI4uaJiy^HD`ySuW zTBu+ze1GJ%0ekVu5<;6q@9N#RUs}{)Aok~0PFlP(YYy#e;C#44?CHPfP~CHj9i+vM z8e|6n38~q@*1$Sy7(Jv#Y$@FlhjOS1neKsg)nEia$=la&|;l(>UR8^DMHwV{=Qr9{aZxJp5SOW<@xS^s468m7~D=cUC@84gt z7`I^t5dn#(YhQD3$l;;iDLOy;Z@z3S=qk9@?s_B%-1bi7OuXqOt%R=)JDN$2eT0<7 zBK4u2>6MQ&+hSW5yz#~_d(Pj1>b;E|s(asiZ=;{%?wGXsL>eSBG$853cA}xSr1d>o zU^wU**LRwVc?5iIGgUXqe8QZ*Q+6o`5`XR54RHx^HJ{=7Sd3n<YfE7*7HcoDhyZIceZ{b#07XT^EX&HaH>eXjHC2Mxcq zI?Crn%H!NtQ9iBBGY|b#nxw|^J|-+kg28e}=}`7?Ch6_g{u%eKJYB_4W3c2LwDkTx zeapL2-@mTp!m`co3zD>Aelmw3y34#Fl->daPYr*%A3q(n)Y3j5)Ij5M!s*m4HMQdx z>f&_G+536e9MGL6#J7~&C*hHl4qCU}pjQSR*$JyynliKsIOo?u0^BXQa8Z~`KhE~{ z60!d&X@3H1xknH3&VKjYIA_Wle~AST3t{s{Jl7&v6Xa`b&=tZwH6Y@4 zj{w-8*=4A>(3Cfgtw1uYw}2n$>r>pc^ji2 z`yW-T^oT)g`E>6)5>o7%U2>ey_Y&#J3#iM>#II{sN7&F%YjEQx_KfCU-uu3%-RqyA z$(6}7+a42|TIPGl?2rH)nwc^%#1UBOO+gs!mn+amZ4b3Xm3lCGbtb&8hSjHZ z6(xuJ&VPqgxXpflAw;F;{FO>sZn9 zC%B-So9BPuKfZ8cX}u$Kbb&YdB2VABe;%ybV~{F7Q*4nlRoC2L{Hnsa=t~6G!(o;y*OVPAc)t6NF;zf;nSiH* zqZ33!t2BDgy9Z*EvqP3Unr&3~KmOe#N_ZLa3E0XSBd5h4WfLiKeCvR}ANk-cN?V@( z%lPcZCj-;l22}g~L{R=HcVxpq`I@M&6#ukgB4CgvUp#7z-r#)GJ}lTD41oJ(8E{P~ zav$Y5w#l0~vYE&_L{d9tAb-eK;~vgH04mvWM&i+jUJK@GAYSb@rkU1GI-{>K0A*5d{CxwAn9{U70P`= z$rx?k5Sl9?74B+T;S2%Sbrg(O@@z;6h8E!*URGx=`CxB73D;Hl$LQ$Hr+-b^axLT! z3ngYyzXzvi8GeG(^KZr*;tZX;@A#s(NJGvZfoc)>hNpXQHIEqAsJ8|6>ctB!U&OTB zctRYerV^I|&uVY&nQyazl49+I?$q6SQl{BQH8>Ysw;{Uu?0cMEq8Q7V)i|K@UPaQC zRMMquFiFFveo(WF{7^6Q6m)@LH}vC=5AT(ZU6$7WL{pOve$sMLFpy^+MY?iB*LC2k z-rko{7ttv0?ho1(cHz2={tAf*Lh0`g*d9;K&+Fp7&jMyrT*)h0N5BjGkItm^5Jbu< z=7sG4J4!@YAa3vTTzuVUzgSR)B?~#0{a5vXz z+mTMyE`yCxr3J&93SfiMs?x^N#&2TNg`~yqn2J0(j?|qWDg8hkSSf~^PyVNh`r`nm0t|e z-LP)CrX0gBRY#nNS)(*tKeD+658HkKa{i@RvX*`D^w!nRI-PXH=D}+Ne8R_Tmi)NA z;{hX?oqdQVJDEOybW+Y6k<|ec^RSA`VG`Ni&*HqE20x7>RVVSf z!HK5MZ&WZTamH*IDH|(wfULii|EGn`DCqS+`R;AoY7sV8#u5p?$C`|LW9LNo3O$X$ z49+gy#2sypf8SwYCCY1tf7YI#jDMI?z$etYwXo}fV*tFDI6IX*Y^9HtEZA|gieUgM zIz@-0gmgzRdqcn|FonXAGC-t25xey!>B) zOXaR%Y$P+P1yc#vD0NT@a(T=VJUG|l&VO?&z+eCDns`xyW@O&=*|X6L|CpXZoDov> zdQ)e**Ej4fSL{+~}#-;K1MSoW~oBG+`#7c`~pT9iBmhvQ?n`em9AJ}F1&6q>R&HA&Y z+LH%B(3ymYw^xos>%b^M!g~90gFxds8v3|hnJy# zq&q>!Wu;-5Jrs7~i5tPrjBf=lY+ZD8rZCyH2>Ce{Blh%5SJnen^^+%DDX)az++XRw z^aB=S{QTjU-!}Mm)&hs~ek!-6$G&~N79n(uD%w)YmyCnkJvVtkG_RN}Ty9)r4CVyD zhvkO^G8Y2MZA|{$qZ6*DP?+Dl#)h?<@-SZFnR>uFZNa}^{HYCLBdsFMFf zd0^v$>@$@Q+`nudL|poE)%9li!jr{@)Wlq>*v_Xkzfp$qy9k9aQ-5-+WE|&pwyRgU z_%HW87`VU-xKV3;(S3!h%6!ahIQ`Vq0a~%Q)wM_c32I;YABPACM(*(Z@_;pX^V`g# zU59E+zEBXNidF|6U8X7zZ7bAw+N9$Wui=+RaEb3 zK~imMK*4rOvF=%{4O1poO$7zxV#QGT;0~UzKV#Cxr7?%r#RePK4Xzb`=a3bX;~g2O zTWqn$FA?r-p!g&uBv_4ZM+ZF>(Y=qp#!@E2j1qTu)qlG=g-l^-m+ftkllonZDxlnI zIZAfc+?w$*X-0oR>L^_CQ*Y(jOjK+*Bc$~5W1Drjpb!p2jx19s{8#wL{W!{BYqz9L z*8IqY3mJ*L3d!%y7*wN@`>$Ezd1M}%IuYVD*2P-=-{pm-R=H?*e}${Z3I2R1>>?b= z5&HBA5_h*GfsOn6mFrxB_EpO-6}a}d0@VlG%+wss{`gfHm_u>($I&Y)SHh|1KX0q^ z+^Wl%j1|=D0zBL0cOglohwX1EJt=Wyv(nHm{P(SdfoLC;cVhWp@k`BRWT=Q>*E>EX z$2{)e=#c+DYMyy7c>Bc}vCx-i^)}}ZuNi0z2U&f*Hnc#^eWhvA^+?3kfV|q{)*OMCihME|URPi{UEcyDk;i z%9Fn4tXYo#cQ*NBQp2ZD8>!BvcJHkp9KXxWT-smjFt6+>GnF{>QLSe08za}aPa94= zBFE0COeke;IklN;S(^o9C4N|LHeI=OE?RL|{^A$HtE;A~Po8Cf;;qY!s_f1s^U}b5zC%b0h37Hz^e}frjm9ezZKf9loCvp8_5p0^Pi!O&9N4@qp0~4) zx8zU4XOX|*y08O~#dWRpCu!Gug|}pY{0GdZMaJq6?WGQ@BkeFVpFU{b778D)5VQ@` z+gQ-lgpg{iRAuFdI%S*_Izbz29YB6!Jl;Iub0M+GROGn2!NY15`!f)VmlYsQG=9#x zV;uV7x~EtIX!TUTg#l20;~>Qe#a8MZp|YQYLo2m1)_z-Mh)`MbVmgQ%0`Tv$yj)ga z@Gj$;fTRqc#2qZ@y%PR8Y2_tif3#qrw?Ik%2?y&h9EYNuO#a-lxaB`0cI*T!?P&&FnP z%kCNX9fhz5+NfBxUMT+{RYF~E$Vb}UIasz(z1*{1bs*8c;+O5x)?ZJqc@c4zC8|a9 zs)R1j_=QDch;5TOSV-BS=}7d_+doGiFv2$jT`t56-IY-`*7vlPNF}fnVW|SSzi$i< z(Tk`j_^(C!O1G0^zvv}XGWhMlm3n^)E7m1DoK*{`w?gL{R=Q+1h*`M$)fa(fM(t8 zuGM%NxvJA_Nbx<~gM(j{AACXJw}sBF^XaEELXT;pS*Xth2{aw$K0s*B50vi{wuPQ7VokzMz|Fd z<;823T-0JP9H5m9Et!QKh(iCJJgh#7UTpRR`}>7ZXsES_pzXt#Ss&Woom{23b8UpG zqg`yE{mK`^r<(wsN2nc1-l*IIWHIUOR;Ut5gk*CO<+wAGerp!V7+foo4iQ{M-obUx z-LSfuzo+2^K_X;SvyzF=I^|~7t{!2JdJ`%XTDJ>~6p8guB+9+aF^s|d>~AS0B1b3B zY_45t{IJKBTLMdZVl2Xa6#T@NrC&@9t^4PjQUpY=TEoRION=0MXjvpRh5QG7|5t%nd|kHpH%hGc8MDg84#E%dxd-G^`1e%n1}h0P%ay|! z3RR%dHFW{4?S{{W7K;tsA5NaWj^6@a3^%B*^l{99JtuWLx8{n+Mw{F{d`3K0(p{a- zbzcqZKn4HUQ6catTXo3=FIpVtygaZzT5?qj$tELYaf_~H>GNe;&)S}kQDp4bEgC=f zcLx8}C*Hd~UQuGs;IkwqVs|9>b#bHEB?)zRUae?}p6~{G1xC5N6b1&Ze$8AYBRcFx zgn24yJl}g`DJL?FweYjxq*7e9w{eX%hKRKEa_tNgXWn3; za>%F(cS)fwn^S9Ush|^Fuuy?Z07*U$mw$(y(DJR#WQhn7Gwjj(vHX`2&Sa!$slU(t z0EH@@xl}*Z;CfhwqQG zP5D|>P8NL$o-K#E4Q@1fU#`_-c*jwV(RPhhnUb=Y<-zy-Xb>#mGrOS1VGl*sYvS5b z#T@B#Ll3He?CzeO#D9*s3d&yn4e^S zD%F+|)l1mcOe1T$#`Mi$R=c>&bCn( zx5DHE3Kr9F{It5bf%PE5IoA2Y0VCsB^y3E_Y>$Twep7#u<=fMAeb&^q+FqU&Js*Fh zZ^izl9mM6Gjl%x|)2+6(ZIV);z~#F1B`1tjDYMwKV_B;8{8De*DxL|E^qwK8DND(Z=fs?K zD)Y3s^x91EM&A$mQ_fVJ<${}M$qH4?erj|&c5-K-r?7Q#!ry(NnOZ#HiWM0L6nmPX z6_!VDNk!#qVLVIT{%m{vScUA#pc;;e<0aK<(%sWt`d1QNK6l(!b82SW=}IJ@RCc7e zn4?wqMt=rjpQT?NdP4wJT#U#rM+W*GWqEo+ycGg~HRCNBpdNu3uS^J5mZw3mt+on` znLodv0!r;A4b%zgH;@S=TcQ zRwN;WE2R@nApje&L*s~cxS*A3U)9Bkggy3~v9s65%c4Oti&WeWR=HFB`rGc2 z8O2A(;a&$Sc)v!wp^f+9G2azFp!J?>BrN_I`exccoHE;COLbz-{L;VO$FS@?Dd%+| z1roLCv4!Ff*B+dz`U-d_s>WxQg;3P;Z~g6$|GZJP5RjCTxT)Is?Ys_mC3@UCdaF<2 zmrMPFjf#%+1tX`@KW#&hHO|ldzC!&rtHDpwS3P?#H$LhPv{KfXVjY9E64>=dJ3j@_ zGJE!4{xs?%u%2?YkV)EXN`hM_+$%=UN5wf7T!GY@#!T6| zXXNBa6?48X{cB~t-egP7<4>FwLlQ$ZYE|)E_??AiE`wY#UkmHT=cca<&i4V?{FyBE zGPyOd-L#vJy=K$@DKbflJnrE)Ab}foHIw#KkcJ2m-bSD?`ue4iw@erb@B+c$&GUelwcYjBMU|2V`K%#g%IFhW&GGJD^ z`r_$-_KIZ_y)`9j67BT~HFBi-nH{)_V=MqA9sKB?JT4i3B0Zg3dNCaA|IJS^J5*l; z1Cf4hs>ttRGb>{Vzp5%buBbr&$UkziHeo@v9HJ}Tky0$145tmxd!~D}4b8AS?!S6! zES4U|khl~fgojhlzcC~NEMr%n-}(~$xdv$TAhfFN&Cd=k^zBxJl;w{_n5E?~EYr_1 z*6?qV=$H#M7{Oh=w{H|q%wP87_d%=ho_PQ6SR=7@{@VUr;87ALoZ0i%Ikl?o*~K{V z@Ro|1n3dpf<>O=iR^&~l%*IyUjT{`8ykQ8ynGm9tU})2j0#(nudvDmk!lUGEW;`AB za(ZWV_1TI;w$8BCTVrj{A9r<&gE6z_M0TAXz)EdqH~Yzd)^yLLtI^v;mTZFTGHz4Cz}BP|dFC zUs>UGqXA2Mc9D`M(SjMc&d&48tkf7HVvI!4bu~QVv4HsHzb< zFBy^ZPlk4n=YsU{UPP?|x&YYa3JWXm*^gWmKYm0mrxsR9LZDA4A7%q_7>r3^v5unBK2g9vj!v1&ryXKpc0@)~D zqt$0ob5_$3PVQG=$K6hpQc2!Sw=d(lG;I0-a$`l~J;0^jOeC*EeqiV8$Rg*_eajC& zTNa2>b3x`-WX)%a&8~9+kpnK0y&elpZML{r?_%z^M!AVF(%+eNt%KVBhUyA!w#t`I z`b4?C?p)Ov5v^F6<$S^PaHpz@{73H$F5eVXf00#Gm-?vkudAQKO)ZD4kqxz-m6vbG zjTt?KpxoQPUpr4)=$Str)doA?wbo)+H6Y4T7$%){_BoQUk_F)OVanff$jgVbd`RD> z?4f(+k2CcN!_@mKvaIWL`%K!M*t@__%R@QtvYm1+Pn{kb=|3z?sliJhVmvi4?iV@) zJrjP#m$dQqKB>8W$3-~l&Dr~BBDvXgS@nOMxoG|B)kR0){{vk>qQ3$f;J^xG5Capq z-~~k}QGgdMY^*@1mqb-BoJZ1wrtQY1nl|G1HBd-OOr{eN6dD&ac>FNL0V2SGCK%9x zAPxWl8T7yhJ`e&CBv1hkD6vEVAW#7fbN~b-Aiw|$FvCTSQ6GxW)uityrP2?-daBN4 z372E;wl30%h7BH+FhB%ApaK{~zyl@700~qu0v5bL20Z8i2T7UzN&ul9@*$1+5z3*Sy{6t|iRlQ<7jzEF|90-98lE4HnkYNl~ z@B$Z#@PsFjKn6F6zz0Tf00~?m2M!u$VtLkgD z5(zPpk+B1Z5KCkL1u58q7{qV`BP3x1E{MSjY9Ip=uwVv84B!DOSlsx8Ryd5e;mCSk zx@~K>-6qMeYb=T_56?0(B7=sGA`&2hCo~X(4y*tMCXhi5W)OrQOhF4+c)}EwiLwN^x8N&N6b4>xxBa&4n%eV#qrqINyh^DHkbK865d11KOt z6RuDNCP={vQGh}dUXX(xI6(ml9PvZ~bOd1p%nKYO)W}G5x*)?*Zw;rdjIQu# z!Xml4Ym|?FvTKsZe{oR(LI@s~Xkv*Wl2F2k1w5dK10dkV4n3U2%(R$6% zt`b&=6}mt4$*NzdcHi24vx&N<`LZsZ@1qrKM-W8pz(f;BIKTlrG~vVxj2S2{FDh8j zoUp8%N~;(PR?-p))%=SVOT^>bZ~yLlT&91QxvD1S3en2qs_w3fQ1=qa?M0X}wDFoR{Vdif;G4 z-nXCT3KEeDOn?G2s6h;{u!SpZ0SsZVfe?bQ1Sl-w3t-Sf8q{D0BPan0Du6)?PQZc` zgunzPkiZ2nz+*>`m=>6r6qVQK5Bd14{7%*Mzp5=?58_7-6R3{FWAhu-@fnNIF zr)#gSFd{D}mPo<{F?azJq#%VRSm6p!utF88umvq7K?+XD!4Gt>ge4Gx3RaLp5}xpc z6~rJ0NiFETIf!_(Bw_Fa;d^pa(I)0S;O)gBt{agaKH@xbdPzj1?_0tkEcT zGM%haFAvCc-!vs6JX*{YUFyH|WPyhoKPyi^My;)dHm?0uNAt6QZDmGpOMVPpHBas(^(mq#+Gu@WL0e zz=I#)Uq33k&)QnpM?CB9GB?( zN|s+xrXq0E$N>#vkcBK<;R;lU0vgOP1~HUD3`=0b5tg8YBIv*dF}Oel7?6PrIA8)2 zaDWp7XaYwK8z`?465iJ(+M_3n6$-`onATSn*C{E~0E!So1Rvl47OpUbHn^b;S?Gcn zoDc;lAYlnca6t@IPy!QdpadxZ0Sa88f(>*a157ZHgpC?BT(oH6qD2dm7L3$?>Xjwg zwaCYRu|jfz2_)bMM*zYWws3_rm_ZD2hyxtN5QZ=)0SQ6yfe&bqge3q03s{)K4uG(O z5v0Hb81R4x2#^2<{0L$Qm>3l;)9KXfEU(lHm6DfL>ZBxE0*D?c_y7icfP)yE;S6W+ zK@WgX0~xr03Q<@B4|sqB5s-ibE_i_nda#2U;J^kmn7{-kphOZ!4B^8MKWf}Kft8dz zBaywk^nWK!-y~s(uzbJ~BLpAV01j?I11)Uf3THS&8l)fvDKr5JOt?Z8tN?{4IKc%m zkO2fLfB_eI@@83b+tN(Wq`7k4+<7ccCl-$MLk zNFfYh_<|U~zy&dUVGA&L0SgAe#1Tjk;e!u5^l*7;;o*i18Icf?P)N1!CLOR`0pf^&LfAMM-(xW5$XTfB*wO*Z~cO00bP^AO|ui z!3jJ-0R}j6fF*ud00N2tK?o`U0SPFe2?89kLk~SA$-`O z28 zfeuc<0ugLr0}+6L1D;4ih#q*zh%tj^MkJLI*>y|D=?^@$?~EuU14UxR?x}UgY%_L1 zOm>{7D4J>QwxM2k=44{gVzKC&_CS);@jx~%D2DL8$ZbUs5Kadatj4W?ewtJX#w0Q+ zghU`T6N2(oIV--q4=Fka{W4yUJv3$#Yag9s#SH9>`@anyQvzE zahZJCrBM-;!>|9o)shW4PrRnQOgv<)5MoD-lue^}_!rWrM898iT!UXNimlgq)O1Hr zw&Tn!D?6P~tEPN-lK!5{4-Gfhh~I$*O%OV0>}!gbp($2XLV63Yb+nwtj~+!GML+H9 zv+z8gBPV;ij?}I%L{=pGt<^C`!;n6^N`L>R{#uUU6o$ttpL}K|N+Er6vn0i?$_UhA zBFUjRaylZ1LxW%_O;J3%NRR8S=_>6tV7$<{pu9x>2!~ZaF4F0KZdsq)uj83rLAY$= zB<5lY`6~K~AeeP#G7Q0LOs{=d_0+11iAhFA#6;RXb(^*S|rd-e_qr@ zq~|DM&8SQ?3H~qZfnU_?T)%&ELg_3!pCSs&SAp_+jXWdU{m|@*i{wK_3<8b_qGUx% z`8SHUVW8gS?E(JzU1chzJ$4K=?mApeJo z2oWw?R78I0ZRe77#ZUyhq?hfVe;8 zbEoAKK=43Al2VK1>3vBpJ7U*WEvJw^C!n45vhAj^^gLzXC?Zh|YJ~F9NiU0^>&Y6ul8M9{e8IEkI~c~0lmS7fD!zd#U2xe(>1i>z|B8axl!XL>5nHujolZQtewJaUV``j=ruEZ=KQA}O(+rp7H-!YU5#lPvF0Y!Z z8h+vPNROjn_0*azp`65%uXOu=+gJqS5Jb7J$&L3YnU~>yjwQKO+3}8*5+7K!KoN<4 zfKfp}4jDgMOmeJ{2*H8{hKNce!!8KsXjyvQTm(z%$$}Je0eMg_>p4fC4D&L4X_=7N zVWR}KD&6uDG*}G41`Ho9CP%P%k+CYRW;j1b7?eqM+aLCf<#WoPyI`4icuCQ*VzOcq z`K{`aTOKqnLCBaf@&S?jJ&lsq3#k|3=@AcpLK5|_JEG;EWoEAGnFO=+2&$ZBW}TD#_DfPs zfdb~Vkz0Pnu0Mi%DemWJmn2?>DpH~zW@Kt{>`(MJPhAvulH}EtHp|)^S2o-O3m21; zi59~kW?X)(kjRWaFMDp;vk7MRa)j;s1r&gQQJufu$C}|FR-5HdqM~jI_Zh!YwA@w95+$6-4eEJdmz8{EY*&Tu=m(@+uM@v67L-ZO4$tnRp zWE{YUjgislR?8Jr=*8n6wtVGp4HH%j5|#{-mW=Aev#M!sW4K5%q8??pPx$<|G>7>lG}Kij{~Y#D|D_Rj=DA`hFb@pJVd-a@P}`hS9ES zerZx*p`rX6}A`aB~9wL&E-*=H2};%1qe$*M+hNe)fg1%hZZgaz@b9NiK|7l%Yc<$cIu- zv5~!2$?k57A^klBjY~)^htSeD$CRtW?%2eyWr(C~pp=l}nB@Pgh(au*&rE7WqSGy) zy`<0ev;5c8lb$2lT`>Yv;bOJ!n@`OV+_LUD*5@%Rl8=~{lK+?SI<=Oc2z)ojo9f0q`&w$OKw9fDss=71YMYfD8VDg$+l-uA{npL5iV$$ zh`|Dgm=hi?A~dWLs-9J_P#<@t!%hXsGeioD#fT4~;nIrsr8s}xsdg!_#1AZBED^uX zfztYc1%(F0`;Zb_LWaytD^-^wO^h`X`ax|fTF;ZKreN0Os;U|O(G%@#PC`2qJbLVA zd6VGprY<~o-LcAsM}9no^dZeI3s-3d3Ckq3%OFwJIC;TzT|Z9}9GCdK>!$NkGztA8 zpbv;mPk6cpNh$}5%SFhkB_)D=`kYN)9-BtXhz=N&8!90&L{KfI|8G^0o0jzUO@=x; zlKgs%kroRVDn>}kh!-zU?0AvVXVqTMz*HsqO&Re{@Obe94GRqvSBw@(g(>vn@x4`b z7Ii-^_BIo&wuqUKu))H{N(qVy^vf?BdN*2*_&o}COK^Fmw^u$nDQ15bHTig8d*7pG zimiYi{J5s+Vm zjTIwszyNlvkkF_`Gh(Qe+}fZ=gB^|Qw1Z5G$z@M?I|-T;BVtN?oV0k9taOyLN^qN^ zO1WSJAW#4jNrc#y1*FGViD;}wGo_Czc13KOkKYhAS{wlgIjFz_7!d3G7A7J$U{H3v znEZe-`Jo~O2FVLW$2(NS*l>A??RSjIB=YYietzQXAw7P=XI(W_Kt79A2^FiQH*MuK z3!hs=dkz#>4>T(+tJ12!FW>|cD^@GhnzrIqCiUSFb3#K!B-ZCAp^tu+c^S4ag<|yU zlbjxAt9ga>wn%P6_<9GH7%65)etgG@h>Pfl;c|#Rr+{{sUVGY92Ie9ukz`b*l3Q-Q zsViP#^c#ZHA{JFOj!9;BfN5d*@Iu6p5a7lN8X_zh(*H8@V~C(;S|yU)`e-qeL=PUZ zoyLLU`td>nBSghwRf6$KwNQ~rczool4=`c~CVcoHa??q;U^&2#8c58LNkT>o1AMsg z0}BV14~!^0ZKqXuMJ}T&h%VyC8SE;~Fk0G$b$> zCm}IJS~00nsD|HDT=n^l5)+ZCt|<9CMo>Gnh`@-cR6hI*w{5e;&C#=_xjCLNupDBK9=FYY!DD7+`<_bkMMXNtrN^045Fq#Eu@^8b`%n?V zks@M30+DFA0|sDXhKLC2Wn=d11BS#18Z$q*czHpIN~?cR`i;lV|V9w{&g z^f1E!IB0fg5m}KErFilaA7|ZjiiUm2yu>(3Suy%4zypm45V1oNGiYLjpjf<4F-Bai zdu}0;IspeTV55bl2Fi;G94&sxoV<9MTtI!Sj$uz5DfJ_$fC388!w)H*e25h)LeQk} zKxqLHQ-TBx7alJrqE~&v2ON+A20VZU_If#agkZ5EL<|ZNF)ByIsE~Ym9VK0mux2m< z4!k%~Aqn*@rvP?9iN8N)HF9y8VxnG!g0Pio>ALFFJ>y?~iioIokQ-nwa?Rs9u> zL60826_RH~YXl?GSDbv5o&K03O9|9MpC1nW|iiM3!@ zDHKqz0tJfE3c*l?erOpfLdHZUw7*-na+*qZSNNPnuaS7s!UGJ+4;CvuRHUp3X{q#^ zM$4BJsQ@@+ylAaNXc?nnm(s@t%;cjbR>TXJ9xo>=TZTc2G=P96Sct4nLOo5ZWJ4uH ztthOr9w3d!K{9gJ*ZgWk&+^E&o5RY z8L(81l9vydlNu(l6)jSVhFkaiLkk!ra>Rg90%P$)#hgGYRHBoQ-ooeD&%gfN1_|p% z$ZDqat9bI0{tm(CRUMz|H)Z58*{{b%U8qJvxR{)L_!AI6;>k@jOXB0Py_Ru_R-n8_ zK>7?4Rg4f6jLBDV@>4wbtA2acOzrc?>GSIGA15g%YQ*$l2~qj&8L*NNFkWP+jF{+G z2_7zX%)rPvc@g1acxhV^nNd**OK#vs^C1}71(L&{hN{k1Z zl^<5H@Bnl2GWxh~xB)}#SRzM_7$PbkDlr@}6^$2a<+HQsc>XxjixL5&#U~|YM0^dF z2*$r(`kY4!No>#EPFoT2I4A)JU{WU0YO4IX3l?eS^g$8zv45wmjRZ}eLA{8P6h9m{2N%ngM7C^ufJ7Ngog2f0JEG$|k5!|jFH;Uhv&(9_4QOO%6 zt(K7AVkNR+qJkmyD*tYRTaRkK_IgH2$Pzqc#2{(uV2SNu5pmHnp?Gl8tCnQ;9zoE0 z{%A2_(JIv-VezmcLZZ*9H&w-~$yH-eqSZ~qe0>MZN)a_^h@c_!0}B-wF%ye^Ni3QI z;(?H{LWOF?BgGXXhKfjVM(q4CqWS^$ES*~dKhDmEgr&X9fCVd^tW7z$c z-qVG{EF+(!uS4|N#J^!qf6BkB9wnlXH=mYCoLJ2NX3Jv^mdAWznDBJohBK1aHx#DgnAnxB^x5893-b3A*U5kA9B|g z>~NHvQH4Zy*~FJ=OngiTpIL=Q{@tb9A{Q;msEm`=5iwMxfOr`JsEVjx*>MP7Oa8ru zD&MXk zJeTX>?~BbZ%}ErJ+j&X8+!k}(9)>4<{-5UOG*2#@;@L@TdeyQb^u$Rq20Ilc(8+Fp z&XEL%S^j(kmtjJD3RYn`U20Vmi>7$;{v>lUeAO_@PMh#`tA;--x^5Z@Zev9M=OksW z!;jtv9YJVGV$UeKEppfP=gpW#D^8*r(&uEqfArkVl10lSeD2bBnk;qnWYw_BUWd$X zOKwYU8h@NliX}d81LY(i$B=5agm@UNl8SGa-0-PAJ?!auRhQAP^7kOLJh|*gRrj*Q zL5~JE+br#pEWvJwJwGT(O3M-1-LWe12vNbVg}8Ls1(C-9w)FGA}J$WxF|70 z#t0TGI7Uz{+kNRX5;kDCkVY^hkPFsH#!J;=RYLjsmM!BY*{i1rPN&`#l%6GbCAsAl zp?-!5RHEBDDemTY^6N0A5Q>Kn$!k-4y5jZa&s#kC%a(PtMA5B{5R?xpFCQf@*!=P& zD2v>UiYKFg#UwJ-vB++#{CkVYPYL;;78Skeu97TDUQYDbp)v}&YFNaE)eR^0t|@(; z;@>O3e&XT%wLLRV)jVHaagyXsQy)c8iq_)zdf}>ZVu}=KrrG8B()W^khS9Gsf^Wxp zPBX>htNgy{W!-J#NpiHRC$|NWV~89@=*gR;%BE8>9CKXT;iw4pGbF#obF(mcPVL#3 zU>(j72a-%OQEbX4kj&mOtrvlcdUVGC6|W*3CM4$f;g+MZcm}#X)c{$CEtkrdfL1 z)C~708B$Hy?8avI1*^1TMGDDl4{EY(xn?w zrms6T@#LuaP3d-imav=Vp~VDM&nEvKQ~F=5LNs0_lATV??@P~9HNAqBGWk6rR)y*I z3h86w=c?H4Q?ob8d<;=E{lf1MoNoE|le{La=%1bSl?0Srwg*QTk!} z`!7S6>#T^SATY!a93!z3y%wn^C@o8{N)qBr@@t!;jfyx{NJ#wNrQa%?CcSH_enW3M zV})dg7B57!Y?4_RQP1Uo!efq~w7f--{=8ZYb#=v2wl>+b3rVdD$@j|E`E+%?kmO_> z3XpKq$<6e4W7h*)EyF>tCq<+hQtxykWI&p$;?Z|qss8$I{d9Wkl& zSYOHYE!PhV|Ek({UF&%@Ig;r2X-(0 z(sTN%bUx(spM*jz93R#73CI2S&C#?L#Xn6!Ys!}-f10~FhE_Cn+abD!`TK~6Z{>H( zu35AUT2((yQ?*T!=}U6!P4ncst(pF$ zZ0v;~r;~c2uD<-K>f|V5)e)1|iDoYLzn{~ojD`0K{3gM!^l z$;qeIYjy2kHwHCgu|mOi-Q%{jnz}+B8YmlzLxEKx*`1c*#3R8XU1tdq|gMQgUfj%*7Z+R1mUFHho`Q6zHbTpv(NHN zpBglNY3np%yLfE6zS_oYyruX33hyWTexa8lg)NFFo<4@(A@=3b_4CTISjJ%Kis{&i z^U3}!>{;L3Oy{w5!!hkXbnDg;MaA{>%8^`qP80{jJq$f1>1tfL>7ZG6i)ibeczc_A z(~IO{eNv?RbE`6`g){mVu>%k)R%ZD3UJ0FY#9li}U?#p!hhLALK8pS^%%bed*7Z$d zy=Gio@Sx)e10;FC%0|6E#z!cZu?!g4MmQ_ zF~hU>UH%9~FRhSbEkac6V0!7{o6JC|_yH18!Iwhx9@XDJ==S{dPN(mebzW!NS-5rU zuDX83Zzwfg@asApb}Ui2|C#ss%{_TYrDY;R;_~uJ>Eqok*Vtr1H7}#@?#8AYAH}c= z6iG!%6iQK+f^oUDil-`k4Hh_q=pXmM-Z1 zuv@Zg+%(Z`Q$Md>)B1&RdzbD0y+N}_MSE0ysD(m>;51*ucuwy*e9J0)v$3eoK`p$4 zipWa|bi#Z0q+yuELeWu@qW~~QSRh3R3HUBQ%qkY}h~=zRwI4Fur`Pq%a0NTvh5}^d zWW0&0-WVrOQVX+;l=ByFipftZa2AYv^@60L;{@YF?UIqAAtF!F*nNnKhzyIAnbe1M zyLdaMtT(#g$g6Bg$yA@IT&DB6{%}o#3aMq0sd`NJL;ElJPPualzES=k1A$&Yh?VCh z^t4GbX3;q`=W4d0n~tk-@fX6UE4R8$lj__B`zELsA15=C5V`OGk6?0|>cbI#x zWKXQsSFmkznMii{md&(x-@kQ7e4k|Fxc>hnGpiUuvR#edyg(>mryA$@UtW zGE2uTUe6)VN~Sm2k(cz?O?bQz5rG#XCU62o1X?-_fSLhfbYkPglEW8)v3gFz79^ha zd%`4Vb3HLn-I=Y?_*1K7LM}a+_#lCm0f?YQ16DAE349>L3W{K21P4qol!);-K#30z z5WQf+70E%0V$hJvFY=LN zL=Kn`fh1(10!-+F%o8PG{SX1u4+h9CM1;SLnUk=5$ol%eyqADZtK3JyQ9NOK6*J0l z0MrvLh%tg9Bwz?!AOH}uU_%5!=-~uFm;e#3U;rFAA&D6v;RhEOfkp>(AhUoJsAx1n zt7KN3<>sl}U(v1o+J6*Wzhn8<{agycOI(axAkoUv01_S^uz~;}h#`R%@Yui%lyE^2 zaBv_8Fd;DD%LL)G^zc)3u%DE*M*SWasXygxOrI;Swk6sw<@^dIqKeVc;?V?*2%w`a zHnH=_u0wIDzN+lPh$nhrzy&WP(1I6ifeaZAw~#> z@B<5m@B|Q`KmZ>&p$8WTp#}(Uup7(z%A9&l59P+K$F5Q^=2eS8y+rX?v9ipmRX zW`_|f=m7|zzy$>CzzGMqK@vtFg)RV*0w1V|fC^-6Ukv5qN?ZgoptX9$*A3v~%hw%I6f8fc5R;4{WNe@Y zIaEM|7a#CJj1KJJh#W+r2_RTuhZYD^gVIqgKXDz+7{2M>CV+%3XkZCpFn|uIumc1- za1ntN@Zi7!6XdKXj5RL`lF-5c}K2Fq(%8Q(C&$2a0|LfPLdy}b!#ts%hK?ahb z1tn_GgdHN-0R@7<1RQiB4G-V}6^bZ<4{%h#1vx4Z1Cb*-fX^V&!e*$WmN#dy>Rp#> zT%Mo*6odgH;KKtxP-6ifP=W+7AnD-%zRV8$3J%i>A4D@hv?!Qu?Ll_$$oCUjQB3hx ze!-FKXeSrmy$MDEE-(NZ3_->OR^a;aL(ec{a0F5E_53P&^pJuc9DoQ}*dYQQaKH=aYHaDW^nLB$CW$P8cu37|m`3Lpa^ zw0KAWow7rPg9%uV0^lh+RG$Q$Md#~(p}N}hBxJ0p5d(wL663F8K_I{Z7oY(Tc&Gpg zVkD7(98XLDh7%LuS#a-y-AwWS9h`@p*I3dOp8feW3;zxM_LTTZX(6A(vl@)`YUig(9c?gY660v>M zUjOl!$|n1VQm+|4$S4tkBvOEbAdDdm2mnGAc3=S!eprDJFn|Or6yX9Pusq=b5hNyn zvV;X>4)B4Jjwfc89bS?gW^W>*H(Ite8{aHkcHifXDX$vUNJ7U3T7ZEgNFf0@XhKT? zJb0E7loumb`gDA}Qj7Y-v{I|z`k=qUXVkM)dd zE{?4Fks~MTKsK<+l6cZ*ACXKhPzlDu{CtB-Et9)Pv93OTC;FLT#&sz;UJA~tb>xPV zYTXNxVP_l1^rdyr$JAn(+`#d}4^1#22LU2LBSaG}JAQcK0}>-KGfE>cqmvbUt0nGP zdPtNO(rrG9Em;FdJJWrDCJtdcl42&O=s4;*C^l$(N zWH7;i6+;kUq%y-Mjfi3`Dl&YaVrrziYW7pPE<%x7AO8fmHr(2#+2-#X^LRdS{Hbe} zBwI8cnM^P)T=>0TVsf(M#}B8~h#l9bXr5y_nyQDSI-z2HUqVrMlY&EbvXbkLVL&nE;Akxm$(!=?~l07-)E{~I+rcVecgtGdLRg;U(;and5|u%c7R~%*>vDa=Qzp@tMCX_$iJ1|Fpqy@v zwsX49w%yb6z30FFLA5S!!?)*^OR%h`?QEvJE9db|udbc8@My9h7@Fr(o}czTg~jUK z_A|>V&o9Dv997ZoTSxS+^%s{HlUB%I>!>GsARRQ*LhEXeqL(7Y$jRD}oX=H8RUU>z zN~chspM<w2ObfMb+%}hyktCRK z0!8M9KSKSaQ~!tZna@f=T)SIb&1~P>295;LkcwGW|8bw z7AMgY&nKk+Ppzv-luzGTG-Zu579>?gjT zD2w5ao*_6s^Z8*hyrSh0JqNXIO_Dl_nr7OC;~o@^zb_t3m_+B3ExT~sI#wL%bDc?a z-8kCwa#8fx)f315`@UefpJs{2k6EowKp@v`i+Fg@+op2c2Fy$7=4BIg@wcg&tnOP#rLrgX+G1>T#uAeEiaN!Ovj@by64m9*I{|I z`*u6SXe(-+sBz@RsazK01V$n<-Rat=t7&atP%J%<9Z5V@Rr^j-Dy6VoJS@*}0O@<>&cvUC+wmDQk+S_>C-*NpIs6B-!!2)%Jg7 z&kKiWnr~nA`(B|BiYgV8rGBEGwbe`1CQ8fRBrlDIm zm*^XoWoOIJQ{?wSZTqL^PLiH9{n0ZQMUxz(h(P^$?j#vfQ&sDh))n@?al`pQKt6Nr z(>Mx_rPkS@h&s_2yS6BiQbM3URp&5_c|5P)qn{{BmQQ?MCFE%-g<@DJ7nTZNS^sro zzefbiHc8H5Xpf_AmiAb_UnqlPx_Rpd;%Td=t!}0_Y3gY@m!qzp6nLTu9%l3?**#vS zrdN*H^~iPmwXI8(F3%iQ>G52>kOj%OME!MDF#_!v32`BbLNILF^&@upfrEt%k5?LJ*y_f;Lq@`rtCaopQigzum_2f=a3#}oVf zC7bSD_eN72O=)zc(Uf1^{9I{~g>0vSdeFzc5c*6RwZq`NO(Bnu=aG zuC6R;y5=cT zDuLv>1;@{9pLUPQ#znJ?%J1HFXVXMMiBwW1SQJI9x}s%~3-@gNg5&#ztOuUlhpVmY zfi1V;=BZwrPxnu6Z9CP!Kn|JDuhJtm&MY(T9cfY3+B4 zDKvzQ8ZJ^?`Zre1@5z3%eD)e6tB@S4p=^O0{5?9PO^W~h|B7-^M+e$eaYC%UU^EF|*4v-^p37#`6A#fIzjqUYKBNRW-& zeG^!~6D0^i2TXad0!4DMDzRktC%>87&JBo7jumKt0whp?1E_F+<-WH2RP_yN-B8Pp z@OvGGD7yxN#)};-T+C=If?t->=S5Z8fdc!X0&AfPwP1xl?CL@V1*P@+YaIl~u^f*P zfmS>|X;p7gTs7^(t|`0DOOsbs6|bXmTjb|gN}-n02&A$sDHISmZiJXvJ)+v zNlKy^B`+T@DKaXPX?|6Nz+^;9V4o2RzdEysTzOjI!ww$lcwu|DH`X`^d?E&BquWl5*G4pZBLJf0`{_r%ey=tgUTM$e^@pfbM6Jhck)wsuvXHkSZt_DAx6!()<5&bSGRIaKiB%cTx zD{QEgtXP#yem(TEIBMGGx$66UWpNZO!Eir*BlQHWX^NI(`@OPf7%3(>RKV~jD)aXr zax_z<@N&?hLy@9Ok-{#^0uW(D5I1(T+U9mTA+sDx)q5PA_7e; z(VJ+F5myG1*r5SGYN!zPES?+&w8Lf>Rns-yUAYwCueOp+e=UAs;eLywxWa2sXxiS;`PhI_MgI}Js{A|5_JQBRtp_&SVLi3O_E zn&H1?SyBARaE%d{h-Xjba|uXqF|rEz_$9mkVb;Y+NXd;!YinX%It15^8#~#UWp60D z`hS)CD(AT%n44v4j&G2>Xv9=FNL(eqPnV?2qlb`2q}z7wwTl($1^9DV4+h)*nVIp#X zBaZ0TbcaeT0zc^Bf#oEGc3U$$vezYeouNX~fe1LD2p>C;YWfHlEf477h7&hj%n(_% zn0}91=A-E9`wKXL0V3Ka(eaO!ks7X&$ZnTpxa~Mq>+IkH<^v8mKEZ>9L^Z#8vY?`89 zm42@fak;Ecpw}JwJuqE=<+-P2OLTm4BB8KUC@9j86)>>SFS=)%5| zR2`RSnNQP{Jo6?>aylZ1Lv}Jb4DGVa&r}Y_w)0X%A{EaE1;ZxTCFyS$QBUIUp0`c; zy63)qT4p(oUQDGEPmj{;DW85M^pEVh#6((sNFNoYiLF9Dy(n%?^ZTplPKGb1san=@ zo!faI)}_Hv2EUf$+|J|C^cKY)MLp^&d!M=C=p|W#U6uT@XgSvJq4#aItp-Dvo`c#p zB-5doHpTErUfY1FR6aUse({ssPtv91Y}etX`KoK3Ea4B-&C_+$+`H#D9Nri99f=@% zFNxlJ3sFL}3`Xz0GkWhvLQF&%eTKo1(R=Tmh%y+0Acz*di{8oe{jK%<1JCp7UiaQ_ z_KUOEIQ>ABhJIv;DDV{o-uLX?ALK?`C$Ts@fPvDNWUK=>>R;+dLmCkApQF>$&7pT+x``xYTsI^#5(<^MAul zpwq`ILYvEXJIPYiMv@Xa+r6NmfNu6`s{SM7zj(G)7(>So)~Q?5!_SNabAFh^8oa>2 zkrg13qgc~pMaSbjnY4c*ZbEN^`$|;jy>D$Y-8V9&KhBeo=y(FclyuCC!Vx!Z%q{Kqto$ggWGo{qdUh;qOiOqaXlK_!6*5~TWi{iYzT5C@6o>`>wix+HZC_l7H};KQIU`wsaYXpjuATe3wTv z5&a(hkMc{0C-!RL%PRExwnghdRpxJQH*DS88>;U`FK^&RS z!%Q;5E!HP}qe@2iGz!#TUlJ1b?FqvB8wJj%kg&9S#KC2ZC;Bw2zxfh3Ogh*35Il+* zsBqJS1>pVqvn_&|y6avHjAJ6sq{Wy2gq3S@gweaG7vWAx%B1278+x+#d{liFsQLP$ z6CcymP>lwuHypIM_mtmz7F?@UFzq)pan0vz`{mMptL=dl2?lOxb+&xf^ru`+Uc$TjlOx%Yd~0Qlr;7`KGQ*9;P+LBLz+dz&(crNoZyx_b#l z3`Y%PqG>5PT}OpQ>>Z!)_xJ4oYi7QxQaKS+p*SeFn>EB#We`oSBLuVTs0YtucTa~k zW!ZONlXTT&YF=53aP}Hm^YUacb&Ysh z>!-SipT1ac>%76*+NPAiGyZk#=UZf}j`-n!EReauR+EidP~V-jeiuOCumwrrj=Xl10-0PdLaG?Jvx0J8^r;kSfWzp9ffA^&4x|y*gYIwVZ?&PHvE8fM?G_inWI+Jpu8zc0=neWWUrG(Df^ zsF-?xF2GDK`twox?+4t6K(-T8ny|)dwifzlzm0>lHXGpQQm%oPl2sKu)kq;TZdMxu zaOyXUMl~^2GbsyI2Sq(@9-U_hyzepe;s#nQ)Kg9Y<7Lv1rWel@LMTHFFG}5pcO$dL z+C2)XJWl@bnUv75RHSK>Ozkr`nlb+8dH}87tE{K3HW6Ws-vV=iK0XP-!C320IHD%7 z*2%HhA*%U1(?yT7jOD&MHbxM^r#_dVS&e`u)Pd!-y~Vlr~SEV(&z##GrB8ylRShv!hJY z+;hKCllBuc3iEI+M!8g(v{#pultro3y#+6&$zn)tn|$vsIzQ0sg1g`M=nCEWTKwK^ z&HDAzhl+AU5SXevq&yslOT{n3J57*d8p!WDzsT>@SUVAu962o(9qY!)0a<#@Eo+

    -q_{C+gZX|6YcKwTi>pBFbCJHc$G(Rl3}XJ?uOtA|b=9=>?rAr}q;q z?%YVyx2+kqCb1UEA72E{c))w}A)nZwHd2}QzU*H)hs6}wfk6xpAwm^tWN(A#9NPmI z1t2xjoF`|L6siLR1ENn4dE1{2j*`mw_x~rdITg-d9ZfjX_3)yAszj7zFXu+ix@)bx z6jJQ0DyS)W2G{eh1A2vsdsjf~$MD`CX|sH4taRZtW$P59BP=^%jGo9V=N~K?$Q4?+ zGcGkHJqJs*>9YDMQQy6cenULco;0i5lQt>_ACK-e4(%E)`CAA2JT@E+RW|^KFEHWJ z=%IGU6DGVOyXX1LOGs27|4jQ#wPf(oerKtKbrgexiD*N%15++7A`WK)wy*p zMf8-l*mtv$A?n_xxKKj|Gq@6zls~_^1A3u01MdJEP(HTKd0y$Ttd8r+sgqS8EH0;t z%YG-=rhvr(1Fj@6BVt%G4O^|TR`lF!2_?FN>wpA#tkmGAu`DL4tOga}!HKOmh-cqD z|{!gUkJXGIK@#>Fo@VC=NgqWI7vmA1Rny&KMA)mwYcj~rCcct-<=fyQl|(#zL$Klz*EQy)OHQKY zN8X$IPP8Z)xboRVd~m3I;N0i%HNM={A5p#c@icTCl}29Sf2fVM>BT`J?D~b*<9Y*q z@IRNs9`pQnzC)|jeXOqEBztQgLfW_ob9Tb=`4d50>;9^%-viQNdxBFf&zwl&rG$=T zl9153w2f*$hJQ+%&@@dtwI%w+Du zVQ+ToOjRzWrLebk4~&f&)pZu4OfI$cQS7oDZE>uEQLnX>nQQyWB_9Wx<8ci9ARQ5#{f>y+VdnIK^ zdy1rL(LF;Ari_|dyK8JxS;Z$2xViCK;ou*5x??d#Muqacaw`>Oe31OXI`#UQdWrqx zd^}NIGAQc&aVTJnxa19xE)9rdXg7am4egeSnwwS`GZ^jul;>c?Y51V_rBv3J?jBhEdR>wbq1}eS)tBSdFiz{f~XYlkF`tJ4;Utoyajv<0Rk} zYhCL2znmgXs2e&&I=3~2l^jB7!(2r5vwfGEYzP-g$0Q^mkSll5{tmk3_@Y0a26+D` z&tSIl6@o?Y`y{!&RD`lj$mniELBUQ~#DoZ2lILa!%w~EW_&$r6#sg5n30c4SRo^+mVBh zC(Y$H7|y*AA-HUurVO!aAp`V`p*b2e*` z9E`Hcgfq`HUJQHoWDkZh;`dm$cL$2Lo&~=CD(6cB45RlUEtJzf>ZG*n2z=-(58^34 z%2ZazCrpLu-T$aHc&%rk8u0Mji-C)USA!)(;9qG-5-Y|B^vm{b^`@8+VV23|WB1+N zxlX^rF-~uqCWbVk>bS#L7k>Y)Za>XRo(Vxadw^X(-ra4_Nn@oiCuR z*iLB=8@m|#xb!3RElE-88Wxeww`T;@EYlXf?xUqb--zENAKN|~gvO%NEOiLU5=^?B z4m%C^T~iM9n^b1O?E2OEvLu5SX27P$G=bhjH?+dvta>+^nwAeJb_^G|dGfm`+jGEl zdF8FgjF2WKAM%dz4>TUgfT(XOnYzs zX&-(j>C$5^hijBVoqG8y>3Aa2UQYJR_kCOCkXQgIztk(lx|UaV5@<05brw1453Nq0 z4)j92kt(-xN?#vJD6ncdZ+|RD{GlmcXJzaLZMQm zBoZ|pudCZQ3)pDYJta%K?jT7|Wj1J(6#0x3J>=#{X=h8GxABI3S}6Ag8)0rgxu5_w z5jC8eqn3Q48o6$*seU0-?m~rX`I_!(w*PS#7xMekM>-6AE8noTJ{TZ{utN;Y8a{pn zo%a+f*DNZJ9h1qp5@O+sd*|gV;=DMBhT;+7_dnfJ3cMBT3z9;*f4Go`>EI1s?3vDq ztz4<*Bex>l#Tay)x%Irc^*;TXbFywID0)=_&P}ZD9{FW26}|3(0u_JFd;?yZlf84~ z31V6d5ySh%Y~pLlY&Mj-am{|7!g30eiU^zNybjK@1EuZFP~#}+(2sAu2o%i{+fPYV z(w&i%rd;~#CpTd*751v+6)t4ySNDDizOQ962DXfl(@Y5?d8$l6Yg9pvo+$4=Fx^~H z+K0NDr$1%K#v)@KjC;v1#C7uvO|dMK6mq*Q6`n&6b!j>Agg#*jHlfRN7vW!ZW8|!4 zuu;pHIAO)35#VM|;__5cWn~mFYL#L9Szd25>o9BB^bp2U?!hv|DWtAbepy_WWdHE- zptv{37|u5AA-h`+wkfUF)F?Jt8E-X_FwoGD`OuBxTjo^6AtHZmQMqHn(OBV~g1nBv z#p5T9U=7@mS>prn1)}|<~ePRWR zP1;8hR)|5CLfADm&-7m_9|Ryl8P(~3GE`>$_xp*s9^c)+UlleuY#kXkfUVLR>_ihn zNd#@&OEVfjwS90V)BjJS%dDJM728ZQ4bBK$XOgp!b~Ie*cYwb?8;5ldrR(97g{ny` z3qHHeMVZQ<^WG(br2@JAy?c`fLf`p~`J$W+_3y2oWB5!s>ja!F4K?F>lY&-XS^|#L z;k=pWAKXxYawOcIT+&(9<^`LYd=Fj}!2dATCBS}ubkvZ+Fg79N!C%fO&=rH-1 zXi|f1AE|`y9Kl-#omA7Uuw_p~d8Q*)gvtBdl!cK$D$o2*)i9~C zylmZxCnsaI`^G%eIKn-xNS^oM5ze3U+tKki?o+!!>GI~UnT|;yEhPKZ^UM-$*q!87 z5f6Mlc6j6Sa{@ioY{^Xx4{;id(P|Vyc+)ncwoPZG3HNLI6o~(|ex%eDSb*A2?;knx2GIjOx4B>Bk@CbO2 zTC>Wt19+e%2`mAlYd=mTTLNUNom|6;i;ZiA4b_N6r5!ZH#I#&^pOC+a%s~F%l>eXO z|3}OJk@51we&s;`u?h5vppBz4m_S9bDkt`}Cb_ zfJx`QbD>7LI76CkmWPF)+oZ^FVxRW{P7jJ+#nTMb0&p~0mga~d7AlFbn8A%7AsAOD zO>UX8sqat%*{u$1uTiHVSXA+Y=~dpdO}p=}2dn94ER-LMlW+?fW2)&B7kujIYX)?d z>gmpH{O(~O6urLI_J;qOP^3cbW^3F29KXF3{r#DljC5RzmoJ7x;&Ad5yN3fYhCbPB z4#FHAFQ}7Wba&u&o8$P+a{&~bc%*?j*f*jFy5x=dC3AHG?KQR;9_lJtxH1`d3t%^atZ|;K=4?w)5Wn zhca#(?9~wqjMonI9uVWy>q-pfb^095EC_LNVhg9|b99oIi3{6bj|r4?8q8DptD>7R z<*Y+c<`AFMKpUcWBptMv6`B=P2 zGgYzlVtTlCQ;aOD+o8oD#v;0*LfnsFow?6mBcZ0qKwM?DLFQ(RBCf!br^y|HTW1Ak&71yz;v2wI3>roxLzAqV)u)IV z#w+A{80FHBs6+R2vJWppQk}8-o&h2w(H^>;1IHVG%~R!hr#mIImIK}ul)!C|fG5KX@r-xQMcPQ@qb+(u}DSLsw^6odh5r z7<=8M4;B;j)zoQ|Jk7La&ObEXkDVS#F6_%}%sIY-haz|UV`W2ruB&@9DOeHSrKCy; zZn}?X;%kGe*8=+yJ}2f<0$d7uaS**J#sP_QZv(#^*uBxViO6$Os1 zH8HcUie1Aiee5buXn4|MqY9y4V%*!Tjs@ikHDA+Y=a}hgu3O%nb(vMn4NyP& z9UbHLKFpMV#Md~R((?MjbS3~}C%Dk3wV7X=AzQ{J1ohn>u##BY7c?qLKiFbIe?~bG zY9GuiirWpJSfLo3Kkf!6!cCH>Dail*!jN+Hj)Th`Bpy4*T@Z_Y@j3rUUFw!+;0P8v z#wCAX)L&R7;F!9XYO(krurf@^B{RuJFsv-dW5(wp-~_Rn%cVAkBD8-i+qZEMYn>yj zd5hvwZ(HB1hPM$di_PyV3m<^#?*mW)GujP>iI$h4kqG8X`gv~*w9zi0T!Dl{ZW>d5 zfA0+NBTJRlx@>2X)fDW2S;9jThdo9Nfk)+84qmX!*^~SrJ@vG=#XhWG|6IL`s{B%k zO+U0t_tn*=Th40_z&N3TcQ#>(1@$@tE8 zg$!EK=*`w4kI-aS(hp~foTk3x9HD}1XMsSZX;hq@Hnd3Gu#V@^r*(EU2Mt}wq*23e zc#!Jen!|3)h1C01h-oNS4(2`Gyfo$GUlcVpWxKS5EA-nh6pTB*J7n}11GeTGiz^VB zUlWPKSf}|j*%*DhfNSfL#qzq}{|bdg59nO98xYpWr&%fY#D!gvO%DjC=I6~^=oAV| zFkfvK&82bl6d65Cz2-vCp9TA5%L*NOZ+N_|axVwjit_7WYD2Z=MRSVJuByy_xz4|f z65mPr;hToyctgK79G*ecbx;P9b!dii6WXNJ3Cd|O=oP>ZuQ&)CzK2c!^n-q+ z+hf^rWRO^&TUKVH!dK*Qh>juPq&&@b>HrC)FWGP@svEc>v`+P*vNrrQB|7n8cd+}y zvLVYeyNtNpXhKc5VHo~JhN&r5i2L{}{lZUef8}PH7IdnnJdpxXELSqmPHo>Yl7h># zHTeRKKYWZte7v4nLVQN40yG8hq_pX=mnzq@Hj|JcwE4_D76N{6k1nLal>5i#EgEBz zH#=jwiu~7KB|HxOl}SmL`5&enULS7wFD6cDii-E$UJd+?3Y2#K711JaByEIww=LQC zCI3Wm*e28BoIcK02Kq)Saq*IIAY)3t@Y;8Zj&f)qhOc@1F{GJZ1-w4dp8tyir$O$; zE!z-yzMK9E=J2-qz}ugUzigd~nQ?Gjg||Ful_;=k4lpJp3zoPk+j@gXhhX4jt(4jt zujd^8W!dpbrb_BEqks|2p6YIU+n@UW-n8D#>AagQbR29>rgqClE7~K3kZj0-D2k7M2$$-#ia~W+n;6w>aG(4Bf(0W{{fw`M)kXCdZNg@)7i|Bz@j zX<}ow4G0$&vosQ>m?um9$iWS_@`RzL{9DEjyk)pt><#PdSYzkvyb}F)F7|e7N@XFP zJP;kdi*g~8eA;Tb>bruCpu<)$wz2ms#Xf;dfv(+XfDimY-%v;!K4mK*m|85V#!O@F z)$8s82=H6fp3y3np|D>BNvTsgRg8n-$Nl{KPzR|Aw>ih?@#^*cqlF6Sby@W$6wS-JsD{Wri+#+_b2x?cFR6ttjR<3{~aU zFge$)RWy7p9415e=;9Ln^&KRSN}z668`|13X<-za9Ro0~-$$++YyK^mOJBne1nlsr zO?I<;O|s=j5#lgo^*{YIH2G{`roNAnyz*`0`|+UM)E(AqDRme$YVi#LMcI3_W{unD zychNJ|6LbN{v1DRT_;c`3Nzgonbwa_h5RXGHZHy&Inr<`@6&K2|Hf-}$#y55LrqhC z4}8@APsTiKxiSA1Z;iDyJ%7>T7*R!sd+7g-lE+tsu&4x2JjA!K_wQ1((UeJpJ7fj1 zzClV@wuc7*?v{a#$vzxmd;sGTYRWo(mE@<tEfbXA!x z0bXP>yBC>y+|PSzukwB)JhS&hIB1I%e6SUCLrvoXmH5G6W9kBJ^+faW&wbt;eRbD{ zP32I4u6z61q^&ZFifCbdy8xtW1wX!u(JHYJPerg9Hx27-G)wRdGHw?XLBr9Xf=vWM zbto^pubwIJ-&gQ=dIVgjEnWGtSG!BaZ5 z7)3)QPl8&-OFxS&kSMw;oA@xI5jUSlZz5j)B`E~`#BOLP@|rd!2Qq7ZKSYH0_{FU_ z^Q%^=hpniFG=>8D{rAQ5p1;kTYtFt)V*9O2IIdF^kB)UNJOWoI>J0}64mo0DDtcq0 z8JKh5^9**Vq4i~a66<0>do?DcVOr1c>SD5dHsLPH@THE!|4(!5F(#Bcf(dqoJx<=huM7d2r$$nvdgxv_h(o8}qwAmiEOS691c z>6UcIGEG=j3Y}cB1Cg(KOdT9?yTTnlqIS3IEYsui ztrM$n0-0DVsH`D>x!okq=w(rCE(50sRX&QOV`0IwHcnQE zOPy9IWdgtAYht{L*RV^f>yeG|=bR3gR+;##czoZ z-4&~NPwzyot4yP}nzezKx#;j^E7<8(gwAwh@eN+_D_kapWH4eewFqr4(}61hnqa&6 zpjdqXocf7G9^9x3^qgN4P;leQzC2eJc$L4;7AW2%PzDO8Ivf{mtZw1%rfNypdFMA=do*BRK7)y)+Q12wq-jdMO$Lsno5 zM?1R^YfV^p$RGpS^=s(4hPNBolsqec`NDYoUhJ?T8%VwxUR@*b1q#C5oooJ1nc zsAtM~!Q4{Ua4At%K))Sk zgThR!KlLhxO$b1*uR=!ZH|p8MKei++H8=FFYBm67`L31}j>p6T`XXK*QulqN$53)B zQ%cAG5(llzw*O?jcKrGVWAbCr4hZ zBc_!1U;1vdw|MFqF3T8eP7R-KbniJTK?JJRGhOwW94%5Obl0s7sgry1u@&oFIzb|H5jqWx`H#RbE%>F35ys3fK7YH2vZ_ts zm$WPo%pkQezchVwX8J)!7O?H3A?|@An*s*^Y>>lH<`|Eiwz~vL1PLiA89;8r8uI~ER@!yW!<4qiFQtJ=z^FeVJ6}GET1@_>WOV8}z<|tsKNJ?b z9lss+XMk~)=*Kbfd8#;vL?Ud1Ee8HxZO6jdVhr!ju+RDioE;5eA`y12hr0S-DIehXvj%eG zri3nf8@hfH>Y?;OaQ5Eaw4UfgsTfOLzshzu-TT}BJ((~9w#VVJ<0?~K{2!+~hslV0 zJK0tE@IQab;L%IHmwS%$sUMGfBT$;j_kG=d3HvH>$)UgF@%|J%s))DAb76PGt~8xP zFtPq>hAB9dX(^x`uiPqKdsgVVYTNulKDU{nE)+6Bky`G;#WsINoot=7p3eFu3v{)e zuqehYyZzT(Tys;JiYgA-=7F7shnv&5pQ5ry*0mOC=mPJ)iCqz6hj)1nT7M#5^AXQ(<*Fn{p` zoE~XHbItvM<9@`)jF{H@u5!b0KliqTi&n$L=w(wm3}WJ+k~%)&P#@&H;2_uw;f?W)j&{xOf2%vRUfghZEkhQ_q`_(_a_YrP5rMHw;?E}6#o(qR8t z!e|{ae1!axwKt^c!>EUbBV+mF$32@$19GG62kvX-Grv7{Z!08j^*$od1sS9IT20U9 zhtk{ZP(o`}=2v|17gkwD(}!7j1hv47^^#Sf-y ztj<9TP|uD(flPhZ`zF=u4H}UsE(r$MN*nEP5(P zqs8xgl8yOtW=IR8$Iga^Oa)@c>8uUE_&{4x0=ubpen1W1_rKeSVcYGj^)gNU^WRhr zWzyr0+3|dzHG#iqkSw@G;Y~M=sSgA$g!f1M7_Db;FN-zlk2Q}-`DQwKE3^d z&AS@%D6_9SZAkeZQ`}*-DM?VHbojfZ#0nM)tiEqAH(cR=rn_SUaSzPR&D{Ynx;v6Y zp4=cTtm?QPJ!*c@1q|hlNekFjrIWb!kQT2?DCJ zUaQ$?C^kTEBW=MlYOO>|qy@7GHz0|8I@Zg@w7ht0(ep9Ljt7P%`YlGQ>%)zl~ z#^Duyb9vbWVE^e&>hkr0zlOie)6;wYiq8x~lS)^GA-M2vzzZ4ReyrZa8xKQ2ANJby zLL}AX?8NP17f4rKWY{S<$d;ja@4z z8nJG01nmpR?^P@NZ4`;IpsbekVN*2kcwwBpa0)d{z{J_K$Jgv zb>F9QUh`7|HK5cxVzZe`T)ld)VrQk8*L-W%fU%b%98DIwX;Wr$-il$E`fy2>y=6$j z-g1w;bi6s;m$2bt)UgA6%k8xJsw!duwN95!GHTkW=4A_49^M~N#Q;iu*}rUucN?9caVUPUJrqJ3IRGhDNcEg221ePtlyB^QeWNi%P{&FWL-Sw0;3W_!Wd z+q+Izjb+~MduUhv&azLSAZNCih%|Y#^(Mva(RQFv1wS?}@kBTB?GH{Bs;V@;SyKUh zsaI|5dcx*v+IMH3A`Wc{UseP-;6vS^T0iCbXauKP4fvIioPE` zY=yIBK;igOdX9db^M&sl?v~i!7lnzI@iMPjdN%5>xbqjOKs_p+uRdE5g*}?WHvHpb zgl=xA$M?(Tkt^g`;L*vAe2&gerOkn-#iC;knlO|&(flE4*RnC?gJdway#@;tHyeA1 z2V}n6@^6C!U4&Jw1-qn|-@KeF>-lfiQ}es8KTq2E509UH#|~5yH=Eyu(=)c&Qwh`@ zfY0m2cADg*cZ7%xcPWdmjSRryL4cjW+P~ntcq!NXImV{Hp+r+(;_m?0#GhOn>K#`OWvlpFp zB_9nv%q0Z4l$Zq61;F{^A|{-v2akLsYXhQPUW-0wvuSf;{fR(duyXu>V$n|^`G3gp zHqmT~`rybe`18uJrMZ}fJvPpMXw#VtPpI!|@;z~p6A?JzdcF`3E`1`;MsfDRyFOmz z)WOyZANuIH0z=75Vpf_|8Ig6>^CJbj|AIhpi-p74F%@ zfE-HAqfEfA@#JADL(t827Fq%X$Ai! zKjr(BKqY8a-eYMm(upP=D3=^M+?-_{30Hm5OZHU%=HoBIaoZrUG3D35f&GdwOA(Ck z40*+G_A=k>`Q6Al0}{aPGXQC_;nbE8cAhKHa=Y5Cf$%vHOHH4ikBg6+q8#LdUb1P8 zW9#&IgV$_&xyk%Q=HB2vGxa$9)hw8iTh>q*12+8$j?$s{)kt;UeH=O?W{d&roo93I z1z0z_f8W2A{K2yG{o<#4gC$q^*Ii3vMLBh}iagVlMouPz-slm$gGBp)xbK+ic8)IYq_kufi=m98yS{Qh4W^fsRY zlte9`ZeOufkje}Wcx^T6xaRNB0?;hd%im8-=;d}_oSnGUYH^6m*kM>CG+k%Nx~O+U zLiydsDOfphA{gH=91AjI4eR5tO`{jtsj6jL+Lh5$G z+aBYY!{(o6M-!}y*l|?!Y<$!|xj<7v$l^bxQEPvzg+6%Fg=hqKV%M;>J}=|ehPg$5 zPRfbh4oe{)i&y{{ z-|Se~ZdE+nRrK#<)a&Ve&Ht0E{TrkuMOQPK`jT^s-lOHC%s>8s!uZsCMkA{}|CdGM zN}k98yhva3>nRJ>dlEW0ExQ2K()U6|h5n42JU~1_#@+zC=$MZ{Sncga3VDa_DVXer zm-(IJRLPb2vb?+n94pldQAnOUSE;LK4Pfk5coXWGWx1LHf;*Ye?hBDR|TN5_97 zxNC8c^_Lw_idD7#>x9DU8q+Ychnky*?Db(p$Q1)iife1-CmR!Lz{7jPMnbk*fa}e4 zbu0JQ&hFlwC1~EGK}qCbNhG*7b!TIU^=Va%e9rWu!Vka1{5Jw!Ze@mY z?qFB5{Q%A$E)KLWdX?omr^qU?12|G?AgZQeL;AkgP2ExV-0XSHE$wes?$4;0XeTVc zj|ORD(tLVFuWG3Y4ay1=b@wx)S1Le7vs5Q{Eel&oZ<}1=aw_mbblgYaxrvBIATr~< zXblYmOH7WP~(8o=*PG%x}cSU%z?x z?*Bc9e`|;?X#uswpEq-MCg!hK-5idk^cNSUQ{6nIQ}bb?i;al#ISK~}{u?ybV)Sa5 zW%?k|_g$5V)D#pta!N%TcrS&G9vNqfS^OFmgc_0jMl95mIq7T|TwKM0;iq8}z1WE~ z)fShv#XU&I%Szp+<|nS1t|1^a50lkKv8jx75}YQHjGDhDX!?FW;87-tF6!5509uS= z0!kJ$0Nl{SpIje8t|JZ-b;t%#0&QPb>q-rQCw$0N8CmtS3dR0D+6!r`QY!1D%@91) z3R`Soz3(%-pZg+3q}+g2k11e%;jBk;tAhsfulpbLB@lNl&kuGhzxRJve*TP#%TS9} zkA)hKIADt|U67z(vvEkuI?IuvrB*5o*P!DJH!-uq*aT9(dZ&U6B z=6Ch8n!WQZbcz@GKl;5t2|!H9!4`_&98T(4PcjASs<9eqCLO#P#iN95b4p$omNGzE zXh*DPVN0(L{ zlN7{V6r_J4MYqF~xLt5F*nb4RLvnJ!Q$)Jgyi4jZR)^==;cm)NQ~6tV>S)|2ng&iGXFOaL0{{lTWp7chdMQ1eHVXMg&M9t& z2OjJY#BJuj8?-V;b)UoHsie)fM7TomyE~t2-n$T;kHmN zG@1H?WW?9&w%B(Vn@rU}8PIvw;>C2azD zF2vG`%C_cyix1PS=w=9tvl&h-Su>UcX3XqF6XGXjP-P&>2DUryF885ptD2tWan_vy ze>5p>?x@&V*>dF!(SCThd%GhZa)8iA1C|goo%|Fl?EzuJ78Sv}k|Ht@J7)uKeZqam z*0na^c{^o?z!HvPRNPO(imf+aYAoNqJwRNE9;hTY=1aY(_rARd1z)<)pWu7ydW=9V zCy}?srqR|TL!aw6b>g;EBN#rZ5VG27_$ODIR4Vf2J~~a#2(&n7s)-WX=}$mW8%6`J zh543q0wsTbT{Od!1pDLhiCoXiSKwJFs|ygi?yDBrP0{tk%` zPL}U$`?TnwNehais(OMIf80x;CCpaD(O4|XnM_2UMrbmu98(6^^D|Rt;N@mX{)BDt z%}S_(BA(PZ2?6J@Da}36E3=`Fgmp-j2iHNI70!UVh|%Uxm#Nn2c~38NU|`+Tn4hN& zsCTu=tE>6-rze)8S!;Cwf3tyEP}uUo>_51MRNALp5hYG)d)*?{cb$od!`awBm;HS` z%fAAD*P!^A|Dn}K$V7}fQ{^RZn!a8tsFOb^_X?{eI%Ryb%k6haZng5eSHL{7>;69g zZ$Oa0Gkb%jM5XI9N!BFz1B?j~G%PkwU@)rCNw4QJ49RB`-S$l~CAX~_b_w+}U?~*O z4%>0iJnyesBKkuyY>!{c$P>dtwU|gT+=k_~s8vTS>Y`;*ffAi!RRp6iJx2L+8I_2J zi7SSPi%(Hj9m9k?C%g{Bg=*RH>yA(Fs+*yTXm>e%@>7K6?+zy|A0sZ9kVnP@qG6F% z_l%d~3a>$~`bkNYi=Oax%#Ka2ijv*E98Gci(&-W2E~)7X(x(KkeKEAXtslcX6n*nt zkvhq&QZbwE0c*uTnMi7?f1bQ$vDT@(ZltCyrIF6IGWf-Gy=4@VL5*s>POaI+NAT@3 z*G~5kBgTbEEYz+l*@dAB-C&7ce0wFkwFtf)S87)o)Mz)$-Xux%xBE^94 z6YQppLMm1%RQ#r1cE%L?K}Cy>6q8l`qI~p`J{RG08?hG5o^?~y$uE?av7CP0GRp7o zcyVDljfAiP1Bn|kUPvQYJ)7Ls^s1ybJ;iNG$WIA*deoc|a#Dbf86Q+)D>%$@zbZJ~ zm*5H*YXu&_fDkus!0b5*8WRfmFe3>TD>R}$CcB}O{LN4U3OK+ABv64BF_D##$YtbF zVft&tOfXiWldGcHMg>fzM2{RMA(AbAF1nooWb!-|+5DpaiQ zJH*dbv`#8cpqZ2B2_G>U5X25EJ>S*y#PoqNg=k736(o96j($hV> zh!8-A3MORC1VOVxL<<%jD%XpP$gq&=Ml$xN?!hjxR_;@k#)6;d^cDMcHcap~}AAV&7auHL>AZf91+a}8u zm8yv!Jw$N&gr86PnI`okAtUAojLOKK@8viIj1~jnfkVcnS`mFr{JR9StC&PQu#n+l z2Bsv#I$EB9d>WMK28nCMill;D5L&)+dH_FgJRw96t9n-P=sHAHMYN3c7)j|6Nx5i^ zTDbhDC5=i119mF4>1jP_P@ozlt(n#6MF{F8Mf$v~DQ<(HSuy$Sq4or&qlrF~;Bstk zd#GUf5#z-S5!efsDkZ-$JciM&OJ+wb>On^yVpbSnL=dOj9?|I^CodZ;5{-yQ$zc^B zoJRF&>G2ONSenRD<0S+_0!EAjez@Ty#nr;(%ZPXusuGArRZgG>ED=PD$>fq<8IV4M zMS{^XmGrmEemyAZSYS8&?sOB98dJXBSv*n*>jE;6&)@x zEgWAV{X@WrVd96594;v=Sf?8$uaBFqlzb&zyu4VYTJ@XqxnaCSGhQVX5I^GUGp!UX zzh_jU8L$%$kyH>WBQ#v75fAQZ(OLw3xRA_HIZ5F)%E-@w5@Vu9izH&Kh|yBP^t@lw z71pVSiwe^`vylE5FBHtkEy0@#S*AxC}$S#Yaz)tBtP zYT0v^;s&G+!xDWT!R-(lCZVURbyiM8x6CEKGba(~G~=u@Lq&SQBDIKokzIZn@iHZk z%gEE8Wh#E_ZX>bdBw|c_NQo7pLM4e7Ej(6WBiQw%DUX<#1PBqtNIieB#CWiT?9ei@ zLkkJZ=o4bmz6?3wL=r{ZxG{=jluysY#5F{Vl_z+Zae)B{!NZCe6YQqw7>OG(UPz*q z?2hzzOs82uJ0_a#VM2wggDo_ik7qMR^V!-&& zGJ?X-E4~dA;#ofYM=fD|jROY7wdb*0mI?JCG@P1W(W|Oxwne`ypFIef7Z@faDlAd~ zcBnB#3mF+9EE%nm4;GOXtI|lX*GMUufpU@(`s@IM5& zq(V#7cv13$T)DghMI}Vch!82S9IlfHK9k-RHM=unDVGpmqR%2W+=^G&KDTn&^sY8a zS~ISd>ZWO2BONOuH&8-gjJQ}te@L&ZaQX$x2oN)Fymq|+I9g2Lhm9akVk}0U)VqdI z6O@`Jw%eQHUWzH9{{ch*frp@s*vbJt*bu^ngeK&VT2Pu!-{2PU@S%CJ~?6z8G{=6SADJ`Uu%zgIf)gWQHXq944pOnwOhoG!=RFFP9PGB%P zCavfSZe#VU0@`6lzl`W7u_^18BfvxuLdJxG&qL|SL(IyJ zmr7)IPxP7P$4hp*FGt@TU${`IcMZww9bQs+a4{*six?Xz5Q+Wz==g%%%L-+K1*H_f zJ4jpysL_Imml7SWQj8}rrRLmeC!gK~5{SUau8UNY<%2hYW99=5XrcoOXkrK!FE2Xo z%aMg^=5I2$Yi8EZ5=Zav2ggVi-Z=#SChsvg58-Ev=;qh(}3@ zNJ^i!3{Ng&A^kI@56W)Olsr64S}VP6dQ;dP^EipYZhAzYbC9&0h@nD=7!(nG{;cDP zW~4C!XNjys*4a+5HTn}tcc)l1ZupzkbpcgBtD53DmzkQ zCcbWx+mM@}2HltxO3j};OYj~*hoEjw+Z z&#c)s$?VCmgIp9Zzg5h>fO;MyD;^;$nUMdo;TJx$jD8#_uh(9?c00t+VN#{JRTQ zNeC4wKT=>Vo_j{rvp|7dyREY*i&cq5=_B*+FMGanTO0ght`p;Fm2Q97w6v--Rv{u( zU`wcAL4wAm^sfDSo@m&0&n4I;xoQhYcLIkC9$HFzP_a@3j2W0wXcxm5uT&8&U|2>! z$~{v&Hja{&4=o`-NLV#usuoViU`ND^6)r+VRC1hp*OyQJqD8Wy0z*Q_iUaIGqa@Uu zXt$;GnL&j}_!@@KFMJN+?bZ#qoIS`}1^p7Q(E@yE;z3h3lP z(GhD30aNk>jhP)#U@sy5q_;t;$(!Oz$m6bhb>b7~3oF;E|Kog-R*Y~RL=QeU;WO?tzeJhzLy0A~q*NT&Vs`UwIK5*iTZB29~peA?e-J}_+*92WJ zpBT;BCdw7clmB&fQkoiYf}3woyt0rJb&Jj9+1fv8UzJXP(%UEIS;dKdL~U}K4x03) zwkBA3NE18lexg~zH+fgfCq-AS6Y#vkiGQ{}QJM&x{H`05u2tv>+<6 z(Y8r>s?r2MUz?a>15NZQ+LNy|)TB;zKS8$lPTaGS6GapD$$46F(!W}nfbN4QzT4(R z7X|d>F1?*JL-kG2^RkK2tZkwkp=k22u1`u+gC@B8_QY!oIZ>C`oIFeWC+(@y3DCV| zV!ll3Amz{zjAanh9v zJ%P(_C(gE>iS~tja&&E-lv7on;ODCoQ*6*gZ=yB%N<&TRP`4(?^!|x^RyI*oVV|6@ z6({|vl@ri>@WeMuvxBRj_>23+sdq4;O)RJB>U_z{QfDJ`S*9erm`yVTI_}c6b9f4D zpbId-nY#GZNeh8UTmdJgAne02V6aNtn%<@~j-73r4unR>0$53Yy}-)r!v1+KC_e?g zKcZ$eaePNl@S9zTgFW#)Re<1n5fCFJ}xu}3qAz4F)A>ZMJ+gRKr zT7HfPm<`62nvAu|PGf6;T3k1h3g*)44{s32q<%_MpHNG`o}j>6b1|3eY8-vdo~lJt z6^yW_uZ?zZ9k6T>$VP%+m(DSItedcR@5M#lsm4L;D>@+VjuTr3*1kkaCSPmkRR+3+ zXIN#ks8K!Y0f?;Gl$cF*{T=~WgA5}}4d@6Qtb)pA=O>kbNz`JQP56Gq z?^)g@`H*Fwrv9QWIw)Y|CjC0IO$OH*nW4$4dhqy>Nr*WL7YYvZK|tLfP$KgatAO_3 zLd)mO1L46Dq^)|FH{p~B5QD)$4cw9|EYy3Zg-eRtGFzo|MTU5hl3b*rmVGuGKGe3+ zIWa7+&sL~qUr38xoPht=X4zDqs4$MYcTl}Eok|J1Ec5#uOjbrxh75q`nH$kVItHk< z3^<6#(g0N`O+yA8^$}tLDuw#VsRP2f5SxEC^G$dp#%Tn0aJ%bFas{aG3*=@9Oa@LP zU8fOMP7l!6J5n>|LJK&;+SY0E$hXLPhpGPV^C(Kkq?k@1{s(H*pxls`gxsK^2~7sB zAV-Rs5afSQ*=9OOEmP#%%mhl!!sj9;u=pVcx_OZI8AJ=~5s&vp2NPI_1X#>*G zH^<5u?0OArS`Hv!;nQ8bA18Q{HWVy-0#;<))pZiz3!(V~yI)nrybyJaExJ!%ynzA& zEiwcO7z*>`upKwu26lawdt|l~*h>c-CGoH=vf!yZu^_w%rWIPCXokP$2-PVx_50D& zKZJ(ZLDF1G<24AxqCq-_)Hx@>myifimliQJ`dj^a5xTvNvZXA+@RhngswzdqBiBFG*p?u^&2~w@_CD5 z(}=8oE|RH)v8njf#ME?AA3Q0vYdI0X7tPGfK#va=Ao6Hf{UKeBMi(qU0H)j52!fSD ze@$;#8X&u0xq=|asEm>os7v_;8>`C}YDLtDsXGkNjtE%Ih%KCXYP0k4gUErn*ls3b zIH14hiO}1a_M*pI;tnk&r2tB9b?Imc)<5Bp zsn}s7d-{kF3kupEFZ1_X>0&%zxFotpe1zjhQr~N}%%8=O?dD>;kD^&>xu(hFk;LJ= zfTS>sYTb23W|;&^lL+hxVj~Z1L>DFTqfwM_e-#nwuUDG5=Ktl& zo<`(Bz;D&#N`f>PgBEhGXu}}M*%^{h2Fxi=0sF-06^8*^TF$2|6#vQx@*pi^NhIYu zZf;Ktfsp@_ceFrL!N562v=N(@{7|h=h?P1a*%pUx0e6MQ@gt>^{i4?!RZygG_<4+9 zPI5*TsE8Ifz93Q83GASr(C<{~cTkoM$cz#;E;)(U>d70R*6&*!@tV=gBlS)f9s#r? zt9p9BICA1!U7q_bgZ-ULY*#2nDg#*lBnd?}?4EihkqIivf8Z%DJunNwrSzkSob)6y ze9$D%11?5kc@s2sD*EOu(4h>C0pPm)rL{TmGx6yb2=8u2H?@ipGQIXopKE;CDvq2G zp#86nWl`B&?kED>^ykXYt4ZUaoH<-M&<+-w(ZATZEDB^#sR5&g4S4;dhpLSu?m8^*8kd9 z*rA|W;3u<%%&Ks3hNHqDlrLi^-rrwtfJdm&XfNIoHM+b2y!l#}ETIct5W4f+cwX#-&P{QY( zpWR8f=Vh>Z7azBO45vWYooV_t3tFPIeF}twj&s(_#dukA!5bsZoE>!^Ij&-ZBf#zq ztK%^~EbyF!cnVNn+Rz|{FI{d+HyWUwv; zsDC+>Vt)Fr=l&Al4pf6j9ReH-2r{ZbdPBx*d1Jbfn$iCzFxRynd}LKw&J!d=xI~5) z0v&!^;di1!Y_O8D(%-*7NH906o{fO-QQm+}yIOFYunh1xUIR-O1ip&gCt~Yl{BhUvWg%N zyWfJYFu54EvvpsCIYK4yO8TETuO6G%%a|n$4RisOyAMIUD>075bg4E;N)c#0zT>>d zA<@|ah+qU^B3y&$?Zr(zz$FM^Oe-cIjK9@)lu`Y>%P(j`GVIT49UjcB&zl5oIc@*E zty?j+^~c-TSh-(N7-Xk3uBez6lD(_nEU%lF1r|052Q^|Nl_YvAFDhD5^`IZ~)~Nvsr^ zx;IRp)0ThRry*zPuLvkYu3rOEoel|?ocU}B?qsif7ZTjT?@`4x#;jY|tV>u$V136O z<2fpalGfgFbTrfy$)osPbP&%?l+>k~eg$~5Df#1McPrOqkVrbf^?O|A#GTY}oEEvX z&?Lc=8x{NBnFL9AHtNH@nJ{*M)AD@TT5|rK3^1+(k^35mqr$4gie#Mtt3Xu0_c5)+ zsQnF^w5wQ;ZyS9=scqClJN*qUsUkd8Ks4!Mg})TxVR0k|aq9Ydh@5ZmU?^R8kVFj- zCA(6ff@FvXtd37y2VyiS^66q$=FSkf`@faKvUV3L%)6{@ugp6{K`6;sZ=)+bFK(?d z`4;6MT~HjQ{|`Y&2-QKs@-Y{)Qrg)Gh{zz1Ybf_JF}?v&m*Fdn2cE{eUi#X=)jBnm zLSi#f7Uyn{!}=LB?Su^oB1j96hKYQr>783wKN-qbFH9in)P>%N7)RYutQVG83$ug} zlw&av@#Qy1VPijp;(q(ItwBr9n>1ME7F1gei#6){r9o3?gsEpGto6rz}sb#NB7k9B`ZZ*1bqB`MQQ}xeZ0uZ zc0g9?VG-WfLcwHg+DxR%O-JaSoJY4}Jy)i?&cz+L15W+qVGH~*S2-5<_(vJd%)oHV zgV{w9ar?Zho^s#{w*L^+kb_lc`3OBP=EG|o3+@}3XkPbWFrnDT>?0Eb;}t2;R*FP> z8AzJlL_N+h#y?IMnVac|1xWqUFM1;qX>i$Cb5W0l9nqRrJ00(54968u2}3GP%`rsd%dUZ9v?-hJ zjUzJp&vcB&8c|v*K!hR-X)2ugm_M_S|IRF&hLK4FF@%hVGuepQ-(bFaGuwLFFdcquN?hRy zN9%17L5{Wvy$!!ibvR)TL)5(sHI<$iQ{@)tnlR%fDQi53x+ceEj+d}ZPD)UNZBQo4 zxrQUk)VC>Bfxs{63lrRt#(9vsWe`Y+ZN^LG-4!tE;gQFHmC>`$gl;@S(2Wt=u& zexY==T^O`(GWQiIO#$?@c}-40AyFh;l-t>~gdmbQ@wylG=T29Q=y5#6h%>PMM}jDW z-sObLnEBM^;h#EF*v2PnfV$9KVwp@~%5ZEsk%83H%38|psu4ub!A(FmW&$A|+Br@o z0#&>M5JqPri@PkgQWgRz=W!QNzEYAaFdq?4t85|?U#LjO)GNsUZVyYNlprlz z!zEwUJsD0+##t4HLY6(uQBY3gqhnsMmyGho= zWR)SxGHinCX50;0xZDXM-Kww=;$?q$a1jSYYQ{eWwCi@y@q4xf`b^Q5tAh({v?#>{ z$q54n;-V%=HB{GO`j|t?-iHoEUvTN}zn7eP9loWDq-zsv%yWY9MiE`tXGK;!h6bZ; zM$9fZdFfc$dCt_hDarbuQ2b%!yWV79sp^9`9*(^f{C47b+vYC4MW9wOEiI50uDAnFJC4ymVBKOAN{)JqSJ~ zi0#w|!3+$P32Q@o$>pZn^FU|pidj#5uu3&R-c$3+0KSX01!RD2MIyOO-30GL* zwOfVpVkpxxn=@QK!INYn{*qTIQ?C|kMjVju`FRN>RCS<$ZnjPtBZpI0PGD$YZS@a& zOUu?IbWONZvgfY%)gz80cEvHeN!2g~Sg;a=QnM^3PLmoA$9v$tA-zKk07^_Bip`a2 zIr&w@$h({6sWdVDP})GLZ|a zX8W%G#OL*oP*jcSW~x8{mMU*#8xj|5vx$~F1?Z9WWt2QCmHnBn`)h|qC=i+uVaSrU8>vB;<6BZ=+b}7;3Oh( zQ^Gtr5Ni`*J^qwU8%y9|aMCM3?>6KPK|Cn%vMO+k+)yhj!+3-JW6idzWc~F{pm{yb z;)Xz8=^$CB;pqarqK(!Noy>}Ii%Fa|fSg<`zDyiII4ku zyyQp$%w4y*fnW&%Y}Z*8s}4Brd9Sl!%Rd=0sU9+;3ZS>qBxTc@NUJqP?X-Jr3w*>vAJWxh`rkQ^Zjf_VGrc$aV)A;Xd0-)ku@B*x2ru#_ceh-iqtx@ z?3W*!YGTGmZo5vMcseoab5tgT$mnRxJjq=x48vRX#KKxGe(_N^=7_%z3$A8U^)QCRv!hI z$w0(_At<3RD$*?u-_IE^Owb;W`Z^UxN3(!HAC?gF<0MQqbZvR0VA*Cb2>47yL%<#h zu*Uf0p^FZ#vYYLM&^ZDbZl9l0%{-U{2{c`jz_C#jUoe{C(S7fm6Xnlx9ll`D#&*fE zt{xy5{2=-1z@AysgIe(p<(KP__6s4(BXT$#rqm9SNh$!plN8_UFrCkX{ecqrh>NPDPnmo(XOe!oLEs zRuRkW0}z$Gkpw7QoTPH;f@{?vToR@fxBqrm#AXLU_??K{r<||J)P%pM_Qet0OQH%$ zTnK9`EWy(!a>*2fS{GC?AZGyS)jD;^lVZ)pZ&I=gg;$Mzmhp0PHG!Nuni3bCdSco( zkyOrOYZ52!TMaQlp>Qj$Ky))HawmQ${d2;7K-8;?Vi z8JliRLeqTWWCzTs=Pt(J(lG#Us~XD6@hURSXSDs*3pZhnRwz!OL~+>F@hQC_yc60R z=yE$!TDN8ng3VB{q!7U^01!YZ)@5imy(`Go{zBIaS7l!aVi&*6@QMi#zaGj%#dG1E za4dQI8%=F1yezIk)|25$J^7xFSmHnPz7BD*E-4@^)1En>G0|i1j)Xfm8zd7g-?^r(Fp4z5UsvpTQQUggG-kmVQ z8&28;!-JgN`uAOiOM7I%CJxb2hWOp#%+7yu6_-u#2T@jF)cd0l#6o)YoyONFEt{+v z6^fWnu?KlNm@WLGR*(eEWg{?HoJs!$-Mj&rnaKpG?h)57nD$@3~Rs_ z0fCK$5=DjMxbQU0%vefjn4E~GIfGORs5Y_^hBwFkt z_c#TkqB3cc5TJn`6}YxwzkP6UQ;$$J{OOyPRf(K6#M+MbP7R9Sv7AwAIC074{+Ew9 z%#*6HjuXr=N&AGJG-vynX=PeGK$njq&v`d5?-T^wC$pXigWIb!CQ3xBG&jvkV1FT6 z9_+=Ol5wSO+vf(7T>YF>Ae$6AKScwx!4MVEd>YK^8oz}g zeO5_<+3HurLRh)XLvAArjAh-tc+2RFjgnE#wluE358#iYV-v1SED}252wQ;!q)Ix7 zNe*z358aYG{s4Cn0O<@?#;HzV0@CG{f^h{6_lnseUn5zy*VL99mbSKml`Zk&uWR_L zWKRv8tIYg9V{NI6hrGXW39FRXoqy!bTQktE$R)ufS3Zw50TI4dqV1T8azBl4h5ceB zak52BqduD>w=| zjzd=CO8ZTVt%n^@M%Zv5*W35x066nJ*eT|1#I(hhq-JIipF<#}jDlmHGl`-}dyk?0 zq^OQ-HB=~)$7-?E4P7AV297ki$A#$9XY{2W@~I*0`LE0G7gBbIp4*^@@E6rcR;MCu z^nNhNN;86+%rBPYvVfKH?>;$c@*;>_Lh_Fd+N#XiJ1|K9HkkJY!FNM9$Z?;pB*bCn z_5w-S!y4OFb418EJP~W9Goy6lVCX!;56VDj=>q}3levUj4TA$@kaxa9$8OOpX~RVL zdcMlG7-FbsJTc#fWPw&x^FZjrV=9am9YdD0lorG9cZu*fMZ`zRBn%v+_6czuyhiN9FnSu<12o4z-Iw@XiY-~=BgWKkvX~SS-RZo+VDyAAo2riE#Le^St zG4Mn4&XF{!>DuNPf@$z*KFcY++V}Qjp5TpCr=onk>C2pZOU#H?gSD{!%yyOdRA7_y z*$Tp|p4&p2Ao+!%|=&YV2mz98d%46>i9a`aO2alUes10p>xRdW^4ngN%Fn z{t)5AN%DyB`qGpD0V0+kg5&(1Xr!TjfdmYh*LUlE*YCsaA@b-aF9$&zdxX|fHIkWO zQ#nOkuwf03oY-y5rJh3K^urNr*+V!G`vp^AFvTWtQ?UUeTCwG6a2>{f_Mx85GenDO z>Jp`S`6ROR3q(Hc59loIEKc4K^ngH+$Sjk#53K@^;Ry2;?3@U~Y^HoXeNJqy>pFSL zw}%t;iHXA!ZD!*mP49hs7A@!O;G`y9;2>XHgIYY&&)+UXXV(fd=*? zX=IlSY@`z0@)o%lRvTnID?pExTj~&I?%5yH7M*0j8^J<6&XY+I5b2o$zgU>kTjc@; zUOnbT+)-i$0456{hpPDkPNLA=XEk=g4pPk&8TbN}lmdIbVn9x#y%9h8pf%ywBhzuM zYa8&v=!1fg0t^M{roS)?u3`9`?Rv_hR50=}3y0qo@ADr*gpw#L#-p5%8jIx<*MeLJt=(7I#~&MN4GxnUzzCN1o#vyjkaN09CuByTMc(bjVbNGu@R(UI?B!k3&k-F zoD|9kAaWf?g!pR^00Nd6+Ltft!;-w6Yax5FYIh_MdO?2gRNtfJWGc1L>oh3jlSggDu`*` z4oYV2(+}-cDO3}t%b636F+}Ka9x?&u1k#0=9(FeHXtRG{bT}%#Q#@E$EcbUs^cLpAed!dDaTAn|Ljl@oIPBa)Q5-l$%vu2Itubs3 zj;aezh-~R8+Abjji%v(`d~$3peA*r(-vbJeCx8Z%qsEa$Y$Pm^jl$j%aijZ8;`|Gn zB-ZXpI+z?p2ZrIa1deS62>u#6IOrmjVX+x zY#{z1gd>`!`@JVCZA;pd(nB>(6DdM4^C3nE+U11xX+e_E2S;QCwj{^YJKA7hCdmSV zwPjty6*KuNQ^Y#WhBTR}s-WwBN9?3ylc#a%Jy<>B*q10@DjH61q|jBzFICMqWz>;- zO>@cCrA(vVB0aKCs~{jUcjaakD3jt5MN$*p&@Am2-&|Mn;wh>`G$iggGaitF7RN<4 zV<6nVl`3HD6`)zvB)wv$(}Xx2P9P&VPq`fe0Yby;cQB=H?X^P%7J@v8OWBIfS=}9 zfzr$$ZZzzUIrd|_9#l&uEeT4Ot+{-M0w0Z)pNB29A!XK~M0cSQrR{WX;ZhUKvZ`|)leGOK; z#hrs$k47Q6_<$%SzHl;8+O$V_u9dL2f<77$&QHQek6U=b=FfLF(ko%T%Tw!4* zGH-I$hW5M*aK@(Hzi#HRWjh`IQ=DGj+|7z^p8qUM-g_(Q!29aM1$fosNMM{2bFc&r zcOA7$Z8)G=Q2_cw3BXOT8<5vthgfnjGCnO)2%TB5u(Ck}J^pj!=Sh~RpaEP40JBCH zJT8(0jT}&NaIxPut@pGo>$wab&v|{{d%ouPc!j+}hOcFEn!j1ZHVeIvXH?jDoU2el z6XP=bt?#r9jc)HVI=-Us`#hGRbrmrUe&g{jGqWP@RqXc)7ApE40UiKUY1b#MgQ`e? zebN(Vpj03Bm1y}C>Do9!SCs6NMnDWy)C|l39+1NXqy!LSfgQNqN$*%91$BY-BIPHx zNp|2ndvtL1q#HO79*Oc!j2BU$Vmq%_SYbN5q06_Pv}dVcdIUJXiXsPBj0yn5izhfA z?|X0SJ)Yk-ozr)I(|IoQ`Mvl1PU<{u_jxU|VwYJ_)5xrdXLMR7=4DpkF^<=Kydqz* z^EwM$#fm(?Z(OHU%-FGv3@;PwG&&y7@OB^9DsmZ_n$~SzzxO@Y>zrn1A=9&<+37sy zZ5lq7p~>;MXHm<<_zHby1z)R}SuvB(uwY@+cdp0!3SK6rZ5ceSX;k3xzSGdudM>jg zGawO#IYfkywLKmQ>r-~1EHHns0-V2xJT^CR2LB7{?@O-seMHy}sGeH!(0RG+|+3V=^~lF*ji~Gcq(WI5=%FFjH1XMrmwx zWpWKKAUX{%SWQe$Z)9a4It?ghcx`NMZ)9aHZf|5|ZeeY9VQh6VATLR7baXF4a&lpL zWmI)?Vs&g~Zeu%RXlZO@a%FBPbTVOdbaH88b#!GrASiQmX>?;~RB3Ewb8c@_Zgp)> zV{~D5GGbwKWkzykadl;GV|gerE--Rsb9HQVbairKEM{dxZ*6dIb7^#GZYWc4b#h~6 zM{;3sXlZF~X>MiccxW*&cWGpFXm4U_Wn*+NL}g|mJ7#iWV{~C` zPH$;*G&DzHb#rrRVQxZfb#gH>b97`xWp-&|W@S%iW^-j^cw}U6Q*dQtb!=gBOlfCm zbWm?;Zgfm7F)%PNFfBEBdNO)*LvL<#bYX6EC`EX1Z*FBVb#i85V`X!6d2DPgV{dG4 zayoZtb8uy2PjzcEYcp$WG%_(VYcXMRX>@39Wpr$5bWLS)XHIWqLS=SkY*T1qWN&vZ zGI%I4G&D_ba&TyGY;R|IX<=k(Y++$!X?1fkE@EP0Eo3z^Vnk_kaBN{?Wo>0{bWLG! zctdDmZf<34Q)O&rV^Vo2L3uNCGh#z;Y;ST+VRUk7Fd#4>F*Gx6G+}OOZDC|&X>@6J zC~{>^V`Ft~b#8BNVr6GAV_|G#O(<+>Ze?L)HD+mSY-Vz0WqNdPbZ=&IZ*4JhWpi|4 za$#(DVRn}DV`F1DV`DL6V`F1uV?%FmY(gk4HFz;@L|<+;Hf3@}a&KfdHZ)%- zH#br-ATc{KFd#8CJ2EgZATls8J0LMNATlsJF(5G@b8u{FF>+;XZ+3EJaAje1L?~%) zWMyV)Zevhscx7x*Y+-pdFd#KMGB6-AFgrwPW@dGBWqD<6Y;SivXL4m_ZaZRZb!9tg zZe(d^Z##BrZ)|0BJ91@YJ8yDfZZ$+{VR~t8bvR{gWp*}XF>He!sIrYTBO{U|1t~QK z(g+fSW5^&5^RSd9%>fcXP#_G5V<-wD5eR}1gaAPh0tA5&3PK1WOesSMF$B7%-B>^6 zKD-w~3%^}MM2jF=_~uh8grA%p4s&HqJ>sW0o{)0wQs%=(g?#+vF>fIyT!H#n#K2n8 zNP1qa8)BBxm=7$?U_$O56g{K*YfkKFpvw?e1yS_294b)EtGS=0q3JA*=Ss)m- z8F2&YaS(*XS)LJCc-`-q`u0krb~Ev49(sQtviob20p3Z1HOLs!YX}wZU^)X#-}Sp< z|NE$h<*!ktOzW=1oe#wiX(Sp`X0?NE&!kQe+Pe2TD^keC8U;dPVPM*6_hz}Sm(1#c zVblU12Zz<27cYQWZW>=MvH^)Q{0%Xi8*<#k!a*PseJ72~W@0Sxxp>Rf)}nhG81lIw zvQ^s3{p?%vhfyHi#y)1wkp(tw1t$0uJY-Y^J4b>26v?&?5fA}0R^#gX@R6C--eH+U zY1^o32Jpdq#~h}J7TZ|>fYL>z78D&w38c6-pBU>=&?bE`lYE1UQp!_iH%*ck05*7C zR*Fp;bBgiz$gL%TdNZ_WCGy0+HbG@Fe`d67<{w6&VX$F=|1bW*Gx zH*8xwChpYwvO~>C*{n`k)UiN4F4KhqGOUD>Q3I3hpj&%cd?ak33*lg!JOh20w5cKn5Dx2_Q*yq@XPWseRg|1(;%@7fK~9 zY6FHE&T&n>;M@U)^9_h0Ee1Z<0v5hBWqOdEYh^(wtjz6_1nkLNQJyaj6JW>Tj^TnV zu6GxrqiY{zi$#TsOHDRO$caGFSqcP`{Du=^FQD#L@`Tu_w`dB9*R?_bsqpVp;6_-@ z5XWW-OS$rXe4tsiTrs>$ksMd^V7-9{X;kY-H$sD+ngx?yQghS4fRQo#OzjsaQsw2H z2c%i$DPlhuXt3ZkQg9U=0@z8P#}T%OKQXk2Y%+p7Seg8gVVFzUI2Mcu3Xh_nQNW2f zjbW?>n`oM^ai9$-IN2~_2zx;~!7@g&jwAr1L22R{I!IC`Mnn!x@`e$UC zBeJCZAcskv@hGRoe%&%KinX1*3o`JacMMf^>>-}S!ti=q7eX>;2cyyJYZ)9$4}-dt zejzHB#n0>1tW>H~pnG0)iUp^}Y=S{d?82wQ({W?Us=)>Avr_l~X+N|hJ;|T(d1owE zJ%Y*_oZ+ZzTvWxhl!oVBCYdsSO0Q33*!=}TKMN15->qV?iG$TDR_aa3mB9YC6bfnR znp@NO5RV$x)l}nEOsgl*vMO#|W$&sS$7FD7R7}VcFD~z(@W7iE?xNF(VE1FMKCC4| z``|F{rwd!7xphSZjAh~AH8Ny4*1$r}*Q~j9qTU?9OwNd;HO*f7LtZRaY2~D41UxJU zYwG?XzW^QIz{c`^+i`bMp%};|@plC+tvbJEj22Rb?pH2maN$ri35J$(mzhZ^KtDPF z>Y)NjW)s=8)r`J~Lyd=ZJWMPuN8e+C&v;MDGhV4>hnjuS(kj{H*Eu+r*fe;^)i#nI zEUxJ+Uyk<~0)9gWoAPbe$=Pvr>>NVN!J2pIo4OJCp)dtH%!WvPDStwhF=^xOZPjNKm zpe6V?0);_`AOa*nV|8d^eW;UC_ukVL(wY-#WfN;mWcqp&I+%f%WR=SRg0iKF3U|9Y z`O3~$DsdT|l!!9HsdGC?H-Pqj!5H9x$ysn`eAXP|fy$ESYLTD6&ck^@k2r}0s>LZG zt5+kbuwbWlfr(pZ9U&|FMKW8=uaj~QEthbs%7_P+jc;StSCZ7mG6wx(E~4b=TW(d` z#E0%da5t4)NCd7YN*AxiL7C_CRq*vR7>JMnG-f>62ew-z+$eR$$OMRh6F(S*OTljePq(A<548h+R zZ07mHqP@152m9D2N(+w-fgi5r(S{hft^p2$3^259O_O5Xj3P4&TnJhimpmoWCtHn3;)B++wu!+%l$#c#MEiG!%v=LYn8_dQH_PAJ^?{xJy*VL{e;weThhOZf2oM zsyMq~Rfu3B1ptA@a*a^R^2c;9HPU-k*~S1L0|88A#b*^ z9!;6QiYnrQhFGSd8~uMVuY-}6&| z2AAQLP38?nj-hY)3j8Fyu1vHEm5*CBgAQsW^@?vA$W$#!7&-o{kn zeR3}OSu_}nesU`L31QYJ2i5ar2z|ieljAkw@z*kwzYm>{Rq`hqz+OXTX75($W9KKD zVnfi98w1q%0t#i#F)PrHNRm8q>J!Wcx?d@cvo=#wJVwPmI79P83P6gGQu4&h>L5xz zj0Ilc89oCL10VzAK!+nCic5$%5J;neC_kzAm<>NJAQ07r2WcEJtMg5GXIwxWM0H4? zcnDV;u+`5AcYI zQGo+e9}`qd`f``}H!ko;12GdD2kGq07KGW)BukQub`+8+It~|J*3misv9Wvz~QcVq3w@!<52#6{&MEs26X4x%h)Eq$Xwe)&y%Gh$g` zMj@2hi2`oT-!046}$zhzTVcTVkfNxNi@Lgk8=-lI{Utny{s71a}I z52U#GlRS5;8-Cs7LBP5OQg>BY~tN$a*=wzU@!+_t8MEN3sl!Q9lkBn-Rv55ZiNpua0(6 zlU8>5#PTj#xh=sRh-|7YTFIhSD(R7sSJ4g#4rFijGNt5jTDD~6mLCT>s(RgpYlJ@< zNRQ;wt#`^fVrT71`9x_V1Rlv+EwFv4;vfTnbjy5bn!UgUD4&4k=oPS@sqc=C>bzd zAXqoFV_R!YVmX8D?#i;Y1Or~vCVas_^lMC;y(2dN1Q^I00EQwT5iqFHOeIZ}M37(s zLc;_J3m6y^0RWP*T>iC`K`gQP?OLMo~y{ zDEE6&+)C~hlg}%PS3ZkTjKa=FF^W-);&z&F6r&ggb4ha%K#m9D9wr+X?4J1?g;5@* zjYPJRjSGx84w5W4icyfB=tv;MR4I8Jg!THYdz9J8qZkE`!t%ml6t^^rN?KGo%3&eW zrXV-zIIzA)V#kDW7#Egs9B#M&D2kS&YPs_`P)oAd7c-eY5)CBzwrb3*$dsgNS!q3$ zu%y*UAoWr4r4y~M#kuLOs)$8jf?F@)Ty7cZ+`OA*(aMX7Wtl2#lXBfXswzo2O)Iu6 zslz%hBs!I=K})wO85{li&H^dxP;}~!oJi&fit41iP7kDln_@O8r=mBfbb_~)u3Wms z6W%()rj+_x?V6ljoi-gUqo%OVINZkMHfa<)f?B6}ySB)6Oh>Y#ok2A0M80nu@!%EX z!eJDn7#FmMvx-rSOimxJI!f2A+Zl;7j|(`cjEBW2cBK|1O@``6=Yt7?SS5CO%RjF)##)?&pp+scwHJGDkT-Tg_8-_K;#)V0)p-Cpfy ztJ=1WYFo!3{F!k92Mq&(K#Wu!01}W;Ou*29X_3If1QlpN0#X45DnLkpBqpfffC|XZ zY!xI}nBaiQrd(wn=k-`?mMqWCExd?qJf^q>U$GtCX|j&^W2R1ESF=%L=MksPnlyD$ zzt8=x@SQ15OqolE*ScC%^-Ox=v%5-bypce;v0mzJZrGI0^qZ<>UNv4jnJfQA|JG5K zTdj=i#G^VAg3WoQ#4lpJqIVbR?28bIZ;4r#Zn+g{W4B2!nq+5Fo^L96d)@QP#Vv4Pi8QmnSm$v9~za_CrlGcWJ zRj!|8Lx@ax<5aq-C*3TouV|A-A(@=5*E8uNRpQs#$>C~I-o=>jJQ8vvT)`-A%(72; zx{Z#!G!<#-oXg6$`|M5DMldy-emb!YWK{rEKvgj*eYP)c^t{ zumE8J3>v6FVS)q(6dWKyVF5w{D1abA0}u!Y8mM3tmwO{RR(dSI)6~>Uqs|Zc_bV#& zr~WA9E+(mb{wVrrg3JH#DX$~(8>D&zg$N>;fC0Ie8iRm=K>#TT7}cGd|omy?#BceNK*ABU{Gs6 z{IB`-+HTW5+84g}Ot};bv5x6Xp6BGG&RyvpxlQb*IwDK85o%pF4ud#Uo+fuU9;vRE z-S^{Sm_P#r3xxy*NQ4P2Fn|Px2p}|+g$fiXxS#-cYoO5JKm+p8009FKFz|p;K?3Ab z0Wk+0h@M?GU+pqLY7jsPaX6$sErH{KaVW{Xv>c_RAOLtvtpWFuyBo#vwVH{6R`oy{ zBG#bc+O2|d_#N6u1hBTcyQ=C{p9UO4xwNjkYN;@(OxMm(HL5v#7gMrr{wf z8ZvO<@y8$W{?qH-^>@U>=lfJuPgN21`r9q@iD^%}E@j$L?W%Tqde?jBJ@1~Tl$Uw$ zyyv#2-t+(aX=!O_mX>B_W@d(FW@ct)W@ct)mS&cgW@(w0mX>B|W@%|@Y4_jVf497y zD7yPHOI9{)yWKmz)7v{bLPSp6+he-BTe1YA$h=MLWXR0S&dkh2%FN89%*=u*i!yT< z*ibJSS`YQ~MvoO0^-wQ&2+z2LOE}xxdWXNdu^Hy;@_MfujZb(iWGE035pntG@EEwz zV?3MV(;4F(8=I1urI|8VqoH-0F>v+WH8#%SGG=FIW)3nA9+43l8Ih0?2^pKw81chA z!a0qtO^A(q#coAx#KyWL>_!~yT5KG|LTn_&ZX97i(aHYqmG6vmGq1@9vK2 zZj;Z>fSJ!UylU?$YFS?IRF}}uP*Dj@*=lVBkB^zF=e@Bao@rUK?zISkh?PjVj0|Xo zhKQI*NQkz3Sg_fR5T9vz+qq>}Q(K0t%Uj#}s;%Dc?W%R|{R|Bm&a!TAcj!#_IMS89 zt3{gl#@1skOh!It%roN|>T;eA*(|qik-IQY3kjK%_mq##)ChTGnJ@`$=E-+^xSgz< z*oAD^nylAH?mSJpGgD-=weYSWaYFw-aX{azW?rtXIPc2g=W0F zh4-@IG3u%}B(C0z zs9^%xT;_W4xIyr(p5?Z~0I-7iTaf=3bYM_5gAyLqYnIt&Rn7vwvzy${HueJvUN(s> z?{s^z`T`;_MK~dvHcA-2JzIR^qdBm*FA2u%Q#-`&|2j~me}~jJjOtG{h^#5i=wZ`N zd(Tnu2`nTYST|bgIG^xY4}PcEoUNSx60X4x>kO4Bm19JEgZP5WMWT7vDA<#nfpHYj zPZM8HuY8rX*7cd~!wO){SFYz@rbUvR{H_e9pa2FZ7xhm9fiGbHLH&gD(9|u<5eeX# z#<;qLx-&+T7ub|`EPME~ea7hjKs$6fu!VDSI61he)}Q1pPPTL<+>NH_ZlP+;!!?e* zsARk_v}GQXcY0i=8`i3?#!m7on*pH7P%~6--Xcl@;t~Y*G$$l7Np6IrnHr`_zI)GU z$QW;zPY4IFqZ^!x0YKBnS6;aoXt3)H;G_xy8uGYm)Ba13c+9iV)mP$n$_#tl*;HVa z;`#GUu%;QXr0bF60Q~*$4Yso_TT&!Gj;`7SY_$iS%n(0^8sL_tcWI`| ztV@hd_yQd>6TuWt!3!U(t8P&E^Fosa#uX3Z&{GLrp!YBm7T*pXiMKxcaxuJ_B>ttK zpKd{w`$~8rgr;CovFq>k(eOQ#>qrx7sQE5XbPElI>Xav&=oWToIjTn`R5INcw*YyV z16$Z4PRyzHA}pz>4+6#^J8)VC)XLzpL0;|pa2fvQerGLoIuml+Cof_0iiGy*qGOpf z_eXpL?lZai2G4Lt%5a&<_j0#>vJi0-@-?xV#8ylkSe42Py+Ff*3_mkspn+q|C?)={ zX3-G{Gp(zWlbnfg#d7HeWrQ@_i`#AM&~3ClV3V}pvJ#HeSGrer0}-IhwQ3__sW6;m z&N{DrmZ{ELR-@q5mnzo!!W=F{xGqec8}YB+)daQJ39pce8U0(~+7p_2UQJi>G&x^& zcGJ2+&}kDk*Xk}(gysr$un<|C1XS9m03!z(ZZB(n|C^?lYDHfrDOBKN0s{`i)xO;1 za~v(x>=EFp0g`j4p}mXwI=6392OHlD)y6{u0XdTPbIU4Un>lOYCHn`z=Q@Ts)mn~A(3dD!a zuJ8cGA$POIMhNvngO6lbG@wvgS6YG6kgx!52$Y#FTrKlqX;65`sB0!?TJSf+04jon zYzWqty}yb9MS!&<)3_rZ0pJ7~tgQ9*WgYwOjMm|xg}Q?SHFX$;sN6r`&fsZJ_c0~e zknnbhNy(Eu8MaWdlAu{lx+J_B1XUEu$Y*c9l7+(ssygcYZs>>QvKft+fz3y^y=+| ziWq&tg@RecSMbS`g++GJsrj0XjVQ z?B4@~zCc`N86dt3=pV2`x=8-o@k}2Q>=$bm7^Me42;11DeH5*&2g}+#u?V#MMSf3w zTmlV;0#lIudHwpqdb>MiAvFztz7d1ULYp#+IN{l3jRiwieg1YcByT`Vjt&lKYfsGO z(0Gs=lSF55_PJq+p!x9>=?yGo4uKE21CAZk>0IdLlcmDo%gH>xsLcmuOJdZ`mi_>M zX-+tTDJ-E3aWR|>1d9RA0W!sEbAdy`;7(y=HoLSEAloZg%`KIQIJ+W2Z!*PVa0A== zE2(00ea^oHCZmN%%1G-g4d_y|nL)AJF$OQIQk^&lhsJE(hN0-7zA6GN7nZ~T{>mZ# zE3nibFas0`~WE9V(Lk9ctzI1d% zJSdjtL=)6w!~lFS#v`Q7BsiANXvMR@x@Qa~eEy3w354iy!h<+9L#v}6ynGLj5MK3& z8PCF4P745;RD@kbDe21Io|^TD!?%ib5HX=&M8q$6Ehp(LV0bBG{cE3#2cmwfU?ELv zJu*vD8R&#U?|Gr5>dO3^q>T{#I|xzLT>j60nQ`n*l5`L{rW!!O)qd>#8UnlyjjMt$ zL^{64V_)H^A-CsG0*aIMkRbFqBRsGkvqgwstMenDx3(~|S5}v~wodo(k+%Gna?aE@ zxNB{{_JUnC-h9S#bijcG1|?8YDp#9Ij^ua@M+X-btoW5$6cSBA(b>~|5%>_Nw+C)a z_7FdN?${e1ekcOPi`mGGQVvfnn`asX8$kJZn!1mPn?1MTpy>LyTpQHvxn+Yu`kI~( zpup)ya|%QfUnk8LF-1!Rq!E@3O~{@Zk#1^4T;$m^L{va=d!2!gaj*!$wHSzAVKP2f z5m2HEG(!I~_ISIF5dNO#fk##mXxs@S9PR0+x?QV1;kbU=d4#~LJuSnodeK_bs0efK zqL!4k#G__Is9J(B!-igQK$^gShnwV)H)uzy1)cyGXJiv^)Q1B`mW9t01~9VDg*t~Q zp#0^nmqP|3*uzSAJPItU%Uhg)Fm|fu0jw@o>I+l&1mNu<2r^7f z&>R3!Q+|=XsovIs6rF&M5#QMx8BJisu`8amKvjL=fw`)U1EA0A>8z*qMk4*6t~idJ zP6DiO`u5@Ez4Q|kkdL7eC!p-%jL8avGXZW)YZI^`z8>qc$3LvKnE-#r3#-{-w$~5h zE$1Yf)CpAB`3=oUxkgCAF%j1W_mtnFgNIBI{tl5jfmG;QgvaRO6Tl>K=sg3#1P#fH zB9-_FR7nnG^qy^>)yzQwb2A(C0esK)XvD>O3c&b=A*jo|L(l=BX0ZK5BIx(TXAhBM%bmcTc>OKuX@lGtA?N;)la{#j26AXy%$WQqM zB(()(b}*Gr?Ccy64-<@gj?KGJ57Kn=)_{~gRgI%Wb+YECU%w0E!N;f9T%5CLK$SWk zT|t&<>ntlxBeM#%0VuaF8p2!6v8ezv@84*Niy@i{Zq!3bsn=w}bhx9RL~zB;`3Axt zgzR^q&cQXVhU4cgqaCQX_ezmGB0x1eR+2WQ$Ko0D7e~QL(lS9g&nP*=sT%D$pQmTt zC0fak)D`BK;3YOHWTL~I(>8f^>2aEe)P9k{Z4S*J1cJFpIKQGS*aK{?{E)C!KyF)G z!r>$a32k}+y&|f=1cN81P%AJ2{q3lxNAdHmP!-@#3#4mD&MEo;$nacQCMm!w%PGKG z&MCld%qhS=yHkK=s#Ac~l(icgyzegGr?n^*!xn7&83F(o=RE-AS5N>zab+|LK%Y|- zU<69tXfVo00s8M4m@3^&waOSc9TL-|E;$Oo%mfNB9gd_@&PH8ojrLdo031gYAPOwC zo->;QB#vSngK$!SwYI+@qezT%lJ!)8i>*?CLw1kQi(%y;08GK40xT~yN^~|AU@G1# zz+NI&fE{7K(rT>$71j>oD?s|`m|tOA4_N^CFCKXetZwotLd+yxu_B=W&&$>wj^4$N zIN|~7k)n47@1(0&cf>YzGH`fjAmC2+sZpqs6ks>pl*771ju#{Kzee-m1oQ+*m{TM8 zuy`#5Xg-u-N7^4`h{hH462`D`X(Zvy^E~pJxk<5y?(h!tNMn`=?BW%ig-oFyybi&7 zZXUqlINpVDtp?E}xk57lRY0o0B*Rh6=1gAC|1voqF?a2FE3YiC5fnULti1kP+@Bu zS4_Fc2Eh{7D1UCRjHK@yPGO~7n<&1#1^Q~Onipun&+G!uyv zww#F_&&2<3Fc&d=$P~r^^f=Q#1oRgU_lm)Yr?P!{8u1qrBU?jAY)O`tFh2tBohSUt z47}uKOW{dv#5u#q{Sq8A6=LTF)VZV|5zg2?P+Xva+fX5Z%g1z#C-huvxky*Q7Ws@J9b;ogIgYqM#phL? z@M*)Sg#-wMHiZ$Ktfjvi)<9&IUEuaSa=p*QJEMhd3s?3d5~gNg96%-}CcL>&``9PQ zF^n6mp5Zc)QqZ|l4(|gxAKoa#f`^W2X!rop<7qJh%xbn#dZC7-e?^0oegq|Nb#Nm# zQMtZodw>XGh5oCVUjt}-q3PQXI+0h%B$E*F^lwm=4x$Jr~7X>trJ+SQqozdHELn9J(*XcLcFj~t(7H8XysHV1ChN{L$3 zTM^2P*qjx%EQn+a%!IZe$#{aHxP%j^4E))kxq`u%u6mht`Dp$wGPpRfr9i4_Wx357 z4efD_vol$wyBJtgubsJqMh4T1XtRMzp5G=e_?7wY%vpVblE>$OSQr9SV891WWTh04 zW082-m=fPmy!(C8$w+rbpWO~`f%i#s`uP4Gv z`qTpCQCpm@Mgp;Jv5q?`(^@xbnk5`!KLj`%&z1H%~^ulqN&P2dEyNXOw4-8Ax6nPcF8^kX<$Vc*#@bN z9wirtPr9H?5Xuy?ZU5Rn!BQa@me)*72Lk2qMKM!u)NCgUqWwfN;fh8(2M>5DJg?VdxlW)jlwZff$hY8*Gt9dq&it!2> zx!||b=k0V7@7!D?S@Gz?1PfI;`;^7;t@0~h4gzc2TaxuxkU;|h7lqQNnO3EXRHiid z=Ng;5x_xl}b|oJKz+>6!Nu%rotRV}S0|;s#c=t3-2kr;=2`g70r>D@q0uPxugy;o?k@DKM}yySPTrl56Gla7P%h%BdxV z)?RQ4!&0#J!|HJoS&|HHittq=kP(Yfx92t88R=#jmEle8G)l1lb!L#xR}A#8QtURy zy}g{zQow7O`>SAXTzI1DckQ3UjWSuxD~1(!{#^Mm4pL$?IT%qN?&W(&q>zz%1Ev3} z@H9fcZnGAamU+;Kq(eZJNY?J{?&f~XX0kA_0^?(J;>-BDbrvNCTp-*K zLus!V9DjV}cvp9MFWmA4$W9ILbrjeR@>!<_q+{N{1ZqH=Feh-CLJyD3aH~F8rzq6~ z%v#HLZ0K~i+Lv3QuN8;;VH|)Lc4U2#a@X$RgmS#qMUwf63#HC`{V?>Hmz<3kGS*<( zlTzvcPDv?lBpDAf2czYm-ed_m3B}c-b@5E5R1@|yVlV-e8!rT|c3=rudR%QiNEWVk z1A!ck33z8#O*Z~<9w4fp7}ZOwZ(84cSc+a+3uuv>lc5<~ktMBbU;dmb+;%CSuT#thh?Eyr6CuY@+paY&?Dv;w#%$K|J- zKXS)Ak-s0v@ntnXUG&N1mmt8nyv;)mX^0TVvAp;b?e=rV@wII>=mY!2F*5>3t{{Xs z=6jZsam;YZqS?U3@#cwE!iwXR^(HlG9G6kcLRjDxaqNUs)Aw;)1M?N;FK951r!2&c zi(vGCCyuMs$FCYThm+$Mi!~lk`%=UQ&k8a?^g+I6uLC!jl6dwI*M1Qx>Px`)@pw7j zI~4+o=6p4E#>AIEnRghFAVn_`Read z(x7FbG2Z6hY5ZZ1m0g1GeU2AH)6Lzeq@Ux`iS6$@`i4%UQM0%&I+kW8biCg7j*3Ly zNi4`@-JB<}qGNZG_$IvN9TaH&KbIKGDm*Z7skuYr{F zgHi9w#@!i%n(FA2;hV9W>cE#~Tw?mYB(7#GsGt>Q`Is>>A{B0{a*>{~z0lTJ$*(TD~a_F z!{u${9N%-OzJ6Q+{unayH;KEkXhPIg$e3AdKV`UA^oFO6eQ3TfTrM!Z*h!(+y7o+* zJKg+Z5_;pba^hl&f1RixT13ViAz13M_|jMi(R%>n)NIyNNLv&)x1&*UwH?e5!Vk%8 zh>Q*xQ?U`MAQQxP;!^~5#0Uc|!SO}bDhA*by*y=CS%maOgvlXv>TEq=iB3lzYDYN# z5I%tgLZYuY#N>iqu*x7VRiOJp=h%FNoz1%cux=&|#Fl9<%|)huENb`(QZ({D%PFRC zv@0!7By;x9{dLfQzH+4XQ+psoFtx=c{c2g4Z0tH40f?0-i7Wo@_|R}j2;*ATk6jvi zDoq8*BM+&?2sW4OU!EG&=%c9!g_mIX*3bspNK5U@j)^6#=YSq?=DrNS z38Tv(e=-OT2P%Ngx*EPFcnSqGo8F0$MZ7)|0^gJDwA(t^VJ-Db_tX(mwPOM)8{lS+ zvdvn);Mw#6QHI>$uQiI0T-^?B4ob1bd};EY632QCuq&e&WwEQD3MxntXXlP}pmA;3 ztm4!G5gh0awUwF`kR<_u=#W*_=RC%OU}7D-k;`>r=9M_1{;dyfjvY#G;8N^F&iSLo zj2JX17%2<9<)Y5y9AhX?vd#`q8}gX()IMv7#7%5e5}}d|dVbn@C>3IbGn4koAX4ol z7=#J%vWTykzX3p%04G6L%1~hVs;Gj8?R|X}8z9mQt-J$<;<8Y=Vu{5nwWT^wHATB` z^NDhkwVJsKG_d}LC7C%xaJe6a=JHFJ9!)dVzUd+7fgSKoVkiU_mucI?-hsE7Xf_Wk zRSq!RAQO!d@f#Az9HugALbk;T`BgQFKV)#C|ARm42;{9p0ZaOd_>tPzcOSQad22k%IZ3g;kXV+Q-fgTdxx;}~t)1`%94UR#uM*^J7S9{(DR~qHg?e?6!WTG_neaY{lfFOn0IhS*{0maL->dW4I^6cQZRFv;V@5>Aq zP|1Eqa#uQyOxmXi*oRYIMY|&Ls6E)Q_h0yW!$M(L^j7n6;!(!ri6%XYr1WMo*|8)! zlp$nL+^QptE@@|=GY&olD(bwtlhXx*s$>X`@cF2jtDEq+a~xnvL;@YQ94HKvdvD@R zamG6W$_s0wzqY>B5oYi8D^?aqzG9?nC6k&TG0RC(y8w#t%OZ4pd|Em@C_=KdXKth+ zT(lAukL|V%GMa@X{%PCT%D1oN>9;HTAW#vGkf}a=tt2b9M|2?G1^aa5UX+;hEiBe$ z4$J&{{Lq2IqINgRw=Pf=#I@p^IZ(-w2KaGd02Q3M)2;&STIpRZfv zH4BRz-O14NgaX2isCGuSJeRRAdVp@0zx7)>v-UV&Z30)&z~hY%+I=5;);niittc;kY;@f zG0p?-^g|?-h)_WCQZL8+3MIwq18E-=ZzCHVRzxJ-@}mn4D-^l<-4uqmKiv6*#p>(^ zFCp^Q@NAQH1o>;d1AY^2@lo=;@%b(eJcJ176Ort&ypfGV<*3zo}lHSe?+t1BrBg#?10Q=St>eZDHp8!!_2)Q4s_MsEOM;5!zi6jZ5$c zI1M?48>|hq!%E)Y}U*IRwTlFbj|zApJLnQBsPR#g&V)f*=KDS-a4LE4>WT0&}rA!%Ox* z2jvfG2W=6uZi)!VOw7!{rHuSNS}2pI zd|W(`s$?$5{Umai7d+MqVcxz`qTJ#pM>(aS9JGp@3*XL40hI^Pm_jkkKjzCTL@C7vS8~SVZkUPo>ny{9WA3oA`y88BEN~h@Gg$ zaDNg>!9}~B`$9#?_TQ5w>=3B3LyDgPW{-*tOMFT!0sUrS6Y|_%spDmG8CsfZ&}9he zjyqstlz4vu8I6@_=qXsSpNtkoE_Um&_^weTF@x5fuT$on19vTxdkp7jfAJor@k_F# z;dUrGu^18%v(HH9KEtQ`{gQ><4tHea){v)rh5o(aD_YqktSJ3Wlv`ODORlUVPWP=R z{*kF|w%OK$_ktK-@sekG=@U@22R=Lf9J+>J1EnV~+jI{8tO)*3xqp+`%N~mDgCfEX z=qqy#_@o-sJ2kq@Y`s9X_*6nUC~uikbLwaByQ!(vSQ7pHn-1dU`PN~kCp*OxN%Zg_ znisMdo(oTbF}ajVISi%$eRB1xIHg-?B&24RB-hB3cr~eSQWeiH1eVxjI38?_)T%i7 zKo)7iwJnoFC<&KszCz9=ul|NS`S37PBIJFZObAt&9OehdrOFqG7-3s6|GQvAx*yq9 zO+Dk1ajHaPw5d*j#BPPt(MM$BfAT2~kz)@hT6@Ugy`?^hrep^iZ zZ3C%;C41>>osRD7+Z!REf43R|VI)SGBb1d77XN4~c3S+KQM++FnM{TwVvRehW& z|K6^8bJX|$*3GQ-z1Bxn9n#SpR7$DUVt3lmF{$usP5X6#V9Qx>R=FJVc`4R7Nq%v!i= zBs25*aQsKj=rHn;pR=uFjV_UrU9DL-iH}v=IUUGI#OUvDc*} z27zMR#(+ZTN@)AEIe`d6^N23Sbl6~WO_l2^)G#3eiL!>4RNZjYBPKcWnvHnC*hUgQ zB?Or~bNt9r5y5W}38rdY73Dh1ZkTVXd`j2mXMqQk!!js|0++`5Wh%~cTw>a@_2--v z*D$%pPq_%$Eamm9&&fs7Ddx1khfLffJk6nDwPd+qtm3Oec&`^ly5GVyF$7j+8F#P3 z`NJMDfInMYWCfbgv<6@|^8X>oeg?3UqsY_HsA%OxGU`f{{V;hCQDKFsk9oDcm=(J6UlHh zYG6I&!9gw)MScHxUfZB-e7}7n&aqdu{#O7U(Q7p0H>xkIOq3q+AYuGl56#A4DW3g0 z$W4e18B6)RVZQwJUD6vcwO|SsGEWz_jA71t7Yk`(oXtaWF_ArTe52(K*dJyDdq_Ll zC=E})VvM{DwsnukTr5;gwwQG>p6tg)v-uC+&G)n870?w?+axOipv~I&x^-xZg;(GV zpL2{t^f()QbkM|xSW;ILTP3bSxa2O#$Q<|_4n*e}?#k}CQP)0_t{AEyixLhNO`lQe;1|d zOLztrkL24pcY-B-dp|PPqX=Y<)!IZXC@pLoTV4EdX$gwXb;J$YhM3Qvg&5LSMT!`t zfe$VR{@ggu8<7KI_>&<~lpr~eG+`u@lGarWHpn&4u$fg%Za&mZ1|RcIetBqs)kmen z4Z52#vpjmZ0jQBnC4#0xv@>+4F4nCd4MwC_>Tfos`+;O(xgQ2@2Bu_VF4bE4GO_Bc zMo1-Vo0h_kg6K>QAi%5_JxHdTKRJ?SJo(?#1x3469U#3}pv~)kKPoUkGj0pPB4n z5pM@gVdWdCU_Ei79-eeilt75mDU+9+y za;eNuL;4a4G7@8gq}_)&dr@?8+UZZbx(8x{b@x+l>4ZI1OI3+o=J2OKmMm9a8_{XenA21sJQ53$vZ zE!nFLg|&C#g<_bNuPc>dg!y59Dx?hh1AWY(SkCTC(6#7nxvhj7(qX>9Ya7cEoCP8; z6q6^>L=Xw#s~}FTnyF-88|f-_h4t@O^P0^qvNAhGq(%43cUx_im{Xxtoy|2C=SZ@J zfbvo*juWuuc?^ntD0!0eku52$_*CPrV5TF=%J_vd9cwX7L{HgB<^>I4m|$KBs(Q5R zF&yS~Z#VgWbe!2%z?YPdEHpzfAXxs}=K2gZ&bslLykI0QElMMkOCZ?in^a`lPB zbvy`XjX23L*5C;uRkq9 zb7g+eVNghm!7P!rKN5J%4Yv`z=utQ@&o)fdm4wK@F5QL?30tT1@DXA~N1T3hx(vU- zA#jL)OQwI^5-#D9&zI1FBWR$wxNif)_^!i}g&6!oFfW=p24&dCK2`e`3gbZb>=X+~oZ=EnwU%-dUrl*Nh zLq%qT|0bXF8LaJEq^PZL${MXIWRdS6AX@%`PM35znqp6|)`B$O*N}!~X4Ss`mMg#r zx3tNPho5fVk_!5SnA#&ifUjqqfH=v!?LjYw_NajT22jt)MN&Espc1NHM6yb0mV%@V zc)%Wnt^j5z#DANm**-07K0g59-}e?S1neNrV#B1Z&5#SZT;N=-=6ptoA$Ri3Nf0)# zn~WMV_&pH1Oyb-1E#?%-nFPxA<&pwui!2qcym~|93tBQQ`hz@jz2w~qMUxpB_u5(c zD4lths~%cVlxhLn@ah*>!`I!hp3;{UCQ(RDt#StMt3%@jp!`=*ezNMlRgcsMrdBTc zT1vKfgKZ=gd}$De14fA6P%n|@Wmdr)C$9GFnSoJi8L?>Ac_F7f46)7651)?Qog3RC zW8-`#i!_=b#0E89BO){p# z2WfblGOly70}8v=xW%K5rxHdzpnBb#1kxwt2G_FS8i8z|x$3DYS2TDxvX-O0uyM8U@4xy&J`6x1&s{tq!! zLPQnO1sc-Qiefo!AbF`a6eq{VZzz5woDN3pfo#Ne(=pMr@6BfTSw-3D3jcmszQI7z zk?qXciyI26$WT{l5;Y7Z**8-gK?D=X+*gU3iq|Vzy#kx#=O$vZY}kJ?OZhuRjg_mp z@^McMzu@oJP(X&cyoK3s;CyrzvjIau))=eX+t27~~gTmGXYyW`%lQbq%!ps)V-G zh-4TL1icy=$lXs{z_fCBas0uSHV|kz@X0p&y|X=`iP??+l)=?wl12ZhP%W7KVgxmu zxOEOJz1~KUk(n-6x3KhFTS4Be4`pFpHp?}T5+-c%pt3FTQ!7vd$FYPMnCOOp*LVrig>P%2ZmQR+`7J#)P07%zXsW|@G7h*Fa*`-HN=Es>imd+ zj?O61eV|_x|t_0?pDK(H68SXDhymYfUrfpvxWp@Q&GSR$t zF^PS3=iOafd|C2fxbLE3gULkQA{v+bs!=Y#0k>-K#j2aRMTrE*+lHt42bz>D#SL;Q z1Blm;svf5GM7#m|Sc`!)$Tf?DK;%|Y^P%ef5HgnjiW+{6UwuN6n&?8vFDC=$Qg0hb zRz(u9vRKX_lQWs9VbIN8c*m6XVhw*JT9v?7LKOEAon#Sq_INVcgMk?75*jRn8%btu ze>oaYSB5t3RYb*zR&K{2%RY5(R3-=eLXl8D zE*4R;x1;G7NBKl+C_GA3?E*{c;?af5h`8Jw>ehtuSB~2KXw4j=bC(|!H+w{J1ps$-F&S(NM@(-C{ zvan4kbfGd_3oxxVFw>`Q${W76Szk!l`$njpqZynTz8T%~phc~iv`YY$Ppr}sLL2Y% z({fODQ9viqKIVo-|H2d;8m1IHf+QBm@2vDs@H)Nnm}XsdN8q7P7@KEXL#Df|#6o!cZ(a{FO6(fD|CT)o*JDwgXy%=t&2 zYv2B#q_=WQ1iAR9W(0lSlsHHpqAKqTmI3452Q`r%@dsY`vZTBBk=5Vqkx%Ehx( zEz8##m2e7Xf!3^f$^Sz7- z6=Tp`W>{HnCwvbzcvB15WPS6)7S>d=aPyB{+8*nqpIXZ91cQ)4mCtb5>r(LYO!pIC?mb9T#42>Kl&__Df!}t8u6mk9Xgd(eswZNUv?Pl zMTW_s6V{=lDA_PU<5U(E%T(xPVbBSfZ{5(8BRt7FUKW{=Lvycu88}Mlj;bY@a@IxI z2cm_GC=_3ZfrLWYI|FXQ(4-t8@g1bgnbtJ}4^CmW?2`|BtWzbokY$Y5;CT%~BDux| zdQ2v!h6?Hz1G&LW$e^l;1xfP?Pf}9Xt+WJkzjSwW43t#E67h3{0OPvS6SlpBGFyLY z*?=)+nlT#x-vnB7KGHmR%-B*6>T)m*y|^c(4H5Td;$t7e!PokM26yO7lcz{2Vggr> zmu=6iwORGWmYqK!=2-&+K?7N+n*cTDNzfm}qBkN*4PR$B7;(c5hQ;G3c?nU#LN!f= zUBFK3J(ER(Sq#!GVxpCEIF8YIZn+B4fG;Y=3Zivf?ZQzy8^GqL)V?>b1Ti2rpT15& zeJm?V7gna|&qS!G+h8W-ma_w*fH7nY0;;<%x|OC%+>^|BFud6CtFm2PxJB3 z7y&1Gr6Q7o9%9?4VQ8p5om^|R?NjuX1T`?Y{L7vjW?u`qy%Lp|3=3K7E`$V~&>UBI zMNFvW;3E^Jc}j1qrB5MwnUO<$kfzqE5a*_A$n4Futc z3L3Te3#koOP+pN4etHdWK5B~($@d{8{JK@x4V=l0ujl=>v(xKbRIeVXEdq6_g55VI z=!cjKz6?#0;0p$Aq(xkj3`+$9d*^=PtPhk=UEZRD>GgJ?Sei;^6OzQ1t}3W)Iy(za_tqr6S3dVAEgtN!C zq(A*emIBUc8=`E- zq7}em5cf--cO6Kp^c6*^QKOVa5;-Emz7j-TPokfZu$6@dvk!zM7XC*da;gc`3n{Q` z6ge)V)YfiFx8nM>35ygPp%6z0^xE1skj+BJK!&S2=t92ACIzD*@v+Vjx-843i2LEd zw=q6S%rX&>c_fG@ZZQ(vnMlE{gxy2}BqY2ss}oaYB&nFOnHzBPH54y3_Y%m}XnYqP z0$=8si%k{Yt(IIyEYa;%GM=3iT{)I`yj0;ZPaYB+KT%q^;f!*}iC*^YPR0s<%p6{9 z6){s}eF9@`%us*UqD8!ywaxxx;<}>>@2g>=67K$5DKos>+%vWeF};8uxjMkd!C#(H zI36u-V`W2cY_qdrAt8G={D!dE%RSOB9e}8!o`yASTi^!52wPY>lEdwcyvU(0C_2PNg4u%Tj9g7;q&P|1`=I;S zn)4HS^Bx`RQi{Pc!>BI7z{_z5YFdZHX>YMMZXx$Amwi7jg2_G;gCs)I#34e#kE!6~ z2?9H}Hh6!&D>-R!7?IDM&`&w5{+b^AL$C)z@^amRx3&v7W{$Oxu6#@%Pgmi!;CSh7;@z32gG~>qI$rm%5-Y} z4&O*u#H{pd(?Y6d_m?iaF9$kSVos@oqR?Ysw&t5$6>Hq-$cZMlBi0h74wcqTvv}&B z5ZO~%7U4t0y{@t_g9_Yg)~Dss2{o^28pxPj2}lEQIo1E(1_|`hH5{!H!uIUZ&w6g} zgB~GQo5pci3b&)pZzIWT$GdD24Uvk$1!m!nZ~Nn_s~qZaZAsD{0cnnJWN!{D59q?v_rHVwuc z=g@aWTV0ui;X}vve?WO^_B35a2=BYamUu0W((;0%;6w5R&GYb&T%8>LyeSV zh?Vv21ONDvqI^Z|n~pI+uSnY)hSiH`+u7UqOFHl>>uT7cxQXwByPF#h_>7gbvfRqxTDKR z?|e5CcGUPQ8j(gE+DETrL=R>)!zj^x%ZxA)x`c5i&svgO-3*=OXy|<(B0$9^-_Zd- z${TQY&?g9fYa^G+geZgB#h3{njD^r_HkfJ}5s^2)9$EvaGt%qte@ zaO#K~h#E2bJ9}cFg7S~xhETB2;PtWJwK0<8lLtae;t5&9HFK8rQ@W|ui4hx3$ zJ+&Z@twPmx!<+ow=uYlBsx$6k04sT?Vl%eIN_vV}?NYP%^A ztM%-Mks@8*!xt4El3@qCKxbID)g8z0t2}`^5=jo*{-pJB77iio$5tHB5crX!GE(T3 zfDv~FGv7Oehg9v_%igDz4|&%B3ptY|^VP%pW5QAg}*u3ZdL2> zON^f`8OwV#$8_M1i!bENw_22-iEKIzwyrjTN-gIRC!fyEcIYM_!dQX_? z&bG6Lct>?Y=b>S(#(e|Q$whK6Poa7Uh$^o~!z>Zl6#~Y*S;>RCJ1#M;duZYb7Pa_;9c`M9*>TGtCR6CkydXgx;-AGw zx!A}t0&)>r9e!l|kA)M%Ymv(-pK~%+WN?vz*YHn(l%!4VY=IZ@ z@Gj4>QlDwg1XH@Yuyhh3Jm!T5{IFwdJ4sK!JdM{rBb~TvJFV#x3+GnOwo>D5Hp!xPwabqr&R+&EoC*WV%ZtTCw7gDt}2)pFKm_YJ>ONq-eQ6=KyCR_OqkCGNqG zqdjV0|17I#=Iu<+I#lL=>o;{xR{eNCnd)DVnV5)|ipg(X zsH4>tk+>5eG(8-H*56bdiWc~+c-VY=6=lBY7TOmLbq)Uovw~(^XYw4Ciehd{X03e1 z@r+$nE(2e;Twe{#g6vXJd;=@`ExZOHBaW?J8MRiV^i2d{O+ea_UC#%4-!Sq2{arUp z4e@L_T@D$u`iSk6d$M7}L~*WK52nS>Xkf4e1g@GrUg&}J2+bBNoKTHxIE8_fw@Tz2 z6d>=mr0S*7%9oCEe!1dWX84a;=vc%}*r+rI<}|Y*(jA{t#$56N6M>tgZ=&*GqGi{J zzan2RKsF}jVjVbq4wqm-ka%2$z&?-Q51;qFLby~r`L!2!GOyN{c3=*UgB)h9@A#CN zD|<`GuJ3opJAUcD2bLeWlV1CxCvdtvECXO_5@HV*f|0p_!^~yQ_gv~L51#nd(!4eH z)s^{h3k|Z}zgDR+65OK&XB_}Yaqup6m*EgwKxUuYf?6w&mhezFVh-dNC*N=6whY-6 z3PmF_5yumV5jNNmQ7KRsbVcLGX-IJJ$(aSLVlrGTN2GZgY*tO$%ILRfCSpbzBnr(r zp9O+lvu7E1T7fmxHQuKV$^RoZS*MQe#a*4uOO~~Ubi; zL#W@qB2veez9m)Ei0`1oIfQhv8-HW*qRs7o*A?lpR>Y=?2%$C}Q^LL0gz*Y<1~02_ zA4>yc4QX+HSXoHRVbJGg-rSn&>a&QYQj7%m5=7_*m0W$!j2~!8I7~R@JSbYbb zN`U-4N3YzQhYySWtk zF3ehn)XN4Y=aezdjRt(EypWQ3{waK1m*Qz!M|ehDQbx}N~ zRhKZ$7*eN!K109A>+deR2vjL2>QNj3Mec{Qo-}2m?k^62{TQWn#aYSIQZt@Gn#in# zE!a!!^{btlxq-2xyi6+`$^O@x6yRpP?xOZkR;HTN8XO0A$ikgUh2aVqUSR4NGaIrM zg17g?KN0cy8+B4X&mRwj8OUV%8RifZEVxxS#~b+KaA|z zLsi|4^1>p>q}75GLLiKX>MsZ0G=~{Sl{?2ZbTVpF zDqhxa48FC4VGs+`oV11_=M1xQhT)0fl^ac9QI$_XBq|lS?#+SDe+>hs3-a?FlTaIW#9ucN@>}B^f8G7_Oq>^ zT|I}|vz9Fg*I)_J^+Mc~p+p6j&p>CQ6q8n~agqH*Ht{Y>P*}nH=jAKI@ypHNO%jrI z6jxYrM}X>jr@&TO3}fl(BFI@0{0T&sSSW@W<(gjeSfrR7vSc*OqIUZCe|O5YdO741s0`7gpm4h*@7vbP#Hqg?H3Qf!E_nLdy=0Grvumg~vosB;AZI^Ke1MPiSK*b~yVFiz28DzsbW zKSifp|67+G;a|tBdjQtlLu=&9eo#?zP^ZGe3LCAyj%+AJUd4kDdD9th@zIR1cx$2q zq8Ig4$&7T;eqYyY6lhB_`zY>;e$l~u%6KGuP??=h1RaZb9DdgasIo!i2^hH%D6F1a z1)wI+(KnByMB~))d+FfKLh&SkI&&|nx=Tux>m*G=F2*liZ!a;{;BFp}Y_(PuBuje} z30|Tzi3F>;N$;K-ByqzF)SRukqz2_>6;@O$o1#dys)OZJl+1RScwAwY-G7a1z!aO7 z#!`x55vdX|#!M7^1&)Q=%vT;!Ml?EVf9iSoo_$w?=sG(Glmvg}#K&=4owJRPGW?d7 zc5J%pK9**X_VQ6eRL%tVn9l7 z3{;NDIfE%uf|g9P5WcwI`cv~lx!zMl5adO!43pg+EDPE-Am;>iS-CMH0m9FEQ=f6* zh5%jPc)3i)R9n10N|{|e+7vEtn}m)wQYFe%L&EryEVspqWFR|P)FKGGqNo*xM(hHb zx*XF7Z|*DVvJ`gl*o#Q4w7i<=O`KC#6brVy%+`7^+?VaP66B=22{#XU9iAJZuw=Oq zW&}ziHDED8_snI>ZNN-lnAlOUn5}CAcZmuj5jZ$P@7)hIPDE%q23?X``+_%5ikrzU z5p-or=uTW&=$#K|1QG;8opVNopJg)g0L|R)2NFa=Pw4QDh{kVGW3{$aRt5)=!oG)7k3hBa~#V&dZI3FgTsTNRascQqE@BCLZHi=nU2f-BE7URO(u?A=F zhDNTp=PaR5`@dnzAMZ;_ImTVsjXEJp;HfoAHXO9J(r>CdILWyQPytDtuOdqvSZz$HV7CkkzgLR*k2b|ko|_>6q;nhbMuQVZRdM;dHjzw5RuK~-fs zmRyHM8qNX-n^(jgG&3fL01<}Z=LaBlhkJfp8_fNffHjmKQ$ex2Tm=foWLvV-CH-oK zb>MmXyCJsIRYbe#Bg!)og@ZWj_)@#Q`M46USH_F&^r4-ia|+y=QjbJ^SKkbI%!UV) z!H*>k$Sb;>h$H_p8jhLiHOtk*pj{FSD8WTn-I-uE>H&qw_!}hTMp$pzbhhWPh)IVg zc0YtSVF(%Q2Pl!Mi|M7TsZEk;A9#R}a^=tjWLY{2Q@Z9B<${Y9-?g#10-7pm8Oe>y zT;to;;wF0e8=dQm<11_KXk^gM?3!m}mQ*U!qNf z;DAXdsL`J;!625s-Cc8K3zjjMV8_K74dvi(X_;TT!_bm7jK07yTFA_tj0S^E+oHwg zLQKr(4l={4oTzm^N$kydCvU;gL@QO9y{WWCs^P$+rAk_aG9$*qEHZO6Tv+`cs-GWG za07u))zlW#!T5d7Oc1gwjmRSFtdruYf{0QwNnlKeK!231Mjw{Yb>A9Y1S+(B2Dfvm zfuf)=I#`P*OUj<$Qb!fFYUh*I%UPhBjd6hK)%8^I9L{E2Sr0q95PH`S?BT%i4LPgV zm~XF zNK|&UCw9Sg@4Z_Ty7tivirRF03J^}k#u{L#@{8W8N)fEWu8?b%Ps-oF7ccCn)s z0kP?-wE&VpZNJPWpDfSf^(b!8rgp-f1C}ac6&oi!O6fVD8;3KTNEGz3Mv0@iQium< zDWE>;I*-aM9eM({V@f4O4>VoqmCOAt9K{g3HS4s|0KH$jRR}wZdCn5y<9m@?!&3zpGXaqa@;G*|54y;W75R~W{?7~V8$UrYSJBU*R z1$w6`qCqQ}L8)bIM+5t<)z)^^Wb6dV?QfViDCKR*?w4wh27#QMokfV@TH9xBD4b_8 z?E3$IKv(qKVk&@+XuxL)u?in>VvqhRjoyzwi)$_F4L$XMQVAd+!fK ze-r31nIQx)Z&z7tV?d_YilGDypG41%%6VD@2bXVX=xZ1FWOYUDxZ5%Z(<)WyHE6P( z^-!~=jJ;4`AG@P-{C+pDtZj-69G8++Vtp7J+}y|L@$-gHb?BMK=oO>uYq=QRqyfEl zFjeB_ric)kIfeFcYcl{m|35+PHBvONayQF^5Iv4U&ke09ERqxWS46BVF3LA}^C(YWgaxS(9peM< z{~{V^(7OIV3RuL3Z%UQ|N?EOM&qBfAa#%Y0FO7ma?g;b`8auoQfArd}{O|>{Y|(q8 zQT56Mr6iAT!~AplLN?SvipkD<2i>KU5}~^-4*2Q_~=j(0d4phUIZ$ zz>1l{``sDr;M=eP$RDz}Us$Y>7*?Be$$GvaD_O)Dltq>6Mxtk!wHK#l2Bh@Mjselq z1GZ3;i!E^Eg%QaO|aWvA7VDI+o5 zZVPd^_6WH!aoZpA0_6}&&fC>CfzEsYL98`{n>m*#D*^$MF32IVoe4*X0(e^c;12U z(DT7NN?TA&@QP8L-cvY~%p@TWd6vs2UqM~J4>0Y-mb9R!u4jIAbY_mO75XZ+wmCU~ zER}}i3bU0#EieQ`3w@8e73oDrM{7aC-S%3&QuM|u3}o~Zw2me9kE(cd97+E-T8k3c zrp0!;dhg1XAz-pf*HQ)0luFORrRXVTf_wp{ar{t5zx@FI(s6?Zt}3f&Ns{?0ssII00004;RY)QJqV}xU*G7@!p%3p z6aOzisn##igVe}_#8_XrfoLD90m33_E7CvDAAY2k*ireAX0stF15FTTIQv|m63)H{2t_jYT`>)!R&u2u@M^~RQR zeL1c=&>As)RR8sX;pnLqXN~dYIP>mpXF2ay=dM!AyT82Ou4-#L?z+ZZjo8e)dPR^- zoldBe^+VSeKd|+cKqpBB`W2(>2LQ^(miU#we0`4UpWiu_A}Bgl3zDNJn~CGe`aCMo zDJw^RbIhD^Sf$Adpd4Yb@@wg{{1q4cNY+Pc6p@Ma%^4QMRT;8Ov-~GYTjECw=+JG+ zvE)=rjwPqs({znoqtFO>iW3leilK-M3}vwMBf-v(L`yOA8_@v)1Tgb(&9Coz`&(=6 z^uD)t`gDyZ8vcsEVQF^9oYe^Q0-(}vJ8vtmwb#qY3BY?;KLEoy)3D7sOMvLAsp1Hp zGu9W-sc5ZMg7_;s-(=7zG_u*ytF1O#DzC z;Hg4I&_X>eaaQ>i;K|ZdGz$H)522!2s0hF)9#k~bS4{D}`d)i4M2qN4^`*A*yL;D` zLNtzAN-LF0E3Ir=p%AX-HHJgSyB8%ru(sWy440p+&>ML#@Eu-vFZ8oH_OEY-ZL znO2AvA;%F!i(IQQ)tjT$(`v)7BEf5_&oA`oN-d@PQcN+f+ENSAA`mSSj^hIDXrvCycoRwOFwKebBVcd1iRm`jc>-;>zpahn%CiMZOwLL-+RuQcRAKr)?3^4O|9k}-|esMnzy^>*Lr@vzV%vu z`L(oD&wc0CSB^3Fw8fNLn=!^1Z>+E8(T-`xSofPb&AsBTt=1fCEV{4ubYrY}ly}Q@ z#~a_Px6eCcu5-XJz*SzW8nQx9YZ{xl#ragO`XWlihUWnX=i!JUv?`~_qe%s3T z?X~m1%hc+cv+Zupo#lGRnXA@f&2d`W%x&kn-Zgji=Iq{F@0+9E`_1vHJI?d&HrKn# zam#hiajPxH9q;fUB%jBj^EsG z*1TIe>@C+lS8vbP?|k*`eAc|2Gk0xgy~SM5_;TFU8E1}iysNsqx$~Sa&Dr+cDbGH4 zPGesa&ntr%yGIcj&uchj+??@nt@^EjuzYEJvUeA})s zueV!XH?Eo2z4P8)->q-&UDLfe&BI#LzPaXn*3{};yXrIMoufB%n&-P)Ge>*AyYtxR z?rQ3>CbODa&AW`bu07X0-|c&A=bFrSck`OB#kuO9^XBZ%wsVYm#yEFfXHK=YT=S^i zSaWo5db7`(bF}-bIj+6tX^z^hIohe!9K~JdZ13jm=I-WqbF^d46tu>GDZFjxh-qvzWGtd3zOl#+|&RLUD&E?I}tT*Sp z&N=M4&grf@?q2S=-_BCsIf}36dUMZmj#|zu$6d~p@7(Rp;mvXEG3Pd?H%D#ey1hB- zeW$nQHfOQbT$mk5R*%j7w)ms8Dc*4k=}vBuIl zW9%=kUR&RN)_ZHKJI}i6zWJ?rS4}If75A($?%VU6ueCRt(Itjfqk$QQpZ%{dCVt_H z1Y>5m8YjZghT+H>zghl@Uv{f;f@;zZlM+(>{ zc&^5YQ~Y3gIe3cSs~ktxKSi*UvCQ&Y+1$$zJiAuOiVcvltjjf;vGSAsFdSK(2`hhi znm_zjqWGB|Dd3y1bF2ecA!&Z`{6g3H&CV2Gp!r+fYMdy4>w}q{Nw!F`3s2MQPA0Ng zX4fiNtC`ugO4jHq$*|R(qU(2M2&=s#1=KHsq3gH0nC#W9#tBHb8Ye0`@(asf!4hY# z&MaGHSCS+NhOVwv0zh^$R^%bqdM%gZd0$HtOd-ev-L+mS8a++vLtFp+Mh|k9zd{^Y z9VwtJJ5qqlHMaf_S0&f87CCmLfUYD-SobQ&u2r&JKO9{m_+KB{#bhs%9MA5*J{j1R zB-w4N3s18vNs?8m0PvNZAA+z3@)J!1t^dPKI3s^4{8nT5A;$$!be5XdKfm$?jv#cv z1k3Lf(un^9p#!Jui@slK$g%WF8q(#}Uv2-#a`CJ?_wnAj&nxG=y?*b@A-L1*xoR6h zKyxgO3*j$Wt}#OZxJ>M??b>!LfD0HfKm=c4xnhB#1;AxmaAhjLimTdwj5UU`@ib?w zJ7AVyg~}8ikP3?_hB5))`EhME~oXy~Iy6g0Ejv0Y4GEZ^zoZno{Okw!FFMc8EbbZmbxKpb=e~BQ>1jX-E zR)FUh{*vZs{o(3^(1BY0fb2s!ziFChsi~YSkaK?1)IjJ!<^F1nEyoqxelx!KoRQ}& zfqHtDpHgc>8VK18Z2ge~gu=`}qCTXtbUbGo8q$2^#;R>(bs*WQ7!1FWG-csT2AZ_| z7ahP7fBBKrhcv4fJ!fN#HHxwFhb#KeFC0yNPzD`~~_e%5VOXM6ETy3i0zonvS=fjb0dj&zi0;g0VnY!w*5%Sdvv^S{)#W6 z15PmfW(xErg5p1YNTb>W{F8nW4A0p}%kQGq6o%icSo2w*=Y+k$QZC0a^r%{3`Qe*i ztlBgSt*ADiZ%DJ;;w^2(`7_UHjen){SrWwqlNP-?d-7b*^^T z+cD?dcI&sTb#u=1-IaUoInKM&*7B@*&6#(PJ}~D3YwfY_UT1u{-X349v$uWk-Sf>mS6=OlL@kZ5NSdXT$~(7Rdwp^3)?&Q% z$ zds|)Y_Wt^6tHl?4Y;DE2>yCZCTzBg+_PpzD`_}p5Tl3|B>U|ke-L18@YRk3Vb#s3= z#~5R~@zr(fy1l)(<6ZT=T=R>$uf2P%x4#_FnlB?-^X=;P+;?0z$97|Vx6gXti}9`a zT6^;)MfJUmsJ>fo+;jF8>#o+yZRfXMul3DYS6lhEduwa^&REyl)oT0A{`$;w-}h>a zuh!nyd;P6?XI!=37w677&fa6&F}6E*t~tloR(&()S8v;|zLx{4Z`ED3z3%SwB}H|$ zxvRCS^!j~y&z)~u_0_$0eR0*e(;3%$GvB^eZtv|K>)r9){*t1)`>MCiIA^=B?bp`o z_s+Fnt+&lLbM0}~y5r8fy*uY_Iq&$kwq{@YME8(CezN@Jw(Xh?u61M|2o&jZRs`b;vMnPb8A1=A$MF&X>@r@^4I@obEPCCvhYp~0J`DHul;Ga_bCHv|%iYhr-ug38E*xC08JYvz)K^Clii z0#wNg=K--WWhzZsR%9E6gwW<*%Cdt%6bi6{>Qa^&gazcZX)T3@jS-r7z#yvYCooPA z0_uA>g>kv4??jS3WP%j60rdgI(On0lI!5$ zF~bxfsP@53PbMOWdSEsTLI;~Ra4K{f5(*ZM5D$Q{{X8`YB7v782=9luNf?N69j$5w zJba6*>u6Puz-C)eJRU}aWPTR&I42LGO0f851`i^J)T3_*@HS!CG;yUV%j;;>kiv;# zI6Oi(E6HJ{O@{`7NW_rA1deUP5aV1dnFX*pv<=e-ElMJMtwI8(0FhQZ4$y9I#;f?ytZR2?ua z@iBptM54SnT2&>RMMMS~34LP9mAYx!plB_Zfb<;Ew4H2hErT~+t zdJujpABIgEt?1NStCwlk5Ovh!R6U1WmKy`m143gDWK^b;@>>TF+=2NmrW$d`Ww~h@ zPZcWwOUY;}G-BMO05K${T&cR_AgToca#?PgC-%^>rhR zQ95*18i|EfP9@&7Pk%f}7TE)$9J8ZUx7C7o87MqGRenCTmC9vliZ-p2%GUv6xjdCL zfJK2m;bA1~ji+u}fK=890Zxs^=7=uABDEIydYtY?Ssp+qpp4UeHJ73Ad2^IF-{!MbWe{uoqDM=_`! zgNRZ^)Nx>0PGe*#03#x?T1AJErlB5OCVSI1rB7y{F%yy?LSh`Fk||eeiIUB%5b+k; zRB~WdYRfX9@Y!q>SegJaPXNwm>^5F!)@pDzjn|9iz;7%hb*a>x+Hi}72^eKjxy~&% z?UXTbi>|gH3k=0)vM_)Im@GbXKti$O7a*Z77>ignkZ5pVQ7Ez$j2a-U=HtOqh2r5s zbrTd2Ty@hpM4NnOejE%cl7)fkg4-l-1g4pn$gN6;#c#pGEa7rdhj1foyt|Wq> zQ#Wn$YLKX_hKA9D@EhKPP~Ogl*Gs2TS_GX+AxnqNkf8tr4G^%zcX8>|34;TxVs_b2 z7E+!79Fqu9b`T^sNW*|+$`W+BJZ@~fU?vMM!ri7B#4wWu${TPCuVYOX2lj6Z)T6>J zCXfJ=g~oF!iy$CwBvd6{^(1K(*2@V8_%|qukbnXMFfdHh zQUL|X8C1qZqEsQb172orPZ(!y!Su)59S_=m1E5UdP&4`HjloP$6Cmy1-NX zt9lz&~Gg)e3RkE$`OFG)X2utGvF&f)`F+`IbdkcLY5f1=YSuA z3;O;6pXmHnW69Et;y4PyPh81nu!Vnq23{mr=FxJeZEHEU=kDjw}z!%bwiXc5f`dME{(($CN z|3x|*2b3eFfK&v(*GmLXu=S}pQt=B(IvWRk(`2BXha-N}{OAus7ZpGH62Xekq~eDG zK+Ts3p653y{jih%@}uAUumy>=!YbDhO^PH_)MW>>Vr9@JdfhxnxH5iu1ykIn209P^udTG zlWA5U0ji$r``@oJ(gy>P096m+U}MPOg@Q#pAR`xs4BoT@Qai8=8GJx46fBup0fiU9 z2C}dal$`*a6wfSd zHdB_4*cfp)g8*T{=Zjd`(E>55NIsAa{)C^kjETnwkEDkULoflt0tyCdT$!s9B`bIh4GjXH@mY^yU6^5A3`_Cw@gDb5C>|~f#ly8}6pDw7 zOr6TmLnrkaPm`EAiJ6m_Ii468Pz)$flaU-336KdD;TuB+FBB{pGWEes4)Dg1!FZuy z$s8zHGWdWzP_Sec8$$-4BumCXQ+NRbnE{0tzz=H?zy~&CAY(8r0@$Du^8y%VLR`=* zgI+4oH8GhJb3reN-82yB;(Pk^7-pg%VtnIWbs{>Qh)zW3OnB(nP6Q>@NjzkctJVRH z#0G#^x&a4?<4{r*STqtVbC9-}YE~{T35?%JXw5jwK(UUHhq7SUjfX{JTk41LtxlEL z*4VF9DwC3i0trl)3KTlT!)#MDKz-Bn;uDcl4PbH8xCjs9A(CSyffZ!aV7gXF9kL*Z zjTeko9gtco%3^C4B#VWXin1_8oG6Qi5{I&|0|%0YitF4$6vIpwrU@8j!39c?#knF7 zHIajbsG%T)C<;axGIS{_f(CyGzFZ&!BSw{n7#1}$k)=>no=P=WDHJ2Mxx4dRRd=2X zcb+SSs&pRLd9K<)EFHvBs!%9Ysj3i5#Bv@wm7{SUI@Wu*$kc~SeaO@aMe%S|3B|)z zOA^kzlbBiQC|=CONX(S{iSKQv=V(>WgHRqgqWV6LsJ>q}O-A}) zOehn|g!*{Q*hzq@w`q9O77CV(!*Nj0g$y>3QFzTjW&klT$IYa(2;c*oF))yIp@|C% zO@u-dq0@x8A#>bJA}0ruF)g2y@tK&@#GD||3-kg>L|ln$Bd)~Vv>0l0VW`dBG!U0U zZSL(c%)PhlvHNK?U_K_=9=o5`hvD+LWRFcK?rOyNECa7Fo{!?LNZa8&bSx#+iRd)A zRA+H|=$w?)hf855olZn#(*`sW%W)has|#2eATey(|A00jorKdfQeAhcL21M4s$xIA_ufI~YFnzvj=E;nnIj?qNGi*VOa;!qY|i9=aH&)>SDUC>|!-33YOu8V?VhhpSRNToeyi-83@wIiV&I z36cRdQAik1<7qsNCkE7lq>)(9i z^rGNv>*?~in^rlU{HIk)DEODh-IP9%WTyIPvxv*%o;~K7*huWB^|?$&SmllwpN-&E zh2i|Qz#KP|P4jFF72~s;MzJ)&%IvN@lMmxF@BuaymdfY?*-$VOg%rcOYA533F$yKl zhgBS8>Vx4p4;{zBhoq!9s1H;f5s8t4CBvog!Da?=H?0!^p^Pq%`H=0Y#-oD~9SjKIP2-@x zgAOD!;UsWU4wivpDVBj^8>VL*QML{SGf@~_&_m#}9EXp`NE)0Et8APPt86Ysfkt9C zr4Lj$ZJ`ArG25mMD(N6?nq;N|)y*LRsw9Sw$HX{`4`#wK$4x|QBv!$baNcCoC>;uB zqJS+51R0xhrG{$eaXr+>V;(tmsZ=uJEp+D`Et5^tSR@j)dRX9AE|OU(fE$-pb z0S`l`b2`|x(l-JVHc$`HQ25j>@KL2CI0$)bY=Q$%-L&rWFd!m1bjUy=FpWzGf0zx2 zqjfc@3z%|bK@fgk-755u888HBd@$)@m=7t4NQnzH_DE7a)mkKGC4ozXJ5(f>i}sZIX-StMB`wybJL z)c5gZ%wFkc8&43R06t=U?8K?wcuIY@&C%lt*!6nIu1QhBmlQvqV5bQr&vy*QDx)*D z$P7|n&&JD*CtsIf2l-|XnVu~n*Hp>mg*_*ti7CCk zKS@Y>bP2NXLNE&i(yF?-Yr@)$&+3p()@L{aVpRd3@y}bDfTu|PRV%IMc>A!Z8^{|1TXm;WAS;Jnq4 zx~M-6YPH(0-bgw5Q*D4M`I)>fHc}Pv5{~k>N!dElXekSoTJKVo^WCTmDD^sCNdx?p zT|byaU0vxKMDV5aZ{V+W2tT&D~~TQhr- zy1%^2&PLe#AD>Z}wQ*Ww%aG1#R-3iH4vFTo+Td{fjofj|i)<)4L8vK@6VNt6$wrB+gpnJzh zl-oZ$k7i=F$!A)fPWhQZ%Lvr5>|plK{g>EnI+!zmC$o@faoXWl+-ltMR7Gh@A^TZx@<<=TGfI&_&ie{sk5mzBY7XI=1P zIHIKv7oAW1V`H)(f^y`OQ#jy^F9y~^)DqROCnvNj+Rdo5IVR;)da$=fG?L>>l2x*; z{xpnnc`w#YhNxQZ73`zbn5ue)DC31?oCVo!#BuWD?5DiX)kstS8g=|_>IA)a6=L1r zLj^gS$zT~;-9>A6v0{F-F$Hsw{#D&Xz1G9Q3iu(kee zXRL$$?2j2y&wb1g+qdlM$G%lj$(yBU+rEd7gr8JPBHwNFGq`nTt28;J?^ z93rCaoowiG*^A~{vcGnj0^Kty)xs&9r*<}K_3s{*cElh5(zpaU8kf;EQ}D&DHLL!` zg(>5~_}A}jBtY`m(q5bYO{dh*v-lVFcdlVtJn3J(R~9T#GV3BGlzjAuB-~f8&jS8+ zAWKDI`B-g?@hWw6@dcK!oVsN<=DogK8jJe2@`ooxhB}_W`4&Yx*sf8g9_xq>;30*q0&QmCjj#RBhi_Dn z9>oPL36a_ob|7kv()0KF4m!|Hz95n_%bjb5H?2COuMx1^21s=u#;UG$Y48xITl56D zkXpm@pUn$1P2~3`fKnYcR!+c6(&NPChC2u40EY2(1JFKV(DLD*fhf68|3Zb z-=`|anXx z?-U!>PDKpue^Z4)1>cSi2+FM_(|sk5y*YGHsh6PtaOf@As*aLh6lj|JtBl5^T!a!8c=`7@*JKSMxju>J6)D0=<7jhI-c(e_>*EJav(q zN1$FonaPM#HLU=mP)fZDP8QJz_5P&z+(rs;jK?@>#8j?n0&K{vxRvv2*edj1qb`45 zfY=0VI2ZAik;bBJTgXh7>L0n5BYJW1dKo>gW!J(t7)K|7(T|oo=ee@Ap7~uby7M;Z zeL}WMkeg^260K{|J`SI6MFCaEAV~<4C{hrPI#Leb;Wx*bA6obU#GoUfnTZs0yZzne zlj-9Y6T)a5ws2^%Ao&jVQlLDt3}ub4y~*=w00{~bM(kcJMu>yce$h0=KxMF^1eioz z@ma+Grs9}5OI_r)%eqn(2Zztt!W!Ew4PyE@gB8X9P%KqHW{TK8Qt@&5rXZOej(DdS zmK2vJvk=rOwGl!2NW$_iQ4N8?LB-|Z>!ab}DIza$vsZ8<@)^^Se$>5exi!N!SEKf0Oyze{o9-WT7vWM!ZW43(fJaHiY6#Gu7N>bFBi`S8EL79;3s+T zU{ktZFMstKARVfDad_$1EP!Amb97!;?~P45{IK<}?+P0I>Q%HaK+w4AjY%U)){~l? zsyDQoo(a-aOuSdUDlCKRT<>W*G&YJgbk%Ez39T)5X2x~24^$eC-9Mo52NsKa^^Vmu zTdeBc@tdQ-h;~-rMWgDBk-`c~x_V*!{(MYC-KrN3pSyWTCVRyCU2Z67BQHbe zeUSY1Y|r0nOv3tZZQV=S=xQ($c?vWznvjD z2L@`4kM3?+j@Q(#F1c3q>ap7Ecua8S(yMVcDjTScU~wZ~l@`ysjTV zPdODS-yK4AQ zc<44VLuRDcZ-Nt5_PwhM@#}afrG2LYM(K4)A2#Uk2n}{vykxn^{;)gJXL#?}s@7}Z z!HV)>D{kETcMQ>>jvu9P#G9%0zuvoj|MzH!Z}Ia?Iwf_o{M<{+ix?NM8_9smtX^A9 z6y9etCyX>_shL%d-KkEKz6$s27XV>mecAXaGDI>5wW2{3g-m!G^@8-0&5}4L4-AXw zo)p(nTVckPtBw%^hmffZ0noQu(VEQh&KB(z{B(fTP%%al{;2$c0{z&5sxXHlmB}4R zlvX-8@MV5R4z)e1pd{cH5|yKCSWHEkI>|VUDBT3|GG2P!gGMR{C?-zkpKB5FhICIk zN`fefbtt+{{-gUv;lwdZLpr)xpE7Rh7-T2H9^EeeGIA7M2}t#^tbX{q7WODBn2R3S z-lej&U^sx+l7POtWZ-SdiSre2!#*DNGf4!maYKTchlIi zAE>k_axoF(c_tX~QJgkGiOLWOu^g1*(daF$&V)i7wAErLZgi0jarzWf1TpF)&da}g zC9AKQ0w?RddisL^DgLFlfyKNb@7EyM#Z4+@*?<7cE&MQ1gG2hU5+w0tSm=B6PZ`Nd z+6f9dfFzh;w|J~i+6WZbe*kH8RrcaS8lH^orc+`C1`UC^{>qhdC@So%CQzJ>QrJ zW-9U~Cb$s!1IK|*Z$h5Sq@hmOAVc7c`_z zjk1R6dJmNP-6b8RYhVswSeR}#;o-(HTsVW5yvc4%S1;^_WmQ#rCX`B7MZk26m5~?G z0S=~1dSqJNCmFK7SBYd6yg*VgGoGBuzwAS~l3WpgWnEb1D6icxLvSCuh~ z<-IZtX0@7p5{TX^JYGG4jsj=YxA>Uz!!Lsj5U3gULtQkkO;Y;bAu2;P%U{jxHd zvGpG^1J7sXfm=#7T#`o;Wjiu=utxmX z`*i&fLhgTKA)6NP8$wTs*af?_BR7|+da3_kh|pNEWEqn!C#i@mN6{ad%%;su$xb8+ zupU%*Ll(S=O!`K^?q4M|{Y!+$F?NR(@MrAO=c3cExtWA-D*=XvrbFDG+!Do*mUISY z;nbb*O-St;k*()Rprn58gbQ~|icJ|(jk~Mpg-$7SQ5IRV^$pZiZRurcy(79H%Cilp zs`rrPmfs)ioi>KD<>A=l(Aw~fDY4;?)^NarcZq>J{%((tRPviUJX3m;ffF0{=)uWd& zCl0iTmNEhrOM41nHWm!KuW9zbzH~Ck5SM{LV_@_g`M4`9FEIAVc(2QH)lv=Vr}Ljk z_{TljiAUynU%8QRcP;=I>fEaoz2p_Yj4SSX;|rB;iI0OW_luEBn-0_Ex(vC$D>0>h zg^1SXgq52i^^F}0d66uV^s~)EF#m+?DN=CEi?w+epdls}X z#$p^vpaq!`zG05V9Wca(K#?0uYw&EM4sl%&QdLK4PpH&IURuWw{65aL zc|z?*?-#tLyEkC~@!jH-u1r~zphI49`#-T}5#!6mLDoFTw=g4Pq_P0S&AZg7v*A4R zT^2A;Vku>_?S93!!lE&9W`lObEIl74N=raAqA%Sqdyh5YCDQ$-X-nf@I#&Qvgz(pn z(hY|)NF^$6%kfMA(O0)CR^>OMu7UgVU4C9=C1^&o@y%m)&!X83jVT{OV4dIIJMZmKHHWi$+ef zQ}oCLrh-B<04@h@vqRp~b~9zx)qtW6BaE5o3AI^ICpdw{NzvXMj$JIbvQCq8M5?_1(3$> zA<><20g+l4OED|rundQQD5aq?3`TjeaKxT#)!~Pqj98W{&iw;a($n$}qsNFNzxwSa zz)qgzVYyj)z~l2o$4A6iH`&@f{BMOOIAYeAh@|gy21w+H!JRQmQQ@W|z6>)Q-dOcD z$-_V4xlN7OmoSjR7s6kyZc?j2xJRab9f+;^;C2psPrdqJ79rrKC$E3%ZXT2=@;l6|n! zZH33qWx!p*6?_~M<`Ezj(f&dM9tH&!eO0skQk5;%ssOpND@8R)(p7`MUT!VZ%}HSz zJ9(jM@>LtHJm~*=v#W`Go*U~%BOk2>%|!HpC!u>60Nzapx06>SK(zz_Zb1w`FL$V$p?w5HAj*eo z<`@g(QQ{K+UYGY40*B|6c`Fty7x5w=bW$tIP~F}$Qfh1A z@a+ScAmI;~jA(9iD2Df@zA>N8Efp+EK}A|$rdEuRfFPmiK^jEIBuGFoCymBf{2%09 z>H<%Nw6d4T593NSHeh~vZSn)?S=ZMvAqkKa8=ke30q?L}zxHMfoi#52(qKZ2wzU_r z2&g^46zwZe>sUo>Yvl^k#>)R)=Q(Wca4;|CGYMv2^M-j_fn}uVyI`h@%A)XZEr;Qy z3n2(*@sIT!z_zjuX|{U9uUwz>m+Ca#Hpq$6Q9@`m*GAxW(@)YzUFNt>9<~~jzXp)) z9vIYtY|kuhD-LU8Ih&%?Rd}!wFs%$I(m#4XU_9HD<{mR3lf%&5=x6>U40xp^E`-5~ zhp0aV67f91Eo*KzmY9$3O?eSVF6rON`vhhzmYN@=}`q%$P4EDw5&QBx@Ri~tZ~xenRPY%0KU;>`xg zN)*MBF-49Ywgt ziJM^y;wJ+^^cVsl03Tl%@fHlG;8Vrbu*_oJyr1BXI+p|F-3j3B%aGKe84ES*m|CP| zjMRyp3&S+lQst-vZz5MyPf#K|l)>zB)Uip!pKjcaNq=(cV$Qe}I;Td{Z*(D%VJYtp z-foZFDnH)SmNyhPtF+mc+?vMn7dmD$7$wg3@pUS`)B0hY9&{{F&ZWj1v=3@tXuwx0 zz$>;8e9bO4MNkVR4%hPjq=_i*rE+Mta*{f6%rFqyOuMXq2~Y=Wkp^SwFlE) zIaW;aMGqJ8So7j8s{ubj`r5EgVse>wWBq$FB>jZGLOSu7Q;eXFdzh(9^J?yGL1T|8 zU=GfeiObGz==8%MjP-VRIA|U~x^{=I(x01vu`~?{1E^8tU(i5z~@G3n_HVjjn zJ0PeLG%~h8%JRY&LNQP+B(w5QfZz6kBJzV06R&#$SEK&&PbA$KS#uZ&4I4FjS*wWS z74`qlGPtr0eh$#?LyMWHJ%weq5?8R8<0BiK@n# zT>%&~Qi>y_w=Axzlj-+^0bMbHQiAv8hbVKmo^6&2Dd8h2t>gVb~* z&-`~V!ozsrPNFI|ATmn&_|gx?PvA2l#_f0)SjSnWX!GatKy|VPzv?3V`1R4$$9K7O z1&2iNRb~t|i=}XoqZG%J8`{`BChb#rKoO-N&D`VDUW+E$Oh%KH9Ijd(zch9;lU^Z8 ze;m61+O)d(Gu7Fp(Q*Fq`AcBrS*}fl4!>c6B>Er5-m7q2_d6nP8b6@yVkDfMr83`1 zz$?k8*sgtgPe;eIz3lJ~2C<0AnqKgmF%yT{eS43QS=?Dv?Smh-x{RldxlL-8iih*T zuED3aA!8WJRlz4gDJ}z7$tnY%Mz%%oi&%`cW29tF{nb77<5L!)tDAfgU!!9Y4`VxT zUUA;VV-?_zgOk!SX@pG#?vI0MBpc*HY8CU;E|CEolWdE^3fEe+VmnNH$~np>(KVy5 zs531b3O?ym@e9307Uy#UtUvsr&%9pQ2z;w#u@h&CBAIFHb6QAngIFX8uiqt-l_E{J zfMM4P9bp9xj`?wbO#LR+uO(V-dM6b;scNNf(30}4F2;OjJCbEiFoD8`Dqdc$*3b4L z=x^{*oNr)@&Vh9^ns9CSM;%^a zqIA(c0B}H$ziWTR2u>z%#VYw^$X6lg_HaW-J|yN#3*datWrew9*?mwtmR3Ijfej=z zNtFBRm~0DV7cUmp<39zC;9467S9rR#R%*D-O=vCmf!0b%ZJ>vUrZOdcn$JV!V3*~V z@LoMfp&8u-(=G-9f`u}A5+6gb)!sqmtY8An9q4?-lD(rXE{Gd_v9#!z`IqaqKdKc7 z^vk+}EYV4HT=U063to0e{jDG0vz9+x4F5gYDp!zuLQkVKSjd_$V26RJW~E~qI**D% zxaBnXwo!5d1RYyM76dU_t_b8SPc09$sX>PdI!IyNG_xUbUhil#cZ0+sq5Y+OJ3yH& zRjy8P=#QFyH$2|o#=I9`iI7J10ZnDfNYdkPFa|rD_uJdc91Fg_AStV86;xBx7S%kF ztg;ld?s7qo!tP%>;$NJ311gR|-qF}e@mLbJ6R#FsK?H-ZGN3`&OIVi0)CG!Mxf>P}t2@eQIZ%Er1S ziym95-9JIC%VV_%Ai@(>C$k7fHkZ`k4jdakH=^+sYAWl8ZTjGv$E}P^6B$98e2rml zZKQR_^K6X%Hi{#V{L`6k_5Qx>CylS@DE(!b1x*}dAR9{Xv0-roi*2wp!{^ws%H7i; zq7{e@{E+~B4j;|Q*ke#Y1;JyO)ul0tp_U%v{7(WuW{h|RrJ<&Fs&c6Ne<=0Fm z0LZD}E^v>vaqW%1lbB8r{Zmoono-WNM*ta{$9Nz zp?b^^ev##vK}rpX=X_|L0)_)@_0@Kj>} zklCRjF}!R9^TZP$mO`$dUevH|rHyQ=E>Ut4qoVh#JdtfrksqlR{4#)b2c8B*fHKPp zGo^vii3wsXTsb$%utdBzG- zB-jw;fRTL_vjkQpsqd;A%c!iN&hfPC9_JWLd9M|~B)d&$gRPuB_)F=LCe(9B^eo6o zVY-^%*p%Rqf*@RN5KAUjsfaUzzh$?xk3nZw5!T{3w$LFv^C)kU`)j-d5FGsazFS~# zXlhx8ti?zd7O^!g61GFXPM_cUKXR=^Bn|$_x+dEnylBrNo6zzgHb#k4ac3w;aC;G~ zItO7L6ne9*3_2yhfM+UD^$77B9~a7qcvO+=MC#+>a_Ff69AbH(CsUo>z}m_8IX=kf zmU+Vf1H^4j_na$vh)wv{0%0!G_B_C@CG@}sDi^1pS!R{!tKj8?{ZzKuhx;NNPivjD zNd-ko9GQQr78JBVvH}U-sbaex-3tRZd=)|rk>|6po?1v)%H@;+rQ<%-=UZ_(|~E1#uZrq2lT&nNP^G^3DFfy)(ajtxNFkx2JOFHc{@e~7zMw6 zK>t}S$J$FJ(l)hh+hE+%EHK6*7+(q2C94k+-d-_V@#=9`R$DD{UpyNVp^~;MI|ILZ zzYwUbDqL=c0a8wAuL+A~BpaPta1Pc~M%6gxbgUoQ{Dky&IIGsKg2_GE?r#K}95mXZ#QWI5#E` zaK2sjBa!O*pz9dC!fEYg880FEO}fmvO6$y-aHwp%_+}!7F(7;#8QG{{W-p5 zL*wcPWgkX9@ET*sl?#`?02CG(vHzPIiV)daXbxT!LM0%%WrZeX%6GObPYMYSZC9>s z$Zlnkm0&R%{IKHqt%)8c$d;s*##th5Q^_MNgCwCp4{LSTzKz{~K(455!~l0fCpXbS zpC@k4clxExclNQ|Crxp{mToN4`fhD(!rPlQ2%VYu5xjM;6G>_5ffETD7l(|7ZgoPq zNqztSCh?{FGPSN5_IDT(FiFD!aEuyv=l$58uV8-Nb`3IizRjVN6ddc&U%yhR133a< z{Gi6sl7|J^U!nU{+1$g)3iFs@jb=`gB*xWcjZQN09s*tb^i&sFZ#;3V{x;crPt%z) zs4hMXwZ*5TN?_LeG!``Zi*?2^En-%dWLhR4*F-p81OIVAj3!wWHf&eGTz@o4Uc74` zlQhmL#60?mZu)?UQ^xyzJ!!?Pqi5U>A2Uc+Z1RAo@?e6xy|Zx@BmzC@I{Q8^m>@L> z!9G+SMh>Mj&gT--t&s?1$K>&2&(V{L04Ox`eC%-JB$AY2 ztqPJn#xaTE-{Y;&qiQbX3%QMtDj!E=fu{HDcxdly1fc}I;TM1SRft#%w6bTdtu1d zJJ%E>%fd1s)@GKHj36w5QF+c9hljA`@J+v$MWD4sK@}{`YhknN$uvUKW_0+xM@ZOC zPD>3-@0!s%=_RmtDF;Zo!q1nnCp`GYD$QGYAc8b3&|E58~sx6fhCQhN5DV7`|yyCEdgv)Ccnnwu?y ziaM=jb}K07q<{Dn?*B>5K@riciFm9;v+iDkY$~b|R1Hw+$+~J>DO26Lle=DcRh>Bl zD{1}ph(ahY?wH8-N@v%&%eFt?*0lI#9?pk^w9`kL#ZOrJ=+k9n5Qe!HWp7(CE_n%o zKT}Jy2^U^=WpO9~vvia%%^tp&Oh2WIekY|G7S9_!jrLZ+UtJQmjIIS_M--X`L)OL19!y##4&&jd1Y?>o*T?utoip_SW&kMyvH?w)FmMO?oOhs7rSPVTZ% zKqGd}acE>o(Kj6T?a**M02owcRwFB-8RurBk7$aCS<_rRekUXpcSKs}mkt2ET9@-% zqSoc>znKKOZ>9r_Mo-t>gx;M&&b(^+5*NLnwVb9BCbwZ1CP#I!fR?sQMj@80yYrREWKsB*Mzma`~Hh?7)(~}PDXut62 z3@Rfj;z})3*~f~s{4gUjkm{lOvy$Qv*@ECjZ318VI^KMB%tXV^`pVb}*wP}M#%U0! zMOPr92u}u&DYF!HqC>KLZUqtr?Ir}+syUvL49Dr0PSmy1v*CnE7;QGa^LEMMUvv2k z(n%G1J;o(kC35r1B}yx?0i*_kCoQ8hYewYLpnc*Tk%farAExB4OMb0}2-1l(OCZ_FzQZ6?01r{!n0`fQ zwtii#zcU(&)hj_k4N6+Q3`7B$J)kz7kjs^`W2wO!2I#SP6o}UUFLz)al;zsQ8}htd z1^nsTg@#C$7+dZjT_$Aeyazjo1eP-g_J%MQ<1)59U3UguBk-;$ZwUc3G^u|)?tSq? zTz+fAC7Z@tybf%q5FuWxi=d~~2looDfiDDj8+#?^VzROX*n_osNU#~~XE!=@Dr|k& z-Z(oXpKzCk@9r2JRma@{r?Q(T#5+ytGV#tn@11{hBCB3z2@Qdx{eOyii-qY;I>_QH zUp`_i?*!mU&0qNji6_>qh?`XTg3%m!fEuJeMWq-$g_9KhpcmluWoha=piPsFBmWzc zjBzS6tQax^IotW%=V;R`qKm9wb%nLB7aLVvgpsP{DS1?mu#igAX=;-@KHwQsc2N#1 zBtINchCfTxBZxGC$ARbgk8~J98WfUNO(-FaOx9_z{77bJ)&`3VCnOh!n$)+YYicZf zA}ewf0e317Vu$2N6c%tuKf<6V_K_a6px}idHgcFap4dDZAEt=Y4OPGI%d7Q19TcUDMKj7~PweQB3M6vf5%b)@TmY6G6^ZwlFqTA$m8R8@mg& z&_N{m5Hs48kMLZC+K4R{Ye-vSQ6*#RTOY<*Nbv7(y6{6du?irQ6Ts@jeMGG4Y(S@r zMwG9icj_)`&iRrpuE*%@fwXtswMKhtD}~1dnaUYW?2?BNX?j+r8!o$<6Hv zDWImU9m{MA%H$!Q|%gJmrOk7fKPwqyjsANO)6m|S) z7vqW^iD@q16mgk67$dYty9MK>51ll(@!WLV`v5o$cS==c-7Xz8PHtFwqWTBEwOlf5Ir%%WGR#^^9g$K$uZAo6*u_Y6r(tATbzAW zcD)ZhGnfQN4dCER-|ADC`5gujFt=n*DM>Q2Ex<{>XUDE9w_DL~(XwREK2mO8ezA|q-m%uVm zuUK;nZ;@D@)B*Ok*<0-D5h2*WNfw8S#)#^T-5N%3h_2BYix*##8DjNYIj$ZEZYs#( z&N<28-@l5#R1`^uHa-NG2!{-7AVFC5Z4v6sZ#;tqlPt_8YR86(3#u>}v;sR}1?h&g z!w2<_^_zd%d(-A$0|0!NZ=?M?h$$4n!z*asu=Gj>1vV#L`p4Vlg5Js|$O}_Jr#w9c zq=aR*&xTlY6&1M=V~hHi+?$n{YV^p(AU#IPZmwxq77m%#GVVP6WN;d?-4r6>dQ9OC_|tz2Tn_JPugK9i)PXeK4vN z#XXG?GmwV#N-gcBpczoPYp1w?6-WE~+=)Vols)?F7w-@K;Rv8pNb!fYTmJ9q3Dc8Z zEp{_I&*~lQPwL@f%4n2_9gDkynCfh5siFkQ>Ojae))9H{XVTv`1j~?gx=P*9=0{FX zh@U{;lZlVH@1GV`>otMlju4By&CtxGW_nJv-f0^2cxWIPH93>sYJnj3|v5WtMDTFT^4t7QS%Fz zCTqUn64do1=3l_Sgpi0N`HJjJafY+#&;t`jf7NO7lBvex?ru?&KLR694%Kuu0qr=j z55Zk70Gl1=I?bZCKkOH^cS87urfO&+Cc-|D&!P#Wg#mw>o&9}?Il1hPF!)|}d6+X^ z(wLw-q;-fnq-uo{hT0ugKvQXz*lLOiaG>LM`ZUB8K~lSDYeANk+?VCKA&59abk6(D zQDHXsQ!p13D&X3`%Oi@g6^SA+tK-=AwuOHn`LYiRr)E}NzY#?B{FXJB`n>_3Q(%W_ zA5>U;foViSIPI4YaqFa`pM*RI`ZfFien)u+F8&rGc({C4eu?nwE+y zAn}uLZ?lZ^*(OH`5HgANU2j41#(b!^?08_Ar^)${-q7%{Q(Z%NA%iP=BV@dJXa(oA z0RqyGcN!H3Myo~UlZ{di^~oWJC<&^OH$TM` zafrVDUXGi%Axf{V)anY{cD@Ba>S^#K02JRhVJebh`4KHO^$_m2?P6TcF>*%UnF_!Xajr zRB}KCVdB7lq%;Ftj~$7hMJ;s^Otb{8F($RvhbQc3q;;9b%W?ZfKXoL7$gTG?s}$Ul ztUZ22Gf!@Lj1_At@3^tdte=h{=C%L4>4$wo1smFs=Oj5#$izsW43bN3yHmInCF1;E zNrK+WK&f4BjSNUQf8HUUGP<*TqNMbaO7JVKUy-2qv@fO738*%Raf8~|W#vzcMU5}9 z>89SBJ_eswX-CkIerc9{R05a#_#Bgyo<2U(8LSJi=1O zv@>SxEN>R#@XijJ#b|Q0GC!8wI<={RZ5`hL%$#kJu;wc~P!=f*5FZw0Ph$x1Bu+pm z{x*VY|N+I`>Br4m7Wl7u_B^~o^0t8 zY>5%?4mzJ5^kR1M9x^_bf{{8y^O5o1yKX~&`HsKMNsr(pXJ|DTdcuAZ)r!-5LWr2L;p%nju;m-Kxq3$~?`xnFmgUcyM~U8&po$CV z=vSZP>bK1$mOf)8GIsJUyjy+m2CkW%*+{Dk0yaS@kN}0880EOva%A`5TC30Q>4a__ z?%SGdxWfR*wpge@M*rBLV4wx(`)%exaR&8g?Ymm+=Pw$y0qAqATHXmR1rC*|V2U4}mu}C| zmYDfGGK>%%zWu~0#q@(6Q!11wajJS34<3#Cv@h&o{Ai*^&jByFNMah}aLwUCthv$F zJOHMt&0ZXO)?GfED8NkW0p{<(=8imjpW<5~$+R+oWOo@?@!;zWJX~Cwn_uL^$$&&a zVwz;tSfI``fx_6`>Xa~ZgVh{5;Ct?~qL;W5T*075MI*+R9zy2z?i!>1 zvBc*PTk}iT2pBdJ2kPjX z@P%DL#6U^!6y_t=8-@x@mROJNSm1*`@#T!$#-+ANqR$<=cV_z!HMaQ6BND_*{phW= z6$|?7-p+(SZ}F~69;Q6#U%Za7(pp`RN|Q%_=`KoHsNXyy-H#OT^wf*>o>x3P>?B|M z-;2e64vrQ9Ihu+V4^9)2!gPJYGv^7b{l=*qjc^rRjZO}DF~p~6yGXaD{H7S+jW=j$ zmMFDQN9cG4@3Z8ps45Exl~kXFwMPrg0&$d%==4y1<{yIWo!UPAlJPP{`UzjE+>Xhj zqJIE;?JTDaWo~41baG{3Z4G5^WN%_>4KXz!Fd%PYY7IO*FHB`_XLM*FF*z_fIX*sf zbaG{3Z4C;jflOOO=;9f2KytbX!fvZkRYZO~(U4n_QkY(ZOj-^qVW96xlCN?BFGrr` zA}>OyE)(@=gp7O$0J|@I&s~B|pG*L|SSJ&y;3jR~3T=PTF>PP!dq}uWh<-H^W*b&2 zxAU@WZ~$!ZN0_nokiyb7w_*-Js=cwk_>J&)X~mz*eISYi#_kFirW?iFE;j6hj20do zx;@-2cLGusmRs>St@uy@HETZL0+YD?Oe=pfYwazI@}j)<+?aWyJM{ zKZgQQJ{xOSQT8gP5a#=Etr}ugigsM)!)ww1fOr-zVeFGb5-Rxh$So*=U6oU}3-P+s zwFR74PW*@+Pj}KdlN8#H>hSO}=z>&7xOGMOlMp=2psFtcfISi$RGkP!0Ya1TCA9Ge zhV?~xpfFpV@c`)Qw_174=_N2lDmy@f)kBSML(Ee9q2y{gC6u^vC3CQ*h7@l$&b$E5 zqWhNl`(nj!evTGS%R^G~;`A_Z! zk}Bw-ekE3cU~Ca-oEj@;c@XLy5P^@g{X*kpdgi^0KfSAA85a9^KOg-^q$ATF|KSbJ zp58D)-l_vME^Sh5j0)`Ar0tmJG~lrjrA={QmzVFv5&08*BBR@%>9t|=D2EHza#~Ot z2^&BkV#z+)>YEzjf-NHomI_=jEZd5TR9c~qBp@=;xheArun6th!u(CTs~BnMWYT6Q z@C3Zd5B|4>mqe-($|NS@3kg*arSVX(1CG#~*_P*HX<^jE?v+VshMv+5-cA8m9vLV~}d^Cqgt;aqO ziL-YWs5QI+OP*ql#5YZ4b@D=Q^K&@Hs^SnZhWvf*SD8v*oOW)**v`#F=aUNJ3}o;k zJ-7fXDk7F2GboUd>;s>;wQ~AxIKO)9P|v}44wQZ{|C?{jauInm9AHU8^(Nh;f_Upe znw>C!YZ4^5#yz3q-Db!C2U&r~pE;vy&^Q>#WuGziXPPN?lI};(FF;9!uVLtcI>csg z_Vn&i5s4#1lqSc;lK^IM7g7h)8xmrv<=YxCV|h&iwFX`Mdc65ftjto9F z@jcZaDKyVb?AH$WqHUg%{0Q3dIOGjp!d+h-Bf3-i>4~aea>AJ>i6k33kriRaxCi2T zt2U<)>4OhGMQ1rY(v*XuX)eQK(QlCnc^0DHnENrrgWdx%zuR9=<}pdwf?*b4E|S`A z7V4%q^?|n#FE)x-^gFOQG92N~9RL;hm}5NT0)vKYYVdq(+fkTlASAk)5gVa!6ue$6 zPI`*C-5HfKo=G*-GDjV{w0LKFjoH5kG}e~H6qYNW(rFxii$vq&MpYG6@czLF6}O9Z z9lKhD0;GB5)e&X6w=v@0%ADIJ>`3By%Rzu>cXng5A)X!%a5zz)Gr@g^Wc3J?jux^5 z{XVgAfa$H5;dH@_VeumlSSfFbVri&A6mW9&eU;djGUvICBGOOV5y;b>d{u7ojJuF%^arZx_hOE%@YOq1o8aA1HcKHvlB~^rYTM#_;Kk6=V7f%rGP0 z`S0RXbER0z`B(wCI6kQK3tF34SF2j>(fwfcqAbl-A3K zWxK!8B%(m|r&kXeY%Hm@6WqF6B0*BxUMw3*w=v~Z)fORqBDJE1+o6AJQE3g_$I2PR z9g?&SE0BaQuMr9`b}PydHfazDVoT#kp9|u9!coX+q5LPiTdnb&fKy5hUCy_-Wjn2i z*TNc=z>b-)c%~VTSAJ0}j&0P+$QuUk0cs#u5Q&nq-%c;HheBYN10jiMn=V1rIqDH| zG0%GLp%rkj@PmJXY2-eDQH4!ptPaa9j36{NMwLQ6%L5@*rf6pkMvMdXfOI0-yLtN2 z>w$5uE#h;TSky$W#WVWPAErUoQQ-0I$`n!_ov1wRFiuG5<0=dAGcT+;c24k=#tUMi zN+~XC?)Z@XjLK^OE4$Cmg{oKpB17>z~?-Z5}_K$p^&dL$S&A=lZqBQ4v@E0xrHT1zo%? z%qTV!0pcW9J0Q@wN$4CWBkVEnD+D74HC;dFb#CQoTjw&3yip4*#W?lQCU^ z*sQewoY1Xj!$R{Lmu|{_7pazZS8?PRJ4OuE0bv=ii}-jzrmT<4~rqj+t6P70fe2F%5PfmaLkgEpAO`>Zt$h~ov76_R) zU+v6aFoe-9)jVZW5b$uTyJ^6$DmfRrcKO>xp1*N5`?Q?hyR1V?n z-MQo=xAt|yX>kY|&_+K}+}~+qZYhrTIQ^rcTaI_(h}GCmqLy`=0FMlm(Stz;k<8_| z>}_XvjPN59J2s}K-h5eP=xP@sR7@McO+tX;$PxP*~&~Dt( zs$szz*=mYMHs*e|& ztOO85F%s>(UxSvv3A#R1;K&!}7P3%kW(zIh5WB}J0PcmqNmkU(dihm+y(h;sIWxrr zxUFiS(&^q)t>y0izE}l)y|>a`e8mfFy4IbZn+22niRz9Plvp}`YXW+_9O1ZiLWzDs zvz{iMh>;MKDpXhTpgFS&3QAyCwOgX4g%sPn!k_NNSw)^KR#=DYPyeZ-pEu8SeZxZZPu z5tD3o??jjUE8N9?g1!72K>!~mTlT8dX4<-5X=M1$@5+|re?plYjjuu@b2XlNt}9~^ zvWxmznIrY7+eKenbD|5*-7%|%G`dE1wU2V>v%t4Jj!BYFUak(S(VX7ddu0k2VA${Jdx3LSkW5n87TDa)j}`*)P6jnMjye`}k1h!}N~?V=X(Jq42a! zw{>&cSO{WL&NhPZ&4-jaLBqN_(CaIOaT!HtL?wz-1`0B&Wl}NtE@SVz1qB*krFxb{TG9VEdx^v)}WjSpqr6fHp_a-=c^lSMzlWHr4~Y7}g*PBXS#Ot-Z#I>El> zBzhl;*=CiBY%IZgIAxzI`5t3sD;SiT?%AhS1{$76-(kZMfnZqQSrU)VfhZ~}Bviwm zS&6uco-&Hg_y96AJT0?+YOn~D`ez{3%}^SMe>`K>qZ_{K1{Q@GE5W%S1cF7%(Xx!C z2e+}2*vMkiNmZSUGxk6*q8m^J!-JJz3_RF6rt4mfj9se7nP%LROJby&;00QUbSRs&bQ5qIwKn=RdH~KU!Ur0?lUThU2@(g*SZ9ogxF?=5 z*bQ8pT#j^f6ZMAShI#|j^&#eDWSpWOn~JbM6Sd~b3e4nU+Sj zxSK|Oy{1Z0JCNZTiXC1Jhhs)SkXXIJ0#x<~ttK`GlJUyDsz1dRE5}>Pge$2PQltqI zs&6xtaq0h+6{QzTBevG|E(?h55lZcjQS!h-?*sYrc&HKeemPf>q6RO$HK7N8W4Wc< zPYYRwKsxAd8dWlaB5M~wu~A8=lId|;9sVTD467A$d!Y;qYV8Dq#rv+YoT*_}Ye8H$ zsw=>)@_OKG1&Cw&d9%aPhP46n#omWCd@u&P=b6d<5pM<}&BlntO>_Zd>3 zNZYZu{H>nC?KLsaDz*N;wv5=|u$8U33L>kjRa%-ccU{^?Xyn+aq}Aci5bbfMg#v<5 zYPUk%P&At2taj)1(fd&1KJI&81lN8jAD8kf$YqRr734H*|2V?{<8hgTJ}Ux<3fn)f z5u!XU4N)Fv5>yb}X#1Q7C~BMF48F6dEW2PpT+((dWweAfI`J8pc1nMki>3a^&2ao8-fnuqB@v5vgZbe!W~BRB4Z`ERbxh| zfo$jPjTmILcND3$_W)Mj7cmkj?VL%JcE&Lcpd>(Zn8Oy3&IDcfuzf7G#2MJhfDg( zW)!UvxePwzMuGHk!e^lBhq9n6kyyPmc8G2$x?YEl6=L9n_ z6dc~e^&vX7f$A7=vTsN`WrG}nSHTfjg52jr`M8X~o$5FQA(UMj-yhXdHBncouacwf zkf^6CANBM(gK)6&Q4b795MD_vAX_FNS+`>rPCn`}Ca1r31pQKhbM)Zdd3IfDhXV%0 zj(pAj3FKpem}uzudV}q^_dUzOqe>K6uR!!6sn#G|fR2IEslyA_C zaxF*>8sr!P*+0}#Mst<-#3hmp zsX8+5$1e=f+6@I-hnGI;?TkY8s8RG$?|Tr*CTk>vH#4QgQU+j$RG^3i+p+zO#Q-+F zX_>{L_Y^nT^zKp);d^A$8x?+RC82~hEbQ2FtPmsBSn$d;N{QsTQTM4A>Yhd~&`W<_ zdV`slnDVBR-m)Gs(LOqXPWyAxTXRl&e}q!ILCeXsnc8g;f&?Yd9S9AnO%NcUp11j^ z=U*C%_MnU2wgR)@6P%0Q1=^?4zpo~^wp{dnEdvuT-Ch&R)54`2s?dWc*o)pWk(5X; zdfzw>!}AP8?^}SHsC%JLqbEK?YKM`9qhR_R5CwN6_{if)EFj#XvJ?d`Qjw#NM&jai4`LmtmWZ9kodr^7IGeCH^=l;C6x6rOQArq;fKx{upjtg6=vh8Bl)L|k=5WE5RksfeB_ zTW6{dhQ>%TsdmP;MTwUvuN9U{;Dj?!HC94WATjXGD$S@Go=4$L+10mTXz`fEapII#YcwOnKW=ep5E-vGk7)B^l#DaZ*wr*V4+6_k z88;LaVZ9YtN;lZ%J4M8hxRn{RKosw|4`YL-(Z@6HGVTtbbFv3!#-Ac%RAbnHJQ+7UtIUyJ1vBPS z#AiDsW;NC$Ot0!UuLjWC4Hma~^Oo)9N-H`wt5KmfV zJQFRrT1Um;Y8lH27F;dkPr(2QrFPRgA7xMReK`_43c%T@p+tr;uBY2;;`t!e0u+3j zN<_9CHr0WDFX+=a9WMfGjhO`k#JL>Z;iH-KCf(BQWxW6R%5GLN{Pr3 zf(SoW2$fQ!AuzUTI*zSsQZAyCWN}fm~qA# zd(d*W$oS#UNeYUw1gnjceX6UW340#JBHi&BkZf9pQPhg(RL>P?6y3o>YvuJFM%~m3TB^q>TbxaBs<(Yc8EqpOQ2Y_0z0!>HBSosW zQMdReg(33c1&abRLuc8!Ns*jkc>l#3?t)=RZ6X2LX^i@K9r9OL4}UXfF;P$ zR%0jX2rcETHiOTY`$kM!5H()u1O%z*!!3m36iV1hCqJd77&mtn+>_roTE=|}GA_vY zab`^31}6Iv85{PU#XdFTMIl6V8;DOfTS(WQ&I%x}4Hzx;_0A}|a9h37?%a^-%IYRN z%sAtWyC-8W3eftvgI*$v9(4#%snI?=i)0n@%+ymS7Dz8M_eEZ56PA0s=R2pxT5FLs2iR6qd@^U(p*+ z#o$>_%(87B0W58VpJZo`XSE@q(FSI$Gd9?|845iz&NyxRqoG+PBFD@9R-G_xI@R#o zhxA+dFb9wi%O?g{OU0l*E>|PJqCLHUNiiW9>t`=WS7{K#+BKWX$61w2Xu>kiIOB}V zG(~)z<^|mu?c)RphlEF@wA8XPe`>*$KE4Jhtercd747+Wi%U=?gC~GKp3m4~fVI>Q z$;~+B$T(xpc%dG*zeWPVIoSRUm=cgfbQx>iaq_r= zizvF?A&L(?lC=xG&_(ML1vgT^sI4>Ih&%=#0Usxxam*cMw5?!v;_u1zaagLqHiv5b z6yzrvkGhYe9RBgJgQ%z!Nk~fx-;JWGYzN_lS3#o(F#;#sgM|g*x&f*>S7Ko4prVpG zdnjdeP9rFuaY0OWN#76wmUe0>iuzHxD%H!%QZbGKe*qe!1E{qap69r13q+@dmWLIQ z1>u#CdKMN&KrA~Bgi^9FM8pZvJLA-5V*^;@b*hPa=RozIMFu8sf$A+nkf`1-$w_sS zN{8V$sZR1x6uftSE^V-VT>85>R$IiShkih)0;o0(wV~dj4Lh6Oop@1gkY<``5}jXF zE!{^H)$7tny)w0_Hd(V7vdiEx5Y+pkkBT3LK)R{r)tWJ^Eg%>l-aw;!mMxTo9z0al z1P=+Nc59GLpk+A>fBFO>i@`aWUY#0xaIjPpoI?gC9&%pbXPqJfH&JgrL8E_!uQM?5 zZw)>8mpSQea!)0{aeYvTp0Vlnn&^qC8+A4zTaJ>#z)>CNf-`PT#yT?)S_Ztx03s|P zdThh+p9??LM15y2de=USLl51H-ZwCE(K}<$aY+zL?d}|i_P(0n+X8VRdXHF$mqHLH z#6=gZFvU6FDLWFAQfz{ zb~t#UEY`}BrKDot&FWo5RTpl!O7ULt_=FV4%Pqvm)c+Y zA^3f z3~Ge2f0%!zc3T*x@cX>4w8KwS0u40Yhn8`lR`XkbSxC>Vu`HuG7+xVUN)b5tdGaqP z(egeP&@H5?tpcxAb}8N7j5z@Yp{Si88nJHx^#Yi+JaWz%t5~L40A#INfa;amYO0qN zpkkS3Dx1kBi^WU|HbGR2ZCF$@(D&^Pbq<{|H} zfN_)FkL2dw|IwEo+~O#HPjcQzvcxbxj^*ZEEWO!%7yte~9L*k3P8_P+U^yvL0z|XB z+#(?Xq>xiSEjlo>^kjTu4D(@=s9RgRHKmTC1Uy5?hat^_8>2B4{nPeJFF?8usic4R z+l&%*gwK+84$14MYwsHz01jO5cTzyVUK;SlJKoIljq%zsd1q<(Dx4DShuBOw@bo>o z0Ae~kII|0US*MeWjox1J0LbWvky0DEZCy-*lurvD(odaiM|+mM~1rp?_YiP;;Lm;6H! zhwxp<9YNWhtq4&HJS-5`elxvG$n$WpvCF%g8C|H6 zw!YRLogTdL>g9I*-rB?MYT`K155C&M#Hdv?+fD}uBG1)@GaADYbM)weFG zm?$$r!pEi8rQzRBQAFg+{Y2LjVs>$PxE)kdfT&F4CgrFsd%Y*UxO{7$tN2Rlr2Qc= zy&&>~&2-+|wo{V_59%l*0N-Gyufu5`mB5i0Lsb5fRLyDUY2mWWDf;NuMQwCvbSID@ z$&@-Qm$Ox$?fIaHaXd=Wj+Kq)!kcY)-1{gh|3M0u=l-n-S8irEBYFE!Xp)an>=zaf zU{G$`-&Y}uf@3g-kOvni6$gwrX_o243_BMvylA@xx^3t}yXTrP1s}zKA z!B&mnC_79-_!Z`5p$OE*;8~$baJVLKyi}`I#^$n$t<0<}RiJ*i92~J^7LU%wvgmnm zbWw;g8SG(v%;lE!66-xg&tR~ik>o#f!Y&{U7JA)^plosOBapZY1}oTgp)Ls+AiiwE zj!eMnB|^#C(cBN=7aO5{J-|25xN=qM5F-r_lULcjawbjj>G)J6y895rJ3y1iSq=BN zsJ&Sg9{MNT3SO?k9K2DE`S;PO`?f1;gU}`H7V5V5rlapq!s18T-k!7@J62hKk?%5a*yPL4}s5)^*aCbpblZ|3tCxUqL1mtQ6z#wt1iVUdl`daeQwAp&y+rUl9a&5)7LnAFOWT!jYnAN)mpm zhGik)3y*#2`T`|L3zh#NVL+$&5{3ZpRAaI!Eq#jR3!^PaA^L;!8yOxkA-be-wAM2Z&iEuWax&LxbZMb>v~IJDpMfT|NEItVvth}v1@bq9 zXZlMZ<<6M}HCdT09^m(%@}6rKbp>rPuHv~mATrFXwDxUVl1S9pU((K>S#<<$`0HQs z3r$KP*sdntkbSquL&MhOfrf~13i&o+wGHfufj%J|4zusSQ(8wQXrtHVC%)II zPgAE~%(W{l7zW-#RF=#vKQ9*>lv;R)Zo-BnG(L)J_T+A`k}%C1R0>b{B#cV@{Y%>T@e?=;27b;9W zCkEDq_DA(j*^d(}I2EQr?T#yn$`#oM$sWym3Dy`S-3)GDZdJJWIX;ul`=XKbZiH9& z3>C zI6Z}&#PzaCe@7=InJ>V^8MkeLaYr6DcB(#xe9OVR?`8nQzYR0)F;#GPG8QGXzlU0g zAjDz)NCfyE1B(p1C+Vn3~3``~-IWV|XqR}gfDL{T`c%I17tN)Kp{Nh6A+r!R%QA}E=^K+114Y6mwn zwg8bS8C4uBf0%fk4v%7qLc*^ng-F7_-+gM#l*6h^q#-g?Hb!iy;N&4nR@3ZE=T--2 z!XB_e2{Ra}$7mN61?o@_wZh`CNXiqqRHuDIVxUb#UG(q`@RpF-nq@|QqnwWk(h@wD z7i?l^?J*IxUi5*&nXk^9o0{BYYLw@K6Eeqa?u8owX}r3eGhH+0ny!g|+4^YlR)^R{_SaPK z%iR<$h9<&EPTBgg6dWK6Vbr8NjF|_T98ZO_p>%u1PX3-Z6>l_0l?+Wqtt9%5e)FOQ z+-a>BidI&qY@tN)=m|woi;+bNcwdRq6j?(hrpS+9-!O_cV3UNs$DBo_t8fMP`EaldkF z9QbGz$R~PIc~6J>Npv6IG1vhLZHutj)C5UjGcZKmHKAW_kgF=np_v8Yxje7bzT6v%oLx}~m;D;JqA@(Y4I%4>8j~P+ zuQK{K#h|GbMu}`W%J$9m4Cl6dT7LUj6=5 zB}EVQBc?EZnAN1nf)y)=fAaCqR;8(kVht-@{SH6G@K z)e}yIIbej>;3Jvzz4(nWid}Ch5;LVTeU+k-xt@Fx>D`a~w#Vk2($u8c`uS+dFsgiY z^7nfR>ReX&BBv9tm`m~$%OzTZYNmoBPgaz;@&c2|m#?ice+}(@wt+bq6)z)NzrRoI zu~37?VM1ex)GK`*(JK>kg_lmvXpzvb|9t&|fV^H^hjW0-k<93E`;AMS&Me4j4K^E!boa z+gJH9I_=ibEi0=k!&NrY+{?{lQz-eMg)OlX9^MxMlNkxyXzf~?!3`sFXG_`{SGnM| zdmiDUXZ7D_&h%m{xBr?`-AJp=ghaPfQ2dpR?`kbgwnG0|wA#UAgLa;-507*aK9OZ*X^Bp{ z*6}~?E5*DH+8J8mFnG)?wnt}&YW zF(4!(hmpUA?NB6!5U96Ypn3d`}LPn@Ps89_q*=}#r12WuEs zt+VHvx5tLYu(%rO{U^zP>qZWCmznhlneMm0_NNUlFT;4C+sdcY78wOMC{!ZOc@{oIXk; zp?((m*Gk1HM7gznm*tV~Wt7+R6}zx4uP=khkLsU3maICzC*@k=kXP!x7DlR-%$s)DMBc$5S9bkSg zMun4fJYwsybQX&|c}wsQptn%`Jq_cL7h(o`BGdXe_Vv$wP2B-&aAyR%^$u2@`yT(O zwP)i$U77k*|7*-CDi0ctc!Qb?Y1+2w{JVR*Lw#@4na@;kl}@icU1iy#Z`#Lx=mg)!of#x)g9O|b}v;9jf4U{+q2 zHPn!<$VpzjCl^YT|q~`wSAq3+X>Z@5r%zcH67#v%F z)r>-bsTdF{0>|NyE8!69b;~}KnmwEhB!~GVJ_jNPeP~|veIkcs{B0V~K2^JlYt}w7 zB8O)?imA{l;X3L{lMvb@3=V6Y1m-@u!4TSa_;SFubm9x&wmiD@&ghW@=qc&Wg;Kev zO=b`FG##2!)>iD8O(+@EwKTa{_MRh1OBVwBP6Cn9)^A)&t%XXk-qlHo3aYKnPjRJ* zo9$13)wqm3g6?H2G703(mr{86O15&?F=sQi=PFOuNK|RF{fCHv_-J3ar`(ZFLgy&9 z6r-YAHVN-X6*y~2rg%q)T%E+&i!~-mB_ZADIV2u-Ii_og-M79Y9{JZVy+3>II=M8N z--**uHzX{;ktSUD%eO?Ksv^3HdyWGDt1640>bAf$pAgLwl%Luf4Oi)$Uxmq+bzY7^ zqsgidw->2;yeEtn@Gf#a@Q#r}eN<$5%+1|ZSTatk&)lI zRlzV~8U%C`4!<1V$Ri1mx4UO*8X$1Etk@d(AVXOa_OwsW+sc+V=gs4y zH}@RJm)|O#FlBv`g&x~jnA_?zHnHo#(+wtDT$d8@R z*_$YrZrzBIsJR>Uf1A}$a6wINFO{jU>q%6zdOqrDZpmyFu^{Kr9J{)5iTo5kC8RNPX=Elt;Ezh zNyXjt5O4D$t<12?_)U>;#&B4sUyo4K2D%NTTk0J#HA;_{!=_zPxy|X(sk|0C*0`4K z<`MWM&ky7h7ig7A>*5TvPu@-kdkb^7P}Nh2>aV>UjzoWoZDr{C!Rs_Vz^*mQbW zfW&40AUswQ6bzZ<<*VJ_hDb&WpRzqOX!aoLBGOPr)W0H!4K`(Nry$=0(CkwaNKze$ zYd@`g2_j+0C7lS-UMcNaUt{?ptHhET*)oUmwZ7AIX&6ouLekN8kaT2+3Q~Y;UFthi zW-JfdIu995&d&|r(bR^Q8qToLZ-GfW28?5f;g|fd?K1Fp-0sdfxEat;(!ztr5o}f% zqB1a2H+gB{^kaK7uz;TO)1K4czC|pUh(VF)O4_DMGY?~hLBJN9#TqXj0hW|lZ}Fio zUJs|XExx;xOvAL#f6ZxwjyLPqPLO)ZZ!}YjmmJhdk7$k!xG&kNvdHp5J#Rc_r$6~i z3q^8*l>*$SHO_DQNxZ?3VaOlxWi&Q+VI6sLPN|YYJ~r@^Kjc0%A3+F!;}}n=r0{up z-2%f54OYNg-VLq)MA$THH?K_r_F~*e7IXpR|Enx*g(azzpC&ocn?^aC4 z)ew1v7Q3sPd-%^GjEr+;3}%I)MIgn>2S6lf=qfk95GNZC3H#c>_dvBNO&p5Yf}?Fk z2p{_3gJipC70K;Wg|niD%iP3FcZ4>5uQbuZ_vER>tl|yzQZGa=l0r^#>p9`e9r~N= zcOSj|854cGjF>?^k)16F97u)KR#;}CE_iR!VVt!vjC;r!gt0JTUiZX`Ig9QN=*PBXd>Nc!Cn{X^48;jnJ?#PxOe#}=f?%k;-%pG%P| zTlXu!k*4p>U)FZ5)m*SCRl2v_;wtB9V4Xn3E?1=ZN zFTh_AjjAAaWkk5;8{&;MPzO1BMuKjae4ooDhO&Mg)+W=iSR2iY6%gN6OS$@R7iTcV zSPDjcBJ3&?afW7HpfUI=5re8LPg<*{_~Mw95J_zr*D%_TH$CQuB+#GSvN4`9@7|F* zQ{b0OONoB^DpPmURond4k}+(E_u&}yPsP16?~py$$(r`EiU}K__|?cOFu;)VyEN3e zj3`I$*06cwno~bFYDtQ_7+K?MaMvMm!n7nFK5kp0v zV6pVTFH#qNO^6puqy8}$?fv8!&70Xf2SF!bhaov@8{B^FpUf6s@87Oh#J+H2lJw;a z)TXZd9oIyEy-=A#A`FTA+`J?;$AADRVN%3%QHC-!e>=kqGgZFMplv6HEjqi)2a z!7v@?-ZBY&pZarwLGyL6`I&-n?ro(L(1{u`>(0@Li*b6WAsK@+-yMdfGLJB>^@uzi z4K^KB6ZJPJ)u4YHNorVNR3s}#k=QfpN}XLu!#EB?)iUwp<=v#3sVJ|&MbALi+=s@* zYB+ZAeuAa1=zdQELn-Skvax11o1c9#VM;a;OVJGcS`dUmK8~x{N<%NW1Yg;_9;Bb5 zOfdX&PA{2m%n@p$TftMRN|(h!_L;P8ONVSHwsuohW@(Y##UiiYR+w^0Qc3Nmu0H04 zt#pxV&2Y0!{#rx#J1#9b)`he|QK{b_(A+mwruVI3Va-YngQqubvSouRI`z7@*ut@wE8K>CCid$#qhh zwXlI6jT?vT?UY22NPdf@HEr|$V~lJH&wk3qqqCocns6y5#;FNz)hZshQ{AvixH~P* zyG>U`Vo9X2?lHU&_N%BW(;?{84@I<#+0U? z3k$?}Rz5L346zZkL1Z?<7&7Xmo|CtEYaKI*>$I=O=ZQ(tIZGW&cNuFP7F4Flf8%G4 zKg<(MJBjdPHfO)s2qN<46Y!`Vfu;%*tu(Z(GB@ygpT>&_j&jN!wT;LepBZOAG5j^B zVRKPi(h8f|;7|>?82)o2Q-Oe+L+R57Lx}3?KXC{=YumD*mQqMHK!l3=wLH*lTiAR` z-{8tc!{kDoH}ykF@S-HV>J=VwVq-wxGR!$4BQ-9RJ>>Ph_MVgCWFLlD&4iCG@%N%2 zZO|jPc^^67T6+lYA3>tvp)nrDl;3<(lRrL0;=uJE_5IEBbK;m5ekpUsDj0`Pi2J3m zp1}5bN=nuGFR^y{GG+ZqQ09;N3)oRnyb3$tnmo}>jqp$(ZDOVnYvOWlhaNqjjD&AC z-^rDRu-GK@5t*cE&SiUTZm>U!hPu*VYI5c?+M&L5sTO_OrXI3jxTMO_Ld#UkPbr}m zG%!3~(VJHmI*Sn7G`(D1$Y@!Ph!9s^rBz0PN-m%|IK{4TrAAj@*`-*3zh3Qs8H}S| zlvOpna~tWz=>O!0-j=cn$qI#SmEk{%6rT9yPld=%F$=AEp_o+Js(*P5yFMT=nL5RH z)F&JF4VGSH)u!4GUpo8iPaAZ-LZ<3iJ|A7B7T_u8$t}S~B0MQ;2ON$nyC=5w^o)m$9 zUZ@IBd|H{xal!h5nZ4}I3Adb4mX>g)0CwlU{CPc|yKUvH2#eyd#~t$C;P1H460bpa zja`v3Itqn8Tb1>khD2KYXG}c@$Kq&v#(YeO;=jIi{OMq$YYXOw7aRC06sZpdGeg!Ot^qOW zeWK|V06$Dmm3fLt(h;OFg-7Dc1a^<&_PxwuYo3B0g&@&EzfM%c#P4OPR`j+%a7g0w zB2YuEqe8oe&}yIwZ5Zq~n6J3dLz0XG;2*-jnw9n9^aIB}X+xVtv)z91M z7cBv5n%=5pf{w%YzC8^j@~r3ddc$SmXq$qP%T&)_)e^1_)il<&>Y+K~G7E4NoIhv9 zlhMXlY=4X9=u7JbvETLFANw}(ulhQm5bU zYFA-X$;^>1>b2MN$_N>qryZh!={zq|<=&7TgLfb=@X%-!|=u?(h%og|OAT8F)@~n>{_% z<==V<%j+T9_ulKg1Dx4aPf*5cwL-#?nD~E_%4tYckLl*A(B}jLbA%-Sef2QQEvMOI zJ$i5dvTlNfaw{X#>TvGBfIB~qglRZV+BQ=eqq7ga;YM+-)HL~yA?`L!(w;L8hU|6t z$Uk?+To{wvqNa#9NNe^ECxO32LJmeq=;&)jlG>sq zoK!k+5hyOSYv#THJ%o6fd02&Rn!bOcZowW>Ar+QvGEt4p9w$Nsr}A5o^|zT!f`@I2 z02I-JfjUa~<0`4H8Em{lqjNVJjz+T^#Q>iw8Rm4j)CL3VD3On_(MPxQf!HWndE#Eg zx3C{sni&GmE$mEr~7jAqTQs=q?_qGr!&uI z>hFeC9UY$aHnbXEFqj@7#@={f*0x{R*d2(9@D$8{>@{$UiK=GA%yrJH6Nef31RI7H zBYf0ZMp1s*9)}w`S_)wfGLKsCf3=Q>^-mNG1K*sG zBS#UdDjE(PPv-ob!h%gDLl&wYTY5!}Y&`E_iiTe1w={Ks^lr3Yh0)_Sb!+?jp2IuN zdt}FGvvYeHM7>0;@OK&ECI!={OK|ScGxRh7S@se^CS(+_x4d4@6PQoH)wRBwTexh1 zY9TD6=%&r$2~sD=qAGj#FzMfGtM|$fPZVw@A$1ET!Xu7@VWI#hWb>pO5TQ0YV3Kj)&dN08(zaV{e*oFjEs&d-(2w0xJxE zRvnVOXM|FuR%zlNm|r^b&de5;cI*~T<5aasziuo>5AcjN-0E=inQa!k=lNbctSvk; ze+}IY+;^RhFFE(E6ce15Y%~X$tl0fSlTI261a{VoubN<= zHdzw~g!jRhxR!1AdveV+@;9Nt^48)J-XilRY+4Xt65FX_Q+!ff^;~o1jM0@_b^XrX zjbi@my_Yg3(z=r%MsaW=%VK{CaS6qelHmBFHxt^}IPEUQ2yzvCZ5C)2m}vZd=FK+4 zEElZU>b29EttJtdXzJR)VM!eszvNYnVOk&3@usD#-2h9~30X*`V2+i_6)ROmBx0FM zpaF;MpkT^a;C=?V<4^ek(Wjzf2kX2TnBp*kQIyS7q3U0;m*Tz#E4i8+u@x+Rx6p?0 zXV4G-H8mvd7Uw-2s@vQSJ@M#~yr)W6cr0~iDSJSqwA!Dg9ZDklA`k@5EHFSjT#!AL z@R&C)HB)|s9a=FwLqcP3f1|8&98BYg+LZOwkBaA)gnNj=FGt~EOOGCd<3rF8S92!U z*@%TaHew7a94;l>JX!TSZiF?~qN&`oTv&+X4t$M%P{xd`IK+sdwj3nSo zsi+i+0qF0W^0WHDimQpV*cZ?)lerqPHaRRsLJ%{j8H>yP>#DJ<&-2_}$GlQhE%xc? z>KpRo8DiOb@qC%5_a-qzs=Y!{E%887n|q)}*k%#TKUBg|!8``4t-0ywWfFFKxQH*L z)s*JVm7DC{d902I)8to;QFnIC zImfr|1xdl@(Y&Gi7FT0lk>%PW95vao2!{b2%U*!6wiek~XRtNoVjc&2p+*j7%(x+0 z^Y2ovv=Ez_veR>2n=?LW+CXK#4@xLOg*(gMKq>Mnq-Hsgp9(#kB zEIOkF{RL;wwK+&C(9z7s(>?Met<4mx)eFvE9DisnTtvH$#jC7L5d88R`^dnu3hGDN zxB3?MlRy4@aqC$QmJ-n^Jpr&j4@bzo?d37H!bQew%X8vKfsLi2_Fbc-O_9>5x$BSx z2MWtomm$dEbhi-2T^&^v%}>SU!l=3Km-M{C`e7ZW3_7EfCl0^ir`wPiWOL| zuh%U&b~UK!Vz1*kRE#<(ofI;Jsnr}>*4T9++Z`^SMP~vw$9QkNE^MmT0u zC(nFR>M)|sMy8iAlPwau6i13aI4!Z?i?D-5-WD^?z+~#s<(e!cp4ApG=ZgDLoyhF| z_oh=6jan~@iPtlKZTD1}91ebZ7Ti2p3=`5e+g-=@aUwm=AKGH&j0a*^7sFNheq zd}=+sl)*hwA<3oVn%gZ&PA`;23jiLKK69*pqVOsk8@ zur=1HC3?@l8c&^e#XI)aD|`SXbGp>${TeO!H6Ylt{~j0@5Cl6I#gB)&nx4jUz2JXB ztA3WY@DaM9;j{^s_Q_#x3QsiUoqh<;Im0a`uJKgPE@@*ZXnS%}6U%N{!&pJ!u3W05 zL^)Ovpm>BdS}fiL$sbk8t4OkA@4qx3?aVplyQ$iH*?Y>|b85R$kfP}_aK7wx<|4}W zHs;n2xES&fxaw>3KI10kgS?C!UF6hd(g0`eEVBBi%S-B0_tCrhpIg9oC@GX2Xl$0` z!nB$u-m7md^mXhaQZqk^@-bdVt>a;GdWJ;W!<1>R+=N|xk4?tMf418~^PPMMdFl0S zMS;2=Q}kC^k*uAl+vE=Tek<#&(E-|v3nRh(7b}}~9;Te??RjiZ4Mr{lm^8PBRkg2b zCddCI4si6(>7=}HhhlYC@f>!puD}s&8W$!D+1ieN0*pnn=t;Q*hs$msip255B+uD| zQC3G(z?jUV;$n-*<*!|}nHtT9egOdl+*l4SWWZS!sH)7ockI4pkW;3(f4_e7V_SZ` zmG;o2t|JGR|8mH6v>UF2$kJQTdT(vE!up;iTdl6@(lgG*9CyP#MFCOD>|ATXg3p^w z-qV-;lLB6ZvYvpqd2&smai)zoWM16K8gu2h`{gKf0rUE|Ibc0`yM@g28R7orCWJ2k z`AK-Deifwm$1IxYe`ArT>jX*Lyf_z%jdKkA zN*kLyq@hhr%9?d zf@{h6R=6f?jn}Dl%#MRD9ab?q#<*L|S;)<;(KR8y_Gqdp?qWlykWIP29ARc#2s0Bx zTO!-Jx_ymBk$yd{788Oom6gH|C^>3d-!d{Y^nw^ zFpZ6#zE{@NsZN=RS1LEOxBjYM@=waG)z7fc{uCAgl`46-DM)qvx`Z}Un6kM+*?O1~ z!V{c{DS%08WqkaYZHJq$T=QbmmFs`Pt*uz-z48bX2DDi4Bz&+%Z$3gUw)@AJ{?yig zNy7KBvCLIP*wL6bjcIE%jNrw2Way&IYczB=dzcatWMIroZ>i=2WJ`oZfKn^SBzepo zzMA*aETpq~5-d<-&`!r?l8RN5u;au)u1`5rcoH<;hT^xvfh`PRhkFPCK{e zdRY7rJ&yd`(KSr_Pb`3FI5sTRopAdvSHnpPzXg@$O5Mg9BCZ%5S&<87lD#_F2IY#F zp-o*!MEo6zQufSf&ag^ipqT(LcR}X*w+KW~0pIbrOsyoR3hID34<&4mY#gc;9OJup zp8(EFgOHZ;taIQn=@akpRhe8p*5~KK1IJnE>{2+>uP~%|6#k-2a62&}h@@BOSd)(c zOV~f3xZ8Tgfa_V0e+W@aoOs^bxL|i&7dVFw?!QR?6l{^k=TS!Nf&=(_y-)5H4#6qt znwF+-%ND4N#+Z_Jqx+I|-aY<-h9Q)2$gzP5fbV)B%F#Dq5`QpELF$i@YOiT3wqAx) z2z>jpp^{A?^dz1#ZI z&igir7iI(lcOQ<{FZz~JbsuQJqHvgzd66t53qWF{`u)2XHUKQU7lVC6`cjxQn-S7lyBxj~0*^HT>_ zFVl2z?`|r}AR=8K@O%7=fP-QqfrnC*frZ0@Li#v&m8dnL{^xN2xY9w9K;&NJyzjstPkIYsv{L$TBkMJ9*d|+1oG}TB@p`Kp{p}ZkUC>9+=U- z9hkYeBSS&M-9bY^eY^n*%Gdzg*xbO#;8IRj?GjBbM9~)}1`n1BodCLq06pLVTW}10 zYrAL*56fu87n3t65Kbr+n@RT&>H`rGX-XZS!S(Tw{{;JAWW-x2W0j{%vE?mVWh-la#U{ott6TO?PojU6H-WO|b%lb!o)B>y0X7kUV_s)}i z9zSk8h8#dt`}ly4ARX@Ev_2_@CQ5%^J04}^-6|*#P?oG3#2)rhd3>4%Y&%E;2tf6J z2~c}{`wqHl9sB-1q`EpKT4;7zx3*=4NtSp|=^G^TVB|;JxwQ>(F@0av|*AVY2(D0Fz1h zg+D;Ww4!^JjFtY$xa3_8b_@s!1*-TAe1=y=&YHmUR8`}|WpRivVoj>P&c`Qfre~S^6ni z+FHU*9NaQdapXH%CFx~ z*&f&iG%2m7*!DC|G=eu4HgRmV?b?i1H|>DKjn+*armHBc{OxD6tDVhfNwxwjuFv;t z_r^`xov){7&yC8f;j7xKz}5A$t9vRtu+{VYYSp^W>pjHoz3+a~9&Gv?-SloYSV>fT zx>RSp871SY;`)Qb4eyb0&AUw<6cZF9}+JbBUmqnoI^uG^~{y?U3STeWnzpbJ>J zTh`rNcX?KlAaWT{no>$8n&%$jq~SUq$=CCo(~f%DQp)BzUdZ?HzO9kSc42d6136zD zZXFgAd*4mlb3egKfX)vuh+f-_<$3qlj8O?^xd-^o9LAiYJ=U2o`1V-`*F48AT(j$+ zU)Gb)&QFQYeMZicPdj}egRUTB$YeC%{Zhx^%%Jq3=OF*%QZnIlqp^U;X;bv;xC0fy zZQ7xKhuB5Ob8V9t612nbyrv%g{CG780Bu}F^LDyK zlk^qVNkVbvb*nPJ>qtfMIrrU*a(OYTg7ezvcP%s#Q0Y0P4Y=(` ze7%q0Gf$Yn%e;DF-EbM;0JQIPhn0Q zrs8H&XFoQx>I3)X%s1Yqg8AxSriMlIpQfUDZwJwMUJawYmM#q$J(m!P?*r=OxlXR@ z+UxY37Z4|({$mvX6y8w?#IpF?JgdHi5&{-&kG%!yyg(D zIj(aqM(%?FCp+MSCYn9(%M}{vrWfpb&V2Ce0CmFqswJBfqJEGG%5vRcod7O+Yzn*! z9jH(0XT9&=fE~K8aCx`=5B;qfAA0_LthpEnbsxfz-_P=FaWQaF7+Ux9CIweXzFz03 z3ubq?AN1e$clR&qz3h1po*Cbd-*$xeAk(B{BZrY^Nd2l_b_jWvL@6op$%|z^QM&5ZdMu z5-7Hm;!X8jzU{Y-83x#HbTU1sIp3cdrYyXzooRaL@X7|Ug0xeA2vol0j!c9pdid;( z&IhYi9J|b~TK!qUv;ts9VXpLy242iDmJQxP*c*RZMdGq|PV+Y5vu)0gG?Z1~Hg-~H zF^X>s$h1)?wTeHX;U@wZL3!TN&&+2W4WMO1p2;&W-4;QqM1pzDIf>H6Qt%At8T<-8 z_g?{_cV|eqZq@Voh7w-`~8F$SD0MPwT_Vt6kfS*T?byoA8=uIdG|4{~&?p1+ywvNv=L3Zsk zb$;>7iE?al=T<4$J?*|8qIWe#o8{H-maXUWlwRf4m3Wn??=wI-=|0cu#ybn#AD`^W zzMCoO%;*7;0ldu|bligV z+1;0Ms|>3=PDUra9_#ep%GH;u9@c09k0U4gcT?(o&#GYW2FP($d(lf8K_%bCO1Xa9 zNkiS@+u+IEqWAViDHwcyhvxHIr~fWskF@c7lwgm;=eD)SWwGOEjDrs{zPgdo`G{!m zF{k}@251JkL++j{LF3vApp&}IB%tp0l6*)&b4iux?(z zAG=ot*dC{%1=ij#-R!-_BK6-x-eMWORGtpU0hs*v!_hZ@_aUkj1+UBaWbbS5Z0^fa z$P4lvL{e$d3){8fer_GJ$Wf_5Ize&DrC%_voj{Y<<0UiLnp?PGi2u<89eyt(ukS>EZf%~AEXkhigae ze!Z;naX*RvF7UJ-UG*{<|8}z{(6UAKeybn-Qk8BuYu|QPe5G*luvarq z5e%!Ne~C}03CN)2YU+YFqR;El;Z|W+^ozqGfBFC2y?Y}$8oYugyXzs>>svQ7ORi`` zgrMr5zg?C$dZ&&EHvt3QcwHXf#F_AV@BO|$7lo5B*Lru~W<oTJjzfl^oUpj2SfhSb-U3RDrtU}ym>z+ zA+wfW38e4LAxgMm9ljg_lKRd=xzpoR;$$ zK5a0T#k(LZ9q+2-mkG&?QD(T&3lWP;Z~z&i;x&}CAQFPwLg8h{$cD1K1@L@3>leBe zd7+zPm+qf)r4Brvt@GETK10fA3i1dZ!$bYfE5Ll)Z3klhJ?_2E6cZhzWY5u7Pj3Oy zUnew&Od)P|*xs9BP{Dv2_`5i-i<%j5c|*jt4WfsQ+E}mEg}9%U`Gr9Od8t)Dc>PHv z5n;kgd)qOBwasyE2I>l~nRO+SP0mMJ;IH{0(aZDlZ@d%1t$=8!RXQi8EWVQ{e zVEKZGOJP=)fXLb=%NWVRSLGO4-_7Js>c>cU{+_WOOed&MJS z8nzXrqr~a@rjd%^$%*be3vWJMUEFfloTn3Ollgd~W#Z>fJ^?lp&-Lq}za^nHBR%O! za&kl(H;G>lP7Yi(iN4WZt+h@E?Ty-6-eqX>U2u4otmz^1zL-IX|MZcm`=1mIyesYulJt7T%s=lQvecdqYh23)xW@s)X zt5|@RtX-aR-{kZct1L3MU30^Y1)fL*C{tdHG%pbCGp! z80^xy4;eVlE5_*6OP~KD*N+m3w9v?tMCH1iol4x6Dsls=>o!_I;Jd4+NvrfMtX!bq zFYbWX;KO5ParQ7WdhE>Id$#s_55EJD)-06;BQkPhGEZLeCi>4)SHi<2k74`b8Z3)v z8m6gLt8s#gYha)w^Hxj~?rcXXndUBz-Q*C-{{uxpy1(6(J;EFc;`&$6ob(n4%cC`= zT5h6N&^=V>;G8H-vCoJMD=}q>ahPIbBTxW_&Tv(xIcEy1qO!yaOo;+cnC&rqp6Sln zkSQaK)n{?0G6#OPSZ1nI;5v&cQwy13UK}yPh>82f#ioaKi?< z*JoM^L(YL86T1vF2Z2hmSWYT+7O-7$bHnl?lcwu?wjpGxmthOO*-ZR#~WD<(U4w$TL-&@w&zO zyqe$ia8xR`=QV}#kz#LN%a|Z64j7@uO!~#JFHD)ZTbxVvI+G~HJX4REnF4$^P+->O zs!}6imVHi|H$?^wxy@ScHx~?^=e&MPW5_BO_gf@GSsXGK`(UgbBuQmp0i`M@J^Hroj z42t5kR$@keu@lxhbAMFSN44R6JSv)DZ8;D8qB|8zQWzA6h@di)s2G-nF%zZ5sUqM^ zye!VA^|ioie@Yb5Qr(bJrbzVbQ)X5zLZvz+&D&ftY)JFW;wnmG*k1%(gK1#Wa>+?Z zv(`r$P7RwjgS9wg)SS<8XDyI(`>oPEpK_y7tH%&9H<`AQexc2!d9f%_K8KVy(B8~T3{&y{}f6#WuQ7EloxU(EcLB+ZBXM& zW2rr0g<)yhXy>yAS6VbWQU+W}zR{VmB42_Og&jx%Um7XKpuHI~FCfZt(3$gcRc*4W z#_PaCWg5*pj0S9N%#TKz$r>UbS2c8Cl6;2fl5G2Yex%0(x6Q*=x10@_a#`uF1$qN- zR&FX?XfW!R6{TlnW4UZvJzNe;WiK=od4iWGc_WkKX*rY3R+bFQ`OusWW=4gnTEZY} zS1MC0%$AL{z>28Yl>u6*=!`vK*VsHxSk>cxw?U7d%+Rknhm78beFAs11=%LQudp*Jc4mbr>P+5V5t|IE`l|ey+t$1V`Rq~H8BPc zI9G46QeNS_Myt^$HqN2r7h5_-%(#GP4ZEbxMT=HS73!TNZjoVuggr*w#>h^tJX zRCp;xOJzl61%;`zCY6{Xm^2*3{CTUDIZqAFJt1zsD`Mfug-j(Q>}r&)bzG(J3L;~2NTESNm`%N zZdZktT}JJzSaIVIyJ9xzU}dlCs$N?YtnQ2*N?1$pLdi%1(k)|zIjE%uRw$Vn zF>}hWY!#FFAmI8|XOj7PWp0g<#UyC37K$#@ilnRs+7%XAR+P~0s%Rec%bp|{RIxR? z(9De#Fwtcz zeZgakAs_cGtk|du?f$IIsreQ;0KuhS?Fp;T*a!57==TA)toHDGyKKv;s0YkIymXpHM#uT~pNV|QT~wOAb^f*BKYE2xew znm|W^EjUt*OoI$_Jpv}f^06vq{V^rig%+V$)040_z4jh%;m66#&_+Xmc{=`%~Lk zvx|XlrgP0@^Hj~9Co@iKh)Tv+O3SHQ&#Ylto|;^SR4Oy7PcQ1r z&C+X4$HZbd6cTEREed9%X)VxYM{g!p9$Uty*rcF5!Ua;Alqke3v_-nkB1or`C2|dI z%+yYz%c!qwSkt!F0#S(T_L{>G)0RETo?zH)X7-zN9$ty(9a%!XY^jERakf?HaN=;PzHKtBbznGC{4>QSU(PLS5bBvU=MTC+l-Y9=KI zvkKlYOukdVt zRA!}atvK%k$kwlOOehrRp|AqX95Y}2NF0+FOAOWG*hYtErA{fEo8@e3RWi!m#AT3K z|IAA(DA(i|qzhW;mIsQ=%b|Pc^ZW60cY%lfz!cyPQXi1-;*^<}WQM8AjMR|9&`QjP zF;|$?z@)=jm&9){_PkmKi?>RHu2J!-W5LTWfT2Uh5z$ut ziPIhTA~UFAPCy95iJ*-qq&JD8bQ&AvEL_bm7=D#wC8e}68>w3=0;@1rb2cb(Y;grK zO1vUB2i1Nr>-S2F(5%e)Mn%rIn?+u&dDg77tZ_2e9~f?QaMg*a^QfbvGN9&mXlRqz z+|UX%HL*i;aG%5H{2BC+uFmT6%? zyPH5?hwy2&gZSx08R&375Qej0yDfjO`2!{ zs?5Ad>A;NGvXZpI^r>-+RPZ|Km6{uYqk0dXvyKpgNTslVMQDV=P}CB_4jkHr zr3#~UbqLRy;bf}nbKrqnCJb;n*Cg~QJ}g9jCJZ*{i;7@!s>+rKw=5s3uwyF7#0sv~ z>5+(!ahKMF$a)olfVyBd-<4fRnnt2y47tVTRq zQ5N0&LY@|rS=liKm)fipxl`yyREJuEdE(rFCA@lUJKch}Ot6SGNxQw27@Wvl<{s1z^1HW3ps6L9Jx``x`SBaDYG9J)^6yR3k#rTYx%^)jv z7Z8;#GEJMwGr~a2(m-|c-8N=6?7>Fhgeg)Y8sDZ-ZWe0AEOO7BZTpvedCctd1SKT;=V%8niOo@%^C9e`1jI~5-cuSay znTiSN{rs3kbvW2;ris)XZj`X8j*pyz?~sTiEFE|%;aM5$)w+ny*GPFrCWg)6or0XH zbZCB> z!yg+qsxLA^M+-|iR%c;4&`dm?=<zl?q1~DF1))`qHgnjO?5rG@3V}ULop~`v@Ph`k?13@Wz?f>4xCUHUFmmvcGc8ZY zA=xZ5k=|@#e!o1|OsMA!>6r&18^eaAT9v3y%EOT|sSbp6$PD`PX0ga2)l4=2_i^?( zqD*;C&uwkI&1_Cq2si0ix)o&YMJ3-2yM3wbk6nuC$p+k@Sp`{*SEs_+!lDw_Pr?Az z=8CSxI8!0ps3S|Y-Vn`i_P)@(EV$EU3nXh{cZVj#8>vrBXM- zy?8#PV0g|2WoSW>*%Io)^`eXg<4j%zYk`BPG??{6QpCVysL+6H!VO-}R2Sn56S^RF zairwOjU=gB=98!# zwmEuf$_>N9Td3B8c{artY*lp~m@r^}2}|6iG?_u)modas->g5jd-C4eyuQ;yEO*H z9#0!JwN8q(Xsr{qB6_}v3k{^8n4A)qi!cJ^hiO3|q_##ci*u)mm{udM9|WA;$ZM#M z>;@BHa&U+f9%dST*8$gKjAfFUTPn#ou+Krtw8DZw3vpp+^7?!UdRKGNctJ<>GK3P% z^49`~ks9Jf2lM$dTPWFMb&$qfcW9a2$iGi-Kvtj*U{^rJO92fKQz|1!8{KRXxJVE! zqxPsPQcRjQ+++d3Yr*bxcpVRjDm8>OxTgCMj?|^PqR{~(q(s>3O~5>By*azIXB83v z?6NSSH+v2-FD|QaW4Xv69rtOvi(<~eh&0=;NK3qw2!kpL8k;XGU7J!}aRvg#I3_~4 zp;J&iROp^hw=fTh$W0jS&`qyK7x7_Z+FJB!-K3LcicbXw__+15hU=y}qnKfY2XNWx zz+Mjwc?ih?0h1`CH>othXOS@=I-8hMi7l;C&ll{mm~}MN85E|0JnI(n5k$asd|Z*; zhBm~osZqBx92?^X71q5f%7#X%RIxRsz;{v(&D4gqF>J?ng9_Ak{Ux@&NnI2Y0nz&XsHu)k(z6R#3U>E0fcUPSTDQNMb>Ht za%5IWPU;VN#XFLh*Wg7Hu2wX7S)Tc`!V+zY)C4QQWXDB9icsJU#^y{FtJ`BYoTc_u zb?u6eFNiSkfx|UryOflsc4La>C5^HT#%{Me>bN&dmknc72zVvS)V@fha8LuwZ{uxD z*^QgfJWceJ7s(dlHTyNN^joIwl%y(DTZmn?1^U;ImncC|3&;^c2uhu9JwOX-CtnRw zs4SGL{3#dU04~2TZR#ge7z?(>~kjxk(cXg(>h~6Jks)$pR6e5rM|K znQeGVL5U~PV%e@tTV51ms#;z|&4CxGKv{X1m@mDNOJSyuDt?u&rCfDRGG(JwoFM_P zW5jCMt^h#%a&+gA^MsxNzl{g+Vo*f0T1!itCgR&Tp+t0M_RVB5S*(yrmSEiFv|w zRJ$~u2>l`s1&fk1Gu!3ad?B>5(5Z910bMPw1;%xNx+}|=s89)HH`xFYm#pCtQzAjT zE>|z*p=GTEs}((i`Y11h$OIUONR8mN*(O;knYdK<7tPkjIoNzSq&uV%;&e;l5=2yu z0-`$BT_733Aqnsh&ZFyqSL@SsAFo<;vj2VDPi4P!YMpQAE=#jMsx@;r_;h~MH-ArE-tyoTBzMVxGgxKT;5_egZ3=S?LA_gFUhl$MZXl^Wy@r7uz&2F>TY$IBORZ^$W zo^#!L6F-Cq0T}Gv1qL@@>E4L2DpuhjUe<^jHJ1z`r9T*~G~500cVTi&%6f z(Nz?0$3fffCe;GoF%z+q)(u5feR8u>B*~u3DVH`>w<-eA1&DQ39M9VE!honzg>D*B zRHr&mS^|b3YDnS!~ zd34blV&h;!*|FKgY;RtP7F?2K3N4HW#hB#R!7r!-khCbm^P)A*+YB^?RI#RzOQWzc z8$K$>H90Ia`iRjILSfd-2Vs!nn5t)lC^oH5yR%$0>!Of3n!3>Jpo{j#-NI;87zMm4 z@(M)-PDgC$!RBp+9=j6FB;~X~S_OnHS&9uHyYGfxUAKoIFtJ`-$lzK)jb?Sg7fG>Q zsyk5EoG?uQxcqQwqO?%06iU+O+bm{;D|DaN!$WwP<(N`AY~`zDX}y&D@M^iSt9imT zH)yp?U{Lz7jZ$bh6C4~Wx5^L$B6GM2^kb^h%I-w!T9fGNBYNmcqN)4Sf~@m1VIm_o zw*l%PdI9I#bM#q5OB@~8PSQi#h0)Y*C*_S&=6b1zvt$YMs;8AR#T%3X9H5u(XvL)1 zFaVIYZP=~_fCo0OY5A!T3@o8v5e&Rmuou45hVp=rkidDb1>P0CI*lmOx&u{Fd&4Qi z0*X8HxjQu)a#oR`CXf_Iqe>4 zAi{u3;0C~hz*B?i2o=_}nvOmMQPq@7g++VX3OZd|BRSwfVn}rf#nIfwX2=L@H<59p zjRQwxw^12o#%Yg_Q)kBWkyGTlT-I!>nvsvl5P~NMN0VQ|wa%*dotY?YZzdh2Fz7m_>4-xU?*U*%sLn`TN+oCkf)|}7pnC>d zknAqPsfD=R>?XZ>T``->%H|c4Mup*GwakU>1{h-B>0g1H^@zR;+qeVY+PC{eyvCb;~-jqO7epN)U;Wr>2lH z>D4=nd9hnaX$V^UaW*@r2fq1>WmK zPTWemVM**3Lt@eFJ5NXZyG3+r(4y^z|gU;&M(33{0=sEo|k*R=(Gqtii z##dC>rJx?Y`IafF!qT+b6jC24wDV&z1Rh_jWDs7(3uX`(ihbY-gS97IVCZTakW2_T z3r28$Y^l!F9m%WBjtH!#4U5bz%bWV)-GU_}+kwW~nIA z7BbY6T9W99Qy9+d=B!lmXI55@rn3&w?-w=*wqjLQv}rh19TN_kP+RnIK!IwoYnk;W zXM`$(t3C+$&TP_QToASjwi+uoXr#Y#Y0%2IjtY7_ls4qiP0C4~WC|+Vuz(Zdea{Wa zW~Vm*zE$=jIUiwhBWC@Y>NnM{x!THrhO@pwx z!H0z5j_65)Yl5|r#r8s+Vzh5A1Rs!gPYj588q%{Bpv`SYg4(IXAix+E7OUrPrPI`nk0s1 zh=Z^~=N(0CRs6!z4V$xg+}91<9$3TPU`n>c1T^k7MIHG zVrxt;dD2FCH4)KPl|u`?WqYCo(NKYE+|&)EflBf2SO&BJP>I>B!I5G-W& zpH_kCZRT+5Qp~__<-uyn#Jlfc(^I(GfrCm%6~!r~r6f7^hlJ!gp<8GqbPOCv{WC00c9N0+xh>OfFTr9MyJ!ci{ne%ivZ_(PAA2 zlh-5lIS!8vvg3CRr6|ko&5J@OY0aUm+`{eQv_%x-yi8$^2>{u6sn>@Z?aV5(rj&Ll zWf#L9{ zj!i0UI^~e;)X2ndsk)LhMq*){A1XA5=F_Azw@kpIR}3zObe$ME+6H}zun&ovT})dN zrcqP8TA~v{hV4ZNXcZ>PDOe>F;LYJ6SX2muDnL4saMWB2)4JBlhZB}+OdBCvT+BCs z6IzfcB$MSZ0?~@aiMcyU2p_JSn%GX!CK1{TqC6&3ZzM0cs7kOi(h4hT2PM4_@ND8v zZtuz)fq)1CpuQaPmI2cmg+O*#?ju#ipEheo)W*AHT&qii(STy<2@LqRFq^jVBwu%m zE$|B+^gX4<^W{+GH)bPCLgax^T7ENhnDm=LXH1*&uzlQB770qmrO z=yFp-mulT?C)K1@FMzUeCn;!rdpX5*l3~-f-ES_FgZqbtWaZ9Xcp>)Tx-L%&9yHcS zYGH(ts}q3LrFdwIimXTm?g%P2X!}G&o+@F z(P)s0mQS##Tla*NQWnf`G=Zp!rL-VnHWR6dxb&zgJnn@3G-+8H7GY!zjp*8_Th{m? zgv>fYY2&eJKckx*0BNG7wqYG+if}j^SK9SJrj2R7Pylq!DbX`Qh-9ogomRLQiHwK6M3n1oi5{az)~BMGYy{a|Ws;siQHSdN#S*0LV6fxnS$+(#9JJYPV;i zwM>x_MGbk}#+zDi+-$eo#){I_c_mLpjsgR>Hq+~_++?Tt%m!{v?jn_Wlt_S|o11T@ z0Zx}6w^rlA;ZY39fe%xOU8g(wI+))DE?6e4dWj&kIkLfsST*YqQ+tUqsxvPug-|gWfz!*yBLBQA;t`W+g__-H4B|+9!oW_9BaCqLJ+W`VVO+KF_QL7jr5!% z(YHe)U*m<==6kTA(TD}3R4OUemJn&eBqq8PV$g(+MmQQvaaO1+v4VQz&b+l07UK-4+;BCNU8XM^U)md zPa-dmwrmMdH$#@D$vlrw+ObtdV@hBOHaP|^JByMTLarMMgccH-BC?aUyK$2N53-x z9Uu4dh5E7^7Ntd@#<@xb8gf->_em~j>sf#V}2S(YPD{#XE^PA#m@jKzyWkTf`8uU4kcBsHcscsMQ=0 z<3!1mZq#Q(iQ7OCq&IKk!y3SH0D<+R*`TuQ5p8PjD72L}ODMT?mS_rtuTlBhhWJ!_6~M{MY*bwH^4UbEqSedPMhiw#q>ltk9B`0; zEwYtL+?+~g?6HzFD-&w31IQ!iR9C!-MuDAecG`(W0{~p5%lkuWiBT*-jy5t%QgZCK zi?xzIFQ}O+zzq=A6c8Od&QMCbP1RKkzO0&NC*P~oC=nm^hX=owkaqzG;UEiCki~I8 zWd>>T7046o?PQ^Mxz2)?)G#P0qnOt1lvtzf z_<#A%lE%T~8Kmf7E*4F$IgEhU2R*DI1vNz3pl{I$oMZ`v44Pb_JOEgA^F9S`)TwmV zfJb#ex_K1B=~l;%4YIw4;)S-{l7wMaQEbkO%lCMdf^{elaKWGwthe_!TlZs8rB%Aq zfrU~XaR_Eox2Hpw=S`I4rbr;!tb&FSlutNBY&ThCj3Gn0&~7adY$?eYos>YxrrmM- z;G4&`y|9-v0Ezy$?{5rs0{B6K=uwcP6E+wNMr$S1z)~I?CxlTdZg$#h>9ROmh^zO5 z`rL#}paG}{FK{%((l9iGwmBF=Lt7gvp3t)wycy4Z2F#ndh?*2YI(Gq1Y4g&bU|cG{ z)ZK9(11owtEYdMyHfwdUvs7y_VvmghC(j{Rg;18#0NPBEq^>QKZrnx&0C{#xC970w z4@xq>0qwl1uKqB%!11bnf4+>SOsNF~Fgdj}>K0j#{h;C+wq4Ks{%9i*#1O%W(wPb{ zkk|nLAb|{k_-c4yE@-EN&-_*mZj=YShbW55xl-g}x(DVj==c>SNI@LS52Nzf@HfaI znWIV6oHToQ5#=PjWM-{mD^V@LI>)Q`q$-h8i_U}#TSI+3X%S&L$?G;dYsW2it~iAf z$LlMayTU#j1Zy-KX$Y7T(Vy@ZuGp2N$ta#yD_7)rGEi&9)}pSurC{R4q{%QmJ7tmb zkxk)Xkb+@My6m#M{$hUf=kWJB1>lc3l;J*)8Mt(PFvo#vFiniWa;n_r;KqK>vk#Ci zY2cVk?V~Zw-j^pSdLKo**glj-2ph8zqJZOT!FR8IFVS3RrK|Hu4vMz_NYRH?znAD% z?Df6C@DD4K0-$(+;4p-uu{@2lJjbFajpiAOpb-v734|(Ahh!h2{=M3eor6c|6@6nm zz5L+87>6X>#g&YSxT z(#7{-NWrl|WHD{Sx)i=w-6M&%@2!wLLKBW_k^5|Vt&jq`&oFFvpG6fAFk;#$SouTJ z?ITUrUDCrpSts{d|47Zm_o0>}KE20ExVv8Nt+a|aO~QC_gu^)6PW0zFjAMNk%>lz& z_3`ql0lKp4`eFC(yOMYBrRpMB0W%3>A8wO{eR;&d_t6Eau+KsAj%gHdo1*DM^6$$y z?$*Y9-~_AVQSkNgDESVC9KeVJdF;^fD2J80Zz0prP3A`IFnyrLBb}2{*iYU4oRlNg zyKni{zzF(|eK~xn;-MS&&r$xrp}PC$3jYMv-Pg%Be;(D{>xi5GUsbocd-uh7Xl37f z@m_k^VN3_wi4iC1M2th%^PS7Z7>wXj_z#r04><>q^J%B%kxv1-yUcr(K1}8W3f^^|z556DCQEaub{Xf^owV${uk=x2`9r}I8*K=2ZtNWd{-IccAnGQW$ zKi)e0$^A@sd^5Krhu`s&+ymC=DQACZ)w?@BlsoC@tD?eF-F-~0X#et6qYfA;fV-2Tg7{rWe*J?Y?i{Esf)dpxTypLY7Hub|Hd zyNho6OWn^7XZNqi@A_l9e8<;v#{u1JowV(w+#_=T=VLn=v2)s?kLCOVpa0;uw*_y= zfA7*up4tA&^DlVMZ;I#L`05>Br7pSVxZhm^Jpar+a}_kQI1 z<6irjFCYJsCl9wS{`YgXF8S*V>LiFxxLdaLH(&R*x4ir&=&V;={TA)L%*Rw)|A8mH=-(gmv~TIm0~fP1t>^si=6AmM?N|TsZ3nJ;=cjKkJ@IEB{^+xw z)Hwe|=fCE-H(r0r=bqVX-uATJ`S;CV`tTFZe!KIi^Pd-g`B6Xpe)YO9oVov-|Ge+k zmmI5~{kH%5(e-=2bJLsu{x$zvzv8^7zqat5H}1Qsb{$nd?aSX#-@?7@+K;?lxayz2 zdZl^nn~G8IR(*Cx;m2Qp-^HKN-a_4a{twQZPWRvT*3$e-lNWyEl&7E{xEg)s&MRie z!nd4s?k`??m44~Y((lisUistCKAzKF{R`oa9ChjYKJ@_PR}U-A-hfhgd;#cm-$=~|mm!9#)%P#)azZ`Y$=Q@A?n&RemeiW3-=xP@snTuybHE2`oE;SWn7zEpEVrZEm&{@L4uXw z+Tu=%6^8=Bo#0Z6Yp@Vpid%u=*3#lGMT!+D?$AOhrFQz9bKmWmndhE)XP$Y#>~Hy9 zTh?BGS!)NMgnX%~o+@eMk;yC5km2|Kk{miEl}O#T)jaHqy<2Hw>yIOb{(4&BD^nN5 z(qXlVv6-77aDYcBK^yr_W@^amCcMQZW z?A`vCpWITnWb5kbSFmL`Ii&|9AUp6J4N~466j`6GTDBw>U|*ym4 zEx`@ER7n+=Un6+@0hd%I5vE$qz6M^B5i@X~eP@W8SgIVy7FV%1hRS@o{p-=)j~6Br z4`FRbn~_JoN-pLs3R-s z@A=x`O5rAgY@eX<7OWIOO80skGwQI9+{||@$fcAd^GJ-+sjkix=Pn^-^SrDTV^Enm zp)t0UUZIxq6QeWL!unfKY;u)=VAU+bW~RWYm`1qp`cv}$76hc?IT^?cac8Yr5-&cy zarxncp6GP_&CG{V8JTbx-Sx{m*wMfgMW6sr0}_cM)@NkL=)U{#Hu8u>W|VkjgLjM} z`|Kt*G=iQGsm3*bd|)RfGIE*z!RVIV$TgB)uy4-DMy#AVA{{L9L6x#x0F#O1tL#n4 zv)*q#AgpkL7maCZ%pZm5Drp&=T3)}jOHaeX8WkD#)e+x!QOSF+2U8jpHOi}KPuBcI z!l1hkR4jhp1A62TolEIi=-w;7kcqxMNO^%9PKxI#?2+S_Vwq;o7F!FS`U!}22ryZC zFu0M_wK`N zN2>+(Py}8*fFV8XyTdX3*_4OHQpYad?a~(>kZEZI1?ru_*4Qlp*Ru=Nvmfb&j!@_E zJ%V;*wC9^xZ;M{C_o3#4T{unOZKt0BrK65X;*d;Faciw@h*Y9{F)Pj5`IY#&iYi?2 zWz2M(RDQE!9RPd0*+i`0`i9WUJ86l0$Y%8pv;ECvFT(6Q54hD7l6vvl#gL}GrBB~C zN};hgGBnBp_mW$r@0C}LiGY>Wqk>Na8#R2yQ6;~J=%26u=HH_i`>kI$>fI$U?v7!D zL0l07BX&+Y-Dum}FCyQfI~SF$_V17(0!*DJyNJQ!DN?)gHrU|Jr7l11rXK>V%uNsD zIFt6LGFrUGzFnm_^##@bu+yvK@3fmF?c`-j-i8xRQ+k{oF&pRDBsXpZe&Ur;o|TvU z3@dDYW$GtR?6*zW`0mcEw7=3|8fDKJlfbCdSFso(r3dG3n_HNo&48Ys$kkIyzq$M# zv+vUmrM0*Zh3q^YDby&vXYy_YCXfPnO-?VUWgYn)j`d%=Q zEVqZaw`#_a94t{4u+qjIsp7LNZ7;$>kF|SV3@lA~c4U_r<^Q#wpAJPwsYLm1DMq5n zJJ`Hk`wi5xTPyadagDV3aMBD+tI`#d%ZY&+lx&kOEV4RZfKeu0G5njKd*6ppu>RY= z{ujetq%1dDd1GFK!+?J5`4tWTNzirLa-;62mMzSPV<0WTtJ4gN5N=8u01So_O1$cH z(+hybOBe2YVQ(-5y-g=8(};W_A46*Jz3L|bV>hP#KB{b=GjX5#Kp#_)@Xb;Q0L10! zieGlS8C@ga`0!9iG<(WMtoACtCt#KPLk!*>{R|&oTLaO__5m<+>?F}kgaj^s{L0BW zZGdA#oC01V`uI#;XX;#{mGrC>werXwTbYG2FR62;pKQ zU~)rsw}JM8{N=~x00ou5dctb3!eJw(FCz>(TmJem)_7dD`LOqZxG(~7z1|;63z*{1m z>tNqxgTD3h2%(l~+UFeYKc2p=zq|h{U3mO+?jHd5A#e};sN-iR#sFVEOBEd8P18ay zjU*aH5OZHa#{VElb#V83fUF! zNw*!Fw_o2nf%A|4*b?B!T+9;LU60FS+6%(R+_gTI)%EII-%vO%fgC1XziNH&_wXts zn_*JejjSt~){^1cwh0w`7KygDqK}Bp8YvPO<)^p8&3suRs1nhVt0(eAOc406g4AGtv@WwcGWHfb&to_)~&5>HN~|Czy-$gswc51Q<) z;;ihGG9Z+}=$+@5@?d}p1+FEPEc`Gsq*#FT#GAN%FS0ut-qfiJLk&lHFzI* z%h2~^PRS{H#D8EIgZ9`A{0+Ta{X$g+rU6|)0E-~nmlK7@60ZK z>T$XLhvONr)b2dBtR8o*=EA&G5gY zi2rmTS2;C)d$w70-*E5TY9^SUKvxqO3iTho@;@7Y2&|MN)^g2;;SO?s8{JvQS~g_p-_c zyL2o)(cTeN_x02)B@N?6;gA(eABM>lNzOs!2rLgw665HL^VkcmZl!VBMJ|wozc4G1 zHFlpc(Fn6SfJp*~zy(?rgmLAI6n`$fek}8SW7nFaDIb6At3+X9=a<;5byG>&dND^a z7`v9k+XoI)Ww@?{mPyznd;FLbc6_aFrbK**mPit~-<6VwrD!eeC!pIb^+EBC1X?#>rg65cXV~IrVZ~T+{4?wg)Bn>utIzd(}$muguMCPhXk(eEomk-oFP~ z4u%h!c^h|XfB|;CM3x7o`~C2#Tt88 z@S}(Lqs@!8QT$bEkjo_lj6kylA%(9&t?Ici1t^Ba>Gl7dBmQ+j640CnOl{SitfYcw zgWc#<*R3%c%cEPq-85E3h_7ve(@DifCC=7auo*3;d|L~M?mtGo}e4S&o`5g zrOkE4=7e+uqUklvbGYN+En-h3x1EMrF2^A&$pRWh`>^tiE>=piVIwp1O8w8&LX?{q z4a6Z0-j>*u{%rs2dH*%68khSJjRkzN+h2WR;yE@ODqxQZZD{<*ZsCcLh=m1^03uyPP0V)Lby4Sjw7tb3Y~ zjU-?c=_CTY^;MoQ7|}#C`wGI^q4x!IKq|681I#Ye9H~P{b@$N4c;tvKG|MggHR4mc zKpN;GyQ((@2j%EMZ|NE#0=GemZMQJU$=^azJ^rczI=nm6S~V4?)U`T#J_i3kz`C)0 zCz|>Fq^A+r7c(!=E4U3%rN&pt4``=tv{w?9D@G2*)~)RPf=YTM0f#kUR|YB;*a&93`(DEZLA-G%(j zrLJd2wsn6((lvUDp^7w+;^*?8#A|L@a%oXtSidE1>Lo9lm~Aw{Sp?(uNMTnHNJ+FG zAb7CUB47kqT@yLCS*Z>X=WOBO5TFVrZZY83!F3utWc(&O{KsQt-#0Fr5BEu~RhJp; ztF%GS*c@&R)Nv>?gkohk-|2mqZq`loa~0d7t3iJoh_Ug;{$K7`w00Qzbx6xI-mB~v zr-ccbb{@c#=X_iv&Y4{vxrZiI4{YJvctib`29Z?`8ugsuO&zg=G7VeDa?N***vTAt z`h&S{w5OZGvD;x>I4QdVW@(^#b=#(df?$vO`V@`9Q*GXon^dD_{Q;_ztQv;8r8?ok zMMjqqkWKU|hV7qu_CW8=YeBcYcJ*ph!lm&fO2OgvJjZjWR2HmRcC{Ubt zDJ4#0MfMZ%vcRI-f~5;xdMS96QW(N&Ar-L-=MqidGBYE}WR?{54!DQsbfbd9&6NqF z%%>Jg?2E{MI-jcIpb=~wfG}`IvD>}R1l3Z-@QKOf{jYY7EXXgsM*_WZYC`k&eAPBx z;d)Lw<%-!Khhfkm=j_9L*UjLY4OC}tBfS{m5Uo&Ti^HsaK4m*87pe9H?q0ldnbZ|O zOH^Mu)vXa9$4rzwZNf0a+uh5Wwi+jV#+eI-ja z%$MU&z`H9&&?)=H${0Q<5e#E-|W}Kb;wr{xU`?Q{K1|lu(q5UaNv?nyu`q# z6!BcBf-zL8^?obA=5kLq%2`y0{pRQ@ovu!aGVp1#V2vvJh_G>eee?BZY-J^}L`PMd zOF@B!MJ6z@x4V~$T_=T@#wEhQFJYdCmkXnBOGpB6r(9cVZ?O5u`&S`1|Ib2>wQ~ye z807TbR&wA=85P?&s1>5VG<@(OQHlMT!(#_)roh@o+9jOK8n`zg!~sHDsqu!!Y!75M zoNc4fD1CJF(Scl;OX$lttmA6ffHX0={}A`y@hS*eu@m9Zb6V3?rcm9iB;6GEC22H|4; zreH!3A3~G%2G1T`#iLt4J3~bBK<8t04Ws`T%DZ?x{a?%Zl@j~Q$n}pCjpy#oppqu^ zl)kJ6N{mXXQFQtZ3CA3=la1DLI(v@%s&*HCRl5Xz6LxcXQ;v!x`Rc0<8AJ&FLQg|F zv;=2J+Su-UjTz4%M3|EgmvU&ic6mrNpS!%}Vqa#Dcx&9r~0Gfsk~KJqm3iPbUPz$&*Vty1cbKDryW~7&YQD zf?@}F@~Qq0*EI@UKSu`Wt<{gBOW7+-vBD`efggolwpbO<|3a>5sB za3-5LRG#W#$IyvQ{z+fayUQK;3)4Rr|85X`H{yXeOCQswYgN=GipyXoh_Q|rdE~GK zb|@fy39X4z&6XU54c-Zoz0W-BaK?`DuWd03y)qY{8TDvMY&zaUq{|J!(@7@M%6A?U z>3vIYLTK5t)`rQp+Z1lo=;+P3bfKi%IJ`O|*-1J6=bOYjKDZLddxozYYg;IYmtkLD zp23zrQkq`Vg4HGWQcjA&ZXAL>_Xg%cvCbJQ^>?9sVtovUxn^7_TRinGr}FXSu2-mb zr}Y~EK|sF0qdJeUu5cdUkP4_urvdalK94tomKeZERoYA# zQ{pzLOY?gYKi?eCGs|<+*}t7^DGa}2;c`m@&UFM&GM#!(Hb5Ja#4=Kz@#`>ftUQ;f zB}&i}HG2``k}j(0{vbgZ8%wB@S9POrYqbO)2S80isfHE93FzY|!~rxcQQ;b&HbwD2 zY+UZF4b=-@{O9-Z*?SawK{wyekCy{(ccMF69WOtlnJ1rK`gx!-zV~|HYUP|oCQ;(_ z6|7!$-_WM{I0y|_WfF3;=JyAICjD{Jy}hho_xftL(59rOB-3%Im-{p#qWjxuc(Ju^kn;p5$;LK2cirQ`Co8W&Xr;6SO8x#`fm^RU+5L3SQ`~}#r z^#{IWBYLZFl`(WSNQIno;Fvd8hl@O6l`|uEmqXO#d2jFYJ7O`q(+y(@3|0Bg0|0xD9 zIl)#wHdKnQxcvuL!o@9W!5TKd#z}VMUSzRq`)Gd7O${Kk(;zU38aQ)DcOF(2K{v! z_Onl3rmS`Ze>G*-HZkP z^@_P>wn3N*=VGLY{U-1Q3`D|L=@?s?0vm)%Td6_C&F7fwU!TYQLdqxBz*$hV84PkL z>y&r>n87a0bEHb~PM+q2Akk1)nwutVuryc1o5opkS2f%*rg@r>L%g``BA8mS4GASJ zfy@SbVgE#7e>ls~AGt8{lp%ZU2ehMuavlq$L+vkA&3b$bJU4e5up75EISdxqAP6tl z?ns6~)25ciY=(i7pUeLdF3bugZ*l-XIP-o2SiE2j=5OhtbUJf~Ign|T(4e%%(5UgO zx4BEw!|h`wrA`J3L2<28#&brYA6M{ZL6^>OT0-XjKOv(T;RvEphuU?c0@-)-PD#Rw z8N?HNDne5=O<6REW5^qX5>VnIZFR)-9aR1?#$Bpzgp%#i7r&{+KY04+C%`t`csu#( zrPTGS_|HkaBTA-mCgLJ!M6hOUmPmmF0yUP^GYIVXh;5_cm7cA5G1Y;kcvh$KFp`ki z@ZRZ#)0@KQ;(g!nQY&(w3G6N_icOTFG2w(;G23)_gi94t&CIdeDceNDbzVMdE=QJB z`Q|Yr`I-@+=mpGw3!F6q+V%VH?*tf*??U^}c5FwRV|7Vd!~GwriL$SRb8nTrjCH$z%eykSTT5_Q`mX{CX&x+M4FE%X@;1_rioIlO0<6tqi+>J>AUm`HanZUo{rC*t?_ftJZJ2= zUp!7Na~UzCliNGgx|}bM=vjH;Efhi=|K$H8jH(%v$qds}!-_|-(FJpx8SR+dU;S#6!MW~}hGNT+aS@ci=-3Kc!44K7tY99dH zPvvd=%KvJ3zWx{7)QCy;civrXO@f}txydsp3%fwZkCJC#;8eA`py3IVF2X~dj2MNj z8bU_4Xn(aDq(j$2$C!M%TG2zlwsaE~|CK5J4pT>>Ci73}psN7Ranh}jByCe2$u0vE zcbBD3sZwKuKnW-g-<6KW&RQGhv|tHnOH3>bW1Xk;b$0?Ky9%`d?Yo9m?wj&Vz78G;xK29 z5l-XAooC;PjOaPlu$A@(v0f&OaO=lo6*;=J0oC*!$})$n&k84jHI1d1V0A7%Gvb9B zxSo&Je^dEAzW_-otiUaivq2k9q-J&L^l={!+`sOu2l^r#eH?2?Z!5B(y2?TmN zvANudlpAJLAZ4jhw_Ks-tnC>s*{UV9E>>Nt(4YV}77H?CVrd51U7WQ)b#jehW{6de z(h-j`WudDb%?%J~Qo$W^-z&yl3eA?opfY;z@v@V!(9kiNLg&yKK$}zUKi7Zn=iI*n zhL3!&E9f8^5tKT${3w>Ooa6Mx`CQ}btB2N>aA+z#Qo0iD-bhnn$Dp@fviQ~~k~71G z(O=;#{Y4gT%u^Z?tBQibM!6Up!tBvg=6$&VA|5z!-TcihA45I1mcH%twm;7=!L;jW zs6Tx>0M4$)SfprzjfsbRsDs! zl;AMKqgak@MA#^;idZN0nc|#2d$*@nP$(hV*#OhO@%U}=2r!t$x5~K&?ztCP~n+I`khx=Mx%SQ@b!-hFu0nT zbPcvn*%;b;1Y7Is4MAm8(cUW9vdNbcQVv{E41~!Lpjx)$&Xn*+uQjp3rLJzN2Dvxd zCj4Tbo-Q%FW^v~SSAp1XepgY8IYP_>rw@UqS_@%S^`h>x;z}oK6n&&ZP>t+8o(h+g zCYGXU`fz)7#xT}Y-OI3jKDmOA$*^W-kk zlZZzuZV4T0QBHP|3o0RTnnQkF=mgpRa>k7@Pe7Ji_DtXFDO&?9=_kBV(zmg_Y7Ief_)d8wfs)SI;`VzYxYA=;O7448;VV3@B!t=up zDY$9syefwcQ^u7$zh$D8wf$IqvwciN?l??T-|> z)<7B+NrGV0hb19lX2bHkf7V)X{qCFbTd8@d2U6y%wrQnYiw-noAT%EtC(UZ_&Q4^J&%j_lrnSDZ77Mc#DAN?c z%O)}Zv;J4S`ThBl3y|nY+EYG1e%p@y&&&wvw~cI zh1kD?BC4z@vs)ttFs{NeE@-}|0DmsqCjAcSYrkxJqs`IlK-zxK5-;t_=?OkN9uM3q zvjf&FCW+1{mSnJ315_)lMZ_G6Da+T|L7#-aUw~0VH0HEf|hJx@SO@$8TyS|c*%-yyHW9&}V zqi;#@oIE6@-6o%>V8+17G!%W$xRV6MDmwFbB~1XIAb#x6K^V2{qF_x73Lq?-{OjoC z?=37_qF! zEfbpnMWhL3)NQ>e)wO=Lrgs2{ff4MLxQ3M zHDr>CvNwnQFrdG{_bo!9B_clxQql6}nHU{x5f4K4x)GNjUL+&72hmW38dO3mjx%|9 zae3f{5x6ZH?C1gDpC$32O$@j_>aPw`PtCpGtdkQSDx(@Sn}RPn?YZ>EXT7%fehLSd zMQ{;3eZ$i;#FgP(lr+(e#w~RHXlD^vTPEmp)2KVpKHIG!79)-2ydTz#{#d1+>u@$I zooQcRl+KFLaP-ZKuB)!4iQUkRz^e21HWnoVX|k696&26WdD5zAJ%GLqKzX_CH-Z)? zU&-fco?`nFy}Fdd)FoWMZCYSnTMUWP5vazuij=BfiZ!5C14kMdJd#flA2DsDEG!&& zZ-Z(EfEVR|E#u;c&&v1ZTIu3HQ<{(IY_MXp(L1;=MjQmxSGWO+pOVe3(hI3A-j#bf z4~aDjJ|&i?juKT<+$U{Lki_%ddiO+*bK>TnV#*;tY)5w^c63}4Y^VGHotVZ2jFiqn zj@`+QXE7};k9U6^$mpohA6$w+>M5w-_~{iWR!OwiF_punJHgACI%Mv;!Gy;Dtw2^H5@LNY!AF~y}_)Ht&bz_DU1Ix z2`pAxS?B!#)r-1ckYQ=t6Pc?&?bH13xx|E}64D;vI?q7zz5UC9A%9p_jUUD<}-y3XHsH^ z9ZI1a+OIDO)jnX3OJh7+43XRLpNSZnPA=RN{{GxPQP9CvZ}-#14B^9>CK`~o`H-vn zdby{Ov%=xuJb$tB4syTg`i2wJY(Ju!)*?pq<>h_S{Gp8pEgHM`&(&kK2#n)ZxG|L+ z6$jC8343Cg);Zb-L)W%SEphx(w=5IH)Y_dqEO)z>1J}~4TvMKZ!;zD9Hk6deM^>*i z1Gr@E5l}iMYI6V7s4aMFx)d3bYNM@H3&epc|QyA{1e;9Gc*v0Hb#xrX1k<7et-uXeS~agT{rYC|T$9gu4^c(JE6h#>UEL@k{~3{rIj05_C! z0E=0_Ch!$yBY-X3j|%{(z)*Hg3IO~KJIdJbr?}wup7)_&v)l2pWfULryp9po<=EwW zyd-;TmE|V)MBH1j4aC<%PfV?y=8(Yf0Z6+nW6BIg-$Z5J441IRYj{ z(2l@TKU2nmAJ!{TK3n!7Gjus-LEPd{3 zgFHnAd6}5Q2-QNxy<93fA09gX7)9ED9{C%EfDN!UD){yVb;`jml9WrTUs?#c{{AVf z;*_>$_mW64xmbjb+!3x6**F@5v5oIho9NO_i)dzE$6@k>G}y+v{=PR~@N=Au35-XV zcqH*nI!tgqr{0tC({#$T^>jj^h|mH=l&Ge0WIuL`f(s9gFi1awFp8gesW+14>)l=+ zy276TXUEJd7|bip$@(1EjnuvMD#imAHiVlnrtyw!GW97fIxkIFfI(ivYS;#x3A(%Y zt=j*>^MuLgcPJz^_Wd@OWVhNp-Km^LIH_ZZFd_3EBI=>)8zbxg5_=_Z^PVxY<+(b<=QCIR?A+&r{S*rKG_pEU zjh)4d#VsxW^F|F?v`8BJPM?b!{x+pMzx5JD;(xSYXq~`I-G#24cvGLdaZ3k`n&PN6v(CZuseZ4WTXH;av?E)Mvgu@ugWT~tZw_+!I~KYdOl^*GvU zT*#5Q@}9tzes~Y+Azb#lRO*zUReq@9f@LQcg9k1Znt*>wy>miDoYhI>P_7aqyZYNZ z#`Wb#65rT+?#y1XQBI$mH_z_O6CBdGpP^9awNu7BCl@DMNI$ZM8X!;_mttC%Z}kR10v?gV_U(g zGk5p%p&D<$06%X%Gopp`e-}w|ey|CpSUSP=2Lok85$>(>&&*@%G*R9QEfCMk6vPAH zfxXDfmC3^9m-h=YvvGHbBk;#|c~<(kfU&mN^U(-Dw!ai-JjK|H^iDNR2@{&b;M=X3 zYGuqc?7*q`Q=FV?f^sGS66F*0WSh>fB9IrUI0{%;FON0F)xft&RRFG^L1rTSC#Y*Q zO0JW}r1>hU8H=U{b!R6no-q!V_p8FGE zR&-lhCd29^7)&g+MDsQg5ix5)B7in1u^Y{M)8{g!w@K6?^G|OUo?;fip+~9wc1nLXnJZSa)!AHSpgpqfYD$N1)2sCC1S=X#Z{dy zVuMJj3@k^-b#V5lSA4qOasH!MI#yYiZ~IY(ymHNCujN|00A(0zpSS^Wk)_YLTEs>v zb_jB{ZiZoAxJw12SrmowzvKG=@W?1ARCB^OP%~D1K!{Db05>r}e-f$0OpOq@$7r@4 z$aUg;oygI=>RVYb3$1OIBDFp$X~r!vEyFM?2tKC!uIKuhMoRdFVPu}l7b!G)y;bB; zngh}|W)`9r!RJ|I*c^kp%H^mZH1}~o(-_^-9m)k0YSA$_*rlHx{O;6Vm`s8e@DPb{ z)>FQ@GvXssKeANfoTPJQDjiZs^QkQXz-j_Kgg{fmK7It6n8JCVk4yj^A*utw#Veh4 z(s;^^w7&h)@O8aWHR<|6%Gy4kr)WcqLyM43W4U}4B16zF$=g0E-46LcOf~dTM3GH{ z@B3^lFj;9%(r@tJ(D4p^xg%pA6b>FtcahK3t_;IZ|4ii(6CxuL0}u-T*u}* z4`||%?oQL&W5y>KMo@Tkuo#+!NOxWKuS>&ii43e&P$K_8-^0C?ojE|$jsNEaD1P~L?I|j#=9*KyU?M+8<|T|x zt@i+#tS#K)L`S){OakU&BPr(dDB-e#oiE**4pGBW`L<-w;&7UFkr;+R%E(%(akdCZNWmJr#?MeLck$i9YXq){Fmq{8*R~Q5#{@r=-KDO9iagF2OCEIeHk8k z7AOBHYSj*3Pciaij?fZN4FmXErLY+Xf>aK~VWN%Vo#|}EP3!T`I zgSU)|ww{#SLn1B|W0$<^-`KRuTNA{FvwAdvxkJ_#75c$)k2YX#=1)Lu`851)fi6B8 z-nw8VUmf20VOw02zijl=zaZ(?K6RhSd~PzFzguK++$VclDbJW|FqCFw&Fq=`;8~49 zHbc5z)_RgJ%2=9d6O=F)YvB_ueDiSu^@iO5kN%})zqwk%wO9~QK0 z5qbCxGDb~YuI~w=GTKo@MG>)ziazn%9sb!6Gi>i5PmU3vM>{>PWzPljHK?ZqC;6%VGCaMW>OjD(rXuX%vmoR7p7v5(6Zbo?@?yN2E0! z(oUl7&(CWn#SL1AZ6fH~pM_${`MS*9gzi^EifCP!4mcN_Wp~P(14y+FT(r2aBmdlJvG|&i6xEP@Qy+SiH#|QDKuIy3! zDSI5-DcK@%hY#*qg)vLQ?1_?H*_i#VL2_=Na{)w5nVxD?!pv|bMhtm}<>j-eV3iaZr|;y1fADXPO)}a~U#Xgq=y1x5wgQ2AgUCKKr=Fb) z2i;YD9$E`Pcs(4^rd=OG$qfYXTfRyV3BVd(2!rKq14+FwmoFmStv!e^96*99f(q=; zkUUK*#9v9ZFl(MBjyT^?Rdz5wNHaE<{ZsGnt#G*$Wt|@IaA(P8AyyQ8CD2_Cj4vDb zhTGFx$OVEKmM2cIRChTO&ol$HT(b_I2Bs3Kmivngh(%VKijvFGs^dDL6kCJPWJOJ4 zU+-o5+|@wnvM1=2YrWv=9Vbq<E*UPa)!JMXHjf1IN3u7=Xlaw@D~w`=IT|decj}9wLn1eJv^kRURH=j z>Sx|9>(9M|G#2k)x2C+j6IOUR*`zX1U!p}<)mH$LGzr?#Pp*HjypxwN6*;dHNu)?N zp_R3twRlOW*nN@R-pEH<>i!<@Me~W`4F0|cWNM~)WDE82&@?uIVS>~!DCC<^s)&GE zSihJL;nxPwPB(U8Y)U0zTqQzJ7Q>#lo@OaNmrxIHCx0a;WP9@)#_Z3ye}*nLzgl2R zqCw$I-+B1hpxYKAX!YrzgDxL5$UNIR_Lj*h{PefMz1!ZAv;+yI_IP= zltn5X&3?WPm3`{&37?4Yr>HH;DA~1TviQs8IsExYE(YW2pGDxUel1CC_?DJ1U%Lc& zuW(n?w(N6eLD{5nI*kvay=fgcFUYjDI?blBdcT3m+|@aKR(x^93^@8G>5@k+^jp<; zeMZ^@+(~uL_pn6ps~iIcfSnQ&r8=hCkSG!?Re%JcvYYu*Q`nndh#Fw|V~^A9c6s^m zN9<~CsQ{_QKy42_xd+hScfCQBn0iT45w?pJU(NLVV@l$u1C%P*i?glL_IQC#R0%h2 zQvJ?b*rc@&^Ebg~A}sNx7v!-v(~l57z}x^qTPtJ|W0q@F)(c;Oh^su9oqxEo23*gn znH$OhTquXg6#dO|Hb)0Z?oT)vZp0gV25}z1^5qG$W@m|I_w?3%DT%M0S*pK~E8(6H zrw*BpbiKUZ?5{Io6z0~@igf}O_F1HYgWQ)kIX~3c1zpO>#TOq4?pcVR`Az~IkNqyK zQlM75^+Yk1Q@7TlE=CGMiRrOwF$iA12lOr{U=j7jYj`Jv zgW6hPT_>2yG@krmXMVly4s?Ry={!QNPYY7rn7-RSi4yI{WK%OE>Wp%0SyBYtD21>+ z);!E+@*fuQ*j#1CK^O>WcsyUKg?KDBwu$f-CX)5lb`SH$<(b>Y z*wA;n5wP+8uKRmt7{9cyyyO%an@%MQfWJB3op;EqwpzE0$ZFp^<;L-^HvKVe;GZ39 zU)81{aFoRcm9x9eS8fp&ThgRAX5jWGW(yzr*$P{#!4kDL)!t8L3hYb=WI0+`>5 z?^3aQQ^Wui^jFQZSq;)ZZ-MIXmWG^K-@JNgMF8P!PFPfI%GM|hP8FVd(z%{Ew&6u3{ zZ|fAI(7`9TwXo*!8f5qoF`&)nEL}S)>?k=@{VlC&N<5^T==t|7Q+(BR>zqjFwzIv? zJr$Nkpe()J0=m|~#?o5!wtwlaKof~4^>Wv$(@Uvp53}r6>NOhUvF>d1gm#nb5c8cv z`ksJ}U6UFdWkt>pbTL&4cq>kzQpN3+-rw!;zs*yNor2%*xj6}T$ zQ6E1tV&Bh31nv(7^pg8>cI023A+OrXJWob~ha)~jjZ}&A_0d!`asIe^?UA_~Zwp!5 zZcTru-E!a+^5;>^bEQ%;=TXV+YPl675;-aaH*+~Iie5*rQ9%S$D)70?i$n(Ca8vJr zzb(VuyY!filAULAS zf`%uE7s3KU7pv+tD(F6^2;KLO#!TVA%m1{a1uSOL^is|G@a?J%JPtw{wGr3TK|{?A z)e#n!ahoM0Id+16LgPu46O_9DP;bot)29sy(shT3hh6AVoV4m|HlYjLRn&g&Q|u}v zZDu=<*uX-@y(tnV_=h75nJ@}8pW&9h%PtjJt-6s-tDS)*eIBrShJSv@kUDhsQZ-~e zSk1X^*Yxbjzi)l)wf+gYTcV1YR&Rk_(-NQ#MA^ZCrI{I{)En)C>PJcaenMo#GUWYZ zP+|%Q7)fW8comzicq&xs zBd`*r0}`xCcV6ncJbrd5=(D83Cl$jjQP{f4N+HOXSFD-^QdE_lZ4pCZYK=4xDB@_{ z@`DDjse!=x3aAVRbrr94@ZS%a7S{tvR_dWGbG6K!1ojflF_UCthN$}@Owvij4=Kk@ zH@+CTdJtu{-2rnxW%|fjr~M5WrRV@91DpFWr)c?3Q~3X0&tv4hk;dk$_-7YVO!js= z`hIqn?@=uX+62w?X52X~Do$<_l0f0+w=E9!rY0TG=7z=!3;+rV6v)8fdQ4EzhRP31 zgc!!RzU3*0@yrtX3p3FBBur9lz3-jvl`7B z{^fuBz&htWc2@PeN(npsKTm5SAdx)BnsrjbT|c=Ru7O0-be^>y-P4kPN>*Nq0P-ENEE&3qN5 zwrDE&>mo0u59>h%mBA!U)N}Ipdr(~3mPSfVjd~HyvppJ+@pXj`M zytsB^X}OdivVRgMnkME*ywepr@!K26Tn^m@$wmr_>ZIW$$keD=Bn7Ohyp(72mVdE; z;fDI~ZWJ2uiZj#!8BKKwJ+VkjS#Zj7t0t=J5t z)`0Ua6lecA?(_5+L z=_l36B2z=yA%RvsYBRlxabHAWA=VeL+Z7nXSziYG z$eR7=wQ{S0aYcNMU;ef-Gaa9i?Ra_xu+wz=Aa`r!q5C|3GlM!WL@eX~Zp9~grn6}d z=a|Pz%+JW~dmud$dFBXT+N@+}Kmt%({*}3!LNI1O+aUp`oc*Ze?(yZu&X9KuG8?Z$ zKMUvMzm`-V9jz5zc!AcqIA+h#U}0usd-sl+_PM-#uPncKX!-N!Wgm@%kbX$Zl0giw zRDZrtIpqj{(x3Ih&fnUO;R}2}UnCpE%UxEq%^3okR9)G?71JCLzdXJf?_#HaW;a^B zAx!Qx;_@cGCnyuwmZ6OBb$h^@AcK)6138xz*dI)zAHF|GD!u&vI2HE&Q3pRs?68Gl z+n)*ZP0W_o=F-w81^|iK1CoR(?SP*7r0#%X_~SQ!yGT&dRfnPvyV8btJV0hwo9nu( zXHS8rJAsj0Fd43La}+8Iv&4aQvJ2X1Hs^FV#j%mP$H#q46=>7aKBka&GwUfq669Mr zXm{hrA!}b>DJs=e@9%vv-ytFjp?VpkvZJGkZD?f8F{D3$EphFTtr!TJ>W%TK$`$^< z{hqAGiSLWYFQ=Pe(`ic#HDwEGNL`n3dmr9IUbsqvpjakL$rpSnJg8Q>n&n7gt1L?k zrou>H3(Z_)hFfeZ_?c>b==8qe%Ke2ZAtR8GTO8PnN78LQc8=;JbNGdi3XR)a-bn^E z?aSoWh#~yWc}>2NuQ5-#IQnvPvEHWqg2Qod#PZagw%a7P$Que4wW}(wF+n?*EM+d< z@6cWsMPXv9Mhzc3E??PQnH_DT%^lP{y<|OaJ5dVnPM>h3rf*RnxzkRndna`FiH=#c zdgU`!p7{M}DzslbU5^}}6j|3hQOb2nOyXFxDMa#K1m@f;kP^qH(iFz=?{w_D!@wM^ z5|IF+Hb$)95qdd;%TLM5I2xwcRpWzZkn-3NfMUgz#w-#jEY~hyTUSrsr`|gtafG#DDq=mSVQz zFwH!z%iKlq5P#&~Gd=~`@NjQwuWxJ1o`;97^I})Gv{Wq@b*OI$hgzlG{v-{m;+U!e zu7?s^z@?-EtSj|4xNY_Y^|F&=IHrucG%uRir#mkW|0`l$%vds%k>} z<+*G!^Aj7x+``KGkDBcfuJjs946?mgV}@^=dh|$4CoQv|XCu-f3rtJ`4q1Q6wQgzZ zh-r_1$hF6eW~Qs=1~ieirKPo4ny)*=JHYUN$hE|f5?lbG5|erV)h`1jzH{)-G0DzL zA%xHh8$JWmB-1K~lUk^syi>?NX+LT`mwEJt+TBYuKfXQAM5-u+3I2-AEb?u3sJQhe_6d|EY%gm3|M0_CI8Ocs<8OYAdH zff5VKAd}e3CJ93(qW=?P>*tGR5AwhT_f_JRM;>F(OkW8q(32r>^9uUYuxc0S{Vv?S z8pv^UKXGbqUPM#dXV za+v4wDPiwtdJh-Uq)ez{>2>UUs4xM>^B$LD@vGQ!LoC~5e>d^(K1qjN)AJA5-@fG@ z-1YtbSlr2sEk|kpYz#t`$H{T^tun<+V8$M*)XT7a(`SR{X1&zg^UTe<&-(ihKX2~u zL3c7eJj*4=M1<12q=Nj45_U0n;r@AUJs%acjS@EdllO8{M~e*t#<4nK2K*=@78Oo+ ztxwyTUw?!0M+A(H9feJak7a5Dy5pUIP4;zwJ!!*)FgnzK?dGONvbE1dOXG%3Gv8tS z`e;}u;QH>J_)cuClHH|Ni`8+@BzKGc!$Q}C=bOj#;2c7h6ZliBBLw$BHxDkYMg!k< zZ4TJrFFAPJIK@sm`5$s{%-)G1FGTqtaxf_l-UZcPe_;}89X+iqUut)lzE!mz-$xPecDG^7w{@b zWJP)~7 zZaMXY%hB5`%DJ7DdWBF-CDcMlVTJC2{Ex=E8#$hmcqjnB&;~0F@LtxVGVZ$qfDVvt zsssRl0RX@XI{?SCBnI61Ac}Hr!??Xy+dTT_*FM1B&*L2P4`1izc@{grh>Y{?909sX zs7xF`B0(#PH>n2>Nr`a_C>y`!n;sh=pDjJeM)+ctH|4DCtERl{b7;xa$@bw&*Ev8E z)Y`u^y*`9sv>>T&tQA0MocX~*Yc@7kX1Lzg(b>^f$>1Wd+`o&WTh4#A_W#vrCm)+6 zGNRod%*vM2w0EGJf(*D9avvNAx4o##`#+_mG3JT_SAKiQF>-#+WJs-~ba($WK@1AvE_Z2JtYb{5U z!@xxlptiT4V?qW;AzBBrPudF2JRr+ZlR`-l(G5mkPcxL+>qTb3f+3DR^lvmtt=wii z7$jr|uOPie)dQ@23a^?NpnPuq_}nUHSQyu991EJ^%}WmR)KxI*pE*&MXE^u}d^sgH zYSJxxjoWm6Z*?a(tKm%aHRSI!5j?Xxod(6SA88^HaD3l{rM5R7kwfpJK1-hEg3NBL z>?TufeTl}~mNJ;CPpfD&GBr@y1eMxMzM*YTHEo-*L`&Su8!BW3clIf{R5zh$783dtvlm%0v08g?lX#}mAc?kXcj@zJ_#L*B*^cu5FUf52E!XUiT*CK z^6c-JEakrv&6N4c5FX$I<^Hbcl}*=%MKKQ_bw|<^z(~zH*F}Pd$T9Y zoe?ZW5Q1z!z6fqWl(6*`@bRn9?{jkH_NX?*U)BnX=)3iZz9`hqUj(8ov$3JqXyz&q zxopxAD@;=pjsWk_$2o5h-3{~IupA#X^`I+%TKz&X99!P_KslfXUn2M*SS|wvI zuiBK0d~~hASzUl6>zShn!#pH@mNR#qfq0_KEfL3vkr>s6nwD?o-MT~a|0y_4`O2g! z)lE0mEv6U}A(N2+N|Y(rr$<>;f=FYWaxDivVk~+ed#p9ivp#YE6QH8pb}S@!05j{p z1KHtNh7irFzr#T@jSFQpNrdyrv{p=rrtiN9o^4oI5iQlf*Y6QTa7Ag`$oj(mTYfc{ zWCd}-MRt$7w=s>W*3C_8tBd ztO|FB?RoLr{7#czbQ1Nfa8;B22@nj>Qtu5u2FDPeCqj-B+q(a7HP3iZ^pw+g`wD(k zco8CR(AB}P(`!1QH&1Y-ckz;-aHa~q^Cr2s(I#n*vkqB986Ah&9M(lHN)XuwW9k8f zT5C5a9`Jl=%nZ3y z+3>iQd(4cPHgOJ1(XlaA^b`EE_)gx6w@5MdU*3vAKR+K=AK1xB7qg9-wXB$!p`j2& zYjb@wF0IzG%YTSl@S2tzZ6-IlOg|7mLZ0fehxG>x%kA%*aOZk&nDngS1*DvIemK0h-4uv5CCw#2s!d_o2&jRE1O%V^BtU@N?~f3{ncOhv=rqm&Z{M@jx3oLpZDlA6nPGX>SJp66oERVZfv&DTt%j9UD?)x5Mj!|zr4L82${C_~Yij0rKiXL`2C}_6r zTKi2L7>rBbL}sEZOBIU&qqFo7Gev!;H(dB@JE`rYA|fM%+U0^=#zZQm!7+e12JV3;nycjm&#q!zE2^&^(BY8gS;uEM3@4#xbE1h8u~nMcSX zCOs;xmndZ7pDW;=Du*LTOdw|L!th3}&KBq!-E_0MSib(IvF@&9yB7Y3I+jg4*o*-Z zR|@YmsUNk}d+HIidDYg}`|0x$`_w1O+k6Y6I=-n64V*r{Z<&;iur&^aC*zCAgQOfQ zYTM?e;d9m*j!N>hcb?Xj9RT|77{2vPB0T>8VZKM?`Cr_8o($>2iSPUnWj@#)t`_}F zQek$(-TobHUJs^k2uE?vb(K-OlUxqG7I?n7)cbhJck8EXytOf91XB6t7Cy!7H;w(| z*?aB)6J0;HekJmu3zNrVrsceN%3`jj<`YGg3V|inBAHMCEsWdZS;&02Pq2;ecYA49 zBrmHB!W`m}I^rnm^(Kk(#G9Bk?>3WdI$dw=M(G01BdV^pu2N&Gv3VN!xI$?RoPIFe zZu^(LlmMSQp1yYQoT%-Z`|dE7r1kehvTd$vv)NCL7jXAw;%j#jCTdF#PzWPPIzG zKI$6V6<9pRoYVJ5)*B7TI%Wj?BkOJc-xFyMcXyLF3ibx!Ol|M15Z{uXLs$^b#mgGewJ%FoS&Qwz-rg>61$V=T5dCm)S7?h0$s z=Ty`IOWvy|SV-mpXxbT)iN zYP{Y@Yu<(-=|3Si?L+%T7LEVHcIS@@Dr0Mmx?fIEs88^;vg9y(y|<9eM>IO6t7_^B zc{sR7IXMdp_txXtW$5RMT-4NsRaB?)_Wq&18ZG@RL%a4quv_O2GdibA)MFJt-Ltx! zQcQ;~0gJB{^`MbLOotJnx;vX$htv3R-rXmlXcy<1YhBXNR4~aiBAo*g{lp8@wW-i6 z&TL7ZMftR*`cG(8GwVP<&(7ZpCH<*KSWkx)mW5w=c=JFoo+%jwpbIvb7Q*rYk! z+6MJuK{Yo`NeDC|Cqx(0uA1`ooxqZ4NrXt0qr%I;CeA+Ab*>hL)rq`U2DA9Q0%gy~ zxqJWuwzKJBD9C<(9>h_YKAMQqQcZM({cG53d2si)k;h?Uq@t1W z@=;w=&SD|Ff$xN-0GoMuNpCn*f$3TYA9v^$PiTyZ)FO&2UX2d{1pp z*zU*yUY6(m86%nj$@h*N(0D-((E%Iz3}Kuc*BCYKU}dC#e8BT@M*rL z6A2w1uzXTi<_q^k^6i%T$xF+ZFplYIyn)rXqsR5jUvLpD^)VTOE2Rp8Re4qc(Bysn z+;P!sQZZ6gG`Sg+Zw9M=85t)ICY`05QwPJ3nF6eQ6WetnFjIx+y9LLxZe}!EO{K|- zT)v(db0RKKM(goKJT3|UT$pEt_ za)j~N73Yjj!dqRGCW8i@{oZ9? z8<%KF09Wm6h&t%M{F#9U{!X|fxKkiwoF)Gd9B&i98Cvb0NpTz_*{OG6nZw_O; z@4S0PvqBW-@R41bBG=$0@G;NU3q=~6B$J^@*Nn!ok9Qo9F-6&~NGW5qJ_1Fvz{$hN zsh1(p9YP1kgpIX)3&$?WE8GtC%y5Ii(htW`rP_0H z4fqchS?&74UNPI&=M9}lIUsvW66y*BS~?VR04`O}F+TYC`R$f}M?6p7DLke$AbodU z#3Hm&+JOFZcl67D@}~)HVc8eq^(Z&~OKuL++gVW8xRmU~PEq<;T7&P`wphs!E_`X$sJB9jI)0G*kjl>nJy)oSH z8yF>SO)m#euIz$fk3T-)q2Ui1g7+kL?d5F3TCqIP+-uvvLaLJrJv)z`KUvSjOPmoo z(ekLILSO*|{;BQaN-R5|{y|35r8c+vo5j3F3<6Fq64f%oMU+IyMGYwi5hxjF*(xG7 z^y@;s$s+~XC)l@z@L`@uY&mplw+}8xv&MedvWmwS1vR}96qVl9c| zcrb*2F1{Qhv|wpC=dNFGfoDi2JNvw^PT$$DyN#0G^J^f9KNEeRz}OiNNI4Vdi|oy( zirkJ=AF6`cM!D(m!k{;6`_P|ocW0bC=avbl!d6D%x$GH8&3YmDJbWE)WkJ6^PTfA; z^fhWIlThv!Y1;j_(Hff3et%RIryxHD8MdOG9J#3EFp*$WySXu8GIQLSvT62fQHB_E?|IR)3WU?jG8D zY5%6TbV;*d8~8Q%#$t!$$8FWWq!sb zgwHH;JgUCJ-R!zNude$%bf{GiG0xvT;Q&oQvcE~!8C?QEjS{8TshLK6q{+ z6gzVMO=0BxYPnvFk>1Pj1v`3Vl{Qj1+{Px%7?4hzswa9*8fV`-tQ2QY)yN+D&w{+> zf54pA5U`^}y7A4oQshs7y^BGk^HxK+hwaAo$y@xa&!bF4&DALBmw9}qMj~dR!N?3w}ghf_ksTEXCBMC*_A?| z@-ehTbP}pRBZ-$U&xv1dSIj+l3v3;zwJyZSqOQp`61D1v%JRsL*wSn4bpNKRi#tMH zeC}Qfd(j0s@JCkii=G82r`3?>Kn^Ge3~XmieH@!1A{DhzL-aMrAwppR)xYuezGJaJbG@9wR%!fLhyB5UnM zi!yF`7r?0l-n{f({2|rAy;;99S!Zbk0`#&7SwpdQPKP=jMyUEvlDPIKo7Bi7- zP~6xW2bToD7rTYJWHZd!zN>@xT9HyR0wz^BkXdfM!jfzg?HCRb9Lx{+uPu7= zAJL=-r;StewLoPvZOHBEn!*Bf|JOjJHx_${?`7;X;KP_OM+atXx71v%uO9A!U0|VH4|i55uhM&@-6g;KhTGD8st2NauM&|3CaOKTZI*`0>wXvqqb z+_v+v7b;l=_KDD<``XwtbIcMGO4wqjgo8S#ZKL1f`k`%*aJ~P% zW`_O-&l>&^eA&T!V%q#2@7$41Kbc8Z!VLYSu`;cEr~vMUFZD6~ppi67;s7np+o#u;0-rD6A&G_4?JF1e zkOQSCmcn1otGw_x28oq0u1Tol_cMiBziQj|q7IEasX9>94p#E8oHqPI6WjwNGAJ}iZ*9bIy|gE670TsYV;^9 z=8$!axwDsOt&#>OJMS}TeJ$(-E4)iD0W;~7?zA%@(Na)8yo{|;Qa3-LX0*3iioCxk z60baA7H?=UPAe#iB+}D--e%cB5;esCaY3$b4(33zGAi8kNf#WWD$o z5?Sz50&wXTfB8ezJ>+Sui(J-Ib#$N;a*K~kdvTYo@MK{4oJbebcN5r5-|QfB+;7ju zGZaU_e*c`*xbe}rg&c0mu7O+1+fCKjo%)-UDZ5|&Qg%<9EMa0ot3_q1%qgw>xE5FK z?e9x)c=$O|ZFU%`hQgCVsIZ){>*qfL1V1TxwudvJgyg3bJO%K=KT^2w=+o}W1+4J; zu0W~kePFq3!Eu(UTkCE0Z_rQ;e9<$3DZ}0_gm#UApKdlDEbQYQUEYa`9hmDEk$^`DLBgwvIz@et+&W#X;mta_Q@k*cM1Hk?EZf z0dL6>{3C;)BxPXFC60&R(aoH5&d8FC%JqlO6V|e`NCr{zw_q+~YP<{@!A7XP zb*)l0TqP@ktf~aAsmgNdq099N!0w50uRbjJ(vvOuLsWI<%iK>T><^6WpA}g|XN5j2 z`4do3c#}@~@M&lxTU-k+clypNK{5KxEFk;1&U$|a#p}B4-%iN&x&|lUGFKoYw;P9 z1Nt((tONkKaWmQ1BajF*=#XMJS4?o^{KB&+fijuPQzAD}Q4WB!(LUnf%4|(duq7h* zELbn>bHkGQhvT1D?BJmuf5q|3=*P0N-ttv7cG4#HR!oy$G+9jJU!+j6n2e{YI(&sz zXbGu($W-@lgnrmLv)4PcOwbLmt>?~<*e_&Z?0Njd5AIMYG(CBQb@fXbKR@ssAri1n? zIRXN?_h^xN&jvvfwfX1I=OZd!*?`xmszox7#zgRGjBx=#PVxr$C+J_w#s7foa~A~H zqxM4$9x^*F-}Qcwa!~)8`{EU>HxC#k&EsfyJFux?KW`E#aI0MT`Z5`y!DDr)139}-s0~uAAa`ZvUoCG? zmuYMc5l+Tttw&T0eei15W~5KUm+DWCc)L9H?-h2oJ3BjC_K>8&&o}Cb zdg{wfCQF`1E8&_get*=~t%HSjm1ivZR?bzv={d_L95~T}&w4!DvbqTve+GG?uK+-J z6ac6R8iE4=ZCK8@TgOBi%t7lK^luhCY}QI%KG5wcr{J|q{}7#_9LB-hX*%YMD!q}P z#b+)Z;pcAEOwcbOj_a4HCUP^yCss(n_7a81+7Dm$8U*440G7B`2qFL=1^~c=M*zsX zqo`0D7DSpJ-*1IWQFqGK|0qR@uYP_uC2DkP=xNk|eq)ewdHOxWN!SZF5zk_p4+98^fjjD9VT_X2ZzGUcN(14cZ3 zV8{@ecD_kv!l1}(68?bHqzIyIK-g}n?R3cRp-?fKA!5uJ?Xo zf~dkMr%>>fC0oC;zzLC%k3X)dV0v2OQ>I9~zUXjrEaDjz83BNgfg=fzNCzjvf{Fmg zrk;zaVF>}WcxL<9$MmY?kAJDAb1Z%Im79KGpNXAU-vOfl6wC@tww226DMg@lmJ5h! zkY_XE6uSHxn@B;9UMwP-$m=vbq^*&FcIGkUTF|pPCvbUH@~nYdCB&RJfH~o+t)J)f_j4!P)=`YH`)dq#b#DzU zwdS}SZf7^k6PWV)xS2k4?}cp9mH8u|bZ3n(={K|zn|Vz9f|70-A8y2ByaDoV^0dSBf2N`aMaTLeP#sQ*+`*o||Do@p;#8RtuL@0BLeT=}*eX~Du zDo;soRu7vl^E_E=3L(t9dfLRLKW{cQ;;^8omGBJV;;QKaFd|~k#JL2URDj(GGZFmh z@NtCGQlPhIyGuTRM?w~+v?o!#^roDAQINaebqhGJCS6?!Rz6KhmbL3MIz21EsurX3_d zRfwrgh{WkL+3=*f8F)=G&)?T&57W_4RN7@8^c!d10NXOpGlT^JK~l*A2r7Kv&85z} zm;Z5?5S9mPI=)RVN5l{Jo#<#Fh84=$S_@CPGM)*X5PSgOZ+V`Kk~AetF-fl$SV;%i zbEUv~jr$<@Wc`-%xVeYi51(v|?`_-{kBI+5;3Ljl7P9@TqOJoSP9qZ?3=;=Da5^9u!BKlo)l1(-oEB;G>7BeNDi-rfo(sF z1&RwM9^{4^O-EZ>MZ+1Y??9gx zU27k1nQ%|nxV%fM;W{tXw}dyyym=8>GmRVKCW*`B){WMhb%`R^7~xpBiT^)~W#RWu zY6P;~>P29^Z!Z~TH$+L%E!eB(Zwb(g1F#;~s{I!>gqt#_!=B|c%O%FCgh>NVrX_pk zy>SZagd|SiB=Z__AzkJ)%?ipi!2r^Ei_z*AhNQch$DM=C)4Bnc4 zaDs?D^@_h?CmgR2!o?}vrKiSnTDlHb3e46s?U<9qMoU+5t=!eepY8-dU?2OK!z-D_ zg`CL{bYu4Yn3vtz$Aw8`UtGuh$mS-JP`3OUg-!!vA+oB?X(ON`KTp z@!e7+81($Qmy5NI@^naOqDlq0g9RZJXNH5*C4T1+7KjH*J5jxzh$WOX~$#byGS8?{uOO-rP zTg2stNfou?>&8KZzo_vyORT_y3qCUKkZ>|ti9<;w+Jid{(oNcb%~@=(fwLZjWiJ8Yf|u$G>HxFg~VIcrHleNfYY z6E@CUVT}msPWO7HoOgMRYVX7;VxLo{F4rrAr;CUdh5Ri7r24}{`}+pUDGtAOZFw&J zim^9&ao+FAtzI%wX94paIADo#h3_i(A)!aCqZuwjAg>xomlRWf5lL8&Zz-_eGam^J zcV)PL3;RhNfA0>8bJEvMPIhehk0Y%x7lK?_A*VFmqB%=E@GXK%r)*bTKZ1xI^6zTB z;H1b7N(zM&r}EPkWX?M4dpMOndd{4Mt>Sa9FQ}i(si>2_-lMD-FD<>*)B5U0fm$KC zs2+kz5zpP10l$)gr%{W}It14U2ZG9F@PNqYSa*^1H5DZ+tVf}I2<{V^Dz$@UY7TNQ zOilgG75gp>;FazRS_cN(#yH^I7i5*hlY*w2=4C3^GBk63J4#qh{hv*2V$Ma8Ue_m+ zuNPckyTES|UiXs~s*M!KDQeILdC(>ngwR-g{|bc#PFHW8fL1CgtYZI>rIaZcSU!52 zyFh!a>Q3N{lDv%Mw(nhDASJt0ZZCrjwke?T;Un?nU6LG8!6K$b9lga`(3IV)3f9jp z$?`Q86hyyHGx5L&I>EZBlYau}mPG9%#qw@A^3zqGZp~&@BX{Fc>G=&#Q>6@2V-n_u zO6%`aQCzA=GL4&)Rm78+wrK$o=fjP;V1sPuM$zgk3N@t2Z5HtmlVb0`!-!^}HEPp#|16ij!fFSnlLSIE2 z+1$TK+?(`CEeXM8f04MF*tMhR5Kevr6KqfrPxVU1SeC6}OZrK5Jw z{MW-{4%PLyvr9-L(BGuqZH+|CACoqtMuz!=-(|Ioaf`bS(-X0zvXz1d@DZ8thNb!c z>8wT37kaSQ;THOAhWyirwKJCnew2^TnB~yt!^gubVLWNB^aYFsn3&lUN$ZXMG{s74 ziUtP-2fdQUx6gA){usI~vl=jdrlhqUR~ZlQIx5Y&wq8^}7h+EA4^u~IXWO(CdiKOC z-r;A<#8{lM=TA@pAXxl9)V}iu2(Kgm=gdq!lPTi%a@`eD;m0ZjjSFMey6tb?nCk3m zy3?2nyZ%avt+4vZ+mEA7@)3p0C3PvYk7S+n7=qPk&sGaB7N0ZdOnM#!tt-#TEUTo9 z&aCK)7%}2Iyf6B=6%O{tS#NJ@ma7s$b-s5(vqlx+xpV31pcQbfv}5FsJHx=gqFpSz z!iiIb`?{(n1NmRrXe_^|PZ=skOFrdQUB8Dy)GdH+yxe=#CndJ?{t2-WsU{cVGsjs; z+Hwy=VHPw4cl*3x=v$MYLqsa#Mp!bw=5DQM-Nk|ZJ-zHtv{L%1>7n=7vc&lYnsu_b z8F4U7S4ZY^$&h)BKLDELH#!dH{1MIVtfe4;}VevaSq|No$_$Y zg1GCp$#x6rl95gGjjIU#^Pc9{4E#FW(;|e{8y60y^*B&{T_ski&{ z<1q37S9SxlKn&Q~Qta5_|IrxTbyWRFijPYp}s=FUI)&3-=zjoBXKF1z- z)aTk=&t1U_;`sbJY7x`JxnUu;((5(N!)t~NrX}2eKanUf50wnIjC90hpu59u45_^l z|Ewpwq$MMpGe)iVgo9wGqt;`y{|yO+=>F;U9P0yvQVYK|Q6DV)#-`XSDhT>4LW2) z^7{cEukar7>|Jo4I?E;11wRo*io~!w5P6cm?ASo5bWtDO^q1`(-Gp1-nWD%{ z(b)Wcu#Q_yaTzZW2V5k+%GBSJbrQO46~V~?#9J!NP0I>U_h@~ndpVd=NcjCUMMPF2 z`*yXK4+-fR4WBwGr?UY*3(JrC!+D`qCSrHwHp-1aq&!jez%gQjq;%R$miGTJNPc?K ze%C&66q$B?tQ1w2mhKWaQ%fycmaVf$HtM@@N-|MW8Z7WM2VQ&>eo>j^HhG$UBS*ey z%{!Q*B)z^ImkI{ZgVmg?wA?j1tOQjnNXLI+8(UCn9AH|A2Tepf6BUF-Me)XUXNs`6 zJ5HOHsa>*LcrD5m!*y^3HNs@aqw7BZF57{*-kvbitZvpbUbp#-BMfdpg>&w`|-`@kwyEPZVvM|24z+g6NpNiPvh`&x0pKL`! zlbGtn&k$5Q@EVO751}Z_zQ*dk8gzk2Y&?$@rWn9&i)hA)YJ0udvu$fS_&f>!vE`X+ zq92=*$9q0Oa&)RIb(w$*sMdYIjy}I~>gas?&Vi8KPU|IUPMyr)JQz_9I%9kFpHST| z&<@utDL0}Ofk`0QLhUR%D;eNnV1Cb}kceD~-G0g8qfg2aqlK;`;g4}_jb?fGf7+%042!WiD$J0BKLMROaxMOOd%1Iv7d5=I z!n9Ineo3({&UC=z)KwYR+4N==5u=&=>^#ZrtvC+y!IH z|1xgL{JF{FWjOyfZb<^kMe0v0s{b->+oG)C-;LWZA-!kp-v1?x>Tj-u--fVfG6;hk zO`+W`$bjPOiTfgEsd-cOx&2k5G2Kln^0`toLI+e{_3pX^`xTkBG}v81d;FNpO36w# z6K5dFyP~rcf?GSE^$v?ABzW>3=s2d}2m%XtP^Z`W&J4NfXR*!u1uv+eajVh2$SOlC zr%L1N<2OqUFp#rOY1x1E`E(_xbm*`K+qKe$ba5eTJg~!IOkxB1ExbBXEEkVVvfZ<5 z8@=32akHcyTJYC}yi=IrwW*Br_HQ%Se5?I|=HA{uu09&Gv&bJ%tjyF@L&I47Ur=l+ zpAM2lrtfbkmS$W46N4WiN96URn#P@fDJlQERsGw*jwhI?<06>{6mw&D%GTmdYV_+e zu-02fAFFbw^l~e9ZKKbNuvz41XfgCL8K*|T1d}eEBtX5>CmcquT7mzfAj6%rMRfeR z<=Xt51%dwxh4FxZNYj;D<4}z;E!~r$=*97WGqcxR>Qd|yS8lDbS$ke7vY>xU)ZA5HplpDfOu~Z5 zD|~aYlUr5yO*z?G^c&)h`+A5PyLS+KuPg)_exD2z}M%p!r8UIz^LU;MeG6>QV zYd`?RN}lzAnnx6`ARgrX&;RACeZSoo{&l|S36CWJeLq0A2m}=Y4r&0F!}1|=C}iBE?Ef=2=3Ebu9|^vfTlC>(kxdwyFgL+^`j+a-}M8`JySmE@0`&Oe$H zaE+x^dHY`<8q*V-wP-BU@IM4B1pT|S^FM8_-v&qVhlXf6;X4@m3QhERX zTXguVnzaeTL&6m`FPE&&=Z2x_wfx11dr*$F6f-M6)O*0yl!(BVmxl z@CFJH6gNjI0)Molw+O&4vEI=JpZL^IcPbXG{=t6#7Rvh)eMB! zrS?hE-N;C<)bO?16zwcnXcUl$@Cznzpgp-T&<}euR#Y)Y^nuH1jD&--TLs$(Dydo5 zu5bYnWCOXI87{Eggh8Y!7HxXJ5Q_iakN>TP|Nbla2QxKU+SDfwca7RVT8n3ukKGk{ zH8Id9;98_sxCl)CbjUu#WT-9_r@$f;v!R_Xgd5by!&5J)asPz|8ONIrO-lRo;~cjX zwyv~T_>LU)u_+z{4ANj?Zl-bG)scz)uKBE(O>2`2k`VFi_UhCEsy^@mIlz zZfp73y$=`3R$@+y)J!AK0ss%ZV--Qt;St19!Pc@=U0eZ_R}zJry$}tlC32*n^%cfX z>W7s>vT$8M5xkMHrri)0na@8-fuaMpTsB2>EI+R43+XMFYE+XGPr+H?URr1H@5&)R zT_Hc?SXRf_sf01c734_Gd=j2|^>U2Ae~HvCXklnf+P(DZ%WHYV7U4M?8_e7XTWt|- zc2B5NQfFh)&Nh*b#5x-p^ z915pX*ZaZTk*{xbgx(ou3QyQRbN@e7g_>X8?Ed}R{0QzJ&+^)3LFvab8Z_Dz#~8RR zAnvAh(26FSQmM>Cpks02g|06dUfTf2=8rb?&jXi6W7)&#_7mu*3IkJ&mnNt0Dr8hn z1htS0W#k)|HD3-0EbVSPU(2=3PRDCxE(nJ`w|szOy@YWx10C~Ki;pQ>lAOYqkTn+5 zTy6~9w~&6#nU7{`@2f#$#?6YrO#Ic#Y3q1^)4#fTd91!?mYx%3nJu(JZ@q&#RDbSB zc7~cX%4)R}K3*>7Z^2=bo`ALXwT92O|~d6KNV}lCGZ#eBvH8bJ+|&RdL}kCk;sXJ!g(PZnF|)iX8LnB zw#W6{gG%4_bn|OQOfeIcisP143JQG&{(lT#;^%jNmAd^sc@ba2A`lvCHjF>>`T0x# zxPI_c%7VuO(%kW8xDhXyHblP9z@%MsLiz7$J5l97w?EG=EsW?NH|_0)nM50ZD*7ci zJ{=uS%?A6KsPN(!s`J+{NBjAB!!OAYs9fbXTZUyKJY-Z0cb} ztg}|U2wKEBsmz&kCR9v1?X{}Und{ko(%gUCQS_`Zw)@h$w{`A;IySm2TB>~4sw=q9 zMJVF?WM7qG5%wZ}*QpSJpKnc8C%T!_=nc=h+80U6Z{(e8C4>ijZk^!Xc_*&5bCfD;_F;pvGkAd$kIte_rb*-U&|Gnbjz!nPAFWtj@8B6m%MrNtoi!1zg z)DX80U4m5u@v*&R4|UhlMw-Q|k=5EFaPJ3=7eOIA-ON%TL|NliIWZZ%++GI(SfwU5 zY;Tqtem^znqN2s2V=W}Jk7>m~+LkJA;dM!~VqUkH0Bnb^-vkqG(91*vpB6m4AU~k~ z7$u9IRWub4KF|QIZ0L-U%?0E~_4 zR^~U`eV-7TWV)1U+Gs(g0oguF-p@LYnR>;?GUz!#umN3EXNZ#&Ns05g!U6hm8XQhm zfAxgq>NdNZPiPXbW@Lkc!X+8GWiOu9ddHCIIa2hgKvzg&w^a(tUGoX7z^CeW>KtF} zn-v1@K`dd>@1Kgx9fLw8dT2n4-*m`j^+&^BnH*&)|L#5}=66*oaW=mDsoSJL1!6zy zHFvSt0E759OR@Vc?10hNW@Ce5YE9~y&w;u$=bL40qZmMouwAj+2o^9Xt-~KbA1g=$ z5)PrWsip;WLBX`35k|_dM1LYP;HO2HFUx8wOc@MHLCXbxc$@;9)D{$@n10aNWlsev zDOVjFv~0~hP}(vF3Q6ljLEFDra>lh7V1^Hm>yKQ2^!43Eb-qbv0Hx(_t0-H#6o}cx z@Ns~I6{Jwk=VCeo!r1Q1yZy`SWdUvF-csIV1rmoIyAq43A1hK|uEsNjQ=E zXRA7|K%fiQI#B~LGgsFyeql0i_oP8+qB91!?>u4nUDa)}bktGoA^n;Oj>r{*U?s3dH5VE(u{;22pvVX_D!P3trLna_$=lmXR z)$e_Mw_eQ(?Qc?nj9PatK*?14*s#-ceM4gTLWfU5AUn@>Nzr_Pke6-x3Qm%M4#k8aO?d9COSpXcIZMEHx<@9A zptnWdC+&&dPO$o0sL(1iw1y6=)!+R>O*ySQc)iM`;(Rl+iGL<$0#ufv{@{fT*kLlT=#$E9Aal(Eo zWiFwOp5-;12rb||CHjL4E;HG>kQ6YQ$xA!uZ3F}C|wDm*jg?ze*)&8_YQXWc`MV%QGH}ncPW%L93 ziS_T$e*?%&oQRGFqHL5%2O^2(Te$EL=xX)ZBShFFK?&Ryr}H|W^|80z6OJta=Vq?z zFhs>?jxd$pDi?%n7Qv){>p8_3yVPyif>~%mF_|X0NQQI&=gqX2bmH7l<4E9qV6DOk zqxywbq!(~F|CknVIy3$}hr}MA9tSB16rb2oy(YEJrjXl` zUW@m^k@8~&kwUeMobhO?v?#IZT^k2J7#>)d-jhVISolu|9;orHVYG5H_2(DMued>; zf!RJ!ta6cjbP3wP#e6o7P81K|F=@VqNMIq_UyK+U7Fzo?&|*78I@a0tdgV>|bO-}y zys3KlJ-mCTfBLp;RR|DK-hul1Bjp3(KI0*#Qp%@n*4dm;V?u-oYJ6G>l>-g;(;Kq?+X~x8kq>}iO>o*i=1e*25$(GR!Q zwjFE3V#*oZ(~HZ^^65v%=#R+?-Z^j` zFF9Tx6yvgKHpdLetR+v{5vGAaj+m;Kd(ZHc6Et z3`=IkaW4b|Wd-KzgG>wG>v6KUolmjb4imN6#29-(F!_-2wW>l~Q>>PcCq zpyXXPNw`FUN2mTK$Fx=ItBs&*4g!*O8w^~+{&fpu+byYxI~QMIhU~ch?e(VYwi3N*w3)ryU)Fr7|e*2+}kTry*M=?}(7#{9#1Uh!S!q;2s(eYOdD5>H|vWWwW zv5HRbTJmsr9{vhu=7O=4emj+)iGN3fOrDG1rswzzScNzT@p!m3D=% zDC(&AEB_UK*7F$iCdspox6@~+OdK-fD&Xn&|BdtkC9&wc{B>gWn#&M89pW*j&nX;{ zep*u9blNh1DM^5GB~_D3L@IUvY-#6PBG))>gNI>L?N<@;KddsOlb0miU(qC!zBc*tiCn@2kJ)+O@c`@ zgcb=*#A7{iVrl+I8&Fhqd}e4Nl57S^;}lM(g(Nb>#%Jml zA}cYr0cNYWfH7G}VmhV5h@(q3y18hP>xq-5Nj_-v&wwRXl%vi5mtFaZl@Kx5~sdLBgWJ znLegJE!`F5yl9O44fGZUe4!6sXmt$ho#$Nl-4r1h_a_PzUoyxv143}hRQeXouL37y zH2*#q&u543*-qSuQblK9qGMwv*lip8U`A4d#ygqR)6$Haf#~}dN^3ET$Xgy-k4Jx* zEB`L;AVC5QLeuGue!2^UKgV~8_jr6d5&uT47Z~qiS|t@#ab=I&WNnUofh$(7=dReA z9~|DXlnYd&5!9DX=rA?MSJXEal}GyJ?9>}qeD*NkvU)9XlSMh<=OfZ1%&imY9ZdIv zDZT@3E@q(2=TZ(yc-kPNbD6NNX}s?81~5?joi<*b!)UPqUL`=Rp^M`uUlWThvw>;?VG&F;`!m39oVV?7m^wba z{`6DK+{LfQ@?YYoby0>sm^C8jhGrDXZ{qN1OYfl?qO94l$PlkV!)vl-ev^BZ)WaE; z8voX%qu0=7JF9M0gY#Ho#b9e^>V^B5ZImDq>4QnwYd?_pjP7lw&#-w8^s$B^^!Q)u z*5K(!!_=Dt*S{Qo@P4BlrfxP9XkTnKo|lmKUe>=a_vy%E`uIw{Y*V}j2h>TV$Dx4q z^orj{^!Uw)JiVvO6S;xO4v(FqmJhd`~#`?@FPjbfIr;;-!}u;G?* zyPAb0rOZP^2lblUdnX5h$ztU{Co1bgp#f4o4msmvx#N6#q*27;-8H{MM;q~BlQVM{ zLme}5@mc#Km5T=S8QZcU*+=cvI?LzZywODs;u+J(K~{UiKs?KrcNNmb8k=M05?TXy zfBwMk|K8*=KA4J)eQIarxstHJExo5PZdbaobTV|z5GQ_VcUbHv{S1>xmyk1(`$h`2nwA)rhuhyD-GK8qo-)sMfez^1XU0DEqtNxw} zTyOKdfbH9)218dyzgZ{V9*4$)ked?%4uBs15J*20LeK4RB5^_chqlmhB-fz4NBTr9qI1Tz5o>W0UIa7^3X=1 zQh!XzVQeaJA0oSs$%D1z-+Z$fKtkRMZcv^E)c4Iy(tmD#*cuCVS+(i%pW?>x=LH0B z*)X4H|0m;!mU7>ss|7ZfEjw{T;vw|v*~sdQ!KJ2`rp2AHNi8d54nQL|J=N%407-4SO?I4EVH1p!#BT`vaBMlQ7vD2vmnvEra;vY zF2C5F-8Rn@DR9Bf{OhAxmsQhMSIsc=p_&_Ckg!5w=!oQ6*;h?xSbd*F9p_BLmvhLM zo=q#xm`}g0)%AXFIf)OBJdUTrkvCKiDm!6-I8AWFPR@N=RQ8{R6-*2jms~tfVzZ-t zbC+|Mks`}EXWC}@?A^6kM7YPNqk}*EXFAQYBV_Uc`66mSs^_gfCm_9*5fAKwW{5v8 z3O9P1UAAtjnryt#`RYmfLT$yNN<&g(!p_vgx(E@HzxN+{^^`cH@Yy#qu{N)QGJcSA+2ZW)q~eHx^D|^(K{9N|+_ZqaWG27>|@6lk*@uZCuURYa&9h zI9NtU2*yrWUb0|sjZl5`I;V_CUeP`!jo#F^B&u3H?EaDF{uArLbx7AQ2G+5IY+ZUU z@knphWviW-R%Qshf9AcNO6B=_5<= zy|ybvw>NGVbnDw_1obNJh@HLw#hdWj&vQUYK=Sj{08MZb$j^BnxzVlLbPY=fH*B6H zj!<7W;Rbw*SXDf@CStk(vN&+Gp?}- z&lC{Z9Zl0Rv)#N#J2^IJYlT?IfVx46R(6}Rr-{B)i{y8^q-OkqC}riJkBt?SGNH%t zEmg|D{+Jg8y2yZL7N@8Icb({X6TtKM`Xf{RvD)GIlD~jMICAU)1GBG4NB|S&v^|-< z_?2Y-ckbIXtvuvi3QEobAU%2fe9q6m0UR>|?GCN}f}yic$v}S!5fl^mwAp2yN2y-z zQ_E_zsq-{b*R9|31G-AqA61FGlaWI)pcMtXxQ!k&j}4 z_R&0!?~g|B@M5w8&xhFk-h~_-$tIz7V`c;+5f|L|vjDh?EJMb|blL|SY!rkPBqSuR zPMJGmGxt&BNa$4K!ps%h%QFqRLF)lC z*nbRA4tPFQC>G#yH9%@jAF2N8%(nG*PBI#ha3!_N_o>Ajx|{%a`TQpg>Y@OLTyOn? z%64%6&nv6DNeU|JsS*-(8|{AX-HN@m1+6Z>`>s+Ele4Isqe?03&K!Puisxo?dGeWDdLoz(#xQ za$~{Ea3G16XLfBgeE7Yl3GP`H|z*c3!+mE75fNYnP5mU4=y z4_M8v?2H!FU6Cc#n-S>PjORjk_gzw&S)$Pd%BVF`v1x_^AtE(CnYsyiG^IK_til^Ofwwf2vMUSf7%&VTmg z4idh;v=%6LEMfq3sClPq1Z~1w%j=||o0svSS!aJpEUt`4ejcQDn3}=ID_!X~{y(<0 zceaw9>)+k8s&3q^Tlf%NVtZk6YI-C>#3;N3v%5RXt0eV{y8qH|EZy)V0Af%8#4h}v zn&zb-#s||=$~tzeqlX{1F4o=is9VqtXizq#==)96(>xfw0Y{fhcZcz)mO^8SAL~Eb zQ?7~yO0}VoNeCz}Mi80AtnN}KZ#`k<_SyV?N%94II=y7m5H5gUj&GzN6j&Wc&u^`$ zu2qyqqRs!Cd$sqV;-->GA(EeaQW|d8DP%44=c|FNpVzh-4|fhAIumY0+Y!=L9!4>7 z#=ik?qJK%ZNV=V24y_$81PNbi5={8?YUa4}Qp9BXKXg5f z>5ywLuhP{%>E38_4WLvM*qjX#^0+-N)^6BCnk~!v>d!91^`W#K?666f2_7}Zj4_wEYi^ht?2u3^d2M>EIPKl4#7?C)Oq)Z=}) zPZst@?1EF{uA;@T^7!T8Zn3XAWNS>5_TJLl=zbGS+V|riUX4eRACF^lsZ0AZ8zhfB zJ9|B`CflKT`j$z}9Q`s&cjkD8by9vvuNSSzum6bY?I>jh+9LZ0L}QX#`E>bTvGua5 zyy_FDD(aH6^w$l)yU!=G0X^$ZA<~tx0ey5Qi$wJb?D(dfgR_QUA;?FJt07PV&iW&g0TXrLCDo7}y z{^(X4Zp-*jeGj`$7I;K~En0`g?88L=N5+PxIghGTd^UxX9THOF_d6?(ky0pIW#_6e zb;OiIQghaUZY?_ z654Ej%5D}1u6A&qW%PgiDpPa*297A+l{aacC!z}FBr+2{8;rL<0*Jw5 zwEh1qcJ}DDevOK{Eh5t(SV|r<8b&vq#qf`jW7Pk;N(pjQsXRYySa*A8yBi_0*ENXP zqeaFWCQ;j4Rnv2@w0BTo_Muln+_k?h01pD7RznJayE1aCNCyRE`%Hh^bV#Fc^tV^p z%ACTz4|>&s6JgRpyeqznfWrLK8?<;H4iNFa@OtC~yO4vG8c}tn=6GU2SRZ>kdArDm zm4ak7)D?8DjN?HKC;CwXvH;d~YjiOS!pOfr*on+b`w>7A0|JTam_r80nXH9sY4sZJ zyZDh2Sf>cH8v!mE*O@9?yYg$T^hO#rB$3pSx<|0DgQw3&K?>lF#h~?S>IzKzoVQ?* zFrntOZ4Bu3PDwZKe~;b2@%J8<#w|gv1hoa4iAd%zvR{7i`8eGOpbNl18y`swJS0zB zb^X$;U^ZwJsuieR_F=H|+%U4LNk=R{Vg&}@_;9DYAR?CC__Qs`tsBU%&x3@-n!k(p z^syf2x{YK?^J}s|AV?MEy8v!5xN2W+88M|hwpx^r>y$mV!?>IWBak8dQjF%`!>dv* z6}T#ZmGyo_51pO{H?CWZ)#~h>vOfS67bSg;i%nV*>;SMR(D=4Y`NaLb9xpcqY^Gd(qt|yDPkrk$d8E=KW6i-Vq|`H9J8+;hkORg zsZGVpU3&pinyUSfHm3U7!^v=qvJE|HF&XoZ`-t3tctwK}8gOafK_kZJ(}GFUTr|hA zujG3BiE}||?QiRr%cwAuc0Sp>2%mSaKbelod0*!Ehq~A?#+0jpV$pN?B>ZGt1|Xfb zbdOnkLw&k+5B`LU!ffjH zL&@fDlP|Gu<}reCRV&$TPt5(@vW86f9G3#`m+N9;)u8o0`74wMcH__T-unT%v(=GS z_?rDta8Jotd%g0&w?fn~K#+mm)>}3Um#5n|VblOOpgjH>1_9A>NxJJyJ!kF`dKB3QpaQHoVlhW${G$ zbj7EHD|?GoT(n501a`0TEkB&oRm20YLDdCBs;He0MxM8)1mg$5B|i+ma%Zs=(>X(j zAq8pCwk!0_Cdf~{#0vCF8k7uC|JzKtOw?KxIe@2WG=Bbb6{s57Zn;Rln~15E6j(uG z?Bf%MACFkScs*77ir0u1)PGwW=AL)TRQgr++LHv+Qw{%}|HQkj>{~T(wKMJYM_0bd zr$Zo|>mQ6{tfkNYfzdK4?c-c{r=+?9vq`wh z^ZI8#A9}wWPI5i5iPdR?>*V9{$hV zE&?|&NX-Im=j?P;^rbA?!u+6@sh1kK&TKhe9zZ|(4DKPcDp13sJ=(OJrj8B9e#pDN z+nV7}%1i+Ow%L24OT;d@)Vjw(rKf}%yb1!S^S@PWR)A+}JkRv5K+TFT4PXx}R3|1S zo(J1VcQ3|^=J?s->n78Hf*>men=JY!7EKDDswK!@r&r1p{2o8d=rS6iP<*6?+oK;s z2f@qd_1j4S06>U)4Zo((IHk`JWrL{$z__YS4)ekEeMxy<5Kr21t7ORdQnNCqWO+D$ z4IFl_jk|sH=>~&R=5qiHkCNSb-#k#85H;|#ikDyKQp%*N`MkJlMCQBk@b?=io17~< z9|#x(4&6t&O6{DViEL+uQsZJ2!3{1!OHcnG+dj6T&G}iCGTEB0TBbals+uPmeQlc4~{M#52PE_cEh)tT?n$PpW8IiL)}Xm%YccG|+~T;3Ec%H)gX5@wMALI@kM zzhx5l^ueTEQiaCb#o(Lz&ZiBTq*3>X;b`>ES-&!P>u7_Vxr)OpXSXS8QL!@=SLaeW z!T26nOZ_Jl01L0mDv^sq3FZ)E}BG(~_Pwx@{B48f_#dl1ltenDZyf|YJxKtQ;*DsDUJ_jz9Pp*UzA{Ef) z()1C=!Y>964mh`AXcXuwKkjDp83x7wWi;IcGKC05&U&~#*KZG8UYLP@0*+*jK5t>y^ zX5!ap?IY*q5#7RTL@~h3pk5~0$B$h0I7Tt?WBxrfA@(tmn$4B(t;sJ(?7J__L@LmO zX^Zb!d2*Ukz$kHqTJyR2eh=&#_-0d!eJ#B@>q;UYe&N0p1?tuvN2SE6{Vs&8!F8i+ zdiI}kej5qb%&e%_uc3A=&~Km>RhACC6x5e%g|Y=&EBn@pRvkU3SU0Z{#+NB{U>GBa ziDuBZj$_xyA|p?TTlU2qW)hJl)K z*@}9O)j5m6%!8@zWy=^rrp3p65d7Cl-VVGELCr}z74IIfmcq#f>yK$|+tee!>q1*gJ>WPq}BgIyHe|3NmNKxLN7>9Qb}4* zPEstARQ6oUp@JGd~|tp(Nr$NF;|r9n%9EftCp4C_#GBD0Nmy z{b|(Q8O0}i0vf`F5;+WJaZ^2CLWE;@w0qCOLW)ijecp`vszuyrG$+%}n8Hy&Ky?ua zy9*0zq9IpN*NoqWphQD%(v!miIcx@Ch&jk20;@`yp?p5T!ony?ph&Q0wfwG09C7+l zGRJ|sy`h5EKd$+@b&l6n(Aom2=qg-*dc4v!ff~|kqciPya$T*v7FNqo<|Tu8km8n; z3yP?Y(Aq98mmFn+_gTYr)MoB%2{XJ#0Sb_9tG#n$GDAl~ps~L&n<)LAVz5^LWYS~GkmGRUrH2r{l&DX6BH5iujFXd{tFaH0DmFXmycdyPSDgmA zya4(8qt8zSyhWqS3m_p%Jjq-aiXpK8*}9POa-rM|pt+tfkq=}V|A95|XWqqQ`{OY3 zsk!GpcU3}!L<@`DLoS`0%K(ian8$#re>6HHk511A{?zu5e8Mg-mik9rerx#$9sB7xm-MgQRl5k-rXu%PvGJ8bL_->P!@AgahI-6XOa7*}Zw^GOpD+GzKqL`tO&r=C` ziK0K9kjK)Bc(6vuR~f~8ol%rbI3&raQ<{Xa7k>$nl%H^_g*>{A>cJ-QnDkbnyAjrvs2UMB}DqnlzB2ePp8sTQxox!;@L}iMYGe1c)z`LVqQWfp~NB; z@ch*DsB>}D$&e?YW=qM%DHG_zO6s(L>OjbI>jcy>N+J}akct9JrKjXCmg!|l zomnIiF+^UcO=MEx5)VIVN$R{>elbH6DfOt5b}uZ@r`&N-K$q4V{SigV#?%VbCSAzS z)}+-Qm&qeK zT#KFI!I2;tby%Rdjj0D+Ar}j^;v7s0(lDk*zD&s1QRSxEce;P60ghe5}TNCM3YXW+;}lVI!&AQ$PIo{Wi&xreZXb2m~n?y45C(0 zAFu~qVZ?$H4ha}@F#gr_iy6{{0lCEzfV}n~9&?85Y|J0g_;CaYMHInEgq{y&#c-3yC&gTlAi|2kERX;~@;DrDDeQhnnn!X}IL>wjgj$Ud#>GZ@oF+}0 zy#WYF2Ys|+hGxIq?!b&(Tg-x+EfxV&FF?2gYmAowSW>Y`3?%qM64hZeLL7-RElj{{ z6`KuGfG1De0cALDaOhoDy%zEtKxf8MX!?+miz;vkj{_QO98xnK3Z<77CpCQB#8ijV zJTnf`h#-b@Y>_lGm8LnY5JIy%Da2V#m? z(#**At(ajv?FTe^EG_fFur(?T(JYA3BC?0PP}D*KdY9LX(4`E%0CDg!KjtO81V3ta zd5PcNI3XY*aGGrKbjHC-{TjrYb|^KpVA`N3A(sJGs+|HRD-;B+G%ejilhWNNXwZ6O zNi)asGOItnWkC6>vza&4f!Z+z6LJ6{A0+m~WDbuqDA0*XHHh+r>@;FDN#z0wP3H2* zGwzFNh3GOfCZvXKmlg>dNC9v{8>Yn)CdiDY;x=|r0D1X1+wZ_&gNZ{hDLn~hghskW zK{r#LG;>WD%*v<@^&w%V5vW6}1#yy;)f!F7tuP+5=A`9P*~w8kl=B#6d;p{ zA)CSPq!%+(i{eTNn@4a0axnoi%^pC7C(W=82y$pfEa-qq(oQ3+>>!)&W!Zo*)64>8 z-hkBVW?DT8J{K2YR2MWwl$SJTf|Q$tI9^mEVEPaQHM{*L6A}p7gKAzRqVW4eB&BF# z07`PHzknN#3z#s7x@@8l$UzJVI!;q2sVJmK8C*KJm|=qB@>8bc;3y(iAR*M~LV(8T zMO<724%74wzcwOG>ex8pv`3;+dzdi0U63Yiz@k7D5XT}BACPtf4r|&H4{0+a#6f%5 z5kZn(3(E#VX}y4jn#>wVCSr>Kt=LM4Lo^KVYcM!rg*`?k%CJzmV%$z}?H;qu5;Vj` z3U&;_<)F@=VW`%73AzG^6GkIP0>wEDlg{G8MKCw5Vlqr#uPMfnglq~0<;OB7Rr1lJMAnZ*oAy4fN$2ows9mJ3-!iZmvWgw;NiPi!$_0V@pw z0!%pN5{5vlK1_HSVqD`uA(EhconFfF1k@%wsEFbWO5KCS41hzeApoc+tBPvhO8}u3wG3fXDOXKID7H}H zGwDd-G<(R;Oxpup!>tX>m zfun>)g@zF`szW?Bqcg6LaV&ay*ve9w96q_kVuCHE2qMkoHY&5;qKFz{Iu^tr101E< zxdNC(2(?lg!Ga2tj*Uk2QMNPW)Z=WQkfT-T-C;oDrcekxb2@Q;JWc6v#@jfZN@-`g2?2Da-PqGN?2aCFpA-PCS~{}k#ayRKpBTQnB1JSrx~y_;o=1eMCuet5T=vE z2W8a!nZAG}L|2>mW)=zgio!sKq1p=YM7WF@NT>M@sZnYprBV!+Md>y22xBr=>R2=(HvJP6b7|EpwsIZ85x?iTDr+b>H-*PP$6`-Q*Vh- zV+2AnEfwP#Ml(ie1KO0*8PpomDKDtBu+n2NQB}Gn9#XG=miq zvpF=oCL*xM%mK(o%6YLcJ7jcu)oGyvWFR_U1oeUuG@&3kF*rgqbNMhO0E8_Jo1+07 z=LX#(r-73RQU;WWp@a%zQlL_vUWpY&`vAg$<0z^Y04l8kNu;a}J+9V-X-Ui?7bXlM zno=L(X}LzR#f8BT9|$IqH0IB!jg83&rucF|6E%rU1_cuJDkFCVm36}uiW8~XDmgZQuy>yGfR{r^lqJ%&58u2 zkQ56NVTlLxTZwouMWdrhI+~`(O^^fCP)^lu5+@aOb&SF-CU&S$BJ2vjI_TonlD{B*6(;g?4wA(@@8)XJR#hEJT7D$Iym9pffan9WM1 zBA_p&r#YmdbPA+dEfEBu*%@97Er4WV3T`HBIOMXV8G*P@;Uf}S1&Xoa9xpRY@(fhM zouEdokk|li45p_XX$%Jf0uV^J_%btMV{p?lw@)Zi88vcKMs1vk)8aR4cv_Q-N<2IW zPI)k!BMtjFamtG+%>-p47IRXFSc5@pTw#~l?Q)aejZrQ!XbJ;zNkp5Vk{&P9PXL)( zPoB~M>Uf%<)RzI$wW**FamZadOFU>an@B3!F!Uimu1XmcfPioE+SD}I?z1u&Nwb|Y znUH`U2YA|$oJdPEnS+65A*E4>MTE>YV}wfzok~=rMC^VjY7LQRc-DV9O+NpY0Aur5=Y1$+#(i%q#E0Q2K0 z)w{+jra%HzK2VBLRgVkQhOrh&j2qsaZDC)}S zp##L!(jcmLQ5lUw=8joIVZumx7`;_00@A9OBCf?~PJ3KogM&a&4N+yhGU^8iEgm3o zgsDy#VWoi-(fw&brg)SloJ@z$N`jOJwuC78M6sX?V#Jg*7*IM=08R%2gb`wpVXg^8 zQG<+0BmsvyMyZB^s}RRQkZ0DrLNtdq6GpMLnr4+mnKUmV3dEr(-GZPAkfZ0MSX`MU z>NgoB2D6-pb9Dl@f*`FHy8FlmZ!#ZKZ`UP5>i>m{rSV zD?M?JH$Z*Rx&hDyn_YMu;sQYjX{F5OkVw*AjLvao z6x)L81@x#dLLn-1xjZHpTY+<-5DX)v4Mnx7I6ZEq64#)Xu*AX~E1e#-g@SY%i>0SU z0wHzE;fpavei4X+noL;{j;BGIBNQ|!)3LZ;2**jO2c+^&F;7W(7fwo-WVk}21m9$U z4TRV$H35i}5x`9$yIIV@AP-786`hL*C)lA()U#oMlpy7yD?l2VU@`(sUeFz*#W@j; zMn{YIoMeO~<6L&cM45$_3Bl~Noo$9Z(ty-Jm1Z%57Ep_kgf(fPdC6ji4zI^xX9fT# znbdi_VX2bAXDi~OIL(P^Y0dxB$!;?xdfS{3XMw6gI9+}8;S}t55GD?6;p2eHX-17$C^KcsT_p)?h{30{U8At-0i_b- z(Dl&-Ey}c#DwEu7qJp>rl=C@$j>&9_rzAx|-9=K?YAsqfrbh!FNaw*&OEE)_!2&D5 zNFZ*)Y<#iQPxH9gbTekuLP099Kr%ocPZ0>)Znx0&ak@u@dTCacFhS!D>j|-wEgG;1GI6}5D zP9=0)1E3YAlz@+_R=74gs?dfoJQGH_4tg5FX;B7{3`b~uzt{%&seH;SO&RTMF3o0% z!#v79gi1w{PD_UZUJ|6#gaN~N%#lo5Vl1;oMzc^Ekpt!yGgKl>5=-gfG=q#wWCSWS z#tj~?)o#`cB9SoH&G!ArU7nr1`==wHyxx&7>~mHJNRRq{STbdop1Z zg9IsOn!{s7(v&Ng8>xIo36oj{l`FEbFoQHORT_e=k^9v?zJrueMWP?}M@Rt+7pZZr zm#YVvRO)S};;0uXW=J?tTU@DyFx0MAi+og;s%O&uCcjrKk%As2RfyS*bemTlr&3D| zmezuR9!Tq`vWmk(jgA1Ri^UZLL!69ogPD36)!0Q|GH5Weq&%e}t|HAYUqUTFs3bg{ zqU0BXAR(OtgrpJ<9I#3WN&pmCE)20t5rHfqMPLsLBN$b5CO9?BKt}xRMvZGcTs5Lsm5la8GX^%DuBs~z$3Iwg}kT_}Q24!3) zhoma>w2u;iBNf82V38=O5EWwwNr%>y$-ca>*Ph^6d{oTy1*qJ||2_#LkMPND{wBU3s6~*mVi(W@*g~lJ@8O>%d=Jly~Xl8^imDwmwNf84x1Tm-% z?THi`P&yM9mC6|d5^A|a6?Ql1>tq+L(|l%_xkryJmy5~XD- z`UE>E$LU&;)@0DjQwEh6mpQy>n4nV$3p)vk=#=D@)|3xogkTR6P!duwV5fs990&zs zUT!K7OAGu_w^S1jWc*>u64v^>5i6D6lQd^s5dstutx_AHvq?l~jky4cTB%B57DFP2 zb9{&*t_k5931P&&5lVs*ml?u>5|E$L1|yjez<0!S3X_z@ig>Ve0Dwbjnkf!QP!3>~ zQvI-nge8RP0Lpo5H6kn+fqZlt2!j^7I31=%tVXBIDsbxA)<{$rDP~BiE0fArVv0!I zz_kM^2OK7Cbf%Rn1Em&@ghpqiqX|YVOau*L2g1_gf@suiR*HiHx<00pOLg?5nMH+J zl4H%RIS?|J6r>`T!k1>zA`CQarK?m@f64&);w-{rXK0mlu}_=u#uI)RwEzs7nP;{r zDb>>Gt$;=o3)3vh6bv(HmJBE;43kWiFUzV5ieLtmBw&bfQ3JuY0jfAmXk`GDLd_0` ziO@h^F-(_X`nXCQ<57tKKcbf^)Lz(SjNwcZS0N$I)?^&=12QUsQd4PArZh7$#2|#k z3BLz0dSecWz`$__BA7?z^eduTFWW8gp)#tbv}jXBPR0m2Ob&+9s!j8$L{+Wu*t8C| z0%9@6sYJ%~FeXa^o2U{W(O@=5z)ZPmmlc9hE0&^4619MeTmlGAq27o^6V$r}%qYvv z6Co~>0yYZ(n@<99J#jC=q8v%)5>h%%S$#;AOwdTe8dRF4Du0v+g~RL^N8(K;W$IWe zqTsnaUV=jaax0|-T0p5yMH#_l8nCL3ajS&|8elwW&UhPL*d&)|!agJBvpPXJhb|!K zQn5vgXsK8NL1MbqYy~lcnjdutO%RWT!X!)N3&{Lxt5mKN!uq1xixxqwI3uHnY)p$Y za0}f9*{lj!>16~>S_zwrsBi{ld;%I(N&o>SRUd0@Y(7rLaaTw#vqMT0q#T(fU^km$ zW=jwDR*dEWUeYqGUofW0(Wi>SxhMWUZ z#h@NZLN2<}LMj~wmnAAwa*Ps|lTe^)t5=Kr#ag!vhp9Z-OQ0UA3Xi$jE-4=KWinWk zCd9@>7DNM*bdeJYq%1a%nZcA(!I4J?Qc_4s=UD9|7IlfE9EXJyz^x%rq7aKiEdnnh&um+eqLTXlW%!DT4CNrss5mb6;eq~C{i$($5 zOF8QV)8W+wD9OjuQkn(uOVdi1(#7UN)U5R}FwA!u6EeF&%vRVHPHz}4is2zm0MTX? zTjOJ>TpnB<;M*)FE0^i8&=Fmdfc-iiRp0Kv)h{L=ogGD?q}dUX28a|8 z(clbCgeq+kRt=8WEDj?lW)>qB9%=O37@CZwfH+n98sQ|(geia^LO0Oi1Y$kWWPz06}KY&>T$ zKqi@9AgFWT44RaqAkvwuW^e#YQEc<^qk5CJTC<9=eR1gvltC9Ri^MO(tJs?2P=d`=^r(|6vtb5l zN1W0)X^4f?NlN{#LJ=+@)UXqVJrNYA*)@rxr7;%(nXrHqvH?n;&SOI?A%g8u@mzY4 zN_OO#bsHwEjz{$bE#+48IYC@OXjK2=D$rlPWs;>AUoll2(CD;)MkPS}j!@bPiAZ-a z9E`?rL@MD$(lk{d5@uM8v6M@~!Nk!N0ZIKnzt>M8Z18(U&pftDAQAHDGMQHA6I+}> zfI`;~Kw&`Tv&184P|mf|Q+&!gNsHeUl<=a{lS+dp5Wr$amWxm4@sei$KfkW`58A~QS}haMk#RQW0C;>K z&5hAHCd{I>aJB4Yih;8M91vTc72tq|p@>qEUty(*FuK@5DYYmb(Xxe18UcjU^mqh_ zC%IAMu70 zGGSpX=5^)KF%}(Tvsk&13!&#?3>GKX!D2FVVa$QLC=9uDma~}a?`i+UR~UB2inc*g z=cof+Toh{;i^1hO*$#>!O3!6sEHu}_#lT#MiK0#rV?!)9^qloeKHk7Yq3y$OTzE7~;}}Oc0{O0{A)aSJ3~d4?P-kd5d<*2?9toT8Imw^s&0tC#O9Uf|6mQj z2j|boNxe}rOr&11bDXTry+S=OI)lS-Ku9jr z#pdL)=m;~H%Yiw$D4m5m5DwD?bGgs?|CM_Du8)KV4ZYaRNM{)t^gITX$6`F+%=l8P zzh)8*V`Ks$P@bCt^3}T<;ot9Sd==ea^LKiXkQ;Rs0?!GbANXg^vSdK_&pcw*&_PA} zP?@YeCj37My3Env8{>1!{BY`OT zg8DBS{T(+=93}7~!T%+z-&*{cj|xc^4cOpKqyIdv3cbO+L?M;MbYXLtbT+$4?=r_; z)zVW4g6u9#I+sJ|Ja6fFWy@H|OBQOw)JUVx8x|k>gI@k&+^?9GHh_?*8VRDW+OhpN zVW*HEK%D-6(@g%d!{?(hBoNZ+$=r1G|1t~~CAoR-qHc;tQYg&aF_4q#KBu_^(^{M~&2uO|M7K}3t^TRc09$4jEmhX2yxf6XHp zcAw@z;M%RdfSbp;oUEhzy2jl;mH?>kpI!<*gYI^o)pjh420|jhjG=g3}AC z%=dpy=Lp2mm&l60{xu$d743g(@gGI(nE{p##OPVzMb8E;dWpnJpt31)^hFt4>3}Oc z1Ir39u;c<}Lj!?u;(s<~SvtiMjGClq9;F2|Fbl{)COaF*N@y4>#!Qex{%1qR&dxV- z;gX9PpBhrB!Hk;?XjwtVV3l0RR7lbK2vS;5W3aMG8(G=G#wnSw6@XBVssN`D!E42YRcE}2zc!eEqO?BHU%D`nVa zV|Gw>(XND++r`*HMc5U2&Qb+lHborBfU`oc1cS$fN}Ms_DU*BK-w=rKd<|W|wbfbM=^_ZmwJun;3$zf*Y zIJqShycdp>Q>v;3c2%aFR2Ahawt`aSHbG7{ zmY3yq*pgZ+WWdW@(PI?B_ad1t`S@kE_aPhjI3@MM0_V5Ov8BpyaBQe}G##{W0R$u6mv z^j;*JjM4=iD=X--x}*ovOX~hHMv>oS6rsl|Rp^1-Y=R!h$u8_MOKP>iDl$G6^xSWj zo>GC8)%s?3#U8h$dQRxYJ|s51R8@N1Y?fI#SzQ%^O6r9LsK|4&i@_^OI9a8}b+WTr z;Czv!{(G17N-B88VUP6!yi$W*mSK;X6?!GMTwuQNo19Ws>#?(fkDk@V1y)JTIhij! zCtSM19+*|N$IfmyL`hxZEKWJu(DOZ<%u<6MH>YDJ&$d#TPA*=k3lij*TNiB?DMvh%-kOS#iZFi+-cPXaC?wEWT zywX!vWqEg1mUk4F*uBaxgI9W1^1-a0!;tMpbEu@&#V>|^w}<@Sxt^HWZ(7Rkr~mJxcZ;#(K>u5yV`r5zl;rhburxk2EvttoGqbb1lDZ`P z$H!Qd8u*x5Ra(rf);Rt%DMQYG9=&IGg_geCo3gq+CaZs^_ndZDM!sjH=ZzMc|0RhKMSstJu`s9j z_XxqB06&1DuD@#_2!}|NN||W90t3Xo00Ga|E}v70tK{Q)QQSMSeWAY@~@S`&lx|L zcd=}q30&+AkSGC&i+&DKh&ric9Z;enH|fdYfLu;t;WKcnNr$;CvXMR3)H(5U$E)Rj z+1zT(rbCP~sYa?($aM4)X4Nw4+(;L8qVI|K;|LMW=V2 z*Sz!e>4OKq%*^*Sw=DYb@-I!6b}g*^^!%qSe@#AV`qPu2w}o4tetPHUI}dJjZTWTA zxkDa^);!vNuhGSw-yJ@`4aoiV-fi2$)prJbdaCj}j?Pbe)qlr)z3DFx9?Z9-ROUX@ zcg&gOVNL&dk0MdO3$4YcH+<22yk6J9;UiVQ^QPtxUF~xFAN<_qi{1@k$M!c@wm5tJ$-4FhDZzu8_m)1XG5_kr zW_S6E!jh-=G0@{^7Rh_dH82NRb9&0{6)MV56 z9Tn!>@$@KYgr59rW6K?5d0hx1=hWN*;;+lyG}gKPjqSnWz0pN-+GWRVCbK0zj$GX6 zoeN{GPpf{VL5&Nemdb~md3Vy8QQCG*J8eZT`QK`Mw&DQCnc(3bd7c=80?fog41 zKj?1R{GngZ0k+p3b%u7T!B?~uU+OquibLmW zHf_Cf?UNRlxuH9zCJ;(nQx+MEbYH!2;QY5|Or7;`laD?lx%@b=ST~YimZPh3rRl<{ zt%tRk@kI?A-|^c1`|TZXiDva&J|Rc)-sWy&<_>&IbmaVG%MkND3_jepb9?%PPqFdS z_5Ri&Mr~SMd`Y?2)|^t`XPa729N-bdpT~Ra-su>f>Z>|hJ;z!Ft$X6+rRp1Z{cy5( znJYU-Zdx?y(WXvas{DYZnvCpW^+jfTy1}NWGY)=q@0)qMqY{0Gn=^JhUf)%@3-O@N z&s*LK^}p46cpZspKOh^ofPAp?UK!DcvA#cOH=e*J?Q9x4Jnrtz#~*w?s$Mg%>-A#| zMt?SXsFV5OulHKj{i>g**X*~O98t#ao0i%aoI7x${fAx57EF%)U(%&F$po zh~w+&<9}?v@8J;V$q^mSAAiGmBCuL9;P~7R6X}(v9c7otT9ljc!I!=GM65o-IQXSo z0Kcoh@kva;+B5Wn)#$F4%1ZHx;{D&u${D(@=E}OQJlCd9n%ky*<=wu(&=aiTqi0TM zf4;CyVVNEx`ot&AhvZgWG<8YC@{?Bh*P9mAZBHL7s=}HyOAwvHu}&Kv{OsV~d<7J5 zaH-~{i>+6J8@IK2aQlm0In5nEPoF=(b*p~bFF512%(&67hv1XC+jQa8$CPbXo^-81 zE6-UUtorli$=kR?e_c_1;9h3s#PZfKdt=`&-}n1)v}Skh?QcB}Rty{sHR5smzxE@m z@ZNxr-a5oJHg*gzv!}Td;`KSQv_4J5)>j(P5mtY?`-d7Qv7Zpx;q4VA6X(p@P#c-* zUHIB}PY0+|rf&;0M-!``E~$oeyi$hQk?gjbV_JD_ww$r4+}T2%^2q__!N!XgggNv3 zjnE;@<)1BBeR0&gUw`QwGyBv!$CO*nq4-4*{mk0AJ9ok_$veq@ zbC%tCAC5Bwi^~jqecMO7@7_eJeR#8(`0+_#o%F~+)?$h?uQVuf`Oc~8bLw%1bsauuB4a_n#yRfqKJ3*kztxHR71g zv2Vz=0UurZcx}Tig%=O5VnMqDD-?UXe{*x@rUxJQ8qz#0FMDtH(%Ph}(fcb>m99Qq zcK*TgHJhH~pWxnN?df<2TV3~ZirL}tPp3LOe5)UKN9ys7iM#G!9e?15^Eu@BHE_QI zNspRmPV7J6I~DmLb?edw?l(te<;pi1Q}I*7fpU|#3|_-JzACbya(ry9sp1o%Exz|^JS?BQmnQaQ*|7o`I zVm;3%oj&#qn|gFh^%`xoGq*Rpu`#4uFaK(eg(T+ zv$pFw7cS*L+_jdhd$8x>`ty&ByrUl8y;Ed=Tz~hc%i>t&uMXvJU$}qv)XAgP1#A zUWj(7N>=ssE4bY|9bbC7;l7?Th~e^cwkKC7pSUut&cvnt?0wAk+pEreTJUwRt96|- znjhH7JGz2@rAqzqJ7rghPVc>Pw6JY|blV53e|(2tZRz7?oj&h3x?CepQ&q6d*}AoF z0fqgO&J8&i?#G4UxhFn3SGC50dTrQ+HP5bWZa*b!I)>;NdLS4nrWHQ8^ud}Y9j{fb zJ@VnN53aNWer@U5|K_R6<=XA}xl>)g?ZTY_dAyZ+$9uXu9UX1!T|&+loL~EHw-d$> zm_j4xhlYJB?p;y8r|8$QJ6@mK;?SVk6F^4j==^uw)W|!V|t+T4lUO3THP2Y zU;1eL66^NwYJa{cf7gP|hESW(CdTS(gNOGL^>y?sTh4ziSW*AQrv;nfZRte4a{DI+ z#=d`L`}6}JF1fOEMDKlQ!&BqCU2Fzi_ig!vd0|E0PP^;>ysZ80EiGmgGz#xMt*Gx9 zF}u#J!j6NlRNsDS!sSl6ANkAj+Np+YIkA%L_$aiBH(_m5&cBo2qyOz&8}=RUChgQO zG`39R*^i;66K@~ryS?%|A8wfNg>`AS?oFOL+8n+7dC$+-%Fi1eX;pS!0cXUH1+zQ$ zSYaJ+I9^RpL*0oK4`rYgSSfU<{z0j}wa)})GeDqn{IuFbB z88Tses<*s(Tbk^hVBhi`ChgJQ8+;ww%)Pe0=i+0B-d*^SxkJ~;JtL4K`Keu*Bdb{< z{khYxUHtOCtzV@EZ7Loy?XK4H=SRSC)9AL_YL@@{yOyH{J-*XoaGO4jdOrDeP_*p( z&=NJX+nCOErETjn9&`q54}Xo?_9ggxNe`FWVI?M z=fBa+n_k>_R)h+3ozQ3Y9{;8;oBD7k z+*AEL13qeYLRjXtb_TM_xwa3G!)WhhgFzjJHT=XIj<`-P8K=2B07F2$zy9fj zvJ3P-{y1&S>)V&1A6~gPv-!%qP4><0)MLJG)&^$Ha_uH8NTYq1bgE_euH(%kyL+Zg zUk^W7BmU#USlKBj4%vkZ>x`W?uQPkj*3RgVbN#n|GvQJ$w5fT{O01l*!KekR);WKe zPL4d*^7um__O%#3^5&(B8Gw~xvh1N4m=s_x;pkk z_a`G=ZFoaFofhugQvcIdkUVE=^!)W#p6*&$|AawNVP&T! zdkl;8UtK-_UfaFI;aiid^}6`zRHX`)Xphd=_jY{*@AGcxbgX)p%ZE2jt-`w5HCAu; z-cNtZYyY6)g02O}JDl5idH#cfiyh)f-g5Vd2GkH%aZw{u9toT=g3J7-;} z{@&J)IY6&ouipox-)!3ZwEx2C*X9$vs=XIhUe>kEvJZF-=`@oHbPX^@W z9({N6!Mn4+-ejA1?B<)s5tk~h{`eE?L)w;)7YxzQpLKfV!MzQ7&#hmsc^kfYZ$kcl z)fc~MuXn#c>5xPxcgkri&CZJFd-OathIJ7S9Grqr7+bs9(gb((7RT06mM=EE(Y5W$xu(_* zMe~Y7E7#4_N5;H6ui?HKqQRB69cfi%-0^KX(a0}%bh$Nu)?3w=S01zb!RTp&S~S;g zMJp|ejJ!5$x8G355(nyYk;G-Cb{5 z(>>#RS|Ht#)th-gq_itwCJLUI_U$J|iS4U5;X`+f!%h!^8z_fY+j6Py(Q-h1f2%{= zs(lq)fBs?fjU&oe+_1i!B;^tI{AuiMZR5(}4;w$CPq_VBjg{V(liS5+f4gAuq>pC| zVjVZO>0=l^DmbRy)Frj)6DQXlQ-h&B=KOT>f&2CW-yImpXgzFC<uWW0 zpS16J4O2auxTH1Cuc=zF;0piEG9*9vNNq&#^=SNIxu2&gei%BTGOF%soLWaiM|!ID zZ{;d;_kA~i-;Z;IV{4tsy*qjXJ8|jiYlCimJF_eFZe`i)KVr&lK;*`)gfi{a|b zMEMn02MIUy@3(yIkfXAwFg0JY|FZ6*#Ume~Tm91ePUrbmnq&*z?b_wH?ufs2YU<9! z7o9$Q=hyW#`24Ud9Yzhb^Olv9pKfldGVtWKN7pAz@1@>6c>gecMHO;ZAD;Tzm-o&p z4+PcU(pDYoXqO3^9qsXCTm{!$-TvsIZt~{WH`+QE$al5FY#Z#K)-zA)QAyxZu~HR|HHL4u=2cz2mN#6A?2APsY0;30lNL} z-DA4-+j!M}$v@t)L0kH{K1T}9)c=^sy#m%Gl&+HYQrwhz#^46ENyEmOYdCkUEYbwL5e$>E^f390;+bT!@OZSF!JN(nm z{-<6ayx|9$y6mYAqbr}Nb2)rw+oOT2R{Tsm^-j<6)qZ%NZF(zp^m4gfpO0v@_lw-! zL%#e{R{fW|=SIsIgS$=J(Rt*0PuXwhm&-={GX2(v7X#~aK3kq|`$nyN=0toA1=iD?8!7vfRFUAI?3yG2Sey-wX`|k2+3M>=9Nl?O5gTd@C= z#%s>}oV!2Ju-TkJfuqY)H~7ouAFubpYT=A}%Z|C4%sZGUu^^>DkwpG9J+S~=}zShmhKJC6C z^f0!=dD`7fv-YQEw>F>cbH4uEOHDdVzBE;{;T^@!eUmyYIhk+!(ntd$OjM{l3e#(O;l>ySUd_c-=KkcDj_u+m@HFuqlPz zSx*KXX#M%IE*I59R<%EO=%=GOwHLo(OV-+cV9vdJHJAK&eZ8qi8^ehzruFSRjO;Y5 zdF`{tjo&Z(LM-E5xU;j?yPv;#XveUzLsl7Ueb-1)GraVjsn)K}!>VtYpMb++>&H)v zY?O%vGujy8OPYp z3ll)^{-yaJoT;~UcJ9zd9k0iZf$z4f5#06V5P#zJg|p`_FS{Xkh<0Slrn-H5dT&HS zGx5vygy%V$@L%Mt+_qfM!%5ltBV3#)reO|6zu(cVo1LMNYy3Pa0j z*lQ!pH61*urR11i`le;*SLctH`TW+0?=3BVe1uZJ_Q>s6^9TGOaiHw&?|=OmPONyJ$yUCw>=|46i@0@|ZoN8Xvqo+qp35ycw@C zY+?KKfzNA6-3J>+UwatxP81%#wfsy;+NV1TJ(4Zh z7s6?m$2V8>ZMyQ@)WXg`Z>ak{_EEQSD-To^IP1iwc@~b*da%N2WWAwRdoE|6>A3M! zPf%bP{>GzsdRX3E*p^dc_oaH#vcTQh^_tdd{-DN?4{B~5(7e&D8$C^*eb(>&il+vC zay1R4 zPR|`*pdQh6`c&z0#sl!6Wzx|b7yHf@4Q<-2;f>oBkB>&}@S7 z7v%Kxm74yej@4geU6^iqMZHK_ZSecL!U4ubt7hr89eLl9NJu`~bEcs7-MSlZzCE?9 zeurYZEOj<#{N=_M+Y(=S#Hn=qo|bfs_ONiu;+_XKjbB(e@F6@%FRxfj5A5Y`d9R+h z{HCfa^et-6p6(qw?!tE7FXN7JtK2-C_vt=-!0qYSto1GLnRMy1&70l$rG}y=RH1XZ z4|~Q6K8AKT8QyW+tkj1`Mr^t0e01Ty>~c9;w1=to>LIM9AE2`Mf&RCCC`?^E(QDh~ z*@K0LcK6_0hwrZS_JbMoa(-?y>%)coej{%8sg&RT)>?0++G_^a7*=CMN0jV6b^ki; zNMEb1^$+O?xvlDi)$f;Uv3vdOT0eqt!+AUDA8!97(do5(|LJAz2lTJz@#bIe-sbUV zy_a2iJwSM_`uc7id#Ca!s7u-JSxoT8?&i)n%YFm(?@T-Upeg#kb=QSE`lXCP)5RAj z1bZ%~W8ZZob`Cbb|MSGvSL=+Nx%~#M*+<5a!+&{mQakKtW z)+yAflD^iDOCNMxSiYyW#W(%wPigs6_MaJXb`R%jZ_&*&4c-{gl=Tj>clYUe$98NU zccyav$(BoGJNVXki-zQlsu(mk=}Sl#(C@+esXzVFyyLZd>pxijhI{YfZyMFxylUO_ zj}P6h`GZ|^xZ@uR3(b)$Fbl~jiy6((_vo2ZP3Tr3c zxHaINBk4`Alb_ytauP@mY?-J~eq=-5s2i@=F4r0S`t^4kUwD&V;mwxaD)y~CcG9T< zcN;!B|IofNQtk7x##Z%nyR2BPDa^mphg+*x>q2EU*}k*vH*@? z=a~(LOS|^dPQJSJimn0leQUF=piaE|#)S`O<;!~BQbSJ$FPc3DJfiAtI&yAS^}CWv zuh;u*+4mh{Uk$!i_~_}QpY9#M_9Lf##ith&mz3q+ZFcnJw}PkX+m*EyT8`=Q(U5M7 zxAbUFh|gc`GT_FP0lU;ye-cFJPI|X$J!0Rbo_FS-s_neb-ah?;qQ%^!-=1LDPHM%| z1QSQE=&FkdnmaUC`uUrkndMvUX?dnKyY22)f`a<@l%pIq5wBOjF<`JnfK6B7cvT7AFttMcFPn>TP{Lt?KD8+5gxqu@%< z=^XvKCvTk5aGz{=f8v;9V_Kw%Ptwl|8hr# z3N@$QcT9S({2M3kU#R-7#L>IzRPw=wiH-BizA0aOGv9kTcWrL6obdSK^UX$seP>p= zWV&`^afJmFZ?IYqg}Q&e{oTHA5W#J+uWwA)Hv9W^2d>oVQnBC+@T6LNvS(oPI)Mva zM;-YX&%02iS#54PtV3n}s4F}6s5WpKv%MQH)|%0qe{1RR?&B(9g0H?j+ii`q@9P!I zcfG!E$R+R6GE>=S^WtaYu@{S+nY^Syeqpt)~8@q`3KGW2a^hSJlaWHyiJ5 zH{dZq`39wyC}`HZ=!8xc;;`|LQ~PvWlpRNlSBc{N0NDkG7;f zE7bh=Z%6=O_J4IK!5|2$rnMRDiG%&0P9-;=y15aDvc8fdmAajV2%WU3gD#JhnzJs@ zi9t(;#Yl&lftSYFm{&!KhS|_TLXS!iXr-m*qDRj!?!*GN)`OyH2I5rZn(6( zxvR0bv8yr6);}$6wuZM+aA9 zYX@^@4RdD~Yexr|WL7bl&909Bra-t@72NDa?Ho;Q0UWFHfv=5_!@T9};_6yRnOlwKt3j=49h$ zgV98Pn{Vx4DeCCS3*h1bFtc-m030xPFtdSw^P$!%<}Uv|hzq7F4-Xe74?BdDgB|?u z87#kP9BiCmHck*HY`VCkshd44tdyJ`P0d|g{)CnbFF?%8*a0AKYzgBS1GLTU>>ND+ zqISlnwwN$zI1FL&W)4Ha-uQPw{l-K@8VoTMb+fiJgZb0M9EK0~A1a&SABpNNFi|k6 zzn_1TxeTT4VH8z!S67(Uu=Re!sv;%&pIX3(e?D}&D(05fe_RAZPM`j7vCfWf?2Vmm zU4Glk0%qgl;^yS$l92Y7?B$`i5>huhWsV;A9t9$Tbq0E0u*3L?=Q?noLyD_ z+8ONZAkbg;zc?yxcIM9N4zNTCQ~Eav!fq&M>}+ZN*M3qpHU7ON!M`~?fB6HJUd-+O zCjF5NOO=1z@aF^m=l<6Kwco;Af4`Yx=jQq+7P$YlHq6~}#$M*X_skz@U@k*Zn7bSd z|9+Ro(AvV#{jUfzv~=Z#umk>B3I-V}!XiY?QN!B&H-fOF!wi8jVKEAV!NJAJ$qD9y zKz?UMZZJ0w3pWJB$p!(jaly7RH<$;^0*i7k9!@YfY%~DE!OjIsP;9V3;{KyHCxD&f z-&TPCx&N)8$nRp|0CV%dl>7^se=Fqi|Etme>uM4XW`=*~5OcHtT#@6?ioe(U7lK^> zF9`l$?D)U0Nd5agA4O+tm~38V*bd|dbNv;IQqI<9|AZnJ1i<~*?T<|?FjxP+z+fH- ztPJt|Zz()~E-p?m2RE1<^1q?{<%Qox8>a8SwiCoqO#VO81c>E#(t;TX`#$hHPFyhm zyOjPZYyYz*aB{#>-hUK@KOv%{>T2v@X6$Tc_`7V;HM0JM(`xWXq%aZBL1ms;qv74?m=*bkM>$y#NO5(ij&UR-rnr{-1FzD7JpB*4YE3d0eU#<%yaX&+dU!~ zr9L;$*G_>E z{DFt&g0zo`JMPlJ5o3a7W_P0%6X2LJTW==)xtN7w`bo#)2L3k|$Ips|=6dsIsF$%k z^^ClH5LJf9*095)#m+&7pLmP<(&uZFx{XV&=Z7VBW(Mj4jUFQeFG`Cj?R}>kJR^^O z{?uJ+)nJu9NlFZNrOiVp%XBa)BpHb#Ad-&r{2t(z50t1wO$x%74~pF`)G`T2;)&W0 zmE>WFe4$}LCJh#j7slIzl7x%KIfqfIC#u9E#dG69ooYRyJh3W@F4C_C7jq@T#i{5A zHDyhlM6mMd%B7p?qIL09)Le4P}i9KB44kFD<4HFj~SCeO`MbZfqlSn85i7b!ZXL^U&{qz=eTUw ze(i-`T4l?ob?r1Xr3_iVi(g9%)7)&_X(8jw?<}mfs`4tcWy-}QPZ{`t9o2_2v;x_y z$$Q_thvoVg`PWt$&nWA?N61dYnF!yt(&F#U$#Y51hFNNs_?R89ReV=pxm0THxfI7n zmx$SglITz{9Py@n+6i?6NP*u|h7hPgx1ou^{q3{~JyaPy>fE3*ARRbs5U?X0wM{3< zKp#v=mA73B1yIKapZ&aTV;zcq9gfa7VG`*}AJHc~Vs2#y9x?X_nLy&?9BQ?ZvIV|| zNQq~MMKHYsmc*X+6%dSV=M7T`Mf7vWAW{xMjkR}Ep}_Fh#=xwRAZj`%V1}M(xIa)7 zN{=OQQS#cDYzUKMswR#uCXcS6r!R(hdFRy6B#z^*Jks_=o}jI0P$nIyLKBgfq>z~B zs`RZ2f);(&GAOsO<~+TlY)8IV<`rtdGov)YD1!y|%LpC(C_ERTEJ2P+FS`d9JmTsq zqr`ietlbyG79(#k#@&y>77@Em2SX`>xoL)RBAiw+hRln{;mdSWlc&B_?y~$~UK*+# zjz~evwjVX-=|shZG^JZ&ZDV1QdQDXn!`8rao;XQ03?&**BNn3`quyQ-1kduUa`2b{ zX999{lou6=yNA?lN1{TWw3r%;Fbx~0IYLO-bL3DIOneY7sb@`(Fvt^th#qyUQU*z4 z{aGgV%3+mm(xID!o`v!_vdgt8s_Nwt<#qof<<4Y2Wuy&c|372oT4cApC zAwCd8tI()>thD+3o!f|-uA#Yn-{ne=`@=Ka9m>F=`LaSA{o@t+M&A*uCCd6pA+xKA zl)daE<#<2(N_JnLkxvhK1r_>i`fnYIv2wQRcfA`{J1pS!|?luX5L0Vh%4pdKk5yA0q)M2C;73d4+5kjax$)F-6H(Z`y z85lJXCyXbZ2h=N(3y+7!_Cq76zR?&^LjwTFDu8rP4JPIAf*9U0y8M#m`nsB`s)~xT zGCfpUJuHZVB9nWIR7zqv{%c8$mxJDmN8;JjdMqhO)N~@xc}4*FP=4P0yg4ykdG_3f zO`SE}b-j%Z$J!x^NV~f5!tZY1$+MTwe{Bzac+EPBUz~@=Sk*&?&fMgwOd#n*0F5IE z55Rb7p6Y~5YF$!06x|1k>KBe0fReaAl=R2&U5xb8p~M64!u&~40sznB0jNNKrR@Ty z)?GX~$f!8JJm<=;G<`f3IQ}&c9#A?SC=Cn`!c+K!m%=TlhcL}xtSg%_BaSPupd?mZ zURGLCTvVtrCr%T-8z)KhZGB;4prfI}RV5jT#xuwN83i#RJ}x#UdUQ~@ELQ7I)c4b) zy{(Ov#czjr$s{JBFEl>c+soTq$AR29N=b6apxb;M{GFYKPDA9Odd}gm*@=ky#RkL& z2TlEvDZ-2bP+c{23`{I+90ViTub{vLIbdny!VLk3y4$TzNv=d5fn?qxsig6`mRL0V z40nGN#4a|DE*^n?OqoPNxnqV3ovErO4~@Rt6=DjJnCtv zPEy%iBvT zbnIB3OLhLcd&w@j&8BVniGUi55(`M~1;iWy*R==Xx+ixlAUFsqB;YwpNC-L+0OyMl ziDn?Om4Dj%UPSblH9dM?VtWHoK%U$rRHTsKX+ZDGOpZUMI1_&k0xkv?It~TS)=W(e zT-dYFXU{QSS!oFep_7pSNGuR>Au~1aF}cIE;QXKAVB=yE1NRXzaj{7Fao_`bMf#EX zYv3+(;1Pm?UnAs&y{F^Esl9+hLE+|y>+2Uo0`T*T_t*hMk#R!&jl#mT-t^$$iXahz zgx}2Iz{3V&P_YYpj=&*P)$|}@7!@7ro{xw5v(={Il8v`Q7rqO7FD)YdZOqOZsy2q7V; zFns)b5wVm28H{LD6m)NeMG!I3aIr9Ov9Ln}#QG7D#YD*A14NL}(R%=a$adl|%cwxY zfPgLd0a2t5I7(c2WjX*-2s#DH1zJRqi5NU$&@&Vw5dV8Et@nNEFm>p~M1sPQQBZ|J z!Xt19;vPie!UPyt*q9)K_wRGJ5HSR~K;>3H?TdvD&LI!E>56A)xhAf| zi6T-gbAUYW261ZPdJ#!L;zlQPRlv3^8CxSgP3nH?^HLeciAi;i?DAZIC<=fGbkT!2 zfJE}f)5^-T2hJZIDjb4<2#*89+l(&kq9>Pd!R1mSiskBw7~|KzhaV6NfEN`Lg=eJ0lR+V45(Z&BrvL~W)x6gZdt(Hv zXK*_;fPj7_9QbYczJ6Rvgup+P{?)P4vQu|BV%F69l5Xrp*1Mv#Qhs3J7_QOC-$c$!Z>ZUMk zPG=ORB}_&^N@JzPjf4Hts^<$FRbc3IOfnMw3xI#_dw5ZCF(f>^F(lXq1yGQYQN+M; z_XrzVz0nc|f(V59fqo4b&tS0Q0!V0bYG9_L22UlW!6D!Y^NTYHi;Kg26NDC(3%5;a z;t#(K(=jB5!)TMAnm*-NvZhL5dcKWsqohg>{D!P*i5#umK=u(3T(|LvV!sTp;fxEc z!b!JExdWm66Q;p~vgvt?Y8yr3Y0nGGyE9i$`IF1l1)VO}Qdh;e)pCVAhq$@R=>mpT zJx{KUxt}Z9E9@Qp=bc!UlZAq^nzepWQ!(k@?DlewI^tgSi`osfCk96>d0DU7eLOrU zPOflPcg;82njaHfp-n&bl`Wn?9_beM9gljYm9oJ?wCo<@!5)o|(kapqA&<+$ig&Lk zd~}X$$L)@%F{W{DtJG*FzYVHW@kLspE&ljkwE|9}UvSaZXbVz2$!wQDy~In2I=0K} zoy_mlG@&Sfq(vy|F_tHUOLn_<%%8fjn@>>>WDBroq-x!> zv2Rc}>Z$j+EM9LUT89Lsn%jnH4ngZdnjeO+uyxYb-hl5NcsB>v86GKh*4kd$WL7|$ zUz#}Zo+Rdq=oX(_?wZz3=+%Fp6%EwUbX^wUw>EETlDW*uYFhHM=c=<~Nu8tQE4uvcoWs=RdejAhp%#u}>3z?^s8Pc7jn_XnkaO@Lf|cFa%(E8`Eg+RB&$i* zV%~DPyU(xCt}M1!tL^hZNWXaAJn`z*;&n%fP&%~(1p_fu1)a@zB^RO%9gdiCv9SBj zEl)a8Uu-H~soP&sIiXg#zERJ#u>j#WgB-<3WN25bkU_Oa5$VmU#wBDbmxtp;asi8rwC)^KO}EZ55{v}%|-aL6hG_M#EOn7 zT{>mLJwGHWox7`Wo>hS8>gF{77kQKPn+*CHeLBmV1a%`->d zPT)F3m#ch^ZdqARTX{Wx?>a6rpKdhn6O=s;h_|*)XPzia6HbyuJfeARzz#d=S9GU) zDx}1>?9S1Z*$vNq41SV5ry75&EI2AzBw$LeyirxsBw6IDf>~;9o>};0uGOF+qrp5l zK)D)N*I3?vg{Kn7t2jMl#ftqxplIbx z#>!pxLy~dTe9&R}7;sg>d+vjj&}ZsZ0d@UQYf0;_Z$NW0&rizgO&ui9q$9?w3eF;( z>Ef-lMVK|lsN(>k%849F1;R~eDt?;r&fXehf6hssf|2vk+C8RAf!C5=+N9ym^tZ;(8=IoV>@$!12!A}Mk^lBDp#hKP?b9I3SXY-#l~Vc~RJXo_ZdWJvS89D~fb z>dNVtZS2)8mH50i4Gg7c#Pr%I+x;dagG4%d$`acnk*ws}rsED(_AiRe&5V!a$eJT~ zUuithRm?M{t0(fsQ~?=E8+OB$rA!_`7(g&aJ|Nh5ovs3dk&|wPNg>KH0H_uN9oJhPS zBJ&xwV(Z?HYg6ueD!(d11dm0(OgB%(*Z#^~mqI4NV4&+e6B0%mWZGYST zWCrVn?rCA>D&@|rjqsocrp~%+Iab=eR`#aHOUing2j0dub=d|gUP%0l*`-`6gB25+ zC%oFkn0?;r0e&;36Ra1N-zU^GY{U(I8q8MTmE0XpWavM}@>mj9l5Zuy>#3P;H$M~Mt1F0YCkq~&n;Ih>iB~51&dxr`P4$`{FZ|L{`eVed&oHe} zY(9yZMC&#hKVFwJunQ?tuJ17#v&_k$Y>FQqNVZE*1cCGs&97?;K6xv+CubEGH zSu)kWdeOoe9AxhLrqU`*@is2&-Gh32+R=)ddj8wZQ)%|iv&%?#4TEW);qx-`IsBEZ zjzNaTYuDsinyfRS0?y+4Os<GG`sTGR(E6tYSDFw@?i}I#5t=!{tkInk#Gl$ic_Tydqn0Cvz z8&8x^Z+umJ=K`&F__KZj9uI%W4e<(o_{we1@PSpJSdj4r1>5Zx((~fGz~jPtE6>Da zR>n-eSF6^0=iXA&d;El(VAoTROU|RxhDA3ioa&Ty;mv8O8?UTlwMJcN$dnz|Bh zUZQh5Y(EdLEZ0iwFQ-*4O&gCU92Y;VEI;SSw(@GKYGS`mEEu+!a`XDu_@njP(d)j1 zLi5Q6`naU89zv6j)>)NeZr(Z`aV(0PFT`cnN@~yAd{_tC83iimPQh-ccT;DbOJ`m8 zmTl=Jq0gi7%jFDPhsXHlRI4Tu4D_qU4?UN)iIqP`R(kJIlDe7viDC3Tl?_bC?H zqzi1k>zMJFix{X@^s^kE4$r>GZ*Lab7QN!<^$OH%(D#}4zPV4dPjqH$wsURZeD`XZ zfRTBAh`OOR-t~S@RkERfpka$*l5_d(D`F~b#p*Zr1-5tmX6$cQ+iD>5)6Ds=IJS!f zm!oXE;;W*qgO?iVv#6OqS54z)&2AhWJ1XC!ojx?T`jz5l?WyGIGh0+8f3u_9*qh7D zVjm#RjK{guwP>}Tzsy}>V8tfgR!nZc|A6gS(q7(@5n7A~CeAMJrm3R$t8DWe_{>Bf zo$4kTsc@rD=)~F`N}yU98Yx7sw*GdDlqgfDpg>Q6OQv&sRjnBBIyuruTte=O*9km2 zg^x?f;dFkN5Pq^weKOjw-kwb^(;&yIDE_)?d!Iv*IxBNZ;EF=vMtLz=w>7k-7|R}9 z>FnEhfJKNmhN7@vxDNbDIdDKhP6$poo1#uHUBUJJR-q@pQ!6&MzTPMnVj0=y>CiAC zQKl++Vv#k4%IquM<{@1iRc34HJ&}5^H!znVc}=NJ9POdjh=RK4m55V)+!5sCHW#L` zJJD#YU&^T2?RjxgcHGZ?yv>p}jXTb1DCC`*C>`Pf^*ej9Sa$4LgL4T@mMwQZeq$T% zJl;AyW4q2L@xy#o%EM45I5ILt-R-ToERgxN7?XtN9)4zo)bgCFt-hGvud~Gcz0>Ns zmgD;TNV6c@4A0}1(BfcSX`#l{h#@@QY^ZVBO<6f{RZVVcWj zv#jIQ{WYZjip^AFsj)ufpx(mS@o;`j)uJjY!r>Z6ab;YusN;lmYv)W3Rg1Jj+R0D9HgqG_AV@NtS-Pa<%KW;E*Bq%WmV%a_EB%g2R4e_U^X_*Ij*N>@N8_Tp z-}DMs^0VX;EXv#Ei)+gSnu2tDZUzPenc6VfDuzh)>J7oUL>U4T5GY9jU z9v|0RQnk(jKRC|2PMpjXiUxu?W)Ve9v+Y;=U zu=L0{X1Z4JZCAH#)~ird)ayM7tq$x&2Y^FU>yZQakGAC?454A*h~r$Mp#>wzy@wwN zM5a;_ae^8V;K@8E1yB)@z#03)BOtZB-$DpOLBYTY^R$A4$AHHWL-esJ5qivOQ#0jF zs4n!1Rd`7vIbZI2qY@owtC_MCv(eC-ev#HDxZLyQ)-C0HnVw4tN{5AE+OA=)!LTFC zR9VKabNBcn@6>HX%fSe3If^rHXRZMmb{Y*tBVlvP-CCM9DC3!13-5lVKaVUKcUN~d zguL(Iaihwz-->CI#r7*<^#dm;oNK={t1CtwF*xX|2gDiTL3@HB&$69ck>P|WCO9az zFQYqbTlHZ+L~i!+PzjL@UI!T?ILO&5-FlC3RE~JrQ_gBG$=lAC=04#k(#> z-`T3AQ?Nj`SVrB(_1U$YwLzv(C9h;geMR+|z=_^;MO(zx%VLS(AQO0W?wqw9RVdx7 zn(17{eR_RfKKBy!VGY4M!VfA-t>js%I>3CDx=u}>gR46q6#NvNY3r<~lDSsB&peGb zr`KkyO$T*fhrJfCw)Er9f$17QV^ZE89&ptCYP2Q)VLV&Q=SVHE`mlK5NUPn3mDKp7 zlV425lqGk3q}6M$V{=tR_sV0QA-kbKNQU1EC~z{a?OCqx7OI`0^+cboX3iiWFe`oZ ztxPUsQNUL&y-CmqhOEEryo=ddiAKS(YiYNpA%&dfM(+Z!lcJt?xIxuR#w$y^JG-+= zeptsf>HLOf?dkc4TN{rHo1(IOSDlQqTiy0{AL}ReP}eR|Z*}XgidZGA<>P%PYwTos zMdt1>4{1x?pI>;g_f>hv`GoLUna@ijH68b`D~pBBU(iq{z1YL_-I(y*_a)CYamY#tb*9zJ+lQK1_nTs|mW$F*zx-%3sR;;Se_CLp$eyG4WiP2a|arY?W)jn4X zx8mh^TZz6{TIA}j*RG(}*RDw%c_HbV=;jWU{Pi#;s_wY0$c0_%ax&u3JvHavR$A<{ zEgdZ(9$M{oO72$~t3>wTDcMn09#2r6A*A?uCQ;LsoOCJ8fmeO8*(dmZC1%OC#HRmy z=J96dK1F`rGW~{ni~HQQLY3Ib=B@Z}Nf;LFncsawpEkc!#fNZXh0!!QtF27eVsF#D zQC+>*=Tc8yv!t1&BQ0{O{B7TW7_oiUW|9o6=DA;z=aRX(^kI8t)p3_vyVdWY(pFji!O&PrMJB zZZf_aP3{eo=2I_8nNOid@@=+g~{A8GXkf}bb}SIE!4@l=)_Ey&7uEZVY& zci7KKH|kGs!j?r``wQ2rzHb0}>;p8-C(nr@~-hxQiu_Et!*k+fRe=a7a$ zH?vF)4RsHiO>Q9|dtTm^#B!`(`h(GOl~`Yap}2L%Yskledh!0uLp>$JQ;L{q?$kit z%OhDs+g^QhT$i@=#=6xbpMmLRx)x5RSxx+ z*!m2s8&#*qcm~F0vpkJV>gNWU>6eB~s+9$5j7-(`C?1QL6OV5gZ(Z*+t*B%>8}wQC z8~vSDw=8^RD}ylQ&h}sU>Lhi~Z=9TH>3dgu$@E`U=4vPF3-Xz-WZi$2%&*s)ZZ9M+ zA3Lm9HK!P>>tBUT%+(Ei|C;0zTIZLfB}v_ANV&A(*hot;ZNN-qU{90x!Qh*nzQ^P8 zVk={##QcU#kz32jjr z4p*!Hnj+=xcYBfeBJNaq^}Jp2vG!{7czlk%^Pp&VU6-AdgFWw+=~mar@M6=IZt4w4 z;mvh{%oKCG+kR#I`KO~k`985hwiLHTcOqYLnf8X|ESEq>qNgdr%?fexwy};ZhS!{+ z5(_P#`DoW^>M{}C#}}CQIBA?9$!P%-#Cq%QvQ?UIb{wF^F9)2sFG;>%Dl(ednAzgl z6s9xB>EQh&*}T_$ajU`1J8P#?on_smRb-<%$>(Jbd`&)|wr!Ap6RD%q)vrn8uySFQ zN55LRwvt7~u)WGy8Ka-}y(lEZoJl6T4U#N=@}1Ffc>XhU*^Aj#ZR5P#w@PtmQIcJ% z-(s}W>igOC^dR+oH$Sf|^e2Cea%_BGKko9|K)pO%#P?HPRG=3ijJ`VKYd<-qD2K=t zsjc@_Q+b*(e%~&hqN|37(-V*T0rQ6^QOHOIWq5!T#h%ToCw`PxL;jq4Ln+RNl5 zgLj?^VUgB9eSOD@zA~MFcUBT_+}8sQ78p*jyNBPJg+V0@#rgHuDy>>H+1J(ib@|05 zUJLXOsx2_<6|9vG&Jz)`>>c$==rZv)TD|S6aX)1lXf%j!^>HPfjUe*4^x06g{w59- zR~?6(Zl0-fsYc)VNCg%pr#3V4T64B(SbINFPjF-i7*ep_ewrDJ_%=TmXknV<>0R!g z!8%?zX=#31m^`_}g13^Udab6WSv4tJmqKuRqm!Y%3Z#10|}#^$qSof^@u z>cu#b{BFcQr-ZXWGBUHs5rvC=f=Bt>xwY}JN=9ZBoxH`yU|g~zP+3B=&O`6U2LV6M^z`0C)^>+$ z`=(5>qzkbsE!eekbT`nZ^ry%_^h_;s`zR%ZBSJ$gFxMwgapp2!ljj_*_Z7UKTPZR^ zU`w9N{N>bQD^etcT2A;;a3#0M!xJ&DL9Bs7M08EZ05_{w@NIU*%A7;2(>N%#LRsTU zxNS=WnSBfq(sY2?pFyWM!2h7{Pibe@n2AgB(daz0%UzFf@v4t`?p0|yE$?OJo8Us{ z7tK&xl9N{n`^1 ze)ppN(w_kOLp1S=f{bLi06IX$zYj-N?4!W35@1zmL69i)XCvXj0O!S6!6sWYrwa>K zxy;0yb+Qhb0OhsIA9)RoH4#tVdzwI|;e{dR9;WfCo}gd#Xs1y+RmKbYO5;3KzQ$B4 zDz{r6;uEu%64A?(Lq4@us`^E(4eALq_xe;UpS)kOVI&}&e=tn&Kmnh;5j4`^3=Bso z1n&iTt`Sq)o1&!070rrCh#NoAeJhEj!sa)N zD&?f-17CV9ml8HWac{z{V@o_?hAd??p&8@g)ijE>S)+!$dm@LbE#E?>sy6xHz%Xwx z4b6SFfBSNfd{2*LIsx%Zr^6HcFYcH4e160+mE2FDvMGK|1^3cb4~@5tLgjbvJp?$?k`N0W1%O_Jj z)s8+6TI6f72*6~L-u#B5r*mfZ;G-zaFA26XNVYyR1NC91-dnzlGaX}XSP8wnhtAIhSW!0D z>sPO06pTGSkuq_FDtyDwl7Tb<42Y7`HO$#jf8t z#!%867(orq*td0KzdbJrO#MJEBa~He{V5Jt5b4K{-3rgVi>)g5O(m!<63?LL!s)wP z@P%&FueZ;_$Y~i74-JP~6Q&ikrOh@peZd2fGq)q&VR122+v$eBJl{{cPe}|FIyVlV zJz8KJD%>}P3x5F0F*!}WZYKHq9sUCC1Kt#U_N5X(yzWZQ#~%j`QqhpL_h?U`LWr{2 zr7B%_cJt!B&q_wmN7GS`M_qC+8*s4;d6R z6(k;h9mbll{f&E*4W_n}sMGEJ%IIP3>|b8r9ldVEckeP<1Qa6Ox0CS?f;ta$6uP_s z&Jcsi?>xnO`vrRb1Xyf2QAKYuQtDCptbD02GDhBlwH4ghQkqpb3CrJgPift4hcS?H zqHC6Evv9I?JC}vNe#nqY{%CcQ5J~0#k#0RtmN6+)Si#ST6TB9+e2Lb!SB}wAMczQN zQuR}9)_wwOb0z5G6v4+3`9K0R@FE$Nn-UK>R!7m>0RL|ZW(W`l!|vk=WVrn#HmV+w z(lFZ@qh&Vgx5TY5M%tnu9@&ff*u>_K-J_&*It$;2hR8#bN)y#L$+dQX zsOZncM~e&X8rx=!ru)!n)AC-%x#XQ!FF(9;Q>z>@>Xj=79C#;LlmdP7Ha~X|;_}Rc z1)QaJI|KwVcjj~L_bS%R(yBkM%zQQzObSg>?bRH=Eu96^Mo?7y4xVXDWoth2=%!!5 z*RVM3f=qhYFQ2Y$o@v@}%7owNrmFmMxUzgSv^T2dzA?A%cOk^z?)j4Po|G2AQ)CLiptC&N8@g`9y}+ zE(oXc8+o!;T+Npm^+EFkG!E19y{%@x<;t}@ShoxqPA?CJ_uZP$5Qi;two}DTT!a~5=Mx!F^(l*Eip$MbG)sK7sR+9abS}zo?;Q;$W#X5` z+H`f~B@GSdpvBH~CSe1=?(C+n8l}`9nrWxxUnA_^e=HbRurp-hO3wV@L&5UX&Va|~ zh0*=Jc&)kf^Dn9iS8E1Fi|n9>w*#{2KNz#iM+{7-h1xwzq^?9m@xS! zPa+L}@vFY%*9kHq877B_y7VHW&q0iBRq_#omg?_>#Xh;-(3f_l<{hd!ucVV9-Mny$5Oo*J z9?*&4&z;8proFN@lX898+Dmh4hfVs(e{3WE_)t)CRyr4KjZKk_9Tp%>rzQ5quW3CA z{)gL5z?bfTv)h)@uZOEV&n&K|+}El42>3uIb{ex)Xap5b^T)NTF6g-BZ<22w%Usp0 zqGk~hqBD?wDhS8uewNuO9<@;j9kQo4LEF85Ja1`LIWEWlp|L{b&^}H}Q;SRJ;B>(| z{Houcsj)%ASC}xwV`0T`eW?YJ|Ck<0-qmA$QqW` z@cr5t@Dp`eKW2F!bI>&z*AM(YG-it(o2j#ola?WGMI4ujt=={ZpO zS!QMe48J+cu6xb5ro8O6SJ5QhF>GI-nCx!wX^nQ6vqy__DGYbzGj>6YjDOUT4fI__ zj+PsZ8{Hj>X(6-ALJ%NH4&DQH9whe0PFq>gc7Hi)J&;p5x*yXv3EJU~!7kI~4mhFO zJlOL`S$L(ruc0wzXMLoUwGp!nOvg)Y7R{HRbnZct-%v86sb8*(Fe>X!%+x_=3akw& zIs^*8(HZW4-f+j&`Fe+k7r7h_6QAiW*XlQKqVSDQ&355Apm}0Rxv;Wu$Z@ zj$!;JbzfW@dW3%U=f19i;!M<4hF~Se?{m3hgo=#bBDA4PWMRU6{;t4*eI@>G98Y+v zg({W4poSy_#}$p~qy80}*8YRa>VPP{aB>I89vNN1Ll;GU^DYMwBA2B^$j&6 zRvxmiu8#%EsuU32nzvf8EK!zHr%q_j3l~4#%*!%jmb4pwL|T+p^n5?W{8=Au*CYt&qx+)5 zlP?hop>Q{)sV;QlJG@oQ7e4=@2ji2PWlm%%G@S9E5(s&0wsD_vTSJv$$(u!jQK<(7 zyg@lC1GF|!2lz|Prl^{0sw9OVZS7^cLdRed&iI!Eg5vtIgb@a{?%DnpnuKOi%yvZp znT)(32Aq|4ka=Tqt)GoZduW`H`Cfrv10(Q`2<+e2+Y>~i>x0qkB(6%9!~^Im*-;8~k@hqg3gcfKdQUzerAu_bSCx_s zdb{azO?0u$h#SV{BiS2lKu&X!uqZ{}EV-Y6@g4cHRjP8qCx6zzN%Ngo@9l-KUfxX} zT9hm2dsDaIm`1ZOC5V#gS~ zP-V?g3(~7OlcipQ!A)Dj!57tPipZ;Lwz5Wv9zOv%q0lp2Os{0VAXiL43z#bb5lKO~ z{K)uK$ErhPC9w|Ok8Cb6VWzwdJ^#}-@rGz`OTYHs5>Yq*GesENN$1pvqNQWcc%4NxgPY0&@+@djLt5XTe9C?m)foV_E1UZY z#Wf+YMt$Gms9p<4mIU(K9Wc^gS51W@Ztm(RVLf;q8S`ZijF!ibcU>UK5<+(TS+OJX zFfrxDG5Lc@A_|42s^;PM73t~OOc)MRJA991+ghD`ZWE{WwtA6ayz_`^ zguac(u>IafKf7V__lMm}{dq?RcvU*%r>l1Xaa480HCnM2X@#4ME$$kg64MON3o!Z7 z50HrnPD!;4_1~wyikr(OE7VRMdfqx}LxPj^@sN;Zx)`jLQ3awa!80J-80P*|$bn2K z{80OmEC)$p1hEG9*ai-603CG$`!;~W`Q6gt;gnEvQLO&ht%s-dsQrnjvT<5QXaL>b z0Aj;E>3RB?u{0lDbe&8&^%nfA^0_I8NMV5gAQNwF$E*sWnT;yEy25SdzZ`mWgcVg44*i%$3T3B~peC@zym^Y;~$bl~MWiDT?O==iZE~3&WUW9kJhgCoIb+XY{?(Ifg z(tL!V2lCfvxF5~C+U@O#!Zrx=S}hI*74|Ege?@>iFg(Ot`L|DxYxN@RUr{CnR%cQt z1}pmn(_ly3y_R;aw?JX2Lm8`zik*GIm+MoJS0j{U`mD=9B0BiUTf0w-Ti4M1GO$h% zd(g1`F#ssob1Wem^{kBT0K~5H`9;Vz;_VjxQ|!DYfGqcjWco`fGdWp+rZlf#T|o>x zDk24J)9lYX{yrm}?>t5U9#{bJZ&fKGTFkMy;}$+(HVW5BJpA zgh!0xng*zi0E29XBg9N<O9=ww7Pgh=M*c63s&6nzWV9C%b>Tlr&g1)(8+aM)3B|2_+g=JBr4o8MG>B!c2kZ`d|2uQ9M+=&gDr%NKrd&WycE)8Z}I?~Bs+_&s!!HW0U)Pn8P;av zNZsScW#@>4cT4K&c$+mUM14gVfv!$hlL*-?{-KP~quV?*Q)85;ZCgI!RK{-Fp&2xS zBhvv4%-C1)3j}?oV`?8s59i(bnOx_Q7 zUu~Zo<9y_lu~&7bo(I^gCCi-~mZ{o>f7^P^QWiRY9jVj7F%P`)_u1;JTJOt%g!7YxJe}C?=~Iky$WPMuy-Q4kN$=UYGqbMj*2G_ZJOMt*CMzdY^-+AM zi_Xh(d_tahkPl$5?pcg}OeG%;jySCa=g5GbR=U*sQM~>?00%($zfsa0?s`s^{;|$E z=QT$3_%_!^yZH&t55&AH50%<7X8-jmq;f0eS^Kzn_;xAQHW3~ZK%Rrqm79ixcz6^~*(terVtGB-&QMyS zWx{KsONYZz$`J~o9~Keue>3Ey$CN0Q|DWTbZNl#|7z8dcr~+=mHkObUz~7BxhX^6A ze-Xo5(F_%=bKsm9ciM=N5WD5w10i$jSD8*~)cw=f z)x&nl=%aXEH*=qUw%5TV97-g+f53sYRd!9Wo#EJ0*E*8vk)aCV!ni;AM)W6~z| zD)a|hlcE)JkyaLafXxmwTLVmTZB9(=*A$mI288u8x>|3~+8i0*e=CG%G~g7Sh@$t< z```{7H-gFN26;QGKMAOa(@1?wHtS@W#j=<;39*UT!D5Bk9D&|48LhJXwmcbWsdiv) zUaVs4VfRubF6$Zj4+{tR-#DK!2G#0VISTn13>E<()E$EOD^I07?Y+LVEO&0e?Q1_T zN9vTq4Op)NqVBMSEt9*?Q%ebigDVC`l;Z>vl_^?D$02`doEo4~s{vbth#q{RPwVpF z5ayrP_35Dun14999(?MW`}UJStk1!lcr=LoZ3K<^i0V-jN7gG0NPU>8s{bd_&QWcp z4GCgxOD(^PkxNa}*~~s9;ZV=NFht2JA^1n*HB`u!@sMY}ti)56Fiqqk-H|IVn*;$C zKsrmS`fc4MGR{jJhWx__D4?pCbu;etlg2`q?2`bO8S^7{ZlwXJi}iL;sp_Amog!#U zTz}#KGy+Q8MnIe?VQSV&eB3IPRVFDdTTO9KtlZ+-;h8bku*nokEHP}Vf%)DaCrfGL}UQC8bN=_G>I5I-N++q zeQ>}0JvlG5d$*xFy&h1j_Dj85fY{2~3|%jql)&U0Q6e}ub%MkxhP=Ppu*)tceWla} zp`h%MMIO2GMX}8lOL*R5o0pCKJALQZ(XpeE>!jhNKX+yH1gt6m%MW@tT5&QfW=q^? zO=iO+-5s<-cK}nqoBAs{R&SEsza>InsOYvP3*z4+l+CdG0Xf4g9TES2mUc>!SE`Y4 zalM`^{b4jC7sbW6If1dH8cluWawCJ`av;%hXuCJq+QZVwz#GZ0&14Rbgjg(=18y{Ss(_0l(m^=xl_M_ZrH9p77cpC|YegU5XM}4FQ8EAp zd@%|UZ47ejz~cLn!6Pi~sWl+=l8AWQzP#MGS}>##5jg|aoRf?JR*FpB{Q(p?*w%@v zo3P;GDOM%{?i1KNR2wU6$~PA5-9G7dp=gXuqKzu{bb0;0coIxSSclWs!njrE$yzh1 zX{6lR(qyCJl7eDIQyuCuskdpOx2O63C3*iNy8mVdFE`)F+vk!H+372PkevKoMVXKY zDk=qMMphUuU=%cZsF7(#^yDP{&N6Kb*9w&ND_ZOQg1X}xa-ulZ3LohFVk!-co`~xP zNOLCT_&n$*^GR`}5xP1QHd18W+6XQ>jnEeTNxUT}n6SiGl403a0ZgW|HTxRQt18o zTSe5`tGD)%0rA}afwHEhq5Vg!7nRhdGJ@2(!THN>npj^Hv{PyRPm(`Bn`%-u+=@S+0PyfAtQ=tX(QW&;NReO${pq}7?a?^t#7iGv7${&cIAxbe%?n(g{qLZd)$(oYX8RKS1!YRp=CPfoidMJeVo5Ppt~i7g48- zxCopF`oxITi4t#xlCxYRDsdj@cFY4;OAiRf$FikTIeUSOl50iRvnVvQEF6|@=U({= z%gJzrrG-T&B({buBB98F2p$q+d@aB*%FTsjb1#czx1OdW_`-P!I>n7x(QQYfz6Gti z3;4Ua!s+iUBCbagQ277~8A!BQQhp60IfS%4SrSz&QT_z`uB7ZkUR}J@8^6wEf?iT5K>;LPorx_CEkI0c59R9N;xpy@3LH!l)fP~XMf*H zG+-U`afcDT0zqav+(>27d@!h>xJ8u{+`|vzY>wf=a>6okAp!Q;8T`sC(*UiwsQ#cl zr&X(U2~5EGku4^y&^6GmtEyYQ9cdzJG(vnWA)%*-IM7omlOq8FB~S!ok}ZwV7s90V z7%J|+Bp(hq$tsKj8kX@(mIwCsgt{lUi96kqqruJnFYfbMnvWnScS?6hi6w#|$bX#S zYmbI}!*evm5Q>frVe$|;_CnO>4)ZKzu>kd;bA=VimqUR)zQiG-!#SvZn88SrHq@{U ze{T>e{H~$J{n4dB-VA}G-p_{^OE1+nUh@5rR5PNax&1^qZU)%Iw#Hstr9SKbR>L=p76v;Iy=Bnq=w>a-a!A@2~kko{uu--P^4sN2}A^h~VD- zI~BwnmI13QO~yK+F*}SVwO90KeNu4M0@5?+Zs8InUWkHeTXZn2$7HjVc`RBgcbMXO zWb$Ce?xyHNK9}W22nsjFu*}KNzzF5-2E|6*GE3cJXZ3NE-csI1Mc@W#+6}3TPaHHT4A8G)*p?J*IVAS}w`-Vova;1~E zx+)nFgB^44ANsxD_t6PV)dLZajc^)$5L6-ouVMaM8ohFUT-dm+CgVC&X6^yZ7~BVo zE|P^X;l+WEsK`a{P8?YO06Gfa7^up)$x@+B zA&OIk&aQh659Mq^;c`IYWY?D}YX_g|pc0HRb(&|}>Y^XxesJbhNK;w^vEN>AG_KG9 zK!q1qm%v*yl60Bp9~W6LI8VAqX?I-h7D{=sg}#B?Jq{JxbV74@8uA8fx4~Sp2Tq&% z5>qSQs7cInujx~rsu(Pz56FrP*@z7J*)_s-V^po`HZ9I!p) zVwG?2br&LP^ZmEtt7bWzSw%eUwNx??bh?tJJ>|`vk3~)3e7iPZ$!_&b)VWOw5=!PY z+a`Gc3wiU!SK<1h#kdd*`Lsa4%8NxC-a>`6#EYj~pi&s?(Z&jUFVHK#i)6IRgT0F4 zZ5pG^VxQu4TOPHgS!<1FZ2&My>X62^B7%{j{%hS{B(E$X0p_$Sd! zo78CE4EY@b3=+S&e*Pbc0F($M{-M%xl+j9z$%@jYycO!FFDVp&XB1qBk;mn0NcAI( zG=*x4EwE400`Y`TFGq4n0qdy;8`z)*zN_=ud_K2n+>>DP(YsWLB9uq?>2ri2Cy!{28?Vscs0w5Sb*^yTrw&X?!B=C^$WNSZ zVc1bVpY+m)O8FqJkr~W!*lg?El#~%+@k6%P0@8OLyuf% zYA1oBK&Is`(ZvfbZ5y8NHo4BI(xl8%iJB{PXD#ak723!dmHZ}RB^MpDiIUJsUWo_^ ztrC4Te=Etkk|R^0rd496N+RL??{1rnA`~SK;O=kS?x(`W_+LnTZ>ZG|;+cuItb&8C z&zk(un(Dsz!mTYm6X2|sa400{88s_O)+XWTBQnGQ+y& z6F^#E3XZzS6OE!MY8EVD$A|nggDEn8^H!{FigWeh7Y%2m^y3{xqhX^a8U-fq1B@?T z<}HD#8((Img!K1ka`tZ_UbdQ8YGRTT`rOw+Whgn1;B>tV1PnF*|Vx;QevA|3sDB) z=ZjsMb^wL>Hp7*ur4$Qg3!LNEL=tm2OkIj3r+p9OPnsRBh9%)WlDx{yz{XS=u$UiB zbgU^l^S*@Mvy={ez?!}YTGJ1jP+Y6p6b8T&lKVVlw##P?@rS!ob=IL+7p)FVdFJD% z1(zUZ#~x>gpjmsiD9c&h)Ji?9xy{>sKFnJI3^sVQ+0Pz5WisCGvpzbTndOjNIkeFZ z9pn^du*SPZl&MccwM9}BR$JRmE2 z@=g~rE(mYTZ14i{K_*{aqgG#GmQ^W6fb$b_)1)}gCshI*naz6AW+BlaVFKB-0EEwO zahyGl;Czf?WkH&WCaTB$RZlAPq+A^LLQ(CAu#|RvBqn8_mAIfw3A~}@ajh;D5KeWc zIJd)IjP%-IzmY=T1d55M04$&4{5h^7{8- z0$;KcnO-Ow#Y9Jgo4qI!GX9KK4KwEoKr-VyC}n*8Dnm(&Ih=_uW7tC}2NZrNEzCIN zkFTLmw&+-|dLPspL_{0(dnXw88gvB&x+WEp_1;=2Zcbd`V`zi~Bx#hz7eKU)@Yx%1 zToIr^RH=X!bR;ExIaSPB;=S-Uh>S#F&YNXhcPzFedf5jFQCMzLp z9prSV8f$>`b!QR>tP|BJ)W+6kcP5R)P%}6Ufvqr;(L`XdBA~}gT9+#=xVcorXmNnX z-z&PDg|};SJE$+91;%*Hp_>H8o04hs941krmMJiH)*Ax%ydwlP`QSjUg5z_^0lJuH z1#J$L%6V3l{|Sf=kePI#il~HFs@f5?5Z{xHcvv&gRAK=MRuG#g5opKA(Dy~$ zAlqO~$joy4c@+tU>#&Q0GnBQ|ex{NG1${#W&XUz0qRR#6GF(RoqZiAj>_)Wuxd)JO ztu#PI1_d4zLv|YK2~wk(ArywKy0szl*?y%yTTtvHpJezy2van9HZu0KXGog}uK<>B z&xFewDG!Y?bE5rT967uj6vGz+7;Mf+*-C$)azoOd(PWhm>6=Xjr?cCjtKB}Vq6${^ z1t#(g_$@Ymb=vhipU7W7|Jrn1Caq;i+cEy2oLk)rZGUyN0j`a_2_TUlI0Y3%^~6M; z9GWX0Y}yQzRSZVH^@9yv9q@0c@xK-{L3u8M^3ou|9NV9;{<;wOC`cJtmSB9G>7nEaRTzY~V0W~9vR(&GIQ;FR}| zBICWru2K*`SR)KEefsLpYY|o26Uvr9cqAPy*|JZiJR3-|EocL~-=bylg+g$PqZc-L z{wp394%&CpG=LX)lwq=e8tM@1PYh7Mt|v&7Nf1}>*Ma@o2?WVD1tBzE5((Lx$3OzV zKy-?(Kw<{@cte3qD;nt&$S?+;0x?v9G#D=%AC+DpI&w7-734kJimUnQ)pZaCvu?)a zp7FMM6X2qa5;lckT&g3Mo5p?+rxL8E;Qew>iG6&M*&R`Q6wK_3Dul@>+9m((#6?TF zFr--GI54L@x-x%rOaKZ;6Fq%p;UYc3@Rs!>9)Wt z{G1I{8u3aMteoZ(@@FYh{w-0Qk{Dd7UzijQ$9;(m42{g^VtQYpNXn!bBa?zG2kVIZ z6eN~;VPP`13q*CwoYN+A1^vo(k-su>(nl->jx=R3VoK!@1un0 zL?2Yv+dkd*m!e$ybW6RDI3Io?KP)0UpQ1T8#kbG&6xrtoxu3YXY0ICQjQ2sF0*BF4 z8o0vlm4b!6Z%Qc~`qzS$=I(&pdZqZ>Efi|-$Ym)kXSpm=o36=K-S{u?@ad1&Uk!|vRk-dj+9M+!XJfB+oFgukaCFV!V)>IfZX~XH_CBR z`_!W^ZbN4g;Uc65btLSroaZEb?{Ho=9M3gcOs)%fP2_fIc=6?@z`D`TTEqp2t}#uL*%Gcn}vu-nSoEbdj;my{NjQi z5Xjv@Sef9USY~B%qbu`-*=AVqWz~tkFMW3*jjr`HucaWdI?Jm;Tz|g-jG@b9h@4nI zlC>7qsAgDCT>34U&`txMfVh$@maMZlN+rPozj~DeCIz8{IfE9CdXOe#_96DDAWu0bF&KY=k@P~g^l$!YdyGF6I zWF$%!ZFLp19BgR;rw>Hx#BjZ}5|*>BI1-RdmMVd6V`Du|2EF~* zEEz2qZ%oG*4|?w6zmrsIXFue@YY#Q_o6wRV!M9NV0C}&(qi9$~r{1jufpL$%Cs6$V z-Gk8l-_YGK|D*@_4uC~3KW`HE{2&)*NgA)JfatyJ`;9P6AlUc+@md~dxbLNB_zVO5 zC>|L9?xwKw1Z)ROgr=bn8qI$2oUc0X?vcUcEb58TX|J=KHu zeK7NYWQK?J1TKc$#SRUn^G^#iNKIO*4vp3`UvS=PBCzkLJsr~Y*8tj~r!YEH5dD1F zPWnk|EqeRp!>KSo#F($HYjv6*lJ_GzoPj~Na*f1=>#YXd?0eL(KOmSvK;9Ldheg@f zUDmLfPjw!_$47v~*US&8H@9P%8%qfIqWtGJy;h!xO$I>>KtaG$ko#6oF#f5=Kd%Ze z6SR;h2@6z|ATQ)hLo;@p<@BeT>20KT>?-$woKDZs=Hv?xMqj=hH^n8L#FO~Lp>vC; zP~y77wXcO6Ja4U!&j!xZ9$ujR(S-X@ZLb@9!;RCx+KZm`*YHPbY$uI9djUH`*x^dG zV4Y$~=V9qzGsG5nPM31|d?#ICTxyvt)!qSu8ew?mR!0)a?jwLl`?Pvy!ot&_=KD+t`?Mo6(UqsYC?*q!$w&ngsfpSrXG{h% z-PSLi`eu?jH|acttWl9puAT3X&NJ5+i-zHPeI!eyXe0H_Rx3tnERFdtd-0zC2i%e# zA-k(g3Zzs)!XU2*V5^YeWDKpu?l%B|L&Q0xq0dSL)cXTEAg~013y z-vUuZDC$`oZiP@dVl#4YLs@gFnSw`tgwR&9Xp)4+#+^zutsSg$Iw`Rj4FEzVdOUu3 zR^qC*NJDU_yY~`?&q!U5c&Vi!BA}N~tv;E9*=yvk-ta&MEi^tu%`&z&Q~w-RNR*uz z2ETFPYr1|>C~d;4B((kcbqMc(1*``Nr1NS<18&gcfd=KO0^LUxi@_kLfU#?kd>owA z0E@=l?*XOo#uSPgX4}FXOkSFl+R9N|PT`zTYb|Pu!MRRvF0wc`uxgd8bEgQ29`6&x z;Q~@W-R;orid)psQ3zB_JI=-G?)(Y{iqF87irwZ)G|{Kq6*pE}VK@hJ>R1>W$4!<$ z^`U@BP!&R+O#Hs&n`Z667P-!ZpAv4z+?bH9_E8O?VNE5LRwMRQXKn#6!8(kT^ez5% zl6*F*pP?v*^RHFJ9ud}HPH~ux7_cEt_+s^ z5bvx&($+o(>>0!{^%;}&SEOu@juC(xGX)^6J`{ZIwt<`+`Ti1Y#z=Xy&?*s)cB3_S zRuJC*b&QJ9%nG@J2vgk$IYpeY`ZKsP^}_Qw#9!JwIWaZCjT+XSeQi$18JZvVy@DTu z;)1r-9&mlL@RbocPi7{T_c8j<M0?PgWR$Ejlq44CEq>)_|A z&`!5@AofKTljFXuVx1{uMNwvlk(2;Xy0Q`@wI0_@oIn@o7~E`~&Gw54L%VjoXgtSj z?7B*OeIC(*hAuaT-A{BkC2hBX?^vlk(wagy?T_WQvb5POZ3&7uf+io0UrlsC2U}#S zAUhnYmO~T<96pD_PRzff`_y{ z?|#s|-$Sl69{w!5HqG}r$$t>zc`g09sF;$Ri>F~s)zx4aYohU%{=cxwzE_X7`?c@| zXo}3W)(NaeR3S9xCBhoqae^Y0mzF;0l+KOWMQ38Z;2VlRg(<}zSD*x15i=PIy5$#W zyhEUS6b(-OS_y!P4Axc)teH>w=C_PR*(l~H;^7Uo5*p8-`DMO|Y`f^I{O7`GxYPGp zVmi`oBQmZjFS(pa5n^0R2F3-c+kC#((R>k}NGSPQ=rs^v(h3hP?$83x0?Uv}=?@9; z1}!zn9U4JYqPb&u-Sut8D#1Uc=+Xk0GRlSW*(ng6LIQ=JcvuN+3dd!EP;niy`eG_q znN$w1u4QRV_>2)g;S^4{fxab?*-WOpnW2cqHNX4#$1>M0hj&*Drz7QRG)xEf-nv;GB}yCFjM`xzz@1z=+u06Dqt z%alztW4p5OeLR=6)}0i5iRoWWlCAtoj0Ei&8A}8@=BU#Df71jvpNRT zr;Ds)Kj|C9%uqP1mKy&tVkjCY6`2M_3C4mqPOup=e}rV7;|%)&%g=(kw*J+p z)wZStZ?_&=&;KTxt6}p344nQuPt)i2-0b9S=lAF4%lPEi9E9dZiYzV6I3UGp7D;h$wks%W_Ru~OqKy?3A zi0ik$QOIm;t^AgmwTq~lO~g)M-qy2n-X#RQ$j7Ky4e52r^G-%1B0OJd=65?k+3}N9X^7*xhKi$mk~WG9%^+V;O+G(v$HMGs+#5a)!t5f zpt%nbxXguEz4BNR3|FPtyQjS6p>;nvyx(Nox;opkL#3i1jaS2RJPibPTuNdpdl^S zJ0}dG)C++eIVqB=0M~a3-eJ&yrD){0@$SxS$%J@WyD@2Wf}#}u#NF%R_p@}fk^F^p8v|AkCpU&S*nVWyB3KQ& zPDw^zIerG9Sz`V&ViVAP4}%Fqf@|o)3ClHNKVg4a9saJbF2Zx^e@i$s){o1zS2;Nq zRIA>R@1sB`y+UMIvZJ6H!b2NASqz4MLLA0ZA_&a*!`6UYzm7HXz z!}?t^*VRFSDKb4W$Ilt21XgT82CYH5h$2j7-PU)j5Rgm|$S*w5i7u`Lc|``g@9Fr1 zyqHoQ6yy|>DafnYu_JjG8{2gX*Q(a%*!q zAmlhVl^T{@jd=S~!!oVN>Y!OcW!=eHPYgiswT=#VdJLd`Q~7OG!h}(Qt!30YQ&oX( z)^VQ|2dsZ>C(f^4-Pl=VU#o3o$ZYk}NQA1R?;756_WOz5Rk$7I3600=uo>02kU5<}gH5M93-6>WPLj0hkia>qZ%lP&Vq0 zww)YYCrdH8&=J5x$%Kb_1EatuFaFh*ugSwY)ZS+tvTHxPXkpU_i}2<@gzoHeiqs=9 zr{+@$zT=z;Z-uK$B%^QR&8WbN;ThWZ(L37NC-I)bMFTN;0Fzx;o%eM6r28}hUm^Vs z#{%Lee=8yS+uQzDkf>mWf`^j1YaL5CuEL%OUC5rcITi9aeg5!U0Q4Y`-v}NCWz0`> zGCwG4u2uhmM;V18pBTUX$Z!fiTd%4KyUhR67P*W3y0m77FedzBUUh zTG-;pD5M~hi5{YLe{dTGnaGS;)}be4Z|bF&;GR)o7h~}`A0g_ak@vAMq93FEBRB(j z;j;xwbbnkgY=`mjF#cF?@?ovyFCOZiX5OK2Hi`; z-zWzzgk)dUy;08O#3h8h5uI~&H`056K<|-H$Jev%mLN3c=}2+5FQ=f=kQ6b25*DpM zlq*j=rMHP)o8>|<>;U}j-pYqQaaT??lHkXUKB*7}* z#1DP{ngL3bBuI;~ArG?`7{~eh=NoyG>6&E@cLm&4-n8I7_^kjmJla7<3-zOfOUO{! zW{BXi+d6g`$BMFWNemtF*yskeBSdP6>nk=IgVQmb`~~gc<65wIfL03@(T9T)R4gK~ zATG3s3uOi$OC0*dAyXX0iaS<|E4sKE#x)J$a1jn9x2#L(cS2Vve38P>$$M(PCuZ~z z%fk_2n4%lA8@TFTIGMwg@qgOz<(}hZth7uAa+$`$sdz%2q^czjSYcGfq)6UUJqlVO zL2HBDj&QGR1h2DAyfJy!AX#J6Wl(W>Ko>Hc3xbE+ zmP?IaNR^!q4RJ#Lhp_1#BzuU+Z%e{KHhL9BEuz@^ux1o#enNKkQOto+VX?YO>7F^2 zt(kjqyA~`?ZCweCxu`ICF|L=Eg9sObF}N{PMR!tF(M7eCS_v2-8ZGdrCy&Hr;Y%E{eN^@LfsG&A|*x+ED70zdd8c<`S z<5cl|vBzL{UbNrpG-`zY)Ho8DRM0hmj+%v4CWkfNY)aF{7uVa!>i5P)6o@Vbuf3WO z#Xz*m-o8LPjk*OXtsNd7gc<{#amaZEyFweAR+O#Y&U|f)&R4eZsu~6%GH|yM3(A|_ z@;D%>TbpLHuR4QXOdnnoy8eXn;nz+|s?lQcI{ePb88g+8C3_FxmXcJMMVkJ>uF*Mv;=0laMhE#uP@hjO?g zqlS)JLnYEs*E?pw8R~d5RL=0dCw_E<#5p4R5a5y{s!{}3I3iUW75r6`cpb>45RmbB zyO;UAg;P&A>U}pLkojK}Pa92nVwe_wdxoGYbd&(^ck~nAE>pth@VmQjdKJrL6wN)k zS`EJq+jh#z8@JlyB)P6;BcR2Lr$ta`U&nLqbn%L$svFY?f^zJwJEEEu#|6$}#LJmb zdUr-qQi4ocpPTUcIHfB_9sb4{UXW;RZZ!xm`RMI*kCwY^{0q%@xxh?|*|YAR!tlcI$HD#{_AAV1u>ulRdJJ`| zs(N+XY#Vm=U3_TR4S3Og*J#Kb6NqZKbhuR-H_|bFv~)Vxm<-)n!3&oh!Ha?(1T;PL zb0wcm_k8(2K$FdRIV%mvRcc|Y4PIH|p!Bt1%+j%6R*}hAi_#nVgWTCr0AqV_ ztIM5rO3_fy!HVBxCd0_Y1)bRlzk}uD1t!UW&SEecldOMu1wc0fYzBPyw@K*VZ-l>3 zcE2(1p(+p%b?;KB6QjQPKKg22Uw(1E?n7U`Tq5WhPZx}Ods@HXxP-{9ncVQ~BvyY6QX&$$@onBLSv2i)Qaz}CP`#))q|>Z zC6{S!=}6FWnhbz}u?wU}}q z35+|Tn>Ku#d+CVu%}4`^;EN}51B-sWy^We6OxDGXe3VQCRVN^QWY?WW^Z}w|#@x*7 ziR<=TFbG?3NGs7d6T&4MoIYjMH1&Rrf<4+MhJw@-ph6~k#qJI2s?zOQ z53f6nqbW_#4=Pi;T^*C=N(~nhf-a9%VrKbWW4{mHcHj?$zhL~4@|Vk>rjq*n`snH9 z)4!^k>TV~9@2vUrjs(s6C$=GlA2(tKiwC=Wvi&6+iG*37K|M}=Lk&=iTAFq0tbUyW)dguGHg+?CF3{c81lA6+ zcC{984b!#DYs-C&FR;bKril$YTYI3Xz2uSR9Wc5k-|GQ&_Xj8FMAeDDr0bHfB^Q!8ABY`#F6rnOHmgx`v_&9ux(s645 z?p)L74O402bRcGc(p|@j*{1!mwt|gA?flFq7!xAMAcGebk-d)0jScQO+=C4t*4U2^ zWubjAaP?f~&DOXj1C14C*7lWr7n+kpMaB;|&FURQJ6Lbp9@9bPVzH%^xXHdgVumQ@ zMdql}x-3c}3Y7@VG5-z2yrZ5I_LdZdpn4>AhdNgCWQidVNSJ)VYISNMK!f^FZjeJG zYK~P%q!glP*fxpv+t(bc7iwzhPS|j3*$RiBDkR0mvIq@wY+hcZ-uE++)%MBAxkqK^ z7c>f)@FQ~o#bYz@izV-p^ApC;h{^{YZ~i0w;IK>?L}{T9{toXCBK!yaBr37q5f^zJ zQF`ZU6k_!HCzdJ-s0t8mY~3txIO&ny_a}%gMd7B`b}b$!KGbKvs$O#Aai8Mi5+O;h zRST|@wE1bO!Td|qabO1BLe6@6ICZSVbgy1_jkay+y|I{LX*VB^1lcBo!mUHEI@)}E+G+KAa_jpv__1b%kJHV7gRccIb&mg4vC z{U>(LK-cCqF)E}arA$dC=hJZ@0Du4#2o(tZ2cZa572+W~GAJcmRaE3;FASq%O`y~y{!;o{3SVHBI6(5ON^Tfp?6K{2Qh_??-gqI|rj#V<# zqT8%kTBp9(D52zzAQG{NCY_f3i6F(UB;6=hrJE*L73RbXPPFK#;{Q9$9c~g0W9B7J zQ&^U$DO48*$0Nm>7$>tl!p3K$s$0}TMC;%rQEcSyNh_=apPqZ$WxR|O9bDE|OlFQT zbQ=l|h&rP9h*Ss{de(uI43jS<6qCyog_S62)Wi9>RAgk`_`cAu;4Mkuc*d z##e)rZ`>n7Xl!fRg{5ITlk`SbZo`*$K4|v&L@3E_k0FOO6vT3hk4v$FM`A;XDaXA@ z7;&S!;zcCIX^v}(;^Rj+kzP}rv*N_(kBhHOO+4lZtSV9jk*T{j6DI0gq7hx3&M@aH zqrc9rd`C3m!9DckCcz0iH)4Uu&Gm;W~_&l*Z!~;T1GO z6(zLTR=9EbOhSF2msnDji)N@xd)TX%4Wo9Z#8PdVRv79xb-C4rxg$rtY^epR7HcL% zt#Od)-rx3FDiM*Jr1eJjI(9=Qa5|NeY#n3?G##-=aVT|a7wte(QmJA{>{2D9sC;WS z^$|>+ML0EVR%3Sg)!C~a*i>8)YALlnt-TQjPivlO2x_>~g9_S^-%3jp;Vp?miHosS@rcm(n#>VSmkpM#H2#*0{{vTvz1a=mGt+|571Q9=iB0`2>m9 zT`l5xw^Z!WEO6br@y)TqqIM^OpYJduFnTaj;zLM_wTsi5uC?o>hM8IxWLHhXri)@2 zmPqd59V)HI&BCn1lHh1{s(6QV_CS{AQ+C_k6>*2i!my8zNkUELo6$hggSn^XrXmGd zO=E{isf^Ys>XXKB-^B5JiJDa;<%fv+j;f5Rz89_FX_1MHEaEhY_M7L>NStyCV@CY; zLZVE{f5yiRDoUJAVd9ifG^*kbhLqwXY>1*6GsUVnM~V}J!Nf~1jt?yYiL-5$&|!xY zB(al}FvAFnVk=XA6ZlRiLqG zm%HJ@$#AAri}YxQBEf!67mLbtM=CdwBOz%~$M!Hc<&BcC;6d%JJ5W%hA{7*= zpwN@bFAQQQkNHE4GSd=yH-`z5ViO#kyk>_O>F+Tz)L1Q3n6QGD$tSqE&zjhGI*U9O z*-?9x=RDlu$wQ2hFr};sfpYv_#kC9_SqRajL&TlB8MX* zoPFwrAzv*D9*LJy-o^rhl?7j-HI!7;+LsxN~wxEo>ZpcBW&WNewUO65-IyN|K&Gyeun-I5CpqVONOaW4shm zNG_i)Lb&Afk}>@_$)kkfo_r!G%;Q6O4K+xRGmK}M{vZ3-Lrr>$eHhFm@$oPdCDJGn3 zjEOiXBZVC?K|5y*Ldr{?kU~DB)NAq}2sFT80}O1SK?E`&!37r-zyJmiz(EHO2smKgcTlkMv53i)^K<#JIs_+N%#p8)oQt~93K$1=vx?NswcE*!_h#HQUv%*T^bV!URmPi`!4expd z8dtDeif4rk6~{-kLAtlnbqwdFw9-e`ZjxF>QfGuT-K(n!y`zp@GmV;>X*ha$rI}XH zXZ8u2OI3x^N{QmMI${@{a7`GID3NfB7tzSB^X5GV zeG`^Or*1+T-7bgCXjT=Dv(9>9%Mw&G^Ap<8&}T+F3GJgTV&?OhECg*hX;7fqP}O3c z7xvNX6*g0WMk<)3EC>JqGWal5P1IarI+wVFp*ph@p|8tewIBch=s@ulKTzfTDs(fV z?+im-uzperK^fUsWP)rTBJXr276bqQ7nqNnm&*{p5eotUfD-s5QE7m_PbIo*TR?a6~R`)6%P#{(hRgmjcs zknz|7$sLrBO5S1vxhuIH_T^PSwMb5@hr70sTcm+L;tO#oJRyPy9~CWh75Q4HIKj{g zi{9;}FxoLYw6LgP@uxp)*F5Q|Z>u!IsL6i)Ds=*Vlq zFh6L0e0d2exHfJ`-fB>WWXOy%!2=cvOYWe+3SNX>3(cTif}C6zq&hf1Jcl#YIctoE z)z8T&MW>+>37%s7{U9*R_vL=<(NQCb+1Geovf zl*_B6(V*TgD8bB2I;FW+ zxvyijsbw#6D2ydYywkjD=sCw89Nu6$36VjOY#2u!*xXmF)D_%wYy zJs&xT#+GT6kW|Xln3~79Rlz7qL#! z&VKnFjRN61hkPI6k7gFPf31%H1- z)ZEipb;!ZAf?`CZL(Vo_ zsp)uL?MUIi_6ZXrH%T2dmBklDGO|5bM_O|kXC$fPEEYPvYSGk0Y*T~YYN9rg9Xy>* z?jc-^q7qv^MskTRpN!h zbJ|SbWpvJl6haEqQR%}mYC`N3-P~^aWFAF}UXia%Lyua>NzzG&#xz{fFY~;K&ga#g zyGAZ^Qsccc*&yGHi=3BNPUo+cN-U&m8Nl+87F~Lh%85X6lY#>=`vL{>v3S0>47Y9ckS@JGl2X{wAd zi0krZj2AzZ*UI4tZP@Z*PWXt0Dm=+Ak2?fOO$uKmkExMS$CZSWR5}cv z^1j$FNQvde%U?1Tie#6tc>TRHZn5mNOx3K!zEJEOP6-JOZ6@9e5zWjqb7iLD4E>}< zwYaaGCp@rBS=zD4RjkH2r#mUEV%1zFLcOrE5T7;T3i;$CwmuZEm?m`7uvFrRiET$v z8&mOF*J6nx!OjGW2QFI4B3A0Da%@VK;EPBn7Cac!{UD*3(|H{9+DRN0MLeK(XWtmJoron>!EKY;2=aPV?Os5`l&7^{#7|Ch_QMd^mfOfOS4qR6?(s>nSUS~x{jQT!GB zj1Me1DE^&c<@J|mt&#((VO5!~T*6TjmeBH=RiNcS>dDl5K&geRita&4+2nF;Q$m)5 zp%2B&o{Gv93lX7~!AYHl6Eiu5REQDT(n4nBaXFBf5LG#tSB1JN+eP!B*g@gfsKPcQ z$X`P~wa%!-c6BD3?!u>G29;P=o2sa!EK++YEC-!%)u!nbG5EP0ROw@H`s!fd`D z!FA9e3SpS)V0^=2bwIn}*Rb@3Z*x1SpqLu+6ujvOWav*h)Rmg#iub@__ogmUyQD`SRp(vE(hwXqv+)j2YYT%aneUu)V3QQ7MutqA7Y{39qB3D-Lev3Oyj$5N3y(P7sdxp zh_Z#u&cuPNF}c=~ZBgfO><68Vq&!5j5*i9At?ZaO&01AcFJUSoi5v{Kgc>r*B5)?= zU{tM%2wNE@Q2bC7t4%|CKsM_NL_+L5$T8%KAiJ9h!2?%k!XajYkc`au!Wk2)Mjm#d zsEmhLR#ImYETsQ<=aDPI)_m3_YGFc0fI#>WEF9oQ!eN z!seBzP$cEqbkJ&c(Hx9DJSQl^(8VV8Jupk9O;d7Uz2P;c2#GYdBf2qVh-MNl?7=P) zatkqpR2*0tnniHMLK-9FE*bNdnT3#&(M{peOu=+eH?=03g3yEsF$bM|6$+y1segLF zGH8-8Vu>(4kZPD7%*=Eu$N@1*d`GJX@(P9UEMd{kqrfO4S=DPdHzZ>TostMK{(*hd z+_8Oq5OJ-=9%6K9rRE&H5M%M_P!IbulaX^fRHZ_PM{jD0%9 zAg!iDv#ObJr|Gu~{_1MyPheor5mjxNTx;_*s!={)u*$sqt_`QZkiTWHtUvG5$DyenMYo z7z+v_okI~?s@}9RN-BzIboq`bIiftFx*H{?#`*b7LqtnS+TE;LF&I?F=`c2k#${vF zn0blHq9A$4$C_zq@610WQ@ZczI0~I;y4tm`c?a;J35lNN4vcDYXgcH9+Nz{DB2*-T}tssL7N>D*B z5EYC|R>2QOo`h$lAS4z-7Q=y<0wcAaJd+^K8P0ZsRAS7tWAn5rsrepE%wL=`JZ163 za46EY%_c@C&vDWO?JALl;vlt#$|7Q&!bB{dNZN{pf@Cp#P)(dcV!5MuJ*HDNenWAh zjnVKOapOUsVG!k}OjL_X4INYf$LXWpiy7loEj1& z#a?tAuU2y@OR%ah`Rm*l3geZKbVkzXd|pfDwK*idRsZOt_0}(8QW}{$_{2o^=u5kJy}GvuzYj>+;bKE!nKs}jUcIS%ew{(~kqw*S~WV?Rb7 zADSSJ&^_gYJQ_NQq$)lXujmlPiL;T&WvWUNqQ;VmGFQfL;gC$Dif0YqqE1^Eeuy$5 zEGAzMUDTi`dN~zzxjzx3NSQ==onfU~QcpPsO)72V;1kjKZSJl- zm83@Z>|p+Hbj~iIPxB~}%4=vvo<@*o74YLv!oR^O>HS{ni>d{(P(&&xQ3Set(SZ$7 zW{WA=)EDq>`)ZL`%%KHqcG6r8ii{4brvw>l>%>QIPwkQ>q& zS1UE0VpR^d*~@GOoN(M`FL1$&b24q{S*k2=xHS%;O^-pSLXK(s>U2tOnAHjinVLh4fG z;8|OZX?~zkI;$h9MS+Bzo#T|Jp4m(KwK*#})gsC5OnPJ-OL1q5p;??x5R!t0bdsDR zZGUuaga>qvd><*nH+*zE7`qNR?nhP4RT@rDr(uaUWn_6Lr%ybi>U^z_XXb#a#-9mc zYa#s5Ot24%N+gIg;)8z<`k>JZ(ZwyE9IpuFAIy_#1&d;ikx?x|sEVR92ZO}T4Aw?k zv{^h@6w(rtIXtFn+n4d`?$R-RV44oKt}RUVXBHZa(M4rt%y>@Tu17e5^<%6hzpy=*NDckA|2K$zJ;*H`|69a zED_RSb*!<_#*&DyW>=M0-yAIY7xkHB9yv{Ru!b8^Z|OgE=%>grZ0a)G7%T$%0cf!&3e7IBcUW*G(*ukPNE5FJdbr}dx?`jLCr52S;+*Ooa|@((YRmeLWb2&B#f*SWjW!6k_E zu1>8`>lnjNq~UZxMF;k3nS=T#Z=etC1COcd^8Ua>Z^ZdpIKnzXoQwxFpQv$g4{D+p zX;UH7Q3{+Amq-p|G_6BT{keQE9y}}9*K+vI!jyC&jO666^+ zxX3U|#nl;}B`(p3zXy+TG+rES$WlrtnKfQKI5mRVc!?jzU#*XE)7$8=9-O7jgHoe0 z$jEN>(JL>zBU-v_vfxS1N>R#>kf@%~$ww4LrfO#HNKq{joxeeb6rIm2%WR^Vb-1a{DQbK$++kU9hvYJ2 z*BCb~ln5P~W}UXW-^A*K7x8wnQ(cv}eRf91QGZwCsgRc#hK5Bmk5z4_=AZNOnmJ0P zTCiAaN9I{WK7FXC~NVzc|0qJ0tb z21U&MkeH2xVQllzgd!`KI3W!)%WGsbr#DFI4o7`MwQ>C4yg1L@fBc^xHOB9=q8?R7 z{5DCU=s+q;!KrYQRGAbdW&WmNlzo!2Lq0Nw&w-Q~;UjSgk~B_y8Ki^7N21KlL8ruM z1)&3S9>g`uKB8+ZNRA^N3=w%y;`Ao7Rlz-wZ4;5A!zd7d@IzbqjyAXB@aH4NvSOW( z_JK0;ZyrPv&8gu)Ze=6|weF*cS`{HgM3!?*bI^!N8ae?XhR*Y8SLxEJHCv zw3(ou%0ip>GqMC@{%kg#MR4cRY#f@^ymM(b`#Q2ap3T>~HS)e@UHrx~nor;FU}2L( zBE~gyP${i-9r6ma7#X`fO-3K`Ddcvj7O#aY9Z4kW%)Cq$mU1f%M-K- za!{~6L7pL+n!^?|ks6}I(?5bH{5uN+KenevnnyQ#1TIG37#4R!kv4|cx7XO@MNmc&WG;Kvb zM4hU|-U>_g%^pSIYDS;SgTAPlJ%nO*Fx_HzON2tJT5qo_xhpQsrP9lk@tug6pjp*u zDpfO|`687nC^j{j49~o#WluX()bchON|n^IXU3DZOnv*2&CRMUueXb(4`cUOPidyA zzT4HBT_jd2yDjHr*fXtB$*54J7UBt(=%FZ$siR?uXeP+CuCqlGRWvjojlA*D*fOh; z(bzKN8C$09W3k9vM#5 z_C$?8Rwz~Kt+gb!A56ljB$LtyAG#158d0B-mEAsr*5D!e4K5*>B;3ddF|?^^kt-y> z!nW8Vi)E@VGE@)$LXwDb-ma)au{C_hXYd-~euMm==(O~4ar>;hkv8tL^p@Di=bt)S zbXlATSZpb~URh*PJ-s8q4$wX&k;ol-QT4Ilt> z5ePs?91e#?1ESGrUiJeNfCZ?2Ha-%B!GJJGfQq1koEZQB000002mk;8ip&%6ifEQw zv#KeY-FcvW%&xata!*>U6qMMqI6QmT;BQZFIz{qPkt7(iXau7tmMkkd{}3P?G*Ia@ zbThLZ@Zns;Cm%pv_=Yj~4q@5VqKMUU!$wofa~D&QLKsm}ZW7%wE{hLPKD z9O;5H&P$5XLOBGySV(e@nI_?iFlNxAU=C3vX<1!>3er!!cGg@|kx5wZBOmXPg_k0Q z1t{cAad6a<=d_T=D%Aao?O(whW`9mM<(%Oq6z>1tXWUm_a;J^W@m7c{3`2mX5HBw; zPdHN~Kx!DGOX6}6G;~6znq)~BZ@dw43R}=WL=+KP`(Z#kWJ&qa@=!7b2=lhXL4OLs z@npHSG`Rf}`afuGIDevOd}0GmZ$|y9tuj$vTd%Ar0axB(ASrq9;}Ws`at#m7Sxwhi zNh&>ZZP(cBpoSoI=xJ;UMgAhQJZIHN|3M3u98@b?{A5yB+)bP96C>O0y>@(xc;fBd zXuXt?*<=kv#r5nvz_hd3NrdWf)}9+)&$El(ymQj2eLf|etfJLHQ@wL zanxb&;1MZgf7zB)9JT_U9oW*qAeK1P%ho)>A?;Fi{#TN~LJJW!3gMj;(gGO0p3n$$ zaW@XPLDXwK#Fbe?wNouHzkvDUC_WwEKapWL%2r7mhRT8E8b@pz&P>=iuM~6~zJUsP ze##96-V{}jiQXGxLB$~yska^nYupLCDg|5%-kMoH_r9hHmg}y!#}`Q_K|*_Y2ZcHI zBR)UtgMA|rw|`A8BlImS4t{EoQ#sJ@5e<#9tPVBDpam!2gZS=GcG>I%>mbK12w3uLB z{H>lgJ~fm8<;^G{V>$&F@avyOU9D6xb}y=!azx~T=MQ_8L)V~O!I~awON=R(Ew6!_ zetG7tw#7o7Et#}|<`R|X@rkm0#%0ca<6c{JM@Zt|x;n4WiAuO`9nyvcvES!$3n>5r zf?^3euf*|C3uS*Emxf>rkw{R0hQUi>O0cwACRBK_gbbLf5hHNB3{K<{hAllsvWtzp zWiQn=+<}2f=zXG>fUy77<+1DXUV)Xt?LbkJvOrwYgQ(_TPJAJ7F6GcTkx-VU1y&Sc z=<$bllTYN%FD*BB*9 zP^=XsiPX2Gyk|CW7?w`Lmb1c}-)b@ov=ggB{QGHO|v9BY|rfvmxC7Oh8OC}vbQ-@Qe&4110$QmzAAd~mQhJ6Rc1`G$m{H~ z39!?+5LQ8qPo56G2<|IOJPV(cHmF%>{#Q`WN% z=~SGdRH=jEB~ zO)h7?dYgpXJ2?Zq5sPM9L>{dy6XXdt$)LtKqlpqU4% z*65(o0sv$NiBJ7N-pT5hDoC}9n=%^!wpD@QCN!@A%vuvQ! zEVT*v7D#0af?VhnrK2L7=wy^Z7f8Vcy+*Ya`E@cGcBvkmDmH-=FedmKvgMp8fL}jJ zS*Ei(`W)nv;}^on+S`PLv|u$})lm&U8#cc!E!F{Eb32z|uIeC?H%a3YxgtaHtP~;X zA!!PrgGdHD=*QE@u`++Bdz$KSt^soGr8Cn3`fP@{T;?$Z9>aRqRgsHH#H(!Lb$sr) zQ>!GI+A+5{Slw@ws>e>3>q2!TnIcLWbuu#*;0cZ|l!riPe~fYyu#?6Nc2!3+ob|fX z5lLau#ZYY?i;Qd!IeLNUCrOx>Kyvc3#fZ@0r4|vE__nI$)Ob%6A<8huQ@w=)+y-Kv z1+dA}zE>}Rfj`FN;j_9!QypA~^96dpcmy7l3_mHDV3-C4qE2e$uj?2j&Lq;Rj@KKQ`<;xC~>$<$|s|~0k$?t<_o3HtAaKlg1^ljn4gt>ydY0o8Z|j!o@=EuWfqiaG0}aMLJcJ5D*-dnGz$!g&}a1bq<##IuOZ z4vc$^88}qKHMsFcZ^)6*(~+1?%AuiXx>=rrI-o3jO&~ysM#zV)#-G^0xvbD9x;L*7 zPjY@Nu@YToF&CLW5v(Gg0mHklx(*fuTwZ#hOeyN!ALh{%*N+$gs+n=SY4fJgQkUSF zwp%d0@$-BEh%}TnYc#A)Fx~m-%9EAB09@$cYZ|GSm2ozO?6d40^U1|ZQ|br4j~F4x zvO$OC+K87_(*FE)8o((M#xnD-4_iJa@kqXLo!evA10IC$kqjljcf|Fh{K+})u`Kpi z%+GGIc2u23X`F2<27sHtJ(ZdH%ghT#`)g#`bU$V2Fn>@uhFTK%RVTHt8Uj2dB%B<$ z^OyLWW^9V4Jdn_LHV1s8hIxOKn3VvorLp}x&}g#r&m~2PF}ujb^WF>oJxh++C7T-2 z^{@63VJMyKRTdb)KQ&-8+utH$w7KCH#=3~c)-O7(5KCG{f){maCye%%m1Iu% zT+{c;RII}kpcn3N4ZNtUt$2h@`$%totd z?8$IZ&fjQ1hq&rlfB$|M`i6r#stG)Pxm8CP&TjY#;z2WymWXjtR#QOcYC~9ULKtBB z3j-(t&bw+0Nw<|u#MYD=UY&Vm2(`(CFu38Sq<%X1rJ_nkN@w1&K87j-?s5z2uK@x} z0&NU}PE|yS%XcJRt4x+mEQqga0xiR_-y^YEG0;mvUwu+Eq{_Hdyv!)p7w;I5Veet-LeKAb52Gc z`CSR1%m+reZsN;10KWVMHFTc%9SpX0E+)^$5-NO!-26j# z7@Bms8qr6K1y59?-Ki7)(+ib+R%-w}b1B+kmd76bGfvVvg?QMU1g-WN5FNYiGh=PS zJEfw6EXWiBEdu;!{ zL^E##u3FsU-FZn)peU{T=SD;xCRf2bF?I&?_2>GD0M+8HvBH<9l$en0PXJ8zbWpEo zkjXw%D*MD}8wN1&m8~Mi+eP-cw92Ps&Kdvew;*pLz8YU28UUxuUjQy)WP+w#kTs-s zRB!mhB06#{WrhV?0uitmbsjza=T&)(T$To5;NX;Pd#yQE2DN1J8C2oBmAz&n)O{f^ z;K~Q@IM*|UXSSr~vE24?TjwEMt?x^kgWC!Aq@j~~LPn6*jG25JY&=>^)kQLgA()uD zDP20AE?&Tswbu84@t__m8Y{dTSlGOwflN61&3HIHtKq2v(CiBu%V5{s3I&jiAq8-e zX3n%2^__F7w^@}X1H->09?Ep1U{Eurwv8aogvl;2Z>NS>xEERUJgC$eCAtic1IgP> zaNRI)Gql-lBV@;D(U-NL697mtFeiAHSu4=ynF&fVlbIF*Jq+4Ak`pQ83DYr= zLCde*P3i~iQx)A~px~gZBga!eUP^Y~vlQzKb0V7rz?$=jqZ;JjLDKKEI!30|Ov?$; zRIfCDOIt`Iv9L88$33$ECuc`WXcCJS*kC)l6n}9WP>da?RAHYYTBZ-Ut~RDWKZZF8 z8^+-841q|zVxmp?A-7kwR%NnTevM|#ZU`{<>FZ7vc7t`$>!r*YEc@C>j`kPy+ zN(5xV>>`V6c$s%;7UOO#hu3^Pu)(%B9w(6rrX$KaFcMf#isTdc-3%j`0MMtxxFuLo zj!jQsKJ8yLKFIKf#v|#ogt!=Axn6(b-OtAe1lmA%rg3&8{;x7tLyTl6U_FiQ{M2j3c_TDBK1nR;kVV<= zHy~^X+n2#X+Z>T;mk?#8iP<_y`6WpD@iQ`8Na;j>rbqj+T=GJ*xtF+!=$Cdd@FxoW z*HqjFy>l-Qy=d19KMnQm1l&AGBUs{W?c^qOVZf2Eg%mdUSL0<7<1&B~TrcAQka0=4 zb+|oTqo9I{8sRQG^$h*3tU_mvEy^BeZ z3P3FB@k!7;r_mpK*o<0;n}ol~NgcW=w;)pTG{RTg-HHNT za)+7<(=^o?ONOkmP`9&-i$^~%-DSQbPeD(!CaD&u5Dv?BiqZ{Dnq*fQRJ9~Up??Lc zgvj|a+GZLZxI*ljQgT~O%%ag%=Z{Itvn&p}$6ygNRl@?Nx>ECZ94J+~>(=Fnsz_Gy zE2&&28;YBwaEoo|B2rz@oFu|vRl@k_K;uJiXIQ(J!WTjzYx+|-YEiX;Lw8D*CT)`z z0@G0IodV_)>F>CuOd1!vN^(>W-+tyI{fKF1*!{5R7cJOF+EkcyqlO|$6p!o3>7`B| z%t45dQO0h{Dg%mE*u)=oIe1`Gc3PLg8g~Me%+qi<0&-Jd+=~9tG&13sfk}p6mwYQU zS!%hGBWYJ4DW`lHUs2igd-rQHYqh&^ynO0t>3hgA5V!dH({)DB0!56hw>uH&D!dk~ z60ilX6pN83h)YPFg5z1>**dN1zqKyy5BS%=@21krlexYaxtl#>35AK}{^?R|f*^m~ z@LeXrG%#$&Y*K?k7bdWS6O5emKbno?n|1s)QE8hOwUU`6tC(W8@AaLBZ2T0}y9R(M zDco6FpaUZPjm?WiM5K61O~ZSUdW1T=_FpNco@ak&W`!>F&DLh8Dz8CS_ zPw3FaxhHpVke-0wJzQ#mE+9ner2dDhr-qu|^{^M2?MaM+aHMW$76MCMGx+4@SQEl+ zoEfm_;SLT~c|&UlUoxEn^FpOiF?8^jYd5i9<_@cs4NHX=@IdFmX6{(Y+zE64d23@s zqgG81Qdsu|t3l$RTMq_?5Ognm)GD2VE46-zW6Q%Or+cu+fo*Rsbj?upvrX5?N(d67 zxoCvR;~118F_2xZLoA)mw3?;n&#w&mcyh)8{ODuS|CUN1EwDD#!L=df!dl_C+ZK2M z)HDhdULm{7EuyVlf3o#P77hAJvK3hc=?Y{N4u1mlOV6gls2^~7l~MnGfCvBliD;?e z7TSV*I#XwswrGY@rfTU~L4Oe{6^7x69*GRU^%6cX((qFPBjBa*+*E1|TX_$St${?> zN@D5-FbWHF|3X8MZ3+sIcaz%o<4*ca&$t=Nsl!^t#vQ~p^Cl1~9xf5~9Bu~<)sJD2 zt;(G+I(JB?)3f)4HOj}q0Os?kk)r{=?=Ps<@xMnhP7neR0p6T^eoH;@o)lT7LtaWp z9R!(+j7V^rslj?zgP24EGnkcQN8&C>V|6-np9T@cx^uuIX?kFN7YR!mt$ClLAriZ{ zDPpv=81)oCvJ2^%fPYeryI_z-4hq>?v+yUZP29yxrDp;R>1QKf?Zp*17%bLod1f*o z$h38$W;C?fguou$)%E%)m;jL{i>Y}iLwz2FruhpP{a?<~)Oez)=s{hhjL@(s;xTGd zdH!TkeFCvHU9z>A)H0F}gm;G2SivW87kRbD`l(lYWQ>mf^9O@Q8R80)-W_*)fL=3N z72p~E6Ql<)7fz1C0WhE1C@vcnMdAYm+Pp_Fs9R{2JJlk@oF(>bP~w|yq@0$-ORu)D z8xe9iJcZF8)5p3Ls)EHahu1yxwjZYUFq0)~$bUJ!S_rijZ%JA^%HYZs3}|__8weaI zWZ68H7rTr@$7M4NO{7I{%KuYHt1ZFIYEWOma#toH;d0s2b3oc48rk1M_rXmi2;@rZ zz;_##V!Xt~yAe&}g~=1BJVpFAe0~EHxR7%^M&wQW69llQh*Q%)xZ)rk$F_t-KZfS~ z5&%Q)-!EYIgH4Y2SuCw|besYLV+fI{9unRR#s=Rx$%r>AJ(6|6ILl1B`z*tN40W)R zU@*Q;NMH7+&R3fa2e)V6S~IzmBfSX*mOb5(N$? z$}=&dP9bXvkEFSDC1nLk zrPT2isJ$dd`3HMD_K(k=8h?~7TaW@|} zB48ue-{1)1v)B+!h>+k z#a`>m1aWN?C{0lpjykEr;12%HRDT0db?P){HV$aO@zrWykPm7+5_Fa*0y47ixZ4U z>~cwT$A0~}A;Ad51iQdtwoQuA#&z^H%KEfCuoP7>UP`gsmWF-oe2|CWYR!IueS)*F zf3xPn$`Jrbm{xUcla;Y1j%hLyg*cl+cLi6zuW<3VhGDDwq&}e-;KP&~nYT)jYQ>B7 zuz2&`5O8uCkPIy^IBM)HfY~)g_O{_lJ2Dnr0FZ*Eq7JeSrzQ*L@-oa(BmS5OxvNMO zh*Et3hU55{m^7m3as%K1>4(%=R9{Gp;Vjnm2}FSxxKjqJDS<92wclg7XXx!Bmko4Q z7>kJ=JQOrp0QrCk4Sx~tx0z=tk5`4JaKIv!peCdYDL#xMr&~tn%Gfg=@{}_b| z)sk2Kj#HvzUQx(TyuyiGs&RtV!i58uG%g&1HFvlrg%w)C(^H*_u2vYxUj*_8VXw}M zrTZUIk(3;1t*u-4V5FDAzm)H9D-YKW(aXP9ewug7FleBsd!S`KV=k0aUD)Il8TOHzH6sl*)s+G{yJ(@q#b z-RkOI3prjnn5PJ};ypYH=kj-WZoHpV83p@Lyt#n=Bz3HljFZNxl@>;pu@TuX<~ba7B{c|uz-rK7^*w7R^Qzz)R(zf?fG zkyE6^RNWMc5WwMd>ty>WHkVmF1`UPdb6F{&f`PuQkc)`VFUZPCJ7=<|k&wTFelnUx zbD<>n3qEga#$XP&izH53{F^nEG$mw^^^1}Kd^uf4L%4)>9w=U#rFG0k-<0$hm`dRM z+&3S$Qs`GaiQNevKsdmyMDSUPB1>iPpuw89&_ptSvpL?bcwzvBqw!I&EUY&B9=Iii z6`{yWS{#jL0x|35&r9<67@v7r`4a`S;WtUEo54UEWbapV51lMHSK{U;qZ^83insi(^X38QN9VC$xXK%wx=DXVNYgpz@QIu*qi; zF+-$2fNec!-<;pC{!j%h1~5N_4kCsq&6xrAGUe-TFz=aib6zOgwDI8Q1fkC}en^M? zki6ZCoW;>iN=pmIj6rPbnuMA!gwrOR&t-R3392Z@Eo&B25Ef z10?%@wcH^`h$O^3@ajAUnO~W@5oBO!W2-d;TfyZzv<7U>-oS-%h)Da=4|v4;<43-iNBwANvXST(!#^Jrw^=5H6LT+x8~xLUV9!K@ z7r4Ma5o=N<=;K}$MwA1}t}m=4v$hlt;oM+k)SiS72|x>~?qv+>AJG&Q*3i;*+}jd% zrIz?&gEwz^YRA~3ygTmD0%Esvg6q!wq{GuHs(iseV!kf*HV&)W3BD=~RYq|6L3UFC z1A+uA5~TbLg|6NxjTWYSF5!t{9CogTE(WC*L@`z8YP5(!_%+?si4!y_!yxBrwyWth zEM?yaI%BA5!l2nfo&0?8@S``xm>8F*P}dwGxyDM+AYQMqq!p;!Gfv*nvPVT=MZLkW zD$|X30YGy7Rl4YHO_ru0LEK3v`&R*>T_+;G$Y2~TBw-1HQI|9glexzLYo4G0b73vE5nX@~(cg)dI~w0QZ}5q}34L;E+8B0AUpMZcR??Vttr zfI?oGUXN5jmb)mJLJ?ZbNZm2Aze@|_hdV4Ub_CH>lN$y6tw>2{299NqZc54vCE zD|5x^Nh=m%0Oj3bGZ71Bf}{ReLM}3zej`t`HluI^4t1z#>w+9|u7sO-k}nXKji>!E z#2HzMS}&Qw;q>_}qAX-X%z+D)Z}s_>($Nl;TB^zQ?*%mRgqH~jVW6^kGhJ~#V{B$E z$w(bpE2q#@+Gm&jsWAe@bMQ1gTugEpqh}m@1452E5;I-G44P-X0wy^#5yz_5l9CRF zr8dG?Qf(h5XT3se-2=g15_CgSfimZl_6eH!wCe*xy8v^otk>fTx90xEk{m3D9Aoj) zbK$SA8wFye*4w}8qpuBUN%X(EdYtZz@;?-p{d6nyIpwoo0}vRk)Ft$wq)&6Dd4pr9 zj?{Q{#b^N$M2hbA={4*Ggt?rkT6`wtUXhhXKtQ-JZm@`sWJ-9IZ8@CZ(WC%iVIbyM zMK8xye+LuUiRI-=y&2J?lUjM5plM@wv+%%;&=rpM&H=iI#%E3)7r1P|CxS%6h;%12 zx?+Gd4JQpY`mz8QtBuLQH!mMHLcaPqAZj-l8i^KO#6ssZ>?W!18q@aC#egn{VI>jI zlW{)8$(-HPv?5A_JCglLLWlR1VeTaE~5Dw4tnsFFs9L;fWJJ7^nrCcu_Bq=6h@yNI_hX1w*+CJg-AM!^SK zA-r3Yh#9PxHJ(K;39q)8@bgwRNw(K(re?pH6+G0a7xQ5l+cFx;w9L?|G+s_4ZQt*K z?*FI+9Z04`D}Ngpi56PD9$*GK3A9DuMMUA zKp#$nnHG3@Q^ty~oeC&nyK%0N=8a~kL&lQ}=eDqcc8fuC@ zaB!fDO;|^$Rw6<7#-O0voa(_%(3KP{qAKVn96u1+H#hhXR2OuGbty3cs32|8-=-XO z{(HhN5UGLLjoK5w7tBo|1t?M@^O6fUEp2 zgd8bF@LP!mXMn2~7%6tyRhc7&iQg)SLq{Dd1IwzCV>A4V1z1`3FTMZumct5ahIf6X ztY_=vg4F(Jt0{BSzqrhr*8j6=%Q;2Jh(_P_FYp(w z(3a5z1@`(Euc|(M^>W0q38RZbypr+dfZH!;MMUX`k|7-B2O2?c1wV-G0Lp#=T`{laq_qhFPCG!n6(-Y*s_=Lg3-%5cyz$bxUN%^>6FlRrRHngV&e+k;xr=X(K z>LEFTr6b{fQ9uI>#pd;E35+AtFEBaiX7k0T>KOsoJXTTl61l43&CBly<;NKmuj8_1 zfp=w7DKYJG1{R5}bqO>fuSu5^pyeXxT55@Rom}!Mm3eX52eHv^pAzH!a#V}ubL&7Z zv#l~&zht*XY<~K>)?>zxfz_Iz@3-Q#47U9V!`G+a-qR-$>iG=iF9}_Ka%e2(_z;1G zZ!Ui|()R~8EEa6XjQI=UwzpJ&DKz^rRb4-g;i{)te+fxV;Z_NVv$i+HUy>bMMW*KH z*<}aCIm3Pi1^@c|M-746@zcmoU;O}?7aQ>H{hK0ahF5> zPb_6ox$0iClZ7nc7eAlq^8)JTeDDYoG^qc@!QDV2{mK#Y3rNt52LKR&FwTS}QUM_Z z!sZu`Qe8AJM{eAa7PEq%aatYJ4P?Ou8-#Qn&@Yq=ILbxDY;qmeVVE@p7mVHkT~qqc zeyLgbA8`vSw0}04UuI2zk^a`Uq;#S6xc>Zl#SVgf6it2w@(Z2*U4cjJ2Y9_PW2q0n z)QWo{aFgw&vf;m0zpz++nUxnOC!Jt-@Y>pTES*}eJuM#VWS`f5eyMLy zKaM>*TXAL(O9N^^BlFJ2@%lU@r#t=8*wphML9O z@5MdX9|BYEd+GZkzAp077lp_0CBS9>nY9;4V-uiW71;f&VqODOZEAQi+O!znHNlID znq86d*_i73$4vyHs~38SlICjmBnBlHF_4WGSHyR*9TR1t5AO@8(-3BZr!oTM>P=?x zeeFzBzrTvhqqCD(mMfH_E0jySU4o>`t`-uI5_!fl92rM;NQ^EdSQr!)%Eee9axm+0 z41LS06d;t?C_W)bU8jcx=yhC*AbuhVhEK(}^puPS9)X$HbzCIX{YxnnbFtqRiDOPt zx%-M^CV`kHGa_twU-KvrrQbZG`t6HlD_XoTc1^_3`SQ06DW6Ml2u!vX-y}GjCIFEE zsR1}8xy|KLpM7bqdx~YIQF~$(Q70(_h*#ujg0TDDiGo44$qE@UH5))F4F!jMUf#dL z>yhlF!&+HU=j=&A4Z^pEX;HT_^CIC0Ask-&EK)S zK0N;_d4GB^R_`XD?}@)=mxMNZhC1d9eFz=;8*;BUpN_xH(d#%DBOIpnzmgoUxu&t?&VA584z4n0QkdO0Ygvr+3Hm? z_EpmLTEYMkK<>XjSGKx)ecWW#(e-_QMV|mzpgR}Y-egU`q+xpXzG-@dtbX4kA`T#o z2orAV&A>B;Q6Gl+dc~&|>8o^`reZ1wc&_p z`s>96fMDdZsQ{?5x)X&blEtl>s_a++pH%RRwQnQQMy$BFP!A02`+X2ASY5pXvVc|M zaIno+44|oWyowY|W7pLnXc0oW3P(ztyw&$hV7FGCgCQVqR^{kGh_RwMMpf=rX+4Ub z)2h9HQ2nY3unWL#fe)#0TeX;4WEJ5_p0s^jDn2C(+&0+9lk zI&t#FSjx?8L@9>~BsHT{+LQMf)yfsvv_%!Q=0~<9zlCz7A1Y0YRkcu3EJ%ri5(4MJ zQf3(3(kbT_0L9DNyzaU@G?pWhPl2cvN7kj$kr?%Bc;c2wYq66ffD+lh?HP^-m=k$n zwiPFiO4$uKId~ztBwZ0^q}b?EMPi#<6BjA8W#0iPdtmp-# zfU4eu;-hn1gbt6gnm0Lg1bSIrCpe;I41(8)*N2rvN!Lw9>k&aO61jMg7KzFnVCmY! zW@|7iirAWCOV=3-kX<1B1k{9x3>^WV|Bx{G0FCVsqZ(kLd;KPw<~aZHeRcry*@^b^gZB zmJ{P&0YDN<@5kr5lKFS6Mk2K zk7#_q>Fv>tb02NjbEw*v1=J%UR?y=p9Kav+@>~@4_c|WTNH2)tLFS)VjH_0qAwJtY zqq>8U%d2KPT~zXKDLdFWULmf7`NW$%b&8Nkb%hUp=^PLEMlN);O(~A=7c#Bm?=H8r zPCIwBl-9j^d&eNhc(pHnaWrf8$R5rMiM@(!UO&NTDOT$P0#;(HV=OMU)B|fbk37A~ zpk-o}KGtj_j8qJ5G7R1z$Gm|<$~JZmSj}pJ62s1-RgCAXkGK37XF-~BX%H#-pf?Mp zAh&3=V8Vn3OG(b%BJjO@J8!0-={vhjkXTZ7YHK^eB11lj zbZgsaAIOqyyWs+1#1w{Egltb3yp{3+T9$e&06A%;0ic4q3jicsIgjFi;&UWnWNXq> z*}1}cOwaf*dD-vffm=QY!00RyLPhvFj8KsiBS|9uG}+GHOd$r{L;N9jry9$<;k_Ak zuWZZ2@bu4#SLhj&dT?=IpyfI#5Jqc`s_Qa)uP?QEAIbo2#$40&p{f}-=} z%BO@udzD!t!it5V82Es-`E(n`iOCq@`TKO#JLUPL_5dy6g-V|OKyRyzVlLgY*dr|1 zC@EQ3MabwyvUrzKa@~Rg4R$K|mn)bKa?)qPWgiSJ3FoRyWdR8gb6z<%$#@V8ef_!% za*;hNtjBAB(|aFMbLJKu5X;0Zvo76|7=XJDMFs)7#3Ayl;>ma|tOPm^0u^QOuwcv< za&9-L(KqY>BQb~#q)Cc33y-34kk%_@tM3E&I`yds+y|4bV(-Sq?${b1DaNDN!U1e1 z7g_Vg1m$55+xZQ{rvrHQayFBFn)_J9GImSY7T8Qu9iz>$BrOE6&9h@LN}EajnGMSS zqM^jjn^!Z*NX}6|7F$_Fuw4;Bb$qSZQYq?TnfzM`6v?|n(qOxPD#Dg`o+)hU^UvtM zS0-Wtv4gPXqM0-qSA1i8>r9ggV|z@`1Sh3eOJHod%$>mw5xBh^+Opcqc z=*&GhCZ5aSV-8)O4rn)?Ulh&32Y8tdpxH*-$M1 z<4W#@eBfI%mM23z%RBiZUK7567tmi`#j?x8d1Wh`T&Gz6BHohy`?fRyI)iipw?wd+ zSe{CjIk^L3FVKL~2)_>XH1Pis_~wUjJMY0M=pyiV-E`?PfzK$|(2QSVaZuo-96yOX zSKzCj1@6}srDFw-l(0Clz-P4TSoieE1rB|J)q_DqkFrf*gY6!;z-5GMNgL9+6$bdJ zZUSHi{@Iek?It;$U&{lFO=S#H1D8q00>}*9X=FZlz(H?{M%$u?Ir;&AXLxRT4e*?u zWW;5FA6kg_-!eL8jObO19sO-xO+(W)Q-~k7SHjWXpBzMe>Tg(wtKeOJP=9xdAC)v1 z0j|H<8`KZ~+e72Xl&qEw`nxP9N+#-NwLpJ!zD+csggE{E)OYSHCzzqX6FDnWHq+j$ z-&~ohDA3;&zt3O#8$R!)-i5*ie*R9z=!BoYUG$FnjdjUcVbwu%9Z+%l#IZQt{Ytw46!H zpk}CIgr6>(*(^3s&?gZ<>a>A;PgB${0?g^RP@ha(G>qn_BdhtOB3JSJE_x+$Co^84 zth!A<-IjR$_F!PYLC&Wb=$`CHM4v+8(hSmq=wiRi-ca6!5!0tGCm=_FBb{^ZJ4Z^h z`b4Rgohqr?ZTp}AN3Qo4!+#}h4FN?*uI(4EU4gc+h0SoeLGUO_gxGfvhcxnTPw1NN zYy}B}dtpE)*)HC&9BRgw@IV@Rg2m6k0(8b1g&A-dRtmd7X%`rTeu$~)?!UdXZ;x4R zQ^O1$HDJCG5gWqbp4WiR0?X(`=6p&Db-?IY$c6)$_9)lo_b7_MgTB4{-ndQUW{p1= zd}smBABl>5daq@xKk~s`eZf#BdaLOXCw^E27$#-*JRx+=^=+Gz}9{M_ic3Ha3sc$l^Sh;_RPWMp*uW`wlT^PRuv*(qrEBe z$=ie~{@m&LtKGQ-qVQkeUPUkb& zNU-EkwK^P3s-C#2F#$)C|{i_V1 z%d@_1CBrEjd?Re>nR}vx`e@?&KvfKv)@#d5BQ*JGx{4KIu5hLR`V}UeC2gJ8G^Ik4w%;_x-m@gx+O75I&fM1ZJP!jN}SCiIHsNi$mb9kfgd}`jvw-xpg zGynQbF!C|JDgjIAS@iAEo7Qxf=IR0By!v0dNK7%6W%45OBs=YcjyyRU5$?8Lpu->| z@7#EaGlX){Q2mecg30J#te70>@CJ!;10BaS%kaslW*Q1E+_6rBcmx!U)9GTWMAmK~ zqDoKSZqbg$+0MkS1AZ3?`(u-|1^3hssU>+9dDbjec8t<9I<{-lkZZ;h#~Sz7OZ-&i z54@ML8|J8!C90BXO`kwWno))d^zAAe(Ua2OtSDFoVJaVHpLQs$MJ3j}sP!SAmN9M|5}xuXE3Wwo}F;gT^t$2$kApU%XhQ{&r4YAQJ)Kn`I)R z-`K^Kl{rmhW>JB;POBGuf7i9dLJQgsCti} zCe$$Ak@+{>GEDD5ZpS@VPoNq~=EFBuLEM0ZNy+YWr{3T^**Ky(f9iE}W;5Xy{#9jl06pWig!A zE=r`&b3F<}p)W25dWR}P^5vPk)Pf$yp=wUuD>MQR-fK=8^mjKgFJQ0#f-(;6s^lX> zkV{gF|HEs;@Jf4Cf?G{C8h&&NcB|-}gsY3zMf9rj$1%96B(Lo(pSpgulvpaUWZc^* zRRnhVLOnfKkU!;}#ZWsL+^f!Z)8V5sE>p5i%wd;2mGm-|E}JOlOll<%n-NJ}%5y^= zoiR>;Gm0P$f2>FjU``OxMX=;74FxyhW3wbU1=Tc!kpj}b;}HEkgBg*@Cm<`BQ9V|V zI7&PxtRbcBl#akVf{r~>3JG@P%xM^xMsQ5Sx0Y^65Wjt4TcDqPit2-wj@H94n*%oA z_gDytI}NiD-mDWDGz+aPmFlOqVjWs~S@w*X=()<^#}-xj>M)2*&0&6q4rRqUMRj6B zo4J`19RL$5BhHeMxU!+7Y{OhOr2-uBostI=<-*XG7n%-tJ{Ks0G8OhQflB7ilT1WP zUdJUFAr@z%5FTk`1V&JrG>ixEFqxF$5eOzrd#3>xmYFwRF$2DBPq92*{rpMPo~K`u z1jh`1gd_Q8H^iuF-TSZuUJmUDUQYMgMuI%a$zXD2JuVCiJQ}3Jo)9)%A{qc!86ux> zm*}A7!7e6)GNhiMf)W9AhYUMRdbRrrGzNR_5hH=L z@`%8}fSVF3*XdzX7eYPdq1KlB35UQ5|HqC6N=qCPJ1c%~7Sf4N8h*NKn{Fc4l{GyL z-``$9q8OtDwXRBs51j9Ytw%uV&j6u(8eUif*>;oX^c4&{B<%|){2N+G^Fr+>$UTry zXSkJmOrQ%rBox{dMwi1Ep%;Bc4pTkgl+|nU-?-DvCR{HeUtkG2dTGNo*!{WxOEQHN zFj&Kx@gR>Z)q7}l4Y~OAY*W@3oL@eVi=^GZPD?sf$6*6rL zKhD)!wae3SGdzLLF=M62eBBjP#z}gQcmsy}VTFg6gl-#CS`*w!tecv2jDQWIh?o>$ zL8o~3XK!GHKri%%vFRygVFOL}vb8@bAJJ(#=znyh!V}o#-exqK^Am83>f8o@=HEi+nRoAqUGy&XSADm^9Br!pE$*t?5W$ zNGtHifvj|tm591RjfW|bW7*h~FLGlfLDIFU;&BYHje7cl5Wc^2+1RNefm;l=F&N}W zFGDI!0-oT#-Bz$P&pEKt4$*iE#S-P#1J8hOC{fA>SW`LqbiiNW$H;5|7C*UYh2>Yw zrTKm3Hcy=s#=w4w#LG(txzioyCgi+r@_GROvk zU8#M_%3wP>jmA&oaQWp2MWZPJUh%br6c4YYI<*th1l2b~)x;5FbfAT&jfwl2lmhht zmWv`G8XU3gJ;)hoG;2C`XOi(y4E8?)BUo&1ahqrx_-J15k%GUU}^BG z3SfD`@%>C5p9)*R%G{d@Ap7Ae+jGX`A!`xCutQBHlS#jY{z)PYWjGe1ZKQ%p!wL$2 zNz(p=a#>VyF@M3{HWVWH(l@C{mxt!rbetz$A6%UtG2~&T;<0s^3?N;^z8gqD5UdL< zeIZEV0y}#@;rq;MQ6Y1uf{awg(GnrcYufWuHl{Fr$vrqdDlU`1h90RWqO!itELeOL z=`XQ^!}u1cK~F4Br`sp0x+nlVV%7e}RBs>{5J!Kc5wCBPom1DNpqnfD_Cr|O`ch_^uJBAn@Q)48G^4)2c@ zUSk=aK$>O%;B)>MJ$O$auqOgD8BYTpthz$+Lw=yB0fCa0GNPu2H#uR1U(X5;LzrH?`< zf1Y!{_n5en9RG@IhaVAW$eiZTt_pMsR%!rH+sdmH^>iN&HV4%{56|-qP+bT&vjc@O zcL4}SOzCFstA;$dah4hhN5@iFi7jSUOod3MN6qsvemF@|)UF$E)>wi;lt^uysug{e zskm1+qGD}Wnw2zhv=j`q2quXQE)l9yKS-XaJ8pD7k~fS8WP%Ej68-w&zr%+AJVXq> ziOE=m+_kK(HG_tU`t08B+~v^#id4lw6*873CYA3#LZ)MeXhYy#Mc6$&B<`c{9nl!h z6=tviSzOV}fx+AIHNP5RA#?%NnKbxcoJ5)gHS$R;{fC&~N?ur&G*|}EIy|(|0(&7! zS0Lb(k$PJ`kVRsrx9d)UQBZ6On`;Wi6pv`5doJ}7NT?AQkH*CEyE&auw>;xgd(B*U zrS{~pzk%BI``JW*fwBR0HN9C50RX~0!sCPR;|A2PqI4+ShP4U09E9Ar>x%=O%0P2A zb%-B5BaFt|#C<4)hS>aJQ)%-2jSfKAM~g=Uc7>Y6q1@G1;QiBh+M#VW`*?TmIr0i$ z29jIY_~W!33x|Amk5;LpMG3z#{WRY&3<;jHN|3H#!YdL%<$WFiORH> zC`5(WCVpE+_})1jc=k93@IoUVhhCMkcfY#Hm`DJlVV;(j>|Y#v-_(nFbk#kx%Kq01 zlN#PD>wHD;T<+igcz!lisoIY20FNl^EHML#H$HwWIdm(?md&@emWFLFGHt%qDMA+k zPqNvY(UP)!%3x_?s=171h2jDOyE^}K)Xx_00b@4C`Ba8vVuMh?GowA)AQDppZ>Oq$ zX5R(ppvhoye=SO?xqMh65YXo`X^-^y=4nf> z+gc`WRg{N}rBLVvoXGY&vD|~md)VCCbH!y-sVRfm*lUgof*Wv??2jKtV&BW386Rr#98-eMi z!JG6agwm%$qfwAumnU>!pwjz~Sesy=y27h+Hf|b>TuFJHV)J3ofCk4%!qcqVIu8ePe6a+yl|{?B$MH3DtM2+h z^5w=>eXej(aW`)#0xXSu>spMY&H+&0v}Z90qd);V*hZ0e^Mgg}H<7NZ?q#i=9kC3G z`_m16bgNG>KX>}0w+RzaTm>5r5xAdMtb3LShr_zPJGf_vM=@N((ZP zYY6A{D5mfZ9F+XF6N|bW#L%K)b;fRp z5*yA+f(Od|n?UAT8>-FCi^&QJi%GaTLgZ$Pt&vQY2CuCUkv8C-RJ`*!Yb7tyo&}so zvTgw%=b=5|r3fNevWB-F%UDZtsx^aR|4A*Ld>87Hw}i7?*$K2I!}F>|T-Cabgk*pLvvSPZHZjcl54){^7&JCWQ-ztP8=B>HRj<|{ z7H0R88_`$zWB_%FUxA@>pJb+{2mImNd<2@ss!f6HPR392Si5?E2nP9rvO8tG(gD7P zpTVcVxpaBWv}BpV`tH?)n^KyPUq(D~oCpy3HZReddhLzjwMTiP;SfvEmQ&T1{Yz?x z2(m(&JAkDN+W)~s_jYe{l+5#}g+q1v5_bA||3jhEA9RcDIQ@cA(T&UOcwS#7RQcPN z?xK6b^5{Xb>6~G_F;W)L)NY)a6dk$*<5-ipFWP9m+YeVt?EbE(BsCSvP(?_1slTVW zAhhJhgVMUN$${z00dnUbltxnwflLey#*_4e!X?xt>4zfoaCA;TJ)VR|73I(LD;SO| ztKWfawO(-Y^Vjl|v}XCNAQ}&>-@CnB(X3x!o8CzLNUNO*jRhQRI^stc8PhhI05;Kl zl#=)nsCj4{0D5LWdF+B2@k{sn$cD84!&RDD&l8f9|81p zl`V%K2!%Rf-<*xyi+wDey7Y0~Z^XXkFg-pK1@_UC7|ZYj;$dHuj}5PVz;BoWr910V zm+MPZQ$zrM+N=s(=?A`^r(|P>Q~ikctE_=B$9_Rnf*SZAOkqDGHDwX4pBML!?3Ba} z5bk099`gTLf!43pgNa{1Sb9=KlnLdvK>b4P0^02To+-v&v>Y5DU@U7)NhUv)tBC}z zi}HOJb$7(Dcbbf7XiNy<+CgL`WACTz;`xK#vj8u9m`sK5Xsqf)T*EuEM!$g!w)@1k z%?Ig3yr0T!rt|l{xpH|vTgUf~;G40$i#6OmjV03rj%DWVnKl^0sk?ve4ZW4?bLZ}C z*+}#!{f&+8ULE5=&H|NwF?IJ*Q_B%B^Vn{8@AtYBl}8e!CAa$rsf%lhTbXEgM6~)D zZ1>yeeJX0j?j!4!>s_EgGPAicL;tZbL-R6^O9-UQ<>QwFFTi(kgtJ~L>1u} z-oU}2_9Ngy4v`=pg#5~xrz0tvoZ+n4!0wg%K@MS@A5;duh{Be$&J-CjM0j|}60oYZ zuIBcyLZya>!|HLR4Jm|Wk_xZ=vQa;UivKXS^$w^3+%A&pC;X^E)U_uJ+^cZf6RKt} zr8uGZyxfzRiB-saPFYi z+y_mhQMm9SaY;=dJf&iP1qIuaTsa7Zb^!;3MPP?>2f|2t;*1PJO+fILGU2aMTF{4*Tw)CnOo{Lw0`Tm>x;Gu%u|hgx=<$TQ-FG0&-^LxP8_c}hN> z8Bblw9}G&WONPQO5@ZNIXFvE_XB?7>QTPlCtQGAM#t~dG?<)xbQ6_=>cNg&gaI_<3 zi~Qr3l9oZd4Z(s$Vj!5`Xs7S%N@!$$&xqB-@87WZ&(#Y!a7*y7fw{%%!AO*hD0zEk z5^a^pdJ?K-Q7j9f*1Fzy-_P0Gz1+mkdfKv301}HaZ$>T(O^9mPdkSCXi)0W0Pr*D;ijAA*L;s6-K zE#bce(}}ECLiIRl3w%J22eQo(;~Gz&wY5zyr%bvb@W8b-(7v@h%C|NJDr#t>cuL~m zfN_d$6o=q4kfXr?3f3Hgy?IMy?YXwbvDA_5MBAxSfY2UnY)jcPGu^Ga(=YGaV62xF zqn4_u-`qy`bXKosmRNHwI)WuyQ=5pm(AWmp#Eu+Uya49P9bB^jU92B~t?Ju_?|;SG z=UdnUEATF#+)X`@3%p$?72c-U{;?}1B`qw719y1x{&8E2o^Mt(sd#iuR`dz5)bnie z?tFozOJYUk=ykz3Cw7l*{4D!oF&y%ewg+X3!&xNXDjKsnPruI)v3}u>`P?$_lW6Bc z82iugz{?~ZgTO%u@zT2{LrL<|0)#^mq+TgkY!4 zR7I(R&j9K3f8ui)w=O8QW!A(tAunomg=(`gd4y^FIeO35= z#-O746-@<4BVa45hu`QzN($`xnUpYIU`-8YjJ8vkz;>hAob*8PlYRAn@U~Nu!d9 zW7ujwgs{$zN2`hE9)gzIG#U%^qQ`t_QIGT>tZ?$3c|t$)!HUsKP}i>0ty9K;Mk8UBAmpTBvu8zafLL&3xT15pxy}rG-X)rszL)?r`556bK@_gY zkt5fB;w^)-11P%T@qZsjOqw~FgedmW1Z(MYf#Py=&Dvo2&!a!>duXf z?H31Rg`X5p>W_9OP$aiGvjc(Mr{8bTW|%(u?(Se?MOK{m`imqH9>{56$2!m!htYNV zd~imF%^*00<{f$oEIArjuGx#_c`YbaY^cRpK*tr%zL2*E0X3@4=idZPMtN%sl^lLO z4lk%w2t24We%2jWpDysJ-`yywJ5m`)ENeGqz?)#o4LcC`Ao;7leAGC@@s zi7qS)^_u(~WEDtK@3H~nD~N=B!?D6WB7_3OAfnhpFdP13)k6MpC2MmJJAYq5jK4hZ zYps3|kl98SAfBs^Gwq8SvS$g>aQ%?eV9~c=PZ_$A8Gd{sTN^GTlH&Gg%Lul37AwOwL;Un(+nf* z)T{p(QDZ{8+rfO`F#`7~-q7;xDmuVqYnWx6Z*$BD#o!T%G9#`7H?U%6M8QEyoEfnz ze>#=3sZv8mID%#blBVuc&4_vy%N&i^@_zya5Yhvs}fBVHQ$WPXh>3A_-nU?WoOL{iI$hOZGTR}oi!jVP-w(-JnK zNV8F!(vs4_Mx2dNGcIg|{RSeS$3}$kz79#5@Pjy%NLAx-9V&aO_QSw*9h!r{Oc+&K zt<0}1@;@sONy$3$i{lID@DEjo%4cDV6-*x=8mD<9z;sBnA}gr{z<}&VG0d@1R z*K^3U9tGwABA^)=05Eqvu5oBx=>PyH2RHPCh=$l~mhJe`7arK02B{$Tl zdo$~ETjsP9sDyNHsKYheoC&6NoHTS(bl%j4baKh0stpg+nIH-9@~;5B+VJ2RL{f$z zr_H^b2u6tLH{Fo5^LcbfDTSd6k{*+~X>5K>71IrA{~%1tYs1sUDK?ayLL2(Po;Add z;~5uMq*z%KVgoe*BLs&;VD+FTvp3S#2{ZSK0=z3a3B<;lC|k>YL#TtKa!+_sg(-vZ8{+CodbS9@k!J&mzaEHE zl6Vw#YE}W>8MP8N;xO1VULzv758PERYVWY&4nyM5!7@2jiBowUnPdTQC`lWU+zpRD zC9ZO3Q3*>eF~iM=9J1JfAr*0@DzF0v@o27wVZnyJXFkQ^pijU!B_yPNM|t%yD_Ax_jbU=|gb?!UQmne{h3 zk$r2FX(RzlmnyNd^!P*Him{&{*`zuv! z#P_s>T7uo<7-dd$lBfwgB}Sk!w15_dZb&6jE|FmiC4v2d7Xw+~fB}4ihWah+;==e` zGLe{i!rBAV;}v>>BrUCmhiKhDHHIrhuYzT0WA}9^q9$+;S7J7O+ehUojp4NnTabbj z-Np(iv6JI9qfvh){F5o-mV(A`WsVA^;?fH3Oez)owgu@NeS3$NIhnukYx4}(T+$m_)-W%m9R}JLG#Gk zExd!FNy2oJ?O?c6J3WVCRj0TrV0;pWNDhwI!B)LetuY8-xLHzaEm$NV>Mx|F>(eh} z2T1V?F@8v00fCSPze+%e>DMnz%s}rwB=&MJOyF_!WGhw(Iv9yZSt1zv3PHO@%EgPt z$3gD<{B-?^3J9T;TkYDYLE2Vkj!Vk8FbJla7AjV7j^$lGh_Z4LLLAlDY%z-=rFbAL zIW1?R=X2VwFTXG!W^@OY!w~o_JWN5<{LIAn8>G_3aK*fk8#DFAti)3n`jfS= zVUXGLgnf?^!l7tMT?n%e{x^GYIOK)*S(O##g{S{(qi8RrBq7>`f*X%BX)n@S#j%Fi zyf8~-*2S9_-a5Re6}lIp5Z4+s(L%?a%X|(WD|STj_fRxS4*k6Ja)EFDs(Q{>^!u#O zpyPS#0of_a$bTt+II?<7Y6VUy#qz?@-U{gw>$zni8E}2aiyH5;8h7M@@}~-~P@;LW z37xwVwy_p+;pHf9#Kxlj!B~Y7!)afqV}~a`RlJURPUPH--RuD~&8vBf*w6DoQYz!M zF86Mp1Hp#`aiOa^5|$<|ggArP=-vkje?t^!gZIhg;9=T*`O&PBK7;z3GXJ}c7>DR9 zKfa1!5;Dl8Nwi0#xIGHw_tGv~nDdPbi$iZ*tHz{Vm5JAC1drgfg|0aGGZJl~wIV4^ zG_;U5gg63P2(TW(=yj_7<2*v|Y#~cO-8}_!2qHLjbq_5p6`~oMx(|@SRG?kf98}~8 z!mIi1$g+juOKfR^!j$*VBSu?-x3}8Dpd5q9XbXXBBxKsc!2Ax#<8s9B6W+3|Z42rA zyLJP}a$CsoaW9;cXi~K&9_J}NA#PhCx3GIA=dd9)IAE|fZpnbHCNL@vNlkhHxHTBc z^3UWdYW(Ng(%sP5Xguhj8KK&>U@*s}pS<9cDQ}dnvS41yZMZBE5i5BGSEW>yRZwG~ zPIQd$OR+HqtvsSfu?##sW`ZC1+oTc%g541kT%b+DMNk=JM*E8(T#|wypi`9ED_g4c zBCoFo&DDWm$r(Uhn*~O44b&1s@v}Jt-~1640~@nNrm4B+(`6au z{O=N24C^0&SVhbDD}YrZ+IQ}%qS5~xu&^ROH>*kp-r=k2mir3>7VFr9o2nigbh zVb&XsIXyLkpEqqpe#EP3R-?MWnPw9koPTq8Y=ld*+DfEoa1>M}JQPt8rP=lPkV@*W zxxojb3;BavT|bf1nbyuEJql^+zO9L2M<8{QczvwJC5BlaYYlDi&YaXvZ*eQc4dVy(WgV(( z{YzhD|1|D(^g-Qw3}dVcr3# z4HwP$0DF>;4b^K;SN+=)pd37&&O%YBch}x6=mjmZKc;}PRoZjKV}^%lY2*^zCPYW9 zl0GqdRH{T{d$B3N!O%)x4=YiU#K_lBC~xpiAFiiSs!YbolP7bszIj)yqN=w#Z2#C2 zCJBc0jU}VW%LV;<)DZQM_&O!>onF*pF6ESEdgQTAFGflavoA74-yJhKks>m$URVSX zwygW@#G*&uAbYK5@>MlyG|+SPv}p8sxY{$^W;{>&ospW>dCUVm80z)d6Uq({Jq3Xa zYhGH((L$78>S7V|dU}@^EH-*l|DocT<#lg>jR_j1BelZ&-iKfLYViH+c(qZUXp-_e zisIzyQUe&hsd+8>D&&bIuO6bDUVR+S8V(U2+{7jiR7K#(0EX2OW|diJjM=L%SJJmgtT5r1L*7T@K}gUO>=YfBws%JIjjBm&5H@ zPDJwcKJ9TRJzl+QABSo0Kd-_7bLfykGb;Kxbb{f5nS+~)SQ;OP>$O*aD51-V zhqtbWLxHGzQ2PIJ`Xt}k7Q(<%!w*dXi6a6!*GO2}^M$5MZ{(8E09B_Inr7Y%(h;eviF_5zyTze2Q#_(jt})2{wu8>l{(K*%THMAM8~ z2BPWo)iwD-1=?qfp{YF(c4x#)^Q1BGV@ht}bR1eH&OZ~~G^W;!Dda*?$$Z^+#h6Cl z`W41>6rJe6t?;7AYE8T_ra_qeMw~n|rnj46i!O<9(ZO`Vm>OM>5{A72Zy}GyxrtRsBDZwH26tjKYZ&Q3Mc-`g# zSG2ax$*K2|ZK5juZEYq8{b6cTRog8}GpO-?g68rGnsL^a0TBGM=7=da83K5bZyk^j8~d%t%j7)Wptz7zdnugUR8gt>nFw#3XCQWXR61igbhER#qF-UqRV1$L;mNljfkB9mVgnG)i z!zOCKnT8qYxnKlhzcn5$!Y{Q9)VvGbL_YDj|BX(?n)rlJFQ^sM01R;zkw(3@qUxQA zBX9sEB?1t*WL&t2?GXE<5jb!NN8nF}lfC6ZUm!O&Ph@_PXY{{m{cZ6Rea3DH5bzUG zBQ;4BWRPrXns#DYFnf?ePVO*rTCeT4}ENrV`eK>z3jwpjq6pQ zu@hOF)-y3BT_TUZqD{>mT;VQNFhn1j52tZhOi_Dllp&UviFqlbbchSIOrrnL2dfEn1(;%_Zr zk4%+`@dHGSLkj^lW=QDKh4On*H|>#d6YC@wdY<>;FJUTUyfEETCtQUHSRt0@Qv}G6 zzsME|y&-89u6NfTvb<`jk@9;6ooYLAvR$G6iB1lpB${4ed=4N*2XUd_g;#JvRyEAVj-ak=JTn5_T{rxny<6jNl#AB1NMuN z^_#W7h{#ow4PTcG#z};Ti`<#k=e3PCGsrfAZ9!v67pnzHyw*d*q@ ziMcNN3rr3l6b>b^_F+dPTHwxo8hIL=R40;@8U`{%;=;U?ARn_tdmr7Tu$CUKRPy$A z9C=70=jgP9^Wg9XX*_QmA7+t5X(UF1UzTCcHk@b}=ShgzE^1-{i_}6!1P*G&oA%>G z%AgcKCkBElE*(&bJcGNSM$8RcJ{%_MWJgB)uHcOcg6)^i2!__CePN`ec>#f) z6MUlBu#6cf#U?vi_=s$9;oN_iZ@v?7h!tI>FxaAOSx6z{WE}~?5xb(C!Jv$oD%>NO zO5?2goRV!Pba?=!mNl}c&M&z50vB_caN>Id z_#Hu8rFLCr*VElTk7b++z*%d5(DZBU*&?oAMfb)?ppI7$Eu++X{xeRfNx=E2(?nl3 z%``ilJX~pz$KjDi!=jX<(a6$!!W7LB!HpUk8@)>o{zFUcCo~i#1r8pBKnEOvE2yLc z0NfE}71=`*cY=i^rIaZp`4FfBgX02a2M7mG2NQnIjxxfJQ25iH1gmI1q4pfQry&W& z>*Mo<9McMsCu+eaC&sRE`VA#arG)RHOef`5;_#*Ph@_C=clJt;7xSg>azzhGpD0H2 zV}6vSnIGk5eq$^BmW+l>KcSp2qRm?<(IGF?7J0}|bfOW|`b3B2+CA+~EZKHv8$pZN z*>-15Y^Mzm?ZeV)aZKwNL(Ts-?A;9jdQyn8dNHDbMhfGh$yzE#>~d`D#R` zOijMAENWtr(^~U5hC($FuJ(#Ksob^T7eb#Uq+*lDC;g;fzXvBWt{*8xK7Lgjt|GNb zjq-`nX2LN;evn)R8MJULEpJG;II-*?%MNn%`LRs>nGd&g&~Vk0NhEy`dk@=JG3Yzm z%aEeIhcsuh5A%JPFBi}N1u#GW2vC552Q1(K1egdSx)=(J40S%y#;cW)N0>utm4tXr z*Vb4M437eKe7|fH1@aP>!GpuS!e7l^bxp?h)xk_OSOTh|kmXCTcOgeml+h}J$1g&> zOBU#$F>hp82UP9I)XI*KmtZ@*g`7tmDoCgGI#e06ha$6S$Oi417QG%)P5oiVQj2`w zxD^U}JvEJzpsC<3G$pK(FbB=h4%*t#lqn~20H{z#f~^*xnw&Pom9ipYG1$<8W+hbP zi;ILtD-ybgBvc+hO!lEEk1j-=hh#Q9ddoWpt)A_()l5DN0pbFaRDv;lBl>Pn`nJ9)*NG zs8>a#;EX;q{m^6@5v(bn6vi-are@r5l8c5olc`xWJkgx|iX{^bO{V-3jZ7Ot#8QSN zG>gd)2}2vg8KRA1Mimt^p@L$FM#?h8#}JXwjDr}0iSNepSX4w+CzdFZ#b0gZ7Agq_Rpm84MVy~tE69}z5nc0>xWrSHGFdJO9+E%m zuD6r&tRDL5ZH4LF>Omv4d2uSg)Z;Uqnx^=m8ng1LsPg9`rTIyW$~xlBV=iywQ++mk z!%J!%na=Bz9Tz><@Mg!eq8T$&)zzSORpIKq4*Q+Q?9<$NT|deGiZ2CvY?rc{-Pib< zRzzvesAW%L+EXeQF*Qy>dW{-!zcLk*mpgW>XKbeZp1mmJ33ZNG7Lt#zzcQZ6M47J` z_lP;Cch(5y71^935q)KIljzQSp_Mn5-w_hzBtjzIcVa|F24!Nl##<#h3GW~gMwP^8 z#n-Qvm#BoE2E|9_HoTg2>Y~<9coFYMBfG~mvuUE^rjFBcoPvu*x>a35=2}sdcy5m; z$el;Xu1GeX@Q0P%(y_~kj|@3&luU}*%$)bkab_AZ!5LMBNIa@_k;Q~$I3IEavfFR? z&qT@e1>38yO=O@}Zlxqo*Pw$Z+ek4Cn z9ijLwCwpotR8c~EL#C*Nq9IuF8j6Wwm9TEiWIHbh?NSwY?fM(;=r~f+iVy;1ZDpUN4bGZ0!7-kf*3Z&L1*WmZ4N+p3gUXM$A#(LxULAHFO5{-@2Jfl*c(S48BN>pd(z1RxL>=OMD zN%bgB(~)?o6Yq44%7il}M>L)32u%o$OCiGQ=W&vL(u&u#!|gKq&?EIy=TP~&%)~#9 z5lz?d$~(#_^K{ZD)8~}Cg3%9g{c47+EmAe1$SD5pdX>f4u;aN(M>u}#Cb$z@=g@1>bVt;Z$hLjbj>KUzNK}nSwc^RdgGy8P6VwpbgjC{H zzlHUovdT4!7nLlpc820IjWg=KNXrzjlw^qFj81H*;+uZbis|QirQ}mehNC)ORH2&M zSqODi%S?$0TPFUg#D%)3%Bn@n%($tim8*m!+e13HJMG*uM~!kj8@iNlhn$)XT^8kZ zvi7ny``M9_X+&AdXdUt*zDBa~$5)iEs6<`q$3I#tDW!jv#^dZnd0OxLq(e+zLd30U zA6E9Zqj-fQZ7p`R?4_l$yVI2_8h3JK+{xXiodmfSlGq*{H#^%FPticAjLtkMM9kAk zE-Id5Y{-+`%xrj`5=C2fK8hSEDZMXPM|E1y?jpJXWsp{`Rr0^2u3cIYAWY6XJCMV;Fo*~Y7%EjXpryj=~X&jql ziDQnAjz6@+WsDLYpW|Gup2MQ_BXr*(gQs!(4oNFbU75KbVckWH!`YBrW0`&ccQq9TNih6Ybe~H=}=6m zQZ=aY&pTO21aV^Ir&l&HrKvZKYQ?3-+n{nEmn?T;+J|M4RHK>l(H5O2qVyt+@MQoO z0MPp?$M0Vjk$+F6Q1~t#{Ltgd`!D&!FGuD^bLY_Fj6dAcHDk;XpF{na)U!BsDfht+ zWkEvANT1D&&m5NGn_?;bHbcsZ6J&ARRD>I^a zOhbxqQHp2rMHZv4l4LyvIcl|APvX{-NV2RaaXpC~Vqe1`r|)n$zx{?1p3!3Z3KR$LPEumpLDTB_JR+}KX(LtHJADIKS};_h{|+W0scir6?l zE8BQU2sLVoN*pID#iP9l#Vrd(V?NiN*Q9o)YKqU)kC&9T-zC{fDOpR7gfVgn@xt3f zI{l`i;-P&ma{Hv)C%V{9Y4!BjhgzaM_O&CFh;OS}U$vd^TqZRq~y2N>$q>Ptp#;5uzqQ;|IuHsbc?xgWn=}*_6u`Z5NU7%~bVm9P^DVE`c*Uiq+TbNz5r7Rf(fc=$SV!SRL2#$P77zarR@{M~a*Y zWzGrF_lb!8`OH?56)uaHgw(8NCV6W{QZovzmYPD;EO*UbiS-aQd!v#ps zj-M}wnlAO9&{mbhSQTa@iU{R-Q$n>$5qveq6{f38k^?a)Y$50hm8m>bEHVrh28+~U zODRmP=8F~Grr=_n!(K{Y(Kccr5sRS|hGZ>P)dDL@$`7Z~JVJyh3N5NCY9Q3Gq6(+6 zBNG%vNEN7Nq_ql%b{f%H6mm3PbV6k6D|Lzm(kBZvGZQ=$Jfs9q@Gwxwt4A2q<3U^u zV(}NmeW$MOUK@qHzOfl{(}aU0JQOw2>#2mC91rppdG!*9ylDJ4)ce6j&nS87$WEPd zw2_%;8pZxNtC_vx< z&4dn3P?+%qg_#L64l@g!N(?n9YQYuaZ%L0$y`OU&MS`|&D;hmq)0&8Et92aXxPd;Q zr*CaAHx&`{M{OP1%Ux<4OUS3s8XL za154LGZD3y>6&2f!65Bwh7o}_mOizJ@RxiNE0J`gnleVU5{gR6q_<+ja7(8N65-P5 z(v==HmrjYf^hvBWeTz*VA{O-e3{4Y0HARw+!e>tV1b_aAbV2S8J*R`*6=jIn9y0?4 z2sj`(B={7X2!i;F(UCX|M=sbea#_ChTG-K{C>MaODZ_NOeUx zyz3Y>k;y{Ls$OLhu{kp+o=Y2=Y8DuFtI z8puGN2Reu_5@v{D#0R24WqI!i^-$-yK|~HiiA1)@80DgN=8|&Mmr1IO>vqqI5f@c# zAE!k>#G2D1Mo`xj(S)l^H)B!U(-rxpn3}E=Ee37kqtaz&q!lyqPe+EtbCAS2Cz%mP z30ot?$1k0z$4Oe`*+{n!XS(!4BePEJW&`OZC!Cs{*V@}wLp<{yF(NWk#!Az-(}LEL zXx(Z3x;bMrdZl+a<}DUi`YNMRw0;>M>&iVk3(L&-nvO+XgP-;9-dc3xGU)@dULzXv zPHj1yTag%T)RFieEJfpcu$=$32TR(gDvW4N-Dpp);;5Z{Ev+o36+2hS#8&pXwN*&J z-?x-fPGzPurT9!=iqDjW9g&oFZvY!_lJV z!Y(I%nI7vPyT)SWbbngNp_=4;Rg)A8Y0gBf8RgLYC<9zcjx>=Itr7O*iY2189=ab& zWq4YHxCW8dbGWu<4PwwL>`OBXzwE3o3D%! zO0aA+hA+w}=wt;aIy#H!B3Z>LBGE)SUnfy#7{gzNah8j6rM1@0)_U`J9gkY?(sJaT zE3K>>lyxk+I5;E+y#}#rUPU>0z8xz;r1^8Ilm>-F5*M9Cv>K0^dUr0?5QjvhL}cU_ zk>ZRu)-#Sc94Wg-+NC87wJIJFs;u=@W<15yZscMl`#nid=2S_E3g4y3T9z+2rwQ&B z&ofbGh$vn(e~1q8(5>buS+03;V>nFNs?rQ0oCXS~yBQQ|1cQt&k^wIipDv~j3A-Ukyfi#(nuPyw`Vk|1v?hYXqwYf=yQ(ZiZ5{}qb)5{ z%v36+l?yh49I26A>(%PC(@x`rEt;@IJ1G%mM!Pe}iGH+hETi#{R({b(gpnM@nDvl7{@G-#(OSK3Glm*wf6E*X_l%5qL3TWCTzSp3Swh?S)s%IbAW z%4@4FuOTa2!*M2h6NzK7NW}Hye#D_ACTO-X*Aa^>3gwhDDjdqmI=BkuWJFEm3^~zq zsa!Nj;V_066`FBtwz=7rL{x9uLq|y*6UiJzMfY_oi}Q45xtXOGZaqJSq=IOMrRib5 zD1E$TcHwE2gCpZcrBtm&l#yHhTZ&4-4k=Y5Ar?IoBGo)qYEh;*7iCJyl@6!lg3}6* z7JM=27lT5=*+NJH$r>~0vg~nc=%|tu^I)=@x+W`9GMAM4Lk_1LrGp%VL?NRn-lV@Z z|A@)5@{{|aQ)wb~SQ2q*jW6yxFTXYRRn8=;B80we^wuCJHf*ruLFWO6ZCVKZ%e}5b1U7#vWrO-FMw;33~O# z|7LwTTe~nB^?d4J&AFW)MBl=cd7 za<2A8FeY1U+?x7$=q@KU*(>e7M>PbZBe;uD}^Ae&EvQCJ}P&iLf99VrC zLVCnD`n;7>6+Fikv!D^x#{EZR%_c0gs*+Vlb*gCRSjc-Uc~+YmF*Z?eBHO1bQ=P|2 zS=UB3XJzB6vYJ#Qi&ih$Y{;DAw<)=2orzQog=9#iVis#w5_GAw7GZAO+H3Xi6K`sC z&QOeLGm=9@T>OVlF) z|73(G?$R0AFm$uM@~{Q$0F2K7yYbeCBb5)f@F{JK9^2{=E0dvK_e1Y{NbEO zLJX5)Gce#rx#1S z^1KFlB8zHmQbxWa$k_Nr91}zSbtZxA>oC^I8&tAz?Vt@C<1)BL0k&MI1QJQrlUO>E z005H`2w-3k27>|NprB}Qavv0c4e)v>8j0axC<7Bo5JIH@03rwgAOipZ0Kk1q#Bcxz z$@H%*xgfKXiLKE8*i`W?g|RO){qD{Ly%z{+0Ier9)9=*I*0SXpVm3~jQRGf*wnCrj zuUr}t6eTo0>$>MiGyR`cEkjg#ZOiIRKh};(0LFw0^1*?d={L>+9rd0oA(ehlBN3wS zatLxr|9=GJ9#BOG=(qMJqR&3aq6Jrsen6ty^Te@D)9M2X$u22@(SL0_C=(ZBG{u86 zja|lwqDa?;&y0TOjE(J=Bu)v@pLE`-y}`#hbm%7(m&b;Q2)l549QqZ}naU%jM`ced z&qKfJaYsB!mu*ZlQ?ijRR9jP)yF3P|lkQ^Ave}9TJoJZ+wCC>_5l;~PyFX{w)anfJ z2>tu0Ul2#j?J`LJ{A5;?%v2E5hcn6%L9^!v661}=Uo~z`~qBISXCiBN_cCrw>ifkT%`87(nHX99;ak}L% z)GVTc5_?i9+La$+F-9ZPAsQbo<-gMX7B0e596;japUVAmXqa)E{L$tRl;EpF66xRM zmlvKMbyvB`A9?uQjXiSmgLNj##A?>Bc%+F<{=(ylG`&Iuoczi-2NLlS$);v>9_z1Y z+F9s1`HOq)RlN$sIQe@4#N&~i{0{Vq;dFpXFI=imu3hltmpH*h0m~JzU1RNv+LJ#W zq0CQg`{I+oQXOrxp9^k~vESCd;EDT!=dQ@fKwL-A>reh-^mJV+YuF6?3#%u_$^ty}hy`EJuDf;|_ot`7Is5sn^J_ z90;#L2}!V#UjWh};Z;-FJCL6|TsZQFQgOGQnzY2Fad6}hT&$0{Ix_e{}|VuUlJmPka7aiIXN5;hmsk{ zfBJlJY&nwuk$=%bhm9*l*8J!;fhX6L8Ol)h+$>$008Ek}dGXXDC#g6hsJ1LSk{>cI zMUi1)j7Rc^+8FnCh4gT5@ko9VAk)diAx28_8yOyt_*0T!J2dIYAhXjtSN|)?ZUvJ3 zf#s!7CVIE$4_Zk9ll+38R@?=95HwCQ_)*-m z9_NYS!weQDyC(UWn1nQh7qPk|e^ZRttm?wT=(5;E{x2TEW_0cmmI$R+24O>=6$J8x zVnrKv_o5=kUJV}u@++)WP-(rxo_G8c6N6@{BEXHGLtxCy&XB_^m+_NI8kS*@8I~}E zi~lA!S-{@;7GG5Sm;SuyO3Itf?^lZ<`CWb=MBzDD2LR*g z`$Dg@B8~Uj5-H0m@cj`+Ni>0};Vfyd_eq!8QMMjQ=Y5WUl|&!E6||w^eTQt;fP2Jv z_qmn0Hxo%-<_YHb)90x2T}z(gJHL`;o=rM4g766SBX+uhZg{(}Kg;Pucp+ zk0DHnVh{TYy>T7#xHgf?U>{20v4z-HZHW8*`k!sC*+!fWi>TY2M0$N$6=7>bo)oZo zU4J=B4>!Cp%jhR{{q-~?v*yrTBedcAjKs$|UwW;ungLs1I>pr(=QSu%;#uDyuA%Ni zUr!2|v3?53_zML^Qn^P=2^1xN-_jIUpH@GLAM#m!Hkx1L12)!8RH^C%J8&*Im9>!Q zE(z859tZf3JPpDFOzTlUNXU9{riP%?prL;FU^~et_UgM&e>mi|P9K(}EHhKFp`o`; z|CsWi(Em9@L1#Xp5TlAaK2W+6S;|GLO(#ImFyp!}JVe6g( zJba701k#@iyydq_sNU!oG+i8vclIKGykm&s_NT5I5`OdQMb2?RO0%av0cj6(qbiM;f zq6ptWeC7NtIB5!}DkUk6b`=R1oKN^VgdQZ|3&D-V&6h&?|4EeBYyO2@W_nZ{FT+gp z+lvU~RcN7|`FgS27OWB?gxocU{LPCBxiX~z?2bs{~q}R*>?1n4M)HXGj?Au%cqYI ztH)gKkMeXxA78~aQ(=wwW4w=FfI-6gKs6cOnIC_M#A7|1pdNnww*47Vg!v+IJ^c9i zLdJ`lgTurhdHKQ>>cxW;EabWK<9jO?(&9f>CB6oO^W)FV&MSw}VcbXU;}eoevHat$ zmmj}bcJ~-_)TPlI84D}dh`YS&;m03-8yrk{cu@DY%~UMj$b3~$44{_$r#;qZqRf3cpgCvD+2!X4r~*@_j}+Mm z@f_HfJKPLEe$Joll4Y`&lh!z1h3b-0ALhsZ2R(-Ray&`92=U|BKk?3_C1_oEetdLd z9tg1ox&f8684YS5zbm*|3gQGlS=j$HjLwxie)dg~z|j@*{kw~tj-P8rax2ES5CSc5 z{4&{dfnE^U&IE9;@vF*_kEbWv-p=^rd_i<5EQ@^eVtmO-H|Z^iPBV=AalH7;QGyu@ zgl-8M&f?3i9Zb+I!N{8`K9sh#Efn9aH6}kY%GV4cCVo&j$|yc1$B+1YLCPwO*k!l z2Z=An2{lod0cOOhshX5g_~Iq>(xs{@Cz0?~UN>@4p;kZm(eEiqo0%;;MX+wrIPCS& z8vKr~t0xUU7I;-gt*5oHdb++XT(ybG8J-H?N*w!Ji^t=WQ!=&7NRKA&hZ4l`12tGRNjU|s}p=s5^NwL zDQ96Ko;~!7f**8EW0pz5mw#W1 z!$*mDQt*3>poi+EV+uY(5Dn3J{n8)Y3K_HXGg3_f(tv!bbXC3~J}LM&p_u8+Doa#9 z+L`^jn^mbF1};6PuYNGf!Aq&bNvi^Rt>DMj>W>gYCvzxB>A!^HuGAE}@<1WMq21%EoGOP^rZiDbd& zaD|eQu`KvTG*`wUqW7yo=hIv&;ub7JTQS3h`P!^|0W3yMf#Qiwj;BeB;K1 zDdq(`Jqx~NAWF|zs^HVBa4?PG2ER?~Uz_=qYz&e{s7PRa$n2#Is)8RW(*{&#OCIJG zd=qFTG6yB@5`sz;Dq_Jmfl&mdOOQJYeks+N#Wi>HZ@q&5GYY~}f0X30VN1syYT={@%E0deAkj|%*;E|6)LqKM!T35loGzjZn9-?PpwGYz_x z?xp`u|9&{68#^kvFVeq4Vr1xug){e+74`2~?Me=#QlZheNB>?rY>gfR`oWO<_o^*w zb8cCE@9C_x0s_0Voa`z5@01glc?;p9_wNm4NHesJq5yw_q)t<#fph-*aSOOQJ5yqw zjEX#J-!GF2uD63%8A!^>s9{}B`S0^sc&^VW>8^MxbVOx1xwWwa;=i${5lwscOO5HJ zb-g8<;-Vx*BZ=v(R5^d?V*~MZ8j{%TDzpXUI@kmG@4+G+$lfQpX!QB-Ly37Kg@x%` zDw{KbM>jl!ielbXRO$ZvD}EaBnd(4%7gF{z7%g*Me0b;jegUK?RerA;+xsnir2J_Y zO*}^=C;<2>iT%?&?1YRKvGwm(=>YuLRpZe(40S1#3Ag+uB3j&>o}}iuWGHUV1Viv65)wZkfqO+Bpu6wO zL-MAv|M&mH<#Z8(1}Mw|m|0GydQ`x#X$miSsD!5PAn2l*fdL%Zj}mH>XMUpJ~1v-b!D zzt@{j9SxU62R}xrL=WI=(k{}tHWE32kI1up(@PKcXhGrK)n6(|N+rM$_8A;XAJlTR zs0al;6Ifta643xYWq_SABVs#!X6!8DV<#@D-TPG&!3Sk+Hvc|0pY#<0u|>e&2mG81 zY-B5tC1v(&xe)#y$#qA=QDkL+zXx|o1PvSbqx5c;0UtmEeHTa+oKc`D!x4z*d%%-J zzwZHG=jlV9S>IP+6+3%{DyZiBwn47SpljO|(uwaAE6-!C`$r$EctwY7vy;bLc}v_v zSbu0rH!(tk*Mpu&hZ%&!_qE9FHXAa5g93tHI2=9TaCyV}p!j~5_FyEwkD-dtC5!Jv z>I{wRH}u?`--EhIz={NIl3Kzkks9CYWi3LK1jhGHrG>VXU4|G1Bx^dd?CM@4J;Id=} z(9xOqFf$y8Pt+TedGCr1P}Gr3wZug^;=Sa~ekG}iV+}r-9(%wx)*WF7Ryj`%3=+|{L zV!J2vg#Sz^{#Il6u~!$v<17znoTPQX>QJ3Tz8Q6|5H7PLrF3sz6;xbLs022tkAv>p z@-w*}YRCzkd+xS8-m^Rn8(zcSPb?b4TQBL;5) z`y@h-m>wifai1q4q$lo!#)7{;S-7sM!u_F8Og`xQT~-%xZ|q$7IMVBagKuAGHv!0~ z0QGJkg)&^zJaBfQjMKh5ciZnlU^Y(m-aIuOv=@>4wSPto*lbQ!Tl@cJ7~BroDGc_RlE2lSosDbb z$g$&zj->Xb09djiqmFPi$EJPv8v8ne@+e1K`tg92Dq%trb7Et@WFMha4$ofWQuxjO zm74_PRReJ?G_zMLm`P)@Ky}%>ED$eCOk>IN4>Y53(|%L-R>+PDS~Sjl7GIf(?IGVQPb*-y5Nx5KMqU-$r(Gumi2 zfOAwH6=JWF`wishbjGlUa#;ni;$V5OUmv5GmY9&F5G(g*%Kr3n^7cy=*pG_ji#uzP z$Y1Xv3O~gi|IhRFQ%Wo`cvT?l^&#*0OKe@D1czAdX9KM|Np}5}Mwj@#tv`A~Ij%3n zjJ=@v);F+}ab{|!aY4290jR`}dXMh_kDRRavp5g8(V8x+@Q2G^#pk3v_+)s9)}!pu zrPKW{)XjPl=p=IXw=X>wZ+J?w{;1jLt^XmZTRVyMigZt>{6Bzn2v~pqub%f`F!->w zFtsrqyLyi#u-ocORDj6p+vzoJK`X&q_3*BY)F1*TpLt=u?B82&6LUxSaBsk;&#+LeSd8b|u2%;EmYGyp#^p!Jz z7wUUvpb*r@iWw5kN5%BhmyIHcbH4XxbXqru^+HBv>AT67HrWrK%k+$Y526`PgRNp@ znwq}D1P4~R0Lqx@JI6VxyELm~iY&wQD0!u4$+Fr_#6A$}(mN8`lGJ54lz0^DSo#-o z5Rk|At%j)dHq@@>Fv^#Wo>}!t-+~NM%f)O-k9!a}fBt~&Hqw`gfHeAiK#eNsC!|OI zn{=}AfgXqX9(`1&0&_ByCXUY74Ty?uY4nbu#Dp3`6pTLE137b}c1=NfLhO`Y-i!lT z&*)hk(FDn_T82|51sbTXN2N^;K1UiW~N_MPyT`whY(C3XF75#jg_bB%j$ei;DtozYC*X%~u zfEN@WpwE1?Ksxz=o0PDkt(ouZadplDXTdfw&?Uv#IYG&+S&HC=7=&lpbB%d3J8L8F z<-WaDVt&64n+~Y-j0YfL9`0>pvoNp0V?luVkQ{|JQe?cB7kzXVk~g=-Xm@$VP`|!A zgHkV-*Xq|ActhkJxaBj%*`3ry;ZlYjrsWmh&xWbX@;R|ywLW44Q&_%_n-iS4nBO~H zx$=6SgYWS|&llJYE03Uvmic*f7pL-_09Oe_OE^?_Re+Ux5A$dN`N zqkNfap{!lxqc8@Q!$J9=nE6Og-Zd1}T6ngVhX$1i>%;cQIb&6r=4kRYxbeieJd%$j zMPA8k3(|6l??c8*t`~?_-i@9RIO+$9MVO8&9Eh3ax*pqdsWU#@laVIDtSF2Rh$syzCc@R`{xC zF>;yWYe%Z~Sp4!9SZ625knyzaxmdpN$78&H{`P5DksVgmR!mT~_-e|xhE|eYIu>8xYlZylbZ*5%@0s<1tisWx^j9s# zH$0g$$uYGXyx{OLes-LAVC3t=;T3Eh6Fi;ZOn9gN!a{uvw{STeK3DI~#1WSQrl8!& ztqg}(?Jy(MlA7&SY@DHKE&LUkO_AJf1cbWP%JxjyYTS(1)=6L9Wo;`rJx`| z&|FT+t<2#P)^eAQ5BkJD@^s;C_#!UjKrTEj021^CSRRKK@?LzxvxM%-g(rldqzf

    hZV&OuWH*F)VtE?0fFO%FJ7#_ zi=dYWt^r7J1pJa+c%g*ltuWn%$Eq)P8l=vYYQx3NGRGTLPreC+3{7#FBZ>D0=eae) zy1MXo6KN-$D{Ec5;ypYIp>{E$kRJ8l3BxcbvzyM<6@VlZ=^%aP zkAi_`ZQS4V6{EFyGgW~*YhnH46wQ#Ldz|LoPQEQ?$dhMW(#1Wk_c*{IwQr-@^K2sqkbn)p-A^AnE!_0%KS{tFQ> za=L7m#92YJ+G%N?!^Vy4X>6)n>sKl`iSz1_wv1j{BcH@MvTLI`S_alms!5!pclD6K z0Yi<%$mF>mLNAGfV zU3+6u41kE%MM0c=)^h;|baLIG93akK))7`RTV~$%vNrM~8ggn5yXzxEc+O{(I$f_m zt`s=8S1cxMo4ZZ*hcn(#N8(K75D3Y-Ir5SjZQVsytaUBU<^pa*=e0NhEP&CSHIgn@ zJV(yaj9(zDQSMJQqy3eQ zdN1*#kLj?2#L_AoJNO)Nq2Uk%QX_yg1|MU7ZPo zwKm)uJ&)=yUb8>XN5wfwnaUT1ke+~E%GAm1{m}0KRpOBDeR-&BV=H-goHUY0DZ2~h zkp>#-hlrII1D9q6zfJYC?SnC-8=Tms}58&LY?6K&_H6ya6})= zvUEzsldL|`$O4W^8g(v5D0CL2k<;y}WoRNhELz-V?Qka9MnDo>vO4;JG)mbzRzV5S zBtRO~tp5O=3zJ%hW5yN^)s%~MI5egJuD4BxqnGP#LCjWjG*Sfw^Tcral^jlUNJg)5 z)|=pIH@@BJdZk*{Vf|=1oFrKzEMO@)d^j2nak?a*Tj@=0A5>#cEu9@JjAg<8#v#@ ziAmEFQW^t)18Cy7_!hv5WBWBZmrCrX8d>yPYRQtGq?up`HIhEqnFMpegp)(UqH*G^ zQb$xT5K$zoa7-k+X<5C)_=z;s=z1F*!P%rcFQe)Xf-~4`pnH_*1VO|xN7ATQI37#T zmJl|+iL(|hd96mK``^Ub{=hk|I2etY)VNrj!&(#DHRQ@!jRvwQI0mEYmYlTXT#%zU zZ4ave&7tv89FCaO7_^t68_6pib{>I=EY2Pa<&Gtx)>}Nv0xiWj-=P0lhy`P0(}}08^=|DDYrDxi~seb`KF6@JYD(vCbt9 zIBiWz2fA2ixKT;g0cd$@gB~vNh37|Z_GzjF`*4@#O&x+dsV}c{J0E1Qvz47|>W2CS69fM}OfCjb} zq~Y(nA$W_xXJBxA$7cXLW_lPkhaHfDm2`OKwr)Qr*R~}UC+(bfrq;wJTsgs~c$x}<1%}v9a z@(>fuh<${F%LCX~Y_iPr)lB2f!(dE#o?*-w79l}UjWDz$dZ>6tV)S9;J+ zllF=)xrlvOufEjUhbIB_FgS_nfDrHd^s?c^>7?BejvDe~j04We^5Q#*cjl)hI2|~Z z^U6F)V#psvl;suVr~3@tGL$vIstQGSQaMHM?Y=Cjld4AO)j9_`my?vg^^(V#^5*wR zB_6XXhwv>~EhqgK=kB74#0n?byE-iOM<6v^bCcwSqemmK2_m&s-RoR)%skuBtorilQ6B1W3$F@2@$0vG0)N@`;d4C zm2?s$ozMC_1xX_InSZ9X_7TGI$Aqk?R{}^p>;X>FTR&ZJKj=OKAWIt*%)?G#-G>OE zHop%M+5L2qaRkWEt336>_H7CBWZ`O9P}WZ5hvNn9b>KCn*T7(Mi6l|Cc;xhY4Z1{xwi zCy(P{ExfTiX;w{LvfBqm-JKLQ3MKx{B7W>{((CsHL)qD-+fyeoCj7hWIaI6IbLynh zeN8D?J56Q*AMxWeOGn3O3=uz{+`f1e7o{}MfsC(94e@iRmu;7aT&{qYI*9_a=&ugQ z1@W`2eLidii)1|fY>Dq`9!1?^PBl-mJEO6~=neMc;Q6Z^>XVo-VZA15k*5 zDzTL?!=Ld*KjbgSNJ;dg@UHKV%8K>_aClG3U`czjFa16(#RL5uw^;guexN{%gBj+H z0sTx8b`Br1mrW4phiA`o8ZEA%P`cKIW&7s`!`yc_62`J6fN(yn86{FG?2x{E=`C=t zK}Pxd{M1Zp8Xe?&QoW9l`sdVO4Q4+-&l3Ppy@DG*KhN4ZBQD#Atrvga-k+bXiZHB6 zd&ZuhPgl58bu!cGds4X<=NV{0%qwOlJ?8mg1jz~Xn#uByj3Hv^W`b3nVcbQKN{JUw zU-Eq@Ww4loUQZ#jq!`1n)$&uh`?5YyYH}fYptJE}o^+^OL|3^2(&38p?r#^niI&+?O0dm`J)&kv`2QnS``%h5cEx`2=vEGU?q zQVu;&`V`9~)=@NgTWnrJ&)v!3hXeDf6IgztZVFe4!Q0Odiy6oSpgqvN|OVa0Rbfyr3dA>8Ad`tDQ}3%>qehN$C$!(C$pE$#?J}+nZunz zy9oGw0j26{0g2VluB#^vcnc_Tf{KXihfAp9Yp*^lKGzR9t1@(D2>a^?=fG>%&nEH< z|D{@z_^*{B+ZR96s&ODqe0!klr15}`9g~b|`Kwjk8G&uSxiaamA>!BvG^TgNQr_r+^cjW6g zoQ{|bI?~S-9uA5dy#?#pFo^gmQ`4qC-qKX-EF%?7%)>*qCn2sAF&54du1kE>!_ z3(EDwcdVKlVjPq{piEj{Ka+T|Z|hBe{V4N}0;q?kno#}q1BULV-nYqUOgrZpnT#_){&)v2O ziTy%iM2V%V&_NJ`r=jHC`^0&kAxz@h^s@^bkIVxNVfrCazbF0qcSl&@V?-}))6XeF zO#9X@Sekywbnf+2``dPasj-~S>!;TVc0N@RnO{E)Wh#HL8KrDo)KDq|0y=7S7nf&01OQJHn{V9q<%a6fh%K(;ajQyu0WQ9=(O z(hw89-?%&u9?hEARie(<_RF&m7KT|X@RT9ikzDgf6Hie=Y# z2UqQq#Am|t`PUD7KpNU&u$2`XN+)unpjPwr_4A|X!VIHzCBpUdqlUeg88>pc)b+zX zx(U)%G?Z$xQ-Xl*cm2ra!R{jF`l-DFH1#FyRzvB>Yy;metvEu?a{Z+GHh-cUN;~k9 z7KWDKuOGS56Ne?{!TcpQlvYrjf_iB(TtDqFp_ir)Y;*n41?<4s0@+ad)XyEwO{6+M zQrFMu?VryAMgv5YwV||>(GWn_50Ob1?!2MYP%2615=~g7ke7aD+sKUhx@sr=@N`ul zZ9egUZ3(5%&xq*aX=5ZPiRbTCi2#&LF~R=(w#vkRpVSgsAbf&rb0;)jb|I?V5m@Xo%0)c)a4YXA3$68|2~t+ zf%@5aZKErc?3a(&kL+a9{ZunO}no1U@pNF5d$@x6} zaA^?z=_jTmKU@B-Zq z+2vjK}Y?}0v)5Npo$(? zP(Mvtfc;b>EcYY(>F)lOMtSo+`y{Dk@=BBtn4v)%#~pM(;}XZc^fkv3c0cIq3mnmz z(o>?;M79XpF-i%n-n-wAa0E1#C`l6o+jV<_Q;I`rV`tLJ+fSf8&!ZOX2_>|gNR+d; z5GmRwlpd?hJo>DH!Gx0WsE*KQ1qz{`6j#Cs2_>+3WM{Y9t3O&3`WcprF2@gs!IFKMCa#6&|?Fok`vSqak=x{6(Kwr^P9neIe+yt%IR}c5ITW2 zcPNQJtkHGS8fLgWS{17wm8yvxV|7(+HHXqNL%qVPRF+jg(Td=iK{%9paqF#o`7=0_ zu9}C*p4dflC^=k+p_@GdLk3L!%*zhHg;}Rc~aHM`rh#*5K zbtC&Z+=F=CLD6GM_09&x3tRTHW_@$(Eca=&B_&F8(Kr9Vm@#Ui6akV#8Nu|Tggz|G zuSUc+`$6cMx&dj%&$7zwC(VE3HLhXQq{Zw9K&aGJTDjMQaucPXxI?w)N&+bpr9#W5 zhEJQH#iTI*YSS-Hxf(5AINv~tfe~6A3%M+bJw52u1GKZvh9?n4x^CRQ-C_NhO%xp_*C#U~`E(e6pTNld#A?_pt#DtI}IVvQH5W>P6 zXZCRkdegU1ZcDirBQ8Dip;P@WsT(UqOnz(7UI(06d{zqAt;VeKMaTUR1z9A ztxG@KB{GaD*8eU6WJZ{jLM(!Ni(U!?9<85Ni0i)25ywKXzJyt_0OxHo`Xz&&2lOw! zOu70UM0zvygNLE?Y-3Ew5PmI1q9!vGcy3o==zTIHSq&L=o$9oqZpIRMy`k-OI){mv zbT3~}rJu+gJH**LyQ1*WnaFHa4|%jqn)9J|A{^m7rjHv~;2nRKM2t#yDY?yKDk!A@ zbuG2YfWp4+uXmnT_(M^2Ntiogl?RUrJiGz{s|>jz${SOT+b?xpj%eqNsRK=m3_heJ z?Y?@bmA@3kT}7I>)ihnhKyto^pKw}+Zf6uHkjQH@c~A?9C9EN3{|YE*laY25X};WEkrIH8wTPbdh$dBQE;RE z%2d@>!Ex%9uw2x?AW>|Ke=RA3l!O$6mM|rv{kTNOw@lRC^+36aC-N4^Xj-RDwgrrv~}b#TGlXe3u!%k)eUea?+C`haWdR*5DaX!J$!QF)1=vd2;f zza9EVcE9P=X#tx?pbzVM`%R4fYykS$b7*ln-8b4gF$7*u=j|J93e(XI=|;}BW8c}N z=HV&dBvA4)-h8tWANeL(eaHDx9Wux_ttuj#+0m;2O>gq)&x5Xlw2?IXwIaLIQF>DW zb7C)qKIniqc@?LNbKy-CY}9f&=Ykk&kHAJ(60^H0u&(e0Hd?=Tonj)sQF?y|0@UylJ^ufGN*}S+`9G8|D81qVj?G_!?y+3)GJ`8gz9j zH@@i}4z=hwiEr`?R1$A=l_C`t15UW_p+?2g(`dKZf>SHv=+)$iWqJc952rzpu;8OR zaWdIuwn(`o7$;PLrg)k#fTc_bJhC#$wOn$dEFi8&kGM1vGTI|MlmJo2N8x*hC^sj# zo_U`2BYv2?8z7()Hxr%eS+AcTwsV@ zLWEQlExod2(MC_|q)rnxw^K|^7s6=E{J#0bCXq~Rf%XM+Ur z8l=I?k!yrBOuKDIn^;Ka!H1eiWTh1gDNY_l4LYJgsZOEgOyxU~j!b$H!W0Z9^$YUe zM@W%nQD-4>D5P-~CfJRTs%a*Ss!mO`U#i-a3`Y`D+cs)crIpBq_9Ikv%C&)s0B#?G zDYXtHA*o4%GpSC*z)^%5jbu!9nq-}q{ORX0Mo8VR3A{=nkdQb&L=4?D*WWxzNa_wV zStodEmmFlBPMcO}aLloP2F4A`I@MTpD8eq=E3!`Pq<`lKD)D`VL_)jaD-G#^l-48% z9Hb%f`b3ZDfk=D1PO25Ep-Y*_yQSO=38|#Umo+NVxKg6akZ3*8m+UWj- zSVIVxXdDKmPUh;+dtt#>=U=bR}|Y-inxbn6n27qcx9AHAJ) zCDTA=9{KI<!TXaYnwKzl)LHUD) z3q70clJh*V0cgqavOh#xk&;-kB)bn)YNtKm3hnO7BV}=8h?EdgbnQNG zS4nw7)LV=PLhzl*l6M`F!VN+Qmf8s+*0O*9X#p6hoeo3qLbid+iJ+&-W`|@l@89zY zX@7?#7@5km2}i-zHhpGb*A8hqF?hET8^LJJDM4DxC3bd5u>A$|k5n+x4hh!HDYPvE zz;#ew)*-n7+e|wQ0h0Ix-GMk0PhW2Nqeuh5jR?ctPj+IzB-RsXpRXoWveR5igWWQP z9m!5u-|<(58S{c6CGQ6fmFxu6UKW*geq~7LT2ni9I7Uf)@DnZQI;2}isoF2vKB=NZ z!r&}TzSH2)qY~X-mPd6+igwIc%skez-(dY#q={+oq#)Zn>Ur(EI|_04M(Yr%2T+)a zG&k^B70KzUYZbl|J3I~fzp8CkuPX{tD54~e zdh@Q5q<!T2e4|2WY630D528dc&WXHRae($vSr=~(GK9SU++ZK6iz1QgFG)r3 z>HPl_fMsfFWYi_q5?R*h5|kV{4tu@#feA|KVa~X4|E^Aszm+l^)tP{LGiycTr_&yu(38sI!j;CyYcY3UJBo~02$lqTGT7K>+T4a^4) zI7!X31o}-$?46}ls(O-;90Wxg`-xmh3?%_UDfpjbj;-RQ1%|ta66~P=sA6<_ASx3G znabszC8oic1&K*5&f(H73PlR~%)=wIykeKIeXPCS<8@J$cXFlqWd}F-wIP0YGWAT8J4?oD3Z>5f>pbURUac0pS^@T7tULk>$+8BRB_FI0K3~ zb(h^1kVA{6Y^4Umh@1502E0+8C*81>z7eRqH!I5^TdDBn5RoLb8**;{sk^z~lmT-dvNUqd+ zmMAC!g>9_~!qUW##>Ucybk~8@e2yrPF z%QSX#i4f|Db?M>Td`V0@nxOW}ABDH`QlJuwEG|qbM675~dSfHYFU{iefi7Tzr0b>@ zOoPYTR0@;H*0qYmbk}Lr5|a$ck##ZMj4KC5k`V7E_isf&rp=|N!AYil@M!3&>PNOr z_eW{ROUXfvIAu-vO10EHQ8m^LU9jiA8OfoMgh9+IrqRh0Jb%=&~?e41fHI2jru!Y79u4^D zGc_0j=6;9rhV#u5GShrGOh_G76aq4n*e(q@;xV|7kssQ7LA@!%%Rgt8G6EqiGZk?u zX5PZ}_}dFaw+ru(NDT?#ka{tunQ1f0`QM!n; zNwSK;Wg2C=%uBE&E>pZ)=L)+XQsmn@S9GgZ~#H%rBj1x+QDaAyiV?55h0HIxK{D>I2|GX(?r&j!qznI@f#>9Dezf4nS& zy|L!XTRsF&0Pw}S$CW7_m1>;!)F~7*19^v=Q8b)sxwfPZX9p-|D_|XzId(V`IG)cX zTldpmMQ|nrtY(taeFOlNE=hq|p+I#f_2gJyk`V!fQ9DWY_;I3XNK!pEu3?#87RMY> zmE(`;3l4D&i!&AEjW4G!tuEk&EsM_Bve#sY9bw;)@Kkd|siG-VuqT{iFbh!S%zs9V zgKgcs+A{u}P{3+&rayX>NQ^xgp98nzOuPa-TU-bPfL`;V3b#x6!PQ8c1P!$X=q z4Z5?*epW~x$?|(`h?e9aKumZmZ_PS0)oP~)XeJDLL=@<-j#~Y%h$z?$9oLri^$^x^ z9C$YKOQwbtN>QUUR3pVxzRt`e_NXU!-2AVcN!t0n)N`;A)rrG=xIJpD>+~sSN*|aD z#anr`1HN8yV~uf{Pg=_05)x4zdD?7?EzwL2W|K3`6E`j}>p@J;RQs*SdH5SSlO9@U zF=0e{UnTtHOdc%J=>Aj}98o6=t>kdcq)-3w6pQMrh_a&)ztB@FXXt+h6PO}O8-oj9 zH!{i9Rw`hGPxZ?RQ_RFnIG{5vfbEhsd!`I$a7@{#lNU2_<7k}=2<8?u!MLgPc*RU) z5rahR#cM20`GY9@g{#0B+-=>9nO;cUeo8~g5VN_YE&UsUTTg^2Uw=E8gw1qN=VRVL>4ZfUi1= z6sxvSrk;P{h;p)pQAw1x^M(_maKS!PsnB%TYr@gA-C1mxCW$-*VYcf{?-;ziD^O)k z9X+G4YYMq5Lu}fjIW(JWTZMsHn;c?~=G(OQf-sMaf+3|d!73TrA@$rhMWv0nCpi5| z!GTBFC_M9Y{ce;}w6kmgaa2yrgL0hWw|z)XQZ}?^92}+=flTfwsEsHpCjFAws+|}{l9IPm$aE86 zp1XV!PKKY<<#L1o3y-;}D4!VQCCNVbQK300Q2;=Kh>tm`^jXh473w4wd`gx_R?^lo zO~I$`eY0los!4TSXL?g|P0jdlOXmARST20pfk>THzWX~@iCCOApF)Fb>F$NGo z&V1@6J6-slkbKhMV?L!uet;^j!;=CDMg`owx{Krka8gm)6zockPx~<4Nma8m0V{@` zcT%Tl)7lFrEuhqnxPU=NEAzcRwK;7B^L%KoPuO7Jlfv=e0QirIfNlP)YpjE%YahmfPHa!fF?Y z0+eym@z@tcV{LhHsW5!CfklA zj8Ga108=a=kBK9<(o$=|6)JxeQ|VR7c=J+pimA|&k|OAs61*5Gb`E991yMO7QAN$& zqGl`S45HwSV|*%2g+QPTBKrorsLU@>T~i5k1Bkuh&!}yQx*Ruk`I;?XZwlb(W=roB z({)thgi97JP6bfXOXZZ-fC356DKS3M#&$Zzn3(tQ?pMJfnp;MyrSp0z$hkCa7I-_U z6}W$eBB@8t-MNy2^WSJQNrBAQJ*7Nk*o{&RVX4lWcfHUZ5(x3sf^eWNfa>Y?=EdJO z*~-Aor65fvT=Oh4Un-dk4p9nI4>L_Sq-E11j;Sp@>idT3B9}4>aC-@wLgWorYRY7% zDO-wadtzWk?-XNNdlIL5sB<;poFe^In4bI?DxT`M6p$=ZomIW1D_a=D?&3Uapk1ym=#-5yAWY^A*jTN z6mtRq9vO`xPb$Pkdo!Ro+M1wfPpY(3e0BIes1W2&s(qbhZgMD9coI3h)~KOWWkunF z<#n61@jg`!rJ~OF@{gehmYYva66U5M^-wBBm0K-i<}097it{PR>?FX@A#0=HrYvi-Z)Zs}r zWIr5~O4`ehQjO^GFWlzQ!*NJTMI>QL#XD9@mLr(9Kde)jE=71y;PjO05t84)-`GrL zo>I+=QYtw(WFH~xP87S83Q}L!^3?J;^l%Z7BI-L_UMy^dq*P5mSW~JQ*kdY{geD|* za0m&?*IOYNq;y4<3WSy^FxKv>#&GYtV zffBH|#HE@c5*R&3NQq0;0sAP>i@9}e0zdYEic~HY7kFq($KB?>>vJ3{mnv--hZF)rW! z=9s#yXcD5Q&83bqRj?v_eAwut}-mr75rWXT^Cke9;@B~-*k%MqMokm6G19fejd z011QwJMldbRt{~kqGFGoB$w(-`x2P6^ghk3xl|7i;C1fBHlIrc2POv&gXA*Gk|dW( z*;0AN4s1qVRnl0qB^dVstX~6s0YL!R2hLwC8MxiV`cr)XGTi9&E%znzNUdx z2l*wXu}dLSD5}$Wt=6Sd$Y<>>)xvW_SJQ!2z^Gk&<1N+Ppw;*RiW=$cmWmN$1JqJ| z*sC6cF;FFd!5S~Xj+W{WHpWB3Qh6Qn!5Ok)2*7(TB2iQcBRm5O(`Hr;oQ_FTMBA-fVK7oK}O@N`$I*B}FmW2q9vKKlR#@BtK_Ko(-D z{<+Esvem{`m{B0GxTzrV#4Nv??wj(5CLorI54%pguvET(|L}8HDj71#lA4$BSE^C$ z5)%B?;B%!~PIJ}SrT9>6VyTcUm4PUhin$UW?LAhV--NBiQt2?80*R&4V$Q7k^=`0K zf-haKRJ2;t#+-q#g5#XqTd@Ca0DZnzsy(TF{ife&hFs3}VQgLyaU}Gi}7*?tkLOKok zjJ9BQ>51HU6`|tQ2ItQVnMq8R@9@mxI7+RN!}6eW8dN;g#xIV;A#~ z%)3$%&)45|f3ykD;Ok1|TB|BQESf-9s_vxqpVg9;weW(fgI^t*J|)k1~Ed7hkF5wzRuEs)K?X zT&Z@m!m(0S#2wveT3e|kRFSFvNfr&I@GwQ|H=2boflR%2~DB!Dwj0-gJtIi=EiUx3;@i%$%g@+FBTjgSVWyVW!n zRX2EMbWP5D(q&Unne{Ca;8x}|rAiBDBR)DF2{p0GYbq5RDJLGBN!N=`Jry$ODX4P3 zxkg|?%_^EGE#F6$$3tlel}gkJb4oRKX(grNC?)hWs>t!xoKC8PfiHR1t`wJdhf7f4 z@_Lk?pyH3n6MbZy6?l7Ys-O7_UX*GF(8x((&NE8&^X-0!qQ{M27r&(>V^Jd?rE27a zfp!lfQ7Rkc_-H%D{rp#yYAMZH1_qwPzKFreV?ai!ZXM%%>2XiN{GwEK7llH|9Ym9( z?xjCUHCOw$W&V@=j8Z+i)PgF)4f9A*s$NCS;2Lrck+%7-7x78KwMImwDgif2#qCSo zM5&BAvZYjlBurDP>F!0)n4wag@bwzb`o*SH+#8t<8W@vgN(D>;q)A(nQt=3$=#Pvq zNY6f%MJZJ?34W>+kdx4?0fjAR*X8+wjKz~V$LXk`a&@_fN;T|qVI2dpp-*bPq*5v4 zDWslkoXFL5SNjPJ!j#G{G6i00A*CW)DQ`=urdpU}z@lJO(swVlgCSpG7#!$|SW2~c z(roUfY?Nx3GU3axiC2_rydfatXGXm^Swzs?3L|eY8yKbHWt4vo*1jLv%_tRlK!HA& z4BMz8lTz{G>lYF@6+`3ClTuY!cXUMZU-N0DR7skxphp~oeZ!~-n%E|FMoAC;uvIi{ z(nnD$UCj$wcz-Z7Ri?oZ@Y40(C>5B#C-BD@_w`UJFhXC+37UdE9E$XPhEm1PWu9o z|4;n2u|T8TX9J}Q0zwWYE*%F@D3x2`&s-(IQ*;>qUO=gw(QsA;N~MnaLrSRJ>|)J4 z%;BI_&~mFosiwTY>n4RK;7MhI59YU90w(eMv{p*(#>wlGN?TmsTdkasw;FsVcV#0X zv~(PsZbf-2^6dmMQdmzcS0655nsrYq;bYtJTq)B@we&xD1i|IA@HnY}W2)BM`zxFM zAe2No>Th>|*U@o0sk*oh5lgP7E6hoSCx6N^%Sk1|{Jw*SC_3h(qEb-3OPOe&RN~6> zp%fPb%Kw_Cz@Ajqz0SynVZ!^%^lbw`A9fY$RFEv6j*rJBL6wP9`Tks|-8jJ()_S1Y zqygA3q9AE15|aIDm8y9U;xpNks+I(Op}Z+rswdU&<1j$+Ni{LSr=%k4@}wfuuKP2b z%JR^jRD{w!Ngpf^^+|=QII|d@RGgf`)k8?VPOAHO{!QsyXLQR+btGRo;4h9ciVGQs zy!69Kr9T{B%PuR3>b!|=<1 zJgFRv{c9jd)`e#wjh_zsld98qgiF}-{#NJ}9F7+5Np%k{L-(5mN@d2~Crhn-jJr~` z3L5NS9?c{|g;KFDq_O}?#kjMw*JZy9fKm<0mjiF0E}%Im6^{Vum%+1I#m+*h+!zZB zrQ+0J4Bhp-e*if^#=jh+QY!w0A}akQ&9v(*rP2tBg-;PA=jWtUjT}?~L+7?l4Hk)k z-psuT1BofskeYn%n|XZdqM1_tyXWpC`81tKWAJE7rTzkIuz7)yH2#vf6GxVtijSL z@kPL|7x$V7S2Rv-RjR7&F0W8h+;WwQKt4_+M$M&CO_mnvmP++F-Ak<8+51mb8KDaq zvMSZ+^l=)%30JA6Y)eB#?_#V}-6ci~W?A8SP`QvRRYPAP-4Rvs49fJ8doTeo(f{Mc zy}VKh^n=`^_|b{Zl`0$Aa7AXJnRZlTo*lps_);QTFcy|Gu-=hscULN^O*VALUQ0XH zO5n^Wn#Vl2Ip^Bg5~+?@s#(c({JdEovs9}H4JeM~`=c@Mhh+OiH%7QgOeHfNr{-f4 zBBn|S##9yQh}+gltOVgCmuKxKCyl9+zpA(P)M@M>VdXWWyB9hY<-@J0o6}0X$Shy- z*1CxS{kzOk91Po_OC@VeHK(wiq57CgT`)ouIrA|U!F{SlP1(%T&*O zAIi@X!ZXTa)T&JNpB4T_{#`;v+A@_W^S_K2wSEERm8r5khS=@mC@>19VN=H=Me)Rc zGgW!|XXZ`y86Iupxr9MC943Ebsx`p4(WZLw_+^#``NkPRcLn+iEsNa?dkD>aOkUv8>{K~&Z(k7xPzxv7AY zm&v7kx~X=(io*LSNjKH2b3An2Rd}Xd5RJeHZYo&lylv{ZDsU7xRb(IAi++Xtazra0 zOgGgZS&KN%DoRu>ZmQ3dc&C72yV6Z1zv+xI>n$;Es>k~z2_ywK)wO}TwM=d*sbZg9 z8YgO^%->XCQl;Z0S+=|nKw z5Zz^cQ?;LhA;BjP9D1khGPcIIz7xHv^su_Mo>0#6O*OEisD)D@8P$SG&>~?yfm1oN zwkLbSSZf?JoXP{%K`x}`sk&awwh2ykcDvrmXt4a@;8ca6+2JRRNg|wTIxE4UjJ^Xw z;#B-X+E!-2$thYcIB(H&4^w*_r<(6l4#jZRiBma+01%_WQHg|mir!#ZZa5dG+Rk2^ z$El14;<++Hw=7QOzoKSK9&dSwr zx^XHuu+83%Xa>cMic?W`jf5A6!H; zoa*=i6_Z+5FPy4?4z&)77eEaVo%r+!FS1D%K(#raK5&(hEBl$S%OC05av7%&*YEsnp8b zZ}JvrajF=Ie6xf&m1%CN9X1mpn+lvNvl+3LaH`bcP~M+5ai5zi_c=+r(M`qX&_-ZS z&jdm@6{!eexm3IsWp`6u&Y9D@o4mQ3DyIoxxS|5w`L88%TGiiWZ zpEi}&kcbi@)~1q3HO@}<*hYeFs+~u(iMy$MKY?{Gk;)1;)n0<)%r`4j7(Bugbx|h}?>#&ERu<(YQX?dk$# zJoVwo&Z~num8VQQzG~?Nx=!^H$iPdcQ+e#&uP~lRno-uNN-xMV%)M$9Q7gM7X`QM} zPdNN!mdLq%Zl|i_!v~ItsdlQ?zx6Y+bx8Vks(aYY42o6h5-g@?>{QJ3Jc1;<2_4n# zTGGH+NZ(?o(z7A}lD0HE6>R}}dTS@zsho#L`W7p5fAh6dC9#!fWh!KrCbrD&67&)~)rq)Sc(RUT z?Nn$N+u8n+>gGCyMy1{rnszFp53O%gp;IEx z*{P_~=$WuPl|t&0nR@o%cPi4DzQI)~x5u5z+yaC&B=)~k5f^AOPIsz^p04z39Ho|&={Ls?a72GZE6*pFMmZq}w?r=k^* zJSn(m=TNm%`Lq6k(vaAWwwn`er-Hj^ZI2EAB2fsu$&BVsHA1%F>D9MWMFwhUymLL7 zZ9COg{JJ_axa3ep%ikueKlYQ+=R{?G+t3P}McGD_p@GB(>&4?x4zH z?@~T7sHAORLRmeq6DhW>nLF%9ng28P#7$HQ;XrS^KKC{a|KoR zq$&GomsK*IJg^=T^<}EIMihyHDn5uQ^jr&6$-2&ixC#ZT!V`Fhw%C~uR87p6BOM1o zRdf%g=SQmmRqTHw3nq15DWEC{DKfH#B><{C@EL(=Xm{I{aA{_EFw4pgP<0qJe#~+E z!`Wm@sO_%NkN&3;t9vb7=zH1PJXDmu|5GtEnt|4U25}?tPxasOF{Rj3 z2%Z2@CBTKz+!{*92UO{hahC$1DjL86+w=Nc5>Pd*XANy+-6)D0fhx#RR3yTQCvuhK z);*~8>e2Ji1hh00tjaiWEcgC5^d_r!Z#xTfk;|ZpZOrQsO%1Bzd;JcsK^3g{Jh)x@F*lp~{$4R~CWr=AGoj#> zCc5hyG^pBIc#v2nQR}V+lq{kOYEY#l?>%FlVcml&XOVIsOB;lTE_iWZ=Ag>ZYI-E3 zQ9tSW&m2@K8vHK$8wp%KLKSZ@;@hfFCP)ZXknt}7FEOW(5lyHnB<7cn zl0lVj5TL@_w8TMG%snFBy-0*1IHF5y3aS$S{XGQGKu|R`W;r>)q7Z$+ zpvVZL+QnZi`s_w0b zLGn$<4K9*C!ld*Ks+0v-Wvehu*ayF9T+Iemj4+PM8B~Q0Y>?QX>cV>@E@#k~P=!@< z3QL13DE8b}udaZa)`0Q|RZ2^v03~g26so4|NiwU!bY5lX6IoHH+U9DB`~eONRk!GEN3s7jVdl^dH_6GIh1gQyAw-XcLURMjt^Z_3sXT&RNW@Ibu460T4+ zODA~DEwM-Xs!*lW{5L1h%ld^Xkao<>!-N*9O!yizvQSmbmhpSKAYck&5I>iCq3R52 zxFN9((2}x3RaP%JmLOCeR<+s*CO{IZtf5%bUcD!OV8gV3P!(GuifjOLP&E)-6$T2J zi_RZ40zw!Tx0U+c{GAEY2&y!)&)SD9ISno~Vn*16b5MmuKYi)(LDdCWM>Gz$u5_gsO`ol@xuLgo#kKc}<1?wg!|4RpVDH>9(1}I~*V2%e;Pt_W1RtZ%-A}Dq&4M=)dO-`L_(1a?rnV`H7 zss`h$Mp8eR6;%CS_M?B{?MF~03l;RLW~>RQ0)Ms_xl|YjRK>7RT{qD7$NfRPn5(x1 zR6U2(NFUUIDvB@-UgU`?<(Z0G1S@io0F{Y!TcYZBI{m-zXav7hi7JXhgY`&M#j$2w zdmW;RaiR|iTu2Qv%@S1}0K9-))={Y@s*qG=-17`ArJ9bY`v2R#<6>O+WE$elgfh@2 zq#%%X_!1$SLj`X~;s73S$lML(h6{wPsQSB5zYfw{iYjLH+Ib9G2udqSI$xAURYi|$ zPb;j9syg;;%03V)qD7TrZ#Hhveu|5#O>wR}Ng{YrWdeU{*b7kf`@HCtuNIl2O6!sg z#83t)s+4Y1OMOt6$-RKL5ddoyRa$wfBtbgZ_=&N*t)faPV%oDaB#u0((&4wVxCkxe zGHNs1NtNc1%3qRls7V#UjBlB9L8G}s48_9tKB-y)LD)IkSFE&}98Risw6KT7weSIk zCsomXPp+j4D=hW8jkskx4S|3>Uha+VN!8UPNNX)pb$HSLjyY1r!`1dIjIL}wid3;> zVQknUa|dh5NY!ZY4+GDu=(%{oTyv@@sWSMtZw-7>MVmWe2KEFgO8EAYF{ui+1+}+# zL#fKtr^T36#OP2sljdPwVSAfrb=tn{C({5rizJjc)Gzwq;0BReHs&FK7I;Tl4&3jv)z@~Kp!Q$_Zy9i#N~`9=;%s#TU{0T+b59;mBE z(L25+LFt6D>Qs3@U)#_#cor+2s`o5l??U05y=7 zq|hBQZ*Ik@BIGs_iz9cN-haW5XD<$nQ+0zJnu6kAI8{b&gj3Z=GN|f2u7J$<@7aK= z4$2w6%LIzUab$t2%GfakFbx`|2%xHcSeFX=P}T611~Gu?d^AOEsEVk1kdR9%@x~Ua zN+3&HWg1rAMMa@1*HKeQbCa*@u>c7`_P^wLsOsjH*&1N7Jlm_X&(jd(liaAN&(G?V zA%iiDy+4f}S~3X54Bs`_|1$+rMxmzV?YFhf2vouVq4;?8qjhS( z?uwGqqCv}lf+zC|$*?;WOo5IFf9|MCUbs8{4e7f^Rr(2G_UjAI;8BTG6}Mas!y3he z!vqNvtuonC(V0X6Rec?%RT9hfHP0X#PgPhCD6CzGWZ_h$U^f9mT~?5sss^X(gp;Rt zIF@bOJRql5*gs{7|j%g0hOpQQv;-`stl4b zfpeo`Dd(-K;tASFRm~b-N>r7|8$PXgDL~N)lRdhZPgT;}T?(GQc6X|}WCXJ8`c!2U zsRiUzMRS%WQ~BytCGXu$g{}9lJ5|jgxk`m1B?+ur<%|bk_0VXso5KA(eTG6%Rr(N3 zRl=tP>+KE>udH5BaN9UlZ5~@LxK35jO^eGmb>NH;>}TPSHy6~Y=4BaS*-3p^R8BNf z7N$I0d#X|dHzToEwWod7r>Y^jW$wxmO3iLLRsAHK#PrA`-fD#Q*|I|u9z~5M-d>S- zxP!(R8d8<8ru`h~tv!;g2URuPkv-@R;E3#XZ~asym`2=!n5q&>L-$6nK8N$^p1j}@`UP>sPRR5hL82%;PG=Y}7QWYYGdFuxLkPO)IBQ`KzQ8!6r6eX0rw zLY)Ng@#a$%X97K*+==w;fa!V2^IN zhJ>mbKreHwx)dB$1tzr|BL(7ok6AMA@y9Os%a-BWR41PUi8 ztBhC`WkD;UD^?YhJ&i)N&=ovZwVSc4VO;bTj#jMd+f>$(=CP_oXc_K=V#TW3)4bV^ zgZ^Mu+Vq`!L0FX(NuzI}eoZE!rVnUQ8>ml7e6Xs~Q~j75a4MopT6c9rfxdWQ1%NNh_?z79MBHy;thDp%Dag>W;wD6T4k_?(NTYO@p` zajjG}+Qh{@FDqReRqN%dQqE5xLT|CbmGI7!oRnpRT0Um(00H9^f=R#lDGuUH7I6`NwbOZtk7o)GLZ4w=@ zyk{QduCqvQ+gkId&Z$_BRcCj#s!mP27@)~hUB9d;p=OZRc=JlGDs?j$5}cJvT&B={ zBV@mo^{Cvkqb}c=sj32OD66-s;*O@|C#y=|cyrZ-Ay`wRl)0) zuYC8@F^Tz`99HMK*&y)5fZJGAomPh7%>oeSygCg+aU;y)RaGucUr0I=)h=KR?k#q@ zsyh1K`X&g2pg~n>9|B75l^}#;A)&-HylkC(WaA7k5-QkWCb@KVC*k^kKoQ{;KtG8^ z;?MbI1gdJM*(qu%RMo-`w4?UWCQ9$6s@4)Z5Sq8r-UF>~SO2}fsw$d6IEWLE}c>wx`U<4dZs=5;cysvf||0S{A28Za2y;cql01&L z^ap_fVO5dr+|INS1^^tFRkgadgiEVcrD7AILK3c}tLT0=%I>wQ#!$O_{Kib#s=D9k z;LN5~^>M$Tf>+g!7t=L(RUJfs#MW(QI7W+5B@~vBT~#weq-SQS{CQh*@0EKUjt^zL zs&e$mh+kuq>nhEvy05jeKltGh@;s|529^(Tu&N3`S?~gz+h&b7(2+PDM4HX2N{ypi zrPhZcOq*5Ze_UhC5TI9VQ>K^7Kj`6b@KtSW3Br%cx8&m7%sNEJvq2}^b#?AuJ>_5g7=lje3b99I3MqN-0)NCMgD%n(_kcSjERm}(mUXitemqqbE zjQllKU-MB`V#=A!Q+-y=LT@xxlX3QdP)${v9%$)~0W~svc~k{YQPm1l2Q?dw0v17F z+^A{=!U7i+!`*947Hev1RJAlP59F?;p3(@gQF@y z02AvO`%8>FyH!pcRVif>u3+$(ry&}Qsv6&a?Ye($u{o+T_Wzfvv)xBQdAWw zJRA4Oyno?gROPQ|A+D$Vj;aEcL;pt)#8hZh#k{Jc;jRS#XH}|gwxcSZi6Nw!xSAN5 zZ3mn}$4H=5{rf^0`X-C4#!9<0E8dRPF6=(^!fN`f9aj4+P2li;zw8{>w2aP4GGi^( zqHtr@rh6Y4T;VW7$NvXJnfyj&fV2{-6+BomA_=%D6-g89<=R^0Sz8*3P=X( z;_varu@Be!NXW80$*G|AnKUEv(Xu?KvkJu4D4GN=NK5m3nxmt?c*xq{RZcl}IGCn~ zC-^T*@FLm-+ry@1P-vCtp|s{82d5_vzsF^@ODf4A?#U$gdL+wK^<*#nTXkArVq0!G z`C{C6=F34okp9&rpAjG5;Hcd|;GmLI1?`~h8=;d7D%4VrxSG5;_<4kPbT4?r6oFfT z)ayIWvb-MV^OO4&eDAD9B5P4cTdksj#KUc)H*D670F)h4SbLdsUE+%|%;Am+-DLEC zWGp(D&7ukvX22r8^&CIa6l43V)}@NA?uIyMB(A%dXi#>MX9;5WP?;L?8_=;Qui^?5u6AJ9U70!rXo&;BToR86=>h{0@0VIwOPi9x*_@`+~Clrw6Rz`44j(c=hmzC{T5ED^2<*{TD? zwGNpcfy@Z4-GyqoO-L@!abnTYRD@&3y z%3mP@y&5v61wC@-sKCMVes;rPk}{C`zALjM89s%XAW%F?(QhUPFNf+rDJb??Vm3JO zvcUEm*pSraqSFw{j#oTddO{bf22Ae7W=Mqq_>fga$QjVyOCs7(pSZY6lHwkXko!kJ$v6qP^tqP>7YJfU0{JhaOSaXfR=zo0*$PBlfBu1 z7Axl=y#5B|#R3L+Tte<&p;{g`sFHZJ1!%jNqfP&6m8H=ZA_b?=3LejQH&ZW#dG@+4 z-SOEIlh;nQ6t{&BSPl^f-?yiNg=2*TPVmR^hc(kzUrx^EDI-h+u9ve!5he zdd1Yfv%C-K%V$UcX~ymFcS#TI>YlwiMD~N**MQx0SYgNlq%({|K(e1+UGi)@t!n>jP7CGnkU4@JhBCx4vGq)!I#_5d{_bOQr45s+i5%o~)i zyeKtUdviKd&uRsb!h>P-q1>w`J{V2{jo1T0&Z_HES4RTv8W%NifZhHkh)0VdInco@ zzcGlB=rNZZ@~|)FK)T>I#R^{GJTCwYjyE^})r6*O%X-#qS8&Spk>Mv+6B|vljtF38 zIU<5G5Lk{2VgT~q>G<(WzOb|m%2SnHnU}B5(@gMk`2;KhQn7|}H341F7-i3)WWuDJN(^U7UfE-qCe*Nykx8?UqG(ua49D_;jEz*$C- zsN7!#@2EFa*M6J;s{Y~AM$CRTwwo64bL=*Xy+oNC2-<({FToXgaYvmty#U}x{L#{X zVmNUHQwCFeK2wLm<_KtfY7un*u!e9SRnt9Sb zcw(S6_6Y=P7UbHVv5DeaO@)39^{D?|LqhW8YDuNjmy-KjwI7x?YqjyT%2Oj3LR7aU z_H2;FDIv^h)O9WUzrsQhRLt?~SZ!a(R9)KJRs1avJl?{3S(=i42IdRbLWb}7Cs_!6 z9%%OOHCMJ2`FV(5myQfD4A$WoSg@Bjc=z$pQ|o+nm&eD~insgNAg$ zwJ_jSEl4O0tAS~WEjTO&1v=*|y-Teqd$EwPlZG`>MhbeO2sfCe3y_(bFI*A+I{|VR z7XMjM;DoC-O^Nm;YE1z+$cYE`-cn_cWF*OYv>hdmDCK4_}q8K7N zo7n!1B}j-E{NtY+;kir5m+m*mkq8TQEZfzinXjGeS zsZbxP)Lk2v>_5&mUH!8XXPW*62%0y!+A#hoC~1#ejJ%3)h!kGoM8>Q4ya1j85=<_5 zkfD|xl9WlmIp&t;_|1g6EeYU?NPMciJP1bDQibAnZ!Ko8?NJJZmhw;Abz4XxJ!}|A ztUJre8)PEE!*{rQTqK3JbWcW9pb(~GPt=b|aqOaF`}=0(K_1I^=Ie1odoDo!+KM29 z-`U&ytxLXRDO+KfItlZ#7JFDXn-*ruFKb(8ja$e&7A>VM4wVl=?1UxSNJUsc$b1@d z8kO8-+e9!<$H=@DZ5<4!hypLg#T!rIg^42^CcI-oimv&I3h}PdFVy>`b4l3}KBXr$ zk5VHv?Mf=m5pu3_trH^M56!vuslmu@Dv>&2Q4WJG&Ot>rrf-^;bS~O5FAB`9!#Kp} zxnN209(a9^GjG-sZ!CN%MUToR4a(%hecfJ3?@v&woo;wBF!$dekdv$mgWTBTU~LXO zTeeRz{Y}#=6NOoCz5mR19>eQyM5UZqMqxI1KP=2B1 zlPl~nl08`R_j?XYxQ;HE3j%?wzQL}3^PFV;ytl|fF zU-jxy1iT@Y3tD0gm(#8Im+985e+iO?R6zhPNQ?QAPRvWyQL6gD7~3qR1u8WG;)Mr; zD{@Tw=$63Okdv$={aD^E>KjROQV)F#4A5q;ggrrFU2K0YEg5{?1^^Z$l5=32XX1Ei zQ5Fi7&+;;Q4L03R^M@3wHe6*{O8l&yg}ul!_hHHe+-s9(=qgw+1VU!nuUhB}+i`)$ z)u;w#K*SKnxikF<=DW4&5%U1cypK77Yw&*s3gAcs3KcvtR4n(3JT)bRNz4BtNo}ah zZim6iC}g*TX(|#jz%YTQ@$rcO#yCD~ghr^flzQjBp!}mb+K8saX_XG)wJAkf0egv1 zr^{Uhn&(HbGzx`-Ora)27_1$XiRZQm--aoBmN+h;95zP0gz}9EWQ=2NS`_TRIGG%_ zxgi17lCrBqgAEhYXL4Qa!Kx{EIzQCgqmwo-YJ4RKNEsNPRk~fd;Dk0nBOi%1QM1oLsPnP$Dx~Q77<=he7t@LfI1ESu%;Zh z{H(}tDJ0JGd+YMelL!Pq>1b(@g>zcN{vHFCR0N+(0p)RpD*`TWJ5Nru|BL31Ye+U0 z#B{paFUA}r{1M8A9e^N%%2H_9L3OZ52)-H>%^_AqIw*52k@D0aEbA|kCm*SR9=mcs z-WYYFO#B$mU=4rH!a>|pg-9qOSD7LgfI!>s1efkFl|}^ey7NKGghxuUE1Gh$kT8^y z_BPuX@k*8zskgnvd3KI6#6PvW=7wMn0lHvL>fxmo6b`1lHscJ_EDobuFXq0Z#}yIX z+AODx#_w#)<=^C?`msUzb)>;dKX=V!aIDlj{P~dsb}5|{hA4D7#7N-P8s3wr#AO;m zanFS5!D1%wpVwz)HoxtK8c%+W#itGUtNzRD7_l6_?%Gk3T;?uDiqAD!%ea*%mVEVS zW3EKvuG%(_2OKMMS!%<+3TwfnDNxj3Gj0n6j=`XO?F`@Q#3qP)BlkHvB6)vYxVd>H zaNgDuIszUIUqD#}fTIrUR*DY@nU+>^<#ku^M2T_a6z4@o`4z%+WP193cOWfk>d3@i z{T&^nc0o*gZ{Va&Gc?kzq|6Ho3<#uXwd0tYy=Zk$_zjTpcDz=~ob$&7(HaZYk!JI; z2@f05@gqG)bqNG#^dSf@(|@w~g%2g`KsUviHVk4>RA!6jta8CsU5rLbm4Lnb7Ol+r zD4`~N(kk)n4mBLAu@gTRjK#wF$=o-fgz57r{;tZBtHQw*xdxY%a}=zCw7pyEV^umb ztkSeF*2zGq0=q*BWI%k~P<@G2qL^hW&zMj-t_K^t1xi8ClY^20SF4RH{F@z6l`OUO z2ijY{e#wB8z%iynfI%5HC_7=CJHv^~zOf66P?vB}BtKo&{w<-TKOA~U?jeIA{Z}e; zkLhBwKq=*jmHCl04M;txzz?o{pmn^h-Jnp8P!xPg9a7M3-$M5tGF643(c&(+XbWDV zn(9xayjkoHc#k}If@~+z!d?YNQv{{{bE?*gDxfyn75y*%jDeL}>Z7DT3LHF?4`=`s zni0RaG53mMe}y=p4yaG4(F>e8o?sGs!P!9K6tbp+f#mgPc$tnG2CL05 z>TAQE2J076(0VXMlrg(h{<{uCfvqzVuO*V!HnN64FjxKcFH}svYpy6TFe^!OKQSTl zLj8yvxo>?msMVA<8C?;7sai7>p>jY>mM=@AW`rB}U6T{;Vz?lvqGF2Y=R%o>rMDyc z{6W-~2;6FN+|&5e1h5i_8@K}A^j236fXA1Rm1&sOM7ZkC{`AaWBJQc;fbbE5i>zY% z4kNuJtPPYV%3d#CwRNqF|J}BEYtUzE4-s&GjNij!%y+D}wp8K9*hEruEhZuAK73)<} zntOs?rHe_4_$!~qS$0+}jwxD*l+(q;dMwGny6({Tb7Vb159Hen3G2`xmCqhTO-_X_ zS8%=@6N8UY<2vgdgENz>1LCh0k}SDsT!Ls1FBmLt5(1UXWFR8Uob=cCPdJ)teh|8c zct}A!kg-7NUts2@N`D*G@%Yhtyjjh5RXn=u7iIOT2A_)k&t9CuGQUqG$U?0w_7y#a z5l|tArm&@VIN7H&0Ca(eLn_VNIP*)`xfcqky72BJQ&CMjD@|!i#~Tks?piUZJc@es z#rUba_buEN{;m0tr8BwbN*W#M-Q)_FRx4cEp1CgHq)^9uv_03kn45v(-&KUaI;M5A zuwmcLB4Ds3Vg7Rnxdm;ifj!?S(2mBl(gWI@TMv}`?=6H9w!;Ktdc)2C&(RR5PUZkCEKI+=3S+&ow* zRRY2?riiW{nAa||;*SyQ1)mdhmpCF0eW7YaQC2~uSw>hS8bYK4qInibTRhc}t)_p<(bbsS=!w}yKfi&n_KU03@>>X|)cm~^T6`K*Yjzme zzios+|3i`KdbDo6jo?0!Ks)G*Nmb~t&!uAV0-=kl=~15SWuA(jsr(u4425N|lrCCY zO--w?iufEQqr9K=Pd}eYCFGO<3v*~$1L%5FVVVbkfI`UGRxYBd-}>$fPbKe(Hs(!7 zfsX)mu_TGIb=tcDs%0lOu;_)^bz0Zd#}wOeh6)iF?V`y z-A6U~L9xE(`sGtGa39H&xDcl?Ibk9WfSwRUi?YEBMnNn%_D_V{!Z@Tl)f34cWGHIL zz7SBET8A3nG(w&e+rmSD0|^E>JP z-^U|LH_y;KwY~p#m^iI*ZnEpD@?>P8frJBofgQPh3?xwWCe99mm*ZFbD zA1&rVA?U8Nb&1f0sGJk)emZDoA9EXGZFZ=biENZx8TC|;atwbgusEJa#z8BEH9hD* z6;c>J*p>2>bazp?w#00V#fe{@APTMH-0FN>Bdb6Rxuj=;t~H{crnamNTGl!z=Y;U* zWtsW^mJ+O<11WZTnU?KvvhM~b(O2RO*~JbMDl(gYV0kR?eD zm+xmIkhCiz(#B5gni6LLYyofq49?~gdBNOnSuxqeSdTyhMFQ+D+8iueh@y!WqDJdz z(+6+fwxF105hYRInJu^=E>`KsS{P$N%}* z^851n;ZH7>fA(NZknN%b#kw$&3lR|};=DxUiU?Jh4cr?u88Ra_Gh%S;jxV^~-QV{i zg;pD*cHar%X^b9;#|jFqiOHsqxuR`zxnUPvPHZQcD8o>ia`Hki23d7^ZdpNEJK7<$ z!!r`(U6q0*?EsLH+hfMbkcl=={CZHAFarO_KQ@at(Q9dQvD;X z1b0+V3bP5DAkrL}ssC}5@c3M^U}m$>L?n_(EliAvU;=2p%oa1A;AX}%M8^lWt)mVX zYJH9hLy!~NM2!odP%CBv&+Tj%I;~KieAXa_Xtj;kNu{-P;6)snp)YwEdw8MkS80-H zkX^@!Xf_**Q%gA#IML~2;mWL!Nbr`S&{MG;`H~j(5F^QNMNkM7I8U}Pp@&~_U-Q6g z>}EzihaJbf6M~)3=kQ>A6pN=rMwz1;ax$5jkq;T(CyRs>3m1%4q2VEjgg{RS!HVc` z?tE&9t=<~uVZlsLG-M&`;$Dz#`w^s*WDUkQpM3vB5W$$Buse=5tTVmAq|ECPnlgwBMaFKj_KuuFtwCDXkH9hK0T31v%oh)#H;!-a=H zdCWtgbm5ymL`AKP$ME%48@QNKyh2qNPoF{+YoN>=8r5{DCPP^XSwb{9moO653=c-=uZi0S%^noO z*x^Yg%vJY+ucs0ih9PkVJE552`gn{{nM|l3dYDK!9vmn}1d-ts**=vBO9XBttWktB zg0Z?0jD~7>-fqmWu~WpUBf^2Z1QOzl7>0uyT4R2Xs1b&iX|Ni`8WakO%fljUf+Iwe zQb{zMia#8wLL@^H4M9TEl@Id4$9&(Sofke+nG5rq>ZfzPyIJee`9rB7A)Ql}?=9w( zDN|-R>_y}AO(n=I``lloz7!LNUl!qNMnXSQDx&={4MCojLVF(G5PYdOyn^5G7^9iX zyNx=s&OwgnipyND%){%sA1YB{UFdw+AZ0=o0ylSfLM)eh(oy9@d-B%Nx|``I1m9Xd zb=_FVX@_bo?u124$S}IRvSYJH9%RcmUm_kqL`4tp7xXNqf{+vX75V4+L*;Vooxd(N zjWy#nl#D7>4wkcx!J@{wuIBV1kW==0A1%pIl7!#lP@X_pXj5u%>T~J`vyd18oyqK&dp93@&5=8)Lb%Wj6!P7AGZ8z z{;)e;8)i%<=8}KY?nk=#d~cY0y6a!t_Y>5w>DUFM4Po|w?TFQ@4bLd#ms>|TS-Ihy zhP(_9&IlruhiO5!>p_1(UZ2p)%paX_stec3%jK=ctiM(Ree=B)qHr8}r(dxNOa1^{CgkkAkS00O~aU^svx`vVk!2wNx?W()=h5)1|w zL|maGVFv&pLIRKj003ex3MznA#+3r}5)d&LBc}J&Qh*r{8$rcf7=q$+8ET9W(1#OE z(36x<-tW?f#9X`$JIDkc0kE2hCai`x($fb6{)(sX7dt^La~GJ4wy?$;&=jXbFc&Cx zxrHN(1wVO9G@(aqUVu{15y8q?q6rJ&t0Hu4rVw;!!WR$G(=6b|Bw{Yiq*MgyacDx+ zpQnzf-)q|@5k54*o#20DnS!_iB&F>8dr1T>=3;atbD?|3J-sP~sCbK$+y-efIv(V-Q1ue>ChfDT~H!nGJHL}V^fq#AI$ zz-d(Fy)q=4U|vXpW*Bo3zOjpLSoN3FB+&$#R~DKX$sf`1pJOh5s_=5fQ;+DJXo8ou z3#evxVXDhwveA5>Bs`XA!quSY14=aEysS;w9@;O$TI^k|B;69kUoM6in-F=z(THdQGDcK+4xmAf5L;lNxFi5ava9IrHAUlTiJDGzfo z{^E9y6}~23W6+2us1c_6jjsy(a*@fed~nclx^_a1L~fQs$9}n3%#8O|*NU*@9fX$hUk8f23)7u%-BM@{pA zWT_Wjp~+mR)x%i)RvM(-cMcpfbD5y)sRU{fXKOcp`1lpaTo@+`UF_X8lJ`@Lz1F75 zNjGelk7F*}{v$uUl0dVBTr4gVZa-xSV+`1glV6Z->?j-8KUOXiB4cghrKH#BoyF%d z7b&-=%DA>P%4Gr-@h}0^KoU%iXt zaG*7+BC#}F;2&*_5#A4sn5&}?K|9M0%s58Mh7zJ ze6H+|$H6QzUM^@+#4i_m*5ebz!CW|4WH{m`Y|)i26MPK0{sYk2E;D>+N>>bhA5s2W z@#1$x(4Pt2vGpr><58n7Q8TC?7rRPHQvd>D?JyUu3&*a|)8O7^!pKMvQc|pQ2W(32 zc2$o7`p|S}8)OLbigx-j(^8Wz6LkCcepP0N-B>llhL?^q%*FCA_(nC*6ZG@n znVZITtF=jk3lv=@xH#;4ai{`$)e__7A~?jw8e7psm7q}UV=>E$BVoTG7A zpvfLD7nV7KSoBvHbNikt<;eAOq*e5HqJ#)4qPvVCWW_D7s8=PE)LBQ04=6nQ+`Ofk%=_qP+vDbh=E?j4^=DE1xp2zRLt@=>(z6 z1Xp6D{6R|j%LH`=vjD}Zu>j+I7mnX$LcV24v^?&9$Hk%9P^BpoP~XO7%9HSlce$9R z8q>xyslX^#=`o9U=_#pJ`jP`+^>$nv8Dj(Sy2vbkIcFQ@>M zAibDy8hTauSN{NgJIZ}EF<}uj5X%JsML@d0^*cjLKv6Fdw1lQ_7fD0Vah6R1EnzMiwm>CR#Ek`8wt7LGT^4dAAJ{qVeII@1T{&o3?Q0#XXO5Ew5v3w;HPn(l@HmkU&{ z)Lv3}+OF`I;1M0!3jNGIP{7jgVxFe35;WnOV~l^kgwl`Vt*j@Oqn>&l`tNcs-=5EG9XsxEJ_UM>bIn?IdR3CZQ)f2~@8(O`6v*6` zKcT;Vf4T5a?Dv1YT+k;}Ly^09GeHMA-t{n5;mgH|d5nAJuA?ox1QI!yWrkl2xd&b@ z4rBA8d!P4m!J+m(k(?$$^}A$VE^xtlMOsA0^>^aDT+ClhfMhlHasgPs@rvYfQSrC{ zC|1ofVxJMF1HNBBC@~E|RCn zo;MOjr=#g_C+L=oD$0JjC`>J;Ef>h-BNUtt8O4?hUd$@NpBKAmMkrH3m0){SVdg$X zzvPw+==FQFu1-xicV!u$AD5NO#Y6njlgM^>FrAHl!%i+2inRn8fOJ>zb6vdvYGN)_ zE}=wRF5Fw_?;Bc_Oq?Q{@uGx!5#=r}p_f~ZQ}^C-Q4gp6_-hAjxd2m80v-Pg*LN4k zM5+nQTipC4bfxoY>+v_@5Nx?9eUW0)(lbUrXss^X2gy?LcC0H?l4BQ5CtNTiZp#HL zgy3>fVEWsVjf90R7n_<5EHTFv^-&gYIyG16TUwWkSt)`L-p*6%fTm%N)8)cLI@+~~ zN&>RNo7 z6TUJF!*5*3*3vH*5W$2guu(3nPvS2ScpET$EDbMFxfN ze&h|44i5QpA$}JC1;EYcO-fIjDYJ_5~g`k+$ZDMJInNTI&!H}SY0kM zoU`CS0i%~3j=)TzcsEL7kx8R>iJe#7fWD*yrhrgp+C&_l*9sRJF>JYDDqxn2Ua}Eo zA;*r;l?!|}UJ@%Q6y?HQQioA|Du`TV_j&R4#(#%-K=( z*gWc!U9FIwa$z&JU~O#m7_liA(3S<=Y4-FZf+-hj!n%P$F#xQYPj63!#J~dEK}-ZU^QYTRRyjya1hl=lFw0vF zqIWB(QI~J^ij<2ANr09H$0Nt2Tri<~|1lb`<8R;EN|`M%C=pDW-)b*Z;C5$|jg$*J z5o%+S_y+{QqL1L_=b(7O6Zr9yKrw%yqA*0bD4IQX1PwuAK_hu67eXN77eQsL{PS(kqj*s+jE^jYmkslu zIVeNj@f5%~L{Tp2NeO?_3Hzr-O=sd7@mPEeJx{5z`P> z=omc6P9VxfHi{~=0re+7_CXm!WGsj-J#tMxtc7xctGE1%Z%j?Gqg>G5cr%zF8qzV0 z3p!?ynck#aT&PX&6u@xkIamnMYnuOE(@XCVk;5n#bH22xO7Rssfj9nw)Q z1eLQ0_A2{wgghZgNjaokh+6Q@yyFXfDac7cI< zJC(!HQby+kylYb~umbuSdJeQZ&qa>UUfP0oTCk=XsypQZIqTDYN=dm;!W)>TB+^Yjc+@nAEECfl!ZTHWBug3nS*i^30YM41uEKdVb=03SZlty~24A*X%SBMeHkSj98XXDL2aa{BdR;BGWBjnQ`2YbB2OZ!{&Tp0rn-2~MbR=$_ zr_74Y2fF{~Ys5Vgm8#7L(bZg!@^WsNyR;K-b zqK~(h%?G-FjgQwXut*y$3g3Jn;yJY@%4Fqeu5bu*DN6k!ZF6P0SYGNR=35?EeDgss zf4YHL$KtbG?0eJ%+?Vv0Aw3#1hKlOugLM$u;)F2(-^h5h!A_{SbsV%@$fdmj^#}m{ z@bssvHy`XTCO39D3?X6Ha#21!w&ScYGgnqp=g|2JgQ}?TSKr{=1Y0g}6wxFnb9joM z2g)5El!-O~WY^nUbQKy1u3X)n;=hE5;)A1~V@=DZMvoSXyP7{zw_LP%ttILUki{(* zGtZ;40qcU25lHbtydMYzmbhHduZmF>0cE*QKz zOF{3tpZMS?gc06QENr;Q_lXaRPYHWO$R-b+~@Y=rgG!Qq$XYaWCM~hS|+Y%pK z2(3m23htEyWRC#`XhQ0Fv17A)VS?-Gjw;A<-{mkTTg^PWY@YwZz0d4hzWR8hFJaTKU~juF|wv}~xnW#AF))F+sj z<>EaV%*;71ESMY0#mAp=tG#=i&-BGaKwc^gbfWBN&Vh@gbPub zu%qBY9pGXe^IK%$Tdb*)rQjAqQCP6L#V2asl*g~pElj0bKv!X#0vlRbef)Z1^kfTV z47*)h5G!plg0n?D*&<%C#iGC#al96TdtpLL3h}~-T+A+PCoQfnjHp_SVjy3d3u}p5 zY{IbIX<;nWLYdN{0n%ce3u`V~8v#9X0z}>=TXITI&OscXt29#7z49^G@gUMnzntX!*7n=`R{2Ls&j77P8 zEWGAe0IIQwhp`}w#e#%k{1b~>hHWDj6JeNoSZukl(y$<5!@-N{Zctif_e8K$*%#gNx4KAcxz#Vd%- zZ$I7@Ze|!XyP{;-710di)D<8=R}^L#e7QoFNSpX_VA^x=@Hp9|ZD~!%C{H7Jn_yfpq%?M(eGS{%&S+PLmx304S zbl?p+su=S)O+9MSp9~IeZRG<{~&GHOpT$QqLG&Dhd zBLdafU1VF;P(eqiIHcin7uF@Cbz#w97^W*?7+7h|DTaA!DIlmIVh1Xs@WRX)#TXVN zs1O0eZ$VA>&E7e$0~JB-7{)KDSsaS)z!)}-&@e-MM#HApbyS9Jr=%e#un03@xYuo% z3*;~blbw0`M{*ukGWcO<3t}O2h!N)^hA>F%>XaC^%EUD6#GWjeD3)1MtTj*}ZWWsz zkiTLQL5pn@pd?ky;9zXDQlP?TjFki`zA^?*&zRy*V-mr}Mo+@rSQ}7LgkuK`q}lwd zG8T_JChB&Kjk{wPI-TG6izJ-eFCW7x{4os}$i^uU`^CR$$Ett|(~1mCK&-I#$RstA z-P5?iHZsVE$q=9>dlj)bseCetD3rYnsK9IWC<6*qH_hd#Jo-DNa-XGh;J&3P~JRUuYJ;Q?;cnWptY=5T+U1yu#&K#Eb-Eu(TFBUdF(Fte!&5-Tbb5vgNY8|BdnTgf zvusaPl{6*ge()5m-Dh z4oHEfQRVoOr|2mdgrNn@{Eq4A6z)i;SV~S&vb)>{n)3qH?gZNTn}Q}m`)yPFT2ll` zQ&exJa7d;&HfWxhq75(w@?DC=Ed@}eECn-z2I5LlLcNvZDwj&J!JwH=N^w}A0w~3y z`6dOzB}KF(1y}Q@3kFSp296YZL6e_IvA2T@2^3N+1f*!iN0A(8@jHrKn4_2nnsuYN z5MXY;jT%J|9CsQ;Q)v`YG78**QBWRez(tXrZc*e8G};ygh*%=2Dy3y89L=VNLm~?H zK!boN3fPpAf1E!I8gv^9ZBJ)m&{#4QLt!B_zUK{33WZdmB?-kxKq#6wDDW;QXr$24 zf}*3)o&?1pkRL%2G>Cu57eN7tpM4=HKopwbCRHai3KcVIs49 ziFM`)FOVmg4^IpSt@1muyMu=9P6!9>pzTE0r1`R)Sewwcu@kD+iQ%Xd(MTu86PodJ z;;}j5S<8u!xYhnx5 zgo9B{q<@-7S<$kkiM-LocSaKf2Ti=|nP}onT)$`|nu-0FiGFNup_Pd>`p0EOYj2`e z64A)qp#i&%=Ca9z*cjTs8QP(d$H@f7Lp1TI4lSVbPYjJO6dHXp!GVj1%MV(w2M{L{ zAm&PlP-v~mM2UsznFA&hQ**3CP5`&HAmX%niqvg0tkmTeX zZ2mOvn?xVf4r>wvQIncUtj(x(ViN2~ zky@pr`C6C6N~NZcCGlu#Fe-_|Q=^|GJViBZNuqG7-9{4os-_4@-0B_)09N~QBtly4 zN+W?TuIAB5bpImZ^=iV3#I|59Zz2H`k>FG5%-bR1At=lVYcE3rpF-mIY9|PZov>zJ zkk}e)p#ur7tW^ah_V%n12uLW@+T0(JK+{?BBQ(0Tojw8#*KF_+U%7^^N4%$N)Om!7 zy9V4mqMO$S@rcp)n%^C<)J0uhu{iP);n&L45qkhz2|9u&*uu*Z>wWU$2uJ%GI~-vy zQQh3@qXsb5&FXQV9vj==HX?s)GqMpelI@L+fJWJz)`)|&Y}kZRv?}06V4a9GLd|B| zKO@lNGva*Bh~`;FtX~;16d6%CW5l}7<`E`5xqX!d=)V=wE3nYmPcFZ6u~ZS1xgW< zpfrTWl+iW)x`)XUcOayt`YAz9bZUa*y1mJCp zl8DT=jUW*K9wT0X-1Pc*2 z@(qYZ-&}w#&6C8>^CB}{^kjsEJRSOx$SSrMZ<-N#tIRe+HW=T8|7&68$QuO zME?b3M;aiqZx&(SEDFD!3lZ}Yrr%=3-v|s568+m%c_9J~;MmK6s|-O@KEX{1 z3{G2!*mH2OLWD{oTpg5f^_jvchYQC+8SZK~9JSrytc8dJh~r@*&Qc+QBt{GXzn)SJ zUl29(SEdI<`09sfH*r9G2nBkG#)-r45auL~XdNQi93oQU5EF+Go*~4$Ar|eOUN%HC zHN=;oA)d<+N5>H9slA(Fh^2@leIe9I+@%XqwHAVrScohu1Y%CyV}-DvLY#C85t!V= z?Pr%hi7T6&I1c?pA#_s|Vp@uO#EIKVDJ~HwPBjVvt|&%;=Al4NTqqPm96NEv z1K}isLfA-gz0S7cuuzC8B`Z!r(uBaPIAJKn*0ebEy|{RHPA>{!HpbO?FW8Iosxi)# z=HMHJ;Nmfkh;cQ9h(aXkG4%AlI4ugXOfQZ`i_18RGc+#_p!VXfF$9c41TU`EfkYvY zW^r6m2uE?hQ3xV_FDzNxzHmXG38A6IHLZmBLiNOng!s|o91;R9Swv^2$XOiD2Cb>{S^dbnGUV+@lc!td{#AHzzkjy!CLg z4<=Qb!8y;BbJa4PYYFb0&k=$KLmMGp>}Z6r(0wj(_PLSzTrdTF?qc*0H{z_%<%|%` z)#T}BEv=(p1qVPQL*%jp#%|BszmALX6B8?-HFRLVOtrvu)^zq)C#YR|sLbhAy}y zG($(C7!2JGgLrFSk3iu;P|rd1O}s&P3*kc7ZV+u`0xWcXzd>9s2mx;p3l*g+!xE8& zjz&6P`E$+{;2?@0x<3=>6*_5!K%pNKgg@ENAcnGH5E)(&SC=Mp-g9Z@M9hMSPYAo` z3WA`82WgT<>P@Y=%+ds_RI+1_a3i|km0ND>P=%4Dc@DCKp{vbksNIL#7?$#B) zANtx4?R3b4?IL;WQ1)R>yq+eEN>kj&X68Jk=AcrY0SfZk?$`aJOOItoOuBCPg*Ds z(<2X|#6&XQlG1f+-yx7wlz6D!@w+1)9#WO+whIp-)zM3jvgLJ&++ias>^p>ymV1W= z<{j?c9jK{0FfVtA2zP+gb>rrCKvj7X2ixJnH+l*Krya25P}g1e>~IiBb9EgnJFH1s z#tw#x^T{#TK{Kk0UI*nYVdzh8;W`?y4zWFKN?0BA0IEYhqztN2IAzb%e zh}9fqm^myAbNK5zL6<|4UAK+pfaE$Al|%NEgQZ+2OAeon902K}S9^?)kVCPpBfiI> zStHFV~ z#B$w4a7f8@gTP_+zk%Se-|#)w_6_1M-w;LgDB<3)WO@Tpc|%z6h8a^2ZP*=oZFB*kr*=7_ezkL%#q2GeME2o&Jy z*-0~&jCKWN1AE$)oefK@9W1j!hV4#MHiS@a0NH?`+o_8Uzi)>eHe3+yD1!|?;|}cC z&@jD*c;$|_zDjrQG#LJ+J7lau1(d-xF!6J(0q=HWXAL;yosfZ;(L0ii`|C`8)bQgw zSXG0a>^qREp;Nyb0Qm1FPz?dQq4w(Ct9A&U@u&e~@T8%JboXhnhVZ;P4SOlP*rtJ0 zhS$k7j2#}?(jWx|DGjy4RuoUtU<-Hzq~VBo*o_A3n0t58V1{_aN;GsGGPmc@fEeO& zLIc?g8d`@(0vfDycznpu(6ny9v~=+9@P7OZPa+<5&WHy}#6wubyZj7XjofqeGc=8O zEAZj5!-nta8yHTFKbp}=`ti1BH53ZI+9N(9RNk${Q2Pmo8Q@ktla}sXVAgNd&|0WXYcjt z45#%y9`x@i>I^)e17F`eZOj9o?j9P1@cq#lKp8%WBEFTo;#(_?uO~e|l5*tJ&{`ET zTRsMo`4-*gqmmA@^FjIZ*@WnO(ixVI^tI^>wASv!Sp@xCy~y;5)EOd+`ljg&ux`~S zlrwAs!{7{a>1&`R{KYIlOniA6TX&xmzx!MOc!n_EK*DHox@rbF=L|oJGbp?nIJ^&? z&CpRb!znaFe9R0}7MWp2%#h!J8P0g$+3K{s%diUG*O{Q2Wea{SUQY){3cd`6ml_adSAj~=$>Mj@x*Xci6Pm%k0bI*@6(7< z?<0*cJaHJ-?R`eW@LYZ53&S&B7*47%P?<0=hA?EM4hH=9O$-K*cA{X=1i5sD9~k1T z?=3KRcfjyCxI*>|QwK2M_WNe(U%)PnvGEtYexJ}U9Pxd@Y<(eC^Mx-FUqF7}>|OwA zE_*>=l6oQ1`u?C7QlvS_S+?I7SQlv1LxdN;m-F5QX|2z47p?$&KrK*E<$^e`3$0Zb zOiUMm4P6*T=K|dCyPONa?^D5CIQIMKo?Q4UFSvVLuvJ``1M}$^F63OeU{Jj-zPy9 z-f=8IFBUrcJ~Xl5$@c;4dJvIdDY<;#L}B4`!9uC;qksjQ@8kRm4ZiOPe1$y?- zUEw#rPqwbGgmVS3xI!&?D-^R8Fx3huhE^E)z7os|iwLw`K16&U&}|yJfGFQ*g6}h~ z6a|2f75u%g$+5!W-6P%m;0d0txH8IIijNiQ&y);g3C9X9_1=dj*{qpqkP-^O_eo)f zlcnu_5)#M~s~wfLJ9{7b>y3b7&y0{TNe>9$=g6$z`?AGqY^)H@n1E7yA6e==v`@U= z2hEHXv==K-TI_wGSBe#a-q&l&-x6E(QA+Q#7#d;*F|h((?_mFFn)e~?xdhB4sNh)zH}D+gT|1tb%M@ ziO2q6;0r#jLTIP`YvFx7WMd9$6|%qkvP5k`#8#nttSg#_hP4WP&0?^9IL${htyRIz ztO_l>j|i%Qv?K+4yl?NQLZ)x~WmG|TPX#+o1%QfefFg=Sxez&r4Z~ShmGDB zykxzv*eHc&4-ud zLBT=qTYf0Kz7K`t9tu@qsl-%K^**pqSWo{xuw(>+!sUR1KwYVq{H*KZbFkbVS&IVELRf--)F>W!o8Y~iY735CS3VGb!WmJeP5NCK&4C|flLVb zVnW_w0#Y!6?ZA)emrz76A+mW1^VB7b!zHY+CCoib7&ev=@0C!OR>F8yLb&2U@NL5WTIR#gUycwUe*eM|pz9}Lfh0KQMo2>ZGMyIji@Fg4u@TbL zuMwhK*La8@Eny>Ih1dwuh#zTc1VQ-r4H|*?WdxLC1mfc$;-|pE2tr|Z3?zQbgb|L` zxBR^bIq71{M=gR97Qu=Y0mD;-nNb9*Cju1)x(z%LG!j4QiLeFciQq2+SrNZ_*%QG@ z`~o?on2q?EIEkO?p9nklNHvQz;+LNQir|&_H7LRcP6R*Vrz$(cFkt`i!zPH~mk7A% z@N-98B0#GyDe&;4#^GmOhF&5NZRaDMhF=v)_yiN-kQP6wsG>wGe$05Zj0r~U+1D8pFKdl9u$-Oxaxrf^%Gn@&=^(^7Fv$-^$xorq1{>}-O#yQ@ke2)e2_2FjIu#xHsk5_zQ$1~} z(C};^&eXe2$8|3=rKK~Jvd7qN2g4@80JWK?99_ z25<5Vn9~`I!5K8hZw8Jvg9p_Nw$CZB{iOCwew^VWKR7Ql=!uzup>&>*AD5dMaA27k z)I;T`aLVuG5ko3JNMIZNelN1CLBY_*)XV@5UJFJkxy&F<^XvCugIMOLGBY^HI`e~G-+|^QSc1dN46NoC zWqf`Gml>GP%)nhg*UZ5Gk^#r)wx51V&#&t;cq+?)GL=CO&yPoC;6RMHnq3Mo1{+TX z!`z>8Eb>Cg$pA0*{LCQQ;wA&<9aYF^;A9Z4rtUt!E=`ds^wwE{|GZKvanFyDp^svM zez=oCwkVBQ=*K-71c*YTQb{_n6S2Bt&?hJZ4u&$=5$tV=GN|#>?~XEnh%#6j%Ai+5 zKUOpJGl}T;Nzt$6gy?sgY&eE~RtJMJ2s)I(#zh%$Up`7Zi;9dgum(yJCJJ>-O>I3b&kh(E|oRu+Px-rskLB`-m(hmvg=hV@U)Qo`^r(7>%fJ2(NbW1vk zUBMXx*=yembSrX(K~oh2>|`s4)er;XO4CqBKe<4!sKdb7wlU%k1OGrF{lX>yoi-)? zg6J>^ROc}0GGlQV;4S@TOsp#Xe5gRu&*K+dJQy$_{fHc-Z6U!Yfo)*$BVcgA{(`;y zg67v3ypVoZ@dexL1(!uH$c?-}_`Bdr`nm0bfom6VM?Vhjg23v6FwzexxqD}ZUsSfC{-hy~-pf?nmX;BLJFC}dYaV!ML7-4%F! zR{)8Qgfv{4Jr%sm3f2==K;yct#L< zPU$ua{PZJ`;L4>%P)@Nuowu?VY^UV2oezy0P+yQ%@2We9RiL`Kco#o zn930BTnGkEKbu03DQxUsgdPYnC4otBf zsE-{uKXsx z8)!|3gk-$vD-E2&22kW0D8U-AP7RPZ{m|1uG5wA!4eT!c#6|;W2n~qcGf)@kH-Hml z`iVUTptS1DfJz}_UW&X71c_lxm4P{65;L!&5*SFw7+@e61J7vS#DI#20dS_@VPQaP zFfgVB2Et80lD~jx`U17C7r2TSK(h-lgf1}VxPawbfTPjP&gk?DYk|&a0S{^x7+bP{ zHvQVf0>8lZZF1-err&kX%=B{z7Wn1X z8l+4d6t?Nd1r~^z!b{VX3={mVfNEA?)${`?r{4&sSIBTz0ojZ<{Y;9h0K8!JLw+r9 z6$n>9Hfa@*FO_!solt?IpO+{wq*VY9Y!#@MZ@Vs60mgO}NXzr%jVcJe3P^ty7}R7#va- zB0{2{%qp;8=%-z^3Y@f6pn9zWmQe*xNCoOszrS6rL_ZjQ(w~Ta-_byQfNK$o8ajm<+YQA&1~#}jPVf!^C;f6!fzS)e54 zZ7HA_o6w~qDbOQTSO((OR5uFr=99kV>fE7lB?_e0{v(PL3TU3?wRnD9r{!3be0_id zT8;NAe3L?A^}P# zUUY8bo*_MxAORXg7yHR-SYUxn9)T~3a0CYBE_FuWWgfInNCGbcuSEn%1OKS!Ost=< z07((P2Zg{Lb_nH#0Ai)5xDuSTn!m}=_YeUx>+)kACYl~0+;zX}5RlzZ!SNxC`@rpd z%E9G6$}V}CCw(^y~-$OMhTF{aVnQ{xW=M8uR~ zHD&ZE&VWEe9k9HecAn1zblpE-42Z^&S3}d(*>Cr;sE$PNv(EJO0dewY<;NJ>#FniV zEu^mZnLgDS^h+8Y5F{2t4;Wut&CgvxJ01}9U(>XvTg4UYi?j;mJAeiz74{B5Y|y;W z%6^FbZ=xN5FEoe+kjHV>xUUXSRL&mAAc)$min3Co1CF1_b=+r(c$gaknf547eB&So z&@{y1fOqrSNH6%*5n$>rIv6ka=OXLfZmI4)Jcp>Auf#p z>m(8}z%V>QD85jH0mjI5=?`oF0^qKjF$uhxzjVR4HZg;C0eUN7Tqi8hU`0Ff;e}Ff0xC~gYPG({0zyP06`+KRIx`l&0)jrDXRm;I z;2%Z3V~A5L!YZwRLz^!;d>N|(0$SdoG;6O;PdffoR)AUo`xHPR!%P7{g(Eikra$Gf3`xA%XLdpOQyeFE0Hj}bnw--J$p;#tz^(VMry z!{I+4!ODBT-%>r5Duqm=qVC3@PXw9o3{;hmaMFNsKgAP3&0nT$y)~Y1 zIRv*F*3v$f8-RY3pHaLmVJ@8eydDJH~4EA^HKlkV{IlRmMu{`rlHTb_3XX=^2#x z?426U$rpfMyM-Cd2ZQF#-AxUkApLUxM4!IZO%okuL8^8(LbaMf8LB#8XlN5AP3jl75lN^hG?!^dqSb!!3 z!vDJs^tymutN?b+u1uxNe@GM1*;4>IaKT{)L$M1DXcRzcmJk(~F9ca4=|Z)V)Wd+) z1em7W5vd)T&9K~-0HEwW*YWw>K1qN*Q*@S?W9D5+59^HpS1VHt<2QK{0kj`5rE(=X zD-25r;QSs$2VC~|u;v30fYl`gh*0N#MI|Ej9smdD>pJXFNcXt|_`JC}{r)0G>Ttaf z0Xz^5EEVgZ0?YuQ5OKsv5H>g+Zoj0*P`eadoP}*`9^C=#Ice(8@4Ip=-`x&Cv*i&hiKVA{=yai(vUUKK zSD<~mvbya9x?TY70D_vGISy?@nD10ZJAe|I=^sDu^88~5@V)b(FjK(%D<@7c>_(Fd z67^bzeRY6i#$Vopl$N2Ch#kP$_jNZSj;3*5W6NN`axQZAE3Pu{CTV zJAk>bu7YeRi>%2GfYVfMcBf9~D-GBIsH&tqQ1DI^Tuy)>;d`9f0Z8qy=5&S~KphcJ z5BDvM3yU3q{^NKh74nsy@J}*k2hf~iG6`NAu|A{Anjd$OTsLiB5=ipW)qR+urY*-Q zXsNne3(-S!lF@I=eHjrufb!8Dq*X@f^=_pG|CYtDIxSB90$>NAO`XVkCwQ#fRIUnf&v=>5v!PW$h(gE}t<ZrNkVB$>C1Vaa~(m1(-|Iz8$bZ4ZcpuxM%H}M^Q zR{!C#=m2ODmT*(dmLE)xStRvh|7it-4uJf!svPTGxZ}_P*jNs6*@Kg#Y~#&>@TH%9 z+J_0|3o$x?AjB>gi-jiWLkFM{P|HfWySzhBdQox41lbKwG>(mV5by6TgZ~X zh>7C(2;P}bFee2df@v+Xmy~U1tgr)pYdyR%05z1cUX#Z9dJI63Y0nZT>2fJ)j*_B;SH#0Eqkp0HrU(f$|2E z<4D8D04h%68E~ZgAT0&}T)+^AkCLp35t*&j6@lg0LbR>AD3Om4N z@rVJ;^WUB!V9?RJZamTlOYIm48D$Ivg298t0FII>IR`Xi05yGe5o=rA{r+NqI>DqV znjS(I#Q^YAd1%sU+W<}TB?88y_F@3~df0cL8I@!yrP^RR(S4j40H<`LG-^NxujGg` z;E60K2Joky00lNw48R?KO|D}Ap#%4SZ8{3DWoD24HQ5n+Zwvsg zumbK%y9SLpu0%dOV*nfPS7#%X{R$<5Mw)bpod;0{2bNsRMu2P#fP-IMA>cM3_zFs& zPnwC&#{imM^Ekobl!CP)2w~c=*GorNvW@|G>_faz)0804D3?YrKX0+z$Ni@(Pq8QI zP8gV68D)oR;9TFQ=g*i(;V*ooWhK33=VZIdx!$M;K ziJ3~ej$GKFEtUK!b{_reAo#MLM&J#=ruLi0G@*e9m{A&J3_uYf_^WEh0A>~w zoj^Kpl!yn_iQ02`SaXEliKkZ5XJ0@76PW7(4Ekn9WB@`h7%c4^>bh1y24KFzYFH2? z17Jemk=f~XS!Bb)J^`FQDO@suF_aH`=c`CuN(R6{ArW`Nvs4M5if1Tm{;DiB~$k!0maTyPs3jjS_0OUwZVF(pYRET;J_zJ)!mgxov z`v^$BGzEZ3AW8u+hry^n;6-$4n4y^gnG-;>NDV1Nv#16_I0*o{gGc$j-Un`6Q&S)S>~6pgzM4ipC3pZx2h1*x;&#kVVSfX#=Y$6PBB#q^Wd7^pLT~OT+nh^ zbiO733?j0l-H|j03~RI}-pdiduCJ!Zf1;08ei`P9O0l@P!lr7*6$D z$vX=J);}ewrXVm@cSnLEHEZ0H*f&Zz; ziwNqyDC7L!0|X;F?HDNY;XE(@4+=90O@T+3$-fw2B;D~}HE-a$jiYl?9r7vuk1Xcm-1#$X7*G!WCq4?CY@pD+EeSUfl}}(Gn*dKh zu)kxs-v4^du0sh*cK;koXWZW_=Gy+u!wU>*t&05j6{7vWiXR{B(Ogv*BKz-TOa{0A zfx+kU9st7j41fZMTX}8$pAUrlK<7`1*M6)24zZg61r3(zwH(mz<`2Q~5#qcOF#d4U zzm`a->92fxC8X&xyz{q&Kx(AFJ)tAi@Td3@{V9w=FMBDNpzxRTLZ(p!n9w3>Q-Hzj-m79;&`;b^lLJe#Mpe zJ`2eyHeKTvQY66tuta0WAZNEVRtET6fnWvP@}EiZlLKi=4-shm{(R~p>+`)|d{uzS zl*tcP^L~Bvh%$6W`>9V`tJiM>g8R3* z+r%(nA)?CObN$@YucVXfx8hD7P3xCEwn2Iwxqu|&uMXCK>>Fqkoo9EWz;C+he-XoZw}C;W z(W(Covl}fmFW(k5UDSWq325lwS%UENFX_a&5|~pgpPBx^mmh%g0PdNvTk3&=nSMxk zw$a>7flL+m`2)SB0?Q)+-!uKi34elEumOC$nf_YBOzW%0eZ9G7n*PUg@!8nZEJb*^ zfZA&DRtwA5i>6-^+8s@_Q}xn10Kk^PrIaLq!zLvzQ z9uz$Ss@VJ(8*oi39dKeVM(jESkrJCLQ<5?zDUC@0{_B?#bOCVzaRDS9nsz$Y|4dC2 zpOj`~`g{7ZvO^M&lI}4#{)X`<8Gre7E%8L8?nj;L1T zg{w}*wymhwxeifOyrNxMnbpQ2(!v}$#$J~-M!6@u`3)^wL|tE)#no2q$n4OJ=3+Ke znXa|sIbp^qRF8~F`qG> z7{}bzaX1(wjqc@c!xw`%pE2%yHzKAK-vq_C@o?iWrluwOWhz83nHJG6GelI=nRPTN zp`sCL%-<=ii^ZHnEe$<9QZuql4gGKDb)j}M7H8X7+@|W6QXJaqM5I~Gqk88q)&rA; z&95XE8JQ_oEKS7pp6xq(x#9B3t#cNn>E<`)Hk~ptA^H^EZxmDtQ&6kFLuh=7d7L{{ zM=BN5$(j+ro7$XJip7Rv6kE|;v3%NTY9H3Lh!IJo1&8G>upqOHmqvc;^;ms#{c1Yd zhqy?^U~F{~!xE-d(P)A*5*Ne~$#FsSP{St8n2lMP)XkFFjBax^yK%8P>zeu08?C9V zRK$q#CaCH!>s73o^;jJz*2PsYBsekAay)t#*<4~FB>O2*`74O@aVjzN`S;$Rf9~(? z-m+is&}&BRx(?gtTpfR^BIJ)mFI~SR6?zQ)f7_sm)yr0W+NhH&mC@=qYer>)U8y>= zF){YZve6+9X*T~^^Y1^?p7gY8q!ykNEL*PAOQ#e4Un|jn?SiaN(YbmmI*yu3-j=kL z57nOeWlF!>pKZ90w*O-_J*Lsl$9`(F6tDeXF-6ZJvRXY@vKu!!wXsirqQ>G6sr*Ad zXN(2oX#V@vBZAPD@R7!%?P$aq&X`Zx06oBx}tU8VidDk zLS|!zJCQLacSm+NgOhQj)o``XJ^S#(Se0eI=||Ql?3L6wsOm1()G{Z!i{Y5-?@&pJ zuRk#>OGQ^FOHwl-m!E37w^-( z->tv<@>Wdmu$bOqgZ(_}w~4A5-rfYu8ijS)NQZG>-v6<`?!;xQ?4P>hrrM6MgF5C+ z*q@hNS;XoUa|jj_M9^x8LNpdz1gj{-7el>-s0k+(L8P+~67Pg4i3B0f4Hg(EkP(?6 zr$kj4D~RVHBMmY^#$bWL0DPsPF12_q0+4$GOT z&Enw+tg2>$PZQyHtH>i&+kPnv7h*mQCE<}eDRL@8glVB_RZ>i_S}4;MAxxGwj1q!n zk}^c_6cQGu{u0Hi3RS4H6k&{pk)E+wTu@Y)2}E5~Equgw@D*%6EIb}oOfb@iru@Gm zwDa;CqCTIZFg>}>XGVz1B!nYmcv+N0pdkZ=u*95!NQppXIajdYLl; zdZs^!iKisY0hRbv3v7`mNZmmsNXc+Pq7o>@1c6=eg-S8O0s{pKq=dDA6gh+x6Bs-Y zzyS>w7z}VwW(lPg>;MN-byz2%+)bSaMBsoK6d(*JI1nnRC?+si;9!F5vL-Mv;DCeG zfPjM;JP^P^Aux#GfP)zXa4-V^$UuPyAaFo{FCu8b08L`WJoFAbh1 zB!d}QJ`8M8rk1X`t0QL}Le3Yt>By_)83ah+t=gh5c*|TjTR%aaLWl&s0_i^#3ObF> zue4~u2x>xXzVP1%|H>)FRt5;5Nmqaszzn0| zL%&-1R*&Ni7UsQ-LSnwd(85mF;iqj9{qM9qRKME}gSR65e>v{lO*^Q4o=LZoprxXY z#RENHV7{!yO=Db}z#M)Ek+V)oms8<@Bs?sD0MWt(H*@1}m~f3-5p&65nBt_dKsA`o ze4;yfb%WVxi_dOymo2+{TP_wV4O563yY+)9+4&7$*zVbz2*!Dv6AH(H-y(1_Nghq6 zX_GEFI4o}ImEZm}=kd*St%G&-Pr{m!!jkg`gRfJK+?xp>LDfx#VxR?*CTLgITrgN5 z^QD&%v;DjKj?(=&P%%+kE`ApZKER$qhsh88qKR6-Qx*QqISR-gk@}}KQ3`?UP6=zl z(WjF4#(^oh(3FF+oKpSL>~gzBr1t;-PqF9`;r#HN4rJ!+5}RF(IkpU{Qq30kNQP2Nl1ZPZ|a?tssblyLCqL*Tz@e& z;F`E;NEjITcta6y=OelrPN-IQaf=-rWj0iO2B^Z6F>VS0kh26EG}ea>2}p{;-?*aD ztY09QS_U+mmK*XXOivLM6tTW*^U;(JRoFDy6PSRwQ1$l6=z}q>+3){FfU`;!PXk#~z%V3nSFoZ4^2Qzc zWkU}LxO0kN^klkPom`34u@C4=!{UeqzaRktNqY@HB~X^6;2=~(z&e6F`G|}Z0$K!T zI$yxPfS6JvjbzVW3CtMkbE=Vv`tEKWBLhdU2Exw47|vUwS+tW7V8w>?j%~lZKU?L| z>ab@2hnCZ7k2{WjQ?#VrWKsHxJ~*wF@0YmlbBf%l<~V~`==qhAk{o?|bGNG#&=ABW+VDZ2YSeb1%+1aV~`aK_osLi%@ohf|>A6 zRw7l2k{lAnNUysiVbUL|3LYjkC5hPC192Cugw9Yn{n?*+I9kCydcg}pNe#7GxRn`fjVM( zNSaphs&G_B9iRrMn%SNwhvJ}3YrKbR*h$=-rg9qy`aT4iL7z&h#EWn>zBnZMV!DVeMmnEJI;rvR`3M&b~( zHJjjEi**WB;B0V=BL3n$tbqD$Ze)XvvOA2I;u<&`ExQMNVZ!jPxpU+aO{T^yh|Cf_leMP|Zd+tO-*8f?3KQ*oB1kfS_~lo!}Lhg?kT%8`xOA^L#S5PS8p5W*Y@cTLUnF))Y=r9}b# zpi)Tb70p2=eWsLTp$4Zslo`ZmcGbBB9brw0wMlb$)$!NVuR;6wuYCvK?yZK&I`p}R zyUf9wsaXHJ3YXtC>?iN^`@+HZOZH;7g45iNE@?kRJW4A3t8t}^XRP}RF9Kql2Y5uea;7TP#J zkpjm#*yRf%q@4X00bfgRFeYxFl9Evzv zqMl-=H+uhD*r9=V*``Df#Ab?`TNUkR|I+NkwdX95DD0w9AK5$_=8z2V{V9siXCxpd zychPv*-oPhz$=i1z~V{&=k*rqHz*6QdVb$M6b)~X_Nyh5Svp0@r8}gSmX=;=q>)Bi zQrJbB1%ag-q+#h4Y4G`cXMXeC^T$1ZoO@@^y>s64dKYrhl@nO@f#oQEP$Te35fX3e z1KmS`2#@8uKHtf{RPz|M*uH+v=jxmbk;IBX(Zc+1e~?yGWn1Y1S}(v7pYsi3HonG4 zy9uP+SXETNG!Uwg=4~+}VF{k@SVCM05K%BXE^w2XxgrJGfa9DM%GGlYdp6TAeK9qE zH~u=ZiuFOns9}?qtV_F2`h_htX6+Sc-?T2}byad9{MqN8F^hl3;uhtV9o|WDwxk&l z%oM1wH1(E8f6(nSDFJk5j=E>$-Rz{xf42c_0cAS%z1;1R!-~5Tz)Gf zEcw^1jLZImJj+%;BgdV-)RFm^(T|zgF&$bL9ERmlYyk#3q;!j=cFlYqEc;u z>Oc)~TgSU*^2Lte6gy@Q>_5%ejT2M2g{h*TukT^mpL4{si_@tdQY+>4u8h)z81jUi z)$Lr%0Gi_xizLt96@*!D4s)l0#CjT6KqCvOpdbGR(m*n8gz7+BT^h)K@fipk!iqBU zb<0e!$_y?te^%2)bl=0f;nDBPL??WO<;tnEWR}6h_1xLG47M;yL|Y;lWH;J9V|O*V zq*?E6MYh7bW`CSZ!^p*BrrSr;EI*bg0lm`j79+~_idB;uS&;f@@WxaRfwBHZ3jLSY z?kw9xb=qNNc$|FX=?Lf2t6pqk&Qe~g!dpJ2FVB;5=`IsQ&IDEKr)yV9y*Q}%5uVd}yo^@7>7#Z;sjVjQWEQ&NC ziI>=sm1_#O-H)eEY)-y8VdzC{IoIT?MY^R2y3RiH^OIB%&U3AyXmJsbQou<9<(`-d zxl}E6%)px`N8CwDi#Ya!tYRPCO?tJ-dOeZlXJ>esRr1x`@#Q-r(SMcba-HQoX(!ZG zjV8+vls;a@iOo;=6!*+2*=V&5X_4`X?PCcSNAVTcA}?(tS1D>kBdv6sMYSXuz{}F) zeDP_H22)5{ksl^V8e_KX-b%(>GBAa*smR~7$+iP!Kx85{r`b={S6cJQzC3323bd-~ zz~kFw>iaYhj?HP(k5K&&@27Ad!&G7F%pcgzSed5EFH}A*Px>x9UJf}9ig`ejrlRCV z(WUev9;D!c&vO8EV7#ly>BtM>LjmMs9z9xgUJaNfzv3OG^r!IGa6kr~UUPm@A~heU znSXId0j&A^=VE#HDX=*3LnhEYDW2<7JQiJeg2~qfDNX2 zkwM6y^ggY&@JLtWm@ENb4M<2c$@|e!Sfm+O8zHe?Gok(NQ&jZ8{L3Y-{o-vm;o=UN zV(Dl#U}<=3tp&I^fljR%&)um+Ns4vysx+1`{u0_+tF#po|05aHoty~BGEBJ9TsHS)YD(a93 z;`@S9hd6&B0NF0FO{mf5evmi*av@ixM7oE=VCjpIZY8G?*@JE zjbfu>CcR>L{B|W5pqapv`&1hW-2WNWn-WiLNA*Fk!;uSwxH+8s%bi1=<@n*fhfhXH#9ri)m!hX zupIM4yExy;-e&%E7M0y!?+k&FG(qe;8Dj#Y&M31eU<-ME*OJFgCvmRzu z`3a!N*E+N24b^k-8nK^lExf1BM`5BngRFBCoW|JVIilAElP0Z3wZu1$E??wa_<~dB zboWr+CqG&`N?@#OOM0FVfHdOfg_%u>Sv#YduCRHZ3SzHmeh=*e8MS~#VlDehFN}S* zf+i6(?Br9Ls?+3JOd$#Dn9Y8_`~l2$bu#Y9a&zPxxV;N zrRzkOtbkb9Dh*+fp2EFswreqQa>3s({x;}Xy*~-2Ypx8VXwFUq?di6RX;u_xP0LgB%Rx4bzAKZsYk1-pq^+m6 zzf~#VxJ_OoLOHo4`_>=bLO*)j%xn*m4YRMs#H~C_0$t6yz5CWKy6pF#Rnl7V{~6%- zQ~LhGS01r|+tH%}bUjE2aBx4|?P%ccq}mEvo;u78Jfq{~`@O^RBsOp-zBGxvdXXj- z=XkFCEN`s~D~4Ly!~gsCUIcnEbbaifV+pLhrCYB+7e(g*1p+;QekFi67rU9?S;P7y zFft7=RfG|825cVHF6%$QK;6&l27<~!X=;eZ{CW`j6N?BUjA6r(m{42_5ytx)QUoY` z;U?sbY0>9%Mem0DDlr$}xtiG4W4`$oJ6;%IrdhhV^lQ`T1!7^HKLZ)35-~no1Y@

    2UMDPuO`G)tb@4&$I&vbg9)8N9->s}0g-@`h+D2BS`8G02j$QG z@`V48zo~QlL(w;%v-jSljX3GPtpWNG)E?xMsJ}@6?P-Ujke)zM{5g^M3G0r8M$+>L zfPXPe5CE&2VdRQ+~%#fmBYOoM9bSs#R#jrEB1FAu~!42 zlH9BYtUL+60s}wH@)7$R2g-OFuDEN_#xPZQhMq*dK}=+U-SS}Dl~K(?{gMdX9f?Kg zpmfJz6mBwImK;qQ&sW!NFV_j|i7@2W6N8=`43mt+kmY>!VOTVqcNc1^on`i1>dDKd z1m>UhkyfbnnJs!C7QH8g=;ro)Q;BJ0n&c2>^LNzP0Hh=r3tRlHLs=F|2fsyet37!XE8tE~6=OGJuk%!$8P zMw>m!%CW5XRxu2xr)&?)P^lP3JYE*e)kl7`_gtk^%BqU-<(xb)7UZq%cbzH02&`0V z9hqIdGaN3pIdfFwIL`L25ZM<>NIQ97P!C7}1(~=_?ZkkllIwz)@*R@3nUtheXb>39 z9~sSFdt)Zvevbn2;+J8|W!$R7@LM@zuI~Pa%=)YhyX+WrC=FQ}%M!Miz>mp|6Ue}e zXb|nr_UkV%Bw>H}V?fPb9TUgpMF7rMi1p`^d*guq19;K+0uAmw!6`F30V zx4{BfEY1TY`8v3E9CyprI+GiDB37QY0M{0gceR{jkOhKX#id_FHF%y6>|))21;|PR z6%)H)WVNbcdJD7cJ)!%2hj&4sh%ZTWw{P#JgabjV0I6Z;~)h4f;$Um>-9Yk1S}VhZumc);85 zm)bHwW-}=-Z2VE*;ps0IKZFOD+3eS~*^ms5b6$uQxT!Tl;|hLLD>b~kxv|7>w!1m& zhu4aQ@K??^d2tHyam)Af97d*f*2n?h9rNue$axPkcsGcJ42oiyJm!;YQ}sIx(D>(i z;Oc0Td==L5|EvJ4xAJFI1oFfTQX&=@BK#rV&%3_jsBUtf7b*bF;$yz@y=<}lS%~rT zom|_Q*oU8c4O>ME{)b|#C;5?}iO=VE@<4QzmO#J1p?KDpi6~i`Bp||n+23`V?)%(; zVrC?0#_dg_Jn%kY@bGhHJ#4^~X0Ry&RKD&%gjRpa@AKE+Wdhga;h%HS_PN}u(jL}V z#&Kh8ij(#fzu&2?_yun)^DewGk08{s*Z!7S0iU8ktmg)Q(EK5%qwU$AV}0r~yM2FT zczjfM|IFY`Y{`8W^)AXSQlS_4idVNM4W2TU6qY7)JemL#170B3hbBI?RyzR41M#Hm zfX5xHK1G16QC-p0i72-tJv=jvk(Zf;u#`gSCH;?m!&l|lpFq!jKZ0@W8K3tx06DzF zzr)1`G)%8u3)VVb5O?eIqD;!83vV!) z>WGd7Z$&3dLuc~@@>5+>JiggwWUxT!qIkyAARUJD1TLk)R=@UT35NThlM$b@&d3EX z&sEI<>Bd9<0t?<+IOMDu66rRA)K0nXFflj3ecKHA-TroKS`|tGx?_R1ieEP)@82q} z&QAuc6S6-)N01jdgG63d*uQ+G!B^$1h8$PGPp?~*pE=~VYhFKiW zV8zqS`$0e=KOnq0iWd!mp#`4sWEs?@!DDB?S`1LP*1dEDjO)1T6dY=S^p>=9J1mh| zPhCFI$!L8DMufadByn*HZmN@!b+G_ZO6WQ5xf8K_~7P~qw(~p7^@_f;~aeAhK28z&> z{@&|Z6%6JS+>)W)du2u5p}vo6s!r{tjlKy*?bkg3H&o-5CORh!>+30nlJQOFqlmK; z2t#6Oq4WB^_Mp-|=W#HzaP9TZC#zp1@`H|u!bm;N@7EovQ}E0BJCpf)+U51(m-7(D z<6sln_p|p$`@yr5TpvKxR)Ns*idOfIdbr$ZHC$qJ3PSn~&Fnc3`89~PmOW*mcij)p znYmAOI$f5Wy`M|vy6iO2$018K34T?S&a5lN*Tkl$cfgguXUL3#qqk~f zuLZqY-cCR;e!7cnGwPrq5XR1XO{f$!MJ?q_ymBkp67lps8*XVI1YT{ejm?M0c6_^( z*`XrBiLfk!Ctr`oOMUj~a9@#^xviD?m)kKOmUc%gIT}@Sjce_w0u>z3RAmbI)pVV3 ziTo+2q{^K1aV?ZEE`uB4cjUl8NI2muMVw{@o8-~lCT0En`C6o@-WA|37pD-ab`jpywZk%(Tf^^et0P^pd6k9fYZ${dgRF?Zy$kMPx0}2->rr?P@h#896ezSia zUqvk|*}T@i`E7<;wx=TtW;?U9)Cbx71MPSZ3i-erLiMH%wnq4Qt(YyeFfOZtVr$p) zd~4s158X>cSr*vz7J z%Ynr+-5&o#;d*_3KsXuY!gbf$#Y3uS7;5tfYv^VRu{5x-gpAa@%2Gu~R%7_Ihtr zq(lG0h9|ASdT87kg}Wen%lBFkIQ5dF%MFEVv%Kv`YYS4<0zt{fcbNS$VVh}dGhgk~ z*AkF2nE)l#OxR~6d2YW}dAg1YXirY^R^P{^+HMF}M2O@_scg;`m9^R@N- zV*#}ls2;r=HQglkM>rf#dYcIo%CYFdQyz6!ANH{Xu`WK;rFhGBQCfqpdLcm&Q2`*% zUh1#P=HL)f6ms-%MD3DrFV;rWZ-{ z_)LA(cgceJPI@-H$V~6Duc*&?<#R}Q%#SfPk~3_6;OZp*=j4z&t-EvI&9%2t*{5D9 zSi@>vUi?7SeHD#6@DpVwY`MsL{Z|=&P9PufZ~l0B2}T%G456t|{xmp_UnvtGWIqMBo!#!l*X* zcm!O;{HQRc$z!6n=YPEz?W;U!-;s^(MAXk< zK(ke4bvCTIB-pB1S9tdl27EFHM;jgVu zEsy&X7Fr=Oy>iV$dw6-wOYuO3K|zv%ZE>Rmf}g=H$0v2L%Ln1zZ-Z>t?G(rC^!m!{ zU-%E*FhVX*xG-nxyv~8EWZXd40ontVfmrW+L%7_{hl`M3gPFR-kA z@oX=>P#)l9=uSlZ7ukg$IAV{Hw4f;k-FisjEn#xnS1=RyeSQZ^;&Gr2(mnVS6?)}3|E&PV2Xsv&m3kyM0X;yudrlLy26ns}9AqC6 z=PHlCGXPX3pe4E#UD>hnHNFv~)y^gCN4l15aRvalQnt2iHFU)*+}(P%D{=a};nxr- z9kJ`cjx}kG#N+R_5hVZL1HYtP)c1TQj6#0^qe+&}|nD-ZEOv45oB2X~`K0y3OdwrE7$fuPZ zr@(2iJ7}y|%N`yGxTYlg$A1LL5XX1d@s*Sh_!azSb4wi2Z#-6bWgGSy%@I1ksROmU zi7WBVL&O^|PoJ}#o^8J<5Txl)Ik9|=jg-I|1qc=I5X}pelIf|8R-}a&zO&GTD;;7ac)`904)5mB><(b zTh0rUGtQfW`bDC9_5O65ScW7NDv<<7wj{~Bh0BYYJ$`U%AZ*$Jw1JCHxS#TWko(P)W({x~39gXxm}jy|M2c|Znw`${ zK9>>PQ4FfWq1=J@?k#8IxLVbGb(Y9DKg@^G^qOkjqUt-K z(8$0PD3AV!yWG7dh3i|wbwxxUy62z%ORcskCe_-yK8l!ZhZ+O%W~-=iiK5j z?yp~ACpJW(UEvE8ZeOLn#PdvgQ?2braIFKpy8rXjVaAA7NLaO<&PbHZv!k!vODuuU z)e(ueK_g%vZ*ExX16*}AeQB|tfg7(; z4`h?2+R{PElpN>rxkq!o35}tNA*)X((&^=Kd9_WQC&wL}NtN|Y>7d7sC=+}Ifw*so-M=q{BTLA9_TjZRqSUK{nFE!5sG-M@QB=nr4W?6>Cc zvX!=C#|QE0zgo4e%yQ-G))1KfPZ&*h(-O$AE&MZZ#Cv;njR&;UuA9^kcbGT0V&oZ3 z_L1h<{ZDP?Ac6k+c&9vnOChcBnGqxj{y)s49cH!fg4wC3UMgXu-4!8aG=n2i06LfR zZ?dlDAo8NJGWJ~qY?~K}+?72?dw3$E(LI}VxSXJ!n%@qZe{JudrA?3Ez75pqV+tdO z{q7z??v`@b+NDp@%QAQlCvF`oeDcB<=V#Nf0QFzc8LLmFPeuV;jTgET4Luc+)W6|t zB86_XRBFnR+%NBqrVcUzBUk#z_!2LNyCAOr1b-{lg1L z6iyOVCIFnteM}X=f%QR1FPuGHzD9z%bwmWV*Ovp69h#z=Y(mHQb*%NstVl-5{t3X# z-!dAM=->?JV?Lo5iJx*rCc`8|DZ=I3Pb(QDd!lLIY=w`h1!XYajE7lKKQkkeeuW=W z%`xMHic)%7iJ7B)n+>HAKr1Z%E9T~;v2XwQB4TqZ3-)|AnG?FTYQKWK&VV~2 zmT6hHj3-Lx1+r^jy+>nFOYET8b(N$A5Wg#gfur*=?+om#9c{-Tj@9-72gG|H!{eMM zLrSm|9YE0@byMd(U?^IFP;-f?K2iyzFmD#csxUPJmtmMdAqjUhGPZSR0@`N-f~z@TCBgyggr%|*vs(jS1@sp!sb$g?X(Z!m~&W=tDv7IQ~Hw~m= zRNaf7d3oGW`FNBMo$`ko;vY+)*#H!oTZR9n;aiW|4EWjb5`_v&bvJhf@HtL(T&GA7 z>BeKx%WOMPm5z8euNZqPfws^L0M~;9l3UBSUcgu8+l^TFU%CXEc-QSd9-!=`!5P|q^^>%FRW3!|E_gT9J*0TWpX-q9T{RO*;@e|?l$s1 z1GFzN+;7S3RyP;Q`?h3`Wy3sb^srY&^WgZ*w)%r+(ZWE(uNOtnHM)_cnlk{3{ZBdT z@dEsX@WT4B+>5UTW?6BTofW{7s1+?PQD3I$z6Go1fEfT#`*7SJxIRHmxp!pJh8M+As0I6+lMp0ZOZUd(kI5 zdl8^otTyBjL4>Kwe_cvm9NqFWTn$@~pK@S=B2QsjMSxKbYNg)ZCW1v<&qS~__L^)4 zP$6Vfl&@$W9w;AYo-MYc*MKttA@cssH=?|A6(bMD>?QR(U+NnRc0hUxk4Bw2g%rIu zw{iwu^_Z>7nTP@N+_Kf> zj|@qquY;({_~@!7YyZYLEJhcng?;+uE6nkTRv*P}Yodv81(X$3GCPANXuSKY?Y#CO zX@TH|o6SW#LmR{i&8%GOa%lZDh{a?PU5g#aIor&C$n@AhDT6Tli)Uk~dP$ z`IXo@%9PUgfV~!8I4697Bch6brKT8H3!i9r-(&I4pwr`TOR?8d^u;wBs(~lldXqSB z>Cn?)hd(fXR+=qZ?Jg*Tcdza+vo|fBq{k?AOgMgtm>E(ZRD!19V7ATx{&+Zj!O#)~ zK9S*_kj?^32ugF>RVaR@$}gU4u2ItqRslmck|?Y`^y5|pVXTlVy)uP*%B({vwu>^z z+k?S>u{OiMZ6b4Ei4z*e&nIOzO+p);mUl#f-OmW!HF_3rVnA+A93EJmsV#F5e9}vg zwip8s>YMl4x&5J4ulXfNI%D5I>S&EO$`%M^e*l_c4!*F<^3icOu6g=+OzjGiiGc=$ zce;g-@z*xO88vyknQc0W!MpYU89v&Y`sUG!(df$frGX8IIld}s!jrKaiA+{AT0!He z-~Q;=_)gT+_}P11C>a5@1xia!aTJNeQ=T>#{6Z8+TlS;+^Dj1|QQYSm#%g+D`U47u z=m`Ap-943iVQV{4SEToCl(hvBWV)kBr~)nq+&L)p)mY!{H%TpYok z8prST{K6!;wnp@3$Fc_I>p(Z+UllA-J5kn(;+p9>g@)cVphRrj04o|UL+e5b8*miC z9K;n*?dWt=*X6H~`2wp0{%gfO$uA=9bH~BFf$CogFumUaezdU^2-sTW!ieege%-i1 zt+X~uj$3r>TAwlhMi-CE`V2dejiRwQ$38UmJAG;-X6Afe{D!|D-ODnPQlM{Z?#Skg zldJY~egPr@HwpvcmCi%(8H@V&yI&M1a4uh9rKAg@>F1D$u^fQ2v-azPYL=$L4H!t{BKYx4*qctV3`!FV7(SD@#0!B2V*}6))4j- zn~=4q8Xh#U6NPS5Kn%^~dTR68GH000Lg;x|ysM}?AI|&V<+2lXX!!;(tzic!zVtpJ z6%z$sR6OZVeNAyu_4#d%U7r)>4=RXC_0`GrTj^S31|kou(Q&+c6LY?i!g+B{E$)&p;$>X>n!K!6G)#@(!BP(zDULb8D-K(0vG5u0zxXVVpgXWk)=;L?35_$@CMeuI!+*DXeZU)L7fxtH%I2f-@$kyrMK9@+oMl~Um}xd2KWd9NVyQ;{U&>^>=p@fHl3o@%+| zHFu5zP|RsEqA-<@uI8P|$AL@PaE$&J4T?r_6En->h0scIKwkO*_z^{8W z7O~}-@VhNv#9WH;xyamA#}BN>S9m(?B|o3{NWA}*x=b0po(J3;9n(_tVjM0@EYTI@} z<_Mzv8fa%%(TtOb#;RY+IZ`qA;q%KeU+&+Y`YW0P_>2nWQ-p5xZxbNOSj0Sq{|!U{ z7^Ilu2j~1xez{*#_d@on}cTV2|YB6HkJFPwm|-c+4v<|qzk4aR&P?k{F)asdh)ZW0 zMKaCMl0UzYsZoBI{=!$NU&!7y0 z#$;NIqN;wf2;gJnUV3VmE5*-tpu{0C?hMfCy_yWl; zk59A+&=*%iCl#IIC<8mCxe$S5dSXNZ#PdUv`3icr=69fs8V7|d~+Rd^D?@F zw#L*~kSHSzZJo`W47Y$5Dl_N6SP^$DwL93vq)XADc56ac(h&RH+G98->wiJ%m8}U7k-_Vnv z6)NHW&{`Ley3_ZnPNs-mOFS9j`c#WQq~_7oyvK^9q01R7ALq1!9lVx?jOt!d`-?y3Qt zr&*gD+(>hp(J0~if7kYaSYA94o3Ph9{*EAT?jkqyjKV^AEX`g~Y4TKBrM4!ti1Sil zXt9o54a&5w!dyPhIekEwiOf-L8hW$#&S_j~LpuZ%=acAtvo9|S6fgR?7+kC8nBzW5 z6|o%fU81;jpb}nxWw%*m@qV1B3a-$#UZfOWswyNWHw)oyUg={vRL|jQ7HbiU5H-wV zE;M9ZDRHl3yqN#DJPT3UBxR;Ee(8+Pt%Q3hUEC?e3f=M5GTTDj^h>lKenqD;gbO6) zyK;3X1JbuEl zMEE4zT*VY`mZ(+zF$KV!q*g)`ES3#vk4s8klqTTVB;qiYdx`< zdh?1Lz-v>U6UV|XYlH(v@7q!Ezwo>JIjyxTmbJ^|C&N(YW|%l#IN$ zp!0>Z$~MoS2(VpE*yXYJr_gIikF%rT6cQ4ttK<1ldnO)-C&XUln4Ic9=bF3vTojn3 zPlO&P&&`1~Gcx*m>U4Ox?YO)@Ca&lExwS?Z8wi#E@08q{U{-<%a3irqPUG0zvVV;* zFW9&qI|beA2^=Y1%lI-wL?A1 z6~f|b%rIutTx({pncBjD$9FZqddHkVbEjK%KDPln;0i}jMt(Hb3#`~6YF8$kA5>Rc zfaTSBJj@&z%sOV!hYb8=g+oWiOHJWqL2*(X+ ze?LmaCm?IbXT>*DO2v4*PAa1o1&nkA<>9~DY2g>9{-i!}ukZ)OQM-O6Z6$&dijlIe z22*j{R$`m8O+h>~;2I@!hka8J-a0EYiRTw@V1L%EK+FwCWnqq>=Bc+Ev;h%fxz3Hf zV-hiJ@~2(Xe-f!On8Z08AE*$v^WOLv)zgp{#Y5a_CICY~yuU_Pt92c$H&wj_pWc56 z$^pbg_%wg~IR9+sb~&r#3EO}a4BK%4-T7L2{P)Y79&XR9>`G$nx-D^P&Q7hoT@Jr| z;b{)Y5@gbbVm`ggQ^5xq^#m}+h2OMbsE7c))6pCTn6S4*qqvP@aWPCRb=~IOgf2C1 zFF#yUW;o7GLPYpZ@ejD?b+DeLvDg!cM+AlsGdZA(2cAb=gL8WYEO9Gd47T|)w{a4$ z4nc5hx~W>?d#{>nJIb(@r#_EB@YR~vm}zgLz9^=7a$_3^w1`#|S)`evv6Kkt@FdwR z(%}_kAv34$cxgX6h9NIBtU-_3li2EX7IY60E zSo_)x_wK_pb7k?`-cz$EnBV=tEGK8c{eSSv%7TEQ(aiXV~O~- zvi*YKCvEswfm0Eo2*V=b1avi~FIUWsdlrnFli9NuvOYOwum0`ADImg7{vDewF^|F- z4DgdM536J@`;1!-?V2WQ7>cW8mj(OFP-9?5)dtqjg5k1@?cue6x87$7QQ3}L`wiG9 z^g{9+_-eLz<^_P^E?U+2DR1$95(Ys|rlV(Ae6j#uCN2^yoJ);U%MN9A=06Gl{k1tX zkAbhxCq}exAHO23?}gO6Wm-WpDV&GEOg55H1l+Pd>D@7Kd`tKFFgpiDR8)81mE@_D zO!`cihr2qSH7HB3V$zn|0eId@80AJ1+|E|pO?BYR-_R^1c9I4c(>y% z-uhi$W&w^eG^X%|%6m(mtd5kqKf^h>$yq4s`F1zcvP}$WG1LTKo+zQfszM|4P#R*& z{nv&lT&I7RGKQHY-pW4VSpX&JXqL;La9WNrX>uwhhYxmiw1aHXhT)Ax3i0X7y4G2H zh!?SN#?QZV!>r#j+Rp^g+oF)gdvBsK2D7wN1#kQDy@ENT_OV5xof@{HXns1tdbuoP zsj~rsB33UsE$8vdwR_yuh2Q^GD=oRiQ;qtiDNAJtL@J>-p)YFu@NI>FLJ^2misN5H zkcWa_Hxtmaq*6dCJWTqE$T8N@gY%L*4Sutov~K+mNYx!HF--Y<+>IC_B?M$kSso|& z%zh*tlW7@pSRmT*8HJpH(dz?K;r=;u6wJh`>`*H zG8P0k$MD|{t8~nUY3c+hxM%%nNjb9zy}8XkuJ7?0Lm_=SL(Q*f2`0ImKcai1&p~P1 z(>5>H5w)dZ8Q7{xN|o|#erM()K-wTjOb<+T&W4f2h2giWWJB5_z{Bd@`Bi&H?jtKl zkfl1!GOr91r2^FI=JI7S*VKnd(WBiWIEGeIMErWCwLt>L!1JI(PTn~R_UbGuR=)p$ zPbVTE5M4|XAOt0gepGtahl=vRf@HpaWe1ZR>IFtwi_}GG#~#KC0TtzltPaRBn6iLr zOg4H(*#KQj+NNuEtV`h1w}T@D3V9+%*bGmHXHm4NwB#~Pjxq=^#6^(vF>Lo1#vEe2 zyXIdiPBsV^hmsXTEo8(BFr$Tm8M;@@XDlw{HDbT$e&H|}D;H29gp)L0N_cw2lAKIh)WM3msn z_uF*%4cR}XgDlE8R8%3^<6OY$Lp$fn6$K)pI0oyn_e-2DNPB*lyu?{dHs%iY&W0L` z>^&$OmOcEgh&&jJN_5wlpM|OiW%X(BL@7x;Ihu03FI2!5ROd6Crs^bBtt@9Hy%GJ# zN&tH9Y_jv}M1Kqw)fUM5>{VUcmOY5HIdww+v+fKk>erp^89?sYVFXqV{HABZGL^o` z(4MY4#xH`FMdt-QH@nc{uf*TUgd9JK3sF&uNi8JFN?CM=;eBaPUdmyJD>vV8ufTgk1#|>z&F2e zI*E*B|H$h!TFnmhR-p*Y`NepDnkS_G5a;Fu3(3<)SLRGY>44DQQ*uch^3F_unGGO? zzjpt}|E*rjf+QR8L5X4&pUWfs#-`?PR0ImF$NfSs$9umji_AO!Y=z&BhxW`3c%zzy z0zUwwxgRLyi>*=M{1kkhUm4DfP%>V#5uRQfpZ%s^brh~~w8v&KpS3KD3%2>*O@u1U z6Ts6L?)v@C5475~V^ghLgmSvA;rqxHL+myCEoJ)n_HBoG0_h^(KJ$SFT6BRRaJLoY znbl2eiLc|Ojl#9l;=|=7@ybs&)vAPl@uE!-C})74r)Km|e|wE;2qm2-;37yFj2q$F zaohW6145~`(FVc!fKW_<2wOW&PCr^}(D2z}4kh%w-;=lW>|tYdmtda2GQ^!^&=W)K zN6fvCJs}PgX%UkC$*58STF!NGzI`i`(?Lof;=y*SV1x#8FhkNWm3D zGQl)YAl|ex$Eku~FiEk;9yBUCDJ#6p5loUP? z@a)?&2MT`$MRj~5?^VYAzRXoGt8emcQ-1j-PJi_8_43!5Xglq4O+odSKR)eljHbTh z;M8yGuaw8Ba}Ca1^J1diZ!D86619@w+yjVn zE~>nX_Pqp)Fy+!>V?+E(Df20)Ik05Jts`5TBfgVo4&+&?haBVZ=|?o_&W+%DMa_l& z<94f`;#KL>F0jUF{JXWT-Sp2(ua-Lg{4Ci`5)x+t%DDXvO_7)&t>8GRBwc~RyrZ8gD1u}ml zxs}6)Q^}8TkLQl&@2CBXzPf8U-nUhtvQ7*{Qw6H06JKS)(1Udl%e9nYOHh2JrFQ_S z6=<8_VV)4XCh`johOP4zPl5uUB@nHU%luxc#y)iD`(PaVSd8gx*E1ppd^fj=25~*c zmt^Oo7;i90y0OpxZ;O?jAUVT+z>w`G0VC2*N~QL-5$;r`{nQO$SF%siXCx2U|GK-v zYNP&tu#F0Q|Bi?8za@tf){^}2nlmLHPiOy_@?VHxz*|Wzp^J50ngD{oVhZYFO6spw zwZ#>*c?xB=>-ZKnIA50##vL`r@lR*nWRc1=5hgseYqWwvCaHQf9JMUg6{?u$LdpgL zmK>=o&o|tY+XEMbXNtL)R$_sCvL@=*Z<*3`>a3~a^`aoRnioTU9%N0Q;xnIJ)=w%C zWz#cNQ?VwgyTc6LUA2*Z>`Yf;xe40x@$$SgzFXdDWK2W#@ssqVRag19D2Ie7eY0p* zeXVH%VtR>$R>uZXGMu6VV4GDwG93FCyHe^Vg2hQ{+6CLf!wmllIU?p|+LE0FqwIA< z$@qLY*U$<=qf+&?#$*4I9q75cIEhM;&o9m%a!g4GiHrvBqq;kI-LbAj2w7v_CW zYTne(q_e|aO`AW!eSEZ6Ba=26+{}6eZWaN=eKxZw#KHV_9n)W1ved>NAuJX!4*FCe zKT$8-qoUcPwArXemE-3q){^m6djuP|HLeEHd?k20_r{;Vy!v+w2QsPZfQ>5@a+v63 z#0*UN-is5zAxM;@;X(LTBOR5x{-wXmO!Xx&l>>b_U8uk(8wy*Oj{e$osX>m{@wOVx z?ElGpk5{LbTVb?|-hI+#*27Wsy-@YVq@6A!1?k%62P*B|ira`4vuLJPh?o9!b+P%J zX#4j?t&L;q@y>YDyJ@A%>_Nh~xWS~+I@QOFbx%TzT=QAVrYgzAjZ4Dmu83)an(`ap zA-C3(Tf_06l(KHs1v|0YYnCbYasfm`*wZdR?Sge5w(m@m9YPmpj$G$OZ?P!uwC+BF zyIB2+Tbx1@%l)-Rj{q?`a_u~sdJ1>3gD=m2Gl#k%Y$!p~ZR$dt$!ejn--0#1##aE7 z@mG8wp%5gmvzyw36ixxyVV_3vZD6DMoPMRq$NM_xae zgQk%J=^4`dMZeRL@%;*R5wjP&tbRhMp^1_VroW$8E@HL6Tl(TQeZOTWE4N4#XodeS z&$U%gR6M#>Q`2>R;(#YH#&N``C1@)DJFN>ciTA&tP9Ig&5#z0V}9HK9UO(VrGs(jNIh7M!>!KxnTg@G-*hClUBN?et;V zQL6bD(RPm8VC#93z>{r>k1N%72>jl>E4RfX&knWK!dBRtBUt}5F!VPlu))NhAmE)` z2VuG++xD&DEJ!66N46>e_9`^7=r28dhXUfZe@gWPs^xg;#noZPGN6DIAON-cUwm0L z-`FQzdf#(c0akNc%2|dSy|LeG+{n_7*}EDt^ASSn2&ri4S0k31|CaN8hSuft+#u@Q&T=$+;p#64)OWk^Ekg9XSlqZpc`_c zUEqouuj_bu>yx3CH20T(y4j2Z9rawd_o9unXn4Uye=QxD0>k9;Co&bZJOC$O2w=XldqN+|jEbfd~pvUBQ! zuQVpx zy5P;B7)&JVOc5giAJ`HYl6aAF-#L1>TR*h*q4H-|AyPRVLNYDcSFr z4R)k~s~ZlV^4slLR0+MBUcb&yYZ_9i=a8O!oiTASQ{}&h%p0)JPd+@^F$!JXw^KQ& zjImttX_=2&|NFiC@JCs$L4?h!lDp^8kkFW<=-@1UjF%)^47T6b96Ohc^U^)ohHUg3 z{2#^xz7o(uq*;t_BzdI(nRz-pnT_?oV{PfaQ>bK3m>ab(`{YR*jb0 zvudlZ3uoai>lP%}@>c#@AEU2H8W_28 zP=a_5e&OUWgq!94F# zDm^Y-et)V`EFLHmN*=P780#;|#&I zQwHVglfDTE+|!GZ(YYb3a|79#pg6RpFiaoT`;OAkO5UnaRZNH0B(xi?D)@wJ-A9WZ zpBq1BS5LvoXljfx($T5&(s)+Z0Ho+t*$4$@-~P5Vl4roN$`Gaw6`CLxDkh#?o11Dm zv^pnudNu|2Yy=)QoskV()*bL1BDWcEYl^xlxUn)Kj35;$1fza=(<`j)+86sH4gTwv zUW5K<7O~huef2mchcPhIjJ3E>DolbdVkNIg^_CMtu$Hx4yw6!(B-+oW3_b#k@g+_< ziiHalfn0xDDz7!#l2%myx^EH1%y99|cGI;W#C`O&ABAE7?bXjPt0ab`*Br?Or(z){ zcP1+Mk_NhmX`4BhSBFbGM;JR#_gbqSf8aL|Y4fP4m*6 z8CEC6DaVZ9u|Dupyf5|-o0^Djm7em0G*_;e=6z^3X3|gY{HQp14-w4q$6nVD)i@n5 zfU>}?LW1fTn>0Io70$&nC*`^;-iu{sAWGaz3leyY3a-Xj;H-h(b#J$tzTr$SCElt3 zSPFOLnl2sh7Vc@sQ2=p_G3uf%3AbbR!AD$Uz^K5(x^cS9n$|C)f3b+$sDCj+K!7~i zJ@4nMQi_azVX@kB8DDX;?*amEkr~`W*Z+k9z-sprA%0W+`le3bGfvOrGmzX75mM$(wek+G` zdN%&$UeIi48WdlAxrFL;8gH30^^pm=Z#8dJGyI7Th@@7dEv2))ElQ0hMIG46O8S}9 zUZIEuQQyVo0=zET-ZLD*lG~+d^nbvVz{o1ANQi)b=&`1T z0du@D9qSV9@>TseF4OJRnUCS}o3xqX7t~@l+U`d>> z@KmhWaN?)`oC>{o0Y^hFG)AINm)!jL`q%wcvX6Z<5`2~3BJ(p4v+&254yzuR!hU_9 zwdJM7L-h`Mu3@0)j`UR*tH$Xss6qNftqGN5`qPzO535q=zgCfx$>U8T=m~9;`PxPz zWW=-1Xl6RX5-DmLEC&z?3||B!R*~ieilTBhppQgNWAA#>o(8W?WZAfp1-V#YP@|V{vaVc}dR?RO*bTU%k&6n#~jGREYDn)(8BBEqA}; z@0=$8hM3D6r9q#@vx?9yGq$SIm@|sb%QcagD#Fp=6`%gWo&hBp%!+_p5N{cLsw~M@ z$)o4QIO(FLwg!scxZ70y2TQ5K)U3pBhU8}=bRgK+@*2vg4K z%HGM&6J_+6PW=_Rfj3@>I5Jldp4sBAvQ|9K`nSc8XglPoIJD^|DSFd1TTD~Kgi-YA z#~kgCOLI!`uaG8kFEaT@%bL9m6C4iJa3vQGpJ56sE=ew&Y0hQ!b=H2qa?CWswQbFf zW7!QZR=tZ~taMkDkT@3^3Hh(~)5$HEM#&)sIrKzUN_cjZ@SMa=^E{2mgBM!pqzS@d zl*78AZqW_z^bIiOGUi`NYT!psiscs?0Gb2l4Q*zMl6TUtjkjtKW(wD+aOo+FzRf9~ zSd+(t3J#*zu+A6JZL@xH%br8$y8{^6Ri*kGQ)QGjHKe6%dt_-hC7&-)xQ6CiUX-wT znTk-iGO;UNq55d6zRJ3gw)wAwDHs*Ccq@>C?9LJi7oNKN+QLK3U!k=CUBYVmsBAL7P|74;o1(9HDm z@2F6IzA#EbM;a2Q07iE6;33?l?w*C_p}f&N?K989@*XL2TjDO&2H**W4z!!hH`L{R z6gP_yH<{x9?%@bx)h{{CSyyKW-X>^{+>3F(!Rq0f8@_;oyC8A_((_92&K+3qm8T#7 zU3q6{B#PCf1Jd!18x{V2+Onr66zyk6SS-sJx)l;?H3UL?aBjj6Ngs{wSmdl1TrK#A zMKOKea8dfbYTQ9nXxgf9A1V*)EKC=%@%9}|IRC+#oUX$w=S(Y4YcH-==XX5;bzdgr zk~*)O=6#k2GHC;N$Q9wrq znr7)dMl0{1BRF@wK`xi?PLuj1DMG2kUsRe74ouuEOVzsRiY zDW0bF6FmPUBI>O;w9>|x*rG`>N1W4-@hJwSpTo-wx_|3x;Y{^+`7xoqeZuOF{y{b< z_`u-mvX2QPX~SpgYpm*)y1pItU3{r}#l|}oX6DD(@vk>EHC!t9zAUT96tms>cK;my z6El&`u7wR|plmm*Q_N#3{dCHUctf`Ei}`M`Z~7Kn>@Z1=Okw!h}FLQ&CSbpJ0*u+Qd_Lgh37Bp^S1#yXwxz->z8q9Jp!WE(`r2UG9rYRcYiys zxqXXKbBgHn6RSV!ou(#Ue_S6MPYEO3liiQtQx8#?+7uOsS=q3>*2s>Ss2x;(Enc z-&#L{;d)^B?^)<>eSZ4azQqp$0`J6nUh6?L0$FIjIn6>zF5VD@RhLUf)_On=%${EF z%{qeFq&d45diyGnk=>cPLBAW>x`K=^G}C2izTv+&;P(~a(-d=$B|cYg?m_ToK|Wy;W}61RFth#PoaDZ0=jUgm z9&=1L#-{{Pa6$fl}Gq!&I7R{ki*N7 zw6WJOW3&6+edrH~ZlS#5@}>`FU~_5=FD0)kqaG2d4^_i|mpIE9Q)c#(o`_bFGI(@` zRtX@H5_jXkL(%JIrg2uMZu-CQm4Wkp@45bl5* z%(Z4cke6w#uIZrMH=KLTQ2%rn3K{i7D&|zF35E1kS{Avs0d1wP=QS#I_v2XNe+5$_ zURFZuQt17tJqQYD5+cfok{73gW-vO{UX8q0gsMnkD0QyWGW)wB;zn!rA z_&xlnJ;o!$hQX0JubX+RA&BAS!7Pec3V$(FFele43~B(z-lP9lD2|^7@#xCM%t z+=X?=Un+dqSCA=o1bKCC79Cx6S%U;*vby05?Tm9a5iYM3d zP#UYoun6>=gR)3F>8WL-Sm9>-z-m$5ICsP(TpG(h>-#}dxqDkOBv5?F{$=cMo-iMd zob60ec;@Ea0{5ujSg=?W&SR$3`CJTXIj$We ziar<|n~=Rt({=D)quN3|gK`F|WYUJRbl71*1`mS%UoD7+iDao}^|Di0;oKt@&f?-y zXYizzYDR6+CAv0F7g>?K=9<+eB=#^n7j3D;z(+plugh=s80kZi4+Tbe!!CcWF=}>~ zMo$ZH7~s++oSC1t${43@Pd4&`H+?o9)oL0ubu}!##<+3(^nP>G>;GjQ!P5H| zley!~$s;*_u~};pR;5kh_9(a!qweg75C4w@{w6q@_9L+^VuKmpp4AojTv0%bj%MY< zhybQ~g`K($qbVlwhRD&E%vky=@$1D{Gk7OO03fv`(gCy?1!6iUi42+=D)FpR4UO~x zsk2JgN)@%tWNgJpVzvsVQXI~MdGuoD0QLX{`iTQ=14D_u2$--bLVb82C^mfwwWkGdwLT@>_& zEuUPm`8M*nNP<$C)O?8xq5$EO@4BR;eS|cVqv2CYOK>>?M5Re*$2h!3RUg{ z82)0>TfU`}rZtF0{T+8xwg={3Im+T;W^(-9Dl}k9>|@}{yD`SX{a@8$1=i2P7pMVE zO1n!9u|l!*d2zz$0X6uEEWfBlV5V#Uf(s8;xF^WmPcje67;xU2bgyHWSCAv8ThWH) z_4aLF=aGN$j=>9sa`r5I3{iL!!@A;<>ypY4vR`gL~2CL<0n{Uv=6fOvpO<-~MV-}l`T*9XzKR+`HX z9yHCeI{IhC3HHl-{nV2*%xhzHeHY$5u%hCglDctsg@~DFw;pB-VNYE@J9B}A*OhI) zbBlY}T0RRcvgEBI|CLyQc*+~KILkGZugZ51YyK%-YBYzb`Xnm$?&P8a&A(+Juk7%T zZ(vPyisE**)vhlIkm44ibu`7q9R_bRLBc?v#<&eYMi`eL0bOVy>f6dG{;`^nw!R^;Y|7b{|$ zFMD7=+|!?Buq=s~B6h|f;sfx7NE}#!-!%zllT`rcsJ7PaDhW~^vM=;id3}R*nO1o7 zom$>hjN`n7x2aFf0L>NgOU5SnKqHh9b8-nai)Ps$6eU;Q_225f71qQNX0oRa^u_8i zex^bNcb=<^rVyq|hfU^u5v$cOgW>uKcQJs#IA1(F*Qh!>JNK zC{W}vUE;iT*)AO_KhNT!Y{#}EL@}plFC?EU3xFq60gx@F`c6${lqGica(QtR)!tWc zd!e@AAso8`V%~%_`0Kb_P0C7rO=q8u413@7*_hEKf~m!`UV`|clAZA8Fj;>`eUO!! zXlaq06Cz%~sdoz^nX1!TzTqAs9x?>YL*6@R{zVY6)Ol=V6jq8~(M_08$%HLyGt;%F zU|*GA^|Ky8KHo+iHmGiBiRs_2d05-*&?)iqTgO*L?RFl|pJ#cwdUHLG&Se1z>roq; z&7TkZ+!Iif&);3E6h9tV>a4M?Q|z2$SpP`?no4(m!@f3tSm&V+LCw~!2_Lb%ZyYiT zDS4TpiMZb^8VG_}nP9iptWt7j+}jOG?2v~_s{2M>r7(L|LSVn?g-SiaF0Mu=ez4XO zw>FH^m6`QXQOTxPMop0?%W(M`EU|+0zUJH5C}Q8@dodp+RRI-)7Y4@*wCyK*zkxyW zmj*id#T%wTE*Sldcgd*7jkYsUTE2C1YMOnygt4L3x%xQwHi9oq>3}q6kB?ov6|zx~ zngKiykU)d#HVI%g@vxz4e%;fvS3p(O45@1|=smp$s8E5605$rp1x)zwO}J~+-p9P} zn%m*k4SFGlNf9|zv9Vc8?=)9d-O^L#VSmC***$NY4XEejkJc^6#76u%|0{14eOTD+ zhwtfM8?PuUbHBufBuHeCJS}u>6<#D#>c64}o52Tk_0xwgDBh6lafvE%zOWS+^QeW= z3f*D@zjPFI=B;BW-;=P0<2j;Ycm}WUgCNEvBC~afAxlJzy2{}yy}@8&a~mHXC9Ka7 z^z`Re{WK9WvS(b~Rd7b%W2>Oj{lXw;OlH}_*v)^X!guXtr6}(8E#HzU`Fs)?q~n6_ zLfAkb8tCJ!PnUIba0<3XiRp*wZ^YP4e_F#VEH=W%lhpO`I1?y$?s{U{sgS>)m2^l> zl5O3Co9#!rZeaw$8r#tMwgN%UExflbX4Iqp^$~45Ub6kOR_?@Lcfz5{UmjCRjK{=S zNyt#mp<33Z_GW!X1ef2rv1|-NCzK@736^X=X|?!N0TlGA8BAeoQZT=i521Mc(Zrjs zGnHr!G*{*IBiKP4>ljwvzG9?1dZLJ(G7?>RXE4+=`*y~N?r+;m!lXoJhcr|B1Uaxj z@uDe%RY$A@X2TLQW`883Zx*jB;Q|C1Kd{*ou6LJex{K3Z0E>Dn?GSp;<0ji(4L_<*T2o#u;fPIpi--H4}{>D z;~Dk%e+QZOS$Xrt&Y@B%ef%kL+4hKS@=@sP468+@td@zKLor9m?Lo{{S**(bQk?nqfQ!fZn$pQg5qZPg z%@6j!m<@{@gF@~4oPm{R9=sD974Ow5o1b)-yXols=|edVxXa}_oOqBmO}{f>#DXpT zkMEX7n$(Eu*fE?Z8rE&_b=vFvP1@))8B~CCY!RniQv0SGW(wkj=;hT#PEv9=pbhj* zOD`jGLak1TN`AA=?jBM9JLZZ?f+%<(zj8AxU}p^-Yc?io(})g0&r492dx>*`T+Jvn zPLy8@Hry4(j97*AS6`@vvI6psVbdGXLODSGI%CMgsHCtD4H-t80YsN@my8BNAgs2% zal1=Wz*sgj&cmOI}d&vl@vO!57HKWpkidc+$&Z??DFB7M@7kGsve9qr`t{U(X#wc?pK7S zd8`T-CEBx_d|qy|*t!%+G9hhB-YM|}v$9}G{FYed(Yln9hqRK4H8Xv+(YB1PEvUms zo7|}@$g7PQlq#_>1^y$w-xn4tfP{SG7mltC2f8v_L95yASZ3$oZn{&5Nzi(w=oPrH8+`Ze5Bxg_e(6*nFeOaixehdx#XF!#RFhr(K|P;r7hvd6fl7F_OV*qSX0@Sk?N*Ca z1qn4*$Y1-qbRN(wHpHvwV44!w{);T4I2VY&9W;Ocd)6Won>f=yzvvU+zwDFpjMQ}x zw4PuITwO$apypVg2ew>m4;7CY!{rr-uwBbvy~O>sO`)}4!Ui2XfS7Fg;E9^g45hF3 zy%X!i>KBemACx!;neBfOC}Mc?DAwBCH1N;;zDWN5#oi2B+0F@U$+5aIa>eByL}SEA zcTm>*s#y@|c_eU4IS;6r|No-hMK*GhHr|@-&X$1V1C~H^LKtJ^oN=EcHCde)dF;HQ zs;0)S$?|0dXj5e%SE8EBR}_?J{_aI6er0ce;Styyf1z+n+?S!raFGfVW}E1UTdhyU zEdxti%ky%S)~c)(!m_iQrRM7u$v=4!E#N2mO9J10Ro)hKaMO9sHZJzs7Dg>%gab@# zb$-&exAFWA&@ye~asPQ%wicU$9shO4u}Vaz zWP2sb9e3MdAY8NV=N!9BM}nH6R75L)Y283>#d!eIvfe4JfwW>r$ED4pKl!==Vnd&( zWti~m@JSQdS`vqO$KJgl5nR*N%{-`bPqaHOQBs95h+rz7Xi&|h8N%STefGUz6aEN) z|KsAfnEDs{E7hUmLwtU|N@7utVIPXpjrte!c!%^XjJKZq*$sd_MV~A4D&SU!YP92N z)m3TMw`0|r{?`(Z18=+}kId1=5)#uYY!3_X8QenkL*>HS*Cy;mf@YqCQN`-5Eg>4O z5!mj_&3=WQm2|8#l8Vf;*wi(3LX;%)WH>x@0UplCcQ%SmzVX|oNSKM;Wn$_SHtSoz zV^i;ev}k^CdSG!!x09`G6v52Kge>mL40_yx8GbpO&SM{k(>HyA{416?Fm@*-8@8+u zrENvxM!sl=+dYXqp${2Iplio@q|M6cOa2v0OUl7!I=5I09;U-Ak~|QWd#=FATZPo- z>yfUH)EXuF5g4bbWaP!#iSRKh_d%qWsS|oos&8Jx#+SPQ4{&aT@SG4{$bAWq$dev! zl`#HUnzo=uU4{gqH#X(Y_F&8r=t~zfkNx%8pZz}bO^70^%76){sRk3@{Zl(L^W-MW z#?7R($<9ZcK9}0PXhD*FWNqsTqiD#(HL6BKN)7lyJ3Nd~;_S~cY3B!1IMYLnm^-B@ zh#}LB=o5b}zx`7YBws%J;kQtc1K}GvacuvhjhW_JpMFBpo3{w#2Y*;P>}k}Ok7b^N z7{J@%ieI~{CE?eie}85*U*~+#4WiBiA1VsC|L<_6aWR|6NWUU??Se0+4&Om|7PK%B zK&kJxdl~z~4!KJzwx;#tK8M$078hMZ)Ai-GSCvB3>3G$h*J88O!vH5A&2A^Bwd*e} z7P|1(cBTRq!DANySHtE9=9 zU*s-tQNF%JkT&FF%QWiPPz&)_nNf-^7mIdyKgZVmS9weL*wlDI!gVATP%)_TsBm)$ z6U#3ye-5kF^tw9E}2nzeRL! z^zznF8)G96VDFm|iqB1AB8O!2kwvvWjUJyF{)+X(xUt~eSF6L1CrZQ=CNL%!4M9|` zhch|uYOLn(Hqu;~WBO-Zf(RH^V9AM~F7+zmYb;=krsk)OQQbrJ$W2n~DYe__L7ha5 z#d8v;kZyw2sz8J9WvS}}`MG4MQZAbSu^@&(emjx`xU>@JRhX}ek606r zVvwCzW{~?#POk?S3U0zk-+v{c(U49(lhw4`#v0GHzcGx{e#EZshux?=dw!cveZ(DM zmdt)hbKcvi=3DbBIZ479%kBW+dTRK>t&pRm3A-qm0;M2&OpagYJ&pNkNNu$*{V#%L z5HG#FspNBOiz)I_rE2S@K_q!QR`u4ZEcdcjfjC0x1pv#BMhO z^WSuV_%lPGw&EZo0N;!pzdey7uIM}}O)k*)BA0qdMz&cUt`?;T@dm=D)}6#0%*~rC z9H!K<(|gBIhK&0qK%m=6Y<8h=DC>DqktkqOCQrLkQU9MZGg#5)#iYLdv#2l8T}NqU zeW+znUc8)pl9UVtE7zBJRpOIy{xi#gmfuysWe89CA?fLKsy$JNdf&x~eTGOq$-qB9pB zAIwo?q!vyLLn&uccanaP6k92PUfTk{xgj!&0!OVL*%kD?uiQJEbiZixN)@JKm%^R2 zB{c@`$$IStrFX`5_3;TaREtkU!aTk&^hsivc^(PePv`Mcg7;lar z3E`d?kbFB{L7I5lmJ|g16MtRM-7Wp~@r2l>_oKd#I*j>qtKblHKnUJBBju#E-R~T^ zGnYR+1x~H^wySX6ha*Tw8HASiq(D0owT)O8g7rg?RgH-L2x47nn->?xy|rzHt8yoO z@_*x5#g295icPyWsvUe%zi!hGZmpo44ehB=)`KX10qta7yf zVgl?)2kE2}5b1<~gr}0=){}luNZui6XFGgQ2A*=>Ed=lI-d&XxWP^bRQ#=DG@F(q_Hk30I z^5|mKvvv3+gyQ_3a@IWW-A3`UTcxB^{8}hbP!G7Jz+DZwcQNUyQs``x0!H<0g4*|< zEbKH5yW16>w6!1D4N(#iSh=r9wO|U&ZXsBTr1q6~l(7(ChYiTW%kklBGbm~ycsV;l z{aZ>ch%9G^Z?UDk2NDlJxCRhD*qFEjrT~D%*4ZOp={>oxm_s96gDu$yfde4+sw;@q zMhhxHB0L1ET)Ci(!1_Y=RP7e(zu@Hf2nt{K6o5pTVxsauy#E5ue~#jBe-tda7d(em zTiElRBcg5hg6#L|?2ei<320j~pn|MWf%TKd1sff;%;SPDCp>)Q_jd0{lJdR{doV<4 z86v28k*JbH>d?`N059V(vz<+ zAY*>r4!;7xcv9yBsFTp(!hqmHaC5;*D|$T*?+j`W3LzbFwS#Rd*5`&Omw701#0LLG+g*s6dGRl|+Aik~25Pnb1SYKtk=>p8Fy2Fa%L4>*#Xymn17mk^Mt4 zsv)?u5UgtEk!%Q|v4ymYpd8OF?6h7+kkB+hR2U+*3}MygiE{G`&^9cI?txnm z?eO8xRPcM5l`GWxlOXh2+NI0mozn}PdGMPyc(1fJuamZb`Fdv%o?>$uj^Q29u$NsA zTy0@9bBi)nv1ikBnFoHCZf(2ZK2vdIJ46QHcQTN0+sQqxp z{2p@G5om=PEZH5k7NI?N9djQgk8fmYUvJ!&vL(Q*b&btRtD6i%{?IiYhuNWO(la zu?M1@SkL=~P~5HXp4O8=7s!*j`$V5s>^_LlVuwAhIBGQ9gG=H3+sMju3;CH_WIpsJ zwaq&dNtx?$KWW=(MFvpoS5)clDkq?gcL(P}-vdwF#Y8jbQ1)c{yFF z=ZVBI2KCY0NZK?3hkteUf72j1)GYN}l7Bj=ht%Zh6?w^gHLH5~c(+XBIw1K_Mc|bHBXWOuR*SQ+s7}hi*LV;Qf)z*i)0_qU=OSV`{vGMf z8`&$8@EpFQ%uQ9ZGAc=WTbY6A0~u@ae;X}|AbI{YQ+OfvodI>MdPkl5&%KP@7oh37 zK3(>8FAK>tk3iJg)aZNmyH|oCd;9oFDPvC7lNaZ;khqd}_=#7hP*Vr9FybUnshe^h z#zHS^0u(oeR2;VE(SDyv)7juYBrpX*K{AE#=jLpiZudnU^~+5RL`V8V#`ePt_$|J5 zZj0!$Nlo6olN4g1?K|7uUn`^oTldLAW{nR#-?`SzYuP)lB*QX&#Ah*4u3aZN`>yv^ z;Y9uM)txFi)#--mY;MF{fS51uC=?HFhS`22i-Lx)+%xYK?$#;$rv0fafB%ilN3-J= z?Q1ugT>yqadB3v5*nBjuK9=ElSZRJN5d&%yULSUB1kcqfGY~4g0n!(0T>Bsy5T5pmhhoXm721-`CFI*1^)6Oj)m0oN8Hc4}wN4A zURAv&qwONH%yxFdCMH}upNsm#o7kk+lS%Tm!GeWdwPS^D#hmDcjEyh<3bk7Otr!Z@ z%VK)nbCXN>ohyy>50&9X&gRvn!`4k?hw%+zC}3os;3dE*^sfBV}JS4myVw+4b5_(MK{70)8s%D!l<0$aFDR$@J*p-H}47yH@gpge+r!XFiPx>i0beC zqR(oLN0M!a!=YMBO963B1R>GtnQOl+Qlt zuI$6;PRKp1y#8M}QyK@uBw5NRHbqt#JUjMoioT8}ne) zR{AY%9-w`ztFC#LFrYv=Rsa|yHM^?$ERvSt>vfXOyXM`F(0IYr4=ic|0$q$el0w2< z7yp$qrhcEi*hw!de5$+d5iZ#5{{OdCdWyig`fo(*N)*6^t^+{xcRykseJha}UqKMF z+9gX{=JCCFYMb{|`jv39v2@tn3*KB8D}LQzo`tPWeHl1jgx~nf@Hy+b*@yU4OPEUQ z;l=V>gF|jQ{nBgCX*yTZSqudFr z{Laxh4|Y-4SHa2kYACNK!s_RMOIkDBHsYsINL(M>uck%cj8T(w|HV@P%j4HY+iLX- zh9f4Xo%u0W&P4!TNls|}D=s`BK(L%e<5sNLQ-`?>3FqN(RS2y*o@`h%P`$Yzr{lan zMtt<@KF64P&ajNFC~G`vuUe{tm08-hE6+@>;u}*cE0?68*hA+2q(Um-<+K{`&HD>8 zuJUCLCe81J4Vg0CQ4x$4tEuF@4ocsrv+AzypX1f{mD;dl*V+L(!H3_p6GZ#i;zXYg z8`s*VkuJdShQWo2gLPw#_LxX>4YgahCvV>9a`?CVm|K2WieszjR3ER#U}E ziJOrNk>0*a3a`YtO3e)*v4&&XkyYq#8MoXa?7y|+{=P7dXD$AIQ1!2B*r)zGYIbtj zbllQH{Isn~H2PWs03BeJYA)BbMnJhqf-mf;YWfT8ZX(qNeb9o$Jze$xBhhfc$)i2 z3BvX;e?d6-N%cY<$5O76!}RptYejk0#`l%z{_$51nBs`s) zUkFsMx_Rc!DO$<@s+RiMO0XOHWx@VSmqXScB6-E?_)FE_K$?^fUDxGg^CbB;ZGDf104><1rqF=mfQ zo4CD~^7&4?MN+`h{n9nbF!h+o@qNY)ZW?#Wp2>%zR2OSp2+hLKs`21=-Wuw$feZQ3 zxQ|}KkAJG3d%JuaGrqI(ZdMYfE3>6^viCZ$b!pVS@?KRDv($a@_W3jrasV+-iS4zQ ziFPRZKJKR9F+5gNAV@v0bhC>&x0+c*2NF`4DpA6H(=EJoC}$2}lG$bb@m||pJvKES zXTS?!9Inm$_fH5%$5r}~2qvxvMnB?JCNb|e<@n@{z13oKLeqqO53*f1z@9xnG>sK? zSx4-&PJ8dsdyMkF)|2{=hM8^~n){3%D_nWT`c0EkM-=?2aW(L#>Ag=x>4JE~?UziC zM5J@=@3;RcSa-heFs;H$0EUmkq9G}3eg<(htFH!CHju>{8G5H#jGC$&8b#l4kGcPh zA9xf!A@(tW3V4eN>MGm+PwSbE#HaB4!gScrv5DW^3UqgZc8`iq0E1iC-Tdafi-8u^ zsxWi&*_i!iUEoV2)yG4BkdCz`B7Utfd|cp+YjjqjK0@a(eWf;Go>ohzpXt#9eCV6!FgK=b!32bu##Vm~@{ zXwv@qH=5_s@qP<%msk(w_+^*!i}--L>9AkAeaI7Ne}h#d&2qvI3x^awHW(hmCa%@@ zw}*}=4JxVH8A|+)U?CBXH>PMN3U*6^6MRuj%O#``QZu2rRL_8#>3(|H8u_P0*0+U&7OT?r`{*R&Mkk zK3JFAk3-oP%3pq|aLk9;{)4%C>B*W5C#VqmSeY_@g$Kcy*Bwxp=@aFjYfIxFYd~Q(=@ebhV zOYQ))4!%nG?FkT0u5(W*c52qoGF*M5jfaS1JP?}-*bwaV!{d|&`Hvp&ozjQzn7;%}Ac z&}eL7&FW?P!t}=Zh}Kf#qAi0BA@-x?C>wm&-)gGT4>)aKOV}76)5`R6FVh4_0xdvjsJ4R}l07v)~QCe!tt#dlcH_bY5V#n?F9xxf2S9r3ZXiJO`5 zZCj-2S38p&lh`KE-KCD$2F=cE4}NSl(0%E<8o&1AUpkFnQS6U|`P=MGYjN)tKUpOh zKDoHwThn!uP1aJF<^3TpX;Y4K!^fOTm^gT%E*aeLMNCHf(~a9jI@l}=ucto4iGdQDdj-}BT*VvHQaZPI1fn^`A4>2TpTN_;>D?cXJ8pE(T&Os! z{S({oR88^4{b819-Sj93esQa=yccW^tkI`@!j5aNJjGn^`)r3zej@u?3`b4;KxI(s z=t8g|Q^)l_#dMXd+@9@s`0T<(2-w$a;-j~oW~Cx++1WaMIojr3eQO^ROuk}$Mivj$ z5;KiE-bGu$&1$=U-t9(`HNe~+bCaOL`Mb#lS**^Z-q99TJ2$n46FYyXGd(NGbIkix zz3||>bD!iuZ|?4*Zuy@#6N;?HL!CJIrV1Rlo7jTgJ!n9&E>xg8W#$^FPj%H)fLPYC zg$F?j-4)j%FY9N=pdi5WjmDfVjN8X&yWhJqv&Lt26GU}0gv}+rRkzMtRH)k{+KnYe z7G6oz7LOZ+!RS_98O+1F4_pspzFUn#e^tM!&I!oSs~PakK(MFqOIlMO8fZrxd=Lns z3J`zY{xetk7=4Sj1CKyCDKA&c-W$0!5&cZqI$!*uj`mu^roy-6zJHCxuH@2mGXfH9 z?l!J4b02=ZC)j1pAH?7gZO6Qo+4-dOt&v_&2J92!b z(=7LCgp0G*$;P9MXVW{yA#c)Kj8wMT%M1;k<_Z;mRuewS=u4QWRiRNY`4f_J2EV8B zNE0#ulrjt8gx`xv<}uU zHE^)0P3o9WK@|WJ^NzrR->eUK4a^C9KFs^^c_cX<(t48cd2k+{chQfPTD{8Notw3K z7_pCve;RU@V~Y-)7egBFs=<_skc-0l9ya5K_>wB{jFNbXu z%b%j{{WeN$xCKQxS$n?`g43#P3t_erk!^t$ufDzRdL`6+UhSMrt%sf46Hss0Kx{VCV@W0xq3di? zDbZP3zwaXP5hT_(h9}W@$}ntC~QLM|T-8 zAXznSxV6lU4i9VjVU@J8e7z5Xfos37$z%&^Ug-cEKtQ#6kF-owUTOIhb-j)+GgA7} zwD2!=+i}Imfb(3!_JIW`e8gwGz9k@$$EZIO)bd&o4{Brtg!u>lDf#0*eJ3GKmh0=% zt7mLWZ=54AeV=33)OWylS%wRVVwM&Pwn@JWfzPY3S+1dpGRMXCF9Sh(!@AzQFwnPn zjPr1?@)+m{GHaApP3o{i!)D3BGWjeq?YWZ{>=;<5xH4}&dF<=sj>^8jXGL7zHqtS| zk9lLA6H5-AP9QupeQNGpzbO2c7Nd`_pZRy()9yy+vkG-oMmg&|G7KYf&y;pNAh z?jgJNcL%Dabz%}hqQB{dFZ_@lBcF!FI1lsOo*>%OGM(7Fazq-yqr0VfCNi{6y*?NlQx;RsE;>;mmXBz8V1#Z+_`uTfS3#o@4YfN{i^s9)<9FkuP|qPr>o-Jy=T4vmH@#gTZR9}-sz`?)|t^BLEziVu;f3&T0 zD)f&3KLBMwn!luIh^St`PAy!emJ`S{w<`Nh!p9C62oxj60^&u*gx^J}x|e0kaUuu^ z%dT;tw0zi?-8d(`4I>h!8;suPCj)&Y-MYk=Y-4v^#_SDaj z^)#0!KN*c^l7!u{PKr4>-Xy7ZUI(&yK`{Qnas$GP;wV*1={jQL_$a1X)}cUgvhg5R z(Cp>-a$CD?@)zQy$)6}4iud=mT_&WSt+QzSKJ(BLmty$)B8*iF0V5}DF zEHYp#)+~=!wH`wl^wcf0Nl{hPrdclW{3E*lm!-J@F*hLP2Bh48h+tPoS+ldzV3-2> z#Pl4bs-6_B!4O1&A_PGJ<82;Tz>wmXPtB117PV?kimcb2T1I9ZPrJ78I`qD_IIiTF zHOsnr(qf5joXFvrltxGF;IXss`+cKUUBR#FeN8OunF;x;m;d6 zn~<|PHO;fGH#zEQ$+M{nw^#NpdS6~OMKb)a>C2v1kUl8=jgs4ttG0AnMY|yvCB^G! zcJ)?O)iX#vKd32ERg(LXT=xz~HOug^q{9#oyO=%?k>gQ%e#~(WyIAag_dI|QK3a^V zr094hw8L)G-}`kYIkrR4N6(h7&*GSB8@b_}9gXC4z70p^I^Hbj5B$}Y zHPbBGZtXlw&t3E!Doxt!{1h$Cu`Gr<8QKV88Q_JA7NrpABy$mry$%LJc`QXvhGv>R zj-!gtAgWI%V5t7x$VEIJ1O?$c!M7eey16BIgw2GoTQrY*O^*p zC&$l;hSs$fLzm-9ZM&1?+i|G2*`?WnA?tzr%GzWZZa{96MEQGN4Er(k$tq1bIfjcS<0Qa*lcuUWHOVo})Z%q;`e@2943vn)58l^mbwcL*KB z=s3i-^H`3Z%*-_0JlU;lHSRUfEl#8o{4TZYpPC_dZ8z<+t~gp^)GqW;fT-HGo9F7* zP4G-=TM(;)DL{A=)p3GiqH#0JZ15wo>PSsxNFN*{E*2{kuc~`Vj^uR;kDJ`p4naKp z_Ay+=u7`EWj`q7S3)O2kRkM?gAf0ym>@XC)E3DT&?~9M(%g?LyJ4j9O5zNc6?KpA6 zQ8^CPG*r|2u~gYT`AD|grgk{wX7i=kq*~XbZJBLlmg(tzxh)2e#j z&+-kuwBy>(yGv8#55*#RYMSRfYotse_57RUE{d?{y&)KrBg*GpB2nmlVR^ms*;SB2 zc3GMnM`~J`WhD8HiG}#@e3zz4hGREflG`M>eM3;}bjl6~2COB6TK(&4ier)+`{?R& z9m{RsX2YdOk(Z(eHS=;Tx$K{!{dt<;*EGj0C)3GC6k^$x638UOAy(DRa@00)(?Ts1 zvyRE(obdWcev{f2l%hLX+9KI@-W-m0sfL@(?ZA}}2&P1G+4pXu@b|IYHf}(8G)*C; z$j&x`Y)I^ygCxYqib@Es+vBKm8;2r=U7jW-)tt5|$EA4mA1NX&R;Cvx(TbmscAVRFb{Os{OQ$Rk&!>BL$5Y(C zar;Ux96Ot-Z8BNTAHd-8-{7u(In}9-y4Fx+v=;zr)gf6H%X2iP6v`A)iltmzM+SwX33`Yww=+mUR#zd zS&}^6w<@ns^&4_m7X;stw9&OL(U}xmF*LbtN7GRY?$J=bY&BiWC+(grjyUFoi*I!Llvy6)25&X(xXq(~^JZ!9_Rwh{n zv1~k=tM`#v#(``+9a6Y%dgS-*6NSStr1w{PkFxdAoX6_Cp0OS0DUj*oi$>&i?MvyIfabL&>l)6H|#wmlr*qyIWA+p6lru!`qJH0^@l`+0L1(xb?N9_n%F z=f$cT3WZp-py8nd$4LrH3AOq^Cby;0v&HEgk7J*XN4Pzk={uVAsiGeEWgRv2bQSH> z^aVrJ<8V_n-SYjuv_eR^9Jo9w5N%Y)24rJ4U;J&W4 zdA_0ulOv3t>}l4r>mml`WrRdzG&{qU=&>Rgs^Ip%KbBAsa1;6VukL;wUTfI$R2P=XAQ zKm{XU!3$)-gC1}I1ui&Z08bE+L=!*|VZ@FfKVnp@U`cT)>7kVVxy|*=wz89bARE{F z{*}#76h>3kE5_ppBpASf5ZE9IOz;93#$W|6aG?lKcmfGzaDxbZU<3z{zy)&fki-nk zixF0ci2uwijI%ACqIin(t;@G=`hl^kzE&%d5EB_0J8%fGL(Ip~2C6rjKnPb5G` z5Jtefz(GQdj6|m!GGzRKqlf+0aN5e~3Xdi%lB>H$`S>ThCVBi97Zo6c;9-d-mKY)l zC5%|W19~_B0$%LU!%56ciy1Ut$f!Y5l0xDtVTD+s`$M0s`h{xut=%`9sB4-p>(co? zTCsKnLBtMBG=YQz9I!(ZPQ1XFf#UL_f(6Y9%gU*=im_lNEs;>ozi6>UJiZMVFor0i zh!Cj21WS-Y6pWw*CLCc2N7#ZFvVaCPpdkoHFhUAo(1I1npam^}!3q+v00sQegAXqy zCwAJVUMQPs9FBH4s#&JGXCiL2P$GyODsX`d5P=Cw@BtExpaUWdp$lOEgBZ#{1}RVh z3Rb{E6~HhCFjPScSm?nJfPjQ09H9m^puqwXumBh;ShPH#6yKxteEq(46hHJFQX(y( z1QHU!zy*Y`1SKqi3REaU6PAz#FL0p?VF1Gusvw0UFu@39C<7S6Kn5@*feA-o!3$0> zf)tEk0v4cv4H`E}QY)C&t0d2PY0jYNcHirL`)RHq5vjlgC@_N>!~hFhxWX2|5C$6v zAqY!=!VCqQ8dQi#G5%0PxMM4<{(z`+lC z5Ca_GpanCyK@dn7fJKZOFIvP{(GtTNjbbO$$tv~ofK2yIQzF8n#Y_Q~Fro!8Xu%3x zzyc;X0SRLmLl}7A10Tr11~VW+5r#knBNTxHAP@lq9^e24Fkk@%aH0S;X5e6l&M9F7D6bYga}^H0wOe_2~eoQ6uuw^FkFEPU1)&~bZ~$ORKN%V z8~_L-mhiE|2N^UlT1Hgz6>i0GNZ%h|08B(+0uN|`3s6voGK8TGZCFDTq|k&N^uPvN z*n$@+YSZQflwLtM)o96m`sVMI6J7OX!K|~NLV1Ws&fQ2i#0S<5YLKwcVgeNG$3R$Q^ z6|gV`8|Xj=KM+C=q96q(G~o$HAVCU1z<>xmu>b};z(O0?um&)UAq-WpLKLJRg(XaZ3QlMO6O14O8L+?vB=CR* zE+By?6o7yqJ9NmPp@9(@iT(Xa$WO^}iN3F7`2}Sv0!NJ;&>#j`$ifw_K!qrv!3<*% zLm9-d1ST9|2}&q}4r~yE3siss8MuH0CLjR^I5B`GaMZAY@){xGeO;nGda_udP<)SR zeN}Otl0prj2q8r90S;i{3R7r<8`_YCE_lHSQGfyxmS6-I#6SflFu?{&kOB~(zy&JU zKnF6w1QSWvs6oR;ixw_gv><80Nd2c?S(06geEb(HBo~-K0*-J5AZ%d^S2%+i#1Mx# zz(EXQ2!j%k5Ck9ifCfoe0uZo(g(>U+2s;=-3QT|j4|sq831GmFAcla6QPDD;PQA|Z zO1)4id0C}SN}?rz=z)R{V891Bh`|}oa0Var00=dZfeWY*g(dKS2RIM`2{_<_7nq<2 zJE#E;Y%qffOke^^Byq$LKK$^b#*GtLNy#%3*}F^schdAt5{3xN2OKd%@PQ5B;083% z!WOP@hBKr=3Q~|l6QIC^D`de6Pk;o?#N>@q#i$4;>rGzyuiZL=#B_;bQ5ImL<0>&Gbx~ zE7#4P$KrHi@pwXM+Gbgrby8NV5OClERj7g#!T^RZhye^-5W^R?0D~8>U;s=Ufdmmg z_^?9{mzNeEZpe@k2@wf}RQql+60vGK<@3LE+;?3#6z6d?)$tNS^gzG?2tWc7bN~oF zpn(M>kbox$ki-HE&_o3wfPe%jU;rKPzyw4f0t^@dgpU!F$OI*FLGn@&fjntCgWye) zCOHnluN;ClIqD^8qGcCX3x^6ACzKF^2Rop_6r|vUAOK+p7q|cgHei7WB+&zp8#6F4 zB_SiORqQl!fjm9CrfM2?+pC!_!881YH%a29==yaEJirMEB!GztJm3H^h`|aZ;D9F- z;KUI`?3lq4L!GQfEHBgyN=OS86OcT&p69ddOsjPg68Y(hi)8(YvnYy;L@!uU48TMY zI?zE3tZ)S?C}9an(7**K&;t(|HeSHAm|<~Q8JWT2B?k-|nH3ZjDdgieOcZMMo;zLN zQN&f0l-E6GtT+J(Fz|yN&|nBaz<~{NAcGQ|zylOufD;E;;)ewwpa>9zpaKw(fC8Ez zz!5w2&_l+H7Bny}Ca%^f&p-3)>hslp^J_|~WtP`!hZ!++%y2P-8LWT?E`Wgp3P1n| zD1ZqkmIwj~BYGgUC#MCKfFgi>_%8Bsm=q zWaENj2;Ym`Rs;dzbU?vs+zRNYNtIwsB9l_+73yb5R4PPNEB;>LHtVKUw|vU!lhGfF z-?=2$uM_F@AYN2_l!TyKRX52VHBqyhs^J)y$(LOk6;V0-`tMsU*^u+ZYs$;SL&gdr zcGO7OG>V6RA$>~p`!&Zk_|>A=dYwm2cl2aC&djp1(+Ra|%7-WE@45WYaC43L9ca)5 zp@YW0rg#~eVpS!ixA0m=%US&BQPffN)4o0n&*M3AvbXC9ec! z_iyU2RtX$vTL1X<&tc{F66c)z7Nau z5|B^2-&N?Q!2;#Sjutv*sEARCrG%JPL{2PRL{^}@Mnb;-wsASKpl6a_lk2{aN;+A- z9QUiKsBKkooRVLX9{<}ao_bi@uHDB5<$l4y5VO_tM8^Xmfgf2fEM;i5%FPd+u}5Uj_r1g|3d9Aktv^7A73O*c&@W%^f@^gK7q81zPSyE5WuSfZBHNEW{qPLJ$(tDbXG>``-N z%ON{1g5CQ>P3|K*TRxVh_BFk)34U>Nyh~9;$0wrCNyp#N8@VYCSc(R#bfV8BH!QNt z`8nce*{>?ErZ-9IWtoEGm5)Di(;>DzVpG@CnAjo55j*Sv`+P!vK86YGM+^!OE@F1L zl(-mSjqI8gMG`KvNRdLSsgoe-Wm|WR!s8~n%zD{WqJ9E z#79gD43`O}*R?sSggh%wAr()qlHK>)^0Z{_H%v=417n?RygtvBUdy;lr`+ya^#iA; zx`lag8CXgP8Zthxi>hIkJ&W4aSJAr^dDZk;R7b}VUqAUj_E_R(Ns?PtF2jC21ho6{ zDyJe#h{;C_7OY)I-SS9w`Lx7MG7dp?(?qIT;_TkxwOF3sm(;Q&c3stS3h8qK z+DR|lZW>F^Q}&G_62+iKC?B2lviMoPV;GMj>v1<3zHp(2P_aS;jZ2P`*h!D4UiI{< zu6qu->`s=c_f_$86%VfR;Zrk=nGba zGV*|6mNrKa?4s&9#sqr7Dvj{>$5s8*?6FcJBgFNuD2Pp2NFW%oRSVYX#FOi18Fo6R z#;IspKTY`aa&tV*a7lhsNFW;_u2Ssss;R2s7e0^lI0{xzt=SUFNj&*VxBs_|MKBIQ zl>3_8c#o2K8Sdv;l3SG>?^r4Efkg`xk?02)6$Ipv@uS5g#|nuMELdQOs6;aCf?$r8 zrPs|xu%wHoPEiXZX#Q`A1#Vjq|kZh<=;ww{MRBdiJbor{aq0 z6GV#_rkF;_uj`gcFiVf1%4ufSImvIoB*hdcU``vkCFo*=5|Dp%BmZ>>@-Su6DbqV$@YMNgd&;Fa`9D+4sS`u)C5F%EML6LrF;W7XmDs-Hgm<({U0T*=v>T?xq;h-$T&2gw%2fEq!xLxhm|A zP5fGhNXiCE2`P?A{?Cdi#4`HKq(&q<-2&Q6`dmNDe@#8z-qM9?QonAoti;uJ9 zHpHSL_pC|Kg-M7KJaU|Ddj=(v@k$-xf`*A0EP#kP;n5;O!z!WbSp^IAaaTI*RFFJF zq_9|w_z)T{t!Q70^VgkfmjX-tzyih+@#`EYtshuWXh6IVDX}GF$jr1-bt%%sSR1v@^k@$8MH43I1;C!eiGRt894W$5Tij((JNum1dBz zOhUU15><_p7fjdn^CZD>iO;)kIxj_&&@Te|fY|her)!X;a-g_egq&JZBG{+T+4SYH zX|#;!fHAqD5)wlM)l&NZRt33fNpIg|sG}pvug4f^v2dYcgrtmk@$$ru7b$&K?ez>y zRg&M75$^<#7eCOj&_Hp;XpvNyLN6ZQTUBRK_v2!3Gr?+$myyB#&;-wk^`9;`RF#-n+V8;pxjcPO_hDyn;4SF=#(YQ`K z$h4ST_Jp^Sph+yM@g#$w<)TW3q}9}1t5_`h+SDgdW@Bb#%eTE`lw=8 z#HRW94N;@T5rB|`3M_yDvA%C%B60%;Wyg!j4;YglDpFvOyijz!Lq&`YmzUUn$EZvq z|6bzfC%zui<0pL9RZ|7zvsjf-v08f5R!+00!2-S6FY0vy`e7wTf>j(YC>wafi5Vmz zBR)RT+bko`%PAD=aZuduY??zQM8)VsLdQ}{qFl9Q$EMEks@?yN2QM z%jj46=qdkQvdgD7#YeC%MVVL&hLu7A^(s)H7_ATtRp^J7ks@SFWJ3G9WhzXo7{v>Lk?Dv`RKqLR3zon4izMN~St~S&>|jv`l`S1*a^eo(1gmatg6( zScOXDVgilq_70R7i6;lS>?*fmP@)zw)k+DZvgMRtkKJ+%pI^jODkG1{M|U}WNPe8< z6e7Vasa1Q^WX&=UCaxGFKE`vyi2Rh^cKPTj{{2Zu8z>K%bHD1hSIyKukDNZQ9{+KY za-v2|50(&>-<|<02?66phRTSEewE?cPl;Ajd-5_DXc%4WxLUJ#EvC$)QBOX@}UyL5mV84 zp;kUSi;m}yBfTgQFj{<4QbxqrV2NP-`=!r$q>#k+-0id#5s!lsZ~!J{60N4npSxg@ zW==#x6Beyf4H6a)D0{E@u{?&|Z|OZ3NQBsB1BA6Y$ zY7H3b#cG7&$wTtGRmUZG_0_T-y_jCR>Uc&Ks&Uei2_{#K?etxOBA#4E$*ZLl3d!jd z{}#z^KCkCI8;Sm6Fj?k=SyHj)&CqlbSzT{%EO^;}uQQU>J9wi;h)1 zdr5AKPLb_^d?`|NDK=@A^Oy<|GQq?YtykZi_i?55to_|4;LCnkSb{ z@$4ivy=qwzdg7!QgPn>J=w!D)=SYIXEPpR^f08*FzG@g{ zr%m{}Rl}bZT{jH{w=tssbCNRG;YaU-jv%xov1gRr7P)Kt^JYw=6(`XQ>2tE*KYH$F z$)e>EK6mLmO_n-(vT9gmuR~_HCATFvjXzE&#S)*lfpU_MV@NeyLOcvsNyWEIZur!m z9`^LSs>|qC`Fjvro?P~$s(V@Dphtt7ZI*UPmS8u;o*$GXrR9k1?pT$0gs5gppZ*kA zuJg)kCvd>n!NL;D=@Nb>*=ZEazUVkaw^MZtYSR`hk`EKt4-}XT776B)zwS8XrhGaI zF@xqrREps^j}ur8k(3cGT$Gq0V+4y893!Zf?Y{IG2^%n6NFx{$$OY>pH7sJo>V}hg*Ob0a@$Z#iKk@MX+MXGwYM!sII7#xRsgEKkMQd?Qhy zF+~bA)9mtm>3hjN!{}ER!MEc)rt-E2 zqf>m0vB8B9&2Q^u?+_LXE9A{8m zxh)D_t8CjgO*i~r(9_HDgP#5vs@yaTW>;<+a>FtH7UA(3CMB-j_faz?wh zTbu0Jg{0Pn|H+LCugIPucbFwlpZZTel(tp?rS*H1BcrN3li6EL5kJZSN?`a@)w+ z+~oM9=bxgcH}tgqzymg|Rwe^qU}uJyc{97**1w5D|Ujhs!{>A0U) za#I!~pX9#x6IDTRIv?`+PeLIUj*sg4gya7E=4e`r;-99VHRVf^ zKh517Lo1rP?GRnV{C&j3xAMDX*DP8Ft*W1!4Mw!LJ6r z`SWlzEy=V_lKpA=rg?JR)=Ym=Hugf0(@DKhS6}{Ab#fH3>WEcMY>JEBi??a0pqS>G z^tP*6PU-cPe~;O6{B>j2LBZ~&-r}uf^gF9!&BEj-?xPQ*=PBsPYoKsv~?P>T|72jUu|PH-qQPih4+(vztBsO!WP97 zPanhY5c~4z`gvtpEMu^A#dPe%`DA|<_N;Girt?_3;h1(Gx^?S_qT+gbM9iuY^uHVy_(~ zFcV*=!>>nAA4UHdW>I!!>-r|KUNbH(c+hc#0%ib_01^p}vrehD3hrO({J-u^GE%8f zxnM}8liRl37IHQzxBaf$h9bw|nBm#`E`NlgmsUuz79lEjFunBfO=h4}`~Zol;7cKT zkLvFqbbEe!r_=Y#I3Z*E^act+oA_0%1r9Rx?Q{-Q`Q?@aO73Cq-3hkR4&u`Tz|MGL50+^ z$W%S1`=R}pe5c&G1m7tCkAXn1AH>S@5_;Ms8MEjdnsYVV&`rnHxcCd<)0JD@rb%_~ zf_)QIi;t5TNr+r{fJZR7NX0j?%sb4zSF$J8>MPhbxlANGe9LCqyYJt+Bfd|vaa{j@ zl9^SEAXzkFrxq$xPU+mesCZMJbWMrG6*mMjSS2{WdI-e zv_RtH@*`yegJep1UB4vZ@H@$`#L;%dzA^~DqR5t~%F1(2@+4G|N)xE1)*H2N~gMVNkQc0doGd*fq-!%8K^jR3c|5zvGCzM~M#wvyp zsTDw++&IDq2aG_Z2Lkey9afUci;W;qRPf+IA}y=$FkbSDR=8j#pwT>%BlmqEdA{@B zYH7_lq9ut5+lv6S1AWxeoU z+Y-Jf(RXUX;_BBd7p53b2{?8r-c>?S;3h={-o5feB8 zA_6TP20+aKF*>nvV#(o)z*s#eVG9z^`aNNiv$>v_r|!(wX#A;FG9i~9Oni{Q$^b;r zq5&%y!UR4LVg*GoF@ggo7)r!=9H7L92Z&xU;fmxSMKNed`1rK4g7;U*1bVr&aEw;3%Fjy^0y-H~{L27Q`4q5fU&2E)W0+S+F63AoOqoAWVP= zS1Gj6kCUI*?gF3REwYeU;3Y0b zE|6&DXaETh4_H9}5X6u`3wUf`21>Y~2sk*91DFsP@MVJVS$g;>I@nLjTBClCi`1WT zHm1*&SKAV8mvVlE5>dtIXz^$QMg&mMV+1}>ApsefI1z#s2oOO9cHjghVxWW;6re%q zh5=AAk|4GGm{BsPor2{L$o@%pPr7#+Wm#2z^AQS$#*7mkxY2s4uHE*0$1Uof=<{!#+yX&S^wYoB-8MC>Z90d z#{ob+SipnIOLwEuRP#}O0oX~>{gir$nH`oz^9LTr; z3`CUJfUD92N{V?+Eh7^aAup5^58_#PkL?qMReQvSPHq<;P(x&(g#tIQ5rQE6FhLLq zu!AQ!k%K1`zz0)sfDx{61Pg%B!h{A?KAz}lhKNggkfD|k7I|H&q2PpBC%bmsv*wc> zr6N4QazX_>px_7%C;}FGnBWI5E+7LTS}=qPBw-6boWKVzDA0lz7l;86EkMGL6AU3F z2@kj_KB%o3Z3xBoygt4ON7IrN3Pt6GHM7GA74!fEP~ZXrcHo2q+#m@fkU|%LNP!Pj zL_h^HHZTL1Cq9tkK>@yuC43o9xG6t)ddb+E%qN!^_T7>_!BNY$?|l7~89P28g9tpq z3qr(z2@f!W6>=~JHFO{fV|ZZ!8raAH43>}q5fZ=yCa8Eo3SbMzQ;12%5HdDUgB&U#!ix|1AVvpva6}HG&;$^yutN)ufCB_K zKtK?p00Ad}p@#~P@Zta$poZ8$sD}#VG7{j9RNQ(?uR-akmY=weW(?o-?{X2M0Ybds z2tUXm2}R7{2opfU7BsMgFc?4wRM-Im9k_@<3V3i}21TI22Q&_7K?uhJ@R%Z66dxyQ zM&(6Lw`bWJr2qA6)4j>mLSqLDpdbTD(1H>*Xu=K=?0^D6U;+-hkcJ2FfC@#Fzy~-g z;DQ_#h=Irv9l&RhXkjzdQOldNSoN;UH7?K3e+t3?5%A#wAE>c_4=6zb7?AXE0AFT@ zeFcYUg%6^cA6gX5w)P;qcjWtttSF{Aq+>vfCv{50ux$51uZ;a2S@PHfft;7JhAG5fE6Ml0Af)Dykc>FOiX$d zyLKt>MK>P;rSczTda-fJ!32v54g`?{C?MbnS*Y=W9qeF&9z4+lC+rYG4q6z1f)XY$ z;9~;fi zEsQ`4TsS}ulAz)Q2xJDZfdtSX2nCRV5L!GWfKJ(=!odWrM*;8@9jZ@)&Z6`6zffK6 zc@i>K)QEvWX^HVyu^k8RW&F z6Hl3RsgyxnXLeF-!Yr%JQw2${16evxfq~;i5>G7Afe@ge2t;5(5}Xj@2@SMn1o5N1 z0HL(-NoZJ-$;ygBPcQsRjy!}$CW+WSYOnuzOl6b(L#fvcA7qq>KoTjyK@i4}1_S`1 z3OlfX2tTYq2pB+u6^d|y5Llk@fCv&3Kv}{9G6(oTNyig2%MLF|4zo8A(Hkw>nvHK3 zF1zpZ#*|l$Y9yg!11-S75u}g+95kV&03JY50s<;VG$6!B6EPe_m|pB)g7E`IBM3c) z2a`n;l3Gv^i#eY>GTu5e?7~=mKOdCIOpP51xBwFH!Jn9<1!zSR=#8%o&yn@p`FG)0B-;^X%e9vG)XPNW zg^n2mn7{~vfP@kZ;R!SvK!O<$5Wx!)6hPHr!V}Y@ABoXdDETTS2D#KXU(vW;W7BN& zsLOt&8lES~_MVbUMFz$XNz@p?19~`s12ULkz=|OVFjARelSV|b78MyjP%$-9T{Ziu zTo<88t&e|#TN`d|(`@tijd?tuIR4Z%OOh>`j!Y&P7cTtXFEKgU@#BZnYQ&D~Q#8*p z9Zl6kQk_t-zAvFDyh*_!J6XwfM{*qQJaN+*vke8q6g^EwU=3(M0%BIUaG{`>SRyp- zkD*C|BMsO7e~NF=2&NJeVc}UM{0GImwO^v269u_$OyBQMLaBgpga&L33%+u5gO{d4zjnU2{8YTIb#T2aIR zVuEPG#sCrkL_)>$^hVbc+3h1Y95F?TG6hJRbtWe}vu)&PU5ZVH z0_5Xl@K~bo{(o(Hjbpb)Ro8vzIlj;ETuIfQ_q+CS`}3-EJF?~$#$oApAqc|BazJrr z9G}MYn9Aj8v+mB1Tw>S=0s#$3vGD^54k1!3H9oEwzcfP6JP4X!c!FRVlj)ASHHpd~ zNsDHFvURz>;VF}7OQLg3lf=x3LQqb(M%y`EXWQ;+`QGzi|DakIx8d9K$|YFV({?sf z-j(zCrdQWaTX;0t4-C!oDbG*)p2A}FZu^<#l;;=WJC3So_pKv(*ZPagi%BcwuXWTD zJ&+EXX`ywsN6|}>V&r6PNY3Xfqbd)>A*E9&&rd>LER%|6!$*H|)t{2d&R=M9-?+wh4?5Ae z$0SpF*6;ii!#B;wU#5lHHg22C$Vd`QIDsPb!XKf2(y9ML`Ap~ROOs{lb?O+NNT3)R zn$Rf(ru)~mLHGwm?{HX-9Sz)UUZc>+%H`32(_GEcv}2g`0mW1-5$~_)Im>XYq@)+I z*coTtIdpUsDqHj?9>gqa|=lh9e#+9ASBm|-ff&DKWha#wLWm>7&@7pMfdf)kp zwOfCDQVBGQPc-$unmj-2TZg3Ed19xdejZBaM>L+Jt6iS5NYbRar>6|dWXf}wG;!4p z(Rhxo{CVnSnV;tm!=ib%&65M!lv+lMVlI*+HEx=3mNd~(WXUjAQIO|ayawl4oq9B08sAxjk1smSfV~SJuul?O;QN6u7?#>L zpQVo(E_&GEW0&ue=MUlfAKR~Jej83F2OVrvlz|8;5X6lio|-?qPt>w186LgvuBNj% zwx6f+_&o67@#jD8#w1+FRTkWEwiGEk5RftJylDH=#&KBgCmV8UyIjkRBRiS8b*vY< zUkHlle08}Lo4Q2r@^rV((;)?#akEJFDvOioiRTm2|EJc~B+94nESj`f@~azv7#Lbp+pQ?Qv3Xm5RW07P%upY?~9GB#|E>U`g z(Q^H|5H-d+ph%Z!ZKj~umcz6C#>hQSU%;t=za4ug+(&VHue+WPn5-QN6!!(pZWZ-7+%qGh@OMmwkAm(MNKp9 z!f_9Z#@`o@B}}68$(CI>ZXGL*^tsL?x^5ipdATV1>*|SP|9xLD+)uN_{SCC9&6(xCToIw#lFqnT#g2m(@%XKki%IM$)) zyDw?)@AgGuu~Jwtlwldptv`slM>}+Jl z>FWBoZm+I?s(#!T7E9Be$4D`$N%Z|hdQ5Tjr9~6|M7%^%jRQe8ayY76S9UVj`||Vr zxUOeq@su^iQ~X92$)vY&3X<%2-fH{5vgd_EG|jiK`hBm^2St^N$x=U2&)VuGYLlpb zrYE723h&FUv(uGNSrQC?+`L6s91IgI91?}GAUK1&5AGfy zK#+mp79cT;E@Kf;?^cK4VspNiUF z=Dirf>N&6b+3_XdL`~VES24d-%<5{GkMa>l&}Qd$Fcno{*R2ED`%$fyaD&JHC>vUE&YRXR735*?xs!JaNAtEJ+9VKO+n=# zwoT6TLGF#-n|Bwji}QMd^SOLCeED!qeRT}6S!8V9!1QAZPVITt(c{3K?w4On^h%kZ z5@FZ=^=4z?HYO#n-7umrz6p_?$+FZ$0w<3E(dU6d>FBY)XIIC%*WRPlWl5*s1jHH~ zoZuZ!^<3FYdobU^`uZnWqRqq5w^pIk6V~s38u<}hLOY1Kkk?ezyZWHg>aP`i-E;O6 z4X&Z}t%{diEn1QBnG~$_to=!W#%V)_0k62rPNCatJ|VjJZ8aEnG8N-?M&sM}^+(}W zZNY%oxu(Yoas$t1kD+Z{Jq5$&(mM03$~yFAg^Op)4GLAc22xMc%+MhwkB#!U+^VyQ zZ^83)kAW72Fwva9HV>AD#F(3B^O_5?%gkhFtN8l*P(ITuAajPK=SDcdbq)3*98IKJ@qh~tXJQfus5IT7ABE9rZ{d8z?>1F`B=I%K;+v;X+YU`CT zwc7DshFn$Z%s7pf9TIjFeNTa>Ztl4TWFPf6ef`$QroaYI+xZyIPxOoC!Pm^`Ohzy) zbelAht6QyjpE8{4dQ#mBOU8)I(u9KqfJ-i?FH1$nK+E__p^ecM+axVnU?d0jBY*q2 zbNCo%sYw=Lxfi&$`0Zuxlo4G4sV9o*uXWA`dF>(7U(`lUY?(=hzyx5~Ky=Ev(1 zMi#ILb6mX4v4$-ysV@uBZMtJlwSW6|EmW|gGqOJ<{n&adIszp5F8`5`nd61D=I@xb(l_boH4{=ZlQMzC8RLBY zEYcP{H1v(rXi=L~M6bhc)AhaGIaY=X?d?LhHAfDJ6zBQkszUqv`p$s=tRo}XXWjzm zc+KyVHJPb|oAY;%WU;4XBiu&?dD@iCe}gp9v7}tCy+w`Bd9tJ5j!LLjM%~ckfKM_a z6ThvA9k+G9_Ir~v*p`6jZw7#0uRaB)mAR%~jh_59$Sn&gV5Ck#mD9XrE#=9#dLRII z9qms)&8JIDLF?xkFk%YhbZOGsTLt<%*V> zwn(vDG_j9oe zfduMU?|xaf#KRm&8wZe8F*S$d+QSS0v}w}C7DACF9?RKzYU8V8jXIc2(yOX5kvfrZ7;l?^R(dSl?*P1*U9SM!X})8W=~!0RottN>R|T++~rh z8qb+D2i-IDTAhXyiB*N(;^1sWB1vBLNk3u&WGdn)c(XcZOQK_0<#z(c8)HlZRvJ^5 zAB=KdA<;W`<7Xb|UsdiyIlA zGBy({MKgA`)UjB%0PnQ)>Rr0X=-o1U0_lkd4b!A_4cO*Ru}_H01HX@q1_L=myu!>PtGno7bZ1}CN8jf z%P!=y4kE*-;OA7+e_TgabY(j~%G&swILO0~etgY$o@^Ebn!fZ;gk)Tq;7m^O@Q(^A zn()BWLn&6sH+ndtX`VoTj+m&w zMeQ&@+`N*_|Fm1=!G`4IejPt(CEfE}|DVsWY@6I|U%3*mfrM}4B1dkt8e&Q~O>{fp zr^O=g0NPwQAao*FElz}HK|gulcd!@rjiNi-bf_!Qrn;2wKSZHn3Qpg>JJKkVy0{VF z;8Pa|eHiuWElS@)Qn}`8p}9Px?cC5^h%wd%#n>4vUU>?`PKo5ftbY-##wd06PL<~A zot|aM$lKB*m>Kvh^;bpVwlU+e7_Kr00TBf~F1-6)Tmaz#fWoy?w+ubO7fSE*0Z&}% zp1N%E)g#>ApBmH$lE`ElkxAr={2`I?P}FPpp*T_wyVzPIm3{^GD^2g4m-l1?ZvZZ7 z`}d<0iXZjCHXX`5>%Ms~A76K*DV>?as7-xtv;aQb7P7y)b#o z5VdGFS+uX=-%l(t)@uRGG%1k1h;U21=$arTxxdCrQtxJreC zn{;)F|9J4$#EPa)yetVaH>^ipXa?-4czDtEW*o|#*I{?+`gzieeKcpm6k!hcaNWDG z4~(};DxvVn=$l@5zfNTvtXB#(Y$ZFon|W&gr591GJT2uyntGt2l56Ep*Wfas!$O(Q z*MAQ_WjvVkXg@li3tntfgPx-v{ype+@L97mtEIAU<=XHPgH#&%-UMJ&YTt^%Y+rq> zTZZ))l8i+_y29+=*XY7Rt>tXcNC+2>|1xC5J`r+4(L)i5YYG=A{ibABT+jM#k$YE6 zsplON{iVO~GfG(H3#hHM{L2!0-Gy&2v^Clhk_i-d_Y?8xR^0lAiwxzow{j>1U zP~Kx8y(ijwi<|ZNjl?z1J3I?XGy%mgA9c2n&~S=k$#_}$O%(0Ss&P~LKffjW@{V|T zOKt+5pq%lBl80a`;zt5=Jr_V@3ei27Q>^9RectE(Ou~lM81a#qiALC9409`%+P&3&Q0B+` z=rQ;%ves@}rELh*N1}1Ewe8AA#*Hi@MmrXD4MoF?8gVWG@9~r zlEpn?@}SeMC|k%2Wx7l0=VxM?8WI*-UhXBO!v#2>s^hgM?gKl#$6QkigZogA$*VMRO9^!vbeoKNl2(~Ic>=rKR5sP?NVOK{ z#e#G)cK%hlnxgd2^>inMlCjZ)T4Mva=YFZDQoxs={$lqIY1|G71B0&FE{^GmZnZNA z#@nv;Q=avG)KxcaEqk$$Hy4zEzI59H}HabzFQRZr-a|#~S3^_mQfP z&$SCHp=tjLa+_)v!IY}W$z@=Ie!|gd!xYriI;t?a@2@tMfzLz2DEi9`3_Cv3j@TR`)!(KHk12jTC6vb*c5sL$I0M0j}-5L^z#8LTU1PR zfUpJ5n>bo~t4889rjdRyJ0z*_qp$z|i=%J^!2S&ymw^-}E-sBpD_;>R3C_J#1S)Xl zD=tC8!JRr_H_gccNo|-59q=|96FFg@8l9Mr*NTMz2EfAA`!LRkbbv+m8CP-!3EOUL zX3Jm7@a^aabl^5E8UYtQE|u4a<}EQnPY*c9 z^+^tnaW=tFIP+m&rUVfN`EDv0?ymJUXb@GTv4pPtMH&~mOmI5PMV0e8br%~}VR&n~ zMnXr+1O8@;Dm@EKMzsazSmpWi3uN1268zkFd{h(@P z{Pa$OT%*+&^mq5qVjIJ_2(r`pRo3o7h`DRe2zHDL=6kAvHyUhrw$*{FMCoIrlMp-! zn>QD4|CS$>Rb&U6MeY7FTt+mP8{QhXo9n)cSx(~#lHNUO$kGrK#Qz<^=;L?}fmO7b ze#$u@)wNFbz6gSkU%yMpM&v;+B6{2-{(e>|B!1zOql1nm6|5T8YOy_M)p!526ETk?%q}HU@g84G z_(k#fGd1qpHt!%gxXsYct_&sy9=}~y7I#ay&!5ekFyrK>rBeUQQgmP4rX$#{-emN? zhjOMW_Xq38Vef~X3JP5B@qNr?wDJzsQ*i2X0lTguD1MoFxIy=pbnSpp>mQAsC&2R; zz^hp%0l#tj+Yls!%4A?g(xK~fzJX9*WhEP=ECA{e{`M-?oi|FtokLYatij%hQBL?; zN%7ws@0HKOb@KPmv4lL#{*rH#?TcxU#H=E>;^>H|hOvRE*fMgm@34dE3(z6YTFD!db($~szbPU~^A)q#O|Rgk{NSi)>? znj^bhkyqWBG!n?L*rTaCTs%#eG0(QbrN1yl6NN{|^Uig&73o)6B-h9yb z9*e75^Er@kcC&kL9`k8GJIw~}!eId;VxaeRC^2jg-^4G)R&Lm&&hiv$zrW$KM!}GN z^VZZfD9t(Lt?oc91);%PG+Lw1UiZh%XwCClG^@?+A*lM=+-$bFE4ey|LNo zmUY)XL&D7&f7=+4l$cM^voa17cXI!l^+?-R%|IER4uZ!d(TvfKZEj{0D z`&8A%UL)j3IN^^y-$PC9=y^UT5o1$X#Za3K3=~NhWa?^W*wtp`9S8FFb6YV}+8G4b zCYL3=YCN}F#+L5KZ%Q3Qk}M8fz_o!^n$yfBRsuWCT>A$MV58*}<3ywr*50YhRq!Jj ze-B6AlCHP@6d^khz{LVmvfwbHC!wn&BRgcYdd467JsC0$A?{uQTHn!2I>m|@k zJdp`xUb0!086wPa;=QiwbkK=`VVg-e!DLgqGZKLTCBi?9nr0IvXmfUj@){Y~%PLAc z<_rz$crlx zI6NS)QuiwolNe9v^BbUsbS$}vib1U`N9i}@p2PNW3r(p3fLvpqN~mzETAED`RccvJ z;%jf_;zTUDm@}`b=qbUVK6%=G00h14Pm~q$7hn7hBx^e~3K6TqnfPhlRyAI>G-YPw zA-XaY2--*I-2iighK?dd?grft5Fp}0{X?{6XhF51{1kVrs<|MhjO_c!1mbs?7w_W8 zc@k#;?-H(%ZZrBL}|J=zS0_2jm)EQdc5sV-z4AlcEO;nN}SZ%d;QvxIgQ2@j%*C0mbt z$i{bkBcQi{W7u}M5|P6eR4}S>(q3q*eyI|(#U5P<^cm-2jn?N93))B+SH!ZL34cqJ zGCcOpx_j!~lrn(N$+4He9a3Lc9Gtgu$f9B1biWBNXK%NM;-68kcY z!$t>y>4L27y-49mmV#8x%lVEXbac{PA2}6(VWYD~yY_YI_Ql^((2vz;H-K_)kQj|{ z-hPY?mSrlF82x~OjnAgCmHg#11%GNRb<6jt@AEAqkhnx5Zbc2&#l)68Nw(hGvQOgC zwaXcXF|z%v6|rgHh1C4-3Wb^WV!*;B)BC)_}^lRS7uGQ8& zg_xb^sI&Hw-+w!p;!rDv<1CaYv$e*`&ZKHdtZf#p9y@P|qY8uEiJ57B#3$hD)pSU> z$Ja0><}?$fGHX45s{XSLc7NJwcZP-t@3_ZX0{AWRELL87O@Ih>ZwXC;(dIM{kuvw~ zZe_4f=E2&R7Stbkgnk7Is&dClp351D|6GG)Y$M+%=;k2SfvS?vxZ-wHl4#`UIMSm4 zL8CDPO=>`tRj&bi!HWc#^m?V1HYlGg{EF$ehBb-4%0-6lsghYewIFp}4nR0W%t(u4 z@F$j(n~R1r^o@W)uSK?^XKopkMuh!4;)w}nbC0CT1faDox7n1jH*yuYK%FpGjIgM2 zs3BUil%8uo%b~lO*O_XHQ_v^AVX45LTz29Pej7_c{dwS>hJ2+2=u>2s-LMv`7F9;! z+2R7elqO<@e${a`*T-KIIlBr?PCYPer`s+@JGU%hf-Zuk>G*+DZj(&L`LNWE#m;;{ zgNHQ@7E1pa8T;LRN(4h$#xJLp>9kleru?6a&8Sl!un9R#4A}5-_cNC1^xs!khNZf6 zq>$sJCYui@5cz{E?z=yx7)(dif3H_(HNE>K_p<;pZB}y$GJw~C z#}7VD&cg08Dc|M6L~JZIzhxi@yyHZJ#p`Bz|B!<#EN<3{oZAf`8X>Fdan_gNL}GEB z+QvM|%D}&dH-5&Zs@DHL$<5P>s2MH(dfHd#lM--*p47*umBo*GIhyJqOxzcy`2}@5 zK0JB#fzwYU3D0UY%H;$9wZIC1vMZiWB2fr! zu8`5s3{r2}^J=-+1Ju4#DW!jpq6B6R{bT?mW@aht4n65eOvAyiz?p=GE%Yj+>~``T zHIgrTlCVarvIT{0zJvra{h{)Y*qW%YjUCXt->9hqhZe5fC^eKuim?Zo&3Y6<>BC&# z;eURkFbRhoTv?AOAq8$(%3|h_o2fV_w;Cvh#gCd7Wxctei3S&FUK)Q#P^6bhP49f3 z*%Yvvr{tG8e%$H4TwX0+ZrBfnJ`(-77V*XS>YK~(SL6azmlJ&=42jki2SF;6wtW(^ zSjw-_$Lk;|i}Cn?j0JnTox)Qg-5!updtfj+WoYYwns`HACc|++O?zA(R>!utMv?ms zKRQ9t8|dq(rGFAtLa6TRM%49oleBaMT}8<*5eoxtl_awLz+`Kc3Ll%6@;LUk6W&YU zubYoj=)j`5RBW`?X3>DTf~rjW^?)6_(u2=5ivshcdu8JtF5^pQJayyqH`4q^lZowt z=3{58v!1El7wt#KnhA?nil+U419!f;?)BxzXenKMM&a7}@;)BNvED+!Zh_DOl~nP* z5y^UF7%{=Y6dfyH`@6;WH_WF^@wWO`sS_xbdAYg(6%klhX7q0Yx^>%zD7sT!ZHr$v z7FSQ*#RIL`TV|(((>Utty|f<^ww5#z{bpiG+UZ;!W8%)X929q`i70*f(!=zd${=Dp z{!H%Xc!&*N^M1&2!$R}HGD;=ZHEaf#f2e4Me$hSllfqO}VL^a!iHV*~jtCkw?<3r! zQt;;}&#BmSz;}BQxn*U?9zo??GTnw2xW~>9%?9H@(=c7-^AGbL0PIbk%k1;wQAmox z$Mj5;ocrxJV$MJ*#P=cO+Y(z5^c$9q=oC-s$d6=|*{%=Q+{KiXL(usJXX~)s7nfe) za6KOs&^I!$>o3_+&0{5LRdvT7RZPE*Xgt@M9%7ZAH)52Pa9E7;vZNwpcKCTQnz-UL zJV|j631=b!C>mDinFR4D@!)t|19W@+sf&h+@<58kR*dPjpUV7oH{Y(`Nx3`;kxPI= ziVQD25Zz?T-0(j~EdPG;Jeq5j>bsWO-J?D17qjzGSZk&8rmZ-sP2EgF)u z-9x4-@GX!E%!G^xykT?BISZoGRK1cE$iZUb12PK%nI+wiTN+kp=e}x#G!*pBZI7Dr zhAsrAdFFqrkoLJA7lgE=_h6rjksv$auyt|Zu-hnk2ID@C;RKB5NlMt81@~$+H7ngX zeu$uEO8j(%ESjyFbE7y>T;)hc4mrK+qO^xO^nacI`fkwGY4b+=eHX`=E!YiSSfSXD zid6a@vqm@G+FsZEw)XO@*hj9dP8kU|{4*K=A@>oQnHGG6KzAz`6??hL>sQAbX3Y$R-2&FP6R#Y$HrU2;-XjC_XkAA697|3@j7Vf07(R_CKT8Xx`vHT%}20bq5U|E z?Kn1RneU+KE}dlt2JPCjPbRgbEDQ`3;^x!%Zg|uY zC~?Fbdfv6TzjQklRi6jmArr((0z^IY(&cXhUfpVFbb0#R$-{lnDok#Wlgzn$9P@DK zpX`^$=s`7hHr2$dylgh>KQWe+gKoD z{gOzj1_JD=T9_V7-eXQ zI}yy+WY>me+#QqUS_WkVm5@t7N5yEsM7%YY`9F@5vXD(tcoR&Rwdhc<-o;y9+jK$a>q0v7kKVhQK3EDyWMH*+--5%R5>7Ra#)Ytk5c5H$sD0sapSu>eHnvys zuRa!nvveC?px!9hUe(CZr zN&#&9VYd=+5 zMtK-jQ=h^o=NZRC$gbwn$1jF$E(gQkGfyAQKQ9Agl)%`W_OfD+;4$oRE_fR0Y^i(_ z0WU8#8?}As*5HWB*l6ZB_pXo-rt$Puts{B#&GI%?OxU_OqzdXX!gc85$D1LVNY~+& z9yt@+Wp-T~zLB=}*Y2U?5Y6rc5V_4ae%9}uheAIA_+BFQ#VYuQVsplic=RbRojPKA z{ZXYs`qNq$1*d0Gq6!Obeu;$k-5^#Q{;m1JJpKk`nr!Zw22JsHGrKW ze`HLsYd1Cb);=J76Bqs$aqqd-W9xT+LLV2nX^Onb9?^B2R#Mag%r8?94<^24LN}V# zKE9k*MH+7E1JiPm?^p|Wtw#0tBTU$`7vskAja&MFM2v9!oZ6;gs2(ww8uPiDUDd0 zfLaQ<25tw_S-T#=Q_4q!YE=Z4s22hcZB{&UVpYwXjYY7 zZQYG$of8(BccP@W{k?M6UD)@(Y~A`S7ic;+Rk83Z@9i^7nO)z{&X4{FisO+TiGtfE zHaN>MQEB$Hy=zVOlw|EJA1KH22>V2#C!Oja7d7cATO2{~25HQc@ajR6ea%zE{fA-S z0Tx3I>W+Pir+xt3F)3)uLjvOZX~c@rEZfxYy7l3 zakrnrtG16b{dCSNoJ;a7>v)*DK?a+RpLUh*5qsF)*0)+*xe@|0EwO)S+RYF*-}Xse zyH!r*RLIygAMtz%IfV}X_Pv}987>>33K+S4y5TdtR;)8J((az$a<&f2VR2RGB%Qwj zu&wPHFYcsjRy9S5m;cMlhc z9bC|NCQ)%lzbH}?li#cWpsl^r|EqP@;(tC>H9N-)Iv3e;7^&0WilG78pt>h}XfE@_(% zn0$Ltn@S2R4!DPWg8lha*l~n`j zg%4rPoU-p#5<+U4H=6O*xtOGB$DdOjd+nRI*eJMGAs#(0?8r7YZR-n3=E?@|mPAgyc@L3*TM{&zJ_Ms*61!294Om`nv8fuMlJb|Q@ae@+^ zJ8k8RnnV_hVqz!{ZFNIKTT8moCMXz#Hj)Y$GEK+p$3dez0=qCezeUw%LGaU&|Ey?r z`2_jAP>R}l5T%UX(MqAd(JT>j5`cx1MAOYteFGV^uV^%-Zd7kP`r7$&Bwey1txnkU zx*t%uYnn>yvoWGh2+D^0HYs;iRbrma7>kmVU^?11MM1@z%&+-x+{^w*JtZfv1mIITlmH{A@v9DaG| zZ>_>8CrtHSA9hQJ+yk+sIAX~3c*(VCx{gIqM1zr)uSF|>N*DWL%*{sfVN?zwXBy6; zWSv77Lyf})+$0oTN591o^&hH_3{>wBu|fH-0n}-1U3;k@!i#_&x+%6HxhBSuxg6LE z@So87(fPFX$jRgf`ta3PGIKBI@U?0^{9;5LyTWx&tUsldT4*dd1stUqD2Ch<))T(cM&D1<9IrKnqx9q0aJQaS z|3&>0rC$dgJ=ru4ikRVH9GZon9vH?HsX?nNiVab6ZSh~^$DO9Z-^~n(+(mSEE>->(6gnYbXt^?Hm6}_%lv~JX#D1vaENJ=;b~b`d@(9W({1g~xZyMD z$SC+UCynOV<8>skK3N&Sj)-O`xEZvmr ze?mL7B2t>2ISgdd$|6mEy3#tHNZr(`c|FKZLmUV63jHj|^cA{n&({-JY~~^+sJ2}J zRXS&@&p$lru{*UnQx1__D}L%yn#Lu?y4aDJj5fPnXr^dcR{)@b(oNN@7;I5$u5&E& z$(9p)lxNd&%6vg>M^!*Wwu$dRt&1m0{)?H2k(0!f#jh!g7{Gnoer~4O_+?eE=Y~U2 zB6TZfwmDHX;Hz%+O?x5F&Zzn@j6;|pf0v10mE);-7dZVbd?RaZD=}?oh5^3B)?y(j z(BHT!*XF2{So1rJU_@tLPqjzNjbRvXmgdjpxVAeaToad)uU zi0aq%?Xd|3J01v+e8arK@oq`X^>B78O~H6yjN2?T{2mV@;AhK5b0*xi5wDp3zthb4 zz&t|11&#k-vRDW>bWUfdK7e~tZbl}$qRj>z6*yU2`&q1g?<=#`!1`U`;V+k}B?rMN zf}!M~0;C5nN^CTc?#~MR9@cN-(s1$TLsz(zdRYlW=1U$UR=DfZ#nh$3lo+OFGO!-n zMSd4Z4ubgH*BMvXtGx7JB7vOV9cj+cc_h1SXDfQOM1GhH2N37 ze`}DPq|S>GrPnqoz4JW;)9;F9c1fqv$*UwWV7R{2L zV~QOgYOp9Vl?M#cA}g-IPD{sQGq5O9DV(pBa-$sjM<>PdSjor{9w_{CmneqHEVbZD zr3q%9*g85(QJG|E4gnFL(xOR&mwLYMw3me%pF+Y4YkbV=yn@!j?5fuW48uLoFG`6n zGZ9^wf17`;sW>_+O&21Y)+01;`KDPj~0@uLK%tW)V9PEySmkHeSnmW1k|51$MJ zH~Yj?Rh>?{l&4i2jd{RbErz009cU0Ed^>pU!-!0hO@Xp~cl`Fp@V4a*Dm1T+@$E^n z4m;u+TZzDmUv2MuDs*48br|Km-g$aT+RYfZ9d9)IAKm}S^jy=y+$^~-ev>URlLl+p zD>g)3Y6k&jSPq*JcpED%R6uK zY~oavohLGPCVb9OD}FJAe_ppD(wfIHiXLMhBioyfkl+*qPdjw4+4%|;q_sA&tQw@q z9>Hl5x%y=Z^S4B{<7(Je&3 zZR3(kQQ3`ayK-p{Y{P&j<0jh9GrnbSFRc5*4OMgYCvkkC9JDH zQx`QAcbdn_9`Ac-u7TzD=BXX~08JT`cgb(8kR*5Zzx;7rwZukWB3CHc6V*`i20Z7{ zgXLsgbED#PN)Q#xZG$t&tH=MrwT^omHRZu1N-<=6X!%{qDhfmOfUs^a$47eCFsP_= zHJB>5EFi!xqUbs8$Q&`@ zxve`_;~IxrLxDjzxQ8cNw2n_?N!hhdUk#f0-EL>e9w|L-m9QTAgG{3Un?Pj0{lkS7 zjrH3)3uq*iIdf_@m2QZMF1fy>1FhitQH41@+<)Lc;-v`N7YS)t}!Bc8} z*)Vyo=K}w9Pw#?J_cSww<-Lj;Y{AOMzhZdrFuyC z2B4?F>h8L|5AD)YkY|*A`6g>8Dd&mlkL7-5*#}?qK=QT{3Fg<`*rXyftfI)IOnd;v zzaj*dqfh0DC0fk^F*i}K1JjCaG0RlCe7Wvd;rc0_Y=oX#%&p|Fce6lddwHslXoJ>o zxNU5tgA>No2ani8cTkZ3ednK_RAXFd=OSjv-$j?RJb4V?^jq`v;OlbD@mY6$*LHv& z*0R!?4t=^WH}v&wR?qoMTWv=?X&WdUsDe8J;|%(t05}!VbB$P9oD#W!Zdmxm{8o!@ zGV=AHiPGb<>4?zyA|0{gb9r~UJh*XdIp0I3>s5RCB*+{%GbgVYFQ0&~HOmh-P#aRX zxNc|cF^ed!jKJa_>vMf5%_-0VrkF3m|5DpWY%0ik;H=9eFT!Z~dN22QY1L~JeQvhUW! z6L;S3;Ohr$12>CLUtg`%!{uf<6_%g7KR-(F2WSt=HE@nh=LG8T;rEyDpQz&!4n7^( zt9?i*MZFFM0JBTuKe<_w4DJW))Pn*~OBI!-f$L^nC#dX(-p-Dz#+U~U@DZ$$0u}<@ zru`3gPg*)%b$PZYc4-lo)h>qoeGuz@I)n?JX3>nYmK@xpXS(qIrOD8-e*N>j* zgAKcU8Swh+E+w=6^Eygx4=+T|OSLjyYn60CGYAPcPVmE%B$K1jd@%C- z*N7x4MUb-V#2kXXU?T#`v!4g%<^I-38T6f3a{YCAq2M1ZH%hU< z*XB6x+VC7SZYx*&*!&4EOn=aA+{N$Od$554yeWoAv~K$e3S{Wy?_-No)jWHw`4pOS zYxvU|O=}w4@h^3!9a-8to}fH?RaN$QM_qi0vl3*Mi}M~>`{rI~fmpa$V7=qR@KEKt z->aD3QRA9CBPfaa@XvA@HAGi#%l9WwKb!u51+~OJf!y$}a$dS(LOi7vPtUhoJ=pC09ZfIRX&{iXhOz zYN0J;y2dVGqqT=jla~x}LBQT`!B5cA4~AM1qF_K0oB4? zy4nOs=WAgZ&ywU`zpbiPgS>)YonVD~Y|(tomsMT4<)FkKaO&3e#OBZ~*>L@T$7`dF zDKzANFO#H_tG)4pz0w0SsJP?r9kdt=v(!@jC@INFAhXhI;oEnTR>(k4(R^&-l9e0n zRQH&9UlHE>n*;EWR)$f>iMJ>B0vwl6VfE<{ySFdtRKyfnw*g*xl=-%7-PuaH%Q!ZRNNk$cOMvTuSiqQ7R~647@? zG1Bq0a(c9UyF*J-cRuOS)=_>PfMynNz#mz_S=mG~x=_JR@olF^>nu3oZY8n$;N4l9x?s`uXVGl{SADX6rP=I>H6>Kt#)U>ZkU+CL<@ttqk4ELwwyvyF8VP2E$Z+SoI?_=`5*B{zmZ#K>dDsui zF<-N!3R>vKh{vf&Ho}uT9W)IbZ3LP3H@uh0XOpTllpgB6pEY9)%D1oJoq2=W*eU-f zjlV-pP;*1p=c;$a{Z+DuPgS;zn4XzyubBKND4LTl`D?~Fa)T=Cp>HlIoTc+6uYBD@ zjJf?!2mesv^@1uc)=1lxtot!|{*}!G(Awi7*J0}3lVthq!?s**$RItPmWwrhW`b$W zF)wqLmQ#^w3i#sB=dit z{U{j!WXkhztJt%wqmq*561-rY*E#x=8*SS@y50j%>kvm-YK?!$EISqvZ1<|=uxofI zVnOG&U3A?-u$Sji^Bi7cosKQ<9F&3KBwZruNj50F{bh;tJ?$7_{{bWK4VY~w2xZ4s!lD!79od*BCy_bs^*Hx{{fo%Vi zm100goRVPwd>!Uzpn|(C0Quvxa-H_>F9f%vzM|xUfpYO`m;ncT`i5uZKEK zo*df$Ku6J>q9N&?n$Ul)vuB$y8e-_s`Hj%hF~fj-JdIB0fah9T4!!=3?zNkC2K$v0 zOVU)Drw~L)wUk&D2C=p<&jjRz}1z(f}_| zs4?=?&q$Fd-MO(U+odUc??v+UkKj&o5BM)Fk%vlYdGpg)B{E9MwXr^S-WoFlVusSH1*v5H+v=_0!7!m6fZ|HN2zgs5K%}bhOErX_Olo;QrX$8OvlSK441Int3=ou zNj=IP6TNQ{Ca&1g=NzBT>GlTwII9-M8h1-u`$Od)MDCpEk%lZxn!YA`5~wxGAzzT4 zZ0@-l1k^l*G;h*&e3fcIk@&|3_7ssH&U_Az-@93Go^p#*1^u=6oW(W!U3_VUq@DeD zl>t1R6MgI(Yj(y82_+K?=dMV`P6wp+3Jf}L*54U6CrEM{aNy>3bRARj0|H$D4|OkU z2mYo|-+Ls>w>`xqb;s9WtfciO2vpw}6lh3tZ4?TM%fdrhvDbVLJL zrm-}rg+N2`0^kf~_(n<(bfuM1M(o*}=X%QXRA|Pb`_!0ISpxzyS>m6TfP5z#%`D@H zc8KwcvA_s@YR0T%LJ#Z7Qv7xl_MZNyFAuYiJdP?x)6 zXv|y-N}tHHvsNTH-@hm&E$Gaam>^9Dw8Z^AUNmQ607E_Hb_Pa`~ z$>`WAnK)^UIk;W=r z&DW6kt(hx}l%r70HTpQ;b<}8G0kxPCbqK@VWXW~SzVAe0PjIjV=%$5k@a&WAlV%?J zfqZK$l2sIDJbG*D#ya1N@5gNqyl?UsldRMx@0G5#FuL5kqvrpu%~cyUu${FtKae*e zfcEX351;O# z$L0W%sX}-9g%N6g-{+W9V+&#qRKvUJ<}?!6_6Z@|!|~n@bZB3#PwW4AUC&xvSdO4A zN^+=}R(aQTR#ucFi|)g}_xJHti3(M@k6|~}3e0V8qC3|&!Yocs)xS6DI$P?ijS}_TQS^HI z5A?VMjGGCUrQ?zvuMbISTV9wcy0K?5Ccbj488WuWzN1aua@)508>wdLqe^2q95yO< zFP4k=71$s3&~5t_4p(zaQR(&NDF~YIA<@Q?FJF^&(I^mq1ig%y_%*!~N)R~YZrlEB ziG|mZ5BK~Am8m2YO}ojt3~h(8X7Sg(AZXhjdJ1lYBsMAbeF`F45iU3M;E;2;8nsrk zn6O)qMWFvSbZo{FH)yx@5USnfGI2GVzgctWYwW=8XAhtbAHhgW!T)fO)_fqUs_m{L zbK$p4DBh7E#vo=Ez6@9o*ZDsHe?Wl0lqbox4P|a*b98cLVQmd%Ze(v_Y7H?oATS_r zVrmUMJTFXTZfA68AT~8MGd4axb98cLVQmcx!@nbC66cC$xickrs%7S8 zGk2ToZBO$1MdX3ODv9j(U5YEI5{(v>yDaIC^PFPIU0L+}pJ!i|y;+*(mxXIZVq0{x zc{`02w<~@An&FoWo8-7CMPY6u!RZ&Ik4(sOf>&1Drd+lDHq*;8@nc8Hh}5g7>19cD z`$V^4^h=V3$K@@AwScQC`yl$AVc9^tUKD{l5xjFJ@X@g$~HDO30 z65W3J^&V7WHA-A5*;T>q3U=Xc>(NqV$8nIrc3?4)5&a`K-J_{}o+Vihxvh_urS*Kx zu8CgTh^20{NGbm=f1ZDqI#NbTeh(|JVLFY{=OH)EVgy3DE&ORNB>sntNeq&fif&<2 zp&(++{LmuC1x)o~5}D?>7C%`1`bdf0D0#hzd=(HMv+2|On&^48=lhDbp@*X*N`J#B zd0c$F6~Ci(y+iS%q9xhYO%mm*Au_vy!z{dQ!rLNw?J-T?EJ3Mha@o+DdQK8GzpcDZ z)wA4rzKNRPw{_d`2l8dP;^A99e&|G34(HuA`ukpPV-ahylt?evshLJn*Vin+i2m37 ze$Me^%e?!JkVrLLRzNT;i=uv_Dq4mS{UWt|YFAtobM$oe{jRd?w%H+=dfOF`-l8=^ zz>gR_SW0wqWD$W@M4(SQD0;1eSA7g^5tKns#KW_Ixjw4OW}OwO(hXP(2C7t2$Efwp!|&Cy z((8)&{o8Hx$DP`=#m`lQJSaBhNl-^i+9XX(BAM5V4#E2KKB_50^2mVnmHr;V=lJ7R z_)X#g`6_#hp=d2n?m0?J`}5wf3p<^$(~0dmjVk3yPkZz}DM`ZDB76O+!H}q2go#Kj>fr#|u|3dsx$7O%Hq4D1ohb zwM@0Vvg4EwFLKi?9-YU@3&#ixme)IK{_Hw`p2rMBYx%lkni6Qm2*lzfaw&!Aab(SL zOLj-7h+@x{+`{l!)T*TT70qy-o~8L!A>v_-dL1v+im%7=JOt10kwiOLxdAch^_Wr! zl%nvq=_Faw>o!PSGA0mferJwTK{h8hKCy4@b#2zcLC-}@rNgB}#Vchp0-5gmhvS)% z5*;x!b~xf8SYlO?ikjH;#)*r@N$eEQ{&|k%c8sP)=(&fT$o-b=^r=l-xKJ)AQ*M^N zIimPFOXwfTZBv`}XsNI054$KO5vry~b{l2{3c+&|9D7pK4#8Ut<*#eW?hSTuwt4CA zAX-d*Xh9j-@lR^rVR&*lzlst;0|p6(YtT!%sS1CuURMu6P@3lG35VVZh!jy)MkCN8#-e zTDn^HejE#WZTN+FdJ*6Ew5rEdebqF*YKd=)eP8JN$N% zw7*Z3t|OJr#jr0)6RQeA!@`3M3d(2yu;^Wqzx%QvG0_1dkwP-!duq@7lp&1OC&>XuuyOeGlxu_w4SC zM;Bs7g$6Zx)$hqoPp|s2A&b^z^9b zX?9b7UG&B!`>ujSni+{)?n*L4HtUp|jS)I>Z~y`hF!B7S^dz}w7%G#GlaLrK%iG3s zI4Jn#0p~XpJ%Zm;RsQ=Fo9C`S|>%% zidKLCM)=?bCzz4a5?WIk6UYXMN(QWCBgE7q^*ODj4i%ITNI(KAV6T_e2}X#kN6X0) zFjUZZsZ=lvLdo46RlHb1w4nKXXSx+BW$nbDcS^4-b znN9K7B08<&>oPy@;_LrOrkqMZ(3l|;i?OIuBp+T!%l7L;aC_q6UvFzW?N`qgkpJT) z<%k$7UP>UG{Mt_Ype2cZqhJ^%$1_Y|F;HSMNL;Tu{-9-llBk)z!BV2q^_e7V68r(i zga{fI8z(RrRp_MGa~X!@vx#o|CYh4kRt>v^`Wdhkif4!IIB1^tS1l3!p%}KuFJ zMMsLss(w*E`beLP@VSjx3ue!{DeB}GO3PSIzit`j_jkOwu$)Fh*nok=jTkSa5v-m~ z?rM5fQk$OQHYMbzggiZJ&ImavK*x*^DzOzDX1QM#9PUeS1&p-<4`4uu8#iF~oCJ*t z1$>y11dA0KQ6H1tP)h!0r~w5W-~$q1j2%1Gog@~ANVHDV?hE78eS(QKmvrc$Cu z4wDec7C#r=&VceANKi9Yq8&z7K1^JuckN+COb-<*R`(s^=PFt!6(`Wl$@7Gd7!3$w zhn1f1>Um=Nz?ecbC6Ee|$K=QR*7VyGhRdrtenD>J)3cyVCfsh_u}X+{Nr_rqD%dC# z`+rZ%vhaCkb%H^eM0Om8%P>Fx*|Y?=J6KA777gj?9$rKUAVUQcGG>CHSs|hYi;fi$ zk{r8q+(yZWDVA~aGsWwP=k{R&(_sP|@!-9BqFM*#zgeV4t$GHvX-v0iSS1$H=XKX6 zn%2>ib;l^5KBfdR>G2c1{%L8CppTj-_~lJfq@pBOr9-bbNgC2m^XW@!nS_>oF@&`a zC^cg>y_clg>HK90o8yzbREkbnE2`Gx^27Le)2oXW0nuUG6K1Xsbr9}Sh#JI<%&wx#E%{#IDNv;C;d#5`jLf<5I1NJ|_NM0@_tfA|6=C@Gt{Yl3^V!Pe48mN_2z7wPHn5 z!7T_aUpYO1A2^;6qK8#It9W!BBB~-sl{?n31C4vDvmD=>Qo-`;> z4U*Q(YV;xm^^zieUe*-1LC~z2eD+X#g3{4MpGj~zHn%-gu>6SeVulFp1xuBZ-xwal z=+-5(BNp|bBM&hv3@{>y(`}FF^pBI54Hk(;#G~Y}3J^}C`n2@;2No<%KAsbG5EujvZwRKrDuX`Wd~|BDw2X5?|z zaH&;MF8iaUONa-ps9ugPr4a#a#PECZA1zje2f*l`juCO)LZ zicq1FM2i+4E3gsldeW3fOiTiV2x6q3KUiWsSVDGa8QGzQgk|&zv1nh09B?9uB5vFm z#WBjK=V9U+qQ%M+Jj}Sj0EFOSMT`k{Q*?~PjTkQ^(Monl`a7o6ETEp{qyK0jfid#3 z$xtQK(}<~D{(T0N!&r%6Odb@_4nz87NI%I{{}o-aI>B(EXjmm07m0^UOr`XfY#HX~ zGOU!YqWy}-m_jtAUqwiN;pY)vX6?1eev@3b=p8$cj~I zq}OYtl*~XmNeO*+fI*1>5k3&mgAXEF#K35kSU|j|Jy}wrC2G7V`9ZE+-hrYLB4$L0 zlvfVdNd%us?~0n;8L^a0h%eD+5gTsBD{P-zxomn@8zrq7*GhHMG_H}36_Fb#AuvW< zETTW8*Ht+E0%Zh<88=?LUH}{|Ch)^X5GOGfBTwpGL#PQ#O%vPgO>r;9l+gbGB7nd{ zP)2O!fF5iJ;X*2ghuj~wOsWjvnu|L!q+T7du(=Ftuue# zkC&7dQc31M`}1m$uw1lCF{e+;XWv6m);cOkpB*PK7#)*VbOpDu`c(n#Fr!~a^pn_> zb;}W8A_yU7xM0n*%4J9PdW5f0cv}XGM6&0h^yDFC<;F`TGP@`G%<|(UyWN+gZ;mfq zsMNcL$-fo4_&ifd(|u0R=QM1dEp!9rxwP!nN{%0h&O?a0uBgi5oGDpz&e`HB#Ae*Q=J+(geh#q(mg8Pg{m3m$8uknbHSkw`WQo z9wx1o-Zs4{?2dVy#9%i)qR%-47b-ClQ~&}sUS3E*9vKp!#0!-jDKQgYH_2_tO-nwz5;9kDBEO=-DFJA|-nH>>`x(jG-t!Kd0#-N8cQG^h7nS1VOPQ z1Vt0tOY%4uyP4~}9jA7jU6QMs&PNjWJ{pndh6@#=Uy)jpT9nN?w%4iry$V%nCqoy| z4ung{5;0bKczK!ZG(Ubbm(8?PG&q3>3gANzFj`)KjukOlq>x-*#Vp-vuh!|!Q3)P7 zSV|<(Ikxb14Af@^#GlyoQ;sFov_Vb<^l`yj?IQS!*%f|f>1`V?(}}-(&=ViS(d+II z<6`3R{gU*QAPZl^h1*;^4ij*HIuollfBkEb8K(5`^ zS(L@9#G>?(`S+JSU%9OfelgdH@w7^}KWtiB)fuZ05h}1HRIngH<5GIpemze#?7HU? z?2=ry1*AKH!vzm5B|WHEDFVg}%qX;r;fq(Qh!!v`qaWp-DIOa~$;yY8kRK$h8ZlK1 zr(>`qV#W#=AtEX{PQB~PCx6i**-(KYp<~4XcA!xb>P@uUQu@rGLL__*!{--1hwygm zhFeY{)xL-HwvCWdjaP}K$62ikDn(EE{p$E*W(Eax@}TI5HHCmFd4k5w4k)mf5P#C! zAl2keaV6w&-L;B6U#&?}MU>o*Ry2j<$Hkk=5e0*DZz9-vIQrS`IH$%Od-HTm1w}!8XbNLan}VPKNVcv@A<9r zoo;`4cc}z-J=TwNw|PlUyRNF&T~@=sZ=&{x_|G<(d%_&sf>)amOxYiHk4iLhN#y&J z(0$;TUut{y4GKk|w$m5R>0Eb5e>LJi*U5C+1kyMB@n0zSxqY$q4d=SgiUd4iRPn)qtjCrTH= zlYez{Ql6@qAl`c?cG&GiMZ{@xt0qsnph8Y?^Q?&}Hh7|6(U_dCRg=c6z6o4@JF$3s zo~T_ACtqr)NiQmU0;&&~_-h*zQMI+i2B3Cc1xP* zT0l*H)67Zf)!+&KzBw`1qVnMCCw?yb+SCzDZ(=R!NvcU4nWTeE;;%5On1pqbS3zUYznGYy&HJwkzV*q|h$Iv{kr||&N zo&hTs>JN3#njSy2=z~E{Jgw)y=jJ(#2cD5Q9fZ*ooTlT+_0@wQ2FRN;^Z8GkBbATP zb!r2QT2L%a7On;mPFhi~D#DWv8LR_}BHaPL!PS>p4|)MWGm)K466zQ&b~P3J)Ckei zUNw3_d|eWHQE_P3AP~!9Em`l4J-b*@ILv0{N1woVh>Xs1$=YWI{KrXVMnWV*iBr<^TBB5tm481wrMTJW@>SFfa!FYm+0 z7_2U5?rK|gaCHE-HLuf^^?gvKX;G_P;B||ox@a7v6_7@o)_IE7n!o({Oz(3^2QnRj zn&;hBbk;${r>Os1864@lQ_n`H$P415To{KIn69t@6s&;nqjp4sM>{dB`K6rO@I$)a z`IU?=UHD(Fj%7wsm#>wO=A&ut)e|b(n-3aT73XK-q79A^B$#Yh;o8UB&We-9*Leq3 z8fSzKfF_F+n1db4NMa!ZY_vsxTxo{@81&z$MZo;DO9J4*^amoqrk@lCm?+ehZF7kP zUGSEFm-(Je5;Iwo{}IuX!34g?fZnrXOkG_}4*@NYxiu(w2Fi^WoUlHuKl?sjlX4m4|0 z{;C~Mpw9}*FOhnv4F@Oc~Hc9EOWcei5UA{%MnYC`_8bs1tkDxwwT@5SHrQw7)tY zvJ(kxtjR$LTuKJu>8*!ihV$CFIb~CusmCq}Vq(m&^0k&WqQ&}$lO+w@WGh?+SrI2oJMGL_%{{?kadQ-6>=BRiRmX`Q&F4A$9 zZ3*F9sIE{UKcX?&&q@%PSSo*6wlQpa?G5kd>L(ogbN7$*|hvGd5oi6Je>z zNskIK!l)pSHaQ zIJlsyoP6zu2t5fGyxXekg>kk&z&p6ac+-lI1|EhrYWge2oojBQy3g_ zoGvfN$IGMzZHeBA`6A`&bi?W_)rEDu2$B7->LE zY@8l=V>qf<{u5l7Kmds5B%H!68#p`Jj7DQHvF!I~=43-z647gnC%0m!2kAv~`88+?hX1m|HA;=@D+Spp6}y-+eqffua6xzab@A1cmG5YGk%dldYD^}QN* zn+Oi@5?%vPM)7#0rZ;UM5THehc*LgB`4@(G55SPW3qD8R1Q|P7hW%np(PPWFF@X&c z8jsVwY#BK^iqPn*e#)_`^iV~}hy7z=nn2GzEVFfp1{04;Jd`XtaXKDbz4Mr52MzRe zDyI%Xbyxh3)OV}4iIl+Gc;9iOscc=u<^ZJme+VU<^Jc&y4TrckEvM zRLC!XLR{?6w+=4jcIT~#w!CTo?X8O#JLO2EhHU&G82qZ-!15F%ziUyTgPset=0$Vx zi*^P6_%XeR1>yWi)8z)r1rZa8!neRB)RFSa(2T_j_(;9>1!mi(P74h|La}2|%L`hnNEs5Bp-*IrU9yB2PjzO%jnHg&Pq2JxpRruo^Wc5%r?%r$54m|gXy{-N!5UAvVDn)28KAn>cXVe79+37oQo-CE)#*Z|NAK{r8{L|uFC55 z>hG`&M@hnZ2Ve0SVN9{c=P3#!T~izh{2r=~AgXnRz2Y|5$Y9T=$e!|dsKgu#LaN=5lcI$M2ydDFPwg09q{M|sBc_x1bit%0$R8xyoziAShmGLT}SkFYMt{-p(cf5E%C~Yr3 z_EnBSDH>8uGj}lF5@Gfn1g`9M`=<^(NotpFDZEbj>FvI|aE5!aTWvH{;oQz!{W_ZeS8q+6xBw>|u@zPFAO+ELAmlUhxj*Og4&}rlZ zdGmmtvh%?p-n}iL=j;KK^|Z*8KGqm)=#aDykIO*ai}symna(IE3I_Lupk92&)}?Kd zAj0J_I8AmP=yv5j{P58-TEs6$1f2ofU#1#PfWy#!U!sPkE2cxa!d#PGNJ=Upo`ayH zaT&c!xEW3@sv#>Vi*Q8ZiDJ*&+^e9_7yZJwcH}t^+-~UzBnX>{tY%16?OtiSGk(M= zUxWclkO}1WVzCUDjprA1T#XEa)J?{G_0yE^dfL;s^}fOdr5#O+2@;AE7WcA#o^fR? zdf1bUwg=X6BtXr(doF>Fm;cf{m``0p5iWGsU80%HNXodGoaiMLqm>5A?T;6P-;cNQZ?gP&_Zx0IEq{08=(X24}uGNR3rxe!1lT9dn`;(x46ud zs$3|zfTG19d__)zU|=a~Z2F-R4%3@ipS2k};rdEVcb8bQ`1R0sZa-bkSQDQUDt{F0 zb*UBE+VSEUEhu8{b5ldhO0;vv#7$E+0CD0E=HtC6d*efnPH#Y=LKK5B70nn?&>Jhp z8#^Fhh_FaWkBpuMlIbip;{-u?vU!Z**|FwKv0qkI40<1DZfTJ3r;-3 zaT$lQ00$vURfIkMLBWS*GNBCqAAGr?HV?8PXS0?eWS(&#c28u~ya<3ZU{{m6-Yi&t zrJ}A)_+Xe2Y zdUj<4wgPI~bx?`4gc8tAg?llRS?>S5Vmb0EPR30zW+|HjpCGoHOL1|^)JQp=FE5Am z%whngVtObxyw1v1s)@<(mXvFWx@20w9{^UPdGIi87PK*zB47`dd3)bERGEv5NWo~+ z$o1Zf%MNdh;xZ_FxDL!jMV?-K@Vc9}h&?^{MT&3woMgw;SZ5~<`Y)6D^#Z2NF?o;? zCQ<;zXx?`DC#v-IXRzP^|;M z(7Q>pYddMZ%|Fx8GB&8%6)_Q^LCr{MlV;+mq(&NT0;ypP0Cw}W42QQl11)_(U1Z7b zuXEcML;XbPqp;1)Fdj#SDJEpvm95BX_D z6kkCAQ!j9bo2RHqU8$)D+2?KCEppw8D`fJ?w8pd7XQ#nrjLAonq|@(b#O<7kbJT8n z+zj02A115Cd#uIoXyX8yHWpyKP>Qtw${#sHr%(sk3ihjb@vRrOGd8={aqLpfh_EpB z1^ovWo{2hOHMV!vA2(aS?Zb~j_EO%(EoR;Obv_sN0A*3XxZVTUAuta)qg=xZ?%(Pn#{Q zN`YU$oaSkoEe}z0qiblL)2AosMLDbiIGGG37Y}vXMmagL`0{bwK>T&V76CJ#d&9IO zKc*|48WX1i@(ZPAjyk~A!~T#a3xQFbGZ-a)vLxTR#(=$$JVT!SWJ;f4AQmuyof#Eo z&T{=r<0z>8IN>9~p1UJ^1HV-S!mX1zGM#Wz@Q!AKm46MwQaw9Q7a)COn3&BpkwRdJ=`$CSCjMWg3+DHpKqtw6Bt;$-m4>JF>Gk}PO>d!eLjLKgNWif+Ji&^x9{PXrXTn95L(tORp3T4eNL6fWKK zntNL*p`tRE*X$cQQHc8p1;>Gk{4Z_AQ(hJ^54L=Zqg%Ku@dD&Yl?IsrM%)!iGvdE9RvFv7MHxKQ4s=6 zBmkQYBS*thWR5I}rF*6SMg+C@IK=Y&Sg0ZWFenwwL6ERu3e+X zt%W7b6AK=~il)s$xKY%a6E;_8&JZYw!$K%^gI^}5wH$T^byUFOBwj7H3_DQ&2z^sV zrW_4E<8w6_mWv3@co0OXa8oZq-YalBUROIlnm~>J|c>og|Z=KCj6=61QgU z3kiQJQT(sNSn`SDxNj4XPx*B_q@c?l(Y)%aT zob%V;)akCI%5M7~1iw_Ygg%062%r<8*xJxsdSi373uypN&+K)KzTsyJ zRKpDOm_YgKrMy%uEIbWk>43lGq-`zB);eVI*_PN-D(Q49{xF`5iM!{NVlbH&$oX0( z|7lsiV#6OqV~!<{Eln`XTq>ERfj|pr_J#^}#(j7wCxsY5rZ6}2&BQvTF zQ50q&{qs)!YB*(^%@`Ghn0~egc{_}4{L*ia1oeO;cv)Oh;RSnaU-?i@r#);v`YDsA z$j9F3o+!-Q)ZaHr~bkq{tIbBpv5mPgUc{|GaUG^&D$W(;f9av2`V`X^^VC;&?Rv zgx;?}TmEB@G=wrNHeU+#^$ki274AUQ({RLRsT&u0N>6RJr4oQ|#7F@5WH~~Eoq}xP zNZ#Vhtvw@J_?o50DT zO))7X8;A{llL%NuZfX!r0w5M1qOmr5VvEa({W~HkEjz*xL-%h|tkSZqSyg$orD(*2 z(T+yMa0dmK{=Y-W!{$`)aXQFjz}sg_(w*DcOlu~N11NM9P0u?#d8ZHxJ|%g=FoHZh zbJN&c*4zYFn)QdsXs{}mB)M7e)7cWr|h_%0qf+DKAE%a9Hs@=qpZX^qMZq zIYLG%W8Woy;_HI^RgS0L?{sy&2eP*2_M!dX_+WMB z)o(jupj>a`tK-60L-^DlHr>b8o~ZA`%9QC?aspbK$143Y=7azyig^=;^HH9?V$ph6 zz-rov(g79&;p+Zs8`2-Fq6&@W2KA*NzYM8D5iJN!nsE_|cM$lokWUCOD1J9E_zikf zV*W>R-UmPu1e$q)N6vbfjXm8akzgFAh^=NahM{A8Ts#arkHo+X^Dq4&;8&R|wFsac zfV_%LZ+*l}5X+jGsB`Pd;Y8nf;>HG(2wEd;N9mIGRCp6QgDhb#EZP$GCF*Sg?bwpY z&Oy3I6vNTxwCwv;9n={8CqS+7&aBPo$T28zFaV@e#|x15h|D4QGY**+0LFo;Rb_*U znfM5~=8@G6w}V?eQmEb$o@O##ckV?v4MNR#xurkV-a4Bn%0voPh|5g)*5qEBnb~?U zGptXteG;Ea*zml2@|qE^TSzQU9x1eRPuRq639Fx)!n?}+!Jn-O%*=cVOF;4g0|z-DGT_l0{HKN^vn zgFKBLqAQ7w<*u+fr-(mg*eRADCK`09nUI0JaBZ6Q?DhnJsc=4+V$RyE^*|G^81poO z2hYEKz-N=15!f}PMSc=A{R44jlLw&%k|mozL;)a0)-uyy+e2dDVIHF_jT_4+?R)=^(jVOnKo&{7vmsjj;qcpw^0&=nZ)WIlg7~Bea}2Ftgg6j?1~aQ zcA50L$G{=^h{ZD)8E6>=k$=mnfdLRSxK@l_vRf(^N!+u;r7a}M)c1j~?QcIOTp{Aw zf{U0;?+wlcYma$f3A^KZ1u!rRx7#8CvoxpqKakiBC+ z(xEmX)&r#L8fzPH#lt5Bl{^?)=cbc03w2@WIm=^;`l`VAIg9Au`nK}#OE?oMTiwJ% zK8nW@N*o62QioC`kId13vm63p*<2HrQ(*}{3iRF+3a2v}x7JtOrgYS4Mqmw%@t{E_ z{I@v@CjzKPLG)=@;d9x^=iqmY;q%YQA-*n9Pchqw8>+=YTOPY7bJyXR9vYY~NgDD- zGO}PzxUGRpMg##|uKNhre?5trs-hkAfiYylxgnA{K*`aVa2M3!7LrdnE7+GPdw%i<{y><}{)yOU690#}QDZ zFEGAjh{;ul7B2{NxsWMfoE>=Hs2ZMxoRO#=;#{t1$g( z4uuNRIE}`Z2oNEvo585*aO9O9G6Yv>EaP{z_0I6ded`p6UK5mqpII$3yz1b>cMhI% zlBN7ojbmK89El2Ek=iO&v|vJ46`&sdeBn1Ad;%V;e+e9s7XS#uqsBe*D_U4Ub_(Yu zZqxfW#e9`D!P9Q&ci=5VL2S)!DI(nwb4-lSMuD_q>!<+6h>{T7{Hoj|9jU4dBtHfa zrs0Q^73#@Gx-%kk2^#=jvJ@8@GxpMl;{)t6&{(&;ofJC&}q_1kR|vD)I2Gy!-?6U1chRx8l-9&+{T}^j>34JO$y!f1=Fo+~H$HdDj}njNd=Gx?ws{n}(o%H~4#*ZaSE#DXmmv{VM% z+@_*Sj6bRx&&X)m@Ji-VahIYdO+|2UpSV<54e;80WE;>+AhxFb6aTG4uV`gsla%G6?*yFfLDwBtV({mAHo)l<$s+cH895 z;mcnL2vJQtd?0J3!J|H7(8#jO&2S7Xm`TRiqQ@XY=g*z|Wopl&VmIF#4vicv?zpJU z$fP{6ynhRU6uNAqOH^KTzWOdCdiZFLHx*QeOe{~x$4yL`Er@{#YjeYMbOr!ph7~+6 zk^_w#P;zjw-!`rHv@Pqo3?9#UecyY&=J#0Urm1oMR>6WsMIX!5xQdwPbv$07_jD|y ztH@~^XR+euW%7JQtb#?ZBJS-RkM(=MV;UZ(XB4$Z{A>#e1J&Ah zaP`y%x`mIZ1jS!OfpR-KSWp=BZd|_glxL|-ANzC-w4TW1Ud!1Y8OLV~Zs? zfA4#5>ph;|Hl5RVe$#m_^ZC8^`%daSZSN{p(6tJgo2SWD#P@Bhh;f|8V-_@xOw7W* z?LB9a&&cpQ4W7p-WCr`mKV;XKJ3-cNKIzL(?ka z+MdB<8X7&1>AKJRn?{D#Ya7>B?6tnf`U({?@olfb<6g)6nC9+#+h(DH3o{@Ag*ilo zuPr`24eL{Opj=@7-U6Jz*F82V%=i4?5at$vaIt?#aO-xR2WMv>a4Jc-KZES9DWMwUGZ)9a|VQqF{Y;`eoFF|s0VR>a# zb#h{LY-Mg^J7Z{RY-Dm}ZgX^LbYo~#X>4V4C~j|4GGTOda%p09bY(jrEN*pePh)gp zc4A?3Wkzykadl;GV|gerE-*E6Wpj0GbaZucVrFGSZ*6dIb7^#GZf|g9a$$6Da%pZ; zZ*_8GWk+&haA;|1X=Fi3Utcj~cWGpFXfZG_C3$aRYGq?|Xn1%pL}g|mJ2Yl;VPkY* zY))@!b2LX`b#rrRVQxZfbultxb97`xWp-(1Wlv^ib7gO2WMortWn*=0VRB4qXJ~X# zZ)t9HOf4}mFfcGJHF$b5dUJ4PV^4K?Y-}xKZ)|UJI(KMuLvL<#bYX6EC`EX1Z*FCE za%N#;Wnpq@bZBj5bZlvKYcOjxYilzyGBGeQO=WUtPH$vFWp-t3Q)ppiZ+A2;GI@AS zZ*p*GZ)|U8d1+x}X>4I(WNCGCF)m_aWGygaL}_zyY+++%ZDnqBO<`~`Gk8O2VQy|^ zY*S@yWn)q@c|mhCW@STfY;ST+VRUk7G&3}9Fd#4>F=1|LZDw+BZDC_$b!~NSZ*FpB zb97;HVQhC{d0}K^X>@6Ja%FUHbZ=s1XE1Y4V_|G#O(<+>Ze?L)W@&6}W^!d^dSYW^ zIAdcmV`F1uIAddDF=Jz6LvL?vLNP5gEj2`6Ha2B)MRIRsHa0Y0C^vFtaAje1L?~%) zWMyV)ZZRM+J2EgJF*Q3fFfbr8FfcnHF*P7EFgr0IF(6VXb8u{FF>+;XZ+2v3P-%E& zY*1`rc{MN~H9ImeATlsJL}_Mbb#rBTWo&G3cROctWo2$VVr+F~J85oYX=iUcc4=>H zWpq1oWn?>Va$#;YL}_7qX>D~lWo%`3He@kuZZ&dcgD0r6jU+Q8k|YJG(E;KJ5&{f? zlPr$I6q=+15GPFf>0hOo-NW2X1QszXfy`|$nT>) zU}_`Bl?71382$!Dgd5dBxZefuXS7q?n zVH4T+jiF)z$pf-P+!W@Jm=&4DG5J_N4}6&>`RP|Uuus|ulaNvC*k6QUc3Fzy#IR}J zeM(U#La+r&w`1?jKj_|Ovl0+ZOtQ~VIiQ4r_)D&JWyUfNxFZ`!8rwpt*b>0l@xkDq zCB*LV$^)~3Nx=19{`7HQZ2buCBi#{Km_eDYq;Cpi_`|8H9BNFKI7}5fDO+;71Ri-< zz6h~(e^|Ujg8-aFQN=PDcwEgT6<`)8dNI%>(ljJZ4QI3sL~!atmcT7UQ5draGSEWG zCoNzB!`r+Ek;GOzp_a9cOhG#uBkhH)(4aE))RWpe(oa95V^KRMzlL-6|w@%MgnFL<*1aCWeMwBAF{*;2*ea| zZuCKEl35j&urI|BhldEEsg)q{U=)Q#s?pr5=soD2^spQ;j*t+BJ>;C>>1U-^1O~&f zVB>%o?%*9oKNi%9K-pjv2%G3{zLw3VJH%EfMKFS(u?}34p#(72ILgq;GmfSd@o=e? zk;9c0US^|r2FFEe_wGaj>NgS#mNGGkk<=MvUp(|*i%uy_3btqS>V6gpODa*NQu;Hr3r&-#{$SBkA8c@)gA38n54qxs zwTqt0lpP?C!bDr_Hq61ahF-))^ZGd2hD$++6edy;pl=I0}>hfF4f!#OZc}4uo zK*=oMi`lseUd&bTO!DyrG#czYVZIHZWD*LhGsFgfMyMj?bX>E7rw3?$&#jqB12~FQ z19bs_Ar3t!aq9AHI%n97f?ZI8?Vz`f+EE1&mR17o9~QGYj8Ub4AmMx*;CSF{h%gwC z7#z;AKG{iEamY3hqs1%XMdJC!hFLveE{n`o!F4}8zat_h7V>}SUPv?YycO|5J1f0JjVnhmlp|r1SgCOp z$p(zRqsE1?XON1Zy2x?|YKfNa1N#`zI&hz^kx^h|aR4{% zK-ne+#&Jv|13Doo^!gGE9f|nq`7wORN0blS>Zd*#Z0g&p^LU16WR$_09eEX^25QP* zRu<25o@=Y|0F6vnZFHw%v*gpNa-T`a1q3(7$n{e`ar#PICYw)1k*^h)`zL5neilzR zp(2E{f;Z(rWy;EeSTi#SD0UlT^?sN4)n3|2F8&K|rlDyc{K;|pgkrWm6X8O&7KhpO z6+}k`-y2`gtjlXjSu2EplCAdQ}`k$2n`^jpTe)4f-vh-xbArh2qVDZ zQ`olF^lS4-99K0jAE;X5HDLg>iqtFx1L|-oGb`Y3NRm8igELYix*N(j!dd|&R6CsN za|gnIAet;GLRbcM3;be?@pc#k4pajw126-0I1-|`gop!yG#ZHVlZubo@Z$mkQB8P| z#$ht6^G$eXTtJM2s1E6K928UTigF;BawJ66ObZS3D(}jw_GCLl*x(Tpqrw8I4+*LzeYs0~;{ty)5HqoHkj_s2IAjaL z>}QfC$wfN~$rK%j3ro|E;vW*mA(i=wxkeXkAZfYhqqp40K`(1{#Jd}7Hx37~RofIcw<~4f4xx+M5wG3ZcB0@y2lYHW0lYH8PVildDNQU&xe+SI$Nsxh%On zsHGnBj0W=kPkV_koJv_(uN==vu&_FyyWD@VHX04mY!|6+C;i|hQc-tK?U%Gm<|tII zcA8wiG zjD+ggr;j$$Snz1mM|$>CG{b?7><)iM;zxW8w@y2fKPS&;G_ZefOEvo}Rhw~8TFoAL z-yM7qJLB-dnWc=90!tI*E0@sHuA}xvt2ZsE}Q*;JyQ39kV~T-2_zjs*30SjZGWP_j|Or*g4d73#b$(Y zB*gY5->aitL`_=Rm76M`Sl%TowCcdO|Iwb3QuQ)Xd8($L3=0Fd>2j2JkZw z8VoRjIsz5|-~y8mC{O^xgb5H>&_DzV6F5L2f&>T}&Y)!J07XLu4p@Vtp#ldaRA_iW z!2uQ;A~f6q6e?g~KtW={;R3UOhK4!@9#A+yL;Vd9@*o^43;+WbCMX_IFhK}Vf#Lx} z1P~@nV2}V|!UP5fYyt!b5E6fZss|Pxm;eG66jW3fxI7xOLWn@2p~32Z6$S!HfdKH9 zT3^Wc-1qsktH$*nHa4y^t5GoM;(>s7MVDtrYEN&+Pu||5WWa!dVBOG;ZLKwlC^qYHk?mat|Po+xzqItgmg$vgSNyW87BkQQUlZ31`Kuv2{FvK-TVD zTg9xBoyfJSYnl=U0!asAbs%=XIuHYabNZydW*~0zbIqHr+(mY%b~~;tlBFDT8$vKm z2Vw_8em4-i+LR;lmQ}UgyybiDZua4&Ua{9yqd-Yn%c2;?C`MtUU>HRq#i88qMR6;+ zSIqN@;+4-LM==UJ8^tI_F^Zce9K|R`!CcZ@$AfSWlZ^{@&wP%;D38)cB3sGE1x6eP zNtPSMC`j={M*<dBWy~k zr`4{>+0|*&(K2cZ>x_f!qRDO2D0T$3PV;tcxsK_QZDdC~gJ@Vsn_RMdU)tHX5szq< z;1%P-VHBen7qmI67{$os^dZS~l&)L1GZJSW7jRG+4~tRo(9Ip!I27LSIFMmV%_Pnt z{b+Faqp>pO-tdgVa`Og93~zFJZcd5UG2C=!UnxUgw*n746ANz=qWIpUhh^;#D3M{$-{JS$sk z9u7o%N33fkghyDe#~&se4P@;(avz9s2>;#lZRbKo6j_Om4(mGMhU zZ}V?FygdDn)B3th)9iAM7rXABT4vb!-bF?|F?JcU)iv{cShvf4maKIQ!k-x#fS_R@ z5Qveg2S5T5iU}AVm=*~vOkjZqBp?+kK;eM`BryR62UtLU3K1+wSg?TER5s-*Q?4~j zmc`k*g%^>H#}v2VE4HIMP1X^A%+v|&W~0`wv%zVzCQV(`?{j}Ed}m4%Q|8j4;_V>^A8|lk9BD^GyYBuX~ohqn&yZe}7%fthB$K`7>`3>Xl7$ zPi=loH;Ub>biSAL#@1A3ze*?JU8lA`+fzksL$^GIla_m(T6lch7@p~`%E+pVY)zRo zkvTEN=q6dcv_+TuEs5>2Y!r9fDklBQZ2FeY#*X$i$Tt7nX(RrP7%6FOh*#ytYzUDFZ=6au^`x6+wbCeBP0yr@ zREd9ec5=8{ly@=aJCB6?M!3Q#72{TxBKi()3mqwl6{C-7T=uiDo$X!fQ`TSAz(FB+O;Zt5m;y3b!2@ymv zK?8CxH3%wz)C1Uz%?5#40J#GLF$l}kX=~q4^{f!FQLng*zTAzuANgj$!4!ypcor+LiXjYq2MW%vEK7%0&2z(NtB0Rmxy3Jwr~A%X`DWr4y3 z3NB!PyERN`SkQocG)w>h69B*iMg;}P#R6grAQ0PP)Bg2Y;km1RR;vOiA;#g5_Ot{J z2gac!_tJ8d0(Qydty?S9N~x1RYfm?-f_}!s> zL;!26yQ```4;(_RuDj~KRFhPu-DkLGZc$}TaeQ}omy8VdpCRX$R|b1t))m!js+83j zPBC+E{$jYDotcr{%?|H(msWZPV>2^Ep_Q4LnMs+3hp1@Cz=inZf3&+_^?G;x9S{HN zQ$*EMRYd)7x6CJ|Ju{aw?WlHDJ3YPYz4M-TPgA74oV<75b6ZpI`TtK#OG7hDOEWVw zGc+?ZGcz+YLo+i=GfT5HOUtyhv@}aIOG`^jyZ`R~JMBe#E3(#db8dgxtnF_1PVe;g zF6jsnIc;y5?r!hys+TN*C^8QdI~g)FF*`Fe6Dcz@lQJ_4rYuUm%wb?cJ=9AE)IB}a z(;GcSJ=Dt`!ZYC_;S$dFw%+0IUaZL6+FEC0&ewL=3BOoJh5`}sKR!C-Lirfa<`|4m zXN-3SV^cCSGi9(wYqUnQt1)o(-8DAOEhlECc4p=v#_mM$TpAz~XMAtBoCVZmlMLVTv>ZReI@O?Q`}FRRwJzF4KUdb_u4oj*fEhO?~O z+Z{U7J&tr`?`kdDHR`G9nbw^uH*WV~w;p41@*Xqh8P8Cc^K{5&xphlen5Tt=%y(?2 zM#wvYXfsddC+_XxcCv0_7qVgNTI2PRJ5Q7D%oG`aYRQuUy9yD2KrRf@pOLy(vz=WX zS9c-I`i`wib*pN*j>rC$F>2+ns`Yd6OZS&)THLAE_Cw7(OGV``cWSe>U0tc_>aEX; z*l7Rp)_%Rj8?u(|?tage#*2JRqq?@fQZX-}y{JU>%Y^A@5&$}b5dZ*iAPxz}BO0LDy&#KN#9fkPw=|0e&K zIEPH)!!M4)i2!gU>uwarKQdTh@Ld z-W$fhnh3nOR^1~rx@vLK^=Pz8;OLsw4WI^$iA$-hf6EPbVbi=AkeoFbw=T92t{T#FKOsC- zC7ga52`H_g(I>1h!S=EPS!?(f+@T{i+lUsg(XK<^QDwFa^l;)WobcNZufj zgR&2aV(#F2qd;o@9YR|2G?AOH{!jy;z2u)RECu{EAt-=9=CLM{R2%+ckhXghZWSGf zy}r@sGz?Fi?Jz%2GhEno(;hpD?1_bUf~76DIka=t{=uTSr6Y#DnXaLkFsNjSl`a;t z4V8NwF}%`--LN-AtqWB^pxGz5${W*S>|DG^fH($awsN|aw_7$MfvmK z4a6{Ua!6@0_m;`eMibUbNnAmwVBLa+uZSPWor}l#L(k*luN$voSiwoY+!k69*a0Q-t=8?8q6thSlu=J5f z#W(dpl!$rF6mT{Hn);|_lHZ0A0i+k!!u<20>5^|%iOMlvM5u3SW3q zddr2Ppg~~m4O~aHxJHdi5D2!djNtr&Zluj8`en>T`@w_gqW&${YPhaN-oZ*FTd02o z4nKOraAvj=!-jBxWp9Oppzt_GjfbWj;Sfq>gDCT$yTN1}&nTKm(c{zByK5nuxRU1_E#fR7s*VS8SR0E%iAjSyrcYWdds{MkL?Fl zWS>B!YKkxGHk^m?HqeCG?!FI>@9Q1s%2oGGWK})!KFDBqMas_6HWPe2gBdYXJdSN| ziOaKF&MQw9V0W#6XdkZ7IiEOg`XoaR)7d&PQ%qo$koN1lyY+O#WCAJ$GK>cI-tckG z3V#o@3#EpAUd@PZi?RaMo#0*JyrPbGGhzdWT8%|d(F|=U3t?;Gp(Mrn7h>G#i-ohT z7D!Pdg=Z^8V{&PpPxAh!Ar#8ycvaW%%_+qM$U5dJw{br|C*ZlV>S8dD*#9!d+uKB^ zyL_|l7+YjB*p?8=v_y> zck4v3Ae)1DN##70?LG1bqCgJs7}1YO96O7$qK#`&*e`Djh6U?zm5!lRl&*$=h8lN_ zmy*h&=w?((x^97HXd`8%&Q9@+2`mRs-fU*=_LT)KB-p!#wJ^`=Ixmciea1|V$6gC@ z;bhpEm)YQ}0}^`)fcABKKqV&>Ud$pT0cgZMBcYfQu@adJ=AO$y$EhdSJ=P}(|eXpUgo|LNB3A) zjxO4MzdbCL8?O1}N-@PkuxsoXRCQCF26|G!3}_6LH$XgA8X$eHaL}bHd4);hb@>w{ z0?WP4NQ@5@8D^3hI`L3jo^Y^*jS^`1D>MW6Uq^l4rq=j zFs?OeF|Fv?oF$hra}vJXalQq?RWPc35+DMa2SV71L18JboRbYJmjIf+@SuzBF*s;7 z_eP-Cq}Ap_7b;}t80tyjII6wby~GNbE$s!NgTaBEcZ-fAhNsGi^@4o5JhqAEOt>2J zx7GR8%yjwD(vbzu`3zn4x#gVs4nT+;iTnVA?8e|$s5d(Sc_=)o@Lx4A@rp^ch0$OT zi>!(UVm=l@(x29Jgnm2*86Lnzj(46+nst3)|dS_Qw|E5;4Aqu2RZ7z!FmXldw{+|wAn*;TJ2C?t|YFhv_7Hvo7h|8WcZfJ zCEe3#m$0O6wx19jD4>fa$>ffI=*}n zVbfZ{XHPX?ZqMtp7clIX@ZXrHk&SkyM?!n@2?1Mm8OX0DH-#~{8#tLYa{m?}`-K^3 z|6PQ=XHU#Vzx}sQicPx8@|n$~^(D__Q{*>P=f9`ztsGYV$9ys z<}kY~QTC3P8ju0Ko7r)=%u=<1sfSv?yL9NWn9t6ny*T+?B$cM$i_pJ=bw3UBuZgBQHh6uJMA&zC z$%_QuGgAm?f47ZArH8Y+q-Vf(#f^bo5|t)uSwZ7QZ3>BY_H1iqLW^Q_rUA1mJ-zd1 zC3u_>Y(}7BsG+J`>fqqsXCD!Nn*CycYX$cv=A*sdLiAnKZ1x~Ktd z3ROB;3NU=lE~yhQAeg++lg(kx+JuSK4`@OXBDoR3vz>ydW@y2K{5&I`FX&SLgS8>H zAh~8*Fl+I_qN5>XH((~Q*n=~rdUk3zLt_gLJv!+{!=hruW@cJ)KBrdK?Uj#|-*Anz zj2E=(AJ3H+K8B2sJ`HPak>dQemAH8kdvelIWmWKF$)tU_9eFzll_SV!v+Urs1`UR~ z0PqH0<;J7oY3V)Ktn6WCF1M`nc>=N=C(a@3*Ji@cwQMfD&~O@2HFcC+lm&^HjCeRw z+}w@gC1%T56*vHVZC$Ga&^`eky-PO$W|&qK#(gu*G+^n-7^0p;ri{GHkw*Rpd?OE81bUT(^}ErzQR_OOqrwf& zgAPBO^o}o>r^wsaV4s4fSF+RT>BZu) z1^XZVx5s5pnH}DayqQ->{wq#M9@MOFFgZwm`4)i($wQTmx$v>gNgw`gK|5MJW_LY_ zE%K`pDTIqWzzO(55PB^ybRcr9m=mXsaW6Z=7tQZvOqw}J4dYoBx?c8c3s;ITY+m=4w@?SQ3I!LWhCl>T^e8X9GJS}U@SWkfH{uUt+Yp4}O z+By)(hPQ^UPuC zt{eg-3?g}JW2cmovl4v9>*|`N)Rjn)xCr-OLTp#)(m?lhEjg-J?9)8|w~!Ce1)9}w z7dUl}*WZQS1d7RwdBuqfhfJ~5FiO(xI`9yBLraHs8A(wgvq#2NB{?1 zxJb;H)J$p1>kh0H#J{tA9#|O)U|e5l{|u`43CM=1_?!83jt5}#i-wh}j&rnXJ+p}d z+d6gxVF?T}?68udkl8aDm*V4VD>`?Od~r7Qoh70p0%kkA2MdGYBK327DrpBh#TnJw zZ!8)4#Gi;tT?~AD_&ZEqr4aAC!v+iec(jt4{M>g*iLf@J0sqD5Xb}+lu>ImXNm`O# z)4Wjlur+O*Nr2X3e5{EwPl22#<5Q@zH4t&TZ#gU;mCq%fc8cY*Z&C%mYv^R8 zKY)(V#iZP~tj85eOkC+HfQ`>HfY@Q}QolVm4}MHR=`e-k<$hE0DHIk&<{xG5I#2k^ z@=eeaQ)wTtVjtRs{33l^Ov$w|G* zuk?FD#^?DM(VuY+&QjP*B+~AKRIM~2uz(6ZT^fFaQ;YgWK;GO$6fO+0L1|Im(jP$? ztZvR~yeb8O_SYbyhf!OjW8-W5r^O0Su$6apDT$d`pU{ugW>_~#f9jUrgwWfEdmOjosKCgBmYOrxK4a%@3 zKFEJ(Y0FyCSa&VW8AS!%7*VER$i0FU6yZ5zqZi3WzZM0+B@;Vxt+p@PtX?NMjB$}+ z>n4mt)$x7e2vNUc!q=fL@d)!eqeSgSLIK~^s&0K3J&mhhixenjtc0W7zH_FE`5&6#Hzve&7S#)x+EFF{D$B3@O^z6aw_4~e z;*Meuh#g)SNnWmr`rwfi#PVAVRKwpOG7QJrw=fYA!Hoh?VDp6olkd51geYv8cu4m2efsWq@U> zs1OrT2CI(>g+0E18FEJZWrR0dxSg%&^%DSvfqLOX1!Vo^P(rJFTNn9$`j&uwWAJ3$ zaDKZGUV5Zj8$4Ty(`WD2iDe}K&kti$7ExLe;tbq#X?HeT>%q9_zGZuh2GLO`xFR68i0$MD z$tf^34*5{hSg>}P-xeH0k*!ew>wg-ZPtFDB1wOQQ)l^DzTM#Y*Q9hyi2${aSCUsII zcgm@Vw#HFRW$ZdIo>%(&3=h#U2s%r_2EaXcGXY@3K~1BJs-D%AE}RKIZ{( zIhV5m8HtM;#&L0g{HGMA@Sw03I}@kS?#^J;arX%rD@0v}jlCz{oeoj{8_L>^?fyl0 zHzl@L^N{}M{Z_m-#aZ4%p+jy9RmgD7&58_>c?X_;{p{xqod3L+1F`<@R4E8<@46#U zdCC;?iKT#b*tRJ&BY zslbc~0+PyF@t07Qt^g8a@WBAe=l-yCZbul=^-Y6+x~Ea+%kXR4@?a)Uu;EK7Vcm&KX%?JdmO4s0rE6 zd$G9ZL{l%rwk7fo0Les@Mf!eDoLjqEE2b+?usRUg@u$y)WT_={U@*q%{lwWER{s^f z?pZ7X7b6v%jL^?1(>yV)tr=6l1DxPG;)V{geCzZ5a`_om$T)em%tVNX07*dV`=^7B_hq~2wF z9l}Iy-Dk@_gf`P{uQ|E=d+zUsS0f|NR$9m?fp9S}$rYG7RV=bhn32lq;eb}%htHDh zeNxNf^00$Cg_9A7;NBZ@!?_H3pPuHQx4X}cQvltkA#KQ6WU%x^xI_UE?uDb;g?4dV zIG%lTsnrvrIF|xSZAF!h9ii;Zi8QJuwJ0hCw^`Ll2&ZQPDntvp0?UWp!1~-AuQ6)H zzJ+~`Z`88Ft*31U#Zk)+0eovaYL5n+j|y{>s5RjiyCl`Wak23%F?cBS&v~E>w4T)+ z(QP)~oGlIrYKQYdxf6aT)Y5M)ig&;RYTveR@0E^%+D9v~3AL_^okyD%)IK>ONr1-? zcSE(JUgX(93!+L`1=<3&N-byF7HW$z!;%Xb!FW{DzO6hvsLfOd=(|`vEIwdDvo<8D z!yNl9>xF^l2i&Yd-?-&P*~_&@gwPNa$C7klj1{%P<@7j6T|koz2Cp#>h?$*R1+U$) zk2ASO#dxDkxH&hm0pBw^75}8RJB@@_dKAnG_LaYH2oZB9Gnax;%%KB^L=3J^F*Bf(CslsrQ*`QX*qRH4uC zUlMct{6W5ZUEH~v_||h8qqd7i)A6EwBRVs2j;#*eKbY*1ObV#w0;ay;NB@Vxs!|sa zfL2w1QTl}12`sBT%H&NAc+mfmCDeMX)b1+9K++wx6v~-Zz;eb`)Gp4OT2Y(A>wVm^ z)N+mlE;c?TVqerMV|P@u57f%H&4we*jUv{O3W-{hO_eEqxrU}Y3Ov-Sga!*TZ5F$> zNz2rILyR^@QIW$dW{T0T)d=)Dni)*Sluurev(2o;cH^&Gkzf&06;*At^3qzje5?(5 zX6*&s7rhOyv9jGy0RQ+2J^Tbk;*06Ctp}gr_6<2cD_Tb*&(fbQvWiA!@iaFvo;E@6vu`&GhkSz}=qk}rCZlo?6K+clLl);rSG_S8?dOSY z<#)ZxL@bifkP5&X%M++3Y#o=yVNN+jhselQ`H9jQRZ~+vg5pOn2I+B<- zZPnDym?0ktk&A^WcINXe{@x|^LFb)8fryci>=a-~I^irLOWX)fG~`YhlX1web=f=- zr%47EwZpvJ*C1Pzk4S0{lcCuC6g>0Oq5-Clrp68|rB%zIH29}d4LXq?5DZKL;9JT= z?{C;8NvcUW4`m1fJ|N`whF5=)nbHx9DOp3LJ>REb@nZSq4FDXW;r%B{nQAzq{xd7( z0y9kkfrSPkWLf}CK(fEa%$9SV9ThfdRWXB(i9A-8r++xwSEX6EV=-fR-o{xY_%&P~ zfbs^II?KWYwL@MndT99EEVbv5%oa(N*8RfeUT40MC4k(RlA@(i!ayo4AAMegB zZlCRah`Ne3kVw!J?2$upCp5?rBw}zWc-AN;hsGzi6>H>4o}ezzS<6~Dw_K}2KYp?6 zO7BwMgMMBJSu#&(IVY0h9A(16*kx5AQw`JfLmTRR2a@jSo>w8*b_Do})3N@wft}xC zW%H^(@@c9)B4+5V-f~LwaN9~r<#xL;DP69}fO!BZap=P7UxL|Ncg`t9i*U|bxn2Ns zAo(vd=cE)n9&pH#vh|NXTSgL14-6-5zLh-`%*bG(&k1H}H$WN9cg{wQdZ2u)o!y8n zZ!f29mq$p7WK7I{b?NU$@?M_xmhl!pltWw)>wfMBoaVtwOQJWnG}9I-(JfXZK5uSF zM0|_8x&O~!7!OrAb8l=38=y-?u}}=r!t;?FS&+`- z9`TJxDW=k6p|7NQ*hvxT<_=vHxqd+duGI3(l8%s1Wa<_M$8#Bm@Z!CMXI!45&mB`^ z%AYPn-r8k|cxZv%pEhAm-Pq?ThX?tAnL zAK{xF(RW7ks&jIisIXmP&A+LV_wk_KO&IknJ{ZN@3B6-+U7CIz z@b$W@xGIZj^C$=!-AI(qqC*@&q?M@us0*xj`8(>qC;;f@_;bBERdl7zn6L5~Mr3GMsw4T=f1JoLDZ8Aftrn=$qj`M0d^9ygQM>?XSrbFbw8JOI?K5UaW?h*ovXzY6t8a zD%|UKj%E ztbk?*lT*f<)@#+w!v?s@sqQl?zAmnpy!{YQ2E|FF-QhOtyZBubY6da!VZ}`Y8hH0T zRig!=7in@mHAHN_6&k@mpO{b_A9Qok^Du78M}iOzYswto`bf zSy`;KK6zk&Q)swqC$6Rwp{$SjK2gou<0;C zANh+PNZQXug+=)HByCTXpEor~P+{aBtAz+xzfZ`zxUf+moXtnJxPQ=xSyulnfx^U&95zkqbK3FXSD?7(l&IV_vF5?l1SogA=ig3wzJDg z@dD-gdBplMi^M@%>er>1lnud@A^nPq2Iasq`YF^TMo~qmm$~5p@JBzNX|h#3hg%qL z;s^x5fmcdp)`cQ~`IQduzU#KtBhcqZvpFzf=UnfN#MCY4+DT}PWcY27w))LW+=M~VxK@?>qGLLu`Ae*kt zt7sn@ip*YZ`EMlYd9U^sti#5Qu~E?Ddi3>?LEO6W6HjC0W=&-fQkI%r1iT`TLa=`q_^KU+CbG(0>4Ou_lzgw%_RldLq_JV_S_ zyviQjHCMuYSaA0#5&Um=+&VHSvQnt%b~6+~(QJp{V1XMV*LHQNhr<)%VmO90h6L99bH|yyqEZwq%vFnrdfpz0lW{SEx&VEl<(i5F4~E#f5-< z`mgiMsd$!bSve0UR?J0uDvMh`Tiqb*4BjM*UAhBC9C(r^%WK47v`{=+A@(Am*Z&|f z4CI>_z$Fa^1*=g0vq*+@&|@yV1x~P!L{c+s1IdE&c3@P_H$?iI?> z%_2qhhvFps2)F74h6YNqA>|REu5jiPiS#8->;g?K_mymr?A@5KYzOwYU&J)+jfGo&M_Q|7_FEY>EYLfhA z4|>(+pe(Hbrw&U?$^`rel~%1;4#vrqf`&{R)R8ds9_XOWY9}9aR_5{rF(#A}- zroo^%b?F7gi(Am%p&k!7Zz-DhKP`T(^%x|X!qO2T{Ew#3N3QhZ5t@pXUmDvh)gMb!@tODR0^d}2C0cMZ(gEa6KRY+tdOU?o-4 z=buE``E;TAz8{2%1I=Vl})j_QI-&HZ~QDK}7NO9MjF zKX~0N;ZlmFijsu@LS8D7U$&!D5~5z!<0Z58T7)D6#X2MfT$gK}_7CfUCj!ItggTVZ zdPUnyD5p~hmZ87XQ}POdteC7sxEY&sTx$rEyxoTt3YU9sSQTq8dobK)ER@b>&BHE| zI@&+zP#?kvu@@BUGTOrur+GYeMOLHh&|j(AEN#7Rxj+M0qwEjSiY|`W52lDl7ii z#Z;77)m^19>`*M+aZNZTw=meCRBenx^60U`SqsWjVZAUCd>W&h)pUvhY%;&Q`y!ojW^CMc9>u6m&WYl38^5@ zwZL#gz28ElmMeSjt)-7{wUiOLyq31qv|L{7@!RrsxofkBFS+4r0l>_7OH5%IOcOKz|ueE=~prWZC_+1oI(R*spg(aqmrdY6%}DfBMaL+}D{V`7Xf_WH&{&#wg|IYOTfx?0 z)f6lZyLn^k6|%xsRN&;I+m<+GXW(dLlmv79eFiIxUonYabdYd>h?e%bVtJypJ8ncD z_TMMk?h`9wBRVVDDbP42fS%znjdUk?p|ooHuFxQPIjUu(g0vT&L>;WR5jl@p2eC_# zPHqs05oi4h8ZoW#ez}|j5NYebIoVv3%tb*T#Vm0)f&{ICw8#{6>O6jzb{~_?wxA=V zA67IZ%-|x@xHx@1DWeNe^>J0!?%{I4r)yLar22N~7rsyxqY(X#SO=zLCBG23maR|) zOZ&!1f+a6c5YUONO(Go(LCt);YeE>fP=f?2#aCg>L-_q-S}^7+P|!jp zw$&Pv=RKu;-xw@;qxlOcwjd;DSb$2NSbhuxP9wN?BsfN_hLsPi1VK@s8UQX{p6aLs zqmX89nL%oqY{&#^s(G9baOnl@I7U>TDIP&xjIr7xB#`=zub%=tBOuwX(ZE%P?Mo>3 zfko{x2B+Hy18=K0mv)a5pJ0cg5Q2Sphzf^rb_`0@5Xmqi8iEyAN{jON zU?WJUZ@EL^n;{P8JgA3fScbS68KoLvJe!6YY1^)ex4Z?iy9n0@fsF+8l$m#3?~(mf z;dqoFF76ePY0L7m+GjRhiX?kTdtu9z?nWYHZ-IS45Okwd=<#qKhcA|cVcwACS!HLr z4yf)E17$kLSK2w{(MI@-&MRlMzPKo60u5^}q~gW3_o#pUJD^JhD!l~2IkgN5tv}1W z4EnHTk>Yi`(-ReLfqHGA3&dgi>!1#;W>t$!I?P*-i*u|*ev!x=x7LYp?gu>q<-1$| zWN^t~OVWT-+NWZO51#LCWoiN4R`J~+KV;zH!P#FDIAlzm3jr=f)3p|X5&%O$yuU8D zU7SNUVzq1r_ktj&ys0a=C$}R!51Cm%$ew1RoE}WcsTwxmt6n!Fl@M-?=(}LKwjS#j z%nz3WnWN6vNRz^|v;+x0qO2cidQao)RuwmWtbi_^1_IlMNpG@{{g}(ss9j{W(l`HW zXUL{G1*j;RS}#6ZmNbN_E3f$gC|vXiZj6<)>cN6@LeR&lLORwP&OjUgkaF#3!@$WH z;-J8Vd9ch|X7WoUW|OOA;BZoheIiY zM?NRRJ5i#{AXO0V!-7feQs2$jzgDzMny&he`73QumIgeeAsFQ6EpGU%RbU=i5K zj7LBKyEdfqEI=BuMv9;*WJC(L?~Z0TEQ%Mo1J>vSXVrtS+)E@w_$Lo>sCU1VqtOhP zkMbT;!Lff6I$T#y0z&^q0zR_b^Q$jNY$&e-rRym^mEB=ea1F}N#NN;0jw;eb{odF^ zS_W!X3O1Qie;&c`XF5~MvIq)q-)(mNo`_`mY#WTi#&6k-IUN+lNBBWg)G`>z(=Y~C zjZABUA_y0_DCe8Z2H0wN+4Yj8TGMn8uJTQKtTcwD2SSjK+5~ZJwxeG$O+UO6ElELZ z&jY#+Ol97_Uya^pnOPyMG;?{7#|%H^agZ^;Xiac}Cb)P_4Z!MU5y&Nk3Ud|HokbBF z6-H9o<=<5!y};DJ#YipotE}+*(qvQ!uYn-1vrF7`qlMf-LDtI%LG~UsDyFiu%>%}K zDTzSKj$f`Tkty1sroDGFcv|8*NyL#pFkiWFz_c0-KPp^DJ+1GMbUe9>o>rK-hF<}m za)+|}Hgxj*=HmM{)2%Rkbzz!O-pbCoi2#^51V*LYLmM4uQM|7Tn8`&d;c~Dmw zJ9jqu-No=7{OcH+>M-%M98u_qztAj8mK*Uqfb`kuBVui8Ap3zIWTq==@nsb>5=UJW zP8?~0E_Wx8Q4yKf;b*38!e0}#aLdg6(I5M6p#-MMs?iwF25k_F!xrdL!kq^JZ;? z7d%Vh0rrpjurF#*dDs9rQsjFPG?K&PQkSyM24;f}T1kA4ewF~cqE{M6Wb3aPZ(E~r zeQ1bHC223RDp$=Z8;p^uku{Z#J+Y=E$_AFaiZ=$3NCs(^GaWdKpa)+mqxRRRw%cSS z2+=!*JEUFWf zV8$kD6}rE%+9QwB4oex!)chv5fxCm6FVXo!$;g|1E4ZI1a6WAeY(6Fi;U=cV z>Mas4Ml4plK~GbnJ?TTjtn5dnBBquPhzI>)zu9Wj)FDLVUE**qFmlP)jYWK_=IDFQ zp)F1upcp06c0mwzL6?P!f`4wj#rpF6r6YO2%$)`Cqsy=3X7}g_xUke+F9o4p0=Y{6 zjKfw5X?IK`L$2RORZ2&G39%LdwXOT&NmpQ_@7VpN!n@Wg6HVYA{wR`nBV$T98eECm zzcE=D*FpXFpsAJZtNJot)LpS@Ff6HABN&=lL z`1|nmgRZ`0diJ~!t0XdhvNoxD^%DL*>Ak6C%iCu;`AwV!jYM#wU z<05xb8NXp>ml>KtrrAO?l_5kM(~-n{Q8SYv{zfCZH*qRag+D+tdf%!+O2%^&TYM9L zzGOiZ*}04a&ReS$t9OW|3w8@)4~iM~rQxP~FD3$UHIOBwYw7HtWw%)HEWu)rT-H(+YZuC;1W}9j^Uu2V=@9HDmK4ZZ|uGMw^_z%^$#RVEY zabel%u@4Z0k)ODk%%40pYXd}bu3D+z1;ySWW307M>=qRzaADmb^p7TY*B%9#yge4oK zHev?s7h*Hq0hXaY*h+8<+!BA~4F%Gm*!cd|e5iAQ|9`HWuGc!c;bbzHk((mJ=OGN18IyZ)3Z)!tnlWH>IsmHrmdD zHx;nh^>SusgiOm@oy>j!gxVh!O>f|}nObYuedo+-v`M-|6?HaZ9G1P+4o(yveWRdB zf7yF`4h{JtNYMD|lJgmYwXWx<%(V;H-mUXhk{*a@q)MMa7_F5k?h~$d_pMwB^C~z1 zNYKh~0#b!_n}*4e^K1=ui$89`hv^Q)t@(<}p1^bgjy*<&1O^3k$wB29ZR9yFu1luT zQH*9T@RQKD%H!NZNUQeClX1J(ZR7liKwQIB|GX(Adz1&N4JDnN&0)ae$=T_xsS4hX z5D=cIgTdv2UELj&8g3;r5SYZGk=U(oD6SYcZp9dkrw&oxTV4uw_=P*bj8jJZ%Lpx= zqIwEY^g@hm)Q&sZ?{reuQgGF%-KfEsk=3I0FW;3ed=@~TqxM^fth8F-@Kv>0L04*4 zk*-miaJPY|2=2w4m0cMJLIB4A+YYK)zI)+982DoD3IR0OY8E|kf*Zgcz# zPY1hMCsQv5V)u_RC`fw4)ZZ9D)BiSTyTuZFv8u?SXi#1!g5#&yjFnsKXYR=}bc5LK z1Z&gdqv4Cl-Bmd%&MQ-yPQ4<@@Xc)D;(q!C$DZ#c6J;T=Kf-s`B?%q12H~7yuW8cL zg{hcae%e--tWU#BQZMv4*Z>7xREMoh|Llj*PPJhH`iy_|2lNw)^;%|eyTpaj{FR>W z=0LA=g_6OnOBIayh`2IzQNc-3v5KNu(;02nqSNAN3^*6_MqLJO zG-Q@WIlzc|UP2|dLsb9;B*la5LJR9y(V#}>C2Wp4D??@#x#csaOofGqEEz=tPV`m- ztT{h8Gq4zVCmHH_AS5l#={G&#NqgOFOswS5F{LHh;66VOdPSz8z&wBP%3yYQ5F306 z0=8x9jD3RS^#Ud^K*&^A`&ey{k7mSE=smd^TI_<tsNzC}bqBi**a8c`gW%C$X`K;rHQt7Kw{l!go^K{0wF2-mit<@{fTgc9Vc z?s6hk!7u5evd(Tn9*GNkTWfk`MXM=dn028UVs01w@O4J;ZJ!5fGz-zFbZ6omfr*LD;De2N{nh)B}Q!V8u5e`xxS<&v*q}r*5#bC;8EqSIJbTFgHIJ#dI^R zOLnK6i&*Rz42Z{X)LBl;ITj`y;^W3o>{7=|rSM@%^Btsc$Q-R5M#;+#Tq1s5+Dba= z8Ae|0X0e)UVrIQ4OLF!NsXYoQ+)$+MQ*5u*C{e2dk5oG?oFbYA)mUjvDHK4%QpeV~ zKx(mT5+GWhj7+aZSQ>&f>uj>Wi zi>SuE8KD_-SvBS&b0F~AN^9PLe)G*QK0L6(1DH_Cg^k8975X-6Gl5DlON+QYU^pK6 zJ-y{AFqY?X9?{fvK-k-nB0)9eDPfFsrx>rvwplo#jAMrp=UweFRPTay1BcX~=YM>G z$S}=m;5su)cj7D6Ci6fgt+e@XcAuq~%R!CG8CJ$ImvAm&s%62qZWCfm<(=J`e$?oz zynG=`PjG8UIqZ?xr$IYPU|r6ObmYIe*q|M{-7*;aNl$E0L=CMJqJCk+wfVZ8Z7tu* z`Y}vCrr*fDBKU|?du)oGng-_iil5HkJwzUXcJMYvm%u3dSI~TpA%A?Vr zq;s24;80@Ctxa;?QgN*kT;&1Xz?5sDwAz)jSN|#}h-boW!jr209$bkbs8~5Pq44U- zWl+NJ@6{3W^H*L)a!8e+Z706k0&kx4qSvbllHs>j1l1Czh^P+JN^SweabOcsxtnDp ztPOgT4hfRXZ36BBN`9OawoY&G(cf!DC%j7 zYAz8ge=3f!NE@@UaW!PuI>;tB_ma1CiEAWICxg3W!DYu4GUcj1q+wqJZKlqR?J&bs zQ0;-quBmGB-G}g+!+|;m66WW&E)^0NHD@a|l4$XwOOroU)e@HooikExZ&Lag?IpO- zsJ{b1IKe`GdMYm}GW}S{_$Z-w$`+Z38mK^vAvQFo^VJNd2|8$28K^2E5mior6PBr5 zow=YEN$pt~*;#9%+6tmN(sBr(jmSFR!TEQVgzrUtTeyWYf22Yz*pL{CI0z-e4=_y6 zJ%W(p1mzTfq~>m-f<%2_h2V^b)J_h2<( zR`E}TJ}B_=(n@}I{N)U(tShow;jD=S{@;uaoEj_GRM;pWC)B#}DJUg^=EO;nnVz_^ zE>|!|*MylcA+QIx8McFOkJDPg1Tj|*W^EMHv0jod6b==Sj>wHBeMWjlU2PaQq_9Lo zSB`eHpIBWM91A1~o+6Vuo;W%6NYs}(^}uir2fR`m{^-nD0XPZOEdsDEpySu`fH!MP zu)ajNcSvNb;Z75&{$5mNygqwNYnqVX6Ijl5T`B0LZ++*jE-4+!>bVP>`leGYvt%Gf z>5ppHi4X$nuE+Go3jM?GwT~BZPsuJs;R{3C4pI)ihh~r$uqpP)Oy!_$x#{Hmc+FaE z>N|I*Y%yMvwu4PJ#cS;eFaq5lnuWHvTp;k_>iK{SNF5ha*>e z(VR_mQ6x$@i6?k+WN>O6@eDKpsD1hgC?o!u3hT5){laN7s$^So_0i1nNr<{pl3^TQ+a<%<37^@f_ z$~gMVy~CF^rBzc>IE1vPvA=QzI@j1sJHn^tUW_I1I!jqjT&i70HnUUDAvv-Ck#PbC zrLlwdH1yA}?Q5Y8FCkaD;euylfD($BzXm&yE*IvF8S_MTsKlxzoJ>!JE}STe<^^f0l@x=!|eaKSI8jrQ5? zdg!lLh|`g)qR422O8B1y$4G9dyafAvS>CwuOgJBGs>W$%=9$aDQBoNq#E`=sAJjn+ zLi{jC{H+*oAa<0J&R3bk+76FLaq$+YyBQ?I%7PsP{qM{eSotOjSCJGL&qlF9s)-NR z;;!;=GwSb#C|awyi$1*5qxtv0Z6jAF3PAfjcfb9n;VuBFvV-@VO{LQ zmZccWrK`=#@%sq7Ad5s$h72xDC!)!j=ZBF24snUw#C1en6$Mg2ILvZ-&s|?AfE^)& zAbc2(^h?Yr0N*2UHgMeC31Obv zw4ykQ>JZeGuO;oJ@M^E{;>;dTC}DKLKGZnx#W6GEG4DV0dVb^a4iP4yZ>boIxro8t z*%u?&eXxk45U4NQWq9uq!B=PPw!Y(OFN*~G;lmxPNQCSju$T?6r$M*(|jV)(}hurD@HEn@EywiuxY z#qpG@yTEXbxyRZWV@nS3;h@ZeqG)e@Kwa=(x+2Cuu2P7#dSV~aSFwiay<_qz1l~Zr z%I$ALgT5RF)+5WdjtK&82!@j#EJ6l%?xtb@wAt{#aBXf)FslzdmKih;q%!Kk0KOxj z_`ADf@z?lbCc|e%n$1SEm9lY3S#}QIEKrMkcWv1PHb{g-Sl2ymBje5Ici-SF+hreG zJav&d(8}%=?F8^#;Wf6Pq4za8XCwP%#@jM`O&UC}BDn!12qxcIf@brO3zgUfggI;^ zgS>0?RX}t;~X2_tuY_T&tIq^?Fx|RaU3DA)2s>5BXBFUdhxc*Mc%9eE&YFR zl&B0!i5Vvix5Vh6?F|e>K#x-;$fQhllM(uz=!sB&Yj?I z#hrU3c*b?B#oB=6M9Qi;b9Vi+4Bu4_4xjAy5mD@qLJ^_81QtJ{>A<-&!`t}vtw3}W zVym5YL|IZY?byTB&bZ96NVQ#Sa~vpN=~V-JhvgY2`C4-nKD@3uQ{5$NQh^$Hj}}~j zpwC`=-wkS!L~93(YTW{(mgY&CSb$DZ#y3Q$;l*%u z&)NaPdb3-XbeRN&i?$u~)b<@3YMlU#;218wU+MaZVZeaJj~j((F()EDpayas6sZOr zf9GW=#st$M=s?184zaz{OhD@8Nm>~eTMCHqISmKed*N`kM0Cw-HoS2^y4w=dz)%l4 zBdK*~=@qZUu6ftXvKgTF1N7<&mKf5>{Fr<+75B6ocxvHox;xt;<96%cSzwWwz9ui; zWO?6|%+A5y3bC1LzUBR3GUg7Bo8%*VK&YP&bY&z87O^hjgn#@p>_O%$HBlRnlF@>3 zO}x8@QFG`#<)A%F33Qq9AFU%ok@1#~LS}Oq%PAlx$Aj}EF1+BmjrQ9RqunM*e|RaqJMJZ*k~^b@HcAqf%vU zK%BGm&9e9(h-Nnh1T(2_mm!*zO1$39xvX0?phy%BBH=y3oh+U)UuCC{N^zq{KPkI6 zGZ=$w>6IER9f<@QNl|n+?2$<;0{`$SkeVgAr6ym##~lB~`lAck3^*MJi3p5d;?71g znV>9FE#?v8FJmcuMc!=2pcjGue0!^?)hzQn;0XT=75I@Xji!{uHxsD?K?Y}7NIc)U zW2LMTiZ@IL7mfUE-X*mnF-EhLFrt$N4Fm@Wp-Ro=)6>9w>EyxE^8>G3_=YnDQ7EE! z`W6Kx{cMS)4?2ZGN{AT`(b^)|OVPk@;d(LljvGSJR$CqW_MQbjGh!g?xy5U8XNqK4 z8k1d|aZg}yMIcyYG($&0Q>o zIXc+iDD@CjV1Ve+TK#Zwz?GRQ*Zk1MbH-W)&gA|&nr9&-zQ1BTOnuUnk31;E_9NIz zyz`}kZdnnJBW4C=i-3YM)?7N~S>BmmXt!NxcVGM|VXIH5p#a&OsFv5me3cloN*PJ` z-B$rCW?2Jg1-Smn)l1+MG_SE()s-~lr7<0gVCbmnR$3%UUATi{QN@Q2A- zXz~L!E5y1Q=$!QkKt{Q!fv;E(eiwWk5;Kw*Y|GIgcCN3$OkUJj!}9?>eEL_r5zt?8 zSdA0xM?G5U%NQ4G!{Auk#~D&d!-JaAT+u>A8A5u@gQA{8K;tJJ?O5aDal=tSY8yhT z@~>9UGhaj-J-U*^P67b(%NS~yZ*3XzerN*3ddTJnbdyw&<2@`^xtv|`*k(?Bi#F+k zI@QoBluR_Ic!qOkIS(QXyRwfuo^6^M!%NWn#OC3rfi^d!SmF5udG>#@C{W(t7jP1# z`WCOiO^|a9TBOgrr6&vlC1YHutb}#X;7{k@mmVChQC9#(Jn^IZP?V&p=GRwu1(}a9 zS#>X<(|;AO=pLy#rw6`zZNlhQxL=i%?m3IoXzyrA1_}akF{z>x(Zap8N)3WxD>ZD| ze>5MvnlWNMXHW0;Qs0R8%!`CiUPSh)oL4{~Qu1bLXn7;AdxR*Tak z*d0?=BzjS&jD8qY{8Lbm0;IOPE)6iwgUMB{ON{atP=nt>fX^izV$8*hJ8K{<-vu3K z`r)Wsj?da-?qO&*AKoRRj|d@)wlT~%)k-V&_BuIt9*(gyaIdCh zn6?w9!M(S#T{$tW)*N zNJ0`(3Jq%*btG1}^;Rd{YS5%uF`j0hO+_Ah9rLUSk8fwqele3u-*C*_UtQBQy~h|6 zPaTC(4!H8AB>tb~Szjx8wOuon2df)u`>6Rg1=PtQ)NW#mlKGU%pn z22VV~gIG(f^ZVj_dt&Q^IpIm~vc|?%|8tI!xXH~p?1XJB<$i-lJH-t(r50Oe{t=Zm zR2zY-0ZTZ1uJjz22ozt3Jh6_$IN}h`hShmHBu1}!9CYQr>b7e_k~fg;Xo_)D%;rOS z#Ece1P6?DpO=h8B2G@+-i>v~ncrLqMEQ3;ZzO}O$CcSbx?aPQ*Bl4MN4YU&)3#0~c z$e-HcROq|~8|#~?t&gz6#V|??p+0R2${K9Qhl27g$|}#B$`%rXND6xHqP&eHaJNdMw&LutuCc81=09WT=4eTwaz^z@h$jFcL99hH-g1WaF z*0l7_d$zdS1aquFVoxuQw}+o*tx>>L)>g-Fa6MgMYSu;%ogA~$*qT$DE`v7o2W3|) zXR$~JhuKtoPVsa$C!szFD>b+R>2oI6em75rq&4#{YIIZuC~V0h+KuwurI0}h=f?;! zQf`CC#qMzpqxc32vTtdy$jHHfqhKNbrSEdk2PrM6mne{~YnWtMo^BPj3U=6^vwT9O z|2biRSj(7!;D5cs$sF4~7CPz4VgDU*ZG;$hRX{$w@RY5mf9~jRs@OQzFL^TZT&CVo zFDJjTrCG#V4p^%apJZ|(7}FqZ9yA=+9jGzpY(QvTBvN;y-vMM2+(7l#FWrrTxO^Ex zZ;X8mXUXLd*Q80<^T-q)Vja3+!vhIIqX-~L9KLC+?ZrRNFe{Lj(Kh&up5pHgF7pK_ ziQr$m4L{$8wLF5}wiGA8F@?sAKO)O1S~v&^bWcKoK%d3UQ3KK11(~LjjtfU7ockvm zel`Z`!q<2i^I5`mjMFrV4xJ8l*t3tF01|^6!ZPF;DZN#%l*QU|Y2;DO5-Hu;hyWWK zq+nHat|^A4S&^^NHWLc15-Sh75t)~MYXxxPg1~VvzYwPuB_$1*ZE8S5$fSH2OB$|^ z7MfXWM=ZY}LO?*y5*p;-1}7B8WhRA-Rg@?)?*B;2d0bU+O%z|5p>Ovg8mOJvnwE92 zk~1+%y@l3kR!uX;o`!I&hRqtIVt>gFCT7wZd@LmeWolWI_W4{xvUEKwbf}sph$^|R zciae>(|>*;(Iz7`asN*PSENYH+kL}a^1c?BaOm*;Me&wp*0niz$jGwrDeSn&qhT=^ zSU8%my2HSdYZ$FNh0WrfnG_8MPhxA9i-ee%zmv-hD{aQ*y-8q=rtT{bMol+l(P`z? zM({DmB3Q}M-ygM(BjVheg5L;u!MSntqaw*GWipNiGonl|i*e&Zv~ItL>gYq1r@(hC zV>LR-OL1~DeurdUHcY!TZtF@zX#$)_2%nNk8N+nIl}E{{`@<6KMKn7U8{(Fwva$gu z*3Xc0@s~XTQSwhq){W8!U1?wvs{KR<4xFGj=k+o?nANLhP=bg2(Ea^&VT{ZQWAz|=L$J<&Ker_hUpnEt($3$Cl(JMJ~BZ;UmN z!6>K?0_sCp_MA{m&$Jf8pGsk#j#)x)Z3eF0@`7q|BL$;zWtram&Fw^vh)Dny+8J0^ z5TBW$%Z+KIeTDkCdZ_vVy5{5@)Y1WQWiZMczGQkO3M+20SR}+oSjpKX_c+L}O+s(I zxwu&i9>%^@K32q*wkmFjKZs!@+_)$11CpPW13au43DeUDYEDA&4+o{hQA{aBWE-O< zs)eQk;vw?NgWgc=P;c-mqWdK++r1O{KtdzNo+54* zLCUrJvZVsgL6N+=Tb{$>i=H7)GCVsQI*)7i&Z>5)JJ*}0>3l+hBzn`Frcv<$7LQ>I zna>Eg>!6O1;{g0^N2`l)6)ox=M#;*CIpS=M5I5Q@emMMSRO6%joWAY$mox~U8I&V7 zu^jXO?ewpwm+~Aw3bZt@CYvtwjah0mIxNPo15Z60L*59pi*x~rd$$GAjYQP57=ArX z;IClvwr;{iZt_aC|L1$3MnkcT>8JpTa=>SyA1ZwCV;{~}I(7zq7Jn_ysFe@`2e3fW zK;!;JM7M65LA$YNo(KCSdB|sFMXB)GUW^Pv)|?yOGQi``+kbPY;N0|DDXW0tgKp6W zn(}w_dpHCs-?>_4Z7$CZ_Bq3jaJ$sC&xbq;HC1_N){eER*TPYA^!YM3xV?Iusjr&` zZn+X>MC%t`s)8Iz?@Wz#%k|83($Prz7NSPdM#XVLJ9|*y4VvYlp2}y2akxXScQ-{J z|Np}4I5$!Ek-Z&0d!<}(R^DJg>`_@h2F*vLKUIcOqFqLJP*}lvV&02kn^JV;ph16( z5f0S8QABf7oZ7?1d5jNw-Ons$F#G#IE*j87DN2@tOIa;)0}8ISBLi~7RvO3a$}iae zK_97ipe71Lrv!Xxw%IJg`fF2chy+t_*FeM`G4;p5gpeK>!B~s)b^GR#g731u(|47d z^XeW$(Z*2%J=@q~^-ShN%Aw7+1t*D@#X%yZY_leFToCk}E^E8jGhIsh#ll_P%D!?K z28$c`+u_xAw^S5#uy9z5G6{|9@Of=k+k{--lqrXD6fO{C0=k^&^K2aG$ z8smalo9o87+1Qsyr+CS@FO81Mbhj$ZPaXq@LLa-mqGOf2F+e=Fh06BNO=Vu(DN98F ze_yX3F{&|Oqz~T$dTcr&TY?1yBRKa`2`-*qv6IxY=6i^JkFOL>bqwywEn6%-7dpJ- zNoBZwlX0ukvpUFiR8lj+SzAY!eVGB$w_E#VDDFS2y0uH8P$ z{7^*1O*#62KXxn5%Jzi!fRLM4#uE!`{vp2Y;O1qsB$<}~1Db(#3OG}WzyrS6*qtJ* zJ%u+O$O5%H@7QlyF~KW$qer<5s}H{pOrF-)V{Q(BppG z!$&$D{ni0zV-qN!`Bjy6@kB%9;o`D?V0G~XdiEI8PB>h?-_-c&^+FUU2arnDFfU=Y zGOGzs!p)I0;yrfqD?+q5r4|^y{e=hXS8SDMD=UeUV%2iR^j>Tw935MVt>|~UEn2rY z<+tWQKO{FqD4T>)nH9-03RT&dv+}}oXg?yo^z9#nxTEP=(dq{KzFCcGBf^R@%{how zb_cj6X6#YJe{0lp5Vv}YZjj{jh;R2PB<}fM~F1)$X7*iBKV!iu`A7)0y$9tXW|#baWlnm+_+eR9VMv>Gj=d1F7I=(N^Zm| zxzUtpk(_7_2q1u0C*MrBzIaoolfR`ZB+ak;=rWuN>gDB%yZPOy%U2qmEKe9Zm_Pq&k$hDgluB z<-n;t767ce&gSFrFaT9@koEw;qvi)IhJ3{uaad)mLvt@Ha~)H@AgJhyEHIm5^{Vix zH^pD?-c)P7xy52n510^32#!xM^vV~i6TqopnarfvDTAdTzR&BVAi(Z}(~%V4=XFwG z_ht08123m0*)g=cV&KQ>^hj)_dNc{&Q9;K7Cg3tV}AwCK7A{avf6&e1#IG>+_N{ zrU4^&@h1AHF^#^n{;kwjyRWsgT1>N5`|tMs;<~lA7SqsNG1Tw>P2>4D zf2DZS*Oca+>E3qZ{GVy2KlR*s>-_uwcg>#d{W|l%t+m#Q>!p}x>N;($S5up()jsw8 z>)T?eiRs-F*NSOo)}ODgxKeuYw%ArobFJGtF~)VHc-Obs;*8z8#S>$jajuvKSB<|; zZ8bRCtTBz#uiNv}cUpIzIcxltUcD*4S?AaFtM)zj)7RGGsrPS8bFY3@r+hgqXuivd{#=ons_-)mA{d(zVy6IE;nO4o#JGG@+)m!WORcDLm zy_#~MxYxy;uY5x1QZh6!6X|A?<#oDeF|Gt%KIA1OAr@GQw@7Jrd)$HB8Ui?qB zs%2_5wYBfPq*6wS1>9#GVvDRwzx8GkiZ7bC@YOB?zmN&l}wK`i%r?s!Go;llV zt=2G9A8#4cxZiB;TY9mO zYg&CV67!nYzwU|cyjV|*F_)gW&d;09Gi$f5C&tt(ts17uIPaQs&aP{o+WO8~##zH$ zS*v(zyRXIbzP4FBcb=4bwwT^(@7y=v`MYLJwTd;>GQ}0+dG)rry3U$r>(;gXtC_pz zY3pB0H@DifdDdESwt3EsvCVngcEfqrOmDXLZa7a}E8gzaFip;L`^{5hn(^yPv+K`} zt8Z*E-k0J_wbplHtYMmZ@6$ye`mtwwY2H@n`|si&I+EN|GRw|}>*b|7QHF#?cB1>Ue2L`?Vr~$ois5K>EAF)d zxzL>RNzVJY>6IXdzwV<8%>kwNaj%HE0zI%RHwZ%t=*roF-dDcDId-b)0F6L$zgbgN z7vf55_5A%BwE{f=IP{|>E7W);C%QsSXEP$l zuIyag$c;dlmgif6m=48tY#E9q6aBFyec!7C!nAzz&Avn;<4h~W7=~Zx6>7e()BN{! zn)(650K75$P*XOFWA_0uCrNgrD85KDKM0d4RbA+o9!QZ%b={XCnNr^9`T5?a`%c_M z=i(kd4i$#T4QT925QGXhCHMI{l4K@yE0AMpLax_CIcnGIq3lQ!Qwr!FDkaL>{0z$% zW`Z!AC#JlbvQQ*loQSLUaUp6o%U9S!g=9yHUsFsj|IV|@6=+9t=;tA{n_b1b*wYS`tfzglwQB~YQMSOclS;4wprUsGk&*}td%!r zB=h&x@7dmLEp@8(*4w^QTDA4hj1A7H=27rq>-?|9UsB zmSVeQZL_`m-%@JnzItc(jPK1?A>)5Hy{`ES=`Qn>tzPsv5HMZH}Fx^^2(=FXxF;g-deu3**T-+UnAe}$&9PgIcipdZ-PWs!B8V@vI0owappKU>#NvE^dk&)aYIuQz8~J$v>{ z-M*&p)KXos^-Qm&SyTPncXg^?XG;IlcXwS~)0?rjSMS&K=2|VH>D!`_WS`sXrnqi> zFSd@i))ZH3v*%hZ{@)hkjccX#dbNN5=9;lnr*vPPU1xmX9dExn|IJSS9q)W|*4XB} zox1)WdJy|rSEul4us`Ten`ud~hmf9rj0Yo+e~w_a@B^L_jDezkO0UGb)#@!gu* z>=tLo*Y~^L7KeGYdJj5l@6m0-8xMBVGla04`8*NvWwR3|YVE<_qh3&njINrhyDVF8S~ zvg|%?lma=X4Z>vqi7t<{QGPE@)on7o6epeJ*nwlHnHD>BZ8!J(+4|-fJH-@Zdb3wt zE57*uzrMvRQQfENB=lzU_IiE4#ZIaFXXi{EaAi*DShBbUdjbbb9hMkN`n~gDpbHW%rt5O9VJ8hm>9H|#jIA1RH<)50!yqOa$OXS3 z>+GcPX;{zFH za?7IP-o|E~)#=NOS2=_AH27sZXmCzL0EtS7lY#opfCz!X3ovQ9gBc=Bg*#X%IKwg$ zoU7qpD5AndycCEeNVeh<2bQ!E6Ak2&Br;GHPaz~kcruv?6b7T!!Pt1hEu-PQQUjX| z%Wgq%*qN7HSSoHWG8$x}gLMFLO>2-0D=m;T$mS^tKpG?%6bMHq7#w`aVL&)U z0MhaXj*5aB`a%c{qKb{jc(x}|@zBsPQHY2Km1h_(Z&s^;1&7nRGoP6dab#2)8>mVI zIIueo75IbEM9K<7Y0xp&jd2&KK>!7gXBcHw!QrQhim>z04eZXtNI9A87LFgJ6gYk$ zjs?FUf-n*)B;HuJ4h4==C^AqLa16EP~AdfN9gYd zAz`wT$isv@n+L-O0zy5+yRa|>pbDun0U2;;hE*aG)>k40nM#6y95xjp5ry;0jNN9y z0ADDY<6bBW4IH0ZvKA;21eLUqlLduG%g8`gw3PzKD>xjW7%9oZ2BP4BBcritDmYZ* zQ=#y=WM#`Rk#sMV$%UojUZ$KtzLqzE+?446!U<41fM^xR1VY+S6o}Te1_1>q9YE|j zP9Q8SVWCij2n9<;l!{A$P!L|Rf}qp_k7&f;;b{#nK;e+6h`50D8MZ1&bS;FV^xS8NCHWkva=aUW`f6woQ6Z+sj37)WeA2MTj7;txADGk^Z^cNjhtxgK92)W zt`}>fE4i@)JI};KM^e!4^Ckvxqvz6Y02eB`Q#hh9q40$1R-6kofEzuOdMd93yA&t| zh8i&R25_UtbLd>*$U=o+C;|ZpH=y^8ojBmrrCuKj1hvKxfO5pR!m(pP-HIEzym4aU zC03n;djND^>C{z}B-atW5k+>J4Fn(rTi|Pwo+_Lj`I;XGZa~l^xyeGk$cgekQRHU% z3I}lCw43eGukFksBvQE(LNW z$<*15=z}n(&Svxv!psZ_2t$G}lVYYB!fnQia|3 zg{ZMBL2vxJROm{H;#ZQQ_?6@+im7cB#eJ>TpYPVKIG5*o6vYp3+{^)|nd(4K)omo( zD2f2Ewow$pl}C1|?G$#LI9KVNNUj9EQQS^pho8cZ@e4(A8$VPDcHS7$Y|2FMQ*Egc z#afLatNXYCs895fJB{HNj-{&mHkB$QTO;QRRipT&wh~mGUgTDSsu9(FCl%;*D^46& z<5-T}2N;Uphx%8lBSVxJZlVCM1i4KVAco{73fM#eT?u+LoM>2gia@n&G5rZa0!cI` zcBeBGYA_O>P$St~r~xh%s|+_6%2SnIc?vs9?o*W=Id&vLZRD65 zD-|zEE>xKbksipEHr6Gn1G#Ths=843owx*y>Hp`Q@7DkO zsZ+0;X7|Uw^ZvK{{onuhw*K1xfBXM_`~Uy{Z=YtWwbfczeRalqZ;W-l7*k3q-S+;| zuboY_Kph}Z2dE@BD2NO*lu5afERYDEQh*~bC3z`7 zpVepe;RrxE=m(%2G{agJ8OpNA&xb?ZVY9d(O(QUk2r0$;bNC*`5AM5w4+ z6c2h532-k^PnQnoK~LgyHX58ixZnif3}_b|NJ)cJ9$a{|iwlLr2{6g91dPFJn+(ax z;#Cqx6d6W083vum=t9|qqJvF_BqPCnUL6TW17q+R)+H-jhCx_x0(cBy(De#1aiuUc zlaJorgtox|fm|raF%s$sWY`8#U}Z@c8Nju~ap19JM}XY82tZvD1OxcNcZXUyUgJfE zi@@XZ(H(1mlzB*@ObuT^dQf$~10&-TDFz}|RDq&x1p*4=m|+`%3fM7wax4&02zID$ z6%v~Rh(=;_0O_#USMl-DnKmk18fH{~7`WSF%LpB*PJYdj6 zC4#_!`V8~f6`>aZ2{cd&1Yx5S8lea`S!AfDvS}vuM4mzpzmQ=U7Uap3VZUiqHN(gg zdCIU&f}k2r76dIzgk~&DglbNf2-SS*=|ZtM7)=)1grmYk!$ZSEqrzg~B*48a1i05! z1YYGH8Xg)HtYlFtC=F<6a3U)Ah^RawD$g+S!c(%KOgKae3rYk;SPDyFDJ)S~Kt>pY z&q5f3*JxT~=V2)EW=zQ59S(qC`?>OvM4PaAJ=3E z93R(Mj*n|7Ca&`u;Tm}^m;=rz79bG_4x&Rwu}~dE1d4?ki9lGW4k9){p;)L6VkN^~ z4ZnaPK~Q;vOT%-aGyeH+cP(oIPiUhcy)Ki6`?3{rNGn5SLWCA7u z?lbHFVZf`r=&3{T2yhJ>BjbTk5m_Xeg9|0%Lf}=-3E;$6lc~;vA6md0BU<`Pw*byK#E;c3-nP32m47}ry!0{RtRH3?AOzb$mEG!kz zun4F{m5U4w!sVmM$`+{um(fLOfYe5o2o)G579KRo5x^MyJ%a;veD?5*Wya0H$Ub zh9MMH$N;Sd&nOshP!a{}GE_w522F?vQPN5nXc~%U#PM;lvWaX!NS6sSjulrX0s@qw zmT}x9k_d(xVX}%fRGJ;b9!2l@$WsJ+~vb>)Sh&+OyiX$KvSswvfkn$(!WDK5YLCQA-nGAB!=?Dyr zNbWC@lA-}}1qkW)zAH15cQ7qy;GlMU)l-1^YphKFT;+H|XbyKy)yW0erxb zEbLH&97%?Ply~re24o9$1T>PZ_&~#o95;vp_K{p7ROAJ$Yp`1c5(XTjr6A=d*DJsz zVE{r?NVeh`W-}^Y;{rs%Qwne)f2e?bG}bye8WNK+P8c8r$P82Ph%k9a!;Ygx0cGTh z*vgFzGf>!AbgUpACKC`FZZ#@OjLBqhTBz_0!*EmtC`}d^s#tP|&r|VGWLWs2l1`mg zq}M=5TSQ8($*|*?Y4~V74B&(X6RAAtQVtrL1KA;ve3D_uF~cw#Q;WeH4MaF%pp{9F zkAMNmR{U}@Le79;$1%e?Ee+0>S|JjaXcrfm91?Ru%0&={ykO9Y$S?zfkw}gehynz| zs*4QZhu1-u!l=}d%5_OjLWdO1hyVZp07DW003ak54ame&kvI?J6rdjz00WkAFhn#i zk;j7Zh&+-aF^YpY2x1UJ#u#LfL57BgI0vB^cJW8V3{mXz#MoIoFHgBw>iilPap0X- zHj@FsiWAf}C}my?rC+=2Vot-d5xWc)Qv8~r2LI{Do|?49Zc*#azhoparA49Ogp-6X zyQRlMXC8r0{a+Dp?`2{t-N#i5ng2P4cqzHI#?VZJHYR*O3J+8Zcya3&DCNX{MtkMU zKiEsWe{WjU>Ny25=`MjWI6Sbs{DscebWhD9sb36vqk=>r5y8r%nC%n8*<-B0VNy zAo7flgRG;4>^KwHz4A9w@nOGv|8@ji2yXnD45nZ*>q~d{C%#OuOLUq9hn^$xi{i*1 zirA&sP;nUHiL!f+0bi-Rn)j7w+z}m{1@D<)#lOZA0rukpScqpf`SX#4XH?ez?3Ioj zrmtf+H^_7+c-^cDz$74C#uJ@5 zfa!kclva322CBX*a1uO3AZ(ZsuJ1qIY~e>Jqf58>2Rq7tR{B5Xv_^FtEbqHTm;Z(` z+~r5|a?!SnLM|LEDx)WSD9HK1tZ63iusnxs8TFMevVa0{es6tGs?;Myl+ZZ*fLC>_ zS+s@{OK<6p4U5h|S7jI|z>a$?^{C!3Ku;mpx<#)-WvDM>!xU$&l$@wL#VM6+dx@hm zpkt}Tn}X>{zrlUsw1yFS1U8wfao4taQ-sxZfh){Z{d>~V+fg-jc^}wF3l@*n_G#+B z(PXY#4;nKJ;+femOUVqk@<<|eS1dE|Fmw(-a@$+?QM0IOUPSk~q02vCezK$)t0NtO z_35~tXVy<$$z9*rdqE3&hG30EuLZm7BNvKO1o8im7~vYlhQXNXoYaiS;){;zWH8%I z``Kww0k)m$oXbMkM8a4@WA`&nXud51KQRssQt6-dqo(bdez*lEe1(`8nl2p`vdN8s zja1lYh%}ta8vY%t-HF21jU+JeyI_Qi!b?h6YP)IzD$I+L)-{WwGBs=2xSFahho`q* zqc4b-z`Rqn=@3{U+JCJaNPs4oci6-5+I$exb%!TFkJy884W-tO*j~5x^VOSfFZN~n zH9-U;y2Dr4W{2@jOWc-3zWY1lUwmmxdG!?=bO&AnEL8%x!mY{(Ds##|0HX0Nf$g(L z7Sy!$mEWru@}4-(5v_k9D%OLi0Ec5i_%}7C4+58tr33G>wrC6jkW28KWZ!Dykw_73^oTM42@lP-OX62QV5mA4>4_yg$fJ_u zsDFyfKpqHY4YW&%k9(l@6ZZp=rn{lk0JC|EX>?_9m;{D$kdeeT$7Y1~tJMm-W@Kdt4XHS!G><%yJ z-Yq2!Jb8*SX#LYEXD5BAyV15qXvTlYoBsUQnlJFzVes zM)=vUz6ve7;47@0-ebc#;R*0j>mQ?T*cX4e@xHM8AbJlHP6-zhoU6H`9jL79*0v?h z@MQ0W&*QCmEY|9Q>$M5=MCnqx%*wt zpwd_ZyQXwYYOGYLf!*3ZM4hNJoB;QWj?5?;L=QE(A;7A%S5A-HH-+JuC@GcQvl>$c z60z{Bf7({4zC7F{zvA z09*A<3vuGMudv?lYbmX7)S#YfBK*7_z!iN1>hxJ-ljMUnLw+^|Hi*wGSj6vl7Q#^; z8gar%t@^(ARwXH~AK+OM;ereOdj+n_om43z;4T*NLd18O*#j=0hI|;L(rauHC#cnW zK1^!FuvRh7AJA!f!ua9CMm*xHo#MoWlV9^NE{pN)@kxoVA939^S*Sg%wMu(zu z)tAH?mbD@dID=M21)CT#SxkR*O|7rCAEuh^WmLo&!q7W>f%nz+CJPri?pcvvSg=(^ z@ZNnzW^=2Pl|gR_K+Q1-f4D%Dfuf}KymyUfOafoV&SonVo4gkEXp|Bo>#L;(_Z`7P zC#}5ue}Xhug9a_>6|j0W|4Rp^ zpazeWxEa1;?ubN&_F!m0H61FiW7HXs-Y@aU^}5_b>h3uaYDMqLs0C-& z6D4fZyPbX~3Of*MUtBAKx|0r3KKLy)B8X25GcG<*Atvn4=GyRR7j(}d46){EMt%CeRPsvm^|x# z8V+;<79iELLS$exn6F<_FlEoo`%1~dtRsW$#U2r`DnRz^d!Ormw%e9%I7o1r~e#ETX{8^c=bkIA0c(1Xl9lXiyjvJJIiUQ)bL87 zd|Elo(!ck9)J8U7&Cy^WPYzkRX~|5y*wCAhU@_(`9(R8g52)uuv#hGv;6^_3C*@T! zvi5%eTu+dfw4!-7b)2}?ia0q$E%QU%?PD~IkzVtu=jY3_b!l)$1B@%!>+8(4C?_tT z)sqRRl=)B7V_))P=2}^EacZyA;^jht_m3@uTk}MBsWmoZL7+3DAL9#fhkh3XlEkTG z1XPQ*5F2^F3f@~8dBTvKh}S^?*k^x?5;lAmezXQ$q}7{`yAw-i*_n%6#ryNd$_Tw7 zzy5GYD~hQZIT9H8UPNxLDw&aAGSohg;n-R)!=jHeVlfhBNL;F#nIYg1h7t&!SY-?{ zc|zVcnG^m{xsZrh4sLCXT$11$aEFkv)9h#dQ58lPyx(b7Enp2RU51NUhPyU8_yhk) zc(1Z8s1()IWO%*31>ZGf{8>o}Yd3R^8#;dosllC`CPnhvskZ$KQcZ?6dOQ;l7&ksC z@Wu=S({rh&;ckkX|9<=>bzUHliAn%>FW;sP30vZ^P9#SF$B@<8No1IhEIpe#4}7tj zRt2T$p+sj-L7kvhIE9YyN|JL(;JCK1eTr;Hg8aotD+z7wv|d1=_&vgGpgSN#yqZ?z{CHO#EJsd;s}LiNYs%r;<(N_ zo#ebfVT~F^DInjmAOSW%6-ZJpm6BsItw0!)H@0nx#Y@1b-RHHP?d^iKdFBHHOIt$B zxmz!f$Rcq&teIau`Vi}f<8WzWf@3B+XktV{Wy||@t&!u(NO(oV+UwfUdL(MdQG7ppLDSTrqrGnh1-WkC6|WK z6<6V%XxWz$DR6o0<;)zAX zROA13`PY8$sr(6()fh_|BqQcmd4)3B19FYOd>)MG6NDJvp^V`2#_$YWC|N6 zU)UrO0;fb24kx;BBw-=Ek!G{dtZS&UF{oi`UD#$>CCMH>WfPSTU;;7B!O(21eQ-O0 zqivPcOAMO5*UJTTV5Tw+5_{o_{p%xl@e;PNGY3HQ z@Gh3%8qn3|3nZ1)Oibz>X4&O|TFP%67a6~W3o)Y~naiE&WQy+@ySCF7-W8+s0GKPE zgW-%1WHu9Eq=JY`#=Vcn2*jL{fDpjjOg%@iLO>}f=yAY5m@lDgMFI>PURNmzfpGyE zP1M^sI5MR%Ncm#R7?w%aNpT;wMiyd`E^`+V#gn0-Mq+_k|9IjDXYx zxHo)sXOgS3TYW2=(uw2iB7OYoMkpkH@c0Lz?Yp?hEV8L3Rx_@65z43`SR99R;%^cJ zxHQo-!z73fRoVLn9bMn*+S_Ng-MZ%FA}H*b{PPNqU`!KCxl$0B$_VB*c}s>$^gS8^T`Rv(VQA7ec^5+4cvEQX#T4c>3MYBK2v zBs4t^Vlz0udKBu+ud-2LJ(FT>nsq~*9h}+;5-^GuS|iyx)d<)lWv&Y zD%cVxqn|xY(cw-G@h%Y%FVO@bf%$rb7J1V|eaCWfY=e50H~SR(b<^EDbGq?W(JZ76 z6-S(E33T8$NP?%I^<5V)im1V8c8bw6pl`xbnnkiita%VoynrrDZK-xSo$e=b0Pf|0 z1;eGa@83`@U3>zxmmUWs$V?LF*Y~(35?#eEGj2@x%;DiI;`i~?ey zxDnYxAmdi|`QVqxMA)nZZpquyRRv5`Tz4ZyLL<5?poOPDVPD(7Yx=KzG4@zXub{j+ z0Iuo%m~~Z58=?xVWvM{qGwtm>)08dd7M*{C()&F2dn&JV@=ctsa-s^9F^NA3XwX2MVF}aVWdi?^G~n{qp56c=a9F&?Fzc(iElt%*JC8x-Y-;EpBaXL*;ECKK zpuyD-huEME;%=}WSG5XLs$nJEEaIwswkgL*o!qBO9u>!q_h`pVKO_iD<~(OgoZ?BN zp;ZJ{0HwAh380DteuN2N{V@vrs&&bHrWiwr+am=oo9f>h>4Pt+?Ur2T@@!?uxf zKKl$E`aVm=jw9;TAJ1l)ySwlA{7XNn`4RlLeawhM809`Qy_71D2%8L1J*!2 z#1~DfJUn6WSX{$CV|hwWnk;203v9KZ!VKx$G>v1O?E?*{fjqK_&%h$t&dsvc^Kn(^ zqMa#Gn#!J3n8QrdDeTs27``%h=({Q#Y@O%)R*S9lGLCq?-x-U3vJ|9iep6t&RhJ@q zgbKIfjml|fxS*2-;lJsIqp<pocro3CzG z9Pt>mAve23#~(N$s4!VUusak{>YyY8z^A>>T3T1S= zyF4I~)(%$?>gOyo*(mmRR+5pNT8KYfb{$Y==?`X5fE1xA9=L$kS{XHz!6Ib#DowbE zrx+ip$rX#3uFsLWfq_ZypoypTBdN(vunC~Y9QDWz;tQg@{=KgN)bxbmW=Eq2<4l7_ znaL{RYgaD#tG};z#u-5698dO9qNH;qSllr5M-^>w^B)N*GW&LywIrw!;?gQrqLrOr zhgBssp#o&{`m`xG%qVCXtNKr5GzLe`+lxsP1A{0y9x7`#D)r|sEFx|uzdYlObd@yptI!89OUl9^d$i+bklCf6&Pw^BE+@4wm7LY6a^b;A zAId?I0$~70%Z6rt`DV?uO01Fm?|_#IPXVt_C96qZxx!b0FSBH7ebs0{mdd=QR{cX( zeUSDBC81BQXwa4RJj+%0#pOaTF9%UTSr*iDKq-ts(jn+in)?4F())3Obi?h@Y3+c< z^Y2p)%UBHn-j>=<>C;!Os4t@TxAkBN%G*H%od;>i@2CUx$PRr!>ugVYeRwk#&xHf^#%u0Y}5JCPsW z^!J?Fq@;5|{wf@k&$YA=$G?*SpV2)G=6^5GY<6*@JqwaXUyBQyCU2g)jc1$5T-dJ^ zJoh}BCszx4{Ylq5t4!E?!|+aS>{Mufbr0<<-HUNYUhmw`dog7#J94&O^JSa2EXv*GU_j?KYx481M`e;=vSkooHZ-vZb{Qt}}! ze&JYKOhI(c0ZS!cHhhX{noA3XeR9!Iw+fK~oHcwidx$!tw#FVo!^YFOm`f>fv(^F; zrkW->_)p%i<`M(s3WQ&=01g2?2>yB%08~hyxlPdN0W}~`+QJWqskQB3)=UIsrDW$B z%ot$@Ld=-2VC?i_c4X|)p`yom495`^$GsWfnMHMBnz;bjSr9uvuYR5o7A*t~b zHUl0P?>2q1n^6=Gd~fuiC#`7-rG(7ithMOp1&Cohs7ia$jH~&+mx*7o3U3!o`K#tUc`!9H(Sct7$SurP-EOS<)CMYhwDl^6|rVs zvj@)Ga!ebub9%(R-bcChlP7qUGj3)D#+0*H!nPIjFybiB37DU1A~n;Tc4(k28qzlH zR5F8rVDWBGH^wL=TErDrd4xm}T~S6l|EJ@CYdP4&G^Y~^D2bj#sdD~!=X4vg9=+nv z_3scc9@%B`+it=~KHCGsu__vEkh>9&gcRkR%=9&XW8Iy=b}0oH@dNlxVqLak{ISPZ z3VXW1gTwmNqP7NiP|G7d9e!N^SJ1#qv_rID*O@pot(qQOsUoGN%5q`wdW^ZCKL>3^ zZYn@ZDFr^G<2|bZ*7}3F@I`d)WKvN>W@31y!ty82K6+Q${8T9^ktQgD^3 zTGx8a((t)6m`L8dFrbjyR|^se!ht8Uj_?dGv|4-(CZEh$C6!opxdtmkw*bBiZ5UMZ zmN#gA4#tPXCLho?X7^QESfo&8Cts;a=4i)4JIN8Eu8u^`RQ;xFs9!bML#h_KF~KHA9MHyJWNe%mwwwDTB&aGAdQSryVnP(iY`) zh^I~9x)xac1+`m8JS=&C*)PF>s+(T77%xgDE_CDujQ$$X@z>1~PwKlle6jFe*R)5G zmUnWY8a&Mtv?aY*m_I%@7qWpFa&tl^l}CWqK~f%&21f4KKrcLNo;6| zad9+Bc^HWlmy~d&{xD+c0mR*o5a&+lrl5!Im!KaB`x5km%OV{ifT5 z0C5f}RsFSg$M7gDOA+i)@!%+|u7a>BBh~SH(2U3G#9>qk13{t+0of5@S9?l{1X-al zkX;tEcZPtuXQ#A-@Gf{LjWSos7P90Eh#(pPk&sLw`c)5=gtacsmFNUIO;tV&mGD-Y zdK>m7O#1#akOPXS1F7kvC4WeC2peMN57gS2HNzm{P6Q|3z_d()x!`ogA%_nXd6Kq% z96a@{1;_c|`Mr`u|@jPh~Os#<9pKY$BHy5_+6L&sGZ>v96nK_8MC=k7foahZF zO%K2}6<9<>*N6g)jwWQEBDA}A)-01G@u|x&(a`hT>B3I!$4ScqE7qPGBb=^X4qW(( zQm8mL?T8%<>0Ij!zOkNvSK-P88D$p2dAN%`10duixk*QQqB9(+B63Irkz3SelQ&xE zkSoVov;1`D%gbmi3!?QQ14UmTz%i_L$%?KTxQ-{KL)v+Ht|BOel>zZ_t5DMnUyq=v zXnG1U8}a3^{;bHcUYWa*{zsamuHroaL zd8Y62nL%qBX2qa}&VP%J7&GNSAc%?q%)5Dq&}nFpG+uv`x%kVbVov3cfJ*cs{f!YW zDF5?PA!BBFWb})RY2P0Ql(eY2q1F6@ddw8LKnwg#r~LaxQ2dMAr1_(*LB1nH{VK)( zNXMBmwp28_)?()d=xSL*!&Y~K^2UI6KPMOLqY;nmN*8Sex^Qw-Ma zs!nsxJ%j>V%hIC6f{s{eiq-(ZK|N}cn^1-nao~4`UfCY9&tyf=LS82C=G-miWQ3|G zHM#i@fk&KO3L*_M=>LW@J27-Bum#Ovh>&?PP1tX_~!PVge35eE~?9ECY z;u8SN)g_7|=_LPk9*0)vR@Ub1m2R`0k*3&Ps&8&;<=sR#pN=HZqGrko>9dUOyyHrU z)-va^5h*P7*NHmWcNA<*rmBaCJo70AC3FdChEeMb9V1n=A1KoZwVR=Z&J4sql{vE- z;1G|02~^@_b_94*dBdRalUB38X?IYFLt$Xar~nxsl%Ma^j&-Oo8APlZ|1>goR%bwg zbZ}iD>W2V1&CCI8La8wi=fpG5Z_9!>Gx6P~&Rlf857rrGv}7|vIZB2cwQt1QidA5z z_){0Lj*EWdrM^l2bHYcTB9RvDC3NX#YX_@LT4dcEFpc_{Xb{JW^1$wxlspSW^WvFb zuv}^oi96)OLOvi-Y(~UE55J989Fye->^d|g;mWke(X+`nA(c0arF_gW#CG~4YI?J> z?=dfrWP-!DJRf1XM)^pv=Q$=1zIkgx&u6`2$4y$^aan7}Q9AX|6oJqRS*W|RfkrKv zo2jO$V8SKQ((m*5YrNj}A>LHo)1=z}1^s zps&%0cqgH**^Y@ZDAjoJJ>1Jh0Q@O5aF%_2kxrBU)sU+6;8AvxhMl0Gn5K3cvGEJ@jJ5x9)?FvZ`^7$R@GP2pU2`N^cucZi`^c>c) zan_j4Tk(`Ak`00{@$07<9Uk$$O|MQbOer5CTe+9GrRur2=J|SL19OKZ)DgW20-WLW zJeObSgV0DTGlxyW(+i|`7VzeiGodoZ?hY243@i)^(Cmq&R<&)iBH_}P#9?+x z3x6-E=NR@#7Vn}eY;N+-hrB+4+IGuI4uj~WLWoA7`2c|Cor1EhdEGDzeEX;2`UeV` zF%-$A)f2p}&(08b>!2b>X-u9>;1qC#Vd!z1XD^*Awn{3~58jrxlo3Ycwn4>6s(*&x zPM&6wuAjO`ETG6+Al$fohq@MrfV=egFsL}Ro!wO@oc+<^q$i!DFqx#OBri_Hpx?4tpm!O? z_8^(&D;9;7V1jOe$L}eKtg76tr;6Q_{vgDZ)ONv_?4z;le77cXgaUa|7)ecfSjkh` z&4)g@plGjl2XM?1K{`O}+vY41a)fMQbxa^OUIerY-q)-jOsH2~Ska_Vr&^O>)>h{FdGew~H@4%$2@z30t!4_LZDM5tStlO$MiAYvyAyqG z8bpo^V&`)niPm@`U7FTc9yJs{Ayu{BG~wg0%In}y)J<2F53<&qLyzdJzr05K{)$Z1 z-9Q^rAbIi3A45m)#mzyvD(-ldIvKh*J6jO2X^2m1e~BX;=d@2INOD3#^&a%Cd09(VGD5NIv{~Mn+c8U11_cgvG0J|Qd%XVLQ za}`LBCI(|%LUzG6%}7)h(>%%UaFm8F&6MX!fBs$ z?U&tsavn{207E{CCJ7MGXVr$Z`2&eg-vn$UsmYI$mM*)4Y@1*uFe3qgmEhbdG1(eU zEBF{?ui;O>aT%ie5n}hZd^9Qn|(AVd;G!jY-5gZp+ zDfH)@tuSA@PnVL#qyuH1laD|xQCEc~Z}X08@>vn>{A2|(0Tp47b0I`W9F2V^h4Yc0 zSYnr)E0(eafQo8zrbPEl=z0~Ax$KyZ5>_0OLP92XV?U4zRe=PFHQpOSZaFYXOTmDa z#Wj7VLb!DhDZX#}F<#+JAK#wOyVhYT-|%k0jo#hO+|HLf0c3qH!dH{=A+on=@ewT5 z%#>+19%C()b7e?gJr`r+LkADXt6^6u472lRHlDVs|C~bOjm-xW2ejzCE9ns&vp#Qh z;a#XwNl?I*?~B~hVD9d#-1unk!O{5I2!_JixM^XnKtYE+a*nq-FNSQ1Xb>Xn9LFbx z>Nx-<#%kVuEG~ejjq~IMY*tTFB@}}H7D*H=`kW>7!CSyTNMLqnf~sUv;rPUqdCb?8 zx-+6L-*f^SS|uI^R<$#`%M{676ZwSze1%P`qfC^Pkbl)!?}1wlO1(^j*1Ktu*isD* z?rKz<3>~%W`DrSkdPASqcC*vhhkf4=V$5+k%EWTw&v_xL%%#j$&(#_@`gnb!8|fq; zx|NlC@>DV{xIW&XX3&h9g(>Iqg?SAXgjj|N5m3E!yDx+{B4s`D~P)a*0v2( zIEF@iC)Z;NWN6(}nvCGZsC6g!M%!Nm7VS6Q@{+z~k$7n*ZV-CbG-L2EmnH4vR%1Q`62z;vA9B>YPrS2bh}5y8Pg2(9mV7G35G-a^ z=PE4?#2ahfa#t?JRfz!oqX+7(03jpQll=#$0O`e8<%73^02_b)Dr?fq^yq(}SGyR( z0O@`Hpx&%M-UYmO<&X51{-6gdv4H}pSNg+xu=g=Apd<8TBgQFU_0a!lZ0XhZ15vl_umBXgwZl^HwXrXg--t{Pk+_Um?mxqtS_EEY&L(^NBKtvFB^9&*&4>(`r( zLfn!=0xMQ}*2xoeQAogEAg4(T7nS%vz*zYyj>>hFO?#!EM@DH0k*HGz$@>5e=d65e znDlw~U!N)ZP$K+%2s%&KA&MgX(7bZD6)P9edUHtRHgPJ*DIXp=hUKlJyZ&n(i7QQW z6nUYj4aUFdfwnkW0EIvh5r1+f+Df&ab2~=1i)-j(TK5ya0#UMhhR*}Whv7MHgoA=< z!B(JEKmvD069D`W{QE4WQR4ZnfO~fbFT*1N81))tBu_N|rty{AN@gF1|5jeB6O-Yx z1MQ!4f57QsylUHbI(;LDIAn~XP;Q}`*SlApeFKq%J{Nba|r#nHoPx6Fz zJp9AOovGxo$lrd4Z$%;jCq*HdDOs?*z46sNiK-@RVwQ0knA8(CzzL-l>`RZOVbA5Z zhw{(lq^6sCmaA`G(7o9Ne>v)@F9t`iVdd7h+$u zx})%cMrc+OT@2g7{2W4Hjt|JR?1YmFakCWXs0NUe^@139CqM=qdX0(@3PTs}R0XNk zD#ll_o&ZXpi{7`R)wh2!a`%U5Dk#rV^#^K0$RLh%p5t6|;w775)e*6as9^QKlN6Ie z)CJ}Wb~8}DPvP;OeEGx`?%gk9O?f^I0D^r(iq90RXH z-SrN_j_kNC8H~8vkjpUmTc;&P`>2jd*MI_z8mi36j1CcCh&`8qqJ3^V>Y01Pdd}-p z#*{r;HlLB(Fo4tmn>4&dUeF$A$c?EPiVg5_PW-fj8q0N;Uak(yP>jwhwK7H5IiEx( z=B9Jg*{JZ(_1U(0W32pbsn+*F61IU|F(@DL(~NY18`DAy?>P40(von`c>;`tn(n%)=1Q1auKM+%8vQ7c@; z1ltjpoN{Zei6_XAoV8`V1#h!LJQd%gaXW^YWn`Zu;qDR|Y>@(1G^LVC-`H5@_oO3b zCIe*R4>kn*HxvYDW0(`?JTH8PRh%RHdbq<9DHNA|Uk@w&z;6XzG>AM>LD7Jh z~;K!INeQ%JH2g6Rt`SR>zW+OIb5eS#C_NJ$xpxO#xpICmb#X9jK|g zs42GhOtQnZebj-BJZEV4Rb)9Ygu?`G^V%YdP0)1Pw-YeAOa&P;P6FS8Sl}GZh>CFh z0bi|;l4g)>oijH;&<@$_ccy}8heA@GXdy%j>50WjB<~fG0+_P0wO%&kHr4&JxN}~h z`DbsohC%U;H8Gizqo!jH2m9@isgJ3jJkVJ7^>+P_|?S~uB6q$%N z)PTYL;*GM=R|L^)|I`Rx08CWQ@quQLS-*@R?y))igKnY8`saMSumEDQliPf_sDxJy zjX|Q*4|P@$9=&x+>Cw+UfsPprRfV!KWNz{ZOpgozpYwRn{Ad-9$UPT~LaAc5tl7#w z#+RVhFUVhi=rGTA>L3BqSxDz}AFqwHrwl#6emEZ`bt~Mh@(?ZU(Le9095N0|w+hL9 zMPfTmfT&bT^9#1M{B253NvG&;=`3R6rZ}lW)N$@pH?8tZ}BK# zA{#a6H$yJ({-);Wft~Xu#!O;Y#(kl;(@++~1KhBFU&tOc`#Dd8SChr|z-?awtJqEu z@PNlmn{6zOmQ_DYm#_R4Dxg|N~k>9oWzrO zm-Y<*i%%v>@#8N;z_InXVN#fb7v%;rEdto84i*tTV}{OI21@lRa_EDuLJWe1MVyY+ z;FEx$tFVN*wh)+Bd$yzF`6@>k2XN{(x4S;KNr5lM(>kz4b>=AA%r6+? zegW`P4p0Hh0A|MBG+RXaOmFN#R<>)pX{+QdS^Pug>ix?R3xPC8aG771S>^uB{5?x& zS+h$#M2z@$_fydD>P#%I50-B?FAM@vXAQk5HVx8Kmb^hMA$wSG;TC&m7No;1bu!jw z&6f|5G93|W1A)H{T%%b}39mlcLiEW$1I&&}7CFzMdD{ zF($4s@K9-r8p8F!K|U;}PeUI|)D)v(-oVuAhWFJUFTcYFm{ozw<9?OKBI0~oHa;o9 zI83dGV+kkv7Zy=Ye6=bPh<1NR)Q!P=77aIB8-6W7*2 z;X7PV)THse{RU0IB?^!ZLQu!ZtXW;KI>+;~9O{r8nrGfbO)#gNQb|*(aY>+_l7NO@ z1=WF4uW6KmICHq?i8010zvabJ0EH2APAvb$M7dcUEsdug=rjcZ(e)o5Miidjdwd&H z$Z?L4fY3pbjS}D+I)!4>i#_PEDa3&z=FatgH z$Mv)KlQI(?a?3u(0*|t(&;e^tey9X9KWQ4Ayg3fT&V_gdhU&oE((QZ-6)?q!_P?%; z@{UJtH0cQ#SZT*+pteyzZ$Pz{n~p}gc~fTI!HqT00O+sxiV+T$3|x>b+e8zZcA*9# z8z8#=H9ldRp!{e~U`W^1$kaA+cE$-@08Yk$eb8TsK?R`!&#I8#o;jEg&{cO`RZu`Juf=(1|{zT72CsM*xXly z$~M=_dL^)TBf_OK8=_|>_+WjbbQ7$g-{<$iXG8%IL|kz;=3C)9ZJ-SkoaEl*syABC zn^N(2=?#ubW~)Y=Z6p=mzUK`BgK59>rO+)O8$9Ihm+t(-t?(gSPL_n%w6mj{!D2*A z6bc57;;rUN^Yif7Z==NbmMoz=S}su@(e2LgggYS~fly7JJkounv) z(x{ou@d(5u$4AEwH{Rbc;6GtLD;AHTab?3#yU}vp0z6X5(3lmASRaQqUbc^zt1TJe zAAJQu@Wr2s@``BhCghauRNlW?-;gF?V&XWh8Ns{JugVT)99Uy;ivgkLxzBeiQDxV`^U}Mj5~a-*s~F2T&)3U3uFEy?S(~23P-Vw3s zZGNQu7O~hj>g?8fXj$K9=x4rkxI&-7*P2`Yf~<1m$OJ4~#G~VFsl{>5<+DIrFZ{pN zR3uEI%gP69-o{si;R$Eds6+p>7bwKZiXdxG>{!7wxgV$}oXx}_=(B`lJ={U(?Cn1O zDLwK_C)UWgw2u-oFUd>o8H!n|ES?9b{jrxQz(M*f_)}PAJ>u9yZg7@|k)~Vm$4xgr z`1Ibn>}?@S(UR#;{%7O2^74&9Q{~{Z10-kOo&hpBWe4};4WEvQ0S->&R<=|U|0leK z;d@Dc@RBitWqY?$I#c~bvK;c63@Tm%y)saTw42L(Kop%nhu)4}sfSg3o&PKjVYNrd zU0nh~6bucaP6bzLmo$2ag1k8e^s6xZ?Whg)izOHHK&;tI3LCndMR{UBi(a1?qi*3o z&EGVU7w*@jd;YsU| zI!YR`!P+us^p~Pc79SI1n)yu$gLjIiQ^hTUAS2)8%Z zi!E3oozEm?{ra45=Ann0Nf$CCqu|`66t3iP{>O)`9_2!H<0rq)$%iA;1qdH;2w`(L zaCd~(`T4&lbVj#56f-KK)Tbi(nke1-8p#>sCz+iWBp8v;vgO1>`-$RO7yEr}yz6VG z!pT!&opz{+j?|h7|0~dEE6m#4qttrDYh7*q%b!|Et({OGo0<9Gg;z(v{oI-Vod;>Viy)V2o(Dcyk)(MhYgtkeNT)0%`8|Fon7(g6BRk0 zVu;_wa|sphJoLukgjgDjy<16b`KwAN7_|~rTB5e^BRVU%bZNt?0`(M=8LXT`WrDNo zwFXL4KXz!Fd%PY zY7IO*FHB`_XLM*FG%`3jH9kIbbaG{3Z4C++t5mZiq7Ajn<2iY@W*atV52NpFVe>m&fKnykP0-t-^r4m7Z{ZkYnuc%l| z3#UMBZwpxzyusva6dS7u*`3A}705;jC|U`(vw?s>KeQqM-Cm4PsLP~a;2U{PAwD@g zAVjfG*gyP&q1#es6bQS5xVUu&xBzrOi@zbtd+pazQtO$ukexk#gzaG~edf*eeiWp> zxnfe1uI1-`Kb32?>>@pEwPEa(5BN_~;;)ak{@NI8C)p4!CcRz4o<=y%nWNpjD}i&v z_-)wzyPIfF{>v6wLb`-`ea+;MO{%lEstt@t@*p_l9mPQu*ODE)=jiqhy0*sY*=eS; z7?utPbA?Y|vp`3?z>J650EZkV?CvSkgaf|=Nu2K*CCz!bfCw@bmwa;F3zPGAQy|`P z20;VtRumz1yWH^wlX*_iPkYmD0&O93}H1l8Q*7oUUDe{^oXoPbqjguM-o(CcC z3YL7pUI!2KZ2~~a&-lRXvQr;i<)!l2MD{>v1@BBS)M@i17P-xY5{5XyKm&s3~J2kD|SWOK9rRkx4gpJCV|!)efnQ4bEnr zUB5F|Oq}>;#}tj#?bB*=jmK#~di<4#r86YE*)}b15C{=>9gz;O5I2#ZefLZYO~M$2p@Jr~8~Mce{a-_0 zeIcww8gSSJ=%<~HY1@-*oH(uECu$RQaxj^DL1S@hVmJD@QhnghydXT1qQdUx0vGDUk+>53du18*XeBScaz z2F?x5$P>fm^1~ukO|QlVm&wQd=Iha)2*DFqCKz^%dGroKID(6KM~P|Y&9{Rcc0m8G z0JtxhG1;lK1&!j9Ld~yhC&!K?>K#75dxl+d3`1R1jzoYPZv`5MytBCdeBmDxN%rlg zRj+LhM^kIgaxY+318*bSW}oZZP$bwf%mp1pL$;RgHG(zQb6fKa))vuw!qDb3WpDAW zbn#FO!CgPCy`s2i(D{L-rk37+Zhe_=D0igF_MJZf2zG*AY&$k90cm|yQnOn zL})1;VBY)-)`wZdNW~xd3&AIB2GABbg(SPlZUSF07ptDacsc15UPA~c4wefi2o%gh zT4^v*;g^Ria8ZtK2aSfcHV9*fABxDLiB#8k786yjk0uvq3T8red*igrFa4Y6uu`M+!3=0+u zLO`*w8j=lpPDCVd4-8nqjFE;D3X+$El)Er7VBiH~MZZoR4v7cMhZAyH(7-WK0DU+e zIr?xQT0$KT#zD%5fg@r-!y_^Pi-&VVQQ{Etp`dXUWx)wbSQ=sQoXr9X6|6~6U^$lp zB{w2n#AtvLRz?l@;Vcg#(1L;lpQNZ*McE8MITVeSl1qj1$+(D9jRFUZ7Yv01SrL7x zNEn#7@Tee^9!fC^49=wg7DT(F>|1~@7z=3(SOGN6GXF#zMiqk>|?K3^kb(=mX%82XO~S-o zMoQy|CP9JaU^qw!PQwC302J|Yp5s_RprN8lHwM(E1EWz<6;)9t0ulx$5EPI$7(_z_ zp>&f#q4DxEswiU^;6dcEr*Q*N*kIU%OhO4C;g-cUkXCxMQ9^Qps}o@ZaiQQK(!ddk zuosUKGC*7?INW$eDfpa@fg=)OpA-|%RTM)-F)WNcWZ1!1ln0`sLIe~*MhsMxgn^Zc z(>eN76i3wHu~~4CsiDY*6q-?j&=6?A0i2H#%G9vM&6E~8L3Gj5D^~)6bqXvupx>ErJ>=RP?!u5 z0x}|T_=w=rg9&T&VdA7_fR~+7DQOmxjmpA#XhuXN9!N9|9~S-?&@jSTKw?<%%%p&< zO(-`s6rBN5Tt*ZQE-fb%qmC7}7;!j832A*Ak~a`GP$VP-u*FEkY%zL`j*^E~5V8P9 z!HB>fP{@kfuxV&9mlBf($bbUv0>~I$*mX-!i>WQ0+ouYsE}8bnH2DFDvDyYggP7(feDfi2PGUpkD`ziCI~RB`WUgC zfDaP}grNv+fGTRHv;e``Ea2#*Q#^RCWa_}M0~w5&0vqbc2uQ#U*icb;LQzqql9;NZ zDypQSI2E-ZV3ZZbc{xE(MJ=cZ$q-WGzM{A_ZJ3LNF!)AWR-iXeK--pZJ_` zh$wl1i-0h|l5$hB5DS>~@epxrOezj!D^L&t}nq0o*{5NU)&+i7JYtBju))V1mG9IS`c4OhCwhtcXf%C` zQEYgeMk15(j5ZEP7??m?5~Pa?4~k^qaG1c53W$wS#TqUASSh(t=pjY}R8b2f3KBU} zDOiyLhX525Igo%sCNwj0o~tMd10acHU^p-!K}LZCXF&ym00R<`SU4DEf&*f6LUA!5 zqku@IKt)xQfeNYt6+#dZ9T)$=d=_lbgMpz%qM{b4OgxA_Ob>?v(<6s_8CmFBut_Ko z60$h(u~0yS0-AvlwM?L-Oo$X3A_hpXIM4|N$SR6d5>wF_C;&2I5nw@Qq6Q(MCDh?? z$jo>+2_Z5I9FC8FI1mRO9nQu&bvOoOW;`5Y5TL`sNO0oeP^e3XBVrJs!>Oo^1<;3s zA0-c`V@ib-3AHF>14w2?G!iIxH&0;U01*=gEM0guKqS@Ah)e(ufl-Z#hy)H0vT|_; zBoI$1KsMoU5)!H?P(?Ldm=Ih=eNf>*DGNv z7}c0!UPd$rHdNKH93&86VlAYkOqf0_W}1a_LtxZG^C}QE3%yDtFbgdbB$5n5!wCh* zJ};*#7eFHi^Qfq(5{G7#2w(=RkZ4doR_TO=1VZF+azcBOibB~fQIv=}I3!?7HD;dB zU>yV$3xm<94h#Uh zC58bYKt?Agl#~esB~m^h$SACoJZ@S-5gexyA_y>mhNc8lebjiYloGTAGBOEJz%fFw z@SIQ_ps|P%&4?@%5YZ@5EFg(&Kq3;NqGCiO6PHj@VF7&vAcQ&$2q+e|Vh)5l3?799 zA{Q166gQQp)PXQzjaD)nHAq8a^Pv*wQlh9?@N!Wafkrc;in;|I784{UB#_ZbiIfi{ zGZPP@goFkJ6bpk;5Dic$LCA^~Xb}O~0t&~&@zBsTa4bYLJe&kM`fw^Ll%o%a00nwD z3I`q?&c_1iVM9Q}1_gRJ66@6Ah}NmYc>y*WIBX+=;DE-+!hxfZ3>+#PmY~qkA+lhU z4-kd|69gyoacHrMsv$ve5tULxDh_19=43+)F&!J~Bv47P3Iv2=#6j6m8P5#|<%R}h zg!B+fz)9eOaHHTsg(OBt5Lj*+E-pq^Dz0G2go@%MBn^#%O`puL7+?(oA2S>p3KkH) zl?df#1|buqkZ>?eqLD*&C^wai$7%E@CIKK=KsrPeAuTF)AWDVgkQR)xqBbZ*EThsx zj0R{UG!r7qXn0uY!a=Gy2Gc>xeP}G;s6ZtPXgHq>ih~-84#~t#kf>NJuq>+x@CYq* zP=ItkCk&7Se;|OeuyLZOKmnqGNeF=mPynGrWg&&3v62YU;4E;cBSwJ(XGKB=p=QM9 z;fCfyA*P0gOGY&`3!e=dng$aAC{}$qpjbu0d@fE*WZ9HhMhi!Yl@LT2umlX50ycA| z0>%QfP{0x(7$C$XB2Ea{Eg9}8bqBICRAjgA1j01m$E zJ4iXez?hmD1;+td=n&Dw$Y_8Flq^ulijqh;@f?E4feJ483j@jt1;{Fjq^6~&1TE4^ z!vT>75fPdbkqU<4VMQ4pR*d0c#VSff#9=W!co-g5%rp*CK+AJ*D>g%tGbA%421Fb_ z2e)FKgIlphk~vTjDsX^Anps%sh|DakR1OUw9T);I1S&!>1PBng5usQZ=_ExZMa5n^ zDnbk>7Dn30s6rx=zONQ@V(D2$B5c)`fH zh!74EH7!d`2@A`?1VaQ&O$k=i#X?Y1f*7*FkPTW`D5wd6ctV{6u~1;4peAHP)0%jo zPk{joSb1^xZF^1M}wM36ym}2fZ%yR z@Hn6rUNN#UA>y&&DhXIrObQ?%G5A7pFmgaYULXV<$_)*}fdB{-i-=ly)^r|fX#P`y zA^}2Spac{LH6jNzh9jVIU|9{06GW%u!DECYz`|XsP6kMVL^>@AQbl2au*FD3Ga*3f zKu3U77ePa#&=O;U6@~yVqKXs~1Q+vAq5*QKV35cPmz2AM0TwDUrh}wPhL8X*qL~Ac zm=D)57>ve-P7bUS5ee)?TCuD_P*H=R2Em6%JxB%&7)Ve#NIBBMt>nS29NY{^1!)1% zGqbSbnORt=D9_Boip+rmG#4Zj2P$F;bXsaUEj68%nwSD1AtE6nBT+Wkr^@>9uEUNB}pAs6l; zAu}!l`FKrIxUSYS;k!X|_k3K*`UEG#gwK!vx2Iv%Ejlo&)X zVKOmcGGQ`d!$C4}6DFPm3xz~YD`pTQhZBI|VL>Q#ltyS~L=Pi}dr|19T25|gI0HBi zR1i24+}&kZ=(A!72_?5EKBlR0yo#zyXzUFd%YZ*$41$GM z)N(3J4xB(FOhtW6C=N&(wB;iK0YgQxtbsb5fg_+LWe#VI`_WGI6AZ6`2DSG6yOwdg;jK+5DgX`iF#*OE; z?01WX*J+Qqm+#9J4cN5*kuMXII$hp-Ub}C;skSXo_Vawh{`+0!+`dHq-{yZ_UTwej z_I1-%Wz7GT+1-rCt8eJM?fNl5WWzJIHS@Ln?zrct*}r-IXfj~4<;JC{pL^DHrAUV8 zm%T3k(tp<~qW|*!8)6%BT3+7mUhXy9=_R+_YAbTOrt#&cdNZzE{O&aO`@BUp%e&W_ByK?Be(V4?J6R!zp^r}wzD7J zw|@)_?-i}rqJ9i;cfH@Q5x?*L(%EEyoS1q`Q9p^+W=N5YKhNCH-^|;pZR&i9y86$~ z+jC7n+I#(`Xt>CKhltuqnevU(*OuDZq92WlO9Ge_i-!jlnG_ZRDganuf;hH*{uA*7 zG%7YQDkS}7f1W~)I zNN_MoAONX>d_hhyZ1gg{LR#&aN4Q6)Afc~Vn?tAL0Ef;2p(gOs}w2!;GW zkW8FQ1;c_-hlmJh4^+&8g5sbeB6M&t5s^UZOf2vyG}K^$gAwTWfEN+<|UMgqigoR6qS8+K8`PC~|jPDN1*6;)B7i-?dCQm8W^ z)XLPP}yIKaRc6T^zpj21dXG9e}(pc@`JT`9srA!QbPp^eF{*rAvh8c;Gw4++^Q z8ZaHLsERTWa+v`YHIWY)q7fJh0ZKNU7|&>d1c8N>3CsnOL=IrsOy#06+DOhQISDfw zAO;tb5^_csE+T|;P{>Y2VN_H_nIJk5rPMG90I{GkAESyQ05KyYS`i>b12j@#6%aur zP*8C$9V;y&js*xBqmPz+j4Uof6b}nZJP-&PDoW!qJ{$;_1q~dLLXE{Ce0+>RYF=1I zoe*a^3J1<8ZA45yKsF}|r<=H#X%SUaHIbl4HwTq zAubgoHYqoy2CJ+q>SKdu0MU(1g2mY+AbF0%q1pglZ2XF9Rs{;0N)9limKzHdgCX!M z8dU?J038dgq@too96ll{s-i|3HQ2FEoi&oc!1?(2hcmOn3<|oK5rvd&6tbc?9`+C= zlt{FQGDa#kKnph{r_<0_1wYjR2vb zk%94yDr!K&YCxNj%P@)rQ3*vd37@Muh+rAD(8y?j5^h#nL<|ogJt`?+$govW6@>;W zDoX}n@o*MED-JLt1<^)}iHx|D6x%)G*pZJ>%?X0W=myjqAddx|4pYd;72~k1bfl0x z_kvMT6;-Mz;{+6D0}>G^Kp{YBg;bOPn~wkiH+rCA2p$iOQHKJNiztR-H$Wf;HWZS= z01SuObOdk_Nh}YBRR#>KSj7n2d@2f5Q3^KrBqS3RRZ$`foRA<;!YCopaMog!5n%%o z5xASJz#E_Vg9;If%TRD(8F`#UOgFmN4Uhp$@DO>BxKN}_O9hT*Dilgc0A#~+3N|{{ zOv<}dR7F)(MY%}S;NcJu(eQ98isoaInelK0AS^g!gJ?#?vGOb8@IdigX@G10K5D7dhUL{3ZAmal0X1-0E2LCvB06A;y@A~738>wi|Alubb=HM zC?B9obaA?hdVz`Q5YdnzxQGhWB+wX%sF+k#XeeS5z=S|h9s>{+8bD1&Rn*5~L!CXL z09i#<6hlQ-R7EX|k7z-L@E9c|Q$@;6N#vvxQPLCV;}!L}1(}42%ShxT`Vb((Stb<~)nN!ZFjX9AfCA60Ht}>! zo@;VahJcic>Qp4prO3hN zJqLOSS+SN}mKqfc8Q@@*SY$Lv&?t=5D2H={HUn?~%BOOGX?chMDGEnG z;R1B+L}pkbOXm^28+@>TIV1!@A}~A-~c&DM`pXkYWiSEwYt2r&v5$)P! zkoT6a%)FYDBB8S3Cbm1fncj}SNve2=cBt!aO>I#T`R!0WDU*SkTN~bU;=)v0w3UvU zxOe*L&1%ToxbDuk%I@fhOMm&+G|kT!o__LH*Vb>Pw`%t~GwbH#uJ4(&Q~%v<`6oqM zZ?yAoUQc%azSCR3y|woI`HhSG-uJn!jQ)taX19&mYBKP(%=gnx)1*kcmTbGX&=b*6 z&Gg+`Q+XK~y-%oy=jZ>Om;1S#cG#Nl@3&^Q&eI_Em)+hz+i1w;G!_*U>bUQIiqfgq+KfmH*URwb#r}?>dcl-Cr%OEqznB z)!C2L&ieN;8}G$H)pu8B9(s3wzM3}AZQc5f8+rAvDdXwtW!CLH_RmAiRDQ=hY%||Q z_59}TPqaHnO*CG7Y^jI#xwxs=yS96=O*a+O)X&)YH&1x@%I2nse%qM1+`El`xV~6j z^Ol?KRF`TlRpfi@ePm5rJT=cfbL8vmRPN)uY*W=g#^vwBuIq&)TRnN}azyG?q*EQZLw!1oVelsHDwz21Dx0@z)YHdfh z%cZ*Ny`HCg`kASAo}G@4i+rffgQ2)zyc`sr|=|yJ&C6u4!lAy-rWPanoM?&JEc*{~NXO zGc&0ZzpC%L@?JJ$;-vwmo8x73rsFNoq)rCks^9I#-LAbn)8O&k&hso09lKeZbA8?> zs<-03rL#fW=ArF6?XzTW>cp@4+r3oNKvx?N@qRUpj}Nbx8?&`dEzK^|SDUl0)kb%VgzVuW8WT*nF*TxHyfE&(;|@)RyQ8D-ye0lN4NF$n5S=+*L&E_mj9gVGMinQGkKXm zZO;~F;@P!t;@R5DOm==YQKU3}_V;vS!@pCtWaRDUr%rcyy86`gGdt}bHCe6G&M&D` zv##NCJTt}hm#ynBsng=#?LY74AMRqFs@hv`elME;Y4+-=exft#D>7zUYcIoW&1=JD zL}tb0Q}^sM&b{`trRVB@OPv@I&)*z(S6*N8C3Rx|#q_<@wqASY$j`kPjgvAN^esO` zMkX1oJw8puXI9^}|JcWNhmUst=4p4Gh^w6jneKP1e!Q7~dWd(PeXRT2eff``%DVJ) z{gmG|*~~hZUiRU-OI$=wJycy&W^P5Z>*i$LOWb9b$$t6bRLQ{HF4wu0jXlj)t<@i? zlbRXk;i4U8^Gaj4#jd&>wbk&o?f;hLS@YT_x*wifI;JK1<8rbx`}XRtx~+6v<mpXasqpn$6_i7)vJ91x|={BpME=;{<+HCm zj%Q7s9v5n(@vm#lWpvxKM9#d%wVnNE+FNI{Wu!=WY3!bRd5egAx!Tq=e<}B)Vmhxz z(>vwdJzZ|fNSWULx?fe(l(AR)tueRSUHkQO-+DX7Hs?Ik&b3d*yYt3QT(&b+$7P(X zt%elIAl;FDS-ErdbJz4ZeUUo3pKku`xpDJpAFd_i`TzPl>)*NN^P&3vc`s!&(A0f( z|GjmjPMd0)_?~#Z$^2~V>x|Tkwkqd(e&qh|T<2}(bmi{bwD#mnOkTX7xpwgnaXC>l zxlhkj&n~kqS@AID(*ZzOK+3)pv+wS~(x3@d_mOiHGT17@*dh4fa&n_^AU58R}+JM>k~KV7Kp zoVb_kj;_njaQ**gJ8v%gH)k)md3x?%H{xA0>!Y%=tzND@K0n@WJIBjSXa9C|9?c%bARfY zcJ{A-?cZj7R9EBoM(o=*X69@4#dw^n>umAz|6jQ|Tm7ZZf4u%+{Jf_iN758?GSPOT5s<%ueLSc*Z=eXb7u5CJ7!&OX_}bs zdbjPD=)S1w$7Y#m%Wt;$=Y8+#iH*Ee+3ws^Pt#xB|MJsrZ58p)EG>U`Inf&(aU0W8 z{dDu*v9Wjm`_FrKIr;NGcQ5Z6v+q4yJKtAk9`5>A>XgTM&bn`}pMPwoyfW{aceQab zRZq=tS0=OGu6{K@%+Fpu^X4@5t1;)A<6^~5wod*u>+e@);n{%yZ@&5wu3hwizW?z*Vz?1>y@f5~^e-RXKV`0Z^yW?VeGwESghc$}Jx_4{9~ zKijg`+v4hP^YU8E)HU^c+gyvfn$2#gjOlOLw)=`{{JpDvecy(uh>59an5xN~Zuh-t zjh4oHmyG%9`G+elS1z>O(|cQ6XltOyzKY44=!pNUw&rVVd%BK!)6d-g{Ona%d)Zwl zx~kezC;hX$w9a+utJv@8$&8KNXKiQOum8HbeC@fCGfkH|C7X42qbsH@J7+thTG}43 zHa+*%?cSM|ZcCj|_ZL^s9Fg(;o0s#dH|uWO`twISU(KaXc)HA-|CWFGV(|UEzj?=- z`|A2iGEn4Z>}$5}W^1)m*6X#*wM}l%zg+5SY~1?jzlZOxiS5h0yIcLdU)8b#-g|t>u1u|68ov*SBnq z-F}+u{NI*mzTa}M=dX07PKW3Bo@?FO@b>OC)8BAy{ZG#?*U#JY8Flp^H~W`=;itDg zTP8Pt-z&Ce-uGQQt1tFqrtY_T+N)--9hxQYYxd)3Kj!hS_5Q7QrB0h|_?p?ajmBxo zo9=kO8ue|pD|I^E_BS(j)>~`GcFU^iiMQ1CFkSc0Gy66j9r0H;)wb8U+L^sE8~Wy- zb+)To-?HB}v}LY$it4v_%l`U&eLtcxcmAtlcCY4KoSunjYuVQ`*E4@^b8EY{x~=9y zUf*i4XZ`86%+)}X6|a|B-!*4nJL=u`S@%Ews$q7UqUB0g@72GI`m5BbcUk?_5|NEr z&6nHNe)a9S`g^moEx%`5f2#e4j_r$=mY;rp&DhJnJ$u*pf7z=6pSNN%E4%G6vhyo- zO4DZh!#nnE{&labcluYgTvN~P&vv|B_)5JP9KYqC=iz4Bt+Vc0)|cKxee`VI>t1Tx zx4MXlZJW0?+f3KCqw96^ziBR3-L+)2vtG=W)M=HSm$KU1C9^LoF70kTS3@^m-L;(O zYu|odQ5V1YV%F<#rB1t=+c}q=;`MiPFZaz`=B|m~cel3ao9kIS)fShL^N;iJQjOi# zSb5#|ultubwxjwZx2blvUwhgvYfd$}>+<8>@}gPtI$UP^^IKKBbo5(A+t=?tUBz6x zN}U{+j~DMBF6ZxV|GiXS?esnUUt7F$$6kJC$H}*Mxte>3=F3md|1uYS{k|rf=`i{E zma$T#Tf|>n#(L&`y?1S9z2=6C>)8@>Dc_r=9x8P*UR~!#-Cy1OOK0k|uYJAt`ur0A zY(JHak!_dHRudK7`wr7x`FqW9`YuzwHZ=WZ^L$*Ih{lcGz5W}G^^qM@H_gqtZ+)r(_tJc&PI}wvOY^kx z{d4)d(Ris-tF2~g`g^J~+bOpX|Iz+^(T^WZ9nEfK`gtQ}U+y|p%G4(GCmnxoz8f#| zC8JU&J6}UpHT1T#vxT{dil^PH&Fp?%V!v%$Cf}Ou|IYMH$Gmpku~YZ-HE%WQpX2(m z;;J$KdMfL#vQZ|AWPrM#>%BC$(R|q%=6W0Nt76}wFJ|BW!`w^FTxC1wR-fexpjo7vi(vp;{W_BU!SXKSwU+wtA8_NJX0@Lj80=BN33HlHe^n)cuE9kzbs z;&OK1U3|J`hI_jD)b*{M4e*@N*8dd`)&3n%pM6!;7JGF!k8jts8;_A26S4oTSxp9f z-TMBDZ*8x?sH*wf`)g~isH%v1$;_Iond++AZ>;VfpN*&l^2XJPTV$oy};z6Jv6aWIiVjMIc5(NXHXfPNGg<=?mfe-{i7z07ZIj0=LGC=^Y z4x=Z#fy>twqYNpbiVKS8?1~&37$5B=jokizmkV)?unebXYxqwaA!DwEFfUM(=NEe_ zIMHY2mMu6MYZDQZF@@!K%`LGZTK|QnJYDgj^rloj2sYQ`D zSoi1GIHUSD3?D^}vrr{g^=P~Sw&DJb$kNt?0+Elh|7p>YG9>(gn$_Ax!tsBv1$12S zQ7Ufz5YqeZSrqH#=L-oOd%(`MM<`Y8zGE&eGRPp?U{~WF>0o^TJwU?0)tiEfNW$W+ zU^7t7h|vP>)w%~ENMLFdyEr%NG*w{Za~5YdZ{GMLD`{aOX)-9 zj>G3Fou3IQ{&_8$KSBsFK=#l%$rxecBejsjZubg(=KSC{t7KwkgYzkPnuKD!f*e$( ztdFF6``=4ChPhZz(mX%zDba8#yxCFMEFdI16GVg+Q6_yJshv3}<)Ac0dJdQR&{o}C z&;`gnxLFnbj|EA#jFO56Y8okO@+|RLdv(Pe&P?bAh4&<4+MlV2^u?G!z z15$*FDbUUw7b(Df{@})_`IsKB+!CPnAhDVX~0Y4Fmcu~763V` z);~rN7IR0bKs}^7C42yQ_#1%DV&0Ov77Mq|yxU>8L=ghDRB z_G2U8sX~y+JH4Uyb-xHt!6fhM!vBG-tuaKf+N8a zAV{qk^rBJntm_`u!jC?BlC$ zbcgl`L0;0;%o0bPV5ig=cz@Lp+U6uRCs>hJ43lYh&D$lf=*sb#WEc~49;r|jy=)k$ z_4~}S`z2J>h`19YiP|54TLz9`aUa){N1?~C>%NQ^3?n&fZcUS&nj? zn(Ke{-(e@(6T>^s=K8294JvAB$IW635WqrpM|Z@t^mz1O?Jac9<@;HnznkXgc8HeT zK3f_LTo1MKY0jxiP#joq(|Iy9elDZI?95!%gVTEqMsXbH zBx1akN`CPix;*eo>7~777AC^d!quXZZ&+M#F$IvI;`^#vq9igZ2cdw3ILk;gk}USP z*%)*JaXdS*hZD!*-$ZLjV}909&x9xbc8pn?l(CGoJurMr`pA7efQtC@?ZrYR@n2iJ zeMcZhi9p;O%1mAYcqiLqDqh_{;pHBNjp1WF{QiHIgD5$; zI4_b{D=V!+8 zDtu#!c#}<8LmD;>c}Gw;Hr=4QB9Zkzi4Ok$cz%Bk5Hb%DHn)`m_Z&!R1SA!zZ6Fm# z!4^^TJM9TQTUPe~VrH>&hr)vfy0c38X$SuaMkN_zahfrjB+9kG^$hDT^m{b|YQJdD|%J%?un! zb!r0Hm{_76;9Ru-A=K&;M6}H!*v@eb;Ar}Osb&JYwq%-2Fqlo__Z3O!&>z-U^I%RT z345CtI!N~lv@=hdOHnRZt`(0GCs1Cw1(wqJPws&P1V7>e7K+y$)ei6uzq&m==JcMA z2Q}s1v$t;5*3pbIVT<)$N?2oVJubPClRGd-G`h0-+vmoKf;ja)QZc7!<$WJ zczSwCdW@r7dLe5pl{KsjI%!lE>j5WU zek2#-uw_XmGDyYRKg%2ILb=$m7cCFWvN?Dg^t%bgacwO3V+`n+{-&CFN+G5#Zqz7& zuNr;r5+~PK-OHfY{9%(Y4t?oP4D2u-x4{COB9!)Zn3Dd8s=&4+uQSTtF*&6M3B$|f z_@(uh#6(SwA!>Ki4nDK}g4}c5))y*}zEH-Vb@X*8-Mi2fpsn}U*;OAnxb5Zc>u@;Z zx>UK4Yb9!eonZK{<>bbG%Tac13<{kp#;B1YZg0r=*1&oge7KiY+ks@ z4ecy;<;(GbV+S4H^BxvpK2sy(?KC0u#?Tg-I|c2Mw}hF2H1}i`tIQ;zt@_X^F2HM2 zmnAniz{M_k*m=60*{|d_%SHgz8clrw5m~H!Och#pu>QE;Quuz&`fZQzPPQ^KUz~V1 zR>(;>n;S2n2LSg=-kqIOU3T4VOtDCWt3|_)&2eOH`<1}~8XXy>i~KvY?+a@A1x`ph z0GzY$?u))pxC=PlK3MFw`zXxZgf^PAtXSwQM|Je%i&jCvA^~F3f!AO|kKPHDIYl}* z+RF%xVD!cRapGy(P#

    )HV)UAnZ6z>9%D0s0lv72&L;zt*=LOsf5?KMx(k~Lcw5W zoYE=0kr}D&$;PN45n`G~sam6XsR*T8NZSH3-de~^-DlgM9Po{s#v{r>K=WbnQ z5cg38%CmW7u=dh>p64HCUoq4$U$MdHh|#1%A;HoF^>5e zcwU6XJ@pu$mvyy5A?auk>s1E{AD!QKHw3rGtbHuhksN z$W;gc&b2JN2id!{OGk)Bl>-+d&X8yIVa%V;cCX$FLmDE`)>;eogHG91D+o9)Bt$NV zl4ash&clZ~SaSUT>_89dj|U169z{!pIqqr;Lo`Vb(<`$K!`IYgoDBlPAskh@Youi) zRvxGUxE_5v4kF#K*toDmUQ)!DjMS)C>svP|95KPvfu73Mg!stUCmd*223P)QOaMnp z1RY>2wP(`japh;R;2WHFHOejIfqBTI+fTAXNgGSmUwfE+9r@EhR4rXX%;<~mNYu(=4?E^5dHit-xq}~Wm<{_qSbYWZG|5bCky1i2@CE6ok2mI zdcj$A@|i{bPNNHxl(!yJ74QgN#Jroq`F-@npfSbnyKGx7N#Gkn+9sgJ!%n^)$?Z*= zuWv`wfY@T>9w(NiylO?Vzr@bs`-ItU#w;R1g$ieaU)RC$T|y`XB#K8v0+JvogpSHo zE`0B(G-+`(00dBC7ms8P7I3HFm4j#R&mK&5*)xS6pS@#bR#dzH6)ZK;|MJGI8P=h; z-xZGyf#a_Xe!*rxAuyJ|=R?@JjSgGfXR;$*iI7}V0uhgKf|b%|%f488gFJU}sw3H+ zxq(CBa}G~T5>5~8+^Pd%oi~;;;P;cqxt^HxJdlfGxpx$1Fftzp7;CIH9PitxdDHl7kOIh z4YQ(r?hT;9<3Q_)qQabaKWD0_ookN+l4txG1iuZm!20#G$y$Huei{7>cpqwz__!m} zQB+o6Q*4`2TV1332coCc$D1%YS|!!?xO(cmX)0yg|YfzH2DBRjEK~9j81WR*93_) zM)Qj@c&>u#^%JvxX-T!g19J}dK=)k=k5BU7I(%oeSnLhcFD)dHe1o9!$vC}2cixA2)OJ(%h zd^)6AzW)>})jMEAnxe3EW)UTN$uJC4V~~u{bk&vAkgqUbd)5F2a z+?wX{#aED*xZRLaR|J2O%ku1q#LSXdc580@!f-_yxQ;6jz?FMAH~&!>cC|~f>RF=R zH>B=q97)$rJxA$L=Drkj613(}_~x`eJ5I zPWH27m=ri7C(if~9fQJMO!xj2ay6i{8s z;{mp~osC`^a5~zd4xug!h}r|>v#84ZaZX3HK%yIo8eg=PcKRLTA~7i%c!}rS0&ma5 zE({@Sw!sC5KlHMMyH|k-1tNHHq5x6gpI_EhX4G^HJk7IeuA6P+J!u^Yqx=AcwXI0Z zQPfoTbSrxz9q3~8zJibbHAyF9)m2~V7aI_YKrIx(mI#_So9ag-%z-5^x2kYqg_gaq zt2tc=jDZ+GuZL?_iR%u-;+7&|6j{ zq#)e{N%CzPG-z4*=%+NgG%H?1)zV#-1x(R6+Ru{yN0l!<6qbSbv+67|y{nu61wi`0 zj6N$2_bLyFP__(ueEQjn zreG=2wCCJ1?vEhMjB{G!2Kha51!G);vW%ct3P{&0O|ipXix9mCrWtS7x?(aOs{nY$ zT>z-@m>>fat)tOlk6MY$=t44rxV(BWZ2*p}P4ku78E<>={iWsRx2tJ&n&Fix+I!)! z{@#k$<^OO)#(~axg7UUcs@QN4IN16|c0_F(aDJpeK;BhA_Hh!0V}S^HhsEnaYK6n$ zQ&EQ+FO=cg;VwNA^Bi=*WS7Ab2^`KklS2JzG5dXE9KE=6$kxuAGH(k318?MH0<2i} zN>J8~s?KUcLlot6*tsWV51|4$SIXG2r51t|9|)e#QI-;8yJyXmBYC{@-|}_`p62^Q zdh0YjDN3``l$UG}08^39LFZt~!;iTOppx4j!kIQs)a*=!NXB!-Wt}7wAT3AfVVq?Z z6&3z%lr79lsd8O?TNS9!e#uLz9$rEO4M}2J$U-9j_bXZb$t#7Ub}Q$Yr%N-h(bWeA zOl?h+E}8s24*SS~}IUK}SRb!8-pt+17@m$*RcUvUnO>r^f9lQYQXaZ7gf9$L@&;Cu_Edyk-2(@35hOzDcMYG-ldh znCyOe6X5*f6(5JUztV6?0_S;zDT!^kb(@*-ni@XymrSFwbJ!kKqHI8r0zX z=m&EjD?_L+dYrUxlDA_%-m~0^SI7`}lf({+c2S0oNGD1)p+3J4hl!6KdRxdRK80xA!2=8bp6zR;TB%>DsOGlo?Xp9D#BK-0|rLf!@h*2>S z|8ly;EUy7lusRS9#-O!E`!N}tE3r&g+@HMt(BKBtb{GIolaWc0fW3G`i(cKiKs_KB z`#Htb3P@{^$7mdF!7VyqzfHLE28~%oSwoPYN_uzDSQ)-&>5?zhm7SsRRm$Tho@Lva4ni_0MVoB2lu~l}p|GRLlBrn!c zMoAHfdU_V>XS1O7;6^!(5A}NK98LnV5C(myRM_hlv-N66JgEr=AjqCEXrQTlcJ1(n zm+e<~wnwxS(qbWj#f{XVY}6lgo3~bxVpf6%=a+n_SInS}ihGSOEX5Zv`kp)4!!|)x z)gVp=ZQS79g~zb;Yxu;Y44K6js19Iebl}!}+aEiHPb4VUI>vPUrm@ga!1iI2V2?*e zNj~=C&q(%CGxUt=e76pqoByU7B+-glf91g^gt&5y-z&nNWJeJ~_lz4sfZ$a`$JPlx6KkmP=j44@FnS+adZ$DP}BC4UU zOu3{hZG#GD(f^$x8KHhm?BXnOs4|e^u<-CQ-)E~NC^jQui`7>s-B)oEpX>LDbw_b% zW?MmNX^Gm7HH4tiRullGXqUXlG0Pevj0rY$#ig+U9$ianmgjJ;l*xxTfKr4>i^r+f zcV`y18*4b}Cbsy}P5qEdVD;9RxVthz6_U6^GX^^LpV8P`V7=qCjBxoN;@l>HyKtE4 zDJWagktai0GluH}Ro7YwA{rwS-C}6M&D3W@h1BTAfaQw&T0=m3g+Jhp@LU`LG3Bsp64kmW&jX*-(0WVy4S_NW9Iz1VcAHtyyR-J&ejT zm#>crldL=w&u_f>@x&kEYGIX@ZLwO{#%1a}jA3L0uaD*vBzN180Bwn^CM6Zq=`#Nn|8If1(KF@b;!YBDN`ztb z@*5qSTHU6LiGIZPxY!i^Bl#_A8NpSGR7D0{P;jMCJRUl*c|V9KGpa))0BkiShTLaC z(mVO6h3`h?jcVAymYj7#NQjf6t7bMI>c5nj*UP^MNJCV0{0q%d>tv_(jENw8WEzi$M8l)YmS?ItXGCr4*jub6=Sch_dy;rBr&b z7Gs4BmYdyh(8Ub(TP)@IFcMOwQG^8p10CauU<|o{kV#Qjh>`3{gElXt+nEZ^#cJ_Y ziQkP=i5dvn@Wp*U-&KGG^Dac>Cvi!dwuiR}^fa+8j1W)*99#yv@A)aX=>kuHMd*1x z%^F6^@a`$W6eO7^r-K(h4tfeA;o6eus5gD4+``|eb#C5r@UM!*66I<RH><&~5%lqE&4 z;u=`0jdwZr2FA}$v#)H}GT0o!*80*k%E3(hXbm?UEs^ZkScu zn6(UuO5vl#<+vd`F%5q(o)nX@n01C!5>7$Bkq6QPl4LQ+T5HDOKTbuE>g=_0C5fMH z-D0G_00{dtD)<8CWlSX7Giu2i{13)-*_Y}{trt8<>);2HA4?;v4M3_V8R0wd^J$CS z$aUqP!G@7)p)jaXF^HW|H-=kvGByQKnqW)armO}fV+cZm%i6D`i>3E&hSC;?29@+! zhB_WIljytK+7&mOKp8fuwD4RJ_bu^}`Uc}&-|6cr=xTo1Y5w?lB6@LQJJGP~2qQ+F zPtO#=I3x(>7Iu<_EZy1W-;v*FqH&2c90#6k2fUgr0;Z92QvN+#@eF}V(s|;{2*AbA zP!%56lu*g3gasb6orQkc%~VLif+@@dA5zJf2|y(+%qa!4QgR9;^E_lgBnX){UD7ys znRV@s5;o1^nqNt3_KK;Y2Web!y&Pi(6Ss9M< zh&CO?m)*$W-{i^}Tc7;hdLw2tF0`3vp{p^%!O?61oAVPYjxzhaWZlMh;BdWR*4oJb zt_~6&2eW1RN&R8ci91G@Eqb*G>4{;~_hA$aXpQl+3-miuMIAWTH8(i=MMywO07ei! z!Kky5O4hx<x} zP!p=pxfZ%vM=aV@t9{H!?68wE-%EBNh_Mm$73}7uBLZZcM6Y+HY=V`_K#yy7P%lyr ziSixok$vn7JBc`bKAlm8p|RuxOjxoOvq7Cil;;FqzU;~0Z~8%mFP|!Qs4evlW)Iti z$Caz$-XwN;Viu2|J0J+mHjcTl%Dp#%Mv7Op>2oMdT03TBE3usS?BQS;Cl0$o3@IXQDI-1$4wYZ;7I;bj6n7w4((~&f6=!e&pn6~9Jz~T^5r8)nY1&1n;zF$4V!Dn(N~x> znPl&?Ws~|k%Y~$y12Fi)6Nkfd9_%ih{{|_~TEk*BjLTBRm?nK1ou{`Pk7uuvRIo9A zAuX>^r~%OS{+vov1{5J`AL(3N0F^i!A%fmS2~438vq%KXBoSI{;>F6$hoK2D&^Dyt z12h!PJk`!86Q4OC6==UVgjGRmTpCyfK^+bkTf?!AAq407P^0?0D)G97lqlGJKJ-|u zPO;_gI@B@cTgr89#^>F`Y4_Cj5xS5gPc;YUFlvr8T8y*=!D7f(!MHekYDd(ZjP^;-Ak*?hjaf8dze9&8|ctPO3moYC)7R0IEZG@6~dye25112f*Ic zqy{i*uFhEMv;pWXgNDZk(Kk!iWYYDBu!Dq zlDQ5Q#TL=VwNSF!ks2ND&t16MtG(8l;B6sm%-|Y?*BSkomInw%l#a-6wc4fakb0)h^=T${ zXI#fofrt_{B7D3&S#XchX)d4P3x5WeHonw<%SkmX9knJ1*_5oHJI?;)UcfR`Hxns+ zwd*29gma0|jOY2c!VSlr*QD6qj56QH47)-b}CYeHUSfvNsD!dvBSBa#(a79k)$lNydrIMb z+hoX+pa4HyERi}7kZ~ajl>EnsIe5)d4VE+s=X|a}2gA)u)c5gePLXm*vhby6wl^74 zt9s;~Os>uem06cSA657us-&jtBFFNHYv7#|iptQA95R>D32WhU@W|Obu_E=W#cyFF zh+)W%M3i+^0}!mG5H!=8_Eblth*j$u*W7jK;ivHmvO*CM(AJ4Eqc}!Bw7(5aR$>s~HYwSfOUxA6c6!>n%9H$Tb|iSji%uvS*_I$w|YVwk82qsOZ?U*vRXX z3^WUwBpwBgTmjK5>%W+G*%Heiq<8cymx7#Tfwe7T+;YfL7tJ=S8!dmHlUSIxzJx^R zK-`%2S}HeqEB~GnBnPF9QLO3~*S2_)d`N3~+Pe_lB$Xz+6q_ICUw`)j3uQ4%Jx1~E z^_00q_YfW~k27I@tu?Rd#_HwIT*Bl%JhHtYw&aCOfJvan@&Rp1Mt^*XV5jyeQc^-9@Tz*k4j0HLvNdk=n$Rvd1SW=_~dd{^H z9KjP%VR5k4y5zj)c;2&TV1Uz7EdnlA$#uHV*%#a)d-$W&qTMOhrnCpQ1AjrzQus2H z_iw-?jH(H-2_3e#XBHvQCHjnLMPKL`?ZzOTs?*@WI%^~S8SV~zq%RMTdEmwQPmHHF zN_Ddw*?vj@mL3!2JwOJo%PoOGOrmi2%%baRQB-r*Of=T=sqo}jE2cUECLY2hG(A&C z6&fwzC9V)#*QFgro(vrbae+?Y3I>et?vuA#csuaL@Ol;KBA?QaT}1A*RKuz2sEcs} zK<$m0LcPYk%*+)mvM@U>me&4V)+ekprdAPn&HLhhG zx>U&sOf$K*;raF3)k&AOTpUrg0XBtD+wg9UrAIO>_Lef+J*Bh)!~$G5hSB;nf8~bT z8zM04)pZ*j)yOY3wMIZB%FmSm>FC62xh87XrzvG7fn_UZOguT2Sg_L9FSI%S<;c`25O(-2006O-iUlii&l=`ThTS>?uxc;c&H z+-<2f#Y{cd38HYCP*a*laiBo%b|Cp^YGn{YmjgX~gjl4?_T)G~Qcteb`P9?bk82*vmkTZh<%aI%mo6?;8?YFxa0}k@ zqNpI0XvC1HcHeLw`oEcOKvM|&nz#((Xi50-8^Q0gBqn7Pe5mRxT0cNS{nP^SlVh`2 z8R4~b0-QygWb{k*>?;*$#M$~FiaiL94{PiMezKD=ko)mE`ca_bgBH%=-Uqs#l@nBq z+3Z-6KP@f_a8$oHId(OFd;K_xtO{xdJW;B&Kgph0+$MU~nINJ8j!R^NQ>@>uSFU`j z6v+lz=98gY%@v{$flNwYv5{rAmA`aNw|NfPOcWRP54ITnc8a^F5M2~Pu7!1dVXWXh;gh}S|Az}Wb%6JL%OSI>IWO? znFG%SzLvB_ysczDWHLI#`VLa(EdSjg@HtA3@?wd2{sJjb>0s+7knAZ&v3eSRI&XzlJ*tDHOV4nT|o^U3-gvQrq8Ao^n&mwxMx~5qteb; zn8^G`Tt`F>fmfSYJwo|N(nD8KX$2BrMlt%3ud3#pkyikKFD#aa(p5m{6o@%o`r$~HA#4;`|&s#uUR z%MK~L@c+Uf)*cbz!y-PzL5SHaovNJ}9E3_o9%r?~2t%u=u(7aBj+e_U#Z@y=P?uuy z#*QnD5CqjwKgdyILsCU-N!kfDf#mvVW$dcW`GJvVuUZhs=Rb+{g=`MMR2(2F3TP&H^72Xq z05#$Yjp9}z()Awfkk=U%S9Mn)1l92;fjJG`=t1vo13jppDPzQ(Zme^1dr=YzWrQ#S z<@RKYk%fJa;#aSyC>z6=6;5ye*3)W;^fBS zph)8t8m*d@l#MT;>N~=qiKLvO*eT7F3sYY`^PKp;u>c#TRjiAf{z-lcG&zM-YoQNj-in^SVTqQlGf25W{S2<&? zGGZMo{H+B=3y8390rAa_rG;9gyD3rEX`32Q2=9k(tX!UR**@m9C(Gwox(O)kLch}h z0fDja!*p#DJE&gE@h%iCrpKNyVlUXHUSN*L7^(=l2dGG>086$;mDbXw{F*>P>~RGT z2d$}88BP>8zd3M=X=x}4&YzD=Ev81a3yUQ59mfvSFg8G6k#0^nB2AQ=Y6zt z$d2pqpr0D#=0z1V2D0{85@`+y3}v~#?yiAodN{upU3hf62fR+%Cm<%w94~3p)T}euK9R`{QSrZBtUg6Kc31KESaHd6QzK$ zuMxDD^0t5f)^|8MM&p-gqb8YQ^-vj<)NA}tiCAk8Ky_%e?iJs zV1UR@Da(wVu{$!8x#~dJ<(IbjCK#B@_JD!q)ky6G1tC=FIV3h7=Dj-Vxqj-L z%p4iu_;Y^fWLQJ~XbA^dp7I|@Zdr@6I<{5y5lD)SzjKWYNv)3}=w9I3J5E>tF^!G( zkMM=e980*PlaR1Ts6N#p7c?gUUn;eO=!+*3qyVbSUYC>=LYUmhfUA-mWjrook zV9r2c;^S1j85VYiV%c)VRmA9@kdwig|E$^yl6`V2LkZz({F%4*Wq33h9unu;jYL%6 zbTvo?Ye}_sUM^_FKOP|Wh_Q6B#)Lrf_KiRgkuVQ4*~8RBu;VBN0!f`^@UMhU&bNL8AnFT2C-aOf{+kWt`{DCls^_l7NiMkVE`^z|C!uVqaMjW!e@LJU?dHXp zuo{UNIeyX-=+?!QjMPi~?9miiIL$(ka#p4Wmf9SIopo{u5D`eFkvenTYl3z9gVxL4 z4H6*`?E^+bITqEfQ2E4>^W%60OMp~jfFEUM6BRp(%YkJS8)IdZ)`*z#6MhI~PpHr? zgJW@VLTWXR4LyA;MZv2W7hyBalULAiheY+r@PYhI zLawJ91Bmirz4JgK)qN*J|8kr|7Kl-MVn)5p|5Mr&Q%NU19jv?e$W3r>Q@{*#-~%~c zZB%O#CZrt&K3{~1U$@$V=(h*@c6RE~CP&=c7?;Ky>@s5{?fRky?I?K#xeKc;x!35C z-ZyH$@ZWi29E;gq4Z(KVs1|DZqz&7HMeLJ&3_&m`2T01R1`4%Mf-082M1yQ(Yl4yP zQJ4kxSLIZNiSi2S=fqPBD|)-|qU#3i)RZEEnJ!7v_xw-;9B1v@M09X!C?Lb5zX?7Z z^0;{>NpO@H9?LyC5^X)=h3Pl(K=GxKa=Ct#D2ucPUV5xPsIZh`R|Dv-j;A2CC|VM5 zbUklSMK!K>u)8?dYz*fLwf9bossw@qOeP28C(k}>SVN$9T^T4f!hA;Dsu9ZxHW1Dh12WCka6N--f;|ir z8+g~%Q4rc1@kE$7^(h8=OJ%g?FWQw-ACKYwiF0I*!$pn{FIqk0)1&90*1!%3Lg^(mzkNbYw6b*42x2Pr|NS{5-VHbrLOJ%V17_# z+*P#U?kSJEWP4_7$k{HmigesXJQ%|)%PfD4A+o+E*>m(}Y?WK}5RZmhtV6)rLwe8yd`ifoD( zSqwGqn(s~{Ww>i3Osa8rlcReBEu~KVplBeshHhf9da}PNZalLeAY{pu5X;24>+x~K zfKU$9w-Qy_Lw^UN+mMy?vj0mwj9PjG*6eHR+4n@n$}V-^(zkti5RZ!-TPhiPz0$ev z>^RFxXZDaVxl;Sf;FZSt29#-36#X%OR@mY>iWE!x ziI<`c)M=Z&*}`-TvgKEBtW1xebyYgK$ln>+G1YKEdx(PB1^MHl70n%Ml7%fq8e{hN8U0X;#O8l+b)HrJbm!L zNj1f@c;9Hn@E^BQe_SvZA1nIgeLZGh<`wo zsXyU=49`Du*=7ImAiq1P;XF(KM`aKiv=jMQyAI<%#WHFvq8L9L-=xmjpq0qOIIT0* z8`8stb6I;gso-v+*~MzMPkp-T9o#MJ@}upajIS82}27QJ#cW)Ut<0T1i_HG@w&=V zBx1cxZcGN#h&pBwji8qIZ$x{+dvfrWPs-grHz!j79Tf0Jof&jDu%;PTS`_X6Ax1Nq z3)FA@4*52lxP2ohwFjquZLS%i+5Ah(2YeFHor@+g*T}H)Fh#<*3U5Tm@G)3mt|Keg z-GVSt9Tb$r!bw8og7?S7aV0?n7C}rF&Un(W?j9ef>;vgesYZ9-hP(wkb7Y0?t}l3h z_G9&s^*u$?Ct!b)=8;Kyx;xF_y#nM~lpH~u79k>0wJqcyZyb)^WqTyid7s2ZGgLs^ z4&@Kp8Wu*!Lu0mIG&{&NAO2n`vD&Upy!f`_k)X&m-q+n?{F@Z^OQ-E)8&U_jwjH#M zN!z)N9g)&D+J3{nxqaYz{iZdwJanfNTie&&vJl%ear;lPUOCVJoc!0HiNXW2J4V}y zrP=Qe1^`U!epeBDJZn#K6?}bw%?i3+?Y$pR2bWiDqW@FZYj$*;rUyy>=+Q*GC~gTo zLTL^tbdgrVuKoaKq-pJqyi+0Ba}YYjUbl!Mt>!mJV7BjfGA-Z5JRWB2Ol_$^>wP|W z5%2d;$T12Z6USWq5W-&)UP@v~%?};|KCp)c*MY_HED$|qsdmH-TDjPmFUm=5$E3F0 ztzkj5d5hbkODgIhw$n3NpM4K9o|7KL#G%&zlKG&|3d|Gk`lGt~9jfeMO7`lFVLvLp zS&51Ww0cNkF(kVOHSeZi9|UdcHH)L8S+)}@Qnhs`z+p&bWQ{mXBQkW*Lo3-Hd^W{y z0@;`4I1xuM>WG~Gy|PuzS{#e(AkGLaq$zy%l{J}HsmMqcr;DMEEEhO+ryiDzrYvU$ zlS=F;ZZmjK=U*Dz2C#D>B7(H*F}&=a^M^MnpRe$AY08)E^fUlqaXaSw@2JPb z_Wu`gU#Qjw;Sz4t_WI~n0;1uNT!~^mz8@f+SPn}cb;!9?`Md-2-t5bS@WWqNH|fY{ zf16qqq6}B$vmEV*Y}N7<$!p-ic~?Sb-~JMAu?lqNn2k5q5NBCSNw+!E0*0vT2D2fP z5uoJIhn%JCdHBT8A@;~ttk7rl$2QJHtw5?qbH+LXd}k(tyHd11?ku!9l6*VQp@UKF(<}_I}C(sM|?3SPbxuaB$;)Cpz#5 zKN|RvbF@(jsujKyypl*Knjok>S-Y!?QeU!3fDTTAvwqyW6Gl;|QDLH;@WHl-RfS$j z=p6O5sh|bqcN?||(1TcfXcd%?`%6l(oCU;twi*cn9*W7Cf->fwg~9}i-MGMPk1Y*p zo_%>@K`(Jn&3n>*nYUBit980V`mkLkMN7~%>zSa%mF-I`lMF4$<1grI2DJ?Qiz#+7 zW{M{{A96lD&Mc;Deq+eDVBgH>vdb* z1M8g39Fp4q(ze1;i#Eu9%xS({2jg0$fDZWWagRFqT#xECx1X{|SLK*H@rq7!vAm9e zRoi@(dtu#9>gH)^afp9x&o%Ad=F>j*V7r;br{mRW5QglJlaZc2?~lqPX6=a2P)6Nq zNb9LLV>f}M3PvPbe<18j!PSuAB~9{i`K|<#nm=X-Wbt9ODI77csEn}c$?RG*4~ll_ z9z_`CHIf%WMLWZi>os;I_lrK_;=JU~DLvyNRH+SzYya;-b<>)cIfIwI`znymW+F6$fsOWs+x^CdfFu|#X(rHPacGA|y_F4M(bEEzn6 zkJUE`2`@cIh_9MJL9X07|0C|EX!B(F1?(~d_nPE=9?|u>45?Km4fGuH_^TKuf zC$@frn1EsGTNv={r@acBXfIT#(_U3w`!3o`yf8}BUVv|GEtgG7ng1SUfEAu2z)-NG z6RSU*%DxFIN2Nxw>Sd0?3~H*K?JLH^ZXHLZ2L~aI3MYR}TYx?=` zdR;J|*`+*F^>tZ6Wml-4i|y+|8_lluOa<3vzwF9v71RHKtMMrDLhq@d}Z7YrQcT(Ma+eH!VA*^5i6vm!rdqKLg0QmhEL= z&kzgytlg;j|Lrb%5^$7q@?H7)x(iBfu~29NtIBD>06qsM2go_v^2##C`apZ-0FP>N+GEv0*eG%O;GQr~zzgLD z%P`b6+P;UOnE8<-GQ7Z+mq(wu`5GuXg%%d5>iX>;s;-tu2#-kzjVk^B2q~>*7bCj^ zW9y8aS=wo@E>!gt*%yjfJ>v!0cDWle2Hy;=l`gL zMed&%5OX4GAtX!2oEkB18ya9XAiwf-f$Iim4HcI?qR{>t&bV@rv!Eg0_gqCNXI@%U&;a4A!pJZsBL8(u zC>>B2GB6{V2a&0NEqVOO#DtZdx*Ri~Kbj646pru?i&d~BOcC)vT9JvSENMdnmQS%5 z%<5msNnldB2o0Y~4wkWPR+?WYYb@$lMcG_gVgyRXtMX&Kxgu0XFf^qG9i`MNXL!1- zch2X+OyoFl5Ii>|tJ%r5t$%pPY>-TgR;acjipbiuMR_h;vDwTZ$r^plTukfftd?u^ z4gL17%TU&VEr^a!VZ@&gC>I~WozCRrTr{Lb&nOa7m#h4N6C)9hjk6ABy8mBX zqw7S4u5C!@v`th8xL_%dOeRhs9X+;s1(@|csqQnf6)%Aa&{tu&|8Whn))0YnFnB4> zqfsBnVliC_(rrlmc`oQ|`}D=ksXpE3J=thRCs7=kC?HhM_3>sHpa9k6-WD)4lw}`X z?veQoCxpz-16vlnpgF`Me2)tAV02^9AmL{M8muT*)jBHmRP_-dr~%#pfh?sZqRm3! zU8;lWNnGZBjbe;`X$p^H`JAchrhkF}lMz32S2Ui1IQwH3jeFZiQ6mhFrV(qwF((C( z-T8AO!E20r+O)~JUlrEN8vf;+BK!!X#PcQmEF{dK*Un(P|H`ctEku(DMb4n^;Uk^|-D(;*_7IDYRxDC_Jtk9q>NoQg=O-vSW{bukTbLYhjY|2; zf^afJ%hgwMw{1&4CIn1t4I+!SQ>)&k2%{g4IQnw>I$!=&V7>M)g?9`Nxe`_#qPGi{ z5-;rN0XbUxDJACZlxI> zL+_K#XhNVF!cf}D^3IQcjt%9{=#kd{F!mwF$mNLs9nt!X;dFl2;jaizF+{9b|`FLUHAz7k-fo+{l4NhJ8&?VnSoTp$yU)iA~&8c$myS zGVUKLjSSDe|7Y0IILwwGj99Fl+7Y5T$q$?%pp4HH*^l63cC&E1n6sJ-nFwm4WNo@~;;XdI#-4vh z*o9pw%MT{a3|Z3s+xR*v;vvocgy+(0CYnE%au6O6@lluV#m8cPa>r&Aae@C_-;EnD z{L-6P)bW`-&t%1rY%N6W*5zF|?x0C~$|#0FT+QSmt;GiyS5M*=+8qlI0ox{p!+eS3 zUOCVWKvkErO>1{`5`7@lM~*9{ov%xkdYl1g#y7b0*jNp8BQ*)%fdu8S5`rJf z?on5Hv=|w^;U0CGSx|%5zV`)T8(CvP+fFY#-}Puh8^n(_aeu`OzuDIcGwGg~=+lRd zZJV8^vG*^>xDsfcv8bNB0z`akd36O52F{JS(d@4fFA`qNJRmJ00uC_xoD`G& zneX3*S}OLS=1nxdhFT0b?OTaq#IJ~J^-ZJOV1qo97kV1i!-#MZ9&P@-FJ}3p`= z#=}@*H?r0o;u!pJm|FxS>t1_{BaC;DCkCkKX;52}e)lgv{ZDl9w|T@o8ujXhr-Ih4 zs1gdVi5k`|B;tM_vd~|4O}BpO3k;@|iS#DVDB$C)r7lRCc4mNrn^cFvc0Xsgl2R6r zp2!(RHZ5zE{cevZV}DsB*}Znht5pXrP^eZhwz1mdOVXRy=qGWtGy3Qkc)Lviyft|O z_7se$YE&+Y%0VX!G=hi3OnA)=#|fr}7dPi4MEpzPB<_-FL`#UPU%%hWTWgxuZ=O;k zoS(znBKsOk?}^kN;3f10$5;J$B`uMJ<0XRtF1!w>)#APedM|42-75f2bf z0@!BDi8hmm6N0cfA{8Q7gi@nXBoZ*^p{eW=oV})hhvO$MKtPiSrk~o+vwF#X(icdS z9%;3BhK;1z5}1svPABxChqnB>7Q)gZcK-~lt@c;jO4S_70VM~o%*r;RjZii08kwI74slr0RLWY;<`hl#0G>86uV?&e}$8Q4Oth z^A!PmU7vz864ZeFS@~B+&HSx;2KENnOzxj5F4=b@SfLX^7D?M*$M} z*{PEnuInN^`L9%FWlpCxmh$Vrko^MN73RU#wy7HX+b$*9e&m z{~0+Z*4Bb|J2_Jjeo$Q%9KF!3Bv&4@d|hxcfK+(B|70UN^{{Zk!~|6%oZLmJwjPCF75>e<@21^fFTN|*Q`33swO&KGPdLBu zefUiHsF+uhvNQe^m`sFn+5;dGiA*+QZ`}3vu#Ce2ctk>ZsFu@oYgj@{Y>8^C!-Fm4 zs5jfbot1f6hu0|jhZ1u|_s7Iz3ZbUe+Zm!co$LLErqDx(1Q*LkQlA)pLja`#Xy6+` zVqMhvR2-j0Y~)IOhwyrs*4d@WVky|_vYb^&HKMx)r)7~@h!+J_QS_S2FzGA}Z}C&Z z#_N03c?RO;2XW)NtW!&w@SdYH4?c55cYiLAzDfHc(}4y5;h19kDQ+eR2xYcQY6jad&^` z591#$?Q7#%=d1731BAQxQ&i(I!=hw|d*@Mh)!`=BvC@2D54MBTpM9+X!oPc=bvQLQ zXhbdG!sBUbU)_#K+7>agK1`}1>@;G(UT1?+mO-V^qIjEAlV1hQT0k;%0^h?h-kZ{2 zyGh+MkN~-OQy}`J#_9g$;vg1}{Xd@w0s`z6MOBg3lPl$J*mquQZC;%xyjyLQxWQpm zVi~uAlZJ@kZ}RU?bVMt}f}$)v2ctv%k(tN5#@7#65xk`{b08dDPDK^m${EraDuz4N z(WSBz9yy;^4G^Pr=q%N#Zcl;64CLZX#0hhv#2XP&;@|#S9)(^*3Zt!-T^gq z78?8CdY_G%4loP0irSM+6yz+rO_V#Q^rS~`kgk9&sgHa!){!nr&1z`3jr`dVjV?=2 zi>l1#-eH6XY78OtBTWAy|`RxfW3=+{gYPX1*hAn{w1I@0Q8#5Pc3O|4j)d` z24~Eo5R>Jb5&^p08-7nq*Kx;B^voWWLBxku0m56rG$rB4r;%V3IKK~JlVST}_f{e$ zDc*_1)H#!o?SzZp;&6)Ai9?F&1Cyo^7v2-8bNG$uJY$~ z#J?23`6o4GtX{j$RMsIl(dNau>crjf)%H8u#aBwSqNb%Hit8SM9f{xL= ztnR3UY#c;|pV`h{sKY;PY2_3@&^(a>O(QUmZ$}{Jn-jAei7T{k>3Qq}Jcpnp zkT0h$w{GwqCyf{?kn&ML%Y8!zErk+`1PQziz89ZRZQtp5!g*p_rX1e|34@aIc8yM8 zH#O_AsBq{#PCzL39Z&J`eUBWS>)Ai&2%L8aT>-Us_l+=f4cGNg#+||<1kgZJ?9vm_ zKO*$1`i|>AkE9Ywx9zOg3Fq%TNT)z#LOc1C1fYcml_e$Bzj zGIDz^8=AQeei+%I@+%93!HQDAP1%t96+m6o<&7~i>A_}uQc+GsUm06m8@GY`HqL(j znA(}Zrg6IG7Q}k`OtMfsbb^qsh~X|*WN++liNW{fpSh%zdYe$IU4)X`M#8Az5y@YG9V; zeJ|{~0}0bdkKtLZ(ekAl9zHIXpv6qz&`qRsU*)%kPPTSkX5Z17FlcL!GZtw{b^gaO zBT@OJ+G5+MBYT8tk{dgb{(o1tQ?RXLf~d;K@9S?IX++NVI(3SJ6Mlm_DY0{(fV+aG zdxrag9vK{eR0{jWDvqENHA70RZ`TUX$b$(wo#S}bRlI4aWpXw*`dCAD$ zj?ZpvZgpTMtFIPLHc1=YGW}fQ70*d>&|K9MwB>%~+$_grzqG}r6M(xgA8Lu-6s?bi ze*5lH07-vBpKMG7vi=oWZo1e@RfjbV_cydZV#`+N{GfW9ng=W%=nBLo*>jQrR;^62 z?CYzH3;Aip&5uf0mx5tv3%zoSE#_=D#(g5_ibbk$t;73YE}w5ykG6tSl`Os3pgGvF<%Oh?@f zqG329(?lKoR6E7qa?B$|S*U6_^>Y1baF!`yWzER{_o15OHB;348nr3^WvKSXiOu^P z>qh`i#Rcpg$LJyOoJ=F|23)z0fBu$Z3%BE_DqXFA!VBE5x0Tjw1yG;|sAn5hjNVZQ zM5m@UIJn>C2x&k)NP6?#LL$fNJ)0AP%N~o6NQQQC#EsO(_V=z7(Hex~$fY-Q(uIJw zL2D*25;)H3>B5~PY86Hyjz$eQMYR-*G_2&W3N^IHL$35-Yr6~wu)UXW*@ktq4z;Xn z<#5&fd?~3^&dvN%S#xlW=hASh8BoQ$;cRMh0ST;|5h4LXJ>KYIUx_&kRewV; z8^dN(IqG!c36T$NAMeHOW93p7Kw2${_wKqH-K+DHI74kCD6ZcZd43Mn816k$Igv|J zu}kjw7f%#U^Z7~E>Pa1YV2m>)$_Z zAytYT#HfF2-N99qx4P(hUw0vSL(;$?a|HtCg>Q4`t^|8dtVnf9 zElCZuJ|$!ir`8*N>k&-oHup=W`R5*LHU}F4KgDFs#HqA5GEo)BG17L`50@mV;vP3xv}zo;PjI86pwPlL0KomyYq&6nwd>bn4r+=NXt+8zRJ z8qI*#WGkCV>E6wBUlFN(|r#ehv*{~Ht&t6-js_kGA?Pu4+V+i`E!|-$GEi3budBl-72R0D>^+P-NY)-V}3+*RqEzR&=G7fmFc-eL@3&Bcf zR3lZ4_A&W8J%5opRJklXYcSV*0QJ^>x8(51?y(U^073<`+;%3lvqUM|)!ZIQC67w7 zafF2!D__hw@4bgMm#0s~=0?{-KwfSJF}0P8=i|HqX2JVS?$J~fwY)-SsrodFHjf&! zCSM&RV$iDv^rBU@jo#0vPH`H7u%sC`L3Q;|`V<1Yrc+qZ=U19J?0Kp+3Gu{1%W^D_ zSX9|;!V;L-Y>F0XupY<+2VI?_`_JS6StdB~T;Kcd&$bzJ+Ii(Hq5~V%*{%Or8qy~% z4M&i8hLPyWQeMU^Gq1C(jrE2oOmyJPl*dkW@Tqt?XTl-^Blu-|IlC?MAPx0_ddy5` z(R}*izybKw3vwEq(UQ6za=KZQQ`cHAUl`aD^kr|^dsoG_pY&2nkNc-bVtbN%roW$n zYd52Z7NOM7VkZ@ffK-0a>miBf%^0~b3K};?ZynaaUkS;fTYMZR4(7cu>wQYC57L~Z zCLPqX)4Rpc2qG(F{KH*y)Yl^_-2S|C&T6^)%BDSDz0D$ddq34m6B61JuYZo(6CI(f zlYB9(QDxNZ1Xu4T20hEQA@z8Ug!w=Qx_Rw=cTO8w?2vGPN+6N`arrPD++wSG$@q~I zU;Ca(47_j_3JBO`K|YK~<2LXQxZW`}3th;IV&@i*=FUT1AO?7gG%&jijC|0;SJ8*xms-p2{0;ypTDlkHDB zuANU?7)dMy=#4h++!#-BpmZ0C?9v1~mK{r%B(D`~JKP`oj4yCMh%_)M+#{7|KH%1? z$@Hzk_J9~-(-v)Sx)yos3*=ojwywfTsaJx*>SG(|B=yWMZ@zBeN%#@dUlC^Rnn;78 ztK@0uN|u2eb<8QQQDh=@*du%-qE(Rtt{VJHT9gDVvBzZ#KVdM!CTy^v8%4sMCNB~( zwrc6yzL$I^=@TvOCneQcm^0N!WW?)q|LEqiX|GeWqN|cjv$!UA;FtBDNO-8)x$* z_&GNkZLd4TTU`8;K~6`g3Df+l%H$NE4pi7gZ;BWD5c7s$c(ZgV;_upi-T$xj{>rBv znZ#F=eg1>G^ClX62r+jqxh7D#GwO~&>@yh*vyD$xuB?pe+xi9fHJ3<20@L)} zg_)(z(9`x$*Uh)B-n&$M*o#im#oz*8Yut=R-QOydds9*NtLTnv+tnK#&!ieIjK>K5MLE21;qqpMRIk7ac7?S6{CNhjxJ)t&I^nl6M8}Y&HiQ z{?$*NvO!`Wl z!-6_FdCse#N^zC3lSriGTeE&WjBQBZP{1O=^u zB$f+G7j@-HofB`ck`O(#2x-aHK+msd8q&cXay1}jnP&siqymqkbqWpNkTAx z5>YXqpI!-_(YNh%b$%YZEJpTq1KQkG96;$cQZkfm)M2YTwpT;w;bhU5CEq_mwr9&- z);rRIVn70Ip*uge;>;G+^cU^t8=?MP4-F2F^z9U{{@uE~%#YeCXdmUqf5}{bb^84V zU*jQmXK{ZKRXmzpgTqSl%M#>vLlBm(D?2dcNzh3rvgLYBP){=cmZTU0fP+Fdj%JI} zWKaeMPKO4Aj3hDvl?f`AK#)8~@etz>Al@odAKnum(pkT&1xaZ;^qv~roLkHp5KTWH z_nw}}_WJ!iI;hSqVe35dBm5JO+UuKM!t7Rd`lY^on@_e!D|Xet-^8;^2JG?iIvw`> z0!n0dVy`hTD`kHXC6YcXmHc7x`-H6ZBFhUr0i^<$uJ4nnuZt+cI8_11Vve)0R_;MV zlQ@(3v#Ow$soV5U@II5$PYDl|K*wi#`>MFqtJdKoD(+MG;gR$Az>9Y#gn{e&rce1V0lw(YkD_tlNXFB2j3^X!frVP!6EgOF*4vCLk>+}CFx*SnJ1-lK zQb@9{eVRpy-w*$DUWuacR5k(1-7oIl&ONlFyIskJK{W5r>(!bLPf1cbJ9At1!^CLS zl+oke8m(cLe6*;bR&SFMbNM~cEoJUVx{YwAxzR4eZ=4-&J;vAJ=v%vN_L#8x zqqoP2XDGa-*bkUn_)@l3kB1TQuMFI!Sbq3Ct6~+lm6rplTBYR8(N6*)V2BS^{-66L z(Udm&K4J1qaO3^G56u*6B2U9L5&m{3qTW=%qp`TD|lG$<^SSP zSl$44Kw?>9{5_ImK20k~qfW~<1E6y2%ZpF9$_D(-P^pv|;hWfSmHnH3p5=ri+mT0{ z@kh*gA*XKCfLhZI2)u^DY+!J9^P51jNYzseSO#b!*?{U{Le%-fgyk$LO=3MG?WYpl zC-B(vJ%Bx1oR+P4P>FK3H1sO>Kx`T=)4WO+oq_aU$FaI*k!sE1+4P$z{_HqR?X}ep za<|oykJecxihV0&TPLh8*)ilV(Y1Uv-42hb)w#Nd*^iVZI&P)Cb%Bc9n6(@Hvz4z+ z*~eDxu~Yg!qc+p4l{#!J>H79jeI+L&;{*dC3wO`+-a8etC(Ln9y=@Lw7c=JR07@29 zZaNg>p6jHo8DsY9n6Qf$ebeq_*@}6Xyq2Tl%64>zf7e0`nnaQ7!jIJ4h`zuaAl=$6 z<(-zZUUJ+L#qBeW4VqlNNVVJ%om}IB;R_!gdEZj|Y}mMnw~pYmsCl4;mh-*F(?H0P z9?U>o_F{;@I7eL_zDko~(1GaLQqNE6PPL7-xvljV@6j$=(;@ztu5(d^VVk2OYOw$} z6H$F~;}fEt`-=q!f}C0V`Z$|!@N#(8*ioYgWt-eNY#F*WTU#SXGLQ{Z4g=o)G|$v- z(QP{D<=lqseh(B1*|uo4hVuMeVi&mWy#zMHLPDFqT~7RBBZcW|M0 zV*%?16h%4oJB(_cDS>P{KMhD*iF~iu{XTP#f)F*dgY+kbf;-bbu8*bRXy3Y2uR3mn z#X81=`lkM52??g{#cG=vxfng~Vbu>8EONTkzIZ{2|8llA>!p>0S zkUgVlkH_7hiyLRVzbY$1w{}bhLwCzGBx=@SnD)`6-xQ%a-ri^jb#i^`h0G@Ub3iE)#vu54nIK{QYd z9RfJ1x&zdRzx+n^)as-jTg=3a~K&TI4d#_lSvFY#|? zAF8*b{BAFU&rpXjs-+m_Tr`$5#N26v39!*Mh+yVirj&ZBZBWxgMh+6Z&uNr>Z3D;t zz`@1UCB+S_riG)ANZ>ii@g0>0&*f;bZa4F>*W9_$k9c@{30P3*Ugtdp9@w@>0Ee zRSZ#)ky&OcnE1i-6B3+k5OH4Pnv}aHt=QxFutN%r0V`HF+F* zNTBnT0o)G>F$4RI3aZV9tfq+>fU*PB0YgJ>w!5G1+)|#FuA%V5#=+=Vq6K|uiEAa> z2YKUhs=ITHXVpyL@!aQopzu6nN^xj9RrM?qLm}d!sCE+>=_h)9Y(t! znY9xPP5sA+`7g zwJ`FtLY!&J7(0(93dh@^I#Se72Y(?AM3xWM>z9k%U@Sq3LgulGT8SamVE)lzZd`@mRofx$ zsAEH2@GJEg6MuZ4xhlsI`I<#}Uh&$eeCdcyEChZIZQoq7x!9s@a06@qDFk$d3BwrT zN?Mh}0hYA!9?QU3vSdc9v@10b7`RK3%+(JkdIy*GLkkWS3?h)kMMvyhg~bZoe77=$ z0=&XF;-+ediYJlJ4Y_0Djrl9fC=X;Q!Nazh{r3|mmWxoDhb=m{q{B3*D2rBb3DC8G zOpcJ+yfc7ZpMn|U=KSKh4G=dU-$rUH1=h*}+y-o3CUZm`8*OTJVcFHfv7(9Bh)*55 zt>)nhR;>)Pk{=14-|!g-5Cx_W$sMVGBj~+m7a3!Uw>qU^ivHti{ha*T(ZVXKH05)~ zW&s;NhZIxKjB6m}i1)1Hz7hm~ zSx~UDtWuT-#Ph3}mK)Fcpqez}%ZSVH{S%#VGoLbS4!y<6+<5v+f0Iidwx8owReL1| z|H-TG-fus1;NlB9SE2R_19b69`=@$w6K~XN4GRqlFo2jC)$Kt%`=IM1lhRzDB9jYq(tHjF!vV4~XmWv?!<>F%`BBU(W zCqVECC76;?f0s9|-)%fypARb~tezmX_PRHXK3cR4I%;-W8%ot|lvK2}G_x_3(1gft z;mW#M;Hjqj`JPuuCtXBJ+KYKcRqpM&DTCamXW&Z-jw&AW$~G+(Xv_p3NA!qu$^8|t zW`);{N@-d_#l26qgoss6GkJd2cV_p~fMHi(A&_hc!UK;%`b;oSjn*ZP5q-Zj6vv$9 zLh*)R(c=f?`8<6wp6LBr7;q6DBvK^IPvOYZ*uey0VB}V1w8<6ad|r9D<1$L7TaBAZ z*6vQm&rKO=8W5yG;=0dGkUi3;Ph^k!=rBx$24{uGB(Je6CAx zR6#$QIDwa6hIj7u0DU5ST4(6iBR##{aZXibOqf!HU%9^PZtN)gd?j64LWtAV`|VnM z7m`nbJSFMzx_xJiMFj?%U2WHCz#gu-gWoFR*(>B{>knE&nB@fPW_3=)>qN_L5@hQT zI-aXa&Q+{W&$hT}I7f#>HV>2MpTWObe|nnBk#X$hO`c* z*e&l2>v)%bxCC+Ed*=9hx_bGhld{_4wgxPfN4pg-XFr@bYNk$Fsex`mTGwz;eLN-_ ze`KbW_;RW`1qu?J?d`%N|K9%z$MK(u^1NAwhaQPaFL{W#1r5itQSSfhGkXTdwQZ2Z zTVau31B=8op{4>NfekA?FwaewtT&C65O;{)Hk$yd#~hVR2jA6~+x+MJ@~2CMj3R2a z_}yZaZ_RFivuS+MrmH&uab-mjkK9XV7p!v0_fJX=%`@fOOh#nV=u}A%aGlx0Vy}{W zw%f%jbk$YJBD#6&YeYR-Bb7u{CXJ&UwEvGv<8fMu#s$a8FxXNrCo*EDhzPdEL@JLbvM zt?KGjN{w zGWnFluz3GekW+n9XSkP>&*Ahl(k`A?FV3C98@{FUT?(fm9Bk^@0qyaU3^&wRkHB4@ z^`Kp4C{df54*hoK%c=UCUn2^oDaO`e<8!|o=U#?a+O?33Juav}qU2t+WOiZ8Vldz6Y8yY2t-9;;jP zZ)jUZW~$M{pShXr7kK+9Eg>1Oq(Wqm=BQ74hvsu2{iIUR-zhL8ZCiUD4C6HtS`Omc zZq`^P%cI_BD&m?orp4RcsoXNDCfVUsmug{4Vq>Q-%JEasjVf-UyC&=ixehPzz7cv) z^l^X-Ef;{s7y9;EU(*b=Z4+@HsNH50RXw|`EygrWP!|@|maocT37+$?Wzn~p;T8~_ zoRhU5ANvNCB+-fMG6xdV`!?Wd`STg?C-q|-!TcH*Sw%Czd?7upN^R0tAWIx$;)WGe zMf!D>UtQR3vv;6H)N3)`2TNA2pJlUzAE|;r%?9m0ewBusJ!saQLt+5!ilHv~V&~!J z;o#GjTY6mBke>=V=YNJZru?tBk9nxhitsy&Ny!E&Gb9LR40%lTdx#qrJJ|)^lf2L; zN*EUG=T2y;7ll0^KmSRy$+XFe3u@y8oX;>H|ksv_KNkrH7M>*`n8O28@0hK)wfAm-HUG|h=&@PfZ7{znH zD6@1Ju@mEpK+e`+`iw1C2%QIZJJSFL1HC_&c}(j*@54Py47ZRwv0zc2^ik6lm$lob z`{LHIxkQ%{edQ&LBdps-xZn7zzeNnuY^tz#Iaf}^EYZf-W4)8grj`*gDw^nNBXy{T z#a?|aF2R>3xmj`?3G)o`B6>*G*o-UV|56)hR%$9Zg0VK(Efv<&BBH6Y!i<)R`n?y} zbqN^3mYDR=*>X)6s!-+;EGT|7$J?Qla^04Vi_bq2l{R&>8;^Fxbtyt|#V?n^FC=m)E7C`p>DF_mZkG-jX zmq{0yE=BX#V6b(}%vMnHbS9da^pj6ydz?KoX}?vOJn4nT=?WdC3W<*j8uj!PI ze*Ji4-rMVC@NQyks9Yyx{`nE^-^qskTOQ+qjpQTd+6a`*Yz?r%{yvpel`X^o5E z5+ubZrHc~;AtrH7FWPy$BiC-e)~d8EKUM7X_oQ55DWDq76h=w)R-ad$U&mr#R+BZM zk(fb(1S*m5swkEt#Uzta4z1LHNr93GG?&6DYSNLv3a--oGk6-!@~4KP;X?kaH~%K0 zviT`a*%2G6sY4uA8dJ{!_Y^%!TBRrlg${$twZ+ICB6$gc0T7fR8q{nU_?!hp=|BSn z31gWWG}(y*88DMH>&qv+3$PI*X6s#$Hng6erh|Df2QSL?XWtZ)ajavG^?jPU zyrTkxS?^AU`-TJ5rC@Qf+tN6q3PRm{ywc8ly46i0gDs)QRhU9=Wu)%HVJ^2q(OGR) z)oueR?;Xh|=?S*6=`3Q5y|cq#8LPgTcZZ3#=N;A8jl2AKY=vjBn&7%Bu|FRym0z$$ z*0vpLyT4Z%t#x188C7~GPtPY6c#VEna~07aVx#wwW$&`Oh{@FO+opQcMRilMyO2Dg`DdfhFy7E z1F3p{;EyXjlY*Wh4l+moFH5U-qmTTxxTgFSR-U{G`|B=e4O`Fx#_hKOufwn1d<4l& zE+DkLJ7(~(wyKNDb8f>R`3Nw(l!@s!A9QcxECLNZxeU=s;Uom)d0W3BC8j85&2{0V z%<8b;RnBh(=oJi3Nll-tALi#fCUGPLIJWyRGQNgt(&e+f3AtlJr_2QlRs4@IZtr-b zKB5wxMkyw2Ao)?>BiAtRs)bCWmk~ZrS{!x_MkJZ2WXixgMgiVf_BI(}df5_asIGmj zDX)kMUH%Bg=$==?<(UkAkeS{AEQP;6fOg^x1yYr31lpSBgRMgU!u{kSBxCh`kXJ^K zWs7-IRqH@ViEufa_rs0Jcx}E?U^?}(qj%diXIw+uau)B5*Qiy~T-`(E%b1XBH5Vqz zksgbf{q$?<&?^3rSMPSqdt60mx}-$LbJOGs*YRpyT`m7L@-pulI8N}Fxd$=Ha@HOnM`-L!mCA<;)}W|r7!+eb-?(Sk;D+hNH|@aD%wf}`q(;#2cwB`-Z1P1ws3=q+Prykg57VlfPU zKdf^8e_2AA6fa5lGFfdCpV`9^M))3go`++jcBh?B&MWsZBOGL(hI>IS_UN5RuEZg> zGCa7-qaH=(~cdv_}6Dn&Pot0We}Ug_CpB8A*7TZ ztRa%*7e$*#>G4KC5Ge4Vq=P=EgbnOE4edqxs7Br@7Ll>=wj&ZnVhHV!YTRVwen@Qa z`~An^C8~Oez?l_*Hroz&5r^T1dG7ng<`7H80Kh3aX!K3umY%jbo6^Kpqofo;h>RbB zsKF_LdW*{rAb6NQ@$u-euFlcwlRq>)A#Y;ogFyoso71RlW-P6;Y=nWbWPqwKl`0wO zbj{)gfNxpDsD;6_P7W|*jL$cMSPX|H+VjIQQOs(DLt-1fK+ttGXapsI!67XTzNX^r zNi28SR(txwm+>=sAwBt~kXx90?~}7@dycxFM-#Rl!sQ#EVatd3Hpz!8xsWG8u8dq2 zUb_^yq^>dhfx`&n!1mC~2#D$?B>3Ws^~0ilFuJ}^Vlm<(5@C~wpj@NlNmY6qS@%_c z^3wmk&y~t)#Lj0^NEE~}ec}a;R=xHe=)7;_x}G)s96ZLJnf>$L)s<#**F}>uCzd(` zCG<@GrN_I?&xBhyvIrZd*2BVSpkn*3Z6>3|e^2=n4W^6!{(MozgA@*t#hQ zco)1}=5QO9Bk`<0b0XcE*(|A|x9rfh5|P7ML=5xX9Fq*j#m;d>e@hC+RHVqw8yqHT z&h0$5*YAPN$7gaxQ6JzR9%xD3^z=_%=!_`=Q-YA)Fb;~P3~CXn>lH^nB-2@grHGN3~D<}|nG7smEa2x!VkY=oU%AHX81w5hKmtfezFzqus5J&6Q^^s-#1 z3Q94Q1JsD94X6z6pc2s;1G_=PIuj{{9Dp8|2>R1T;Av@2i;G-Q5uFmI(2$f`UxOw# zqb8{-ATcY%gHmgETpygisszc}Xg>Y3Az*?7CbPsq4oqTL zTg*oTb9fv8u%F=Kq6d1`hhHioXnLKuTPT>9hr3_(nQzJ8si;x=M?ydkT>sYq|2;s( zeou~oxO)3D``;e{0ELj2o{kvH3h8nDGR3!qJAj_}s7e23%1`@J3S8xY?q+)iIk6pq zQ3in9(<|!YKp=sV0Vc8aezlkeFo1{{N+^UN_>qYWEDrF`udOu@L*T0bu-Q7jA40%^Jhy`bCNMy|UvpOtp8)L&>YMzJ1`FDN`gG`BOnk@yf|7y# zy}3E+VRUd9h~al>Q1FlgT}P!nK#zO>F|@$3&LyQlK!&s1_k4a10Xa1^GH8cicCbX? zFHg|7U+CaJi2g(S2%bm&4?i8BV_)*V4ip$Kuf4z6xBffS^zez_-MXHhM|;l`L51`E zpG44t1ckrI!2$>jAaC{vFcwhbht^R$2f8TTZ?MCkLaeU+N znpnQvyd46gGDbo`01Ei0DE@YI05I^Mu+S!jkix404gPsi)j%MfKAENx(6TiT_}Z{>LN{ zA%vzjBBCr2?b;tuK^hz)eIX8y^ce(z-3t^zK^hnY1pwk-kJDyV2l(%X@-IzY6o3Fg zUtd;GSYBC!UPfMAoI0 zj@H@U)ydeD*23P2&d^d-1r`9j2L{G8{rl96`sdWl)dLy;5ajva9{;um05CQ{H8wXe zGPskKQM-dzi%%G9O)fZ-)GDFP?m-LpK)S zKT6;b_9rq)#s7}`pKSh@+KLW?=KoN`^F;*^`bX{m3(L)x*4W;b*3Hz3*3jA6)P>gF z!qUZ*&dS03zmOGwotkC+Lst23{6EO9eB8IUmf!35u0RQEki?h+Kpb|*lW4W!FeTcK z3ANMGO|Z2RT4}5`n`q$0ETCKF6|}?x01B^~rtnNtbSHOFv?eLM+e2VGA1*|(Yi4;Ngv zCdV2(kEL91jy`!0d6apRc?!mcoNCR=0?>Kwq(+IHwe5)K)E7VFy~V)x;$z4vI-Plc zwX#N7X}1nB3%7gn(Y122`KM>9al1Jw{KsbOwUxo%9g)F2r%2~#ZW+dS=*&7(0-zxcbp&s`!rs?8JdY2ozvC)JQ=e5kz`s2fvxhq?xYccG+Vy6~?E&+8-PFYt~+0TBy@)ncd9)YSaB|G^Yk{ zbBXzT(whglCG#4yXJ4z$`~bSQsBAeW@R-3#4}a`O6YGQQy3H6IpGFh=9DNk++}U;v za|vd3o_Usel6k(d%DnaHJ6D&-%TtUuj{I*k*4%yas&eq%M+!Eory)6)()`x9<*4DRe{lYfmx7l@@$Tr+IKiTH&ZSL6S#cd~TyKvj&wvBCnzU{@^-oNcT z+iksFU^{xd?slhacjI=?Za;qe1=}aLSGPZA`^&d~eEW~Tx6Aj??+M>K@_Uzj@8R!# zu)|I}?6ZTg!%;h2y2E2Td^~&Z?AUB&_OE7NGy5+)PS|m;9dkQ&c3ivT9Xr0U)3!V9 zy%V?7Q9E6}(^ET-+j*~@^E)57^I1FJyYsqTzQ0R+m*y@f?{eENZ+w6I@9*>d#`ll^ z{!QP1b;%)5WyC-WE1FU|k) z{7dKmW!GuDBD;#a9>43YyS}sAoZT|J9kknpyFIo0)ZLNY>${)0`(3+#uwdZ=X2DMv zT(jVng*z-vF6=M7aN(c#*kX?rdzgEixyPe>PTCXMQ`z&hJs;d_++Ofr^}SBn>jCdL zZ_q1yPxC&sXyT&qB7M=Bi=G&rF^Y~lqZf`ow|M)->BT=@e9hvwfZc#9@GIah;Bz1B zQ+;Rqo(8uDQ{a!m>%qT6dqEs@3iPOd3qS5(>A%+hZonH50&4?L!rQd^NON=z!3vp(l`S5eiv_{2@FsjD=T*ZwP<1B)G(0a`}?C_a5C_+53XMUs<|v zsj&3yr7tX-zl>dW#dGhvNsvf1j9`AQHbyJdxZb z$tBNEzLN^24o=-p%peNH8sho%UTG_ReP&!Hl{qf+XL5H^C$GtRvdQdm*}qT=DUiQosxSg59SZb-&NSAuz%r#!uv(6cueu>(jKLD=~j9sy&ru({Q(nYj%A)L1LcFu z_f&SQ$dzlWldE*~-0Hf0WBZ=4?~D7v`yH|0<3CvVgYFOR{^5>4RDXEm{xkPy_rKzR zi3czTTyVgrY?eKfT~|xiPOZJeMYt2W*ZF<;S+`4ktm4~f-@zD68zxmO$A1Ob&@5jC$AN%9?e!~3Z z`onfP?9jtrI6Qv%g-2|8gmuIdKi&JMr~hoi&*Y!of29A&laKuTDE_EF{@nNT)j$7q z6}Re-M}tS7boBaPh`+f1nBXyMe>v%w`Y#{<)rw#J=Ga-s_K$txxXf`^A3yi_qmF;? zg#Ayrdv##-=_gJ*v3=sRC#6ri_T=48{^iM^uBoqi>=f*jOHbYT)FV&*;57cUhu7}2 z_L9?gIsNCSfBb9t*H4}iKjZ2%7o55JtVw4%XT5YbefC}FAm^Na?vCgF{M^sZ)6aYM zH~HV(etziu^Do%>f@3ZmcVYX&S1;P{q6aUIUVQB(qnDg<>GqfY{I{OpwtxHDWd~gL z_~pdqw_brr&UU-gPueuMu@2dNQ_h0=$=z(h=3_p1NLrWjJ z>ERU*-||TGkvktvK6=k%&;W&+T*P&-`?l#d*3O)^WwYKyX*hH>L0WJao&4@ z_ikNBt$XHu?fp+aIO@aMAO7Ye(quh-VEU;iAr zV1pZ{w-&R!Q40iLBRx~>DI2=?5XAj$f&`EUR3=J|7Fe%X8m&iFFT zh)|akeM>0x$s*TRxG+C|#qw!OyGy!SQxj}to%t6XH@oiN(kY(Qq<`K~ z0%T44w(gnCKkuw*o9)@MUH|r<_iPn=O##RYE!XAd1h@IFn+J+H_P+uYbKGUzER?LO z?Urq^wqb1^aFYh#x}r_~Tc+h!xSjmK7lJX64W3&f8kWY|%Vmv~1fbCrq@}=@rC)7o z%eE>k|H`0a(uJz_S4%fmsPcfSB`T}CEbfl-!%$}aa-%8eqr>GGtsB--VA%L;(7-pb z$7uUH8B1L;SdwuykY{Z+%G$zm$Oi>Rec@3sSOmc(eq>3&@AW~hiY*1c(e~>&1}}@f zucP?FLzL`QPZUVWfd3FX_mcZfBVmY{BZ8k0YXWcdkX^M))zwGx7$^B-(FqEqDv5f1=vcx~xBVc+&;`48(Y?{!ptGBD zCw(Eq#D#Oy2Eczi-QIZOA+Fy&)K0X5G#sFRJT9tB2NybR0R>tZz-JN$l zuX0f4i`9?mW89VooF^MGm~2$+j2!5GjY&faIdDv#Qu$H_$`lodlzqK)Bld5x{hMNg zyUdX{UPSvPSJ=n0`C5j-RdzEHIarP{;rE$B9lHoyUj@)b}_)?7x}fs&hTuwMa< z6b2wv-TkmzVWnCo8(*ams}80uv5CBoiyBVa&-?iv+^jO0b_J5YM%3op4h4I29sb3% zQ8_lHusx=`(MmU4tU&2vvYjblu_{xo^Gw&5#K#!ds6kzaFDE6=kJT$sNlF*6eo5gY z8-f3?0)91pO%Bs|O08;iugbuUY5`+dhW4`ztdGgAmT&TL)v3wYa1Cq!lMF_>1(#Bl z)9ChqDte%|klL>HT|s48;PUImTNjAG@3F{y%SMTLP0Gl(i>8k=1>QXVrZs<_BzoV zN|sQl6P3_x2@Q5!J4RJdZ^zxJavT=T#foTN!4jRAiWXW}Mv4W{VgSqM@C-^Pu`xg< zhf65KVKoT{(Q*fqI`K4GO=6l9ucNGjwQ_M7gsQ$swUg?ix)G_PL>6sI5kn$cs8xw{a_KZ`mm&c)ZJ|!d zwb?EMyOn4%m$A{l6wP%=3I&bmP?sgLhx!9iS;{hKFd4O^Y!F4bsINmw?p&kZTrTcP zKrD&oY%JP}70^75#WOK3m-k}HPE3;u29~bGx@fUD28d;2E(?lYEa$@$XvxBg242X~ z6^!9tbfBppclq=p`$TB#VSsF9+PDt1&QQdUxpj;2IvMylV@)ri<4VmU*PG<*b&HqD3; zBQ(@(M_MJqk6Qgmr{0>;v8u8l@uDcwSyWW*awdvl#aG-70Ooh}zmlrjye zr$;kr2FmsO(VUM=Ngx`f4U$KpY?M{VPRB2d0Y*hB8|wtxQANpCQ5c9eTUlEQ6{76` z70DrL)EA@5QaBieD^#lkP*HCu7s;bqESAYt@|ZW4YUSGbXgNle@?(IpuKTZq&#gt`hIo(RjR683UB-vJ)pu6>nXU;-ylR?P~dWjjQ_eMl3EHY$@OL$D0ARo3~o= zZmyQ?+KqU?sI}@2n?REsQSTNKi56#c`eJm+E7HMj??+iY+sRret)bMm(4ilRcu58hQ?yW~&EAGi1hB>5KhrAOpmFL_e>RseliPmWpJ_ z2iE)L2r2p?vS00yW&jEnIfaB!zaACKSu7VQMdeI3Bf&%CP*fw?G6FkM9nLl?K|X5s zvTY=kF4|T$XoP~%j!wl(NHf}RP=#c;QiST1fO?ZrSfWhS8;Bxx3W@rJ7C2gBt~Sgg?Aeg&l^8j1|YEY2Ou-R@i2Wc!T;zPhf z+!R@dw~A0(XMu2whI&pdSGOy12(HyrZ59f}YF*e7;y|8@*qyo_mAGQFtCkZTPO*DU zJ%e!|*l#Ctr7=K0f%*E0lEGJKFyPX~H*Lt9;2Azd24dxUTgY@_Lf2A)zz6fXsS2HZ zsN#1bVgyH|a=$K?@UT%1V4{}tjsbRbq#*|K09?Tm5+P#|1Ggj&ie!>RL2?RFI*<+4 z-OWWx78~`FfSZ9zwyqO#Fu;ZCus4Y%>rFWmOl1OEb!fiCAW=RHWNR(k9Xv8%M zBJiPL8#Pu=nFM2W*amM>S`%lLZm<++vYHk**>ux^^qMJ3CQcY#Lh+ldW+n)eGCPFD zvrf~(do3RU#;ls$9s^9X!MfFD9XaF%n+c{9v~a1#v%Nwn9clIDzGdZ9JJkbYA%?J} zI3(0+9UGGUfpopvCgX6y(j)CgJ80KhL%?=WK$5jy&B-(2MkqiyM!^e&!a)Zpqg*E1 z>M$Y}KvH7IcA`v%Ds}Nhtly&3U9J(&w`$R@FOhH%DcnohO6AZ(-s^+L4_ z$@Rc~u}s=r0P0&cibT8tUsTVv?HJ;#g$h(Sjrn}VV%N^6z>Gr|?Q$Me%M3*F+!!F} zjaI5;!+@B672%r@S#m7j9@z?u;VIxg{5Rk}rBpfIe>-}u17_gm2#YMAi6N4qcHU_A+UB5Y~8=1C@1WUE1FWamI+hvQ(I-yXqX2%4G3(1YPoeiTQq~Bqv zsEU-+T>v05NLTMSft)X#NrNS-JoFsGnji840^!BK)pp=Tni$ix?1Zrq9H}tVFDd+mTr5Glaa7G0%M@`eSB!N#wRpG1CAx?>+?UZ`aTRO0ng9?u)%7xmxa@2h~D`~ip?JLDv^ItU9ou{??<^Jp%Ucc&IZhY@oE9ZW2@ zY1Ea&hdy>E8Fz!1LA4LC&iL0G=g^2dTX#vgWF%*#-I|CyKy(mexMl8&xEQV( z8v;t1Jm$to$$YY#qhs+H6qC71tdwcS>sXiR=41*h*@=3lTa}SWz9%^`HP_D<6_e;y z{8WT2<#Z*O?UQwWXb-E2V$|18CR0Wx6{$#7XYXjm@WFM<-q{~ z19thc8fL0c-BotGRbybM;?IM;&Ig3yp3)473D7J0v$1-GO~^@&kOMte(7h1_F3@UI zsAyHQrl%l5hlxg$V6SY+U0 z#PCv{tS6;vSE|N(MlI37Gl_hlKt^ynC38-!pNi(AQk^Z7dW>9g4GHF_hUYen-RXi^93Xhlkh?(todQ#KprTX<$L9sK%5=`Y)-i=k8wK5J0WiaoC=Dfi& zO{+ExE5LRQ+PDVaI{m1ca<^Dmu4>ITr&oibVrG>l%jzbfnP#wOTc+0m*bU)rCpr*| z*g(#r2pTR0%n)9#{5u~*AN$|yyV;N7p7OtkHx!$H-bBi(t{!G9WmTj@c8w}Hgw_t$ zdD}HocBRs6Mj@z>&1+pcNE*&C)&u%w(_L6^&MvnM1{X_C)rz1ExNCEQ1#~o`W!jd- zxL#I)$?$D9WFTQCD8iAf69||V7tR6xJ`VKA8ZcxE(F~Y@9@{7eD#?N*W$P&%G z$+W#yE6*z?TJK3<$Ou6X0uZTe^&w#czCr zaE8iC0x-L*6$WjfgV7w#|4Sg7_8$ZMPeC^AKh)*_5MJ6pbkA*dy@sr(N0%KE1!b&4$Q{jUs5R1yz z7+^R39~gu%f!G2o_LD#|)Cb97G}>oEkPoRwf@(7cQy?3vn?hQ$kW@&^(t_SIBc?Y% z_547_>UF)9gc>F*K0xgz9i;$l%L1M=|9AzE!iuKsVBYd49Syp*9u!VhF~ zB9JY*noFrvFUp5P-Jl9f^-97dNSw`3ZMGza65bkK?$=C5P4|aqUrk14i;lFQ=#nM|OIIl_#~?8!+)cJJv4RR$tMQ0onuMxVe6GJF;^i&~bWj*`Wj0$Z4GpXo^C#4D zkIo`-Db)3Q&1SE_An^d3rHoRY65H+;U;-?icfb1$S35F+u47VQxzEEvTh??SN;U<# z5NQ;Lf(@!|H3>CBR>BK+9Acyq3tva+f3E) z7Ztiv;!Bl`6%}hZgICN(IPOc7$(lo%j2z^7Ru{NpD$KM3)wEoeY?KM)>zY9{gke}g z7+E&X#OXj)VY3V=D@si=d#$EHR}x$-fz#ShDxIQ}aeyr4=wc7(L{*3NinSi&Q+&NZ z!-ipZqa7YqWsnRF(Xn(kBIUr0EY%q@BI>f$PYkrbXZ6EgrmRyvT!8E*thYo{QA6=+ zjrJ)8h6GCpg9@3JlPVUB;E*YeZkLwZM5~E_fU3hiq#2}|aVr?E$o*EB%k_dHQy}$f zPIeHMDD)DIWV??ha3(!4Ii<3xscf@JhEvVq7GOf0SN9`S0<;Rjh7hl2**Xa4dl-{Q zG0}(-OyH%IY^6oQ4f=(enDMKPvY2VBxo&~2!n~Y;j0_?h03I8jA2z&N(+hSRrIy$+ z`N7^UTP>QGEx(0Glq&&AuNP4Z9WUdM>0X&qX)Vy{D;WfoTva4{K2o$(VA*t#<}jic zX-6;iig3nN<({UhX0j0W1%tVATxT1#R#V8d?UH80`BJSBjF1gi?-c|V@~+Btsa^pI zLSY!=3OO~A9B46nUQqUeo0a8dIoO-%X z!v+}Yy9)qXP}`sO3r4x2^a^&%K!ZssNSM(Ik(FF?SP+pwU0`d)eiTlCe#9Y}CYfN< zNo2_7Xd=WnM6^l8u|PW6O}Trth%*tlmseCNJ_qQq$Yh&&H9)0GEu>|&2m^#YSf@q$Op#ZRxOdUR6bjG((zorpZ8}&{)|$~w&Z%d z5-ZXrsh-t{Chrv}m}UXXfrBg#7h8PA8M<>7hb;MeL_l#|Pl1s+$lWo@kzOp~m+b)9 z$R~wzEL~~|c2PF@pffPAfUC>dtgZ&(hPy3S#H`(~3e{$EXl)eMO_6x2(1EHdn=%3l ztL9pY&5Aakp{t}TZ-J&z6nh~bR4$W6U$k5X`(>-*G`&VU*~hU&O@kHENyUbd6w|~z zYTFfqI25dyh=GIv*N2HBJwQu01xZvJ7T-17X3*lxeQ!l`$bc2gXB%9%D@oo&pvjwd zNs7W|%RAgtg18R2aa1c@tRn_nhn=>ARQlbzTF1M!e7hPk2q_m&c`3q4RUlEz`zUvF z(%WOD;J)80ru8PkZoY7TGEm`F1q>vh>I3I(Sp zyWQc0Y8Chb0(nI&WoBD>gSOKJmWbsFR8dVN>kUmU8Dc$M;OMYxo(7zEw`MmW9s~3; zS(6phO&d-NLEJQZ5l9FGybhj@cHwRhM`gQ|jaXRTkCUcKhfzQ;SD6Id@QYd+v4LWq zBC|5ninj%3sLREcFHj|lkQd6~CHktjOexVmp1^_xt8+mEv}=+WYZZD{BGNR9 zh=}2EDHP7om8O}1i-6jIQ+6oQceN~qbl3(4t6*dpr_{7!A)J&NDy}FxgmF~5toRwD z9Ht|5DJ_U930II7piu@`w}iIC38gSwmz*#L%6%K4NidNnjE3xPRbzluF=giZH6KKh zL5x;(AX^e#|Edc#oIWW4O~DIvEx@3>0V~*cKnf59f7uIIWk3)Et}HT8m$phyF9xKC z-dE4xgzDakNCFxZ@cDCO*$4UBNsA>i#j+2C3EeD5@`O^WR}5d3k_ocSCTyBcI_ZQW z7HY0wHvp|}YIR|F*NiU~^L&KITW&ZV#iAze^p$Wb)Jw=tx+>%_v{^PXbWT*thykQI zN2xoMYpE;QR*_A^WmPAeO$FEEsdNt+3U*1!RNA>}&LA>WOAn=K18bZ0S|4%5WZYrh z&Sg6Tr2G8@CG^=4FVZP1L8rM+AJU8AP%0It3cQdFkfv{RxYa$a;)I2$o4dLyLp?mp%Ub<~ZbT#Mv`HXNDqHQhD; z*?Pf`bOAgq205qG^}7zg0#sdVk7C|%v`v>~KTL>v7p?>8C|!2Fr)1M=^!&koN@Q!v zNLucz7%@C{_C?xsKq15JOeg_my@b=!kd~8lr&=v5zI;!PGETZ}=Ia3%C)rq|>Z?@^ zxMYPgO_#xl<7Fu?m!`5@e8cSzF~EXM&mjq3u0#bVg>iYa*lJ0IY(8#~?SeuBYMgKw zu~!&uo7FIm)QgrYk%cbXg*8`vggosAOkj9;(?1u8W?Ylrt#q)23uu~_SEPV!KC243 z8tX~`&Su?u66w|QbhOJm;LRNaWHfe{ECAxfnhLC^+)nk@u?dmu7U)l^&Z=IkiqKr&=EFt0jPJpoZ# zbzF<9s%VDnA_wG1GwS*kI-Kwd?#6|cVU4A%SWAx<{fgIQbtfm%RwIz8Ij+IpwZVu{q? zH#I`W4Wn(ti-voy)xo^H8(flZ?B=aeeHM%|{P1*6wwrbmlsfHnPzW$&P4oql0gb6f znNp|=M1w487x5A}SnF(3jN~k`6Y(WZw@m9kr z*PiJ_xu+VSnjG3g5H#94E7{(ltE`29R8{2^pwXphq5}`y$bKK_tFHHpW-J>NA*mG< z!^xg&@+CJq2S7#a*+3r+;;xf5Jo|F%bVY~r0wX2?Rm=xOLWc!N)I)R{s3!!rZbmye zM&|&lRjXHHbUaAJN~J_uG)>o6Md5x076Yy$#z{lfv%{PU6IxL6N~Aj274tw}DZ(wV z*lP?z*SKp%(#3dFVEG!vnMNVkk~t=(6n#Kd$*IMV8yopumsIO}hbNrA!OuYQPA^!K z06iOww*;1nv>N#q?M^dRm2*VKXL34S$b%tDHW{y&ZWDbVl}7Y*kEOth#R^_cks&WR zwAdk)Awr>=RO-?}SG2qipv6eB1!O2S(F2>VztFQSUa$G_hFS3mRH@p|7wQdFlo5$U zBTkZ!7R{(^^~C-#G&2EM_m{O$uZY26AC%4mWNHs~dIBEBi!vCY zqIju05GmKmaWq#oVa9(C!v$6Jd^K+z26) z@h1=mH-#i(La9htDl$#Lg)MrEWx(BG`YaIWFnX|=83sPZMA^o{L>~tFjWSFrZZDr^ zl*=ju>$Y9-wZXEUsf&t8hf_JGR+AxrH5hK>X}D?lU5V8~hPTOLrdMZ&_w@!Id07q6 zz7*uT)FcN5!X=-q8l4i+WG$U>2OY(cMXH4lU7_2H3yCs3s%1vinFZP*Auk@ z6SIe^=ZiEN!B8O@XcPldww$Pi67gola-)H$o^XA_q~!+6VZG`tIhjVY>aC_(GMSDC zD!zuJ<^{r+^7g4*%_;}lLpk)KbWudSj+f)@Gy*WbwjE5ic-NJc3yxWebjwBwjbyoo z5ytW<%BZnAP9uF$ZF*TzZy*{#(tX!=s};22fh1FDT9oPyq>6!VE?!86>M0^xt+zTs z5GULn%iY?%LIN&%DJ)gnR-RZpSIom7{GDK8HI zSz1$qe6{bgxVP#x9c#ng z+d?1ms}88SUSKw-_;Hvh6oQ>hpr&+dA+8Q3+HMprR`Iatbrq_IXputA$Kyyl$Vd%Y z&hZSDkCkY)Ko8Gt9DlV@(%T#@MsyeywUF!nX#z`wL?If~o2t@ayeh;C#dM5G<8aiM zX@oel7LgKclNQ8^*-J1~KZ=A|aQKtU0-HCzP8kH6N;TK4`eUJ99_`9w~rCIw8{$xuUAq|wJ=#VI+q2oeFXfHWGh zm@9Dwk_dK*ekK+r%au$ht~;_RG`(CIHuJ%%w-H0Ypq5TIIuVhnW^)BKn^cBputAB@ zz%1=j63qb_U5n=U;^5xANp{`XOUgK)=~vin&h$fSMG8sb4oBw`TCLxNZNyjXy3v(g zZrdfLZYGDCVr8sst5V|-JQc9YP@HJ?Yoea^vbNQfd_BKQikhgJPScS6QAEwvTtC+e z$`WsqvX$TyNS6&6Z8L2`${3&@2{%j@@sc4d*()?aGzWAg(3^B4b-HG04(kTwMvql3 zGDMnjqfmEu6RX}&B|ABc#;SH$A_m7l|`DP~q;Z2G_6fPM-&?M-(n)!UOX3J*7aaH^7`6cpN2Sas8J+I7%;qjg|l%iST}*D$*XX} za=m~)(ssjCcz9HW*o?(!lDCo$6|KCfK&@CvPU3AVl67JkG3IXJP0DPyTpr=!lo+&y zzCRpF1873+b3KYo`uluu5bd+z5U{GlQV?!NSkeTvIN;csqD+~JFVt#qBnX34*XL?R zz*L!*P_cQ?3R+&(@(NzB(MhwAXtm2>0;5`8H(D6}RwNX~X-M~0-PO?9s>qfrY@MpH zHM2tVIXkIWE6t8AB$ZN)EI4l1TkOGb8}SKD%?>#|z+LMm-%X+|3mSS3R-OYf6Xysv zON6y9&6|Ku^?57X?68(QRlglF=~k}BgtT@lq0|i_7f#7wC75u1=~}?l;%?Zcdn;Z$ zxFPUKgSCFjBty+mL{V*$D`Xn7&AK5{0zlJ*>jYIAiXtmafs_?FmT8!UI4!Y~)G+e0 z6$}k_K*9AO^i*$ns7q6(UvT1r7fx`_XjLLnw=)zY_|)smM>9H@EIOzgb08ZfKJFXy>? zp`s!ZW8oYQXi+yrca16xODgD;Lk%$1KybU(L^7mc8lx+ZCnfa!pf0u!WV)GqG|1JX$!;0@X`ga+42>2aG|JH#;p!(%g zeZxogzVW2uzwqGbw>}EFbnGeOB}u(yvpOdvqs!fb#j?yV35q@;;AcaltdB=V11uCC z4I@Hm6bi6D5Eg?X?1RUEzuNs9&{2bH4<4T00L}l4(3^Ds26WbvC0S?HP1>~EE9;@J9S^6OXTq(Wwji;7M-(;7M*@pa}VvK=6_PwDC#qOV|MVcj>L z#{YlHx?$;8m2snHe^YsvZt?<&B?X(c>~@o~3{h5v<&@>lU@7oVT6_!6hBprs+O^>e z3zB)GChK2C`dXV!kX%!>#2tWdbAq*Dd8sHqSCwlPYxU-Wp~VAMeWlg3O{c!ei%o`a zO#wE%Hf8xVcO5pqv1M}%_}@?e9pt}*{CAN54)WhY{yWHj2l@YMkZE7O^UV#2md)?X zU$K1sv!1O|coO%Fj2oGH(bS7Pp7n2f7EyI$;K&)xx&FmI4}v8#Dij_K`COZ`mF{_&>7ot-8}EPnkA#!o*4A$BmUun7rwG zc1OmIcdI5(nL2IyR&M2_0f7^zjGr>mT<(uwVhu7M?e0_VTT{_(<6`i)v?E&yylEE&pP{@bI&{fg3B(y;>xS8yZ)A2 zZ@c}DJMa3#-G6-O;Xgg~-19H|?ZuZ~e&yBI-g)=$|9EfR`yYJx(Z{nk%<+ejZ_a1d z*4u2m-S#e(JIu$R*a7o$=g!}NES6_4OSBZV((Z?Qt;>m9zdHqwK8RK0#XN{ZXS>ZYT!*74F z^8c&!$*Ki6p8hBOg7WJpExq%WgHz8Oc>UGgwD1=F+6fmgIsP{fwDQl~dH5aj=-)0j zcl*^^-(kO9(_>$MeTV)L#oN}MciHc@IR3hwCwp3AYYv<`{+yd{dzW5!+~sR7-s9ua zIiruQo^<1sN6*{g^DA$9yS(!H8FwG??#+K&QTyE)?4|Dk*Ux_X^);=>ufF`YcI#BA z)7kd?hmV$Dd+_SZA5tE_kW4{$cJEts*H z>4isr`=0#QPjCL!V&(^T9-ut((G{OwcgQKqsrPc1Tz1oOD=+^zdi;&Yetz7kXu zUaR*0!8^T3y#3L7&%!5OBHsAm3`DgyF8r$%r(#3M%q19(=uRU?z>~oH}Tz>A=9gfIe{^6cC z{JMC<)yM7rBzbtXoT(;_#p-o)etX^YKW_i-DW7WlDm#A0-I=@o;@xgOx3b{cvlcz{ z*{rquzkVpcDtpVqXZCvH(N|wS@W96wIYH>rqm>&nCj#Q7XRqBlvm^A#UC-1%oVJ~? z_R_N#tkTb3b?lwsVGC9*yKKhMhkZEblbJt!?d((L9E@<=anpM*ons#M+-ENwaQ)iX zw%Zd+!HeF$`n1N;-rjHS?43n#_wt&`Iji?Safi(8vu7N6*oQj>Uq9-q=PvK<`2-l) z{k%om1?-YDj(c*i$1j|HKzbM-%w|>h7yo@vC-yefEv) z)X3ZeKA-%|glpEmv^Q|bM+c7X_V6QzpMCA}?H++&eI+~Pfq$HP-P-k@_U1Z%@Z^dg z?|rVbPPvPJi;``&mf)oE_?zU@S-dl$~{PC^xJ|R~Az+_smW! zUpVUJ^`3vcdD?o<&kk78Hr_ey!^{~5b~Jgz-$!3e1?2qs9rH>K?Qr17vv(qo zdg1l`_C4sYCuaA2a`_X|q6Hs4+MrH<`T2hw^!hLF{6RlSgD1Z9(CL3#I&bMs$KA8& z!I@94#6P%|d4I|a?j(M4|D1RIw|tUbdE2_@PM<9ptoFjoKYoq6>bz;im;XRL4LxxM zG3CzX*UVmY$pgJ#-f;fwbKY+^9$32ag#$i$Bm1MjZu#N9ul1&{`2I5O;vXJ=)$Xg; z?n|D3`em#3x*HCkRhWI+&3|}7$xIcGx!V8m8YuH>;HKlSS%)6-yHBSbvfGMhUVL@E z=c8XdwBGalwlg1oZt02-&wk>~*PbqSpL*rKe*40MK6>fCb;{va@B6dt8^@l0^$E}1 zb?%G$Z*uS7J@Z{FJG!EC(ZR0asm*DBKJ~BL@Bg;^-uTb9`1tkpo~@sqbII)={^i}j z9D3P#t8TFup7Z2>+UyIm@i|An_SebWMRK;34hIL(Y5Q6XinU!p5O( z(;mip3y<}!shlz8R^O_TPmXyjcgM}|zG=_=XxFR$`r#2j`s|O$HJ>lL?wV_^ zIcv8oUwQBh{M5@IIR`%>%r3h8o+-ql-ySw^<~}PA*tjju+5h<4pTA=DcJKBs(pP}1 zuK#HNd;k{K4uKxbbkImfY)3-ldcu-~Kjpsc$^S#jjVedYp zn#}jT;b)F}6l|!dG$F&#q$^c~kl8Rh5F$iDT0kO04G|C#DM?^v2x0-zfI&kW211Mw zLhnUEf|P(H5Tr{lp(mk)lE=NCb-#Gl^X5ML%-pl@bNIaB1?x&!*Y9`b|NUL-${#L$ z7xr^B+IYP6!^Zm%n;8*+u>$qKnPW8t)sdvR+tS<^aBLr_FVK+bb`I@PSrZ`wBv6(6 zKn>3~qbyGSjMLpZyK5a&-@*QRUCQTtJ%bm4aaF6p@ur1|dL~>UBa%pN2`FEH1=FXs zmZmeycsDZ<=ZUXL=PSxQ4SF`%WaX5pRMwdev46hU$>8zD)%RKD6hGYLX58Eja)?T2 z>9|gKeZYdDGQ}xHg^DW-lFnbKSRW#i$Q)qpp*3dr1EF*_K)JpK|O@CoQxom$Yet ze^mVE9}(?ly!tl6tbN#?=Gi-vilEpfwP&)$Kkv6WS5{?>8H`!y8@09%ecP*v@x?c! zEVRLgw7|~&oXZj)XUrufj#ith)9zFmrwA6-sCE(FclUmsj@m5gP{#S@Xq)Z7PjB6= zDcX~S7$}*6CuPV-CWFjRWt}`n2K3VzRb)t!kC|911-WzJO z&*imQBx!^#7`%ZQ^pFq+ImmoRE+gZL70adDj3>0@Go^(L#Vz#Mujtl#Sncbzk-TL` z8orN0VhwI;Hn|?F`Deax)Jz+^07}dWLqKDGWOoEZTyun;%8h-1T^;8yPZs3SLcygB z_TodZjB&frFw+@6d7)(wXk#!<G?ySP|U`yrXMS?#Jc;6?1cNpA`l`zvq z?AKpYdmePXby9U32`O#At4e*v3unCtQYy$NrB$>JuoYWF%wid33sNX3q z0;sR*Pvj%}srdDf=l|=_`!hqAW2{(-CTQ$#A^>hck-x?N?t@M6|Nqb(mDMZvzSSIh z5)q>`7`9>LN{*wA!U|;S9G6gDcGlf;2{`&yUw=1SZ5O7Pg&V1%r0KK(?>|^&2E}m$!5)S}&==GUXa3)nxs)6?VdNBJ9U9!)$)Ci+^r zr`SKsxOeK2*9A&b$E+zZ#-od!C%rpe4}7`4URBsGfF#ECcjnj?hydSb2B)oVn?(P} zW2BE64Q3UrL-clXH@YwVbSJAhX{K2c9Ud9>$pe~i)9#u_Q`NseUf0*VN(jE=iSmk{ zdb%^TodaBmI~t~B0KTRu9sT^L;n`o4E=376&e3;t)a6E5$aO7IeX^OUEcSXXd+#kZ(_t#q_TFio*5@M{*p(v9SF1FfSv z#P7MBP*O`GW2nvx*AaF)et8A&-%E%?%T0)ekhO) ze+ktQ7K))<&$b9iHT0oqsgX`6e(g2zHBYgJ>Rn+XK&Ii7vWs`p)jCK5%-c}Mik$RG zT!*C7L`pJ7E#D$zUv@OAcRGs?L3v7BfPa%NTxKmaEzB^4gA?t-_K9-xbjFA*vEM1x zsZTX0Brr4>;i`GPDjQ+lW|rI}2{ZV*;GF*1{K{WAj~+O1;J|;*AY!=4yOc}sej$N8y@hf)tVcuc#A`mzw&zG2OtY_k`{$Xo%@wC zgSFniHf)|`bf{G~d|A72aX$<7yl!E|z_VED!Heza_KNCsPFhlnJNC09-kWH{wzWsP zbbS3#PdMahm=(|N935JZQHj`@*+FI`QIeB+B-x;sOBGapOyJeAOjC~|bK7D#Rb&_$ z9ypwtyhCjs0GH|Sm#&sYGCnsr!ZOn*1sGTY&MfX2Gp$(Or*d<5EQe{+UTAu*QwBTo z%p$;X(x7)a(0`YnYF4hKVr>D9HAe%*)LzwXew}eOxEZ0W=&&qSKy)ZCBV(*bQv`S_ z0z3(8oe8S0*r6+~BysJxD?|V)aIJ9>_dYW$>(|P*85<+V3XiC{jbc;?Br5f$|2>H- zv!zbwJe9w`VjN5}y1{jv%QUpMkYvJ@3`#nHE)f6bp;O(mt?y3^rd7E_M~27HKTG$L z>hzv-uI#+1`0U!ICCCmm#NR8w|7t2PU%713Ov8e6cGBz<-fyEx|6y2v^x^#N=`vcy zwr**8rdyj*Ok#gj5<-aJoN*-Rx1rM79$3lCp*x-^%vqq;1l~Djp1?pC3%w8ec}Kp) zaO>;U$4fW6N&4p|L&T}Q@77Kx71|T~hm=)wKo=f%m&5HR^qc&f3N&C^iqe+Tt*pzh z^eZI3{I*sbY}on0qa*x(-E{(${vw!vV=LCp%LxUE0N*UG)(~@*bSutuSPjerU6@=k z8<|S?EfegI)LKs5XynzA-3K|4n zyOCH{A!tC($63RLUzk^PA0pp()$-|Wd#C%C&0nvZhfj|NE_U@S3c+35G5^?|nMrT_ zgc~ytj`_G9W6VOv)DEbX>H8jeR~c^`R8GdmB$-za!+nDJ0eZ9LXy)4l{=@0t8lE3e%a0=fd(HW)-j7FT(D8{Dpm0d%K zj>ZCwW|NW+544|Xy-`U6)d^@*nR<}RM180h4&*8ELx+p`*>Rfh;9$4ggq>dhl2$%s zqO1Q%_Ci$}8uo}I{1H8Ly{N^Fm5nf*TuERxNn*anZ90Aau?aFwvW52H=}&G zWG51zc}y5b2Dlw@*@ElC)x!*XE7|T--XG_s^hSqmamt#Is3MYoA6`wcY1u3N^k1Ix zJul2QkB>j~tVpDZ07+evm1MccL0(2D^Og$SciTMePZ6a^qeGADh-16nIRB;y`=nfu z&z>vp(D6m&v6a}sC)l_ayB9spW5}Mkiyr9uUzSeF!epi@34<>gUQQ4_(|H$WR(zctHUwdzWLF1k_#cxB$sM=qt+-yKy785V<C=R-13CXPnt;(fM1C3u=0`t}a+(1WEw1I4%7 z%6+Bwxbu;dM(_Ku6{QBcp0Zgwqi4LTcLMQ&zIYV@Z5h8VY~8(yQy!QW{5qw{KsVegDgJ zxTH!M=K`f?B-3z)s*Q*+cbkDlE{-cJCzK9b`EVKa$}CPo557?&pcwCyRC8wk(T7V$ z&8yENvzm5dRM(u3Esb)YlzDB}ch{&?mSljDKEq=fsj{uK`WSdG9u&~rFUU>Zd-o0l zY?hjpbKQi8_0(nBjT*nynseu-&vR}i%`0@jmeC=XH1j~CPJ>~ zT5I^<`j?X5OT5C_$M`z5#`^^2@ZWAk*Nnd0o>pU4CV1M%ynf>`t1Q&&Nfl@ccb^oA z0G?)}MS>H!&sgNPW^aA*z;4uL%r|!A7B_^kOb|7+JdwtXGH=w&$QWV7tI%e1i#9C` zD48xD!ml-uhA7hIfF9MG@NHy9oqVTkCCmKfI{3;K`+gI4<+ojW-Y&g80v7z556)6! z@&((`+qlupBEfOu9r`Zdf^Brh6%kDq?OCt$;TZNWy|vLt5ih!)##5qImVUzSbsy^_?1ouSLN!f7@!%~PumSq zNoWqN=({g7Zj<kP-9G9-DC*tw|62JI#_KoidQG#m!^Q?ng@uzkw{AX&vKg@osE1@0E_sYgzgW z;J<2CO1<=cxHb}0jV|*FTckSNWSi)R=4+>R5HD8|o_Taz5-{{Mu5MexdfO6Sb-ST> zIyPh%jGb1qbqm&+&vFd> z(pZufXM|mHhHtT__cTj0T~_2}R)imkD-g-u4*=FiFB!~bh(?o0ot-i^Xt|$}z zBd$2E%oB*!6gHiC*uIc;nEu%IL4c&s#{T5Wb8?7NIn=1(r%A3!5UQ8FK2=7Smy6@K zO;=`vx7w8K3>FwM8xBm}g;*a$WSm-)YQ46}y*QFfGWSBh~pS=Hky=6S4 zYS&z^e`Zfk{%L7N>u0xJVV{mB_9@KfX5ic|_X)c(&PVPKvlW8Vnbf=qv5bQ#Xl zy`uYQw6ZZgci&~LgS`VLYYocFe=)w=-An ze?4rY@nK_=>a-zreeW1+anfnsZ9e<$y(I7)p{cIyZ4W+Ws%P8JgOHf+oiEK8wT1=D zjBE7}^kG`JWe3Wz%KPUxB;ajkrX4~sg&i}OI=gRGD-b$&Y%4TozSeHsk8Ak2n*(uo@@b*)2YhbT5Q`jW6R*756?($1>?N*Gr|?e6?zhg`q4wqK zIm$lCiV&!mxR-d$kDp!{)&_2UC+vs>S{(Hx1eb^TX}-0O z>m>*$mniigLT9GUID*+dMBliDq&*(QVo|wEKcjUBen?XAkDFHivWFLQ@To`wPXBz0!jq9dB~+=C6?WJvXTc@audYFY(!t* z*!SlJ3R0Ousmi%AT^{crEF4%9lf#dRsT^8L>fQ$D^csc-Zh6#=FWjKngS69pigOI> zo_`E*=W&L6HM>KURX2KCEK>tFE_PV>GZ4v4A8iva3FLhrK1ng(EhaWtw+3{zT;JpB z4jiK`8y@EOFq>f#Z9$c}lZP+QwjsuzAkw0e8Q=+Tf+Rddf^8$&beey{V<_s#=+fb+ zl+D7FjUgMV&BDt>1SZ(sW?-Q>71$2z4Z;dy3Ccw0!X(Md?_V z(5Q_VL=DBO_zO>VPv91*Gw(XHmRgnnwxV3aF-L`Iidi@>pj2j-*R5MbSm-fOs`2y! zr8%J8pLpRNIB?*=zvz&N^?xFvAE)KqwYqW-%P9$=oVZu1*o`xk(IWR$tppAE)@9Cc z=Zw||JAQ7SQVKD|e8#?3R4eey7d{uH@ehUE50==!xvhYXSjaRrP4yV$&GnSE`PQto z37?%=fK|^@Y|0zLgE*@$0i0D*dbAG|&B(YI{d!VMN$i91k$-IYVMl^jv)$x->f^uh zaYDm0F!lHPzws|FC5MAhK6K={vU_>@xAV2du9FN=pGs*SDWHaV#TA0&;c}eKNx|iVUM?(EBha_*suOVAS07#niS|4i&oo4a| zjv};&H9p>O@1wy2z*c0ZF_Y4OfrJ*>9*RVNCSsM8+mpa%pmL-?80Fh>k?vc|2)z&y z0I-_(RHgo^0d0z1MgIp!CEI3{-d#zCxT_vzoTYxE3)f+~xhh%wW)?VCrr^)-`Tvi9 z@kzlGK_fMPXN}s#eW*+9)u9Kk)}|?ehK+;1nMiyqr9VAO$U~qX`GuKoIi;zAOnj>n zMvG}Oo-%u*&-o|phj+h=h#xb@hGt%k%JSkrd6DnH(|>H(b!CGo=RYXC98 zb`ircLzB1c_mfvf16XZnuJR{*@1&u1Qv}4ta{7azQux+|aJk@I&SZ>I6bC(KI07?^ zUg5as74sv_?-v)9Rd?QwtPK>pf2t&1qJ?NDia{b3W&E2YqpW3P>vqrXTdnfkoj#dL zv26#t;#t0AE5lNrPI6iu0Xh|zTd`rk%IS$GOw?at8bSl6P!41noTAx&L(vI~(S|cg z2BZYdR^)h>;mz zZQ`-;%B=V_rj$Hm!d(PNTK4(~>7NH1^W+p;>$1fgp4!`lMJE}{2BqDp%$$E~IlcR) zn@1LqvT9ttqz`8Xn;X_W2}#lMo6>o>sdTNPoEmDEXX(WS>;F`2sE7(xAxCXgV`zGr zI>IigbKXP*AAK_i+)2=5O51AvB%4$cfN{!ro+eqzH9egFGIa)1T&pUl6#Egjj=otz zTP|%ILJV6@yWhx6AIle(w#j%2J*9sDAKY<1aNxkd5eX6dPYtg-1&1q(10!W45|Q7K z2K4%THd!rSE{6{!Btp%7u6isya9NO&((mA*p}GYs{7qZ27n8`eq61m2Fwi zuF4IA+Bub_Z1rEc;kqN^>M)1-yJQe2N)~^KbCV1ALO@k%9#Fr`bQVmSDe*(l#xJX1 zB8#RTv7bp~r^h}bn|;CyD)%NIZZXb!J`SxQkOn@%+B*gs{m81$AhhCCiw^j)g zbd}I9SNq$p!v5_|=}!+^d^qOnalw9_Y0)#>^aO2OpC;6}dw+V+S($0vK};#NUC(w9 z1iP zf{DEw;zcpOcie#Ggx7?e0~HfblP?85`(@Q9;!R%;q+#UaNXryAD-f7Fbmsz@v2|Qa zpxzd$4gVd1ayKrV34GI^7^zA^yq4uz1nBMf5nZ~q#;b+KO(WwHP-3FZ-VgO7>t|Iq znpNs}t+z``Z{j&6ZjOm}Ag0NyLMG}hQ~a%v=_$?5H}irIh(Wcos|Uex;4@~JrQNZ$ zo?g@H+|3=0Aa^zLI>=QuYbv^~yjoJGtdE%cqLQd*E4D*r=tEqZ^t+c&Fngj}I1Rd_ zgk4mB;mOJBrJ2nk=I?7paa3E27%~*MoMUw8o1{ebhBQ0GXo=8jrsHcK8n8HhIOI?4 z)Bi2FXa~tBT`tZoGsRWA3_b2NPE9_gwBn49 zo-OngduQksF(>h($<@fW_uw{HUwm{_+rTUY%Lk7$OCtAgMQz^PWBZkLZ0BuDiGYVvJwGeT;Tmf?s?`w#Ohc(9USU@G2pS zT}9Hzcu9m=!_07g1St80&Y1a`#$$3=9kB71Gclrc7KT8CeA+qGwkFN%^cgI z_(sY~+6LRF2S9nzca+R{77?~;70|EmI`(T)>%*VWq~Xwk=y88RK2tV@wqe#S5&SCO zB(H{IAK=8<*u9bGqgGDnl4KLk(ckvr*NBmC;o@G(?{jzh-;Eon3h(TY#B1r@=>6TGRh`#xpAWhAY=+7Dh_IziM7QLm8eKMZy(J21_MoH_d z2Vz-nv%KNv-+h*+;;vq%XqVG;RECN#Rb`g-DaxRcEQ%HZX54U@q-P^*+lWCJUhHQb#gaHz6`E5jlME+RM4QqLipe(TJhi;ztlP|rHg>!36CNf7 zkBaR!t(Bphe_9(Kz$W!jyPYUACzFgdEl{YT8#Sb}N-dR`1f92#mmi9VHXhqE`Qp^3 z(^Td4c3J305NN6KOm_(U<<-j1UHVj%Jz0}#as(f#e=T#6rXipOu&PqMIG0OrQ0*2* z$tL79mR>Ib5^HT%ToWcRO@HPt3>M1Zho6Jen? z#Ncq2QtPWAm#J-P)Xf@vmg=qKn-dqEH|+@tUdxGK=v%l1`{+I9b>r@5`$r1Tx7tF2 zT-J}Y%Oy1GLGxLY4dQ)Q2K`yv&q-uiV>#XL@6{_JTCAzjF#qet7&2T$p@7*fy<2_=GQKH5LbW4qb#ULYqC{R*vgi$@9L27uk ztqh9!T`&@eHB>mWHIV^q%aH4PU|Ow`pov_UP~ioC*ISzz;Lt;&p-)s2N~&!1A?YH( z?}+m$s15@~GZp+Q{@rMU`Pwg&;ZFi?R8JPh^11dOuaop0IwzvWKHTK(7w3cgEpQJD zbDWKx5Mdft1LDi7aaW=r;}pd#zNwCyp%tLE1}+T}tAFV$;?EGHB50wflbXCxUsLKa zS5-o*OmHAtnS~g#r-(Hnd+gFnM1Y$`_(Ll{|0&(|uR8qwlzHP_T^&Y2q!&KoY4Rij z>Epi+lta}P1hg%dCJ#B8s!FNJ5_T?gR{2Q!wzqyQBGB>@N zhB6#3R}2Zwxw}tqNfoH(+pNE|8B2+1>V`KG7jkvq+RA>)KU$nGu7RoNQ<>lSS1Rsm zC`cN=;m{s)jm8+pspr&ah?OK09%;TQ;H3s6GRI1$W_hUaWP3UYSHi9=Bip!o&TADN zezXpJ?=YEaDqDFW_;cZxH9?;%P7zJ|T$O}-@7AqMyg$zj^ixplE4@pMxIqKCIJP+@ z^r0>EAn7Ul?(ehH6IZYL%tM`KADcb#3ieAVjytZa6xJ{+rCizs{5_!7ytLCbqFdX# zmCcfV?4_*8p-4_Q_NztpUU6<92LdRdcHWZE$PTN@eY;4C z_DyY^`N=3<0gh~AZ-@D1JB)b}%gbt#r~AnU$x&@WRpO^cJv{5*Xk%!c?xPzD17&iHAz1R^||;6N=4!oHW@(df1?pX-pgU-s5=NGqU2_V07Z3s_*ZLRn1mcK6f8 z#>>0(jhGQ&x=PEQ(q7|U?am9-uJe)z5SY40AK35H-3^L~h>~E8NzfnKsSCj~tw{|M z?KruibrGQET5XcvPJLD%KWVwKJQxfU@b|#RW6L5yc(0rYz!))EP&vvA--*BH&Uq|2c}nD2xPMG{0PlOE0)LreZaRLZ5L~r! zY>&y!OpSN9wS6;b0a-d{OZrbGUcF56Z!=)Eo#HhnN6Uc?hn=;fwx1;|V?c4buVtNw zeH!m>UbGFjdug&@YyVK`$0@DlR`|%#5PXSK3E2r%uPCl0L*6`+k)HKQM{qYc=xbYw z0M~YIFmB#?dz0d^6Zz$&BPS#z?&{0=-5qR&n`1e{!?lkzn2YMqaf&kZA?QO5So_Zd zuC2rEBB{MZlo|n*n+csxC~Y$<=965>Nx42GmuA*K)6?JgfB36=@xXxt|5E`)oIfx& z9TJcp#MP~4Jy1`LpFhDLZ43tZuhn9YQAT=+iIy%+tYdEsd1EY-&_0bN`oz5vs#ZcO)1aw zWxNSd&j}HhLp((TLOdDky86S0ruH${>dN|E?QDo%hvBr2)&y=gRnaac*&a2I=pTA; zQgWNcm^cF!pQR{&4R~1tTrKrZ1;U!&dy^imq{K~Mnsu1fJevTPF_i*F<=Fzx*FaE(|j^v zYCmMgEI}<(&zWLR;~aAw7M!r#2uR@yF=(%^Z|+TuR3S!Seph%N;`c;C#$D5}K1hE~ z_lBVJC7sg4$IMDT246Ap{!idI{C&8ah-SuDrRw}O)Sddln8Jac>fP; zk3ZF=epNv?9ouhLuHgOUne6mi<1-A{6Zffsyr1^T*Yf}TDVgOD zQ5e*-6y_37Ntl>ey)%B;g(OYjN?RKN6JBB3Pz}qc#jg7jL>I@zPT$13bj_?!%4MX} zwP{0!7ojpB$Sy!rc>R*b*(dexxCQ)xk9^)J)k@^BD7` z3pW)8jb-*=FRqN9Z=9fz#rjg^+yvBaVCua6sXT>%dyVf=Q}K?8BV%WIjSePgIg50* z+W>O0?q#c~j{q8&<2-$%#d~YaG~a&v(11n+TZ9QhD9sO}B7-sRhb6b!K87;%~*bHR5DP;`~DpD_yh0+kd*07;H=2AM&ke8JPbpF zu2t%;A2}a_-?-;tIbwsR`JqPcY`$XJLA_*4>{}eEkV_lAMAsRjYizHF;+Dql!$5u4 zkx<}ILh6Tzj;!CA9^JRv){*K<1yrox#B1Dgy(_R& zX1I4C3Rt~Vo2b*-X5RRQ?o^qnS0IxK*Bz|soAr}D z=%Z&RZ4fC&4VJA-ZrY}grxK!lTyE{Q7w_pa4PvZ8hdE&&H=7S`Twzc-eZfTzzE$3Y zzH;Zmk<)?mDp!$HTf>g!v<#rleR8V6JAR=2$cWd8ACYqlwfkBX|HY<18kw+qh z*uEe|1K-SR@@496(iUgn(h&V4sl(N)zidC8d`(x%<&K2U4&DU$mhVpwk9hu4-9RvC zxI<`zr4_kbT8vJd=2OhdH7(N1akx?@oRw?Y@yu;Cb()U%^vK(poGj%H4)$(`yJ|}$ z>J8UEDv$3VQM#);*R+hWj`it^YPslc1maTWC89nik9bCN8erHBiKwJ8K^TZ0!QY_tcbYuVM)tT?{Fn=ioMmgxNXukMZm2M+wtBJoFTA9={T z3Y|Anv*_+0b6278fgEYx-H8xqTBtc*_~Y0emCQ&*hY_S=0lL~$4xx7=Z3b>ngQ~O1 zTr;+X3*?f7^OfLn0`Ep=*%Ccah>2mmf{~&{fDW^^whOmf!!Fv&PweL2R|x za{jZ*xp^5SZv=(QkBKqXjMGWExNjC>B>0*+BRJAvOaxrdHXOk&D&|=w^6^%ZmW5-3WhoB+NnVfJ4GF4bOnyl3#7Z4a?ocb}+4Kk|Ie*8(^DGpe z^ON0)r;`eBo_jy6XT3I;0PEBR+ilDyO>vR8=Wb9u$`iBXLeB*vjU%;9a@GUi4uv}9 zx4eRx#YK9G?ZjN{tt4FLC&q04efo&r*0uGXcXw;^KkkETb+uo{LDk26_~xL-nd9H) zs!@0<^w6TU<2#&_iCF@eEYIB{K?8CI;tw}ac@$Y(x`1&?POa+S)b_jGTgu5=3&Rhr z4qQ0tF(g>97XdCZrUPlZ{vtpE*`Sf83`V##3&(*!?EV}46Q%uez0HI_3fwPlahUAu56C^Y?8 z125C5$z?a4ZV+lN0>m6G_fl48)Njq%mijJImG+EYAb>OT=AVah%du2p`F zm88)+n4hsYKRpH0@EtVr6|2dHjp;ZktRb1NUr5E+~b4y{;5LC8V_EeGq_7qkGc#_x>RJ)lIU-=ns z7`YTO+{2KgpMi|Ry;UnJtC;@V9_YBK(Jh867v}jjk!)I|&Tsr+_GpG47sHe~*%2C^ z$bDGKbU{OXGaHa`k(g&2;yGfLoKqDXqq@5NLLtoO|-lg~gkmbkdJ9Ct< znj!w{Z4rQa>-l)CsZAKSx8ol8*t!Dw=X`V^FB-R$+5D=Xb~o}kPWJ_v)^hAg3fMlF zv*#i_O#S(Y0&yriv0fKal;?Jf8? ze|6wp3?!d&9~ifR9y~i|f!X&Xm+%B`X-~i!D0%=Q)c1YEPl3ytj^q`R8z$haPeKnd zod5-TAL>gy^mL2;(&~jE6XjL&Q^XUf5`qF>a(kIIe9&hoGev1xyI4!2(}U^ z(j z(150f0~~bJ-L}&SF%v*8C?fgatYYvU0v~Hl)exaEh{R*HZy5eND5isOLct)E{zL>& z2BDr=(2eiMlwLJglhTH+RMezfRr-}()w55YaU^;Cy|1{sUZJjx+B{-_no`4;?7!Oo z+5g9b=Tr|IIPh=bn}2m%okN?lN2J%`T7GX9>RelETUC~%%(JXG{1b3cwO{^DJ+4tr zqVThK$vIpP(L8f7M8H2nuRF0i7x`-O!kuNq(WHBDpy#r0>byy2WMf~1f^@qBR6N^* z=QgdiTw3p(I$}`5fL*g?`a{5Z))ual7csW)fq!cash|ex>_`n2Hr{2@K9p(RYz-ln z*M}0DeUw)>oyr@tUz3}qkB0Z=2#bYAko9=_d>k}ef~CN^3x1zC>6|n_8C+dSG}ZlV zHqzMs%%%yK<1~?RM8(h~+tAwK9ZJaTTJyAPoX3B9*kkVx1NM<5ql-XkUm6dae=nTp z2c)Av+0_pt5m+iM)GRCCdG^{KISQNytJPXD9$P<;XyS1$Co!`T=^_9{xCc@M2qZl? zf+d)Q7d_zB1)bub88?VyaKf6F7F z|0#x;^e8KKbZ3X#&Ug*2zYtwT*IM6qm>O016nQK+1QC~F~_bk$D#`z8fzDUb{NGL zY4Wdje##khMZ}XwsaiCNPSMx@(}_2f@7TEaBHCua{3YK-}w7f2M!$g zZvp%-?WZCF*h4|kX^NdIB{PytfGQL9;buH5ma7j@p_qiq0a{xC^DZCx9fw7i0Wq<0U2=Ij9Zwsz) zY5H#S7+nN7+@E4+OXyHynkKnNv7b;4#k?=ODQqTBjcl-NJ`n>-5uOp1-xm2-vJoB2 z#0YrlP?I63h@cOX?!JhL=@$Wh^?QRTAcohcE_H)Kbs!0x&2z=>4zzhQ`GWq;Q^bI+ zojE^hs7?#UOQzm?yQ2T|Ag@E>zPY>CJYZw!=VIC%(x2~GXWQViD!5jqv5$sX2Ay5OANk;?jni032*GZ0uBG$2wrJRs?Ev1LenpG}N6+!2=XRr1d*oHlz22k( ze}s2|;=Hf~t_%Vl`e6PJd-}q3eCEbZe#Xeeh!D@}r~4F!R?07#Ib%@bUIu|{yrn3W zP3=Kn&6@<5sNq)0#N;t!N;~n?<_9zLMPRelj33>>puBYLetors3Z$g|oUr&x&)nkr}0)b%b0ji%SWXBVD!F)9GANVxDDrec!~WS++Q;znXJJ&SGHOO)*Rxswh+7Hxyp` zOr@yl){O)afbMk7$tlH`pw}UuZJ=SJun@K~erD}NbBsmZ6wZsZ1A0{{0?0X0F5PQ@ zee(-xMc}2iA>2GR5OSx~wTFas4O|J*olfIi%9nk^RT1D*VRD#LM#0s|zLO2B zElUL@FdfX_Co+t`t#D`BrM3|&U?CMBECV`5ED~^yR~OdHT{?i)ohQowoZ|f(IWiTF zJ7hUE62-kSm8f=OO5R?GQfuHCm1iC1+@D~9X z6A}uTZ&&BH0vGQD7jAeELb~N=gQnA_W~+|!yuL)e67ryCjW!jWt>(*x{;7u9JSAiD z==TdL>?m7<7YT~eN8&(nTS~(5tT=%P;Dkx*boUB1C|}k#Tn=WHpY;6D9cs2lg#%$= zGPAk*nw=3G>HRWba9T&bO$-u~VO-!VA-;2NHFi62yu00b*Y)w2{hlvNIKh(2MB(+4 z-i?}yGnh#bjER1|ST)#wEl%SeBx3OMREa~cfQZm{qyoJUH7UHmFIS7R&kxo05@vrs zDN|Cur|-AfpgDYL@a2c+Bv&Oj`RcwFTk14znrfh&2y+|k9S1Kk%o~4`efC$^?ZANp z|6LvWPwqC+b^+Opt!M72XdB0Uol{IO!SwZgNPdgZsJn6TWyAe7LTdZ_g;#YIb`)mj zX?#OU&T<0iJBg5*k=6Q0!lK_N-NLIQ&$t`K&$pwQIVGlyW6$=V@<2+)Z2mRx2MxDM zw)Jeqm@EB?B7kh_h=G#Up)tD}>?tCvJE?7>zpgwVxR6ursnBq@jdglGTtJ9l#tNMQh0v&+MiaWe=kRP`8F@39Q~cicI8KVXUT{} zR~4!aO@qL&NqNi8l!V%6Kvfe|iI)T}(Er}$j-=(^Myr=Cr>L6#N2L$+T4Di-kftAz2t-b&cguKD)k%@w+EvU?S6Au4fdl_NN&IK_P1t*o_;napTddmCPrRQ|`+W0w0UP?X&mb^Z zzhbdkeVV@sOL~7>t3(FYM&7jKoSnCoj*1=XD%;f`^)}Uo%M;2Mi1663JMpC>r5kRZ zAMTD^i|I^b0aGGG0DUL!t2a?FF{W{)Th@?Rl$9Vy>w9^zF#4BxlAhPSjQ7jCCEYUq zt-8Mp=t((dgzkB*{xg%2$P^8z%rqY7LomGG<|Q3vD{Z-lKlIyj`L4dXTur~K(R#e& z9TT>HYX=08hV(JI)2{?A(>gTt%zRSE zXyR5-zuiQkdCykI^$y-z!o7$wslBI6IJIYUeeV<=JbYyN z&n(oxpCjq=FV?=Dl&TN`;8n8?&%chufz0V>ziDmux8$KU%GXtK3>nUOdVAx4DI6FMkJ5JEr#gbqpwodBWtv$Oj=*K^MM zKIfc$uJ@eHGVlHQ3;)aadvkFU%=iAiWgF5uBA1v6!yWDDW4bNsBDnCe<~>ach9>+b z{rb34RH=n#cN)v5dfiems)VLpYVlyQzEoNO@hb5<+_vmTWa9Dp(0U7KiYiHacO*+J z=&;XimbMp~Q%uwJjYuKGa~n=!Gbt@m+MTOdX(Ho{fJrTSD&}Ft(?I)FuPt)>kSyGK z2BvJV_XEp?C_o$!@Xlg)B@0*EHCw&&CgeJ-dg5BQ#w_2)=g5lfJ@UEF>+S&n!0*pL z{vd#V@IS?Kqg)o#*;gxGHn}XOf-2J{9cgq6l*vBd%ge9ygOgMoZ(~4YO$sba)n&TE zn2oNj8PzmP_8GCyot`6D6C7#Qccy6hZh!3c)P3i{-L0IjKfAaZXL+x(vTFlo-?1#! zqod!Usz7z~Gg5QaWL|a{`Aof1=&ukI`!ZHW(0koNGyW%+yBjxm%vQ(rcd)}vk&g#V z-ZsG1<>+hDFBZ7rZ`4_GGOnlZI|q7Gw@zG@orZjyre$#@ z!9(nc%m3vo_OD2wxw?#8Pp&Mkqmia3nZ@j*8oP$|9!S7j*9Yd}Mh*Mn_t%oOU`C z9Le@A8PBCpi&?$Seo55JkugpNZyjnM^{x}N7Vg;9Q|oH~#=R!t(md)q0I@($zX+b3 z2lKav8$IjV`Mi5%@L}gSYJdI_(~K_g9Ij47&-FBT+StcRukKJg;=bv5o6E!gsq)E< z54_6zqiiIX6|+2N?HAmuT=45wnB&y6^}llpcpLZQoJJ`a*GdZTwOBS1yXf1YH4lwH7U z^(G+%+_w%h} zqHAPc+WJmQP2Xggb5W=>McnRv@grw#Qg z6>4#_7s|GMr>DPdzNW+mN%B4I5iXk$FoCm_g^nys$5ss@zn_5W$cV$4l>Vi?X%8_v z=v0EtrH5fX^&`x|M#!MzbFrNhi}%BlbQCDKTV!cWVw1U3gvUvnD|zxZfX6j z!^u2Vxm<|~lRWVhDqWjP6LH)rbn6t^=r-Zc8tIC>v?o(7c`VV!YHWD+{dUw&kGh#g z2n$(5b(akjpUkyB7rqcf9(^cz0Z|nWHmOr?JSWx_pOd0QpEl-CkM7zzJ6yt$|Lj%u zw0}=_GT%-*Gx(|v+fUa!w!Ctx!6xKFfQGEQ!%OXiiK`RQ`M$2MU;QUiSLVvv;EYU$Oxu>++?MR> ze(H&mepa-p?mvF?);f44!QM?REF^mh$}zu>%2sPabD9x~GxYf^rY7j3cF5Il_m%{h z;!DVceLkT%lV69glyqh-rCfHMCF4m==0 zRi9N{#ZKHTw5!UMTkb3_AEzJbwd?ThOVg>9!|JT=%y%nYV@9MXVy|QvVCJ(L{n^{O zXU2oX6G>i`qoAU+9J$e|>Zskpz;ev3gy^WYH0u+LuGdQxZKa6YIF?Ml)6F=2s_8yo zcdj6RV**w3N};F5BI<~W{A2o9!TUb;<;~}k`Chh?D1`RCLhqQQT7o&JeI{WsL6Hct z^v0U~dijxQ8Lzts006%q(*OGrw~5>I!sC6uOT*(kDal_sIYB>Bo?^G;BQ6xSVjqUb zBzRL@wk*Um?7KdvTt3aw-_o==V{`2A1#&ZSTf+9*3je#2Uw2Nwkyu%(H_O!MZu<)(o&#h_0=Mm?y60}TqEm4lybYe0+hgJvou$v`_UU0uZAdoh<`fr zdhbR{Ai`#2!Ebn}UZJcewOu;^*%+P(il?0RDo(wSVGEW^zUn$cnx7A|3V=^{ zVV&L<)l<^o?nf<5v;K0SIh6IaVXFKREv0=`G7X8!lT`aeo?)%3r4iJ_#*C0Tu{~;j z{(cmrIRRx4b|J(}nbgzXh24C(TS`M1Gpy8ZvOCKE`YTl-ww=`VdGg_iTF*B8*FM{{ z3IE3=)N!jMZ#+UAFQgq1PJ|cr7^uj+N;|n5q3;~(^D1jO;(qjt;I6vBiG9ANbW`y4 z@ph5lAD{@tA+3ha)Yw;Vcej%S;;BaoIvPKmeM*=D~ zP=weRJ%6op+2ZvByE59IC-Ngui#L2j%`g=8jkQr3Tt(^>nQQFSGpG7G@-{g)!j9zY z_8O@nf_&A=;&`tRARq~>=Ga+wnl?ushxB@T@%F>*#w4`*v#X*py{0*V0riz*1fov8 z()>p2P$muH0yZZ5x;k;qz8~@%v=H*Ge(Da15TiYp)VESC!X#iUr%cZA6SD11$maZSsaw5Rz2uw zi*tlV+l?K^b-9fOl=KEsub?UQSML(QgVG@}GYMBSqgdu6;WY2o=?lq(`HZN_uLTNa z?LJ1-%Gcd%kviQk6BH?}U$vN_;?5zTieufyRUnxA5ivK-6nNb`008)X_+Rdc`M->$ zhyThIAFZyww2H_x&a9tV54%OqZP~owq9*-|suw{=f5dz;B`h6{`YA8O!<RNF2+E`SN;>pIlDlk#q^?v+A9Dpis>*H-LR8ehgr=$o*=4#q zv7ZK=g*Rku8oN%{cejtg*F{}%OvQM81polR?|{hvVySy< zzL!%JszI(MOX<(L2?mAfbI4xhn-x;pU8N`&s%~7juX)N|Xq`Hv7F+u?R&B=0guM$x zfr4yt@ENdbsl}n5EKuDs&MbGl0*$X6DsSGk=?RFoYnphTPwhynOdj8sh4>n^M(jZw zpRaDEN|m&zH5u=@MqEkg#4)d6Pg`F^u9SYOS<+#=zFVqqUG2EM&nM^Mi9v9(29(!~ z8{ec&WGv;GuQh_|n^+a`u5~3OZLjjGW?yW1cddMaFI^kc!M6?_85v=W#1RNWx)e$o z95x7pF)--b+FEgWqD7pLHXEC%ter~}^u#)vJ9+;0mt6ksf9f?j2)*&4ZEt?}E-=v0FXi(0q%iNQt`;qXHL&PRhXgzoa>N#TBxZ@+T8s#DQ#S zBG==;AMV?@R8*do5}GA#@@qw7Z&F)D>9@U3DE$SMZoJQ@oU_(fcaPO}?2V*wglmc? zB^#CJc028iEtb4uQp$X7aFi4OROI_;Gmb{y+T*-P^jr9vU7fRm1HUKY^98d&dCMtF zIK(*X*C9WNXif4y9|OLV2j0#z+UI-NiHSIU8-tV=(SOA2A^`xvfhX`k9m|>#By<9l z8QJD3pw-!K3|d0_UK#<~<6|YL#2{E-w=w~xD5jnK>%Hbmg2yx;YP2)vNp&kR{B6UW z?vSi4DZ?sdQ|}7fy4@<71@_tKpTr;tzBOUC;xE`y$v{Nke8u*0RrlwNiVm9(aEYc@UFIkA zpoyZ+Ma_;;%43?_@0kfN^Xy}sh-q-V*e6Y30{NdXH5n$5c1d*fD!Fz(Wxm!IOf#y| z=J*H92f*nTV*?W-Wu={k2-k!q3{oN1GtH5DD%SmExb%qGldLAa&~du=%wlA%FFP`a z>}%O-;*sZ0CHuJ1g?c5dTn4G|B+xeVX*_hJ{!I>XB|{QQ*Y%Temu{=_SRxqiveL96-LK%>K`?SWSl zXyeG2X`sLp4x2W=RKgzXIhRWY+ej>AfImA*WT|N71X&O=8KE`zMm0%F9;iosbAkPa zXJ>3I?pqpnXUpyNQ5~s#&3AZRJOBVV;QnXhSAMgQuJ^+)=G!+B)F{tyQlQC;BW27{ zGr?wPfvtPu_amH$S5xDZ8)(AOu@FCvs)W7mxfB%G@FwPdhrJ_M?1SOvRO&}$U%;Q9 zs65~bv^z@G&5{Y(!NH9~DzH;6HIYnd{`w}Cj@vEYgM6NOxDb6i z*}n7x?P;@(F^0YpZguoWsqBAxn+JtXV@a*q%w%9$RYuf+`r)y?pq^+KxN82Uz-_8m ziI{S#RG(dKPpJ4*SKsQfoG;juTVCp%_L-BrCv%Tlm}Y+#Kco3U7{AQD-Rj$iYRi#X$WEf&ZuZ10 zZW}qt3TE>yKj3wR007`%lm5@Qq9#|Tyr0y6Z+fjTKftiJmyVfCEC^7 zu9V!u`8e1qEjZ1botoD>Zubc)hG(4oiP# zM08u)*p@P_Yw3w=Tk)B9mJBhWJP-3w>uK|0rXIc+us3nv{LDy%`N>Ct$H#@g{mc#Q zoSM`fzV-utaO7+gEfA?88#30ch#M#lf3N9mpT-LQ_P(1qenH;X7wj}UY)6H(kEu>a zSiChqmEg`dX+JhH);?BC7#3od+mqi94h=d(aB)qwO@b3dXk3JjJeDBQ?E@C~!rnKB zd&RnoMLgbk#OvY#0Kfqz@}CVq`9}+-vW^pzP4}$+JSfvdHl%&*2Vot~EQ{XF50-GQ zG?wpC3iy`%rDBYby8fpT_;8<<;9NjXNm+yIU*E6oK?tf|xF0xK&GikB$~{Ob)1-ibk2{^i1D)NZ5U|*{Q|(%rl0A=(^g_9`4>)=*i3?p$liJcd3-3;4N|k(& zPUUrj007|N`cDqi6`8g`!=9DByGel5My$%=Ezsf$x%OmeviaYpi)U;g1j~uvri%$4 zVp~64R1F{9fJQ!BPrD(tP7||?aQIMZdEeEtCfK$1Wo}FL3H2Ho?Q*EbVeaMKi()|dC} z#Xg@Bxll3x<%zR936YY+N#6#<>nxTgTW)Wg;0Jcqx1!IDLo3vzGndYv{_FRMihqp9 z=IeI7@hvR#Axp=Re$i_ye{aB^qGzWNd#G7YArK+INLk2YnciW|cRfdn+SQ~>mrT_> z&YyU=Th5O>YL39O$veB5PaxEsm5Er!PAg=4JV7Cq>DX{Zu zd={>ytJa?Ag3QH@biq1qs8G38#L^2abL#@SZEFPN`lo?nJC^DqiMpc(VF{Oc$&(Ne zP&XpjZc*%cI&#mGG~DLS9Xl(u)b#ag^EI@xqf7d;4P4fx;5yw*33By0I)fD!4W@ji zsmelTuVqazp`1+S5}mOiQ}v^E zz~G`nYU``~x!D0jySz6)#KA)*p&t}y%`8&$2FcY6F#zdSCrA$M{9chedn2C#s zF8NVkiR-c$9(pZK#d}ku*=rP5TH}ULi;NBTi1>VGwY_1Mi9yYDmp8E85kG%1fS^f2 z!B(@^xKj2xofveTDJLgtS>QrCGp;5u^jmS@f;@cinlz&734|p`o`w|&DCNyZFufQE zf2N8_;RMOAq#`4(#zQ1ZVkIY6Bj3b*>yAjvBVN}C000iC|L4Hbq)049)yP%MQYRNVVQdNPFOl=@va<-yI3@b}#8WUgOVtsa{BBLZ6ulM35^qhsy*;**l+D`h{UuCtaeS_DbVhpS2&=L(2diqXx<}11G95WaO#%rj_|T zFvQol+9wS5M~po##hDZl-R~)ae8i(h4xB@i4$(Wd4?S8!@e0)g?PnV1wxtZIq(lO( zs{2bfGTj0j^G3%Yr0!2molmUa>Y^ixNt-IN>Q@D!WilqdhQ-)Zk8C_z78*i^qcd8H zgW_!iG^&Xo!l!-5eLO;LoC8aJnyzS(G4Ux|u5okMSvA>WHe`4bh3CCUbatC3j(o!| zmtjja?cWZ+SOzx?6|kyGkZPk+F;E0 z*-$56D`aiZc~C}$v6ZDNOJXHo$tpOt4s)I64G*?uT#q|z?6h-fSYtY}YE*fRp&vaJ zs!YwKn1j{w1O*Le|1x3fTuQgGV;SeDG{4ZeLiVu%-FVw6{Onxqs{+!J{_Gof@vHB* zQ79BR;ym`%rGbHgP6EQ;9{~dCuC1-y!)8jHz0`$;K77X@s>)-X+yy;go|^CiU?K4wGF39o77-WM3C69Tmy#DX{pM)Foaw0RR9FB>w+l>1XENyo0I> zs+%S)HH*R1ugP$auwG@ycCTcr9LDrhNXZ((oK3MI1z{0?B&NmnHuidRKj_u6xs!)> z%#X5S0uSpH>O>;jgO`2Nciyo%I&;ROe`>p1^}IR#Sjn8YvTX!2E=z~&RUe|AwpznA zceHDq)zi^L(%&A{QfixP{qG;jG>9zSk=>1) z%Nf+u4PUBdZq?Fzvn*T3D{N$~Yl*P(q1YbN5GS448+K?8ICfbS(qSy0Drvs#ng&;b zBwutF%yapqh#CmMhh8NZlheQMbq1avZrpkKI1N70=(ncX(5#cVnQWV#)lHF9PL1HO z^GB@Y+^@+$uc|J|(=G)I;WoXnH+xU=x<&v1Z~zJX_ftF(MC8qlGo0p>1bSj;&R5TG zxDx1iwr^=D3{#90G92LH(;Xb;8rGtYkXp=u8$f0n~ixo zq3Zo1*Dk7G)k?{G+6Z>Y)DIRkCxBKJ$JO+NK|Uy4>CERe+k0oI(RuF%QCvQ5b$%{Ir4MpqUS}S4DEH2T0ZQ)U z##uvZ<@2JCvjY>g2_+3*ALu)~kX2N@WRL$s?W8o1Errh-YC^IR<{7WvF)&W|u%{bN zK8pIl%O($~aavnyLuaq+lI?)O>|51m95`nGu~Rb< zT^-9hBSycqyf{awMku>(q zl&qmx_yn5|4CKh=YX5xO?KJL~;p4F|EAr>5inPem{z$46OzMZZy7^y9ll|(_CQ{$p z2sDRhrAPTw4Nc&aX>Nb%x6ea{fliz6ak+3M>JMx0c-zPUC2?q6gX(>&CgZ_w^QpC@ zMACAKpZ~(!F9t?#Tk6s&6+|tR+>1otKMk_rA<*Vgd$bZKaQ!xC$v`?qt~`{?#yWyd zS990DR+IPS*Pr!Yq%g`gR^#1i7PQ1_rCfInwUF7T9G{+@tURu(#JM1?CCaXel8I+o zVQ`>(jEH03h%*($y(x0~5wD8?000Nge;nO+BFR`b(r9R#t!MUh;)HG1-LC;J?`nQY z)@ilvyOmuXG}pJq-Lvi9&=XCi6#52hdtr5ZVJ7U_NL|f*?>J>A$@k~-J%wJc!g4cF z)7ON3GNWe|#eH|2ng-DI6q;}x-UK{X2O=0k+~%rXL%FB~WZE4fhP0!)1QPpoT+#(m8kAYl z^p9*3r?_9z@Jp<$xN=w8$uvhR5zFkO9~5dQ!@i-04S%+IFrS)KV?l2jb}mm>Ear+H zrJ{CIlMR=j5kYUw*EJs1l1xTCUT(ynvIf;_*52=F|4Q;C>df^EogNy83rIfVbrS#p z;DF)(_YoIAIg79Um@cBEY^7iVd8TJsg6NvJ%kMSjT6K?5_i=uR?JYKRyQF{fdnaYb ziL!Q;LLEb$IX^a9HL=A!+-@D_@s?ow-PyQao!T(#-o*$k{^y37s)Ev|&0lqDy`7u- zzOL@Z9DYhBcsy(Py4crxzGBE)QQX5Eq`TIwWQ(_Wg=vv1p&d0pwEhE+D><Cvlv-f+* zt=~4yGFCSyV#&+r6o_&gwV*AhT&Qh=5Br@}pf)x%dz9CK4>AL>jmOa!j(gWpBn1Mh zU_Ub-TC?x^A-L6hXmhX$%5MHRi9l`|-E=|9l~dgfC_W|TDY&~6+N9uX8Zrn- zTvKgCkR9IMGUu=FoQ^geTKSIGO#lFZ1LfZjT)Xu1VrQgbcbTM%%IB=;4Ni{1dGd|u zo}Q8Vfbh+zw2QCcU+Nl`-4tfa%kai}v^Nvjy7KsHjP#3Xnu7UQMv&G34Sj;c>of=2 zh15ukdJ&vx{Z=TVeE7%iE8&R?)32*S*5*B=Azi|WbDXTWVzknOO(k!Fb@O)d*L?qJ z#>erQ?(Ab|lD-GR$4ZWJF5lecO`DXj6Ww#QHu==6UWyt@>BYy%Me(+%5k;NH^t%Bw zeV&2hk#@T(s5viN@hAiY-Bj!I_xlLW$qRe=Q55h|MgRctU-9=<(uv7E(L%o4NUvou z*Jap56T0K_OC6;zBC8Q~kw`NAsbdU5DhSM&t?aXLV7z_&b3GX+v8FkZ`Zj3ox?2xc zZ00;;yy5wGybg1)jcJTUE*|!8ui|_gM-i$_44o(QJUCjz>ECv3MFqVkq8u(Ff_^3+ zahYbRFnQ2KpUUy4pT>&B^1Xx)Cp3S1@Y*>FrzjHtsejO;*fGQ2a3BR|CZ5pT&%ndo zlZwjl^2*w9OL@cF<5(xp*rM3)r0?*$i~~-=Zs|t2Vfl>N_v1COA>KBr(oFR`{WVe9W9`JnU4#4*R2|6g$z+v7bMNPG6^#jtrC$oGxw_G42`sn6 zqmbp(0P{K1TfT!&t{@j<@>2?OKb=pQakJa-C0q;}8!1{mLAJ3U<0vqv?pzKnjZCY& zQOgFA5zE_Nv?vR7O{GgIqQk{`yd*5T#q=dA1OoTOIMU>@i|_Edj|1*lFs;V2`NC?` z_PQ{4jqr42qd9rinVMQNBi?$2gl?a$95kdj2`i7Z@H!N>SE@aG)u} zwa(T-v1KHd@T^--7haw)oYTYK`jyv3004jkMEY;*nEZXdMy0X4gUw;!;-Qw-s*dr! z{!p68#sU}TMulu!xna;y<&vBDu;8)*N1ASPQ#n#7OFaU* z&!^^|PiUsAuEGbuwB4eP+OJ!Biz^(R0Y1+K0090e1b$n#7+P$&?|5`^50CSo`JD0m z5fM8ZZ&UwW&_18Sm(NftOQd`u1i{H}jPwo`B;ZDBjYnGIE85&{lH}Ib^%D*clWeXJ zb*&2Z^E%A$fPCqae|QI>yM4~1`Y|=!5F4p9{5)Z#rNp+h94kf#7jJ|!D#jBcqkq!y z&#aeo9D&U-I}43{M()i{L_5n^Fi*ZRP~&w7003}+#Qe4@QH3uqhi?;Ey;Qej@N}uu z&JH@kAtd#N;GEv`-S60b>ry{9d8l88dhUEd`;<+vYESoy|3Wf9=bfz%iepDSNS!{j z6<_g)*I5oe5tT^B!|yv<1QMe^thRStL?ByUg=|)u{aoPr z4tR)@&n=QgPB9kl6{~=~Z*eOAo!KwE&J6$n4vzhv3E>Z;Ao+#VSGb}FYre-fz0o>q zB^SQ6mHFNz20u?vsEF{947e(iiHD#+DK;*^F4k!||oD=HsFCWL))WD8Ac}{DO(eN+japa8GbuM3RdO+_!nNM00007#-V-YcHy73@*euH;-=PZH9WP~ot&9j%;N$w z+&yQt{6&hrb1qGHR2LD(@N9ARTIr(+M!g_ND(yxs;iOfKMtB|I_dwu;nWUZr+%Ge7 zM(@GmM!(0av3BeJaM_2o<=C8Foz-aj4?ROVk_oY9(2Uo^VfR>hGiQmr*Be+S^GVgC z8bylAyiNcB01ghb{oW~~Z)smq0Y?^_y1__Noi!@;3W{j#*Ryx6b1y5nWxFm|G0%CY zf+mz4iPNKe9E@yvn>Dd3J*w(1$FRJF>gIKX-vg1;d*5?J$|tjq)sFYFJam{gS6R+s z`tAX62!_N|XFXoqMJ1Q&G57g2&w#C=Rf%K_xgx7;SlB3SWYn@&mJi*>>j(e<;NaN* zGVh%ei2%nNdUQw2;t?w#XBVdR5mt*o9s=#UwbM2>?BIenn6(UvQS*6`eo^}2KA&lQ z9m1*Z-d^3*la5Ec4)8m`?^f;oms{+_yikwl0q{-|qQxb8!sQROl1W_%`$TrLkwUe7 zX1F>0G`2m0inyzP?W~z^PUM0N@{Hw%@tXz+f;Nm;+Smz({Lr>j;{V znMsfcWm2$|ZZ`h6BY-WOE`2G_wzzI7hcQ1*Qyr0`zib}rtSPD|m)Dk5m*=X%PLKZg#!S9gTrjUYu*MQnSAYyp+mPREIU|@ZE8I$%8wYe#Ky$5<(3Bq zkZ`1hG~L&m*-%h#7udKI_9e~fo0t_S!(CkdIDyvzeh-dhB2SDDIBR@~o(-admSMM9 z1-YRD0VTMsw#_c~zEp8&u+vtKcGNZ&YioD&mY#&=Xy>9eOVztlo4k(jd%&L=^DG`WzhTrU?Ov?u4ED!O4ileMoN>bWU@QeW zx@wH(kO9&+(0!UoTd%W!^JePa)+$?> z{ff$FMAn&Ske4d0z-7i!3F!ND*NH(jfA=Qm$}l0V=x3oDGaH%ejutj<57(1XwI=fG z0+Ek+9pLu>7fy4t>o+Y|Q^4HC;BzQG~w@PD*UaS3q*CBof z_*uil1AWk;Q8(woekUgwv%03Hnq)n|WH1LZdJ5D70#vNzCC;y0Y7r;m?l(Aj#(Ib~ zoc!Yr7z>M+X1^2L}IdCmj6t00-nBiQ_6%w_^b)sQ~9fod;-= zdhK#fxu|xYCqhrksL4ZZ5tg}AghfM>gA|^IB+!_JLXey3@~+%CefkP=mw)I7US~P@ z1Pr9lioAI5BDs`ZGqr_{aCS2YJKVp)B^U)CFEg2LJ#Eh}qu`H6Ud*{=`lj{5%O-8gg$nk~eDa zTLp_2F0Eg(ZE@Xco0OfpO_E7s;k+>CW^96!E9j1nR_G4<_1n4Xp{<0b`;cTAxav2? zC0?gF@C?px6z))9A!qW6r+S6wV}6{=@*`L0`A-*FcrDhS8_dH zvuB@!Gf~nS6s>Eb3a&MZcxXz_>K|NrodN&=93*CcJ5pfOOd@lik6kamTgQ@O2Fm-S zhJ-xt_-ve%(-AD`=Y45OA(Y!-GaSUGY&At<{qm=IXh8sTQXE^H zhJ5chPEz@TGo1-Mg5-4@2OT`@h4so}eWG)zk#xA|9kTkX!y2-gWmc{EQ2wY^YeMmx6u03?Z$p<*t~|}q(Xa; znfkl~?1(iqn7NZucsIAjy3vubT6J#5F3&yG3bfF(bvHP+#A#);84+*9upIRsu)??-&)7%JMvUU)1vm z1{i{lIG0P;F)Z`xN;?DAE>0)~i&>mn5m@7O{DVz^z3xAFljUy&A6NgOzbL}>d5-U9 zRN;d`ieJiGNmph_{$X?^&etfN=4OZYPHY-mTI*49AlW1D5v{LNudFX=wV9wi zOAq7a4l%GQh9=_lHtqhFxszwCiHF!e-%W*EOFGC6!Vo%D=L;?~K+9nU_Z)|{_8Om$ z=H_5CpN%YvmfX&M)Zk)E1fkk5c9yKwYog)axWT)vU0CjQ8*g6^*RT3td7Tvi030aN z`#rziBt)hy$gqgAyf1l>xQKIdBnz_m1koN14K|Mmf#1exc32Y(*s-2zr()g3B0ij@ zZ1~lEFR9++uA?5eo*IQsg+J)N|FuHvjc#7mZKY5}es6>|&ImN9xqhZa%{u5)Cqev@ zGc!SPV4i^0vNDB2lkf4De&u!cgY1thrt}|2`#NWPY8*)*Ej1#EK1`LrXKk5It2g#I9T?XzuhqS zOudX`Uwpc!8q}9Q+ve&Ziu8X;9WU(&cp#2iKuJZyYp;ZoCYZ!+^ynap4V4_ppu; zbnUKdjNcx6I4jn?^|Oh_FXdw}%E;V$-JdrmM*_^W^KR4N!_VfAkfMYj0p}SOZ_V_Y zYGg7>3MERX*RO11H%Zu7MzlRqkQCTOcQ*l7fB6bLmm2^8{Fey)w*UC;i#_JL==rd- z>hmg0aut~b8XK4x$zM@d<6N>)1L;iJ6Sc{gn0Sbzl`4aJ2COY3cCGuY?glDa5gfI? ztbyMHt#6~$W=t#8MdzvWZ^*?|&V%@tRN>|f_M3XNFzk5ap!k$W=<{ccTQqa1eg9F~ ziv;zB#_A6|&VOJXT1B=^h&nZ}*Q}B?p7*W}$B4dY_g>y?i+igm9NRGFuRO}u+>9jb z!cZ3iG$cI`5OPzK4+eqvCN@6&^)&60Kt zJ#!V!E?f2I%yH&tXpj_Wu$8=}LM(%NIYIX1<|E#AaZrhT;$D-xZ)}q7KSXFnB~~{N z1!vz0k~E#Hny-Z2P^cu`xpG^fvc8qgP3?ihpwK}^^43H;6OI@3jP**8IhpE~RrpI+ z3|B3qud1@=LO}~PQ~HCKdVa9DFDfIE|H1r4ln|o@kuf~?P1tBi@f@QPFR_v7RX#i1 z%y#pY0czCLxanT}HdHA{W!KQT87pH{4k>cV`6*3vtE^_aU)hk#K=Dp2il zQq=2qFO57~ax*J`+M({Vs~r*H4u6+Es>6fasGA1EyzT-3030|m zf1A$y-L%Jt^-oHzd+NIR-baGt{L`^pDkbdq9T)~_rt7nR%^7T)+peN~U7(zXH*tAM zPw(7&XV29)d7Y(odB*FZrLYmYtDd`^y2M1Z(wv#-bYxe9G40Skz;y5uFPu zs&7T~5-JiH7Cv^lTXy8Sl1d_Egv%HMIfUvxd=DFf5L{D0K~JoC+Q|XsGZ|Q&+8glX zf$nJENPEzEjiil9+j3myQ3nzNc5i46ge`Y)M4w4o-Q=io)`nSkwk}?WI>MTJ`>hEP zUAM^DfvztsZQ6+GQlB=1*i*xEcACx}%;VB(5Y`jJ*`zir9CpF$n)ufI=09qJKI-@oO{IUE&u?)ffMt${mkF-54#EBf|2W=VlL61 z;tUELW=<@pZ6VYb58sHB2p)8ExkV|-YjL&>dzsW3l4#Kk9bm-y+`?gv%zQyG*r=za z>O#JGsf*ow*r9dUtA#HXYf_r3>1d;bXt#5&*WKK?L0`&A$vwJl#>>$+d&u7Lra+EbH2s_>N5<2h+}MG`0{{RVJR*Nz)%@E(9CtvQs5#=(fQRLy6?w9O<%`VWS521fwb5<& zyvw@{t{(CfVt%PEBk4%i(@lS9fV%W#ok^zL-Wg9d(e@QLH{o9x%~Ncj>=%2O||^5T-|C!NHFYhkw>1T87+Mn(jnt7s6LnH z47DRb9}GX>Wh)1f0M^vLraUD5Q^y~>$M?KHM~4R4cUp5ApXiIgS{-2vL&Tz6n9FD< z`HIaYW|^_PBhA#qEYN~LM(fi+DMooSOp3!HS;Tj)SB-SWON$KJ8`gq@(@iofu&i@A z(|x&$&G(({2vLS(%aXq??eS08C5y*3Q|mVdR=o;ee(qg&9vO0W?l5tBeC-jhs{jB1 z2amwt*E|14Z@pO&6VM+1VeW_uE@GHW_g;Bg+}D1C8AJTnH=bvol6@QkLI@ zFk3bbQwAzADVR^pJRKOcn`L6@b2uo{1?ey=l2Uh=%;pHR+ct1sD~E;}H+_ViaJUG= zgvZ>g#O5nOCsj#!P$Y$zjvFA|P>&c%z#2fcCsP@5Y+;(w&6UqQtmGh)lG*&rGO~B! zR0de?jlLr{$pDV(A*=mM$j-YA#EB(rx~+&8c41j{ig zr!CGdsLz>$O)BRn?^M&Eb<=d##S_2!yW5E8 z`{)au^TIHwOiLx2_Hs|IMCv(T`*#uyUKarX01l#mTLt}_fr2;dHpQ8LoFv&658oLV zo)>sYe)_hoGFEOYw6thhAxQ<3C-%5@FI*mlVd8&{br5!JEio60`Bo30Xgq3v2GD_*jfAKOC!hV$R7_ zc9M7~M@p*5lPB#O>iEDqf}}clSII$SKwYj};tN!KmZ>7sSmSU(T6sMynE4G!3|w`} zj(Hz=L{H87G|NEbjR!mo5on$XMov_Ix}#(xzvtF3x9Z{R34y(7uyvkqAFAxfIgc8Q zX0Erb%X2&ACksMNI)eK+o`o-4$9-w?%C~bN1bInSFGX=rixfg!96|ZK zkI+#=_#yl_)6Og{N8_fr2yFSr?11Qby|omdn-v7etL2uHd0CHbOn21SsH+r~%bq_X zzPj|S`#h^EP_-Wv+LvfsRzz)}IAFpdIExxY$!mSOzboaMpg5-lx>K~zCu!1@4|laY z5&r|vN;!BAwe)7~^Zl}ZV`(z6KLX#aT2TM_;@A38ymy)3ITDF-Trz)Sj*#zrRi^l6 z8ggk{TCJxv&$>YC5agVipNu`YEvM8rPEvR=m9kvJaZa!FH-7p#-5M1(su#Itdw)pp zI9>^v-nZtTq=&TM=Tl3kvkPZ>Yd?>d=#eM$>`6`&IOIfv$I0m1yeVr6cb@ztNg{XFg_P_P}5jT#>{4)l#_ri$v%9myInJb%^; z!!p44Q_qJwTH6x*EzWVb=px-!@$~v8%N3^pzv7>J?(?jX1Bd@<{V(7#FY0RZ@+^MO zc&#lOQS|D)=L+Y+oUZbHw{PL+mRT7 z7uBC8ijetM!zw%WZl_X;@(@u8tsWYrX=Zr^9s(-!X;I}`sWKWa3*Cq`l|FM`q;%zB zLGq@+U~xppz1*%6=EmcqH?!5pOw0R}mwO2w@r?CnFNxksy~tn7lv^xXXPID=x8afX zO9qy?T`dCeM?5Oz!1;$BBC0sNBphk|psj19N`vKqBI=$W8`XNdJn2hD<)ww`k!3+PDw}=YrgjylyrWz%l9>+FZN)~}w%0DrG_rSn-xf|z`qL7B1OoLD2ka+Fo z4(h($KlMNqM&1;3d2Ylx+q1ugJ*Cc0ty-+fgpyK&;$ew0dYpL5>OyP z0tvFvyXlF(6*8bhQc)PR%_=@NPo|K~j8de$xHo_pr5nL)kztmSL>{_Yoh?U3J2 zj1Lx;JtdQa)mw^(u0!|5KHTmgLPA2HCb56FE&A1a5l07eV_vR3>Ie{Q=97j@A~!ZZNr?Ba2hTU zbN)2@y$Ge_iTR_fg#KB7>l2OoPkGR(+2)r=)?3V|Dj0++2BC&I&|>!JRtHP#)e;8g zb0=RF<9CL$|IX6QciYtD6C*mgkoHoC633WMSM`u8oT}K;Rmx!T7t+Mf+Dq+J=1gLYtT(`;;KV%xTD+qP}nwkNi2Ol;e>&6D?h z|1I>Y-MhQGo+>Y>vL`Uin3jY+-rxmElDYPF>3(nY3D<|i#;a?5V&cbgqz|{o0(jz% zmOtB3n^MgC!qr@>!aGpX3$ip2WIDP~oQyVz&Ab)CdHV@0d$e>kvn{^bV0`;n|ct%?6sT&u>Ab-wYWtpp~*$?8o-xWX1Nl zh&EU1Vz%M{;v^_(hyp=G*!P% zm>z7uTmm?1$j&*qFyo}lW;^?x>vRiLp;H4*bq2#4yRWjuJANym?9_k(-uUXMS zf~M+~Bnrl_0wPP)E>*A+ z>&4?E^vx|TWI^D4{UWy&VXk*eSi4$XKWQA4-U^tWH{EvK&Qp{IdY*C=Rosqpwt`Ki zcVm1^d5pXMlht02Bfv|;Wt(+<-tKG8sKjWlUk!f0a;-AHwZu`*QuhNeCEw6RKD%a_Bc)Ug4 zhumYT_90QFg^llDe7p_3Mn28YB;>WJKAVioBAqQUK53It;>syI64 z21l5Kb9hKDL(3_-Cgli58}l4r30abz4U0G_-O!zJvAL+)!!*kJzP3t|Yf;X6C}|$5 z#y$UrF#AOsjKg^Yg~D+5cf_0p$bFOr#g-N-0_XmMsN? z!PEN@(aW)FGm%=&D5~WpcYrG^^bPf1A5{R%w)aHm=ksBi6Cc1CD!y4lrHFF&ML7YX>yC*d< z@Ul9X*8yofCu(s2smgq3&2SdYB1ReQo)VW-^dFX^YZG9B$J@=0GAfL5gRa7A>b$8y zdR#p=YH(R(z6We|B}VPK2MjygmS{gRZXUM*D34|TPeCrXY}P5(kUVs~?d~piwDDZ? zx#FR{K^c}A8t>LElK-$|5c%Vv@)&TqX6`mPbe8`Se>(3Fl0%nqmXl0BYyLKsg?QiQ z1~uG;k@pH}+y{iPAiHkV--CR@c_y(({jSXBY-GTY*}avLe7|M1A_{uK(Xlgj!+(ct z&Q$O3(p+z0w)7T=|Ak>x-zmCVfxa;I6kOifYG~%87b4n}gxBP1oCVBp4eh43di6rc z_Wg;Shtx<7m^4DBRaSMrNC~-K617-MOm zG2-GRxiXYy!cj2V@z6IED9GLh-zLT2Sfer5Nl76%@AV!XhnViYz#V~oEEPNlH}&>5 zmPe);*XPxiSXTV)thhbaoe-&++b||>Xu`CDsj;>~gOWQkHtW~5#qeK+OzM9ulpX^R z*`@Z9%b&>`MvFcgAPWN*WSBZ3__QG>WrykLh*N>Hmn}=|$XZ4l%9+d`vVK(#uljUy zVvlV@=5}ptMRusw1h0&3kj5j&*3WYnnr*IeF4i%|C3eTZ zea0fcOXQb3b-%Yu_KDK#0eT{LpZ^Rba9>y9>=U=qdhlmW*)nnNxKss^`0=FOt`kln z+EE-;7eLyp$lR<{`^WIHy0>o;{QnwpeLu9E2IYb%f`H;3ZGv$+d35)#vG<3Y(Uuo6 zx(m|f5+~tlvNEhC)W||Px3l$pqa?9c|LAO8EjT7n0{n1yi&TxMpj@_lduA6zbg|d+ z>K4PfYu)kQo2LHkJG{M{1=Q8gEHcv3Cp_N4xt3y{~ngpQ0tw>lDj?G!vcZyF2U+udyMuZ z*BKKF!t)5mn;$TE4Q;=cbsTTtDH@Aa0~a{qKwA{(uKA*Av2n2>m+^ZIDUB8WaDuIE zv4`^l7=RZ%4$E+f%E)e^<`OHAZG6 z#`G2P+QoRe)l-s@zJSbYfGdP`22U}ScDgj-6P&&4lq7_+W3w$6nmtm$ky&?FMn(M9 zM|D|v%%PXYOD!!Sh>(aP1TXG%#vmi{*nI|%m{^BPw79s$N~fuRl)~FDdDE$!mrGxG zyPLROq2b2@p+`}?M5Vp}C>~>2dBjQBP>l67=swfZ8T4O?Y)1TWP`@PaQLxVza#^~2 zSe}Rh`nhrDoAJM{W1a9=g1V^B)^L`Sa!<5Xmt1#2D(G(wfaPkrhN6sBXtJCWc25mU zpD1-L@{|s5$1NFAdS|yykfwdc5`ZSxGq7K}Skpk74I_9X0QT&apZKe}$p{gQ&bYVZ zy2r&pgRQiesO)3}r+W$cb5C71@7f;8z~79;N9`!iwkypeCn~xyH=Nz4(U@qHxKMq0 z?2qZs6p-}ldp-uJH;2UZ1nb-L_ExL6JmbXxNVDskd*$a!{jGI_) zU~*p#U;~_@?VRghH*NPm9<8uI3B72BDc*m!H3Z^O=8zj*NO_V*_(h0^q%KJ6K|Ghe zxG=|@N(IvsT*o>@>~y%8RgQi%0lb)*CHjL4!Lzfj05al=<$fd)c@qk&fp7Nt>|T$L z3tGX21p)Di%k}Cx=E|0uQ8lvUKnuumazZYf8Tsr3>0ejNBYJu$@kv^6AkN#^-^yseB9L zRP-nmxiA#v<^0Y$YAz)GJwEdY$nXaNoqHi-^%9hXnEI`LZS6e4w0p{&Kx@Ba*tW`~ zdT zsMj)w?dA;XHs=N_<>_RyJnfwCwklJPgKKyFn2UY2>Bt{Lf>KXt%K z`?g*!q69WM_V*?mBwE|L%6(*txriQTmOk?E!<%)-5H8W^7)bl;82A*?!wxFCB0UJAJTNm7fkZq9jsY)E9#gfNOl?ST) zgKEoP>L!!;S!VOi&_q#GR(&Ik&(dC_Ulfo<=U0E^;J%M1cy#jOqB zX#qJ{7~nYcBc;RyEH=hIx8|B;LAh9K@MXpG*p(Tqr&R4*H$L%7cx@1zNF83W!+ZJn z5A+OaGJ4#7y}`LR^p{$R#RMxwG%bBS&|_o;U)Fu#Y1&GpakR7T!Ah2K<9P9Hh0{T(MBX?b=hCUEZVv5%~~mf^W+WIvEokqxfpsDFyNSnSoLN z+{vB>p-gb9if%M632)cLBlQ{S$~<4L>)4vNhD}G*esG>GElE_{G*c36cUhcA3k<}? z;H!b@~d<7%y_bw;qPCEgD z|3bG0_@+ zHOEOl@$LNNi+9VeznQ)I!GIJM@JSx($!AJjUW`S85C2R%7uNB+)BVa zdWfoHD?rGFu6_>B7DaV=5SXLM5A(667^{%TqQ4M(b~~6NV}G3edOu#mG~gr&OLRw) zgGT&@bi0uLe02RKe|$`!t)e(B_!Szrr0*+sv+L<+Cp9Mg=7X7{&gR2TGQmbMfm;%K zrWJRPpDVicx{&D&^~;EoEYzgwNMVB&SK0=DEYsqJm*E-q+E!vyvV3 zx8==bbo{4^nona*FVwl>tA(eM=6(OorsfoYj4ekPMf0h9=6 zJ;#wq=nsCw420^;m!WZJ#?wZ}z>p41;ox>ah$l-w{yuvlZP#}7aM954$i1A|*!qtI zY1Dt)kqPCc_vUxD%V^<_NpHxDb&lB_+_ct>JM&EESXMdRV@2SV;OkOuuzjtGM>JeI z+d(8K{34c^RYx(}HUN&$gYkT?xD}Jh+EX?qFmB`))@`09a9HeFm^s9;oHn=6sl!b< zAAs`97h|blsHxC|*4yTsV_Zy^@Xx5#4yrv(io5wIY_Qt+^tJP;!NCi-;u>vNH|_00 zh;XYkeXJ9eF#emb#G4;#) zG7$TwNF9G?OnPy&p$sBFdsgD#9b4A0MjXiCXF zCG)YXlTMhpG@ejII$BBGAWCs})BDr?v;1;GE%N8Zt~izgcTA5{#}u394%tl-`Ll2O zA2_mGC!-a{Vv%`XJ^G*Rm!}Zw8K8dVE5vQT2Pqd5O{RZPZ}U>1z@<3fxd-=VN3W|n zmpa`ZI-p_1wDT^CwU+P8Q}$zbN7uW`!h%^c=6W>hg;AkL)R&_-10ASYoah1R2oncT z&Sw~T=Sev!5=&W&{5Dj*uuG}?_zSfIKp$w!qr~oZ5;wWksFM7c`ktR2h%!s{%hR9`+RFCUy_V8`5w}8qT0D7 z9XV%VmQvQ(V!Y%y`LO3ysia&X4@{9kcBQ@uo(rEri$L_~oJmb7dY8*6Wd z+x{DUeInj2LPEfX+-S-;L#jhayO-Qt8Q4{NMAT%sl-<5gPs6Tx?Z11Mnc#h%P55t= z5O%KCkd>^W{xK9#+%d4NedHGKvjmZ*U!aTLzB{|h=Ag;?KAGy9vIbX03?qtlTo2Em zGxTQfzg8J+V}TOz?Y`~5k(OSr$1z@cPOfc!Z7dxD<5jLpAn^Vi5`X{vs2O{y({f>@ z-$7kShQADVEaFIg4mF(0QQSHpfd-86Yp92xD-<|TQi38)Ld{j9BrLnU*jam12q75F(mVT zFg{3&JV-Zb(%=4NB-Mpwk%HW2Ij8&XQ}2HHv>i3>+ zDWFeI0+^54DVjFvL2D<&BwhU|Yb9)S`V02(gG-UD24X zT)HQ;1*#=x)c)DDle1RXm?8v*ltX0@{TxlhOmbLP^>j?FDsTBUMkzoQo&kUIn9+dI zWy{OgD?Ao`x&kV!Emh3I>^MD(EII^s@sM-xrLzTrI0r?bvae02s!j+mdscby7F#p9 zt*xOMI7qNSLip12lN_q1k^X<0Jr5m^WW;Y}KE>lU61z6=l%TsJ4|fh;s~Z z>eC)AiV`aeVrOE#pG3UJ245Is);DwJWChc{jYYP*#;-)!<^jn(?lkL`MfZvld(ke1 zbS_eqEg42VKy#Jnwo0rn$cCrGftB^0hEG`YVTVPzR06MODBEV-jI2D~Ly$+2H&-%S ziTJtrrxIk$`SP~72~So$P-@hz23E6UJ-BYN9A9Yp{*ab&W`aJL@&xfHCn2XuMH3pe zi5~cQR$9uDYOL>z<^d$mTPckZXR@ptNsBgldF_KKPot*iA{)k7QSV7#b!*L2l;;@?RGo`)PuC*DpU4IW*!v zSTA%yozN{Mu@SnH_8gK#lv{ykyw3E_T3O{g$7~nmm2lX4o0v<#q1v2~^+=Xq$m!$W?6?odBO=CNP@C1RMFF?#+;N zJkY(=g}asHVUJ+egQ89ka8piBB*0l}kSfS8{k|o|W70^eN1l?YG2Pz7BJ-ry1ylS> zpf)mgccu1nxhJl|W0735&l~`rghDTp8qCvffBitEpk9 zvq~LtYa*Ue@9`{9t=0d~co@G}U;uh&7L>ht=@GIihLTPez_djF>ml{>TJW63M8-%3 zK^fFyjB!Nl-#csobIWn_ z7Gr3^6$K=PrYN;Va%lZH(X`e8p2vj7{NYX^u5_+ghlK0_HT`(0X1g6>vpsOvUBaa% z?eA-bfyxKd!3R&-q7E2`W%)`UZ;FVP9i#7Gz($kpsIoUpD;Y+W936}-k5j56nDkP* z%+$lM$Dr&=%6!T7?>hxvT`u?fQ|TNc-3PFlxuXsXl2|5;w!~+~ar*!WF@7#{>P#fn z0sAIMMFP*;j5lAhLe6s_%iJ&x#4>ZKU;d+JL_||!t%fL^4phvONu`aCDeZ`Sl&gzU zH%J0Qa-pUNwCZ(&n^-05A`kEGG)>CVI6Ny(5UUGEDyG2RG7G%wYe6f`bg52GHgE0v z&wpp=6r7(0!PB5_P~?O?EXKkc5k^@2sXaC$%5_A?n)LIwH1ns6leJ%m!`1@XSM8yx z_5^GP^yP)SDt#|tM(=-V00I*U1&Yq5rlw21F!W3sM6x6$=j0_;NF2!u;*EN8#hx7X z@}z~C*xgSeU&}&`*Yb5V1u}i&`(Y@tjjGEV1q^dG>^99REtbS-*~u32T!Rp z$>aXYwWP6&rVbiz?kiqFI`OLk3tKR6U>I9B(@9rk;2ILc_h`F(-}#q{Ru=T#gwrl<3wQd*wWe=HWWP3`_M*^ykv3IlldI(2_OGq|6G7>{wc zMYUb3@FZdGPg&zr)8or;Mg00MCv#v%pY_)B(L|Sv`+ur7fI9B*r^Es(NFrk5w z256dsec@o_Tysj=Mo{xGS@zRAHou@ooMVLyjHWD zM=N~2LOvV%{)rZcD1X{YQYriB6FWjn26GH-RE{oRl=TLBU?BfrDN z1X6k9v|1D#Uy|0^7**!0o&_=>TzKc>r}inN*DX+0Tglky)sI>K@&ChqOhlhOFo>*Y9Tte0UV~d$ayvPqwM`8jPdqPf&7H zF^kjumsYGN2lv@8z^lrY*{K&kgBRjJf@x;>&FR3iY9wutUE10r=2Eik@;A&5KfzAN z2( z{0lm(KrccT?a7ommCqJ}Uc*)OE#s*J#5_A6p@og~vtLRs(%B@}X>9^XhQ&^Qv#NZ2 zCpScSH*C93nIB9SJ@~v@t(6w1t2?r*=KOfKcpmrZE8SLp!Rk=AkRkbqrs(xxQ-nsx z>7-e`GBkoxo0|SLZRJRU=(f_%v-_1?<{{f#z>9Q-YeV2xYOs-yb!0?R&{s<0MOQ>g zTlHvZwd9{uPr5_KX8r9&08^MmT;glw(-xZP9xd-XQsmSZ%!uvPau7EV{a$qO6SC}% z{|x5rnc&6n;!)neLvcda`%*+Z$?)HF* z1J<@<9b%4w@OINH^xPEP~*OVUxoBOe)F5@TdN+CXRImUT@N z2)r8IuF7gTI2!(Vb)II%WyU8##x9NR3Qg4TsQ_k}d^82oWPfX#Q3P{77EL6M{+34X z=loQ!)TPEw=GZD4W<&7^D6nl;mjer(|B2Bs(89pyAiEj%H}7e_K+b}JYG5OJsL~LD z*X^DHz{g3>Co)Auq06La|7Xa~k%~1o8pajo`)i6Tlv$JF^Y^upEK)^BhoGaYEs9|J`h~yGz?iDS z&$)FU<*!_xfn{)&kj$`~5hC$wT~dN^bl1wpa7jdyU1;yxH51w|WG+9gF7n|^&i(~1 zEh4j51~108!~lRqCa*YrQF}d^u2V-pFwTBiBBhiS-Z-Nj_Tap{0KCB&%&~=+-)U^=}>~Lp?>SS~1hw zrWKpYOUqZvowhfm_Q?dN`eQ`-uw3xj*ME|H+SE)w`A_Fh{A&UF89yCCqr9mNPzWyx zCIP*@olJgEpSsJZiXvMkLUr_RLVah4eSw0t7HTidPZ#>upU#{Uc=c$|>=~|PENB;% zh$@^?AHU;k7!{MKRaLvy6@ITSdb}jPI1-hyIViC@c<)?$9{>A|S7I@5tA|tL6mcy# zvP|3vEreej=)|m<3Y9)MO6B7edn(@C&DjIpFs#?D1)b3wau&A;1VV@dc>Nr7z*@9-+q8;SyU*2TBt|fy|JvMo;J5X^pFP2l zpAFxycH!yNZpGa@t`__{r~XF4G(;jd#`)r!-+cSgqFG^$klXsYz?4XfHRc~~bz6__ z-AeR&SWXg?)}jz@V*P8rm4^vlb^D9d43w(f#p`5Y@btt>dNzy*j5 zgPTXGD|Q`k8g>@0)jn%~rHsNA9DY;i>v}D%yUG#_{54tVP3)yi?~QwXnRC?@(i#`` z{2>QedZLKdU!beKI5WccVaP)mcQoC)W=qoE|8Zqvkw5#Mr@&5wpZRwSBthfh*e{aG z`EWi~ZagNYHL&ws0f(l}k57819$1c1xb?V|t{i?~!?%;8P_EHWtZ>w$IHx9= zH_^})vsj6L3E{f8v9z^eF}yjcpdTS^De_qJ5<)T8vS2_GfuRSaiBmrRtro=(V4%SV zPH9u3trDO|JI1!LXUU!8>EGDA9%On4_ejPVFYW6;%ygP1Mj6>_r`Q6w_9}XQ6`EVx zWwY6}JbG<#au7GAJ$0%svgWjJYB_$(_LKsC+JoHE_&RzN)dC;+?L3@%Azop|!Mfm* z1hE^#XwUR71$oO_<$bqHJF8WBz~FyZ|IrE|XTu5e4`?A2QrWX{*tsJwe-G9kZ9a8& z2bsF#eu@}ayRs$t)#qt6e5$<&;ZdKnHY8qYtek$HsVCWoqRshp8aX2Qxq_q#Hy#&8 z|Dz@5(J)7%d4VBcRMmQ^4==FC>^6NJTm?V6;{_4>;%!imP@{ z%gtJKnk3Sgx%BXP*EKD#Kg~gDFHZv2TCVDOZkEsOH@ogHAVZ5A=a%{wm_uhoqwdE7jQaFv>=x=Mp zg@}t(2KboFo=Z#>MoAknrN2R-wH8F{ki*72mMX?qLva!=b!8cgLltt_3dIUyQ_)wW z&E&+IblDjc^d(?*lXdF39tUO}fIsN9wFdXTS85?nkq{=W3z{2QI!%z}yxpLKA4m|k z8aDP=i*un+=H_)n1NU0jmF#~Q@<{wlBNN8Ew78*lM?Ch<|D2Bd>_3-ZI)TMFl7R?Y z?!m@w&-yzc)Y)@Zpo*rZL*E_6)f}#jXLfT|3f2mW^#>umc3J;QI1hvb z@P@SDN^FUY;GRGI47dcVQAn8?%x*lU?U3kjm}oztSFb&{qmiZpA0ZP9lB130-Nsq8 zcId`bva^jP!hGzG0-?wgX@&BEJjmMY^ZxsaUD}g@PvJv$rJRmvDOvU@b0E#QI>%A^ zEtm7}rsfyz=Og(F!h`*oirdYh)QDicRbY;1oDQcNJJs_#I-sey_OUI6&U4X+l5 zqXqX2O?`7glIHItVud2mNxjUDi>UyP#q_nrNdM;3a62&9M*UK&T;}Z0Uu-KbR1|8#iOmEfD#R&e#PVDE_*h(8j13dOVEdT~F}EnE{tEd2b`9WRQ*7VEi8r>e z=+Ubn_kO)hC}va+4}tQWMK!KEAC6NKM@x2G-ToV^r6aymHRftrn_zsNpu8XZkd{tU zrIJ->oC9msMZ3d3jzG`+MROz`FCnKsXu8oF;~{Bg1^KY#wHG5$@yAs_?UIUXiNA^! zV+Lls7lFGwYXor#2S1|JP|mNGV>w}{7Gtai!=oB$Z9TduW1&dThnxLs>HE1j-xt23V2SRSv<6zF)fq z0bjC4)aH&SW0E8n-kA*BVWO_VTrcbV1TgwFJfFLDjnCQxZWYkzp>C_0SiJMh?Q3Cy zqj6cFdE!R=V8enFz))2qV+W;6iCF|_V+r-}R#aoh_^!AUo2eC{AxDF)BYLX87Mq~| zZLcY(c5BE!`1M`I@?N!tyU@r(comAra46aihTGTbJp4&a`gxbbKjIaShM zHC)iib7#U0q*!KWN&xdPU;A3Qk)?)oUx+6^4v1R#fODO6?`}z#3Y|}H#0X0%Vof4e z!K|YBdpfTNG|%itDeibx+cd>F3UqMNHNzTZYt-D>jB~i4djIxG^bJUHk0+jLQ0|l? zwZ=sw}pDxGYO`&z%*)>t3c8v_Yxe2xW z0*dhtf#t!wLQup&OW_{}6TRS8FWAUk;*{;HQ=~XmhwiOA;kkU}06^S%>>4IXj zM~+W*u>;(fs%~MB%k)uSVW&j6AoG3mT}Xv!2RX|M z>)X4(Ff44GiPWaG1E_zQ4#DLH zC5hWHd%1d_*)pQ9$uiB1Z+I@*v-T1}`6n~D z66&}+++DSoDF?wdjOYCI$+T8YrV_;?I#k1F_+tHklQl#A4m-hn%IWSbt$5MhX_R0J z-1MERDf!Med0tMvL|GDJst7nu|6F5m8_H3u$`+NH&^y>pKhPBCmQDtkCNJzV?Ma0^ zCJuhwHeEhxvkzydDUa)WcPAT4ClKBlU(!-Ak=z>Io%ZxvzGUwsV#NdX3G3mYhJc=cfIUS}r)l&t z*GEOXp@XnV-7P3)K(&zNjE9>G9yQhP!wWnRB|kqbur_Y8Iz|fhQe{K8G}<%g&G*3> zn|J~BWJys-w9CcDTk_n{wYI`z9QrKq@F{Ybmbj-Df+T~l8km$EL-;%!H|YNwcE;(4 zT5XUtCI+Xn$~R)soo-b2Y@i|d56BXYMhgxpt!xxFx{E94ZFe{n6VZnN2E*iT#Birw zKZI^gv`0fquJNMy$1ZJ+?@6A{Ea%jpB+le6#XfX(0d$YL^>kj^y(N zOK{|bWF(eF)P0*GU+%VuAGjFY5+f|c``DBa6i}7>H1xNI7tL#F$n2hYE8Wo`4Q+2t zPa%+tuQDohwdRkNVw<{W z%-3J}QBUNb-KFcQP=Rrah@D^`7N{qb8S86Aa9A9-pv8i^rA~6j z=%&Ki-$UKx`dz@aqU9T{MsNkdGFK_>&o#kLj{|3j7!^SvJhLcQ0>{)B!QfZYn2y8> ztq#s??jG!anxsp8s|~AAulgb?aURzw*jB+T(X*%q*)O_SK2z-7d9UIyY>V7=8ISB* z`a`UbGOK>|iEEv}61@d+i5DY}O~<1`C{DmsS&PF97rY+!wHtsYmW~PsTt8~H_Ja(O z&zmjf|CA@iuRT604r&!j8S2G>5o=q;bBO_USw<|J+QKIClS>tFxFo> zgPd?Wk#I1%o+7adNzm0jHcb{Xw!Yk;oX(4p)1#tK<{u3IcuaO>mxe?VJAcr~5X_BR z11>1qnrFo?EvVp90J1Ti!sKP5V@)#a z!u}Dt$Tq>bA~!iZYN0Y+rbF0lF%)nBY+rFWUAy(N;z7?1OY?xHkDZ3k;nb!Hoc1*r z4vh-vq`1*7uh=#}y3_$h*Sxp8%z{VP*-3!KSir87Ko0wA*J1}Aj9MFrXlHMJA?>ci z9rcfi@9bZcj_*W)NSD6POO$b5P^2Ov`5C@){!yL( z%=w4xBNRyx1kX9GspLc|ZR;-n`i4XogKSr;7+H{yqLvBsRS>EyPM+;mnup$Xf@gZK|Z0FwQIDz9!a%9ob@P0(R22z87N8gbzfZ2_mY!G|b7 zS!SX1#PZgSQ>6YUYDUl`o-bvFr>4xzA6vSn%!ldfc#RVwqPSsqbmLDjw!2U)pqwG6 zBdHza>JS}|5S=@wGMyI0toR#yAdRUA-gd6lZ^F&RasQN(ZK=n%83hsQiJe+c_@0Xn zLwcc24*8H8nQ?2)v0h)AR5oU4X@;zfN=Xn*>ulgiry5*}w$$bH()lmt9rJlzF>~Wr z%nOGE(OBPnWH1r*SIB#fO;$-|rhN&_H>kp@~`ZYu5onSd%5muTeI zKBuwENk=Oa6J~rlkKa{OM831} zJ%@u=wifFH93fV|r-@k*^~<*HIR;0|JO6c6+;RS^qNl<^8Sd5XzBK>nc_{WNB?msA zKMe3{A&Vf!@5n4yU7#h&C0CAgEM-)qW?Y+HVE2Ci9J2YoMVI&=DJpsIbK=)w27jgQ zrRE;ct$5{C9)ycdA)2@9Pfm#fHa?&J61DO90Uu@Y0i3mH#}p<-dm3Do6QbUlLYt_Y za8*b4Th5L=0yBWIS8mqX3p-Xi9rCmixQoEX>g$SO zlavF!v20*f2ZgBv399WHbDS3j-G#c4-7ehF%f5} z&$tlpx?g1-b1+b|PoWf23wlb!Qm6%!_TxteCmfWGZaNm7C?k7Ya$%G;7XGdJw4s2ICT_0L|t0GCR0dTb+C20}|u8tufG7b8I7(KdM`B zXc#v0{nprGEA|pi2`vr^XsWvsqjUtIKXd2TnFO`9taR(2V#O%|q}Y*yOZz32~& z!KLTs5m6yw=QjQB~WYH>BXE1tI?+^>pc?a;9SpBxL15CIgb(UnC1#YkV?!YTx-tprWd4y)~fBIVI) z4$v+YN{s{K$n}r5vVkui8e>gu0PQ0Bz6e|--wmk4?TrZ17xvh(E&6#zY-X+fjzgw( zHj0U9q+i9yQEOhHv8LcddTw+Zw~ULA0Mr&e#4{Ad3Y6Kq)fTJDJs9A;Oz9zd9V8n9 z$l-A~fq8PQQNaLuC&ZnYo90a&T+csDNUHrCN*gIb?|(}j4P%avZ17Q)+)9ifp*>qw z@bJ*BCYLr91%fbX9P?1mci*gLhxV^z=tcWUia9i1BeelA^;9#yHy8H`=n~j(o-9}B zY~kuYPo_%!@`iFpz8b=lXUE`O#v|mGxKe%r6iGB+1B5@Vc<-3@0=$sPbmj`Q!?>L$Au7p-D_n;($FLmJ zk_52#B&hFX?jV=u0hUvygh#Nn_(^^}UHxhgKnmW-1E!9QD)1gGZik%9LgJ~x!lonw zCQOwl*`sK_8IEQhrT5gekt3|Sd~~Ef=We~S|49idUoL+f!%z|1=Q(=0-rFXsyc{31 z6#{cCUwnt}9_Y-rO4!AAao*4y$HgDe@`u}EHiq8i+x?j+;aY;rnu!#AS`bsbI14^Z zYN5!{8kAgJVnQCT>s!{@{V8fJcSD3ray7svq{0rO*4Z z2@z}#VrCGSJ4~;txLk?eSMB)Hh%r5hLl*oYhlsE510_>g^8a?hsjbu5)3Q}c zfXc?gyGngG$OGt!^5SvO0_?f3FbQFbtE9-l^3e?1@UBxoOFwSv*EPZD+&M|CGKDIz1J43A0O zNY6Nj$O|o0u(uF_V?Qp4|KhPGL7xlzqAIH@d z8H2mrg{!V{RHG!S;h5MVD2ip25T}Mpu-kC$3xEW5j&HPeO9x@X<8f;?HtZLK zTH*Copk$;wf!}Hh3qR%FCfWWrn;)F9mux@#!tFU}Z-VC*yFf0bMZJj2GDQR~7OZeu zb{mZcu-8;w_yg0zvSMXe{&XTh41F1Q36&DEmM~g?OAXQZ)x$qkuzXMEvw#}56cvyt z?QA^t+DNN~cub(?4+Z;_IPb^Bp3fy6&)R2j@DNuVTvWxTOSO-?KlN@q1~MfVJ+BVh zOzH-g^Tz1>MN&8PK~m^}{)#}ve-bbS!~GZKok0``{_+O~v%-K0L*$3d0!cy&f)tS~ z;*&J-`_FzjEKj=ln&t6WRnu72uza-2@uvN}iS@Lyy>|US0E|F$zweXxe%@AR{FM#> z;aJZ^o@uc2k@{2Ij5nWOkN^7OUMK);X26`a*JbTNbx8MEq+S^{VPCtR!nKnNIDg*@ zNiIZUMI^N2*+7LsJJu5=r_eKjPpUV^D2=<~4bm$5>r+F}!><Xlaaq1`Ez6AVYvAFDY$dhz0xeLOU_oaW&2!7gmA}6gr|Sew)LHf>|h{u-J!>` zzMxVT{&3;dhv@cL_TWT0=$tcPGMyCZ33lM-|Ly?c`{i={g^TP*r*!lR(_P1Fh+=H? z6zC=OMLusbG`8LecNx3s=rveM^fPbr+=@Gf3U;q~=U|zupXQ#BR*WHlET@jW4+1Sh zXbY!y?Bxv7?(Pr=!$x=o9Kdrz#M1kFx7+s*P?#@dowhw zu)h>)u0(wZi3+g>T2oQbe#d?))(-~69V?r?aq;En7sYLS=}5RpIC#mYbgV);)ziza zveQ0M#XQFtkPSq!hTm$~P3ogUYquK-a-+wRZ7{tO`F^P0T)Y8!t7dr^)CNVEk0FX) zM;u#rKfR_FbFba&W9@g;V8f@u+-EMsP3iuENNqH)iW7e?3>x~nWE%<^abCd94myCW z6HvpbVSe=b*%@lCcEY1ue{{qCWMAnp!fnP)kB=i8k}KnbsX?^Zpnb06K1D1<`zVS~ z&#YSec0kcchk8vUP)F0;1VpmE@&PMfMQCdR+=CeD*iIzeM#pD#JjN$#Cr>G*doyA5 zrlzoSZy7n+f$@3Fn4xOX=k*MC{F5P#(_dqaMIt*rdWhNnk9)KA%FkuVvdpIJTOil? z1*`9We)z+|JE1}Ib0dkD-Z)ilQtkEF~$1Hh)?~(CXv_Esn>`_=H*w4D<4anMGIba|u7q7I>X8h`>-o16xZ#gJu!s zK4EL7FQxPyX?6A18Hlvd4^dzW_(Q@1tm;XhE^;|%geKRvM7KaznwjM3W9f2hAr~rY z=;!y&Ni@udpu@@7P}9!5sViL=D3}Q#NSY|4B+cgV0D_bg?)K-`q|>rUni4Il72Pzj z3oGdNww`rZ!eseT(!**gW~KvCh?F@TK3Mc=zJ2c&PkswkebC4ymDcZ+M#PHac0~9C zk^@9++pz&meERrD(zRle%ft;wu_ZT#DM{-FF6q;i#)})hk&u=by{bcBu4?kZ9KGIB z^JR!YwR?HJXxo|I#1VZQKjE;;n?JNwf3}NfO2aZgW~40^PW73-^OfU`*+{)sn(LR| zU+PEAP?7U~O@V#7cU1_uSLj>K(~?Tc03!s$Q2gtGRymPn6Bymv2NDr#mx3w>DQ2RU zJ$LVR_;8yj$M%ADAaBb`>KF*vJgTWpi^p^l^kS>-yN(6x0F;P;@lkhtEDd6&a@;82 z8Z*1MqJ5BYKJM4GS8A@W!6|wgM&uohSlp{6H#~^WOsVEB8pX3Vwqx$Dx^9*gOywIu zK?u3s^jsO&#@n(iv8o!(8DPE+33)uf>X03;aJY6=+qfaV!n9^J(R3&JM`E6_d=<;~ z$@GL8%W_zvEF1cKcztK5%)=z{y@RpA>CP+wK=mTi!x-kSA61iJaUcG-Be6K&W^-_G z9N2#6?=IV1!R`#_#$;RVl0_?rtCIy@19-976*#`aF=I8&KgxceD@IkS$33=eBF|4O zGi`w9&e&;V42>miL9D~dNZrbZgaN2qePTWn!p+fc+U{$-YP7ibv*x4ANmtrlbP;dJ z&@OCoOU|IYJqP=|t9Zf*1Uy6Aq;VzNlyt0Ydc?U9n?YwG`Pn97hYjw3epw;OW4RP} zcWsm9bUBkzyWA-~0oa9$+j1Ts?c+reX8H^r-+{3-cTC8=@OxG5n@16hRl&T#vI^v&VS5-)!?O)MJlA;AerD$Z z9_--Id@ccPwp31->A|@^FT;RiK)n!?qdy6B{h{splbuvwunrBOjc4Pxg`KOvud(P^ zDbO+U2@;fzl2ioazhzyxCnr6oY^p=k4I_m;^q|xa1ZPRqqHyU1O=2JlS1@f|k#qVQ zdumecms7Z2YsFt4rheGaGp(&ojM7}V|K4F3f;q40F?2IGv#m|9bDAZXjxNUY`PvTj ze7c&uj64nimixBAuLPexKziPLJJK5pQ~O+Uf|;AvG=;|DzjiL4vGt|hhB`y6w+sxZ zQG|&hcvFDdQZAg}ds&~(O6r{rF^hXMU=`In=a#3Fj#>mdzt*|I+~+b<*D_@iLF&xo z+G0xH&jD4vP0b&0qhvcpu7k_`W8{KeHv;Q7J5Fj+(9N%Dp4K2FtX_u>hlgF}JyxvnmmqFKI$s1+vSJv!#yMcx#^jf@K-{K8}T zU6@CPLXLxeu0C)-F_i1Ej~hR;=c)2CJ0kMmF49divRg4Y5{}26$!bEERE=y9<$bhQ zJciq3`DC3-r-NI|a#GJ^lxK+(hHA^8Mlb|mvg>}x0UmY!Z)@4QWgT^?Xe0NdajnbL zQ11X6gTq~P=axXBKhe1mnr)E~=ax1b5W-3B@Uz1f{lNCFj zwG6dcizne_B=A5*BZKsBmZuMpT}UZNa3g5bxb;#qa;i2s(Phjb1{(ZyZGBMZrJfi( zbSb&1gHMhiCl;q)KO0p`bVbOwyq_aTT9#*Nm-hD?JFJ196nyb&NTVUtme#J&wc#AO zq63fJD2-bTz)YsT^bFbx8oGSuoV)yNcQ(MxADmBl-EHPD%c@!RUhsZxiT5$bdZMIm z@cs6T<(a>34CvO`-`f5Oyr;x|tX}_zc8Y_8<9{;l|2&2L+uwXu9zc6V3SAKXa(>r$ zZbWEoQzAx9>YkMS7~UQ4npE#rAZi|}OUrYg^Snv%+;-z3*ya#w%koVNN;=Gw_O{MJ z&0n2%TE6~qswhKr(`+W$+)cwdubO&iGX7KmPctvb*!a``&GvS-OLfu|cLVi#vm}{f z>av-sqpge|wdb|H^EeZ**43!3{`plMDjvQ$pL<)=uw66oPDtmw%0gv^klgH=`5h-+56Uz(7EcA-gEOf1CjSK(v{E5*6y zt!q0v|8w42!yT*ZtlhiX+!*-vHSuy_GaK$27;4|-z{kuHRf9r{rkwS<<~`s7!yuoE znywAJ@UyZ!K%oKlDAPqw(hTZkN&p3(8T?BUB6HY*yuO{WR@l7u@R__C-LSvb9#v3; zy{u-_t%8sup1X=sjV=VY2?#lxy`lJNUjdu1TjD@iaQrSXVOo|2UrNu00ZYXt&rC!g ztF`+ywm2%b2PS0{p>81$>?PoYL9~@NCCB>NkVm;uWN1h&9ycztShZJ)AN86ZFWS() zBrIewA{^5=wzRe~4IccE`^!^$Xe05+qR4NALw}3Jx#{NM;5aDW-cW@uKE;FIXQABW1qO2`*Byr{Y%WrbJB!A>gDsWOjr*XXF;bOr&ShE_|0 z*nxYo4k*op$b4;9s7?)WY!KSA9C6&DUjvb?WpF2GZ2iexc3|0E-D~nFWV!Hnj2WB` zo7&uqnT;xxa7U*f*G>=4g8P_K*`CU*YnTt8Ul^ZKv_>*YbG>EDQTZ-?M6u}K{EAZ>-jQLpZ(h%`yjDrzA=7X+frO8v1{&~5WF}jhb zgAJLKL_FQcedFUF*sVVkPk{DR@ZM4Rq({Pdv4fp~;-Mle$Il;pO>aI;I`OC}dLw&j)^Llcunx#J7>-`!Q z=t^!$Rj}vKT51Q@Mc$KQYK+hl04OuEoul85&Uthbn#T)fZWcH9cjdxi02IHk(G{nI zyiqnVd2w^+YO;XWfOTNa3l9shr$VxD+1+S!)g6DnS(c?-!L-ZOw1*uwPnSD%;!4G& zDZu8NRao)1T_X`)5Fj9dT)%O}3=W4w;QC!%Q37BvNEtVe!_62O(CPHpgzjwpD1Kjx zDT?2c5m`c!5s@jW|2k6V(C+=;0&woKIXE~Diu-p*wSN`v?$@=lXV6n_a{QUUePB@M zx}cmPc<|nQ^~tzCLRh9FWze#u_2cq}Ac;Vimw(b?OU0lNh^JPPR=LWq7@K;9``6#Jfk2*BQGAMM>38ZlO0%us;>-_O@50o3kBl>@I< z)V}?YtDIsqg*D|nHu^5;^ULC`?JZAFHRvbob{qF8figz&CW})qzfVf(y?xJz;m)*S=!0Lwr<#CsuxD(Kwg_n}+AQsAmCY|>0ArG-{mTUUcuTkS9p&OW05b@WS-Bj4#=IzaF#XN43Qy0P%1 z2Iqy6%~;ZEj?%fOWRRWXL`ksp_S1lJ^_?&zPLpU&q!F!Laseof%X#K6KcH<46e7Pp z8@>@*%cpJakcC}`zRO9E?^qtHOAN?3%Z&3zmRs1321EP1s+(Eb_?W8lJV@%~aS< z2Ynfy;#y#ZJ=Pl@Zoz0cFI4`&<8U5FE$Uyc<$@@b)#aQfwNmJ4A#DBbE?64j)Qy(-ksn*WZ&_8JGu#NQSLW0vWD$OSCplpf`^oV8C z*1*`qM+c}zcz`}O);{*j!6;NBkdXJcgHbY~nn+DY8NVKkg2wXqcpCq5FiJhdEmHKz z){l`RyvdELhTd_>UBZ_IcC}z7dWrttyz_;_VGa;A>HO3In;qQ;9l@{nxfD_8mLql+ z+3|ygxw)_~)67zNbK{CI%@wWpe_TiYL_PvbUxk`%WN;<>&8Wq}+M9LS_XgYiQnuys zv?2;qP|I|ZiYqrX9=m}fv^5p_CBHJU?vF@D+s+Z5jPk24TT?>&#`N!23dUWNe^yIz z#p4xI?68b>L-B-nLsZf`7vBqn+{&8T+M3D?T+=XPxXJdlRlYeSH&440<3U!4y(4_$ z^HX!rt25&QSq}77-K%56S}qfE*XgBberoE=*^4nlYi*_OCH~kf=cf&K6nebnv zUFI(65C`=klTq#oEZm8lCK;&@rIDi0#~Ejx{SeQ13g7(iK!54fRgK5fEW@YI?{mfO z{LFLp{vXyN4i1k0;ST-&VD@hWukPq)o`}NB8ip?D#R)0Wgj-A7Qie5{1s9KWf7Dy2#$2DtFTX>KSxw7+F$r zsaldt>=OP~D{KvZA7UKSvtd}AfQK~im@N#E7HoP^`4U5@7ijILyuyb`x!->u_lai!*l2+7g(NyGdt*gR62;7 zys^Cv=(5TNB`tU7f4VS1dr&SKh^+l#{rS`Ij{Eq)A#ev4i}cIxu8Oyux3^Tw-*$Hs zEpZMc&qU+D?e4~Qn|=O7vr-6o06wUvkYb7BEGFkrmeLs4Mp4 zMI{{|!ih(|o&o*ZJH@e5MsNswE-(7p$Nw)DXY!hZgX6&d-sJUfd_|TH?Wl%Chs>?9 zM(*WuKlo6c0y7jTVxNyP#cHdj4;%s8P?Q(*_zAB@371^+kN==QD1Gr}aT_g9ImLD& z-<ucLNsD~I%VIRd>0-#?+*-laSsZ*ry?p-LD;W!kdsB zN$}mywJt14k$i1G7o-Cw)Rgny{N8vpV` z>^H(?e^8(PG~6HNwM+@wOz>Azm2(&E&2IKAR_Y{r45;2n&$!@7Q`wPC_lk4YNPF)B z1&=QUr8(%*v51(bt72G#q(n3A59m{|U$|v{t=5Py4FrsP&(QuF;I)S80az8@O+!*P zW|lR{^Zg;hm$8M0My^HXCA&INA_@kod4%fadkS zk#B1Dx$^w03qZ2usdoa`jSAuTLN}b#E03xs9Kd{1EknOwj8H|SD(?tsmXHaJ>`xaU zWh?VIk0A$ZBJuUPqQ#|AzrstR6@F}06dd|)IF|0CJ`+qVs!Ve|X1j}Kqcl}mDze{3 zvMur0C2uteF;CDqqz6M9Vz)T#5t<;929FU}{*PRoy>1Q;jsyF9qu0MW)E1cD5lwue zjrB~C^BxUWsTEmJ#YbnT_;C#jS zIO1s_(6=+!>vZ81&q+o*fnB@swr1fcFFQwywhsn(e`p1n(*?d!E+A@}uDO!U!kUxN zh62w^@POIYtu7owdRw!n5caw^3z%;7@a+B1FK*iJEj}|Gx^%s^f2nX+w~4YVHdJaU zTD>HD0|l;WK0h>}cm~+&Yj~vPSye*AnGCd=mA9geO$Qv=r*}iD10Kl6L%y^NVfNLY zn@>J5o&JDH`{wqh*5gf4UNe=~us(i5`1Lm7(6#l7IV5seIyB?>?fQ|(6qL_98eYrfQ#y48|+@nXVQt;V<~mzuI;kTDQ;Hx)CnG z9o^iG1oY-x#!BG){2kyhX(;HlRaH%82H>n@56;}^@=^QE@r~$8ixyS~>Z9(VihlLf zp9iRS0BHVs+t*ISjL??xY(5XzQ0Z~$0XEokMJ^2Lw3_0cL63A2AKrn|DRA-oeg}DD zChzr7NKpOUK37tEX!ByOgGyeW(-NV0y$1iDk7+y;G!m@>?q_Ao1;SfFT^TCAwvr0# zXP4A5r;ux)$)qlGG{}-AcjZeTZI_@b=7p#2he}5sYN7jFfIcP5C0kvmNtt<)M&;p@ zK&|7Fxa`cn!YtsJ9gwHqa~0codtTy^)+v30S@N-D6&9=TTIb^b8O`L(xX0G6zai@Z ze50fFoAD!mP`fxdIR57o{(HmMzu}Iq_0Ybwx^#T}<-~rjWmi)_a49qlo3p4X}am5UPqos%~~>7639Yk8{sR>o(GndY0=0An-fk zzWMypbe=CRPev5eMK>{g!%}0+XIsn~M)C70o?2J7isZ-gg0PxJVqO^}StT5%qm)=| zvpE%&1BiW|9Vk^?>r_f~T;k=jAeCp}dUubVD{z^}u&yKTb3Gmi zJ|hZsczNa4CaSn<7YD(4iKqaQiL}wt?+y@NCwl47XmW{zU2x)ZVEjBweH)K4a2AHQ z>pXeyteafuK_#BOT=%HDU_9S`e3GsqD(!44e7yJK;R@JRY0|EptQdb{ zb3E7Vt{;;p+C3LyBXzHEIpt{=*xoxdo@nL{bw^L|81&_VLA3tB6BDvxn}o@P^y8k2 z7KE~FxVwH7>6^j-uyk`y8t35PIIxJnJAVC}OW;l5k}TCxChd$xOmL}yYU#Twf?)bS z*RkdDN+)+~#8^6pJ)juUg(0@=FgktL&ra{z{&Mu6SZ{m&%HbqHOo-FabK06-vxH4b4XV3K*QI&Scj+f8jW>qu8@V<-&9$$T;y!xwe zfQW$k_la`&wxz?t71{n!uS;?F z|A>zLNt7Sf?dgZKjf3wirAN-uXUq=$SiS{R0(37u%MPpcEu6WmJG;*%^s~?2SDrm? zt?r77gN7rZf)yE=D_eitcSeUiJ1V^C#9rvf%L+0qo(De^1)Gh9fo9p!$5s~(rPPo< zY?Pk#kxBBjH}FjIavdPf4fC6~p*w~KyDF+PyHNZA<(9aDY3`&q2Z%qd^|twe9F*Ps z?tD#DrJ+XS@a4`m08l%TQZiUi)2kis*Y{lC@vBd8Dex}tNB$h)lH{uaDq}kPZ~2b` z3zF6JF4upQTBh!mFUH^6a5rS`bJ=gKA0}(xYOcVjr~BEw0q<0b&LueJxGAZvI$MYq zdG%MnFqjfeB;`A7?ac-=t@Cw^vX!r?-~SJ}I5XHB92^Jr4`#4`<1zKj?2^43+nzQw z;($=g4Yzx1XPKYeMU>HA@!4KK$4USJ3C-SHUxjCtRe~#_guuA*-o4g zuW^0k>`;L>pCt!TfJy5>6&&3AaO<1TuTQ|gOP3vB*o@cnOpjyoZ2IRcXfhyITz#w+ zs!3hJyw-UjlwDzT3xC`3L4GY@YAQNO1Vr~t${(bn(|fT{=)n1Pdts7BXxI4$ejT*z_5s5#$P`dhrnnm8%uicu+yuhm)rdke=Jh z;frv=!tdBh7#c!vV9vCKOcJbjlVvTvs9IrH(PsvZ&gJCmkS|=TO`HxsA#tIrCR@A~ z?3SgBk_+?fzvCGuXB_k1!xH@IN-TZ@9>20DHHOo39N$wP-;EG>Jrm-Pk0dri2k4~7 z!~~jfOw;(hO9GNaI;MDS_g$NIXY4W=k`sGJxZ*#?;@o?4aBv)0#6K9y{?(yEq2gI< z$7<5s>S%j}LbFXcU~IUZ{&h{0%S%k0@zEE=T!$OL{#R47yD2*0yKg#twAX9}G?RWg zT4iDtg90Q?9aY@SS#<9cKDCpj3J99ifWO+Vy>q_CxKAroyS!|E0q#Po$s*U}y1S|% zOq>%G&}b`X(_rVzdOA=8wE#!CAp5?)=z~mrDOuZZpKA*TA|7j1=6;;99Ns`9Heq+uvZ2VLs2h0E#UwaO%E9%n-_BDapP*Q;^u*%V ztDA{-1N!N!H>dCY5#9PT92)Jw$g7hOOTtYN*QzslTX#$7Me8aR(Rj4RQ$>fH*`V}Z zQl^-18Pz}gc~3p!4X92^|~Z_xV(v)RA-N`5l#+?aQhPry`t4WoIWPSVF(#A)^;QAogte2a3s z)MhKO8xK&qVihR`a#5g_N!r^wfI9%}dNxuz)w3+WE7$xcDn5fZIv1^N2jg=H__(Dd zA$!lv<^4@;+_1N6c0|QpQ%AKhof8gEDCV{lQ!Mq;*jPxwM*7djAwX-Cr$t$H6k*jk z7=8_N^Ycp-E*md27^#Rx^la+I1PUd_2Vc0}ZsS$uJ^#ve;jWfyX$BdHCdFBwOl}4e zYl>@#dGga3qfzD&vdtFdV!g=C2(FP+YfmPw3E}*$%lm~QklUoV=B{QYUy5XB14JjS ztZ`hjBQS;f5)DvqgQ9lPz21tTxlAcK+s4HINirjJTYzhJ<&WsrpFprTn7$FEp4wEN zpZJk}CJ)D+3JLJiE_GIZ+B-$+*^s!9(rn`MWTetpHR9)SNe7gtwR-v;P>;OtS@(q5 zNd#1K+AQF7(Ig$tsC~!IVYcnezY~zS!fyW7P0Bq`cHFBLx#q6)ECVI&c@+b3#loE9 zoBP3CgwoRTT!VIUJ5m}EV)@D<*Ysx7?axoIhvirCmg>sVM*&uuJqbvDWfu$<)az+- zRI&?e`h$rM040I>`qRp)5bHd{b<=osVZ$kJwC-wk+XUVaUG8?~j+*Y#S%(gH0IpCm zt;dbjupkuu#>Fc)%BxHwPk%um&oWlLEH6lV7qSkgDs7oA<8BAa zszDn^ZU=-}cr^C86WXGWCT8gr8lFn6XI!y&E_pG?^h~tK*C%Mq^du-meuzD!2!DKG zv~WOE%cp$(c=m?OUm&&Wj0vFJ*mG1Xgdj;V6fwt! zqIrx)FYBw|W|~E>`u^qfYdbvUtQahF*;qKG!9~89FZTLsj@daB*?!2zr8q_U_|rh3 z#)+_19N?E%ds|z+%md&wuz990i!e6zS0itq4cG|Ny}aYDx97T&{Ep0sf3uuRDW?TN zOSMk+#)*O_`Cu^Id~t}G%tWCyxPMf`cZxwa7Hr(-lB2k04jR;WFtSa(UIiTF{TBZX zObCx1-bnIyK!WDeznkIlbEI!0ec+DA-`T~>3WPm0WL_88mP(*v0m7*mxtj!D2`L*I?-y0cpa*t zd}^Dk^stL>urw2sXqgWp7|mK{d|Fg5K3x9k^JD8S+fr5SY0htE2E0jWg8}pT3P>6O z3ASw<`Sg+TdM|3Q@r}0^)wQiibTfq)ts_GgSuhwJfc0F>MH`7@AX!JEp%QWUM?7IDxETxqIo7U+i-WmkM0)!Su# zz{Ft>V2ys;|IL4j#+mHq;NUp0e=^zqs|bM@1fn`*E&1M+VbJice7GOX2LPb1pI?26 zN%uTA-Glb@_vroQ%u?GdJ~y;Nq|@}#k1@H}zyJ-igif1ug zSnmm|7I{+srGxQ0C8kYE*np;PLDUL2CG@VP$dt{`Ev5yxS4#Cj?OpseCX*R9FrrEh z{wYS$yww14k-UBBtOBuuSWV0dgg793alQQ3=V_{|E;zUk9AxBq3;*e2BqtY$1o`Ph zK2?l{I3KCky}$S7U+u@AK;3xb$32OB2d%i7E@Bsdj(m;#Cq9CWY!H zG!;63|FNJgZT)=Z$+0wo6JVbULd@_~HyYIuyw~mGBv5nL?5nY{G4>c~csPV+ZEf{> z$ZlxJDudM2)D%3K2O@>^UdCWOdtaOIO3eYO|F3?xUnRy4z(1L&$7t ztq;+-oklklde->qHdX^F@ZQ1tLa<+4i?gq4Z$Zh$xhNE59xnqgV7Xv@Ai)qHfTusi z5^X!vA>)eqI#%=ucf;owcc_oIVRK1p-d+U%>fU-y@cYT-?g8Ryr;6>Qe2aH;hy}1) z4Gsoq7WUzNXej$Zf~0k}d5FJQtf-7LSNQ+`juRK= z6?sgYB4o( zR_=@xx%fsxa_P$*)4-h>xtT6UL4opXC+ib;CF~}{KQOJ6H)0p$yD;fZ8Gi8<7$(DZ z;%bexxf1!2p@u0$uH4p1N8pF9gX0V}KB?eiKgnu$9D9xt5fvmKgP zo0p>7nHK-N_M;*d+1ohy<-|UhJ{fA)tex1iB^O@P1$LcU1G~B>oXUMxb~FmEsmdUO z(cR6VPx9T%kjp=GxT=ITm<=cdzA%Zm?ORMnc`5eYpkLlY9UlrX7DDKUSV623Y$q~o z>aTJ$zWe<0?%_U0kDX;?p5Hc=e;8bn(?Ur<-(PyhB(ckbmay*iF*e6tRF(`58&ju; zr^ecc5N3xMgeUp8O6qXhG+_6jLx%&R=yk+VzlhTT*PgBv!ao*%N8P;kRO1YKy#(HmW(}S07A~zVE%X5U* zXaUQ*+MMuIv~fX_q)}iJ+IBKGzL@96o6paEs9NVQOPl?0vGj-3ss(D86!Uh6OFr1a zTMM;&e1M<(ETppn9cLUmfqXhZosBze-%Pn!pH|z?VyoRs=xRka4SOoP9~;_8TslOp zJDnzQIjTujdHs^h(9#BGhuN`Nee}wFO-g1lR^{#Hx;@4#Rb{^}?{h&_2_l$@7+MS4`fdq({KJ1Hg{iE(%2IQe+QvkeaIlmMIsOfN3YI@*M{d=6uil zLx#Xs`T8$WmrodcewBxZ^p5Y{-99>|hjNBFt6HE!u(fV7o_^e1E{cRKC_u>$)Jd8! zmCRsG8lN;vlJQ9zH&qJ9KJt!C0K16CLTra^zjW7pGQ?9GnEj(NoxGa)Ora)<48|68 z->f38mbEcc^5I@7Vb}cLSf{e%@Wk8RZkvGt)`}Em9oKw-itKDB?xw2Czu2pPvx|P2 z+g~;a*^bH5GPJ&YS2c2ON$t|uBn1Y}=nh`_)MmcdMsRmms6iSEU&{BsY1K2JV#hyS zYQ6t>YuWsKp4HzDKm!D~Z`=>gZlzB}Gzt1_zHQhQ>QzdTBk)|w_k$U_Fk}kPPfn`0 z8%`P*+;c}Sh?sjO(3+V&Oj_fpv$!P58xPr4y**`lfc%#-H}Fe({h87`>yRcv(dfJf z%`*^2>G&fz*t(hnGOLZP(66N zkUK73VAyr(3GKc7q18HzY*!hN@r6p!1U8lGAAIHoQ5qVORH(YUuAz_AOh(nZHhI|C zSj4{AF(KG|D8rg&Ru2iVe=i>A6jKfkjsyFrqu9SXG!~x{aWpKDJ=GW?t!E}o4tx1w zF%TFk(FYX_1Fdg75%tkE;1?Ego|_$PtMthLZUv9?pL5os^N*2?YeLy3KvvX8Bln77 zr8zVG%_%rD*7cg74VgF-S5?q1s+C+>!)JLl+t~&NHXqJ7AswZI|(Xc!PR-Fx8 z!R9(Uy{mzx;9cSGcJzotAM(u0v+F*}vb-gVD`MAHvz-wD6@^W3hz}kD!l|3^T?>2j zueIyniyu48!}Ra?NsyZmaIJKEzA&a)v$018_A()vA(ZLczc7IlR89ODn)KR&)W0@2 z1e-NL;^d7aZ(>2SW7y-yh?u9}i|Z+5cy0?Znv+ML4=^XxDL737^D+F1)$UWNRaLa2 zyNNRaWok$^?#f_4D=qI?^KcK=LexAm$!BfVolul(fHHo^r!+MF^HI=?2 zb$oKyVm0%Aa#vUh#%IC{+%}b6Vj;srKKoo3z{7(*rGpyR#N%TxuZ0sHosY7W!%s%P zFC&nSb=+Id)j>>0e*p=DGj*flKWq#dm!fTqO+jh`=La)zfTR@UU`U64)Nx$)y}tZg zQO1;k57E<+Nggc*1E^zX8{FUgUNX)YHU|gCf&KF_?B8&|*fZC@wHnj9@E5x!HO*1% zTR3R9&~)liFzrwrpveZ_<;w(|qw2Dnw) zC3a!Ge19;vgHPbMt0#%k)oBfA;K~vv>q%vlUd`o366k$rh zeY5)FUu)RE)uo_dNj97+e17QA^C`I|uiBlceXg$JH2X%(DpeCN?)MeVAYHOf1X2N| zCEVR12hrV7OrYWu+){@f#*PA>i`|zG% z60L8J(?xo`7cS#3OMD5jW;DwdJGO{lVJs6B_4m1?K}i`4D3}4Yt51920P(qv9FFP= z%Q>)#yU5b7ycq;2-Q1_FH?!&M`2*#}vrc$eQE{=!^A$VHm z14C$)+U2He1aS5Cb`@d4_X1&dXs9>e0S8F@%J%mop84y>fNq`rt?i${drIub>h=Fp zzc@HJ{$IlV&!@3}!*4a>ecwN~h1ap%p*jEx$Sz_Ad#bPquxbHuROUBJ-u-M+#qKzA z4V)@HfZ1z`&l9WNFh~b$ZAXOR=8vZW2p*=VudxTm4wqzzZMKH-qP#r4wN)x76ni(M zGZ)ckKJ-*79db4YJuiND6OE%y#((SN#q4?n=Jo@6CP~D%m*@Gr>Il5fnt1d1WuCl0 zyY8_$m=ijZy(Wztih41wYdgLZ3BLWS+Ntyo}l{!~E@hQ7}w zgfJjrhmVen8;Nd-aut|G;UM z`q)Lzy~PW3vT4O_%PP&Sq6JEDPl%f9z0y-wOX5WwApM`@lI|vAS%F%2YDnc|>T~Hq zwy-YiMRn_tI89sbj`7Ld(8_GbX$vnc9(`l&m&)F1O~cz+fiEhFdCNK3=JZzNa8Gge z6(jkY^trjr=a<6z5$F2nS`b4|3N|fdE-tLa_cLV1#o{9aY~XEShv&64y{IY(wtgC_3sRezYX@ zLMXnRUe^Y+@ag1{Bl4t+epyOvKx zH3=5Cgr0l16(N6ja=Fw8FX6N2IpWlgBb7-cfD6L)yF&cM(FBt1G!3g( zg=`~%k~~{3*4OtW0Eyl@$P}jNirI|sh)RA&fDHl&F8(h>a$U$;^DG(Ea@`V0E??@ zuOlA47GPX5G(K4CHXOXqRcseimnLdN;Z~>ZzW*{YJbpp@cDHfT6>{A z3AJszqiO<|PokB}A|&J6Z!2wRN6{rz9=6@_o^c#2*@(qOfe~|V7JOlFQv#`pKfx*+ zXyl#%aYLWFZ=O23xskHEM>WE()V;e*i|RpW@WEDDSEk;R?A$7I*1jlsR$AIH3r5<$ z9&lEv^=`4s@C-<75kCntnH=VT}qr`S6*B@H5pD=-w*tR3KnnzQ`-}D~B;e!6OUFXH^*?1eSDf zhHhrg=@uCgv1e!_SM;HcyPuz3SV<`Eoh$pidYTDx(n30^ro7qNr-JE8t2_~>zgC8( z2B@kAbXiqY*Hl;J%W7KYQIuCDFsCU;$X6rvpN{ZGGzd92>~p=aA7|@eZ?*VNl#Hoe z;+bW&xoUfD#I2=6@WlchDo!ldO$}2(woH>Hoc6D{JLd-4iB-&$c|BiR5yBf=Hp&LAb>w^XrJh);EdHpZ>hH4|dI@n9 zMXVybUEKs9f0`r*E0na%c8Faz(k?YtcKRA)*vPloH5aCbuUa?E!n8ZzosI2POtqH1 zI~-ppS?2$m9x?(TwKILqfH~G)qgo!+3?=eu+B@cXHi9*YcM=CvZjXC>ex2M~3BfZR zvH(95F}8^e+f1wz9V~&?Eoqbauo7Epd@-c{>h9IYS_>Ot;Sw|R&N=rITMGBN%n3(l zZJ2_hgQRK^hp|cHnCjN^Hett$H1b&3qySMkbzB_ow{(aOlHzI2<+nIqG^s4X2 zyS zf^B26ppn+*)n8ECQsT-^rwtDIg4kcM2WlQFZw~VTr9S3x!g^ ziVB>02;p^y@^Twr_Qgisg3nLRJzEA7@SPZ@0LN>!dP@guH>;ZA`U2QU9 zqB33NOV1-CZhXu8yE8Wb*x{18=;vAd;MB4l!=m} znGf20RIMCWxe?b{uc~MrDT#0bixv!aM`=OiWW=#hkF&+p02th#c2(<9YSG8FVPiIgzEdt!7I*h+`OhI6!_lrz|Z;k$G&%BmtQ!`9JCwk%`+hJF*1yDKK(n1tlvLy z_x^46)GnM~L$9(}%uWJ{X6!wiOk5%7j_LGol zdB7-Sv-s!GgKoRWlzlPxhI%?z42LOmbcfTGUG{6xcFyHMjZCz_Ap?NQ} zWw9s#y7zGQKiE>?Jcq`?!EsRB|HaAeUma=^ZWLc^8?6>K3t{bZ#oJ#KE?oQeEPFdb z)t`CP0BR?HTW(x9*HukdwHO^_!yIaHu(8TVAhX4#WnUMBdp*M@V+uCEORe?e#!&ri z!{9EBt}62}4y`U%gLl626ApaRc6-?-wW^%Y&cN|p1c1KHmqd01_hkFPL1`$D-UNsQ z`qTBmH^RWruk>&({;=>V`70ZgzQwShIg`nj*4^`cN@u6ro@~-Ikd#7e4K2#k{*$Fo zr-Av(>sw*Ht8+A4+?`WVnx#9G_Ytim%ozGRDOjUm9a(#qtZAsUNM69R4bS@;)VY>H zw94@a*}eb8-kry@neTlA*Xc}^F1n#;nU1aY*1nt38LcQjh!!}V8&U^etbZ26ILJUSQ3BMb zWzc=Eej520AKNyQVe*mWKJ%q=x1wmom+KxV(lOyC2^yAo);PMbx}q@XXqPW7ubziN zOvJp6zjt1H{h^^WF|AT?m7TS0QuIXX1 z^j>Y?gvOgTgH(ijtFL;FB9p`#=rl<9o^yb^7kI=>Y1s5t+1kvd*TK|+i13uL(?7A4 zrShHCuMXa2EZ6vF(TRmF;bW(MF$;fYV0M$an{J^Mx^`xHtru?`pIS&@eRw07_oaJ8 zp-5a(8w0s^u5S_My*79%D@`-x^d8S;jT3_fB*zA6&4iW^;lM#4t(++q$q(N&(7{!9 z*p=Zzqt$7&vK(*mzW*fU;k{^w4jnqMzu39`Ctf*rQ zxd4X(TRFuqm0sTYZnIZSVZRK{c@g}Qm^y}8S@^cbnZSCGR$#c|A}vx}U8Oij<+K^c z;`@=>?+3LBsX;rBk~SogR!^b{m5^|tCg<#1X!x=3M#CK+tH>o)q5!4JS8Y*-*}toH zE4u2xz?kANR}ON$Q+#IKdMUTNR+jN{7&~hiVV?{Ae`HM7oTGi2E*p`BKwR=&H z*^<=y80>FMBI5wU7u+-yL*Dzrq>1w+oSq){OhKAWxEFJG_De`sAGS0=Ss1lm6-16% zML0Tno4%;`n7TtDru3H0DA_kiznQb=E6hV}iG)ilWFTIlucK8hEf5WE-yd+P{z;C+ zBhu2>@kN(hDg!OG<_Eej!d=8&{WVWf!&oGn;xK&~Rkmsy-y23g7dXASI)T#**E2)N z4-Grf@h}*Gh%BAzI9IXMv~X%MJ4Go&?%m)iJI_)7r`&WXh#^WGrkt$~EOQgI@laT_+DXenlpxftDd((Y(*l?`U; z^O74WBE8K46FghK7Pnkg^%-QxqC_;JOfHNsql!Mj%l3HGq|rox53tn71dwdaKeA3) zxXDnt;CR-raZvDanqG~sP&pOrIqA5o%NTx+i1T>6X$!EcKzycGB!BZ}WO|s1fBYT{ z#L`4y`floL!omJU$~R~~|7WlA;XP@G4jnqEzude1r%Nk{mM>!U;&$b`dps|epN1Jq z%}t~gF>x)`6hKb``aH_J4@`Tkm8jD!q$wg6=PF{0nDkI&eTY~= zM$&kPU=zSTfoa}hdQ+kf?mQ)p6Dvr3QTIuj=Xu&qs`zeq@$z>a?-xw8^=TIAGpG85i}afGytfhUCd+#x}8W=vGglwbO#Ei=S%U zEu8aQmoNjJncN;45=Ax7Mv*jy>Cz~N$o1{ZWCx;ejy}!FnH~4|`vZhuDQZlLt8L%# zo%rm%ZRcTaHWI0J0uX#!0Zj1CvPB!1q51+-cHYAnY_>=E{u~D$bmbxw# z`V9290ViGpmvXX>axD{2*FhtLxI$^l6>mnRQETo40mH_1W8xMpc`Nko#HBVp4dP>6 zJ)uriyulR_?++y;N({OTxXMWJX3#_d0aO-=|ms5owye<=;#nHXSxKV$MNwyoz=Vg3D?DF0CNx^j#b$!E)tDDv67 z0-oq1ttg3zFVgBHCx9qIf=Y#6SmZ;g-T7r`G21}zNZCqD2~ueyrwSS>s4%j0L2k%# zD)ZT!-Xb7cGK!OxNG1|%yYZ89J@F7bl!F2bh{h3z6v79Dg?b;|dAI*^VG>D2SBBCT za{ClzT`SwlqkilH({R5I1r0W)l0*gMA%RXGD_f_;cE1AjO1F*7%jELCX5tLQwu2j` zD@uxtM@@acSBM^cMy1$Smwbt-e%64{MJCDnl&zNPWEWKlf!evzqk}b#OCNJX)l1#U ziQPGq@;w+|3*Ss86ip*V^s!hO%5 z)Yvyo(8@T`O$fRttrSOjXVm5O-jc=9L84t~FVvVbm$G!Yg2BZZDpPbX` zz1pVyp1`IjTpV_tpYCV1rPVX@Ph6@Y%em(-a(l`uD171@>I;$mbwZbaZhMe@FL*i) zv}?tYi)_5q7E7u~OG0E=78e?jMJ12^z^xURQGh4UUm7*PT-T(lU#5 zj{Y1pHFiCeWLsMK$G)&<3x|Rj7qc%!Oh1r7IJfuA%wzsCC$b9TNW^cVSIo7h(X zc9wnr;G)DCC-*{mm)T3vq0Sd3Dst56B;A$pry-PLg48O7nKSo4xH0T#yM!XvMYnU* zE=E3pS9#caup->IWehiRy5=6K*H_EgrqjL~1_RcBTl>exXr=lFokKdL3N8UzO3X*n zD7lDm4KdvuDa&ugjjPng2yaEY>O)|G`Pp5LI|?E=NM9?k_`^EEEc;4ebmB+tJ)WZ) zK0TakVN-=}^F$zWZEdB-UqxZi(Ol!!;{z-*&(YVgucA*=q&HN$UG*;aD;Oj{-Bfwl zZe31prJ*96NBR{XODHWzyvk~^mB}|*JC*x^;N{G`UTUV2m+Gp4)tVTh2D*p}Dvvr# za}0Soerj>$u$zo^*0c3BUT7f%X_y@+W=n)QSvRA9gmT;A|sO-MW8&dqToOv z&WF|w%v{ikEUhlb}y!WRXZJCs6$jE}x+rzG7e`QWo@ zxfTpoAgAU{7Jq56*xIF;V4{DaMnVIxRe>9z8r5ww5l>h0pK^4tD=&L zBm#T!@@PWKw=2Vu9UfAjYTw`YmCb#`@+Izi3>jEIAmf+ZX%#ol$1h`-M1Wx*D^Y+n zAwhqov3!kh7vAl^-eb2$PrHom@{H|BVzgaC`?QBs)`#zr2GkRV?P@R$8b5d1n@gm^ zVRk)8jalwTEK*pLK1P5dpgR$b4o3@Bgm(}e)O@nZuCJ`>z{)6 zk+`4!%mb|_hN=W2r%r0I8%`NKHSRC{X$v|XTtMzuu)-vyNeBJ}R^Ub?l3U6`ugCil zAhfMMznl9CH(|XGQ}s{q1&K$Qfat25;bj!lzXmNoKzP0D>yc3++iU)AuR_i0Kof3O z(}O2Y_yhmf3SXQLw``7y7{lt8uRD=^ta;4>k zmgU+233AeCQ&+_+$9V_;i=2m#^gMLv(19J@M^E>kE}9i*1&;U+JSf{?cD?_s?F<-o z2GrB*{Xm8ODGNAIiWjOT(NZMR80m0Qyy;P^6%LWu+E337PpZkasNqkUrlGyR&eb0e zJ2_EzL2PGI%A4d>5tx@zh^$fKMd$a?t2!65I(G)&Hp3}eCiPtjk0tJ-w9b8Ko{&PL zwOrBm<^XVbU6$+jI+Oda_sANE-Bt`?9TV{DRofui`7i?dws$EdP=wix`1>L+xRy;( zu|t8lmxwb{`U%xd<+Uk@JrN5Eeog<|^f!l`8f9)p<-)lexI;ed$cmF9$0<}&{+DJ}XJ1sx% zWaKh-T6^qNwDg-fj59rfLglh#YSJiJ=9OpdZgY9qgmC1tSJKvVjA;(vSbT}u@psab zlanLO!_^_4AqB#jS~Y_;Cmrk`Gldd5Pu~?V6c)R zu+2(Bx0?Z0ERBjNTiducuDJhd|KePhmG#KltH*m1Q+teLSlcvf4Aj6aW-F31%pd{< zp+Iu+yM?uTs$_^wQrik)(U+q4hC~H8xF@S=Q6}8SPw(-JVL>RWezKW%(d#fJe zh4w~L)k|(L&YP)Aa*sD`zTf?M|MC9`;7JQdBW_o&S?3K_x^T9<8fJHX+Xw}%DF)VR zYR^70<1YJObsQMe$Wk56>TEXhnmieNt6o^m1`ie{+U)TNf`mmxpkVv2>8qFHj3{0u zdKS#g4&N=qmXz8qUp?`Lm0x_V1^!{k;Ej4;?!6|EDASYVQ8?Z&oTYH6`yidIax05=`j&q*l(F(S-4( z7n9pY)wJWYh+svufbC&hAbyTw44}q zwO+J`>mQ)n)6^)5=qJ&x(@N$FxSjQWHL+-*q_srBf{_M$M^cRv%rJXa;WzUI?B{?d zpa#M$x3-dBE%$9|Sb;jlxP+26!mA4{q%q##+}h^d*2xUz zKm}rE>bwh9*mvhOp<-50(V$nPKJ6{yI`?x_nQ$W4wlpR^5l~s0G48SIZKC=S1u1|> zE3>BT5Z_P#g-6dG-d=v_(4m8p*k4!opDvx>{^OwgW0e$(iHLxFF8w@neY>c9sm@vh zs#`mR%3CqaPGfJb{QR~wUrFf~2%Z@DqSt#%&Y8-GZ)j8MkZN)Idc$97PH|3Q!07`K z8Vm&yYdXnIa-SW+gLkk#!LRLdtsH#r5>4`o(GbrV8ML>_*|^t6zwW=j(^&me+dppO zIkNZaSGdK(dRj`$E(U0H<^z&l(aRxSZYZjE-sjvJi$;;^{H3J2n% zf(E8z*wc2J=*#UVJB$zi@Q>b~vw} z*C5jEgHoCXegz3)R{pUuPe|%{3r@So@rneoxkqq=Ru%Xc^mUU>z`0H!Vw}?Mn}Xj6 zJqNZoA(KDD5AvwflM4(iX$k)Tk!!}CcMO}nH!f~J9B`)i9anUxS~fxc!j5d~q*}Tt z&8nG;spV%}FK->2fAgWZxD4e(e$yr;c?QT^FYqwx6#x}Tij_5%Z(+vw&@Q` z69@aUtj|Up@UN89;tB##*2IUsey=Df;R?CWAKNGAq!Yl|$$m=2*x$l;|3cQo3FU_l z9XcqZeKv6a3Er~sb%c6lH~h2zQ0M2zRdF;u4~t>xl7P5VoT-7)V8c%5dSs|wf3*RK z34EEQg;Bmr1tGZ24%fFdIy^QV{pMu}k&ZHtN~c+x2_?Rw&QnDbWP>{EPWP1>Jh19Dj(+BH-sj4V1-W3AEAC*h4)?B5!;=!-W>H>9U8Ha zNG#D?yW*SNLx2@cm%HFh=P>8!Rn_I#R9xx_!ocb(-IyZ&UA5*)Ze!fZT^~3xt9Fm4 ziV&)33Z?a0q4IG z|8R$W=+L2q+IIu@-yP}j!Y0K%dRCnY)xo}BS)@6Q)-H1|ie~>vr2@M7UWI%|6SGM1 z4OX@*GGXqkW$dH3g1*x2$9k#fr!H|#{JQ_E-TjICJld`ZBDIrk{p9_fyPLp1cVOnK5 zyqR`(bTt+4jIQ9@g4YGbJJ&IfgP9o^&|Fq|Di%t!6^?eaAT{nWy7*+rEm|5w?@v_1i342I`tMbP)SSn=>6Dd-h ziK?z5gAM<&ij^&IPwfnRrSf}tbYsMMi_J_G)zAyC>$_ObH-6!Y!GR6lV<#%lNTART}D!D)U+V9{d?O`4j?B=x)8NDND| zCBUV1(=QFp)@a{UDRGxtYy0&**z&{-4&j+ZJOR)OMZb51iDA`{??)$phHncqFW-mw zt9X{R2YAW*+7$RBWYa?0ZQKBnaeE4l}UuFKIMa z<8p^>D6RKZOJx%tdx>a-Kh^Fmvg$BZ8QZ~|_sOx$?Ie;*utXyL>P?nbrNelNM(_TM zJ~p?^+j`SeAG*qWq|cc&m-<$Or9*_XUS**$qw~h&eyZRB;q=SrpMSZ)WwoWf8*{t4 zBHyN=FcTT=*O?U_jtQ_$QGkttse3#i{jvvflWXVL)K`J0Gu)o$b~#0LyF-TjFS%va zp&(M#q{>Z$_^KrF3FX(e+o{;H9E;RO(l!ADOd|nH^TbK}PyY{e)TH_s#2Kzcf;dlS z$cd7S%yNAt5yI$lg2Gv)lX2fJmW`hPr3vZUNkC~#O12!jGUhF&rpe(mXQ6B%p=lN= zwAg8NM9N5k?X;yco}Do<=IqvH(;G&xEw9XJxE#q0U{XN5!uJ*0q(zy}V;z)SOXkzt zZEzV%*oqwK&R%wkcblIFfZg*m;?4om3wUp9uiu@4rHMPmCKg#9qp9^Z!TU^@pls~aS!pMde`D$GBCujrrs0R$dWmcDPn%}=yXw8mc05DXrPBu zLMbcD6Z>n^^bhYMKXmBOK?&@;dHYY|cQ@P?PB5aC^u_FwbVBMAGpHD1qA~vXs@OMi zl)9mHf>x-8{K{1u3Wh7PG5p(vztUKm($5tYxyEzZ>+OPmDi9X?4&N07&jPnUTeRlq zuHg9+q|@zV0jwzp0|j`q33)ZHz0xuLM8?UGwU&*k*B{elAGLP+Nkod0?$os~Rw&gu zFt}pxC(-ZsU-r>^x-|oaAye5}pLd>eL$7#hcca7hc&>;I3N<}R5bgC>BD5{4zC88l zEW&~#SUkPKm3u|0YjOTagoGN0wOQTT{q>!~i4m1Ayqg9da+mEN?Y9JAvXXrLQ8uHTfm{2Ex1;4nKslK(jjw06!s zwcF`VzA?jc!A8!>xtCH}aL#z~n=!Q#XEVK{nKLS0S~?~DtSA20K^9q0Q4t}rO&~j3 zq00426^T!V9uC)EIz~YEcoK?$J{y-3qJukUo0>Y7=r7g74iNvcP?*Yk^hR1cW6G_4 zJN4AFUy)jGJPV1MbHE%E2Fqhyu~vx82V0+fJWI0SnubPdfL`Rj=#vLCn_PEN-S>Fp zYEVLOe)1P#mvt{f=1ts#n=a*ChtWbA&Y-!zVg4&0^f`M@!E0l0dSz`D;bL!1hgXR( zS>9J*SB|uZC`b8r+7+^D&Ls^(;KzM{-a#|zS=%^_9m;xK*{8T>9eP-Y! ze80L`Ya3x6;?_8+Z{8HaN=UoU86uUrU8#2*FY0%+>d|qtZE@ay$;h3@a+Y8rjVuNw z(d!5tgkxypkb!Mhqg^$`p?8R&{g-`oZ4lfZ@uFTo?sWk3%-oii*rMkn47o38h+{z= z`m|~uss@>hRT%WQXeP=pdty^fr)-lM>fF2e2J)y*3&i-ZHgWIpjegDSTVGy^mxUzm z@z{-Gms}SXa@-bk{EFavJZ>|-9ykjTwmv=>p`mzFdi&*eM_G|#q(Zn?O_MRyCC`C# zH2)xT!Tv$Qv?dz5TD}TP=IB<=#*I0H=9HHnR#uKW^W!2#%d}198^#v{JcXI*Y>eydRndHdA$u90v;#42DJwP0asxS+y&4)jyjzhao zoYYhWtqB%mUg6?Uu(r*zj3QbE25ltbC9MDk-AyWU38HmggT6jMc-^iqd|!tA*+0O@ z*uK#7!f)YBQ(u^2_M7Rq`Old;M@#H91ADNsmjmiP<_~eJwKQNs>8E~41%x70+!-%l zQ`PAt%_Ekx=YQ-eue(iO=O${HN1J>o%@o%I^{UTW3wr#*SRqEA^|R;}iK`#I-s?A0 zyuKyoW7TGnsw0iI|6bxRK0N&JF(Zc#9Xhb+19WZw-4UWw`Lu*fc;|buBu729mOl1R zqq98;a&yH@Ynu}4y}%F`RbS1a*Iq<7OW6XyKK>O?Y|kbGA#cVvi8JcR0g~k(%1Ee- zpAJ7YYLt>29&V}BK4ifzu}jg8duzXK9-Z?6OAK#c-_;op1A)zwdMf}lVVEeYjVt{) zAXYa`dn0!drsR90;kW%)EdhDdkg&3Hr~B>K%r&ad{H&ICt2$9U;LK; zC(sF7>R%9qXD6H#4^@knYQDid&$4K6f-!{KptM+m?wn%<|mT zq5B#x(X~F;(QC4czLTXnC_bNndF4fz!J;R(BeS#G*D<+W{~5NbpW-wOZMAKi3_003 z;}L6?QH8;xXt~A-I#QuMLW6`G7 zjSq-`5SGNr;Bb$U$`;R!sMscQ&4j>ngeP-?HGFTq76CP`)#J4Sg=U=eK#>RK?(d`o zeOQCWm*GA3AjCpo|XCt^KECiWBTJqZX}jXKwu^Zp-HIRrt;CT&M3* zlq7tMV|T?glCVUDr`NIe=70(6m82R9F4zm)v?2w{J;96y(JzC=5E&Vpjns=U7TP}311F6as?8+R`c-sjSb0Ic&RRFj0%9mp8D z0yVITJm(ar@$CUBpVt~$UC(~wb78sm#m4nvdAr`vw3g{@NtWN6MF)aUNEsT{KdP=A zK?UydNJJNH-oe2VSqjbJ&*Uaz(jn7e6Rp*U#^CU0;Z;cCkkrpZprN}sxL+U)2wmF`qRR@_7@uHoI$r&cW4xP)C;D2vP%;m*ST zGh@=_%nFz6>w@qM@eJl>N&RB?^?V53gAf|uuTv!kG=&Ux>!&UZ(Cs@-O39?4X;xnh zW2t|8j-ElCVHrY|if1y80oK&8eQNz;9nCPUmu-$VRjuOz8;-HiXWMAN?p)~#)Q)I{ zB>R|)yuw_McRRCrfZrG-2H5P;#nD(Cj-P2~XPXaZfx$i4nx>{E#5mq0mS24wgY%)k zG3WC@+nYdM#a}s&{N+~(f$WA;UM&GrS*%6yZv$f${1D$&i}TYVL#}Sg^;7D~eh{bo zl&+BX&L1l%t@BpfpKV*F*UmL3@>hk?mO)mrCCsDX{OmiZBS<#hW zP-%Wm43VqRSkfsYj&P4jm(O`uy3}ojcw>WsOkyE;EMg*_)~)|>1p|4NRN#s6Zed(c znu`Bn_xt_V5|wO03z@qyKpqnQfuVVd8O$mX5?v*{o_-ne_&sSReTLYiciU6!n@3IH zA$L;6?O3`4BhyQCMXD$nZ_uoF!b*J5ovvVdGG>JN*MGS`oIQT%(4hl6 zda!Qozl#=o7XHV!ay2dJ>fg4N1X!RS9PsyTB__*9@N+Nv@7qcbj6=>J+sf-PuAlih z5kF*~RO))9IW^QRD*8>+YV58pDbU4=d_rt6(e5_E3fIJjJ=azcxH+Zea7tOte5q)~ z4B|<6yn`&SkZD0WxIK!wcYs2J(m$n*3XJdZ2(cbZ#_FJJo2XgB18O$oUEal2#ODLr z%3Qe@L^ygl%*X7_ha4p$n6ODfLWLd9R=1OPu2`{kZ%Puc95mCna zwzI5o5+&bxbhO4)?k-M>)~zlb zs-iu8-7K=ma{^~!!Cr3ZJ>{OG1q!BCZ11)g{eHQMD$=eh#ARPH1HTNv&=qAzOS|b#ZM;1uC@(H;!wP z%ctY49K7)Q#b|HiYw_PooZNrSyyPgc2v&$zqlm-etz= z?~8}aC%w^7@JnOM-)1WPyP+^BSncHnKGZGY@^G-o<14{i`LD|qcj+47u01IIZ|^_-5bcBYW9gatB4&KQR*PB5!} zY`j{d09MdL$g^G8K%Ac+fQT%e>Nr=mRI?xu(2~59q456FDX{0L_%m*WPhg)9`Aw85 zTW44{As;BjidHiJ{h zEn3$m%(1ewWkcC`Y^Y~i^&^?G$0PNg8wQ5?Zba4vb~DlzLyBI1@_V(B7D`bwQ#A0v z0YDT%?~ktqv0oZKZ50_xuKx~>kJN|Bhg5~v_w`IzymN<_N(L&@ta3n0NnzM5I!WqklRy}1^Z!?Qhx8uf;v!Juf+w&LwVRS#%I;qJzHY6jQtyl>fJ+dLXy znfj`Q;Nj;DTr(9|NEt)pDGc%XTg_($diHpJ32jQ-8i?fC;%nYKxy zqHcAHTGfA#pi}pFzDY}rECW~7N=&lpUv{nPdL&^GbQio^c3M--hM-{RuH@xI zv|u}MEUpo-SjZU4k`eO-i)d(JN3Y9-hv(C(YPc@`<&qdbZzLV}Wc)HX@KepxiA*=6 z4W*Tz>;q^n7u0nJ3!t2&xzJWydsc5s-zJ*RQG8mU*PEx3~JBU}j<8EMB^r zo+~mkbv!)UUY!1=`@K@nY=9Z4dWF^17SJ@y=WPi}6TPR+iM>W4Pt|8asc<)J(-P1* zE1~gA#~LR~#9h*mb-qbY49&Ol z^5veMZ_=r62=X#t4e=S^f^G ziC*^0w+!u7t{Wb*w20M#m}+#ctVs+yvj@!;pU1C2ZSsM6>=H|L+TR|!VG-Cc{8Z_& z8AN50!e7x?l-)ic(fn6e^I|g5g2Lc4wTd-w=WXB-7G{!-}p&>m#V4QFIPQ0u7 z^Kw-6i})*ZXm4cwmGKsxh%=7n&rz%MM5oy?a{$pOXni(1vz!1L(@`;So02BaaekW& ztM`SK*>B}KWBKP9s#{UF4cJpR8lzgazl(AV10>#%YaZC+;a^SWg(!u;c`#CIQTBfJ zPRob2&Lw5C^ZjOc3Y~NpCtLM7j9Nf6z@$}Ahtymjb+RYTXR6P47 zFjSCm=WXe@h5kU$8wBFDnc|AiCs;{2RX-|lx_hfAvS~ z(ElO_oT2fjOPPqxb(nhg6`$!QMvl4KV0959Mcgr9=c!V7i?k0|D6VeGfiN5BPYW6R zX_eQ5u~gnp0}qb|YDc7sh0jE;5FwI$`MoHIoSkU;MUyKV2e`FT9JSuKnBG4u=(q;$ zsEO{PzF;f`x)o>EH0TM^d&Ab!$YN$~(C#N)16CU^8fSp#EP>kbv!yTUnt%i&$^;8o zSz5vWDU7~|pwG)ioN()m4C>!WzwM`YLfmFl>G4E;n)H{sj|in+xe+bJpKzTBx1_et zq#|p<)Eto+)w13ROv)F6#b_+g^6mYH|8I4qV5n-2*F{(5y;z!C`1RI{Yy*yxGQ)u| zeE9O|0NKU3oT3(9&+W`rUcPrue!Wl^dID6e>&LOo8sd()*2t{MDA60psyK0v zOs>EukTF>}h_CNh%-RMN6MeG;2P`U(=Kr)#T+m^_&R3r@ds==&aN~Weo_XzedpsEx z-3A^e*ad2avo6EuK}F>{(c|1|7|W} z3fxAX7(LM{fGQyCAgkW>&osxHY-;M%`VHZ?8%GSHh@!*at!6dv@nqsGx?S7ce9TpP zuD_Ib@NJTliCHLJ-F?XmGq|v>ip*{5eai}ssEGENnHaGEg$i#wG&6PlWkQppX_DW-% zJ^f=i{flk5J9W-kPfuEX$xJD{DoS9cgA|UBzXGggAcxf;VF;-hn#s8jrKRoM4{=3# zOp#kRhP1UCX7_l0(0leFi(xKMHWWQ}`XY5`(24bFvFey+)@pLu&au2jM@A3g#5XPq zxpTnfNbJ-^^O$m!V~Lr_h)ThgGY6Ow^#8r6M>f5y#CiAnsY=6=xBlR$w&#>aZe?Nq zJ`em~cE*&%Fa{YLmkf4OUDRKMqg zNXb#c@bB!FQ>6|chjq3z5{VY6z0XOUOPWBcz^h1^>{@m~h<>w?LK5+!rKZfNy~(XO z@5|Ebe${t^FlaHgMD9-ZeZ&pn8KRNgY7{O>VeC~c$|2W+E0{CH@zqXp%6EfXL1q>D zxr^@J&F4&@Z^&|OR!8Q>6B5v>?cHJtCFB-P@oL$srjU^4GEuR>mndgy%;@T3#H4%% zgIIU)iYZfViX>C1w=q|a8=v8A|MNwVNF7pll0^jV@Eac7 zX29)`7r<3WWZ9xe7|ad-@`KWsWl63G@$ChT0lMT)=$U0+k)hpntLoI{X*4Wgq*_^} zD#GX)9*(&DDCT+^BceE|nMGB1bGi2^B7t$!tGqgYCf@aiL-jx;3TbYIFuMKirLOT} z9mms_S7N%{R4+Pq$t-d%r#5;N6vF%UJ&k(`dX;AagoIOG4>_$gtG3GAE2)v0$iF`Sxb z&vc+kq&v-iApcIN^ocF`RBx-Q;u>;!j#aIZN-UMb?WruTDTym4~i~|EX~;4S7@2hpg=F=%IevjG;7NaMcgv z?4!A8LM&a8V^WGNQirmjP*!+2<_8c=zz~9DjW@)Nw@-xvBLe$&Bn4dUFq`w3cCbxf zFf~7~tgLEK9Z8nO!z&k@cC9GwWoz|0x#*^{tNi;^g%^3%CxeD z!&|iBjGReiDrG85w{o;;2@hx=D#n!W4Jj$Qg~DD>T|`XA_?UAIRPgTphCr?JCIw`F zu64}vh_)$jI}Clg3vqAqS)$#fV)el8!$KzyzcA~EUvxy7y27WYH~3QwJb%Ucj7UH$#48`VX-?Y9M`SaZF&pzX)X zc-;^IokR@RVsu7u*@uB*^e~_W5nE~BdioLHm_2MMxyLg&0R^)RNmCBDBA%9j+lVe!C7nx`p#YSn<&@Y3bRYDMh8y3PfL;{f!|4k0 zPWX}hdkebFghvfrUB*!f=#%%*fn8PVsYmsr1>RJcM||TbyjQ8_IWuW_bx4~< zCaV4%^>3#Pga21aMn~HQ?V26wd6U}Amtjk$!L`?liAz&eHksYyPFgY%NvG6LLgH>tm zPAG434Oo4#l7sEG^nz%}_ZIpR15#={zPS()wVwPrDSp;!_ym1Uuwisf{^dGn)dDso z*YCGIUO~&>^moOMDHKE!>4}EZ-o}uHu&3J9>Lq4;c_k>AeWQWw{}t)TIPCfG$ta_U z^pT=BA!@PkkW8GRp{BjXyM()_)68*knX+=~ z*z3`SWe>uVS{Pu%(Y@4fqP+I8+JyCQr@g-aS1rq-|7Ca&JUZ#`j&M|77M-{ZUmR~( z9HsDUMnL;di3x|RoCuLP^((n3`yDVo&F+GF&2&7g36l=EF(v(6iOwy@Q`h=d^Tk?c3_y|2U@wXiVAQ^m~4kZ~4?R`t?YXf~ZH@g#g&Z{OPqg z>w0=6E37Q56YAuWdOfV-DmA=SUo8+t1QEycdTe4H6YGFAzOTMB+`uK!Q?ku?fBLll z^#6SXu0&LBptv`moEF*UjuEJldpuc`OOcIX;KG-ensBeiYliBP4AP9lKrw3ZRYr3d zq5V8HGNU|4zr@l48V<0ti%R+KocVlc7oaOHsWE&G5 zh>9w|6gvT@@kfJ-9t9;ekeBc6 zBafl=FcqA$R%eJNkzyh*DMgk)^#okt@QwG8LQ*HHb48+M`v+-+<@O_HQH3jNg^^05 zw}p?bL_g6G7w6pmn$(N?glvUg51sNHQIDm7)7CWf*8PD%=8E4nT{Pio ztb=D&+nB#n0dYkAEhbL}W9rH8weG)u5Bc!}zix|82o_BkFk}yyd%SEO8s^BmJizmh zdq)s3=ip^UnPvFPMLx~WZS%=q9iTQi0H+(snJK1A=UbHr8~(q+j-tD-WuMsN0Y*G* zfK1Gl?E0_RQG^$VJ&FQe#@}WP%5^xj)4D^g^t17)0C0yuo{OxK*k?t!=T!Gv+PkR>$S${rximt?kV93a&(| z#aERh{_pR3mh@c<7$;>Kb!eYJs?HA@RJbb|J~=s27p&jwn)+_o5)d~YakA7wC_F`-Pe28g>%~l5Eth^H_W>H%*p)OkzYz;G)W1Gu~ANwhz9#Ai_uUxkg8hmp% z@7bG`LqNbK$RK=2Z65^jQcE2&>62d+mo(K5gUIS!d_rBn1Tp2#P`Q}voL-eaJ>di- zIJRTo(64_!_#YC++veMIRABW70*GENZqcsmyayzVTLO%6zNl#_qFC=<5yjCmRYDQxUt8 zmSXt94cRK9nMq=O)X%qzY`1lvF8EvjTJFiqM~0HheIgRMFO30+}D(^ks>QrDXc7@r~ z-b-A>rYz&B!m9|^szUVfXTF@LeG>sI2~V1Yt~`f-8USV>3I{!RfXT!`Q>U2MPF|9U z9p&W&mM(bnJj+}+EFHJnUtL>Gw5SVBm9@&VxZVDF++TT!3aWZq1|I@mrHFwt;Jvd` zsh%lLI>kg_YNY2B@=`xOLwpIF30s&mu*=~w&XIT*x68M~$@lvAZ7NGaHB6o7bG25a z90TSzvPeEc@7n}g`R6n<4*~MX`@N)%OscH+1NtTRQZ}KqtL*&v;osyJD*0Knt36 z2*8^$4Zvn zD+SKu=T{X`6}5$~t+i*1`pGz@cco3MT_gjh_%Tq7hPk_1-?7J2Z@6fpJZ!8A)<8R^C_&CkyW!>> zUC8q<`|#g(tCUc{{*;@mM$dM{M+>Un)zr?^{}Kd=^DS3#tE%kuGdjjL%r0!~F;C|z zgn4P!`E_&oJIi^P^JJM!ghETqc!Kkb*G}I0{0`zbIy!bYDzR%V2s|bl^;%eWzCzK- z4@1?(cV;hFhZY{(&G<~Ya#Y?$U+V?xZQaos zVGEOV&<&om(K9A}pcpY_A&Ep!{r2~!+4gqfsL35dP8)r$?{n8&hLGXFHMsFe95a}B2gs?CRw(e$7%2pDei%at7 z?KG`*9t$-T+gbWo_Wm>QJizKUK=l3g6d9WO}At>IN~MCz}DUQ$zzQCs8Nmd^OSq-@dSsMtUbu zn7*|BLO*_?m<5=8{=Aph!gHc;Ff!N|1P;iv#KPvxRV1-zP)^5U&g&f8lOGU~E$fPo10EtKA+c8lbnIJDVOgfqeJw7{fVZ;vY$81UMx zQil12sm2mzQ&?k3tg!_4TVsi&=#qB1qBX3YYus~5tnIa)({bw@`~U3~<=7g5437@e z%WAR>=V)_iNLV`ju?482vVtVh$NKe%cc~@OkffO-*VB27s#1&+=ec_K!A#<~WAj4! zaPHl3=qxBix15p5Xzy^)q|58Y#|}+m&M%hiN;wqM)~2)LhIE~elLKbOOd5AGq+-P< z?WsnBp=arB%o09S%!ZV_GcvwoVoAYwP|nA2h>X1^oK!;6B~PK(GvB5Z$ScY#NSgsk zGM~B)%_&r=!I@|$z}D@*vS0dVlCJKG`$TY=h%J%^l=+aMQz^`2ONy_XE(jdRpX+-U z^1!YQM3fh-MM+kc5=*@YAIZaw#8<#b2OX6l|K_;MrX;p^#_$ryVwG2n$hmpL zx&+cS3kKQ*%*=;uec%qRqG+gJ>axoq{K)#`HW8|mr2y{qx?R;CO~pkFlLU9{(i!$}}#jm)}X^P0?22{idrqP6l{H+rfBJJ9RZO8Tokb zfS1P!LL(c$+(QM9Y0W6e*E`g@U=e}+j^S*IN0^g}M2cRP)0Uv>4r6fLToQ>wlrReG z$DHO|vG7@S#}_KP6;BzI+j=lHB{&p{J>*Dz90$k#%uj zS0-{dROrD^QzEj&K$Vg~GgU?VqYc!6OMN)yk;dzt`XyHgrlTrFL>&*#6rn@Fa?5u5 z2N~pv=zXiKXX_(T-Kd~b0LB`_Bo8UiRVSvVZ=93b!cL`kVfAJuV~?Jti2iapdW;BI z;l*sFr)oIDYTsAIqcu4mZQ4f__O2b6_6F&mg%xk~=NTeiz;}V_=dtA*v>cr$oA1+l zV9q?OPu+a$hrf4*{Z>4Oz1xl)Ztssj?Un>Pc$TX$VG(@`Il_i#@b;;FN*DGYHBZ0l zrcT=OYR{*#XJS z<-1nJ2vl4+??ZCI=ig_({sMnJfdvOT1$sv~`}?{^xcV9{cCmZNrf{Mu(Gx?fs4B0_ zQAvGif0HC3g+YpQ5pbtb;>TW})7XlPlw#=~ILJP)H{GlW586HWfw-LOwLzqY$pKk% zDGOJ&%(yd4*6XcL1kI{AvFFRF&!#G<2PB>6YfJkGzayhx0Q(1tBSleP|IEfCW`l6a zx=o&@a1=(n?n!HZ>-_e!+4pZ}b)Czo&NAk(XM-*{lY!2()crJ-f-BYYhX6H3mn}6A zn>H05FSwjWm+<=(+PB(^qaF5nmGkxw+J+ay#7Y;#3ItG1_4C<}4C*(rmV3M$8b~>truE=yh{ar54KH~`{RCrg z1lm6+aBfkmvZQmq#~@VG%reHOK2c(AI=ZZI0}d|2(?TyO_tsP$2eY)gDhTkW!un?P zqEIY>=(JM3QA~tuq@OrdRdD+mRCBn(|xPnY^THYdZhX%-#NVAqX1}IFsL`Yf@+SUNJ~Ih+bt%GA{M3i?Q z!IE;j_Z2>55|xv&Ar1(QlUj82wi+x)&PifyR3Ck@FL;}fqr#Ylbw9x+)~r#k?@-R1 zf`pNlEqy^v@TWte9D}6zgz{t5;9#fb%qJDGQ@=QjTI1|U#ZSAedX_h|v00DGuxCx> z=#^$K=5q6O`<-U_nl&nyjN*OPw}DX{g<~P|;r5ercihS_KVfJlB(5 z;0LX+6eHSnSd}Nwn4u~Qz0)dk`3&nwms;P6M1EdyeAys+mHK$YIE8$(rvtkuLLT} z_QrryynIOBuK3e2S{BA~7!#57Kc8sLq7TDr4*?ARiKZg$dQRDGMI6&w20l?UhZW7tLQ4TSIVq+=v;wf3GznfdW)9Y#u}^}M7Ep4 z7(1(cnv&{73Ma;yfAik{V(CczN6)Ry#HyO3YFN|6%1udN_m$|mMNvrv7Xej#2)I<# z?(e-%K)4n=~SbQy2F9ol9Ua$@?mlViwr zU2H|6iA#gyst4}}ZeqfSLn|0jL&`)IC8eZOwZJ4Q&Ga@Z5*?-Ah32jnyW%y?qnbZm zvcqV9*a08DP?yqndv)u?wBFKL+?(lQ^*}GBN>shfL2BKGvNWo`BF}JwLDrOcPn75} zmn${pyQ=q(Q=H=;UZFGNtY&pBq~H7vjp1uVOQUh`qc2322Tt9sD~Vw!CI*Jbw1j}~ z6k!9UaxS*ErQ2iG&lPPAx?}BL5G*F9LqTP-R`+b;b9Gf%71uNbZ?e*Cw>EiO_x$sQ z+bwE6ZdH&A(^axBM^bTh$q%Y1VbbED7~6K}fsjMT zm7;7@(Fc?BB6=yS#yTapN(SU!c80miYvwTqZ8>AF{_Vr^Fa0(8xJy}T;+%A>&q@j= z?b;r!b~U)_p^^JNRZX0j^3e?;-6)qsfGM-=jd~9KCZ_>#{GAV&Vm*yNuevl_cXl`u$HHLh+bGD zDPPHUz6;oMI=ZLmQ+Wyif-`6hBTxH5OKlZn&q>x zXws4f?yNo4|L@+^$pFF3}Sw>#)A1wWHhBr>q@i z8tjmhn~@033`=*=+9%YYBK`Q&>&$DJXd@ZW}4 zJ&5HIgYwn>wAD$4TF(a`cPXfBH2rAjw0#IbP1i6gjnr4+;qjOHhUfFW3j%iM(T=td z=7zS8nn^{uvSkJCx>g&IAGW=GDeKf>R%E&a)5xtMT&wU7(hzb(8U{yW^4yNih z*CIPKP+!w6hPw|SAczJ#TmrRr2xzfHhZy9t%&(t&@|jON@}NeH#yGRkdSXd9YTiiX z15*33Cihv$*<9Gp1!S-$$BOQJG^AYMo~;$2Q}4KGv-F z?hDxe2yya6oz`z&N*F)pQzx}jS3NkbS&(VE@Az!@he8m!ZCoR=uC9}zuK%;IYH0c9 z1brZ;rn*6A&43-ARp#KWpEK%>#FMC#iY0?^*1s(t_&;fPDN$Gb_r-%n zgkoW#g8RQO9(bmD_TheAJaGH9WCved)8}I!Ie3lC^zvIt%crDk$yR`UzyqP(@t`^?Z_~LVQ*2r<0Ffl z*Q-k^%MsukFg8GUY2Ped!p(t8I-g=p{JIkg&YdKfq#n0=d6NJ{A6JjmwgWRYC8Ix0T%*N~gWE#t~>*^z(C*f|-Nc;uM!i>H1nKOH1lc!p@ zRz{Q>6!{yNQ}b!uH!Df=Ip%&eZ(prA#oO}Px^~l*ZC;_MO1V$XoWy{wR9SP$h92F= zu3ifI9n*UW+dq5M=H`0oAls|mh;5;#M$x3Wp|Z>|#};oezWq@ps+ffCVhvIu^FS~q zzsHoXr_cl`u2Phkn=i)4$z6Z@;PgVUvNJh|yTwXheM8IfM%TQ9?oerQx_xKUAb5f; zbf(6=;3BDDN{V#M%oN(~(4CMcklaWYa|Nc>p|55w&JY%be9Px?Jm1aLTu7{)9n4Rt zD4!h;5)?035TLwySe56R`etTXGYo#?g}8h|O^&L}#^$+SZ#uN4suZDgk8FQwFG z979qI*y@r+9<(kLb1TOXm25=>lZ>+^wXE{mxpMO?p065wOFd?I1r_n#ss3=)y^BJr z1KQq@VyMaFkcN3|q27b^{^~(A(UP-MC>4!Ahmc>?6qJ;64sI5}8>Tn`;arljz5YPY zq{PWbgdFJ0o5T0Crrzj+m~uQP1G^sw;DwmNo~W{7a4b5yyoq@b+(9rYHmDgVNmE%MCMLYF$$n*ti%JcVmPD$16!@ICpY(l!DlHAmp%F7jhzF%&4<-m;w#p2xk^B5Fqf}9Z+~Ib|M@f)C8(#p-P=xwtrZmC z^-k4>pbBelPnsP9q!7L~HWPT&mXV?M5(Grj6dBRmTZWy^B*#22HMWsVuB;$qVB#QE z3GVL#EORoxVK$I(qPC$dl4(rO8q4vy>ngp^>*DaXpkG}M;$l-<*a5h)i*jRnwAi{L zdAfhw&!VE7VAwNcqK5r6sgM0|?|;&r;2(rm+@OTo(b?<-_qbBe->5Jt3^drgH zCdgST=yYCUmy^$&1<{7P4E{_Yps*MzATpfJy>pJ(gR`5&UOu+Djad%yzj_1`S(H&MxjlVRoOcL1WZPTZ zMxQ=)?KPOzSGlQcc%@K9!!i+(6NT=dv!$UhJ)L7_VOhA)TSSApRIT126Jfr4{|=>> zb(>x!=))tQ?`^B2*GY0;*|g1AtSfSsE7j1U$?TwLo0V_NrNj-Uo5T}qvvqo`bHEvE zbH;p)Fy~_wzyzI|*eKl;-s@iKABU=b3OzQ}?Y-zMO{-nshxnWr^AVF%kQwsr0#ESr zhHDo?yN?%TyMy3pD9P^QJIoFFTC&0s?E{|=3`Z8?l6S3qw@@J2*GBr|p!5m^m|Qu* zx>KrAljpQV0G*o)d+EqTd^D4Xn-0TRc8p>3Ph)sb3%v3435&mHSpT~Y`&SMDr@xhA|fD`Mui@)g9NiF@l_Vt^?dcG4?y{qluoS1 zgsLvE-sANb4PY0er7%jJa^irr#H^?|(WLO8>GFi0b$#90~Ku@=}Ie6C8WesmTCU}fGQq>^wa}HK$ulhncaaFDt_}#Ny z3OW9+DaR9h5z;HI>b}$2RGn)zES)Em^oH6PpmIE6{P%^Q(CNAA60F0u#nr{VI!CQaubHs8sYws&-4KhtJC z4)9+1*o!B5mQp1!6pzL;$4$cZ#!eLQ=3nmFB~B_@wakwuC9@+tn?^&aJ!KuNh={t1 zs+dKoK*n@MO-+k;#v9LCD)@=;16=v~&n`Pt}atX7fj81`72zSwYt zb{@h55|oy_W(uj2F(3(S*x!1V^?3djgoaf%2Gi7VE?F{2Xa0-13#ejLar6&Ue`(mR z#>|c=8VXe&NvPWBHs5jeN;~Ek%i-0|l#|LeVY&3ob=z>YReOD!eiDG0y2FX=DxDvV zb9C@S!KFr{itDcxq_dXduS7xYBNT6;a?x zw75mL?8CNOg(isWq3srDI9b1k_qqbZg&Q2CK63ng`boX!BjCL;k1j3;0oat1_?j9**T^g-@mr6Z_~nX+t5vS?qpaLHIH9@ntt4R z$xl-by?~UqAeb2E;*r_MuAW<5mS2AFOaGHsz(N0}BPWTS7T~<*@BrBJ3Pc{*8qQzO zk?5DxmoVj$YViqw<9<8|KclH4J21XDiM^puG7(Kxcu??rXncZYnKAEo(&-|I`34CP z7N7j4*16IT6cpE!XE)-S=Q#k+Pkm8?CV@>bMyjPQ9`9RidpEjOA=Fn^Q&`xG=;C9Z z{#i;0-G|c&HZuig?U6Q1F&Z?(Tmk~#KgTgvr3+*tE7`4zzG?-F`2K~Ism=b~<0z~Ln z4*?i$heN`Fj4m7kTFLM9CllyV z69Sx@mnO!xHmW)Io(wJRUAy`>KyVhC0q!K0LPiGXGwoQ|H?S};FE6&L>oik`TsPV* z8}a@5MGr?7?>QnZCM0ZJL%Xd9^m zDu#}UKI!&TXm^%Nrdo7!xd#J#8mO3qx)icY-suIYeEn}4{@*v(I;Tqz_BVlm)>r8QPkutkt<=&ovEp$!taFsN7wU zHCBxh-4oBm_keH4L|W&Rt$ITq&Guo+JV&W-wJ)w1On8!A)^WD&Y^I#Egk+4y?va}6 z#23)&z2)W9GTkN0S4R#3C{$8hx$;3p zZsF`vmzKMUCvMMQx>J<#BZV*AwXkzXP5b=Mb5D1G*rObT(TqI^|C}-C zw21fU6z%1sh;97;_%{A`gkyEvKNpu!wq4kgiLG`+%z3$8|4!@%76e)&dCPmx`c!Gc zZkCs4OKPcH>cxs+sB%Tv(+4j(-v0bY=jcC*!dT<7ue)`&;gbSkkv=cN;>_d#9H0}cTN zqx|E-kU|G1<_%H46+8*3>RLpxK!?}2W)vF62;oPoz0~!U6)SxBpF%8mK!!Uc@M=3S zQ`%YbxK-YDL52UM(#c|%jx%40*i|M(T*KW}nzL^qP9QGbow>7qBO*hS7wxBPI59^T z4z`GTa*@@ljucomdqPLd84Q)BdiIwQouk-@m(fpk; zA&x`Z6#Pw=;tI=u14m6)Emk^9gBR!WlY4R!lZ6|s z(Qn;1sBGPXQez&wDQ@7s&wVBjvFrA7jT)~aY5pk+`leu>uQrxP|6Z5#g3^FJgI68~ zYLb3PomiT+x1B6T$_hSC@sVd);!`~>J0;i@Tgn-(hHwMX6BNq=$E>;!E3>a0-L*D> z_VrVpb-~RRxJ~spR*?Y}NVA4`uS*uVRn4aIzPbL&dWyk$g>}z!xu0^#_a>h2^~BvT z@R!Kemg#C!H(qjEVC)vP6F1d`^BJ7u70P~7p~*EjI!9jek)NHcQjD2%bhuSSS7*UZ zA}c_a-KM-nJ(zQfde%s9#rdC#9PAcszS=a6Rw-x>EPZmh_E`&L6jh;-KYcOZrG_%r zi%Ibd?dpyzJdV_L_IYhXJg#}dbwNu#C^hO&Y=bjc<)e+C?e#xE`l4+@4}Mtzrk1je zE-nf%?ziqhMOJSQ2kSN{I~B6D7~eK#b=G#c`D2a%+GOe>b@e zPt{aR^^a0!cVF~7I@P8bmFWvwES%Eqc5e3yJ_M-E)%Mb>^49WG4(5_6%I3d*s;@k} zvh|lpUKKX#GM;Y4QEIi;$=(<9;u&gR>cUDp(U!oB#Y|VkspF}&c0FeQo z9h^@(vhh?$1n$;(N3{-dCS@Q@EUfrx1zjMbT5^QEc?g}D>C~% zSHZpiV~Znn&pSXpMF+Ea_Tf%;%i5yc++x)uKghw9d?vg$N?-+eoK#2KZR2-z)qF`c z=YEtmWoJQBl?fgUOV_?+g(bXw@=c!B482QwF72pqu>F?4ExC7#_)t~ICq4Hzi9lGD z9vCoHHO z#8@Yr51{~6+vaE~3`B~P!v0isqx^xz#EXU3wfB>9j+wS)T*+#vkIj2Z@;9M%^}J}0 z*^##g`eh3ESrDEURc>2Q7@o>qA}(K&NdJU7em?xW$nO{KhEC0-iXi(5d0B&!U9%Ae zjcz2j=q+!bOw)Yc@BF>6X%`Mk9KC|iu|8Z@-Dh`7#>k~cxvVY8%bEz!{CUf#%=M&~ zc-F$|Xaf6`abYN=pf}LSx?{>eh%eqT(($PVhah)8gPs>55+hxpG;AZXGvc4@)1yZ|eT`HYy?SJtNUm1$jdY+F?sl zMq3ACoWtHej7^`ZMcF=*GXgzd(2!V6^usMg3LXRqPq@*s_MqQ97$M7%gnG%QPH z2YSz0ai!66KnxQ2{H#?rG{*QNEeC9z*PjE*c#k2-l+AqVSMz{KXD$LtjL%Ty3Fqn` z+(zLa!?o~VD~Xs@9gn1JICEz-t~sKVlLs8YH*4BiRgo=-r-L8+h^@GKDD`8NpfC?N zfA)6gvywu?X}cT+t;YPcKm~>3Y^#&pKlEsnn$k3w=s@}4YwrT`k{-RG*nXbuN4T24jNb}=hOSY9qc_;$Bi+@C*ey`U80o1tH^tQ zaGU>8#4*Zh+O-;f{BT0B{&7(s3egq^PV2s302RWC3P|7^M~gc$BjuP8kyM+WfJ|ry zIAO0wpZ8( z0joBYAv;jLr5V??lZSvahBW+UbNZ+@xO|H=W7sibL0r2LliP{bCW4c2-BRwVrjS?u zJ^0J_j1X;!i3L$B*@K&2Zl-6=KDE7}L_|M#=*|95fxH1<$?JT}=gJ$Q)+ zeex(+TgR2^T|3oBGH9I04;rqfI|8W)he-PT%l?>?k3(zBi|{o-=FzgDXk*trL$UydVn@K8#@S_m>W+Rs z`0n#vscW}#ZEB{pUUIv1H~TKb#JlEk5S1un|DHY?FCFNe%}%&T%Y=u8H3Z7o_|FZ~ zzD;djomed|bE_=R+OrM~23gAvfsT)c?6SpZ`jR6@V&-{mH#PmAf_rbaEbf4yV7`MN zCNewJ$`%#N3VxtJFZ9)um4|cXsB%BHq_s|x#<}BV))%I+&#xh`em?zQsb4p24=S9Q z(?78!d~e=J>~=`&V~x$T5c%Ty?cKyQi3p6@nvR}8V~UJR(8+Xl|6>s6VyqQ$%yHCQ zQs7)}o{Ho{6U#26tONwRs%}z)dMyt>A(Ax5KbNWkl_Z4e;{B6ZOoW)_`L>ZU)tFJZ z4ka`c%eH40m6+S`-do3>WBMcIO?TdO^L+ulas_y&yDOr8IzqN^)Q^ddPpNW@Y`1Lv z5Qq-y@$9w8SxTPW9$7Sqa?`f&zYFT6%t)rz6AhX~;S&AC{#>AKCm^3ETJ)=0;R(pq zXznk)v-a1-sHrjT}jXPZZJ>y4SOSLRa zeAN*{7L}=s?AQAdR(Khg=)1lrnICC}AQ*HzG7mz~1ZgqJ<4IN6Vd%gsW6_mf8pR>J z((FV`^PAUSv{3Zby(})H7*zNMU!u%tdLNA80IF=W3!q*f$bW&B?L-&q}f)OKg_ zWuwVvssfDG3R|^a$3{z!PCX~6tlm+S=8U}eyT%ov{x$E_ld>+>CC$jG!P)c+tX-*1 zfe+PX@V-LS!K9Eic*%jz-a@3StY2bojx;N2{|QF9yfNbLd5~YUhPlbU{2#{78*SYR zx9^=zG?840y9Cd=I&U7}8xm21dZw+>^VTCGtO5^TRP2{-EbDhGsT`9e2@}QHIfkBV zioV!Qm2rqL&(*o#`P<@1*Jg9}M9*;BlEH>BF_Aphp_@HNz&BCtWi3VB*HF{r_p%cS zz8ylkhUfA?H8p!%^kS98mGVBqc51m0NH60eCKY_};mPmD_Fww1(v@0~Vh+RE{){fc zIm(6bSal%PMP{*fu);Ze*3oEOSc{xFy_=a0g+qqa22rW9@!<+0p=F+sR&8tvrcBHP zHk~4G^s`53@CA=*cYfdLI&@!vh)#dtzPNG!-8E;#Big#I&3X6(dXeqW6&y0pcEVRp z#ls@n4d-Djq3g`ILlN8g@aNgSjz5r$x)893*ld+8^TpRFh!X2a>9?mM`LYws2=M5h za+BbVQon}Nw!PW>(h%@0a<8*)LkX3VcdO#{biVv^wDAJb3@~H=w{YZNp11(a#3$Y@ zvz%%5keo^XLU6-74a=f1*BimN*HNk{%$==aeCZWZgekH-2L?3uQjPS$WrotB+s?pY zcLEefjA{YV7)ie2e=IYP(Vj)f$4T=`5j{+i0+_WDpP93`uikK{P>efFzF$viyfbKm z7SRevkzsx0tSkQ9uQX~^1&X$9G;3oBGQ}8Fzs&UuksqMk6O58&y5Ll`h&roBA-|>iQLq!S zbeFBV*)YSy^!i!n^&i{le;6SO(dMGz4U@eU_V9kFSgxAh3u>U6|C8XM4b{S;TALPI zt&P&fj0foipr;ZjjTh!GS+7S6?GwYibpYF$f->kz-IwgBFGtPC^^yXasGU}NCnzD8 zqT_I%@UR8aIt8N6_yxM*So)RTb^-z3%%{WUBb}b~ZQ06p37HXk`kN-+WqAW8(==W{saZU|eb2SwZo~IWLdG4q0*KKhUUjGx2VBpc@t|IlCoO0( z4C`f8AJ*prL(AMq?h)QP_#OXlljlXzYcn`w0#0n}^EcZ4zmn+TyR0p_C(Epjqd-cC z_w1=o=mDg5Mr4IVKQez|CGU8J1~uX6z^V|WaEM_hS3*5b$ElGY)ni0T&De_4yE#jn zp`4#pR_WiRv9NVNQosRTt)j-52+)VTo^_}s818Df3+X#6$lCXYDF<3ihYjydWlr@| z)K9+jw|*;YjSrh!HBKDxY_vnTRaD`^W*gmhfuvH8VYN4eMce`0a(G>bW)2w&^iJkS z#tf)-KHx?|grB~dxx6i)wtWH$;Z3T@Gnio1{qN)VW^xy!od7#uFrX1^U>*Y6Y}~>< zH#j&4fF(YGm-(rPUzq9++ET~qL!vUXelGHbY%QtpZo85U?eRR~s%5&VdFBR(08vQK zL|0v1bBWbG&{%Ur+G6Q8{KKsJqC`V(uK%g5#Fm~Jz4{p?rIAG)2);fBY+*m-U)P>JVywT(&Yk}%4zrs6F<@E9%m?}SVuzm@FXzBP z7ZL442gfOyI@p!AUGEkFvTvxm2wY!}!E_od$&&Hdjp!qJktXv3kp-FK|m)F*i8*u=kO1A|zDqJiK;fC0m|y0(76 zl*?&#zt{X2RW9`_hrei@=UGDATtzaAq!eykH!Q=TX1mTO@=&GX~E-vK+aC1S-q$(ydx zoum<#ygn>kk$^NZ8(0&bv28bAD(;#~ce}X6nb|U8Ad=iJ&(PX{j@C` zW0HGdxm7OGlolRo>RD4=N-w6Lj((Su@)pvEvu&4Kxd&Fi*+h0hQZ;XO6`U* zb;p$qj3qFqv35?!3{FQM`Q1+7dg8>Ll?JKAG4b6O{zh-8k6DKRFIVd7*qL^B#BsjN zF!i*K&QlJ|cuf~y%*J|Dyjk{`qt~e((E8jl96P zoI&8!(f~L>GrqcCu2kUdrj;xDpqTCrT4cvQa599A>(Ej)&#LN9xB9B`j{`RaEqPWY zV<3p@oc7=Sj%^+9)jDRn;ACN|`(hmt~hntCH8$htD7Iz=ZTzXSh;O}2}QVYN&tLwM|-ic9@f|`H|Fg^|T7Sos1>b)tyY@I(T5{!Fl7m-&*}1 zJzcR`i4@o!Ta8;OzbSJ24`u$xk!z`S!frdbxm=jMa8Zh*&A#1H%ALJh z8}*8oZE*-l)BtC7Vb8CWdJg2r^(v=0$t8CeK}Rfzs$fvilO!$0-&#HLW{JWz0Z!;9 zI_tc=8(FG2qn2X?eHVs!)MUFu@0t@~g>wq~|2V4cc@tN+kqw4>2Va3Ao>_P~c)1*; zd~{}YaZTR)d${Az>hOKm)}_v6;~2btI2Pjj>B=T-nc(c=vbKWY$Nt&=ippHU za6FIp!?s&BP4l=epDq|_skov~L2mJ*8NW;~P6U77<`8g<5gH;&1>H9??(S_|-V9L5 z=jpAIeej~8DvQ6|*|%qC7|ISlHL0XzYNPpL%$^>-8B#Szr^3nZ+q{if7cS=Yw!GxzFquZ2&`6NL>@*5&f0&;<8W33L*1Y08T)$zxrCkFOj!e zeA5KR#VvXhD<7EDv{}_>=fOfAwjNCFYfJeH4BjAtl|GG+ET?*~Pru}-CqP$zC2FFu zOb>*d7>?WG=2Q^3c+&}cGQ~g)<|{dl3_m2}`o$0IG8#&ARQ!fPP!ntE@w;lhjhnK* z67Scu-3{0qeX@_3{*)-&J%_+UfZ*$WU)n1JQojj*q{)=<XGwu5rOl>Gs7P%6bp6o(L zE1a@nh{2I-zq@RDq_L2a_1;rk{oFdU%`Gbq>$S=6Mqm}HIDjFBVd;4N5%`pvk4*O@ zylGJKgim%YHI-uMu{&p7IYc7FJuhQ^JX`z)4*N#`falaB@Us3jH3oAbL@Pj3s&Y4G zX1Z>_Qzpv1^{&zR$r5mRDa-(jp)3h+zi+VUb|LN<8Y|AbP^?j zHot?jO^&xb_-0LMx(8#(C1zE^~SD8 zf9aJm|6CHxWfEU%i$-Wy(HJk_eo*860ZrwT4~I%XN@lv0npVEV%o28NzxgmQzbG$% zWl>Nv0(jQoTXRr!i6Jb4QN(?3wmP=7btsnj^K1xQHyGHXS}T&B$J&~8PZs@&7MSl^ zAjlD0jCsB;h3V#xFCiGDT*P@a8jG>`4gt3MzgrxO>+~Mb;Y4nasI(3tt^e{NAXy`h zOk3AhZ1o!&>_j}GxT)W$H;I$;3`&)5{b)7kRHe{yu#=j}4>NXtOtrO)(R4vQd8#?} zH*n!M1+~%#vphl#{s*THI9oV+Km7K0A)|=$CXw*{&f#=*>CQBQ0}J(?9jslM~(QjXzBuMTtdT zSB=X&W&s`))AULrjc0`rn4_WE9bMEU?I>5H>xsNH6{~xOF7Tvmz|>}imfts1Sa{E` zZg9c^=+}AaAJg)`-KnJ=ZF7n`haKHNQfocc{%3Oj_rZytxklEhNVC0NK3Xtgj#b|F zL3N-!YsRh;peDq&$zvO+sr7L}PoIQBcy;6D8!IOk-3sIushF|t^M%gCT@1dGy%_jE z8r{JdPi0EJ&{#)ICYaC_Yhs1`Y;uY{)5-W3+3ZN0X54Z}dacmAn3g+SlwdL6n{0`3>Yr@v&Qb+Lb%=E33MJ%CNn_nJhtA|BA-8dtJ^Mf1d;M5@Y$W_@G@6 ztQo*0&EC;sZw$11)iBhi%EZ>DZZ(2!g5@(qp#KG6J?_og(bCzmt}&Mc9@O98BBELW z@znhvU$2mS1|%vgW3)9(`BjOSDe}h{zEnszE~$m-6aTnrxZ{(yjp7!@x{H#6KirwRBU4wNyJ&_U4eeZiIH>EH%-!yo1Mv#)p}rF zwd8=HXnh;n=+V0kGne##G(fD~QYw?NpDsr58#8Fxz>IFBL~On*&J2=^vClRKOy$Uk7{D3mhj=CInpmu?z9Tv9Q?s%br)D-hw zSF#eS!pa@hnF)cd1rf0|b(oA~(4FcteF0rqlK;Hq$%RbcMONW~c^!Xzn`(c%i$1m7 zvCX5pf|&DitfJ#-ev;ENKPpl!Wy(Jo)N2xe>n*RyGw6*Wk**AV&57y6`9wM0SBU|& zNx`Bemj`+MhE}#ah7Gl^w;1cBid9c`>Z8ZwcV3kh=jj5kp$i2TG^+A;{Y@p?(VlH8 z-HG`(IzRkV`~1G$bptS6-W4N1*?2MO$iuP#oa?o z@5aG7;z)n|&4%+hkJR_BSLs;wTwPb(>4%%24JH*X5@Fu3ot7Jsz7XV-nOLamE8j+d z+P>6$Lve|o)|OV;5>gnFpE9&xFigm!@OaypU5hRat9!y=2s_`5)>0FUQpe4$qYK*N zY8$*mJHe8La~}u!ltI&qytS&!;X$_C5pey*+qFe?aS%p9m3W(W)TfG_;R#;Unq9-MDtXwCkBC)DAhSwcuF6`#}JO+x+`W0v; z)uq!DT|&Ob{>w*hb_U7s!;0_+4jtm2M0`W7N3O3A&d@6WXOsTTuZu61;e!5%GfHh{ zuMD=v1<%k`b#?opeHcUz? zfDUfi1(S=TQ^Z=BSIR=$E)>!RxWNyWED7nat;ULpqm>QLpZ5OKhJmY zi61{(C31pdMCPYLBLmk+g+Wnlaj3ZvMxOXRe|lPqoNHl}{ssSU0j$lSPQ4VdWQPBp z^5I1&uND=+i|a0HcCg0S8MD2)dEsj&EPpBfDEAT09Nv`ki0a#l=L&o`6%?T!NcRs# z4HMj9xUq>XK@Tu_)Mb4@hmdJ!m^!8|_p}xdcS`9-5~Zxrc1MqYmczIl_%917)Qq=9 zc-3Q5YNkRfvPRhp_ub8aL}?!Z;R>hmeyY!+a~BL^E}lV?20DCDR>k$^nS^&rEO_}f zr1VXlV}AS-9Trv=OlWaqUe?Gkji0rYNvSPw2K!bndeN)SCKzm$p=d#BYC*l$l{K|B zm3TQVD_on(rX>18+iCK(XoFU#)8QUd2X{k`S*Cm>2NY2ORr^V}?wK))8^bbNwS6S5 z%noF3bTei~y5d@4++;^6$otY&DqfY?G)m~-l!B1A5O;+-{(;iTt7Fipu-NB?q+=G1 zD1NsSvwxz$|4t|{Z&>cZM`rBcCo>y$AEgPm9@Y{#TH&^rUK_LTh1Lza84N$V7G)g0 zZj;3iYbvMlLOjjcM4?gXq_p7`B=wdc_k({h$srV}V)m$atWxx$P7I^+iThxPx+?r# zMprP*B)5NMC+}Gav9NMV{W)G3c+oomV^&q!Y`GCFZB3|XTUrB$bp8^xijKvh-w`;(cRDIcvEjy)taxhO}hWui(v!(z8A=+Kg?J{FXLl25CC-V!9LI!NH9> zhxt>A{hF+Ca6Ulkviw)$nb(d=qDV%uyl^k6+6&Pex5H)NthbNiNpgl}5b#-Gh9FTbt*^H-?;)nL6g7EM6x0Bx^9l0#YIRmvxQ%(Mw%e@U5hz2AD8}r= zE0nB?@Tonoz(!tZpVf1lF>COPWON7&*Li28w}!`N)C^R}jeECPQQS)rAWA(D3oH%u z92y+zK>;t9qnH+DCB!_l7?QLVgqn91eC?0P{tf|<4>c2ev-;Be@p*E7iF4eX8(|h5 z)}=$cO7UlGKprw~zTMIEP~o$;DTAXRM_Qf}M9Ou2^L0OY5{ulJj_F@|PE3(*dt3WW zV}$dhspQXk=rRYLON3GGS3jVz9gm&u4w32$Nj{;LY z)yu(whIh){lsH@WHR9`Ju0I(baui*I40n2!wpbR8D(rL~vpm_U@2xF^znaFlV$3vX zB|KFU$1HL94ioL~yf-$o4}%8Y6erH3uEc%zdFy}TjdO$g*kH{MQ;#Yf%9rM5GyS)O zNGZLv8?VRgKAq>^-aGoKS(n%}5ae%(PSq5FnY)dw`tj5`7h#BeR-VlwmZ|rvZk6?s ziZH3K?hTLg=BU@*pHul_y-v`!-%a$cu53=*dM{t5#P0dTQH9j2JMR@N0@mg9Ym5}S z+vbP9BY+SK#%5FVq1N9Oikn5joPQk~80uO^g-~%qY`tUjgQ#UaMYxUo6aY>1XDs{N%c{Ox4#;e$SS>wc9AKehFW}2dG zXvPw#eCp&Zj?-SsYU9jj>%dr8B(Q650z*wtRXIYIgG7bp>LiODlwVABph={whM@Rk zmY+&(oR%;q`6=1Vf|5{4F&FRU2@5!|tZ02-gkchOee&O^wesH=cI*==i{kR7A-)S6 zX?Cl>z;q5_B|&gFj)~3LH7S&v&UQ9v*)uTqGGEt#f0s|)?&6)&Z{0*)OHu+{4O{xG z-D})lJ6ul7`u0`FEQEBcKFD3fa4drBDSTDtHfoA#J4eQ+(3kyDOhfxAxvg)v_A-~t zn2qBmlhMg-43#3}$%`PH(v05nh(y!DwasE}2`r`^s?8xkc`k;muK81o!@ZJ$y^pc^ zBEZfg8dkG@N$MVF_Fpg8A5}-Oun6>on;*#?v()eZYOm)!B?xEcxmQPcWKAz~pw!yt z+_&qL_T=~rKvR6T%ZZgOuB-CbLMZ-rP@rEQ9;6VL)Qc34KeYe#!k;A!~Wgt`BhMfwgRYKxO@GBM)2!4 zc;b7PYcwmxfqb|4+AN$wX9IaCQ`+Lj20-jt?EZt_t;0Qmb7U@TaaLz4FEv}2_AP;p z(szObdW$Nm_3U%d~q(QJ>S+;P`dj8C2w9De@XysCk@K>Z4 zt&6*D?D;lu)}*?|S;gSKR~01kjAEL#cgbb$6v=4GoIsCYgU~=Rq^=vru0g+#lkl&Q z{Qm~w9&N?yJIb+vr5u0fg59jsF(52az@=>RJRmrv{ zBZ}5y&G1_5>cej*yZA}INAJ!AdXU|VKNbqVG{`5e?eYmNLWjfRAamGj#;k3ej}tmV z(&nTy0^4~OhGV&w)ooLEY>Qr;Rh>b_wuV3vt^^C3QXe5g9$)WrwIAhBesXpa+mw5h z>e*Laf`=g-bY6W0eOA9?7S68sn_-O`8<9x}u~GSw3{wM#AY23K)j$E>aVDgsH&vRp zLy|!=19P0V)tk$v&Rnh>{W&U-cGBF$mTFCI03ki^*a|-@Y8$YdDORT;bezmOhehHk z;1$oY0asZCPl~@s1Q-F+1%=gU*MyezVQn&~#umoeD#b|A)9>}}evR&5hbh*{6Fcb5 zu{Xxm8*R;FJuxF;sbYi92wZ7xn$ zaKJB`lvVKZN)HeIjUFTzt6$+!s%=KkX!qXNYfh=_^wt(?OeS@Bln&-&J3u2CXXP}C zZB>h#(o6nUYJZ{cr;{?&8Ux8gD;p|4j?nlD_F5w!***^Wkap|(YurW-B$}EdWXr0{ zTN!(%@YYb;_Ta8-lIrs8yU|{Bmkj>?(q^QCPifz)yudUpFJaA+vXUj@d6C&u22)3t zjXEdntlGY1@JT%XscB&^G7CSs^btKq%Yeo`DnF9r{FBGVkO36 zMbTF{`@c$d$)2^MV6)6Ef4q=B5t&toIWx9h7G4E0$oI%Qi!r;kEqH%LYf^<_U}B5X zps1y{_DSMY)^egeY?J_}shIm8LjK?a0g4~V!LM|snK|!Y#3w7tD?h2RHPrQ(Hpe

    %uj@9T=bJ=&FU%YUlg-#aftzTK6 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

    M{AeUokyflPo{lB6XW#f7qRt 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 z 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

    5Rg^i(g-OgT|sEA@|IT}J@pd-Dn8cyEIldIovX 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

    s*Nyz-GWCH8l* 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 j}-V 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⪳g=^4&tem*Iq$VSO)W9tsXA{z9}# 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

    x(DE-KG(w{u(u$m>Z)>zG)HUL{x7`m8*#2kSk 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

    >^7x_pxUja7u)V=SKaJmIOf-mMh;D@6xmnS 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∈N$d4_21F*#1l@amC2G4jskxpxVou?5yn|Q~J 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 z zaMWbr6aQT?oe#kSMtG<0)Z0`wu0zlJ3eU>_ti0DyI}tfjq>Gf4wZ?~7c5ZC5k1r{R zI9)ifhhB`kLP^DrtY?OhM*~b}$H+u4*~44-%IQa*V84b^a2^y6DUJ0=S5U>2n_5y} zw_d@qaZ;6TFw3V?Z_2CggdRDJe_m(M=Nvhq~xV5^QkD#psD^P|0{iN^%HRJH6JI3 zOJr4n7lq&2G)LhpT0RW`upL%y+7i`|G83X$KOec!KlMp?xVevv-;}X8WihaS?*fHo zG4B37!Oi&EJ(dTMa7520IPdDuMj3?5p;LP=4~I2i=)@2bUt3Gt`RFQNzyxsX|9vw98xc(ql{0a&b!2jbVT0Jx+e*r@g{8aH*}CG$}|#(%F@| zh{G3dPPo_Ad;1Z*#jW8;T?7uv`5`(v)WU~y;CCTJ;>o0xclV2%@OG9w*jy!mOewmQ z{{9=hMDO`u9IgnyV@ff4ETUQKP^AE(vM>Hoom++e>l#2a8$KGpAA?v&+m=M%6vV0Zq+d*8|B;Os z4TDzs+UDA2$ktkH9`4chIbIVY*Lg|!ou_@(GE1BJrm<9tYi7GvNoS952)CG)4{hXp zte9Jybx4oTl}3zx5}2iehC%-Z`Jz(C)((0ZjsfH>xf@7X!%e?mPbP~TF`!#N`KSWB z_ns`f9Y26xo9ccBYlgI`O`>1!;g!ZZ1x_py#>8wCRkQSex8)b|sJ6w{razoM!)-U7 zyF2cWex7if8>P5^H~FQu`LsMe@ib@3=5m*4iZ6w=hfW-KT-BaEtW9kG-k*_8HJyH- zE4bY1`h;|}Uzm1LI=f3?GJc{$Ub2XBnzNhM7BnV8+t*yldsdar(U0WZbY&VG&*7Jg zPWm~-1Mrwop;zk)>RwG=)L*8ssx{wcq$(`jx7Td3k4HR<372a%mdA{r%uPj46sl}O z3Q}Tw5t>9_&c@C98l$`&c<|h+-yz)lfiyxByTA9v%~&*3B!zn$6*`Prjp9-P9mS_M zABl+F5_u-zh;DS3t-t?)SUR>BaA>cVhvDc|qwohOe+1ty67ML#kQ(HyVx_OEb;(TK zKnT}*GFVg$x0=FoqiEtR-Q>R~i&YKpS@bP&;+~q7KGvd*G|(KR>&5*3C1&{=z%h;pTg8#MnoqI_X#4NZ!y>_0!Y1oqJ3MR|GJquG^gZewenPV6GHpB z=wu4oC~-^`>^;qD;r3-CXlC5L-DV|1z|(6Ayxb!iLr1ajFphKQPp8>!0+;v@iCll& zl`7tWGJ65EHl_h%BNraeGJ7I_G5txj_V{KE6@|x>-F{ExmsDqKLNZu>l;K>*^+hPz zD*N!*)?RlC%lF$YzOzww<1=f1S7YA2uu$WO@CiriD-^u?ZXmLzZjaOXd&g8dmB%tQ zH`3mwW*Y?0>IbK@$6hpEv^eE)Tk~-x_d$=HQY1rIAbpQEgSzyCmJ z@*kdWMPgnWk8hk0y~>;V(qljQ5Q_jr45T!DMej;G?NR{!7 zeB_9VQZz)q4))n!p7vge4;h131#MFrbQ6CxN{=Ui-_tH}6tt~;;#t0wwcJ+i?#J3k z6f9m;TAT`>v%73KwukOCzBHpcyAqVf(xPYYmRny4&rVuh_Bm9_W0w{0T`;70>jYmDaPIhpu{a9If{n@y+A!m zPQkwCKz?9|o8g8-Df0g2xTdNQy)%tyU zsxcO5Q24M~r!fH-KKvt*lPiISN1ggBW%9Xi@GOjT7VFH5o@`F`N#Pji3K4R_M_O%|E^tSq@_r1Omsv*)}v)VM; z-Pd}%|E&nGUH&*Ym^Xe|HokA=>zd2*)L{RGva)%h!P>CNeHwB@Rq=x>lf&yvgQR$g z*Cc*$9(}wsz7!)`V~uQdOCHxBEe$Po&bzF7HN_X{wJ5%J=JTGBpU~YX*;#=zFew%< z@5apPg^9JXu7A|RrIpIJXg7RPpG{q^)ZLV&Zq->3*Mgy^oR(QNS?%%v8DDT~dQ`T0 zs=vEnXl81yVAm$(T9x_ME%#>|00g~NEOWIr-oRU>&QqSx1(3+A$(J!+J*YB~4TJuY z&p~=U2T*mzjveT{6k4YZ&XM7y%BcXDFQ(R3{}9;OO##NT@W-;dQlOO9;8W+qF|&6p~TP^1f&J&o!_}P=x4w0 z%RlZ0xZE>m=9y>a%$a$6L|Ic1IA_In;kVOgyxNb@yG9QK$XO`E2?iq3N3HEomAQ8( z=T~PL>~V^ms`z)e!8~}a#XokE7&Df9XHVc`XruAmm}g*Xg6*}&!P%Wl4o$+@A8p1? zIka%fFi4MLq?Q4UZoEO$SJ8P!&BI*9pH1fOScIx(I1D+;nWiEd@8p%B?v+cvULwt9 znn$=UH`9D|M(uUUKO$VDled%1HL*ajkj&r_ldUV;<-@{#`=<5yL@_IB>r2*Eo_F#+f;lJ$f z`CsF_q_b?h;vO`89M~^snznj>Ll}lC&wWy+VZT9)6H zcpnA=qSKM_Cn4H&Bc)<&>)=!LPVx|%Zs{omk?h1$9Z@d4@aIgcSv0N(1VI#EgeM7_XU!knW2{f zv)gzd-`1T?@Dw7s0FEe7jd|4<_Xis|Q14KvIBH!wyVc#1Q+oRWTl2;`c7c98+Tpwe+7R=EecvZdz2(R&-=7(HkRi?b~nuSw25O%p;*0 zjeolWZPiu5&FEl~;*c$aXk|U=al(#{JAn7bWO})`B8o#wmWO?yWWWRaa2Nn{vrw75 zko@nn=<_{?@tC9*E^2rdn!oYDQ--c}i5r_gI^)S}7Qiy=w@x@_ z_Ioe}Un2gZ=}$?DSc&vNUP5|@2^9Q3Xz$gpncw}}H&nCQfe5zpO*sBxv^C5vVx%iC zd)2yYo^Sw;r08949J&F%iH)SbTj3 zpxPs0=!FKyd{grO`g~EK4!ot0itwD;g~ZUN@{ozA^)bse^$p~TDWQC+i^fF52r2xi ztMRF>0d_#+PXG7poUuP4eEmeawtUZRe(3&$Ki8W;Z%$2vX})*H{g6mNouDWM1LY~C zvh=hBIRGd!ZBv!QVH@{zV!!^+3&y%q_?L(oRt%!{Z!c&&qyYGiQdkgDDJt(3HuYn9 zklgL~AzfJEC?Mo9GiLxw<)n)BcrqkQ_jUU@X+T9gg``tHE<_u>PUPfZ@K@|%&q%|u zaP$8004=>fnUI?^W_N21V}#;P$;+J2V0i|e!pvwpir*cGJEk@v^roZS>Py&U&dhtT zL_;Ih?&dfIY7Wye-+dz_yJEcndxMvxVPc{4NUWDquYJdj4~_@w9$>Hb9y~#Et3) zrP*ruexCWnX_iskAaJ-xLRUbvVEWU(s(e}roeUr_dfu^qSCYLv6g8^sq z69HB|=e!>Er^pQddp~wiH)T;#*E42};UFm|FAW?fM%H+J5S7M2UjuPUjz=d5vf{kI z?_Dkh)|%!ybrW3`mnN?8PMP_J&DU!D)oO-07X5wQdg8;?v0w!&R%SS^uBl(>Snut8 z1D1}-LmwxQ{R`{)J%tOxGbJbqsjge0+wRJL_(C8W6>A*d4wM~vN!SCB#21x`&9IC7 z#Tyg!70y|OT~EJ{rG0`UPx+ncn2Tk)X9~vAl5p5bHBK^`bwZ4;Cx7&RU7M$WD`|-j zu>o&IS?Nhsao{qom7(jB3^k*`+3}fw&bo4RI{z`x+QHt0chb>A# zRTs{X7J}xsfc7LYDzgSCu&H!@B-y5H68M;3ChG9#d<=W~fT0roMHlB0Z4@b$`_6}f zW3nZid2jc*iy<#&_*%d~v^fU6GYIs8PuF53Z}u-X4BLxKD|p6CdOlpK4A9T<#u-;< z1v|`4R+nOC#!GbksZ~D6PF26Y;L#_}Z8a)AR!54CPis2No^5U}VG2>MuyG>+K}wOf zJ_ph>Ryx9_4nchY7ra98^26gkEtSNIU*MI${>BYYfTd?~;sj_~cxu)nKBxs z7A+%Xt^qJWd9{VMRl-}?-z@R`t~x}!Bwp)z>;6cw1`H$WMUs2HK3kGEVWxy{n@UMT z9_RHr^gj@6@EQvfjEYabnbi##z!IuG$TuGi*=Fj<4tmE7m1*!&_e}u}H&4ej0dpaT zw5^58WjM{!cUh0Dbva#^ip@PFg1luw!4yROgFSCMJjd1SPFD9$P#x*_U9i>D3RW`k z=oY`h3pV}5n5D2e1uA!yP+nZC$TMTGZo7%g?Sy!4$Cb%n`2-y6XHEJh+ShUGI7+9i z*)1NPPdoODiPKUmUm^UVbBS+eEDsc~%yB*zu1T;Lfgr0P&HFbMWlCV@^8}a#le^PB zSOg-?`&{tYa<8|F{$tx9u8R?^yFGbqIcBU#Y4QR0L$n&E9TjZo(H-}PP+p4gwuhQ` z`0;JS?vuL7gv`3}Xs~#bQbUjEp<93EAz8MygmTzMX?qqZ0T(@5#Ce&1eaXZ?!$b{K z6618Aag}6qc9Z)Ut3OkXpBg`G=5lh+U`a8N)>~$Ug82I7i+-H}F*ZaqnlfsX_(7Pw zlZ_U0B@sq!8H zMQ=8Y1M=zsksA@aBw4Neuh+HiVho2&Y8J6O*@~aOpy@~Gbuh6QRlxx(<-SFPfjj=) zgtuS9izc_c&bgIUjCT5pAF?a)L?o|h+8TeQr?wC*Eb-#2UI$C(rudl4xE$+aJ%{yf zk%ttCRaba+IDa&8)Y-k3ot~Y4-^0yPP5|O@M~VCixNxBLj~oepq|(5J+~$nnfi z$Tfytob_@tL;~+@1vL2~)T=HuKOlR@dc1&80Aabkdkgq-m z>o{LD@)UUugeXx;fEW1TxZ{b4ijxOB(9U5PN0lM4hEEPH;-nT0?0npx*cj>3i#gtl zs?$NL-&T<^K=BKKxqAhA+%x66%{+zh{)Wax&3M0#_x9a-E*-KOn3*z-cOS&1mlHDg z-OlD32m1b5{N9_=i#_$`VU@&6c}U;`y6D&8mq<7xVI=(Xl)o)U1#5cWr(q%dlB^N- z1`+@W3S+c^!7>kXT(kV4FmyF+!2Rc>6`cPWcnt&EOT*{dyyPKSKPnu5CL68aMjp0D zIrzttPhXdUbGavO$Bij_wkPnQO3WOm#*jT`>V;x*fqLXrdGX`tdeLfQLT^UJQ*-mI z-IfCT-kBqZXDTj_hFriN!-%L*j?!;3nztNjR5Pt)pBnp&O_FkJ8o$y=GxOe!e{7F& zEz^}hjWe4y$GauU2|+xH7_HNBoKV)5OhL1^^qT5#_5PGM+!Zxrn2I={D8x^HJKQdV z+?VpbhS4S>YZbEX-(52u;|Dxx7NEC)d^q3j;&?;(Th_K8kW$L&^Rxd!vJ)OrLm3*p z*)%lWj$DpDR(YB9C^mI?qX+%j4g0oO1GioUm4D6EfHZ6#-DHX1Ybm=hqZa7Y+nFDQ z%v!>h>%+KxbqKg+n_S+Bq>#3Pw#5u{quQ^h?c3PTv(TYEhrJqt#sd6Am5;u|>rRQR2EbzhO&`kA}SJvbLOAT>8NYOaj zWQ1J6R5O@qgNc@i8cy)zA1>ZqAaZCa{fCS6ux*}(9EAvUn0072AVoZ=g!0iRKa@MX zMt5$^_PP)yz)%tA@hOfM^@@-g*=0+PN3Z4(P~aaBPm%U}_i!-*%?_K|9o}?#Ow8-E zIJzh*j)rfWyn9xR5vz4u^$zqFoHo8{n_S^GCg>EG4rZbpM+}X7< zCVP41+>54EnHGzp5Dn_N$s_p|f}B(gW(+vd8KgJ)D}58Id=}356EY7^`f@@E^G3kC z!n-?Bn(&Xw&7(q|zzqbk0`WIi5o^99eL0%HFA-5(h}K_mVg4Ng4@)i2HGXU}?Vkop z#W>JxuO!y709do5LfS_D1)TbdoT^W57n(7(n^t?WjE8zkD5X;-%kz5D&!fhe!kE7k+S)l)1-4=!2KIp&FIO1?3lT?&fJ704~}GOAal$ zTaM)f@^UJX&s3dD>JZu~ub!@O=>XZ>snMv?9O%76MOfuUWR-p8lmBs4zlp%aj`k0h zd|ldCe?Ez8N#j_?O1~VY$#_KACu4o|8dv!!tlD2RhxZmFgrLLFZm$BJ`Y?_sm0dWl zw0!8eV;w3PCOE4D{5cqsiTVZcPPVbK`a}{Yv!i+Tox6rXA zd(maAckvT0{{oPD+GHCd#yQ&|Yi{ND@tRY{@fJ$SykI9+?R#oC5r=bVD6+nACI`I3 zY3Bs4asze1jQRe3SJkOndy8Eg4WWc*qanNHjey>1ANgi8JcCgTArwTud?5k)>my-|ag7 z9PT8rVG~ggpe?3NXC0-NN1PWuWmN{{m6M;i$JI7_TU1`m$!aPKfh^pThAK38Ll$J| zHPXGe-1fS0Lp)wdWxEr+fU7cntJ!`_?=mN+U0;Ul@eJY|`lPgdiu%6vXc*HT`9&YR z4KoB8Hrnq4T+wdhcuCqh%lEn)MD<%$&_7TG6e1b6Z0Dl9j56ejq+rjk|BYtF|2g$s zj(^ZA0g$l`_EXiJpGFV0M^7ryv6u9zy(FoQE z7bWauXTGbg*|m7TluB&nPmlo9X6(pq7F;BKz&qo{-Sn-1QlJwM&*3`w|LRX;+IcVf zA?}R&CkNN$f7^0iMt07t1h;<3ew) z#!Ht1OsCtpJ$5LMDEb-M4l+xj)>VgI*H*9=()$Yy_ga5ucahZ^2M$a#QrZ-n7c?%m z4_X0*F0NCeA1SitkNPG{6sP{=AMbY*LcOkOyMI6x(C@?L2K#n)t8VGNPp=d}Z8-6a z-%-$}=P&97o7s{Eyz-;7%I%Ng-8W4<2j>mpQ_V%p#T${*U2eTFw1beCbW$-)VgNA6 z&*vP|5RIZWo4)Y#`yqjFy3C3PRkVo`fSI>fzlG&4AW59~UJH<2uhf3N|1emVyKubH z-v`K4gZ%*E%~Ug-e3x1a9}SRBaBAw0fi2)X_xMEcB8oQK|CeNEG5r2L=_@4 zL|JjiIdgytdi5wez^B`148KP{z`?9dPtR5hUVmg3C%m2p;kExkiFi-2Nc1wCz`x9D zzR$1tCQ9RPB8VTVm!%ezkOww<|JMfIOBh$K0$xl@OE|VnW;q1_2WR>OY})$6A#5hU z=p8k{7pW&eghFMwlCJ}xb}}?x?bWtlavG>_TY*P=L(K3xv_sEfJdbpS|0nMZKg`oU zuy`V6KxgoV=Ynm=C({P9n0ILZxdr3-9VM5;gv)P5-F#G5d(W=Yz;ds1L$7q70HlW} zo3AC#aX5{m)@-gCC#liJHc?vSf$p=_i`z!KBV9RCs&pu zYoj_Eu>XFCgclK=)|76v+JpelCO!$S>7c?1#fgg9Hiss_;^Vy^v&I*s=`YmkGsVv* z%Oh`C7&e;o-c`+TMq$2!{X%)iM1&bR^h#rAkkg*per!T@=!E*9e^X_aG)C5V#QW3@ zn~Jmyr}WN7HB|ICIx;?pQHiZS426Hd{_Mj8)u{fD=M;Z5CU0VtXL(?rL+-jlfm>8S zJ`r7LYd}=PX&gA4AeFb>mI6QBoYgk#fQk!6C&QlKyv|)`SCHGIGB2R!ivd{pC>mLI zh3|ioGRmL6aGIB~e7ce~W4}m<6 zPNs;dIGCl6FD3FJK2QT8m?{&eO~Mp$?dedKszG}ohZ!@wYfrsDtp4}GPYNvDjJ8R& zN1Nz2(|k&s`P6GwzN52`GljceS4OCABmGqR_gVN9!&1t(eXC?7XZrE+#}ypTOK>#q z+{#PccLK_f@2{$rH-LBGu`d}3S(ieted~_3fzN#LZMiotDX#TuPJQEsCgRf34j2he z@(v17{jc)tIb;OJQnMlezx9Z|*&({kt5=5ZLYBky!f(&hyp^Q53e;e_(S{s~J`bXl zJhQQpwKCOOJwv1Q#~cLo)d%4@cU(gHnDMZ}xbRh*xD`Y2*CMvhR6^8{Rb4zc?L$Hxbw4uDVM8^J)9QEP)#?>SRr%B*!0cnv z;%p^V5Z8cb!T`v3(GvzhW_B2|-Oxj{uSj#kfhym*G+un5biUO+Ny`_xQgFcM(87ju z&XDN?4k`Tpl}*=mw3ePIs{tl!`|ojj;VFTMhbdQ@3+vhxd{}XOQQk>6JH)w7Pk1^p z_fycx#+51uqA6E4v*X*EeXmtqT<_V!{yNQLUR}OqxeVKZr^-777)mB?%K$#f>rL_# ze+;5Kdk!xVu4Sw^*RnNDMsDv@UXuTvAG04L>u)P>WX*UT)HM!V0xEVEUE=dF9KKbO+&9K{09;uzF*O1^;@C0yT!Ur>HW2l!rtQIO3IYaTiyyS$k^CUO zBIxfU_6R)^G^cR%B%A>UhO_{zAQg6YE8WtteuF67BYCWAk(t2LVS|uF4O~ttsZTSF zZ&Zs2f)Bi%_V3NeF)zOI{|Z8(JxdQKwB$s&f=iFYNRY3i)owNLbdAZF_^&#V5xS zn~WxTsttdJgSjw*xDDLFU*wZcxTX-+t}msmuN5c76-jdm8Fg;3jpx;<7u}4B;W-Os zJP=JEYZUJo!8vPFC`$6}41C(2v0<|6`c^ZrPc+jnWu;4;#sF>H^T=O=fvlmP%8OAZ>Bx zWAG^L4wL~IaV6~By$^K_Z*=zdw(#TIb7>yie%kkYZomG%gvGj}R?c<#`9HBv#f_Ug zbu5MK?W^10+Mv1mSrj5YFqJCR?^@di$=|eO?MC7rpNnB=cBU>QpwF4^ycA49UX+4A1QlIl4C^}Nm1!y*7 z1M8Ep)zLh>4MR2|ZXeC4EL@4HZtcKJ=kwLLp4J~Pcx{;Vr=~2HM`u_aZWTi=3=X~4 zet5Jpnvkp<_R`_5%V|ux_wv!Pwa-cQb2rn5;QI#D!G%`WX=%9UN|Gaah`80cFzM!# zt4g2S0WSHxl65(SV8632kOclv+E!PDHK`tolTu_`W z3QD?}r?^{yW`#7=)jN43ct=fsbO*&NsbevDl8N((T?lfg482xrl&>`OFyXK%y<4$E zFMynBHmrlRBRNsE0cY;tB6nDSW25t)3x(U1f=$x|yG)UW4^j(GiYoPJxXDcTZ$Nf_nPFA^5Txt5Ddu~bQ~ZN^_Mb_N zkcGzqt=4{rNhvklj01Tywb3yF{aLPoSI1U|Zf2gGX2)_`(VSEk((HY+0(sTB5TT{B za=>uro#P%$e|9-f=xo}=&YWlUY3Q)A*L9J*aew+Yc-*Ti%iFtpV$y#^(ed4A$?ANz z9cyL4op6vD9!)qE{?hXR``B7SWg&}njy1wKYqOuZZIw`2AOhqJeYJ`7? zFN{|QVf;9GE$XHTr!J3FS8j0POcH#}&F7zWpsS&rK4PeJpsr_{0}cHnU~V?otjPz= z%K78*N!G_8Z0&Fvcwoxy7?mpmOX;#45lg)Hgd4R$Pg`9Y68@9GQiMASGP%+*uH-dU z7opE~+3@}(xqJ=mV)LLKYPdUd@?hCSu5zkLv z@CG8i#wt1$&zY?Sksgha4YPD#{PhF3B zRL_`94b)ywTv!hucW1luw+VibeV! zd_=?YM!jSd&WCKKx+M!(o06S59vO^z;;!{2n-M!I(3m&qcp_yz4v?a3k^ z(*rxbJ}J=w@b!Q0zRFJ$WEzwUt!Ydu2VNCTUleNfqsz7CK5J%d2>DudViq`e^lAEu zzxSXt+kMRgnTk1~J?JF=*?^{2D~B+&D(2#e8rrFH1Akm<6NWV+rWsmO*!=38c}^`b ztkD!o;rcN)V)yNlQO-+$v&ZOdIoWl@D3~1?UlJ;M{!!+Yr*(GPDmuRbg0Z zyG8FJE!e}l3e&8hfLx9)tUbh#;pPCOyQZo0tayBQ*(@-D(wIIfqE8yS{Lj>9&3#rIU>P-_kiy4BZkH%Y*e+ zvjy#9jHGnturLrgXxBcx0B_avdid%a1o^o>>9BRPO5j;}VPJ8Tmo!o=GVeF7MH$@z zq6~f!_f5ph&NUyQhyJgnDrC`tv@g;crshzi@zw~;%aB#HMYVW3j z|APvQf8&J7wvb2WQfdaTvW2)c%k9YUrMp;;%VQCTWn82gxjn%NFV;89u&cdQ)k)ei z4exX;x0=BIG)}I_5#rLAkf&!AD*t20ihD1cOP}^!n7t%ftUq&&tV0%ymbzz7DKy87 ziMjg+(&owWM(eX6&4Eburr^$SEk@&SXF1g4}ZVYMCEm=+lU_ZimMe~!rgo6&SOXfPu=hn(5q5;~TA$y%&br47g zWXO$Nj1S)G9*4g&C0fBU+y)6)ieL{S;8JqV{OFDlCKShEs?&@pUuM|!E0vwlnLK8} zj=m15(tlRBL&byYIi2}7{?lyf@d7Ot;Dz)4Z4Bh0>na8_hw1L_Ka7y%5})0?;(lgR zY$Unpfj2?xj0j;qGHm{=&g3yQb4mW>HJ?2Bz0;>Dqoo42p7C&N_McZ+>vf@;-JT5$ zzuw;Dk^y{RxAnEYWZ~!RRoT}U{n_mXNI{3=^)xL{Eue%)Uquhy2}HX{&&jx~+ZAi0 ziYbMQ9jgV(Czr}f6zX0IH$CS+v3@6JC~{r_n|1Q_Ni46<)Gw1&T~;SoT%Uwi{#iM1 z02pKcsYOw@GPq9(t}UloWgoI2&FVmZ@a&bq%N@5;TyQ@9=ui5@Ht#L62 zBH(SSDK_k)$Qy_*aYOQ6S%m|)7M$OfSe~oK0Abm&Mw;y0g+|NiE6y(^A)1#VW6A^( z&dStr`s#lSaho(If-DADM-^LMxG&31dwE`%5ZE??**|V8;mIfl%B3}j4;0G@o_sC4 zXZm*$WNd>)iQ$aw@a>xPh*@@LktAbEgBwyoF$7Rwq*aMHbhgUmIdv689|*Jh~_!VD?!;1*o#7n{pg1DvCr+1CaZ)>DDc z4nj25iS(S4T{1BC&@OeSDNg__JfQ9;plGZe zKz1hPJ-ykd`R96W25RRCa6$6ijF^)Mk_gnv&_mI6TL=k%9Zz`Cep$Su7I4SF^}(;# zg4i`Hnyde6;$8(*>1zyvCtP@yJcJLNsPmVecpes`vBTCYKF=D*wK=DlylA;tS<`$P zSH2L}j?@~FTFi%^xjN@5?YPap9T=c)F)2$wlGE!{yz%WudA{BxT3Fe3QAZ^i71U%2 zw;)9;I3*7F#;W8ko3Q*bCE9Io8T{u7$!-qrZjICmgRJ<;N(8U0iJQCqjSg@_{eKT% z<_t8MzCP8O^yc`|Ht4>y4(Fb^yrCso6(IV~!0>1A^hc@zA|Tf%URsENJf6Uo0;RYo zs(cVwDyFXlY~;v+XQpFq(-5XAulaw`>KAH*Zr_)hRx~Y5JlK81BX_6{9X201LSXaL zM?5>V*XN&UEDzQ3j}O*MN}dz;L!}T{YnJ$mvcjaKTppj>I;>njhhGL)Nj13R6&2E1rNEc5s4%lN>TheI0646^#VpP08D*0?Z}sm`nU#)hoZ zQCE&G8LwI0)m50RlI*s}pNdM0Jn$);j!0&6Omos^%&hw{7gVE+v(PMk5XzZa5wF-t z`lk)P-g22$>k^MNpg=vB-4rw5B`?hh(@78F(}0iq2u0inw%X_;Mfo zkV}N9p(AvxyHI~!cc))s&=-LH?SJ$(Cnx1J&(7yXzCSDB`0--Zl5&w9RV%BI{YIg3 zbIuG{gv#ih!0YMlfjyGbVhfanoX9-OkeY{vicg&i5Fz#5NmzhZ&^%={2wHl3WYW)m zf7l1)y>Y3fCm`ysh}MpWf|E#G`*J^~_Z;PCu!%^BN-KE%fXe`)z3vtcj0+waC*_s@ zv&s(@k6>A|CpulH1Gn5KO=wwb(hS9s4j?Yp;y*@`J^i4V!|s=XW%IN-qI%YobU1eS zndE^pB9%M1iYJffM9)0ma%1MvLx)@z4#)>A&RBNGPHz?t0ho3@D*?uEW6WJsq1uhrvqW0;IQjbfOS(WJ>XQeBmZ|_=pFRZ9 z7^9mA;!NB#BMW09IDPYxuPd?X^SQB7pHE=9q3Mb=-%(w@hlQ(8BU{cN#K$kR`u&=0 zf@By-kIFB2>^_x%7g(6_&8uYKg4TwA+FUhJ(HS&n>o9==#LZ!=tpN*SjpXj!NIOdzzMDEZ_rKf>EYADK(j$84mHN9#4)p#K>U--_zs+tyed-HC?^*ub zjJ(#`%do8a^nKm5*Nu#o-A&|)C(85m9;7%OElA_pkTEg!S#$kZDqrvN>!NtrLE}UZ%mTEyMVLcERq0`W-Cc zAy;oUH839L;@p1y^7MFgu#{O^CC*Y>EmPp!-|J`xOfE%+yp}i=>63R8CbR62S(x@u z>n^mqmT_`;W5-?Ia2iYoms~h;HTioA&lbt1Pr%fS7PZBui!;L{6d;;wsXyr?~jA9htCC~jj^3+mUEVT66qkEls9rCi){_Ed1Yu}v2F@p0=2&&d}ZV~ z9k_6L$e%Eqys1BrlNR9R)Nv^t^!aq;mJ^^ssC0Q33X3)MV1Gu z@roWoga3$RyieLgI?fRybO>W%p%tdQ7wUKKtu?pq6GQqs@lBkjXQ5Rw8y9A((FN#E zf>szV^WL}EltTZ`tis@AJ63fkmQ~$nV2 zE~G5@%#7^8a&D-mB)NFU`!u9QR&Bouy$K^av#_j z`Q!eCnkkZ`r|3G33#ux-P_DPdyddU3c5T-onrEqjg?~cb$kyFF+NC=!-UlF5+G<=8 zpwoEMw%6Qkr??JWJ{f98yR~ivF6?}D)*9Q|o5D8&w#pXhsGM3V9o18sSd@*mSSQ#R~6Pa_~pCt*OcmTuc*5#zGLh-Gd!D&8jfh2%?P_ zo;^nM>K5Lw$mAors5RG6mHWR96L@wxxKHvy)C=V*aUz_mDrQ<%;pboEoNOW5#pQ=X zGIWpi*>mLbn69nE2zlO~m29>m1h-n3pw_bk57R`-V%`W|N;UA<-HB8|f8rlj<%0SY zvE!dH)d^B+xk6k=zj*`(O!`mB<}BE3y!Xx5Uh2L~UdJ^Z8!ym)GCdfC^RN)Vu{S6K zsI&7sU)G-+n4kXwN>$XL%k>~M3Xwju0_!xf6X5Lm7A4L#udy4uMX6m|xzNg%t;I?V z91-r6rFqFP77WU*A$)vU;d+j}5-l<|J&@h4r*j*^S4_3uZVZ%1m9MZKxoWED}L;PpWYE~v3m+PNvT zkd>7<4TpYsTOr2&xQjElYj_}erTRktI7?@3gvZnl9@*K(MH&F8E-Gq@SX}x!vNr}E zpQ9PgiIYE_*rF2s*4gBQ)cLR5it`LaUoW_Y`~l$^R??*nLV}cgC(U0>{*?U1<`5d9 znRdU=Rz+~G+m#aVm!A&glj+tdQI7QxKlObo$o=OQ$vN}fP@pn)e0Asa&z9s_7@_Bn zPX_vMy7EG|h6%IHu9+b~{7<#Bs&k*$O5VRAC%hgZ*|oSNo7_yc818dA0fI+L1bHI( zODC>shS(d1U!5W+n1nK4AcRts7~{p`x&Pe1@CC9C2hoSf=2|Z1*bD*nR`^>Q@jIWS z)N+KlrUlZLD}EJ0?4By}+xj8s)3L0=Hxer|zva}UgG~T~xYCO*eK3Az=|Fwq>dWy_ zejzBlF0}A~+ZZy>lawEiUM>fIT%hf^OON})gFLgecGb+rErN-Pkj;r~MCc_%YQ{1g zXX1 zbV;|rh=8+mcYR@_`uYFQ=@`l3)rA=+36-C@0s5ljkg?il$lXW}rv3w4=Rmz<9O7VF zZZKY_ktf7`Gik^L&h5jlga^d?r?gMPMGS%r^s&$R&yagLkPhL|&?49-`7_>x@rZ)+ z0h99u-y3oCt2Hn>{zRC>)Ou3K2?4w@3}I>)JARj$9MlPr0fzNGm!1kt(Y7f=f zM>Y-?a9U?V_`ik;<26V-ND)Gy6_-jz*uiV03)jA9)uH6CtsM?rB=^`_%@pl&!+4Wj zPNqEMIdq4h8#Nco1syk}h)J1U<>%5aFce+b26f$e(!tI+Z+8( zQ5b0;4g8^AX*GHz+oq*{*VZCpz#`tQ0H`#Py>U@?Iso2;&tZ!;@HaRZAUyRJeSkETBn_0;Hwzx+hej#uh05Kt$iOn_ zlP>4v+4&MD#eoW!U8#Yfu0{X3oolzJINdMfY3S zUuN?|eV&hoW{z!^^zeNTHmH`fqcvQRb8^rDn#vvbJf2HmH783Ehx7cY#nUCRZLJL!%sk#QqiS%W7Av?nsN^6 z)(iFKw@xpgvH`AU13t;M#U~$5t=442E~nh-iC1L{U>Xv@R5MTWK!cu%#d7<7;?A+w zJ44|#md+Ph`dQXN7378cN(>S6^s}doNA&P*h;A*U%`9zx;5FPcazbTYk>pYyv8)I^ z5lV?f>Qm-SIF?Lx7a`2=5jY>cz)q{(26=TIr<<{~s}dJr)=xDV0g_*UC9nBDa4=PP zE0-lPxQM2}0SNBSC?+rBUiiWpl`qVH+h};dIQhPO9vLr%%iM#tl zubi308uLvJCq`4eTmn!RDG-&Y{lo~}ZtXuB;Xeirw8r6g2wan-Q9u*+e| zjr+T))T7U1(%R2Lq(nf164R~uE)A$JkfAHAFtdLVi*c}QaN#Cd-hQ-D+H|{-F*bqx z;dt+;1v8zUa#c&ESYAk8C=_E)cmUAkzVn_fZQC%DTE;m8Wxnr5zUowbjgv{|b9gjl zN!(64Hp*fD8aA;V4SlmlAixR2i5_|ysV&fXgl^)_2i2w{QKOfB^iXGEFVKO&JCC+z zL_;*%$$!mGK!ZgWW-Q3#4l8V(&R`MFib#|3=vcU`sMp)^LZ@A%P!fOb4yG4y1JcQIgRBQ}T7${?f5mN8`I9Ua zF~|wAylEDC^Y70kXLPQoSITi+O8*gFFI_7@AIneUhIC(DSY1mJ8NnAs5wr%8{XJIx zVfzRU@$`>b1{QbJVX&IMV#%sOfR}VZ(v|^UTvV3Q4ZHFS4e$ohgkn>34s#1&w-V48 z3c4Ehe|%qpn(e`sGN}b9+D@8R<%RNGUKNK&3xRf|6M$8FV}zb>B5jmtY1rqz!lZ98 zY3;wCES`2CS}dK~!Ubm1I9dew9nzapc4dG?0#ARh;^YP&NnMU|{pwZ^TtZTDN0yEV zG}mXz8Yzy|D|g~Blm7I|Mt%Q6&T_g8X0EYn1Uc0j2me$;_US=6`g}eCZlWaneF821 zJnAipT*l8%<&6v6-Uc1VQW9QRa#~4J z%>Wvp!a51bzFp?t6XfjTIfpGgpo&|P`)+8VARn>H=(|;A5vvDDj{l3F!6HP#xpZo41wK{I|a&;H4f4kj0vTbKJjt)pDbTvd!vrYz8LjJ% zIDGW5|1zfszoyQ)TM$i_iBmN2fU_YlOOW$(jZDCCr}Y`P65z)>H*3<*!rUvays+0D z9@jc)mNv<_S|dPH0ek@;da`wDJgrCpB8huP7dL5UAsKoQ;REGjDl^dMGbT%vBiD`V=W&Q%KxbejGZY}unHlvQZ|T7z!*PZ5C`o9A zaIn(}Lq@o;m3rh64+y`cWQAZv664&@&tP8m_-51)75JP_!pLYkYKlFf<|x<7Rxv?% zQ($n6H*h{Ab4H;PH!)mZdlnfFiFz`KP~p&%jFoTK(Pr&>T)_V*oe#o1um_QsT9 zZqk57s`aV5vL6*+n(?a=VhC=|_omL*fAT+oB6q=E#-Z?TtGQ|9-s3aVw8o)Cz)(O0 z!#@Y>oDx%-1~emhdJyXBcdQ62CO}$@L>K{ z36eZt9GNR{QNg7LQI4)COcQ*f&J8*DtUpZ0u#~yvFLt)b?IBG9Ah?vkr=d9&};9Qn^8BbkvIk0dXUqY zTJt@e$U>ltQploKvXJuy`GasJ3>&WKfVZcYGryJA(f$76vHmx9tW~hA8mqRCG!?)b zrF^f6^Fk=4W-_PQ>^b24b?0Prq6k*vL%TR-dRyC4E=$kDT!lA!5_qDM@VshLddx8x zNgypIA~?J>l9rU2=$9sQ3d{vGg(TWHI>p(W08d@epLd zB#yXm3kI4kq|`8qu%b`jq@dZ937CnkoG$>L+()~ksJt zL@t39ge8X2D(zTF#}>iT>Iv{TuX!v3&=aH|L|BEyK*eyORFi z>AKXi*!U@k`DAs}cEkAm=Je+qoxq`=^@+Y2cW_1!lD{dug`O4NnnmfakqfZ-7_!^e z~P)Yd5fA6^ZkfjTkopd^48ZO@z-|dZpm9^P>QL$wP31 zOls#aM*G|Yq+FL)<*)AncOMG6ku-F=ebsHd^pB!V8I|ws;Qnk_EI9z~A2d-(fbXTCxOjp|fv0diMX;cms`Xcz z%ky9Gow1 zP1~%`=0IyjKIX@r7q2N5u%{gusTCJsi&9+{C0>Pd$eO0l+S1oK@QFh0ivGYFyzNlTj@KKQkq>(83%I zwZg{@q3IRix28QJF%g3@+)JnG(IW~CyGT7tCGc%1{2%rifqn4Bt}|J_j#zoZR=Hj> zOtrL4lQo2vh3X#`Y$a-^NA_o&a`T*o@TMI^rxKuXUZW~>PgoZj=Mf{lKY4_12lN3I z6Mv<--p+fsP%D~F$dujUwwFmiv?eQ zAqk2fi;}`S>1Tz=U}Be(m&m3q-6s4_@F(sOk2?Od6p8q zKIM4Nt0lhTOYC{;W#YFK2ilp&CqP+PE#JHAKH8mZIq$3h8@rF8}sF ziOP^rh*ogk0WGv>64T!t;GMoIVKg2LG5-Y1M&%R8gXqXgm~;7F^oSZN+q#YG<`6Xm zw`53p1ynY4ek1nI_Y<+FAhIJgl<<%Om2oq_uGm3?Dp-$Bac=xj?|V(;9Z+Qi#|1X5 z7ZYIDa|a4l`HsFaoG)BW7<1=`DjJR}Q#@J|Y;Q+w3>3W2)rFvtMTMff3$W4A(qzfk zw{+dh^@-yL?XL(bQm&lrEC(7*o7RN;*O4A6Oz@AY;1rQNAkcKEbcX+-W_T5n-7lt; zWPk`m9mq)A%9LpZfm;=9ytf<^cUd@k#zXx7QT85SO=jEr_zoyo5JnvV6~Pi=P((nGUgltn z5Ktl_9YjDtdhhYh85jo?4M+)95n||wfPg?|P?*qyQl&=e1PIb0l>hz`^qk-Q-}{_9 z-}B5fEq>o#Yp=E5cdfnm+C{fP`Fdbh_-VGAnMI&U*H80+(Biyy6CYmd7*T`J%@pY8 z6p&*Oc(}D+xW;Qfnzm=22Usv{9Dnxth#dLGMGJ?pRcZ4|TB{Y=v|1ifern*E%PZN3)6{Mm!!x7Lwt3C!Z`ZrNF$( zR-cS}_kyP(UTg!4lz@^aCTGge7>pKn+yyh9b2nVOjC~(JQ(2{sZv4UpLciD$931cS zKq!kwryB6G=Z%6i3w#tHiL~M&1nJBo=euRh7B53_N@Lll^3sd1&T=}X)A!_rp9!9V zW_`kYzcv@Xuk32y9$vh2K-^G?>b99`ZL{i2QEotKn?5-t)Uk^_IklgU2b@ODEZ)Ru zkS6K{5)NJ3lC0x9u3vKO3-m|&@j^_eVL(9d=nT_{^NHg_4z7Fv|FFrx>Ci8nISCB)<(2npQ0)DGxdtgCt=Aji$UtSdcNj#~)5}8GJ z!}RTx^XhdfLW@*q$2T)L=)m+Sh_DYsIL(J_y!P5xLaZl2Lep;??!vbz_AMhVGtOG7 zMfyq#KM@N&%ZNkGcy@j`eJHKQc4C9QknMIWlWZb8dKN@B!EpcPZZm50PAsv~yAzt= z;`?C7sm$gO?aP`gK_#s}0?IT0xS`EUg~~uCh!Ljq`(4hk*|Ft4ni`7uBmaM~?jXwq zt!P@`G5qy%j;$1IXK2VGhZE`e+}Yqa(dF7{HF63Rr}iXne9gSDlX=(Wh_*vBPC48t zt1Br645wlSTYy1t(YZ8KS1&dzGD(XWBK zDAMNQ30|D2P-6FFqUib34q!8rG$cj!_T*nqwk2e@4Rnr{)I?K}PT`b4+)^Qf3+VOX1()naxjm3;S!;@6 zxH$B-%CVUXgpWv4F?_yUt7mZQ$8uLtema&o*461w%0@YM-D0&3+S_u5p<{3`kvPXe zH@{rQdgCuVbbU1mFxN4HE@%;^h9rj;{cHO8w-@WA~06)Vkz?R1 zCC=#ufS)oIFT3J#a83oKWEMp(A43`tK6IF1PT4>f)m4l%>MZ;C_DOnbkVcQgE9i55;=f*7ETfVmoFL+MCapSB)?Qwi5w!f;u9xZ$j-sg zl?oKv(;4F8tt zWiWFnidQLJ!bIB%CUZ1CV<$yPjkG8sO7s*-fdsEJBR)V9?|1vLOt< zN!&R}GIqp2_`@8mky&jOcRG@|{VIFfHkgPP9>q-2g0Q*yLQolOVJV1Z`uZ}V`!Bx%q#=s75YiHi{iU-d zS3LxUAc6U8D%2i231g;65(&u+WIUpgF79e*V-9e36=t_p5=J5Ek~vDlXhYbw zhLP|T@Oxs2C5>9 zgh3cXytxXQ)t(qw2!^I8oM`Cyc-6m`Q@5kr#*$ZL=b+e=sSD<@7d;;ZzxqwJa7)m&emSZk zp{Q-$63|C)u2|%spL)pU_E-=jO*{ugerL6rtEu<19jzEMKf`6^2lK6yWiHLAp4TZE z{+;ZZK1H>is5)foH6M{Gd59a7e72b|7$nvm+D}x$wwqNl zAmI^_VM##IkUl?dGb4rU@kaK@QT^v5Q212;`lUbgR$IAY&bdbs{=4zX6=HdjQ|0b( z`-Gw6RAa(u|4%?>moNE~jlfoO5#bcutPmUatj;85t-yg6=KqWA2uC_hY%p!$$hu6U zkOJTys~%CLSr-s~({Lk-y~!M3P0R@J>r)s7__#Ni_Ipj`zfkz4qRrk*VIeJ7E@sM% zKa}OaT)q6s%Lv-=hn4v59My3)VGVD))RD#El`~M2xMNF4UJ|uybw7b_!E@Y z73T3uex;mIExyyv;_XMgv1>mJAnp?Tg{v?V{*Y}c=uh#IQ}5R(Vm*=$S>@O(fwz_Z zj#jINj(E?0?3BqV(Oz>LW%Or0EAl+K%#U1Lm?fZVN{W2z` zX*zid;{H|UY%n*p;J@t1$NXqpA$T^vyT}x2Wzp4kk)74!uNOo?+Oy7~LA*{+hdAf0 zDWb+Nrc;6*-q(S%Yz_%Ia=nSG9brhWV+92HMiYN6fCxU>;XN_1f#bx~woeln$E}{r z_Z$<-d(OEwqbSq4gdjZ+(cnVM+aJFXKKvj4R~8c39+Es?55~Or`d$JSHYw$3#;!-)%JMxK%P>9}aFL4_*Dp~K$fS#?h?!Of2CNqfJ_sEFqljrKf zr;l=f$=TXXfY*fNUNl${2$L$%b=O0;w>Ye;J`nu?s+Z!+?G>FkIVT^jJgT!(DGrs^ zSzg@*X+xJpQCszHCk3$B?&-KuQO@G|ZoJn6dG>nFt&dvAfu;9e)h2A ztrkJ;MaoV^h{sk|DbYzMmGzU!>?#xGycEv99BKQ|m1Q`=KkAUAS=DizUH#xZJWhSS zg9wC8Qg8$TOrC*vJ(xGS5Oo(nP=;9uC<11 zsLe)TcKX2Dn!g0hO$n~-zLntK-2{~a`EBf`DLxFjb|45%xSteO9)x&qWIelE;LKT< z3U0t_FZz(Zjo#vR-@8pR9LGKCH&azTr?U`d2DN16n?eZs-Jh2-a0W*U6OjGu00^;v zIwW44s^*O4h#7D8PUmZyjjZ-Jpp7ui1T{r_6yDiSuX0o`TFN9E z%or85F;75#Zs@otu#b~(D~Uv)CCJA6LBZ}Q^2()vJAW|G5RxuqHNpB#OjTyTPQ!>) zy3c%K>RF$?T!0?BW>3H%slTGzUTt=RBrBnt80o>Jy-1M*lZn}=L~<03Rs>Bc)d)f2 zf5h{U4Z5XQJcvV{6V1DT$bXU0Vg$4ITEHsEj;v61%p8O}t8Zh-FHG_-CtT$7*p9a> z(}y(UTM9ks^<*d$`nT(ZxHk{E#PyuOb>`M?OUg(l=25!dZhTGQRgZ*#YOE;~^mKIF z+#$T2eqV7sr~eJ$Z}leVlPj-)uCUQI5y~7I$|WP;8k9e7SuBpSiX0)YFiV@1uXsRF z^?eahc`Xfu@BoBOAD32OU-5K4*WlN?(HtPvYj+Nvgf1W1mcyCXtvF=!Jq`i&7Za*T zyIhKRhjub&0_KS)l^@*C0^t*q3rULGc0(fSD6s5=$opau+iWnWAh^Yogew^F+W=2M zu)p`X?LgvX3ghj=f7RjmYrP2qtD#cNG3AePFA5~MhN!1>w`7$`#1nv4Nm0a{J% zH3_`f8JurxD$x_n_#oM33NxYuO?ljx84_BBL=p3wWaC2;g&aml*@%BJJ(q+0*xqF} zn1|PO^nCxrZy=L=G0T@`n{=65Mrw(CsF)G|VTX*o5P4LIBAgp2Y3a@B)_ZAK1*Y`~ z1>qa8sp@n_x!OD#Qfm)gC{x@8cqf$?@~)S@wto~d=ZOtQ;ibiJ+RX!sY&=05%BL5y z>soIg`V$6UI&*uVL$h?qxYe%I3QeG&~-P6u`JVaLB4JPYP4J<`VY)vjb6^l~{U6n!c)!_*G zn7l+!ku2LJ=2nG#W>K81TIUOKfnF+#3w|z5Kuo9LLByEAo=6x#Sywsde$r~BiZA;| z6LBbz{}svK{M(%WDAC0!tamtpx5agBDU{dByqokfMa|SH^md3Etav7`E^-DzXU`v= zfGtX50%@^376IAw-cN?AIV2*o2gmN;O+w`TMKP*M7Wt{GZNd=L@yk+RrP(L3@;Jb< zEOh6LlMwl{8AJrNVolEj3=8_y8H3=5%?7l?Kh1K%ORE$WqrV?A|z z2mBrwPUJ9@sIL`vM%F zGScVSew358d*)#S9bK4y~H?8byHGZU3!Kyz5n z^Rd~>+`2;slw4-of<LuZ(*5!IpXDBZu-)6v`C$? zkk_ruk%-`{?bo>|PU@K*9?-m&AEpZh*%wa1(N}+!_AZ-y%P#qu-DB6{H9b>Lx$pqt zat3+;$$8eIj5#wJOZGH?Apd(NyD;7(k5RCwf-ITxo4SOu&Vqbmi8x9)4>O_c`1lkh z#8lv1C2}JI4ZW~d_CVnTsIl7;P}}Xv&?^|{HX-lwoDlK&K)e%_SMe=1cbgGk>G$LY zKF*@Sa-h~KA)tdTV2uqS`WB6C<}4>d*4_#x{Bnx_)mh1Qmiwo}+b_AsX5}jDG>LKJ z2aJ~;Ppb{`_rtTIeAaBL4)9FS8Go0jsn6QKC1llpl{WMvwR ze3`2o!4EBRz*?{Q{DUJ&$gGwlvzkA1#=Bq}BJAyh+UzP8y;C~67s*SzT3G04v?a2v zx7PlejXyfAcUyL@9V}+^xQcT+dph4ls+)rn`=NEH0*Y{h=K2hp(NfJ_^jJ41C%56P!Y60@9@w`Qw3ipPss!D9?`0thNm5S;YM} z>b0O6g~NJaf=+KtH$sp@D;(qaat$es@Hd=Va8Z85iUmEdBM~Vn-9lZy5pCsPwFxW; zkTbrT(-M}YoPEFeDU;0UnO=w-!Vkn~$4R-ETc#J*_ic$-p@407HW&Awe#k|+A5ZE( zUH2i7-)b@zqlaVi;GY?11oWh4Ii9xoid~RjA}chp`?GD{=|(aQzb6pw zt=zW2CbFyi{$}`Hx&Xy4L}bh>IiL;{1eYSTpax7f2RmvGt8`RRWTXgY?<`~h>yHrj zIv%j`hMw8BhPu}ZovzIo%^EKM-p4jw9@DDp^e7FvTeoFFQh9heHG`{V14p>bVOUoE=r5k?fBE6a?3%xOh2i83cF7v*sdt2tRb0fsdz%QLuzhSgOR%jM~ilcRIRT@H&bIMR9} zxT~`*<~dmD|&wYMDv zA$E|>E95X$7FnqBGdQP}L}&xy6Lp`BTA{&0`f_Mw^_W7zK~OTKvCv=kXr0~22i$tG z`e*hEcUN!Jl4)ix#_vH-Tk65BiS>dm{d>q^u+|++C>m4cr8JnoV+vC?0(ASz-fXqp zF4$d4R=;kq2x^K`+`XPm^z0BxamczfCq>0M?E@vl;_acVXR13~M-hQt&cT=(rjglk zT7oUFg3ghWM$Qc-Y*>2bHO|j_Xd#2i$%WB;RimGvH1_(a+=>FyjQs zOHI$uahh9CK4aWyO0~d3v(=ztCj9GVq@vBdzpv)b3$FCL4w4mi0@hHS=s`q_d><}4 zR_&%#`RO5nxba8Ms)y~t1#6&vr*>~7O`ZxtINSR$#oF&`?s#6h-8fyOawah1?i+qE zSsF#gK4AC9OC)CSn~ZQ+h?UWF`ZGaxz*;jRuv^ZC*mE4W7zs}OiKOY1$cGB5U7|%K z$}q1c9&%|F8BPSdi8O7Z7W?EE-iE;3LFO)Ffr%ktTz|wT-+B=s5OihXCKn#N_9ivx zNdV{6DA>G5%({Mkj(5gm4sGu)s(d55E%h5`@-jt3e?6uK)0eb{^2@d1FEQL!o~0OR zsCRUkPM>k$7(d&>Tkbw#E?Cnb`CNX=dO7f4g^9K0d#uJ%aI~+jw_1yPKXK78-F93q2-xg*C!eQeF6e3B-f6y9y*qF5)O zSAJa5#*6Bc?OP1z@3RBMt;Ea;ZfV>C7nlrZwdK5xcsamTFW=z|w2Q9JDlDv}l!#k1 z9$9?t8!!0>Wc|+|u~0oU!VPLlMMHcCI8~C8A-Q%Xn8J^VW2z7n^ZS*(&4S(@>s}3( z%M1zOoPOqS>yJahwI?^ZBLDE5&>ME2fJ(3NN*t0$R`V%8^uFk*?j)}&;$=;TSRpgm ztPug|`3D#dY`Oe)3y{|rk>Jm=3l{g^=WE9QUW#h|y-=|n;gIFpV@x1HTfWzTBhVnP zGLGT{CDwxK&+hk`WY|R{Wu|c2Tdwt?+pBA(#PJ%8klSJg=Vk?yt?`u#n0Eh=N97^- zV4t`Ei-Gf_R+qm^e(#UcHoKF^+`c<{ls(xE<%JzDkSJ~%k4ElK1oWqw2p`64%0Wgo znHw%lM^;5;ZbaM&O%T9L!(6*yk3Oc^;Nd2c-1wa?3KC1&MH%QLEh^`wr);O^3zA0% z-5u4-9N}bb`0Fi<28w-?{WM}58g&QHXc;JkNVtpp|CWavZQhc+z%>&BZl!W6Qn$D{ z9UXL4eLyTA9mwn}Y74Am{zxh5dw-98+a5m71d*CQyUlY+X+gw7-VPNucx+-7wfG@G zaLo{ss;7vB3noefN}VuqB0dtXER ziwkHkX&4%JQPRZeT_G#PMPDTYk$S9QkzBRkzFB((e?bXU{GlT>X2 zyC3X%d5rT|Sr;M~rKK@C>4N7OIKO%Z3hnGGj@HOq3P9F_`pY=$Bb1xExL`Yt_w`@m#0 zX5vVOi{LU&bJ3`zpKUOHrV)tfyO+obJ|y?d?e}Q%3OY^Qd#ox_qJti36s|>mmt1v* zNiJ?=ZDHB@rIalY*HO<{e7yzYgsh)ek;`1I_H(LtmtsF8?Ob*_&~yyN1_CLbv#7~z z(v6zUL3F8m_&%%2j^N|fnav(3{tqyLaNHAg#K{WpyzH*OEZz|d!oMgFbbb`V2tJh9 zJtp#PFMu(}(6a)|^pcx27A~Rua5RiG&OSQ21MQ^}ReoYi4`DWYE6;<)_qZ&csbE6( zSQHB8qf5V>uiNgITM@*}=M;_>rDiM7Hzx2?8gfQ|4Y{JOZJ+Camo*+@bx%pd2+&_2 z6?_{;jRJkd1&rS&q41wqTEJ&wO^kd`xKF_ zWs?uXUs92u3P)Vzv*7CDh2dsddt&-U*d|QEoF}BaA;ZNhz7`Ew(4cy^WrN8-k1sR^ zrv~saF7nIh>aS>MEvj^U+=^|2o6LYH9XVu#U%p2~jCetoPG=WWC*Of;PM z%UI?@Z){@j%^pMRJgA16;bBG?KM;8 zy1!RVj!W@`(uHk8k@UTL>A^pKJ@n!y(|w13@>)u=na4|s?PJvNO5L35K8&v_(@AJh zz>bG{nJes}xS3}JHR}{c)2X*CoWGbg2}xab+b*Bf`X$t+TPj zikJ$Okqg|x1$tz$gv=nHGUlJS=0W>!=l#}8u8jXO@04_(+snG=@Sr!Lb?h83rJ(mk z@6MHMpC9OV%}7&)IcM46K>2zrqj5gIHc8(qDHfygB8Wfby|JL%nxLe&GLvA|{*cS< zbzW=US3$$*mfdGVzBoy%!j#_4?`*WZ=>2gE}f6u z_UMxe)e>V-ry@-6nws9dDXMLba;&&|@Rd52{Ix2Z$jJl!@(i!8H&&oK4WmJjbMg?b zer3o%Nq?59A#U8k|82RJ<`r$wxuA1(>Yt*GV8Au`u^UYU8+hz5V#8@W?i;(wma%CvrRQ+ju5^r1=ns zZ0bi3fOYo-pO*|${ApgdpGqZDEAnv~;fYxeTMXkap%FK+k@TLcI2YIa6A9Bi*t~my zDLp*;>6OQ~4eeupnqQrIC!gU;NO1uJK2L|1(9tm#@rs76fMTtHvBPX+C2=d|Fk&jK z=EnB0nN5p?ucYS-lBBow>I%u~ajKE&CwimZ4J>r#poAHJv6Cw8sIxjXRe=ygUNtxSh(ZF#f#n~|8C zyqNl9&1l|==SsIlLp4mh5+Fmj@s1m^xym$L`q`>054TaR5#`STFDQ?k&Zi}X(4Ax1 zJ?K;eN3&7c(?1I5Rm9NVIOGiA-ET>hT`?X_zL>j@HuFWII&U25@U(Y1HKu7hz*m`~ zR}>B%MZWE()DUyLKd~M;x#>hOkXWyRGX!VQ5z)AcZ?uQS?nv5bH+z_4zZzbhn{Xg# z8id7x8MpXWsW4^KwYuX|Cg#j5^lLtyf0Eogw^_ZE#%YXN*7eJ13Ax}j^g}T#L6td& zIo$N+ohJrMOUIh6@2^*2SKcPnRtlB7$K4UF+`Xj;;S@tclmnw8=^?jGk?wfJvrajn zmWx?AxMDOcqP3J4{Z@zk)HRD!WJ`0xcCYA!zJIGvU(Ss-dy!;`h1{?04OisF{R~B` zHznsjL*u)he3=(9h=VV7!DO8k6H$l+jcAWgAC9q`9I#4sKSg{D5(HxvnEH$ticcXJ zP1eXspWp(NYr%O(fYKY=dd^m!Em4+5{V`4ieY2E~Z zLO~wkM8ocdk$lO(6CFulz`laC=2SmAHab?!(ZG)pF>}8NU|h1rQDJvW`(2?IYkS4X zIk^}sf7`M%ChALdv4*p9&{+$KY6xnNqMyaMbRwNnUx*(-Cq2snoDunI^v)f~p%oH9Y4)7?Ntv2R9`drI`BBLGN~XK%4Uue`_4;HS+#k z)nZl=%*X2ng9(W-d!SKhRA4?`^GZ0#_TaKB4pkXxd!R~;>o0DpLjjE&vQh_Y zM?9z4-<GK9#My*dl?=tdoRtk zxeSekxR|2si%<=9PES5AO?zM6lM`?x?X0xH#NudShmF34+MrWn9?W4x5)>t!k}*hV zpcNnCd!55xFu{K=yW$c1ig!C`u`h}-c^1dkO6zk3WvyH};Z&qiWkVAwO=>CL#5Chp zr-H9|n4ja*s>_>oi;u4K2CHABZId;yvywdbP@1Ess4!rh9F+`&dUbm8%6?Xdp!qyh znIbnlH{%WG?71TcQPW%nC5u(W2)#G4T=O3;)*BD2+1l}l{ApglvTVu0e*{TUQU=Xb zOH%J?qtWg2)Dnr>e946@vFP45zHNZ}tMaftW<_E~8>zpYZ(GZW?3hDcn5)bV2Arc5pTuzQs}qZ#vV~~N-3`qKP)(_d zk`Z5xr;Z{R7bh24e-YV{56WjRUv)o>;82E{V5l*2LyAT2AmKOwe0?yI;D0HLtYuR( zFV`m@Q)_2VrqS{Ycpk42hU8&9X>s+%G)L>=I>s18YrI7lzhYlrc+-9^dSGux+cDbh zP+{Rz=nxq}8%+ip0!9kloWN08idc_2)w>-{DXhSfTbEDTTGVFQ316DBsi&P;_;z+L z@{d!)7Ax}9e2ny$MiC{wo+^(Dby=4zaW1@dxej?WL}*EiF5H*d2x-l{lOm_z629)H zgMG+Gid@g3G#&kRk6cF{E@Avdf`7d|!%|jt|4SI~ed`_CB;B>nrhF~Vj=@N31Pl&pJulOQm>1{sa6^(>ZYNA1>&@irXDLj%;TYB+q~p|7_gts&^e(>E z=|cf*kY*oQ23m2_(T&k>Ba}Z@iq@x)1bzwG=s%jrWa>&RioYjQev zzjW@gU-9m)^2jFM2UZt|F@Z{FF`Kr$gHHqpc40 z$#oTQlyrcQI=)Uhkps1mhaI6ag_$_dy9%6+1J-Z1hp8^0_3)MDAAFrQx-#vyO~ z*_ebA>ng*&-q1m>HBBcBtJ#IRC*73X4BptQnZKnO;nap0lYGbzlPwIf+>!5H^vn7* z8nOePAhlozmS#5j*BTR2Z*@TOtMe{dnH*T6O%sCjRDH*fH;3RuOLdh`ha}&LomGC7 zb#RB(9ckRe_7a8lhH`g2swa7OsHl_1DV0z6&eK*_jR~7RG1~#XEBH5*0HkzDCszzO zM6R+>@8J1h9E1ohAwf)kCnT3{S`utV%PWg;<6boc>g zTstWC<6oPGeLqqDGRxrGSEhS#7cYn@Ua3R7LW|@dJeA=xgpjh@CQ;cIp;CvXn8fny zVCRt?6q$7LBP7t*|S1 z)19xxuRDB+Ov(?wy3%(54$Ws=u?g4z{)h$$b24Rm6NgIcjq#svW#&9vr~&vvMa=m6 znylTgH5zAd6P-=R?hm$I$d%QsJrWFrqx=cgPT^@rZA6qCU-NTOKEJV3&SyHa9QT0~ zIjnI_@rM1xY^mlueKix|S4h=n^iALeSEe2lwp#n{8(v!Jj zeM$D7`>u=ud42!5S9RNfwj!n{+_+kie%YBtRlwYY$p+B0A$(-5*fiSS&wCSyTL17r z>P=T%a=p6w_Q<}-ro|*jQ<|;DPg{S6g&wd`laB*aF%y#D1%GPJ&`>P=;8 zsLEelphZYX@-VczU_~9}*FNrSLO_zjNqbhzb6B%kCnA<)=_kO-RK})<3z^Uo$KCDef}a_ zh=KX{^0ukV^3-Z0jb&|ph2!`FaL zO<#<%CT6ZR2OjdCXiH~qpVZ%PKNK{DtEYwjziPCR!}Qo_pS7b)_J}sb60=Tm6NB%%$pg8!#1$Y{E{4|M|l@ady)c@^U{PPgNv2mbd1?GofF1hjM%-+aJMT99Mo-@5QQ4sbT~XPu8KZ{nXuxL}J>)#~gOb91HPMEYX|N5k(_PH$rrIPk>se_XQ_iH3Q?5YK2L*D&TbEiheq(9Or zLwY^azrG?yT^tA(wI*Ng6N+pti8I?@DT5qAkX(2zHs}kMMH%P_R-Ks(OiUdguEzUX>jtRg#RVbr$G6UEmz-Pma4oemB-+nZX{-t!9> zx>Gbhw6Sq2WCs`0kmuDwx)9RDM_e+zXBT@L^A$owOazu~iw^&o5a9#D>De(R_7EV= znh8NLpB-zH8*YT@t-gu_w7Xv!F_{fuCS6>z_%sO&%F z2AFhlz0Qe12}k>P|D3<70W=5CPj!D}-2o z8SN<;Xy|sYLvl1WB4+)LaJF$hjSPwJ#3gGqC+;orS1n4~(hmPC?v)(`lievKT6!H1 z-zOE@BX5IUVEzauRCLHi*Y$T>R{YlQF0&2Wc4*F~_X98fYrMoth0l(Fi@66u@HuP` zukIOPk!suSPnWQ8Qrli=ibggVcCWsus5hpQlJ1>P?j6`n8qzcmIsx!0#+g4BEdL7F zIgBWc)y*zBzO0|Q0<3~}-k z!_6m-NHPr;;{iS&+q&4foa?wRZFi@n)4&urB*{HX#%Ba=e3RuuS#nhKzMr%%6PH(N zqueixfm)lCA!hfnu>-|+VE&W5v+Dttt(%C;TtSMH;n`i_vSaM4aBso&uU1#`J}!nC zre0tsvz3^7a>Z3>UFUeq5_Y2wPgF zv_sPAi#U%Nic;FhOl=jO-(^#(Ypkj$$*>16$^Q#_xJBAwnxPW;txdV# z1ml_KFsA$Eqlib#|2^uZApHd=Ke`f0Z*@M|aDk0JHD^t`(Q&u6lJ%#hkW?%|zwApA z_cvD9Dbg%QJw81B9)hZs81bdTNZp%s0Wc`5KkGa7!~E|i=RnwPf`{Pi-0hy?+rkT* zYXb5Te>VnWsSctYbEY*vhsF!g(hwc?4Om{R@c>qDJ0z=TdX#uT7+sC$3&Im4sVdaE z7;y_EL?Xf6^PSIOf@O|hBSgK9S?%^PyzgA+22Q06l|1nHw@ zqn~9YK$@nWujntY=_|34zvN1%8>vIqh^a3dS}e5WtAUvbt3Es6I-sA%5=!B;B`cGU z0Q`03s83NcXowkwi5c_B>e$&Vmmh^Ay}J)l8tRR$eiE0|EE-wLFIp~pPy4XMwMcq! z&f~wi@I|IFSU%XQHd**t>d1u2sI>r}`Vhd65?}N#EeoqJ2xr<7F4p%&z^F^9Qn>Ea z`2RCRzIL@KscYU=Ek_j0VY2AZ?VY3`B9ht@Q~p9cphnJ3A`xr9v_!MHwhPF(Fk&nh zoyECr{zd`Q4>MS=krzJ5R#!D@Dx%54*lnwKVm+z?4ylvqm!~>V6T^JrvY3@m z3fMrB*FMdfW&8gHKE^Kc0`vHcseIX}l*R(rh8X44ru8DEA|_mAOo)>7)yP>GFM|4; zfAUM=|A@W9zc|#ZIHARH{X_$6-6l(%MiY~bz*xi zzrsdj8`Z9Le0@Dpc%BbDMvEEnTu1aMWy@_ih*V(k)(~Q{P9X>9tey-7Bi4EO%W>Nu zP{{3^(J?Hb6`K3}XK~PCIR|sL=H86?_-*)Zafic8wCJ}m8|1m?`?wXGvmJ$h#Xq1C zU?6wC)FIqN;d&hk)ZHPxGE$4UpYO)!vlN?nOO?CDwJ2smT!s(J2IBb*RM<1<(P`X0 zo`wqe$UYUSZ9Q$NA-;XPcKYZSrLjO1YcMj2l=GY)jtZaOOR^+){Y zZNox6lEW*X8Y$EO5LAPvep;W)blm56H*oWIAaBja*)*uMb~sr;B$8FR_7im6YpeJs zrkMQ&7{LUb%89oQbG3-gCD-NXF8kZPtJ$x2J`o!?z?7oKNmm~OT2bpyhinj?9Em?^ zeBl{VSEO7sBbmu~kh$2HtlZ&>l#4{7EpfzehiBnWuyY0en=o{xm3H_my`w(X2lRo) zR{npqClZdyb?pMH&M6;tf?19O!izS^K9*$1^sG_kY-6IX?xTPos&UsLgutPFoy5>Sa`}}}^&S!cL z9KeZw;twfquRh%?UkiywZeepE8dc$P%~y%LUib5%(dAvs3L6RZU=2DxvU#7(@`Y6XzZx_iBrFd_^h~r@A}P z&Z&l#KedQSBsOI-m}OUHs~E1kVEiz`G=KTB4YY(t$5e{NMIrh8>Ucg{3^GA5Mv>1* zApa~3fWZ2bAS{n-7`Sj&7g%kMsM30fKhqD#I)o>k zm!13()H)JhxxQ6hUa)h;mCafIqgC9K%O*NV~p@A7~9U z8A$(d_wjBpQ{4Gs?fY)26ge0mLq!+jGJJ%Poht9Z*TR) z9sv;4Aa6V1x8!el?gx>-yeH3c7F}mvV?_J^xXyb8Tk7D1D*aY$0hFko#rF8j+`X;o z3EDkV%%h7c}|i8T5%lndFj%VScd7b=eU`0R9|`i%6h70dxWm!H28R}16Bk`Ka|ZY| zZzp?nGN%tiGkxte)mK*@7~~Ufococ#s66|?4nS9JYMqwQhku#2e$1E(SQ+`i$hvuS z%YE;N`no}!A=xb@;mnVI`@npsyz|4Zp%2*sg`c}RLQZC!?Zv^@i;$**AFZr260;nZ z50*MGE#=(>I36=rt2T0a4^?iMZ+zr~6HazNXvyu{$ZKVdI#(*qH{v|MB$`;`!x2NT zs#>xo3@k1*A)cK)WJBPTR^v17t)5y%-lfFf5EG$F{1rKaoiapYQ=(o{jQ9R;qjMAP zd8Sju(xl;tOVwFI4}LFsxLisbJf;W0TGIIXxv2Zb+OPDCCGw|J5xRpvMkMv&`h$bv zu<97A8^sSQ?Km$AvnG}Zx-DruQtqmGRcYG#LVd6|#rONYGJ{{=RM*aLd~h1{yT_;` z7|cBl>N7eBsYU`R=L2aeKR`_^+&OimZ=-SgHs?<$G**9|Fe5**txx#iqHZ)db^r+H zJ6CSVJFB;#J6vpDR~|0NRd)QM2j>5z+7*53T!Qu=XgMGPtd44+joI4*?i<&aU(#lu z|16J{^j0N?Lq!xo1b~zfFY1@eOe!AVp`fm7XH_}jeERR(|HdQFK>l78S%N- zqZzHQi|;pIjcRpqrZ4v5oWEPeOnOP>c^{UuE;Ds1)$)kS4ceL3MNHL7ZE7O7Jr|(A z!7@|*d&j#FTaf1q5)#JVqAJw9PqSI=+mblmrl7~>go9Ik z)dH=jnt@9l?b~oM)nD*-+87?-23kTTPBY{Cqf&eaN-E<%T&U*QoYh;=&cLS4&jTmd zvlhxjzA%ZGH{YtCxSDhT5>2O&&GOv$1LmX!hu{w1o|U)?M(tF9hxaDn_J*`)ab;ao zd?huw3I!-yW@zPXWWNM=G&&B+j1c|E$TcSd{ImEMX7QY2yye@5&OMjEhmDPH=MK%v zP(n$<<|5Pbh+Ny=@}?S|)oeHf)i>i`tGR(yFHAY3cx@kgS5~SDFPJjM`l@*W-46@( z!rV}H===j?%$i_)eciY4b=s}-UDXyn5J_~N8gNmk4{Am&-1AzR^nAJ)G-n$6{kmP@ zatG1HFG{a7zXU?n7-c$iw$DjyxWo<(qvj@i7DH-XEX&*1=iV4?A$VWBQNV!V{4f{j zB8CpqDm>|Ry-VJmDg%mh9!oUJZ!oP-3=Y}E)Q2}c{v9Sii^IpM#%zLX{EZ?|t^{5A z1Q`-SZ^8CBh#FNix#8z$z70vnWiE7ObjTXFNz#peJ8`r@&e>)y^i_{mXs5a8`R)P7 zlqV1aLORfvol~^b>Xb9K%e!7Xh#r%6&r=YUBBH}W3lTE&Y=3H|E9z~+yA zYk$^hn^fCAC3QCI=RT}17Td%59$%}x08J$|Yp?D`rFcO^Q43R@+c{-fwfH;8B7-gr zR6Ak2F*Xp&u&C>xEqZN`ESd*ACDK=@OWVIqqio^`<6vBr({CG7OtH{vBif#)OeTtz z+n?8z9(ta8zh5i@FwCXpq#;dK$bRIO(o8cy*-367%*FZ#@(R|{G3s-+A2kxpG7}>X z17KtAx&!>*ANpTO$P`r9$x}C{Sy%vg?j+nv8OlSpXGniv7@~k&Tyu;IvbZ?*rxYf7 z$QFt9!LRh>$p5;&>;LfJ!!1PU>Nhdc{4+3p*8VC^#S+*HyGL%JAvH2*?@gdQ&WUb> zpF?gil>h#%xiX)>@gZm=KG4(nziL48CHCbZB3JUON9APp9;G5QmcU+CM^aBYssq80 z4P8n)vl;B*Y$A~$UY7l@OWXc0l3lhC84D(&J9z`nLf7?6c=bpnm;EtC%m~KiG<#Wg ztjM-rv?0rd58(B-bgQLr4nOtxl$eirjdo=xOuWMb&Ox*I&ML(*MD~Ik@~y-Ov{-a+ zI}9i-_qWQ7^IZ&dcK5OW^nrhWmb)XktBj)W_*0gk*%8iSnjP6GiaEibz^G@RB3T_e zKAbbgu^1`B+k7ON)kza_9K-+9%m4kMJDlZT3rQ7N3xS3)dveRHdru}vl)YrnM4G_H z6_1=1jcWeQqLrx)oN012B_*Ny zIAv#Jf_O6?fO5Ad1~z}k$|-vTua5`QPFJ3VUiudE5uISTRmS!wc=xf>CBrkg<`5T0 zUKp?`QW+(~Z12@}w^030@BV+D&FPC7OXg_fn*pwn_xVS^z{q9)cW-)Wo$yNWRTdOE zZNEKcBXMZ!Q+rvL{?qIK{i&RJ{v|LpXSpA-J2_1B9ScPspe5l#fRp0HJ_M?i77wT2bGLf}K&xJYq5(+d^4Hr5c zReMpO;Ge<8)JY`l-wG$`xvH@~L!&ww^inkQ1OUyAQSGGhzk>-tgZBQbU((t}<|^Y3 z{OG~*d{Gj7li=*FJ}jGs1RV>_)6j+gC^aO@Q~^Lo^@eNKx*P9*dhx$MspB5YELwZ3 z8#kbo`M>16?vClY(h+v^#_heMSYDtc(Ai!$;i9q)(D{O2F1GIdJ6{N@iWvN=)Hjp4 zx&-CNpPRqo%ogKSE?Y71pWI&d-=rbk{B_<;d*ziKoQ9Kqx!P-$x$AFy25&Uvp^~Yp8V1cXmfpkz=nbo7ts7_m z&X@8VhrKAF-9}8d{j^~h%qkPuW6$fpQO(CbD7SX#Y_i>Jibgocri)05U^ zj{K*W|NBF6^;AAGW2tsiQy{pYx&Y3DFz3X%K~j`2=R3RZ zsZPE7JDQuhYAzC0Hy*Y*UfyjufQ33sDq~H!t8f9UV`5oM65GBvqJ4$oq^RBWMI7h! z3~s?k>Kfl&_?x>%P{58^)u{9g8B**+gW5yF1YtxD~Mv+aY(+!%;vSFnGi)47+}H7ATWTD zlE450!wks4RJ+(^Nqe^im0MN{%m-#bm;q*Rm@=b6K*JBWVPMn{8E&IEfDD)4x_oAE zpYM77a<%^OX*@>{hx= z1@&!Bx_;On;X;&umMPVN#9ob`h6k+9JSh+!LBr6d2DKBKlQtvF+aD3jm_bRYZ; zR9i{tf}X>WJ@=Rk?TZFEC$T^WSM|BTvIRN1#{bC)sQEA#AyIn8I7D3THHjsG%urpg zu;X+AMcxY6+0E{u1(py#Mjb`-@!nt!BnKyKm~bxk18=(&llZ1UAe( zcLaV)yXCFZl|E~crmJT|=66E_`!H*`w&qj`5wSJ4Gyr5+o5n!Uiu!O|h7|n6Q2++d zBU8=PM|iZ}=hM0u40TzZAz#=6C;n=VNuVShNexE&%!i9`lY33x%jxO>VbYpzPJw9; z@~Sg#-oj%}qdCy4CWU$P+~I=7S^P@*WYX)y((|^#Wk$IhlZBzJ=;|BU*z~ndfq2r7 z+iBGY<;@PIwh!eIToCIHKm1=Vvh1Qm@L&DV$IC^y(8F5OR7$CL7|A$XK(wNkS!2VT zAbfUSlV!;J9iXBO`U!oJHDwBOOu4K_VqN$rr{8IMgkX@U!G8y2p#74-jQh(ynoJ$Dtn( z?LKxowRcm`S|Sme*J5`b`HR33j=;2n*`X|-x*fFvTN-U=a*(2Qf3cD}62l`=JL%$8 zz_r%s0pcJS=+qi>%3k(Fepl4;*)remFh_ zv#z<6oYKMJ z6${TpfJmOGS+Ry-7~SF(V7EW2GL9j;&oLo1`|A`4B-bM^5m4-5V5a|#IE-sE+?~jh zM-yO>^QsJtVFNaV=G8GBsgN21>68|Ij>9iG%@-o#oIKr=zVbKwUTVgzI9S=IH|>Ua za2C+Pr}T~(xh?aESy!Ad@ieq7quRa|TEY$YBEcTd&<}?bk^GWD#Dg-|*ufw8Azy4o zSK-wR<`-=c+feDlMS)XA_wkN|5kmCgUBv@E>jt=cZ2esy4|UmU0icdY$m&3R0*O{U z?ReB3`i%V4YqgWr8<0KwFuw+0$c!+=q%iI|Fu^K zqlD-NQ+4jK02lHRH91g*!xK24QZyg&Sg{QF2?3aoxqIJh%PHyhz@jM+vSDTna5B3A zEX;es$?SDx!FrUo8B^n1EU$YxmoY%~{Q2m15^Jq00|=Mcr|k_!p;p`!8%%sDuwdAZ zIBE?L#X@KWu2qEo&9u+fr%9&qNE!<9A`Zf|8?@D8nTu>5e7-Fw0;aKix@gLcy4_TZ zjz0LCJ>S+Mzeip{?BCDHMuB9teU)#3=va=tw=pdB+Re>Xti_ay-b2h%shLRKOk}EO zG5B=t4a0cfZTH*_mBloTG+-ug4p6N$MEb8g1I{#Ye&5xbUSxTn^%_JH6c=cC|Ne{wWh#Gs_itb_X5^+yl(jQPTas zBJ~p!tmQ0p?(14cN!RBDY%MjAZyw+!1z?0wUQydSdPo(|0-{xbiB{Cl zL8Y4OD2{oC#rVMpnL9%Ws)y?f9mIoa%t;TVR1C+mQ-CKhk*Z2Zv5{0U)_l&oOgeev zct-%}JSD7Gzm-Q_B(f-qFLbkion>!GQI6^x^O1rC` z$7mfM&TD5d^YrGRMA}LLorCf&Gkbo#B*_SBlb zEv2zMZz$CGo@Ucd1B~P<2D?vfpT~9=m%eZNh%=&cH#jX}A8Me|wOWJ6Y@d8*ty@J; z-tsael^4s9^d{>(TB=U(+PQopGkKLCxH`N_ zV%Y~Z>CCvymxHKT+;)z}guToRZ@xQOg*oG()*~1#LD=+8Z~xbRv-jKDON=E|_n}pe zFs8ez07%Xebs0P+8^Qy{c=KFB+f)>lA2o2}sY`nydGCmzvuSLtcifDw^3oM<#`2}1 zBq*-y(9XVqXlB#-(!84IDBX!}UhbyE2Po>u_0X}<{=bvtu5<)afv@M9CQMf4^0U3rVc8_BqaF)_TTeQ5ZjO$`bMY>s)7uz8q+ ztNO~3337u@vOljYZ|lfzl(7tCP|W|?f$}tF9}$dE3q0P?WV(8H+&IuLl#JWc&Ol^| zdIb;j&#qXW6H@Htu=$;mLWgBwPWgF;;TMP;4wc;nRAH49t-#D?lQjhCQpL3pLre-- zgQ)%;E$abA0F?codeiwEoj{b^eSty}jA$`8O)ZS z#vQ2e$26XlPHzq;G*DxHeX&D#RgjX-g80{cN@E9u_JWQ{}V4@CPVqCV^e5ngQC`r9Up960gPtm{0&J8(hp%85l8Dk zF)~aoyd5by_P^{h2q%?wXEWa2egMuxVu{=Y>w%6$lg+}QMzfexvJ7*-BcQM_p0cSl zrQ0K}Ok>cljQ>C|@{;j=ahBtQpAp$gtCHC5e#nCI+$jtO<|Wty6Hgq6sv7` zo0F2d58K>?q$TVe3Jxj{B%~{TyZhVPx*=1hPoTTG#lS706{UV)!AF(7oMxl~W1(rK z1z0gY>WUpm=H5lsKctDjL{W*~rnF2EZ3wO#&hU_C|6Jb7L3$mQ7UUGFZK0^mXO9nB zuL|LP{!(|Na`4lcbas}xn?wr~b?(;18v>#n$hr|Y(ofoqVip~8Hx29oT;Otuf#(V% z9O_fRtTs5q$#QFPX~(tWvt&C?R8|}`+?FY{g$Uea{4Efb)jyOiOJiEl&HXDPLfih9 zeGJwOFhMN_ABw7R4%N1jjA6VCNR^q+#EH82zG%w}$X^EuBfSIRCZPGO7f+M7^>F~E zVwq0>i$RI$F@N~YzL%Qrqq(MGDoa_qcuP|FDTJ5Y#Ys&G_*+Pi)`PR?gDfa;x_IO~ee|6OPK*m>_RHSW*@M`+K$*C#I;mr<`R-s1F;sIVS9d zBElAik~b1XIa1egpa;xG;O;zN;I=QaE;Aqd)#37tA7RcWX`gdwTP9QuI?vOJ`SpQ) zx7<7l;qLF)TGdNv=gMdiW>)-!##tXh^WEYp-1u8X{(XoB<-6LS7S0a zdwg&+n9i<&tCIgD8D#D-ASBwqODtZ9EaWnHgHO+M#2U>n32jRNdiHBMD#fBQe$@Oo zN&hn&u-&*06_~6TZ{$<#5UkN0&N1!74tCRkdp4v)Ix>LH?!pA2g|)*C)6p%W9xVH5 z=C~Rq-MiIYd244U5uZy4bGxR&UWa8u1g*aU+f05P24FYf_c@q&7ClHp6BZAOIHmxR|C6#)jST?{@V86q2k}2R;99LK|PNNzt>Dr8a+rMx^{vb7S zzI^bI6O0phn)pDHk<8hcG@e_EuugL|rfm=qPU=nNvuB_k>bQ-y@vV5K=~wQi%x>Mq zB%>HhlDwUCWzis7a7IXA4}gaOk`}{BP;SPCJ<&cWxBu=ya(>oUh=1v>n-)E*y@@h< zuBl+G`ebcP!OY+T~-YT{?GM2X)4 z6LtMJ6P@zIbUx`l=TpzDpz?<_d72c8+6$xmg+wB6J@=rzZD=xeMPjqS5wQv z*}c$W_Sm&sJP{G*_A6Q&B};#=HS`7&r6+U;goyi!57;80X_jWEMM~sZaQ}!h2i&e0 zIgMd=QQ|dP!7VqkF#8n@3U$Nfvp7ic zzfLlYH1ZNaQ1`edlbh482KzRd!u)H`8bUSNeCPN9x?ec3`hiR^S4kB zdL8lB)eiz)hmdfFPzV8Q0FLkcw4|`n4FQarSLKoS0gL7h*uQ?vHemvB5xDF$yMCv`-9(hN(Y! zZlRKnvSIk?+P(`Vgz2z9@?i>TRe!$Klwv_e5}(<|NMlE(q|YcAIp#iN*jZ5-`+7fu&^iC-v`Q3z{BQ zc?7e;n$1|lByw#rtfHFvYlMt1M44%QkOhTaiED|ft9CR1WixmHrh~$&N^6Kjo`Af~ z&7m>Obc{P@$_MXFeT;Q=@eLiTsHn~qWyv9u`A93FTJt?QF0vuCI#xehfU05x)VYs} zX@1MRCx{s81r2AkaChlT=g{$fk{L-|e+7_muu4%}%9>9w+9Hi(v$E98+RWI7#MM;& ze@-*igAN-2rNRjmf)?M3`ABkR5Uw!VZ&xgVEmKN$nsNHLVpQw#PV-9Y$W-r*#Y2Q@ z(ESZIojpA^=3~oQ_1e=tW<^G&Pi>(9DqN1~8S5rW_rk<#5}`$P19V$A#3qyL0T7JA zVoUDyVo%-IBR{l__I-8m4e2@E&(hI*jdv$Jv;6)0Lq5@+xcj+Rc1GQ``IV?Yy}#z2 zFWacUQ`48aqiYpdylRK;yn7RmfAEr`lY?5}X9&p_CJR8bI|SS`W&F8_PNdPY#T|(6+3kW@KnW_2C1~a@1D;X49HqDFlZV*S zy$HQ+j?$56(MqbHZq74UV1huJk#H-JC`n{~)ex{c>9C4vfn4LThMvMzlX0G$0u$Os zGO9O*O?9%`UE7y80fUCJV%k7BojN#>QpHR|XyJ{^d+Ra*9dCTP)Z~YJ8x{Uxw6Z*_ zs1>NRP;c@LO=tn6W;<_yt07bc_xgtL%^hpQ>jY>QPKv)(caN4{5J0yju8ROb5BPSg zTcQOjB6%JF5i<@l_SEcBcyN+?}n^mUT?3tVDRPi5wjb{eZpI?pIYy&1a9wG! zJtZhkq_mrxL5Oy8E$|DO9myNAjsSi85-_tbQS$B1o6bd)(hz=fgHh3-m}1T#F!1ED zMVlY7DBYOeoL6-71vDe)u>N5bi|lk|$d2DoGtIzubc>gR+0vyr5pRsfsp)tc)v8O~ z$4(5UNw7c2-Bf2pHe<@kv%W|qL5Dst&_I$*g>zm?fCrlf_Ciz1Wm1HQ2lf}{=keJ& zshCAU!%B$Q4YS+GHsKnJ3t9%BH&9JySq&b_OWX?7>}qu{#%i5DY7N9T)`)*zMN(-< zP5c7<&fKedQ#$<5J~)WwCY8D21kDj)LW4gF&pOS~Ev@SSF&i?K)VxfT70{$&4Vdoc zqG;*bi9!9nl<~ApAt>`;5zUrBpTV=#5zfK@XAz(=HF&^aDO^*UmsrDUw9E~y5oO-v z6qdDSBWp>PhQS}!P`Zi~w?B~#B%V&#oZphVV($K2MyuZNZ}!<)MWfh8%JghsCY?5E z2a617dSpY?KUUYV%)ELDZXCf#E=V>iv_(O2EpK^qOCe$BP5HNMn%?aOJesNd#^UM? z50Q)%{vMz?2ERCsS5U`0QzPJeIVJ}sq;s8AM_hn@0!gLbZp({%J zIacGvGHYz4_q}M5Z0;mZ9N+ULO4docu7{7I_%N#FE=uefK}-hrKm>Sp8wa!7q_J_C zLM{ZvznSsko(!4=Qu5~ zpwel8(zYW6Rh1~1+R03BS`-k8O@1CIcH>t;%E}1Dj@T-ThYMxR@jJnEmD^RBEiUj> z0@qwU_$tuoMtrc1phdMI7A<{o6tmZia#Zj6?5&Xb5h#7L$cd%UA!jxx4gzHRWGHW9 z>u-0w)Qq3NW%(Z!Gl?Q^5ZR)v;93`mB)YI^yFRB4Bp*cR{AC+c5~^({8ASRl_B2uc zdJ~Ermp=RCY&cGDEgAwDe2}Z&20j4c*1M1;Hl*&C(>!3Fq?rC+?DnxK=H%=o^!es> z#WXq(%uO0N^|}w#_^Q6YyED7V$cNYuYg*@{$#v7RvR{7I1Ic*aqHGty^MDxAZ{zk^;?HTXjYw$zlC#RrHd zCd3YChsL((78Yi1@GXf@9g2y5`Rn%y=tTickNyu>)bcYgQ?2BL-Zgp9Br*L=7E zg$QOYyRfMhZm2>nY7>?qrTyzr-k2E^Qk!>*${}K&3(KI>{%BM-gb=hWs}dJto~q1( z=^LryT=gtlr3=i)a|qU*O52#HJc%5(c{Mbe4K=j3vJDEV3q*%JT8#4ih0}vi-2Orz?b6QK!Tf|&ZizJ{*ilYYP1 z>+NEjzH~LY;SG0Pm?(0LMshG=3$OT9+sj#uf$0B~o$a=;oc@OMT9Q#hz6EQOxiWw` ziSnB}Z2@V>ney44XzNY)d31|l3aNA+zoqp-N}7&&96>YAvxf6x59faw4(nhuUv~4Q zjNW!sJvfxNNQ9VFqZ(4spX2F#Y&WbM4Yl)6?cefk`kXY7tj~mEi@M&IoJ$lRgq+2g zsko5KG{M@K^9{ChkX~FXsu`g=Z?K7j8zB<;0^)RSn>;TL5$bZ01`AEu%LY5)0vU>W zL$&2TJV&V2=3bU8+A&+|zL#VW;5VVCuI8i6;7fMPyxJ8TH2*xT^HW?6m*|sIR#M_z zpW41HD1r-7mHD&xtK4yuf6ofekORB`iptw@pvz#@m1gVgqO>_qVSM_;;s_Z^C%pob zEKV~(TBw56!lsJ865!pMxtE(w)gDl_D}L4F6+B5%lZQ4<%w-o56-ZI?Ry?2S%eL_O z;tqTo@q!B1Xg8g4WpYd}pc-JDop@=_K_Xv(n2l$0nYJ8N*IW!z(&N|}&P)b9k14`OcbBWWa z*wgsNXfj2$x0IT$kVSp4WTWw|(%3NMx_640Tm~MUHHHUNCOU-y7u$X|$dZUE5scw( zOts~aKY&2VN;(WYNkBCw;d;k!oEEfl> zU3tT+#LuQNh_uMm3REH#Q(KP9QQ+RcMTj=Fw|&81$X-TytqWvSgtfiYoJ$v?Ml{;n zmCc4r;2DK&Uq>r3M-p#vX7@|C;VlfHXT7h#!J*VMiT5Jj~giy!Q^bPMWSq3+)Of-ab|8uSKiA-D|?Y|iDu15VzHVa7E1Gnb2_b8_pw%b+>!>AyfG)1?1VOD z-Vq+Snkte3$AQB8ASW3rlGyGPI$ee?;1ch44juRh2BDtXgczh872~8kH9A)zm{PD% z*3WZVOG=^J5UQbd{o@@ zk~=fhIlZ3J#R+Aqp07cV)?yhfu7cN_^>VUfPu~xs$`RKC7s)Ojpp21eNZZWW68`)U zlmthDON0x1Y|6$hmI+X*5Mmxm82{`{#KRgN;I*83!=1|3W1V`5gSe0~mF@$6s-Lt7c z&*qvAF{%ud8XK440}Dw3&9On=@cy@?H%nxQQLZl{(N9Ni~j=H zoW&01LSySG3LWr7Y99W*1XZ;dKZQ2hxfI}MeJJI$(j5L@+>b-Fn=423mq z`*;$V)i=g0gb+<9@jJjq%&yxx6LbztF4;Y6jm@*p2%TmABdzySMrE(E-wX`cd7Pdn z1i2@}@nk%#=t2#O;~k7{V%ln7x28T3(}kFWsy+M9lyvBFxy6^sCp4ym4afn_SZs7; zR%?-@AzDx;u^`5k-76W{;6NE))W_5;r^K6WXhhKJ%Mc%x4*XyPAiJB>cQM%z?#zzf zK%^*S+itMC)RCu@m4^r^$vP3V+r3ka!~*jaFTnyu5#(zz(*n0=fS^W8WA$pzGOCeV zS2zGqQ4W_QBCSqc8yeSY-Q?~cA$1Ic!<(XPIjyPS#1l#`{WcCd;vi-wn9+N zN&#w%5Ok+IbG-LnB)4iy>mN2)k<-&t3H&J=i_Ftx`Bh%++U#)qa%z*kaeBbJ0kB!*Kdc71YoN?_b zUx+y@|7i!T;a!pes9*>&DwJEOSir^5o1-G9?Ob7z1kVFkG6zJ7Hg)NI+5vRu`>@l?=Rk=1e5>}5l{xz3z+wdUZzhjdVf1r%p8xkd7laZY!tjgh?EaxaQ z+2chU;OOFRu*`l`HT%|Sc)jJ9veM4Q08;-QGm_y!)z>T7$V5#$FsNv!Z5((al+x(B z9E6>BjlMIi7u!u>rF#=$t*x#GF4CvnylI>t;W^Q*D1w7$YZ2dl@<8nANeQypI)CB2 zr%x=SwoFv_suog+QV&KKOyiGCYJ2ga&5J=SZsk|e+Sbi00X^={rKELl2RWT`f)QPA zrRE~xd2Qn>>?leb@1ZfPO3M^7u*1Y^=vC1+d4H9Y~U6GGC562GG#Oqxush15sJ;fsos{Ya6$~v>)dEWIntB z=nBGh<-+_7xaTcCsVz@~i?^;S?({#FQD!f%TI~hGeJIMc4cpMGli@Jwf9TyZ&$fmJ_qFFlT>0TG{G+7uC3y zb?m+xVqK5=KXHK%2#EQAs$f}h-!#vR|TVtBU z)XGLYPS|7l81qgEzX(k)sw3kH^6pU;Otes#xoj^2a} zHF3DyvY?8SOaLHH)0@s`j4Y?3`lFTQhsY|vCcrs=&Ncw^C3OxQucgu*Z3C zv1~7EsyjpENp>iMYWyGQUk@gishAG9<(@r-58s5JKR(O1%tLD5G^&XWnn$G|&uBUe z9sz#rjAP~Ew}FI~tLTJe`|?IwfT*0#e2z92}Q; z*DkE^C7o0(4v}5$C)h&fcb--t3tCrOKGjnOXu_B^Hs7#{5{I#2a@N#&^_yhD&|V}v zp)DAqMSwcOBPaFWfECw5r#iEtSe7W8uB>|z_zR=TveyD@7o<(I!DAGfqLnlT z4b{HWulKwSJYY^~Y(WvpUHMeh_fYXKYw}a{ks1;&)om$YcD;syygB+J(kl? z?7aWmm+vopYt`rP{cG8ORSmrz_vMQ|Dr-r`!)9%J%|w$XRN3hWzxCn;?B3Y>pv^`h zVo#4IU+`Gt1WO3oJBB*--C6K{o$uWe|3*;`KfxcgrV{xA-HxeP;0yB7m=UP_&W(vh z7bq&?s}WP}EOakkzP_9xeD3f&m1Px>$L@N8fn#`s=z$fgG4(ZMiS1qKO2r|lt08<` z3-|ImX0!FrlySPDvcI1H+k5x=l?j^kB7X+5grUU4zpt%t_=akEBJ6 zovK?-X{U~71fjaJBkv>v;}=KNwULE#8^7csU&9l~aGZ6BmI(g>#WZ%(L$MHHaIB-K zNgrOez;HD4nEx{BQDJ|^4i8wcWxOy#nyS(@Ar0R@E<0$7MU3HfDag_n@EoVPzxV?jnO%d$43be;{=0JJS(dA86qXH>}u|H zA8w+o0P?vNRW{?+TGIB2h+=#5U5!B1BWeYf4Co(MFP0%rz54CQBCaoY`s*htU0v!x zhN3svz2+J4^W9_N(Y9cM+7FwPjoN$ zaPr}Nz07Gu+|BrL#*0pr`K-J*cp6gP%>CRk`U^@FkZMHM2SC{=-;^MM3>hUirgCfVEl8~2OXq>5f&kZaPGX53 znV7c3-veg0y?hE^t?Q+Zl>|!M$;xtciK(?P8LV5JXzb<0u#C|k!BEoQ1HweR2HN+6 z)%uQOIfV&gY~m6{3{Sv%Cic1gv8 zXvF7A0&u2AV_{u?RvY9I;+xU^SBWI)wFdi;xo4kdwEu<%NjepyF^PebijcKeHZ@z} z$>k4}4RujrKEz@&KnOtW6-9J!`&rLHU zodcKP-*uOIxr=<{lg-zJBNCz`anhK}@4^668u_*jF=VL5X=D8tCjL|?W!_|{TjG>BGtHR0bYdL-Wtg0N1uWZ zxY+#g?-^_DMih^k1{%8g*Ub3S4@%&bK;j1iWFw<4K$;)ByAciKs>2}F zboLcMM-huL@Cwk?;>KrsYRBuf1+75wrmHi;(D~BhPrvBw8IFg<__eyqy5qzgqZ(pI z(*>cj996x9IPt8eOgtK(Gb5%+pne-q<}!|z?#GcTcI@x>@GM%3R8b~u7LtNTiIGVK zhMiqoo$#R0{*ha(f@* z(Hg*LD4*&)Uy07UdhK2kW+EExGdxRz&RtaL>Z_MUaMc52p(^DgZ_?X#%Vg}}fSeY^>6rs&KjSPb>L zQi1(hY8XG5@KOhA+kJS|GUIH>WpmZ$zCzXbcm2W5K;;|XDWOI1@hL!s#oV^AmeXZ_`7K7U?2jg6BW*4V1(xEE0%QWq$ywm0rR#oGW#li;Qq;ivB3D3xhN6XU z8vMy3zNC;tDDgK_QwTsyj4)7vOEtHu=5I)R3zq4&f>5F>;{)Jgb43?2c3kfV3?V68 z*&j(XlCgyKH8CCvIgJYA#7P`fe_Gt&KXOjE9S*gBAR{q7O!64StbP@PQl{F=MI^5x z0M^vWicj@LY@`ilk-KiBN-I;k3QXeKyQHPpQY`XbjtKJZ_WlBs3pVLy6X5|YDrXFH zgFh@0o@Ucmh_#6yS1|>nKTS%f4Db9`^JM`g%~hwm;0ytl0quAalH(qP+`v-$tBAyDeikcA(%m+Uv|HO- ze1Mkl2Bf)kdFaHGh(N9z{zmBFiNyYox@U<-ntKY%aN{TVc6{mTY33D_Iv4*G5H`J6 zZ_@m9AEo`cozcYd46P?2eh)Fi1+XvOp4<&PSQWYhMYo zr(pd+RukR1*o!AN(I|Y%(;4ZL08k4;&=P;ej`e~)R{OdMqC_E%>FRJDPJ{dyg_u&n%D;j@Y<%Tb_-R^B2SOy7Tca^0qj}F=%;+K-PU`zT z#;u(3Z+dw#IJRVcHnrG)wq1MW(j(HLYuaAPtpwmwshL35LL$j++T|(+tx}_XtXUhW zpL^};${PJEmV7W=>9|(C&;v-r?#ZhFM7Erkrx9k3y?pUWz6?1S4C=T zE<7MD9rP2<4{A0f056jd(BszP8Y=0($HNjIBBecELF{lZE)Azb&m9`OJS#Vc4mH5> z&fGk1SsWJv=Di%Spp<@(X7u3W?~9^7b;6$Qq0{t&8w5yR1W$uDDQY@QU-fch06VBj z2wNP8;FX|tt8AkstV#Z!@y@a11>1Qj>$IBm`-B(NA9!xqv}`7&kE=1MXI}t>RW~8L z;Gt(N#g?xjXpIyr(mi&wjV|H!Ory)@wImub1lbvfqj==cmUYOpY)ASECa|> z2Ns$%()f@?l5%};7jqr?5V_2qL1l#5Wp;TswdQmdd?#F}Sx$MmC(?^sk=%V${SS{` zCK_<2gXJX~ml%-kyN&v7<(svc+3ORQ&G5$Q5!V5q#W$Bx#Wd>(d2-Uz+LUWMw(<6} zwiNpkrf5$eERm$8>b_}bEcuDP1z_de)80BwL-?d-eP$m;5id)N?Q`)&Ss(N&Ws z>f@$86+83fNZ%LhL)PE-^zz3)cyrZVPb3B275&RBR(7#&$-WZ)~6|* z-gxM4N;i441Yhey&>HzMNZlIU@&TQODQx3wxr`b;u3;WKJ+fs@*0%9=A8gW%Tn~|q zny00?%$axB0vdcw^Elja@h6s(z%vZV=|yz~eBlvFJ2ICMq1&9KyGBfB_BR1W8gb0( z5VPn)&nE#on!*L&29FjQFZz%Fjc7RYy@gogjtOYAofFWPdIXr0k*}2dY@9y$?IXrp zw+<+2ALr?upB{x#6ep+Wy!8nn&FkHlKFub3YnY-qMR>Sg+i-Iy&{fXTm>5na?Z{Yr z9*WXMD?R18%+R-wfbmNFEjZJ!%XRiF9GM`j%`;}R13r?;o1cdE@$|S1J&xPntDa5j zQ@pxEsu&Cc6Xb%S!FbjFLYUOleQb3|IhNv0G+6QB8sww1`-gGijCcj`iF5|P{DFgXYxrKC#P^(AO?&$33&p<~0)dx_?+n@xV` znhK*Zqw7+55>QScP4jnNT&u%GoaV~pnJ7n!Qgmoc(c{U$(Yt4tYYWIMU7Fp@&a`Kb zl17h6Z4(BeAXNMyw^`{k-geI=W02BU&bOpLzlxH&?`C#SH6lCzm*+;Ju^Rux&QNHF zv5Od*jQ*iK+BL7nFG3T@EIbX+M0&GM$>$s$n&T@q4}! zo-UWh@=w#;W=q!dtFlfs$3~9H+M9>wp$soxnxL=(iz|Fmx9uQWI_bJWJYZIBr5s9b z+kTz^1~En#F|Se^G9jbCb)NY}qEz_sG*=eVD^>wUU^nsRSi_}EGJg1HukR&FIf4{pS12!^G1YGdn)!0$qq&TBHZxq~F!8Fj`j5bA2vm#(;ay(~(SSzI zHUuov?D!x93}linPcS*LzVPm|rmtIKh2i{9mU04ux~TOsS$jbZf_T;H0=wQ1K!`go2`{V~om!*#2n zea;7n=&5|Cy^#~o!^4Y_w13Xl9YhlrUvERfsj(!CqcOb=-K>i@x4?u7bKcO5CVjLE z*dl#pdP3%#Y5m51M4Pb<%vfUxOauR!?iX(BXu=l7&#|r}8rmF-y|1oGWy99e1We-^ zsgWxSPeM);$zU9x^U#|zus>(i8SGJSX@hF7v#9b;vEMH*wl&eXH7q&tu-kE^RoMvQ@KGT1Qdwl6dv?iSe)*>OmA-#~Ka0r;#v9v994Mnm2^iWHY~=VpJkX4XLwEpn;8E6+dfJUJ zJlQgw=|M>c4BAj$whO`_7useWjY$QjL>5#Q`gU{4Jh}TAMq}-vmRKI*L`fzEbJDKX z`BycjCd5@PpCr9QN0*X>6(q8K$^IiNY1_pm;%8Xj6$pY6hNx?)2?|7EIt~QlgapD- z(p;PBJz(R&UfjjHGZkc)Wo%@1qpsTK`a>$|dA1JN>oq&E`j?f=#?4!ijqkPD_+}Yj zS&Z*hkj4z1I~zd)Pug~V)Q>@LwR(`n~l>#d>NX!7=L_lr(Ew) zgEuD{UvU8dh@!!AO)TG=6gp}|SnqBNm@z%2;M?EtV!mVkn1v~wL-P{AVwJe#{&R)SjfKxzNk}Cd;W%Pp~HbxK3CdV|%uG(Cb&1~$}f2U2_ zg&fSfJ;2zT9FbR)ovBd4qAv;^)2#5}qW8AE_6G?F>-3E;da^PZI@Qa;tURNllVPtC zkkb$sYW`DVc-!C-|HcO?htZR@q;#L zt1DDYHVWJ>+VM!Mva9#+GMx3$a2nrr1j`4@&H(+l6C6dqx|g#KmSoO>$a==EnH(h^?GaM=Q%0xF`foGHF9OR`dYkoi}kDD-laKjw`(ESpo_Meeua) z{fyhyip~Zy4WXVu2*pt`h=B$+D$%vKA)*Juuns@wjg-uZ_wpTBP_wejWrCw6)+f9Q|*t$(ll?!H6ROLxV- zW_;_e=iZ6hL;Y9M{7z@TlZmfCb#}ae=IGYIy-R~|&c ztGGZ;`=Mw^*Y3^35A=Yh8#z_!!$X&{hNPE~9xZuEa1sc(<`5&#K;Ca?Gwo+#Z@`dt zMeBzJw@{8X&NrCw2pwg7XDcwmg0u=b-3%2f>*}f5AluB!v$kN0Kts1(OsIz&F zMExqhKZ_CxjgeLp+7vlF#2(WEZN^Q-l$!QJ3_RQ%uwjAlIwQc!Y#*&sj6=^9lD@QF zQbk;t6Q*jN&K~nMWZ`YZ$4Jio5=%RSe5|i%*L?7p?ZY!v%yASNMU6dPK(?dO=ut3C zQDqLm98vk^ryAS+J-T%w{yb0kA~gTrrWl$?7*gIopmx;a6|neC=x*RNp3UZr2OH!L z7**ryi1!P1zI##6E!Ao{da^X+mY>k}$%!fj=ovcNn7+LQgkL;{t#GDkNt*2pzWo~h zK2l&)=)QdieF+02s_DXB4~l9NgSZXDn~Tg(>BK@)*R5b%*Te01{le_DiVNbIYwb@p!n!v{S-DP?SJFymlHLxv22wlKZfk?~qW|72}=QN%-IW1EvW> z(I5B-^r*$M30XUXLc=)twg;;VV#g^Q?8O+k#HL=izZzu|<{r@ljYh}arvRX^PXbBn zMp-v7*wD)>A>6l?CSGGjU8!P*Oz>SB>e==s6KQ;98gsyBRmnshi%XH_t@Hws5jMw` zC39?iQXi10z-Pw2MYA1ZQjfbT9?&P_nqK^pDo|@*p&A#S!TqS?=zOTIH`+q(%Rj)EZe3XM$_7LSaWLimU{-B^iM56eAFzQAC5pMVa&f3;v{Qfovk4*kg(=Z*N6$QF-~pwRM~PLuB{)}ZY_>zDso8e znJpyo4)c7B)LdO`= z)MT}aR2K5N13xbLT)yyHsscIPMv>m6#rHOhHK@nfpWbn+z@&*9_(kOr%)^Gkv)VEV zx`ztfC|!$%{QXDD{635{j2jNvU2Z;8B4fj2-QOl;e!>?EfU&G^FIsSRCPj~R2~Z*{ zie>mU3|+d2$z|bf;Ji>+A;;m-sDe;GbOS<+d2h@H&!bzxYMf>4on|^-8sDzgG~Ysa zIXKn$0MxxlrzALCy33uB*eJ+M=oAxZ*Yq@onEQUhE~D$WHq&Tc@~oM!TSqTK_4X@0 zK$bBy@_OD_P3hL`kDT9OK{b@U9AOze(uKbIZ66ML?V`{^ZZBQK*j~i1FS*(j_C^EH zn$AjusLXJeZ*U1=o=Ms@!uGxI|L(g}H5-o3I2$YU=)w|`CN>}kv)qZEkfC&V=Vp3I zu@%*o4(L!l)uyQ&Cl*Q~RBKmwr!z8%Z4+|ad%ttbyX?HUVYbvnc>g9PequAq*+}!_ z!z6Man5#+Zv~!!84gaU4?zHJPoI2_NtP(yei1s84ML`Dk!wauhdj#iWWJ#OdK=y)~oi+S%vqGuL$yLim;UY2`g;z%Q@Gg?U( z6Xt!T?y+zQ73WG>uPB#Aqf#-@8pEcUCfu`MsrN0yD=jIp1}WY>fK%frG_Hwuz}wgW z0krX+f}aqxDV!#^#<~gCVk&Rb1B*n+rW_k3`T+fP#4d;Ct7rF9I zVKxOx>{NB^%|wB2x?40+$HszQh)>UoD$?-A^N@k#%O;N#e-TbILq|ED7X8?Ix#ZvP!|-2@_K{eLe7Anky<_O~?jvP?nIubstNAzKU z8-P6T+H{#5U)|X@E3uOt-G~xrN01c}UTH@eo%B%N8)_BKxDS~}aF?y)$?_%FLwd!e zRKzCX#B^50f)H8GZ5gqM9II(B_QsxLO{BLgQCJ?`r$C&p2x9i1LxqYd#AzDFDUekr`W^NRD(|0xs>8^R?Tc$MwCMqj-mzI{-~UvcJC*@q(mZc31?YH!D&z@vKOE#+K~7 zoV|k%XkPmigEm*6?jgHxO6oq07O}1vK+}G-h;o^ql8u8F#?@B}4CwNN($lGP4^D3* zj10{^tP7aSWDSucVl^-7hb0fNB>y}AaM#P|!(U-9wxq{tmLKUng+bn2c;^y8y(K8T zqK?k8Ih68VZaen;W-jXrxZbIaJ!D_u_b@&3ZN6yBWc~+k*Kn($|S$iN>=n|mWM-G zmz<4OR$^-$1DuY1u+pg1$fp=qv4aQFhy_xFLpN#rkj)%B4IFk~S^VMXaX`(-POwjQ zkhEyz0otKgM2xLMqhL>`NO@O*&;^j*g%|IuyJpTfe}aRUa+2*%dfOfk(y7^ zBS<=~vAp>%)_m-AWawSqyb_mj);9ef9~sXknljUE&Lxn^F|n!RZR<4ggG8`D`x1k5obW7ZX^a?#HNzS?& zt=#5)tHy2F8XYgyu)i7I>{8Wsi0Jk!%AAP5*Z?eY!3}<~+G_i{$e)(H!CR8BF~TT| zYU^jg@6!?X?$VIyo$Ph1#x?5ltcomDb@=)cxZHUYKg>$xs-54d?XPG=>inBe-@v$i z+sfW?GshySd<`8i%J{1FrfPHo3)p=7yF9?7V2wQ2i!+eg_h+)cXO6NT-gZWdLc}O| zA#*VnuCcBc6Znc#{$!{<_dm$Qd%8K<#i-MhAgo`H5qscr4r@Lx^zU$xe`fhYVLl%} z+a=3qUo?RCnkyBkP%^}F{`%shL>*I2zYL}V-A-e74QaV-QJ%(n#uPr!ms^L5STcTG zMX1yTwl6M)?~S80rh(sFfYQ-zj7_U6tlHV#q|R{@40EZr&Rn3gXdlENv7EuAw4xr+ zb`;$UMLiqIgzQtmINjIaRM zAtvue{;aLwfjg>6R5ld`%zl0PzYjyiacT-7i#U2TNZztsoiM>#*&3_(~ zq5G`4d``|G5eh~#U+)6ac0y_cUj-pNe?T>++oa9P)%b-yBue~cX#uXyw3DSQqzWTs z?qY^D#gbH z-N3Hj20Ket=K^++jub)4iwm1S!oQC)7TP)B9XILpH6)F#FgJwUxO%b7p8QsH$Yu`iqx5?pp$yO}w@Z zuny<&7+EEq@eSk-6MsojR{A&~?y*GMw7g_w!7XtZ!@crtJPG|T5N+0wk?oH zMM3kyHl{-!KT`{5S;l0ortvFY-!!E*>e(-xnO)NKoI?j-epa_w6(<@JIQ{qgANl@q z*_IF9T=ie8KDak@!?JJhe)W?tz3&fs@IBq#uR6VV>F&I9y2n4izworKbv%CZe8P^+ z3yq0)4ease-1())x;3>&!G!t`M}uG z;*wkGz;3t&*BB-O$c_#T?$eus*~&I!^ER%nZ_mXLrUop4%HKqd|4BZUATok8j~Df>4cVsaT~o5X&&OE^kn@x`+` z-{~L=+Th}p&}Rs9r_?|*h9fEtNVOMRe6uNfr~wjbY5t`Ubnd6hbaJwfFaY0B4Yfo3 z10O6AHb~X%2@jmS+L_PPnKIDn6mPCOxj{~hvQi$1<~h-rN=xM0H;~aZ2IVu)xW5R# ze$@78Hc6YKSOPW|k#d77;A{(4x@sw+t_<%Y!_X>-zGc`8<;>~rTaY2+WEU7|{0Y-mIK^B2ZMeukEWp=Weq=1f; zox$D4rR|c?a#UGo*)IAEVZUr4lXPNFq=Z&sMjbA}=kCONHq${YK`1b7Bg`@BKE;tD zr7h(P@%s!Fno0+}TdVj!#}tOU?)Y79@@3X=G7~kXFiRo|?A4V%97mi|ckPyYaP%0r zL)cdxN!mxOk2gON&Mn0mdm(Tx?8zhFg^)u z>ZrLWNA^jiD1*v_W5pl7zu7c|cT;+A$%zk^>((F_KXY)SZ1EU!W&pz{N1@4^`@^}- zrVO+Sb@o*t`0ABxaBftjmLdB#SF|(vh(Ac1e%vFJ;geG${jEhpGPqEVz$9`s1YLMx zt|;+rPk_HjG~@t^1ry=sPum&NypS}XJy9b4g9{z4#F7?R%F%;+KuF8dfZKT%zWjD_ zQbAb%P{9f#>SvpcbQ*Xz`e8iK%Nt0hms8@OewSVHF07j=kS22CM zO|xT`u&W8Up&Y`4vQ&fu>GqmbOpL{y?F=rSi#ofc+xpl@(wiPA^UsJCN0j;DGT9nA z9nIdHWA+`BY4E!~oVudy56L<<2C`KU#wR_4Bk@N|?6lp~SUSVSIyv1i`#h;X(_@l( z=@7Fhb7pb1NM^tbd3^RnFXllfe@D-3DT^+y3eYkX^9q+Du>R6O23<^0kumC3M_Qal zi9cXTiFlKZc2|v8djt<4p-86(ZM6IMkj%z6kt5^%YB$M*uz8UX19X2*iz$SU4Yj&g zw6Kg216|%mq~~X^U@NK^mJUfOv+zN{{#qEo;;yy59MX%SsYU_*?rXpSFQPjb(z6wZ z5I4~k+&u2V;lT{0*A?xgqCFA*m8kR8xO3C-*%0)?m$_mDu$}D)IU4^z&fYyPs%rfo zUtR5DQm0dD3f4KN{G2SHEHSQiJl&27US=2&hM`C}p3xUj| zz-*Wik=x8TY_p_7K*KG<0JGH$9WFCT1IYEa_gZVu`1^i8m$UZ#ajvf()?Vv*-p~7a z*0Y{xp%|{lvj&!zPnJ6aQ|UR(UMV!* z;;m-lpC-a1JSiIFZg(7Po~^{19k;)wZL9>}*hp}apc@|HIt_bzk^eHW7C>)=d7Wst zlJCCmQF6gHSu)6?wqpKm-XsRD+zuhBjr^Mb=FS_I8pK+1YTHxDsu-yGDB3v{!W(`k z-1@P4-rUh;QUNlaN;iBt_IUy)H3LQ|=JTw=!q_!%&xS#(^LR(@{)vZ0L zWJ0wUMQtp=+$^_H4EC}$g=`_pog_8>56`}s**7~=4U2*d&)sMH^R4lBR?Yp}+&hJS z(I0==^1!jcTR;8%qYGc!{5$_AZ{534`z-kV%8}cSpITnC<>G5PU2DO>N8HSflA0y| zg3>lKNXulfDQCGk+JTFql1eAPc^5{VGLm zyD=@qre>c`77g|mw5Nb2eHa5~%4w7*8Sf00Ln}V=Ljq0#8ufe75c$GJ1DRB(9_q-r zyp)Ew{*jGUuvQCjyCx3=Mg|DTUzx5T_PE?;BeEK*g@++*HSMe=5PEaw)f#$FBOiO2 z@6fQs`QhvoY%)jM^nsDk=lbr{kFw~rLO;rJtsedlo-y>UR$raUBn*@^{c!L*Z}uK* z_hT*StvNL|j4OBlVI|AV0Y{(UO(@$>ZfiVNwWrvY281{0zidDiE-&+cX=IdW9w^Uo zt3<^Z65=CRlN2a!t9iK>Dl?cbym%#j%?WHhXw_F_Lo~Wa&rqQr8UoTSYlk-^Ee~j*l z^uibE=9hV#g$1kWT?zebT8M4jLW}zy=r+WRS_4|6GjdRe@-W=drtN*zWTKgTm;~VH z8?mTa#}8}NmAU(bOk}dv5cbo%co)_`CeVMUSC|}KM!uX%dWtqZ;vAgyf@q8$&Hjz3 z*~fYMM|_HL@5BADo!(GOm%yy}6$`$F{6MK_wr3)*qo{S5$)>^spcA*F&SQ@vVYsv5 z9e(NFZX_i5F*M|LTu~73xLP3f?1^lW!A5n!={=;wjfHlX1f{Jbw-`IJ7~gOn?BKh+ z;xIW%rt&JEuk3eld9aoK(dM>A|0Fhc^IxE`Tj*6Tfip5s2Jo7Kd_n#8t5egaVqVGP z-*0Yn)RW8Ji2Z?cItS6__)iOyRp@0n)0tTgYZ{`i_!W;mK_;0oz^iKiOBw0_xN56C z${W6_y?Esn7>US6q~zC6kAL0!TF(? z^%$>h7mXupF2TZgG5lA&tg+DUr{ z1nVW|)vmSZ0=O+Nv+n~kxj^+ji?S@{TwGGj`UJt%ayuJE?mN&U_ac4c>Fk53r+v^z zXF?Cx)Tz8+JxrdCFUT$DWy9E}S8X9=z(Ca{F4|j+?4tS`yA|jiL7!he|JUj-9~$Z9 zh@Dqo6?9%{Kk(Ek4qi$19}bKRgE5RVd?+YSlPc8wL|r^IGC4#py%tGt^SH*td1koV zn_rOSRn@so(MDG8DYR!6f<~t3*D)TSg?Z#heyrmc4l_2+&?y;))QtX5n#uX(UC_n! zRq~r+K}KFTVX(vdMaDY1cDfld!R%}1p_RnGHy_{BAA~_*xlC9a0ahUkUzCs96<21);435$SI@ii zX7p6)Mn?aAgd6S8VLa_C#88p!<}=O-k^jaQOUSi^9)+ssXcJlLkv2C=)yn7boI!Zh za^&mP{Z*$<5-W&SS?aMlG&i5aKzpyFlURhF#Efo~O#TkQv6A99|^yHgbdydj<-HWo1Z z4Mx@Mr!fDg-H|QRS?}gOKIC<0P6NDd98VX6#$H*o9Ti(xj^^|`jt@as5R%y!OSotQ z>>@^aU0XX1vrBBMt}Gee5HpIchkVW2s3F?(YfimKRCull>PwMnJQ~igv+YdhY*SBBX1XkYa`g8mXx2{$7yQDfSrlat8(c{s}-kXjp3;!QAn)wUP%)cl+*@4b(zu2P4 zS>ziuWJ9w_+7oK&VbWVxD&mOXNT}JZs+Ig102WUd5?P zC5YdSu86^ust~tQ;eXddQJR%Pj= zeQk=sIaYQwhu8mxwC4)oG`QLX%oJPE?9rs1m6%?o^UHXFg`noi|uY4Kw8W_)L7LAhi=triW66oEtk6k zKQIAp)wmt%6@ABIVHXNBqVXH8wlTeta3m$~Tbtnd?Y~wxu>sBGxY3vS#bs1w9H(m$ z+bfhb+rt8f+6XWD=HphEAnLLacW7=KTZ>!jF{|HF%>zzzaAx0_jM4`zNQwwUaX+*@F2PFBD&1rVGhHsuM~-u=lE zVtX{i3xpSxUX2>kp^j)ABR8Q#P;Q9DZi|l2Bno~*K(TTOkVd8g-hP8C8Aq+3v zef&UaONtA<;la3F`-hb@G-QNWDR-t(-`;Lgfik#WgAFSOZ)&h|IA!;eC!r_fI zrXY&tv>5ep;2R&3X2Fi!&WBsdG61or-c zOf;D4#T6XR=VK#r*A2C(kMrNs+y|UfQ?(O%vB&AZ|BGlx=lY+*-l8ZyMO}{YHne^q z+)<1)UDJ7Olp}pB4uaQVnj&oOarD40Uu;SinlHS>gWVNv?nYbx{;#ACx{A3M6nURx zUB`}|ak!LjQpBqxX;9jP3(3L0qoQ}?5e7ZM$o?p2^haUHo(aCmBl>B5pqKZ*T9+ke zYWvZwq9f-ca8KHugWETxlgq#C5UU`VMYD*3Im?9cFzRAL*$czu zW|IN4MB4ZEuzFZH8DAX0;^;KakmJfgmv`A3R#Tixco7D23!&Wvuj2u>_dcA0I@Ix$ zklKF!xTx^HlW&uW<(9)@E#|>`!%Q&Dw*;V>1`NFwyZI-1zeDIOLG}t!voo+8h#JzP z#XcSzxkQ(Sa(@zhr8(FwStPMT31!jfw9HR=B9nsR(QlWKUKUXEaWON{hU@87IFTc& z9#wckzW{JIb_^a{Y9W0j4dRZV6I?#V>hU!g9bVJp5?Z%A2Zwa4YSBd%&o#G_oBO@> z(2XTswcr-Al_Q67b4g~T){v{mzc=ZEbH=@Itl~p7m?aY)FF@|+bmgEh=g1EUWlc9ohvx!H zht~a`pw=k$o~na`S1H5KbrbCI!+=vG!qn=qH7@MKj^pVx+0PWRDK5NG z<>W(=0JlVpa||aoi9?qh3AF~;c$(?oly)z022a;c_y)xgO1>NUgJoO!$WH}xhmHa< zi4gahaoYWg>q)F#;@$_#K z5`9LrO1JL~?X^raV(s=SPJDrI%}Y~|;B%q{tbW}l6u=V6&2XP# z7a9b@?VVaX4eLtxU#ZIqLKmg%82O5mE{aZU$U>*0n$-aj`D`BK`#}oz1Cb)CmWzSF zO{y1W96Y8uju@Le(?RlcbHDU$N^e{S9U=zW`!Cer3W6gttH@+BHFclEy!EhU;xP6x zbodBzy=U}+GV}sI>*{kY#BW|A|w~Fxd*YXQvKgGnIGkfKiuv5?)~MDvVD~4brp`lX zt}VaWE3k`|592rkqPpf4Chfg? zu{7`ZB?+g%z{MrsQN0WD>FBtZqiP8g8NvM07`8WCY zlSl(qI6+GCqtY&+0p~ncjM$@;=*Ac;;r!EHzXhD@`Ya)j?kk2Nfb%Kd7SY?~VlP&y z4i%Ko?~I16HtvHVfK{Ag_wWClRmc{Tc8YIG24ZE+c9Vc?+I7CPDSYf%-qo}e6tCDq zCYjPCK?KQuX42k_3c1UNbuB^)QG3g%``%pbA{}c0;(tKU`IRse7q$qj+Jh3L;3(xj0#Pz6drAXt< zfwDaKlJA<2@JyGOGyV=<_Ve76H;gE~+8#+26n??h4N9qZ+dVIcUh8By*RQy;pf*Yv5+f-J11+`I{?7618 z;ZOK}890AL8e3nMsB{eyKh4vG5aV=^)FV_d95OzNRQy+;AY+;yK3WwpM z>BJ6K#Y8SFanzI7C@`DTvDx@1iM+Pou7mIWsl3Z3`v#;n9U+h)T1T}2kWzCH4mCuLO zO4k#}Zy&VFM5v0ZTjfIGTyBM42V0Z$?N_?+>-08tSqNe4SIX~gv~2ApdUVO=D!l1l zflQ^HwoL5AxkM?v@;rh+#l^MgoqTs4FAjEQOBs(66Cke1@J0S)f`RHn7rLNg2CC^$ z+=*kd8d7+MR*Td-p{#X`_z^JIDta8P(pPLCavVVwLvQQ5=BE{%klaPuJs&VdD5Q%k z=52BsR>oy53G7w(3#wthhsOXTjPr{5U2(LNKA#6^He{Bc@yVHXGa z5N}EFn&6O1rz}&EO*8`FB$lmK4B4WVe%P>K&F zO|&mP34Mz-GJu8Mu(H>=D}`Y!cKG#&9usQ;2;(v^a{_71NG@-D(*nG<|Jn~hm8lUp z@=28K%IuCOzWo8?OGS?2IO*n6NjGAZsHs#(`+Vd|C8RaRJJI%=epx$&n#z^* zPuin$0)+j4P#LLVzZEi4^mLR2*;s8%HK=>J_Osn~y>Y)#N)ynf;5AbC8_Q!AOUNaw z(ZMRa@oe4bI<~qaWsWe|R8X1R+l2W(`gz0|+o@U68TT3Rw91<4>Iv8=W48Iggg>rV zmtaI(fZO@l^mtS`wNc~%|y*KX>)pB6T~2MtvcEpWpCRvM0_#7n#;%U23t-oP236;L?LG7w7J=4N&ij)+Hp`upC za6vKq0#xpt@?qTwkBn5nrK24=>SqLMTNA6u|97trxTXs=2M;z}U+#6%?+;+%YYYGO z3Dp*V?1A!!-raipvRC65zx(KWXa5X7ihuOImlnQwdy-$)4>6;AhR&XGs!xu{iYLd0 zr|grWvtvdV3oWq0)SM&~mii1S)yiVwa|ccGBBd))7{T+ZwtU89ByDg4;#=ln(;g2w zk9vjp3?0Z)!L<0`L3Qfe089=a*eDMmH@8wX|CBFa zG_YMeyipD-Sc3cVS4<9TdEAJ9wOFQMVH*mc{<_vh{nNzu7crPFct*~vp&}Bc01L+S zMmk)8iOg1`QNKrcU#k6A%Zjuj;sOH@ybJAn*j39$IlLLvnh)Ch?OWjDV`Zh*!9M^n z+PSGVb)=54g8{QFeI*2@yT(`@8r>N*vr#E)7FM}o4_$-?+!u@%CWnwlPs~UlzORa3 zL_jHLFMyQ$HXZ+VZ_|0`}*N`9*I`t@(u~!@DB* z;8l1!!dwoPEunXl=AXd_i}Cf~ku?K$Bz&Zv-|brg_u*oNO4lJ!EZ(T3*w9?}mRS1~ z^Vze4u2{EP6EDNcqAmQU{O6*F0khh9CehYQ4A%Zw5AV+A^$@xdE59ujeL}aYE#H^f zb%C%#=a*D^?~1Wygu>$*ccC~0l>G3zS_#kYNJt?YtrqTtoO9e;Q+KIuubtpr>GgQ{ee$RgeGnS?5m6r*dy`?#V*HhvOp!j^GF2U84$#Rrw3~}g6 zX$W1miw%K>+{!&4!~k$%Pm4XLsQxuV`Qs+{-kjX3j)Nn*<7rEz1M+domcCvoa|mjG zp`=BEA*BWivrB;Xi80oQjMNlPo9qHmF=0V;uD(xrDR$&}-jH4(G$bYs%T64yr$G~C z*SQkZ>%7|!1Mq8|Q9lzX@Ym0Bwq)cHil*|e#iNTH>Tc1H#;RJ+n@adFDy~AUj>9_S z#ZLAVk;w+*-bi0Qh?PNNeZd&On|++OS3S?snzy~cM%elBSpz_baS1PrlalVK%dlG zKwQaXyU;7@xgMURWcJqWSY=*Ftncke-v_B8tnbd}X3ou~gaRr>%iB^I`lIzJ!>^J1 zqrn5nA9-)xP=zVssUjX*414lp05$EZn^->`<=x8bkMnk4das?h=#84*4xQ4GRl~I0 zrH1zxBW3o(t$d6;?vs>~`3(vRKa^rixj|6hFFYeUJnovgLa*~||B+ z!Lz>+V6K#Qk>>Kjqyu7b{Hs-T3*^SY~536(d=Ac_SS7qB;oCHtK`frB5@ zVC4ktn;0>?xmG{SlMBkbTIZ{Sot=UYk}qVVuf3C=dp0zh4>YgV9#>4!2NwZhV3Ql;+ z$i1^z(a*NC*Ld{-5stdn7#lf(^t<5xfS((T`aZ~uvMus~6+!od3wZ-PG@v$%v5`sa z^mf96C*WsAc;jO+jgp51Z}|G)oqbYuMv(ySk~RE-R_ zj5k==%$FINI52T&LI&N4?P7|0ol@?2WwlVl0x)=YmXjc11))voB^zv?&S*_{$xpY!Uy-?58vl6QaYgKkAjz%;0VDi4i+A2;6VY7 z1~FY0#M66umAUW^y<)ay2_10oabEsM1#A|n>Vw=C1Uk!(>U|+Y`(qgolP|k6kKGP3 zTXaUfzI)2=7VxD#p(u#(0UQ|om&mu{imj2s3?Vtk1k}(?5Vual2%^41Bw6jOrl>Oag@g7A$sHdi&8eLMEtKPRMvE? z>yxxsSMv^~N;kmMDetHG7-D|T=9-0R#OX#(^Md;eg2Z%6rnS?)p=jtX;CF)mgdy|^ znbyRBKH^$Y#*v9W;fG!xSzv9WX$a}&tKfoSz^-r28`{nvG^Nb6{(Pqd<+ojd+DWDA z_S!QAh$+@=RLVQqNnSa}efd8y5qo^0utS~7x*b8L(s_h`fO4oYBLRz=S+z?5FKYT1 z5qr`C^=&$}D{;jgyw~5_l^8}ER>g@bMCEN?2XF1-4cT;?b<6j{7hFxL<>f<`Ir@F6 zwI_f~I*3p6#^DJwtHI(O!Lt68(Vu$%dN(kfwc0nNJ_0~?Q$flw=@smeP7yb``W)R% zl3-oO)m@1j`dSl#^PbA?sf=*pvDSrEUaWEAS>mIO*(&b*Y`1X&zI}?D+*qto9bN^r zThFu6_%ME5Tcsn9tuA~aLc{pjd3FcN1m#Xf=IAW4F&-@kt1sIJJKL-Hj|#I(%HbT5 zi)6%ES}f~CNt{W?0b_X^ZQ_q~^!wMMQf6;Q?qLOXca-e{EY+emgTY=ORDzjUWH?L2B+BcmDmQWw-5p_vPC!f5@Hw zb9(Rt3!eRQ`IpP@UwC2RYY$XrJhsNWn+=<}<>A-bH@MjD!AqBpPkpxHe^{dP4-Y4N z+$Av9Y*U9_A6P1E^P4x;=Tz$H)}G&jII1RDo>Lxv_%i^~UrX&C+LybNa2L4vr%x?_ z-R8$b%YNg^ygS-?X?v$u7b;8Z=P7LZmov)g&6%VjTX6oj3ldRc0Y3pj>ySvYql?`5ng=XGd48ZZcSd^cn9UsY^>6GvDQYO zAS`~Dwr7zqzRbP&G1a+^}95Cg_o@JtjV9-=8~@ePvZK0 znspP;343#JTd@ zY8kwrx9uMcLzyhpS?=*5+LuSPQ2vWRt|N@iC;t=w>HZU00$C6$kC*1A)YtU!N3Q*2 zINdUBF5*ud6MpAjB22-EX znYLm=$&|sp?ois^F~|oa<9Ax^qbI=PuR848!W>WV(Jf=^s4ggBJ`D!EtcMwYqR}_8v$6W(zW!Y5N-{3){Q`2zB-frZ2|txf3{{$Ue8Mk zslH=8uVqfgKZ2g-+0u}u*J38Ot~s0Bd#_p7D@P!4$Qn72IXRLyN4v3%J=)u=j-GyY zxzN`4-N{VTNa8lqOzPtOB55(4bgO^o&z4@_<9(&2OY4}&8ZNYN%QKeoUccTX#lF_M zEg;10Ce4Y~%$=@@6OEr=xXrKYo!UxYpZ!Z8+$n_LlK#fu-G4(F&T|RKA<|zQrd_)l zi#Fbtu|IM?yDcwHmX>rUPs(n&kz{g^W(b%EH;T#>sKj=5i^*`_>*v(u`-1fy_OCV$ zx9{dn?NOeo#q*{%K==nh#1`?m2V4ewUZU_99=Nf-YAi#M)8}P=dp_GW6FXdLYir>R z?qGFQBs=sIX|T8Q5s@Ip)yrM)2o!g5qm2*TcjWP5$mvJ-{MeQInO8~P=MV83@oK6y zH9!?XoJBl%RP>&%7ip!5DQ?H|>JLw**Ogw`)xX>R_IfXVH+S;Jm#KM? z@Q-i{#S>pSS7ef4d}ouqbgV|dVrX=S_OH>!L;YU`R^@(PC^UZB#hb^J1oJo~nn%9d zi-NGkm@2w`GFnkIXKDVGW4$56gLLC}$L9&p1SgX}pClak1>UF;H|)rMc|ChWI9BeL z>AEn-Xuq*Lc;$}hw$Y4@%51fiS736WPgTlY>Ii*&Mo5+3I9ofQ1o}{^y@drhS*wgYd?-1U=_OE?VeQzEfDY@n@O#3P zJVxB)NV}=;wD4inak+Xq){prAOi{~~#OMxk&xp(N+33;S;Daf(mFLO#ztowSDg1}* zD@LOTHO@Ec*rOXItn5c|Wi#I$HCBa-$`$ z*U`sLy|1pV92QL>_%N@#FG>-2Ok7@5h8P?PzufauU_01??37!yMYqXi6%C>Em(pZ% zT-H94mIz0^26Xc*UUa)mL4z*zG_fI+v>~f<7DuwJgXr3ka-_?Z?c}1)iz<@)4a%Vj zKh95DzAShb-m*DLg+esYnQ!VgM*cV9x-)OEYn^)0)vQ-8KK;OJkN)$exi9_py)U2L z_2Si+{{GPI)eE*SXqfwlyWV{CvGMkoBTa$D9iPAb)@040{+EszZ1ey7bx`w<7DMw^ zIoIY?`icqqS!;!n-a|U=m5(;MDr@0|0H^4c7qH?ycxpo}-A0`JXYRGaYhUKUm60ZN z^Tq$tt+@k}Nn3r0ZT!wH=QqN-52vh8QNW7L61dUDI^ssDz&|Mneon;I*dd)bY9T$w zBAX;_kptq-XA0MEpyWcMk)DV5oLSRgAf8bLz(^gey>`Aa>K=Q^GZyj@aeSoW-mU$i z@>2YshN8DsNa*AQv@fsNTm>&#w5gM53@!glf5=yCtWESYoJJcK$EIxZ zP!qj*jlct$)s3_dEk2ZCtQopYb_e;V9>PZ;G)SCSfq}vNbdzg3VI}e9uh84J>UlUG z-ESzz6_q1CQiy9>MgB0D|EGq8Isq_urNZPMOkhq`NiYECiY>4xH2%ArwU*wF$J-J8 z`u5;uS>4Y>IC-PNhjeHnpz1f(oc{v)wN7pWELISH3)IrIc9&agpB_asTlru7H-~Vu zI-(!{#QR3g=CVT+PyYut^V;sal%BS->1a#={zxQBvn(%RrEKQ@=RP^Q7xDpVH& z?Ugn@lHG?Z8A`s%A)i488bYzG-+RDz{BbE@n_lcb&DA%7ZK*V{ZFsAw_B_1vH$U$I zTjwfiV5>+)jxO!Y&0w21EbEmwlMc-S+(e3~7?C&g1Fk@t+6KIZ7k8n$TW-UpJCtp* z%CTsM9J(7Gb8np5LE}fZ{BLbOd8Z=KQ-Uxp_T7wHTAU`BJ|Kl4a4S-f0sLh@ZL*7v zWdiILJfE3pS$e#z&vV30B{;inj0k7pJT{azGzK9byGRHQk72d*wZn9tQd67Y8->ks#UsrU?$z40uvZH$$%Z|45;?<8tJYIj=VU2*kBzOui~Xmi8VjOBJZluy109R`Pw0 zYYA~lJ%|uDt-^!4OSe}H)5IP7_U6X|3 zOw9$zaY5MNfr%)k2$f02x;%Oharh6~6EXCH+%}~v>NswYKrPuSDKg`tksGB-Gb=st zHuJ*)N71MRX+R;BpdpK01wPTtoS_=y^l(x0rD?!;R^rJ9u_>>c;U^{#R` zuz!h0CK~>T&EWMxH}(b$t?yNkH|+tx7g;WMZICwLRrTy&T`NU75|EQ;_GY2+ z#Bi;J;`juj-z)Bu?6AsbqeVUAjKvd{*GtLeopQ??X}Bq)5L@=|XTh8inS;X(4~ztV z>AdCCnCbCwrYjf7!aqF_b$zD43&^NmH59d|RE1yU4|4Q9siS_?n8+_DNv)Tg2 zgCE*IaI-Qi-b9*Z{vyFcM0-kCxz-kwI}`o4qBAk;3)l=7wjydWU5cJ|CgP;4KhIN)3CtO(`mr1d6r*92cmnA;CAu`M^V$asj%U9~D$Bx@!oD;Veaz6t z=3)Bj%<^UPWbNeWs(DlNAo@;=7~C-mjWnK|iugN4kIF(K3$fN)N;XIWe$6KL(rl~v ziv))0gp+!Kp=Gs5ozxq``x!p@x%q^-u%5*O2XZnT}s%}-VolRJ`Od^6DS zM;_CPF{X_VNs8_IF!?FU;A6WtvEHi2BsAdyeY;vWZWi9#@c0_RibFc4zG{vO^(B>+ z#zi1MzQ(G^qh~g+KnrV<7?CN(`zOj;ZxG|VGt#hDgRgjc-Y>Hk+40*OXGyUx-@cNx zxi4_~xJkjZw!Flh5_Pmn3&S*<@!~$^y?QQIRBc4=;FZ=Aaz*Q_b)RV161v}xFSMBB zQu4JR887Y7O_{H;K`BWzW;aIL`Zjizn67PDRlsV<$;K4E`$!*ir)#D?eb+AOs=@ibdu6KYYeN)bYs5C{2|Oo@(_{@^Nh9@o>18NN2TdIo z)H_V*g0#J2=D37Niu+V_p&;)YHz{@c#po-MHQ>BtBUwCuGsyjb0(qzZFPwAHI-0_(NL+EoC5jdaEt}LM=(1MsrwUns+G*0qm zKki|r)Yvsi{(V3GOvQG+kM1Pu3*poUN7~3sU;Hs6a^B* zK>sYetN7goU(<8DA6Rhu%isR#eeSN?-#*huwSn)xEWYLb6Z9>n%~caMn?AfWhuRr2 z{OiYX#-pNt{q)))@*tq$u_Cpy3@X>*AzeGxRC$AJwG?Ie3lGffbt)x3_huLP9Hl(99>U z*XJqlJbj>|Q$IsI^HOgqNxZf{vuf-g-$~@$^(0CGP8GR|s~Cu})bubI(GHC=n%x z>}Kc2{F<=L=gj_WHZQql6u8C!sIiI>8oZ>Q5mvY4$4(uioap%wR*4pJ@Mst_<8)gq z$w3XEs-LJXa#+d!I<&dJ=Z0MCy(+vCpgE-eoaE#tWhDn4LZr$CHuvyhrmO-x6U?Os zt^Kb}4BMuaFWlh_Gq0qA9(}<1+}!*6%HzD-@(^tj2?T;5QtGCE>3+xO1Hqp%CS^`% zrfG@T#bDmKcFE}LXsjh+F?>ut6Wen67`2ju#Y%hN6yiMWkxPW-#mZ1Vl{B9Wx^|sD zZ;E1Zj%wOq3ew8nkgH}xv@+iDb82@)1W3A50%C zh3+fP7S_#iGU$(gDV?72Vdj;>tF#*-fuPw;q9KN~0J{$CMaGs`Rp!@mGniNRD7#Kv z7*#SGm)l*dH;oopX+<~020`~6#3axG;H69QeB=#5k2Q3X2rq$!mie?SomGt4!+%fk zzuG5X< zBIW+k*O$_1wQP8dqjuFDu7Ue~miE$q#c^ZxnvMSLWxBWl1Jm1gjph&G-?=n|vn_D$ zqy5tjTWWhNH#U0IH=%9diY1H>kVP}gLh$MEHAOapDDb8}(TN>5#kOJGs4L>bbrDWY z%;?WWEA{QPV!gWFG{gRPv}#*UlYl@@w)*q8dD%5QwpLNgREh+)Vr@t}iCMq~3K8RF z^6#W~1qUtyUiSc$WPM+(+ng2O!xH7K6Eu4*4$W2p3AvQF$NCXnAI@4HVb`A&d>7?M zzgE}Uz#FScnU$5tMihVVYQb`c zFVr<&Ff#sKyR<}YwXq-}-S9O-?aNf^gVVn3;oibY-6!~cY4O4QT0udrHoe(TJ#IfR zM9Qx6zZI}I#?m>LuZvyt3QW#5nXvlAwkw#&+vvYz2Kx05dkbzw${`nneOnhE{qwgg z`r%PnXLN*$H!}hE5YKsk)ho0>DimJn2sl@|fyqG59-dKXA(|_Qoy-GeQLSY`kZL zkkbHlqC2s1a6k+3AX@|vDm~D0QmN$bR?44Po?C6f%5f8{EoAp~txcuhFDo{UFVWlN+SAgb%3-x3*g^AkcSCb)b`9-X^7KlAxLei+r z&N}+lL|CpR&`E(>Q;Dm~d)uCETaBPkPOXI`32LsYIH+dI^+tN!$|?jPq>C#6IlIB! z@a&DU;C3#5<85823u5m+`zAGjTKFiik=>{nS}^$(0om8IQ_@O=Ck<3HnRHWvcHfY=>;dcj$f2NhGG30=>cJvDxiD(eWSIz2ym8zOCL`(7 z*yiP;SIWpAPayb`X*9byI))%It0G0rG4W$!63FpVl7T~qy5$0rr-tQy{#Vk zD=|n<2QCqHmEQ=~n>rav9mefmgMDtw|3CT!dSyVScvx zaY%i+77{I}!L$1V^?|=t(;rnJlR$Kc4zhobMconVIWFc<*H>MBf~dS|6&X@+L_VHC z2JqVrE!c)!=Tv;A^u%$GuR1-{L-y&eZX@-M6aoLto5l3Kbt61Dr!%sp;QY2tmnbYl zCISPb|J^v~G?bj7WEzCMv*v9#1-dEI8Pc9vN#@NaK|I$n=L5RrW2WkWg_s{jE>MZ- z5x?Q9p>=ADj(tyIZhSut;N7O2J3|cZ6OaNxKRLWA?zfNnxlnXC9gk|udRFBP^n;t} z<+d~pQ`KX1j1T?m?ft3)|`BovGn%q-L4|4h|DY0hVT-_p^oK0WPucfc5+q zntY!QVyKYRDf`HIneHb*@6k0lUI)Im>aawMAy8SO1{V}8I~#gUxi)!OeO6+yh0>b5 zQ>GpOUvwgwiGhFJ6hnOOj5Qz8Sh z4m4@?q=Sga9={{dL8E&urW&tO%G9P=Ey8pb3N+uw%ur%<>t^=7a+uBZ26^^BuS97+ zTYZZ4rEL*+#9Cn%E(-|{|VnbZ`3?yb^P9P#k)rM3ZMHtQ!x%$NhSveiz zQtC0KOV(eNuACVVj?$-DX$p03x4MSEmw9X(`!Qk|Tc^$Rx9eyWOW+nD085!=6A@}_& ztT)al)eu!D!3Aeiz;$^BqLG z2!0a=-H9WCn=2oGy9x4^^O$Tv>X`4q?dMhPC^1r04vYRH%(J$a2ZyN}yuj4Rt% z;;O|yEz|P@ze;Kg74z42Df_rXm5er#PSVqJHYiR>DYS5%4(;q?LJGG6!=sJp48ql| zf;qoKd8d@WA%puLNkJ`Oyo zL<3BE?w38XsTZa;e==p%_^aBO@>3`!swW27sM2Y|6MH(2#f*U^VM%dMvCq^JmuEj3 z?}v0KG&sGs1m8slspF2~nc0dEDYlUb!dJ~65V#u43CDSy{nb`LWIu==toqxMyVMEQ zU9QlcD-08rXJ_^qWVb^P;r-YrfV#FrJ(>zQ+(9kymh42kI@>r2bG(c*2DR^oIY>GR~K`LEE7wTy-nTK43O1zg&$ZYkihfWW= zp!K}^Yw|Xf7oCdg2f*ayq?|`xvlZ&zROB?UCud zPL5NJ3J1)G4OlwzP?v>L z;+BuRaAT>^KnZZsDEU#Uv%n^>PjSrGWqKb>g-MFvLQ2X#P@>G#q*wi6l^|c+3%2VA z(tEX6rqPZkKClslz=}dGMasN+p|Ytc?4za9wv-2WYAsHk)e{@pwhHIZ%63j^ay!T! zsy|Ud1dtdxWahZJOxYFLfbeKphlbxg)DXVD4o8f=&yvH~%C~Mmj!Cx^2A>RnY+j2iVp84PAeOqfaX-NiaF}f?kC-U*rpje(HpLZ|4{}G$#cuwI1YR5n{D}r*i zcTPEki7)+Hn*0oZp_Eg107GcfF`^@`u2>UB%-1T>8db^A z7Zm;va>fXxe*(K~fSm2Ue#BsHBf*XQs*|5p*kUIws7qmH7Oq`#;0WxW|jkcn_tVc$Yudk z4)_?QK{?pH4e;xe?;G0|TZBW!g@VvYJf1BDQ4Q_ZD@Zy6Klq1ws7luK3OdF0Qz0*l zCbOVm8Sj)&xnT-UFTFM<_29wa>AdniukT6P%~r$scz_N6CHl1A{C3smxr|O0k6zL7 z6YQJrc)`1_bl=h1+s={Jz1iF_J^tEtSx>Al1OQy$(We(nH5|Nc@Xo(oDNS0lvc)_p z>7-Pq1q60B(5FOdXem5&V=5s_n(lR%C_^E?toqg7rx2jVc9QU~=Hq)t#5pt3b3e<4 zx`r?A5N2;9f97*V;8^0Y;qK;y)PD~>+QfmY`G>qg3MJ}2mXei603|tyfBYtO%;*yI z_ScFxSmCUAkJry<+@QzZ6SyNXqd;=tW=ZD*-Nnu2gyZ|v%ef`}d2dghk$FUlKlakU2x1y$97_xy}KK`npNs3n~eXKg;a03c1(InukgTGotUg($8-3vNzXg_9BA#E z3br9p=M5;)Yfr{aZZiF3Yvi>r|A`G%{0``{GGCl#Q{zgqKYy#qhGHM}H3{dTqQc53 zsobLvXs}Vd{s~E=p#)OjPc|;s!g>-FnRAigV3ybH8jbe>*en0iTfYMtE`A4Y%^FvG z{hDVMI|@m*;nLFH{QR%`3YtV(A*Ph!a#Cx41+P1s4RlDmS$@K!w@lrFWJ!!ps20J! z%WTJ)43)MD|LXg;ibVPh5V@eRe6~;>%+ehqyllb)XJsP_;;d5}S4ZnuT()o>3zO@l z)KTXylI-5GT$yZw9;OqkLhsXr17ZE1kEW232VKs;h%8xz7%D5(s3KW`B0xQ_1)k0f zuTKRcdD39boXT@6KztM%G8}(HRhxyjKuT7DDek+07AcOjeprR#&en{7%we_>Dwxzs zmTWWQb^J;sBq@7T1=$C2_&5e$5(mX&bZ!T5Dt!>(nWbV_CjRvejEBX<3vl*>ks8f6wG#98~cWUWSKQpf*(d$B@(Eo4Vi$n`HY1z^Iqu8=a4%$3W9Ig2C7Y6<ZH zfit3YIg9j9fw9f(1bbb<8|VVP#S_b%?9+4`9cqHFg7jN+)bFT;yGnl!SohJ#X4x-gsJlAS@MOja8Vr!nwHPm z^(mg4wZ3le2jjQPVl)TG@ngWY`V%#a>t)ur{krRpE4l+5H5*`I9u$#R$KZ)971=5; zebUG>z5NcxD>bKfM1S0fU8_l#*j*eS(5aDQRHR$?_31<&oe>G+1%n6p-- z6H#a3h_lcp>y@G$TZr12Wi)&r#E3S6w+r15oGeho&%OBlQWuk?BNE*H5JH&G9Q(+X zE^?XqtdPm&t!3Nls}O~#z5k5I?3;>xJDTxbRsEfKWu*hzv{p0Ik~wg!@8FUw z=aAFSP0Dh|H2Y5jC(oG&@ zfjtY>cnC>g<$|@v^O;PwJx(eDfF$ZYc}Ch$)x=8YaR8(@lLmKFr*ezEkZMOi5vnCS zFB(pr=%3FKr_gu=XS{7S3Z(+u7IfWm;+dO)p06pmyCdA?ytB=Y=Es)KdlO*1W6vI( zGgvdbX;Tz;0Hi{~w)BsDkNV7v_aFom9dNc06EC-C`=e zp=!3BnEbh)P|T9mR+|o#?JxHi+lTo`?0Q^rl41dGT|npsHipJ_X_4SM60qV!gc7&Z zIm%C-5gDBivTEzrE*nGDmW6G6SqP}794}!Hw^9DOlXRVbK+HYAaT9HGN7U5y8%?dy z*fh;;S8%vpo4AhLy=bhD2>S_f({uFz9ke^hm;Xr;=#~nK=njkMZt0Ie4CCc+nUc$(NC(cX3v;q1hJdn zEkVpFyktB&4M!MMR<%pjZW2C$tIbmh`vO?DCAF$$ z^OpoWw8It6;K=wV`g;JkRW#0@^|AZoje293EN1%xwy^W<>0yn@5B^9xDD3t+LLmWe z&JnnFa~RNm^EI0t-j$B3EahbhLV_I`cpXR3f684ypR1>pOC@eq>jR=JI4D}b)oX_K z3*jrnBi!^@*eHom5fPiU{yYO=f_1M;ANuMawxElFyL{VtwoYD!UOIZW{mKbL&Ib=3 zy}NC(sfaA!HgQ<80Lnn=i$m9`Yk}^~6`COS)W&Sbt>S3Ku|Bt>s|{AvawV~!X61L= zcd2#Tqpl0H66#FX3R^QO(Ayt>+}nX;t2)iGtBEA@{%C18bMXn}f*ciYH1xI!AoTJkCcr4(3Oq+?pj(P|Hy_6Mrj?mmb;`PV-OW;SEMeqPOi6gcRAi`-XG$ zv2C4kFT;MP{%)1+W8g%0r_Y#kUYQ)a>++xOISnpbn9WkaU?{%5AV|gGAwAi{u=Q@b zr#QpXgqW5H^>x?v9GQH%_!{wfGFH8+U2g?GjnG;;R5wC?kN#VyhS+q>M4v=~A?2-e zN|iC1!toV2T#-hixr|N~PdeN%e088i5Qo*olA@LGo^jmLI!Ogz)JY}+bJYTyaM z(m{#{W5n!y)q|^c_5vx0lTzd?Jv_=JLEgemURHAJt-^n<6 z;N=j;rcO}fe6#D8OVDshpW4rY^-~_G4$~yYZs!UzY>sWwo?0hn|NU+%4gWdmnd9ma zd;h)O0Ks1y;=)o~7g7UJE7Qd5d$;lnb1{mPFv$x%_%#!R7Xt$=Q-#a?LHhCF&JhW| z?np{!zqL9hGVp`faIwsFrXyMVq`tIx>3%*4TgvkYPjxiA;j32rlwof2L+=FJ16898 zt->4N@HeJg^||MLn&~IJ+R2<1NnGbLRHodXXKr&FIr_KVTDpm$;#;Q6y*_p#1DvJ0 zYtD4Oy)I?TXuv2FzOQ@DJA0m0BU`IA?r~FmJV9k$$rWUh6cdG7x9JSE!D|(9t!j_E z^ls|4H5h#C-Vd>}^5%_U4&pbaj}{zMCyaFew&Fp4%&JYN%g*_=ImO&;f?-9xINQxX z3p+E41}FzpSBvP4YpVE(&SS3T%}$r714|LVD`e4^*IrK^S-rkhdoANvhF0jSW6I|H zx_WnUw)+^~zA(Is4l?y@YOtVvi0b?7^`nF>Q=<{iAjp2+!(nBf${yKg?P&Sc0Eq4T+_@QTe$|MjP)Pykz~EM0iwZ?jd`*YKRE9TFL@NEbr zko`VH&f~l>KG+MNU9Y-VTfxiiG38P@-=^E$@V>=`8&y#;@BBkDt?-e)nBUY7ytN-H z#^j;br)S4?QxthnKys20kbtJQhfH5Ep!0T!pE)QP3J~Pa4xvr24)nh_Fbp6d1|WPO zDOpijd^vtWNqkXpB{5|IIx$%VaSd4+C4MQIpONs-KuKIyhK^Q9QCHE)*1=d=2^I+A z`{UT;tai)fKWAq*7$9JRy0Gr5j9u6wvAUXDc_%<@N-w zWtlc_A$ok&=!!RVd|&v@oKxrgm@CNo@Evd?*>+?pATkd`|GD}|fdCr1gL9FW5NaIc zx0Pg&9*Ha^Zx9Tv?wVX@+|tMy%aVaV+&}krIM)`Z5`-I!p^IXijAjh|ZOV}_=V@u? z5KTYa`7lx#a&M@Gy7!{l1Dy&D-5RXGt=r%St?u@H&bu;QwIv*Wy%>`#-DsgV6sSJGY-@=K8@- zS67-}P*zcm?*AD?-Tw(A)z`7fe~$kHMngSRLsLBiy&GvMl^b}KP&q%4SPW1y1Z?11 zY=nRpRK5uy#a;X!KT!7IKrsF^RC?``|A-3#2@~4G&hjJRe}w#R@%Oa;TlJ8*p@0Pb zKUB}fn#R!9n#RT0fkxla(b$Q`z)IiHlGe_~^ndAM>yHkme;%83{!d-J=yX?8G)3d} z!QosRl;F%#IR{z$g>mjLi5e$uNhOlJV4$Veh+o1Nil1R+Ze3If^JoALo>xg@h9H;7 z0&Fu}${Zj;10IMVMimZCOhFD+_qp}_>p>@%$?@)!r@Ol=%{2RVS4L*abIXzE*m0_T zV|v@w-tG1ka~c`!meBRH9S>oktPxEA;junpMi(Uh9zE~dU8coHlbnIz=|htNX5C^NA`) zx$Tx4!e(+Nj073#Bd_eG(Y!0B{6cV_=Tp?Kn$^41+;*c_P<0LO`qSxTZ}zj}W#_$2 z<`EO*BX8jYGGQM1#P@s)f%oLQCEb;jTd#i(+Iagwj*(r*u<|0A{V2tpdUKRBM2X#8(5$~wc-eS+NErYUa4@LP|7PT?u@6q~Ja^NRc zH_a!!br$87$hdA#cfmSYGV#{T_xeDDZ&t=C()?lN)S4RNT1t1=47EZk>+da@N{cuV zvweuj-n*nmS?i<23D={o$0ke#nuD#9&^lI{)6Ryl+=}+((KdxfKwY+=uzoiwIMuH@ zn%(aEKJ}zc%1#Kk>Z6?KZ^P|K(cw;r4^}7GgHL0SU3nZyo^-U#i%q40QU?}+?pcs8 zScAHkQCq30A;-Jw^v&+zGHr3^t!-U=p-~bufhP~nl_wS|w{R%A)BNOO!IG^3Tc+-~ zMg~ObP{CQQG?(!RUy>3U&jjxR-Dzd7W5xF7B{!i057TwbgyUC4mW*T0|BN3w(E7pi&g&$hJH zD=k2i3pl8lspKWlsN@C(#G1Wzh94HFa9?k;FE{;rPnCb?QqvC-$;qK*JkUNT*`};A zYV&Oj8;CGbd}WmnzbM!#6G4wfOa$&#eXOr1H)$m~Jzdx^hh1H}P69|(-n{XOKO;Y; zCLP*)rNYENgih$>mNHOk-$`eAS#STi6nQe(r&rCvOD~17A!8d zFE$jSU&%^bW{VQixoviXv$JwFvZoGEL?nzjBFa6xfO==CCKHXw9S zx-BIp6PLc0z89+OIKis>mGohkMy;!JFw=a-FOnu?35zOg+!~D`_WaLnI=ILpMaX(m z{daxu5C*#A`h`)^osm&~cyzlNZBUazLi^eaiF|MO7kk6n+*?byc*}4U+$zG&)QSK~kn?2pi7_q0URqwv$JnG}$ zqw)jER$mYg=!toqE+G6C;*z@^TA$^v=8Xy zqw{HEL&%qgo<`j@uYc3SXr}d>X9I=oU{b&wWyudXX=qT4^;G9RxeQ3hyqLPBYsWqg z7E>{GFE1mg-0;4YwRI;;`vmEeDqA9u&OWksN@c!Hh_i+|26UqjQcP~9s8JgZCVPC9 zem!J8Sf5C#h;hIUxhhZU-Of$pl}u6hex=`Xu?c<~uwQArtUikSMMc_{?1Cyyw@0N~B=+igg^2d3r&e&r2G7|} zzUO(XEi<`fA+92TLWrn46O6bjYV^YRH#Hz?msLAP)y{`1?8+r93E>b6x zPA91aee$d{G=FFGJO5UKBg+Mw@n%9#JeBohbCB;ef8bhVg2&fLq5Ybmx#D;c`oe)qS;F;v3KEicX-;6g}0Zo$_0l zK-U5B4Q4VU#FzgxH7a)wb+oy4);nStRq9g;9=!MY(x})A=N^7MplTE^JWM(y{&`x2Qv2 zh5YQ-ohaXG{#k`S9@5>bKDGcWwQwKeU18%GO!6sB)(r;4byn0?(QNz;2jA=1IuRf) z{1I{H)h+wtE#C1>mra2{Cbd&8xHWN+H`hwq(TTWY&M_EvpB{zH$_Y_4*$ugNa)V1a z?Y4XxR2Ur(#~#b`7Br)r+%PMu`D@tnfr&CVHKlrOKXsaa%b;;bxn#)}78H)fnh2Vb zYW31dCaxccJ1ER4l=IJWu5!})M=b)S>i`zvRfS<_?Fo*IV)&W#RoEC~A|)J9 zL6*Y`W9ErNx1dPqzNU1>VHy80lJuA;wI@1{jgpRU>4@9f(YIm3(Z26_O@v(GqzVToZJt{T__)8QwKA ze8!=TXc>wrz%3)wUE~ZPzpmnC91R~Xf7(!WMiX5B!$2ewMvcWFp>ck@)K1ZVi2c~t z^8k!=$S{#-z3l--&eQL#_E_rWgAGwIbft?Za{VImt%f2Onb{6ziU}qznFlsyB;;{V zx^c5_WIgcadd1B~%`Fh*NG}mX(%@CIyQmp*2;UY(mGivwE%kM<`xewTP+df`-%dch zwjZT`dP~ybRc~#iR~<&|w7uPm_ip2*b~o|!OlLfd7Rp|EGn?;6nwo@WQ#60;_tr@o zL(3jl#|MgHC!3cmg0_k(ySR$y(zdM{h%ZTTshIk}xgtXEzR8IyINah9t(E){OH9sh z_!9z|06N8Y$^aR0U7#m7g%Tlc45(AAdoZDKnL+Ze@G$fCQSCt#(ynV@Oj}$=Y4DL3H}KH78q%-R4&oa4DhV~g_l_TAg?pQiN1veG2;Li9 zszFKUzI1p)+Rz6)TL?D1>f;|y8eaR=HH^M*q*obqJs+imyxI|^=#6WI^~>??(EaiF z{>HneCy!TI;hCQf{IT6$BE4uCrhYykd zbrLqC@(R+MYOz|fyyD5UouK7+T-~15?8UBDf?kk$&s32Cp=?hE52_wnCBW;w@My)* zG(aTWVLT?*J=ossJdlJA{3%^LN0dEht5{h|E%d0S%y7RJY7_8SRaj|d%fxuoCP?3! zzhnELqyOBw0xRqchYm3kil?~v4%;O33dJ2Rb4*lhMn{1ajvN!Ij((7|FdKYBPRMRP z>5Ia6BuIP3LB*_YT9)?VJ*o#@q*?Vsls{YlL(mC@fhSiPYB}GWxQoPCmb@eZFb*O|ihHQoDsa9|W;Rog*fiydRj*w5}l@3ArV%15(A(?VPDB76ic;J;CX zt~>x`arc&wVom#(WJ8P6;$)mHL7_>hnd)$g&8O^9286b??C98RV@7w#oZ$z)nRkbW zIm!LA@=BF4`iH1eZ(_RZgfgQOWHWvkD%h0Azd^Dho!`{^QptGMmKHZ$BeaHBiGz|&WOQ`I(!IwN5J&S`bRslM@YQRoTZ zc59Bx;Dd&kUn=OMggcA?P<3LEz_`uNvn|k6lUc0RB}%MA9@qh`(PXeeHE&JV3I5@X z-$byd;WrE(CU6y(WxshuEj4u_EmrS0OcsFzFCyfz?msPj?Rk_jVZ3lJ$B9@z+=xT)&pSn%`9JU*a60{Mc$nMfGZ-Gj&Xb2_g_I6$l*yi zGtyDL`K&1&frlKx*u5i~xo%0qL&EWmHu!{B5p(SgS?6*iG_g~&#>N@{W=pj( zwmzp;JIe>UjGogsFLsp4av_JTsyVGG=B*?056`T?1&bKR=vWM5b(zk&UxnGUTQ#cF+P5CnHoWiT1-}Ang5h4JyaHQvNg8?3* z9+4BNnpo_D(d0jEyyDR7!hOE1b~ijk+Z*OEN;e)yJO&6b3fFKjLs{1t}_ z+eT6Jy~t&wkLXX^9JVk6ZV3_63Df*_*?CoY?TW}6I7_vboFNqopGl~kh4FR9O} zcr??RZZU$UYX84JNQ2Q!8n*A39=5K`YkhK%0Gy_VixoL3D2h zT$=}9yzVbi$l{u_CeP2{T5f~g&!i%F+@x<0iNueH3cfvQDG@|oQj+s`g8M=SYso`w%d8jnYTSYS!P$HWCbX&p2lume55VsZEsM5f zp?)Oi&!`&X^_=3Als9fC&$d$r7}vY#^32#%4ujFZ!XF$lNtYuN5^0qNc&cV@wSO=TlCgWMs{LZu zFs=b^nt>92;f$g}_n)Re;w%_T*a|A>1X*w6KP`9O4cUWO(Y!VTkgW1}TYR-sbbeE4 zt>ZwhGnD-V7WKXw+1bqb{f{H8W$}t|#Q1J>fr7uQ88i`Yr^3hO`8V~I814s)M;aJc zOa08gp~1_qhW%(87l0nDnkoUjyZ`w>zQ z7>nIzX1!{!0Noxzc0C=&{Sn2^#3oj^9CUVN#plyEr}y^{HQHY(?BkfSny-odKD2dw zbMAwFur-krD+29)qp!8J_zesqgR)s=T>In`Rg2rRG6=Pp{3;Of8gX;I^nRAaY}+mL zQtLE7;qghz+hUKa8%zs18Lj!(z)~+4I|E z=bF(W%Uxt14&Xc4TwW5vr~FB>%DT37Ku04t1O%PCnOu}~zA6MrK|(JYOQHpk8!djy zn*&ZMg$8y*vV@e0s;S6x7!)`qBIJtr;^PkQkCBF6$=#XD3J>+3IH|ncu>{Ff4eP>K zDPmQIZfnF#t&ayFi|PJYq~1Qvjwy>keueK?Rqk=&cGM;5N;atk>*_N%F|S+6tq|>9 zD?r7IDbLG8XZJ6#3YzoE^UV>hyR6&CXq+F%!QQIoWS^3kcre^pv`Q7 zTESD0w?G>LP$JogJ%s%||LQ7q4vdv5Ge0$(e%B?My3CA~8^*t=rH+8r9o9`Hb|&Gt zc8haoR=O?*Z^Dj<`usZ)3y|Vrqg8tQOrImb51mPc-kGw+Ma7y#;(}|`Kqs`u8~y$_ zWTaP!}+t|M3ulkXR6eRfcAn3WuoYy6lc%gQ-@Hjq~K<1DHx2NMNPr91Ym&zLWJx z3NV`-2x2sc!{Fz)(7J#W=KslzjS2A>$W4(mKw+67v44My8qfS#1NE-5ij-=PNtYylu<+sF|-cVXS-X7YHsJ%M;aYI*LWY9kURG`94{tQVNPkQRkg_Qh*Tsb7VG zIJUUsOc!Lc_fTzRLP`+X5xz&F%gqp(8nBVbnm{YgFQa~ec9f9%?c}XZO>^&ji-AE9 z{k0=8CSUii7&F$%cpJdG4a4V4?%9@<_{1?bO_0~DhFebEboekOI;9LdQ2GU_aeQpo zJfQUc&070-o6f2;VW6O@)@F3zXR5V>y7$~n$SM#0PN&WJr~wI_tikjl;9 znD{qj;Tf`mA3G(HgAC@7PJxbECwZbV!m`99t)ZL#A9AlVlmc15)Y=CWZdcTF-BoK{ zYn{YYgB9TT5gVJ`i_PPO?DhtkIzJ+{MhG>isOiXsvX7stTB(QeLjDWyP5N*x?NLOX z0i!}}lSlPPylw3L%FnFRY&=@zABp|QwGG-Zk~q!k*o5QQSXaXmbK&VFf}BD=9L;cg zIvC-0j`CKoA?AV!R!lkJJQl?Lzh9q&P}oj)qX}VZvnIfbv(~fcf~r zThdaC9D)RtHV}C2PVWx!vTy6E2?>=s4t$`bdL=gQ+ukmpR&r}KdkGtG#^I@J7!tw5 zco{iXq(<*hGM=wv%lZ-Z!Ukgk#l5(aM*>;`{}X5o%N7JbVHK^`BmHpl&$rkJDFsp*%~1IxZ^q@}ccHUPHQA<&Cfh;){4*aObTXAW9C zvdqpDj_a$qv5+b~Z%hWE7`60tCi0ozBOhPEYvhk{q&y;s$9pbVY%)VM%Wgc>c?vC4 z??b?0hR_Dtmbkf*BEJ=KdM=&Js5uX(}24Fm~{~= z>Tbu;Rih=>057+H1jclUv9?N`<4#KjZxG3wc6%^?muxTBI-a_z6d=yrffG2={Yi6P zaJ!!Rfy(2A_l-ebp{)&)q~ImEl-`kcK=I)5b99R?ZsJpT!tC~~0ZZD0WriihN1%#g ztqvJD-tS_2GTo_~2`ZCSMn&HMwPFtUj=xGAr%tOWD5A&%42=<2foZmoE?)cMkDqbW zVgpO_nYvhKW@+4!UWMdH_DTLKK3BZQT$2Xv&_cTXP(Hqh7x63-@_Z1GLqHn|eWpnDDYTnGeYn4r$#8l6*>r9>ZEuUS}WoipW zt}OJndm8Ny&N;hTCQOz(SXR>Ioo$7ip0&QK_@>ju!pBOq)+ z8g8Lt{x1MUK)S!3Z?DI`-m()>;-;8}A48ZcdYW)sQ!7)eqB3s*$et%?HQ&PdC#7}& za%QejsugBdg=HxnDF{VQAJEVHX!MQ0hS1lCY_Da0Srn{ZfioEpDT6Rl zt|!Nps5VR@p6ce}aVO@sArmv0f+mKVxqKW*BYF&)=?q%nvhf6_Cuec8Fwc;KnmSZH zF88G`8s)dAA?-G&o(lHZkgfhX3AS`pk_%hEK zle6UMMQi``+v9vh@d7OI`Rmu5kp~^R!(6Nv)&D*hc~BIrlF~&ZGW5|FUqk~@dgx@O z2dP_yS;_9c-9U-nw8ZUxb{s47s3I1<()h)=gakq*t{?QV79|Jy* zCHak)zM#IG@P+cmA!EN%MY!W6!9Yh@UDVLuR@y4431`K8@_Nz21lHD7T_~!fB+=F| z{+#t~X>{pFwp;k^98_)kF*ypMbMYnvOQS7e5-W3QiG2PR+yXLUHZKW{HpVIczN!+| zRbROow|zTKiXYFDt&rW>#hONo&Sc!GwgD>Xw`4Xoi0sH$nD*Mr?(AdjXRuJ2$$a=h znV@jiZ%n%|S-d9+vBi*;Ook&W`s28-LLmW;dlDY^6tOs)Bj@;EGG#uS(wpL2qe!d) ztM0R~W$M2z z@DgX#DiDzM&>Kecz7uce3X+4$DTyEB|Pa6)DxQ&+hwYUyN&VmG1CR{l+gFG+k z+Y6L<^TSo5WIlfyzre9;E^aN^> zWcDox>1T=DI&g}}!}k+>G;{{VcOkd=MOJ)Mj(w*Po&#Y`^9w!Qnc`;i2D5Eb*%AXD zryz;dK#3n<78x&9HS_O$45twC_-YC~*#1md2WfnskI~P>x|QMsxF9>$om?YktK(t=}q;yf}PI zz!mN}v4mq;Gn@J3LRL9vTZHxsEDB>1f80l%J1agU-oHL%84DnZ=nflMo4C;l7KB>7 zuVUqXegU_u`aWx?@XE!8WQM^Fc*Hlwh)MQwl51G4Vd2;1W@yX<|I?U1{$p3gn7sh~ zC(-yXip5&4agxU|M}iT5mrt>X=GvBn$EA&uo6OV%C;LKtYsEcIt2Eti}V zAL2;H2t0fvsYASH8O$w*Xt(^wrdl&u5P63kJZT>r0zzDTm{It%c+XcTL5vE=v{P9e zwWMzcY~m3EOgJxIMA~qoEZL4}es6&Rj``s#<@rr`CGG`0aYp6f)xszM&IK5`HhLp00 zJl8wPBMcfUl|f5pU&zDk*@qm(e3X?7lVWnkj|>o)DBg3rHFR{OXqMV-stpGLxacLb#9xA3@ll5>sW@FpIQ49x zp}cy@R>G8XI8`gF@j}gss8fBW&#$-S;5++84-F za+Bx&K^`(em>$xEvqH`PCg^Z&!Ekz1ti*_{^elgvOYNB@UJ` zN#aJcsEpP}_gJl#?R+~|J3 z1AF^*h1}fAP8tt!-tC`e-kgwic0AjOhKjIulOc<-)W4mOb`R}jar;<PQ*PRq_N|10_s&fbi2|JoqS>wWqm`5Jx-und zV1!mYP~CiSh>z0WQSOQZ?7bW(gc-i|;F!Kh4J| z5XkQk@E+xQy~t|45L+AVWRjbpbagENL5On2n6Nt8|31Iy%$pEVDb;VU`dTa?J&v%a zb>$_K><5cs(;9`Q)!i#>eOEa9&TJ|&UabNSF(&naYRRGOMdYlcz=Lc=j4@Fqb(Hqi z+yk+~^xzp6FQW-)Hg7n5i?xEInccv#0-}-J=|E38uWQfG0_LAZ>g(lVfdlBR5t^8q zl4+Z3gUI@}W>y1MbGq-Mco9$-BC2ifo5N1Fwq07tvYIZS#DKsOo_e6_ULbBn^>w~g z)jP~bqKZr-MeGuohtxRvH$AeG-96mL`upG)J^V0hsHnEBAMlH~J#DvGDM|B}{;m9E zSP(>(K2YtPw#n11H|i#vpjlKS0vr)P16Cc~7E6+6dKEZ#Es^8yhMuYTL!7#xNYmn!WB3cDgm|y@RZd+WE>@@{nq9C5+TtWUJESchxSE zd6L&VuCO$zYg-%PeHa#1RhggOEqBb{wrd4T>Bf%i2m4_r^WLnmRa4@2j{WsjY#P(Y znWh-n3oC{)&@h9y>W3M)mNiVB0zRJ^seb9&MKZs;>^D&L-wor>UI&Z!k_W1&N&MNQ z^z=^lI;?ky0a;Izu>0s-%uKB-7qA|b?|DUC0+Cd1UE>rgAOrnQv4WGT_vF{6!ZJbs zH>G{@Nt--5yqx9+b;4WraGi8~;KZP}i)NTYn(_w)WES6-%mpu5gwKI@?Yed@b zcCuWF{Si=`aI55g$+T?5HvG!j*KoL8=7!k9fYJByK}kK=>-wv#Z&8;#w$z4${FG{R zt}daA&t{nsM|ciG=jrXnX5z)a=loHZ*~j0%ePHn1M(Hd~$ntz6XYS@lQ%^}n%= zd+m3zI2@MJ>UQma@B>cVZs%D85m_}I23;Pr_00WGF4Z66v;Md^xk}s!qfA><@6SuX zg!;m$yE~TM;*`L$*o74}uT*=QH!OIa?c#yC4xsA<&tHG|uh0Zjwp~+dQI!L{w_gdfhV-X6vN;&-qVvWXHo|Ni5$J=+=ks2iRvncth5{tbi>mul*)y6KB8@ z+peL;J18nA<#tI_qPt+*~Wf%(bj*OHGd9KC+)|F-=nH=eZG}9+lO8#o;CYV zzBBIU!larlgP!R*EdLRGkIE-tnPQ=M=x>67J7E+?UN~F@vowYc0oSNqTLU;Un_>}URhSIf+KXEL>AFZ`TR#oIo<3j8~5SEk>#dc!L-nLU>8>s8}^ zVUldK06Gq2|HlX&2P59 zIz7*my>b(%x&?DxasNZRaQ3T!7ylR#0g*w8yK4Gwz04*-e~(XGk}d&7_2%OhCzf1w zeOLN+A?xoK%6$H-KHs~2vTwY50jMv!1oq+Vd&3uB{|59H>h14E6`4rbFFi=P3$*jM zQn^vks2T721uSD|cQ#wMQ%kO1lt7?i`|{UcUUGHi3bsiXR|9RbJSsJzjt!fB`&BRx zc5c2K>d%fy*V&~Yg0nfPC~8*@TQ#$x;}C=N?>Hm=@bKOvpIIo_dyAa9x9~lIE_|%0 z_xl2N9%z`V073VB8JbdSwv7AfK(ml9|M4rE1yTDFfPm@y?yOSK=vklb)%k3X61`Rl zR{&=I|E2&BIuoN5c9ZUdQ0|L>>& z-%tPl@YC>Cv(3N08cJpS*Z6_j5h1xBG&iVB$E$-|#HMnGTV{PfeYZPYCM{Cg8v zfzbb(3LvyQEtv@sv3aTZt*g^(*&TA~ZB&1jScBG{O`}rn-RHCZmU6!gOmftx*%h2q z7@XvkEMsT$bIlSc$?0u=ot@1$CBxjawl&DhZIn4O#r>|3RHRAR`R==X&rwT@ZNd*b`dMN+y9K>sA8<(9 z?21qOvw!+Ri7RZT|K0UN=i6oMAk68FfE+#AzP48xe#(pOwI`az4;o?3#{B-6v*Lhv zrOPj~|9%8Gqz7G=+L~Y41z2Hg2IO>v=*XR5Rn|FnQ5twBN1Uqwb*-|i94fK*%3Imq zJ17l?@$I3>y(TT?*GGl*E69%?up5@T- z3t72?eZ@?B;|-AWuAElof1@btGu9uK|H$&@_Rh#<;po3YS8x`W;L+Wg2--q`_ahK1(GsNRtWk={o$ z*hzmw;U!R-ym7sYikAC~>Uo}8OSU(F{JG69N?F#}9NHzD)(_;d zWanP?CZerBJnDdGBnrK3^SkQN%~1{SE6#EWaA>=t?)_L8!4(`$X4`t1=XIE8Z>f4y z?LGTVHm3SZc1K%+XqwVvVPZ*B&m!6Ny=-@kJeb`80*|)9sDGwr7qIhgrxCJH9fDl%58Gy-;<+ygWL!^@1PUYj`1waC?}Unile+ehtrP-9PGX z0^_!q;>!Sni1KHvmNk2sTb&=ZpnIk)NRj~>-RgXsM>~*n7tLq4Yc)cXMu9(U<3aY# zo~VgeZ<$6FxUk*O=wW?f5o`i=wfX-%Tr~e0>yOIc1dYu%fQ$QQI=d4N|6wOA#?ushx3&^+5NXQBWSx@)vK0 zm+kQBAf;|Wb68J?+WQKD=n@mSEvh;7t2XwA+U$rRUMyFjNlA$~H~AqWevKn#_8CyT^WQZFyV*$3m|1hiy(0 zR(;;%VP=)KYZ~*toMiN4g-v6+-(}m*e=ZRu^$UObp7q4La4ne}q`d?>?-6t3erL`|LBFO`;{?TrcM%tOqM|yh*75nm|^aXqdoVM9vyzo3x+i z%61}V3fjM1cj?;HT@qf%vDU?`D?170-;$kcu65QE{$D^Uidb?uq+L>N$-!tg_ma9 zExj6<(HeY--6q`f^)zu-Yj8bD`9)2=SHR#smw zbHuL4x+{xN{xB5}*$+14Rml0Ok@G!u<%ZKYPmSISpq#r%J@g)kystyyW^^+=xiw^z zSNjKospLZ}tF~u_%x{z|^FSy-Ev`fcT+%2=3iM-ljQTUK4-A3Mj@|ebiMlwBs3v*S zP&BAMIlS=F#Pn}F#|%)|vqC#`8lu$7P&A=gdnC^JC)pvJmUDf;9yGq6(D1Cr8J@p? z=uiddKrG2YO0|ur)RF506=r|-wedc>yq)3HjB&JTkzOB&hlx6kM7fP8>O3+POw>=i ztR*}6K8G#2gG<<}6FR?Hq(@=dX;`vK4nW{`p>)aB_ed?bJe7SiF-9?7q!0PEOwE=% z)hzg;dCN1ip1m^Xpk~e4HSaGy@Z2YUKOdR%+JWaLT26f7o#{V4tLndb{yyK+^{Y)E z+LKbtkJl>yn>st)gR*9N{pi+iCvznwqplHHRmN#(wEGXIRmb@Vd&6rcHu==QEp*(7KjYR@3EY%In`)q-ayV8b>O;vuT%c%AM1V3u}=yPcYVn5!rv=5U0#K1>V^%WiYBa6NR94pmyYNw@4Z;#P1myH_ zcwE&%mV+qE42W2fVjoqor!URdv1=(iHLGvdbL73Qn+$Br04>KY`ZtQz&6jNp z6y&T-*7ZEfNwXUVf9ZJ}cF|UaKMJmZvB9N0IO|3WXi>)FJTlwDJrZ755&NRH;t3fy zDqx~6*M^t==9g2@!?okF$R+jF{#|`5L6tMn@*x^xRim9*R0=B(isnBQ4u<~Ox5oP@ z-@>WJGB~Hev{yYkc?s_ukZP3CSfcu$<5I)oO%@2up;sf8A&gVMCvW4plX;^w{G3i+ zu&FqWr^0jmY~%5T519jmb7D}8{3N;t2Sms$Hat1f;RV{URqTesOMA9+9?I3Dn6T4h z(${)u#h-n1ypOPUv;6+Sh@hNDDXsNvFOKv9b2;5MJQbc}$(;0?E4|qukW0OoI(5!& z6kEI546~Wa>gIvgsV#RRG*<><{uRZR-@KPk>uF;-b@p}N` zNiv8u>N>6pbrS<}jJWA!%qW4uVNUr4w$K}E8=NO=DjUHP1uA< zV==W&4SLB+bB^aC1X zMQ*1LIpj2oDN%jh!a>;Eoj8amO|;)NZgdr?;k=MoBtz<%)Q?jpiR3*PdKdiZSI7BK z6}OP{hF*?!=`tDZy-k^U$a^b6#_PX|r-FC6?(vssyp``I|MX_} zXR9p_e6nWRClPa=`G`N|>PwT>eE7_X>9?l5HH9MNPrlo2?9;T%MysL&C@RxGAg&Fa$K%^<>BbP|I z*>fC))2NpnylijU5I5)qktWK!jOKCiuAE0!GDp&aZFy-%C>rff*l6v(KsbJ>(Q9n- zlO~3eoo#s_X_2OgI@~QNyR0y`a$&y%B{L4C<}%=Q!4BAMg=_2F5;!eRtn8Ff}QeZG)1rOB4pd5-)rz%$z*m9y= zLT0lVgR(kW(B};t<+GR%3U0Zz&qFT4W6x>-lIkEMpuB(3@|wn%S7<}D8a<;>eC{++ReVoze1S>Z)Dhfi)y!ztn=$0r?r~OMiJn_-_lTy zISI=#4h3j}%P*H*j@=NF#(JOI9BzmUJSyIlJ5Ls7;O+z4`HY)zeqIX8&xrzLzJaj~ z2+`!QKuIugs02ydt_U-^I98pc{AiXOm`z3Th}#H<8jVRCc00r7vo>f^sT{(MN8Ow{ zH+Ry6jG4g-Gu_#Axp5{;x1nHUw#u75rijL^V!!C>H;*KnB3sy;5<@fxo_wip|Awx$ zWPB>iO>{&qyg#i>##uUMbwExv*NcpKoi*fQ|9W_2XxdR_9^({*YCujKD=tLQVJ_gp zi>SbrVP!31y^dXs9*I;jwTZD8fGV>xZ)i-1U34pI@yE1a!uf)!+;a9U>BSRKVJoi! z4!sZMj>st}cN}F`PL`?^Fdz_vDL70fBZvtghtk;Et*He2b~UaMBNqqc#FA<@A_#uE z*ck^apLE@5l5Nrp6FAk}TsGPlDNDf8R^j@|Xiv_g;|NT%*iJJKoQ$Y?1bv!fx>g^h zoVxQ=Ye^^Y^#+l%Y4rqHy)Q>~!l>wCGq~T?W5%+&&MhMeu~ByQsX1Xt6o(k*b?dcF+ zy1^YRgC?_LdxQazyfLhdx{fKM7u0;0(R66*!ZTVWY&Z7nH-O`*>JgzQ-ozcZ7Iyh^ z2Hd%z1`zF`j$=;79%qUVIPok&Q@Z^F`C77qQ^H=SSGUW-)bsXML_N2U+Z>?e(Sqod z|JJ4y4ef~V%I4Ts&ljZ^J$r5S;sd*%^`3s~*~}Rq`8@mKoHyTJKJoK4ht@1V@Y$MI zKTa}n*_^iEy>!P2`>=+YKd|mWP!^(r37=~;P7374&CF#!3U0rM(iJSw(`&;Y6VrTh z9xXvY#Jj>gaIFkGofH_92%AFX3dG}tT$;Ih9b{hWK(%9MHHOv3RA-~}WaTgP=Dz-= z9?Y?ow*;d|2QEnp<%o|=^f+HoH&@nnpOs>q@d7;$INBaOT3Mqi$;O$v4@Z>OL-*)G z&1(X0WfD2oqrlwzm^spzi{1vP7I(g|W^(cKxLV4{G+{iUO!n`QWVpao^GB)$-0by&1z_cBdQxzHVMWA{=2p*Q z&=zk(B}Wvb{%q$G*;+FBJ`=l}E{2koP{K;>v5pmG7t}pYX|+OiAv0AqrQ$v|aMkZi z4oU?cm*~u#%odkqfH+MHDnyFIgLpwEq>ZyTkPQYrt$WCOwYv zfI5P=g4sI5Skhn~;voWjfX#&E!omXv1goe8)vPAUyXOmfxN)c0%0+@BqW>6HZ6iuB zl`I@-5`p7^s>n~BO6BZ{Uf&grI6f1Di#NvyLp6)}9Amm=P|l+-k$shSQPLFIJ|T-vO6D6Q2o=b-3P^f1}pZ3=WcL&g5uL*s2P)khZ`|& z3M+ma7w5NO)IsTvGc1ozVd-oIxi{b`hbnRl$}$or;~FU=i|NISJ4|I6^1(`=deJnn zy9eZ~C97+g=U}II8IW{haEPh4p%7#H@f6*1dJ!B%C+HnNO%g=l5?Pu>I`D#u5G#in zE}+4AvgkWhB6%ZL&YTBLU3#M`3$#8-Z+0 zOqvOgF}ycNG?X(=){&A1NW&gSska8iI(4PB)(DwvPvx~%$m#5W1*V?J#m!K_oH%}3BKvba#UiqmT|z1T6Z!@Cp8ci*mrv$ zi0LRlz_6*b&MB}ni*o7O&63w?ZQiQ|Q#;dbILzjc7iJGrjx_TK9VvYqk#4In=JzgU7X5}%DG6URLN#@}B zI5L)v2@4D%caBBKS%R}rwz&O}(E%4_KRgakiXI1WSV%7x)SYM@9Tpx5@UU2p;k`(| z8P3L<0RhVA`^!4xU^Tli2$xS9mpV7(B}p;UnH7)lq_NyM6PC;BccIMK%#-_&_NGy< zv!q2CAZ-tpwuL@FSH%j6DxphPGC0VV%aQ4Zw<)pZZNuCy16ZKc3vl8-FqVu-C5A-U z3n;?2<9;<8iPaBGWoyB_b2E)le;FGQn!AQXggdG#h~#g^M1R{}N0<&fq)OO)i?|8BEpBiXlOZboUAT6I&{S<)i&>c9XUxJ9Sg~(q z+R&H|M5V+)1eyX@`C2xPPzUd(Nl5KA*eRy&M(6W)W-gwi8@1$(d;$@T$U;l9t|2fj;%Pv z4SVC5HHq+yA<>|Vr6(d3H=Eg=I?Gl}zkn?rO=U;sL~0-)dVSa1%up?U8SiuKhNV@J zy#URs@mdsI_U0v1m~Y6*Z3vYo1_5hV!mb*JzVT1Eg_X=vv&don-4ZCBqmnT>to#MH zue-FYkXYVZ4wvSRi;{_M0cE@{lATz$H@eENz^W!u-X%mL63=yF=K40X`Iqt#oN$!w zooHHb?}>KFH|=G`m!@tJcM!ZvtqjA2Nrd;l*|C;inkfU4m+}#EI)eL4ct&d!Ga@uc zJmJ+6;Z=`HIZefwm7(%uuB1J+p+P~9S}G14g`atfNwqqto=Sk{ZiIRcgsrTBcAGI19j6LOa2>ODxC0$V4br$p2G zT^bt{gE9kxV*6F>#wFN|c`RX-h6uZXg_$B@F_ug(Hg2A0fUr7@!nzN~q#SDPDgzkU zHB@F29p`%<#Gu5YqCeoYuAJ5_`yyU^ zVL3|q=LS^$)BpyjT)gP7W`#ty#E_84!amY?d7zrZV=hT5Ytsy1b$GK|EP-#k8J%>t z7*h5(72$Xl7SN}4lGw1Gp*Em!5)NTF38nvq9n(b$Q&t)yWl;x84TvbbDA$x<*vDaQK8ReM4Bu%%kiOU-!szp*jA+uVcHx!> zLUSo)j|({M*PU}^8SH!@R2#zK`Y+MZX<6sS<9e~zSt#4bb7l2l8mHTWGmP!-Xs3Kr zRwqK)EWNA%!-qyq4>+@Pi7c7x!t8n%PqTnFy$Kx;yMOer*!@FhFbA8{mkDK!o z*)2hMyG8s=mbCqXzD`)A6LE(yil-MK7Pm@P^^g&of}c!fp@?F_{4Oq=CQ2{iWgru# z=LzpDg75GlV({T| z+5Mp09}M7eq81w1Y`(*14eHsbyZF8VIg2v6h!Dj_O!F?*3SXx5a_kHe}2GhTH~>GDA>FevCfITVjx zZSi967SNo;=W=0v4P_{u>iZAje8t)cCOzgz=E=)}9V=xhW^uX_eE5c0i6~$6Kwj(( zMLH`?r-`^9^oMU4+V#5_l6UNiP{4}3>w56+Emj9CUcA+`(+ir5Sgx`>-Vt8PDQ!DZs_4f%bJEE)mb1Lz)flIM>sN@mm+qN> z91Buv*1Lx};-QZ3!TG`!B_G1hdF;~5kj5EG3<)zl*qGA7wn82|GHj%6g)J_y$kVG)+!TwOo^&BSLLR z?!g;Xh{&0v30YHtE13n33XfDeDrUNkjS4E(ka|gY1ba#I<}pi=)WAwZ#O2W9yvDS_ zsLtr!eZPWZB0wJ#PIYeH95miqMlKV{AO7;c_7EEOh3y#qjsTH6rrny}%eZ1sW9HnZ z^ol}g6I;L2glPW3t^LbZ=H?Jls-_8A{_FRdXzUtQNm3@#7w@kIck7Cm;{>VB8r=@_ z_}-Bm+5--@g?Jw5Dp;1AX4!3|>YFt1vMm){awM zEWT|Bjmp6t?3A&KCYnJ*il3$fI74ou*Xix2GD?+5dkaIv9ipM&)vW=s$6A-mwlFiA zU0yP{kh``#lGkanB1kB>B9I>ram&`n)D1y6g;DX%abH z#OPT(0bdm`#9l^F+FKg{@0#`WXe~d)w_Yq~Z_*!XHiVQp;KgvEwf^koET-3m+H(w0 z@H4%FemRfcL#34Wi;OVS$sED7$G8DAmCoIGEzyc8Y`quwfP>~9&W!?BdFZHpoXTUd zHPCK2zAgzx{}K1m9VnX=ct~iHa7f7OM}-765wkH^$B!8Dr(@Mze|njL>8e`>xG*tT zfmQ3n$0V6s2!vUNG!-h9i3U+Fo7%V`hBDCk|&HW}Uc^wAHyM=sT)K}Y+(mGeRn{nHk za*}O9>@K*xCR$#dKEW^zXv%{gYbU58oSTJ1jp<4FNEzdT0l^P>aA{h64-ygSpx?yI zxCkltS08XIOf!H3U1|}eWnTywFGpMxF&q}0cBk@ zvWxj?hM}rM=oMF>hIx3i3PH0j=G`%(jNc3i3a@J9#02>r3bINL^HM5N(L;me(RV!% zLq0i=g1PBQ{e8><2So3Yz;0_Lh-SRKgow+gx0kiEr0q9A+6`L0ih!K3^{ng5m6L4? zp$q*)Fup2>7}`K@?tgkuhR6h;DF-G7X&FYl{$quGoJ8i$7A^P5R(vD^bXy6bY{R!v z5K7*dFpD{$UvPy%fG!F{fMy}y5Jt8#FZ0qk=rb2oKQ~&x)SLoTDw+2#W=f35U2Nc6 z3s5xS(>)^fO?`F4fMZ>bE4{7>8*$1-S{%+6J|y$<+tp;hElmtz%iaXFIn%l5o(R0Hv^%{2KNp`^?1|eUPizcyC-vS`T=^$BRVlE`D5ZDLccc$ z2zR+P7@fS_<<;m&oIbeDC)jNd9^3vG!BaGG; z{lLI|j0<7q!U9{f-jr76ovJ44_v5nfXV#!locLGU_GRe3Z-RY;mw~ z^xI3QFavUrfKHBaCkopNGe{d}#x2fU?%PA}a79yyZ>%OLUJ-o+nQ<$+#}V+QA%rp< zPXzs@w@OCtQNCpZ&tpY;FIj^3tXMFT5A~TLxuO{FL?%*xMHDKTMNyP(`ppDDhDYD! zMNq{f2ap*-QKU`eWEddvA}x`>H2~i<-Nk%|U!=8uyEJSvgx(lHg(y8H#W=Ci{pvge zl0_3f0z-Ht4R3IK8nl|ybTZH)Zw^Qrm5pl)s(`Ngdzn`lN{?n0_9Z(2A;1~;bd)pj zQv2~%W+A1UTLHf1j?f0v&X-*{Ix1p{42X)@Tl7!^B)qPbOj*eW$QsadD6{jUb4C0; zvegy(E*YeoKKJ;YFR(MU;;=YRe|)kbHTNKX`4b^@9XaRAaJ<3c(|It*lj2(qh~njA z$_r)1X)-1zsvjhcSVw!xYh#mzT46|7NP}tZ_+yeqWL~*hgIBs8NSbIPEo~<)&6{zj zpRz1!Pv8AJcR(+@A*L76pyH{&*yw2?DvD5^gI?B1D2r%7v7ir!JoP;4baYHq4@eS` z`){1YRNPUCqSzH)ywfjxBk*>jxiaSMn@z_YNpCM>TaYYKwmuztx&_2;2wBfUVL^i- z&Z}{tTTuAk8+>K6-IS-am|AE^>LCWN(YD*BUrl5xczvF%GI^TOfB5d$kMaS{otnpn zL(%Vs)Y`huG6e!2KxUtd{$ef7sbPucKnc-(ha*WZxcJ8F@iUV82G?Gv{C7d@ySY0%Btg*UB5 zG2TNZ3Vn1d+}bwcKYe-ZXWC9WA*5cSHw!aB+`kokg*Ty$?$kq&g8f1z|KF2q+(9o+ zB!n0B?zL?+OMpW%@ZmLJ ziTM>>V(N^>zWhv7^w5w>PWL)STxzJ6K4i)4a0K7ca^&}q!LmW|1{|Bp3i{-M4WmG( z688s6PB*UvNfTukV5}tKci_Gi^A&#OS85kzTa4@l0N;U1P|-MciFkaxg!ytM-MWf& zW1y0$G*Ku1Khmx|Ac`Y3nP<^CN$XGqg;S z*lY<2C6ZktZ8(cNd4DdxCrpSRNcQiaF?JsQb^RRfqh7M?)lh&V;?_};yZXibfz&`wnG#lyL# z2+|mNUmm;G2$vu(A=HR4=Df69_L@vKFphx; z?>rGAT4_WK+<5r8On&L`I;!{gf1=49^%cfB{dBI_5s!E7-@|S2w-3gt*~@JK6;F`9fweju!RMP9L7=S7`qqD z{ty4|5x>6OFbu;ie)?k!FadmeN2?>^lLuIvh=y6&yMKgPnEZ)&XDLir$)i_dn%5uRDwpKNKgn*+VH&b^O>{`1;eH-y?u0So=UtOP1yGh4 znig7$r!_2P|G-9J@&t&$Cg`j`mj46Xrfbk!vE&GdP*Ar@6g4oO<#)qvx^#UU!C(A) z+}?|5O|4u_lLRb})Zl&`t&{&9dKiJFz^i>Q@0^lU_{2CT%V#0Kd|!%))q{+Myy_Jq zH;;Gb1`-jwd<8wSi4}-}wq&w|c1xaNe^5@6({XM^#Yw11Aw@TBblvbK$s{WM{w&=e z@Moxx2ijG6{-=NZ$Dj9S3}#>YW1zj#)AC8ouKFr%#tZ0JqQ*$i6IrKVEK!WOB;V4* zmHj+)GuEYlrGD!=V(k;v>nJpgJN{zZL&|B+5IRjr(rA%bnhTT@H(|8T*u(PG|M2e~ z@taMTIbmUK@DxWK2ds7pAEOq%V~S8XX&5Z#aFB9pY9tBqE2}nQlYz})_4DiwT0dVC z_1f!p>ezS7rY?LnkeqVqxqokZF=uMst1q6Dh+my^_T9kgvD4q3CU8nH{ihSYWJ<(Q zWzytR*KDmlrXWRxl6f2C4ssYfpB0gm50$Iu8orAy-V!~G_*xHembn!Pz-|>OWaC>> z3uz-~kmU=gb7Bo@2+SYwf^(L9R%{|jT;I>h-bT2m;@y@uAEJF=<$HC2sU;oVsw66g z;%sK{qvD+VPl`=YC4X7g4uC6#@IKvOJtxA+iE}QRh|0S(46hIQ11q~!KyvasHjy&Clmmx#d+({PqWX2qpksh#R<7lRQ*E3blKHo8 z)m=raW5)V^cpH37#5q;FS$U=&@guMD=mDP==V_DRC)L?Gee@ksC?i`GsYn zwHB8u5`!=TtKLTDQ9YD5=W)FG)b0umYFL6rG3{la7HuXRO-JSWm#5TWPX>#vb(Sfc z8cjsO*1t@})MSOmO8SA?I~DgFj<@@8jMECx=TVz#srh9+~9$q7h+ib z4Y>yI#yO8GNi;yHt>!sFWtJrpl@MWuuYUfwpRf3?-&l$tDNBET3Ko~IYB%3%9?w~{ z_S77J?NS#EE7(l>cs5!{dkr4z`mf*bRXFzJ1(~R|degI*vAUpptOILs%nRk3Rr>7L@W_z@VMN6 z{k3P^{b4wag3VK~`Jd%7oTqmWlFW!^dFK6RG5*Fs`0_vTlVn~@{9bHBOl%`_UA_n3 zxRDnw81teyrBLd<@}%-LQ?a;4QLsSSiF+Epq4?i^;Z6NV`ut2=$i}Xh;rBPm#lT2Y zTVB@v1;r6te6(6zN-wfVj})EIIgF8|WbYx;%|&A|_VoDX4NL zpdi)6J3xI#h(r(Gl#ZjJETPbTK%9%G6wc#zGohQ zSu$tO>QDUQERViYQ&S+iYWqHDJx@FgzMoU%&JS))AyDQ;IJ2$b9PS%eX@ME4?<4rE=cfSF!JGgI-!tUXPkWN2>JgM-#n;1U3v4bk^7 zXYjh*gdM;()6ozr)9^v||MKJWLTm>rWw=;W;W*%p@ekZnIpJIwueFaJ-nnWjrr1Ol zJA?UIjy6B}OJ`@q3j#gK=Ghr9U=gwMDz``*eO|8e8!_u79L-ux%MBkM|8Kvz;iEII zRuTPM$lMuMr(-K~0a=eGaZwx*5BT*{;L?jlt@vmZS494qAGKt5*0>nV&NiQj>6ip) z&Hx~zxb4qP#XESzv49}K3=IY#q8OW~kGwSsQCwWDHpciD?x|`Y;<9*}fgz_$&WeIF zm1zw~`@mx!jEQX3+u3JQPO#ncty{&-c|3MY*ExTQf2Ksp#PqQXd1FOjA`PSc4E4 zPz*qrEg}(Pe%p`DTptNNL@tQt_yMqkRnqMxtl%8kFSaao08(ok8A`QzAeD`%2an$8 zTS65Pyd1j7gQ{fLB6p7d<`1h5D>bTitx`;Oj&zcvSdL_1NyC(yh$EcO51@>=ET*Vh zg>U82p(>OrE2Ktf__gnNdx4slPmOt#nc5y4!31&2KPzn@%_qa0#>zENj;?q}j#mCH zC+OjO0UrCy*?Q)wiTxT;EA-0qPtm08sL#hp5`NQ5>#s%mf*z`ECXzIbc&08|QczYP za?rNO3(4XWAWmDk83cozw6|p5AXi+I zRE-&G`v*b$i`q6f#zJ1)BCjI2lotNeACz@4n!m92I`h<_XfHC2jB#MB)*uAs+uYV8 zIt_Tcd^BZU#^13@vA7Kf(sU4hq*X;irc#5a>it68RRc^Tv!+Ghv6&;zHjvfev)~{c zPjNPcUGu$spnRDjm4fV^Q@w3ImDnMdv7j?S3joV1 z!4w_KH}o3@XJ9(YRs+sSp@&D3p@KGdG{^KdFrinxVR*2U8A6pukvlhk)FFZ$usF*N zPFKcOAemA61=s0W_ui5wk)iOR=R-`G%sGOq&WmSrN>50f`K5?vDIK1 zti^zvqo2kk=PNX|+!%A2@(+l`o95;P%d zEDP09YzH{lpO_xVZN9_YR=>+CaVhJjlW0&n3Y5teC<$18_~o}3M7#%KJh;8=DNONK z24|cK_4Mdw05T>B_aIbgARCEYGI_aL?qjoei|3s7>2<^JPTw&7AB&fHe{uz;lJ7kC zhNu78sega<<4x}=o_juaSr`8sh4NcsbI)I!%#*C6Mh5I(t(?~5ut0rGj+bw0gv;dr zxvCns#W~fce2?DaN+Wp^1nQPtkvlQ55|QAGfG?X`LR=$@AtP=1T5L(oB#iX}SFy3& z%r<%$p2g%Z7lEbD!Am*YaDU=w@01BtN?@kan}qu&eA5ceo6?0+&Q9aG7`MoKsygVc zUn7fMBHaGUG3PX*y33#sL>+2fa%|?D2tTq9 zo`5>qr3&Dx=#l-#g83C1_KyUGk~GSJ(HXc ztVpc2qOX*Pm8-niRwfns;tp8mbB-kYP)S$a4+fC^c_!W|dJqh}f&Z5@)XMeK@GjLB zGYnq`^Uo8lG99f$N;YAZ4LesU=9UwYXGOGhdRd-C6nSv=?j)HpZv7e+U0(nOkYlh} z@F#wi-T-AmJ0Z$6+W85fR#Ub5j9mM_La5a|x`?^y8<7ur0a297Y^x4 za)&blJJ>#ipbtc-dET~Zm{Q-CM4lFVX!|%XqB#14?|I)!dQvPr!%S5Y6-D);5pTf{ zV7aG(C;-0xDEUyH|lH7s+5zU@Etrw`@2NIpO$FnL&Q;vXEG{)Ui1@N3`OWHuz z;wdgg3($1WtF5lnD_;ju_el<%O(<_YEyT4{cdOv_l9Fv?j4Ntb*$w=4-1chs$b6BU zLBse$KnXGIEb!Cs>%rV%RxU(K+Qi7f_rGfcSuIn~YRP)uRO~44RyAlp-?_gQEvw~Q zb2VBrBSxSMAbYhyaG~HyBQ|@RT@^xg@P>7KKsLUKxQBv;UxpSWGqd&7QGYT#Ftn2O znvwyUH3y!YHRnN>dJA&@U>K*1Wt=VsfDhsMX>s5KaDbM6#o9B#Of4>S>rc|V43(o< zd=8*sTFa4!A-e#Ev4*C8z%HA3CW1r`*2-$}RF>I>h-<_|C>qvm zf&tckZ1dD%Em^1xV}&N)%7~aLABTGog=@(wun4G7dqD$d2!zA;Rd=++AQIu_Lj43C z*jpGs4fEY6T6JX>()K_Q;C!_+Amvn1D|7}+Zpd@+8n;OO7b@yTqImR`>rEmNa&mV) z1wVZ#2Jk`e866B(b4g#=?88g3W=Q`8YIaMK0#O|KFp4?abi`g&p?QaG9xX}RP@>)pEr^YyrZZIDhP|`8RK4XD> zCfgvP7<1YMR{7K2f~?#woiF`Gp32>C9Sct5^ik~$weM?4eN27}oY5C8W}`Y*jv2P% z9#E;d$@LRSlna%Kw3CI6c&=!e68;PH5;}Fw+0HGbo7WMV2JggWXl`g^D^L|SJ=Kqv zzav|XV7*5UqbRyEl;K1PnrbP8bpHhiv~_gv9GR}vpE;L!B;0#qvczh>+qsJ0W{Bcc zyjd^oCZs~KPFg3ShQV0!*{jhQK@|W43btW_CqH1L9IhV`i&YalS>-#7<|Rg!gQXoy zgUVX>{pq+L_sC>i_x}Rp0-z-nCT;lW7FPHghL;krXhRrR;HWUBhhQRuL-1gR-~si7 zKI0eX@-U1M6G8sPU=^HpLHXWyMn{w&+S$&EQpF4ZBT-^PfMWh+^9t!O83WVlbd*`G z7mjh?(?RSVwg>nAa5NmKr67tL*$UfdqSy{|jxdeeKXII+dly38TY^-142V# z4RmkZ8siF$zIiKY3XT}XO3X`-&GbJn6RmOs%5zC0q)QJDUB=xv=ESh5bk+&vmST2! zp2&#hvwC1f`4>!ef5oy%$hMD8mz@`3`H-qjY_k+M18gVm@EY<2`W>UF+0RJ+f*lgG2gNs>$ z-9auW&HG;ip2$O`=VQZUktBWSy1b7~r>!z8_dt}@{0*7+F~iN)0cZcP6t$vK~m2}27%i+bQ{9;kpS4vC7_Pt^I=eXhV!$>>E%|#)W zH1InEtrtjwcmhr;%`jEO_vq4Rl>wcRF+`-@qqs(rQWRdW|H}oNUt3eN@oD^-hUfqN zdc@rKRz17v{THXd*ZOSF>wo*pC!tTDeSQ7s?`6LCmrKV?MDeDtbheg?(~LtF-hBG; zhhFQi0t>Oc{g$*=RFTa%OAn%iNY)q7jQpRmV7FMKwehaEr3*a@ka9F?BY@IGtJ%a% zW+M`K0^oj=Koq2tuKZW&F6fl`df>?Mb${wt z`3{(+?ERUd2j@i=+B`=96-o*9B6^}OlnsS@1!H^AM7rRYZxa zSOaaf$J-Pr^=3A!xI#M4x=nS7y;)1_@OH-SSGY$0(6A9n;hrl55@l<}`p9oY-CED~ zi(Cx+yH15jGSyL3D39I~ZdzHh$VA|cR(UMRgl2JwaH27FznsSc%?uf6n*q>#zsh7iMlG;Wy~35$4Tkdi z;4K49tDF{gxST}jdz>FfVVsFy9Q4cRb(-o z=494l7N4d+hBg8>RHL`?dRYL~5kqhK z`+qSouxEWgVnJKwT(|-kb8#?9d$p4kGYnA7>Sy&52Z-W542t)r1I`&na&{x{17fa> z(-Si=B5pKP|0B>^TGrf?Y=4Nz=bY2|6F)^BM8I3#xb3D!I%ROWA_114=sq%TmN5lr zUmFL%=Xesrv)kX4R??-LeE1N z(ZxmZD3EV#N=#8F?o+Yt*UaZ3%Fm`yfZ!u~1W#rJW^zKXkx0PGHrjO4dTwplpZVd? zeDVwd?4&Qi6LttIn8uq%q_5v%X835a2vTM)zTF94fg z@-t1u!+Ix|^IHaB01a38K7%xfpP-Aj&Zp*cA#A~caN&;udX{vWTWjy|8cGKeYnX~~ zD`$C_2AGW1y$YN7_5Jx;lFafuxSEE4@0SEsKlBi zo{-&p6QiYF{mX%#3vcI<#X?;{NeO4~gr5@IAs5pT>a~LJ5m{K>4GidYsTk*^3!p>GWsLcp zT&cW&7HJT^g|G)FJ%#}bnCiF5`8KyZaT&{z=7-|{!0m8Fc$_PAZa6iJJyiSv|u7tN{mKY(i49cuCwUeD6xRU|q@grTW7 zetkHcn;V`4r-us7Dh_?wN2L+T&02=MR)2XR>ZuL&eqcZT`}O$UVxT}J)`O6Nb*ZOS zfPwpvoSb?sZ2xpFuFGzT#5|&!jl%drzb=%P==jkjb#-<&l7Cjb00geYJObvOnjb-r zYFB%lRpId`M`o2t77TbQ5wpTpc%iH;xg9!Uz^CzsYT-VxP8z+ zd@komT)+WYIu78!G%T;`)kUf4xBhEh$nci|ZM0sIFLHE!R1~Q;<%Fonxu9jxJcUwW zE}Ll*RJw2kqTjcAh3hkN2a$R0p<}bIfK`Oron`~|DQw{A+ic-}#BF%RD2Oa1L4bX0 zS@tzdyYfAHt)wOuI(@qVUEgLO1KuZb%0uwwa^uJcoXqaE@Na>>Me@y($@5@+EtOD0 z=d)?o8upBg#2I)~c@jOoJ7aj_PYtI~n#a^0&^V|0z#w3d3Gc?;D80O$5G09n5B*+P zw5-x2ug&H8kDd{|zJ3~=759f(@!RkH>*c@SeD=fl6fZwTXT@ji+Ud6Q<@(NvikROA z?4R|;5(Yk32@)H%1ejg@Y%OXUMlz!W%t27>m&z@qjA1~{VWnP+C7;&dfS){=%(DqK ze_(__nuL*3FbT^PZ%EU$r7a?{5ixOCslUrgG{ip1XyRzCCE7AtwgO}P zmy8oCig6=$w^V&VRiV+wUdM7A*{HmUpsyytVepXm@)%9sr)WGGaC{;Y(`sU>Xg? z80%^(m+~ObGBu_iCZEXAVo*gd)FF%ac##?o3OZRsZU0oPO?Q%{3F;X$EW82E(3djN zgD_n+NQ;@ia8f~PO2ot3J>G>ZAKI7Ako(2*FY11psP%#eQnF+=$gTES9W z8l0lF-Z+?|Fvd+d;-fy4{xs^&@xulv?u&05K@zj}Vu<2}1}KIwV~LnQmnR=TsUzah z(QveLZ2aL+unOVVL)mN(+)~i1wd_V8UZ1vvxDU0c2!l-aMMa*7-n0R23#lHetzH*K zt6jsO)MN^-s6+=e5G&lLTR5rI|$fM-wz}u6b0KcxgHa$jaB1nDHp}F z0E$0Cb3=*_s1xm?45h9SA-%l^*VO_Tvz~P%hQ_o#Q?cJGm_JY^MWW5P^YnuFKuD)* zyUT!h(|HE|epN++j05QvXZ%!yh!anUh6T+imk`!^is1DbF z@Tit9gwTkb_4LcdL3 z3TSaEncQ;(Ai|H{Lu!(DnCiEy|nfDF^;S>r;uF=p!z9f<6f7zU80n2h;SSt1(JCd%lN7ah?^=Iv=_u_i`6 z^NIPv0c`0h5mg_1lt}dzXR`V_7577{C&m)rgdguY8e#xt_DXDibJrO$eSdw(rpCJs zvnKYU6&xvC9suE@&h_ymwdte}ctSx>?ps8DYLspO2U2m93Z?*WE$L%si_UJhp{1Ia z=ZgZgbxp9!OuvqmQ;mpNT`p+XK(Z_19SE3u3EhDviPCof_oUbk{0;fj*0lUM(%}Ov z4(1a4kHBOxb2Rxp(2(VXJ`z;_%-PF;U6_p`9#@rI02GSl0wquCqFF~AV2#~$(<)&t zYbLFabd9t^oTnZ*PeFUQENviD{abx_;bJ{8k1b7`hh(sP9uyjhD`peP+Ujwb9_=S7 zcJq$^CQn-<*S)JQ88M}^Y!_@jwv^p9F~nN7Ojm!GE1HRVBPVty^vqLy%iAR)M|URI z)d}Ko{lRMc^i0)+?%)CCjR@q*ry-CJjJoK7%u9iV8#?=$=J3DrrsenHZ~$EuqMzlu zk{Um<6Zjn6u2SMo8fe;*Vhh21)XF=o@~`wT05@-Bk=B9hS#9JX9nWf6E$Ik|)`H(b ziq;gRmTAu8;yL9D_83iFD}lcEhZfUJ8#{NZFV~l2hRU zI8B>3YW>;-Id4?C1XP-+$M6+Go$rd8^QS%E_tkPs3l`lK(m}?WI>= z=PiqVoh+=`7a^&g_CYppXGuzvNMWHsDRP-eZH&g2-8PffGt^$T8JIkX{#NRSs?Igm zhL)Siq)gO9bBfbj+@@ovRE&g<$Wu82X)-EfmoX(uOY5hhgsw-VbxUdRDr^qVkL-Y3 zyxzIudU+M+3Iuhy3Z`x7PhWr>aaX?M2R^<2Ta(;i?cG8lF~il|`w!vhN`9zsGYbC;z|@;fh*Az23?wsb{Np#u$5B2 z!c<0tE+I+eqc&KDH@7P%;&Fexo@=z~n!hBD`Rrsh4-m)+i zQ*46?oKPxN7wjp%7k8_e+>}VPnsP$L+GdD@HRT0N25Mt8eb7v6Ch9kQ;FU7lwJ`H+ zOarn3sT2b9y-)x=@$AkL9qrOkb|)rQ>3l`yoOBKnx}N|Ep5efVD%Y2ig8?j-J2>Yq zegEO2i&l@0bPgoB79nm3$Gx%{D8mDT8Uw6N9M)sa-Y<=4*J|j`VGinWAll_kn0n_q zI8mVjKv~_|iGp_vTIj4@GBA*#%fp(&ib2#1oZyY&z^_`in@LldfE5e_Mw1h)P_{Rr zB@lC*Nz@MfD(c>OTojzD+z5eAM29f(hVX#JPNV^g+f5YxPDVlXT zgxZ4`-Y$OiOQOX5qpMxCn$a;%#DOaDuG<64Jm{52f*pR~M zCa#TD{{XYfX+~`Q!OP^JBUlQ=8&EN!1oly5&&z2 zN<5*5g5{+EipK)F-4sO32R}vXL%jxCk>k$*Ml7InAfR>bI_{b=n}K~oK)(%#F=IEy ziJ47dRjqc$`9b&Cf;|_Q-a-eP9|W}jNjJ)fsi*iu)}{VO05-916un?E+Sqva&;8V= z^Wa2%lBwGl`UBiL6&h~9IeK>w(&;G07m$1s->@MLk%P%vkD*cx>t6%&zplI0>`78b zd|T*OJ?@!FjTk&LLXvIe89FA^$zQ}1aM%U7#==WUOtD7x*Wwz^?d^U)m`a-&x(2QY zJxiSdwe^UrirIbzw9GyJCu}j*ZHofysQ^(ZYBU>XOn>|h?cOo?cq5|PT~C|!x2$yO zS1m99=@2dZMZ13(-V4AF3WOYeOuo4>jYYMAj#O;i>sr*UGUDI?F(l*%?Sy?y8*}8y zVOTxG-V{0Vbh2}iUPrn`B1g}Px!a(*E`)fX&niR|t0oRZ9jU8Fm=%9drH=_?f!YY$ ziF8{F7MBkf#_zhB^sK0aqa}sxR0Y^a>$GI6`KT?jYYMWWTScpN zizm3`8&g*-0glYF?Ja2sbMBCCoz{`RkigUr#%h7wJyKR6ie?^G zD2Mx?M5L1zQ4-S5RD1FYPLK!cxdKV|MX&(gUur}TSSa_q>5t|OUoww#RD0E4b0IunuHfh`%=;5blhDCW_abThROHZ zd-6;Ky9M^T%laY~(6K8__bLD>5|Qf>@9M`S^Pru2pOxXMkM2TUk~(j;XLmGg!9xI7oEefg$MO@=~DjeTlwM|7`T>gB72cjz3LV4RoH^> z=$j0nSIas@A0p9e&N)%ek=iqwE@WdVa$FoIhGyg$ctojZww4B-+JNCz-zReQ_FVXXlh7dw8Ds%lRfdl$nz zb7|51?*qt%ufPR$t8%zo5{fq_TbR2NfT4=POd*zIVk7C$RBez z$j5{vQM3uQX_Lv|;~nu9Gux}$w1e8n7@oAOW%ch&cT?V;5hME8u-7= z4fJJn{)rk(Mw5=%H7FeqTrvLa7o%Ym7nsV!bU_XVUS=68GyFrerQ%k9$ck9Kyc z;H@(?I-y=k8p+31cS^w^wn0jEMZKB|t7!yQB$?bJQ2tHd1s7&<0m=86YeP=M*PM{W zDK;C1AtUCjI9<7p*Qb9Pukt0Hd^}l)vdHyC$CskbQ603SF&D$;*&wYlQd?WdaHTma z+e^&PgGE;7ZidaD&^E7+0W06n!TnOktZ0-~yCGv(_%l8GAxD%2% z+w_b^2l0px++c~p5C!#-exz8d8({>c3j!6b4rVQhW0qPkftqtsyBGB`cf@OTFKUh>aWkBt zAVA1TOo}%fnSpDtRf9j{c z3zxxLNmo(0GOCVqiFn+06;rhbZ4^ESjY^e?8{i_$_To~dJ{h8(nnfj!|0V>VUkqRJ zMa%^8{{kBq8Ytdjn8MWMrZXa)ff3PlZ>M3o6=LcbI|C;t@$FpPi8)Tl;J}S-f8=L? z1ILM%F@El55Wb=wCs?)%uB|{^AR1=VEN*PFl5a`pahzP41Vs}$xDoNeaxejq$<$jD zJ=x$A%HA}ckqG7WoHWZeb6b4$GU5VPK1;8`)lim=J-AorjCj)+vz+>*xgyN>AjDXG z7rPt80uBE2fR#2z1V~-6m`01#rY|n zR??w69f0kFVf6>%6)~9iKDYo@!+?qzt}zkprtEb^3}gQUeWm$5g(*ZN9athZegHPU zVVE53)vCqSaLYj(TJlr+T_}B;u?gM}@!#{kl9UTUyyo)@HqBbw?0Bk!oU3?#(+7&k zr@i0!+nZA}pXEPWxCs0Y*-L->fdADe(s%#qKfKy=*#G+2$d=*uyhT^%UK*}6bQE4i zz!5A{4Qt;!JjJ|=quZ2M*Qmsrh*6++R^-yJY2+j3nEazaRDt>K&txuuKX(Jt;6nD? zm0Bf-_02#?oMv8-LwrL3TS0ru#Kbgf3~IsLs1wSQOleREyofoJ z(p}7;=uL3%Z@ddw@a9F)Dl_y4lChhW&;&j2d$JE7of5+rQ?j+s1n_NoY^B;G>6RpE z@GR}0`l&ZVCal~BJBZ0(IxqniWUo8L8eShjUA~(}58=TI)H|H8N>j)p1+66I1fM{l zmmqn4{~Gp+D@AXdYh>Bji(s)flR3y|>m*(<^H%s5p7x~_#{Sv#q-;1HPpzB8u)?im zajpm+mqsgal6b*9ap7E^0lwHXzOtAOd1_rB)4ofjdp}}PFcxI`~M(2V*&wC>9D%`w)f4`ZPDSDv2-ZKOS6S_yP`B%%T#%9nHufd&6%Z(8g ztW7w;uD>9eeg9y2g~o`DNcf(8aF6*V+A!f$Q=X`4F$-v#yPM#%Xh~M^@;GOnkZLoF z*L|n2uoL(5nRpuGyXA_E;QXNSpBx55H!pVMMvq39r_vBzKtLlNo8-lg`~uyRql*?_Rzf@ciTh}%&7(7*Y{ZxGt+B8rw#D24#fLPvGxn} zP&)Iqhj0PZV9l}aFx1FyKxNuji7d5`$Q?tgapDita>VVyM)CxGT?M>wRaXxR=FCJkS0fF3pPDhmRmaQ6HwB>kARtJ{&NomZR_R+g+$ics{K$EdSiDVrQ z-tY-jEWM{4MRg1;f2H$TAzQ0cU{c7QOhBBgMcnYKgccMBQ zwF4SoyzYG9C|IhYSgM))If<8Yk4em=)6W_slO^U<4+W7p)|2dT*MUG+93q(kN5`w~$TyzpNq z6kjh*mm5Q`1|)6{-i*j&5=*#;D)~N~(mf2g7Vuc&5f)zUr#kVP>YhO@6QeVw#1e`W zNk=*R(9vu1BzFieZPKmp$0+#jBaGuJH^Ecq?x?5pu}TS8T5M9WO6tKv*n}gsBnj$_ zz?7Cw+By#r)gI_QT&H{Zj)c#k<}hoJil?$00P3R-@GUNnC)T=>T9_G@)I=Nsf~8jL zN8jYU?53VYBkYbAVTgAPWBjxrXhkV^-jez-uk<#-#|I}4vmDlbSOd@V>V}YmBVGy& zh5#cPNqq!Bn5zz9y5b7SJhglWk3ksOXp4F!Kc@Z-rW@4O<7c&EG-lX_m2>`=!z>f* zFv%IR(E@}@>8K`Z4&zkGb2eHX4UcrOP45e{v}2l{4OQH_)ksbAJ%Zu19|;q6>2>H= z%4Q;4E0_IeWDCX~6cs!LHCC^{9xu;E(+!wo9&nvl@+X!8J%k~*=%gsW8H8cCigL9* zWFa5P$Ap)l@z-3BF))4&o~F&dtDkc)Yw;V3rYSgpszJWL19KF>G59Lrvxd50m6mc^ zv8y2CA%ESYz0ebYtCP0O89t`Ehqk|FDGjK@@%gkmG(rbgJ&ZQ^X^OX` zetLd{)n&R|#Pbz>DkCQ6ss0c?Mvi*Y$Nvgk1Ctv*%;UMVI@BFhmGJv4>}+Wp&4(4a zh$Z8ETd1QG19{q9(l+_H{vK)dTzTxUjW$w(+7q>aKvD>o*71{q+%D$zSA#f-?{VK& z+Ph=6o_Y}jJC70+ZOunf_bb%@gc4N!xeq57l)Rqv7@*0e0Ls!rV?(cT>XWeWVwj4M z1Vx-s<}lCOa)TxCQy>YDFuW0_gta10Vi_S+>iOjf zP~1(UI4BxYBz;)LAV%79t6H4Kff(wWHCSaBjf0(@M0J6P-oAl4u3vWx-^kpFxRzo- zzXdeL5Isb5Uk#9m{y+GTy&yi)#Yv*Q&g=~>li$MEd=|k++C;HL^7{U}h!k1)0{s5x zIRWHGszZ;on&B+vP*DJb11d|9Xp5+UcK-lf&}BenS|CpzRvu=BA~o5Pt9?xpL`e_c z06aYS@v~?HpdC@=RKUZmR2)C7e;JlP+zX-X_2f`42^tL_QaP<{zL?)P(rK;P_x&5z zijSV&?^F2JXK`yoHvIekwQZ;W_Kk7g;JT26U%x83c;z3b-CP@*R2yU$%}RPc&A5Iv z;@6wM{QRN#+??}YnHZg|SVCr;U-H&R+tqb0xzvcjAsv}6}L>mBECBjE_Se+ ziurF1ICugN(tc&cxvT{NZC2pFDRj4XU5hf6zo1Uk$ToVSes!hR$i9HaST`pi@vmSYRprcn=ef_S@XUaNa;>56 zq}EWGW{8-pZG+ad)3oXK;vG(6I$_FRbobj!6IPhy#}M%efcV*Jb3W6hVtF>4qjOeQ+^Gx1kk*SXt8dvi{t*C0 zGid%8a`QAK4t+Tg8lDLmkZwE=*F-TvO4*M?g0{Vd9?xTiKevWm^ucYd#fXz%PEWqo zz>g(%(Dy)(=T>w?IiUre_W}(87WjbHR@VYs^+L5(bJ|u{etPYq{FrtSVboPTL2E>1 zUk_2c7xc`a3CPBLD{i}dInwoN*z3|_fNDj?s)nIo@toQ@v(172v;QdI;DOLm+DmxR zmLz$#Fg>vD!fs5l@?-Ham-^CXJ=2}bDzPz(52oe`?0L4?hQ{m_h+{6GMMuGPfLVHlxJ{{A6M6JaZkIFih#fvl8RW^*lA zgQr{{x=c7`d7Q|7@Gdp{g_Yym){jFZ|8h((T=-wzO}Ac@8wd1UJ4E}b0C6bzYDR-f zc8Hf zNsq(+@-zI!swS%|AH{0z*r)&?r@*~`4EKvFbW8~TrE%~#Jb_R-Z0U3DpZHBWeX+r( z*S;?c5hU)gxVj;!_tM_3U%tuhoA5q2vhz5!#urFM={+r>_*%`xv8%>7f{XVnFZk0@VYwW#`sI7cx1^JseqL6*5B zFW}(!J&f4r3(ob%5ZOYdDdBrqX&ZH5^UvYt@m^FZ9zQVWj;HysL61hKdaVVOE2Rgh zv9oyEF|Uh}j@im~@8dZSEQxm8D$Z8h!vGC`9yri4({Yq(x$G=C_)-PQZo9rOX6ttaC zE)6)?k=bUjS7^Rj7D6S4QsHj>odWx$up8$GZg@W!>X|2~+;i}^FUxHo_rc~H4QBVK zUG1FGt58~PmSqYm7fR1+6^Z>nXlW(adwF}|GyL5992=Gp*N1*1+|5Tz@Q%aE2jy$b zuk_*ZQB<>e{GB;>0t5-%eib)E#76@c11DE)Dixf0=EVF((kepb-v7YrN`af|aS_x? zD+A;0_ns55yPo;nFYp6+j+S`T{3__>O^(BIzHn? zfY&{x@nb%fACMDpaC%s46cHxe{1j&1>`Ue8J~fyQ0%+gOf2HSrN@gGR40dQAYs(TM zrh85R3>oMZUHNgsYN{qf36RyUoPTuS5?-HX<9 zRHkA>h$cRClAtj{)dDQLD0h$aqz3ijP@1z0u&*1X5sZ!F9$8u6-Su+mcO%-HVheg*WbMoB403rp zL&P_R5(J6Mr0$fZ(CfQ}@$OX0F{MrGL_>++GP}nmJp9SLt6+5SzFx5#lNo`2BNqyIQ=5~fL$B~SFc z&h4kHwYB}1p(8*OC{ro>9g#14UU@|@R)w1cYbr|WGZ#Eg$`uAf<%tP*a+P@x-r`*3 zR7(FF#m!ca$RU5HS(yLbVmT3+9IMkNlA_k?!d^Q;rGxZ9&~QX!TZYmEAN7|tmyF-J zu#ek`!Z}3q`@Rc-DNCiHgt1NOXSvGbct^Ifv$efpXusj#<^DF)7O7a6XI`Gm2J5kc z-KH%!FzyhF&Y5*U^%8WCu&ULOZ@xx)IfTV~rZT)0Mj^zc6vb(AI}OuCO?1 zo6OUE^oaK=m!acQ;-`V-1ei;oP><4H!%61+_@{Qmbc=f3s*a%&nkvC(n3db=5<2`l zw6!u%_2l)gm93$yFRb$kfCX<&hJgXHj``j z{JO>=X=n;AolaFQk;VuFD_2bfQevu7+*^9l=kco=@qeS=JcZ3qD%dTy)@C6N5G7QP z)+26-Ng!6#GWyBFllJPRu59`}?t@lGaj%Ez=&`uYPg0xVLRE$Obqu-eoX+*xVEOY) z$4}yui=;gB^03I4*ER2?OzKY`6E$22c-)E}Iu6q#l0}hcdauE753HxfA*&Sv?+iwW z7Q!e5{I_dNb|D=2n8@H@9k?Wmt`9}EPOP`6svrHj#o^pRv(YAexOlud)G5W#!6cf6 z7VOd#;eb*S1Z~S~KX3f)9Ec68a(b8khmZRw^Kr3fdbth|d>cLP!jC|h4W>;OW@iF% zm35pgu2rwwm5?NpQHig^`Pdoxa_;@(c#4Cxpk(}$lC+1`%II`&vuV5s{?D|8GW95ucXm5pIc}3n|?K+Q5i}n9gD}5K={`OM!TXcMWEbz;~q)46j zl9-(Bb)hP4q>BYBJ5w*KZ{i*4%JI-rS*+od;e^a`cLI+pHH*L2V|?g~aMwsbnO&>n z_Snb0d@Wf*d*ah4oH;22J1Xl0GhY$kRehv&#L)Q~<{OPS%W_Jp7E9*|5^sRsPMe$C z3Y8~9Yl01XGxwC$UL3E+hfPPXv^dOnX*P?Gr~Gzlel7`lyxYiMVX_*9D3?v$<+nvVtuqE>D_uG~Q+m-q6n8JLS=Bt$b(0s@>N+|OQ|`buXx(cU=Z zcX4_BPJKm}{iw~F8+$b^ZY^8ClV}5V0 zpz=-W?4MMhJmuliFO;b+$}=7>Hcy{}EI#wXqHp*l(k{~dL^FO6k zcbGn#t$wrBw_(VevN0d6l-jC4PFhFtN|RJQ27dEUNr~n9qDyCJ|JEEZIYL z?Xfdd=FNQ1ubbG!^h1Jh`zpIDWuc59d?;ni_qZ{11rK+QOvoy&?Mhfn2}3nJ;K&W| zw$4RXTvBR2dLQ>VE`KWh{sX+gxnKAn9r;~4$Lzf!hf4g0<1(SpVv4mQ{(8;0Ct)gf zuJYmRvSQ=K@mGlCg;JZJ!ai9Y9ZH$F_nXKZlOOt~)j(x9eW~=OuH}8QI%bu$zLb{k zkN&AYrbTmp*&sf{#Cs~X`3AEGq0t8S_S-Z>HQ*L&V6QZ{a8>EP;_-akNub;XaP-{h zQQWCxs1EM9>3_>SWkKen;e@Zfcv}A9AiTU&;TrguPvIY-Q_E#<0l%FX@fU2%8W5o4 znZ(deW^;SVE+^oP9L;Is6>!zNM^kKGuairEIEa45)AI{0og+PD;n@rNCvS>}|61Qy zac!W0XR3UL;5}<|Y5li8pY-nBbp39VWPbVDcQ?E{M||qgRExSbL8&pZhrY4ixo5-M zlGk@WE591?(%Tu>!e#&Z+w*UHwlDV1PhEevmOXnrf2ypi`}k8+`^Ha&d|LPqT<$~m zJs9u$ZDnUva_8`9)BWV3`}z5zzPkflyYyd6Iyg#G1#JNp(^lNvN(^~6*5!8net*v6 zCgYX!a3^^8@ddWkw|=gMo7t~4%GU{ch{!l*r&e)vRhIH=l_Py0qp_&#U8+jI*>AIn z>@+K1C3VUU`@}6e6R#mj%Y4ys1E}~9Y-+5>;}fW;954S@9BiZsqOQN+fAJ5W;;%U? zIwEQaLN4xo{3wLSTqxFv11ao z5gTWkw_J$zeFgJBNj6@?oALM&cHdp{0@-*%P-!hy-Jdn5e}GVJB-3Mu2OA7x=iOPN zRZFFdDf@(qX`kA^A?@>Qyd&16WIh7=v;4>tUn;+zH+S~AFJxxrNt7&0QZRZN_uDd0 z=+R$}3*90ELlfVUeyN)1-Z=RR^N+mb_Zt8YewI!)s#NXt)eK+5`-V)V?M!tqf8L&D z(gCsN9^5fMD-xX`HVb;_3apU=QP(F#a$v<%N88c`V{VkCS-GS1Msc&Ha^(FIp-ca$ zYC?AYeGHoemIN=q(^}?3ogl7V{mpGr*a_vi;wih&rF6&(gopgyNx6+wOnI-APraOd zT$xV}ey5tqHMEeXj@E&^aQFUyfXRv-#!d1?Cihg0kFX;DJ)6L^CI(THX43Iy-@YTt zi!l><*Vaeo6z|#S0A|93O0<`n6jT{^sVwuOjOc%~?3)TrNVsSSkDuJ~0#?{EGj_Nd z)|Cr3kQ%B-d-ktvO0)kI{^(=p7N#A$$az!3cypUn#jDg0x*{;IhaROJ4llRZA+zVZ02;j$4v3-d{aK&bpP3% zn;I`um5ZeD4ND96kM$A84RT?I0Xh4RZ))s?7Q^!>mCWkr5f;5F8`so7OabQQL6TJ8 z`u@YkzbWw9X=~+g`?>a?$7?c`s|m+nH8yRGn=VD8~bqW0J2f6GPF%H)!ut9P4=JI6Wq4@4ekW zs~nf<2V3^c3{3VRuQ~cD$s}`+bZg!XYAgS zZXSQK_~0L{8n~hbP>wWE_V&`b7uL*E4G`@|l}m|avAE`KZ4$ZdV8yNE=g4Ansirm< z;}fZZo^I7@SQBL~62+Qtbt?*BTiWe7PKpaM?tf zjs{XPzhc|kn6cg1wT*_+5x=l;*|G?)H=jKse@%g4NY9dEMp{);O- zNe4S=?ioA(_r`pvpx9xrGX~YHEBBBwlX#y?r1<`gay&R zh%go^54L=5m2yHU0(zwXq)K&*Nq;KV{_;ZoEzibmyw4~_Hq{4Ke}@<$%kik)_kEtd}baNc2@MjgsKFtYm4Uzs)b4}kyy4}*P_spQH&At8{XTKX z5vL>>0F9sNNg6qW=(^LbRPy(|>!_UQ;dI0GW&YkqPx6Rz50NcUo+pA!KCaVz1aq|_ z)x^DMMynm(#7i0ffJ_mjO~XpkUBns*tP1@c63a|H{x(zFSeONPvq8QthcV9u>x+26 zJa4}2cwL@wW)UD-vdT)@kYmSxVfcI8)3m%u?3wBXtorYwu8X*bdw&~lH1FD!6-|C- zqa~_|{^(~jPl#Oq6k95h+3g>fQn&B040h92pYtQtlv5J-Z0+Z*S}gs zIL|rH^BK<>xh#sZre6mx$~oN$mgR1fFFpv*$ho?64SJL;Lo4Q>rE%IUR1=jej`!q} z+Sps_#&+t_<(b+%m;Jkl-A0iycyuZG78F74Mg+N+Lq2hr&fpJafjA=@g8w6UeHrAH zo1?&rRII~RrYL!aul@ZqCY`Yg_y+Gki}qq6Enzc^k5sWripc8Z|HJ0FI^$_u@ETW@ z1kHB~sd)PLy0;I|dZU4M^8G{7I@+2}@1hF;IWsO31um;gMYynA22w z2Yr;Ccd@N$DI)la+`Aj_g9!3N-g9kP*>3A8ZQnsWsYTUi0=3L#zJ`%o2+s(0E6jF5 zN!?{GK#dx-gk!1GV4Eg?rW|=3HhodhzRAY30l zvv0XTHv9}tWKKTM=;d&G;q7|%EWB{FWG}Jx)>1@V7rMh5Y5Ojm%PQF})Skcp7@BBk zwFx&N$tTV_fHhu|if;0KiJn7Z|6Ocl(uyhOjUv(DW>8?IkO}ZweZk*88}XX-xQWAU zD<*}GMC%_NyS6Q{wU<<6ldJ!)@>=9sHT*RZ&x+hf%s9qRXq53w%_LPh3Jk|ADKOYZ&ANC1_S{~%yAi~XPpaYBen5DJ)a*{5m9hdS$5B>ZZr@fRU)2;L; z=9oZ+ORpOZq@mX{0*@F*U_?DG-2=JkfBuN;b4VR@K!ygnsCsT$Jptm#J59b8?@wc- zu%O!`aEJ0`rYC|NZ~FuD$l2RLNfd?Bp8&2PfTlFIF;LG(plE}41^Kx~C0!6q#6pF# z=J~su=frO#ve1f?@*nWwVJI8x+;BTni6dWceMn;CLe2wUqml^gqbG2DmXoTo`Q7^i z;`gAC6P+hPMS!RO;4c-+CD#EAn!kFC<|oDdfAJu3IphpdA;s(y#RFiGjQH zG#*~X$W^w-Sn90;?Ox1Q3lDLp~%mZM<78UVtf{~bDNCMoc%o&H%Tnx7oUX?Lfs6GZI$scG_k zc)$Mt1hfuF;GeO@wz4Tt9*nxwH~$`&Syzp=Rs;*D6=kPk zEn9JJ`Xtb9Fk0!Px>Y+{aANo_DctdYDB+^x}i^uXr<;X)j9y&k-2WG%5fOkKq=Gv{O;1$6ry ziDA4j2tH-BBTQY6j&7%KU(e^7O460~*8kHaNXZsCB+B!EhEE88f_i#NpX1>#;BxzJ zt{M&?T3tdO2I~s?hjtSFSxXvBM{OmBwX?q_c5n#`_tX7LCl1m4YuwIKk^^K2Drv-8 zHsaj>gJgL-aoi14y+&uH1wQ>-W+HLSQA7f?X4d19$H?d$S()_%EyTEJ81H{Zxz2~O z8n=*6`o_BH3&28M$_p^Pvw({CknRPctNokD&jQZ{0`D<|5e2zmKGA&asxIL0Isbf_xcjUbc;ru zd2oW49McN7-yBi4tk%~GCP|VQ+CxOSTt~cGd<_SlDo4byt|D+;jfJ=nQNWaVd9X@~ zMGkB9Z@wqVt#CKGyK`>a_jVUVt(KD+=wnimiyAnqw$`o?pE&45WQB8SgBg%OzW)QA zm8|4!9d5u`Dly`=(I1u4`VOJ!*fvX`j98+yxcOSbBIq| zzFqW-ra{z-C0U@I9FW=(rl#)vfttAci>H(H6!v z7!$%PcC*R7Yb3WU%058YAL#IHTelY=;x9;22AeF*$E}*TT$Dv~;Is91?$UKu<$`Le z^KgWbVO{4)pCq{_NWx!VJx3j6GEc}C0TvK5gEoXH!)6FBmgR^HEc9=H+3MpTGM3y1 zvtbb)O&p6*S4|cfbGPDUMv`~{UlyGPTy;K8eqge!|JuZbCr#zq#|NZ_{%Tm?AI0s#62C=2qsTksDhZepUna6p;sg0JL9SC7Tiu>DH~h4(j1B z$TR@K`@v+~f8U3;Hp((4BM{pi?{CL^R>QtVzEPwzw}J*R&T4n*5i}~xrh%}QWEc+I zLSs(BzDkqKcVXTXcwZEkZsps4CDDdwBSb{=uCM;g>mGtoH1^{I^l=>uwu%mmVj)%|W!=N6jVe!oi%$gnB%aRA$I8VAbHC1)i*7HOgceG~PA*gol47 zY3bCRTiK5tHj#*k(mc^*_ zHK8?0f!qG+WetqL&L53D4R<`sC8avowRoEgmrKr(P1HxuoUfZ(_=GQi#W=;olv6x5 z*2qvf0(A;_`R-FFlB`7l9od!+r{wy0cr^r)RX+~ecPZ%LD^J4~#B`tpql1VT5PIrg zj;sOJWaR_m4&=*8bT@#c>kZSe%OvSV+j{Zb&rkl-9UQ2X1Wzf06nN z`F;=&#|abpyAiEKphN>c9shZId#o;~(a6fM8GegT$(P{a8583jQtbL3EP2;usB_hf z&b=Tjvyt4O8?tSufbGv3v;9qpJ4OLf2;AcU8|G#yM>vE-vJ#nFtu`F!A)Cx#ayXNU zqi98%oamg(*>-4+An(Us_V-*8p<}Q)v0Sg2#}cN>zS{QgI? zf`57h23!?+T9jxb>_8jBdn-N&Gt>2ZZm*N-D1Fzj?H2&ucCzR&ICwjVB{lHHjD+f^ zod|EHN{ITV#vyYbY4c07$Os7L##c$9sieXwqyntpQ*SeU@%wDjz(w`AQ@8C@vz5d@ zhnx)KMOOvs6o@>_@3*VE`P)XHg|BItSpG3s%n}v zW*~x7ajrT@z%R;?Z;6~tz*GHVwBAE%1sDGKB~p1(ehX9D%cdBo)}SSU)<^p{;;jkt z(*U)E#i*npbIGL8fIvWX_}u{ET^oD&dhEecs`(O_oP`eDB89DxOvDkMcor_b%OBcB z^kt48R|Q<&--cH3|1U6g~-3}OC6O7KL(HGZYq65bH_c7y~60wKt5Tl6? z&B5NnCm`!Xk;j!W)G`wJ*n{GmzqenW_s~{4cp0$*=c>0YL69S z)oFoRb@!ce6zP+(#_Mrt$f0~Ej+L#E#EouJiI0|8N{;0ys60Z7a!6q~(M8yD$DeiO zJ>P`KJF8k?Z%*($4+ZM7B!m93b-B&|Tv?mqp#=m%RE~mbwMkworDznPmqOoQF8@Q* zg9FxOY;z~!$wQEgCmzXwcw#~Ri29bOr#{~1Px5`8UPXEM)8LN;NkBN=0o8Utl(5}v zJ%#Prfktk{)66HeV+5z&rMEGkRWhwyQKE;`j>*Ow%|?$?_EvCy=r;U)y1aBPJOxPR=EA1K_Re>0l{kdHm8M(u1x-5ZW?HSB_!<#h<{3 z_N-T>qq9;chc?VFT@LN5@!zeN$Sg*Ui?5|Lz2Srxe1Y)xbv>Qf=~#ljMXi`eO;D?Z z9d29$>Z9Ud2dApHqlNO&v#PU^yUK8^9LQkf(ijii!4?W_9GC8cQpX-hoo@jl^1}NR zVBB$t`8^Z&)4hWeGca!Oie78|f7q_GFjXy`oC2N)p?8UNqM}Ox>&utRu*H_+4?c=R zvdJj8e0^D7Z1!?Y*F&n-NSVJ+r&vbppaR)w-;bOXHpF zu}(+N(}t$#9}uS;QN>?!vQw9{6bxi59F~_0Y}2=*k!?WWKCtJ@g`Lw~x8ino5wCm*23%dkKT+0C0GoM_EmrlwCy3-;w5D$tfi@0eo)hWbC@aUGUw7`x%ON!{!or;u<$ zAGQ+T?*9oO2j3ea$FBu^z!n{F-U7_>H>h5APUk$`+6bgsT-#%JX&jmeRC&s?&$0A1 zlbG7HyPoI|KsVb6TBB#q0%qPSBfLvTq6(4!zQ+A#72X?{6m9bQw5#MQ}TIC z%^VrNMPBt?1pay{Nrv)E*GQ};JeF>pNWMRZj{YS4`J!5YR%m=r%AV)D;tZN#b_HFl zAXjG49rtJ#!VZh0pN$b;Ex9Jz>Npii_!jPuNKx~;50J_*wE`%=U7gAcSPS40;}ffi z(rmIC0$@V`4r=|nkyVUv8vCP|bP5L=YYE!})>G#9so*ZgB-94pO`jO51^IQ)%~Lv@ z$%Iozl1i$3Eok#ODfgMc$}pBVG(SzrdGfB8RA{UVry#fa-s`m~o4`u6r+bd;g$-9( zlBYDRu|KFHY|oE1aH+k!TgM=*^=t;!qJ23@7fHBN#vghF>6hp0ay1H&=)(L?B{1H> zDpJvnngA*Pz05-5Ho09B0MCxLgiSSlaSb)epbCgLEy9)1#>1N^0rUk)vJ4ylr$nfA z+L!6o;Boi@oeI>dYc%?GnViqQ z^(^}G-@-Y69p^nbd+EWn)6-%trY@ZMiT*b~{4--&p5MI&yS&q%T5E4}zW3kXX3YC- zvH8l>9}2!`UKk-V{n!(K_VU~3$?NL>`NY}xs%v@H2&=VkAU8v8(CV_&qpaV)MjHu^ zamA%RxPC8nCfhG|7`4HwE$E!s7-1%=(9WJmrx^|F5u(*y$kNrm6B5cxB=5E66Sdu7_ z4KE`95^2GuMc3@N&rpX)aE5{(ds~n8TL{PB7f8AY41vhz=!w2p=;#G9j>}LTxlf;S zf8@?`1XAMqoq!pDO)1;1dKgv;d$uA~!k3n7!xQr(b7 z2|fI#KhWc(bqjR`r*i(h%K2a|BCgXD6Jih6;+EP85gWTpBZzf`-~FWsGFpG$201GU zVhwaCr*k~gQ{-!9poTofGA!_A99WynN<_D3$!q!{O9IC zWH~zrQ)ZJrN_fyP)+~ZQw3kbnI6W=j^;cI{7C)f!$w?<^hzY`X56Gyqw=QyPDxS!+ z?p3o$g#<>CvkC9rp!!Xz%kda7k{E+~v@?JT2y{ZfEk5$rK%s!o`o!jUeISmot z(096eX)KaJw-6zHYP+tX(X28Lq?imym(7<*8M+(hY5AS9mI`E%63jU#VsWy(0}jLE z9J!b;_Y~Uj8cU*LUq4q)*M07QmRz=(!nO&@AyY(?Y*wZ_+(aTl$UU~7OODYw()RnH zGp^qSSBD*HfT^x2$3?}ijtiL2V|}ee??icphZL95y(7U#Ub6~0vHL%llzE<=hP0iH zGu+}X4dl|VF+^dmtda(rzq(%V{bFU{C-SlZL}S%pa*^ivVI{(I^^0}DREaWuad+tj z(&qt`v{Ncl<-fs98(AR#+9F+wN0AR4{wJ{th(oy|?eaS_h(nh&iM6eZ*EKgM7Q}w@3c4F+9PB;##g+l2 zTKSebZ6a>6w5xpg9rzt$cXF?ZL`MWxW3d>N24`loR3EwbC?EFpowMO#gsm{3p^^FR zL82v=r{WDuGQm=K<(Iutub(h{p49z=2*{;-Y20ia_+A3+}63Pb!axp%oFAEIoSCl|S! z0~p7u5tMLQhGNn+@uYv_LE-uL>f|WQ=)na4vh}o_nf^@DhmhyV#&5*mtB&HAmfB2N zEM7u11M9+=$<0mHZNl5j;F~F(1$bdS%z{|6%ELqt+99GG-`N|tQ5&!xuuPV^OJ6su zd-_vSfOB8`7?6hyd9V-WVQ&N&@S8n44O5WS`&UUUsE{nMk+Xm$22P^&aH@L?@$gXY zBo(yHU3!;adP$_sj;c2-DbuV&y@#}mDvr9_7YE}HXOG>cKzNbaWR>B7Ggrse36TXhJg}{dFqMDicLZ*si#p^~!x(x=O#vFH{|S^H7Pj z{rm2z({6Waly?U&l0qSjgyV8(Hxbk`&M2G+`_pnZcdDMa#zT66fd@9D3+aaO{EDNk~kRUb^JIwVfK;wG9a91ITv1TKv z#FtuuIdF8x-V9^ufM)MiR~Qc5hmdrP?+vC(Z^3mBX{c}#BqeObS;V0zu1@d{JttK; zo${8?%FO_I!*3Mg(n9QT`Q#PoL3=xuJZ<6U5;rbmvE7SS`t@wbLGsP9KDlEfUL}Ip zoXjd4TtbTIf9&z{IArO0Lhu)v!JV&C8Gg_ye5s4DS64iQm3-Y@x*YyqFsyo`fuFcK zrcMkS9K1_S-uoyd4OnWu^2BJuP0Kj2$i>4b1>X5}b0Ql)VJ@Mn_R z2{4?LW)spXYY%oG`Wlx#*5prvFt+eGz7C*B_jklF*`%Z&gz>YGbSkN`V;_MR>&+^E zW$GYMIavLk9rPh0-nj*!Pi}IntIAC_TWmbc1`sPITv-D`fTRgZg>KsqEol%|+x{JB zArJmIxdNUSUo&{N4}jLm(6vNwFT>HwE7;*um_uisaD6w`Yvp+9zqm-YoRKFeb&H)n z4F?Jtj7qv$w=-Afy9MCTn?UCYwDy)rRnivo!!&)rZb+8^yCe9iSV%4?i?)zv8_3yO z0@upv55GF1)NNZYTn2D>QYNje9SmtL zpU%76Kf)9MEafLTib^;}o{@n|$l3|9_ieuLD42z0hxH4?!dBH@ z@4-GS4#eu%q(cvp^FfObZqf}?s`#dTn*6D3+<)D3#J8r&+hzK}>z`odB8H81{km4w zn|RCyzjIn@Hc9CQm_u+EV&DbkzKZqc@tbWc8@fP&ByGTZAeVt}pMD%jiZu~{u}q!n z4I`r;3}7vDsaE9}AqQ?jl-}<(;zGrbpaxsgwyzkehecyMnzA{N_(XGD&K70RR>MwS%P@ zyyfo{1PwC6t{pGTkh^ndAmYzq6=c~=;hY$DC1MmnT6fAIlIny3<(HIaBht1!#bsr~ z8jdL`OYFZ|VKQ6VDaH;(A{ygK4g0o|skpw{MwA@doZ+bF| zW!1=}{oN*E>TQ_z<;Cac0=R!Vfx@=MUP+S&aH-ar?eBe9`l`wX=;xBY1<=5lwl+aE z_{F&eW|a=;z#)j5CYQ(#I856lr+MpB6_CmD`9s^NHONDI0VeEfKQ{S6{lzzFDdd#}N4EH84&S!iW(shI zRr7t7ahyH*uBsmmHWHe%0Dl93HE(gpnTA0tia|1*~S#H3^h>Dc$yz<4m?}? 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�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%0DlkmP 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
    _Jnpsi&i$=}de|Lm^X=2T4y= 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º(a^Jn?&B0z^LRIQ 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
    xsU{>=sr42ROfD(kxv5CJ8r@Sbb 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 FD5c4Ip=! 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

    IAu5Knr`oh;KIf6 z0)aY7i7xHXQHxc%1!FE@50i6>*S$0X3n%k##0$EUu0v4J?INtF#KT>rVzxRVji}El4ls`$^bL30;%>P*Ddj!1#(U;lD`QB_+ZfI`}94m zJO;SI_WM8b!1h_?lyZy_ce_&0LZ{t1B^6UGdd^NFd6FJF>4&3 zA?C;>9O6fnoUMn}kR3sQ1Js4>6-J7O(6HYtxtckUm)Ka%f&wPBa*vxPSK3vTwIa9{i|St2`D$pr;vJ+2^J@eSlG3*E3-8%P1;r{TA?7uzDbrs zxC;^XM%-3&f3tf@)|^l;{Cf-gW#kmXq9vR|QuI8XMSsF*gDyBzwiQ@YM%Th}dZL6&uz(W9)sdzHXK9ql;2(IH|j`<&Jd_8|j z9lzC10fp5JEV}RzGFv*XmbPOq*=Mt`8IeE9>lKCDGXb|@ZoOl5Ob%ssn~02D;%&%y z#r8DrD_onpWIC*(o zc9ap>Fc3&0VpU*PvLhWe7+ONsi!hFhs8MKbrV}`P{4)N1MK@Z^PPdG`;ufkNw! ze4_Pr34<6T)pta190lC&P`$ForWHoN;&R`7TB3mdLcHM#k=mpM} z!)TbvU@XT*LWOW=5sG|80|_`QxmIIUC`U5Y8S|M-H@#{74yiXj7HN{%y%y{5jM{Wp z{4MLkW@Hyj(%fFh;EGg)6LgL-vl@((PlS;cH2$hO>kgvsd?3QQ!A z5|zwBfVV+Z8w3-&2b3loxyo82SuK-2*3Op*E+OH_1NTmD0=EL~Tx3p-z`Ui%VM3~j z^KI1uswXi22D;>ap(cO|z+*nj`HIX(#Ng4VNZQtEvS+VypEJK8kCrU9hSFiu+xSK( zuM1eAaG%3@AtPSeb^Ic0T;!P{ub{WsBcjs1)*4PrgXr8qk>mE%`RrrD(&EiyrDLl**Fx>C!|rKe<3&GP{^!W>I zJ&rMZ-IRx!p%+qE!B-asF0Q>6tUUiTIhEMw#f?u!BpdZ0J7}&_=zds#ZO_LZ>@r2A zNLZZ3>{@k%mfLaSJ{+^1s3iu<0MbG74NPty!Gf zo{Jk*m!gT(Y=GiXq+U0Sq+aBBhV*4H*v^(E@+c(3nzXe276$V)~F|djnTICHj=3-z)D89sTnKxfC_$nV> z3@o~c09_3^)*FK6#Q^bHEymx*0D@lXL55=K0bhQnU_Rkkl&2BXQv*>C{3NiK@)SaP zD&SKO>Zm*+5PF&eoi-{@!A(!4QxA%=g8rmD4Q_h+UFrdTH%ETTlLw|J>8J9$5UFt#c>3-$O0@G6{)1&dj+9u*y(vw-pQ}$qnHT1Od25Df8^_D2J)VGac*6fQs zwytA#O+fd*^|*=y`6wDB+(e4oVjAM29Ho2|6g8#`7R2&VUnbuF!T+!%)YRGi<6MGq z^)GBrwiGp3S1{{tM~-%?Ih2%FCOH>5OG`@U1{F#^M&WG+N)@}M9_q0^X#LyA4v9!s zow_COWwe~^1RPvgveUmYvFr+hcBOOxBO*?8BWA`+ePEpVpHmh@j;eU=8LX-5sJxK_ z6|l^M>dH3naAS9cxOHT|9-PT$flCBAYwSugm1%g;4#EYw7=NrAL9D|XMUG|fp(_A! z;iHl+_6NKRHI)ivcy+GIchjIze~q&jV~BJzyK8{Se3bTmT6wKpHg7>!WaCgmVwtyi zFEbxhN+}U+0YKmhEU1{jF3J1G(Dycv;yN1yaD8c^wlo+m>DoVWQgr<;n8b_3`-cX+ z_EIK+{}ef=;^TFf$xPVz$u7wn9AP6F6$9%)fSD2hUt&2|7Q*gckPFFUuHm+z>sk3Q z;5g89{f|Ph9`VdPaVmKkt4)&8x^&UTN`1D6`vGutTn?AxFV`B_8ar`elNKA8PipX!kbv3fCL1GWr(Mp{VVI}*eFiY#&&DTcTN^Q$=y#*K zpT2zEPW=XMZ5P9P*L|)X;cO&GhC%BUa3;>$%&@O}sWO?gMXB>g_qhW%D_dZxtH%CJ zJSNJxJFDTY%^r8d_RI{BGd(s!7=WJqkAVpOWUX)q+sOMv`tLeJMNF-1|;r#3E37!i1`Ta zN`4%6AyMC(b5xa6a3xT;Zew+9+jhs?v2B|j+uX5j+qP{x9XlOc_niOKJ-6=5sFabcB$B?NO%^*FJIBWvAVi}0_0?puaKCYEo|a~5)KFln=j zC=DjGc1!0aV5&We8ir?RllUW8Ki)>sx2M<44k!GH9&HB54ZlzSKk*DJb&V+2L;uIE zX}!Sj{J-4&A5>a@Onsi_q5Bw}#nU;wWn|*BAz-MVn3(@+YjPVUC=Q3X*O+)Pa}u8= zBxt&iH59}yBm-ciM3Vb;Fd~BOgGlLXvglj9l*8J+O|ly)=5uIc|JCMs{#u(Z!0PO( z-n-t211FyKCO67EI#Qq@%t*`cVu9U#Z>$p&`?V>iiw>;34*a>(+&|msk*Ljmk=$k% zwY2OK{Ki&gi&?m1GDp*ILIV6b_NfDAwHDaR_4-qG} z`cql>?W0-`1@=~9oG|nTeT@7QSz8s=PSP00oWDD%yD|K@2mEWK$-!e1Y9Wwvo^rnO z?Es|#GQ%dz17WBnOk;btrkM5D@Tz+f#np$_Aa{k1JU&b>Ny64gwO1~ng6MrckJc&f z98BU5&MV8GnGoHh!YmEGOo>nfN~Nw)MX$)BB>TA z|KJ3pq{Wf~Z~O|wmKqQg!L!b;9^J$m6pUSbZfT~Ma^?a^ zdpp6#*V+|}*T+qAJA&#|g#&Ep!gImdGjE|3RL7z*e*u!>elGqk=LKs^vLpf6J=@h5 z>>$#s;m&vh(m5vs1K_QBoJx8@;G;^tn5Iq`QClC@!?#Oz-%XWxf`w$dp_W@lIGKG) zmX1d0#bz2)i%e+E-UmavC~plV+`*U`#T&Y2eVC2siIBH2L5tGHDF&NVwZV5-2%6i3 zG#!8`Qg*tUmZP5)me(d5E_ER22@^1_7W0?Ov{Wz@ViAJL z>nfBc{BLsI<0m4tV#mgWt8-Ra7}EDt2QHCG^zR@RyQL#^wPN?ks}3)i^{wec_);`l zulmxAk~*g^#)Iu8oLdK5ZGv#iWND@;;U_I?VE4OZ-DwQXK=qtTRn8+{xXrpBr6x}Z zSU|dmaB7o#TL9n&VDJsEQ5ZA)t7ya>h{WXdEEkj$I0h#W}sRbMKY0Ua3 zsL?Uk&J!#YrP8ofg)x+4Zqv&+oT)%?X6nBdX-4Nn>C_TVnp*TIGMx*v|Cm5 zNl~M`aYTp*&@0D#ME>g|)))%tzEkfeM@TCph5UDVu}e4JZ>Zu)4)LCZ{$qsOMXKp3fh za8+HO)4!L)v)iowi(<1T*40#)=Pidm66GP?cmX#mhQvC?*54#2>ZunaHrPEzjuKv7 zDh)8wcfzb7P2#S$)Hk`lyQStCvB4(|QjUTD2wyu(*j~GU(LX7%>3E73EaxFYWIFJ# z83n|6q^{8$d%6pt;9ZOqo!Te?M ziwQ}3W7#E2+s^CbmW`Dff<7q2zW~v8qQ7Xfff#D24*E_{Y0>C>@ z^=?Itr(P+KledO=&iz_bE_SmN*ZQ0*(8|FbmPA-O3+-qz+MH4=>anEZxyD#^wJhq{ zo|R|67JG=X%iJg&e)u~EUw_68HZ8`(lh6&FPZyK#guYrHA$w9jmyf;?6Klekdc|d} z=OAQ*4sc%ntS{Khp03rbvk_ur%bl zk**hLF~Z)*sr$vJj5=gjo%*wk0VF74Wjp9FUC_OToP(5FJv}*y6u_!2&yq(9}*;Zc1sxM zg{oepZ5OW^9yWzR0yrpz->FJ4rCOsvo~;{hhgZdIz7!q{PXk5Cb5AF8Hnhe?Bh7$l zNOe9v7*6=6mZTzT`lC5K7H#RJly=)81ygUq+)lWd@JwucXgRnT+>VPn zs+&LJVrqra8A-r4bp*j>tyrG%D%x7?L4`8GK z-5v0JZcmEfhfqmAU<)(E!klLC_bnOcsMj<)XMn0v3q5O2&5(8Ogd)Qk;~NB1hl0lK zBqjB88Jm-u5zvf(g%CHPtVkv4-@8ELDlt3Q*iEqIy;N$nHqWe01AtANLBP+=>7W-p zat?H|F4Tkv_B}I_M{{)(5m`u)jvLTCvF`Z*I*|_nC&U7_z8nd_c&Z~pwYj&|pmJ~Z zZMx=51T&f&$~8?P(Nu^t6wSCuVwl5BP~JqIb)E!agb=Za)<%KX?zLvPa=MC_yyG#~ zs8@gwlQRaSi9Vx*FnCZ+r(3#{^3Npetc+R*owDl%z!BmI6(EP zO{U;O5;4#jwC@BAk8df2!Pg0oa@3D{r;Hj&p@_Gq=!FkG)^cYBpS%5jGW{FHLdT0qOfIV!))p^eVv>sn9x|unwn_W-XE&Yt36qP@AIHve*!(bi_$@q z%#_LB6pSq$%r}SyN#+k~7w;KuK*nI3s;ZRAH46 z9Rt$hUnp*}E??Fr9Sx=hjtB{d!^)pkbjPI?vYvY&4lsSCIAq=WrVcTwY!OROL#=kPXJU*(`b`W~H98b$eP9G5dI9gAf z*ymYhhr2X2w5KR6xL{BvZd$F;{bXo;5YQ%hn1}v3wGXBEeB1txuJ9BUDjYAhbP46b zO4QCqZYVT29v9Vi@WPLID07ZLp@Sy32Wx1Y6>O!4aaN`J_3-Fl8VZiEFb>g6V+)xw5m%?+Z`CTM4$|g02q}nA(Wj-i&KP=3aA&tg-Gx z=;(;eTC8aSRC0e0Bo&x^K{!8ml~&Qmjs#riHj4rZA~%7J5NKadXfke;Zy8vvTg~r5!ZmO9gwaZYR1{SVlM36rjN?T`OyJc zeTUz@S75*{tz(Pu2=S?9G?WZc$}@ZC&pDB>{2B8Us_{LF%RfUhTi-)=>1NRA=tH~K zS=Iud_5HZ$c6qzaULasL&$F~WE~buYe$-|`9p>U`ncCB_Dtv2Tld4WS#}>j;#o1eq zc+pa-?m-KrKuxlU8G*-wYtlVo?q7|6a{iFVwfd8-Y9X{=SAr#T7QUh_zZ71ZHqvYh z(B>Ut8TwWpM5-B-+jVWb!S6-H3{+=KBA9iz?6462L!*|26t&|$=3EWDf}3~qUx#3| zSd3(n0~=q>zjn4|k)84KXk-5q}(Q=y(u#6_L>4 z4mrM`@D)5n!Qr=b)_@dF<)M#QxwJGz(0WB}-2n#p5{xj5W-K}}6sVuRktl06?)9~-H;nIxA~sytmicF! z%?-Z-ES~}t*@B)VvNr}&-<}NPip>A$Z$w<%<8R7JAL6@zYxdiQm{yb37r?FqmGZ;m zcvwN26TY_ZE`1Qh@g0REG#hQ}#H)&0chpBk7or*oJ1Houj+_C6!=_>nU9z6zvgw~X zYh{XFwJaZU=HzZr))%{5@_-d4aRMCE;4}~8zfLi$myiLG5(leGP5MU*%CF!o&aRIqyg&rs;se%b#6kz70gfUfPmv6&?klThM9^Y; zr|2!Lfs8L4u-!pGI(v;BZVi;`864bEM9Z7$xqPVl!wy~vWx*@>Sh<4II~#nb{UmEUCOwJ&@x{XTyf5p3r;zaz*Y(A1nHP}^myp7M+8^f-?Ho5Zw8i+pN)4;UVf}e z_U`BWY#4l4nBP)bzH3#w-oRLX%S;RMBT`f%)>LXY6 z@LWEV1oM=XJz@o%lp^bgGt`mEd(LGY^z^OPeakty{zzF$NJ%2AB^v*827R;zJD{4gGqPSF4Yb2ktwao z((m)V|d$g^xt* z;DwNBF8g>-+YzG{CZ5PDY1Rkg+YN;E6q2A8gNz{eLVDeA5ri03%pt8XI?`;?N(nMd zj4Edo4%5s_Q+0EAOEO1A&4a4iX$V79zl-76NciT?EW=WK10r@+Vs2=zoLsnm1C!iHF-pw zihz+Dd~Nd1m9f?0d4SC{BF|R(UIe3j7v<-~#qs^}>T@jH;^`~pK=<}7Ez;4?xG>9= zg!nLO&~3wQ0=ES48Wyb^{|V=CqTpiAsxED=Uz7aGCa(l0Dc z@Z_Fk80A||=&50M!%p)`?}`a8HHO3K_rJeNp+Jd`jUEWShiV3U1c5NSj62}eDG46H zhM5dYCHr9;_eD}cJs&!SzGmB4Tafx|)Fa*HD?gLv*3PDzp9E}Fd>&(si}9^|c7F{b zqT=ttL{e2#p|U0~-2d2S*|8^_U*h5$9aX;s2}7DF1tE*D!5&dOJdgftrR$XXvg$0k zb{)NBcs8%+pZb!k@uUO+VH%fcx?x~ww|A<7mdqL7$o*}I2gim%P^J8%%xgj-)bw1W8tzN^ zsd4Zz6$6W}pI>NPWTa_XKx-XN(VL_$bR?9xU{sWSxYG}XOOiDSw4Xf?e&XPC_u$(t zU6(7(JZShWfTe)3d>b;%bZL)V+!Sd0DN5q-scY4DILH>ZK`>gv-j{89H?o&XegbOD zA%Epb98DyoPI3ZVALOx)qYg7-1zWPFwXK8?>Vr^~Zh%iMDQw#2a0mkvfm6RZ*mL8QkQk72IVo(3!gqQl~feoM0wm*|f zBD(Vw|NHpEn+K0doh%}rLUl2S%&=E^gbG|t*`$Zg9A9p{J`>}HYgpgC43#IJnHZX> zcdrEVD2sww6p;LB&i>Q*aKa4M?arOOO2F>GcuBNuOqP=D%7TMLP#(T>rWAi;UszP~ zEQH~BVDmmST3F9IWQe*24ry1C`c*|BAhIaKwrG9ar~lFcJrzrZS=pQm;~3g#$D)CxUiY?C&yB>@p+^Xt{{e zTKp`i$yI+Pl7>1ITzLj!TBk|3@^(xR8rO&{7+G=I*J6MacXA;dB!*M`@+)FCLjeu$ z1l63Yu)whbf+jQO{NtH`Y?;JavDykcl~679PKu9bhWb8)*7@L@C!y`pot#4L&HRE^ zP}iFzC^6c57i6@>f$Lc_%Z=y=3uGXkU&+aNKt);Qtt0m21Ajfaf@LXQzCB1xTlXo3 z>+WV;A1qK?ruA)0CuR|IA^>)?2L;8ubLmYkz)5<26H{Tg<`Cirt-YEsnwjFgeDr${Yq-YUASmCW(r*(JR&O*5 zB`>W{_==u(jg_{9D#bHfzu&5>P$O(`cJk50AS#uYo=5J-aoqF)#btn-+Y@uPeUxo= zGaPk=JU1I&cwtn-qAfEy2{y==WpJIq;6n?=stO7>%-nO$0~`q@q@%8Xu#dO2sD;GZ z%P17c;RJ4zpmHv|lor{Vsc`XE2k%GJg)5bb=)&t~pVpF-4fcj4>D>57vwDr&OMGBl z?FX)yBJ>Aq<`(()?~;n|8p@&<{*x+VdXg&t!|0ikJPvj;0RxIbl2M}#wJ3k*qK@+h zcJX5zmHXELdAkF`uD6N@qF7 zvDbUfQ2zqQ#F66f9XA|=drMN85U!^>VZo1vbjcwj{Ds|pMQX=J=uDeqt83+g1p+FW z22MQVA1tyycvKc#^- zX8-eb#yV$T5%Ng8) znt<(kox%ZP?Z4sSkYnlx4loII_6mBwS#rF@R$6Zlnqyj{!t9ETq0?oChwIbfProYU zdcZs50z0SzdM__7*YiQ)v*<3^QE}ih8yz0a0>j*pNRJ8v#!CQip0YPCv#=`8fPZ(Un-4@JLm2RnTKH1^^HVZpuKiM)gyG#jJD z1&UeG7Fm#6xXs66+O>NU+^zg#A_|^qO|jKEN;j9YnH*Zl7}PZe%LY({S^L#TWV%@$ zu$l>v>z_s3Ftl*q z31-R7vJV8yg0u)gXmWcKOa0JbW^#K>JZ-HH4Rk8r>?636zfB;nCXQs_gehU{>OheW{J9gMRu+FNgIs*<8j zxd!cQ21XY6{XJ5t-}9D%Zcl0@$1|ef%;gTjs7N#5%cf6_uYsfM1-mEm(TRQ7Ux1S4 z^^xrad*WnN>r=kj+{`0VylLSKTpqX|>2?V836r%UrdPbtD2;%*7CchC`MSjdD5ThO z)MgC{_jDv=G-X={perJvRJcEzwhia+y3;T=C$O4DkHJ|XD%Zw<;$hN!M|j5U(6+82 zgZ5DeP{VPCP#$212JKZrAd1E*ku*B8L-_}GHCakU#-Tq`XwDO_*-64vQFLy^mnyW<5MusUE51C4h z*%3WSIjq%3r;mQ1rgTR-n@PY8J+6I*&J;O^0d{#~-ineo4=Srfk1&$(?l_1N?vEis z{P#-E+#s}FaT16=m*nVatrp@c_7)v}|4)(Qo-8G@C+LQKa0nHkPnw$&mgSN|!+hRW zO8TC^SfAtha8-wH9yHOQECy}t5&I{=+038f`2^L#fl+urF!?uSUkF|qY($LAC2;|@ z1}t<&S9Lf{!cia<=hL}{UhOV~BzV=XV$U)LCb2nL6lzE9E<2~uK{)r%lT`j&-R_q^ zD69L5w=)^-YErK9icLrsI}SC&*s{e+)+TG>`r~novkMQXVnW#&Yk+o)YPBW_5*kIsRE_0Xp}*SiMrj2Fa2^Bx|R!sjJ!F4Y0PS` zKcL29s!fCyWvPhiX@p{$zdUDdpb3dWaL(gtZ3R{y;pORB+aJts03O}#dSYZIb=-8_ z(*3n>gMa>#Wf`h$H^13EAw2aXc?J)CVuk&hJ+4ZQTcM1Z6PH6GliLoNS3g8>r7yg> ze!v7(GHRnGkXRS`Dm?f^uk%vvfO8}2X&34YShbIK^8Q-)4e9@#^{B3ok$L!`8x7EZ zV<{?%lzj%iG3uz!V|7+bb+;$}OiA(*tfb>UsVQ8<3MvYQvT6IgATfE95|~=Lr|p6; z1pSnwe$Xl8Ty`=dv4)2}1)`ggbe2!%OSEzqlScDA9#?%2;JK3DA{}tDNmO@tyMwg& z(5R(yMZO&aLgc`#9h7Ks;>*a-n=UT8H3du788Va;r6?0~MyWrVAtJ$mU{PSI$B}Ht z{_s{y>DX&9T0Hax>4NAS52S*pgsCysBx=H02}(LE$QQIi8mb5hdiOLw07yB>LT;<+ zc@CNkOWTHL8eUUYWs{hAr%L6*QUXu+uJ0Ic8{o9=^C)R!T@SL9V z^42|kSuOAA7=J<<1{cm?xf-8n3(mu{$`Oo)S1Io1NN+HJ{_{%3-$8FCVxREo4Yu{nn$PD9U6%!KM?J7)}NZA>T$BkslybYU&YwsM2SZ*g* z!6bGR`5MveVJua&M14(vB}yq2BC&$EZ87p@W5ZG&L3#V(tx=aq@-#q4Hw+HHs*!gh zorHKSu4u;6SWTZX8zrn&3p3Dlf4;QX5O(6le;Vq9X+r|I0Cv$&bks2pgi&b*&?`J2 z!wMqAeV04W%38T(*7QdU+*>{rE*6(}m}n1AFVYlNGB=c9&cq}*NIq>>6-99zB(T0k zlW0ZAvImigkf8QBE2Nm2a^raO=O!wYa)>Hlu}2iO#570tSwzMzjbH9-8nF7vRxL#W zu^-UlRZ3FDJdbZ}sKL~-!?sDbE+{hF6~l5ON#DqwNZT$XVvXnT@)N!uJZ+aG{#@#+ z8J){^C7@%lCMYdnc$q7wS?^?M81re@xB4q2lXCicmYRY!cVLPg<8FQeFT#!slf(*% z+$eYt)Vfa?=_lIdqmQ~+_Mg$!SM~S-F@z!T2ChoP>Hmw zbSC-JX;m6lAIVcTM;WI$t-`jbTX;nN1ZYw5rrRoaR*z_uK^R-n-O=ZWajeemv_3p# zRJj_6n@W|)ufy;}#F;AIz)@pm^F>$~KaL7NKJ>8T(xozn*E$GPp+YB#)KO1^VHt<* zdq%-RkdjkPh_~Szq?Tz)>}^qsL4<8F7b8ch?f9AIBmI)$WAswH#DcQZR9T#AKa`2- zU^Au_w=ViFonUBGpqB*~$8C)5t&fjN#a8n!=v|VyOlGrGch_YsMZ`(dSy>-O_ci_u z5LAv!SD59R=pJPw;czZ@zL0Q!zs$rZL|YKXVfigC3&}`0GaVx6YC)G&iIcj0r0QCR zXWXj$Snd&}y5cmpAK4)BUG;_@ddF(tOIqz=!FODmeoPuwk>QzO8gcg{lX7v(vLw<; zvS@=LkrG{s$yCzW95I|cQ6a}WO1F)PecXoQ9WABKS-U}jS(hQVYA($c!6K$#s#i_1?01W}~0MEz=8 zJF88s^lvUm-^Ch1jxxT%!(fs6tg|mhsm_Pnsyo@`imXf)MP)NZlSXb9)qWQWaB2$J9;jY;WA>V49=QJxv@=Eq(;sRA>7%3Wo zi`nLY7`IyG$NP2W<6~$wx#@4b@;Nb-Mk=4FjS)sCfpX^pT-aFTj6;|i_HrQGV?2y9 zz=6Js0MLgZS!S-i&;%yvtHvUqGEFj~Fo8uj7==h9D8VtD7*-Zk8bXccnG&t^x-O29 z=-KfjgTgesdkP39pcUgF90n#RZ5Q_3yNiy(ub5FL~vfVcgIDuun_nX{xg5FQS{kR?4b3x!PPH1 z=q!trgww9PaLN@aL`9~J@hRre)mJ>vd6lkcY1*->5WxgGg+|nt$EUgBru-{}9XDm; zPD(^m#-k|=22^T3{&LJF(ZIAnTyiTYXsp(JsJtC^7hjC%G>wJqxQM~lju|Oid*zKg z@&+QN@+NA3@lPIrJA31nMn9s!D{J|+-6&8{DZyx5il24Ut0O5$DzgE8bjeFatEJ=|zLJpOqX-tPL~LIo z$<>3*w!%edo;y?JyrHboFf)cnTGP>Zj$m3DUt#^gc?;0W$*p(j{2m&FT9uhlts$Qa z*GB)Sz(|T(%4p?mOz5m}y3ZC7-X2Atm18TLJ6%p`&nZv93B5FmLO*5#b8jaF{6W*I z(T?qW?e$mUlfJOeNO@7k(xzYaobXp^u`JIeDO0&Cd~bxs5aTlUW}Z$MyocDOnGE;X z1d{#Co0>-AA(OJwtG|(fsy?6!iygdExk;02i8@J=Tq>5c9k2hEYP`ZxAFtH5-^`sn zkiaj*Azg#!GsSPDJrI*}_ezKYJ{#2K=Vw})$NqCv1c4F)0maS-5sU0xY#TQc8m3rX z6E*Kno2T$h7{??f!J{1oEEi3Sf^QR-6<4CMxgx9QPSF^P>j@6$1bNYJ?86dW>0n@l z%Pq^P>Q9AxRaE)~p&m!lqQG_=xrrT1rITA0_zkkL?Uja~?etu^Cbmn~)50Jn=IAC& z6p$8Pq45Tb?9&ufIGI{wG-a+6UEO3vjbmjOYWU)#VA|&@(4w%yi693dhY&-MzzD;L zAcy_;LHQq~_6i{T54@Md{Ko+&C;!j=zjfJB`2PWVn5zF<8>G1We-XqXU__bXzv)02 zW-$1F`vcql1824F2!K ze>s8VFd&iv_{1Q}sTTLeJ1cGKkF)JTCyd&6{Eimt@R7?!)?OMOqXZZ>kzSRwcC1Xr z0KOWCmqffxBGtJi+KS@?G^u5n296n&TZ{3f38jS0O2`Q*@xqzwMb}_fVHJz{o?u~j z{>gRZ2uk+aMOEx1%$!%~5M??gLoa9>OKAXLFxgMOEd8WaQ_`(jO)b^Woca`KZXT#b zsB1yFn_l|Q+M|-KBAyE4mz0*{++ba|c~mk&M4$fEq_XlxIK}{q0^cDJSXr6IU($x+ zDWzq4KtaOYW=l>%Ap^b8rK3%*jL~h?-P%}5LSveE3qhOwuB7HDbB^kry4+Stt{fRM zsS&D^0;hfBs!B#grV`6{Q9Ow@T%bTLg3_o7A-AKZDax2OS#HWeXJ2{<5WXf?h7M-PAuiBz-)WJnAu3Q@s#L@WgV#cgqqc~ZwG&aW_EY*1_y^4`>i;YXr4#P!B>JFbHcj)O5ssNClGUNRZP>IM|J^65osrVZ!ZV?KG7UQGf|h5`CU^I%Y}od@YzltFG=b*-?HqB=M!picO9^S(X&Tp*|* z1fU-=!DAKtGx9@#m99tm5U&d_lhK3^S?jH_Xi~O!nSp(Kmg|kDLh0SSFrx{8RE8ap z-81VEmYP~!n(`XCVthbEUd1cvAq^tH*ZQ;e%N!PARJ*+19yZ{r>-aepJygJ96zBJ+ zz2jFgHt@BJA39MLyn81b7v(zefNFAV?m?vvx5aeYRs;;;+X^Z4Pd-QfD?;*U1jaHm zQKY>g`Md0sC6-g(FB1?=&YRAfyF6(v`{0eWePEalXn~mx)E{#dl3u*j(GVW z0L>kj2rmSzop_=mrjp2IHJ`I7tR0E0O4`rP?E2sk+ zEyaXiOA7f|5`;_OsojWgSVh_$*so$#H|h4@4cEKWsSzW?SM@L2c4^F(mvlq3Q%*7E zQ-mBM9IB&44wBZqhrH360moX#zx}>udP9521ovS+T=0kaY|O5r zl{i5V<=5w+W6iVem@z9U5<+60-Q{hA4hR#29NNb55>eC`hY*|qw%2rh^$Pcvgt4hS z4^wK*Ox+oXzF$ZnazTCA?a$O{$HS3!F5RM7QV^jCNIM9~=pj}6pv7`8?u1i&%a9x_ z8$29}ei7NC#MKJ|nfw7=CV@qW6|UoPjBq|n`~mBY!DO$?{aBKg4#@~$-ZGBdhO6>u z;N~La$C9apJxLu$Yd`!>RU|YLjV?zy(-c4DKM||uK%(-;--`x2VOLVlv6KSIUjeTU zk2U!R=M*rbd*C7tt@Wud#b&RSs^j0zq=m+J3Th^qEC>gmn@XA$vB9wLGny~}c5`tH z;&(E9A_4k(T%CyHbDb6J6usOsJR(kvCToG=@L;&{`>LAS!cBNGjG zB)|dqXz7dv&1g-{FEF(%>=~i`k@5F_3o)X|gMmYKP9`quAs+V!zKp_nMd&Y27=TB3 zWWtTsB{Rob7OV6_DSD>&R(L5y;#HTmbyN_My&r;$0OYH0B3p#jxBE`lza6oqAjG{Z zNSTI7C`@;7Ci6vc#C@POMERC-I>&eX82h;3ydVd>;SeVY07nEv$ zA;k$R-hL4a0Ss@iw^EaI13KOMQ!vFKe7L*=z)&^X#j3i=795Qxtg3~D_I2u4;oOx%c>*I z&r1p$2c~WKslh-ZLyAxzA}$%vC!(ja5-YkDkGHD|J(?*Q7Vp~^QiD54C-6jP+P7{; zrb8&cPG1>U-Xl&EvFdte*Wm7;9wB^cyKCrF&@sMZ&3nB`OCc@vj;jzyB*G8XXC#q7 zrP-aFDDXtkIjxbcfnGy_o+K_CZjr`4Q$>)kgSzO9J4s*H&XK}l!$18*7Rxe81-n_E> zp)GB}bZnp;+d@PQc7gli!*G#_*^X(-An!mOPeE&_{B>4#c4ku%&!@+7c_t$*sioie z&PRXromyK-kZN52KG98H5jp4_ZW;jYx4WSY3oca8k-f3C2FJdf8Fifig-L7~p zFG0mjAvrx2`*8GYzS#LxCjnCkZ|=flg#^qKhUhQ-sB41R!G%^=a8gsVKDXCjy`bvwIbMtQgJRNhL)m9Dw65Z-c~A6#3)806W3 zA;_O=@@v<~C*YH?l{~u-omYn1suYeusaI(qOrn+-s1r5WOh(`p+zBFPM1c+)N}ODU zGBl!Iyii|bZz2_-2H|HtnV^fRe=%FxN+=at|9`8al%NoK&B{`C6_ zWPrNY=&a7bDCW;9KpoUzTAq}SA#9G*3>w)jmc1jXipXbt9Sn;DkDxJerNZr0RGkh$ z?kE1M8MiSAmArK6++;kmQKX(G(Xv2HyTsAx68LBq)E}m4QZ$%X3ECeYfPaxb-O_6- zCH|7AGj6^AzInys#!bd9R`FCunpQ=P4W+fe&rtvNDZlj(UOJLXpokc+Mk?;Es3n@{ z4+ae6ROw(FEeTWK6vyIHS%Y-`7$$}~Mc#xIa%Ex-B7Fkw%sd^DB84L1x&!U8qp7?s z1xO}LFTN08n_vLU= zm24^daRin|2Pt?1BO==*#qn1Ncf{#Td zmaZyRN;C`MPX{$hhB8uGe4<*rWjj(jtZ_i-%w2D<%$^vx`g| zlptCGg{460aY?DQfI?FL66ClYh69g)LUda!o)JO>)yckg;asl)t z;i)#{Z7YMi8faQ%EKYJ{R^%XI(#O&4BIIVpyhavrEQ!a(1xREQa7QgjMNqy8w)}d< zdbSCf%_me^#e7iw$fFoEN{Ix@VqQKtKBbbxbdlsRu4c(6^MVPp*l!$hb)=b+o@|u~ z6p0Kfgrm8D${#D~Iu{gf(&LklL{d};;F}=8O9wjyEKwJZG+{=Pvwv$INeZwe+8ITV z_(md(&CN|dIfpRuz82qUS!>kN+8}N&+0v>?bFx9So*6W3d6_%fm+|8e<&jWr&$M)VN zlC+!^d()UIZdD_Qbn1|ArKoo2GolpV@+gAy;dBSo2gX1I{7zQ-A|-HG-o6KylX zuEdd|53@7@`H(ugj#tl$WKeC&N+?s zku}QNWqmhDpbg5)F|Lm0iHhVfLsy3|<<`v$W6*LG!uf2&kW)y=@e^~1M6JF0g~l#s z)g1b32VNEha+|CTT?!=d-@pxpD79Ff8kH0ZTRmJ5I_xD^q{HuMQbHy4n2Kj)F_s&z zj`c87APJ)PfG~BU;u|VDOB@VsuSw{hYLLlii-#7eKHAjLs{n$ZL*%<62}R6wIIc0J ztIs%`&m?kicX(}fbGY9iOCw?7_piWN1*9HEZ)%887J~nZ5R2GAnTyJP#0>zM zoV7v>1s*FhPJbnd&Z``DRN8SN`ns11@t9kH?EPI4#aM8FISUs3vM#Hnh-U+544)HB zKBVnBCslHG1CxV^AJd!+BtcUyq9H*-1Cs{?cZeAtp@QvLgUL__1^y{OCGGtNO;-Hn zrP7E1`-r?NGeMplT{s>-&u&RtD16U_OvE3&-G?*$@VHn{Kp#w~VO2>e4TUhuQvPC{ zO$`N_4qC?sUwCI2&*B?fn-p+}c zFFxLVvYMQeP3?pg$K6@vf1H7{xdd*EVB{6XrOxul#ntlB>@ez!1PLsinSIPbN6TL< z7W;E|D@{s$v3CZbstQ(W*I1V;nG@QJArLhwPols>oe)lFB;tmR^Dpaf2Y&&Sy+B{c zyGVC)8&OPVt``D}1-x05w}LAvajg($O}qmdm5x`PT?H zoi`+XFJ@4=y-~9^lHTsa=c%}8yeXrsg`WFky`1zyJWb|gBbS33xk;Xz7h2QAL-_Ug zHX*M_(!8&NmWU1Fa&NsDSqw}lJ9C*hL6%H)k)GWpug!E6++8I1`I-qgVynl%U{;p` zt0Y`R;EZ0u8@xi=D^I_Jm(gUUj8o`2;LpwoV~XdiA{`mKSa;!WZjAnT=!b)m%Ra&3 zvaK7*|9T(b2hVwge+o0zO6M=UoisysN467fPpS`3fOjZE{TurUeeA#&losbh1F`=v zNqjfgcjI1wrt7m<;-f6u@g8OXy31V=>bju>iO&h9~ohiM)1(&ZH&A~Oh?jYnBU z6eMpPE#5pA3mOP&Qr-5gfc?>EaqvfL}BR8Z0Ak9R{fnnyL(ta zcgBw0LCx;6APkE^&?ZypDn9`TKM-;UxEw9-ArY(+M>PiF^7Q9~#^Otzjbq$7%m-En zAqEvUDk#XqbsG?!rCV`&a4|~Yf>^IOXG(N1 z>Zv5HYC@h#B)Aj)mM0#GHB`U4Aml{+UE%nz^Y`EDz)_kQ99V>i;n51<8^txXHyIM$ z0z6KcJEaqxGi@7Ykb2tkO73UN}T^2)9^@1oXf%DbR!b2rcfM>mw_-wnb6)o06{cuc=b&je~gaCcymS zcMN}aHuE(#RI|AKFS5Q)&+`7;;0^N*pNN@;bCiHdZjZadRY`GSyo91snj5@-R@9l* zm<0afc^MQcwrs?uzDpIA#IX@Xv&_1haNDL)*;UoH@&(-Inv&;9s!eh6k7xbYqn*-%Gx+GTMA)u@wGA zJcJa%R{34?PHK|?5>Q@_Ky0$7B7;fEa`at*l>;IxJyvE$QF6+bD+PBveHlNvg;<%a zPFRtH&l>p~DH*(6DL7OtX37L$g39s6wG5MBR`rX+I(dE#92;kuT}1?tABO6Wi&A?O zD}aD+EBnkYsB8(yHQ)IJZd>gxE{W%yaB2OUwvuMzfQ1bdW#mFDb3FH4a#$?gClfz7 zVYA81l3&6Wgt$OIm0gm^pp?~AXD@BIV@4pgG$kvi4)C!;rS++iF~Ro9^6C{;#lBZA z;%ZJKEo`4>wLw-Dn#X}*w1{)VP$&uHMpF&LXE1b0cK526Tt4LWY~j9*Prl&k*Cu|O z@FUCWjuzgay7k(GLVMGL+AH9g#^It+a@!@*Gz;vU-bZru`+}A#2<10_@4s5%gM6-* zs^)nk{A;1Ya_O+ngX^Yy!grl)4e&F_NQ|>v-%IeFLRW|vxzyGfu(VK0f;8!toa$yU zF}j4QbNFZ7oWZ&0h@=dK*uW6-n=+|+x)m&SSKb1rud+%jwBxgco@`HHI~Q|Z5l$2H zzkUS#PjDz$E-kYYMLjNCzyKT^+|)EAa}TomLtGREdz9zpH((UZXh8?=CaFs zGV_zUPR6gWNg9ZaMJw_Ug2l6lC!6e?Bux}e6{Z*wTAq%31w^2*$%)`!l|0AMfU|U# zd{LaGX52+Y;ZfD{S0D@Jy-0Ki@gVlMPCR(@Knv5TK%P0nP6XD&Uk3%n!l*lwSleP` z#?n#4s0tW{QETGTLC9}}Z}Mry4Zk-+Z<^n9&{)W3h%5=PKd8G>d7DJkuh5DPYV$7<@q!3tAizyK{^Z%-vr9r}efBi)-1| zM)Bam9fG?wP19)5#$AI38tBFv*AU#@AxLly?hqis-Q9wO5D2b86S!IX?6dc|YoF)d z@5eWP)U0~z9a>}5Gv`-KQ}50ojqIs?!_BXf!Ajisbu#3X7)fqumUp8hlEE&H2}Wzz znQt%NO;YYX|2BJ~dPOViy}bKE>x2+@(g?XZG=@j(eLxUx&o9#pPVUj@EVpNoOcc4q zwZg%+BqdaVhvq8I;tj1EV9K(2)0}gmABpBQzOsU=b7b>uR-SQ4yS9gX^Y4sMvOl}E4l)?e6i}ZOaAK?0p&fc2VV|w=j4)%hqH)Dgu?!P& z>u*t!Pe|R~BCn(y-#jzg1vQI>)vzpIonpvT2eBBGLXp(tDN7@;tG!71iDRdC0sGDf z)@A>PefxZ0tT~W(i~IvgcP;BOA*B^q9S~u*`vD1iH=41yxZyZA1&t%bM>`Qw&f&qocZe;B_rm+m(GI;{wEQ4* z$dK8Tu3Ml2ldwPVh?M@&sMAT%d1=0B#kt*-Z$7UfxPlBC4oSHwG~dIJuj`ycTYlIM z!j?@8uFq{lroi#e-CQ6*(`yUWk>QbC;N>*ns0TKQ*NI(Qu-F}zn@8Y3X;6bWgN+=} z+$0KVZ+McHRo~tyUHjXb&9#uNUSP5)_Sk8D;56+`F)A@U@>tz-(X3lA21`WgOtdHvK-=(R+9x=w zX?2mrQ7wLxICkHZ6_YmK>H@1pOm_4W@@OCzE2Irs%gug_stC1mLmk1_=qCz zS(mfKtD-oaVu}Q@#Xn@4XDVelH~(UcdpjA;qqr&GV;X#i1e3ahJkGj6-o>(>4FQR( zj7GEt!kIwS5x^c9VpYCotZS{epy7pSv=B%-di6_FYCXwx;7d5yYsTVz#G z^h79E6WX13j`^5z@ppTVV5MhDaqqv9$+fMDVX+wNe_O}!ctA65dHsP~%uqYmeEIFy z+*UNi+gG27V=s0$%B$0Upvj`k!SA;}zCN=wA4 z^Y_U$G+E9|+6(h?#5!egi4?;rY)mSYWd35FD@xd(eTA}z=4;ppr zHld0syL9U74by9eu=O}bRP>^^9WnhR7d85HFXVcdn_kvXhxf+V z%-K)$9`jnR@E(yV27_3hr38z(+=a4de8egyi9Nf1wJqx#)Sgs@9KQH<{a`qP@@)-~ z^or8sYk+=Fe-dB%(8?3o5Z!X?`F0#Nu*t_6_2mcP{I3~43&#$pYi;z9!{<;UP*Q$y z5Otx3#!RDR;@jTVL~M-FdiSPrYu3jR64gdR7Lky4U&kgvqPp@(^hN{cs)`QGy87(k zl0{G@WI@)-9g&?8t6PFu<%dlss`rqoV%@e!#aN51k%6 zQvGLQHP}&zm0ZnobJ_lQVnQq`$79iSWmTj3v>ivzWe7&>4Q~cExVbdaWB!bQWanp@ zIYDce{;5rpKs1WM2lLas*5hwJ^84>lNx3CAmCyPjZS`!RDX4*RSG01?Y%yeH#b3_^ z6%cJ%{c@hN?uKuk|7Mb~dq>vtoW?TN!GJhxPx+%U=0}NCqD1(ZYb|d5up-VHeq%$! z$rP4tQypb1>#dtt+h`ms4>y!@B8uZ?$${-0ZCa^Nc7?7P@D!1!pzC1p?N@W1={=7b zP9+V_uEcls=aCZQk|UNLz2iZ6?L6a88keq*#vFv2$&NUeC+0`{!UG3>Jh4gP!EI#W z%$`4Uym^iW1Pqb$e}(;iecC_Vi8nn2v*8U8oJtxQRcZ#bf$##Z!57$gEy2g5Q6^PO`^`;Q-*STXi8CytJFcjHw9u{y_zP&;x2zk3O(mNmMJZix3 zA^xj1v}koLm6BaXdpmqv7bS!5H6vE6^Jv$)vZY1bfq+==6|&BqYv0nSBf$g`(yb8- zno8D#GU-ZISeQw=IgF{;5kG|=N5zo7n1;K#+_zVjLW8UN&ZR~JC#1i^sZ4;)h7qe* zDKG=IU&{t6p^HPA&MhCv;@wNZ6B|)cg2H(6cs-mOMyS<%OGqg-bjGckZPw| zc2u1Qw@WIP_B6;@@kLNcAKSg4wT!r*7+b*b9aR!kCVYSXwHYme2VccLRs#zPbppK^ zGJ{Ij)+HGvKR%)BJz>JJEk5-c`ExO3vA!K^H8ak}|9z{)xSJv3+=DQ%(xd2eFG>Dpe?weRtwzweoHBbp%U@=Ub6FZy+*cSj|rQw1=JvS2rX7l z1JEtn^vb=hR~s**aTudi{VSv|6dYVJv3zk(f=yWMt{9&a?sf z?h3D7HmfSsOMH@MZi*%39#2ZQ608Mu+rFaBtK8&@Z3fDF7jlT6{B$%+s0O%tcnsVEr3@a2A!c=aY?Qo77X~nfC6OI=HiUKzV%+_zY#}nn?9p)Pg&jz_2cX<*Vw8|V0NV#e!`->Nrx&2#v}NMuBp{qwmTQS0he zlOt7PNu8hH@&en4`;Zf5M!UIp)sI#hsfv0Sx7FCLyP^HfWdXv^;HAW4CR_*B(e`0l z^fDZ^KZ8&h5kRwT{(uzkdN|sbM(b%lkp}N0a=9(4JmM5X8O_96`nf8Ox>Ef8G+HSe z@Czks*7p>F;ev&ph`Uxt3p3;Xv{JDzl->k&#idl}Dnk6eS^64N3=QvYX~{ZQ-dT_3 zqkGeSo5k=|H#0WxS+wJCkT6=}8Zd_*lKJUGW=kn{&)^Z6jUk_~r23+c_RKhb;BH#(;iFu zDUFcXPb4;-%q>)){&&ehL(q<16>=mgC5|1%Dn%O-ho~c2!yfa1IkoIdNjLA%6`qNheQH25=HOrs2GO_as-X(&G=iTaiIoQv zt+N6Zv%lqr8U)77&D&Z4bxJc|y)|#GR za31bZlVsDg3bOZ@;_zPVFd1Lgul^tqo@vK;{FR)PfR4MZo$4FvNN{Jcl}R}aSd=82 zrP&)BIto$`K*Jfoz2JXfwU6)Vouo_>9{Y}jlUA$V(XTg|Q|>$d(T=e_c_8b3M*g8I zK_!Mxgx1J$X3B@>XQLIK5L|xU0fq0Da?Yh9LSJxs`j|3)HoxA~r`-aqnKdxd-~RFo z_pK6sgmtL7Dg~^{XGe6qtY{h9QKzz`9rHZFB^FDQN}AqDntlys93Mh)i=x}7GzIPD zCQM9AVJoUP5{_^EJZB&ZnWz{4U?e=@%iSRF<)#Sfk*8%}@KJaXLQ5A?hMFZipb;h| z!96?VSS0-lX1Q=)qxwQ6l3ve>P7A}_HWp!7A^1Lnb8;>96+f{v^4cLIPJL*;iGgE+^YMMXA1?O2ea%j~)}snEitib? za#A9lJ{0rF5)P6!Z$Ug{SnJax173Gaq>r=WhW=zNXb%u-)PJB5rqlVRXCZTBdBNh? zYmLS=a!Ig#wCy(NNtC?B4>qV~+{JQXMP(-V(4P>s;%9`t&}Xxvdy4%z0qa>XntyEm ziKW{L?)f(-4oPJr86V4_@6|;SG+&0mwT6CUIGTc&bOEx__6HQXR&4|3T)WrxvT~#^ zmcB&PC*YOzk}ibXzA%oVmn7mkyE8koJThbkHjfZ}Oc>A(-h$}oWSkwJ)-zL`1kU-L z6YCyqnQLQW%f=ne?!)Z>CZmcJ<|7woz1#)VkSffsGvD8r`kN=W2Edj9l^>O`V3x}5 z3x*S^ATjD937tv0WvhD|Upjk#9_S^CIh1Bjvi{+SYcxeqsfB z)1&1p8n{-pyN{~BeI>-MtFnp|W(_Dd{*8X(^l>UxA6Tlq$bqAao02sIf#2^@k))ik z%viK2!{2~O_4=Y@0XF@aI468zJgMmR+sJ+whj~Qs7?fV5z?GB7J_UArdj^^|O?f7z zgN(sCouZ1#NXK47^kjdRvp`Gs%bsg2A5=3LV}2#%kZ|DMA>CtJ%U&3eX?ZrSMM~UW zHw<_hEQB(xs3avFC#N4J?&`N96h#rL#c&d79R{o`qBtO@R%IuiNp&v|X$bW>%D~IY z6p^OXCUER8XK{KQNjJZrFbHl~lTfcZd)`ct%3MTrBrBsVJjl=SA~h->Vl;0@ z6GAYm>^AqEzhm#liv5QhHz{i>&*w;W?eaQsKfx%9m_X#=IL7yaR`D2ViW`+s zVOLumjGBY+7cVjts#?`&wPINv=-R~CFBf)7x_E8wKO}s529q}57$6QqgUyz6UfAbh zbLsKL=2vy^{lXkw%|>7`vQx`n`D$4(8-$?|KTxuB&A0UpY3JkiJ%3g{$K_|`cSGHd z3hQE*sq~h@c94s15ZgFb>Xgb1$?#px5aoH-`nmO!#T zIM7EKW0qZ4i?&i4Q5TB}CFrAF!!J5*NHy9VEA?haMr0UD&9O4!Z7NlF@Yw@Io^$lSc?!AgE$)8mc9y7toVBsYX9upL(TKf5C^_eRU%V~F!c!Rr{#!Nn7fChBUF8k^SB^uUfEFjLAOc zo0nv@HgK`4%+iDiFQz*%T|2^TmdNeLzI;!2BUZNNX@HMq6)}mu?0@v?>oQMY0xttg zje7+`WTeuQli#&Az{tYTe_68wmG`0CVR{lvz`AY|;BbkjdAGfnP|IysdRqFyS9)lm z8v?wc!#nxJxm-<&{kiOdgt;Z1Qdvtf`NPXE?FLsyWOa5S0d=r=`w2Fw_>>GT1}?v* zIv6nkewxN(FX`;!+tcednO+aV%JN6LAGFiG?DOv5X?QNuxVTexO;%O&P$q|^+DwdR=4h`MJu(etzB%xyWFc-%CYcvm7a-(LjnSYS!<*~|XE1JkZlfKa z&umS0Xs(<{S%T*S3@<4V>FWO?hLeCm z2m?j@z2TcKa~FB#K`6RYs0%#B{s%zbrcsX(z7qLk<|K2S1t0_^!&(;A7IG>3Ov)Vq}{=`wm+i+W(>XhpI04!Avhj7yEO6aKOucK#v!K zybRtL*OfUS;%KMdL|9){zRlB=)5mJu1P=SeAUC9ZJOxJ%lt)!qpoyYnN2blLTKen^ z4*8(|iNjq&I^VlrjZ?!;*PM;d_a(f^9!t2-!?cU-P zZTWB-&V4y=o`pnTN^;5hJa1B`P{baG53*l;CrzayeIql`-q{Y#vM6iKi|yER3GSE* zS@rL2l%<_@SX67<_J>9g>F$z_A*H*!yF(hJL%Lf!rMtVkyHNxIX+)9kdWZdN-(&0c zaqsVY7suir{#n2CKCf8!nii(OzDTNqZ7VzTRE4k9CW%YGZ1OW?ey3eFBdv{FI+h|q7cHG zR!%gnj`p(QBV*G6Q1NU9jn1hjKwJ;V{vM4R^Jb~vBhbU8>X0^LDQnD^$0Kvpk6v2Z zE(!d3mz<`BMnd!!!9|N39GiJ^GS55x1}mTUbv?8SJhPzBcX zq0;CsT}t8@o%jD;BDrPnN(B zF5~4(>Mm@rJ1SMXb=UM9rN3S#`#JOIS`vL*Rx6E_qbC5As)R-!RgyWy#(T$Ah^1B% z;J*gv^vNBInh$&Kg>Y}tP-5}c+6xy!vp*rD(Ut3{W=%pH3SM7#SSN-j(N}O@ZQ2YA zs{IY@vt*Y~+V~7Fyw$ng?_1vM*TN)17@Y^ zMC<+mQt|PeMIdDwTevcD{~TJ#N=s~#;pn^u4aY^GsZ5?26IuDK^=sj+vod(5-t~il zehUgMofmxs6g&^>Z?m=pf|3lk_T*T!z}EBU&9-^t2cBiSi>p7#6RnxfFYr|24a12Q ziZKww`&c@q#|9-lD7P?Mnljz`@+>;wgFXhWde$fsEsR)8qUhg=egbGXqAgZ+4WTo+%GuYbC(Q6$&Ft^AbDDPP?7ozR*)q$EExlNhMlp z*ZKAS^%5gZ13r`DBD~;@fyq`$CgdkQXt|dqG}a2S-nfTp-bX}snzQS#bEnigJ%xEJG*tI(WQfbS^~^Qo!_HESPI7V_>8VkA_RITSeWCB( zt^!0u&HaLAZH(2D-D)Lvzl{=}(L7aBKJ9LypgEzm?VOG!E2ge7(ZMqEL@6ILgU(Pj zmf0g%W^id*;?}4di&OCh@)Xr7s#kLOZ(`LhoAx@hBw>y8=Zmf1O`9f}>sr9ZP(MWj zny<6RRkh&3)6tn&<#8R2Zi|$nEo5|+w9_U>ijboF20OzIjJr~+> zvrIT4PBfLZRSr+!E?(F>l_z~Rt9Vpjtog5O=xtTZnra0Ffr3o(y52yu79VjOGPSMS z56a<@8{&4=+q>7;?Od5eN$tK*<6Q0p+&`X7)$rZlj>{l9LVq)Nz2Df-&D_$@f7*y# zc}F*jc*}F`H%_kzBiAS(q)4AD&pWTs*ic_tbY=B{P;sj3zQiLxcX(?TVt)Gb1PO(R z_-Y9^r)j+cJ*wg&*EjXz64uabj zoRvs4o70Xd_80=(O>~7GQ9|zK*oh?2`}J&LnpYcE>;bYjD(`RhoL+9bZ9`yOL)mcG z)(Q75DfTV|2k={L7lqYOko(^%LEBSv)1jZU7AsFPlR{&e%PaA2g}a2~2mS(ShoI zvtc;Yz9Bx+YrS%~Q?3gV`4Iu(X?L_zuYqZ-a7WK*a+0nz6=l7VXH zg|?FTD&=Y-RS1bVeVukstS1ip8i#^mEgCo(BH3h+Nxuqz0`@1idF@ekJ4;D=K|3r; zc*wjn=;Lr`6AG@@%vNLi2(&=-Aes)rEH!!yzLsE3OD#oRaS_1XZEk*}>^G}niJ(Hr z1)x!g!_`=u3C4}oO}*T{r`k&(bk%=%0H=Q=Got_*O55)&dCI`$J&|*>ex{%s%+yEi zWj5?R0RcC@p|i_dCX0sTa!p;#E_kMxdtvYn8Ar@Qyp)nt`X0PgD?3}XWS91-%A5Gl z<7Coo&$&ImWYN;K%U;7cQQNebh$xHkVptn@Rg~!G@p(XY$YN+@G?tWf`9+9qeu-g! zSu!5K+!=`#Vg&8C&xshIG{*Tw5ca~B{jNMz-SLT9CjTt z4zB=ExJy-A@rHXe=&XK3LvC9~9SMjfl}Xp?54*x+JBT-WyI!kiAWT0z2NgR_zu{ys z;xt;!A=5Zaw$0}1dz6nj?<`L4f#fM*NvxM=B%`6SxsJn?t6!`D`claU({{_R!tK0- zi3;bZDbL0)En21K_9%)nwB9cO^!Oe7sfS}rEGwrhFCq{qaE-#+=!os0ZW1G$9rD~8 zV{)J{nm%ey)-iBve2t1B5;Zq?CGyc@tII!4jrw?0vADdU&H-P&6g%ZJxbT=9S*IP6 zP>9~cnh6wie!#+>?UYc~CxmyAl7O)>WVItSd17yGZI{}zA}VI&*=v(rphjEQL@6!` zLp#41;Gv!;sq%w1<1uamt4uBS8twV1tWEbtT;E%5#rM4zaMQOv%ta&u#PeDghFomN zM)Ep_iR{&VpeHt`UFc8D$?Fi%xCe2s_m*p-^RO49_?F(hRCOO*X@a>-zcFP9o4p~; zi&R0el1%@WS+@WA`0kxTI%&6A7|y_pK=k9p=4L@BNBo@P?DO-WppdbZ9id5`L|YFB z52r1vB~wh?TUA$bjkIVehdRSP$PQQTFZ;=L)t$5ih&h!h?`-x%4<&3Y*s9QqtYQ#% zcX{26>}+LQPoQP_TJZuI2)}%?i>!lkZ>VXy#aAyw5$~8;cQYSpN)(~kc}wzMbNnc% z1>(4^ZDn}P!VSoIm4KF(W_-W6$DgcS5L%2l8a?M??KjF=@Wm}qXx`RmvTb~T5^KXv zO*kZ;U@>(vgq%jrI6YM)d=-bWA1B;;ORC2SbBQ z)q?Tk3g6?Vr$9%=jKRP9s$V9%u+onM9Ve2EJrc>#;#^1^sG&40Ss^;OPc%1G&~KrC zjw5=&Xay%2l(=5ueI~w!V2ET_#qSEX+-azcJMO&6_otFXK^{Vb` zX(NLdSzMJj#FsS}jc;&xif530swcTcN(p+;TN=2{gv8~FcI^e4votC7du!>RAxK|C)!!5;W98^ zV|spp7Oe+8z{C0^U%Y@;5I5hMt|oePaJ5GgZ@)aSgV}Agx4d>bx9m0Ez8od=J4{r< zltXtRm{Z2cc)I|c8fUpJ8VUIP(#bd>RQ{c zZi42hpzF)^j3vLVku1F8-V>ggvtzE4VE>#DScjP)al4~OeY_*|+^n*RBPykj{{^m#X z%@=}o2i4D(ny|6IqDh#_xzHa(a%UXA4RcX%S!pudvM}Wt(%586BlTVK*8@130=>>W zo13?#F`#VpP!%OPD!e3Qc@wV$vQ6@fzXlkGZ-&J`xf+AyJsqH>)Y2GA;eK%$B7;TR z>{?JbH7&2OV76!3-Q`M%Z(3#5X2E^qaof7kYUHh@uH1#cWM-)$HW&+^K4J#3=nA~M z*{Q6YGJ5xJ)g=WxQy?d>6q0!w%+-`YrldcdTfRg${!PbTW99|<+0?}_+ z9Gu_wqry$#TpU>`cpN?ncPt_wiix&E3$SCi9ywz#i;Q;v0Lj14*H_e7X9Ies^TpNhmVLQJW|VAc!~bVLG8H5K37{%`pa^qRr_ zPX!nG>l~HQHm9k0-krG0VV=FIm`dMT_NzaiNjTe|wi z^a4I81dgErrdXVGXtKg`wO?aNrdf6ZFL?a2Si$n$hxD^&z5T0I7Qt$auCtYGj10%S zMA)0W{9ntcAt|5f!{qn+e}Oku)|g$37^bHW2+}x;@z3VhGMynK*8md~a)85dKhe;G z1q1swca_bF{9M%T4ae{hZy%3i<&(??fscCr$`Zxn-%9kvOq^eH5hd}9hKgP(p0s#< zJN6N()WlQ=!gLGgDC{-D%BD7K8%!JO@}Pm0453roGq_|GoP2H+GDaNB{J1G{B)Bw+ zTX|P2@q*B7n{pvVA^%lEJ**$Y&hTMq%$sRC7Andr1&{H!fmC)v@^I;a5>xX2W2~%3 zzVd!k`p*0ZmW#-T?j~5n<2T_fsjn4>Fwe4Md74b+!9R~`P8;pj-~-BE9`%CBd|+52 zZk;=FdwH-vILa~@!%d1>KIT#cQQV5nq|f0{CHm& z2dNBPuwkW#A4PYgHLl8G(EAoM0?l;ihC3Nr@k!X8OvM$*CKQQhh@2FNnCf>{^7lY$ zlXD?8jKRiP96cEKarX{?>h;h@`EgV#Al|)_5{J1U_`+(pZa&YeX&c*QGMc`M8DC9rAe<%B7PA0BvV(6pz7gXA~x_XoRdx`2%pPLhr=f{vVi(>pC!pVUsY;35X ziCYV&8l0()?;>aRvSj9+I>s&Oi2Zqac9tSIo4+Nw*FxDqMOD;v0M#L9>3e)9st;Q) zO4am`>o?&MyIy2tjymh!I?N7r)_Tdzte|%1MsehnqP%u5vHa$NrsmolG!$O)E!5e1 zSTI4tG)~A3^ia{;d`xIT5&IJPS;tzZ&~ z>-2Aj%O0BPfrMe6$O8vginnp(9PV`nZVs7MU1U(PGZXxH1Jy*@!L68-=$h{YmFcn$ zG$iV8hr@s2aYyXFqkzc_c79VoB*D?GeimbG+7#aiy)Pq@tALS)GyHuJ1(N$>bcC5 zk-1diFf<5PzedzWZ`B2s_@ZgsH_M~Z0K*t8qcJyD{d2-6@vf)9q~u(8-}={)ljMA4 z6c|vOG!S?A!3y4A*_0(tMO#sXG2(K84ak#yshrn#5g|`1^A7Wqz%<<^jNqIS`!-D_ zNTEMH|KMYfRX6-J8C|{S{d#BI&wJxl%d+YMyIM&$EY8)oWY%$YFR?a2{oaY>*0j8e_g@M1C! zZtwXaD080by2z|M^$VX)@tu{PQGyF<4NeWDlT;d^G)_l_>?&Ati?CqI>oO*_cXQX2 zpDZ$Z)5gJB-M16o`3AD!UZlh6$sLM6=;QJ=_%p6owJu&urr{s;5~$fc&zsUG7{u@& zoQGpT9I+&MNN~-%z4!GKGJA;tnQ<)D#g=P_AeK zaV|#|N<~HFg)8sZTiqVrR(f9K+}SoyrCsH&j3SQsir$8VOpSqtOX&$H@wDZz8VDi* z+b`~g;A=NgxRFd(mvnm0uYjGGfkTI}N~4M0G!14@?&$}oaZtG!Vj>kin%IDZB+Zx4 zXJ@wh?OA3tM^o=dKj3c&EI5eNZ(RLEe8) zW59JqvSl2s6H!T{8jilF97RejX^~t_JeJ3{9A#vT zDZ-;`)OJe7P#hoJ_P;aIZs$}NPo!r@@*QxH$HF!WQU&wZ4;OnDmOnd%yE9u<1wlPf z3wy53^(y6~-}Ag9g`AT5yCnK>_PeK=VtCjrR#aAM3RDpE!Y-2TiI(dpyB~uSvbIJp zISYA}{DUx0=&e@3-?p=_$M@FvWzn3x7oww_REmk%p7op+UP0BKS)e!`)8RSiZEdCA z?m@llqv?!`zA&b)g)+#f-7I+xx+nFRXkRhw>jD%MlQr&$u$w*$;r_3;ZYg_dYTQz*ONF3v2P|HE{TGpL{^#rLzIglWLW@ zPv$&KZ^Kj)mGp)L+DdFK)JGD!&#!cOtQ{v|FWBub4h~x(x6mb6F&y}iul*ggGq}uI zHJ)M8B7fMwuSj%U3n`EWzP&0-)GRM&X2)48yO7iv*O(~2(=u|foq}#|^e~BUES^Kn zxH|LkND6pdp> z_dGY57Xin(PWVn!e_PnKKUZ;l~s_ZdsVMT^B;)lOe|t@6=cW-4>)`PYWfKMG6o}vzZFJ zC0;0tsYmb@S>uhChk}1T$3K0JR&H|+&&!~^p2*sWwV|;uLu}jdRqtXD1$`tl+w-XJ zl8Nr5NFS5>)G<#)Z&V7sqR^^aHjH)$~!80!d09TYo`{8 zB~m-RnCoQ3ZI~G*(ybPZ#YhIzN*|O9rC9$mWOaafuorT2X zb6*(>%#6)NAHy~6hw*h=)a5VeY_C%5ySK zh!21wW|X3!!OG+Y-+Ojb*-Vv5JvP0#97F)Qp7iFj(7?(72%&`Vgagxw3WJReftd;; zIXFgYXi8T zMUEm|4tu6H9cYX$Gn?$DQ*PtL z!;{&@kTu74Y=em#E+(Hgwjr?`!VU$u66$=*Ft}@^ZPuY-1>8iajE<6?O6z+*Lkx-V z&5fn0Yzv5Mh(Utv&MB}k>!C3x&)yC}Fr5bH#O|4|-%3eoW|`}6maadG$2SI(Tz7_5 z(WQXUVkZUS3-K875X3P!9Z6_6MPFO5CWS5Co@XKmdbU0!)FsS8EF1`7l?-)#YN z#QK;8hXMyj?G8&PODFLrtEdbGbVr`?r)Ct-9Mn`}>rwrla9EURw9Ns&zH(;h*{`=*;n{ImtMNi&?qu>QCA~+IEh^7y3Jxv-t9-+n30dnKR+^v9 z+!ZqlFxV~{EbfkqWHf~?<+8_4DQ*QwF9%qClpaTTn%uo85B=&D8#FZZ1fPFtseb_& zS8!+FgCb9tx0-)!F4x%fTLQ{swf4heA$B~$E-YVKaoc$e8H7x#f{1AA=xd*5kE-k*M(gTITa)5S+XMO@s;Dk)^JgSEPwgms5C$l62MWJ!?g2y& zhb3oEPQWi&SRR^lvx`M1Ckshs4!-SyZOkh8w|scW=IptrVdJoMfx^Gw3!HrU%7l zZQTdG4Q`3DI}M14!QOoGKD^hwdk_1-F1N{dc1LmG-3uu|Le#Zt3du38ABfUPQjo89#A2|ZwtL2m-60sWC;6cOd=pRrc_|1;Gyp87yIH z)Hl>Wl#y0FL{trt_W^%{1wny?3wA_G1bvJx;=>~36Q1U0Bp*TrA^Qmn1qIT;*Xb+R zIxGvhwEQbDXz1e2TkZBfKfiS4_Vm8>*qQaY`1rn9|Vi z>Bl#2IO4v>dXAV*+e(~b(gVnE^^eUO&| z14n~+lnMY)Dp6_t@#4>4$RLltZ~Fp|ul{D#AM^iOwPN~x|7rf;5C0ef2^~faU!;=r z4k(a0lmGzEUk;z=EBC9z(+exAJX-L6?8;b&`$mX z#|awno50iS{T=xj)?bA7uTy(;j%^cTwjK-s7zPIbNPj@$!~DWIRT(`i+n2U__9h0# z)+Y3hu8#lf<=vlt{$`GkK=;iL;n^UdEC@*d15oJ6@8|dr?B7flWGBD?6vxN$`-b%w z_P&5V{4XY}q#+|HC(ZE33=2Tfdn7!L|7C`cM?Ta3kwW^56Q)pFjsUYeQQrIu|o@M-zHGo0ossYhSry`UW&-Ptf?A`BH$WUU1M` zF?9ey`sbgigfIRj)xz#SR5%bV0z}3CJ#|xoO5=Ek*KI8V62L+P^;1xv@Bb6^`?)2u zV#PERgv$nvznSDCZc2?%odZ-kk3H|lpgOxl{if&rZ&3f^^3UXd2r3N7-s4Po!Yz=! zp4&g$OXUIePeC=bGBC2F|8DOjXr7V(Y_A}QN(Izq-=P8kp3wYE4Pb=+chv8x!~+WE zBlRCrDGIcRNScl!AU}fyu!B71{2_tYG=D+;FFon6D+x2(|6NJ6fmRYpARRuS&heXQ zKkBgEmX6H@Mf&k1F7ktpD0%qbMEk!8`f+jd3rYWw2J@iC8TgrY#<&>{K;VfE5d1+> zp91{f1M**#I9t;h*;+rYujmXM984VltorW>k_)mX6=YHI?=3n6=_zQqK27(A1bk_Q z`AJU`JjVZ3&-c`s2kA%y>3KZ4{3c{DpeE00@mYxn6t2f65B$NO&2XH5t>?$4{{X`7 zRj-&nj{kuFYt!fc0iP9#^Z%1Ee^>IDB>#{o>!85sYbeZKBtQXBc%J+e7`>=}Z^Yjc zj;lSGoWYnh5X#5db&=7Y6RuSlZkDFPQFsAd~I?8-@w?TmL)%vdhw0M>?KVGiUj2F7kWt%B5T`-4YIGrZKZ} zpNvk8%FIe!O>M=&lnK>?TnPdk6Pap_>8o>V#=2S1_{3oH4R6np4^`FdY5I|kRUE?6 z}pz9Ar0k)QG!mO`FetyBTZo(Iuz`fV=jeFag?*&hguhRm7J-_F@Q7f+6PO_i( z29bO<_0=`X&G$qM$#!RHvGXWjnp)S8>9ehL?8HjJoKttI(fq>8%(&ZyI0Af@Qh=j< z_vut9KMWsee&Kvz?6tAQpIW<0;yrhc$3OC5%qen|@Q+>3?~L0WBOpmHc>5n;-0qs= zw2v;FjtmccMweHK04Wv z<=Yd|ccViYm)@nxl%HG02Ek(<(dFM#wS|E~W{T6MZt#7d2XnhiwU=hDc zfHPe*o9EnSNaw(H$C^W@zrLXfly`>2fd@AslCSQzuKLA~_k68ww{_srd%e4>%5~@J z&W>gBr+C|YzH{w@sT57ZT|Ot_%s1$YmvDLS)rKpBvG(rsI@H?2Xp=x>MCU57et`j{ zIp8)7#@*Mx#8vT2aVvSmJ;JK{vk*=&3;An%V_+vV^!5EvOof-|W8=)wt|YK63;85F z%gDC6sU@`N`T2HZn>cxWV?Y@QG&hHTxJ8{HBsNYHeeGKh4b?oqMU~y7`G_h~P^euT zgIng~?#oQTpm%l)X)`wm0yW<+5g%rzTaisBUs(h;$xn>sr*2%Db9U|NgMIpUG~wS1 z`H%Q6(Y}URRw+KBKGkI$^e!>JhVB0+icM8O!~+KP)a|_DsMP&grB+GU7*Sqj{D?A} zo@SCCfn_$wXT?gBdCjnPn!y7OXE`1$qd5~%{O%L{4;4DDw^dr9(jtYpey)b8}Yntu;wT>VjCGW^QCREN1Bf7Z`$ zeu?Hh9I;_G%A>C<;#Z6KtiX){3~g##$&C0M*wOq4B6uHR+iQO%m@vF)&iQG6v1v5! zh%mV|J}~}k+%}Bc8UEq#Gy;)IF|Wyp>WN#LU07Rm*mIQQi1Ip*=*e5=j9?`9jNCDR z*tr-i%m7_%*Pe9qLm2uB1-)?kE(Q7_YgZBI>B- z-J};X!LCz9{kdz9{O>o&vW0u(`zR-i=4`l9_)AQc*;q1`6bH~`? zLn(?UBra<+;AKvu(8GEx|2ch_k7Ng=2=4{_ouz%Y~)h`P-|= zFXDNFw-MWkmW5;R7WtePZ`y}Hxl(DODjWUHwxsIjyd%gJyClZh#ZJ;yK+3Z>qBAF$ zuHojH>E}Op8+IAY+k(NH)G48CU);9DO)q&Lmd>FQ&H~L{e&>1QP_(eIwTZK{M!8JW z3OZaVgju-eQ~W%;#H1ms*#uE~bkYSPp8^Rtq1w-3?`Vxhw2vCOCL7(Zc4YM6o3V;b z*~g2^0;1&ScwCVs&Gj20%~*_hG{>q|Ib~gep5tYMKyzJUOJBF%GC<-C8_9zM6q34> z?J-<0>PUv=)vF%&1eft^Xh+##7DWB{!?>PJlZ?tBMbY(Yg{^sYd*pce73bDqp zh>n?V?MhX00NKG{QAxy_QgFKh4rFq$a_6rg05Nwj1=I zlJ;^qUbajcOD?EGS+yr37!D!L8l0axOtYuM>Oy4tT$MIME+S#slBxzJvF~wI9ZAIH z5z_+XoO|v!?znhn@eu=mmheOw+ciZLFRSAJlIS*v$GAA7=jOfT8)@8&b77f?ioYQ; zA&yCq(bpJwlqt$~LWn6WQ0v6Lg3EF@&El(Nie2F=B8+5}wWLYHXzN?gwu0Yl5C0B! zfXY#cXj@@}*d`~U(fTZ;k0H81PX4}3KVX(#q3(&MHC;jYbLAuWJU=ZvNAqF^jV&Kb zS$>OtahiYRf#hOf#+O3+>1{yyP23{76Xc|PAU6Tbf)m7;3fABra^ij}!K=2*=MOi{ zcjPY0TI-vxGjOas$-WR(5N|iaYi1Pt)$EWwPCv)hzb5i2Huu>%weB8 zuHX~ox&3@;Pw}-QIS(V~hQ=%S6*n?2Yj~Aq)h3}5$`&+`4geaM<3DdNEZ@dlB+O9Q z&2f`E=lblLim~*}qbpN(qMu zaWCbj2?atwq+dT8efGJhud^Wac>wEo_D8C+8HqWm(Y`ae1tC;I#l#n#mb|~`t54=+ z97H~MOtv3@yG`CP1 zMzFlxBjNN@xacM`$^;Jk^{dZ$21Xy{sIz2i6`-g0)86~pxquX1^b0FAH-w^h4S~%AqO_yO;^FoMoz|$=hGKPKOXKt_^atRe3}F;wPphs?KR`D zlEl%LNa)(RwgGud2M#<&k#eRXtA&bfW9|wvQ;r8BL*=OxnuIx181ADnJ$v15==^A$ zuKSrK3pP+2AMw*$j(k?akvDVO9G%DY>+?(xXL#cC*OFsq&<9JK@Q;V8`<=&`p1bQR z5a=cQyXNKLhX32(#$1-4ru`QS%q5cAGB zUNBec9Yb|O#ilpats01<<4nhb`;3FsYY2Zq{8;+Im;J%Ft^JhJfafBw95H00mDIiX zdAqQTzN>hI`}DbmzA(|}q^)mkKXK+%x714Ly{@f?JQC=n=+nM}q7!vz$gU6Jn+R`) z-=bODer51pIJc|P)`Tzb1)0OqYYc|hgQbbk<34^;g)YTUCqL~%c1wx05mc`O%?V-g z<*heGC-t*9!IJj7`5#bD*arU8o;_Vd=OxI|4|N5{N~wi5uG9hyp6N;r@$THs+EvYH zt9%Am;baSqhrt#rDvpa~?gdqiHOPn-Z1i`tx5^^AS<6I~2*J;dqok>e)z0XNz(U5! ze>y`l0!g2Y4M0U;@q$&Y*S1J;ZhbG!Rs|zxba=Hy!o+qM9Hi$*QU@GeI(D>^omWm? zL06wCU;D)rpo^E%0}@n&KkJ?cg|=EE)6yn}5(}xP+Q*eH3%PJDM=k2k^|eX#Vn=5K z1?vJ{ZfDY+3SM(CQvdc#Bsg>U-HLR_0V>;V5BP%TT>vN>tk6=6YC^=xr=+7kD&4)a z&}wtiMNMeU#2$?Qlk?Q$5vHq}sKpRr(n;l47SSj90w?QuV$}S#H*mqZrEx+MEzn87 zVVhPz7|BKM9BU;ORZ1yufg8ruwm~x0{$Oc9Ba-uIhMWAajbDQhs`vNk#QMkAApqW~ zR_|U@xh-S+(s@>5Er)&tVYZVD(yP5ZSS3`5lnG4acd_ePRXwL+8Cykh?ZxgIaUh6I zU+7oD5Y6i3VF%xv7B2^Ww2>noeYG|Gvu&TRy|&6FWAmy3HEBr0k)4G0HK4T=P(b#v z7f-k7^>EQTZ>aoNS56s7B|X9Av%NrVC?PK}VDo`+nS3tk3nLpyWcmvBZmpYHuSTu# zr69y4KX=7qaCEe0iVULH zdO#`^i;DFx*B3IC-JA6K(6vi?IHIc5j9`Z__t9gG!Wx4T%p8vmXXPFXlt$FDgD3&{ zOoe)89Dj*BJGN7=F{zMk%*+>pP4>8Ci(qB;NgJgm#+uQXx=}hX(9v%4$;sr?DTB^Z z4i6^Zog&Qg(^3)(&xXYl&XO^)IY#b5aPebpF5FCQR)Ats)XAg5y9@CH*fb#vT+wa{ zy<1dlt7TX1DQaH{VmgPj=wdx>pFr&4#^wZa#d)jLMPYH748^O;%b4=*$=?b246z|` zGO#K;bSQXt{tIAYfmjIoo~O^lf!FdVE~Oiir)Uuw@fWRX;XT}ED!5OS$zn4EWhVMuEN`xpUSpC5SSGWdR?JY2Bf7HCziP_fVHPDU=Be^@>v!H4zxSC>fhST##i{|fw9-m_SXXT zRqzc3LamKCxEk$5-fxwT-JN`akqhO5c&bzy%>)wLf_7Nz!3f))c35s-@Hb@1{raj= z>%?lcQEky$Q}z-O{zqaolA|<&U4Cm>(GFHd(+YS2xoQc+rE2{w+FLA&+JE`2CSRJv zH7}6SYICx@q9|U%#b{rCL2V<_3BT9E_e~?OAd(W|6By?2UZ+EUOMVbVVi}?6aHmq5 z7zZ&9+)J*aP6vC8Mp9j)p6Djddao+re?QhpzY6skky6>a#s{p}W7SZjuj+4|h_r=r32Q_4Y@mZXH*tAJqpbL1XGlOO z&VK!0ot@Cj{$$xq@s|T;FeBLs?Wq79M}t~v88Gj3g=5j>Q|+nPy|P={Vx}1sdxn%8 zMX%agL1KpEoANcd(r40&5z6NYpL7G*BL}7r@(qmg=k--Y>IO2sYF-)@tFv^=R59go z-Lsa7Ib*J1%R~4{`6gXEO@rbb%Ww>DT3q3BT{g2cR95wW zd)YL*+cMeyyVRWXZ$+P^#St2gi60z?55ENp>caK4K3Z#K7m^gET8&`fQl;Lkcaa#u zxs4E-1(otX67IMB9SU+~B*>k@KX<1}1lKlk5JW$m{ z#@uS*eXr^@_?TYOf5P0z|BF;AlpbH})5aU%EytE}U-LUUML{=DG7}LZ0XuE`@ik_o z;D(?rhYmt3b*4_a4F&b$A!#StOT_c~!UMWXra zr6g*U(m9qU`Q+ovn79^>Dv^^xO-lv3N5cfbtF1h|H@d6~zk4=xr|WUMr&Cd8a}Zb_ z&^Y_CrHv$T+lI^Rl}vsRs|ta=jY^=hq5M8+{E|0M=tBq4S9ul*Zu>qx>uD^HU4MAp zH(Q99%eWazLu$s9w z$!Y1F8bS)eR>_ZF3TOh{1DoA0HpoY~7rOMQXWGeumS{WkpjwWaC12bHb@M>7FrZ5Q zx*oPT{|Q@|k44>K(h}AXVy1B#8>@2NUefVLD^$^b7tG7mjfeO9)mKL4QIKGE+-1Ir@6D4xUUT^=Jw`x=YNXb$CU$eGR;Q%;Z)%R-^<#!vaREY;ghlBM#z)7t_6GF zg~n3?AhBr$9rottDv$-imS43#;ID1Y+cC)7p9i!h2d!=^c zG>2jkgI5|RzYp;KNl;^|l%r-Rs+F5Y60UPX&AgnBmxfm^Po$ht6rW-$OEMo$lxB!4 z8^+CioXxLEatQt*9}2-%&xmf=6ebQUP3Cb)*miTTg;lLWb5b&rOSw^2DIEsyJ=}8& zT-zNWUPj#-93B#qV;FucWT>%Yy4X6fjd(_xZP^I`i__)6$${ zY8iYVGJid2CM z)pTL^Fw=2wxS)U+PmHYA8f;##2Z5kzNB-oaMj@$gvv$9rY(C)4Oc+JC`Y`Fm>3jf{ z$v7)y=>TuJFZHM2pQEB+=o7w9mC%wx@HL2mWos+RG4-zd{KW_lWO@&+dcbetI^te! zdZ|SU&m86cW$JG0?l|>I<)vFGg@Kh3e#2OtppF=i$851+$0gQ^_xWlT!kTw;s|dgI zUf{Flz}yJXdr=wUb>fCAK^}XfZarD5k^!5cDWStE}oTgho6d9Tlq0TPPEBJRUCA6hn zlnBs+)`BqNiYCjQ-j18;phjwe2L7Wg+NBoe*D2kYo)WKin}o~?t4U(gkPaB4(tCm&eN+O&Q;fWw5bU z-qtd(%8AnO;?{4xwGzk$?X_mhW6q&1dj5IH)$vlKJj0>y4Cp$0s?8~UnfP%lpXq=@ z;~kALi-0h-&U?(aVKP6GfroRRt+2C6rk^V&q39R2qK29&{<3n;mj35xh+_=mV_xR7 zV>^|<=I(4*`)KiPxlNIc6*nUIZtUw`IT$^g=ghn@l zo6#(8hlX!zk2leAQg_ghY$p$&agL3c-FUw;l0ma$Y{iYN3WZRnXtb%iaG|`0M_u0H z45zB9X1$S`z30$Oh`V$DcUkfq(%ysSOltmcy?|)uk&M!4*al+^=P12^%$=50W;e(~ z`KaCD3efUkPumJO=Omsq4Ik6?^HvgqO(fGu#a7VT_Ic1JS9jNI5oz60q+2n=8@mAx zAFhR+?>j_JK(uQFHY&IXG-5vkmY8)oyK-ncB=d-ALS`&%f3C9gD<}GZlFI$Pn0mzD z&1)9Ik7drWNH}mC$h|4dm}q1&cj%OVW4o= zg^FNe$O%`x)6j*Ze#+`yg&&(BM@1_7$rn*QBw#H)Lu8XXK8XCz#hSg^cX)uQ=}@lY z;B4Ou0oUvY!eZit8b(e)jyyKC8yODRUbNBAvHWb8JLPe<)nlEZU_Uf_%+Imbm|`=h zm`?Hwb=KCm1;m=S#(bbC4oSw>u|fr&!AC&#KQf9=w}bh9Ab*raJ?G@Uzb|?e*QlH+ zYk0k_>mG{z1zAr7u;b~UWQE197miNSXc*=?>8(FID#NQ;H<)XPozMN&pA>3xm>9mh z=7IC=h$IJ0N0}H;!oW2mVf&%mH9=@ou$Z0O)S1*=}?Mcf5Zz?k( z;}nn7@})VeCsFn{<=-Kn#8p3Bj4<(XcL>xThqm}5)DX#2whtT5rAnyqM(14ABYPMa zX>#A%F0ReYXY7YAPY8BvhM>4Ptn5QR+EWvitmUUhRq-@5T$h+8)XZ>@2j?L`O&PKp zVyEiyfzJs_WsAQLJk|8a2#3b@{()>4pqAQG%R8<&BSsx#m8tQ<+}MzPzjtwm%iWGW zG^=2;n)y>P!HKS_`HTifuWtA-p$Crj33Slhm0GsuP#fFqH4qx`D=CoXhZwC)Cu2Yp zgDOAW-IV9s0z0C3HTI$Wv;_tPb)2|}mgJF3+kPq0GWVA?sl@0x2Ocli5dP317L~_j zMtxt?HxKX3>2w^noU;G^0MgUy=tlY!k*9;LxVyWW>6?%R%(?2Ed zYxB#FgPhT{O%AjPF@KdEFSQrfP^ao!P+8ua=z5metZ@FEYt6?tD|L#p4EDD6s{J** z?D_5$2DCPYVOrc9U zsT5?g5y~%S<6GMNS5*LAom0g-ea&aF~gMDy;z{P6cGw3{}?r~A#{)aW?aUmtD#Bg#rk?M>= zOTfPYwjvchK+&T2xFq-u^}~>-A4ev`xO>-HXFC5u+TOGJ7`SIxlCJX~IUydAri5D5vwNiFQ^~-e ze^lQ?HsBYNz^W>Y+)W(0ttdA_wmdm6Q(6zPl(F5%*c=q7s~z6TY63b4Fc-j0r^d@i zMD7y%jpy&GZF;@vON?U`@0CcG)FkN@AfkVe^zNZ~A|A2@KAJFFlIipbWXlmBT2amO z4d~nO>`!fKu+>1CcF^#lJM!+2s}pYY#PY) zxPbzonGjLFo^D&bO#U_Zg8em;;<}%b7eSC^a9?I1mFF(DcJ8fPprKo$LP>!FEtm@?e?9(|r9+~wnJNlbzUO9M-;58)a z{@bE8CNKXEvx;n3jGP-E1nzwDZ*k=-#o7%r!&dJ#+-8jjWk6R;wtxXYa5$o5CY}X1 zC?f(jT$?#@`^cL`n_&>i)AyH%W*1GG%mS$RV5s^6?&Mn<^ z(^HZwdur4_WP?cM7>me9Y&C-iL9*Q|OAfVrqdd1*xwg1LM{nfzy4pXcdWW{>pEm|I z!y|R?xe~q7!n3b%d@ztJuVcqdzp13N#>T5sP!0NZ<9~g59Fd>N?}@p@ zT1KIp2r%62* zPtGbBNDa7ejNX?83hN6eSU-7()M=N zjaPEx9eFa3W!uS}9-ida+z{TUWr@MeGt+-|u7#Wq9`tXQ<0D_e5pc*Po{w!2xP+6X z#i{e$&r)}i(1#d{8TG*MS4Jf%iZ1rzlBwaKzhv`I$S6aqeE3nDKE%#`9df3UeCC&$ zJkHqXUX=n+?Ik?ld3&tS`pQqoXjrY|1$2f|oj_ejRDzlA)^ujNN+5}x4lbWViY^XCj;WBq@oG04owy5w;sg}+N8_OtT71C| z*GRh{=X*0~G|h4Zx)A|KXdkTiT!}Mrr9A`s9|H4OUwcae z{0T@Ksx!3opv>>gX2V)~DzCF>Dfya}N!{on`@L2vyFfhoYC_8B1nmnZFxj3`nQ0FY zZ+Ap&{FOzXOx*crb<}oB>Tz(>zjW&{-ccA4&(aOOvxy@7vQDYLwHNE2PW$6Mb-nh`#y-4Q`1KTK+dxQCrp`wReZlVd-%Dq= z5s_SSSGkZcN|NUn!C1>q^1hPB=Cw~8W1D*c`^RTF^;zS}A672L6XSsbK&ijWbX zFq2cgu9(_*P}iKrb99o0?<0zqNfZk{A|-0kiZ28zbmZee7m{-NcPrEI_E=??zMO3Q zhx@F2z^+MSZ!Z-9O1bh>`(u1T7BeEIvvMs`lUD82`>PXPZ2bZRhcJTC()Y-7 zKwUq^IDTdsfMkg^!N}R$xVR#0A&yEOU@i&#o#_TegBcH)ToE}FQ`}rdN9BC9Ho6ou z>Q;qTZHoO)*VD=x+EaoF?HSsR4NPg_2;wajs#zkPl|c<>sd|C(xwHTXZ{J-@%;#Ge za>usg>vhfEoV^F-?ej@2)K#dl<=5yoM8FclE4k_G&IKhcPrzF^?oXD6v>lx+szL7P zJ+j7f%lFRWOe5-Z#s<}QbzIPEO~0?~tkgyY^HIe~P;Q_ypZfheqcK>^4|A^`hW=K{ zB%1tr+Pv$wM`|%>dl~GP0s$1Um*ZyB)n9uYqLgW&eV%K~1MkieNWdZeDHZWcDEy}4 zsMDRhd>Y69L>|+G+E~knkH$!kUz@k*8VL-gOU%mDoOe%$MeB2Tu4b<1I%?!RSATJ2 z+KK+q2y1;8wmaf#DEy-d9HlAirRz?OFntyi=%DUp_oIIa4qEges(744JWpOjX9HZN zVubzkM^q$|q_AEi7r@&PcLKE_3q3G^$Nw$QalVtwl4tW!zizTTrn^D0*41%-J$Kg! ztOIM{2fB;<86psL?ZRSG0ey^fy&w~Z0U^*^QqDPx0Rac$=8|T4xm(R8Z}NI#pOxvief36xC14Jb4?l4ms9keiAV-63OdC8tz8XTRSMv+zApH+vSG$XEG;H4~AL-@Fu-o5z`(pZ?bM^?9^u)nI5OpO?S4vTX4h+YYrGf zz&l!sanq|sAu1rDkDpE{%MBX!^`hpP>455&4|BygK>5SxrBuA2c#xj*!d0A0q?AuK zeZ3ohi!!(K`I5)q8mecQa|=`KYS#)WH#OGeYnMhAWh%U?AZDFwH%Q{OgDAmudE&MW zzc>$>^5d3!v*=O^H)}1(d_cjC?GhPFAENW0ZoBsULeAo$7pef3W;eyv z;YxR;0_%gZ^O?pQih)z3p@O_gKbrD{SuwAOtr0v$6;{ffLUnrVNGUn6F;IT|>(9hF z)8G_~NhTLaygCq*dZt`M-ehFem=d7LD)TkAO*&pKOsz(%NB1-Gf1_XO=xTgY-j>j%ia8-RA4&y47=>K{!Z++GFOKn1~R>J5j zu&a>TrTn;A7Z8Ah5nK3UkS$K}ce;#+8pY_seT9`&s{j}r@Ms~~Rk<004`vtLD1NyF z^Y{k+`~oguKvvE&+=EmSeO-1{rNrx_@*b0h%x*LA)x?g7!C!)Ae87?5ZR$mR3SZUy4p;n$x@yVOPrb{JUH&ScX!HVwdd^Qt9Zzd7Lz3vG};M_1B)Wuce#S z@0<@oS5uFTF_7t@m4Ev>6phPAcI}Wi=kji7MF8$r@-1tY(&hKu-hM<7TeNd1o8;rc z-49A+p1V*88jE7yJwxm5Yh7yjt(s*H^Uq95y>sr+<;gncchjrn$9thA0=eM=UeCVa zom#o^P+dA*e82&m;n2L-unb`*ts&Liq}Q-8u{-))4S;gJ)nf9y&M-h9T`A*%zKPREeuMO5zVX1b*|=~&f6 zHLq_Hukc!^q~<&UyF&jFxubUVM&2>4$iQqB#@zT;GFhZtWnqSNU?8!TN9tTHSsw#c z-Z!-U?mD^BprzSHG74PTv9QrcB?0DX z)#v$d{Yt{t&q&8%-wz%pr}oz!}@RdQ!?2%bs#zegZZactD2GhhF^iUWxFpJ6k{Rb+*D!ANnql zjC?9qy=4|pniEN}z^_hoMVkdO^6syk$IS)#x&v*Ia6onls&?#`jmZ^u0P#omb(w)eD97R zi!ls4*+^T;rT3wx)w1up=-Y`fSbNDt&dK-+TUXBRNVA%+Y+;_;yCOsDztugq2MB2_ zAX$X3Dw3XE%Vn>C2*GP1J(K#Ud|3e#G;#WiLpxgrl!qzMnccur8nkUq4-+7uvS~Bm%lX>>m7mfGB1gJ1OET zws=xaO%6h`u|JdussDX%go~0n$6u8loMlXI5uw_wN+oRTM)ByI(-FxQAG{{!+2fW= zN;Yr4mWgYxDVYLK#o*haJw763xZfH930#SQ}#iQmZhNEB# zj-w+FQkSh08`)>qvVROU5SrmiREY9)+Y0!lnb{7ta zyro9C5`*jbD~T0avH2I-ed$wvRsd=56K8=mz`g;8gdpeN)%W=Il|^6sa!bECHg7~x zbbE=Y-8lql;>j9(yJC%zq8{7JdyZ)O` z-&ddRMfasxt@jUg-lF}UXTfHsAodYF+IOG5=!}d)-G-xytxc)6j*dn`%ta^n`)Aub zkaMwaL(!3d^`r!qiU5zmQetmPUi(9BQUV;M$;rH@j^rQd&LW z$xNyFqp*~g-WmWiV zyv{}g9wiT6udv1K=5|Bf9{>CK>U;D`B;|;g)u4m;Z@ShGGl&CH;zGZJsLpR8iz26V zO3>3b9*{pq!@Qd<#`!0-reX}bzZ_s4EoZ4uq#?Rt(xNcENb!em%bYlSSQepSdumaW zajxxt86Js^=d-o554LF&DK_bp@b!f7Jf?itHX$DnKt20qqlWeL;A?-l9U4Wx7VH>( z1XuRkopzAKDC@~Cq@d$86IThEdS#`5em_rg9Nv8SQ-;Q}s;-7PM>I|L~3arGIbi^-XKoJWy~lDH8LKBusVQxS^Y=_htk>jx2Tu@M>$hGM-DYUVC=VImAS7nm}V!_u$075OeoczcA6L{~cfA>yBI>f-@djvB6mzE>qV-Vyu-E_>*y-;{kBMebN1~c79Ey!PTzpf5pUY2ez#^O zfa`if#(=(l20?~W*RI;}rTK*GaoM{Ycu}1!-2QHJ4dY}v`BzK9@cJ-fXK1Y=C@K75 zr}b>Bni4RH#ri6PiTo3A|?&kl29C+N5#LBJ%qJ0{)I?OGedH9;^uwp-NWx33#`h;g624 z#pvH$)oFm(ML87Y#92bXT7(T{L`IPo8sSzf2<~z5nm6K?|KoqTf~LXPn8P+bqtlwm zOs@?EHm%#%EtocfOV?IM{x!gHW$qb*#K=v7otj917xY)H)-co0cl(*E>{Kg8MaRKv zL2!7?Z+aKA0ZgQKAJ04WuG&dyW4qDN_p8A?psez4o%Mk{OVz>|`Y6v*=U1aM*7ZVj zx|YANl_`bJ%rrzVY4Iy*S}o~5=6!Rnu~$u2F;A5)5ibb`LMQ-}x#7#k(~MrO2$i4l zR)m+%NeC5)tMtxMz4-Gb{7V&0;El%fwu=1o7%aJIH?{|CRA9We2P^Da^oj8&@uTs^ zZNlXu{)*@Yf^-gjcUkMm2_f$v47? zVEfd-kV(ai%Ou%KOHvsICua1dlZezyA{gbcv@BPGN6x*6O|(#AYZH{DEJ#FoYkFZK z-Cw8>A4@sw4~eIlP_yUzc$!hX42MZCx_Nlm_saYlg)>v9oE`gYw`dPXn~buJC}fvE zcNeqX*_?B3_pyNS7(OcU@Ed_iiDa<9m#>v`XAq7KC)qBQA*h0x|o%B~eBb&Lj?hNwW(zR!+%`m^shnFnnw&P4~;GxOjI zB1@{u?dF@mg&bIj%KIW2r_I%Y`Kw|?&2*ij_uxYu^VZf&>otp3kijQ&JXOlC6>8d? zxat*HDv^@sjxtrz#~NpicDq&D1muI09LiP8_DT?0&F=593IyeiT^q2f>+gkm0OWLe z#HBR@-HcCovt>DdBz>w?csa#m3W9>mo7KzD@_vWMfwK>Tp;qsc$cdKgg{%tKjW>6S zdy~jfshVbHGDxbMbpvamkaTx?9Y+i87$#z8(42^n4S*|}&KAJ7&Emvm!U^N=UgfHO zAdfU8(PU^{CvW&*uShQU8XP%Nme%rFV|^??mWJy|&~g&7ZDTZ9*TSeo?tvV?wB)Q| zXML$lA~YL`lr`y94~R(HFp8wt(V$dc1UpK|;lY`$W$?JB}zXf}eeNVWrYC~<726Jz6@K{1} zlaK($BcExqoq^4+DTwkTKSMXoG)NxC(uQyA*sdO>=;}n~XD9?}2Yx*S72H-Ml=7bN zzLsU0%=GP_(u+~i5CrehSwR~v%}TZttLW(7CKRvO!$O18xpG&)1MG$Foen_|tr{yz z#yk=`VVqWQO*%!v`GtC0=M(#rnJT5)vD&j7hUN0QS95^G^KSvlYI;)Z?PlRUN37Vw zIQ>U4#Z!WYz6yF*@aH>ffxwfMw zs<{>oSFmV6?B7Q#&1{7h0&?L1v%kf&s&^_OV)8?J0tX7tdN7C&&V8{2R(s9I(Xe3< zC0`5bt7p#3)i=y9@~`GmD)^DAcw zvMb+UVy;6Bx6}~31t_MaJtq@@e}cOH>TJpdhL&+s7ZP1#oNQm_^srh6RG^cClD8FX zI?wdV30#3@Xd=&Fb6{bNHQ4rw3>1C)+KB;L&+mC{+D`p#G1TNAGh_7fjr1jj130SYvR6u;>{zk1H+c6gqgG;>Y+i6^7Bd6 z>1AkPO>+^R!;R@VpS^t|^wX*1cY6bl-l^~9*FgSjy&F-wY8TgwAZ2yHdL zRf4-uxya+}?&K1}yrp>>L)0S#chLdaFGDV$QM-A@r}Y+Rzn7JDhD{U1(dBBewqen& z%i!-2ctvb!Fh0}9PQeyQb_@&j4Q(3Q19w|`?!b$MfA~AElkghkehj$$){_GJ>ZqbZ zf%YI-$knR(Fn)JyFoIb!s=@L6urh2(`5yxmOmt$M^ATfg)RJx4r6P@p|LTFHazyFk zamusNI-|xxKE-P0ZEE;lpL4;C9We+>CGy=(NBIBV(?PrN%=}j58o@22gESqwGdgD3 zJh{H~B^*pTL~XSg$5Z9~$_%a35}k1&GiC@Y3JkrOZMu{0@pbyqeaw2`)=`@od`1ed zJgSS)J%t~)9U^&QcUZJg__@mzpgm#y7Hlg963Jo3zV?P)u%vl^gv81;^qQS~CDyIq z-$`WZz9PIR4oCApe;9b`eBgE9UH_%kqPJ3M;`}%$|&Y! zg2_O(5LFqNl?VzfP}+OuqSiO%uiH#MHIl&-*@G&cQeVl?QtD{RkL&h!D3;TM|CqcN z*_w{rK5BmqN(1K959zA*@u|U9#qJ{uLr%IBm1>xs13E zm_|_{jloOk?{^T^&?R+qX60@1nPGcYv_=k#x!o6a_ePpT;J}9N5jgfg(MTXC)|6Nb zCnY%%GfGE$%+acr9Qrt89Z$3%ss` zz1QSGioEUCxh?BT--e1QtU|^QTeO`*6ii)Pz*B!Z;MW6-%-vDqxhBgCw`vY+!U*{L zdygjM?XT=_r);&op_UWQ`T-Wzu zWJ&T07?1h6->!Fp3u@kaGZt59*p%kjS0IT`%g!p0xDG@Sx!e+IIz{4}b?r$kq;CQx zgEu{sePU#=^*P_Otj)L}?qXYwt+j}H3EJ?Vhq3OSCwqg!Py{P0gCBgCxX`J%joa+K@Q`;~3mwv8^EU0t?q+qP|X*|u%lwt0I0an6c$_Fl1XGG;tE zF6PagV~mV9-%J5!$8(_+e(afX7yD%HlvC@1yJ(Pa%aP?j{xoK*kH&@vj8$ zfl|G`)Tw3U>GK04<=KcE)qoQQ&s5kBG-)oTw!aXv87~l%6-T$V4R}l(JX1MqP&S%* zLJ{y7;rMv}T@s->(b2TY2sM&Sg{see8S;HapoPonnbon#upC?U)nzo;QaMM?I@Ihw-RecJDu;lRZ?~z9yld?|3R`7br7Iy>o@`;!UP8(8EVhsJPz0Jti1hZDb z=WiHae;vmynn0{U3(_qC=pw-!$Bw!rP^2<>?2V~yxUS#?G%fZ_T0B=T%^3K6>c5WU zw6}@G8XUNU)~h(tE6{l2VQR1%eY|r<1(=uvMB>r1pDzum!Qb`&mB>oNw|a#1`uu+b zFH|CC>CHa;t>nhZgQsyEL7L(6EC-tAQ@H*jo9B#^aeyd3CY5_x+r*&wRX_7Werby6 zmK3GGxV(QICdZwtu}B+OoU3M(Am@FmQs^ zm-(z~)5Q@Lv^H!P*UW@L#2n@qA0zLS;Qf=_1&v=OUb+;0I~Ly`3rZkKwvFw!5>ZKe z35lpj;Hh=1k!Tv$`D;Vm@sO?P)_$=c@EFb^bt=}3>^|}{MC7@0o12>nOLGzP=a7J1 z^W@k>MC)?w4`x@oX~N48%%jP)j44=`jgLsFVc+8I@OHa1>xF|Kh!OI- z$uf8~sY@ijr{g+@X#dGo#4L|;wzGF)$v_aHZkv^6+^{N*%Nu=t)#~e|+$qNK;osI& zy+~1Jc^2epuj+I_&WK|-X45-Tg&3EyK_SyN_4l=h(mOn?LyQ+;`ruJepN6rvm5Du? z)RJ2T!_wC}#{0i!W<09a4zxx^)s1nOh^a7aQIohqxfn>kvPxT4{yhn|*g^57qjh6|vfmBcI$7ZbHGJ;3+=RW~G*))GVyCfuZZ0I{H3XDMx1~?xn0?&a_ zRoqjn?V)>TC??c<-mfn&Jte(5aOpx86pvU2l#7S&?3jF2r#4|35J)M!52v-9_Eu6U zx7*s3MDAgq|DDjH&uSimgs?Asz{aMf>fLr%_;HVUxALS~b}n=qsL^Qha{BVx_As4} zxSTm2@ltVQmL%-^pmhKd=QzY=m;oLNu64tO$M}@$F?Yz-iOcOQMoS*W9Oh+7eam4l zl!D>Mb_hX+4U3x*_*lQ9NgY3CFBbm>SzBxs(J?}icBXw=!eLRag1p$vC;ZDV=4Q?35{{xy?;{iSKbD=p!2{n zlJa0s$HwVJ(~M+?HNOAv1P1?o5{1?%k7pSi5K$47+Bo+V;E*OzfzRe=@(k;^C`Lk5@@_W&)KFk<(X4g}a&ReQj@1 z8%4s0wQ?Z0)S?#4ao73#u?2bDUqhg2t%#gjReMz8(gNJLxA56ftX>?Q2f2wyO81Z< zlI(DC?|u2i89K5sI{wksH~ZDYwU*adI?izWyx!Hz$3+>3yzA_t2w2#gMv5c4aV2S- zn+4u!l}G8Rk>BGjMh6(RQ989*0r+ac7=_X3xF&v1iSjl2fzWskJS9^R3l8)r=vj-L z?OF0-6QZKWPeiAL4f?tuvkN8p6ku*Egk-095qcZ)*KE@qLsx*J zQM#(k#^=2lFXq}0oh#T7CEP6Ow5PZ} zCP#%^|Jrmyn0BGeu9;4wAhX0kC?uDhx4#H(EMuPgna4cIL`|F8A-?BjleNb5a$#f5 z!hWMx0kNgALB0Z;UsPeBCO#=xgHAo|l*?%y17WUlyJP6-ZkmA-pky7SarL{FJw8L;uiW1QflD+kkH)vwoq;+t} zr5iYPE7Wdn3pTZN^*W^0i*fZff=-Z|tnsGB5>W!!oF>T6)@_!=&Fb$A&eEe@!hk|&^^^3`AFiwC)@$ARN2&X*N^kv zI-(C{@$O|VBYS@{xUJ{s!Of=#j8l9Mu6V)dns3}0;`n6nRs@g4JNZ}8yS6WehX}WXKt_I!>VFScm@c-aUo z^CZDpwJ!eqx*34yz}$=v@-9koQ_BNqEBqC?nc!Z2;KrS;hUAkiL|skLmX~UCes7Ju zCUx}Si<}CrUrk**@xza-^v)&tQ(!h7_`*Mp-Q1YDj8wW4^y3H8L+E`6yE0y^-=Zs_ zfKd3|Y#r3E8R&>kfr_&H>!2^#UN&zk(M}c>#TR6WMP=-Gr(FE)oc(MHtjT80c@?AW zNNdIxsadKQU5kN?Jp=P3L@dthf>Ck?3E#W^rRHXY(NtSOq`t90tK(eh>T4w2^K#FR znkzZg)1=>AGpDG>KvIJz%5FZgSpi9cI=}zx_RL2deNsvm*M}3Ba{Ed<=JiUkrzInf zQ3!pu=ybi}nzGO{%S++{Asb0b1`(bYQGtKNviqec=JS>9%h7oS?wWdedJ<9y*F^Mc z)q`yI(EhaVk5OM4PjW0^qOjaq{MG3an??d6d}bXE8ll?36mALr?}UKRILqi+*s2}P%|ag8*&VQ z^~4<)y(Vk>+y*PeG}5=FU_bC6fXPU^;k43CQfkn}(WeaRzF_E=g22-rTLLVLmQ?nO zWDSZmvB?A()RQ5n?y&Vn-ZWgkBbT}nBVj{m>M{X2=mQEb4mthy!V5?fDo4Z1=^YR@ zmINf?;PoWf^u15+>q8Zkkj9k9m$5ApuX(KOVd)w1&DB^)n{A*RgoXP4Xc3b?Azdcw zbW*b@N91|3#Ia-r-fyDyB||XSCovKu@l9D^=H_cZt5zwakUG1IHRpR^FRclnZJ@Ja zCPq#S2_@cKiTO*z>~zu$Y$MW1fO`$ONir*9*zAKjwTU2qAP)2$BloRlMOoQr*NquN z8PoDK;tdHYH`qQjR47g?X9PSoss}!|sABlyx)V%i1^)GM10r^awp!nm%8vzD?wiVW zAU{GJicF4$b-S7IlWu4^4)nEe-u)09V3Gx&>Pt*by7uZ;p7L-LzNjcrP|q4Z89XTW zRUvduoVd7@)Y-RChbGeL5xDuz$f1N}^+|=Lf&NaRi{1cF-uvDdAD){*P3WKz?Qomt z#eui;!r=&1>kCEIew-7v4Ew;i=6f?)Pg?47Bb2k9{t5dNS1#?p{FQpPiJGn3K9jh1 zTfx(l^BL8PiLk|2kH<$lXD6z%4rXiEdZ_~Wa{krDwaamB_V8`Rsofd?r0w&0d;MAZ zy>F*FS3h38+#7p&b+&E;86Pc3&pIVwoi$|27zo9FvHd$xe`c> zS~EV(X?jiAlkj(^H5{kE|LMB&c~AJ+{(Y&XJFS0}<$M05Z?c(O>&t+#GT{D}I(8I! zf8-`7HQ{XQKSP;(vz?tH+_}O#AkHR5{Z~ElZ9nTZQ@(gy{b_|vrp3aK?RetMiFtq_ z)fF~ZtG;3_@*c}_Wx85uL+`E{`@($X^9RK(>Y!l`EBHIS#Dl*z>w>`IkGiA%{Rdavu8Zx{ z1q0^l&htq3f9?^=8W4EOBWCv@2Cr{A8<4s408oC<)U0IrU*B%`hevL=I$K6Lyj)@? zvo|{_Zk&uYP9yfr=~1(;F-zCak?@sV8}d0>G9|9H>$(ixbXz0!{~GRoI=8H@?YHi; z>@reoMtYGLy9HnRBL5u$_xVzCQ)kWCK7hjkcd<)W@Z9Sy>tYk#0!>?CweBmKGZ-rk z#gX7Q*Zjqx4>OpGhY83zg!>D_na0R2j!I_=8(Rg%xcn8usDDjgGNW79UKsmZECQG}p$Gc~U z!En$NH$7e2h;_oF8x}xwH*G$x_=_>9R6zTNmzT1Fn377}qE`_101q3C{vpwWmc%oz z>lSkcZ!hs8Iv(r5R+@fyS=k|Egg?%~0pq7SwO2gN(@kB?D>dJ*=;3?_?VoykX_(Fu zR#G1vv3>hf18S`Ak=Fz}1v(ElW0TR!@@Y*a$}jdI%_M)XUG#5Mtub{}C&48a|@u_J%Uw?h5wQh%efxv+bV0=ulBzZ)B zG+HO&X}_{xbJ0W>!6vIX56kI2rFM3--d0KWUPsj7@SA@e<3q;!PZ06u@dSXkMEek* zPZr!OzDpk-ieX{+l%ptTzFHo48=8ybo}vD@#Je^}mid}PEZ_rceb#G#Hp`EO9(I4U zNUSFCeEtYH+y0!8+p1+ip)J`bHxjQ@Vqvimiju-vjFf)8U=zeq{avz^tT&4_Fc*_% zqfw#`vZDi?Gv3`q%IcWf+dSIaWX{_V7i^yj)aVc-(e*j?s)Jut53c6cgxEbw3z^?f&JSb9V>~(9Yg1OFJ5zAXMTylu0-NaNR)YFK> zxZQ+U2Bb^+5^q+o4dC!LoF2gj=QM(yOH?1ppL`sGeX>;4#Kw{nWy3I5Z=o(Jvf7`F z^qDepjO`Q!`PJXb&3t1tPqb1qbSEH~loxm5dxdguQK8Zkr=G&Y{d0@`N^QHIJ>T~D z)VAYh?f2X2TVwOjJ+Q;n?}!MP4)Lu0a@!e5_r=Qc4jbHXqKx8$Tp0icPZq-bk`tAH zi#^&kdS7f>Z&!e^2O6%AO$Wa5?}Hte9rgRKf2sgVZqmxfZVnMGm1RrLiUjx~Z&F@{ zOMCN3!Qc3h%c;uN?|gqS3dMVQPKFY9*(P?r3qNdNz6$A*)wPc^v@0DJf|r*(r{O}y zXi?wvc{8-F8J%z@3Gh)&II4~ZiG2C*`d1ut^=I8^S1#Zv2z*YbmL^@<)A6FkMx;-p zSn%UzY}$%rOUw>h^73iL0|_W17xr+4*B(t;{l5%t8!NT+=B<6-5iPhIp_lw1F~}*z zMdFOWlSGCWeqN)lR2kb}s-FEXS#c-`nQLYti&jw7)N1n-gH==GJ6~!0d9c#I7hTBO zpjfH{ZUT6JsK%duJ7+%RA*(d%CP9714sD+S`NBnDV(bxSr`lK#A10r2Ty|TCl^@*{ z=E!RA&FhaC2UPV_=NOENSYn~C3?A_g)SjA(QmYzv`@zPsH|(h--w$K~^bT|wQU88J zN-#`oP$Tv)+9~B*u04}yL%k!p^b^`(4HjD2u7O%!E~r3Cx?;^_$mbe^=!CI~Q{lWw z#}7XyM=s^jXTPM^?`Po9ukwzI3FUabE*L$(h4r@%*xd?27d{%f^JIed2c_L7~_%H@42}pji^$cfbwxz)#$uU&2Bj` zFN7Z)R}E0L9!-Le2p$v?&|`~p&u@N!a_=ir95-2UzNnIlKUvOlK?q1VFQ&J9u;(UL zY7OHDF|S$Pn~;M~nzJ}Rg6!Yo9=?V8!u`P2SD@k7qy@7Z&llLUnAbWF;Ig1b-%&VB z7eaCc%A=^ITU}3mEzlH4dR#@?DX{#f2d!AJ=cFWSCN$`Um(h@nkpogaThk` zxqAf|M?;I6W);QFHdCdyFRYjUMK5b-iSv5Sq~vimp;SkQxrT6NdpDM%8yPM5?eLZV zx6&OUr==au_6n-*NE1EtJBpkUKv9xiS&NIXie9x&%=Kbb`bQtxpv8+er0M3(Z1p-G z62IDl7Dn5(#d+DR=aSce9hjd z?CmrMp-a1cUP`X)A^8=MA+b=~@0*DsSL6vIt~B3FVt%|NWKE}nG^w(o^5An69eQn4 zUA4^ZDlSVWyT@4OAHOPJHE3ER@BDyxi*_4ut2wG~W6j}attqN6iuTn!sltIg5RHE2 z(qI5yF6J@^yVgqb4aq^CiX1RmVRfm!pwxO@IyE*qEs4f<^X|CpT>J_>;&#{l4m!zm z9XKzHmTo1dh`@n&dy~)JQ^NMyq!{}hLZ8mRq@H(W6OsL=d5(6b*SUF!u9j7y+I7W9 z_Ev_x?Dq+{{@-dV4QwS(`?C#OK5%B+c*z|I?(E2eY=SK7`5W031h`mr9(&!3NCyZb zjNSIVCacrJc@Ec@nXW|?$pu+!Y%(i{qQ)r(zD8G9sLD!d+%ZGSn|cohNF>CKzAv|d zvAIr%c!6eb!R4^kVlwu*_Q{zKArPYNN1LZBIU3Nf>-FpgMzShGROFTekY=W?v_@@E z2PX716JHT19}HBMTE4p5XgdozueN%~&}#>BTI}x1xgX|~Vof@){980Ih8A@qh;%)S zl$N-Doo_F9E?roR39!quxwD%H<0lUOuc$RC$(veHR!G(Kq)M-LEb~GOFOu3&72dyL zI_#Oq&5^gKGf|DW#%9f?s8I0kmgov(Nlj|#CdPjy!$v0q_A*xv_J|o@s=VsgN4Cf_ ze=1a_o&-1rS}2T+yVx-q%O)aJHr;;~N@XGF^%|_t!o6GLGK<}uo2Q039DgnYt%SSN zFHm;qjUjmwS3JI{Ria{$rdRKAdP^>S^%JZ60)YyVvIT+>Y@+DCTH%D-^+1e_V+AS+ zX=NNCp51Yg=pzgs&g^4TrfqYBDO&rmZhkSpfMGjL=X_E>_W>Ir7T($Prr5Jrni#i! zzmetnq~W9-_EEAe5Y-nOq+n0GZ+tGeIk}cdq1|`NKX;HH>ANbBT%4_$vwe}A;h5}i z{Ki~S*+fQG6h6WxTYQ`N<^9kO#^NvS3EK;Su<~Gla(MZ+Z}U69Y^cRYSU^wf)=l8` z)3wXoc5^)0FLxeCLo}~do-oaHczowIAA9=m-p1bRTQ2tu0`~&L%+AmEr|XPwUK6Qd zG#q+!-m~|*#=+s!8J0PnJIkkwR^Ph2@+a!%O2LwwZ%e2DAjhf8^}@sPbo;*kSpmFE zenMLKHqJ~#(2w`c!~N3XTdqq_$}@cLPU2^Eym*WteB1Efv3-wK0e*g;?`CY+R1O?i z5$og{Y}mb+?I^pAH;ZajfUoNCiWvUHhh-edZjWY+<`lZ)Gr9K5uC=Tqf2#wo4KfFA z_9Nh*_?+KQ7rqOdl-;;|*prvd&QAC#5<2VNI6L9N`j3r*8Y2XA>EuM55jW@&?_gwvI1){OvaW0Hy5BfTL-leDwi1W%>ccW*!*p;L#-!^Y)07Z(L$gzH zUbbWGz|%K~IGD)2hnJ-#hsDgVE=0b!yH6mQo$qcAE%CV)zmuKdj8~+e2#ZFI6S6>X z!{0+O6oq{sW3sj~+ytVPrpf~4J5FiG&FiQK!L2W%4Z_p{SFQjI*b;}WOhtPqBa2~d zf{gr3MHCVK4S1c$lt9T*l?(K}s~F(Bm7^ojW^sjAcNmz60gJVg7H}P0Ts>lgpd0gB zmBr^~POHU&XBXx&4FsZ5g(4!a_FZ?Bj18CXMtFA-IOq?^x~6Q%J6QXV{C1Uv(Pz=Z z9jpEx^iRuy9{A44g` zU;rIp_Wu&B0khx$Yr#CYrwxUkE|}hRKpq_6e+t}yJP^Qt1xTknABb~Tcz_xNzzHDu z-@_%q4-Zfa0&oHJ!UI-;06YLa2*4!(m`A}E;`{~|r1rmM!2lfqJq*Alu%9-d76#w~ z)JqRo{VxdIq2P;ge$x%A_iq&f;1bA>4^RsMcn0+116Dx*p8o>`ea`#lU)-?;s`Uoc zA^@I&diepX5P%PW9s%GI#P5HDy8r+#02o5y2XIbs`M=)T4gi1$^a24m0RRZVf3kl6 zA0z^Bf&xMTyNCc>VBk=NAH;KlYmi!DfE^?N9;o-fXZ=V3cA$V5Kra%26Br;4*o6e( z0s)IF{6L-)-~rYC|FR>1T}%Kjh@ThPP08_tStVMyqcT-QmB`hEd$d3hJ z2M+kJEMWKYvJjd9b>~$Ek1B>xPJ_-fRqe9)kyt|f3L~xGz9?`Nn;e5ctZg?drGy8k zDp|@%XK0f?tS(o@ZJCy4c`n~`O}=L4S9{N)K3$ei_?3>3ZWT;K5i_fc%zE8iJte_H zTb^j561Np(@eFO(9g25yq(sS_mRZ+fxKPB+a5$SS#7xc?MLe~W%Co>8ov19`fgV#gJv@QAH^q02am)Dd^-mcZ zbB712`Pt8X%peFmgzh1;WloQ!hr$H&&o?ax<~2OWo0F-Xey|x5s8hXfnIa;@pv1)t zXn?Ch!%?jFZuCC?{0p{a2t-RO}R})niPA>!YrxAt$Yx7 z=!rWvJkQyrLZvurgm~MBUw7gzjF&y{$0H=Jnhi9bLm)O>r%Oog#zg5HEyZN#!Q# zPJzKfRO%9;N3IHNtRx6quM$S=J5O-m)AYuKION@*tREaY`WyG ziSbZ{Q~K@DKeH2W9j7itT>5tN-l~iFo=WYFUZ%){x+cGu zW*X6YFQhB3UZ@Ncgec#~@a_56)QN@4$%haljGXI7H+ z!f4I+{AwKWw~aG`B|qWl!t%HPWh>iYMTv$`^M0_u7}VVEnaQpB8>w{ZjbgM<`uwk3 zmWCzA!Ee>V1sv8Bow>5!Xdt>UX~@l%!|`NIOHEZ^M0#wm+i%gndGa;yrr_RC#;8y# z3}=iT9L4M{Qt{5~$Nl45180)(<%jT&H{6L?dNhdtR9b!dEp+?{ z%GdHimq64PZM1Q=I^VwXFJ(G=X0#vqW3Lm29@!JG4S&_i^+>*9wtwaA#qe!f`$ltf@pI`mfPs#hj*8YK zcv5nEv&o!B?bag*vLU{z2G;x50wpmX_9IOa>7w5E3>D__So4}G6Jw%24`X{ATF98F zk&N>0#x)?l9H({CS?wK!c<#T_q!WNZ-Iro9qm^vwaFoZjv-aWEmHKlWi-hqVB%;Ln zFf)USMD}J>!Zg}_h|{B{(I08=r2GkvveDO#HCH%aEwH(nEw(Vq%7;5K98S&I?i&Yx7Q{k`=xzAqHy`_6A*gA4Smy9S- z!#gzI5>hpWD(Y}axTn`TO2mnp+iEG=BKv@RraNt3>@V7}<(g_N7IdRwl|ZU$W0-5_ z_YGyVPJ!l=eo3$)XLh->y_(~K*UssCe4Zl;jaG{4isz_(QrSfCZA@I+Og?#h{ch%~fs{F9ucvy4OrzZf1*FL+$iPRmFI_@9ZkgE3>MdRm2wA%>)aBrd=7nNl!L^um zmRRp0S;GYK85CKpe}!IJE99EbsM` zBY|9NxKYN*eL&NUF)KxQt+*r+I9j2)3)@3&YF>K4?m(}|i2YR$Q@^kH{b12)Gg7a* zW_5!ESkcv*q9{fEo-foIN6LPeX@tIRs}>S-bmjrA6h@l=BKl(`j~bZQ9UtpwuhHQs z`-)@aB%aXB>*2ffffHBeic$bzzWHnmDX=z$h=X#eR zwc5ipOmmz%ZkAl2zI6y%c4(=GcB2EPFU`Z;;81*S$=!Qo%z{DGCKXn8j|sP0kf&x~ zHA7x_6T6B%@*w|k3;q=E&*1<$ILr?SI=R45R5lNj(TF}8ewuG;tJno`8kVK=MP2tm zd8V?9T!m^ad^8VH^35>VYp>SF%DK=4VL|x!!Mq0Yij3>{q$b~rOS_ViJrsW;S0XIT zsC|hrpYnRS6aPDEg9d&pfr2KxtJm2{siuwM1EXaE+OU6#|Bu(;0%KG_`U^Qg?Kf9U zHPS72=4iG zqHFo?9!)wxQgY0cL`)7MnOY|zL#7G(ajWZ@b3k#QX+aigJ48VRY+X=t*-l8_AomL> zv;NoW6cIf++t{b-(m@&)A%{;&x!A5OAo?8)VglrtHh(~sgLEOD{7XLF&I(5^z+)+b zlf2wy?EMnb5wT|fumwV3$?=Nd%tEvpZBbWB2YkZ?2-aPI@m#M)ZC->*h?EjNq$KW8 zh2aXymxfS^gA5Vet-i?c6!v$RZMiQ|YXH>gdgUU{mz|`VV*PNbU zZJ-AW#eJ?N(^l{ApL1759^+Llb`xC-D~qiuJ2jq+vJ4iCXR<7L9`g8m!VoHYdu6Zf zh3TT|*-;{hUB<6{ zm>}r-n7Bk_IInRT^^mf5z?hK763XqRwbs*;o)Y<5W!R}tGW_do;fEPEogyZxU(~U> z(fL9f9;Sy%O1v0R4zd}MoJ0nybk#n`ZZc%W!4qzsh@ptlTV%E-eioj4}OlUdVtY!vJ;teN6Z8-C(zl+g(=b3qMYcv zy#ecVt2}oOx0CiMiRvFt{!DySkv~=YT4^$;by)#ezyNa*khghRxfTxdS+=xWYfH zFzjxRt?U*$vHTg$sdQmIk10{v^}0u@`T+J6j|RQmuw%_Kih`BBZ<~{}kne{TX{I}U zGDNjq5GEEhze(A3eKWZeGMm-3EUsU@Ijgw_P|07n} z9iP%*iWwgrpP9h66-^XZE;J1rn&i2o=nq?e!7BT;NPBF>cAzQe6OzMRV8l14R)<6pL+1tc#a^j_Xb|@ zU{&=Bf9LhS-xGs^3JjH-ctG|d4>ma^{65Qu z;QG^74uaM3&<=TWFph;O{F4j8VC8m4pP*_NFYxUDM|fI-SHLTp4ES94h;}|QshB7f ziOvQr%qA_3#XNzH|0A=oPf!+rY_Fv)X8-&mRIBxA@b?XKl(@9RxQQEYA7Me~d$E`H3$ zjR*=))0icj{}cHxcQG*p>pDq}!mjsx(8nwK#)I+X~j^Jw`D3NX_fbSYqmd zKYwn^x9Adud<;@M`Zs#fR}sS6U4yEx8m#!hkoL>f+>P$Hlf$28okpJ81)qCR+q{|C z?7fY7Z(7Yzh>w|#sbl;=D)&+jhJOQA64#sp9IbDGsinh8ZP7O0Rm)ayyEHtTkVgwm zrG;enkK13$iZthVHJ2Q;JO!fk{im8 zuH03r;!|G@E)TaycYR}WrYCs|7FW29atQJ~rXQXRJf&4z&(quVpO-he_?HB^m(3Xr zKLXF&j$`(Q(wLvxXmdAyOPg&(U;e+MmduQ_lIMhl&E?rv@}PrPR!ZVCi6o^{51bIbhHFmGnxU1 zAy|q-|Gt&0lzE$sF2u(8fB?2e9e7@T%vwV@1QQH)H5r+KM3e>Y~d~ z!n>e63vhL04sZf%c)0Zv&!r->9qvJ#cq8fRe2t2_=S&p$-TT`%zV-)J;$=(Rc9#aV z5B9f>-ZW6*sOeXs{NWl5i8YwCuZP`1L7oTM5WE@&9#g;J83(>+AN-#9faf__j}O|} z#hyQ8RG1O8+1D;H1-~0K)pXCYG}r7Nhey}noU(Yo&kLJ>_t|_?Y(?Zd&h!rbK-(q0 zxcuoc^T$6KEfxPZb_`kyQ>r)~!z>T!ERPu6tIk(<4$lbPg}D|N0vpy}=tER9@j@b4 z)X1&~rG(h{dO!-)F+_KPUGquSS7nDr$~gr?-wfwEg7Ue^eXRltjQgVdRf=g$NmX4K zv3=5_{)i75V1WmolXj%6SD1Q^d zJ01=@L2;sP_JjH!OkyAvUu8njVG+VWQ7TuEa{1or*8cq8yH)!uRsJlk_VJpR&!jO(c34)u#sUJp;rB)L4EUKr{I zNOm`itQ&lVcw-HHph8H}i;EH7MtsAF6Ml)`ehtPQAuK*gsP%gEf$n#L8?+*OZg>{r z2UkLY1qBNjx%p1Ve;npP3CKk6kyyMNB<~ zdx9uWXxo1VHb#Fup7BwA7OK_bctX_PtFQXcb{`rpUUnxb5I?9!+T?S1+~afwvF`L} z1{F~(#!Pd8zD<1LIuijm{Js;Z$a)w%w^g94n;c$rKz8)6p9T1ql9Y3Nmt@;K{b;j8(!(l{ZT9aoNP`Ws! z846Ksn}Ro3lV2H^Rqx%WXb;>;+KnkH_*H|W7Ua-UE)z|G4^%eS_5~Kwi^7c{%eEyx zg+3HjinA5oG#}jlmZ7TGu0#r6mq3>pPf zn^$sjG%<0gE68iqKHyYjUty)r|0nZr2whOxpto=M+~H#2pUwsdZX9L&@i&-x${uv>fK>l6KoD84}Y!;`x&*dgiR?2x`S#0s}xa{sgg*-t- zVoZAuOiv=xgpR+1q4Fv?*&x!;l2KQDT1YxqEcRWz0B2+7B)&6$wi`zRj;Tp?d7{Px~P? zG@m9IP^PeV1XgA$;^j-r4XG!5`T6&XW|_Y9wbX6WAKTlGf$r4Bra9QCv4q!kU)>R& zuHZMX#mzwMx#+kHoF0P+z33oD_zF?F4Sh|M2+5gj(g?}@+5N&DmDt}w@^FLXBMlM^ zqeAzVqEt)1J5M0{TnWO*-+s%Qg)0m&jDep0SL_LnKcnMf$f#(D%u?ACWf&ae*wGPm zKHf_u>hu;BwEJ*L5Ju}NjQ#*$2@6E4yX(~hepbo7Mnpl+5{b}D<9Gpe#Iu*(> z5u9+g;|FMF@Whx_vm@GT!?ZTfA+6uvOp?1ckhcGoxg&D*m7jGGM`0B6G`w3jvXfy- z7_g-4a{jY#_QsKhQ7~HNDRV6)e3OXGWZKVMj+4k=oAF(J7G~En3mRYJ2p0Is1I=s% z46p4c>NO8&;)iPk7wVIX=MXGfkT8`HihSkzi&gLZMpjSrwH8Pre=YV17yP{p8@&EN zH*-46z;lMteXJ2^@)H7iFh*f7|0@*ZiO-ZjqgLacqK1h(OcMm2z{6q_>w^a(YQ`}i zG4AY$8g151uM9NkMf|FIC%5M_KqK%eWt{6b8#e~RjH@Lmh-jyAgxQRyUkEY+zlJ>q zXB!Rg6LHu>n9#-aK|@D)U7>a@a(VPee^ux|S6kkzgm+y@zIdo?04M`{Comyza~hT4 zxzGy`TW;al_XYxPeHP=PqL>+&J?RHBNN7+#yg=K8Usz@WYi*X>!%wYSstiu zbZ+XPTC|6vCXPJym4-ry-%IVK6z_lIuk%oZ&g?}H4H@BGjD=;sT(d!U_dsLEW zhu=FqtBpO!NI5Q~7zR0IkjixQm#B>qw+LDnX4oMg?GJmubvX1VCkjSGfFFAap1&DR z_!uxK5zJ{QoywMYVKPc;Tt5PSuZJh}_w+9U$yB6&=UBz~UDcXWJ!XpliE&egW})BF z5!}Cafoqh+#Dhr<3K}(mh4H70v#&|8IBaOZ=);Mup6?;^yV5QuIep`BC_@b75 zW8;}*3v`ySQ>2rOyi%y7BHCXU|I^`D+$O1?>DJVYz`8FPW?ePn~cBm-E$AwmKume+U$L?mQ z>+a2opc$*Bt#Gp>*v73SL)I?^#D~pbUwM@9YDE<2ykex`*F++V$-o)mea z94lIJ+TP=9cm5cx!n4E`-!#|Hs-?OZwWkg0gEW+fRK+(nKj9+RaJGN^aI<_TZg12( zjB!UuEZ!+jK4bWJlp-imvHtl5k;Ec=C`T6%yrgWP6jbNMNRA2MZQF_7Rb%v?s|Jz z?p<-UsZpEZL3M z;uhx7M+9L+uq!B$J)7IBw=1k&oq@pp%B5+PrW^3VG%BP{bbPqx>D%u(L&UL>8+8&f z6{MT`v>jCZ{h5s7Zv^IBcg;|fB;F$2BIEUfq3$TCr_+Mo8u$z`w2iswy9dd8xTB#5 zGy-722C3WM&v`2*fjJF{LO0u*$z>{T@)?FKK1;wB6YuIeR9`E%o_c)~W`6J*L9d0>V^GRp$ z!+v`HSHdloZD~;^Ce@XE$q!$KOYR&YVQpVw#VB@6<^6_+dhgb};wD>0`%I!?EI2>GeFYdpwY!B8BHIUJ?{;yoJJAmB|NzEtFb z^eJxezI!eKWgMsXU%iE^;m)J*VN-N;PZ7Z+Lh%XX?Nc%9#C?n8&YXCw!u>#)HIW|n zft%%TyjXtwUO8z2br)vf+{{~wH$rX@MFLOyI!qxDdL{lS;*|>wNa(^rOxyzqR~5c} zTLAt-pE!59LXY(LlP}+75sDMzMgxBJAS<{OSl=%-oE5r;@Ic%K@FWfbA$M*AxVfPV z0S~w3goiuV9^3-qC+}|DfIxZfB?vFYzX=e$r%JvofE$XwED(y?8#oV+dx(HMx{o)$ z5e4o%@eq6&0eYQ!S2_Zx(6=AQgzd&v3e^crUF;nZ1ZnU++S}JV9%62IJlwkE@eqH{ z<00;<$3yhC$3yVK$HNEid_0goE1`pN(lOGHRYcMd^qaiD<;Vj_tCXYLh`GsOGjn zJp=g(&KLFa30};04ocnEPAE4r644$q2O)6K^nupg5ONqgD#l7d1*}z2azzzBIi!Vh ztyb>N3B-!}amlgnRFn;#?V`syQXrHM@qbMKFu;brMYxWxPV($?z3e*Pl zgzCa7dkO#p<^vKnmxfW0h!qaj7E>`MK*hXthm0YO&%B^1f%^yiJbMZ;dT+x}C=^u8 z3mf|4#MFGD918VJNgd%9c>o~9{sr4}C#Bs(mLF8aO~(cNzZvwV?9e4)Bg;pnIX4=axiY`S_wZD^L>c2)B^;Zi3UMpGskHNR-2*7d*fR zlHA@F9gjAwWK!XF5zV%m-O>=6>mVLGme z65s>gYaFpWAjkp&!Y%ok4Eqp@`heGfBQd)_-hzh1@|RIi8pcUz^!Ou^Ptgw@T5y4B zi5}Yp9D9PT1gK>s!8`pWE4XM6ehU?iXKaL6j72k8!H)t;#fAZW_TD}~K=rq63(02) zDgNUupWF*Aq;LRc8luCc0q#TJxNLyiIBDd%fja>L`0^?Uh+jH;&^MYp>SZ5FWk?*N z|M8E1z)OA2OrzkOAkdJ{-zwW1WPANef6y;vGd;HkDPIx6>~6vC#wN#setUpgHyVg7 zia9`i$UB zfw6)b=r70NzhIhYZe9|P5&rc)rvTglW4J!&e@0`03k~!P))3D~=r3%G2kG#$0LCc7 z`eF+GLvta4wUl({5<=}D5-b+)Gn_8~j{tC#gmvLsb?WnA&f#Ys;1-UUOQ+Fayl(L< zz#`ydibv3*90G8EoWzimaPe^z`~x=$_`~C61V6HAlmbQwYQV{Kn)K!sqymsolf3s4 zEI9CqW0MF&Tv|kb(HN2f#u|KOMMTJBISi;EN)#(N(*yG0*5g4w4@L}H;_)Ov0}S}c zN@)t#bvi{&19Z9o;H8C@30hiIcx_Rid{zvUbflj`m6Ncs#XMc-Fj4v+t*Nf5w?f~))Bry_5r0e$c>TXUsa?~lKF6g zGuDMn1LCh`Y4boi{1hrN*wrz%h`H+ z2xUE>I-3P50%U3TBhXt6_p>%Xd&zsau>BS1Z(cGLuV5!RwAP3{gA<&47~z6wt%VDt zM85*DR!>XCQUGXBO#{DUmNQvepM&af`$44&|9U}7%nXe$b|kYIoecCe0+daHP283Z$7UsKUv4#%6ygY~MRgA7?hN|Iu!HP~z?D>cj zuxR%f`iP3T)tn3f_sbN{4-%|7SR{5)xx))h7P(8EC{V6L5Ns4QhExA^GFgOA=L@nU z|Aml?u0_DUWUz;A@;C98s-CAhCXf->V7ykJg&2+Xi`WustcQ}o7US%Fr z;Oh)U{!HPGM`&ztIFLo1@g+3!(JFM_foz@5vm*HRGUR^BJdlnbaz--)S=6J8C_HX# z8+13Q4L7L2VdwDs3&|cxiU`Yk59Rn>8gRKkvw=e%)FUj5!@Q8^D7d(v=k|c>Jh)SU zI)TZ~u)Ix;uYscAc3x2JK=W|)crPP^25S1zJ#9vx$USR%PZ`093e1knnhebbd}g!R zl5z+lqkZS$Xc}!+6xX#6aZCjZp=cy%cx3v>t&D6<;A^J50QRd2iAi2i?{H`SfRS4|5}H;1&)%piul0 za|<1>=_o9>0O@)4duz=^gF!b!deJ6&WE%v=F)ADyX>1YIByvOK$w3%V0Mnf?fpL)d zwdja{Lim!s#^ z5h#fEl7YRQ89~rt>@+=6un!3;_!J||>4MlNMi9(!dUX~7lB7sx{S}C`kS04KYw0+M7*PMk=Ii{qmR zOzU5Plob3BJ);70Aq@BM;BrTj1%&q2tD_E+f9hS0-J*`<^6<7HCKle;7_r3JBSa7) z#}Z6RHc%%-51@QSH$@0W?&ZLtG2Uffv`e7YNNy4+gW(tzB^1YV=c@|zU*axMr>~sd+UY+-lnX>uhrY3tBPVY6K++tOqw(<80~4L=Uk0R=EeOYsMN& zfvBz{(14G)Rj;uZN4<0P95=%e42g9N=L+o`-j&VV?dFR;*xT{(0c(H{0^zRo=n}#} z_!*SySLgjS$W;I?kKv3400lLX4mBPJh8w7W@;Zj7gH7OMmlwJTFOC%E(l<{lhArW( z7j4Q(C)&a(FRo-3+ZwS|{=~pQ`=8U6p)9;Fe|c3%;!2D#vI~hkXWvI)&XeHgU!I}2 z)?cx365BXvp@=b|5EaRjG{>#%F_Mb823~3|1$DFw1Q-SqUz=+(n z5M(T2SZ7;ff7mFf!8sWEBj$Uk9LYf(7UJ#qCA2*_yVldY!ptR}W>c6TG{3fcT(J5> zfasEJ0}~75tEHK!*Dw)751%`UNFGJbtxovV0O=xnd-#(E(xnU_)V2nlg%pe^`~313 zJb(8ZbLza+^57G)2)7KfOP?8f1AcI4s0kK0^4TM&tl}uxP8x-Ylsl794+j6o%o)sd z+IRbTfQ|3rB0%;Fd;8S^jgaOZ9v-+b=|K~L07tv*JXif>$UOGslTuz5a*Of4`PEOB zW-E@314^cT#~421JBm9FXXO`zEEYs1<+*l{=p@WAv50*j7cAvN2Ynw2;K`k0BAIUjhSk41jK)FE=>}KF7m9$OsSzHwn_h6B(Qz#gUSN-QN+t zd{lbdHViwlz@v}{zxvf)=`zyeODOL~`{XzBOT?ZT5kK!j^d159RSER2k=G+3K!gcR zf;R=O2PY(WEJbV-lJJMsiSRT=C~SZtupWW=Cp?n_J$YHLcS0g7PN0W z_3-d2CY`qL$?6Unj8Pa}z@Q^{Q2c-wz+H$4thpW$E?6oSK#4KN<2V4nx3mcJzrWhU zEY|}gPT_UfG@xK4_(F*B#R}lWmc27G;UPr~4A?+HlCB`3CclI$)5uG0c0AuG#J;5v z_m)EZ%|f(0HJ|{X&g-vp6k0V{=&#WCAgw0)@#4!-am@yr2-q0n+9ju*NXC>ZvfknS z@)Tk#62A89$l5SnK)-J^?JrXFgVjy6N~oJpsRe-!GpCTu#E>!*8U+4l2;mlcOC5;M_LR9x>h5daBOWJ5tibGW8gF@$+SY`95D!3y2tQ(E_CdK`m_ z+M^wOkQg`+$83z(xhmyMUyM{p-Q56AuYO<8ca|a1 z0kJ2-+R(#og(z6@-;^ZX)6{?<8S?@}81;lc88W8@Wugb~xb^@P@ck}M;`TqjNfh-z z#@hM5krB~17lzJ#A0g>LiT)gXMTqv8nRmD7@gdjCP#YPP-OHXyBF-WaF-Y9EM<7gk zrU=Ni+|K3WR-1pVb8stvMZn>MfH-c$i6Y{80lC~s{L44%Q=Sne=$`?*ZOAZG92_NS zR&eZ^&gpC5(yLFou$|vgz@bk2^DlTud*3si_6j zY5atUDLpDEgazY2@gxQXf`F)m*F2PwLvJUOVlo+81gALH3f!4L10fZJ3Tc9iD|D;dU}$%JT=UpTaeAKb0tHd5L9Ybn#l>>bHR6j6h$eG3Idi4X0RU<iiXUby%R5;Te%?CF;3DbS{?#(?0@*Jvyr~c)c4H&mc z-SS35uI7q#(FnYbL7M>BbGkzrP|?Q<39Js6!_A_stMfTZEnFKZ)Brw`CBkFEtXrVK z3Z9}HnglNd^eyW-s&uPmJPz_PUbwiNg+>#xW4t2@xZV&Y`U_pvau#6-H7-K#S@fZa z79t>iwRsZ^BaFt)uQRdUmLtk|Qv%cdKn!@wHqUeD&J8JGy2!iLK|IWg5Nzr5EQU|vE;m8xl`|W>0 zmk}^Xc)7%yAq3dg{!bt2cb%8s~`iX0g%7>5v5_^+_7-Y{MHzD9U9 z?&%@~ng7#0^(7CE@oY!7>W5Jtd*Bk;gl}5XbRR~-@j}f&JUH#e@N2L`3CbK#s1f(S zK@gz3pR+9fLR8m18jBr%@PNv7c#JgtC!`h6fb|hAyF%lm|L2ad88l@E4OO??#vIH; zN&syJfD(M2Ua(qm(`Xx5D6U%ZZ=Y%ZmoKyj;on?YaZAg|dgl@Ro6gVui;c`*fmF{| zGGeNsZZ8V$MQ6-8E)?{5RnD)m7asW#OXc zefILf72)-Gdqup_N8IiTP0hN2>?^UuKLsfhaO35bXrkSF%9Vbiz0c{RwJfT1g5cjXC( zmO$`=Z3kC-yo-#7h_{e~2hY?+kr;ooD@@Enxn&-_@3!bo8e!@Ut=gN*Hfk6o?1HbZ zVbbvD`CRzlVh)DxoL>Dm*?0&;&rJ)~^JCC-?%I9enJKdUK$h+PV;t812GP{HfAfGP zqDZSqf${=;oabsF3C_ycSyl@`ytncOF)1=P6b-uw=v}r9E*~z1|$lVxx z2x8<7rxTR9|BAzc!@GjW_Xwmo&mzHa%;IkhlcIFO!zeCN0cpze)LY-AfSHfWs~y<} ziFP5azpM>qovLrQ>x1bkpAT`~l)kd)UFLR_!C=t0;Q9#rILEI8x5XgYy0-&wd0@vd z2;Y19#$vs1_4+n9U~cUH=g0T$0e9twV>P&2JnFm$Q_(}TJpy@2#8=~-E9X#+ z3A(&+VBN-EWffv>2JqxrGaGT;5b$Xm_CL5$+4I$awgtjp1G6LV1p;SCo|6jr9$CgO z;qYJ4J2B)ciwoI=*IDqY+5IS0zGwccA)8=;7jMZ>bgNy#r77q$;YCq`fIE>QkyEPs zXc1l;kc5+#duWG5X{2wzml*4^g>sw|Q13fFISsZ(#0bLOV*4C})Bbu4u@m?m4v%s? zto_(WROHg_Y;NGL?i^wGW#WRI`MC~Q__&90{C01-xw?iz|Bk>t*C5aB78hk71IBm? zUN!Q-2wlE%Gw_VOej5&PG6$;Qkvi@ks}d9uQi_TVw~YG>Uok-~xHOOQN8os3!q;M4 zS_*hNq+5K@ld%3YLeELL=f?C1nk+DZbX@$PwvaujFqkY1=uWzx&|Q#MbiLMy0Hjd4 z`WeP)hjEK;y1CJrUanG+#7KJgVAK)u3FV+p;l}j)r3ml{XA8%ANsa~)A!L#9C?ll5 zj*rfx>zzYZ@j|BtZbd@JUs=~=6m*Z?$R?1V!y$4XgCSf4oBtv7@+wwQV#9ZZ{Vn4t z!oy99@DQR14?&86zP@&FjOm~YCn+Pi8B7rk`;b>H7l#1%Ce>LO{FT=7BZ@SN($;MyhG2J2^xW{P3O6Uz5ulWrzvCXDts5j5=bU$2?C%AEeqVP(OYpcSDWg+$QUu6TG+1?cr z+a2(^r!9bDlY{rY(zoq`{KEN%B2C>%Hm4uFcMJkVzd-n%8%H%qui4A?cV|GtuI5|cRF(H>946hk!TkV zxNnHsa64`TVJv-f?1qrF^#%uCBN33gTjuhHGMhJ)nFY#tE(yOOp6Z|W|K{;n|1jN4 zbEm;urp^_m_r5Ih3bv!xX@v7o12=&{AH1H0;K97N-9A)n^PyU^chz#uPJ}T1K>Uu-H$=y`#KE_m_`i9!-xblz6DLSnf;dMEND?1qzc(4{8`$C- zxZ)d_;v0D4O=2C$jWB>fZiJ}>awCk2kZeA@bKg}vLQdXQJ3`~$RXaj>gA36+v<${O zeIui}e^-QDVo4~(a-n-oe_xE?f{_R~nJbZ)ZZ?U)AGVNQC`v&3Rng1wu zKHTmrDEV-^4-X$~^Zk?m1_6S)Nnb;P#0RPCzrP^wxALBy^GZwa*ygXa^bVTz_j6AI z!_XuKzukQ=+E0PS(Zkv9BiD~)XTDfAur+-T`QS5X{DpFBwZYomE*_nSvU`esFdxH} z@H*irj$xVbV>$CZwKzY^;>=MyaA+P&6ml%*(xg&AIxKKI!(LPdRn{o+xjm ze`2p*NXgp(Ix5gB$o;yVuHf5>&$9M)<2JvyEk)jZWjX$ZqLFt3jgu(4m92)`xK;HN z;r0PU!k_<>qW<|$NUO$;HiaJMwUHaQV*T@*=Yo=>OX$^fB*0Q z=O;>=|MAmEY%mQor!2Md)lz!bW`A~F&(ias{`KYY_w(oT#)RNf=Z$XcKcD~jNrr3p zGx!XX>7OW6#9sgL6I#>=T=ev~_*?SV8Ox`rRQfkoOsA64|AI6vNi!17vcIzYXHNJm zaFp}&)0ao^`*&-ue(vUrPIutjA3rT^+x$$^r_<@T6aU-RTF`7dou(O%=D1%$iC^~@ z!3R)f^^~jXnNlBDQ0Zx= z0x}n!LN+rfWEX>CcCjvHJCkbev?yg4i+Vn@t>sSJ8fq|~%{20v6a3f7XM}bkBen9` zM!%Tt^b6}l4_XP61-VNzNSy2b7m<)H=xh2Qy)mcT$ei%c5~ zH*+d<@sKl>Zl=@df}s^MG8%n314q{>Wc;5_F>|Vvz_gTenKc+5$XitM;d0I#W^!P( zU|wdGTxVMc**VZbKC|fLKpL14(2&sp$ZB-K{1+?T%DFQvlnPuyn@tLXhFMx>&!clk zYiCh|1G~IzoS!r)*S#!`1-*0a_Sd`GWx}^}%|XXlCtKI%az1z}_w&r5QmJkm)!cIN zw5)=u+x3{C-5l1k)N8K{QBjvi?0G)c)1xPDY04XWKOKq33EySs##~Uw zW=buy36*aZmJ_+GRW>zExHMPWL~bqihPtUtHczO*-PEXZiXqlkW^J@FlbX5P9rl)- zJZ`&Se!=i7`D_O)m(HY+0}Emb=WJQXXLE&KV^Am#y3J)}@pN816)vd3?X-LRK_sjhdewJFQSuD03jk{8?BC62TV7Fr&zhyq+MmSr->rLG}%QAyvwun)&Bz~S-cPwkaF+272j%QJWm0WVTXp3f8+E6&Ef{%ou!LEFVcFVz`mXXiz0)!pUV!>y$j zYIB9d)aJMy7sm@)w7@W0gT{D$ye`3@(k*7#94O~u+tRPqS*hBsSGFp{4kx^I9xexL zGBp65Col9SKS+%))vCC}L(ZK?JX_26$81hum{zZ#_cGT~;n*opR$9Mb9P4AT13T*t zQzGhA)wyX0%yO@n8>z{YeqzkBnJF2CGiuOeEkW3&&xWyFEZ2sy9@R?Kp0u~twcT#J zyEe{TCX+OZ<7-OfY4Mts?BtVj;l{e!K8f(&8ONc^(tC_{^ zk#5NYp4Er!@p3t`6GITEHKDz$9XMg7k5*+X!5wO{a!sZZ(~{ny_5O_Bl(!8v+27-> zCk%A}n%F67Px^9R-dV-os<23vP1`bN;ya)yo9VYx7C)YZ$izixNIq*sR{lQ%W%k|@)e>b1}A z#}#>cIZm6?A;0R0>tRw&irwXyo(QIy8YhNFQBeBoHQyCbgU$9+sywO;#j8A=N!{wX zJQOxr;ZkW&XY*5I(AY}J#AGbliNSo#rYqUm(VUz0d40O)Gp&hUpY=}pfz>~O1&kUL zR4LO*9(HQFXJ%<;)27iBRp=UkFu$pbQ?^7e_jE&9^^%SCwYE5J&E@R08*yT9H_+zA za-x4ZcM{8rh=(jz*!61CE(!Tca$P7ChS_X+PzH;AESf4@cSTyPNa>^@PBiIw9y5xO zSoV^#C^wEt_E>I9nMq+fFq1YW4u{%Nv3j#Bw{M8$!sWc9%T|A#kte$a-PjyQW1YUx zyOzzHrktEkFXP6xJkXke&?u?FwylB%%8FyKK=bMVHApu`o8)vi)|0jKe#(g}TTGp& zrjaf_jdIF%*pS)Wnr+ejVm%3Xn^d8jDQQjD4bhMrhEc!tn^R*XZjVE4gBo1ctn4ng zN^iRMVt+Ev`SMY!r@<~sbecV&8Z#IA&}_3gUSW^ZA*UVc%CKi`lbhvmF&k{B#qng9 zDvpm}DRoeT2Hk26=uL;CH|lkslgc_RJWb2}tJKiNU~`BSy2^K^SLxEen%Z&R8?%$6H8|Kwn;&ayW0!5xfLJ_XMsL!!+2FY6 zuV9x*+p4&tQ&000&E~;ImX@j{7;2)g*mPo2OM-c-tcrE6P8)Upx>Dq>Slu_Xb~Rt1 zH@P{chlkOCsoK_{b~Oj;wO!Fwd7BcplNEi{_(Z?0A4hgsmqcZfYBswxvlN>3y?H7x zGFqmv-mjk$#mi`_ZKsogg&OSHwc7Yl-b^K3y&R=XW4^7+3F$amR|m`WpIrr9pwB@y;IFoRLvJF0-da?z! zyn5-5*S+&`-s$#>oyl%pdn(F{^DtEhShPlC5p*U#$>|-Zjb_CKYi9b>?nvr&yP9|? zjdGYCcD9RQzsnDdvkB0!1!$0H-Fi|tWq|xKD;;M^u%x=jdODYyrL<8uSy>(Om+e_> zoUH+qP70H$ky(mqo0UvU&YtCbx~>9T7mw*ly1P?(^`w}m1mEYZBjD?-nivdC%u||1 zVpP@@jx99mhj!nZwN`Ydqz|?^%{bMzo!SJb3_RWH1G*=+=xdc`p44=wc+~XtB{`(e zmsFcxWdW1QVB%1!m6vV0H7Oedc`kPLYK=Xl>wq8~M+ZHd9NGI0o2RX7QC5@Yc_`$? zJzYzPOkJ|tHNzyXZKf`ndX?Vq2krGyvefHLVxfSg9q^Fr$B9`@S4MNe9x%|6Wk@ozoCSQ~DdVRo_3$5W+#dF9C+w5!x zM6!Kf~*P%bGN&9gi@*XnF?Cg#NSso1KOE!6WQaAO^JZldR zX_+l?49CsSr8Ude)-|0=)^cJI4_Vu_hx$|JvTj(pZH3Qf!EVs$tDd68+NMm~yAgms zH{AerwE*A=}3wsHf_u`Z?<^}>qWao%FVpcs2Tvzg`c@YE}=isu4dYhuM`lB$)5n@m%& zvygmU>zkxK9dYY}wRx)4N5y=#*{+;=&B9<d9)wAfX36;Ps0TU=m0WnQq;9k8fUqthCQeovKEZDp71#X^PKUWy%cWL|Gp`ng z%%rtiG_0DuSfmzc(4ZRm3E63g=9)Jr6n!2bjft+ zp<Lp=qW_Rl`dpQq`$+&o^ z^=eybtTp@eZh~zN=^EX*O1oo~7ca_4P@7|Ylvt-Xo;CgV~NSvs+e1eeZUquy0*Gh6@jZ^=?I|(905CJ<0QKN7w<1)n3s?<&u=xW?P&}yGt93B8kzW zr?bk`Y${AM*DhATmdd3^v`p*g9>8aomISV;=6H!sDD~-TGAJB2$$BkU(zmizpY7zq zDz!6G;}oWcr&ME?*r;_LY<*kVi*>78-?XItwrbewcu5~FQZplT(xpLJ-f~i7P&Kq2 z*K4(U&8=9>pAR`}d&*|B#au3rc?zHg(p&~&Mn+iEn~d79#j;tkyW9S_PY+D7dQNKG zwJl|zYQuVM$xA>!wXANlvbT$ja%Qx1pGmd*LM0`m2KoM>pbaXvT3||vS}_l#4fYDO zjOnP^vOD=1Z?9$?&~2FVu6NpNYq~VEUGHbRs`L1>B+GCqN*sbICTAp>9qa~2=7OPpq$`pG*Y6RRxFJI?C z-mPQROknuI*pRmTzGZUliao8@tLf1}ICJ>|vyuUOEfrOHOtE4d_2YKB(4Nkvqq$vcw$x3rv&l{$ z1FfhmJ}I(VX=(ELDKVJ{6VU<++-6ZIEc9}5lBn)F**@S>`;ud3G1?Lbh=Wl`lt*^| z&;-&uV3f-lUoVYBW+RIA>886HZkFp#W0FiO*@1TK?3#e~H?Q<{^#nK+vrDS8r6Y<| zDg(vd<&K%mk?WuGEje#XrP@&j^R)roZ)(@2)p#eTt>I;}OH9_;;$gy8Y-_r%H71E+ zX`URGn~Pe0+e%;v%UfF1l4UiS77J{uJ8$P~RbEc6TzX%gYUX;~+1aC14$N=~v_Drb z9VwmYwp(m!2b7%}-@6(NH)2+e#z{vFPT8@sSQm$x{&zdG&!VH{VE z4PGBw^JY(9jq1aCZ+`3*&V4YK>se;CDJF`CApmi*OJk!hU2S*i_F<{?gn3pH&gYWI zoD!?axG^|wM9yw6y2*LIm|m-5voTbfs)3k$8VG5k4G7;zZ2;AWvyyX##>?i|kw?O) zc})(jVvZeFxJ0V~G=+|_>G9GTNQB2}zf-F1pB;H~nj;J}d&7P+$_J(wH4Lq?1s*c4nR3c`qc{9oWJqR85Ca1-ODK zsX^^mYd4O1v)-Ea>wRn@P%X|l+cRa&Z=2O?^B_FUkBjQ6+2U&Bjj^svXSKzP?ZnhN zoHt9bt!HPAU3IIMOSLlO(%srhD4PdsG1Uy*AQ0HrG$8wV>8M^sX>&@l+w^5W+MTwO zRC}N_tCrG#+St~iQ8Gtna=w%FX8y2MYkQM!tRz!yO3*ga-fpn%>!dA})~a(o58K64 zDc`+zoBiq9Oh^-R*aq9=L~q6-Z!-)(vPbK~w7D6tCL>AioGr` zp$08}C27#6TCTB7uhhN*b!XL`az)iD8s;FKEy~%pmR7`SyKucRu7<)U3xg)gTL2Rb-OW>-NayH zbd#$LYd7cpK0lZ>7PUjgEGM#?!J;s8M3IVe2FlM4Y=w$?InnLb_}Ui}EZBNm`6!>b z;rR(j+2t(|iW@l~bgiGNgXv~OD>b7?FH=Jatj?7(Yd2fiZles__0~2qY4&8@G^KiP zzo_I}e7C|{2`06!wP(Wa42D+C14VH_H}aQh)jF8mzG=*=N{`zv?Sz_Nm3EDsf*O39 zu!(kY)aufkZepq&6s6sS<|)(MXqOSMZv<_**4bPSu-8d{d0EnPebG-O<-_Sb-0Q6%Sq8G; zP6kZv+LBK4Qal}x71}6w1-l|$NBX{=%=K8kVFT$_*HmFcjpV(ANvY`YpC zuO+tMKVEgoR=N|Qa;IDD;c6T#Ejcxkmu9})5^{q{y|c;8yV|ZwH~SJ}wJ%jOy(#R) z=7>!VMSKjm<5qGvC%4XutBv^CwG?zfwQBn}IU zxi0Q)ANw49b$eRo9b1kt93BjMdr$OPnb9y8~ScJI2*YQZinT=Z5fD^fFCzyj%L;CP!w&MFP|>SDNyYz>BfQ`jgkY}Rtir^ z)t;uZ!*pY^ookjTgKe|gwM?b2HjkUtC4nJqZ;n8qVc7n_Zp^#VU@ccOQ;ly+r+Lvj zr`9t?JoheLx{3s7yU zbYdo-vSOQMfJk)B@0!_kL#gdslF8BH`l@cyi6=UdvyQ#gc%^VEAanWNdd3*F-4#chfm%yxJffEoFLmm&>ZG8!?!x?qcoGE>~X*Yo?yq~vanF9)mRvk`T87tWt zr~1Xid7`$91BtF^RltuAvYwDjc5;bjo0&2Z2d%Zy6)N1a-=7FvzEss`I`_28ER1t| zkS>mnEtR&0<8_|4b>0A4!sOT(P9?#fRv{2Qr9WodGB#CByW)Uh&6;AQ=OW*fhqNr{ zvO<@OWBX7uvtmlx$YT-cT4S))rfk#bu}2+9Y~{XDt^!SMHHVU#wF4|2HOQTZ0=;YP z!H!P!=d0;hIgD9bJWH#Qv>w{cS+Sqr6$<_GV!7)}W7()07PD&s7Nkzhg1+kY8q#`} zT~E(hyi+=}A-3kn{2CS1jhPtmIa#^?P&t=xJgPY9l0%EY{||3e3a+|S#i)57l2<$ z=VQB|A5G4ZEk!zEB(*QhRA>77+O>Dj?J)PTJ@4*SctHJyAMO zd!zY6ZWo_QcIRB#Sy$*s#`cfeGR14yFuosxZIo9pXGt5Y>jc9la^hi|+9uD|kl#s9 ztD!Db=k-#y#MgJ1gmIV+`>V@YtV@z=PP4UQ(#?(`V{PmHTkLgv`ZS%L_t-GbH}=D!GOiRRyXEn!f<>D+w%e+{VHu4%2&q<&KMHl`a@k#L z!)1P9brn$*cGp#Lluu?8V^%Z`ai_@b)*1`#e7Pzo>8#x8aN6#)UN!A}xzxLsC(^1s zo)!nya$=ZHnPqX?6d7sHGjsh(-Wg`%XNp=tG8WU*p+aPSJ(gaA?oz zx{_w=5>M9+!>(UyEr#hahW#{c>XS>aB)8_7%f7wLl&zH|Om>=j?a;MUPi=FX(Y|@c zmUci%ciiSekD3)$;pn5KOsBKyu4mSEz09fEse!pT7u5?OQ;FGPy33~v$yH)f+-=tT zc3(eQqw8?qQ7YOpgOx|k$O1~dOn@y{+cVN7(VchM`sGOm`Yli$2J_l6m1jnF^J&y) z>r37~cU7yJC|q{*@H`l{`QmU{ye0;!xWV*rng^sE2r8Qkf28ZW(O65IAcfOFqQxPd9?*TDdm4CQ^XxHsJqw1BECX_$Yp0sZ*qk2@ zfRR5nZo(4(3(sL}E=_ZtKmPEYw6F(O#P94K{(maWw8qWqegGRbKQ`~#i4UEFKB zV(e{rL&9lVduP)`^(fSer5zO@a%?wm^bq_Vc@}@xqA;bCjHJk^^siH1o&G8)Q|{L^ zH%tD?r&WQM8BXMsyy!>PfI=mSLFR81w`2h7;q8F5`+WV~fJ)1HQDiv!d_a zf+#73*bw9~<7&g#EYO{^_tESxFu?t5^x=yW0RPo;I6(fZ#ZUnKcdqT5gLG%0carVd zvSe)!<~!%${kIoBFJLzik}r9DD}}<{Q>cF|y%L4)w*!0q!jP3v%FRkBjEHR5`?wwA5_H0iQ^Iy^YOwu6*g1vQAy}_4QitX5^Q4x0NgOdQMII#(afp zT7blIqUcnzVhC=u&cae4Kk;he@2}UJ>Ia3WhQ8j$$E_XXm-wa_b2i|QfidO-_+mbS zE#|w#6%38jg)-KUfvu12um55Aa{1u@WR!i7B!0h0E5Tv>C^-8FQT!i=F)X|O{|NKz zeb-V4L|GO<^gkJ8A7W(RGr~O8@5jK|f1&vC-D2$zHqBF|Kln72{X-Cc6wCpjKY%&s zAmW{<6TVl>aeNA3j*|f9_~eg*IRNxWn49zw%z3l&-C<5(0p`-okA*pb{Q&0DA0n6E zG3MZ&W5I8LI_Aeg-A6VZ>(zQ6?!HqU;15oOyN*pI0q(@~4}&}LBijy)@*}wOrsey? z9S3Q#j$r!X5h|L4_0kN8yeY7)UeIaNi|=7~BD< zKSDFpAKG`x?-h3<5>+G?pe`l+D5w)ZB&kU3M=WWMxg<$J@NfYouh>p1R*F@t@`3I;~`p;H6yd$oh1UB~ip*GbZkg1Qgw zI+p*?uJdN)d&3+MD@%U}h+Yam&ZbL#0CmF0=%w(z?l}&bQQ)Bg%ltT|=MPy?K6Gf{ z&&v0PIhKLeOF=}N?uU^t0n{Jabsus=VZYl`Ru-N3@R(r!Ko+o%?7NR0ko(i}-QiA@ z0PY~gO#e8T6QvJe?n4AK{k`IiV>y@ArGFew$A0Lr=VO@rUOC%Mgb)u>m89B%kuzlv%$nDg0aZQutP(^@}dQ9QQ;_V>0AUk<9)!%oD$p$7H^D zr|3nNUygU=P7%3M^!rrozIUbQdpC-H*@_)QZt{@}w7<{2b>>?a`M!65_Lsf4uAsTp zeBE#3>Xh#o%WpcmU)9eMH^-4W>u-}y`IeL8zE@`bU&*EX)q7;#J|qkL>-VVq@4hfg zr@`}OFllxAU$+-!{*70}Fzq?l<=+Wh48E9>Lmii@mq+}ZxcdE-@@VF`VOM>%SKS- zCJ6o)vrfNH;^JFZLB2-)n^~t{Hgmy}oFVzjJ;VMs_a48t`tPNkzE>e*f7P3hdWB5j zezW@K_bOz<_X4V4x4tQ9)oF4OOZsh+7++ic_o~z1yNMTtN%W;pR$+zz@CTD-6*IsbndXd`q?)9+0?t3qIa+{7v%nASfZMesO z>pmU-EzJ2f?EltGVtYCJBujt)wbQ?KPEq7uUle42pF8;Cx3J&$zA4E5x_9td?LIKM zW%JwQJ7Cw}0uSH2XY;FOJXk^a9p9Mstye?--}lBWMu6S%;Tih5o= z=1W!oC89@0a(_=Y}X`lrXKx?idm%SZp8)9o0s!(w`$ zj&FCsAjdJF_5c0|1iXlmKfOi$(@$^xF}stlPO%UQeRwO)#%DCkFk^s0MVL|e=zE{P zbNj)3F1GXg=WMy&p57+;SL=N)maC8XLselc8HhXf#uD+LR``R8Cd$dvB7WH7uj!t4 zOY$qFzEARNip%@s@(G`Q8gW#zQaAoVQP6&U_y_apW0$Xvf4W&(@yLq!dB>lt z#GfPl=JBYId?;y$r0i|~l#;dowvHt*p?_+0i#oXC(N66;}U;Zu}7w5Tv- zSqWyL#ZQU$u#5tupe-}Zr7%mD(GuRVt79xuLa{vC_q;~oUjN_)8OX$c%B+XS{4i&fkzk*Ud00OA!3bfL6oo!d}hfI5CWQKKNS`x z*Tk5I{c#|Kisa$(_&7>L>H>=yMud%s9$LX;a~?s~W&sToXpJQ_NCU_TXfd`?H({?F zoK=)xZ5+ZXKXmadY+BKXNh{E1aCw%jBGE)Tc!q&Fjyc!njoMl*K92cDHss6BS1gkB4`|=)1Mb%I6MZY0cLB*25slT^s>l% zP$2l*gBBTNPed9^Ae3m*!AOX@5^z9vq%4gq5`l(?K~A7cL<Tfr{Y1!Ki9OfY1!~FcN424ss0^;%D%URSh2B`>Smp~dc z<>x`vkvu>(ux$7Us5G2iKn@V4)7o#!|LOvTl~DuqDL_nVl$hr#;Cv-s)`w^t0p|`@ z4i1kSh1tPPgP4lsENH*LjMEIr2RS_0XHG`LC7^yGF~B{8Zv@Kmgj@{RH(3IAt#J`3 ziP>=(jRwvMghP~smJsxj2eA|d<=G?yV0EC%^8ubAhzFbKA9x-mhQ&5m9_<)FNI~MU zOOtRA6!cFrYCMhr#YHRw;>7XXQ?z6dE!d_aF+7n*251Crjw}jv=LB*rkz>TCff2wQ z%L2@bx{JsR_zZ;51Q=L@PDw_p)A|tL7U(Q=ftpI1T8RWifxl!(TOxi`=5%cb-Q)

    @HNMEq$G77kd8X1-QIJdac%L$r;6NdaSnL$r-b$PF^Pb{0VTlEP^O(~m2oIYhD0 zr~v}S68h-`1KkwRju8?QlFG8?iJue){TDzJpFGi;gB=0wF~F z0~`s4foP-wb%8-aa488AF-;;M4RQcpbGKlE;Zc!TRfJ36=81I!1S{d2J8%dFuizvU z^in`Q+`Y&v1O!7sNoaz|2XQh!N2rL#P>V2VI5QHS6JJRC$*4ClE;6`f?&}d4iO%XZ z1Hw}><7*KVN)bMK?n6LN0aShN6CMY3Br*mM`X<4Q$Qax_ zj{!g&M2**up`Db~-NB0zpfHT^MJo}bUtQI7a)K-(nt7312ih-=d|~k?&z?^_Sqd{S zXsMrEhedeJv5!*DuPcj@G z7=pp6=C&o+I42NvCLjwX1d-^z5SIujHNbr!4#s5&=E)F5%Hk)1#c*^9aVVNtKwKQy zB8kKVaAts!GN%s#iXjdL7>qbZLYpKZO3;wit4(;yYD2Ux@Ejxn#8pTj2!ut;f*S+h zOi(!|D9^L-AR13pji={nB8LpVw@#tDY|$p>N`c9trb3uP!_pW}_GkUwNJo2Xj9Rnq!{GkOW8)NsoCXz=)sF?IAHB z#&uvgBp!nW5d%J1(aaM#bPq|~@me}gLJnh02-b=N7z~EqgBFCNH2_D3NF=?0dV{zT z+xRc+M_}o%Ho6abOC+v92d*U|B@%rhR>6E6Pz&{nN6!fEPSA*jVJs*wW?b+ABm^;lBw~~> zumYR`F|sHt+9`ON1eGF2aS|E9pveLMs4&yh^yQdgq*?MW&I%Sl zVUW-u5VG(z3M@~S#-K_h67!RQv#3r16d=ODU4cJ8@BMHO`b2Crjmq6?! zMtZg16zSRZ1k5r6I9qzl_elt3#CO>K>iN=$=cqsT{Fv{PMT|KVq&kfWQvg8Im3IFc2-_31v+1$|PH%fCYp{ zfJmC57g-kLFGUOSIZV9~p};PdWKl#+oy*{qG1dc%26zkr3wTZ92xw#vd0v9$7~BP+ zyNtmtNdGg~mL=j}@gNGP5BZ4#8fBhY|1YvDfJ7DfU9dbY8Va;Q zfM`w=H4Ta?n0qE2pe+jK33bRs!*dGF5W$xo4loq{Zra)d0RzZZY#0*j!? z(rcjJg^4^AYdo(E#z5k=G^UJnK+~n|MCOSNkxAN6B)gXoqGNU9c{CXu6FCWK;nT#Y zy{E%v%rwy44-%)Ko&G@xen+Z=8Yp5wH94R)cPU`84! zh-rQTaiA@uKfpvFEDPcS_(>ZeX|U<_1m@PXHs-%rVkQ}F4Nc~-3ylu$Lc%o!Z3OO8 z(AomRE}U7^Mt}q}XvXy8lJXK}-IOniprup32!^Q=Jep2ZG6`rlmYi6Llti#iV<`mM znATx2MiEG6g)bK=O|zl zDVIEF#bhp)5%h&gA&MpT8+V6~kU|u65rGH6ggs%KMGm1a$6PSB8FF4mD;!`Cx?=2- zi3mfRlxfhB$Zu_pYR@7352VFX0#>;G-1EjG2zL;r{?J9zN?*JN{ZiyFQTRy%pO_hx z9HBmlBIaFLQf~s=f?3{Y7uJ%VU5GhY;xb$NJ@Oh_U4&pltm zc*Kxc!}yD?w?jU+@E2WQ1NFKcI!X`}0SmB_R=1-yM5}k<8qY3F!}7A$rI0k`dlzUK zFDS1ro~RJkXaoY{uvjOciNyFq18+QHAJlG)HPGuzm^%`PGLQJ*k`PK>V+6g)?;mq z_;X+t*3_{~jTIQ&J*E+e4A2Db;t=Rk1hiWib^{4O6;Q}Hrp=AT2rNxW%-d?Oo-Z!EhW$m?Yn-+KiahQML`c$C zz{@85SC@ccf=HT*sE{T>bP~ZydbSO3r=W-DKw>c=r*I5G0GKy`7y~%QYKY*O(nGYx zYM_A=NYW3(aRxPv!4wh}jX2VN<|e@&F~rq?S^N|bdZJ;$`VBlF00CKEb47Yu2s8y) zsyQqOH{cOovtD@dhQT2SF_c#uhoCt^sQ7$@cw$Ch1)6A7wOw+0G83#Px&MM!ckt|B zZxup3R8eS3BzuL#6E#FE@LF+;kq~_Wd9lulN0-o&;1Dd^N(9a-oR*wKRENQmh$#_V z1hFwkqy@M2Y=VY73ly&|o`@TnftW}57mSObg>=L{a9T8l`ylJ0Q^AA>SS%8uA;iS| z23j=aGE6PX`Vd)jGFVN)yeiC&zE3lKNG*x@cXYBkeSx0D6Jjcl6t!5*`{LI|kRgJO zXt1sGkP+p#MpiN&><&~anv6OjBYx=u}HG+e8-2}`xpKc4`mE25|)VW2L&M;OIGBLs4n^XPG+c-DWF^h};PnCl zffPV51_E}xR45=GLR_S`iOzs872h6#{jwxLL#g|+#=6HNY?n!51b2aVRj^!wN`v)x z+?CAhJ`#Y5CThSrUh@H*hWoLLq-O}oVu(m%-2CN4e)Ka>2PYE6)LbP*lB5F13EK4| zVh%V`T4qt`(0gN3ON}AY(+gc#4@N1~c`1Udk-7>2mC%$)4Tm8ZLo1Tt6)e0rh1d^N z0E?QKrY67^m&BVHIuOLTfD8fEKwAS{G)eEu+5v${tHkP2p zvREM^KmjwxSjJ?~e2WB5N?I~mBxyy3h%KhAv0$s9LZVyI>$fBkDS7lt1{gUHR;>|m ziVEIh(LO?5V9AxXXPeX|v?0$fOe13<5LH+rmK|X&wgpi$SCU@t$9rmms9So4Y(yeD zDv=bT$k4j2#{${&Bod=(vCM0S#d~xl?7@9u)r-^2l_-*(+oC4gqS3tv?dwAY8A$> z2Z)J7f)lCdw0sEqC0Tq{gtg0l!~&CQBB#ZXsGO)aw4${+t;mVWhFN5!7N=!zaFjv_ z$dJO^OP4TEz!C!-9jh-G6$rBOBA}v~cpgjZs4T+E10a_eg@5-Ec&Pw?clYZNSYOYa zVWNXbJ#iv0G=egyt*hua8SwfL@fiY^N@+nu@<>NXI~*o}QJeIj2;de$iX>>l!Y9_W ziC=z&npoB4InD8kqINliX0)V}B*|}WjY#?stqV)8+~;cwUNZ-;Rq#%ppbybEB4}9> zaz{hZEQzL}nrx!+5oqRFTP6;VMA8aTVuX)q(Fkur{Rkk$OH3^P)Heo=w4mi)iN29X z6yn8D-(&>k7!&C-3TzQ2E%k(%G&E_XqD_2?R>8(w03;~Uun+PYuZLilOq2z{E3XA< zXwg_LJ%!esd+Ls;DKSBE+JzB;j@!kWuuF5eJ1=WEf%=G?%B}))TecdFaa- zEQ_<6#lbd47f2brYCuAT=h10Bkkm>Ns2MbI{u;nQ`-YMBv;A}#yz=%4uMw1hJI#t> z84p*HS?jwNSPQ*U_mnJkc~sO9C?*7$vue zI4w_%$pdV&ycXYSmm_omM%W|h$_V@Bv}`jP1C)6lqfbez9AKN^9>k=~Q%gwES<(_% zL~BTxq@~4Bu_XO-`stJyE$RJwM9T$Xn}`;T8EFlr$WP@Z-$c-nFi~b!YhxNvP%s0d z1#kF^a&zqt7AI-sWwhKoc?#3Pc;TF5$W95K67@+1a?2aj2lSWoeC9A|USlGr5Ojcs zdMF{r`@(Q2IyCyR=Oe7H%`k;ToR*-~C}9zaQJ(V5@H(zzSmKm849*Z*;vFNrNI|CH zi9OUkh%9J_BbTPYRAQ7xM1hp7b$@|@y>4a6;T1EJ+I=u@|J`trHI}{i%oJe;BC~OcZ{8 zkW*lN?2e2<`r?FqXI#tNG zln{=JU$k?BsU=~8USUFn# zf+9)>gNRlnY$VlLmM7IWor$k5UeGxx@T3aDlbRgzg`_S>nDEyiqsU(9vM1Mpe1{R$$<)n~X?b6dCU@-}e z2%1|NFDrvu@mdWE>us+C@mekxhP;kUa(|l9BoqPDfT^t)(J)^p{zykbOVjFBlfZh? zMYzGT{BzWoHb2`>v&sGNh(LVl*A$w->Z`oVu)Y`FY!boOxBJoy{Wvex`8qL!7mUO& zqM+x&_pm*QhGr8hF7I?jfP|Nnb<&eOG6>&`HP7}J`<`7-7QfoM3_RO!a)KcEOOjCN z6mn-*m$aXZz@Ll*f>}xW!8qvn>O~|>!@ycEI+6_FkEA7C$`9s&)VaQ_19?JxSqHuO zW*ubhi*4`LLGOB5hqpEn3%&hr9o`-x*5SR)aX%0F>Jopj4quzqti$Upngr{oeHUt- zChx{UC)-O^bh5s*NvHg~dBAD{CQWqnfCfc#Q@T>W-NgRt!|xs|!rMdmeLjdPzB=&! zy!hiF3}~?wuUiKUU{SiC)`6s^HShVf4wyb73HhgW!0SFR?ejbU@;rhDPM=2x%uOzT zJV`>nvyEs(ry6O?KM+#;TDS0S9ked#WgWCO_YwoG&AwZQw?~L|c$vNSi5q|FF z%{n}{`&5kQah|&KcH)D&MMcl_h$(;Yr|`}+Umwp7Xc1iaJJ>3pBw zmlt^M6E<f+tu=LTmI|U4gAXm*Xr_i zKdZ~HKQ3$a_6J4b;|+DXJuKD#;UI5Meb(<&^?mBTH(C7oeF%LozHaPxna-CL*!#cn zvV?!R3ao=)F7JEk&*AWo;pbv`Am1`4ue=&Z)5UT22;;q%`{()}dT;!EKH%#j;15;% zL?`LT*QnP=|M=tmMGs#OH1FHP?Q?nk{O9ttKo$Vio)r6e@x|8?f4POlzuv<8P>M>H zQ$VJyGOnoG(|vndC#Lr)(Cp*mOLXvKbva#(XOGniNQSA>+Z~=?e_kHAAiHwZG8L<{`i}I@D-ft^XFOr`H8K=_O$%`Zu^3_KK?d8EI}I1WW(A! zIe-;!l=$IjUljg%VItcfl%Z006XLr$5B&+!mBK$hC`y0VnNMT>XZCP-06nqGRNdHmx`(R_HPo*^HmaI`IYn%?fy+jja{gFT%)YwS9pqHysYfS^pFn>Zl#D1OizEG-fr9f2R{ba#A!#wv(?E< zOFpRd%;**m!&2E+ZkNNBl#3J2oeNdN>RTWmAW;S&VY)!IzKNdCvkV(d-;0m3j1YGBM+|&s>3-?HIQMFq)>&)RXtvV=aS04;+ z;d1(P{h(sPyl5TVSW`ChbO>Kii=~(t! z9JOnfzpAHRVCCzcl$qKXoVbAD8tL&hb4Se-#c`;mgu?B9zg~@eP?DX>WE=KekGZ7w zu|PJE<-DrjY?<;##j}P}`6HHSmOjK*>BhXB^DiIFu`slphrYQpfW+r|*+3n+mc_BW9dpYFn0+${{< zoxmTDRJ4+xA7;*CW!I^U@=VUTSi2gDW$iKK=G~R8{0P;~oYmR63F@#o-zq?{kpB?P z?(V_H2emnsQ}o{IG?_-#(_-h$&x&T6rv=l|ST0$8b>`99rjBX<&K}^nb;^7Vo{|fn zdDY)6cCu5Zg zOo|tezz8`@G~CN1+p0NispPrLygg_MriOEu&$Rn&y<4kYgkdcKI7jBG@r@(ow4JcS(yoyICrQQ$9cQSGLi%dX{p8}cN0)=wIycgqIpH9Kud~2&X6TO%*7fkhP?xzsM)>E zx=ps;ZMNIbw!2Za=470^jAv-Lu6x5#bQc;pubi)OuAMHIfGDQQ&z@`RD-6tU@Kj@@JN272cv%A8dzJxjfBmgoJ8WW>pUD%tRED6Yfkn% z-dmfbS=)G-Vo#3h^1iuDubzCUBk&I1n4Lx(*KV=5Xs4r_aVQ!QM(31cn*eOFV)xgg zx^5-9$0g6#tgpi-fXvKknZ#a^t^iJjt^f|m+$>oU{eYeM{DyM<~4+c0kFc}A{y zHesT6C6hoOs-c;BP*>~Ltz|2w90MB*cK^DGEiXHn;z|)N?@Jb!p7p`(n}SxdGjp2h z1bC%2Pg(`j#`g$pf^JK!#7~+|-~5p`CBx&8c`^@0rI{&ui#WP004Msq-QHHWIA!8y zrv5avnB*^)qGipixehyIpnfmiWE9B#Su~zdU1`m~CU{?_GYlpvelza7?Y&-%|T2B1t zOFY_%%|d-wlj4~~-gfEwMN`e6q?dBLbB*mChGWT{uUU4?{4y^(=;flBY_ki?He$Gz zGpkf$Rkw;&)7rF`E>(}wVCc7;@kt`?DNJKAb87!VwQ2R5fmoq$9`-JQuu|v^LuGy+ zx1=pxr!-HldE2U;F+8l^=_r&Ro4Ba49m*_Ag6%5hoDTmu+%bgIqiZs*EXy?|I4vL%_YG+9PUtRVn{c|)W~@-hYlBJFfh}B`8a34Pp<~HJdIU*v5`V?eLBHj0jjsT z!OS+b29niYd%6$~=2>W*Xl?VIn9mZZ&aI9PzfiZy)?#T%T6-%S;|cbALFXt~cIK}+ zssD&~_|%!*c7^mPyY*bDfnmW1&dz)_U9?xlV$ME{0be?-oJiE@^m1kE-&^}udXv~% z&xP?S;cuj>3zy5p@ye)mm_H0msw~Y)o5{?ejC`>TyB3zW$Vp(!<85(a*|7V`&Z%Z; z-eh&VM)u~mJ++Mui$&&x%A7Ot;bL7W6~p;Ku0P$R*77{>u{+~lTXErDUo(bbBJ$X$ zcMX5cUum@$6LWb^y923hJvmtUg7L=skv$~5qw8_xPbmqvD>fSMJn`lwVo06$`ODP^ z=ptJzwX%L!wtse8Jq|I|ysr<^&dwHrJbbN__DBX~oCLCS)!oc8VZfg{*i>@%rLv7fQ8 z6tll($u|$O&M0ZY?VX{`BSRN%kJNhQv3>$$JsZ@-Oqzu_5SMc+7bvo-f z8C&CQ5ewZ$_&z^eZ?V1UgYwmv)@5iPo`~Q@Sl4Dgm@$)lNphuysQEsfXVTm2-fWSt z57#C{LyX=V9?!$myyH|R{c<-^9Nx#=a#UJ{r0Jp)l>6~m&3Q8^bEQbzO9_j2^aS1FfCJWUAZDr8{YED-brWOeJ@}n=Ul-zCu_W9;C6w zlg)W^x$Di;HkIbIU1imnt2Y&Fy~wDXs;xHkggY+m6Qk=UFuQJcYH`}s#;~704V}A6 zk9XJtYv1)E&NsJku487JJK)PHGM0iu_L@9fBAq@&NxvxSAA zkZhMOk72((?<_&;%}sH2HEz`PyyG^k^1kZCn{{piF0lN0U;d_w=J~zWPl_j7A*Vzr z+Ggq|9?6Jo4th)DGkw_g81-=|w)~#cwo>sbaXOQKY^J+XxFSgNm3z?%k*xVWAwK?&KR}Q85oPNyOkF;cpS8~^xBKEgRaPFv= zT#<^uUpV(Fyp-E->{laYzNQwa?Tgt}xVzq$d7Ub7_KVJ5ns8h5fngje~I(>M?Y^RaSvm0)G3`O?UdZ;k? zpz32Pm5t|z%Bb5&Bv0qXQBW>k&sIHBDfN)#y$RE?o}9GRBscB3Y8PjDrbzcN^IH&dO>xrD~{-389FjS*H#LJe6rL$6~^nTjh6cA)yHm*u9>^T)ou2TQOR;sQ{ZrI?XR}j zAeky3N)?u_wUYrbOd~NkuJ!Y$3|$Q;YSoNrP(-4G>mta zHK}Gd&4QuFGSg|rkE^mPWaEsM&Z;sHxn=4;StYFXsYmKJS~O1?I9th{v-(qk>m$TipYv!a}T$4&QNPF zD)w=o&2zUra#XL=T+y4Tc*K1@ zc^>STgvBhojKRpw>K~eqX7DeIS-3)5?JaM8zwxc6iC!v~?hGw*<$Tk+S#-FX{i%C`W&9VvnA}WS7|A49$+nmM(PwlPOE~eQrp(Tojr3oWD_a& zgDUP#E@!_qjfcfuYdr3GgN~N>yyU5F)^D92leM0OA62Du>J^hG!n}#=@ z@F2%G!*$V7y1CRt=Mra9C*PzPanco6E7xsW)u^N2EcAlCk}H)DjIWnt)Nm+gB&L$x zmz(`W&r0;sxipc?g@bvhL~Im*LbZ`6$JxQm}eG9ZzFt)gB*)DqY8UZXU9=<^5rwud>W#QmPD3fs)gE z*?dsd=;%HG$xXGFrE}ivHj4qXd~e_TQLcYCFShB{ZfPj7lY`f8<*x@WnP!tkb>=@k z+R>%C+{kvC8^3qu^sX{OICEDThlR|A6P?H%=-?+nQWlWyem+)A>+(Bucl=W0U6?Q;do%j|n;=^kx^zYz|LOMz`-U zPf50j$rra7*lFV5JScCl3=kvw~k%6~-qv_T@eHuF| zoP}!}@1>%76Ag9(XN;3?x1QO$3x%7Tqp1<9B`ZeL%4(>Twi3HtId(a^6;93gGFus} z4P~Am2xbWZ+M#PejprnkE3k$YV-GRj>$r-JNJE8 z&fjO)dOvZ@NMjRKe(=+YF?dW{l)NRDbLS3JBUu#8)>ftN_@IoI5p9)|!dw;IcV$XF zYWzkx&HX+bmtl7S`!t$q8+ww>;k=n0?pbl_qy6%{;$65+p|&ML9rpcc#h07yvvKj7 z=XyylaPqbS@n*p^IOobzCue}OG%}|0xHO|@>_RQfO2)_}e6QY$lGSQ7rss+2Vra`J z*WOV%Xij>LgX@NF^Vgw)iAcp{o?7|hR?c=XiQZkxx=$6S$zrZ@4^9(V^VwNsd3U0p z5oUm4T2s3zku^AiT-H2O?Db(F8J~1*wvi~>^0jlNcv1phLz?M{^Hn%gY56ns+~Cio zuRBZmvYH5%x^xN7Tc=q)+nu>WdC$6NrKo*lC2*Ta?Mh1CReBVZ8u8vqBEIa*n83=Hg2_;fji0A)7Nu6Vw4oB>faq!0he_@ zocoPKf6=BU4xX7@<2L@WH)re>KB$Og-P=WcwVSlhPAcgzaI+U%3)@g-=tw9oSuDi5 z3o4WI8nfWT?E|ZvPXs$lzTQvY)X6R^JLS7jubV^l!`QACsP*38Nf&BO(d%|b!_I1^ zCFVY;nx$T!)!F`Pu@i=l^>Vlml%^ZUI+%c6Civ^3TuHAE!K9+@ok8Vv>lNjzy^u0l z)0-jdD;6V(=8`LJ{d?ctk}hPOhhDVT6B<$DVmK`Dx0or?00i4Tt{o$fa1%Y(c|r9i z>gjf-8oG^p1*t{NnXNtOyiUcC8Dhs9wd<`Dfz9qV4IVZbN4{;!O3T9LTnnZdbKlNI zwuy{0v$i^DSISkAquaZYcQxrA_{yfwT<~1dNhx1p42k)gTh?r)lkr%r1g46I8Fzz0 zX}WLw%AteMIUVNh=FObEM@^d**i@6aPKbkcBrS2fy)hcJ^i6@xmUj(Z^|8fL4w#pn z!2(vf40lnhU|#GptwhUb4LAF-@RAw{iELZ(@tfR!x^dA~l|2jPR4YkYIiq=Iqpm93 zu(uoL>!4wH)MmNngaMqnt89kH*=idOsGdTi5KG=|MVY!@A$s)>((8F>07F2$zZj;t zRn)_^XKOBX@H4G@)VN{1_N%w8^a@o|)4pCblyJ_uoKV?;wUQW{wx-!&Rw*`DZ9iMK z%T(F8p3Ns$cc8TJ$=zzLf7mp_w5dH8KPW0YQ7*@;!FyUiY>BX=a4=89gLX31Xs>Rr zjg94)>MGS*l@|AFmGT9P!x8JPpSs4x(I2+iocS}8Z+I8;oKH!IR?Z96RW^}Sa}!DI zTb0YukTf|eAC#49XFG+W5*k=%`PFd{D>nxXwrA()ec3-w3vTH;3C6jFc|xyC(R)bo zM0@V0J5%o+LdJ$vPZjC(SS%&kSd?Zire!DMzwNUS!@I5uJxer(MI*$>tz*`<4SLPJ zO3l|Uj=agBI0>{4;gevgrPm`TbB%Z`(Og)~&bWy;`8Z5Mh5PL~*0DYSC5>)h~!glizYUdp~jc0nx-{^UE}bi*(k#auoT@ z!CqcoljeG<-RC5c;#2?)o&YblFa0?!?oGy1EO%Bto$}t|829q(l``%9kHlpWi}SX0 zbKbH_8B0@1eNab3rcoW9yOXop5NfN7+g@w>E2Sc}-uafxmD#-YuG#`Eo;^25ZE(FV zE1R_aa{RnYLN9NZoYGzpu1IQmiP?xNJ1hKUeE)WLGxR=IOAqSXScMMcF)!npe}3iC$B^ zODS}V-iQ8Jyvcn~eoOeKbmE7m&lGIz8s>uC5pxA6W7a5(T*wJ9Ic%+%E8Fa%zc2;2 z=HA&4u~M#+y!P^;i>Gu9`Q~S*xt%*_xz0JlKoT$`L$ZYZe}gw%amu^|iB;ZeAE~!vlejTHWow(38y*bskXX zrs4bBhh)#y_tT+b?Z~RFWaxW4 zqb5KiP8nGOmSO*#eueZWZLh{jqG>)(-DLDm_A(VP?KD z>;+fCTMSBN!)?*AwjqT?ed3#NNcrZ0LymZ%TS!ZwMNAxlZs?qTx zXPK?cO|kw#Z7wFyBj}uqsyW-u4Le>w>WFN2bKlt`CN0%y{B$#A+mnNbmv1R`WUV^A z8N=y1TzC$lI5UlgJhf4*=VBa9z8dh4+x3Uv;n+T$e6Q~v^3r*KynufRM-uCCYibx< zRh2bcV!|}d9IDdITD@g5vbz(DbK7_>mGyR}+1?@MG$bP1o=Hs|kE~)CMn{5pU<=o9 zm>=Kk#a%KnO0ax+A?B>2*f`Y#L$>6HSZsbPD#N35zcUscL8X2@nEK;D&pq;(n1WKa zS6VjF9#gncYs6g!ZIfuov;sy;a5C%9qAky9TP=wzLq0g)6&va{urASJ&J8HHW$wjp zo1EYiJnr-dRVoJ^yh9mDp=>QESEp_@FkX9&`*~-a@a!9^F(YMrO~X2sNc0Ac!>zMQ zDknioG%|b;t@}_&JyI1)rdpRa=)^lQ>NM$m?p6l962_3UsTC=g+ zwUD3;tG4;l%X@ule|zW^%kuc)i|;qfRN{kj1)F;%dWylG{A1obdTfO>pSIPyvq7*j zbz7Kpk1FcPYIltefpb~f-rm5{XjXe>N86`LsU+xrIM;~Z!pTW;YrSQ}R>9u)<`cA|*$-JW z{Y_1ND3ssOt!6i_ks9!HTy1q4J>S< zd%Z`Z*?`OKy?jtX!JAcU^WiDH*m!Lj+x%#o9SU2|A=6zAg!WLZ`&--Ms&z2=FGE{j zDP-(Qs5UxyFY>&%Fvpk0q;tfVB3qWsm$y~Au9eDE37@?D@Uh}TF*6H zdp+LhMYPn{Wmdd|_7>`V<89%s+2=jvE9YnnVzHrM?kUN2iQ<Oy=qa_bfZvrniotgmK+<8;kBujn{@(0FEemBVuB;X)0_5g-5yis zn5!<-I$S@Op-Zt3D&8-RvT7>km#Wg~sYs%W`F_Ft_CS z$-y6%*}S}LS8hgdQ&jbQZ5piiYCe8(jZb9@A3D^nW|lGLVzb0wOZtwj*~_`0US5mgUwsd#qg=ReQ~>PF7W}pFA`Y4M`arX3cn}ufBcZo}(G_yt1%(N49v&{D3Uf4_}QCj9W;j*Nqdo_45iM~+r`tVFW(=s)_ znVe!jlQ0*KhQ?_Qv6w}&TIQ#m$Kh+Lg=Hc<_j^snvLnx!4t*Q7NZvfNZQd%|yY_rm zTGZ2Pb5+jzq_H<(7-t?_hF5o8-sqhdd?n+^zA|@xPC1j9rHsLB+2cr7EdtoFKD+cx zwv22|T(-Tc5L;c+t;DKcxi$y;de?j#Z6jV6+oM?Dyxy#bj_YKkd3Q&>0?qNsXt(Cr zh7+Q-7#aYXWLj7e88o%L3^tKU?wCv4NC+je4&<5kaD zj19V*UCEbg?8f_65OjagRBX(u<=wUD)GA^z1s2YNXSz2oI_g8H`zdAODb0+W#Y(&8 z!@ESacXWKssY$QFZ&pti!=TXY@yR(amR*iu&@$n3zN*ZayDcOaw+fX;O`}_qFN#Fb0Yh+P!*}b>7wWK3qBl+mj*Bc@|P^ zSLwBf_F`jdb|=?!Yp!?WFS&8W8MKAwmQ1E(NJ>k4Su&}oP$3;2U*nf_maXs(eyzGy z_13vd*N)GBOUJxRz{xp_-Bv!H25O+v4K8<+AZs3beA}jEwWl7BKp+u4mm|le;I%tT ziKTjD!_BHORL<;_qv|-BoQESDFy{U9i$7&)8nWibx;QECGo7?2J-%e^?RY#;`=FM2 z11}c?W+qhQCd*QA6CQ-?CZ)(#dAYIdIu@x;BxbSt>fX^PxmediVm=c%cq7}GRBzAk z5jD8a*)r?Jk{O$~iNfYGX&EjKwL26HJO5yu=r8v22NhYTR@>Rbuqf7@SLei-^SW04 z$?DEY*{r&Vo-O@~SUL?(Y4@hQ+XoM}CEq-?>am3Na$k-D3>7}4En|)<4fl;2z0aEO zw%9yjD4~-~dpe5;YwmwgqYdlm<(GS(rEPBwD%JF4;~ga`{aMrGKOAF?@X|bzs~NUl zldr3G#5YdX7nZA2+1kvT#x7ONddj|VHa^I=E9@iGiB9Q3KXY=<=vaXXWs9{^b^?*b z)E2Bok6A~1x})opn4PvG5*-k6;}Hi725|hEyntip&xXG|-^J`S0Gn_viItUH^W=bKeyf zR?&#@o?!)4+Zn&Fw>Zk$S=t|8WZ79virLQ>z0RY~+R$NJCXQ$H?n~FwY@;o1-`c4Q zN|nkK#>W{LYx;&rld{5w{-r3aJ_4js7m|)ib9R2T#at1C#&ssWmJB|EiXNeZi4`@7 zalb$K1Bv%BSs!X5z6KXWYd<+XOSf)x-+zn&J^p0IP0aEwCce7LTl4E0^gBN?xHjEn z7kGVHx~zd^ApSb->XqsRs#t{Jnd6#02N^KV@!K|M2%_jQVEvM*oG`JPEQN+ z4#|&fyy?f*4EzOPS#cC>s^GPdyYry--nTw&ab1H=a<2rPhusa1IC7A7g^LZYP5!oi zUEKBw`B2YZ`HbI&B{me7mAnprKxaJNRodtS+~mP7LR5})u(l^$I@X6Lh8!dRsMua? zHxrrc;_tWN0>4J7&()~+*1@s{+4l>xP;1SG3!&GXj*5%OJ}o#^)HnAlW7l@JLubwI z^<3Go%l_hS+?RIk1LLGq-?|LZ)`lC11js3DWrl5Jge$1h4 zdHn;QCz`mDkc7_+&1)U9tKU6+y`+6p?Ug9qw-&nd5Jie)I#>^>( zX!tpJ!@U4MaG-IENylS6N%5C<4 z&WUihVsiElI%-p`yy?Y_YtMUY?R&DZx@-p}j7%YShve{6DsMy@=YL?S=HdtJBGra+ zw=K{qC>1+i4y#EkBjN9|_W0ayH*i+kKOf^%=|}ss)vDfltL3fKjQR+FO|@~g=&jYs zD#SETEAWS<`eX=!L@W2wZYfM2f8g$1>Ll78HR6HSIrXwFr7U)>l@obq5reJuH)T$Aw$SRKlOS{pAVn2-vz0%fKrP!KxkKKvSFHo!#1kS$2E;vp_SYu z>8;N0qu@3^aeGiSkGSeROS?`Y!L}Io+O_g6liPn_Jg|dy?$wQY#w}L^TAYo^Yr)f7 zUFyPv1J+)2tCAI5Jn=)7PvBL(H5X8WM;e#gp!NdG8FL%qr||$hflJ_{yV<<(p%n%! z%O(ns6`I`Xg}t@`ce?oi=lz`dl`qe@J=m|L7Gc){^;N`&_(ZDw1P$$a&H6N6Kr9`A zN&SjmzEfWS2R(5+NU>n^`gWt9r;H$cC){BoVP^n0OV3~JDc{6*ahCGn9vn*c7rs1e zLx8i_DLeN;W0Nl7dyn1>s$6N?=ww#EmzUMpL-}yJ?BIq;@u5i#&iwW1w?Uj~HaLZ3 z^J@qbJiX!j#%sKPJ0Gi?PmzN9S`QZ64n_ZWn|uytD?1$VrV+~M9Id18T;1gddPU5{ zzG|J+J)F}mT}(=ID2P_o*FKq(fY65ulyC7Qx~eyrPU%=miiUf#7rr;%80Ap>{DE^x z{U%v>f$x1O0ch&$W(oGY;B{0yRLj+LPGHkV$Y!tm<3kr~7F%UjlX6&o)2G#h)ze;W z4zkxC=4W-#znqs3mBF6{sz*3`&$hAe z`85UG{>$UX5P3a`b@*(9o^cwQ z!k(3;DCI-NrZJ(Zf7(9Jy7S8*S#j_8=bP~5v#1Q4 zJjNPruj&+NncfmD2bJmPtTlG`ba%l3b;U`(_L<|tdtMOi3KAAE`J0BL{r-7`}BM$U%we!RklrT-8Zqubn|-N!TPM+THKEntqXQm zC#Qu&?X!RS-`EIID_k#bV+T8Fv2gAMwB*y)StZ}@mnNluq!UJ61btr6AzVr;QJyBI~ z#?wQtUuud4Hs5%yNaR`mozX;=sWSy z-#kjaiQ!}t1DyyqX>>qW?m^3r6$*dg(Pk6q=$$>T z|1^Q78X~~$_;r}MYsM%TOqWRG)vZF`026^^&zO#}$F-5tnfp2d$9!}Z}wUx zjF>Zo)m)RZA9x;KHpx(&IONYVrsfx3ckgG~e|C$rY)Przm3eXgdzc3u)YFj+S<(}Y zExlC9)X$0LR#4Hh28^%h&X~13uIa%f#iT*`Qf3rvO3x^H7{`01@?1~GejkgJ6nY)5 zapN~LGW=U9=zXW9EOUHRK~g?M$z@ayfA#h&*gdQ5_o^}ZIHKV7d^X_fM;U{B)e zlhs&f@Qq{TC^#}zh~p6S)Cxzop0(QJLpUvUKm@klEkGd+l2OrQdtk@J-KeorG9^+Dp6q; zLU4B0E=lMM8tgFw6_g)KCmypxf3?)Rv02j!1!%CDk=DYX-nza=rLt72g~;<+ZH)0M z@gC^=^lYuiEnzTv0k-=3Bngi%Z3ovNDoaYiA2<;NY;#?-$?8SedEw45A0qi(PsQZB zJG@rm0!%#V4pWoMMi|BR(xLnL=5avSnSr0S==B&g;bt@W-qP*TeAVA`=X*be)c085 z2$wDdtww6W{PW>k=yE)a-fIw!axY%Rfw_X4pk}?ya{>j9!7V5k1c%=|TEF8^JOcBKT>@F6U zPCHl_-i>U8#CUvGcB^OC`aA=kXak)5p@R}1Z3pk2sg6T2(9XBPK3tKl zFCWd^OR9D1+4xgh2-fMrLH7LKviFLgJ!nE2lWXe>y(yjaAqG^BR?OCKc6$ZU0Qea* zx)Rgn!)i9H-s4|gTueaed(V2zNolr0i|^-$q?^zoQC2MFa`Onw~-SEAt}mGKHdg8kLnKm7>1HD z^PM7Jaz0vIh~^>p)_gvw%_j=v}-;tZH z5m}W*=?I_Sz|bz+Pht+t)#kXzM28kTx%l6FnkR;FD9qwbY$$XKspk{ zwU0U3T&h8Pu~44iz}__JN>8z&f`RSMD*;fLwcN2mEE1@|mu6VSrsa8~@|-y(6V}bB zvVsoH)=B-otHQtM$O5;I#9D%#FQCt|?redKTcdH!>AtkFpjKL6ygXM+O@j|dw`cY% ze;>E;dT>9lcfaNWY3DT6x)&LE&V4dv!Gj;1x9}*V!`Ebwy-S@d*>MZH7>1btt7(9l znF4Em-Jm|6h2PtFz^zesoon7#Uw~nQUbEmz`(U-_hg#xzM5^W1e6BEu(anhXZ@La9 z&H9g8qfd?jW^Z6V}y*~eDb!DTT@ zBw0Yt?C1HAa%#q;)n(noZ!6qGqL`5*lF-dbqBZKC+JpYPUKv)PHSIsX zV6=*zp|XmYAP3%#b)CdkV=zjwV)k*rSlj6A*a5oPXV@t(ha1o3B~_ z>gW_~`8{>QZM_uoerw>OkKN$dH7`BxB|B*2!4)oM85OVDzeDrB0(S}A{*{7j3vaF+ zs`mCPTYsZIuHS0hZcXN8=kO$qMsxB2+xHQdkMI6qI+@scHBeP_7xZp^9t^src$j3e zL{yX0suW3*SIo;WPR6xvc*Z-{jaZ{h=mG zJsCN#79r0Y&}#yzRfqV%p1k=3&&pvLEO~}{u+N>biK}Dq82pBI&0{KZEjgmQbb;K@ zqbg?%k$Xd7jIKS;!fmDV_P6D3L(F%z$X_5voTbq5jU#P-%RS}JYA0n~Q4hA#yk7KJ zU0YA}bI^#-vyT*xJ5OlEmO0v(PkU((o5beMELj#$9>+`2KF`ncS>L0;9qbr;1iPM% z=CUd5C=l3!TGF}B%b}SzDmFoqLi%;F0o!a8Q(3mKL)?BsW=+vvUdzp;T{;;Lx-bE^ z;w5h)(5DxpbvD_zuB<7E8)drAw^=|<2}_e(H)jIvqs3~Fu*ou4EVkO!mLKz_6JJHB zLUr?X@y~ytEp!9buX_2C%mczV1D;tp^4=WdW=?f;P zTXu&5CBoO>b05@?{_pq)R=aPkV_q&^$nZpM`XahdYppC_kDZ^U^9*XfE7jl^$t!^e zxW=d}Zm0#vYj`M5XVgwE+%DLl6Xdo>rlbQQ+Jq{NP~9F)lDVd=g!ujs=iPP`)g?IECyd}XZWZf=bJo}@BT94fOa<7z)cyNCs)ZT zX^1Nc(iF5hksC~r$`0?g%tyWH6V+n&cc~Cp8Na57-YO8RD}U``PRD33R_!Boi}lg^ z1S#wGqJy3~t>G!-8V_>Vc=aB1TVP53lOAcFzQFlnISj9Da)MMY#?$&J;#U$b8V_nV z>;8f3l*|YO8CBQgM`;a5hb&W1<}M|8vPLwHXX#+O5FK`g?m&%|+ck1my7hUL{OS!T~DsGoX2p9z^`Nu-gcmgHCTmJ?kM^?$AWZe2}tu+ULCMyx$sJ=Tk)b*vhRUSjC zyr{MDo8wvV^KQzlGlbzJKfD=IMpYQxvp&4*W)gR=*2sn5nzTi=Af@o_$==9XZoCnb z^q{PfPrmJn)o{l+VjqTm;?||K-T6kI?l@Tk^7@ndzK($1Z0n^!RU%;#3uGiNih2==9TI_=Z z4ia{~l$t(E_s3`+l_4NZ-?%$`r{j5at*qz9v-=hu`(qEPoBnIxSEz{VD-~QOW=xa+T0~H4=g;ZzX zR_3byI7;d4^EplAROtcz3#^sLn{KlmZWF_vmy7B@@c46SX3y8hJ_CAl)@hBQvD3wv zlXbi7UFUeZ>cKcwYjto)=n}8(ctvlF+ce50dnj~to%`(U?xeo0*4R(#GOR@-`kFKj%S z_o}B_eLU@~x>G*|DY~7UI}?%q1NTccFLhWQFPa6Nt#|2g@xh=>e};sT&0E=$nh9{w zHfi414t<>2FEy4m_|iMx7>O{uyw|0lc^j=n4qD0*Ub3 zs6_c${*vyFV}t_a40t?SL^W!ua6Bt`6Q|*0_d32S_~!{tzCHxf=5)?8jpGpm_Qf*7 zrc{Pv2!AgxkJoGzrrZro`D}Ttzs5$!=P~-PF7m)?Xr0kS&PS(mI10U4r^)np$>>3% zBSrijX(e?whx;PF?w0$c)IMD^P`!To&_!#t$kSz_434euwjPFc{)5-5BS{ax&t`L3 z;a11;o+)94iBGm)=a?T5=-t^r$L3)+XyRCP2zHWm`kW%Q-SL=uU8!G6e?!f-qrI_R zPu{0W0{yVtnR|7-+1Eh8p;A3vqVKnXEZiXkm(o&$D!GArFd^s5 zWzYRUZr?K6ac4!WkoLVUj^?`tS6QS>2ru9*|=%F)?ym)BNH7qoJXau&%$QaDzU5MMHZRmU7rry{KylIle$uK3MNqC<{#Js zDk%VtnDtN;ZnyJ!3PdN|i=Kf1xA!SZ-7B8TEjpd0xxJ=FziJB{GI-P0YdkCMn=OkX zvu9;mT-I1_F?p{Zw5Ym1eIQc;B7F>Dxv{AfoGk0a>yEOhG2UQi4-o8DYyA#)S-)mC zy9Xh@W|6h4S6+jA-oSjaojkHSGJ@_+y)*rGlxDpvyxsQ(=t)t@|JjQ{`x)dg(TVmN zJM?5W^9s6n+^nrOZ87Pn4arfP?cMSNIyjXp47JS8GjI1vfnX4 zh~9kU$-Av_d}hL4?yM*MKX9uO^Oex-bqYLt;_W)W$ZkQv?~O?}GH(KgM*f~~w?^d* zzlMh5xqMs6XPv1FErUypRgeug+}VTedaV@%?Q2_ApIW3o6Phj$rx{(>#(vSsSK=&^ z1-~o@20z}G+UX>)HMgceTVuwY(xHeB=}rBbRT^~pWe|c%!q(ZksYZYJt{Y+J#tz+u zao$7ehQC;xfUD85Q|8hWiha_V_Mje}KaefqBA7r{Te{s^kemS7@6u1T%_`fOw+G%w zx8KVm-u9dc*Y#fTa9TrPz2(>nmt}^=N-K`l_C+DBnC7qsFzwX$KfTqC?nkGZ^*Uh4=+Xi%is{_QY<=m$JN_?D)4RUqlY;_yv!>uFcwGhAhd$uzM^!aObyZ zyp)l3sokA}@0FH6FjFPH;q8vQdvdx`I26>f#-@|*eR`}7l%0?&HvO6pw9G@0&rDve z^7H9uPOcaz?vhUS*cWt>DEee9Ho|O{q&KT38H4r_0#E$GUBbe$maU*u5fP=QJ4+vU zT4Dj@?kV8B{hkP;Hu+i`BB|Bc-Y>Swx}ZFv=gZ-PfdJ(B@kRG$$yVF`fq>U8QX8E6 zgtH$Kt%}t@Tu)=82KV#5y_cw<>R~2LM8Qze-1@W1?ZVl9A(Rg+pgG2^(M30jG-Y8o zXju_{5&ijZnM-Xf5?42b=?0hNTGR!&Uyh6D+9AH4{PIF+mss`47F5_0Qh4^MD+dt( z5v?)Ltn%r0qJ<`;7QN?{mG{K^IsB%w3Kks+bS8)eiLJJdUI+L7Z*?7xJfK6E4X9sO z(r8J!nJNw*<(hiV4>Q!45A-)U825+wS+0c6Ya+Aj<~vy5`^`K;Z{_7~Umy4tJ{c?; z`Q~}Jk1SbcjrhbKrAF}HUX%j*p$YRkSok)) zB`0sg8EK(<_y>aZVQ<5X}*cj23()~sC8e{$bBJG*-Bv7JV9Zb9#C zzuRKJBRqpx@{-^}kWc{MAYsdmw<|DXC%4I^|Ea zdNEHcquYhsw*8$=*@uhmzoq#fc&AZpx?llgFs#SrL$9~rbxvdM+rI-oM!PwpEyk6_ zjzT_L1k&Yo=>!g2*1a4gXDitbJ6qVRtjH=cNi^iwNl=9e#O?!FxU6w6!I zEt8+0E8n_#DqjrBrzb%>eqEwxQ&98%qp_^rmHxr&*o&+k>2*RNhXDG$TuATzQnwk% zCUoqDkw?A;ElnzUhOE(`2hO5;Bwcg)#Lrl`B zR;qK$%7y0Z-h6gN7;i5yA2vN6VkU>_MI!k-y1Ci|!LfaQGUAP=D!m0%H$Svb+pFDyx5|6@!^rlM zsl~(Hy49I9(C?ujaSD*==7%ESsyJ%nBMZYj<~+aSX8wIμe$7gq_y8G0h70mZKd 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%0A#Bmq?ZD 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 z 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

    4^!LPN`E8Y%zn z8kIp0cW<-OsL!OUJ2X>us%{@QupZAUof5Sg1$`KwSyJKqh&dj}Ct6s+!>kOYLZ$%i z7j#y+3eY6K<05;RL?Z`mvQuN^tvDtR|Aos@5xlt^QUd+?9R}&xgkG zQsok_e!s-mw6i>UJ)%X-u&?kYC2$KERQ@duufxE{GS`*yw%5<#_{+hEKFZ9 zh4VO0y2tv_;cQkt%_g@l#35?A-@W|*EfJ+fO-@$QRl?vYoR zC-)-p;otE%KzQlIZLdD+RKgoJ<-(?32)a!*$*IOrGsX`0@aMsgi(LqwCbM$&v#q7? z^58pc5&5J(cAQc|l=dIqIx3clUv9EpioN>DhnY^{$Wpp44NimLK0UXq^Ulz?~jq$ zWJ$Im6M5Oxr7~gaqq55*98MTa1CrSYG`!#j&KdDDNjt6_YiNa#f_eT-cdOOVNn2TW z|IPa&XFS*tTaYSGFBVO_D~5=gZ8_Z1)1qd)u8q{UsQ; zh5WJ&tOECzLwT?7&|}l>FTAnzt`$KkRpX6=)l($l%wvTYI@1?`@=itVj&Ow}i!&B% z9$n+qJt`#t`nAaNLP>`pGoDo!mTt{)WwtY-8POfKyMm5)jLvRSM~~l3uQq<6m$Ve> zw%^Y$^SI?+ZhLQ_s$Tc0Izv$#W2+tawM<3S|3ENn3UUTDccck)`Cuu1>iL}V&W}0T zI<}#6{+^m&&4v?8|AcdsxBW0NH=P*FQlHEXO~#nd?#&rvUGIgETa$sM z7%M={c=`pwE%8gyu zY4zOx^>bg1qjKAVZ$n4Tke_T&F*w_3yXkfW3JX@8;-_t?kL_%UG&bsEu()PHC496g zE2)O>oC@XQ9DkbjxQQ(O&lQcg*x~7U)Fl?t>mU<=eMNO6%vtXBmYut(E0?`t^+&Cp zeJMIP>s8k~&hMLOXlbcmKaQha}Lmy)O0WHAmrOC7&0o;pY_!qqGo1M%umt2ZLp>t5b6uUQQSL4VFDn2N z_N{fN{6>9!s#N9cULPxwe$@99Rhf0y-ORa(Mv$j7eoeyT?_s%sTBEFt)8(!)>K~eo z9bZY@Hr-?Yz}NMF`eL?Ws8I_MN=j$p>jP|?{ydIwtK<(h1FYWt{+@>vBU0ncj|%89 z1d9T$>aA%Qh0mB#@Ul{Lq z$FixJoYt(>7V(?A=!PI|XvgLKYM4JWwM$G!y_zl)>u%kVUTl^?B9N&T@xpGi>$+52 z{l|SI8dv`gzdncVGhO)YZ%%^ecThsw)+oLz+$DVeUPw8UMbb@GVUMP!sNz|Ec4FAQYvHLX`KbW@$i8r z3S#$eFIzlYgJ5<7da-r%M18$h7ggk9hc{r+^6qHcs_+y9dRwLC4EW1!@qjvKQ@Auz zE9q5a)0}fq;V)Y@=+PsH*bO5Dgti;2LJxXqO?eyTJ@4|>+G4XkdFpg4wT&*nx>Ug+ zcr+gm8|&sSace-Y;Dec74B}) zSqKe*=GeImaskF~d->9Bc8P5tAxB`0>BKhuKI$1|zAbyX&MY%I*7;kVa4yN&mo69ivK3zjk7#t?nAmC(H1c#&iaZi!wq6)!?^iN%Q(L zxor>_#StAEOPsQMP{-ETXy(tkIZ>?;ubEvsZ8ezh6+EpDg&$C}{!dw4*6*vZ`U9Q$ zxqMF}H&Q2KGQEzD3cs^E{&<{*rNi_?X?rL3RlWV#TG&tC@^{Q%${I2KT6tTH>?gFZ zURqJG?R`@PA6GW5`s`CE;i*S;P=i|R>bQm%F4nk}nBiz4ZH_GSt~~Kx*%5k3rRxIQ zStVS=OnG{|Og9q=X$eJ*?S~!g%B^?JR=@UqiEVLNp*f(?IQ^x$=&rFv&yin|f1hnk z4Qx#ayKUhQ^lX>Y;^u@~MrZfqxN~oi+Cc4Pc(=yA!DQ`Ul*av1u#*rHipqI9>e=ue zl$X4#V?1ho$L3gP*E-nRGMhxY*@9(&>2Pckid((yLlC9&2c4#c^AS{xmc`+*Q0q*;Bk3;#pko&aKFsRx^iH?o@f<8F9sL=mI7- zcBsBYz4FucR$(c!>ypZ`^dh$!Fxm#cSwBQQ9naW4_y8N+?EMo6_=t=N?hpJ_9AfI$ z8QvN0zRRYxxRDH-q?O2PB;CQVd8gx;*a_;JUccMnAVme1dw}1AbxNU2vvmA|`zkiL zIHf@;nJr^NL#_(xFgiO3CjRGqFRPWJU)nbm(LqL)=q2ikb!rQTh1m9w(NgVbRi6TC zkxPzpI^Af1=Q225OWD(-8nNA8Xtz3dNGSu$&w5MKr!Ht7(vmDi$t9n6?~eqEPRrl& zROnc3M3+Lck&z~tsQf6Vbhi?*)kO4U^F-qd*MNsgE)Yg_Af!U%EB=6)*rV%4JxS;r z_ie1?pzZLNsJTc2u?DxlS6ZtmFxGlMZ+Lp&coKQPh+_h|+Ta(eN=~bU3p4qhjZUx4 zA*xirwdHMZ9R9$A-kn(^(a#6SoG_0c*esEk^e~5KK!#Uj=HMP<%Ij2v+5*6I^l)eP z*7mTcj)saY;3?~ek1@yG_A8-uEB;z_#x0o%%ZKI*pE6MeR@GDI50p=g$n)$wCgqw# zQ^%;aH60v}n5mm;J#v2HPN#wo^5p9moSYtw zwXocuWz3m{w`lE7GFc4gV$_ ztL3%4YpRYlqjMi_VDb7MqfEF%6>k5Ubu@oZgY*jCr9C z^r!dn>!OnvOsgtB%P1=!BHKg_h8A4I#?Om?iOcC>46Yq= zEO=D?I?&eSV5CgWxrM%M`4w#=pe7SQ^=%cE3_MpzKDR0@)n&cr*ji(VDC*#+`5_08 zLxZ0J7<_!-XqR;0{p#w0J)T0>+Es?FrD|>J?oxen=dVtC&$`dO;*UI;-<*1Acb2=x zBZ=Rc_6I)G(c~qp+Cl^U-mb@LC9?Zxfd(qm*B%n1x4XL4JS{$IBey{9>*AyIlkct> zrMnLN3+9ap@+ts5$S2C{O5@f37X88!AItiZnXr@n(TRnrax<5E@ZfLe#R?V-FX{QM0}r-wWiDq+&e)}KXTfxw_m-UGNev=zgn!qtc5zJ zEk-rf?p1>bYmZRC1M_kA*x6Qn6QeVPBxk0#p7kmBM?Yn?O`ldKGs&&iV^fBrSLANC zSJ%}Jc|NvSjO_GFgz&lRk5A7%%cfTJOWIJL4Dnb<&8=1nkWgD`@;PCSla2E|a#}F2 z8Lzga43>`rExsLD(oD1&riTsrLF#y=X&!mI4kgu!eAAR=wFLk^VPSO8UY*ksfON@I z^-*}G3B$cWCo5qS?XD+5-Cq4xYZ}w8wsm-HBwS~*O$nr*`tu-L@X&p&KgTtEmrU|z zEZ|}Z)8`uXU8%pBY!)U%HmL!<7RXPVxXtb=3@z|RLF4At9eDlYA(Oo-%c{2_!rm0+skqRx3rx4=y)f(q_x9%dMpQc6hHu@rmg-Iqg&>id+eG zllQw?_{af@cFzTR@3g`8W4B>-vl&Qc)lqN*u6*k&4W{Vngau0Tb*Qz>>TTOTX;ObV zFhA0GKbs3sjMl!FMLc{bK}%Yf`fTe_*mu9N{R7_{0HxmPQE?)7K;DJ;Sd;ot!?<-d z>>f0FtJS8Cb>l_2Dq~q#H81A9))R%(vBCEm7_A9dYXPj0$?-fXbYgsFc)9djq-`K3 zU$b^&czSJ%Bz|J4>Q*nY^Sb`OT;8)Cw!H&u`AmshqZ^pvvocDsB4SSU$}G{s+!Cdi zn(hcmd0M@8a0_A;Z}YBa;Lx3lIA z;=T{`3|OHDthXaAl-++)a}zAL`DO#$kV$q~r5tphEm=oXTkC!Gi;6Yyfq^Fp#mg6U zg$WqpV0&S`#JJw|Sq1yw|G#!}Zdb=Ac*eQIV*#Xlngw6C<1C4s3a!(_*D=tOdy+QMr|ZL`ZXW$DObM}8_Q|wek0Npi6>R>4>j_;#^nT-MXX2pkqWB;ccWt#$egf`( zwLJikj^sA6`Wj4{6CiqBpX(`oShpN&M0NP>B2d>om7tJ%GA@pFrOD6yCv#R{>>K-G zoC=SjuJw{WR8BPtS!crOs#|-JyG|I|0RB(S&=qm$?9X4iI0?r7<;?mg`aXCSIq=S# zvkCJgUlSs&Vy{*euX^MI7rP?xshfvEW;NF}ao)n4@wT&V=T$cENasGHLh0d5pp9Sn zW$%*E{ogP3+I~j;`kmG2JvU#o{yUa`?YBP3)+!{26hFLdv8!`8y;Bwn{%p0FSGN!T zahFPq>bYZ9rV})%bTvV&zcZa^b78~EAQ8h|`UKn9IFbCKlH*2LcP`~gE54oqX`yL? z-)e4}2&Dkl1H88$#B|(b9rmqo_9k02mR4og?6E)&Uego6Erce4rVn zZB`Hqe>1LzSmVRT2mipCCv>BGnAy|`ZQ?O{JCnU~Xs+xeH5&6U!fqbixI%YPo7{+Km|?g>WbAtZYa!f%hM@e$&L;0`?=w0q*z&aN+0-oF z{ti~T*`bwN!>78_TSS)5o^-g4UVbaLTNO-agD%O`(9itVj4{4>C`UY$mk;oU z&^NYN@68p-_aO3BZSI<<)+MFV>ec%LdF1$iWZ(BCU0WlvljskQR-TK^>G`4PLHB^9 z)4JKSyQj;i%&BYp-RZ4$|3hzx_bBgZPjO9d@_otcsNd&El;3_|`SGqt%4I#8Rj^a# zs~LZwP!c*S)vAox=sw%cwe@wGtGDI<*Pv20H<|-cC*YJuB#(X!(Ow``zLd9eo`JjT&R~Ly{(}m(r6Kl&9^_&x^7<% zzqIGQ((uu^Q@17x3oXi{H}Pt&h)<9_Q_68^Jb54RWkQz+im+y61v(>tU_3i_OVnzu zXdz=NXMtxME+fk0kzYF-XW*OYJ-$1NuoM4WbG@EEpKF?lh*pJsM2p?d|16gGSz48~ z9aD0^S$i|AmNz{t0K8#x!OGg8UtSe^x$1j%<0MLTqr!u6qWAmHzqQm`{omp;_aDse<%&DJkO__|JTtKEoh<${Q-7Ehn1%d$a7%x7dh+8ic> zUq!z0%zkrEzGy*ED<_PRP74uV^(0|YIgJWU{;I5pHl8WzOOH}fS7;v(BrL1M z$Ufgp5Tn)Ubdf1rjX#M%l{V{s6hzB4aotRJyCl%ByYp?xy!p%MYIRy~pSdvA9;nuZ z+o6`HgkHMW{!hxAP$Tu`Sxzh$%w8fYpWCZ7q;gFhmAgmu<|gFj3Jn~85r&i`J{!dB zbL5W6ezTvRz>uPcekc7FFVt=5m+a{YgKNpoqFy3YCBXxLm|$A?{-9ieUs(D$?U&Q; z#=Lyi3of{~Q&z%$uHij(8s0j!(}k(g;ibA<(}zy8A}^KG2oOio^>}dM%`%|p!_toF ztRGSrOFI{1xL&2JFYqBoPnY}yJL|1pY0y!|gjFf{4Z5BaKjhD&ZF+|y_7Qhn*oL3e z1|?U<@W84)n7VxTEi%F2@3PbR%9WK_>PYWVe9&G)RLfd}$F{bm@$2x)pR7~8VAI0) zyR)f+R@b?@e*|zN;H{*;6o;iYj&@c{}pIwfONb*3*8%MRixihvI zewruVBG^<1{HAV9DXm)$yYJ4jJ2=2{I&Aquk;J=;x^Lq2`=CLbdOuC|#uO$&$d5X8 zW8L@JR071YdPKHwJ^$4YlY&uyqT`fWg7S9q4RWaGB#j8a_zS=sZI!CG&$f$CfEi+~ zG{29}pN&CrT^=KC2zIKkp{!5g+jZ&n#euh!2YEcIjY;6%eWo_|70G!s!}vP9#+#LH$|8#gJzA%5 zbd^mPB?21k#J94JC#SgR7kIebZu#wmqN=~~;4{Y7yQz4ez3US=6p@-HFP2`%c?I@L zuH)P23a9zSCQnxN{Q0uq8qYF6_FDz9%4jGPPJB(PA3h1VPH6{Yj8pf4NGL?#J=y1%a1?Sctj?bGpxnRqD)D)jNB54u5_LyH;WJaoa(y{Ac{RM*Y zbwKOllq)>6JXLZbs;HNQgoC-Wt_`}4^KFGg#ODFpW&QlH%VU!#e{)eux@n88-ERrs z@juY0sN}Trac*aO8Y3FM|F)>v0SX`BB7bQT_DMScHhLt=MQ<@hV~l_2^MRgkyfHUv zFDw~+5$XUxUMmZ2ed$!Ad51)#PF=d!Gr2sL?FQKN5$N;>PT%C#VFLqc&bDDV}xlk7_S+m~jDstz?ub5kXE4%1ofv#Z{TPW1bzI+s_@JbjoxGxNC zG|E#?@ngUE-lXY;Uvi!>uEUejWAq8=veR!bjD3}rJ!e=O-PjlH1170!-SBr2h}*;D z#;I-~us9yaR2=rS)I`S6wIWV8A;0(o@t-zSw$6XW;u5Qp)g8<_e7Y)fwQr5LY`=f_ zt8`L=WYaT%q=^*=5TFLHxTmaj(8@iw*R;A&ODMBa{m|)i`g2~U=QnHyu!l)wJl%HR zg<6(r;N=7R%G6PMBlrUJ7`d(9J7@iA(5$aS#}zgvz*bNEDOEaUoF!kEMpsYt-k%#^ zx)@7y3V?s+>L@RHV^DrUNofb%9taq->khd=vVng3CSQ(KKb>qQiMwD`tpg@KK6WK zw9mZ~%O4DCNT27#a+we*wNP^29qs#{DbBa3&OB-~bNL7e?#zK;x^S^)(%dO2jIBD` z-8g|Cf=9o*J@6^?I?sJC;-*CiZB{73_Da_hJK{yQzO6rX{kk^CY=8a`I;+#Pmd)(N zqLB}2K6&9`&kRP%HDqe|S7sa{_&@78ZHxlz3QeAg=);POino5$9Gh9xp6y2JYX?qm z`ICBfMox3a?yazXIrh)J?}c#eM?$=wZ>d~5U*-xpWbbD~|WF%~OV zhB4<}x~LXwp>?bAw%P1fhjz#Fy2hk)W_;eo8?vIEsBUJ4$Cw)TXfLtU=r_Mzqs%%lC)Oqv zLxb2~+QIV<+BG7LoyUshs-sN!1GE2kerc8LSthGjKIsp8v84-9ZB6g%tR5$$(k`!K z=^+RC-*tNY3Z;IB4Z_+)7-NQV5*`0I$=W80m()&Kty0x~Zxpa~ruQ-27og0sr|~X) z|MNzA*IDU_tOC<}Z1mk>AaSTPX>e1T_#m}+<$!NmTuZwTdXH#!$k58GcWcEzZ+x#U zjP(|;#&?iBoOg&z3&u5@%kbb*N*XLLWeaeh8oz>JrtcXlUKyLi#)sN!}K?^%{vhL&6 zOVkT`H-Y7&NUy_hXLgYX$Mk4;t$8&M7pEEf*8InAVu z;FMt8O#$ahnfNUhbeV0(ORy%*VxR&}HS>?XK={3tdzYi&lz#Eh|sxBHpmP-aa3n2hToG@K3=xfy76d+#1UVnw8GNSk7$1F>BM*pghpADb-a^a}GbrdDN1@-Bx6JB> z?c3-*Iw%%H@=iT1O-EzpK56&?@}T}eR2RgBdPs<|n(bN4oOpe#8~hrt-9dRX8wt?I zbodchapO3>`~2^$-_cLI?7^F^IN5D}RTGM~Ny}8}*~I^vQ9xeR2|G}X(qTo|&^05K zqF)x0js&^)7}n>DO~80-uw1q7TTo3VR~SgFmv?N|ZcqSAYo;ll3GRRLeGTnxNgfMaaLvCw zGUFdH-U>RC*_dl0>usGLO}uxqJ0webw96_rw$xJQd^77)`tUN}So2~pH+;*<+ja}; z5%w@VJlw-5iSA8q>X^rgw>eHh`e$6A~Egycufxu^IN|RP7a|vq8H?? zWCbIWT>8Ds`8}>-vrDs69${tu(k@mx#LQ|!JC3hz(S?m4C;dw2YBjiJ8!Xq$x44aA zUszq;%{sjc;6ArK9pvLI(rRzS;;*imk_}(~K+eWpCdy3Ca-#$0t$p5_WB$D%ACn3G z2Y#seWEnM<X8mjbrOAm?S{_&_Dv^}gub%c98$=p=@vRRCDw?MEBnL2n^{J3t3d?-9Z^t| zqdPhJ5G!Ygnn-E8Bz2*4TcX{cyT*Yxbv|%wNf?xE3Ms{dhpSFjA6z&(XY2X{tWWJ{ z)S4`Rn_t$KA|tzvbw%sIg8<3h}|SK7Ri2yh;`gGYidhob|pw#ZvzVEb;$|t+FMXz-ViVnkZ@78@6z-lbZq>Dcg zKL{tdR$WTB*Yz!s&2FE`p1T7p<6+-;>u_Yt(gX)29n93y-l5;LXx*m<_%Z%}_*$$I zeD~_JxeR8@QOP)o8!h&iqpE*|5iyR3@T=D}kq_-JFYxwv`Za@H2eX2`s#K1H%4CXQ z0K0_BXrs*TxC^6pXl7Pt5;;0sv$77UP5K1Lf1tx-Q|nyq_2JpBW$X|7bT8-UJ>V%D zUzn~UoS~o9=7Ec&a}OnvST(l8oD(IjBLYxa#cPX0D7~sytxxfjZjZaxhxYdHyR21c z-2?bOBW-7YAPMgm^!16Cbme_?0%N62@A;}l$qA;fA(V@|)t7NXR#y?Oc4irJ!LIeN zIo-!%I<>!i<_iw$KG4oGe<{(W$Lp5PH+}!kq@6#oKYO=_ldZalKqS0$ zT*53LBc=4YzXoDp!zKTWbb|!K>@%jmO^16o=kZ}AKc9G8$!PJrJ?S*`l}_uSPtR9x z*h16ySuEH>w|ywU)|Kh7AlN1+EH2<1I+e*KQLgvU`|NjcdEd{^&w3@@yETpqej;F2 zx9~mzCkDGhWWwJVrxHzmD|dt(SIFt>rOwc41ijw*n|dE^L{n{@2l}-GZilZTz0Sb+ z9R)kyF&FFQI=c5C7f8?b@g3WL>y|&F_oQ;eIO!4Et14dVlGcQYRvm;LEt+oi?sHQ` z(K^x@aT^#WU1p7ARUR3BD3F!Gxv!QR(X3pg*9mMr`cwz_J{PX-CgAvG_%~bT9s`Tp z=jnb6lqRQRw`KRc4XMZ;?Mrzp$&|vzCF^^smM-^UOlQgozu^xhb5da)p2g{WS=tRS z<&c!fN2%Bg%AM{HStO@>nvv0W^z2_w*?gG2X8Y?WV;}5f;oj^~#2(~d@^P1UHU9{b z3=0#*-m^7c{LM?}Sq+UUE9k8#57Lh+`_kAvlU@BXD^Ex7=^uFAHRAOf>z76GYZDL< zS-d8!e5JfNael=Z^>#1hBzpS8`S5)7t1^#@UoVnHhXR&$HZKnI7qaD`SM7`BorBCix#7#2Rbur^6&D~@b$*0@% z(C)p#V4b>>9QTIPm)3rc0KnhLA51z-ytUXMXo%~1y<`p(Z}eW$i@hXrpKy7v5xz9JX4}2Pl;=k! zs=-Bm$;IBdlvjpr=&g&5S}s-m#q)aTHpCrnS-yV$F!E>8oI2d2bcK4?_9=rq)@ray zs#lZ9+QWCj841!R3%KXX~spuB|V#d879S)>Yg>`#e}uvy;{ZVtTNt z*%*EgCz`yjjaKLEv5b8)-4y9vR^cyA!08@nyYYs+u}AetiCQB)^6PdRL#Tx)1H3aTqpLh|&|}l3 zE;@zRz{YeOu-6Gl1IyC0uU4n}pg($fO6$C2-=DhzjTT~yL3nc07~2d{_)FR)mj?9; zpt#Xa?^gv_)M4t?jzMZwd-Dr=p}Zu4Bg@NrANjnAy?BPMBFB}WZaMDkpP6?pC(Fko zb-Qx&=UrBErB$vTKkWDzVkpRD4)vvX!bULe1&`J2#+n!}ly>HR%vJrx_VB&kNWXI_ zUF{i1a5mU_j!su->bx&0<_h!UuJZg{mI~b3@ZqnW58MX_&GV_+ms?_a;Yr8tlcWYc z9sS4Jd1WgLWKnnocMt{;M3Mmolpv^}0)iO800KsWVwivP_d}1MUs(6$F0FIw?EUSf zR@F>rnJ)gF33-R>CYktW?$=anQ*G=5_n5sbSv$}7EICIv|EgB6i7 z&~WdSZ5s>ysvP_&O8W9Lozx{lfI*1MegnDWHM3zwVohk&JyiaHBcv`?r@?e2(v=?= zNOt_@fZ1TmBfZH)k9QvlGcVEk;>`A+$vb>J;Mb;fl;g#PD-qwMvGzP_r?!+t&?eXF zl1hgqobykw9l6wHfL=a;wetsrbjv%t%@GB&rN;P5{pN$K`eypGQblR?_-~iXM{0US z-X*Ic+aHI(I)engK3*3S&*b%oF{&k~1}_^x&h)U6)~<|~W50?nsn?(gm&qH&)IY!* ziQ6Iej2iWYCG91uQ!g!E=6>M6k4GeH$Lea=S)87=Ddb%`xzY6iPpk0yMU29dF9Vg* zwax8XHFPXJh!On0-^zDUoZJUk2`(L%6zM?X^$)1+TvfWVHRjwDqtBf_d6ZU+vYl=< zfTjBzYf+OcaCtB!tC9R(PuB6?*-)2JWgUOwKH8cSj>mb&IC6l4PT)TqB-oDZ6o}1D z4gCY?4l(-!fOacZ<8}4>@{Z4SGNpuJc&x_>J1$=vjeES*rXT8EHr;Remp+H$srDwN z-H$Xfh#>Rp1PDMJo49R-=+nciWsvEB_FLCl38Z%KR%f4g`GPJAR)zOO1JE1zl+YY{ zaylHtUM1Na7lcw-jMIAVzx9VD`;q^|l2#H5of_o7l1fzvNJ*OoSGXV83S5Od)_H^vcHP3lQ}Wzsgpul@7O0S~!I ztCQD-UDq|g`?WFIJeX%Q3*X!G_%;^;mjy=9G9H--zG3cLb&4EJk1bz^Yof>f0qYa) zSDD!y<6hLyMA{z=xtO1oetL^KK8jnpzkO4~KCn1-6?}m`!L3JHXdryTCl_ zb0hEjF#Z5Z*(!jCPJ#{PoTxEq0l$sE&5wZo-Rrjy@4p`Mp0;bU9$lT+T34#v5#rm= z5uL*5^+l6&b#*xggMug^yn zo=fTO$!4$iGPX-Cd=m-vzRq9U^z-xYoL;c!T>|A$-!{uf4YVTKBKP;s`=E71IL;xX z?+dqHlEh6LfgfYXoeen5)uzzCCuLlCmYedJL%C9J%v|`UL3nsZ5Z!SSIg zG5Ub#i8=@Gt08yE3rO1X6rn6zqIy`W4 z!VL%KV?b-Nds;P$ij^*DZ@@ccirsdhrlBtCtirc{;e0Qi*cj-u$Ffk z#5XQtH0L|^b%?4+$W%TIcWvc*wcZ$m8&$VjLi|!$B^fjdQ`|oV-X(?%q1@X0LqX#R zGT(Mya<^>rN!hAxXA|l(W{2kqDxRw4a1=2e!CR1KJKZ|XI#2bZdU#~ZgRwH&j0p22 z#I~Cpb@?3N^V(7Ac<%9vc|Fr&X0yfyJ8TD~Vvn`ySa#KhjOJ>CPg(oWZ63#B8$7br zR?KrHWl%lB)aHI?*x9J83`}e5?U4_6;i)*6%FJ`PpZfMV`@Wg(DL+1RsMWiX@u3i$ zT5WT?W`llMkP;^Ako#3}2Q=g5d^r*M_q5&sfBp^T+irR2u&9U_3b)~8VwlfM_gQ#_ ziFMdREOdO`4Yo>xDdpD+zpDL;fz=c&WmPDq>J*4~`8m(SpFg1W#J3IBTN9=BuQx?f zmP(%{!g8ZkIXQ#%8&xfN+wFjwl-K3e#)7Ff;NJA^gKoIsb9A5EL37T($uMb0mKq-V zTjP^YORpRo?W5ru+?|+akzRYPsNAM^?#+%TX=$-|P$ilMslj)Zw(q6kd7Qmd1uo39 zX|K?Bk5F6r8oJ7$K3LUfMtMMRkMLXXt=KxtEAD8ht$XYcz0Pc=?*vUvS`PT?jJ^%HU%)dJvr`3PsQN_|m(XDac>*3`{J z&D)bp`?(w6lKYesKSqI^o$Uqd9A>X8E{~6e@_#z``0#nO+R-b>d3(~`Oe=4V(SsnW zAI6I=JCeEUBM*+0F@zq6sy&ZC07M=Uu~NK<9xYpw zs#FUmtXAZgXfT;IYe}Lq_xv}z4q~_@9szK%eeq4g060s^ZQ)l^p=%5w;=6eWPj!zN z=+h`RP8S36*LMFQ@Y}Je)92(f61(#HrRZAwb+|qnD%JH@^FIK3YMrhJ-M|V>N}P9g z#M?nDd!UCM-J_mxd6gfu$`N}YOYa^37?hD?Pz~%&E0I=Vwraz3n*=D_@0O<3MI77I z4mR!d_lTMG4_F={>CF~X*@IGP>SVVzK&ESELS`}+GFar}{%PQ~fL)(2)!Z&Pn?Jo^ zg&g{kUG6{9jCvX7m3R|pcBG6tOq*e??ashVc!7)&2RuY~wd9=Tqm{#f`3HdR{@ybi ztaInT5TnmHo7_BH8YH0}Zckkky+XCssB>Jeu4kb!oG#aowJX0C$Qke4JoQ7=i>9?+ zz2BZ*#BY4o7@jSWF4$aIHix^>ktwHzi!tf`Eantz58jNso>GK*gnP3trMAne zRi{7o|~|#=yFX0^|E_+d?Yh-F52S=}$M=+YcY_oo4&YwXwemCoq`T}6RpuT+d)K;uJnYmKQ=V7*vs%w0ya8_qzK8xOfU?Y@Si1av|*NjV4aQS zA0TL#3&0FWV-(nzUimpq#~0q$1N&+Vl_!*iU}bN5$WR)dYM{^>G`8IouxH1W@~h?c z>}T3DHV%v~rh$E{A>J?SrhhlHcu_i0n?-pFLspS1t7RRBpVw|Hi@)vOpm8>V!*XA@ zs>W|YX4m)zjYiv!18=h^R22K({xq8NMaDZ#QUo^44mx}D3NNjqT|a6(fL|?;OIc&G zD**b~>=-qGZxngI^Gc7KP12Z+oZ)nEvb;S*%uKV~)KXZS^+p zbhO6rI)ubsUuld6irrZhH5TDzIKTH>^8o!NjgnRGnJ&h0V}P|2?+;LJ(Zj4arfN?K zEQyORpBvp%lfihGOQ)!!y;{ahdZgwZI;C*sSAH+%A#x4M^=Ev$Ru zM_^DTF7w0Ji|V&>_2fg(bhb%)8)Atj>BkPeiAi!Jx^bM5E7afcD?p0_>yQ3Yo z5N(RA5xXLZ&+tRdl*;;BZX6q$W|-YU;S7-E1UT{RC^jDr-)xbIi=BZ~p*&gCv6y;v%JEpQ!XD zy;lI@o~vT+955n~jI?r_T-M;-dxdnLp!E41?~~@lLe|g_zE-CRY*BIR=V z+Cysl(jr=8TuW?UIjnhn{{i@JLk&7)_j`hxDZ zccGet^4Geq2UJkNXJC(9xaR3d4l7Mn+@Lgl2o*7P=Mi#3FU{}z?qq~im+d|TFlW|h};`#V==szt;K0=)< zy_-RzH^0xvTa^L!aPh7OkLs_PIKOPt2*y9$vYlCe>8kP{kmzB#eDNBfz!q*iv4c_H zt|Zv49nTo#?9a-}-g7e%_x?OIM0YmdH_~ltwA9^Ay4`mBch=tShQPIXQV({Sf3A?e zBb@1`1K*D7yT^`svz+|_qnxvP5!4xMcqZL(fwa-hnw215$ z|2#qt%$8xh2OMtnLu}~wF0IX(X>97$Xyys1Z>7I)y}!uaQU!gY&h@^pCx3vA{3h<> z;WZ@)1UirIZCmlgS9^j*L63VG*pxo&>IjcSj`{sv&TM`pQyI-Y0~(O~@V z{IQu8P(Ay4k$aELYziIwk11fMFNdzCFTt*iOZb+5_oR!ijHl1b+T$7JwX4pWt&txp zWAB)q&nxyt3GRl9p7F)(nbEB&(Mbx=B{HC-310mJ`u3Ows};=D=r5}5&sG1`7)IZw zxa7o{1n=_2OViC8J;S@zdT!I}PA$d}qJNM=z=^x%t-WR0o;TYn zSK-vNsEqVBYO$8_c@bss+R6BR{DPeE;&7UmzG&Q@N6x|@6*x>l3JF&h-&!C2UXW#( zIr#bFC}AbEzGn_e`hGbYOiFsok&eWIuD5phcnBQ_7o-GVGVs?dXgoY?owjKc`lNE* zV5JLr*swAUH>!i*&vTR0T*XO;rd%j&t4d`i%Lx0{1j?;*Jd)GxSt&_dfa)yC;kr$fK0hvV`pyujG*Bux}i znGB)lvC^C71M#Gd(GBfuO=^3~ch$q`g}$O&P~8KFcnyHMFj>&EX_8CO<2-AXA0W3H zqHUp6>@n%UHo9dG%}-13i!P5EfY(6i?&Qmf<$^8pF{{lp91)w4k%quW(I?O407%~J z(}%oymGX^1k}zhBF3m7eb-AQ!HG*W`eEW>XwmrXVZEE%hpmb9XyX>bJ%ht%G&X6fULYE}YF_sq${$rD`^u4iT?8rhsd0&x|g2<$a;UrF?|X z+d7SXvtYWE+||&PJmudng(m_xtq(c#HSOWxW+e+yGBd^D+TR`7u^xG%pk9y5%KRy< zXW8J0fBeRwFD`_UJ(*O}wwiX$JEcUEQSxi`GHj{5uC2F0e^iV3cupXAmYge4$P#>BaKUm2V!1 zkRlGo_i*o@%f&fGE7tI8i4%BK2&LimimXF~a8Za9jE?@tilEF_38- z>a?ttByAK43YJ?s`Lteh|7ATey39+I4wnq7;)M~$7gO1OjDzm528irqfLYmKHOkeC zK5{%Ph5$W4!oQBlj4{nfTthi|HPmw2J$iA&-zfpW_Ax`TLXl#{7EdGxvwH(7iP3+euczaMv&% zzX0q`#=*28coxY}w`%l_=N7|)xWX+S=^sGXce_#wuC8bsc-qmVlBi~}L;Dy}n19LK zED^{>G?*pC#$|^31RlY^Ie|2GVe^vID5z7vl{$Rs*dmd-jMT_n@seJJMl`lTN2sIXJFbyfZ-zbV{oZBw%lD<56HlMB%iKhNwLp=yIV&AL zQ5h_itDPKQ16^D1UT27-K4}mKPyGk3g0<=Kedi~iTkYSCIWyLjn`P`~y0fPV8I6|Z z=R(7&w^t#H=Fk%DKG?^xec{Uf^Du@|>yTF7bvd{JfbwCdmEou&N7KZ8qxDl269&YE z?;o?awYPccb4Kg$NnX54qKV;4(a%5yi8ny&^ZUkbEv$>vD&Os@>lS-&U4!5?K3$sC zv8>`KJL(gI>KIe}$`CTKb%Ef!NqBk3MeMll2D`!3^V{(1-Zmd+GFn;fqA$ad6}AR_ zK*HxtweMpOG?=Ua$p1BFX*3D8b(ShxCf>#iXZM}dUU@vU3=M?Ke8uy=0kaVI=q@^P z-{oLXwdHc$%YpZ{F%G!1V!<)Sndg6>jLd8CbMU%$KTX8E-dz4FW-2}-!ILISmw+Gd zA*kh+x+&;?UoD90}PiLio{I>Q`G*rCu?~f4Vy)M3}{-}Gi#xZsi{T%ludhXkyCsT=&x4rlS z%&0wu-<@8(z8~IqlfKVSXFa}kwA8WsX)L#mo{PVcxwl=7&FNrc;FFvi?Rn>NMQ8%+ zD;;20=CTA3>eH`OZ@L{~0;;7wcyt5vNp%znsTK3m-uM!;n*yz+NsKx}jN&%@65p2( z2x_Xi*&H+z-H>h=;+Gtx20g{ZkT#Nd>t?1FHk(P`m$TLj`wACb4j7Q{7JK#^>9Anv(zaC zsPC@x=t7V^yVmY?mcU^-k4?2F@WWKaI=~UynTt(VeQx)0)olL(6CYi7XGkXt-=))) zdD_dXSv_4hr(j{{XAFQxqWF{#7CJB4r($#HN@VrE1nG`xo(H)jlat6 zr&vuL8S>g6wl?d$clG6nO^SKRJI}`_wJOBBW|i8DarHJ7T73;Xox3Y4ZXfv1WYz91 z)51z-3Sh07Ml~5N=Mtwpyo>wY@08s_0I~M9F;tayr2F>3aa{0tXHYN9t6?*m*hNY* zZ6yLWB_1e;c)OUeN*7Kz|w2 zyqFzBeDpPL(F2xavSz&d5xj#aG0yr3taTG8%{pghzK!jJb0oQm5mU$b4|v?QZ=WM4 z`>B$V$0zc6ky7xIiUQ7b0x#Y9&#|TdcHp51+`&0IhaJwjh0!w)tU!{)MW_4Q1Xy-q zKmF5s5~C?FS6-0&lg&ABxZ|svt06^7>Sz_;Oeg#DO^LG-mJ{Z4E? zO6a2 z#HMS&_p7IUnKuZwe7@N_bZHYGeW|V4V7RcZT4bRxTVgi)zQ^mipaU~xY`&+XLuu2g zRj|%^GOZo1;jR0Kv~OJjJ1w78si!h{)`Q37TAp;8zRoW1efM?&iIu?Ke6pUsp!cKI z*=hZK%Mm{~vsDU(@fd|Iso!!5&7SH**a{75Z>WroDzIivTOZa(hC*q`hBr38V?aD_ z+|Mt=y(`l}3oj6jYLZ=gI>h~zHF(-=nsm6=7Lv3?<>5v>ABv1@ zm}~aEW{^CTkna($eV@zwsz7OA1sZ=+2&|5 zKO~#aO*oeq7q|Ig>GovP49?uuCk=ar^$`F0g8qO8qGw0YsFhN2m%pvvn}~M=UWU(h z8MLUn+w?RKwHe|#s8!DKqkv*v%qyHa5Q5YjNavEi@;VpPos3HLuF`}}_F=!MLFnwvAW z+Veh4xtW)`@%;EcDa%s30o#Sd60L`+z-4t}O zI}g#x5LT+__7U90J4@___z!%{aA;#$^t4*4#olH8y1dwbJnEZUv}V)m+iZ*t2VAqT zk=G}k+V1W*4GEz4K-YY0DDxx4xD%iI)@Q1Pi*;Wgd{VFclGSB0)7X1^mGv9I?ZuR1 zJUMxC=0~@ab3*|sE#domvuzB}@*b}hpwc%NJ^j;O8z>{VqWNfggPcmq7DFJ)v~lw3bsi(Wb3^NYAd5+nw~NrXiF1NFdlFHn0Y>l%jz&baX za_?0$H=i@U98u2e-C~4hg1jf+l<3*?z13H4)vWV)jZUEYx{aezx~(zcX_nXf2Jfn3 z9V8cXg@>dGBgbWasrv3JoBaW=Mcp5!!jfqz)Jh;kj{J9pXX7@IW%2%7I#3^JLnQ{> z@9Z2_4<~&k>th>!jCsQhQV6d4>h7M@6FiMKX!&_%s-C-ug0t}CX>GOr@1yX_|NZ@c zeJmMPJ(Z;omI~qV59qaDpP^K8Ss>kAr>)C=*Erb7ka!4TUldDWLX)^UEs$y4;cmG-DOZlmbX0_zJI!-5}!w(8HCPU`t z;~QusXyrQ>YRyRwt*RG=dI)B;J*@r!g5rIY{cew(Fdd~rCfej{JG`@##}#IX>lfTK zkD6B9)IOEx$6r77lf#R$a$X+;?S@sdFyKEYEnpA)j^NZ0<~C2gO}jpqJNM;>Hv+l5 zE9jyYZqwSo@3O9wcRe7Xa*-QSqtv_%x=P5!Is900i~P|NPm4Dbj4qvaJefSC;Rxo& zrJSU$AL22jHt*&mx%pY=#LeKEmOT$Op#P9}4?t|3&7%8luQI7%>S}di3qIoFRw;Ru zE|vYHgVyKAI_s~1+KXN^l;ixhrK0X7?kD`LbbP?3+lIrdw%O9unpwY9B=UMn^4b2pZ-{Z)!Jrt z>M}`3pr39xnfE{MRt}ZA9&IDc_`DF3@6XcX44Zy*D<=o$`eM2-T1w( zNX6`v;XZ~x>R}| zDsc1ks9JRTFroLASgdcAHIwwY)8?&-lU%Dq7ua)}h3^mBeQf&smX>_iYrn{ctKS#YC?zD6ng*wpeNXg|n*H2d|+P<|8OTP=cI37PgrmhJxB@`Km zpun{I=)NMM_N*iF*=R7qWg{=01MyiY-`Tby(eLd-;JHspdFrG-Z1iWKY&@n2Ii}P7 z-a{-=t`F~%suT|7k35~HyWkJ7>24L?Nu~X!kJKbkpQHCs=2{C+$>M^yfLo(~=_Ta^ za9ytzK;d9lmcv)KlED<6W%L==Cbk^E$=cS&v^iWUK`GuPyUl53{s)Zu z+a7UdhvG6v_H}3&U*!h&d-2)DJ5audcHmFFDX$|7_!`22aI6ty#|JL{T#FVp!cCOl z7ZO{aN@7P@!Vjf^#g^HJ<~1F`X58XPduWl84rOTKI^(NA8IiNvW>f8AHILOZW8|O= z?ZE>Z)7fg5i(1-c(Mx>4FIe$Z)k%2jk)u<`doQAzyy&hF`>Nb}9C-U3=L?^j|Ky9(A5-x+9)<%^Y< zj1)opepGEuJ0oaW9&}K~Q`duD^d9^$NfT*8b@=kJT^%oCX7)gun+sL@0~U3vIURQB z!ya>LYRQn4=4(c8WZk3}n%Ww>-8SL+@hGN9+UuX&-l}$+eY}^UQh7^vlXAVTZRm4< z5DeO-?rxJ=hPFJ>=dw5+uPU4$pk%esWGK$bUdP8|ChXj?(|JWPP$*3%GsG|J@otjE zE4@B!aE~ckd$`>?X^~8=-Ne4C5g@h;pJw-4vQ>?3$xmiXWva>QQ@u~alh@Cs&ugwl z)E^M_l%GbdII2*QY0r+f!(O#5b;^toS7e@e4_`rFynH8v7Q#Mnw=Xw3R;EMYz1%oj zJ~vCFW=rqRY?ibf?(AUCygq;$_#FF~=rSJ~L^$2Ke}JwJ$8EInkRV^u0i?SO-0kc$ za6a@exNdskthIfcpCWX#w^gJ0L8s+ikx80#4Je3k`B@-!OmtpD(B?;H3Dah}x`8hi z_&ZLP?>T0h0y5o6&WAUQ>I26DhyrvW>?=6|V*5^7J}-$pc-Q z*@-gv;Mr^K)TH-~*gPgAVXiAMJ;$ZIa6Hk-%}^!FC1r8$CmpHT>WzwwEFT@&Gfi3q zYPu7+yH>gGS3~>)Q(=Y}MRT{AY$ z$Y^PscDcMTd zyyllxy~7I}Z;iKu!>|#JDwJ6TYB}6sYB^KLXti1dfQJVf(s(#>-iCiTDM;8JCG~%| z08BV05cUDTJ}KQ2=8C0Zz31HB5slpLduRjhR>XtQf6O$Zrace?wK;wQSL0i(9r~Hg z$&GpAaCKHih`mH(86rLXf-13k_;=3>f<0cFh4u%y;K}~&uB0Fkh z*Yk(!#BJw<{$`sDnz`M^H^L`8PAsZk-qWT=)3}gm!;04H1YZ6DgLk;BvLgD`tNZUh z2p%elR;qjQY1jMN?pP_tt$nLZx$e0^R$wjgtZZJ{T&`YbHc1ZxN;fAl54Bx(pBc>w z+Ih5BH~KW1%mzqrn*OAb_b!-!KKeAl-EVz9-|go?d(^W|E|d?tQEn>|SgaItrf0Y5 zQ~c}|t!{$L)r`iYYSR3Cho}REIBpp7a;dDFi*rPXNUy1{Q)n=n`L_Nv4#~4gI)4Ck z9>;N=R}yl7LhTCqIg(PRR8&lF4O;cVwkY1?dO^o#b-X@6*7>|A=cChUrRiH7xl-D` zVF=>U%phkE@J3_gnY?69Cvp(Bs6jsTJOD)hfD{^QPZ2cYb*{2~0)%GE$+DX+`P zB`nasg8Bz=P7_jhEbGAi!!J{fXkM;%pF`3S?;HbB&9>>=U)lDDGmAR*NumrXOz4r@ z^GUW>Yh060#yUwGuWgb=j{H`KLGmN&S!x*LFqgKgr=1lHL$&cJgLPsHS5^aJf>6Y0 z0qx4r5guGma9HbGbl?fjva2mbvQyW8ec~-bAUV8L0P@-^vw(!Iv4VKQb5~VRauj|5 zKrIkQn=6_Na+~Gw`3Jxt4IU{e6IKiSNp)W4X1%&|gJTU223E;>?hk{}h1leD6|T~) zPFzFW8;?DdRHn2$W{WkGWAOWenzPacA>-g{ks`aU&YK@k{&5$t5m<;wfkZ(o_RdhUWfKNTi1>@9ToHVI*s${ z!}Jo?>qw8Y{fz48ZR-r0@bl~zDAvQd8dZ8 zuZKm`?8!U-QHwrDdftSX@37kV?!&ood7ZS~lpC$#C3rQHTlZa^Dn%9(peD73dU9){ zcW`pO`ufLn;S~t>p2-gRbaxlLfi|0vsX6M2w2Lu_`x2P%| zx}Q$_08X`%jYLzuu6muzz1M-g+zzc@dNe+O?@m1yo*5nCR%d#}O5IOq9Es1$qbH7a@lF$D5#3_*m`o(uf^FtJO| z)foKuI`mzu)&He{XVeD5L8#a20k4R#^PCC@Ng7iL>?gCuUdfQtvvzoOPHQwhK8Avj^ajwD={+f}=NX$5TXXLP!FDyhJf)`8y!U<1 zH9z$?tk3L#U|Zu}gX8ri2L7ZG{}$78UjclwdMj^AxORo~ySo(Z8`JH|X5IxURsFS(oF3K>oKSphi{9sMci--MbUL*5x!p?yg3G6} z_q;+*WAK#8oXDk}VErZpf=Zo5mF@1UlL&d^<^CpHN8TRJG@oSLZ z5p&ktBjoe7Cen^Gm-&%Pp`A_3)6ovx4byq#g4E~QnwjMhJKdVIbyi|V@K0Q>9kf)N z;Mv7Gtl5GUJK1CPpQPW`C4!3!?#kf_ihsoP7&IPJq&eo5~V5)QD!T8=B3FKz|2jJaD z_dNk`7Fvd6JM%B^*_w1OWa_Pm4$jEa5{Cxkb447z>uY9>|LC54b}t8}byYU$0ypjC zH{m7p`|N}(sR#BOX&11&KXHgV)5EH18gt?g*nEyo_C~<$;5n)Dy4OVdBK5s!cOgAV z1y%pGrjd8;#vG>n#Tj(7mD9tUy>i{A;K97YW5DYJcg8pJ;2A1B?LIX1BodAC@;tiHIIF zJwp{I1Oio?nl?P*=SJh-*~-0I8gH{Pc&89t6i-^xyk2mjx^tEDb?2J}&9$m^-e zH2J4FgD;!23T;BIc=Dw>O5ji_+#gY?J*eGzOW9Q5N~wD>fo$1+QZRhU(0EVLYfB(I zio<_rcc*-R8E6}yC9wHR7Ng}7chbf}9V_dvGHKOb?L%pMlB$W)C)SX5n2*V=2v3=1 ziLJF~*td(+&t1CxP{%cP{XE&ZvNN*R{Tdz~$(JLR>||^0at!%aD=$K<9+)%#e}~*n z9uo_rXEqvTX0)EP#m_n)4t}vU_b!krEX7Q5N2i2=y0XJFulb=p=I>@Q&N=J?IuC5e zU0`f71BBM6Y7y?f3im1QQ`D!N9dPoPvdh$gqEX8Cl_lnNsJ)|*3H1(pmMvrSE^Y7D>c=9ZVv}KLxJU~gYfpg(t5vW4D6W7<{%YlRT2mHIf>smw(0uqs$?2MTbjfQgzM~-FR zyAxwPkb2#2A3l7W)}0-%`A^wz`Diq59d%idy@q?^TtGx`sOA|brnIh{Uqol$i0JC8i8 z7n=f;U~_$L`4L(W+dqIc+KuPqwmyBz*I@|>R~vwRtr7QnP=odn(2N<_v4JHDHAwXS zRJh9u6h2p{kxa;VC{?$sp~sLWjwN?A$QZY=9W9i*askClT@R+{@R#POpI7=gaU6h; zK%si3ULd~R%S;PMXG8F8))1t9#&9gP^JQy=1RW9GC0>z%Shwi!s@7w2 z8@0nUr%pDV#jPf9_&r8%zCEiyPkv|7SA9Y3ymniP#Cz5zSaj0wv;8b_0oII2|18$m zRV7`5FljeMmj13m!(KKI&oe2Um)Ajq?|E-Ndy)6W8tQwE1n!)sH?s0$!5-zxT15&E ztv?`&Co`$@z0^DJnnRAH^@dIiaQz{a%UH605n95|*d-{t35a>+E`thtsB~Ws22Qa- zF6gOLZm}d>C)7O=ZF*5j9?|8rcIp9A!{l50jioBTvAoKT_;8Qmz#RI558-I}VR6|H zRcS@U8`H&;N4nq!9L?RQb%viC-RLgB>wvj;@NsAnD%{yy5ZO2HcnkO}LSDJ~s@EPY zmXB@4n(TveN+~~58U&9>`BardrFro6)i~_{&g6Usi#6_k^Wt^Hns*_z>(1p3$`7V) z8>9V=JFi||X@51;WQ5w4x!UW=G(b*jd2Pk(+_q@QgWA#G-qns-eE)!!L-TH2Q`@)p z)b5n1#cE!&$CQECE6$}XdsB{H`mv>>zVxjPTb(H_v^J@@9^z(JM=F{cP-Zp_jivr6Qs6O;fTZ# z$s;RwVFi708cY^$?MZ$%#d z0Bztn9kmey+B!#8q!V60*;rBm$GwQS!L43>hx>e{^8TicB2(jqLwb#cvIOBF`}F){ z?=H4)r&%`syj0TMZ^(0?w@&xXa)K>$<2bjW$xp}P#ylRQQTREY@AX<-Q+{odE4A%9 z)lL4`+H4G)**~Xjz$&e|PSWvVB4*MtN2*N|S%BD^0n26uCq_X! z3~pjN!tK$KCND_mJTa}5PBfCeffj^8_}v+IUXAPT!2L_D6by0{W$C~|kT^f&tZD+0wurl!xW z)7o(J?rv3Tsl22NbVidhBb$=pL}0AWxRj>#f=OqfO?uU3Be)d!Zs4|%bUAQGZoOgO zmX}X<`qkKx>&opVBsp$b14}tPnlRJbcXAEW3v=t>^XgzKm{WS#z1i5?-DZutJZGSz z^6hjR_3!aejT=F!xDxs$RS8kK1Ql<+ZtL!z@8(E%a ztqytyk7d$j0TAuo1`(E5{{W22>@#aOlUsg!Of_;?kjee^VQnZEfYBP-h1Pr)_BYmY z{U9F!kw-GDST>DvD7nmTa#e7O;zaa7lP zBUDrw(nDk!5Mw=W0xy;Cuga=xJgecM@_!dIoX@m^RXXCF=_aACy?diAX)S@aX`tJw zBUFad$5e6Y;prlFXOnBdN^zQm$9eQ#DgZLJwk8$ zQ>S$>*KZx{lH2ZGF^Ak^8ttmF=`h#^1KX#g%bV~G`U6&F31n+iv~nPFd9~;GXRTev zuiet2TxzUFtAVvi>#(G_oDbI3^JV3FDkRb zYKlufdaQN6T+v;QBZ?{154zQ1y)m5L8>Na(bxRF#N#P5D>M_=FU73S}W2vNs#Hh5^ zqFv*2WjpO`)*A_BEtG9urtZNA^Rho+T91jh?9ON1I=%MV?h(qUSg4`U@~x(qW-sY% z_Pe3+dd*nBGjc8|=LoF$O{7!q#v_gpJMZtK48_IyO}0P7{mpWA4|Nf#)|nGH zYP@&1v%2=Fk7?&{p5fc&aT=A9+X)M?+0X^%GByyNe?a>_YpBc}kaxN4y0-6pUQ6fH z3EPN3RqWjBq(wu&z!7gObwGUx;yw)EwB=s?u!9IF(iqbzp}f=)rnEeJ)Y)~nt>?Yk z9ND0tEjrCxG6VkrZW}SmsAi>pFmSc#U~EN09L;G;sU4EbGS~Bn9vx?}&y)2`8*^S3 zx;T<0ac75_c9=Z0X~#gg?Y6c$o~>8KNqX2TD;VUxXl|uelQyNF?;q+HY2!rbyx3<$ zN^O&53uNsNTe|l9c04V!Vi&zI<;#2X*rSm4Oe2~2YS;b%Dq1QmFA=kS3x&C6R?6oiWRb(Fn z#&8!Sq6L2IWRKvX$@IgB$s13)hwWqk&JVKPZ6VvEa2m<58l!XYq0vZmR$oespy^?xW4o>+ydjz2?}c8|EX=kN0P#Zj)@os+^Xq z#29oUsWxqG?A|K=SP0zq?jqG-XYNq=p0&IOz&P8ifjw->FSD z6mR=*e?Rv7zl=O}c)xv1#zMo0Z+NA95`aO!E|14eS?_JiqWay^qaB_ziy@*mww1Dn z6NqgIUJa83uYo{$e^q%JQ+H?c^UBG{qm-BkS&_i=v;a*)I9j*eeZV}Svs0%_RVYK^_hrmqPirU%7u?%>1S=vpB1$xIbRTqBo^GwYx=xR zlNFJa751wR?xsJ*JN7qE_nyz$*l*rC6K>g=jEb3!%q+u*So6|QAMb?E?=~DzqLQAr zgR&>}Z4Iqd#^QE2d$!BS{SQc-0Z~c1OIl3CB1LCzSuYvq=Y7eJA_4}C7T?${S}5(U z$x&ioMQXcA+{8$CuL@#zY+(LiehES|>b~+b4WEQU zkh3b$$Z(M&HMiPDXqxbSL?m z9^btB)7BD~pP%qEFqGG|(>R{ow#A3)gi>%MvAl23q?Sh1bx%j zHs#g$+OJ#N2a`RZ1yls9;4+-g+jC2;BE3NrIE7ewFP_>TaIG8sy+ke#VdgZtM8X zIL9mP3E*AzaUGiav)TS7ab-=p{?*j>q+}lL?hPZhd2U zeR|TmS$fXq<3Jl6LhW_R;Y`o><_kU}Bvk)_YA~&%yV7)AX0qKv@zrFk(SN{c*(%=` zSxD=r!y2uu(y4PfU7S}#bL{^2l)Qmx*c*NqTLsaRA2@}*$K2_AXUswjf4^A*7x|JH zZlx?{O{1i;$0k}nAqUlI@&#H+7iORha%)R!u zX{e>1*&~0s2hg!Crmb3VhuqB@t$B_-2Sz7~HU$rFzM4F&n^$^(K918{bSzcm_)0%t zSHQl(f52t4Yn?0(dGukEKKGP%q2c%81P%LVn_BLf5j)TrgBsn}qlH%V`{y2ZnjNBi z6+JWdc^#{w3>G(FGMPRp{bJGcX%Pq_iE>TV#+6VOArt)rHV;AqYSi*5`NUc&8x1oo zS06A3Z$NNF=Lhi8b4>_7KW_86uS0Knj-khKAlpzftB-tKmDjt;0V~<{^`lL460S10 zyZ)XxAr#|}%l!c6{a=l}6~s=L;!pC)6xNr=K&~09PZL|DKI)zQO+|d_t$RUJjBxhy zar=AOu>=2M4S9+HHm|y|y4fo*`c&6Nf2*?cFH)+~LEjy22j2UkU9lDa0G4jO!Ffn` zonv%3R4ieWui9a6qKUnhfFaA{(zDl_6q*}F?R-p5pRL)Ho|EbS*OWf@^24cGEugbs zQ+vIhLt-ZT1%yROU*2s1UP{!=KFFP&stT%6mmqIL`&_CMT=&b|p}BtK5pH zoS9w8$CDfmnad7e+q(?EH%4S%%j!w7xMA&wM(V$=bnGE9n9sDA4@iT^YTkJ(cBTxg zXg?VKJnq-et9}kt+h6$KW`7{9xMj2QMHxydb%6DcU=Iaa?m<^mMVHoaiyg7#1)XU` zk^2XF7;anb|NB@S{KMP@XeE^-+3S!z;fp<_?#ooWeS4+tR%8bpQJrPvX``3$`EY$I zjZP=|UOD6=$KUA6dcO)LPvKe7kCF!$EpAUY`^fP216}t~^3xC-{?sz7k9L>lYu=A{ zgl9Db7Txa6vbf&ZizJo3Smi)o@)DWb!lGal@b#+=w6UM$~@^k(0Q z*<$_lN%$)ab_RSqS><=;)cs$LRku3S+>+2}xJae}|oox;V; zh0hguEo?(LXeiKVYci$SMmBPA;mN*<|Dz~-zfyGb2^ak;EqTY~TdPzRoQ9p*3$=cL~ z4%%FDYmxdNV2#msoVh!B>}i)p`1Gwiy4aWComt-2dz-a3W<`(;p^T}RMnm)oL?Y&$ z$9Ag?i;b}cWz^`}>O;LWp@%*{y=-^2&zj8;NoV)*d*SENY5fOG>f~cFSYSeq6wqae zuya@FC;KkHNIvTOyk9Yu-gJgAWHv2b%m+Z`?I)@94x2$Y;Z(eW|6u&wyq0!eceWUS zQsd0X;u2Q*vrV%poC%-SFNxRR{whZ*TV2G)Z)#oR+mH2gFfDpHw*2^L-qBJMan%=l zO`t`#%@!7SoI?{CH0y>^o*~EAWA5$QoDXny{5X>9chBle_m>*VL%0_U;}f(b^_0z zUGTd&UbZDU7jH(7Xb8Rjd_vZB&bWcx&@L%G}MXJiQjxQCY`(6A77sLs$*s z0@(HlHP}?|S#wX9PJ?`m9>J5jIQReyT`y+A=zj9cmc4f4575bW;@8F_qQW|ti*WC6 z9pia=Jf7_y(QDTeEww%3M#W4so_vY7( zg&?9O_av(I$>7;kC(qu0x>(Ls^8!vFRIhgr3T$0&s4thT#ssne-#t3JWzwl$^|lfw zv(^)87^4Pd*Dv$dkt|A6J{+KVtF zUxQ?)=@A$8+c1(?+?H=wyObWuQVo3f?|cr#Ll;ZxOR9ZP`EuuYvyw()jEU*p7*f4v2UYsJhL6)95q+*jiT`dwquKTz z0QEnKPu}z5Rr0Vg1=iFTHeMTLw%=bg95IC3!2_f!*@wjGmg~JoVIW{-moisvEeWCL zfz$q#ZELUE_Q`(cRMZb*e)_ z=^THpdOg0i4;7sD8Y%tY&Kvn1YrT8_s^P3MK_18Uw4EvoNb}(dh|ggkMXM0%j)YI& z`IT6=8{YigiEjV@ih!-tDdS4&k#wd$j7-7?i_b>mDRf_g*sY3?*XyBHsh-y;tTxj_ zFRpFEpk((}gJ4<|T{@)%;YD_yv@_Ic+In3qqOY?f=VQagYqfr6gD(CDL^q9}Ns9qw{4o32GB(5{M|j z&QBu}08Ax<&K>69>Bq9uF{bJcJz9T&P>;bX&Nkiiy+&1F7CDS2j~Y<#U2vE{P8FoA z1FeBkWic#YNz(>C`3<6Ga>faxF=pJVk2ZFaNEhbX9&vA|J91n8M3^2gNwjZnPgOfJ zHh%yY5?po57~`c<&64(^e#;cr-RCuT)2b9+zw1IE+FoA4P6HXNL9We=E&fx#?g{a5 zK$3fBvtaTsM_-kr2!*QiJf?tS!i5^sFvwO@&6>Xc0OqjWevrY4=qI2&0_VXqu06U? zq{f`H&t@~Ka&qSlN7mslzE$8UOBB_kxV7=JN=RS$TG?l|Oh=R+mii#d(Qs@UIo$02}>-wZ96lWYO|E z(bneAl%k2X<72={@3GpMRef|*s|Mlgd})hasn?-QQV0ERXI}N{{`{vf?96^~-6#1#pTSN3%q+KOA$Gv- zE|tV$I5a1!Up;3}rG3%MY-P{jFV*5)3YN|G-S|1W(BOZC9k_9fo?6fD-IPDB=;g`M zIXr1Y-I{~Tpp2z6r?TVQB)}{$mwqoDl?_!{{sE6EcJ9NXOx;_pSeLyCqm2cyi@Css ze|K4Fpn^RKtxzv+5|ND~Rc$QR_1OFIddyz-tA_s)KE zvzt|rleUS^n+?x#1Gmz%@cth_J;mN&1;MSu| zx}SFOklh>1JO2qZ|M-;ZNYsn$jDiuaZqrgZ_e9y*h7b6>2#(PH3UuCjS5d9iPm|^Q zt-Yz$Y?+DEC2hPzha`nO(Hkj|RNQNRptWKo-( zH*7%^fp`)PbNRj}%_aNRWhE{Muh{lzw2wFcfcW#x6zfr&VNZ&vAOj-09Yi(Qox-P3 zo;!`1o(zt_gS_gEeWbAjwf35UvB-wghPc#6wPwP+smJ5>t!}Ed;^oKcHi5B?w-_9@ zyIEd_CFz%udvoWx>n$hT1J7E@^$4tH5D32t#O#KZ{T5v9pQ8~eS-y^OUXzP92uMyg zTZEk?ND`i*csL#-tdHB!w`*SXQroLluS9>eGwStaYkCkE>Nl1{BkmeVcseoz1TTVJ zn_ajM@|1j2mwL4?B>lc<9C03YGt%kZnqtfEh0C>Cd1Chd6-Cq9GyiPPuGgv&+8MmM z6ail?M>IPL2-?%7_c&mc|7&*1k-Oo@8t+Lr(%3{h=yG1?iaHt;m{k==Y-~&@c5AA> zYMlXMcX6K^pQ};?Ex+Q zHNQOUy-2OJ3R>GI(UZlgbU7xL>1yikmehkDq|Ju8?o6G+&6e#(gQAXzHaslL$EZAO z<&V|Rk==GPxpvOIV&ujpg()C#T9!8VA%9;~pJ!vWU#al>os>dTQn|%>65~#Eu9b?# zZgSps8*ynfMAi#GD@(-QuWp13sd?&!45ve%*;zlN2!i7;i($pKHeco*eB>AUQm~Br zVyE6w4Ken!28PZ^s`h$P(5i-f=Z|}<`@L6pkx&bj{!my7;m7n4fWF^s73;9iQy#bQ zfvXDLvgIs)M{sJy{VI7|#U-RevX`lX1Z#ItijfY(b5sV8ltLdRQXiEBXc&d zjmFA&wEL>Z&yu-kuEONxyNTB@QG5OYS&anr?k_HUx)gYOmY5Uz>03rPO0Z&@`K8^qT`%aZqo0FKMT6QNyKjW28@mcs+0;wOtR-^$ zJZQtahC5U@%eizb(+5_K?saZgpw5%J8rL>aGK&1CFki|Bu}`Hk!Z-bncW6jv#W^0c zsK!^7;C@rtM>;Zx!gYMAJIk?BuPsKqopb}HPw{ynd2d-y2X_GBi7G&}Po0(p_jltx z@@XmAaJvZdp8ivqY>L0bc;N}<@uIH-g038N|B#MPL=yXncdVt z1)=F?ak>eMlf>zGQyqKK?gcq39)>^6ACRz4A!U`teUYAm3KuEJJ3T(Q(U|FJob~R? zky_+TMDh)E{kr|&n(ep-E$1J!vsZ_k2tif8{=Aj2*|I{P%VC#0cPeRFKQk>$>VRXe zAN*!N3tawWEmv*{A=B!$R|WiQgIdvcz9!h4RcnIGZz_*{CakXb4J!`Xta0cxU+XZ7 zo7IT}b=GWp_d4A|YN~uN7>DwEIwtX)VsIARf(}){{_6 z4Jow{m9BlI&c1&x;TH z`bSERpO!RBzrm_MT|Ge+87|5(C?x_kdJH$uWLH#&9n*7G%+U8bUF-+SnzjlJ9M+d(dZB zMYGD5+&Pf1yfU7+$I5toKAcbopOkBnoYp_1(*M7ntG{saPyw>If~OUBDu<68<@oXP zCq)73b7!(NRZ52%IB#~kcyDh8c+VMrc5(k|)v6Uaihf_2=u2{sYF{J<%zzqAfHzTx3zKWIC>?U|$7EZ72d-Ks@D5b+^prG;Y5AbT{*{Po-8XgWh zPy}u^;L@p}oQ`e+koz|QU|VX3XPB2 zYDfgHDK*Z|da_xq3|q}t!v8NJBLZd5Kvvr7(o@^5_#0ayx6vJ7X`+8drg1qfu7I`K zm%&=oBFh)sBA?93nsd#tyK9I>Qqrx@+1%EsbnKK)`D9|*<%jrG3TS3FSumviKL8Kg zE47d(Ra0zsWLEFuhbz~^@(U=P!`lRCPmcq{99`Q@oPCYDQhy5F$bmO3#BnF>Q`S-# zesyfbr?ZS+Jg3a-RQg)aVhSER-^Mll>8ro`1Df1f!CJFqS%z(J09#;tABM^9N9Y;R zY|hoov$3G$o9jlt@70IZ@L|k%zsSp-O3R0FE=OJ~6QcTuh(#OW*|@91Ewk&8)6cOA zDdz=p>-_Qye=2oeKk23(m$Px(1z~MEMBn{sqRr6GU<@394Y_)LMrQJDuTOmu66lDV zKYvt~$7iX*ZSQNKylEiFs9xI^`>CyR6?D?CUv8SdP*&?(x%uNUGV=VLjtogh66_$Y zA^zl9;fn)%LN@7Bo3}6DNKFc!OrLg5KzE)v$ZT?64W;+lFQK-|dYu z#XO?sSGpDt45ei4Zb#;FeTc3GRr54ziBtfG5iPYDaCBFKOo8v zEquwD_x~GE2S@VURi}{mAeYuOM64y_4_)lwUYRcX@*B#+L~1))Ip%-zrjDk1UTkeM7w3SN(=QA08LgTQ{07o-1WH zj6nUI{@?janz5zJ;T)C_#9lHx``NSD zKXiv+^0Tp6z5UpG?~XTlNsMg}IIafoNA$>tw`$=Dz9yjn70w%1)vNFJyUX}HzL}gCRA$nGy=32o`y<%GqJCiX ztd{20Zhsg&82vCngy_7Te9M_g{@6dw9U8jl6drZo4QKiHC3~pTgE~rV7H2 z6|Zq~3O7&4(5ib4`nuo=J&D^V+8MbPbO;qMjLTa6ax5-&{r%}~_5RI-t3aS2cYNo} zmmfR&F^r-ux4~mB=g8{HVUucW2<{90@*eN&XYXCZLIT6cV3C4?=+BEjH}im9^?Uh< zC^1-`RcuSXUND(h@tAWRuW9QSW3A=LXrU(&b365(()SN|6z^dMn856Cf-WS;Cc|B` z`K>l!UMR*3j52OEYc!|zHQDYjn(yf)lrG0_yEChuw7UHC>{ht7BH-q={H!$a7^xC| z{bh4W)}NpG?kwybPW;VF!a}d^o5)9MQi~1qLJ}FzA>q92eu1nxt=06d&u$5f^sVK( zmlOB2O~gj&qxN2w{g}=e8zgJj4RT1AH``t$*WLBR*89eAlk*82{qA2!w6B~$_UH*1#Ljh)IR+;G6Ts}pT!SMMPoKk0G4 zUBxf;VKv3|S(GL#4eXvNLK*gXjllBVOzPe8L+pw}p+B^V z-NPT<*#pn|ReAolJm-*)c&lw~YU+4cX^^jR{|s>8l$_S27|kXqOkgv281=Y1C3f8j z{r_!30wuO{TT#luw2m|9i8?PUyqQokHd;&!9vs>JKq}{qBW_~5zLa%4zHo;Iys>?$ zy+x-=1vR~dpZO|gUZIa(W&n`5SYmaj6q}GftnWV_({+fRg_nRiFrVLn`K?z{8NE?{ z7<>MM+6}CRDUGTJEMbL#PWcYL#Ikpb;dJj5G5*mr%U@j^mULaW_WE-PU8ZHD%pVY- z$}e|?v^9pW(;u*Ns>2okJQ{uRS!!;Fj3$Kw2%d7GXH~x%M|hp0J=EC8ZHL~(D|NQt zC{b(1&i;PdXxf`{dr`&el?{H!o7m1$R;crZ0~t+kpqYJMCja360DH}B!%pRty=Gl> zzk84yqm(T!OqCmgZ~34wkgAh>^a8=m3~NHJEcYa>gFgG@y~9fGAPqtef++S z+FE8#muW#=`SsWVOWqiF*uJ1}=S_kw(Mgx;;OFXhizg`X5?!&ySJ!gbsIlB?_Up>k zfV3Xe3%;$-^FwuQ^b4PC3u3;Ag#3)z{B@Y|iCDk1%<`=qOx_BxX9h9`!XG-xhk^JEWG{kQ&M{>l8vU- zkJQ+UTwAVR$C7Zpt!DE9xr`p-r!E1V6H{&6ozt?CkLHydQ0q_{w*(`Z%AVPXdcMV( z<|=r4G_HR@2Lijf_|S$txW3b&GHK^1D4L5D-$+vgZ+u!0X;^k>e6VSRt+0Ae>0g54 zA2Z35>0x($&P(hI>W|`a)>{o)S#LQxn``z{r4LX7wJP;fsQh|gZ_fHpk?12XAP-L7 zXI|JSw7GZMkONiLrqEt?>)$-#I!AEOoE&Wc7p-g1ONjc+-T_wF#H|jXNVf#u-oHa|ry?kt;RM4=?c?J0cP;;9s zlN6GcYGAIbYXK9G=X!^yKGmAuQGxBgzaduruS^kuTpi)7Sj#obv;h#;@$%j-M7y?!IO76W#Y# z^IoiA6a~jkZBZIs^k2UeP_cPdV+R{ghI4Is%<#n#YW13qd_Mab(&zQHkfA#8xFi0W050ib#!bGX z-^C=O$>VD;N-cvH@#>to^Dg_&|F4}M^-=tLfF}p7f4!mSd84*da|Jua#V?~^Ui`6u zHLh>rw2LRRd^cRv<#q{R`PU=RH&~93(2rb~@~69lcY012cZT(7-m16C^h zQ(99wSe!n~^@HhkOdVpI1P-(JC@2Y4p1a)+_W!Rs%dFw}_|SG}zbRCi@i8rltI`SX3>jH~rHZvvNbTI;@-6exF+n@?4s^3D`_F<4Z$Xsg{U zm=e37N*^9O9+qpR#Rzo`TddgxcFs=*tb87YSlas~@lzt=(UUR8L8V6ktv5fD|A5fm zpPk9G(Z0H?KPTIk)$DNqg?y-2o+ua976x-y(o7=D`ovhj1D)3%Y zY*RU&d{n)qdW_Q+yqs}!1FOv@ZSQK=&&zxFmtU&hbXIHCk4Knt=su^;$LliKMGTHU zo=&soxF*aX8s8YF%6VAqvS{5p)h{VVMhZNncSqcDhIEB%5xYgE$TQ(lJN0-EFF`eA z_-4;xL+t(^OS_crH!X3cDFyZ|CV1x#mgU*;y$ZShX8lz(9&e;GwP1ww`G$KpJ5yHK zb0iJ6o)nn%9qsot)i$j04Ze;l3Z zwsLG3fRA7wgfgT7g`_AN6e6XR6s07IqB{T2`~BQ&?PYlG>AEtR%8iYyXDfU6f&-I* z_T+*Y5X}5Rt5gPB>|m~*gjT42?m=%044Jb#OF9RCBqdj{OdzGvuF2ff;5D|lzZ{;H zoTjbb@3wtZzkGk%J@9=g81nPg?|j=Hw&&K64^KDb_ykVBR=wb{%23|TD#-0@2^-Vh zR0vsbgGfTYgmHJyY2ZNKtgMEBU8M~19gwfo?^D#bjo=Dr`E5>~j}O1qoZcokU{+tP zd&H!4BJjzF+-UHm*nsG^v_EJuLz!be7q`@@nMY7^`%20IZ5R23Ju6z=4c?k5wnS}> zy`SJQB#kRCrz^ zV@0U;3Z3c$__oVzt65l*dk$n$C?%d@+xc4`1EmJrf1fWkxV~BBJ;I+&g#m24S#$WE zE(^siQAMFH2CVT*u2}i3Z`Y!4^`Tk~N47cyj~3&P6ZUU_V%y5IJ&~^4aWP-Ezuk^& zcf$m4ue;hk8rX05*_Xt;Q8O!^`V z{56!5P#KKlkQ-Dl)yh?#)z1-e>*k)^Z8ci0tF^b^PBT5&hwJcVw={?`2{};gN+t_a z6#Mtp3`samrjqcgR@1!Rg@^=NYF=3yyv0XXcz>AZ*me8)Yfp7oeF%I#Bh&TOYO7jm z-Z9|m;K$YQxO=b9@tducwzd1AlWf_YF=)5e6qen0arNKb=`0B@VRVdHPrv9q8|8H) zKd{uB2sp%?`7s$FonyEj$9IEbCbh~sDZP40k zqSTc+)1w#G?(w*+Vxs*AweKsdlF!;>05@8Pm>D%!GEGI7rCIr2S7%Hg2rcDwk!a}P z&^!3aEnDqoj8X8TWOExVqp;HXGuyx>J%pz>#JL1HOu7B{Vd4bn;<(N`p#2Bg!nRXd zg@d+uSbr4wtdEe&dLut2c5x(Hb!~W&h)TAS4q6j2 zcBRpAEd6rD-V9d_dq|w0Kh;;S4J;s}Pb=Bf!{4}xE|FHT{W?87h$Xq)tDdH~ItI8v zqgdh(%GMKEJis^?9Bs@~udBLy6}x*YDPM(m1E?EYrR-v0sNB|b`}wlVo$++>nfg1{ z8(4Hun91O}d5aMm?Dm@-#sm^8wKUd!`mJ&K_F9s}tNsU#zV1Q9WUDzth?wQp$U>Bzjb~|Ns{@lklQ5rt^GzM5J*CxdPdksBTcbNiaRiwBwzcUQXTA4gj}LPbf_%f| z9R*^-wDcHue%?2vixrCrL?>E}p0THp&UIHKI-@M(3G8c3DuXTlsBzq2?5wtT?Oysk zo)?zh$hW+|sm?bmvRtY+QV;|MzleFIJG(|A1#=zdZs4PM`x_`O!2@Ab?8WG)4Y}G! zjFNjn>&6tI$l%n$nsV9uq=i@YZjVPv4movDwvBJ1K+^5K%#2L!zm^Moc)2xabfZ35 zP1aLU8<>N0b5m(tA-aQdogfrsf7m5piv(GdJjH##NR554`plA=>SG^^tAHX zr5MTwqVfZo~C5CXT*9l`{Ux^00kzcDI^Jula9f1J{V7Xbl z&sOr8kt-d3gux~jOdu{u6GbfCG&nUi$|DI9*p~mGlmQyu;RbmLVgC9)gXWTXE@LdJ z+{>?Ew0=1K?QB03#w!c3uNyq~ck}YT+DKl@@G*i;ANOH4w{^2wvqy9|NQ3pnq6%?HeuMq2yosy3%pn!*Q; zx~`lpXkh*_ES+|fR^Ij+wd0PSE_>FvQmHgFgJwL_V^0a~@fx-Fe#I2K)i)V~!~S8} zNYy}~gQefTxAYV-?H5YGRU$}3s6sM(o;L$(!%?TDZ0+)<2BH7W~ z^nJ@&GW!f;HmzaMI~R6Fa8B3Wa3IU)D7TiB?ghrq-`>^WU7hAP5S&lky1Vxt*<_L89xTA`bxf~L2fh$)#`_8cfpO!%#*(UjQUz&`<5=&K& ze$7v$M{cULM-;rncirQh%&%#>jPtc!k$Z`)rH)Kb*?iltQkB#a-Uw`qwSUr!#m?U>x) z0q4H_RRm~q>Ke-xi@SJjalTSCKPC62O27Q;t2^TWFSe`sqv-r+6!4bVJvV2%Ir@Ds zKA}9r?$+-<7JK=N2@(}K#b4Ftk`orp2E5_x?J6!`lhM@ZmzH(wzJzUbGy$62ntznb zwFj8gb#?4@i?&*4YwwO(a57aKe5LvbP-<$FTA}sjh%q|Lk$Jn)i+*up;4hk`pW!+>?w)h2 zyzN!}n)N6}%Fn-dpEvaTR))KWqHApF8>y6KyJ$AG`uE$+*6`z==ZyNU2YjRuiPj0Q<3mUSZS0Q*C-_L+w1Vr zIy5t&IG26Ho}O)wl^^qLicILw3EFX}_fCRmbVcOY@0aU8ywQnf^hkD}F$2(vR$r&{ zD{|sW$zW-%<=r`*-ZD5S%^Q4OKJ2@ulP0q@AJ3etGWXU0pLr(;?=xWdTWb5@eF@Z` zuS0skw<&#$qQdmBvTugFcXFm8AKpwn z*U}X7F(+Er_d0*||GnwRsxW8DZncZ)h}>p(BV2@Qk08#U7ZpnAM5L-&W^bW6>HW;4_-$f5xkD6-bQ**ZZ)xpao9yLdercz2z7+W~<-SgHT zdFz`Nljc8xMrxy)mf~TpU&7>hjP{5?Klt~BJKF@`6*5vcP;^%&BK@jwFEVU~oQ3NZ z;bPqCOdsg0CG(eT(buJU^n2?s5iWjm!Tc|&BR=*jM^vu_8(xyzlZlqM9R=v@XbJj* z{beND*Du`RZ1W9{SD^lAKLBENj4IoSqOqU(xW9~sQ?)9Ez4*Y(_u7tsIOa#Ifkg8= zpt5yQ`y+1m{PbT$RPFVyiDHDFxdO)WQ`BF*c0G@KRs(E5?LpZ!5^Rxry^ZNyS_?gl zFkM|H(hU5n%^(Aztut)E*{FOUEuC{~yjzG5Wa<)qV7e+ex!nkuzEbf+@_8TI-p{f| zy&CYd?(b2f(bvDk%iXngc>%Uj^0K58`K^33KXrzMqo5IqJe+YU2>WJo*{R;F4PMK~ zmei6Fud6&e6!r=_Mf6Yg_I-I>^PftAubzG0fj{7bAt8EvZ5xXk-LAyx=hwZ;t}wX_ z7t}DW9(rO;d+lQ&O|}d2MfOiZFK}943_Lvp>QyAqv`CmZB=XI3fdw|SzLuh{xo^^qA%KZ0EYCo;AHK&pB#I~l5vu$ ztR&zgV=}5JQ(}-H@D#6ajvJ~XnRvGhHo*p<`Fu72UGb@9z{J~2XVe@dqwSjIXCuTB zllyGl-ru}Y>o#n0hcOao`!TclgO0U9dA~kHx_38jOR{@i{D8*<-3iBzW_9-RI{I#2 zPX3~XA%cv1I=?|@Mg+N~lr3+3M8BUL$>|_1Vn*}d~#K9^Qrn|6|?PWNl4+;oJZ zUK~&7%DY@>QS(Z#8u8o10lh57JQlB&L>G~ga4zTdlJ?t_5VpaT?Dfe1uAfD`^T922 z{1!c3%OJb0;(en|$NP*Pw~kG;HUxgr7zBb4ROEeMff>ZxNfB=?o@{ zS$jEDDMKoS`s4_K_Hs1^xr&ejUA$x+NvN+noEcrqv$JEfn=-@czZ6x+NqJp3;C(=F zekVQR_uK5>Tbn-b%MoW9KVz`xD53%+vR@}+#c5}^q>bFa0-pcQKpI@!VGJRkax6?p zyR!QMvwU!^;;DZyFBVd4}-Y>7&ZUM-O7P&EVNulAV4(O%5-ck*{~-XvXlMKA!y^LQ+2n z=c{@6^5l8ZBit_e+9}8-X#7D%E3C!TK$WxZ{0@+>*#xTHo^vdV0kVl zO@Vwq_93Oi1aK9+Tn$eworqRfz|t=6@~I)Zc6o;(sp7_t4H)J#x;@fu?3qR9uX#&U z7Z0nuS{Z&uoDJWNXB)QJ#o{w0%t55?zP;yjXRFlOIK@yYAH`ZH>?!^!ckAqI>0f~p z&lJ|>4~UR>;`ZyTvF~HKG1J=pb#gz4Uct$iPOzO+!6nZ3vTJ+v-U282`QtZ+;6GLD zX7*qw;IBXnICr%rlf(J)Q|9mOPdjXa$+`RHHKoQQ&C;tG@W^;^p8+LBNgAo|_H6yW8@2nn+u6c{ix#==A2fqg@h;1+2Q|sq__bYs z$BtATYGu^y?nUhi{4^J*E1OR&OG-_{WGTw5g9Q%4jr1zdUs!~~a}M`JY5 z`PL>=l?;DN|ED^vg%(vwsL}1XI#|f?e%2<|i zP0XLx(wI(~Mz5<4TGIP69de>v?<|)gEl#)NZiTvb&&Y5T&F({(nXg^fl-J}fo~gWm-q8t)l8u?Da_XJ zVSm*M-)Cu+Rnvr@H7nQ^V#eBxWnX93m_)zs3IIze00oPLq@9MHZtKlf>XZ*T5b)pE zYkB=>Lm&z+f-;z%j}a;NCU85U#{&?Z>CYiP!u^diD>{FO7LBp&aD9(Nx5=;!#S-6G zl&<4;KNbQhAe~vgHP(zy;!+}#SyZzXOrDr~Ir*tE+@C*4Bu-#aGi6V}vSu*9IVEv5 z^mXAzm2WZIM%>^JdhE67MoP@)T9)gl)^i$}6s8X*c=Gnq2Q3Uw>MPF*ZF16YYuW#v zIR=e_0wg!gaH5b?XxjcwwN5sktim~ShQZfa$&#$JE@RlZo)E*)ZBSGtKadrXet>rA z?Vw1RXeJE+a3(;ct+U;x8xH{siOc~v%&Rs&1I{-}Dl|D2T1ZtveoKCG+->UK?P|YC zT?ArUJED`5;5=^gX?>O&li#zb%E^k`c=+Mh2X{_yD@f?VOYrIu#tbXS7v}pF3dybm ze#H0H9Ek5k2hHnqLi6bfRRx86CoXt%Re#jJnm8)21Lx`aDOlyF_ttAzg@%3a`)}^U z^2bsXT|xSi+Q_uc!xB;JRlfHO_FI;^7&WeFu#Pnv!7#Ow9dae`$8|#tMBJ~kz0vU2 za4tyz_J7muh54c-JsJCUricwuS|ktH*SQ=llvg#SS6EB-O8G^ z2PWNKhoA?PC+7T{g9^6D9GImcGLVMleETsP)=3+fcg%HyPSQ_t?|!k*1l3dNqd5%p z)oF6YmVZ!pdSj56v&zq-H4x)}{`EHJ7#!^6DUUSHuEGMcTX zK!YFe9zWjhi&I~F2==^k5q#MuV(+rLjGFB(`!az`hEIR`{0{<5SF2BZyE+i}=bFPw z$#_3S2Lq)1I0*KubtzrzojhE|ZBdYZP2enCE&L6F1JK&4(@|d` zHR^XbHf-3SYXZy-uht^^gIEKEfVr!Wf2vCIGA?zQv-z;pBdf!+*y!Qeb+-Nics=T5}`#O&+wSdQlI*b4BY5!IKcx#(49}wC-FInRG9^{G?{8Z*ZA!cUIB)RTQjt z%Tc;U*YjCVzu1_td+x3eUMq07uZrorIow)ry4ln{P&ZQz%4c3ZS?|-vQM`b!+bvLz zdqaEMkL#z_=eL(DGh^2KE7)wf_Mw7k=faX+2jY6`?L_jHp1b?BYlq`WXTDHyXA4O4 z*LHKi;1C-nPXGvPY*PDOXz)z&MWTFidnF?z0+SXaxCsW<~qe-`~3^rSN`q znHBz8{r9CjEAyu8>3bGrsSw2SmNj4Mr^J#1cj$j0{e!2wGw!S=J*PnohL1~s`09=Z z7+8SqW2^$n1szs~LzrXcDP>sr*_YJ0w}X(uXvvO7H-1$_-#NpOGjKdOA@yIxlg8g{#7lnx4s_rd==w-bQHlR&`moqIX9oIG7!q0yF!WX z#A;u-_GOiM5%+m|d#>}`W%g%Gpiuq?3Gua{XmSt;SIr*}@6)DK?dp5=H!T_2%@4lM z4R{-E%(_{Qryc23?L%eTX$fqkeeoI>E|}F(`>>5$B*pB(D=W@-oVUuCu9wX*+`OEV zD)nRn2y5ljGJkv?lU}>S6sPgZ-pCZqWXTiJX}=zNv*lvICr|Okbc`iTJ}fRUIi@- zrGY-7GfgZjl@~VogXocr@cF4(nA)4Eq1(~)K;9ajL+zXO&w)+f*k*VxkgxZW75$Hx-mut0}j@; z`hpq>I={9F`ORi@54~xC@OaY&0rpPJq&#y}6#p2`TXCAldm|4>>SBE(5)j{%TI%ukFbhSsZZfiK#tPJ>z_UwOpCZS=S$7&PM&z|R zELYvR-DEUk1ht;Wr3!vLXaw=XeT0@s?K|2C-OsmNIm?kiQ%RFB@8R28pa?8iFaLgC z|6-~`S6#~Q7m22iU#2cVkM5cMgM6ob;&B!~0I6bGMPD$ga+GU;8E>LnttmL$%6XVtxnpnGh zlfYlkkI01p%3zknjKoLj2Blyq2!ZzjvBgcT2fU)awGP#W^q~#>ye*8?8fz2<82A`~F41hd}ZG+lCS+x$Hj>FrEdx!%?gDW$ zyk4d?%1Nm+ajK7N`{wP?KUZ{O2CoN=;q3kU)%ywy1>Zw^I5O-;{oEPKn()RiXRgBc z2dgQ4C>Unlo{{q*c_Eu}r<{^Se*ao=pZz>f>hXk4+)x|MP1tEKES>zs6Pc|I;FH2z z%}&6syS4ffYIGpDAFVqjIWkKYtY5I&zc;F;%sc^y8)|d|{-EiFd(0*k)4L}n$pEQS zb$C{J5O=6gb#u$tOewgYZ<}(1=q?dZ(^u6e*Q+%G@h#|GJUD1PaDQ=^8P+zTA{m1ybdu-|LX`JXDcBrJm%6P|!Xv!sK+0gYE?b+i4>I^t5AwKNZHI^USs z??J!4uyK}wx{JYh4x&FUdxq_vT*%hQ(mZ;!1)*y7aaq3UKj=!;)wOidANAV8g40Yj zjBiCV_UdVuNYl}17oK43jO6cNz598qJUtf7MF`v5xh(7pg?+ad z=fSAjtDF0@*KNkmT4HXYQ4%8@C8_N<%pL651D4bp7}C8edby4F{obZOgt<3sBD2#V?cx(J=bO&lep-Rr(TyBsQo3x9f(p&B4Gn`CLTuU?LD6&!K5c!JLm*GFpn zXY;Uj?YX`o&yhpisnvEjmH8}R_|G!h1}n#o*1ukf;pPvL$D4kYGBJE+mvhk**BC~1 zx#Rm%*RtnMYAA?quYzNmzpH#%Ui+-F&+e3$_8QgC3Vd_Q6lC8`@K|E%!`lYGO-gOV z@P+^it}o5=ci51?#~&2bH>xDDPlG`BPx#m(p2C##&a!Kh3VdE>2H)+em@eD{RIP~E zE*q!z{?|r!g0s`!m3^LLGmDo^us*Lf8>^cF)x!gQ6LhQIjg)EiNXpwk=snFXBI+D$ z?>LB%DUy=?bUps9?2`1RzT)m#N1{c4^cL!#GimI75juJQzTtcg5A~~aiYm_`+IhsI z@N^nCoNZU$pUQQ$?a0T9d%m3gA+bdNAgwW5i0bY-#s=-*hdg1{x}P;G*r{o}%{1iK z6Z~)*H2LMO1YB!QIhF9ho@>b@bii+=AX&Y{=T4Eie z61T`?=vy)KRPF*anl9Rn!4z(g&vHNmP!e||59@6;w9QG+9PQ84!To~<*x5M0DIKzc!)$g%*a4I2c-)|q&pd2kHDj!?kJ0!#jT3a$<{8t&UtdprVrIS#YG3jvN5q_}W83VLmP$xafWD zd2`Wsbg^}UZ_kgqy0_8gMxTx674z|!2z6#WhF9f+`57U}n{6kvr^vO0caJ*XP$|Rk z_N(J(zFl;x)l@Q?m7V=jdBv4FEXQ<+2ha--kJ;{*nWxG%XEcBGXr`mW5v}uJ5f?Qn z$@EEK@s8gA!bR=VewnRGWlbDDlR9z=&%$z98&Hklsw3u|3C0=+Z!V>+bqn4p-oya* zd6^*h06q_Y*I18SvL1e89wU^o{W24QB1M#;QI0!ws6|~x8*8Va@zJ@mQ@X3$={1L! zq1s7G$4}kT_rF)hroU|u`a1Gok>Kb%6-AMRe7kQSKCZEQk`jU3N(nW2+%7Qw&;%yKL zQ~L?--jl!>=j$j}9x>46MU~fPnp71lhUAuy=6(E8XC3TkQ=^Mt{pswYGp>)-q@WAn zf!WRKu@&|A;zDC9=1S>ECrr4k8;mUR%+5|$yR?7>7P1LHxYmyAfudDJI<+cFpWXt1 zL2N>GleQjx3TtZ2f*uWPGqGOjfGXCIpiy`!cF z$Vuy;xQSoM#R_PNmMxF$3qxoK)gMS0)>^YKUdq(g{Me`;;U|inM;m54u&aKcMVAw)FNd^0K64;F4@UZI&5p^Hey+6~_A%_F`ec(R#NoOh zPx=VOl_25?utw>U!$(>1!dWuIPvx2WBf#=wc0S&dptLZ#MG=?Jm(DwU1)efd&p(_n zKw@jlW3>voLJWdUc@vNuy?NUh4t>Epk8ehfJQ>n&*v3Et^kCi?Q#Z8QSR&T0GC|-71ed-IbHf5%+1Y%l@VM>cGLB{#9gqKzqYUoSRvFhjV8 zU3IVn28E+xeiEzes|C@^php&K+)rAR^w~c99&SJXAh5#XEKU<2tQHNjS^4$r&rq2E z`Sw^C>F4vTl98=}3SOqO-g%&P`6a&DcaCSf$Cix&wsy#G1(Od_7enULN3(~o9-A$8 zxNKi07JQF(RHv-S@&j>@F-yFpe zH_TNwK%zNETHC`C+F9 zh1j_%x4JilGCledQ;}aRFtpTaPbe-cvsmv_Sj5#pS5sb@jP}X9M=F<`iU$7ox_oVi ziGT-vkLVxI#@zAERs1=;cTa0~`ggTjjg`_}8uSKZcY!XuRV-6GqOj5zcd0#`!t&jp z$Phs_hVL>W1|#ZIT9r?oOwhP&xgN|7$+W-^csmiN6BlQrwvr4jRKKG} z6HCMG9@tu9KZ0$i#WC?SIq4&W0f%0sMV_ONZci zntCvGr^B!R>O6l=ztSZ{FvoAZ_ML~nxA;z;;2~2sd10nd%+e~Ee~>*{w=w#c?kY_f zzpFIBQ4QbOpLRi9BaQxvwr7j^zy-+zPG^^k&|Ms=P1PEG&PM^QodQ9a7*NXQoeR2) zmy60)Zd`lR_CcYG^;;z_+k`z8eQYLP^^V*69fWVx3!R{i(6K41qTM?KO*@=`lrM6> zRUKQj)_M3n?Ui+9XySw3Z=X|Iei;4?iF|e^@5|_#kxPhoOyDFe)QDc4%xa3#Yp)>K z$mcT(vunun_qy-z^*xqe4>xC3`7BR$kBsIm@b%7Sb*hmq&oe2{5j43`m3n>YkkQuT zUe|2+(Ax!OkDB+J!oMEo<5D8&NryKmd)^GdqK^#&B*@Sn8MmBayr}KAP@V2p`V$*`j-?yb~ti2nRuPL{jO zURh{Ayyykb?Y%@_qx}|M|W@AjWVR(J<7U%i^DP#^g{Y;WZ2Ek=SyNa zesus%K(fD&l{xSOy1(QuX6MrKonwEH^!^@k3Bb&bCH~6u803Xc9~;-(e0dkp;7S-c z16RHk@MF37eGq^Bhs90G;L2Ltwm6-!*Y$WQN$6&q1HW15k9vKjd8e&M+o+(^HMwuB z+kcQ?y`Pk5Qqyb}Av9z>f6P?l*>>+`X~??Qt#pD?-H6FkdnL#lG7?jg$zDRwyvMDO zX+~vV{0wg6+=;3?_sc+;A?5JM`JCx9(1xDDWBIxMK`+hmThjW_9Rj(q6n&gkcyV?)6wc?wR8JiIiF?^@s#8N_uOi4;L~GEBZ*uL`FW3=HsY}p zT

    GSWgCTGH4u?RGE%w*h;6HaS!o0Fv;VOX|Pe)UJ^PcC$ao1^jl3i|~Pe zj;`+Fq};K0fJuJDmRAFyDxcq*!SK=C_ezG^ZahX=y-X0Bh2I&S1-T83#kQ=2Eg@rd z(w$0J;Qq?D^-UYsX+e-Oal3CRNx{j&a~kOuNRMt4usnE$GJuy$nA;aqtP^tLgv?Sl%#A2` z@UcC4%GiigqXa@8xYNaYr5d(TOlL@}e&yKRyb60o8!xOxm1JNxHqdbUFe|QjxR*z4 z-FNQ1S}}UWZ@r?nCdUx>dY>sg@a<{JQeseHw@6R0*V}_UhJPy&-Ax-9A z!u^l{gEE1n?I-bxd?sJ8IG6XDIg%dp%XSu2EB>|0^l$BHLYx=h#6;lELB03*nT)QK z8HjdW?!K!HO2kht{c6#zJEW|$u^|=9akp@L-^=Rq?{fTUqu1BIlq*)$K3&G~A2d-H z^Z7(!eh<5DJUPD%bua1|hllo&T?BiDV!48Ls29EaZ7g2R`uqEVN-OAq`(0-v{~O9; zOTiK!hIIz(N;??#0d#S|XT7pZz2ZtobeezAp~8Kc`D3OrYL*_{g4t>_Uml9>JqmWy z9Xek7J6lvH*b;Bh*qb0pea|;~T=@kMP@7yOez!$9a#6SqaipO=aLqN%(s(9)+0&8j z1n0rO&i{TbDws!A_OajTmxSqeTeA1Zq&yMOZk>`_*{8Rkjwzh7}@&f zVY#Uv^HT?Sef{2M^sD*fe(x1Engb>>98rj~XY{|2@( zVbCLjvD6DKyrTI*Y|2GdzBb)fM|xV>v3vv60or@0n(N@Dm7&u<{wggGx9Gh5xGh8; z#n!-eCrUTwdLi06)Z+EqewqXhwrd^JESi zu>y~|m!gwz-9`+syQqvMFSVyg@{@+gPms9_@4Uua^qF6Z58PU~>hbDIwVoRxLigvF z=-TjR(BG!|b|g}%k)+uvOM8C#WN5gU$g{Bt>7g8zkp*8__RbA!!dGVkeKG{3$GTp5 z8GafkXo>%x1C<#@)k$LQfl07Gay#+?PlG-F_Qy0OP0f9YUUz67;sf0GwU{W5^6Ea&{5+XgxA!ke71S5-x?0T2?&{uI#^7oGRF!p$ zx}mmooG&i&7g_pSNZy2~ctYBJZn>F!W)>{rTsjP1Byza5%Os=iu0Xfm)n;7WTB=L$ zNgXR!IaWqIxZl5vdTB9DtQuR(PeUfX%RBw_vC;na>9wmvDTb1G1z~RbyLXl02`ss< z#+%Rk(dzOcWd!JyTd;W{Mp*i^w@m#NsaO1Wq2kk|+Y+fK@BGKqxh@*(v~l`$84HG~}wBXjtAqhaaW|Gs(4d$qLHQt3|!q7)77&8cUB-GY>icXLM$ z!lixMS1Nq}fQ)J&VXhkkUwn}mJuNpEh6RsW^~dT%wR*`U$l=-72*+r!i!aa(jn>}K zc=+5i8lLgfbgLbi-5YS4#@;!(kWdEq|MpLAIk{|2W!x?;y%N4&)s?8s?n=g>Za-_a zba!&m16@1!E{fYM-?fo5Y)bD5E5Rw(&)+RAQAX-Wsw@k z**QIKx>*T7L+24nz)FJ$wzn!q}{7ya(s@9ejR8iNj(qq9P3L<@&pUytLr> z$?0)be>KwffM*GPo;Ty%*(kz&Eu2;FICu=z>~MaK$I9u@-Kd-E<~M&7j(nVbD+}x$ zE?t=LiJnS4RMlvg{9iX+1r2+$laO;v%6{mME1V21WRI+|B$-`JJhts>Y7!5w$;C0eJYvPxw0fWR!jyq+tLf&p{ zLE{$c=im5pwUg~T3!0-*HlS>8KUt4+&2Hvjk%_SKi@I-9Z`-)a6Vfk<&CS)^y;d6( ztlkX$WAsEuiuo69s&1pf|Muii9f|klwKN^xnpN@NDuT8{9$5WwvwXuIB-XQwI6Wi? zR60E`EzZE#k>7n1rx@cG+`vD|19GwandX3RLD~&7<L=z zR?m)LiMMHGxc@`$wWl^3ajfu6I;e4=Uim(1mOo=TrJf>7cZAuqh{+B)J;&$>!r(d9 zI@OFgs%fEWtwUf~1f4RC@4az#yj)Fpn{sPHcE-K0-)vOclQUEQ6kdtkuW)BE8?#`K z-uG^azr3ulg}0%tT9wE)ovI?Zj6cXWWsuSu&oSm#8TdNy9dFbEcMKx168b(}e;dl% z2q5D2g34Hxj)fCYJ4Dd9hCJKCA2KZf2QAZWRPv6jWbDz?PdQS4uiYlM$m{L`?mn9f zV*Nd`%ZD5Oy*M3DsEViY99_`VDKN&APKihc{F0af@HuHx?o7YqpAF)*r&ah-qkt!vN_Y%l@f$byaL{NR(X~ zZ$8&(@x+w&iMRV_ef>6-$!bN}V7=kXO>HX&l?%+l-t9nb$22g?4u=);fbFg5pJEc- z)#Zj#-2}LGSXtcxsy_D^6jZ8m_NC07)uhdLCN2CEj8xxNGI~r_*zkPb`t}U4 z$=vb8<60Vw2D;0M6V{!|jo9Ct>z}U|qjs%JmeyrFX|p;; zN6x56nait5S3kANy*KFhZV9^=g^IJMuikgaB8e%5UA2Z1Q1D4&&IwZPP-yWwZk zSn$NCBJ`L=4s*%WmsYpx3hQ*jqfhw1>O9=1LE;~R_N0tMH~w`(8}O}UcRyaiyB7X3w!2~`4`jJH*Js_c*Z6$bK<~nJyA2cBQpl2B z?{|aDsb)j|A^cVP%#eRM_dl@IKl;qI;RJd4lX9&?`_T?VI*QDfroVgOs!;VDLt zo(d%|&LsYj;dMIggR_%&0B##VPH3NupSAJwxzf8xJ+54zKbmXysJVb1uYt)m!h<{V z{k7Q_-p;4dP0ZcoEF4Iet@QZ=QrE0^WcmDS!Y!!C1aeXQ_nXB?Z3(Pan5Q>UAL@GU z4uoTCkd1c38bz1^Tp0vK5uFI@Rg_7%3RXfIUJM~MW&@R9%MD{UefAq`ZTb)m_N`xU zr6=7ncZfs3*F<>=+R(b_FDujrE9@wDA@O;mQn+gIyLQNO==eUIk3^mM z?9J%?L`#cGCd^j!T$(2{F?Idy_{6I=(+gB=(wEQ9L+l-e{1jmQT~1HwRbhN|v?(Kp z_vt($k7KnClT{(y?`LIAZV&@s+RfU%M_rJ2lJVN~cevB$xSh8=T*iZZNd$AE8srO2 zg{$g1yuWvk&__HmIrUrSL{(d9vw5o@3bt%}=y_1m=u*PhtCoJ73JrfY2^N4fA0Jl^ zuxQ?=+#+9z!mavUQ&M?FjJkz#wdBZA%G34rHR&=E$g{PFAb&=1Q-C&Tsqh_ExwtwW zqFlY8i-$NNRUP)>xFwZ7&B#4w#GVj&yy;C+iFmf|ol6;ETPS-VsQ%9x+sw%RQEh9a zae|=&q1RsfrQzxH8!A4Z5{K4fIT#7>?ZF`VV2dnY%jqBTJkcT*RKD3JbK?5XY*;;K z{43RAzC5wj%eEr;r(~kk&icN}ZkCO#IuXbl;hPVf<3@8HV>`U_;+rM{yDRxtuKk8; z*|cf8yDcTFmXSrP^B*#{h}j0N9fm7yoZzDTzB`Az2bAc=ea-ZT&%?B9W@_W=bd1^P zVrCcrG+!4zTK`OxW83}i+pXQ>WiAF-SAg~bhdVXHVR!e@cw~K^MtqweyTvH;Ib{el z-;9lx{q)YC>>9v#?^hzbEwW1 zfL`%yfVUOSc<*I)rVpHOYf|j+l`9t&cmL4#iE6&u+f%~2n=IQOHBX*x=F~=jWDmtRo;Ys~rQx!nOn4De7gXl?9n%?VA4mj+R*C@e_UJ zeAvpaR&_e769QRF+r3*$vs_EB!e-d=w$7}aKl=5zcWMcM`EA@G9eQ@5$34xZcv)1+ z@RDxMVHE|GXrAo;kTOB+y(6``(XU`=NBX~=8^oP{-Z~e(?cHD2L#|Ktv1s`Nt#_|e zKR3H|j>COvVT!caR(qjs@2>xQvHyFiQ{FZKP z_FY#*8ub`EF@-ytcQ$B_;!i{K3p61%J35)!ROtUU`*5jytols{C%sg&&vuCR&xx_HN+^N=l^4Hpo{Iu-QmJoTciI_dhMMQWe-O3!S_Gxje##s1*{}s37v$;IPBi+ zfoi>Q3fE$$_J?pG!JX;qJ9h zdX2SCk^EcDQ}n_8y596I!Kux_XrVe&IYFsVj zanmGb!$??aZX6I>?z6Ic)kn3_1L;Sjhcf%`WN~B>EG@y3@nxD9XMirD@~*$#CBg>D zvj#VvZbL2kkuPH?{UM=nTS%k%YVG(yJZRO{?V2p%TJ^DHFV7mgJif?Tzhc``b;G;y z7~W&CSauGom8Fup>)GfoD|LFi>*#z}rvMODyguSptfFW3rSgD@?EF?-F@KeQ!SsPy zd(WO$Z?DT>hIi#!T7H#|pXOBwN+2`CcH+Uit}i7yZjL5N7bcDJRz{rpRNA(OpXYDW z?tZ@Qugcdida_tEl!D+ko%O>~4wdOO^pI*-S!_ zkInC%N9ONAo9-tEAKMRew7Pq<)oqRo0iK3pqr55O(TwemmzGk0vwDjT?f}UP0xhKRQB0JLnlUQ0%rTyzY`4(rDG4t3AL2uYX*A1Dx7A2 zNgcfKrx%*_;Rfr%Oo$08cU?8NR}Sla0l_hbs&}ZVoCT%PzY|haKcM$P z-I2n(ykUB^N3_VN0t$sp8~EIkKZH%ccfLAy9*q+OLy7oxwWObKi~Lb6NW`yjw%QK$ z8d0A_*9KFy#ARuT^g-Wcs9%3@c#tuS0zz_KuEmzg?NKX(H`*LByd8dTql1M!fk*%V z={HvDKp1UjMe=t!44o|wH>Mu%UZ>;PdW{#GbxBo9i{@6Y^O3ui(@pLfd381%h zbu`SLGQOHjc&>NeJ<*{Tb6$e~5Kv>-E7M2clUdGa4~RAgR{x{b>Gy-s1oR)Rm*U1H zjC#Sk$AmR~S!(k2yqw$+b13Kflzr`u4#(HuGP~{T7QJGS>^xL$JO= z&7HfE6rY04K0oP%-f#OZq(a-(e0$UzvFqBUT1TEQoXs+R(AjOG!gR=dQDFmV(9No@i8zV|D)B{aY9pR4s+IlT zg=LN&iS0D%6CkKsxUQGIK^;Ts?RzPk6$ThwS9FR9{b^wS+f}1fdvWhsZ!J-+yrZ&KkzP zANS+k0xbcYw(Jzle4+KmA2QF(C3<{%tTs_g90K95vnVj%f>rl{v~CN@s~=r zP0suG-8e3UdCh4z)n04#gO-A3OY*>2miLz~$~&ENxAP)?J8@$iT1`!dL0^L0D_`2P zyIK`xFS18?J1sFlO8=C2a#}@AqOR~!An{8pbec!(`6%e(dE1sJH+=QYhSy)$s6y=Y z2WmF@oB`Dv$fCgddoHuUK@B2M*g>&o%&v>K#5Qpnw2YBIIZ|wgsJ*9#?JMiSFIvZ& zbNe=oxZ~y3=xGy8|F_b9r|7DmhF7WthaVHPEMnr7%qZ(9HRs(jTF>zyy0d*KrP^1> z`2tPxL6(K~&q|ACNIgv%Xx)+)(_1G)ox94Ub>FUUw8OXh^Y-m%!7E<)L$GW}qRabD z(ogz*1k{*`xB$OVXm;DAiVhfy+8eC*y?bet}R>jqaB$ynV;3EoSODQQ0|odZ`OVJHqRR&c`2pF!20 zMe@JF_tWbdN1}DxIO@yS^q3A z+MG4$VvILk&%ZHJ%H2KcJWx3cBz_ZhGJRM<^y$Q{*0Z#50C#)p1Z~aXF2EKmANI&L z0-F@l6uSBR4bA=2AJRaqKyfGLH$;bsEL)2Q$2H#zjsB3@rY{qdl{0=&i86caD`9I< z55LaQtr-h`xQ67{>)QLUO3Q)M`P&PQ^WOG;VnOT(z(1}OWY1-#`U}&d@24$qGeG2B z$trz64CHh2p17^QN!l;)S1~Knhk>*oZ6;u2b@}WSWwJ14mmS<0 z@7QlwZ#lo^xzXEk-Kyks&RiZPnLgp-;lBSH0+YE}Buu?J?+lrVeZG%LuNxfdXKUZ_ zKazr}?RU3cq>5dBeMr4frcj*rC(YqwJYs29z&%}H##cq%U8Sws9tqtg>^UHy5J!$V z)u*Zek7oG9dEC- z7C|Fwk=(Cp1JLN|EZ4fdg~M&OM$^1DO!~byYt(X+!8>|(KjF*kqF@-aG#>1u5M~-Y z=i1^R{5HCUWp!zhSR|sIoWmLkf}sXL9%@tkNT^nD$fkMF@Tg>K}znX z3f*|&AQ%i9%$8-#rYBD2Bvn6h9dIL{5(PPk`*QXY`TtSJzB@A7jkRCYuFF2s5U;j_9vds0rnGG6mL zO2H3>zYqg!yn$L8NZch9S+G#Iax}lCKo83DjlLPyD{x+Bp^ysbUykrD<&jyuSFEI{(L#Wj1i ztkHb((2_20a3BWAzg^De-o0#Nbm!}?prqaf`Gsx}$MIetJtq4fDu3smE`?*id5ccI zcop*@an%RtxkNacn4cvGjxKw>^V%8pM)?r|Ohw4q7qs*eTfv=_nS1XKc`|HIqviU#!Uoy*l;2M0)u;DrL(9XS*;%LU^bzl= z2@IP|*KR4p~xO^vVPl51*Yq6}INil>4au%+9SY zvGQX~_K`4#EwyfuQ+Et*Vp{$77B|0_G zl+`;p(8lQ$q~l_ghdsJrd$EiV5LGfzbqAx=TnXgp1`2_xm1Ueb)N?kshsWz1Q_jEd zb+}f~X!&c~xiEt4%J=}h*!E_E!~V8*S&qxZR|$VA`}lMS!a%la(O)LG@!Z}=Enx&4 zAsy|!_KU^3tCtn@yAyeM*qjWKZ`u{1*&H7{%%;hszx}e(#U=&uROt6&WXbMce<@_i zUVcqs$^pkEkM3&k(I#X_prccpf6pZLtH~}JH-vZ3*gU1?gu&-TvBW`i^RPFvcUOetku&%e{n{ALZ2W=fb%3<9eF0PE`lkaCU zb1sX}CV=v%YQ^&b_mzmPtScrWen7I&*IAI#-w9?JdqAHv3{)zHFM1sFp zRp+|BMp;geTBK1>4>nO@sG?|dJi9q#hBl(DZ0H-4Y1O1}IK*6DwIt219N8UFfUqg0 zzhfn;rg^imzq|)9ySK&rvHFJ$H_dLu)G_j#@8YwgWk>wnh^U4efZL5qjlwgi(%loZ z@?6o9xGlQqm)TzV`bj_Oep%(go#fOcnL$vp$zcI(HV1J^1v}2SZ>7IcClUW@PjgP_Ht1#9?^R$~pBgpn0ptPr zVmeT+XXD-c+zwcXs|Rq+ZXpsz_TN*vXHEX?cX7ZYshqack>Hm;y!i$e`2-N8CAPCa z?{0)Vfqgn}cUFA#+RgB2jTWr(c>}{TSM*%sYC}=nfr;Jiekn*n*B(5GVQ z!|{{jkGQQ;fi)|Q;O);w2(8;@tA)ci>fD; z?_wd~b^C!#cFpkMmZ&D&;Uzd&YD-|prH_R0Z|P~o+JPNkZCmt5KIpdX35xSbpyIV%EoT2~i%acqZNqPut0Jk&^g5~ZR0E{l42h9UM3 z5$;i=j>QQ)O%5OI6eS1XP3-sJhuqml@kYz-_VC;qwCdxoltt51dKI&9Op&d*f@7tb z9U568@jam&OZ~g@Hr}g7=UpI_FUe3{Ix*?q*WIPg|{{acYla z<-{HDdD#($>n8BKp9B|2OWXCRx2P~+xjx)wcp^dS^}18o*Gy~sY4p6A8qu!%UgS6H|utH=g-js znW7W5m%cdRkY0C%fL!8pHEE6a9weqrQ79F9;Mibeva?q<+Tt@C6g)Q6XU8fMTSJ3u zsKaNHXW4E}r_)Web@%PIH&aPtw5{{P^3+&#e|+QJt+v&UtDtjwYK4q;C4hcE8F!VQ za#G34YJT11t!P{0P-8q{TWGVe*J>?~)#mgvZj8POn8nBT1@Dr_Me=OUHrL&z=p;^K z>vw14W9bF3z_p6Fv2o>pjX`z(d_!eQeTn(0=ME39ex5gK$!=tqyC%Ha4%f$P0T9orz$j3lf#Y?n@4f0Lo?q(cdgIP7f=>6|pMN9JV$0*vXp}xLL;fg9 z=w$yAy%PJ6pC>im%1d zUdT&pc(AyBZb*HSZI>r(_FbI6!$7`WcyjC9N68*m#X=K?H3q`46f7(WworT3yC0}> zNI$TkQl3xm@lD@0inglGxldVqkegH!hofr)n;@0JJV0lcWZXgfPaLtIHvpMQz4^Hj zPCDl|&o;j*2(nA3_2X(4aZ6P=y6{Set_LqUy<=>5{5x^oBgQre!-eD>~oFZ_l zm}4?A04KL2i&w|}OSmOG$HZZtkJg{n zEdjZ-wZUt1x63Rg@QX4b;G zeJI5T0$2Kev_Ir^?k)MjeGnB~#jk;9^C>%5XW1G&=p+5!_{4%49u9qLs$HQ~SetFO z!lZG`@!l5frJW=y%bjZ~>^zelK%o=up!)B(0P%5nlk_KHR9%fM=%Pf_H*L+BYwgtU zwvvnas0{mudXmLv?e!h%Y%9Y2R>?+}3&5V2K9)^Z{4s<&!JMU{dZ^QLYUv8?sxZvT z`Ve?v`Rn+i2NyxQ)$h?#u5Pw}2vYoG4@71|3OYMijxRG^aWMKSHP&PP9oMQ-*8Fvp z<=b&vNgj$gw9otBRLhaFlZCFQe6ZzCVVYVEd>v2JO^v8~p_ab*6NSTm-fc89rtlY1 znLASZ0U-t!)ws>bwOQ@Kt$c}%7dYGS&aOlDf%%@)@beD}o@OSMit1#>IXuwPi7pPh z&7@0|wxMf>!81=Qc&V67N0OzOCR(`8+FRAN;qk? ztGuv@L6(g9q-h3?ywij*V<4NoYznI89SaqXxx1*~Jm{^kUq31LC$E-^SNpb1L%M99 zI;0r`tKzOc~#p6&PHTDJ?(?BRlVX<47_ia%72g0=PDAcVbHi! z8(nw<5Ba@)9h;HLVA!MghXlG+g1QanxUYlVR?Pb?Mu4u5?_cN^(3*S1D)uL0#$S3S6uM7D6RVSMLcQk=@$@jMJ+6z zDBoZAciEy&a=T@o`t>lXhc)wu4vFqdIO|O?!XwoneiLMWOL#B#0Qk3(lT|k!a zTl&IZRQWJ1I+Zc{^ZP#C&mNrMoYbmiVHU& z<;?LO9G9W~uuY$jVqq4XL8c^SQtdEt-8v^V)*}-T`Bulk-|+fA6G&Ri=&79_aeXc6 zJxk4&SOf*hMY4Aa*-L~4RerQ90k;yQ66BB%QR@$xux1mNdkb`*Bv9BZ5XE;LsfQYS zjumB^8r#!Ud%@gghbznRuClT^k2P6a1I=^i{m}qDMndu*Soh|I^#>LzXh;{uq@TX6?YalQVqL}$yb&> zz=Ej)+SOzWs#?v9SeszDFnQrrZ~tzdy~>J6?v7lyKz|ryBNVQZN%oCkukRc5tj{|Nod9xInG5xc@BkUBf?Vo)l@H=h#i_$|DPnYr2Z$Ytvpf=}-Jelr%I zwy5P=gL;#yTA6cv3+{M5(y5K%&atp1KXp>CK)2c@9x%V4L)Q>b^aw#{O_CT$}?^9t(;^mt8_w$ES1Vm|mv!g~v=iy~^ znUmknu(zh*#vei-HqU);#TYd`V=mJQ?9T@BR@iAhb2V1Rzz4d=wNJ3B!10e?7#gUy z?adjC#_V$Cx<1(=Uv9&BF(Dt}c>gykM{}>$symzCIkV}hCk?EBEA4~FVH>yT?T(?& zhcri&2DhyQnOo!7!MWc!e!rkBgmSmd_pd3O*=N3iT?{*6u+wVyNvS>OMn+F+sO2G` zPf79SuL+;LO>4sGMnC)1t5sw&)0K>aT>ybw6ruchqT_eRx6{|46fI!=y4uQw8DYbW zBSx&f-f|YJX4B6(@1he>h>R3J?7h;!{S75TuVaQ67+$}PXR%G(<<@>}P6O`WYFk$C zK%I~kKa*W0MbqcY<5Ea`53e)pk{0df#isL$f|GreQms$Y9FJKvkiZ2CFk zc3;`8;N*;Y4LT>H8T^4$8QEs?(b9m5$Dx!+C5?fGp7U_XjMNiE)?sM zJ6;jiXF*)@upi97=Rc&rURZ%LX}t#839!bwH@XJWxw-hHVG?)E6yo2|eYERFX98|} zmMlt9MmWG+DQ&?~D;{B<)z=t$ z6OX1?4%3xsr#9^;G9wF z4=E$r@;z`knV`!<1q3J~O{L~3oGt3Uhf?MC&`q-P;k)XgU(9jsp~ttyCd~_%Je#EM zX2*$VASM#*JOzm6N6q)GP4LY2*|Z z@=%*v)MIK1e~5kdeICLM`bh3(L9PDh`9ehja_PKCO9fCaopocIESz5WId^8kft;Qw4K>qgzVC_>811iS zsc71vDe3LYkri=-zjqg2(w8fTU&ntQbDLIirWxNxo2v&T+JvK2ZaY+Ld)MR{><`JC zQ_J6Yu!L9aN_Pc3KGsYsWC3atlvb*2$g+M8=rwJu>HVNBj~*ZRG$}+l9laQ(S6#O2 zqbpwP5AxYd)?#jooDWkP_LD$UC3ujlo!+(8%6Gk!epzg})${vCWC@O2{-?KC|8O-8K_&PJr zHtf#kVxSZ`=6{E057*tS(QLsUwM#C|8ir6VvSm{0%qJCU@h-*gjvvTf9GP?pjlHP^ zxP{nZ`TU!^04$vjbqAW(I(lc;ftGOQj11wd#m_4L6DCiqu-Dm4Cw@G4zfaU6dL(2i zb$=$85azb=^6QB?KVIni?|g&FTXk-2TJq=|DMy^E0Mlok_?^S5QoTX5dsj_}-p_FO z4%kgw#|h{*+{Z&4{C>Y;l(BA<6b-EmLf&t*mos!9#Y?I#_Z#i44j(rw3J}Z4f@%E9 zO$D4#Cp0bR*eZsh>08SyDB0&du>vbI_Da&G=J~1BHE0#N9QHzcUH;dZ;`j@g;bGuEue7jyx_fsY8Q`rnWU{_HE zoGvq{Z)Wh4&U5G7f!6D-QiI>}>LyQkelW)KqXqb#0|ZpiL;brFTKtylHhSh@<3Hp~tdS}7I4*GzeYip@X2@cbIV z;?l`6SDbL+D;eFerqO;8rY`$TqkZk)q9KMKcKdX&zs4(f&xD=}s-?$OSZc4wBQm+s z7^A^B?o=w&b*!Of2b2p(z5uONr+gw?Yw#)@^#_k(GA|#q`;z9+Osqz_3vMZt5q?)?ZHB$=^stS{IgdC@E!o zaHxcZU~oY5S`<{t*f=M>?-Tg_JDi09)CC(kMsM?IAA{4j`>rw9ia`M^zQ6+ zj$VyEl04hiO81%N9uAP>Xe|hbS|}Ijaoe=W%~Dx~@7_gI&?1!d;Q+hl!dIw*jcpsA zz3?K(WN|g|^!RuOI<7iDqbHBHO>`jR?`qBHz)jK+X?~`#>K)w=NP^sg^dQdH+taW< zY!BM+kr|Agseakj_2Ny@uF$9PnrQ2iFi{?DvX=Zi=Uo;MsG&D5yKD5Fb~1HBvlm>m z>DSD-_OVTr+`e9I9wC)h`QgLBLTJzi@ouiy$VQmqX8(YDQ|gFg{W{1y0Ox2bV0Qw_4NszRO` z?DW{gn@kUVs8Aq1&4D|JGW`KYK5gN45kY7VtjF0KHpn@f@j1tr!4gr- zWF_xt@^dFK(*fa z9uoOo<862rv$H%^7Q|rl?X)F$3W>-s@;gl&fVzK3X>krsU}o>J_g3#eikMe=YZ-qn zg4xcvUpmPlsj79XuA=(Qn!dd>={6HWH2h(W*`5cNXgOm+IPRBC3s9Wxwj%cygO?++ zl&J}~eOhpF`tN)(6RQVLv)P0y<=ug_{e86#+=DkSZA!0y9M^3RUEH9Un$w?F4 z9NQD_=sK$?`-(+v&lNR;^1BkhT3{qyq3*7iOwQ-o^xCzsKt=K8Z)#oq2Zxiv`ZjV= zN7?QOV!CV`N=QJ8h;zQn->g?uW&dM{I@lk*3>dw-w;@^DC|;u^YB;bGlGTmhc=Q4s z96xL(4X!ruI_^PVx4oM~4p}#-Y;?q+r{wA>OqMTNW!qgZB&6ZcE=VyG!Z|~4i@QJA zDe#NJ!*KiK)5_dgoGX@nVSl^Y(x~>~X)EdAu@0RsPFU~Wq(-Ta{m0RnE*#56VfYB1 zgD^xykp?M>l6k6>N|Ow!Xu$b@z29#?w!PO{_quLr?b_MdjC0k~o|5&v+~N6!f_q5@ z=fZk-9z5+;IM>9w<#N3^+R9;ZtuY<#}PPv1dLS7%1bUu-myOffx6NGqt zx;d3}r1I=WIUT0@yUm0-0K)2i`JFtvSq%}IUY64D`v9a)?h5X-R6Osl45Bz&n=Zc59B0x0`6JHzk4|Bp3B@6OGuJ!5wT-uf}u>-h3{sJ)dBn3S=)%a?v%zQ z^z{jb-zx9i=cOLlkk8(`*1kYZQfl<5N*L~k+SmQg4-WOMj$VJj>jD*$u57wreRXB; zLm+an{nB9f&GWDfjj-vDb}WgN)TlnIzQfiM&Dg5=Xl$-RCwJKPyvNA0e8bJk!QED< za1cqC0g#kO;x#9+xgcl^{ReQrO+rM*oPjHo?O`q6ZwEXNqGa@Gr%*Lp&E3^Ifr#no zK#P~>B?99t568Wy(%&w1Y~I!$=W#07=6$?Omu+|knM!I_l0i^0)f&I4j|b0x6LdS? z#Rbp1YeR3YhSoht%;)7Pg>z=k`l3l4kZ=FpgsnbMV3!(~xAR?F6JA*FbR%(25c?i- z?JBhM*7vOh5J2_xP#W9nn`ev$ z$2Ghz`Ugx#zbfM#LO~iz9{VB}Ua!+q9xvF$^UY!NKu6-{K=*p1DjtaymY*qO_t@+% z*y^|6s|0ssF?yA)MLoVxyn*!D5?eriQc*8dLHJPW)3o0$qR*VuDokOV^Ma50tnwg? z-iu&*R%L^ygYxuFthHgsOQ$D(Q>HsxcyKqrJ)+~F?c3Dpo)VUMail+}-t~w4JeWlI zEqqH$aVATe9-7nld3-ABrAHs;_2y9+m!JX`g%z9KMq{8nPEYN|H_=xm1;Q5t$^!z{ zb3UEX?wt!Bzi3|9%$0hxLrYj1CswqxOH*0Dge+3gip5Sh09in$zpdl@AQWG|R>=xd zB32z@|FF{U_#Kyzl_2(;Kg3xmC3W0e_GZpLcbH!YQu)f8`R^KsIdrExpo;y8z z+1N$c$bJQVsk*GKgl999A#5#^&*{}9vFqd)81Fye5JD3Hf|mG1%3W<&zF7-gG8Q}J7B=e1g-rEJZ<%V$o4OUNocrQb_o6oMQ5Ry} z#~uN5I%qVilD{q3@}<{lFrwq~k98FZom-$=A+CM57t5=>=Z){tPN@cIycg|9Yp$yr z%6~CujmZHY7;*ru20dIac+8@t6JirgzPKH#??dx29DFz8hXLdo`_L`R~*I{kzF% zTG_GUxjSm)_fN|VSWU&C0w>k1+w+Hjl~wZb>mxsZPG5)WXhKYpZuOb>NDUL$RP@5v z*Wi;Ri*th~gX1X1V=mrRR?ur%@h8>kXh{|XJ57&kbyD|DoOD}=c$yBrpW)A6;nIbp z@ndx&{93%#i0ZG}?6s~gMQ+`C|Gs`{O@6k~rG?4oosU(`K@v8yQ`AC0Po(!uZPS0= z2N(3&twL?X z`#p}^>LtfuH+Zq3c)c@g&t6ab`-V*Iv`a-<$d9D;+L}+ESLWaCrIqhA4@dR=I~s9^ zKrb`nsRa0(O;@1~R^2Q+@8+c%Wsl9}fGHf-@8!^4(CFyc9-m((1@_OEFUVYuLpqxy z@oBK=ZMChU*9_fky=-oBYy1Iy7Uy4OWJ@X?@Zgqd0w-1Sm^oX0?Y&;yk9aaCoUb>! z6|Lh;=^bOz)P}xa37%=70fJ1}=cbV@`0pdIzIM}IlmZ_7kiejneo;XE^vhtapuRv3 zjrro;=MvTXB&VCim7-en`nY|;xi~1fyQ~Y~4W~UDLV?)aR=8_>;-pRLv7k2kr(Xzm zp5ro@-rSd8li57WpvKsVA3tW=UrU!Bye0}Sc7KRIjlF6~EwBTcjRybzL9qv*=(iha zj1s7jwgLC}nZJ9_VBI*E>=Bpzg4;90cp5aAKns<(e|x5mz7d6>Q?C57NVI1JD37$R zPxa=zKfq}FlD~kmYWeCjR#*O26mpZW^ZHus&zt6njvJq9eZN;G=k8dC-}xP?>Xv06 zl~s4)dH0dsb*EggBF;!>EEqhQ)G#oBl zf_?W|YMrnBS2&r#qYw}TH&td~h8g$XA^Q-zdxh@jzU8)d+qaWyHaKLjq;y%xwzH!#&bBCH`9}ZH3dC0hozoUT0E-$ebnnW9t^iMLzazf zb9ycv)aJL;b`Y(r9|ureQCd4O`Lq&--%Vy`k6p)Ep3#Gf#jP%;3(_aby;$X z5?G&t_pZL`k!0$zVBjQ+cJpRq7XMzbLYutKmryB8aSSb6J0;QDlc1{}qsSRM73c>h-|A%Ny(gbUsSE{u)3fGg{O4pbdKk-~3Ro&UBvXC9f6=gThL<(RcfXo0WHBN@dg2)qfnc z@jgc@RF$#ERUJ`l48eP0h>6PAOsjiyr?Lu57fw#aONU0Yg$xe!ZnCTqy%x=si*%{> zA8GhK%-hZFznQ~rPO2w_Bd4LDOdrTlg>BgAX3Q<8eaB~*={+Xsa423^^dq6R@VS>U z8+s`27i($BEZW!EUFIOFYy5g-*tOjC8ERZMBeK4~et#fx+BW?nE|~gb<8J^jgKIjO z;8f53eHyD*^Y*SOj1GLo!A%Xx%406!4Z)2)`)%v-{2>9&m5yowr+;e7GWS2{fxM^`5;%Y{LBYsl<`T@NmNY4&+;yS3_bw`y14 zRn={58uu~rHSaGUBeQgsY_{-+G|cv)L`f7lK)PtCe^lYc)~Hy3hrun#+m=L!Mf796 zrZ;9aN{NJ}uxl!>^+8#>x|+nuYRI)N75OXHwDa0;^>@32LbYvt5RQ0zHQVOw_!Z!j zmcJ9BS{<*knsPrYB?+4a{y{ztjRyTktaCHvqb46NhkYNHAK zHH)5Ejw*jZhXY5eIa^Un&wXfAZSB|n7T7yGSHuT<)zR_qW0~^?Io%92DlB~>DF&K7 zOC8NDLk+Ljbk{Dk&i%qyj0Fb3=ez|a2(@i}olL75$zJH%P{GONqo8aGfts(@BQ%dY z?bv#M+3=I!Er@3SaI^)S zsO~F|=SXGGn?Ze;Y@C_MgY2 zQIW)>7P#g3449v3b2r-GDpjj)8vY!;qN-ZgW2uVG`|&|^2GOC7H9U2w{hI^7S_zyn zaAm}#$H+<5wil&8+!d^%EL^nTwc)t~NxQ*j&_%~5xvcLAA-FQ{GxBiJyLcKA$!>F` z(>Jx6&mN`@+r!;R8QF0q2*~FM4wk61`serM(erK$6pj+KE5fciHzUXW<$V=CF<}+; zdQ5c^hK)m0cKB856SzU9m@|EA*^>UO($+JI%2YPM8u2>=GNGWIxqVo)cWP8J*Ydpk z+3f#-$T$uA-m?{HV{1p8XBOI<aaFbOt4&+Gc+wuIrnR;R0}vXJNq}K ztt2L1cDM!x%4Od`o#B(9Fmici3MCcpwQhzUwy%Hpi{V_SLD;O~Wb*(S*%9nR{s}5b zg&zY0bW}U1l5DLWy;^`6sy=gKfKqJ&U(H= zl_bpZ^RNlYqXBxHItHJTNh7lwxtxE&OQUV#DfY>(n&nkz_f`A!dk*K{=I;QD_Z18WB7B;g^-b&bB^gH_a=kyG z6z_*j;aM5K`|-T7u>dX=+L&tSzSM}qq;Dd=-!%?*;zvstVna2>p#f)ua1V zX+%{aPOa%A^V|(;XJ2I=9c+7C_+}c>Lf=;ZJxgi|!PEqQth^BMmFvjIw^>uwY_l(~ z`A2h^mkJUASBX7Ym+f~IGwon;8kep}o7i^2+MONf(rX$}(~Tc-qbV&zSj+iesD_|-Cs?$f4TQ_X@6_pdyPlNs7XKR zUqDqO{JE{+g9TR_wYihvfS*!6`!Ifp5X*FAeXjsVM87)<-x`}WGcU4reBsafA8@lQ zb3zPIeQvnI^cB7)a&`b4?@8ywgHvLN^x9gt|9EEH4;e-3$M2WHXT^T1_edvy5ktI+u)=V?xjyZTN$l zZ6yDS6qg6pp+g?Dr-^tOLeKD`O<4iz;R|R zoVQKLoneREW&^&`twRMa-q?A$nrF-W>t&D%JF?_ep;J%w2=*AVQ~LOW7cb@yt)?bxzJ;?e3aeB!)huF zpZm|hCnKH+lz5BkJvRZnDSi?RzLL)*o`~)jqMgY<;TzMR>1%ZimBT zk+awy9?q%KUUK29U93_D4T7=-ZKS7RTN|6B#`53w%8-@6zJA~+xeGDygaT8OAoTO( zwGG}Kjz8yv^QLcNcWAS$dUQt3XQ`U#2Fc~Exz_b8jcuK(v%=zGzE*hT!}1G_a(XvA zJU9hjQ?>dmBbiG`hSP|+%V~Mly9V|3y(9(xDB1vvn|nT^?&94M)hs@)Mn@C7_L~P^ z`C83usFCwUcx`qkv5aiI2T4kDOcZPx_Rf>am{_~&nBg|P$3uqO?#rkpLN)xxPo;}b zKYpM@boA_A`e2o%ta#Ep;L94tyy4mhj-=bX`vaOL+r;fPlE?h_`2l-%rOot-`2wZ- ze?V)DKC##`nl(xqEsb|r0*u()cD%)FFa&RYrL#Au^$v5&e&ZkH^xCB?*$jGUdHhwF z1Rx;0W%HSlIt zxtX9h@@0*vd*h7Qk6_+spYwZGzV72z*Nfh%P3`35BUgks)om=U{aC@%X=w`{($|oDeUrngN4{m4GdoO)d5Sg8UtRM z2VpsbL|(ua?sy`0m^He%R@kdFLp}7!)?c9>mpuUJEnhb{`*{PJK6rZ*_}%m=9UWTS z@?ftbsMG%b0dj0*S(~jzCX(uoGSoFDsdey@BBiqjh?z}-`ZPdtHI<_4pq>tasIt&Q3yAad3?Pt_t1LQHhKJLdl8%GZMVXMmKjwIezee^)H` zSDk3ICWrBI!pz@bGjh@WXaeS&c96+6a`B%fwuXworOw1ZSKWd6Rx6G{jB6Xybj48O@8Y}@D zF!#5ZVREajNo}U4rx9L0-dNFr>ihSss^G2O9f)W1^^~;FL9SQ13+AY8)_pTYN1pFy z&bHe^@6$B!_w$$Wokg_zge<;W^|MMB#e3>>4zlom5iXi7+s`_o0s52#)n=Vi?}kGJ zvsq0h%!B9yk~TSI!W?lgmlSr=VGaI;&q6KhLab=XpMS}|b1RpQFf@Z12~%{QCq9Y5Y)3-LR9Oj?TT)@bvyE`8RD@JR`@K*d->tq*h!#ZM2@ z>`z~=B!yaT+`sCP@&oMq0VUhKF&Ge z$$4#E=vOwmPe0CUV)!)3^$`RYpXT6mCs{#_n&fr36&Y&`kD3R1^s0T(1zn3?ZB&HD zrlfa=`J+Ob&lR}{RHppz8Q&b$=p4A8_ARY-DnelHQR}_f^{O=TYnMMqt!K3wwTN%K z(M0SG3M2fZ8?5%~`!rp6jVT=u$?{DM)W>{3BaKyxyG6^sq#JjCg=q2@SO3lG9OCL> zH+ntOx9I5J8oq3)aV3T=G;WIvXO9l&jrW&2z~9DFFvg?Z`v-DM2x$zT+3OrPpqg+G zeFDrzZvV0)(0b)*Om_e~BBA}a>ut6~k;w)>sFFg-2y$nJpNa8R+;#S;Th=b`aEFXP zfStA2!c{o(>Cw2>);#2qg7*_c61zd>+=NoF_ z7Fh7uYbHm1p`Gr^6Qf@78>d_+FIp#DSU^fvn$6Sw`7oAlFtwghMe=uS1u8b`if3p! zFA0Z*w*@8*W>*OOdW_22Sh`l1T|*mB#kjUSQ8kV63YT0 z+vQybgz+RWu7$GZVc#Bk~ZE z=WYDUO~ib?XV_x`?k1Oy#tLE^tJX_tJRLzJ9baGypAl=IeX0vmU8Vm3$y%7%I6<`W zNy0%plNU?E>$HL{xt-k8K;M&il1|@xzB{{3RZ zsO`iY;=$=UH7F)@S}Dh5^H@NOz3@c_FZ+Y?xILL>_H8rgz1+jZ$^E2ttpe-<@3!{i zd!@arYu1uurapZh)bn?jwAT4)PA$xNqe9qlrx`ZRqIx;rYtQVya)<_6KeSi#gFpK> z??OC`aHz*VRuc|JCZZdvAimr<>p*iCL7MC6>++guK;P9*o7f$5e!tba zd*hlLRs#m9><>`I4SqX6>-lv?#&X*)wX$+F?vFI=P3vTp<-lYN` z8Oa;Jkik9grQLaZuIWs_rrnlxmJXxQ?%zBPP%u4&L3uDi(p1$C|q;O{r3}qH+c6VdL?gHQz(+&SIi3vwrF;LP&;?d#y{r7IQ z6Q=OcH^zA-p!Dg^dWJPTJJl~pg?;pb=^+;RC+!-NGAai*P$#Be6@`cz+#3YmI~X6W zRRJpR))^G)A%xZws6MTcGJDw*DsQ0HfbX!6f|RTtE2_0k*N#B7oUO7w|D8SP4tlMY zYNdwq0m4EEcXfo%4Fyq_{CBF4C+qpC1+I5`T_Sl&4Ij)bu^+~L*m)H|%!p$Bjoye+a*&nhsv1iI_@xf50Od+b`^QR& zd3?CoX3cH#^>`YVQ_vYV@8M@gw5gd6Z%B3nyZM++5ah6@(dSsu*1`#*ds7Z z+GP4DOpj14ZU*Pd_V9a{(}Ah90T28G7I7;B-WPC?rSGrfSJq_z_ySj_a@XLhaLSmj zWd>?((jZUwku|nCcj#}(;IaYO6P-TR%{~5xS zI{g5j5-Ce#Y&cO`+vwKJ6zc213Je@8y!MSK^-lhR9kv(ZQAubeu({{2`{zgph=mx^PZ^e;QJopK%InB+7@ z45iqp(bEuN&ws#{Q1}_-mI8I+gikKq8}j|tZr4s2lB+#m8Pmxitn{S*Wx8`!c_?r0qjO(E*i<%V74SM~u?@M=Q zz}9yC<8ZiFxE6JpsY2qH)+}Bqzq(fEUGrln7pwI^?w3`vP9BR7Mf6S4Y=FTUy_O1W zMoviUrV{&cL!LTa{FDzm;fWPib~NuF?%B1n;L~i|1a>Wj7pp%~&~Gb_d&{NwH2(wG z>BgHM_sqd#`92}$&<7-s!4b0tyKR#_)}0NOHY?&QE}OkC>NHI|?RWR<$86ZWI6hrB zJ&9hV;g6z3-&DXi)W7v#y=^{P z=R4Q%!B)VAv3n6KKDqIepM|2&=`kEiN9j7aHDb1fAv%y=226flf1vJL>3+)n7)Qt8 z&h*dh{P4OL%HKg`WVmZ<&Yp(~Bfj;uwW+0aBtY0AjkF2hC~G`QADIo8Ft$Kp{`t(i zov`C#-Sg_eN>dvc)5Dfk0y@&{D#x_cdC-qU6l z%yi&AQ=XqaXJ%R7^UPv`T*eDi)n_jT3a;071>^6+SWjA``I>b>G@Q1-!uPpMI)}3G zc&E30=cc#a>^#5O!_?ml_(Co3x!MSw-c_ziP>0;X3=D?c+v^@G^5^K!Pv7z_^%yG- z+U^J;fZ7H|)UQ~(oIJX>IUIKL23W16N_IcsD{s}au-|W^4@S^;SB6DWAJ9Lwpm7(b zrt4XL%>N<>TkLFHUM_foM6y$Q zXx~PQY+;mSiLSh_;uW35T~laQ%1xUk@q#Yo^x1`gyJo5Us!DISHJ3N#%j9kX@bL+B zUZYRgtX?{%Clh%d|uu=3vftm%V@3EkLIUQOb$j8``ucfbjNb><4KqC zRl``nA@A&kP4dwrf?scfzP?oKLMYS-%h+;rbn-`*iLrX5YwMbOYOvV88Qu5{D-+s%?zL0? zGY;rqgUjX9Qp=L7@CQ6;hi~<#TM2vPPp$Uu9`Cd==h|8Bti0XKC)tN^=t!4F?00M~ zv1_Px_4iW~!_tr%WnhyY@hgB;#zG&s1jO4$E&i2tcDx>t1+cu5(XFV;A@WJ;Sn$-Y zj3KWrA*fKtW{&lS*-*R;VyH|NUJs+Eao=CgdunBR#vm$bovDs~Pi*;8gvr{!N8xK0 z3gxk$n%7mm{esI*Bf7R&X0v?p&L2?ua+&pf)C==5*su4jQ}VxCu5PA8>utc(N~~6> zth?xd^)r{KuQ>P)$a(j!GYvSU-Op;tBwAW|qb9$3^_NTO;c2p4kL#Yarm@OpIKQ_-x$}x2OOZVvVqx*nuf5~8qpzpC)4g|(PVIHR<$vhb z0K`WB119JxzGVO2Mo0K(4OV<($OxcO)*iL$N%QvIPiWS2GzJ+#QeMB9Y-~!zL-<-{ zvdV0b!y^QbRzH%|d2?anzqv`@mRWxjJfilNTNErV64%-09D}3HRV(Pi=?$yT=27F@ zYwuG!;cJa;f3ricNH;zoKARse8JvaLzSSKwgQiANh(o%PPHf>lETklWxQ%o7(u}qqH{0!}YvF>jReO&ei&J5M1d~u=wax z?hnZHXfO;a)%L@>O5@(bWbT8kE_5%S3YuS%$B;#y(!dg;FoTga#4FbT{&mJtVw+Kt&R>^W`SGA9X5_7$bGoeh zyIMU&GBQcR2F@v=_sG*GZ#^@qn!vharhSMWBxs+AmVo_gTPNEl4AVMLJjqQbf|H~b zNKkQmKAWC)e*l#cA%2N4;+3yvNBC%22D}*ey6-IBdvRJhu7RVOKdGn2{ramvt$DbSdeZ4-eGM|jVv)}JOHXf<*2yu)5fU=L!&+g55T^y6y zeBIyTf`_lgz2c80`;qi7S697?8#sm6BltF~p5+gj_m$GC`u*G`=zPT{r5-e%Z9kEm z+Iy`tT(^tNvFp})H-S#uXx}X|dB1~YuDrtZcgXk ze(JS5w0ejzvY?Lc)wgp4 zPwAe)TE6j?u1PJr+>ymmT-9%$pg--nMEC|1VYzOapyKY|_oY6&IIDat?0VZAgjcge zUGb-Finpz{aht5S^zj>G+tYem+bJn6rGdVZwtDnN}MW2B8d596!Zbt=~zU!QK-1=D-YOQ^fUz>@n)?%kmA+~||G zKD~ta;QH?wUxuJV;7Z${>l}>g`mp5D!MJ)Ebj-o4eQf^{w@0tm$H4yHNb`a;zbzim zK5AZ@C|DjH%4=)=w1JtAl*w{V$Zj3EIFmYeRm6%(-n<&jd(%Ilu5hzvtM$4*)>@HI zl-8_PrcEmTH$2T%DH9LqwlJQh9@@8udbPdC7l*DMt^$PJGi$tCyPat10KcUh@2-}c z5!HT@Vo#DY7Wo{9f$qZpZp^u5MBCo%r&DV8d9+kBzX->onUCb%+q9oINWX$RoTf8- zN8gC_=Ma>;&m5s;tCtEULP?{Z_1%^)Eaje`qtc)@tZnUdxz5$}57-gL zW4G3alLT7dakSo1zqdOWx+!<xyx@XOmPVBNTQ zUj-eU?B5o>H%(vtl}>)8WmiUY+(tSiv%fCi@qGK7{e;@`u8+Ry;JXUnY{a$lX*$kl z1@k#~J{=W(AG4KTU-nPugw(|=mBz#&wlw~ z#b)*Dlj;pNOY%1U%ql>_A9?M&+|;s$IbE>pAN}O*_RyW7g_Cx`uslBB>tDlKp6Xgn zY59eJsb|iky2*aO>E(1n;##)n#=zzX0LVNV)-M(J!6^ z3>Q_+5x$RvH@nx(#d1X8?|b}XHJ2H0)o0HGW<77QFX94kQ0e@Fz^evjUN+YTgF&da zx4V^xi~zaSczCU%@2T@FrDW&P4CEPCZ3F%7`1uRw%?c+!4&gTP#!L9TKd?u-zVBt= zDOye2E2E2cTEQYIse+4-cQ8i&zbp1R&*xElm+`&FcR5WsnJc?j`IMVdCz5o|tu zOKzWA$J~Au462Y(qWmae(ER`11oFFN^aVS8^8F^jb%I)>-WaUNh5<sZ;6;zOm>&vvyAWp`{l%&wVIK!` zLih5@Z+COVzF_I6D?Y#6r&}(Hy0e?X$svE$i`wU6Y97jn|)dOaCWR+;jtMBb}2*~ow>1sDl_9!bmW%rAXc(zH;T^%pgLeaRJZNA9bW8Y&b5I}U(9M~?z@d> zv%Os@re5{GYDG}{b7Sw2$0o4?deEfYoGfHr`DOB`ja>(Mh%8Fa%J%JZP`^w6yE6qU zC=!y(8h$i8W%@#>ov_OKqkj)Qt2 z>as^@80_4!89$qeW9-;HeV{>k^fl$}O{*L9xh^6aI9tpc=tJx^P6Ok+9{z2CB!P5+D`WmZW`q0QRpGoS&%G$Vvum@M`h}=(qQrSlYz+4fgFcJle{Vq%&9# zya*kz)%)ud_XK?=ghjpRv&i0fZF{#`PR~L%*in4s_sq2h-eHhKN~h7WN~KL$$@$r9 zls;cL|BTyX4}@A*&K)1pGWPQqSLq<%Gx|GAq?a{3%4Rg3eGcs9`q4w>4=@)tH$X=* z-pk}`w@-)Oz~^V#2V9x$jZ&Om?WZFB9{u`wwh}|T;Ag^*R-9NeXNt*U>}Det2XVap zd00X#OT>h{{uXejzRXU3M9-d$xHvIQ9?J#%mzr z;?AAPd@QP^bM&juW;#g}(Z`E*H zuw}hFCx^|&d{M!D2fVO4Pj2~?X^)u&{c^i@?Op3$cZoRpAejor{L&R=Z2w$}!;4CVHQ;h2mo~_t!qEM_u?4C-n2M6-~L^Q z7Vpuo6jSwDwz0?I@}4d$&&^ftTx(M5Nd6=(oz}Nps*dXF7Uf zHsGO2-nO{wFaH399;~LX-qHlft&E`T=z~Dad00aQp$t_A?g7CUZ2qcM2@ZJzZXkT> zW}oqiuCZtzPYwqzXZE|LwU%w@d4RaJXO+s-b5AL+QF84n6Ns(Mi?{&gT77-r%saK< zAfCAK3cc(-2<%K}CKznnWH!3!f8~0RHuD+ zMB)6Ix7mi#YopspS~eN3YrU@Im+JKT$Za_(jP#XR*ekB5lGSlL38vzt3R0yJ-~7K< zZf|`9R;IKwu7wu9tG}e>xN+%*>z8kfUh8HI;ULxaVg36mSAJ3A=v!#n6(@*zIoUWQ zy_*O;>JUP8Hm+(;+TFF*Z7^B%LZJWJ)oL}?_ycg9)7J~sKHw7uewdTiI~)YkK2K}> zt^ABcnil1K>`TsVhmv(~N8NnM{LOA9i$;&phdWUwVjr%4J!5VYS$Qc(c~@@+mCbj7 zW1cb}$=Bcycq3D^W_RvO?|NYVjeB_gh~4VbV6>1R0e>(2{EAaYJ!$KH7nXi2`&^s-GI%0mkvVa3^z`>1SLfEQoY%$SPq01& zk?caD9a2g=M5LmWP)X7D`~Q31!}p}a=C#(C<2Ua6>Y8)H+gkQq1{`dwWU6RWDCW_6 zUjd^})*HV^tynWf`qW)4H$mq+sxlk$ISpr_vOk?#xf}3clpohUu(uoCdXMwwD;$HX z-%3=0tt4vs-E(5|l>EUvaRB7HvE}_L*DQkoQH&H*t0!>=Zf2-rD&*PieI|v$k~5 zxqe0<;|`Dsf%J2Y;2rn5wzjV~QAV+9a5{)J;DK$cyFa)zMS4i7XCP_6?@e2|mIL97 zK-b9~%**zp8l86O0{u>N8F7{&VHIQJB@e1j_fQ%($jSFaJ#yo6Stk{RNS?2j$)u&H z_(j|<+O0YcBd0;_x06pDvvv2Z{&l11mH?{Ek-AUW(2Vax=Xg4`G^fusbFIjnRwRgx(?Il&Xjv&)sa5{E5l{37u2Q2XN*e8i0KJz zbJCgSi~Y%O+&lkH3u5Fd>x~ZI6Eg)Nc+|swT8B>k9+` zagZ}VIr>CG(CVx-6FPuxCWXtM`v(VXxH2}u`MOXbxRY#?Ba=)IS7fExHGaav2t;O? zbG4W8vVltwHSAdwan_W+QG!Ie; zzKv+5VA&K>Z}tMqSjX|RkuZJ)BE8*7PA|Q9Ke})hbd}CitKF_POxf6qck*yNv;^XK zohhGe53rM={?NUw{tM4elQzf8c|+L4lr!|{_G6?OL3y)^);Hg6efLd#p3No+P%Uq? zmq}4jem!!(zh#%ruX#U_w9~0CL6`1P*aY2_7+or-!=O~{o2v^S-0T5dS&0Y>zHeDM zY`nLZW;UZeY)wW_{R|kA>Uh}}WN|f{#r+JH^)=BYOg|oK0(K6OmV@#}= zZ=>wQ)vT4jmr1+>Ybz@3DfDJto0T+xd%?%?_hiAB5AEQewtEGuQYciBC*V;m$vpP zzI(Uy8qgP6=5ZR`FYtWvdRYq4-|?hA{gB!pTr1n?_p~bW_#TIX^^6I*b}3Jy3V9g# z{*H%+bKl&kB~~GpEHofN=ltEJr&;60qAGE~qOzKqhxR(@y!<>aslx@kf0kdCSf7rM zIr7WYK=@_y@;k4e7w0roZvFPSLR`)>a1za$eLE-h@RU=ZaUeydj`oG*#?x(Oyq%jj z{?f%8txA&DgeH%vv&o!Ie5Gy5{Ne?ES`^*Nq5;pewv*fA{s*%;eHkJPK1i2qB(bh( z>!pjO6_N*S{Z-!GX3>ZMmf~>s*}v}eMbbH`rQQ2ln(7D{eLBlERcBw3si+gYF{PRf zq%<+PBs@3(%AOasYiG3jgF$?iD^2d9_%2mS8++^WB^s}~I;l;io1-fDXm}4!#ks#K zUz#_0@X?2r!|332U50W|vrf;%X?b(i$dt(r<=x~)t; z!`!+C+jnwq9L$q?^sP!l-LtJF=SE ziead3)k;PwpEcB636itp`Kt=JT53N5_J!v0Ub*%$?!1^Y54R1L#sNC2RPs~m6>gQK zL;QcgzEN%43-()lC|VGm*!)-;Rp$6(fIL{0_4yD{pM0ApLi6| zA4dFKo+}TJt36LcMw_fFV?uc$xRCfmtkwr5XIvDB@*3v#%J@VzqAe%d*ys&rp|`@Q z_i@)8>Xd!CB!T_g$#=OK=8x9d+J_5PXzxFrl)lE(_lr~@8ng1%@6bhQZ`OE#NLgHzRz+hDnM-G*=?hUPP40ROST&2!vf~BA^M5; zu17$8f{!Bf6F@~Uz!B$0KR1;h^*ta`(e$HLVthG57PDE-mIma7xX?J;kWbSS>@nx& z>%H^TKRhsi(rK8KY z$1i_*ZUkv;3XOUgC*?1x^2NKonh_SCsO@y;C$*p~n!*Ud@ zKS&!Le*!g%-}}*ks}%Th=5aSZ4}V*jiEm{Y+7}6YZ*CrZ@yq1c7M&LRTyOezeNJsT z7r3sZ+$P|uJk!4mXrc20TiJeKtX58Z^f7U4As(E9vw_FSH$xrkj za?uZF+J**c6!cGXs&cWhAHj~6S*+0+8O&;JOd12r8eU`7&8TtoC+1>QbsH6ZY&FKp zy**w08gm5R>fG#f*OhnbDuWiOF6i!=!WZfMz4*}u%aa`pO9lgKF`e_uP%QnX7?T1Y zZ3H358|>Qw7SMKZf2fmJ zT7#$jx-$917p*)hS2G>ZFCw46S` z`M&#UhV%*OX>k^#g%7-41z@3T3VH0@Z9&_~w5_M?!E--zWCK?o=_`d#J+JC5uo)`i zCR;1iA1UpocXV0VyYhB3TiMms`I^REeP_%U$SQ9^&wbl=z_yBK_ByiAO)2btxuDw@ zJ5Xf;D99$JzQB<((9$w&- z*aFyF=-oa4Lci3m_w$z;VAdx?(;QXk+{>=feaMa`W0ASK&wgGTy{i+NCveI=^*5Vp zaLH}|$fkZzcut+L16prSro?CnNPA`L#dsWH+Jxz7jjTO>Zug#R-P4!%2jkufiE@86 zy*^4yI~Dn2{Sk2BJZk~jWluqJ?ER2 z{s$Xd`N?j({GuZIn;2C3ZRUNMH6)Do^+OfyN#NE&D&^s|o8$MBIp1FM_GvlgKC&)R zdg2TA=2+QYMmgGOb&n}>IhupsM3M}h);`cI%^HjHA572sj^udL1K+?ZY_Q~2s z@zLaOw%ufL?cLsk^E8MafAHjWq<+48X^bsksH=jxqO{}p=jx@o>FnXxXFD6=M{k?G z#(IZsgbh`@;@)e`#3+Au-Aj{A7 z&T+CZ)TO&-_TK}hM8FxiQmE+m7GZ5JbK5b5o=0NJW7i7>^=!AlE+fb)a=hK8H6gcg zIzG`?Fzise!x29C+b!7E&0i}UQjf&v^9NgRX#LA9-jp@F2&UEdp|PI^p9szehyw@h zFhoigJ6hyh^#msIvNTs5H|VD$G8oNH$P}KUhML|3-ZXxkS30oyLCpf1?}Yc00x-wA zOEZ5k^>`2IV^AM+^RFr&kBebzY&NWU2tJ)WvnOcMF4_^7BpX7r(%q{f}WAHJrxYz3U&0I?euixRSiK6STj5mRzXtZZ- zb1Yt&dDy1F@7-JW?@lh{&#p&0`#nLvRq_4I@9Ps4uVrM{opHNLS(^9$U}TJ}NoR2- zlEJ+Q8F94k3EO2F-Ln+qv#wAJZX#~C1G8}eL%@^8T0atZk=h@>FLdm+yi!?Z4;KaeU?gY52HbBIN8~yKCEAu8#ZG zS@7q`O-2Ii!MsFe4otY>1B@U13hxXm*IuJkjoyE7xn3fU;OUu9tzaH(T_CP? z{glo{lA!oBI6iwu+FG2nmD$B>332}x+Pr2VArKO>J(&talTep3ENA58Tqs9Qz*H2x`VTUb0mhw?qdCz-zZnAMIeju z9>$rlr0>39djdR3T?)s&{h4^o&kd_2G@8jfLfRz_9L`L3Y?h%iY2ME5?rc6%m#f$F zb++%o2i{CKQpTL3g0i93kLJGAzgNqtS@XRHpTbdkgxiI}Y1r{%`(vgieD*jDm4=7B z;!wj=uOi%VX=p&;ib8V(tXDPw@b@ob%fw_h6!qEa<}O!}&WJCm+pPXz_UP9nr4%cwp;pJw z_PZCt_``VB{gMhZS9J2ClChd@0NkYVZhtS`f$CfNnZ=vzWtWZ8y29e5<)xd=pf7p~ zNJO3Hz$LNuey(?)=+NYj`Mf1wJ6yRGls>OR?ec8=YVD0mXSWWzJ-n^3)*!9Yk6W0X z`>!Uj>Uz!Hxx!fg?zLW9;o~`auC#-xx2SwwE!_5jBWkc+dV+M_Sxt0ifA#vKdYlW7 zlMZ-?`)t&L2p+k*GL#=P!k)I?^ZEW$dkAEy$64vTnJ7C`rf)eD3#~ucD>ZKVrVc>S z+HQ9E>{9dKX6`^U?*>WRfxxQ7o{#ffXDAo+Do`T$kk4B#>cEqJ!+eUur zu|3^N{1Jh)WdcNeXM4YDrDu!ph=1_0`z;8J-L7oE^-0=q8gOYixvM4btJRTLl>K{^*CBIwN0fi`gyi@+utv z!RTbcwqLOLNjcx(4zRp7Jq!Z(X7}SA!s}0H@KOUFJPBMJ#(jdRJF`+tb@Eo%tV{5^ zY}SS(4JM~jEy7OWL2ktpVhLE-8IX#<$kWVQ}~tH`#t z$QC>Gb_~7Q`aYXe;U$kxpQ9Y*aD^^or7gXrKmDfLJiq8!uY9~m5Iij;V?A$_!FzRu zN+&KPIb(3U3lNLTCQzslzE{2KV9afP+^L_vLn@sD9nQ?A8tTVr*p+UcR_3`5KB-C0P?bb+M zZaVdbe-BB!_STZL(AEpLR>vTC(sK>0K8XBFK)^=y8<5B5uJ&n`hy8E0g`#6iy z``MEZ)8yQ#3sINtp0M%>J8?y0GCYt#?>9wc_*h$AA(YuEOa4JH2>hWa*60`%dKKqhiSyu+6(|%O8i8@_hMRs zSWOVQLv-#OVV$$u+{d2`N<1=gv^wCQT!*bx^$Me%%bV3#c-$5-x>*i5fRIe>at}nb z5Zl48_ZMdt@03+(tIS|dRY=f5YyfH7O1&fAgh;dBiZ)b*t%!=ZY<|Kg0t}UnEwm#$ zDNva*&OAAD8L`b&e%Nu+pt9Y(ze#}aS-hnd>3ZT!evZ7hgVt`t^$;dyCqyFA273gV zF*ry&jgi1B`97$3H!L)u7IoqLwgK&iNBrJ{*V(YTnhSlOfSDrrX5Xrjy(jc#`&fw? znd?JY)6*wId!5}MtfI&1ojt%EF~EniHK~iCJmzN=on_X(kFX;>nw;P-Dl`rwE)uD1 zu}u&tn#>11yjIepM))+u)_%Tn)``jPMpA$2BfkP(k>Je^Ch~L9NdKJ{6zfgWIb5C? z_!bf#^Iugnohk2OIII>GgWT>XodgcJ&AwNswV=)0AK7UJr-4%m(Wgrp+OzZJ;p5#+ z+HLw-7k+KM2W#E(@qvYeB1Pf9SD1GX&xDFEeDZWY)b>iH`C#@$!FbajCGHUaF&NQ% ze5I6R1r1`*-7Sf(RISfAe6=P^YCH)K^D=WDv}BRM*ZPKfKKw&=o;OR+2JzOK*Z5~i z>IqelQr4u7wR6v9_FfCyA-VaP?X0;U-Mvliy?UADBv_O@<{3UGyR+UmhmX$grW6Q= zpnI?!zexnz_aC?P<7E2D2cymWW^g)vSMI_j=Ke9vnC_hn^+sdoLu&kTjJMMdB!(o< zDso?;;h8dCe%ZDYkj?qgxto2=Z_UqPq(saKQ7<|0F|j25^hICH;d#?Yy`nZ>#r&vS zNR8c)u2lcvDVsLicd*PMryaYRJ_TD?j?W7g9?oVq;BT(;=vsR`zLHpX@$NjHT|5r+ zdMYgE^*)Z}y&7Y{9iKRQ*3u>J%L$<|%t)|0H%W*@(&o?D&-XO}1lG0JyB3Vcmtwe; zU!5zh-h!_DzV$8j1&lwUi(nRuJkMlf%NZm1R$ECkTbiGiNvQXY&!+V1>*pDBZLT)u zy~IY}QUmu5wV6M>OKEZZCI4_*0`_^iY0J`yZA0FyKUpB@88$)YIewc_wj3T*d_UN} z0LnkLmd&OIQfDdmog6tFsz_t+`n&PGRT(Px@O3C#?b5*km){1aC$+(HV+Yv%4<2|9 zbiX<3!g`RHZ5GKnZec?|4-6Xz_%{DcS_{3>eMzq4E7h+ZUZ322yxO*Z!~Nd5Yz;7T z0J-v*EOshZ_6N%+)$j8>t?$Fob1`l_M1Q`2xx9znOjH2BxJ@`iN$dBL9uu^fj zGQJ&Y(58EtflF>83{uO&Z`)Tk5XvVPaNuo+D)05uq11TQFFzAsROc69HN?AZaJ|l` zhO}*FQAU9DoSIjXx>>#ZMst(-50S1*Ha|cCq|>NZQE8nl@}uVa8WahV-FXxFUh}*? z#tr{n>{ENTNqc<$fv@+Y@n}81_|nR(=6Th%$EEwWtPFyeK@3+LSk*>CT`#!T8$-4L zu$1@A@-+-s2K69rk;fv%3}lJ@6Q5jA>^p3+0X=-zytgyI_34^mMeWim9lZWv{4ATo zOd)}&EFmt~T`!Efapj(oZyWr>o|?kVfU2W&y)_8F^{6_$>e6m`lUkz^c&@(Bkl||8 z_K&T;BaodKSy0cI@@_X-eK(xl#P$mg9sXSGyIVM6u{ou{515<-Gj282+p2dOPX@E01QD zlh9id_y3+!ZY?n=juf;UAFPZn9a{r3n^rQJsCh%?p%SxSS8mPjHL4O9XY}u#6lim~ zNt+9Tj?wdT65dGTK_qX71aGfknv43xT%7vlTBV5Amn(D|CJS$hyvr$>-NfAlSJ=(s zdH7x~2BQj*A@|R7xo`Zz$#sq}Gg%r;;7Rc$*k_lm53yZ!L&5_7xRg77ZTTMMaDK7N z>5;GwFQLK=2gIrVrsUHTKrfeeX}Y14zD8OqI@XKNgBQcyvO0ijUzci&<=!9M?&Et7 zJvpWRaX*ER&(5sZIN0gk7}Xs8Sg~PpQi0t)&^3u8EGuy1JWdaaQ~>Zjne>YZPb&=n zz23Q-;$PO-wP>0+$1edg-5%CTv7>6h&%~ucJkx6Cc2p4uQsuyP=cDMpPu6lZId;r7 z_0SHR1GAz#J7?y~4`XP?FI<0=#z3ht?;ABI`N)iBe*UsDXQ`<~a8#87_@GgOzbsNv4!7^5*4`P-5gDO~nJ};!)j-gJqq*ma8!;JxKxCZfNpz zs7&6i-m25>R^D59@dv+=D4Vo;8PT@e*F-F@)g-5T+;qWmq2#^%(vVo~;^Qx{hW#4z0vzkyqdO-^+D|&&Ns(Lxe~M=jX+J+`ni415E>_ctH6%~yBwA+ zU!SYE@4A3!Z0wqgHdYq=W&y&d1uhHf>e@}a%W9=G? z6_t%nvzI`8bAdUDBe~l%Z_B5esYOL@RdfGm2g0WKAO(^7hc+p0TGSsLUY0jP#qDs` z@~^FoTT|{RDW`n9ypLzY9ys|Rgv_8KE z4YzffL=E*gK*Q^GUB}bvdAJy{&T#B7P(5 zwAKpv3PnM7cP~XQfQWEpKVJvTb^Dg8WOwk;N58b(jg)qf|6m;n&J_3?@32P5XJ*?N z$XGTv6~8_^sp@Pmzkgg*ecb{jIfHgKBy=hi#~rEw^K_1~yJM|?K;zNF*&MX{@>U`B zcA_O8sM~eJKX`9N7*pr-94sg+uE_)Ge82m`1{1dBda<_A?#EANZhOP-RQX(hC%6!{ zTNnH;$&GPDqk~e+ty5dJ33*~Gx0~i3(Y^ISl=oabweOb)=Mfmh4Sa=iK7SVAc&p=oSi+D zK;@Utvi6~7EgL9Rs2f(J*T016fJvQ{hsF9q;XtJ)t{eN7d!BEjEd;d2pM)A$ZY|B6 zrq@@D2oT9{uLgX3%x3GtTNRf*9Q3nIYd6cA6t;5kvCk=zuZC#ij|uDw3j9}kDt)r-cI)l(g5 zL{F@A<5%+bhC9mZ9RZK%4uSv+q4ka1*5sEkWxh3S>{&x1Y`%P&?di$b8XDV{XgwHj zRGrGl#_-)-Ps9P?JzL9m(3kH1^C=z0<_YYg$lP%^T`U_I;Tc~C=Q;;{m&uhKV03ed z2R?irJma4uFRtu)^ugW!))GCMsGUyQ2!QY-`~86TOvgCVpS8{^wfuR#o-R6Cid58| z&(h92C{nT1dgD&6Idhbr7XmtZCcx@0a+?7$!x#H-zd1U>9}Hw)0@^gb{-SeasGPlT zMo`**T`X!DVW@3M=D@#b( zR`a9Wb=huss?LdL7rt`4E%->E^o)IdPQ<)c2+*}r^Bbc;cRQH(7+1nt%>U+o9(oEe zF5WheleHNVauKWl|CcqlZ8HPsn60J7;Od01ru>mF5D=jbsyR1cxGF8I55mNwlo@@ht{5a=(Ct&;Fw67_{! z(RA!J1hhKLOHIv?rwVH9%#;Ae)sOdXZ^)ywE$TC1Rf&5udQ?wAJWUMjXMDkD(mokm zYM4dwRvYKLz?{__4;{j!wIwa7ZHT5{y=Fn(Qh@EX3C z=-SMsmPR3X`|i>RM7a((AE4jH&<* z=8@Rb&uF^)kj&r@UM_&nvFUd1i{#A^& z=TJl9DRR}k+jC)XTLnG*Fwz?`*UR>zySW)~iM|dNYG#y%dw3K_9qJ*W6J{6@#&<->w_aI~S$Gncu*k2TjNN#RqY+=F9n*g0)Kn-FI)!v>^noHmn*c!bc?Ce_wt6yLE${@U_^e@%i8#i;gKt-782*enL7S`J=HW%_Yw?n30Y40U$Dbx-$E;GepS?};mw-!-#- zLZ>Es<`3MKs7bA9?@9Bpc}Zm-ag=v9tS&yWtmW+5Jm$kdUhy1Ov(sxRR+tCDez3R>mvH_TUdzq(Yp z+K6ef*l`lvavJN83`F*2R5q`h=zJ zxtf$y~2@-}2D0;hK_zvJc@aO1bYH&vwbgEuby9SYpY73_%?x$m{lSBk)~Aq3t3s5Ygd-U5 z+Up&AT6uM^3A5#qpFcnQE~ySkn(f-KFT%Qfe>Y`;FxM~sJL;cD=KzE+e5dL)MQk0| zRCO}yOV8BJ7I1l~Zn~%KAAGwbb!>rBz4JVI+o{=^RrVC!`SPuBO&~7-O=(@ImbV*@81;bkW5?x zn2RJzWTMZzSgAQ(UMA*s$`A1`IX-1>G1~yX!S91xS{eX1@I@aHT%&5zwL&vy;SOK~ zmLe36M~gvn%8fTL`VjuR(Rf)ywi{jgzplLe=m;}@JGs7n^{aL7b7(Hh4F0{~{e#AB zYGpCICgXZJufcI?Yy@TZ_HKJC_{yrTvn*uIkk&=AXmz>EZ7RKfiOSqdWRvn z51%W&{0H-#IkV&dnAo?i_4r|z<->Y&LS4m(oK8)*ZSd@K;dZ=IJ#U!fbd$$K0SQh(dd%!813x7yFg=@9S+hYY1E_lA_#PM=`G@^~` z*`@^{Wyi&ra;O)8SWNzJkrMu-c4_)rakD8Xv5XrrU0+=Hzo&*e{iS95CW%o|!KUq? zSA5c*)_WWWZJel1$4&WsyeN@BX}X>(&1o!L=k;MKLJP=vk37io>aPb1Ds?#yOhy}`@vd}9sji|pqzL$#J< zxyMW!vnR(TP^}hO))m#-Bjqvw!jNz8^XeD&ia+?prUs;S@r&1o@H-G0sbpR9M$?@@ zB^UB+Arm)Wyz*M!FGm5a3zf^Fw5$ShvBPn8E1=1l!;#D;n>g5j)k6t3ZWqU2pihDt zo{wYGpZt3RVlejT-Jv}V*}WW%zAyA~ay_L5A=zD8^{&rO+&;q5drR&c(JdQp$55p{ zI+G9OwjA&ef4|w`=%BWuglAgyAD3k64&OKs)lu>w7}0i2oW=CV{HOICw!gE}*B586 z^$VNolC>9JL|fgqabbdi0Q|K<@z|(B?Pz08itTo{(iNNhz94J8;@mg{WThh3-SQbc zZ~1)IKrlC-4zU+}?6WR}jQ(Jufq{8PUTz&Fh{QVjnGzi}79=V;h>qnwdh@24m36zK zhO2YExV+_*L(3?+1G&<$Y95D*PYEHPeD7{0qt`e15uf*(PL5L z)Yn`<6Th~*)804@wN7cZ##C41#vI&U|GodhzRLp}5vP1<%>bjYA-Yq97=<~~pkHOQ zWCx$|`R30CkLR1ew8R z5XJew`9fy~^l*7Rye_LA_dOu-w!OLvdu$`7pu$>0}A9xWAYwPLR)Rbh-d2Gj~Qic0?Gz>>>9cvJEgda3h3F79OPB&Wr_ z8&$z|P$epe6*rCP=*@?1v0JLf4lDx4Hru|pU$fz0i3Od*{=#55Qc1fDbzkL*(dYMh z;0FfPt5faEs99_7R@$#FIrjRVOH6fkP!4I)QqI`(*&$XH$*sGu2l~-}b8K%tS>CP$}1X{s?BH2+MVKso|hX0sof{GdA;j{V7mQ7B*tgoL1X4tl5dR!Y-L(N{=s{HU$H$nn0xKkX*Vj4Z?1qjaNrR8dA_G8~qeAwRb-W+)0)OIuU%7YZ#YX9g0oFZ>x{}~Kt-Ew}Ol&X7C zuo~CtbYZVo76oldjyS+>n?`GRQF;m=3ZWtGa8_S4`f%Fek0iX>_!5w|e5gzNVDEWT zL{15ksgh_dbftgyT#fT_4~KWIq`>#(LaJZt%(TaO53l*~m1XfAb9=EwHr^pPn<4BN z>72PzFY6nJLC8-V(j-+LA9XI^mIPG5L0o6Im8#Ye|=hs#t%q@d{jJO>Xm^O}nEZPp;B zJmww0yBk!};hWey>iw{qWUuz!{`G$HQEC)X?Ep7tdHo6h?ga-Y2Kb6I{4-!-J& z#r9Zz8&}C(8ewlTP^)N@h-cZYc}ekmCt1wu(CH5zJy>Gt7|68^dfRgq?sdLQ$oX`C z=r>>K<9VyZKtdWHtO=Qi?JVz?3=$F1oz1o;cKv?s9arTvKHyXFD_JSpzkBu1!e_pE zW4}%oK7y`9><=bx-Z}hbd3`@!Mi=avWhI#+Tn#+MdrB+`LnyHWcNg~=)P{Pxv+3nO zy3x6Wybo0b;|t=fy}u*M3_R;IJv{+40Jp`3G-k&_-a|m|i~aUk`kgwh3S?9rj=gs2 z2kI|Hl4_852zAsHDlYq8U5UgFvG$T-LRvd)tze3PkI$!!yQN!|*79CA^ccH7gO`(K zebnrO`n+e>M{`pLM)MK!bL3pL_HBd2M^|6naO>5p<-_r(qS1d8o$0=EP!z_m;9NvSrUs$`r9mV` znJO95C?RRM|JVDaZ>N6SUh8@O&%xSbT)aVxsOlcy>C_)){aMd1{N?{>0kIOJ$9g## zxbIGlO&gS^80faw$EsCy7u4JEwNW7l6MY-Rk2fj(`29T#4#8;cY*2b`U8!Y5Y@`z~ zTKzVQ1}>bcDp#q!Sa+a?O?o5f)Q8psZZril2OciCAzoJS-y;Lg zzthv0Z<=P>LGhZ@%e7zOxkWd&Ys9F&Xg%0Ja3nS+J8rukB-c9imhj85Cc?+fAe#=2 zD_N_o{wNvW|W{Xg*btcL9PGD{aS&)nSowicycZ$oS6=B$~$2dt0Pj$W$< zCU9AhNB*>t&B`BmNvT&$EXdegq&!4DzF$~iuMNb7FTc3*Jl6t_FqoIWi2g0Tzn9m2 zY0AB`bDVZ|*|FbMN*LniqjeoE)gUT@_1dlImnMJ%lhdcfJl`Ci@ZMUse$!r$V9=9x zJV2exIGY3(tkxAr%U^?L#xseyR$uq;6$KX9XVil&&lLX8(37afwBxR!%fo+aIokg0 zNBiutJQkI#mZlr99B7Wg?4_{bj3m}z9sy%=w;G1k-TJj6aBj=qkH@8L%-_1eYvYrr zarvSK4*nMA`_=rRa1)*py4RAo&m|2`q%0ZGl(_ z5;Sy7PIAf7Yj*oJjoMJ%W>yq`wzBCw4;QfS0~nk$j5i!ytSbMzJRjGLZ6WMl|KydG z&Xy2iJn!v!Y>tGN23~0L0bh~YEbW^h5qFx8@Rn~+n*DwKlFK%JwW=pM70z+1jnq`M zCPqU_K=6xM&!(?#YYXq8dUP{iz>~O*5AT{$7dlV{Qdz7e&cN<+y+A<62n*kz5;H^1 zmhu<3>weu8blh;Vj~6M03jc z|MXyX=P0EYzWL*@<$FcxSVsLsZfkuM`c;PSO10i^r21^Tz5-AB(1{m#>K%U@+j(Blo;b-HVL9Xy4>2$6f}g{SW~+_kN{8pLdQDBcng7INr(*Tqk;SRaNw4% z4W(;DTeY?DL!-aue}j_TbjE{aWpYzyr_OX-5@mQ#jgu~<{vNghf%1v$<0d`pSFSA> zT_UTCM^`KZl)V1t55#+4_uSZ-fseMH3+Pr;7JDTtE0ZUFsAAyZ#_Pt60cKmBkFCQJ zvxgBYv?v0by5rj>$*()Z`!&rg+m0YMsz|Q|OvTxI_~`}G85>Rj%PdIA6#cR?>)jTf zJt3A}MR-PcaVL&ZB<4FqW0O^lUiI$-I=XuZeo31!4iEsfih-x8PVs~!5_BTK)f zV;i{AW3ESx7fk0UbL-cALy2#h3<~C-T+9)<^ZQoPS&gR`q@8TCys{n|08TRp88wx%pU%NTm zsKxjd+LvB!Fn^$(1hk*Fs5ZT8@Ygvyu6?0# zgf!!^y3u)5Nk1jp{c#WU`&vVR z5wazk+zc6yA+wIoUfC9Kod0ide>dUAr944zd_-%J^g7I>%<&VLsgcZx~s*b=aLwA3naB5*t+dvtqgPg{#IqkCk@^&=gw?h(s+tt8lG^m_g zwL`sG@rr$k?5~L#@a}Z(yAlb)o!^W-JLTxolU}M29a;5#QKbMk=AqNyi;qHG&_5Ryf3ohZ!5R|@Kog_RNv6(G-rcl%Zs`qFhRS0wjpgTOnTe<7pw(MB zT@637NX6DyGhb~q=T-W;SlW*^wJ#+T;s1NDOpfqRUwa{+Rph~=Xx#1VnsGXp%ZrGZ zzs33$X7-g=J{oqKrhqYEIDFhkPlHBs%glCbhoEjeknk?W4VpKh2S}fzP&%0L1PD7S` z&!IUW>NnuPSC_Kcs{H0rSvws}m(G`1_r&!}nY$|_s!S4pARrGKYvx+W&b7&omrNk2 zF6Hp~aI~LD4`K~a9`$~1xQlpB)snh{(^;~|L2NAE_L5-$kK&+Z@C@nso??yd&z>b+pkB@m&G*=QNL*4Q1YNu z$DNE5x64PzECVAWj{x62G{K)>zsgsSV>x5#vT0HL8Pedy_;kOC8 z9ECBwna<8U3NC8t^Qx(*$gI4$(hTU9eqD4a3$5%tAoj;TreDyK*FV1+5+KBr`h%3p z^B+>|{@hx_-?r>jT=3^N*2on`%4ln`+qOe>gd4*@>a9V6p zWVak)rDyWMgRdVy14JGal&Kifdv|2Nrj0jguKg&38vX~qD*<%ey~=8cAI%1_m2beM z4`n@NGywRSe^>B2@jhN&OxW|fT~6JV;9bO_%FIairAFflcGs@5!0Tp|%zr~#>6G4Z z3#^}k^?mwQfJk4N$Kr}LwPz)EM%DKHJ%KOtRz*e1rG`3nARbNuYrb5kK+|r=-nyI) zceNS%Hx&!g}oj#PRxMGhdRw5R|ce~x)*>6vv?T9u2}UDosS!ov-mA17?oiYQaG z1DmXD$OQ>An`*D~Ym1HP%_JK57%fs#lsC>^cZ)`YODVF>DZHvzde&3xjAgTJM!qpu zs;AZa`p(JBU$x9fc0cgs!M{-LUD_Lo2}Ld3Dr{Qy$p_!4)qJKcngjWhhqvJ?s+RRh z%`0>)KHr;yszays2U2PzVdM=4?z&3UKuWDh!g(E;y+6%OO=FAToMFS!gHsRFXvh!H z&%kZHpbl!6dt*I)uX7wPPj=;62qhlhCEV-CN0eQ$`;Dvg{8i*^v=m>bli86YO0*-4 z=YTvP$+ByaZJ?F5@V%BEd*{dEdjPlHzBl|u#L0g&+o!?}EG~Z%x`o}PRckT2 zZc0L@H#t-+W>}=8$~%bb;A4F62$U-(k`>uYQ~iEke>Z z9;c)rLEYQ--dT5=7C7y^s^*Cl3LZPrZ>S4$^9Px&=TY-}r*fsXQXd2S+Sa?w5QSn! z>v!oF(jeU0r+JaB-ikDz$;%tGf$xH2}SXT8o9hUt{x*e_e4}RC)AtjaAPhf1u9C@)O}cljJf{W{DIhf!m39 z#;kl5Cu4f5Gk_*TtZA&O2vC0xPL;_R)uM6oDiWWPqP7FVsj=x*$vyVLx;hd;omr`; zG&^5S<8FOm^ElRClS_=z`?hBreD9nm)7?yF9=))=$oTypQmVmmvNjZ4w1QS(DYi9s z$;TyzG)^oynbj=XazLdqrR+vx6I}?Nl8NW?*eL)Lf-VRj1Wz^<MN%!2J-mfjMdPr7DrISkmuncMorEp}}<2$6Et+&lk#GqR% zU8?@b+0(NJ(xso~D-R34cPm7{S2+>2Y$v+C`+7eTn-_>VWxp*sUU`Ss{HYJO%~De| zt}o59VLlaR>3l4W%X3xx1DE^29D3~3no2Jx(orA@(B7D6D>Bcx>WiB%Up)P(epxlb zXL$4H-#N2eEd2t_WZrr@XM_2Aadr~0$b zP~B7oV4}BnOf|C(i=iCh=S{6MoRYSh=&yk7n7e@npP+d?2M_VX7h=o(=w$he0@<^A z`hQncq-8{Lvw2NQrA|OUsO_x&icgO; zZ?vz$Bgw#ulQJ(qcbHAR_PV#wi%}7KIq0@y>)E^?_kUoOs-MvVwC^z(+YVCy(t^Em z*V-12nQqFrrpmoX2z1sp%b&+ZJaqdVe$M`&>I<^a5h-sQfa`*WtJ@zoLO{dCEjQy$9<6E>4-6KT0TxZ z^hE9&G<7Ol9bzdRp{mKthi|ILNd0wgD3VOWP|cPO+tRVM37(lf@BE)Oj|8^1zG0k& zwUcE&KW+T38b;3gK3>1$NdE*%X;C5do85Zy+0P=(F1714vmh;Z2s;Pe4lAe zp)|6=u(Vy!M;obo$`t(Ntm*zgS#tT3`{&8Mnp>p~H1KVUZttV&UXx0N9e%^(mrVDo zejm-_5jcu#)t^fDtzPBIwV|2N6nC8PB!SnheD7(&Vc6!Lt@SvVbUQqRxzTnf%gtd? zV}PVdCS|J^0LXG2J-eNd=`75$|vYDP|u69G}C2mMR}UU)rkv!@A9NQgIWi_rXRP% z=l7~jru-DdF@L{2o6K>!J~KU#>92a5T?Ub;W|rsMre0fcs~7MG-e=~e9vI-9FB{jv zbANK&W(rk?yTz_uUkY!BrFM<^{WXe*DT^UFBn#e(e#X|mqhK2nkKg-4>P5%`Qy5}m zp%t>jS0=s5V{m<&bKOi@wPIg(>zy2Bk6pwfJ^9YSllM=do$+*})1!v3H4?0aJqjiw zy_o8-(muc*2Eq*W7CIS@&04iH0&SxZ%TPIHteWwq=m1ywk5Q9CMV<+G#`N)9d&* zN8py5MN{efDgnoBeI_i#dY`(kS6?D%A>GO1;!(`q^@fAzH1A-JBc`KgqoStQ1EP#8 zfa-hug8DG@FkA_8ivlq+PHkd}ZK_!rc>KMbJZK~+a zxK4_r;`bL|fl{4jnH(EgfKm`OoPFaH4yllK?9oiBP`&IDU+?SDO$Br)RE zYg_B*sfk$47bhInC&TRbMZl8lmJvOg#B48lrAPllJ0hLXuTuXuB8}S zjxsMyXm6!gvCT`rg^&{XUk_yMMr&GV@_J4jd+Qn6UHj)#4ytxXR|r4OW&m{vE4#6l~6;>5euR_qof@hH*`LRogs& zCg#!~D33~~9I$KAgLV&$KQd?zY=~yx0B8OPZkXs3*!#`v2^Xx>LRi?c3hk&cENZe2&49&^;i%%qek=Ys;h-!s|@08#zWo z={e$WwF=y+?tJ1!5~ICWkw?#M<~D?eA(uW_Pv-yC{1DS<}A8ppB4z29;F+`DR#e114Mg}&{uj={@vn>v!d3wds>@L1Yu22F8mNy zF`8W<$tQ`!&WqiThut}L(r0cTyT54HsM@`dE+LTQL-uhDxFui>bk^-_Jrc+$y0yVV zlV?5qF~<`VAkdGIpr>0c(ferm>1B(=uh9d*8UP7=?3VARPip4$_>Z0FZQ8xA3p;;098P$zn-#Gb5r5&e_%{4Alc}$ zI(^8;tU-&ggn-fpm`T{?1!F=g{l znE~5n_`4CN@RDrmOLDWHn*Aod#=(Z735!wxUaMZd1Nc<5z}h@oWf^N?RgWeHk(538caXGX1!8s2CXL0FJ~B& zjP%B(d}U3~$v%Ie8~I9Bg{Q{vSq2#AW~17y(w#iz{!a(}fZ-H)S!!u{sjutvrPjJ# zv!k>4UNqJL_{#sc9n^JNQg8NX3_JzqA$5<$gNILjgGhBpBD%0H|AC=MyXSH3efd~F zWWE;7>ETDY@1%8pPDYyLS>iN_gvS0c2@GwA#E6e{n;jg%D`z+E;&KnjUUUxctwFN= z%pW!1tTo=;@xAFi2F?I}9(GFh2l9xAp2@vcQ;M*=R9u00H*4jWdL95$xd5=OJG6N$ z?mn{m2Om1CJ(l6Dy~^Nt*m#CRT}dwU`Fy|Yy&4zNu8epN9^BZ*U2fje>imB9_UmKO z`&9&or)h#=i~&(FUsp$U2x{_8pU{|svHYJc=>1^ExjqoSYwGP~r2QYb9_Hos=Fu>_ z0xvyhj!ebv+O>24x?W4@C2(qb7jP&-?NNE}{DH*qayw30+qsb-5^&s|_?=pN7;hQ~ zLEbicJDARi*TYg=3R)-i4#kj7jJl>HC-Zvx{F%+Y&)ljXdifK;?Bj7Nb&^i^y}zO) zzH5m?YXbkDL9~2$cChHxe@%4CK~$dZpxX1*sg%)GBVy`xxLWtg_Jb3gn^p^#ZLPAl z4*d-QD}x>?KW0(@E^1ENkrrH-3I^Z04wvpJyHx!0ml;;ZMV2Zm89b$*y+!|EH#hp2 z-BiuAwZeW8MRF~G1SccXvwmrELP-8l(Z&^jxA``(@uz*p_N%(>?ap6xc;Rd>IX<+w zx$Dfo(XP32Q2MC^yX|3kC>*)&m?$@xqX1eG4&jzPZkc-eJ^;WjEpmV#9045B8`jRK z!0(O68P9KEjD4%R7~K4^8~7?epy?;S{9vfiucbJfk7JX9>%jX)qAr_9^x-?$@^J)p9*T6K+WM_hs$EB_5-{&}i|oVr z&t}=haJB-Mh$3hbSTa+5gD~IEPGuFJD;Q?4dETS@qUhk9?7_<{Vbk31S8p!>lee2q z`X0uQ5d&1h?gH4@wYcog3R4N4V9sx)V1&Wo+bi=Ta|*?a)Ue6siU9^3FC6Q2n{RKe z&kHIt^0`V{mT^*nX5jcidD(Xf`hh6vbozWU@Q%af5mRkBJ!qoM`h{Bc$JfnrDu$|v z(D&VPHW7m1lyKcpCi=bpbsV00oL*Ad5MJN1(^HucMZc8wLwsgoC6U zz;5ZD;L13CXPDC_e?jZDKT1dUVy|lNjfC&j57z}&U{emM-+Mf-s4v@6FX0^w;^9VW zAE6`OeP6xwsR4$27D^0~#veWX15>|k>Y;83IDY(pHZ17IzgBz7OeW>-xtt&8{%tC1 z*IPrmj`zlA=I~^Au~4y<>Y1Kbj}5JIHU@jOqlH8AHo#z`H(v48FLQ*CU~|>R`SAaf zkZ@?77!9ohBlLvMiCKrDI>+{LZMBE7eqiUnr*xRJLwhXr@>4Cze_p}eeJz5D(&sE)yTOYL6M8_)*f=px{~>VM!W>h*GuI!mE6o8l7Isw5XBXUuI# zmJe9^-o4@JXbH-&8X4pJwSs3Z>Rvk-j&jGD-5CPtkJX|_16??+S=4eRP$6Q6LQ92Oy5799tgJ5Zqkd=5(4iakbO^!8zF_)0)h3b;-xL$b-CLtKxT)4-jNM+4 zluGu~dgt=^4ym5}|B0r(wj#zR-X`2$?_{l-W*+MGc;z^?%kmG@SpW4TF5gn0lRqZB z1ld$9x7GDSQK@4FHY346TJaqLe(7MU4S-!;pY1-sN$2GR;O;mlr@08GF!ni538|@! zE++{`k0I@b`@wO;ba_4a{(+m12S|AKBa$fKOLFwCyrs0ZsL#a~2Ab{h$T|V??Dxv4 z`KV{F^>3-(oHqxd0H%XiCHyQSYv|Oq>sLn4rx{y0%qD$ea4C|=?%AcJw@T8bKX5PU ziJSrCna&=C(85JOKXB>P8ciPBFPP23GPvKS7;w_p2-uGfV|N~O zPRaBK;GM&J)L@(R$ix@BOyw{|TP=E`JTH`A@jT&ug;}n|>h8TEbc1_J#?{IBJ^<0` zgsTpyPiLAi^cQ{%uGugKLUjU!Grt1PldMbU>F`v8xm=Xj`TSR&`lB^+yZ3)cFO6^S zhy3eM#TA^ESBWYOT9m4_^yH#f*M5+OdnX4QDk_dyMn5xtnV1?zrpnCgPy| z-hoRtC-`{}?&pPWu9`n}2kAoi%;MEysw`jo?YsGL7S#3LD5wu3-`aDg<-O#3!%L>HQ!W!x0P?+#9mtc#g6|@USMeLk+-`p0Hq*Jap=Ht`1O-PlogzX!ZkXg)ucBA;pLSf2q z>u~AUrZpS?5pcw+bt(v#-=n&?H*x?v+&4L#38e{d@4=BJ8sTGZ#d`gMu;uk2X2f-0 z@InGxJwF<4f_&{zp{e#n(ty(k7A(3tUAu)>LYGaux8~Gm0P5DL_a5FCC#11IkCz0u z8YgDuTd#P%#YuGf_nyv|*S!;&e1uMDe)QpI9$O!IFry~@*%f*zw4+2pOdchoyD}MR{iw|Tl4Aq-g1a<|B225 zV;<+v+8YfZ=Z)Sm^A)l4@oR^$i2428;q6EgpkxO)C-yw(VE^BF@2ppz8tiW=6%W@# z!3mL}FnNFZ+HpB*leaIr`uIMwu~3OT&aXk`7)(mo@euu>6Zsx@^cr>lO?aUXxSNID zy-p*1EM4EE+h7UjIj7-u;V-#n?#_>)Kk>v=+6~39(!51^c=x91DJ1&UixBLfRp_lV zaKBL|+x66=^@W(-Q9C$`!FDR~@3xX_6>!v)ojQ6^j_|cRaV*F=hM{jmh#MCDqH-bbwC(58JgsIv64;L~#-@$!io5v?A>XBLP(lk3|5Hzlr z-$u9E2Z|jVK%hp7-Do;wW3|?$s^)v z`dPhU{Y$D%1Z;`z&dH#M_aLV)VPZY@Y}bA?r#E^c%3qZK1M%07t09ZXA!_;Pz3l-B z&GPMnA5%U%+S`Wl8H{os)(;E-Ir11(%a%<{RIdLSbQq;gG-0fa4#(;NyA7XO;ufs^ zdaNJQsMO9``O5wLL6MT6=cYUU|4wLoAeP;^Noi2+S_ZcPHpbS_kZ5-DuBfV;wXqj=ClOgM;-XT;n~+vZ&SU&W{DBEOiq$Y2 z%@@riYqrmeBMZ%<&%+;etavgxl+0U!~S9a2S(EYdvZ!sEETY(SSgbzy}Xg}wS~VJw;p-i zuhKm2lj~X^zox*|DvaS6Si_fG-wvfXb~lY!FO|n%R<{Wc#;ML5($VDE;`IlP`Mi(IV&H(i;m-rwm#^-3umT|~D$p1jEbkfRm)*qY^aWqzwu8%ZZ z&(3qukBJR&YZh9vLsn?_QBy7ZwKi2OS@R4f3~fA^v-5iC<<^q%%VBy&EoMJ{&5um% zfw|XX+=b`g0kwP=45R*Jed(5-G{n>I^KM+JIOj5wj9ck^E2Kt$o?Y@9i745mQf-_Y zT#BGZ#iE{pejBfw6|B}mH~K;YkxDbOy547Y6BTBIPr!;l+6&NQT>dovpUPD3!!LDw z-jCA(rrS3X*Kg)>`cw&Pqv6e?XOPy}xXi{9Q)<0`VhfoIg<VJFJ947Ew*S%l$= zAN+v^(tDo0vkJuXKv2t%^Jw}_*q1LnTwa@Iz146r!v@}s@SFaZlN(Ah6BEn`n+=eB z#^-`$zk{mlG5aG|3;V+x(b1HF$ky{NeeVkI?o+H*i+xEPU&_s<+U`ghL-jzNF*p0u za?>NZQ6e7Jm+g97MqaBl1lILqKf6uM7SeWa>oHxuYLJ_@818ud`efxAL7UD2a<9B4 z)9>oLigdfJY1I0EC(&k0M#tK&+p{q_a4xN((!NkwOT5hZ+I>$j`|NKd<9F1J;Z4B=Ir(e;(mmYyTJ&ZHyp+PP2MwA#atO1f?OC8cf3m0bG+dn4?kU#^#@ zJsxV=x7WZ0a()}JT0a=~OU%!xHrWY_vv-NNCTDK_;D#+{QPSSa@GBbDoye0&?@nd0 zx4VSttbM~+} zsNTv3(bd_W>We}BoJ5rb;+IuC>`&Ua)uXyCT@Jqp`<~AZvo>qx--fdJtnW9EO$w_Zmhez`s&WDd#ei#5&m~&B&k$DMQ-%<8~q@Z8?4 zBUe2gyeea?x%USernkY~@#*m<58mB3^GL@PyL?IcDlNR<{7Z-eNgf_eVyYV7>o1)e z=ywyio<}VAY5VDxm`FIhRN#>47<<4!@8oo?`m^t6q1 zW6tZ3Ze>TA814486eK(5z9xZ6bNdXD8oRL^!1U$P#bnz7FnGuUqAjv;G1r>O>SRD_hz#Y?5$)36-A z$)>sizRH8__zHi-?y(D>rP*%L#IQ;*8wLmQ8=qOBF^&mnhutH7xcdXQgWmA-WQ&kD zLq7Tu=OeZ$9g2!*-=@%9aa)~yP}0Wa+;HkM?>sN#mm~+aFBK`SFR7xFI1me--32 zV9#{5BKGOnL?)5HvoP^W9?d-*)`lKbS0ANNK-Hu*A`ojes#>T%B0zkvfyWQ5Y(d^m-GV8RyF54f(afsn4OxK;HVmnoPrhhOv7JUft z!O=mdTh+LlZqFBZ`n;IjydZ#X){C4`QxtCJRk8a{!5@xv_=UN6o!KJ%420l3ztH@w z5zP*x`ha@R;^rg&{^X2j}dv$f}eNS08%?qxTE*Ic4bt8jbEPz#W6I^d3 zL#Syo8kigJ;!d2ldYa61FkFX9VxfFVO<(h{!*pY28FZ6xcKriaQX|}SO6u8hyV8b) z+rR#i*v)?%ZfU)#VAPf$heda@wRNhu^s9Cq;|{IL*&dY1-*6O zRP@#adbJd%zx+r<@1a$n#@T-^S#sJBOSjc%O>QC>?W#^S##gz^Ep6O2pr%R590bni-76mKuZlI_THQR=!(t?Ry?JVDVkP)<*7suUSy9 zxYUb?){HwnY8P}LQ8*DyhhuBkx+-Py{C_QNMy0wV>KTzyYK6Hkg^6SalARWk%086*|VXdA{A<}4+d43{LUY(U|n^uDxVW*%$pf}BLF79Qz{-Fp! zSkr4df`S4TMrYH}^?QDPeKW=khev6wLR_Qt$uq9Rgz{bMwKkeRk z#GLPK0K{1k6rBLTev>`>;=P@+s1wSje~3!FyNqjYtEe+ zF=kFRL9Bs@Pad(F`z}eZ-inx8ck<55h<@9+Kbj9W{QNya z7RqVd?Q|+|tgcy8>(ChEKg&>*Jg4E%9j!*A;bs|+Xzn6$G#s6_V`TI?r^f*+=hc(5 zptmOV*ihkNujBvc^ip8iTRfXT<|p(fY{?^3wmmc4t}JiqSL=nLlvvmHgg32G92) z)FHmFuf8tDWf8b_!w$q(v1>sdKUP5R;Y#^tY|S47Q@u21V6At^Z_!8+M%H9Ieyyr`Ahc#H zpQsvjpjS~Q@yAM>#rN5^I+1O6r;q3KveWZg%V+k7&+q9P?FcruGlYz#^5N~`rL12# z@`xuNZSG^MhZ_@18X3mqvI=Q3uQ)`ADaVSwMu4?2-0p)nB~;`Ft5Wf&{nSV<-r^By zkc;4EpZoH2BizOw%PW4A*k|ACu-dNq?6PUKSW94U)-$p3S_Dj2!5k@6px=>5_jOxc z^f6_*<$kz-+T|xitg#cpWeu7nmQq(;Xtc7l_WSx#4HhcO=N0~f-YzJ0d8EnuqVm^? zcIxs)4((LgRmZU9r~J&D*UgmWXGtLM0!e|S9>3mvNn-Art&mm2flmtC#h zlTQs@!~C~?U{@+k_kSyU~zVdsmkX2B<-?L>Y>#Yj`*$X-E$A{gZJ3?4E}(# z`(xM!(vvuW2U-8tLa*D!R(=yppt_fz>+TE>UuS08J@EQ2>#duu&FCg&b$~9CIOnPJ z=52Kz5VckPJ=NLJhZ62r5w2Nf;%oYo6xtczfk3Byto-!&YF>B0&8BjhCub+eJHzVU z^Xp5b6>7+aUboNRnm1pzTj62O>$SLswu&rvYn&&qN#>U7uTOKh?d4Q|x5JSb?GFjd z(OahrDmc9D4Tw*@M()||7EXmJn>Wm=>oA!>H4Qc1(096Y@2;QjQ|c{7jmG*LC%p*& zu|V(e|2zu}KObzQMQXMpbPFN8Z{n5i?O`Q_%`c%n4!_yW1l}3cCIBtA&g1`?zpifGXz<|k>aK@)$(2111frI70WKi_|6oz+?UYtSCL?~uG;N&*nM24 z91k8Sxz(1!!spWCNQp-J@6@xrMemBf`0shkiB!MQ-3J@LySA=>;P9IHM7CY)(!0;o zsZTF@A}VdQr_W0G_wM!M?{Fs2T~Frai7hG5E?HIJT}9RD>gn*f{%WEDRm$CMzkBXI z(~nav=HOJlp1d8L%u%dyqxK)zs|<#Md#SE!Ve*?y_SXzth8w@M6u#}uYYew#e^^=0 zJ<}e=RaYBSUHNJP%90gcYJ$kfbRfHq<{QW8`5QxtL4S zYA%V1(W}_60VE#8g7GkpEw8^mlb@Dte3V z9(d|pcOs-WV+qd1?etzWIUy|}41S$+@(;ZitKW%ge%%s*n7^B=(!N?ZDd?zNulh#Y zw_XW>Iq$>H%HNmC%z97j)wWm~8%XPxN-&3f*Qs3j?_gk{nv%FTNhy>5aR+%#5RDMG1DQ)rs! z8oStSOVDCC(acS&d8^d($s<6GvbrFK9YdFn+iEjG!D)UC_Coa!TnX6}zbLc&JAIXq zdZz|oy!Myh!66pb{VhvOg6%87dz<%g0G<5Gkn3!njHHo~zWbDypm@5x<2L>29-74X zaMDku@UyXS5}kDJ!o0oic30*fc!w6}Hun9DO_o1UNg=u^yq(~u>;W;q!RAy5*2$XV zssP;oKiL{L>bX%y@Y1l^q|QCSBq~$mm79B|+_Qxf)(;P%7x@GE zK1!c6Tg@x9_>;*-E7b`E16A*beR))AyVlw8O4(5#?RAGu@ZHyiMGkJh@aE=h^L5tBOvhzcVVx z;_sQN#^PQuzp^?$#%9K1-T@q`w{RcudPt2~5xouLY4wJR)7kMnX`Jmb%&I_HifWw~ zz&I6g&o*Yx{(&?*THEtWi!wR+9EbTMFqouae7(^y*>^kI2`XGHzjVlJR{$*SY$T49F6L`@(@_T_ie~NETWc_#b!*;6SbXA zS7K$g@0_1CIDg1SLus`3yX;3!fqtTZjU(AA){pY+M=+rsW8L;ifj!(vK&=$imldjg z_Bve=KAQ-7pD_{nTt4e_!PlTRGf+?6-1z$;}rJKQm?^EdIgCTRqjJI`qo49Mu@Q0n|{c(H6_`xh8 zWLGfY9B|m=0bNe0eOTpINLLymG!ePB?!*&GWp*yG%O+ICT zpl(9goXmCkx`O&Iu3#9YgMP7C$kBLc_PR@-m51F8w)<5^g|Ro9F&Q*NIQTdrK9YZ@ zOJALpM!;F^t&nv?NYpQ+tlrAhmJ7^%GLI}g`iSW+u*@7#BhD+|s%Jj_1J%JWFsj7= z`%%)WF_}8fta2ZSz)uNgc#GFk8q`#uvAh$~=#|L)M{Z zG-)k&y_X9i6=wrTjn1U|^WWD}yeo{)FLwxG)KE6m1NW16wY0^|D(Dl_GIFdRM!)+H zXW&f|_Th-t59eVAKn+o{%yQ8McK(5X=1N_M&N!NsY;78Ut86@abl3d0i!9M(c-ug$ ztl+WjEUb?eoRt6H`+sqjTg7`nN|Y2{>3egR9z%?#=D?oTo)?<;(1oDfj;+>cF=z!; zW|&|5zK13@;)B($oxs4#r@99+@%h(N=ITEio(=Rru&e3s@1?zVGH7j9+L<<3&89dr z?=g<~e)RXP$FI%{(dF^Q!9}1}rvP3+rN4i8gE7{92-i%*No8r?XUD=%K^9o2@VLVrKm0xU^yA6%2ztb4nh zUu%pQy*+eys;=oPv6{Zw@(fZENbhNBOjiOa}F{MG9|B74IhntmJ{=_Gqew=^MNlUrpLC<}O@c%2w zOME}2_Ut)>=HFlBJJpKrp2;EBfq@g{l&>xA3!^d9QNo3=dN9-<82I0H`);l$K5%#v zzH%kNieEMxWr{oKSKv2~T9uN9tzaFt>gVnjl_hKd4kq5to+o?ga;=r*r8Qls;p){C^vOLg$1-(bMY*0(W4b78bFrN26u$gqwUb~MXM=Qp+X!9Paloj;1%Sorp`Q8b551<8$^-hq^8xqFu z5x<`lUiJ`H6+DePl?l?eZn>O}n76D2@E_7!OX;W3mipTtJRQznkKK-IC&Z}t z0X%d-2UIY~FTL`6fHfS2Wq3d99L7g9DL2sP-rNNoKr$uQuEuv{$R5tcb{Tl5+A~Xq z+?X|sE;fnSd~I{a@$82oBUdV;d|0k8pBIacMpnsCHabdb{nHhwC68~gL!YkA5Z%f& zz;3jLj;}XPzu=$IAbbMm+ z;z3@V$0>qs4PCuW=MRKi95~jP1?ttW!e~^EQaFA~4{%5vcYX}bxxBeO_E+1mp7U%4 zP_~U;?39dN)kB_y72k^fJRTr>Ik5MsM1h0Eb*mzQ_Qf7)_Gc3MtJc#$&_pI{mGnWE z9-n1)p*P1p+)4_fu-^ThvOJBz>7yDvr!e1ccc?MZ*n797NH?>Qc-3I}%$~34v+GUGSzOMwS@X=u>k{R2df7*^Ro^mRewXvvSp1ZDsC)!x04;L={1?}wNe)#PgLv4Of)qPc(kz^Z( zPq*K^EijX*!JoFWyIOWm)$DOLh30FpA*_%>Z783R&z)d(^Pu+Ba~|4v zd?px|w{L1-rwzedOC?J`#jnnJ2v@Toz(%*r8ivhFzFp^D;b-ChbK(b-L(1f;Ml3F$ z*L0-@3{JjQa*wD98)LGdtzNZ~x2CfTLRf(1WmSX5VXpCE9wlj#p=G zq=)6PNg70xscaf^XCc^JtitLa2(-VaeR;K2I&0>jisi@y*|)+2^BdP`)}Qv%DIwd_ zD%&7jk9W9`q0gH~cWU#WbdCRd>E%is*DyKywWaDWU9a0sHrVE!@AXjBqwZJKwu=9O z)8L0S_9WC~p6RQ6n$!k|EjOix2nKscr-PEawH{1M^#(e)Rr|V3T=n`^dmt20E=HKl zuZ~$Y0c$<_>GBWPU;F;km!(!|TA+95vL&YryQr75E-)JiK$g+{dyx*h-3MW%Up>q& z0VW(@=VknitRvCammk8|zCCU5Rt~}0?f$Z#J60>s+tx3=_D_gc=Y@8I@!#RKT@R-O$c7Mdoh50I;E>UXN)c2;~0v7z6&%Ns9j4zH0GP_7leUw!X( zO|~=eD+BPS*P;sWd*z>=-G8J-WpBjm!g~)Eg6Tg>AU=oIA{+j)F2<6>T{sIa{muN4 zl@g|qr_pQ0tmJ_d{bb$&uZLTIgO{VHWBli2RfM$M7suD0wMT{PV5g;9WLe!@q;E&E ziOKk|ix$g43@*))ZPoP$S&bks`)yjsH)N7QcCX`fzWnv@eOfHkrA2Mf2K{M083+wLjo<+V7sbh`WF5PjUr5j#N9d9Sk)-DNvb!6^b)8?jCV{^q8 zH~Ls^GpwU9G0XO}6{5D=!Fu8je<^;lSKjMnPxMQTUbO0~A`)NpL;41?KqI9YI2 zqwRJD$7)*3sZns(vu(`Np5Bp|){t2e|9_z!57{ievjW&_aPYeB)u!A1ttBd2-bznE zdaZFt_wrVQa8iMO+#g6laOvq^7V+`aHsF+hK3}g@!l(Uu3vUljU9<*;eyiQoSP)n3 zZXhR=Wd5K*+3p?Jl=K<#;g@M`)Zu2Ot0)aMmjgu)*0t6PxFBU!WLdZI2j*gPknb*u z;|l$Tc06R?~QvfE5G(zAFRo6IJ}Or$GWCKk~ z&c)@*D^Gyw%~eWB(VF_RqMW@h_S-8(@_U!?Hamx_>%2N+5-l=;hQ{61vXOBQ$SXUQ z-MpIi#YSNE3DK4UQ?#LlvZBY;w00M7?TT>3j`!M3=eJS!70K^he#FDX9HN8HNjlHC zYQZqj)j))$X`Xxg;jhy^UQwjcXKY;Dc~c4&%J*K3np<|(gn!<^<$V0NSn(wE-0QK#WH6-$^%)Y z3PkO6`qGJ~!rSr>w14=0SZ>vCt6)Wynn5?mfe~tkP88Fs&Yx;2CuJ9a2Kx?CZ2nid z1JGuN;O}#DFp`GAtT{d^%4PvFq(y4GOaO3{Y(G7j)1eawmxBoH> z^oOo)9bljYBQb@v>_8o8nb?ntQErPt&;z2<%~xIh6Hxjml9vJm~f3=H7`3`OnaTLWNx>ETVkBDFx z%JO5|S={k+wt5_z>7JvxFK!PW>u+a*So*eG*sC_5&0j`$JGh+gO07`}g|`g%b~9S{ zhj05!yB=0A$Zf~P&$?^KyFG`zf?Q1#Tdm}l& zVPfLg*`Q#4x55!z^S9q`AHy>6IFb&(2Mi*t?Ha#xjm6I|yuvSkiV@lOD~f;N!R1ie z_Fp(tx4nt?zTMejytwkmY%N!in<-NH#~6Bs8+RM4&rW0)jaNYzatX|)0aa^gbJ4u^ zl+55pPw9ES!wtGzYvbJHof5Lz3b|7zEeg$dv=%iBgQ@c3OUG> z?Ih0jz2h0Gw-&eBw7D?VHon+5cW(5n{}3%^#uB^gBj9pa4%!{>hvqe&X~0V!RW}Q( z`GFUi0QX4u`>1R(-@V>&O;2y#sE3?SU56=Fzg3XtYqOuOsCf5#FR18toZT7^HXh;m z{^e_z$z(Wb>edkf7hd#xc-cN!Gnszg_RIM|eIt<#G2*4;%7M%I$bx?^q5QMz^}#ek9SYT$j|1H~J9l z=DFd9%if+q)n{e)9l1VSZG?O*>Z7i$9h&<>?THW9tw-!UDRQhOS;FN$@;k@Dz^0u} zt$u0*!@7E{0$!6Gd^<7m0uGW;;J4cVV`}p5bs8lB|7{QWY<7{?UB>U#!Sfc+n=-$- zpfu95Ufy}{(QW)VLhWH^TZ}?Op=0Vjzt<`8pMdAgE`knG#qJN)pXJ;@R^}uY-Wl>J zx(0_YxxV*|UvxA-upL_aMRT`qvi*Pw{ky?4z8DMguzNUexBQVeOYjFzCLdD z;6XUt$LIHEHlp>6b*}0>73C9rXkF_s#(3nzrJ0rjeq8h1jq$bmccb|@Au${GK;di2 z^Nc3>7Ft;;GcRc$!VPw#hI2Z_DY8l~ik;lK#Z5pumkDRolP+t-x_yQqnFuO0TMaNR z79aCT1x~>GNk_XY4H3?>Jv+zpZ#)fO@qDJ@pC&A^+qa@s=H?~c%O$fhNusJ~#BICz z!d)$y)$r)zodh14oOZ*H>3vY&1z{7NpzZ#5_S)b%}1 zHGpeSp8 zrqAY>-2H$Db=f0DCOb8f{UDsNKjHi7dfT{)0OKn%;J!UKIbF$b45#^@c zXB9Ze&fLI0&)N5i9vT~WB!IzDC}DS_87zkZ91e$g1e@ArR1ekZ7I*pC=fjHW#^*_xzZ?kCmQU@9nbkHRKVt@}T%oS-F8YB-$no*0A0sy_4Vy z%cPxq5r}@HX`X=F?WyW<+PyuN+XWt@Tc?6<-VHdP_VCG=rmGg^;B-a_V+V@2);t2K{f3*F(Mf+wK+M`VCpquf_G6RxBcx z%8C$tYsYZTLiN(BGufYbvaI!y_3m}4+r2;Vs0=u8zrtAK-Rji{%P+ssxYyewg^vwR zx;8Bx`%zokj^E?{Fm0WX*LYIwk;aolHwppS_X8*GO{}N5&y;WXOa-w)NGFH;YgbOU z;#$)7mxB5}YehWV=VK0_qhC1!LcA9IIyepsHBTqnaWke)Vvh>v^L;Aml6qFRDqQ{m zpSze~*06TK5>zIQUn(p5anxj;rjnG*E$#%Mhq^mHyvfIr%9Kof!k@H$|KH3af4S1@h{9J&6u;J4X;6~`m-qd`VMMx1YsRcM7>nb`Jl#74 zmr9p-Qp*z|ZmzXQ20S;Ox$=Y7J)dCXq?%t%YtMfAc6iuKu5wv7uU8J_?vGI{!o=97M}{p&-gviOj&ansXM!%H)4>^BTSV0VEou_>xwyQRlgZt8HpP@7wNr z@+xv{5@EmkVF>T$>P&B(0jCyGBXNg+DZAFbjEz}kK0^oevZF7Dcm4nm%IbRJtCKl~ z;aS{}K<|z0#yFT2G3eUQlGTN$@lEz`9^$M zr9x#Chr78){-n{}1Ay`j;ABmbM=m4sLq$-9BypiqCZ2BIY;5zrc-nZT6FKxy?;pFWmbLo>r^< zoZ`9}?=0{LYftgCu+$mtO|%@klGbrX%yQ^`@TV&>i@_)D5%vvtD*I%c`S{j(XVf2P zy#~Rd?cmVPoJ^N%W*NZ1)KQT(bDLKjuOhsc8?iJnDivaLMpQKClzXS)xT*$ryb=F< zO~i7t&jbJAJ*UVQMn2CCS^P?bW89lTPFM>AN~UF<^0W z#!A0Arxeo$2Ww~~pA~&hn)$?U__yQKf7ZWozFY5RPIt-5+8-Ei&u?RAjmfy;0otCj zW3`m>QnzKDz`@5GnpGeG+iXYN5Umzjj*E8b`A34N8z{F>J`{CbR5Z#IgKn-!4maXkd9Hd@p% z4jY>d3NEjH+?v3tKZ6^YAH_h3SO|%I)h)JeSo@7uvXCopwZSVr-y0`2`2+Qzh`IIr z-Z`#OeEaoTCgtVP?y;7W;c;Nf=nae-#B&y2Ec_55M{gTzgQco}E2aX0%OD-YHHgh8 z=i@0h_Vo?H_8IpuJj}s(V$dvxD)Y%77{t(aBBkpIxr63REiVr~(>%zE=xZP5=afU< z>+A41o(q}UZDl3Vopiz<4XL}QA3(gjxbClFTnX+0_{BRNq$i4oXuJNj3lKkFzRop0 zasR+WW!%*)L>%c8PW8QNd0{VF20Ewl+(R$i==y*ITi~h+3H3V<3$(iwD9R>gSRo-B zUQ^fws$BH*T{2@|LufPLcjcfCZ$G!rH&z=$91Ou?_34`A+t`NS%P@VvafQ}bu%e%@ zu<3EgA(g?Z5^ks@h_;h_RdjyQ3;lsEZ>vr=t8w#p#+D}0u2bDTmt}+suf&0x4c5eRjh5=ub$JqX-@lGb zHCisKZ~Q~6`I0*EV&@M)G@ZG36$F!HAp6{pS=y5x$d0JJ zwfcEd3q~#OV4Gd=eh)MEw)6Oc$MmHVGjY|XFQpT#)dP6z&a?3fo^9*v?|YB{=&m}r z8q}m>VXb6X9&9$S%*72QET1F3YVa`xUiC|*-Nn@$L+39GDplOphL;=BzTSrj0z&^l zF)>;Fy-x?jXFG{|&B1qyCs2Jr9FR<#)%r_MIDEtdHQl_H==|w$70=XeVQac-_4^Us zZE?Gs&{B?Bu#h6|GCZtn`TZTywKAZAzGx@QPQl3|Pkh9uuhf-=k3hIC$ym88bl3u15+ebv8L2PJ6PcLhtQ^-Y~# z5eff>)&p)-Buu?Fe7;Xy=O(2-pdWFRXM9d#RC0TENu}iVoJ)qK2kucXNZjZh^ZI@~{ zij==S*BoF9q?Wy;O0~l&jIjIL8+(`ROEEv>r(oGT-sKE4y9LM<`HuOu#2Xt4Xy;F6 zij26%U~~{%<&#o5`((_i9R7jN)UNmYgxripIW!?jyl zk#osVnp_ROyM4Kv>srzL$fQ)0_DR(|*y;~Y9j~+>LrGeoFt{40G3?grmq(rX1JA!w zk5+byJ6I6bimr_Fmm0m{(=R8!EcqIBlufadH5Wd+YuhK4L1pwpH)DP{9)1KX9<8`O zqDD7SIS;@BC}MAxR+tiE93TZ4PQGmAEEbQ z=~>Zr>09L-r1l4<{SUi(UKC|mW$)zvYIKNn+xXRgPh?n|Q|}kNsL_YT%DgnPx$wKQ zXZ+P(1}8{2QlxxCvDPVi@Q0;my^V?~bF-^b{w>~Nd18=Ge8o2K;rIsCF$L)$}gV zH^zYW*X@2d$%n3pHFVFCTC41)?%xu$E?1~KFuu&VJaPqyO@iqumRL}b)G|UpklO#J zX}QX1-$QGdct zxq33S@lhm;LbcvC6nRp41aNo=7N>mvU9nkz!?pjwwG?)o#{^ZwMy_4UZg3`!PwtsE zqGQ~&bG7WWp2&1JQ%dq;z%bgBG35^MDD5h@PJaQ`Gc(|~qu#7OF7-QR5Z>bDZs*xJeU7xjpel9L zxqIpsx*tSihVZw?E~wb~#x51Tay`XrZ9i%Ci%dAr>h?1mjk042Ub92Xl-_t{3TT*n zQ%={QRCOoi9q9!0w3vYR2-;c1~VgztDp1v+TKK%p3 z+KR>Am21c!50pBG#d^ErtpbOWyM15wj-#*)#}8y2_Bz$W0TkN|5wNfSuL^&O(# z)|m1iWKf-(?eqN^&T-)Q%s=B*yE2MLo%ew8Vyr4#hIl?xqD9dA=EzEDyM;cR*5@9# z$E@Hqs%;^sYcre(hs`hl|NY1!1WZEVH(YEgxUGh>pPalb?Y#|y`g|a`_2{;(t~`gL z&NstbT~5Djc3J~*c}xy!%8y?sqBnDp5iqhhLleqUXu-9WYPAT@{V|cQ z!3ChtjV6|3V6?xF&W%41Z)?6Mx?mIq$h2oP99r7@ZATHD{_ z*P-3K)RVOQrV@)6EUE@=_&rq)=cFAzZW_?CG7f12JctHR{8 z`~#VtV|SHOuo=m~aVx(e(7y*#rR`PDnwkx2)3OuZyZAj7`L;~rV`e&wXTvvSx#6Y0 zT3~bI`>W5NbrG>+fbK7pD?714?qHA#F$=&wUc=%)uu1}(IL<#!`D}~5GlU6#(RirL z;#$PxetweRD6VAJ*Mb|E45D<^cVX2_q;o`m2dccTM@dt!ohAr%y4)WaIOsLqh;WTo zBTaW*u2tb@|JgF@UQX&7-CxF(`QXVaMox?%&%Uo)O_o2ccNpgPE>!K$TI)&J+SPw} zbTqdEMK>1M2+2Qi4M8_GBV+Sq54pT2-8|cMur6P^V@&yi67ACeGrWxvADhpq{(J^4 zh(k(2ew)jhX~oC%1rt4}4)9?HJk_3c&4$!u3LO?X^2QHs6ej9B<4(7)iwQwZHIO^; zTc^LjmL5KK?vg|uAzS3Px-MuusPCTbJls=KGP30(7&?RcC8yfM1hZ?MJjL%0+`i1W zI5P1oqKP`h4T3i>XKEa4&-P`PEe6~(k71wWC)#^IKD|}C{)(6RAOfP%xV3f6&mWk` z{H2`Uj%*(=4YuS*{3D+$wr@OoO8(-I3TkmNbz{6=Z`J!0f zt$waXcqY+z=><|Z-FT**8p(u$l|;E1HA!zzB1}7M*crHRJZmjG>lrWCX7>^ za3p=L=6W{TTE_U+0?C@gf9B26_kk|8we&&&eorsBpQ$Aup?&GJ74;yxmMY2K!qx`E2v1mS`!_W7X3t zN!Fy&{Z12FX1ifcKd<8dI%4aMoeiS>wO^M2mlyBDV_EIc;G{_Yn^Eb~VbZ=OR5z$E z61sJe=2w;Xj?$(lrC_|sN6=$6&4YpDhQx36x?K*Z*yc~MItGTqcvGa%rZpI&NWW5= zcIDUgmp3)~hkiB_t453|x2S!2oi-+`*T_G-n~wby8b<-EG1$A|j{J0EiT?KPoq@wc z`~I4A&**UJNS2!ij=K<@&vCdn5Trjhpx)F=oX6U|{r8Mxo=p*Y{6ti2Qgrq|ZindaMo-shOBj zNAkL^WDH;5gT5wbTBg z1$GnMA7A%+6{hZ^xSH3nuYMo#(UL{C%(j(@D{^I*N+nSnEyp3PMqyYd+9(R3*bhtw z3@o>jUpVfss&}EG8}J{9oKt*uQci5rcz|CF<;pNKSl06*SPWow<(h@iDr(Z5HS#0Z z#$T&miW<^)p46np<93r`1=RP{6>ebuBdJA$MHyJ-kA{<-S!Xa?E`g&^tiI#2!B1mK zdt;m@A*wc_jg!wlWKNtRt-&3EYcvm{-{6BY_}Bid9P?)FL)Yy-70ex$#BhUiDC@j9I)HZ~eeRf%lk z_(}FF%##{VznS3h6k9HD@6n8}DUXqZ`I~P2$A4|8Q|nZR%Sq*W(+7{qaXS6B>?;4= z&Yu6Da451rFn^V4*8Nr9?OR(RM9LvT+r4Ue`yxyw0iBY91H=zBXH+2{j%(6pGq3sA z1XtU0v_nlaamxgnxnQR!Q68ZtUO_h*CoY=bvDiljf1tR|jH%9C66G$|N64X-4!F>0 z>p%|9fI5V>!Uc&KyB z!+X4vKIcu|u49^(`K~g-7Hmb-m(YwTJoxRH(c_c2N@5z$XdT_^tv3?vDO!n zF3#o_RvsJsuxgFNNSHyS_udDT*ZBjF7ya`wAIPdB=VX^qIB7ag{gpwWYH6~y!QSGz zWHe#Kx1V(@8Mi}JJ5L=aB!T70Y#qP5*^D{%qFtI#ibk=x%`>%4qI+{tyS8?})i{|u zl|PV6G=F}bXg0%N)~{@FTM7#5E-@g>E7$Qz`K<)KaH~Vds&Cpk(6j+Et*r~BVd2{d zZ&7KpbUf9S@K@d$uwg{f;5*|5dKT?i@17HsB|L)#tWXf6zs4{asH6S2>9K7S^_0PZs-@<9+xrF0l>t9|F# z$vc)0<6%|*Zsk94t~py?{_OqEQ5HWf5PhW_yF4GE*JuNbi0mwEag1GJwrHJuLe~nA z_v@@MWpVQ$-@q^Jy}71+I5laZcj#Ugu*GWc`C!~darEO5ld&A;#vj;SG#TSr)46gq z3)kg|Ub~M)Ya0P-x?Py@GE_1zIK4XElvCpo($dyerWXQNwpA&&g0j=?VbgVX7@TQdq;HH zFUwf-k((=hHlqF?2=0k$$6H_1_B{P2!}pm5tT8jg7W0cN$1D-4^?5)sgP6OOiq+q) z7gH1Rw{WqaD`Bh0I3jW4My=I}wA}A@Xqyy$x#DNGaX=8B%k6D2oqb&G8jB5?sqD!| z`gsdW1Q$Bf_ya#;_Ir~xT%SWvNZ{y&eR@O19(%f%7=j3{b+T^6C3>N_zyCBEkEfG0 zFLm+a=+&gvxow-{ogy6&J+#>Lxo>Szd3<{e9J{wE;i?IOGZ-pu-;)s#f0nugR+_}G z1_sY+)k=#aR{6$*nKtY_TjBGQaLgxq))8lELdFhJcU9mq4nqN26;E6m79$Jr38m*U3V5cF6_TQfOs1DXrhFpVh^bH^; z3k_Gi5;Q9-KQpwRW_?!F%dzh-lOeJc%g%HqEqd)<6d6}{Ugh1E{)YS?{ys8|x?XNV zW2FmT-C74{)*7o)wd}OduZP$1n!iR;=X5xhnNWZ_Os_qw&a`o&Y);WUx^V@M@gRQe z(fwtT{p0FPyUpdoF#ZY7hd_hU zfJ_aP282XNrBM<>nZEzy|Mq!v);cdv+56u2b^Wfhw!ItH{4+!9^_K1IQ3Hp>PfJex z&M%9}&FQ5R!o%b>dXeqMy9ZkbtaIXlT^;l9mvjMQkEjK@?I|&N4(_lk@@zsQo3W>M zUL|5*2O3mulyS?sJVIV&F|ea*Cu1*w{;S&etfv+8^am~uwchS}T*aTxdl?OU(ZlrZ z{#NdJT(6FJ9mK=z8dEguXz#%W#hjXSKTL_7TuOt|g~SW^O!@RYHprwAcNA#BI8`*t z2}}vEnRmZDCQNbuC5yGgT&Y8DJK?BSJ<4xRnix>*MeIx1Rswnh&0jS%%KGmve@fP@ z@VvNVkMJxw&h>Q2mL3g}uDInhRXh3S#zZcCsS0i1k1|}buFE?uf!9B9)ETCVwTC8w zZzj)1d?X=YHCZD<3CBu@VOriypB1olm8JScVV&Es)F_>X@CoI!$20);y^7V8l56$5 zr@&?NnJCXg3lM_w`qxRw*OvW>S^EPw+0k3}&qxOZ`*B#qB=cQFmE9`3LQiX4CY{f- z_|BDPJkBVIYaPy!`?QnZWJ6Q{3NUu{+;wi&qE@=T_mH(HZ{(RPr^ON78t3K#acZ4^ zw`Glg9t(|*soN>=Cqkm}G}*fH;b(2%GxMT>TYtFRj$=QowtJIDb>2R_kwM7aQa5K_ z)$$C)&Z};MaZ$u2{j?Xv@X`^ep$ zp6qX@D)rJ%AN_`? zo_BAwb#H(#vr7J$AFX?XdkPFXmQHZ?yr3qYwE;* zx7XWJ6-NM>b`L%0wX0v3;v%E4-M#Hqmz-*kxLMNMZL5{-M_Vik+@ zs1KqGc7f>|A<&gZrf6T>+IFY+9Bg<_CBB{;F;N+~!~IMTtUu7nk*f=ox#zQZCMh%z zk@~#r&{D5+m;>w0wdGpDzG18Tg9lW|bmF%83mBE!4KyNcMt)xgq zXa5||N5nC#+q=)vs(dG+gxtl^6wZ?3+hxr zZ9R_pLSKv02oN(~t{>W)kTTBz1cfJ1p1qZ-H(aMh>nfq%OBvrVgwQvDSf5MO;Qhjd zxjEPMU-c`mjay#9i#Dk=#@;x);G1<)3ES-@b=vI#LPI)Tyl8o|H*LQvw_*m6yE0AD zz`B=-oLot_+h{C*t*~}$ad*Plj=FbGEIM5IMph;<5@4l2@C>M%F`GQRpYfopBWeS+ z$=r|AJA;TS>UDHjn}17(*`~|a2Kpg2F#aOs@%S`WHb(EmOs*IFpgz26s7%Y*+^-_{JM zrO)@O3i)57I@<*kIBT@W=Cs8!zbzq-`xXzd7V1AFNFYc znD~?BNt~mZ04AQZy>CLf~0KGR|)amptlQcVAAjs=2 z|3H*3I{A6G3r>R9UyrGGm4ABe)y>xEweaH36^smrgttqBCs=(@t!6Mk=aUX0@b@Gp z`9tzzCY8fuIV_RaT4`dZ!n-s`)3~;|2m1Zkza)cS^=+)txAj_w{`lbbu#C}KMxLq( z_=zjGwBFKPaZ)%8C$CCH%dNu8g@pFIctx&UMz2;yxM^NBUp&{usXTs_5Q4eC-N#!% zy4M$qPdIEco=87Uu6|aTV4Ugf1e}6d%axj9H}l34A#)3-Bk{>By5_lbR|j_^YHi@! zKHQVay|rAQ3sl0-*+mJ;ySciU096oER;%JTuGq&zqJ#Y82F#LnKJB3gu_ z0Z|uf`wrYzSL68jY{RSGN~|F+a>Upbr*dF7L|O|fxB0@BrAi4M^1Kc0crw^2#_haZ zi~+Hk>cUU_HN^(P3VimoyLb5IN?2zGu;}1hm9LT3{FxM4eip3Fr_t%EOXj)i=B(Hr zV>Vm6C*wU5-v{BOTzwP95wEltcnycI=M3wL^a^o}7+nWbYy3>H0(e2vbmTe?9RGos z&>z3Xk`~qk;{IW#AfIoprrcbrd%x3-4yJIDO zb@5}+kr{s7m)Vvs>smY4JCSlakG|BlyV(N2uA~mfo!iXfh#D~KGJd1ow{09kMvtunom(v}JY=rXckZh>i9P~#hLyI&vYlTK2R+$;@Ku$! z4^dsx?e^BhXZ?ERW4{Aps~f)r;v<;aw4@~K55aH(obstVtI~hq$~}nZr^9X{R2zX z=dt*uRIq0@I*Ut7+VJwLa(Pjmfknn(@qzi~B-Bliydl7lovgk4v~DNebn(3ieyE-& zSm#}8Y8wJ`bpJc)(bWV+>uv=#NWAFhO?S4h^A^hs!W zf48h|*~6xE+(Nj`yVI{H9g8}Bb9%@s&J)~krdMnDcg1_?v>laAR+Bs zB?iu#rQ)?&*?^#T^c=(&9-PZeCs!dxv32b%r+nz(fC zsC0YMLld%WxOzDvT2-+A<>|sjb7dp?e;^mD;g#*qPs^uA+_jpErCzD*8Kyo?Nb`^OlS=P*qpug!M12H z9HD$R)oGFFRoPEjb})?vR_O3F{|@r>19cQO$v!pT+h#ZYB3D>Ow)Zj0(!4r zcRXk3wMDDlpxO-m)3H*!8jZOnIvgf?6UHYpZZxM?r?M^fgKW3xcE`^Jb|#nM9WBPT z{AyRuVIxKFro%Nkt8Hd-)=($4yVdH}8@kaI>u&M>&Db*;s9KyH zZ{;i>a9rnTrw1QdfLSY9K;>n-UL0rAN=SO{qGPMOXzVWPrCHb}KQ>p5z~fY{=(t%= zx$UP2>{?rRU)!&ThPKtHTTCC`bfjYBqLA$#nt*+FoP$0AJ2z$Z0>pI6olbvuOS zs-e`?)Q8r4l%FbFd()LKyS@8M-M1UuQx>pLF?=C|FZxBQoXI#Tw|dN2INQd9-z^_x z6JDL=kH;)eA2(b>zB-z0LI*#**md#;f}%37WG=qWQMpw=36D8=7Y7N~&}w46r*)xq zN8641enPz)Komp7w(MK+T*;t{u<*A8dBra2a*+)jh^Jw+rampb_ngRm#+jo%_i$Z2H>XoV&BSeteFud>4&fzQ3A zqu)swUdnb%-C-z1TNAe*)~ni}PMp?i(7)FGW*=z$b7X^|vPpmM1gl;py6=a=y>q0w zLT@ZAwOi2h<*2d}zBco25(wG!(|Fp8ultp|eS3QU-$lTfah%8CEITxVdffwer!!W4 zw`%`RnSvZ=O8myMEaT&ES1Mb?6KrOv70mT0tM26POs>`Gsw^18IB6Y*%ymD;u_{_O zscxh$<7d@(<7DJ5dd;O`UN$t4lGD-Qo6KY-R86+?uA)U8p~mX-BiPM-+ZyaI-wlOr znbAT@3&QLztQn3p_cKbo-PkwAEt-w>!s9Q>`=o~ryG_0%oo{}sj^>ylHFN8hTkh5h zFv6Z87Ag1hkjw_l7V{=>1tESqHh$eJ^ujkpu$Qt2snw!q$GJ1fYpQ^6X)#uMt%fXTbYCIsbPa8~{j(cZy1g-@BfFhI9;4J7Z98Z)SZEe!^q@b` z(D2Jr>~yy1(TrGl&Xvw{dc9qL$F`ESxJvx8CV*mXZsKKwX*2J)q}aSqdD{y_jBGy8 zHMGPsW~%LfdI(Dth|@uG{W1S-{JGV&(Q#Wl>pOg@ z2ZNSB?~SfAYPw60_pLI!2efLD3^i@mV~}rtFT4v}xi(V2P4e(bWs7qITK4cqS8p2B zWKvV+4%{jCe-L4uA2$e(vVS+`+&?*z-6H77E}ZN1EL*ASifZKrzjqae_h-oQF!^Y0 zf;*UKFg=IPE*qR%OW^eE{F3MpzO{;X&`-OQQ5)Lij>~vUZgXudZ=>tlNcjfx>q@8h z@`krLrt1-|AEwclYNEoonRd-AfQZo@82B8<(r65Ry1!<%*kr9oOX%j zXzP{8{wCF+oi{;YksP;DkEhgg&2}es@O3Hvz;+3?1n<~j6=164rztpwWBGzVwF&ax zuV?S?pea|Hz1dB;b!JNFy<07(@iL!YVfPZ^Or{-U_L$|*hI(YSQxWSSw1S^s2s}3?zSy73pKD)Kvg;lKEhpPl_y6*kRr^;YizW#v(s_a@e>bH|{xtxkr z#c}O}HnE-yHdw0y0ajwk(koNdLsdUbW<8)SA3rik9tn4<-Q#pIZV+H;537Eq$z6vQ z$1ly)mLlHSIf9DPBWl&C{YDuMgS(J?3W8CI?W!e%l+*hjEkF=#3caRR_otQ*-tKUn zc$L;IA{0QjPBc)z3oyB;_gHQ_3@5}S=ZIP5L%sXn9Htxhr@PXGN*~(Tr1YaZ`IUoK zgk2RS3~+tW-yTH1rheld4`5S0X>BHdp#0wRT+8(>ov_o(FN02NumhMXbfjziu(n22D;V^% zVN*Ts^K(KZDXMxCN^R_zFVtx~+?}k%;SH5OF9-Y#&>xQt#}3SWD6&8IwzE9+?ZYF5 zl`~jGHf%#;!(Sqo=`-%!ifMKHGt;tJjgmYMflYDpj-f1ND|K}_)#gPaT#qDki+J(( zlp~;ft=Na`SU>*MGIG{Xp?hHIwS;~nTyVdV;Po926Y52ZpXb4LQQDKI(|4a1FGHHJ zTywq)OBr#gmvdn@G9%Y)X|QpfyfmN6;EmtO*He(&Uu;PaucIS`N zKzZF;PpYv~0;G=aKhDE?iKO@kp55b)&~3MeS=hS7nwvaQ8o~=++&{r+69q^~%o^K(nH%DF!8(1LT&6K0G zSYC%SjA`lPhWCb1A(A~+S^>)Xy}z1o=$g_-^~d}i9%K9U#tXeAlS*qK^Z;MzmBm+b zMw5vdZz_lF?EKjv%y+wqW~1S+qfhyE{9x|SgnseR<+P$tU;|F9P%TfhX1?sXaYgzv zQ4_wOAsSlzc+9&RX@j5Kzo++p8hhQ1?AFRnK6H$C8Mi2Hl64-_gQHXy-Tgt}?6I_t zo6J!TX;zcEvFe5LiSa5=XcH#I_9N`AMYDeqZpfni*7uV~Vz2(d#em-R?iZ^0Tn$ms z7hhl+CPZe&?Pic|JEm<{g!agHWvrQaXaq8 z`b9l_b15knmUDp7bRSXRZGl1i=2eR!n7;nN3_`am&<^KA%Bu|q1Ld;AW^SjR?5e95 zG#mI0v{*-j+W2{j^YlALhh&hNXTo`^ua)+u8Km^xT9UQH`fRyG7_0M5P?>$RG#yT! znK2i}+~GH4Aq|d7+VS%qWVnbscS88@C6*q8p|!k2t!G z{{A?F>(DWgR{Emb>-3Ogiq;pe&&&dD_p7d$zG8outDsqb{}?9Nvh9jFT#B1ay;V2` z$WK~DP^OE*^J-ogGkL&ng$$X^(&2pEeszDGEZ52Bg2X=xT->Uo`}pfG>UK!z)Jv|Q(n~l={t!w!^@QG3B zS?cEv_Oiw{7XJ7OfHfJ_{o=-!ox|Nv{ohK?RPb_hor78nIJgSNjFf#Qr+Hy6syua= z#~nRm4gpt{MV(&2z~@Q}Z4n{5dTYm4lsv5Aw-fyCT<-q0hF!vKovMUVdCi^XI>U5! z?MV;Qe@UEV*>$+|-W}H8BGRBS{mx<>qpRj;{q@eD#;CH^_E40N8KqY)BSczwl{Y>< zTyZ_?=dQ6L@<>Lu^o*N+cF_dd#ictt8l+wyz-F`O{k{Qy{_@Qw_6&s8*Zd_(W{-cr z*ZL551pi};LveQT^Rd{TyLa@6fxX;6R5uA4xhZ-mYSFB~#N90tGjD1iHl6g^ZI)k) zX6x}X#q#oa0sUw0e4{@Q<52G~5X@#H@{S$6vDU}!ust7SqW9^Y$!6IR3|_!{ZR4$L z*GktfWycb8RmiAxHpg3Xx~C(fD9T*btG1F77Qy<3JlD7jaJa8+8rnP=`S+GtoR>l` z#j-`?#Pb)yzaZ2RCPqg90kG3#MRLL|-|_O!N8lDd6085xO`>ze0CN%>;^JXW+@$%Hl(pu$yx?D6|-yMH@~xXR%86nx+^WEFL(Jq9$>v38I3Y#ZJ1)xIh8 z%!#F+!gT*y5ha^#IDysdXq}UoKtCxmUH#2*^=-h3MYY-SRc!quI(qbm2CXkhxNTiBy-(~Md~vM}=gp`C`rgJvl5syb%uz7zz(jICXvXt;%(pFmcx>?VTS~bh*kIvodY}8%t z)Jlg(&u3c9`6a>LQ(y{0{HH5xJiYg}m2{BuE0CK_Yczm&it+sO2ObiTR5JX<4KCXj zJXYl$MS0C6I)wA-y;*k%{^#GyA+Xo`^-0XEpn=(JC$F~iajn^d`$hFhUX1H{mXfPm zCG%MCWPoXQHn4#YcBswp2XTKOcnwFx(<^GZOAupy=?!VHBdahsDw-(!%h5HeQ<~1Y zwK{yX<LHFc%rPwU0R*O3BKSH>i5x|-LbUQ z3vV~eI?^9Fm?VKZMBC@pTKJ&(p8u4;!04$Dg_YlkPy7Bg5UtBGmDGFt8@EPzkAl#V znT3!`Kb%fW?dZv%E!^iqyLzo)rJBBb;p>mV1aVXOTBZ*lez}s3B3*2RWKs@le)oRj z)Vf|xJeph0oaC2ED<7{4@7(95f}{P~tDOGG^_Pz>(<5-cFIvL6B2V_$D$^cvp!aDW zhr2;bV8*5LyQJKwpi9&i@QW~yMPEt3eZoi$sI7G*1Q~R;% zT0sZq3`g6I1}crGa(j~jJD)54Z0|UlJbfLv14GirW(ADIhr@)J^0&cLW8~T?JULpDe`!0 zZ+2CA?hmPzo(A>7&X8{dv;)79O)HqbcK9Dic79=Qyqe(qfs_ou>C?9;v_7bG8gTSI zV)baiw2+R~V8*ky3i0c6vt+fdf!vINa_2?J6XphKK1tk<`gph61V?zS0TdM;q`+D> zZLK9TzZvU0YJ@h05li(aTX%>Qy1<7M%Xu!@Xh%u3H_N*^uxc{sx>k#-#f&fMn=~AP z-GfFn`oK#(ir?}aoA-_ztx4aSe9Q1gm zavw0q3eF5FDRv9T@fm|ISZ215)zBJ++c!TA^|kYK4Z&)HS+G*>1L43h*ENwz)L!sh zB;oNPI^tShw#P|@@P0bR{wh1Ksp`S3rIkv%a3ILo_g;*0t}NB1p?q@<+CLyr?|)v% zsNm0gaX$F=lo8h*o2_>gWaXCB6YHDnR>A7<8Gk=z;_SFjq_WIE$-!Cee=a6^llsAG z9FcW<{tZr(`+ML_YSl+gm_OgtcX-_eVmurdsc?`EQ|TBPO=q|4z|tAk^huq}ZxFBbZ3rjxgyBPnMj+PCyeo zb4;f+8txec)cPZU-hM&r$}u$Vy_H}E#Q`$<_R2$ zpe4iMwqTiFKoX0O{@E=ri+jUv6mcYVIv{1mGiXTInFH3BSAf{F@+E)v0Je%`A&kdd z{XXhyW#EEJi}7zPA3~nhzK8CL0we(_$Dipt(E$Sn&}HiuNS(IaQE&G&9WAHrM)|tm z14>D`Hjwg~!Vx+V*R2p~hn+|FI&4*Mr{VV!OF&m-_>Czw5dh6QKZaSRl@gUd>4#AP zHemUJ6|el@U&u^4i{Jo6A#1KTPXXN7ftM!|!Lgj6VZ{rP*=7j#=)u2JIg>?*1q=uD z=aWU}H62}-`%3THtKH0^zN8T5x5nniMbMVBxzYPt(;3alO}N^Ztd&rDGy^Q^9x7@d zMd40K0bx@ZvmVY?=BySza^Y~7m(z|=>vWazq~O`%=l*ivwQ%f-^*UPlz!ucGRo6eS zoDLAag54dq&U9F~h3;9^I(QV>wjZ{4f#=Emv^sd>UpOn;AUnB{lM-8Y@2$^v?z-#R zRnQohF7==lH;$h7*S$L{uV>hudDYq`0bF^y%`Znrx9+hbKVE>34IEcDo% zoo4&{KoX>=A-4WNu3Pupm^*iCT>Wyu{Y#^}(w04TG3;5N+b{PtaHv+2jJt8mY89y2 zhf}apFrsQsBsiFU&!d_-oy$ShVj1^93SuWIJw;wA=d*h5Q$hEv{E~RRe`*lNR0c&} z3MQ*NI}ZFsesLHfd1;a-w0QZbm{~-9vPG3@@5fRTwylM@GI8O$ug3Wnby~g%8_}Ry z)^Yesl@@lnB!`SRYuS_x9om;aFx>HFaexWwTO($4f7-^*(lQi`Mgt$tvBz{p&L|t0 z((RY;49cp}f_B#)qjc%Tx)+RbGIeMBo_@fLa{pMs)P1{J2|QP0S95F7o=!Yb8A87- zCVhTH-2Ge%Za!P=!z+0Ng|*A{Uc+`jgb98$jqV$^7Wj|j)t`~dHY|DGVTn}EMYq0D zbZkE_kM6>KH$5(~A=d$*h+wV{S1(QVjeXr6_TsN!YF4Rtsi}}iflrKTyX3q7SaVlM zG8@#TYD;-1qM!}l7NA2fz9`3!%u&uRyWGV3+tc$#GrQRSZSWe%|c@vxUi}( zJT!zCXG5Hc32b9wQ}r~kQMw>X#j3t<%64*z^j=f%zV|4nh9kAA%JlRFk;tKVe>T!{Be}-? z0k6|Vt9?-nZ|jjN_+vgiL4V0&Fh!3;Iy=aXQE{!`9P(SQ(m}gqFU3TJ7_JD#DMa^_ zx>!V4#=wjr(7g~thHTXKNp*#;AJPTh?gXF78{<_)I>A%%=Jfnl#mi40MBfb?zqeop ztI(QzcI4Tukrm|oTh{iq2r?80HP{IqwJ&$b;%+CcRH_;a*+KT!?K&gSrxuT^d_aa= zN)mfiVS0O~m%n=qYVj@L(m<3MFgD9=^6{IoA4gVSS^c(t?X9zFl#$J=ZM;t7yqfm` z=Z*wuV;4iu)iscYO0TvK@N6GI&*i+HHS1N-nJ$o0xlH+!Za6H4)dl{YR+wU*i0uaE z1MEpRhu9yeyWCJ6`Nhs^+E)fzD%4eZcI0<$cX-I;@lH&u%3(D)iA#S|HpOPSb7T1q z#ZQ{}#_)l4TiS8$SIs1<)%!RS&h(Q=?&w^sfhNLMe19U9e#(!q{Jg}JJ{3&5Q3$eE z_9(jMPfAJ7IP)zseNws>(uI%1#>Ln8IlV}d3@QFz5WZTun0L! ztlfeeQp!_2$1R}i;k6(2?FJf1tdv>L7;(6-+@kGa${tF)s8yk!SOA|XYT^w0yt!I7 z=KvkEqvNea)y=fY?Q_lz$QBzzw-GzPq{DHYiri`AMFZGozHWi#s!*HVqF-HDK|0hg zyA43@tINmQ^#1)P?na7_p{}tb;6Znh{id!}j^`2op3pbtp)L>iTvCe8N^PBH{Ubu2 zO#C^Pl^f?m`3~78C%UWl?8zO!Hk{iT`PF3re`TSrUpJ{5R(o71>%n;7v)0!Rpcq|E znsU&Hb`4=bdT>wQ#6sh-A8-S)M|duDuimC3MK1TX?c@5^%@nFy+xjo}k?rO=I)V+0 z$1DEy_m&~14(VfWdhm80QMGboz$*LX=+js^{iyJwBTj0yp@<`H{ENI zute%r#@)}iPv4!of##`A>x zy^A5dJsqgz<1>}`e<1&U8UyQSq4f1OhuaGt!+u^YQ8I&s&qnhk3Q28NdMJRnTt?J2 z)kZS3yvtb6x2`GpecwWn&tuDay&p7-3y%IW@&Xj6^c0;m|z9+Z3{0O_fKH{HVx0($rz14g!Rw~b_XU`KhZp3W4QO?fyyZG*JH>Ggb zWxK#|9nc3f#CLuSQ=axvW*R3qgfC!`!`tkXIAZ7DEt&mpWXMSw>Zs4Mh23x{Kwz%k z$gQX*oY~Fh@?rJub8txO0@RRL^r%14uEci_qZXN<{uCXLbQ73j^jiJ)8eo{u_Mc|& z`%U%v3^`rl>8kq&x-BP)YvTIQPb0x>0FM&JUBLR;N_N^99geRmR`h>4wB{rCO=mL0 zYnmY?C%n;Uck9|u!?9jtsL{1xmCRqC<-=$b7J}iK1g@LH@dyH|?QbmoP#E_Jxd_-w zogFiMu0i3vr)T5+9TfrAEd4sh!iYgCHY`v@9{3qZ5<->Rb^YM@&1h?;q zg(rE@awenGJ6zghMZ04u$ri1X9d}skwAL0hkqTfnxwhF8oc9sKn(jHm2(FyMkvwpJ+mm^mf&&az?4A^pip?44;YC9v) z=g4m$oAMDF){IrYO;lkdk;T1QgI0Ny0P?Z~ovG5l47O7r_15m+E;8Fy zo2C2N-tV;|QA}UG?GO7S)c^{Pw^EThzyhe9P_ch*D-89qb-u zJWn&K(!UbL>%QM3qZ8%ByfOGGOy=+q8J7ynN%qoIU1~=zY(N!k+oZB|lC#f~KKo=- zXZV^fNC}lorMoc(8sD+bZcdM){j>VE^(gnt<=*;;&K@P^wXDC7qb=R~Vp*a(f%dCD zc3Znz*KV%kNk4w^P6xyt^S#o2+pxUFmU{5Z<7G<(D}TTG%~wU!c2M{Gc(8g7ZFu*h zY=Cbc$_|y1U{Cow8$u&V?`vi&h^@+{%XHBnC->-LX?8s|28a#3>jKa@YjaItD|Wb1 zqgm~fB$eN`cTd=F-|a4Re?%A|85O>Ns+e7R`{=S!#!Ze+kPhN{Sm$rPbOvxV*M$oI&j-xA$i}G?t7?x(r96MJYr8#d12479(wbq z@{rpiGXGi5J}KTzQD)COhP?WvCe|QIQICsH@d!j_jnYU3{NEY_CRvcNI8Y)LXZ;qp zMbEp~U#jBH74R(f^T|nTO)PCUfm|$A&=r*Yel!MdKb>JgK*TPUTz%q1qziR-&hv;6 z^!`$VG;H!%zUwZrK#lwl4DLEW!Zc|0cjf3KRy&PjkVn(I9?Of-X?8e1VrI*v&;?<% z7hb6`e!Fo>E#aFnTO-FZNEMG%uvodeblRM3*G!L<0%+D+p=OyT}x7Ws`L1h2cj;m)Ig1 zNCek8zf*n+vx4(H#m{pdvEJitlYb0fVz<34^=+q8l#VYsWyQ0zs#kzOi;m(8>>8qQ zSr{;~DQLGn65H7E`BkcSsk|r}^k+20V$>=X!^whfxtnbp%zw=9Z5~(V(nZ?rPOcWU zq0t_e;A<@j8jnbLHy8ZNy{PY6%oZLd${(WDsFp&!+9Q9LsJ(JaDJ!;ji zoFPhGb2W>y%Ff@exvfddKT_fvbsipYD5@aW+9pC1{@sr!P0Qv*i5MN}Tudn3ROb}h z$o(r!9UhBGZ^$m8{dTe1b{@2e;EKX_-c5yR#+J%yjhLR))hM{Kq9^O3jsia&gBAem zOx5EXe%`soGZ3RV8C>JJoOJa0elhcoCmPSV9o?vPhn1)+55bA#nt?3)2FL8|#aLX0 zoHkwz0Pf&^$<YRp^y zXFt=J{vViPlsC_ zo9w}67rP#@q>(2{z=&hyJSh&<*(m3TUkb^km^262x`Xk_zyZ9szH6x|>t zZFYD*HqN`VaLj3GbpZ;+qVd6cK^tIR{jB7qJwWD}x5^I#Wilj~CRB#0N%=QpWx9fU z%jrC->%7w%?IU69qQ}#YrO~2iNqLj9jOhwA__OJT+Z??bZePTX+kNxjRXPTKJhv8a z#+eKsG4kvEb{&w%STb2shz;=L<+ z;ukF~km>Yoo$+~3YdU#m&3Im!7B zyJ}I0pS@wadG*lCTJBf-+D1An^MTa`29lc?pFu#@>uZ5Dmv3q%e*eIeYRVl!n#GIt zQpBw_YDkyvXx!3<2lPETDpcIGt`<5u)?VkSgGZx_)G*nN03%#s9%2MSm`l8!qI^ZM zEBALyT@gTxT*wzX)4|q#3bK^`fic{V&-;B|nIFqs^-K(&i1 zXRFr+F?L};df~<6fpGVBuj`#MRRbQ!<1H?B{#t-LdsHnd*d+4GaGB=z9CGSU&%y64 zyK5yVQbz8TAw*i%SJG%~H0APrGZWSY<;^yfGVJ)@(l)=(inl0i%n{Xf*cb4gI7;1j17?UHtcs2uZ)1l)Zsh%EsOB*?l=H+7IQNpTw z>$5kN`&obYD*sV*ChDd_Q2>5|^AKntB}$?q4H60!X%L~oOyT`+_W=&}+Iy|_|6ixI zzt{4ZfyYHnRu%lpz2|UeWXBx*?mwRfpdNbq^*;OZ4_`;8`E46->w%Db7F@G&_1-Ck zoSa88ED2E23V|SNFC8TtKN{gY#~eO6Tt=7IlRc*FL1Cu&cJl{THo<3KZU6zu)Z@~( zT75mfwKp%>jcfD&MLG$^i2>QIurylHPuO+c?>QGNNA2d}Je-c=jjJ!)>Ew#-w$-|J zJT3udG9vol#20(wmDV~#)&B#Ro8|ji9>ZW09n$3FF1xQEJb4Z>xHg^{YrYd&Pfipu zb6_dWP`?H++M}Bm00omCgVLKb3*i*v&y{HT&Ny9kdD}_LD`H`zla>u^Vl0oVW8|HYi(7 zBK{FGpLy-f9lGf@smhc4{;UqtDhJp3NDq+3yR;i>^u47#*7Oz zCjIbg@T7{q4}=}Jx=lWG6F0bN3d|bZ{dc)Guk&_)&M+VCTW>PkC9iI*N?*J8M^L14 zqX@eSFe^q-eQ6)Z`|9M}xLM)Pq~@KYt<0q2sJ4gb3TDptckwOR3&k~cd#6dH-Lp3J z(Yt*#+Q7)Po83# zzr-W1RgT7snJ(k1rwxMonhI8xgZJ5@^zhdU{=ZTDwBP(=XmzaNxS40Od%WfTN35Lg zfc1`!I5>$$J7@U*IF!t(RHJ^nzNn6|Zc6>Nd;4S6A^`K*3j`8%;kIC{+ff%@A$A8@=w$USG;I6?@^aoX5Nt)_-<_)tOH7u|J zb-`Ob1pb<80R4FQ@WV)Lz;~==M-tJ&2{{XXb!&GY!h9VUoLn((mu7NrmN|UAVu8}z zYcHauREw9s3k=uHb;TekDq!Pi&K>gW3DJ`7X;Cj)57TdK=ZAScZLG6n`I*Mi`pFKN zqU*4sPk-3d_N0eW_oD^K+LEYDe99Cq_IoTTg)q5kM!v z%g&u@X`QH<}d-&Ncu&Ky3%hJ7cvH<}Bv=m!HB0}hfmoHUWcX{-wj*?ckO?^1lt zx|5>9G(r>KC@Z)>d~U28+HcVKiTFCxnSF2Xq!2V_z;o3h-F@}#9a-k3QNDhXP#a0OpPqnhOLap2Vv;RJ$U~*@5^!RIb$2%zVOQ0B57oheO(^z63my`&+^Qd z)4t7+`%5o7`<>riS~b0*J%f8^XzV}nxbxUj;c-digfA_Q`}TaHo%xo61+97f9icCz z(7XDY>5svVFticN{sYbMTyLA^E*p&cV`4$n<2%j&LV#}d$pwzN`_mKOSH+E5&Kj2s zAPgcZoFj8CFw*qKo_3U5UYDPvnw=`1`pX?nrn&aVT4bhIM)6yah;wt?A+>^i`8afo=H@_Ix1MEh59d< zz2a~Cx&mvgjy@7QnE>Euh?Qx%JflK>Ku#D4({J(=jrOL-@L{PY_F=Rv(G%SDB; zucKa5ZC^S%Ki;<7HztDhx`_)eYJf7(s zQQ&P>nwL?o-+%tBSyk`%A}gyzLe+~}_O3mE1!6P0Rx%P(SL#A~hS+X%C`)hgbiU>OZD*MOXFvfF!?_2uJF`7aZ^ zZqv={({!gox%E!IWjhS}<>6^v9U>DzFT3ZhT00zApE;0m2_g{`C;?fXxA%o^h6=fV z14-$+CcYEE!xkz`<Dl)M_*DJo#a~3?2bi+t76uQD`5U3mi=<*YoW$z`-s055o-Y1o2Ak*)U)9RSEY={ z&m%=Gi|BFA&k+%NyX-Vs&PHLmg|@r1j~|qL$rEEw=7RO zktMEM$#HOZZ`=O%{Nnz=cDhBf&0&(Oo%Oi|kmx-g@GnpAE$vF5wO3#A6cfBSW)3)w zZkOtIRV5oIcff(qDm)SU^jhg&(H<6e&z;GHOkj+ za^rbt;Fs@eZQZ&7tl5F3u)pZfo7t!_Zg{A(8&z86Z-CN0R9q-SX3g`}x{mmJXx-_3 zvCYly;BmvjdR=>Vd~K)d;V=l z>$dE_YYAV@0|Wy~*k^Ll>l@V%%`OS_zeqRovB8Y%u%pr=kDsb;qlp&{Isa5pV_TzL#P&m%Jt2SpVoM zj1T)7lyzqBW52xkKIp>us2{RQ8qq^k2Q&~i-2zJdOlpsyTfbq zJd7G5s*39Fqls6uNx3N4nl9z_p`LuAjzd0Nlt zZEYQk#afg-8?mG{b~FDhbPo9O{av|CZI!o`3kn*bGjF(yiL4!0LBtUa@-<~+ll_wN ze0CUPng4Ewn#xY(){qYv3tNR> z+Ir0v+sy^-y|B9j6eeC0^t}%-b!>q2foOd<39NxEEQ0`Ou+Innpuv9dv~#|hEzR(D zwF!HyylxNw<({X~I={w%{h$YxFDxD-cjBZyeEYjFMPi-Q{5PSh0`~tY54j!rq6ADq zboVATh}PT@a+}=><=487^=ux?O$yPEApGpjvf#d4s`ZD06YWJQRF+)qdwBpY&X>(P za+=I1Mz(lM8fd;}^5?r0&+j-*MRrgHUrzT0N+AD$Pck z{@^m%;e`%wU?pn~X2ACUG_HextKV?C+)Eo~Nx1LC|BsleqXB|YEsM1#I9|d!c@My<;GZO%#Oi&O^bO^$H2{?w7LN{nIF`}bu+8s?D^C} z(Y^k2_2**UD7P2-l229IrhvoE0dA<4?9KIXK0IdlC5JXm5ULy5>_%Uv3p6?}N<8IQwH=Pqp9 z$H!va)-WK5U;Tw-)dv7|2xrH_k*S;y@ol??F+3kit%DU0#e4jq=dff5*BHwhY6*QhD&36Y@M#C7~Z?|e`Shl5|x;Tr__Iz=@@sjYapCVr_ zr)My}9Xd`mBh_;ESp~<^u+IMTUD~m|a zK_za!K6`bBT83jv8A7doJvb**t~n8P=CVnE8v_f^q<2T|=1DSsb@JpsmDj@`V3-A* zl3uUdY2oWXkRW4w{=Ak!%xI6_Mzok{(Wuhw9;a({)>gC2roa64$z4nKy60_&%bnb} zp5)qSJy^MKx3%+UchsXrmw$!c`j}zz#9lu1Yk9FGh|b~;mW;w)8xMhiEo{nq?OG@6 z6j^3IS&?TF)0&NIS0cSkt%Ml9;?U_`f?MVF%Gg;Sc6!~O)}HwOb{Tefivy;((?c8W zD|@T3A04Y5judh++zH)sy+5$PYo~=P;PeB%K;4y|wbv7JsQ7eg1_vz+sNPA`=iTOD zy14rS^HqTQ$oau$GHoHaHa?ua0oz7*N`<9{d?yQENKd+jTy|}Yyo%tG7jIEi{xk=Z zdV*$wMly09*_Uut_2L!m^RNaOkb1zRf@2@cZKKk)%Vy_ z6=^Zt8n(La9%XC!EJI@3ciX2@ce+jJi68|0nL)eO5e@2ZH1L@5EHr?%mKMcrtf-o^ zlWNs(;bOj*B)@i9Enk```pAdn1NwVgc(tE5N2|?tEEW~ks_r_Pcuy_}mG11adVptr z-*sCTWaeeH*+|gP;p@Tb&)#llTyLLRINZ&uL*P;egXvrO|G%TFsdds%tq=F=)5+|O zvu5pH+i0u)uT1R1yzy9WZ?h$NdUT>~RO1d{y5}!GwWcp&0o|avb64k!ecGD+pyM5X zRh_J&+;h+~&w9sDUXk7_I2l+t?f0dr#BOle)~Wu%`Zf^i|FpE-lOs=sHoiUZ+Md!H z`!xsfq7@8qerGI|jkWw!sS#h7mQO1i0yZ7TYdz?Qy#ig2+HO0y?b?Cb@yo6%3&Y}?2ap^e+!YL)BH7s&bg zO8`#gqVi|lt%C+tz4a!$4RkO$^;UGF%L(g-fM2%=3~T-NW%s)w!H1xS9YZcuWS1`3 z-6+cIV&R*Qm&HF4ox(@f#SE|UewqOc4}@Hj92?y`v%>%1!&?KfiCS6DU;RzdG#G<# zfeWzzIeO)K>?`yv5+hoGMl*pmm3)XQ)1g0jlzf0suEKW+m3!@1>Ht`5JjDY3PLuJy z!(J+tC^GPD##cXFBL0D8$X{BF=;hj5tJHpti5&p9+f(dhXj_bi5!5t@U|kxV6?Rd{ z=G~U<4fGRw*(lOx!VuDhnvjgg;Zv=9Mebmg{@t+AVY#7n!5URL{zllXKd|x{$}e+= z8=G{)Jb#i{m_qiMUv^^>m?ov=HZ=I>KE{`gncRAmdAmn;>CZRn$K^Cxd=P<^`i;i< z`dPKCJu^UV65=eS?!ChdDm^zm|Q>0m%IWcG_KV;Yvpv}AcD(JCiJ<&LCOkr;f|9Fbxdh_lZf(Tx10G> zdB5llom)3PR%F>WXU&OJdFZ*?R|lT`K_1mt&BD=AtvJcd?(1#?@zN%c$(u}}`uu3Y z@ioT@aW@_4@~PgvbiPa-g}x@=>SD(MtJ{BD-U0joMSwEizG8G{hYvbr{Lgf#fA?49q zDdlgADQnNe_@c4rf=kR&H;Jm#U^1;%%udg5a&pcqr>3>1}o$7uQklkYd9B8po(E$Ac=nwc`Pg>TfSO-Gcras} zswy(t{64M^EW7pdta;ykwp!xH#7H2Em-VW8b?JV`x|R!j1y7~2=;`?$ktVg#^;uUh zhn}l5x5u`15@sLu-LtLlby3ZlY2))-F<{z4~iK>n(PV zwa-<<{jWMKai9$UszvSt&A8hn9lWV!^o!G(86GtHdF^|iCC7NTSgpxEq2|y6nQhhq zz(?=*d2_mVQ5xRc=*R4-n`4Y$1cmAVjvf<8`U?9_G~^$BbzJ=Lp|zhB9oc=KC(pP) zVo&+nn}wq(rWoo+Qi=Oi*-@ZGSj1A-26~k~!f)j}mkOnHoO|Ud?_jmRd?@Q)ld6f5 zU8!tDa}KpnheF0D@Mg*%)nxl*UyCAQiRds9XDSI+Uq_df*R`i*x+6sRu`*vmWXgDj znJyPE3ZUEPSE@IDib0Z#4;&$T@x8MeuNgDET{QLfGMb*dhW)hGVv^Z7QG`JvHLv~Y zx1fs_IA@x>3DW}eYK7a*D>q7St)tMJJwh7Gnfp7z33nw&JByC`J2a|P0(T00>dkHp z^2cd+&|Oxx@K)OJ*<*i@tZiqIUwO-Kv+`&#tO@_`NZq)?c;;l>iMMNX36}RFa#Xy} zmQJ5Rh&A~AQQjj%EDhm7j|uzQ!q`US*Ce=th)VWyLg|x>O63)2AKH34n2y*-)9FN! zn5~zJWj>fXRPb1Dk3jC-h)bQ(U9hmtxF!AGSyxVV=y7A_)x!P#8jqgj=*UHv;YNI4Onpc^X2j8p@4Xnp)||HL{J&dp22gPPTgFf- z1Yd}s2!4}9tKS_KHL2R6L)m%-*NS&x0~E%EzCT|b~JPq_t` z(35oWiGocK(SC>h#jGEzwp2OwRWh|KzTF~k)pQ=@Z}o86-bZ8`ZVDqlUejR?j&Fro zWVbnTcbV1Z=Ea)Zt<5b(+aGV&O(40)ldzk)meBiQ$Iim5MPb-|WD{sCJW`Q{IKCH> zFx1}=-45K70Jc9QXV6=E-KC2D4G$dG`8*=OZ~cMK501pcEFZ$V?Q-PV_GIE+TwR@({ z2ES#}ypP}ipTGRD!>l!MuFd_D(r}_ulRL&+b8ji)vWClUg=77y|&1eg^ot4}^KoC@UZ;9nE zV-+n94JGpY7ul3r0=TPB?3lq{D&c%lt1j5e60_^=TW~{=Q-2HQvUt=+gY$wdzU9*g z1z9jJ>g3$6H=E>SN@oMg-4d0sw;Gns3Y4cxZB_+#O+UZ`T& z49UqE2rSYBl96jTojL{(u35r_CziU<`wx6n&RnUVG(iox>D;IjOVO9S?Sm6;yghze z(yhta!QIxTKVHL+v-gbett`ET>yEBxUrRhvH+4*LzhsX1G*R7FjN$uoX;kuL48KO5 z1EUU#zJCPA1O2+AhLW@pu$Y0TEb@Vp_-hRD@>`ni*TkF*acw?{kod^%i)i_Ua;Axx#$mXKQhSm~gPK%;5Ce?+y` zjatGixBB!9z$_~n8rAsXfItPICaoAVtOrgqC_QY?f2m1Hr~h-VSSuP*>ie_R&DOTpP7Y3$qC{L*{FREflGxh} zk0#eXERfAZSkK6Xe3{#?zB3$GlN@~(P|)g4FPcEkx*tJMPv;xxtmnbGQQE%W!0>aO zlYd|YXRYlDCr_v&d@P&It#gRT34Fg08-%=o6M{#>=!>yO%!%CLjU;TjRdD8GS1DBv zrRwD>oJQ2#$u!IC1Ep|YuG8y!d#oih+HP_q!69aU;C;!D#1G<&{@MTO!tEKIu&RvenZ|UWfxzs8-2aHprfOX5}p7W&;~!r(Rfl1LtV8 zpC+T-c3fjt%BkQn`j@uES^k(3n;V4B2iGa~sg_E=u8Pqe(md4)Q)<@Z!}z4rKXs>JvxzwVUeaJH(Kn6_oe=>%t{2tut#Zz<=7JLh`OJ?hm+c&*0me9x{ik;*GwZ z9leS@fxfQW*>Qup>Wm)qko+#5ojwO)a<8*`&8Xy58@`<9vqv%K1=eB3%#jST=-zu; zcpwafoQbUY2lD1Jd3WRA>e6g$=YW;D^_47?Eoy%&20EM>@3Zd=+}1!t8pjp1q)&}; zP<$9wElo3c5KT3^;XWtXt~%|orfS*wx>tVR)9Kfyt_s_UJ(Dl`{-#H1Y&(UzX?9;# zhMK?F?GR%rxWNKS=&jUf!z%_KwXj_jB<(oS)LQlx{B~R~&;8SLbIqe7NN22hdSBoD z`YgyqNW$jN>+1kfvj@xU;bJYzMom+w_3UuH{bqM^5b74(S5~NeS39llt@4(l{Z8KdTt?t>wrQ0co|an!o~R8$WqB&<%#B94e8=AHQ&;c)1H9t zWOj{z@9$#QBDwHPb>Ds(&B|?0A8?_L>}xt3eOjG4e8qemoy6bT@RSWDaG_6+nl-57 zmDX%tt`U!QK^H2%d1m-}l?Q;iG^K8o)LK5w%&1jBI-_&+X-bfMQ>+S9-b{;TXJsr_ zIoyRnisR2++xwx=w9gRw>ePQ5sisVR-*vrJGB>a78Pi;r%=dqw!!Qei`;LUUw5$*=dw<`9TB&7-_@kY^_)?eS`EkHz3h{{+h(!? zWgt!%JLkgYP^;ay#QfB`k#<>8&hp{(o>k8>bDL9USV6sP3-GfK>oF?x?6t-_V1^Be(z|n@k^wU5 zJ?H(}?Nn6$iQ#><6slLuG51>JLFz=X#q2)cD))G!8Q{s;P0bY})jZ!5QrQapKC zRReju@0HRo)64gCpgtBj`60eSeHluf1ntZYadrIv_UF5DZwokZg4XL*CQtf}5&!<3 zqOINd@@z2dWgWi;r>G2N1zoJQ?p6Pk!Ud}Ma-5QU2=gI0fxSaZI0pk*e9UY~v}yVs<@pe_1o(!B{}d@A(=pUn$WdY`yv z4>qrZD%-8wX94}dgWu<#yq@UHvpO$D=T3I1XEov}W6RyhB+q?D4YTRB`PD*3qjO>1G_SwXT0Q?RV zqx^c1xx$Ya6kJZ*Br*?)y)yEpXOhm?#p}9Aqr6X#iZ14z_eFbj4p6?s@O~xx&YdmA zB(r)K3R+b^>;tHpA5_@RYf0~V%Ds7mBxW|l44Zcbawz2@l=&4JP_Ypcnb~PbkN1*d zkkd(THOdL(WJ&!GtSl$(h4ygNO*!%EFr)nfr6-f!wi&^5D6Y0k8mV5Oi)SV5eg)>` zdgEt##?^nWl~-au;fqadd%00v-)e~-*+auy2V{3>mc1R|Osmw+EFwlUXE)D>Pjq4# z5PCk4&(*+H_qP6^(wliqfAji0=EG=!b*MXIe%IIje!h1FYdTXFm5)3gDAy0GDu=hq z2hHzl(cC9q^@f&=^+tb%{_asH3g#d0-+J6Xbb&=DpWE_h!U|_%>(~rEc((_eE#jW5 zLvHH9ljSH4I(5JwK&8|k^xM3*F$c9H%HBHf$j}baO)|7uSs8pyD*s{zkNocDw~+Qf z5Q$``d|L3zx?MS)6Wsj>)VlTI>-Ei7_1up6(jo9&A5>{sROy8FF z<7kWvbL&w$JYOSry9jGL<4XwZ)740>t1jp+GD-aq#)q?F(UG*+w2WXQ1Y34|3JCL z0Dj126WYO7Q*_)XN_IGMM#I+5a6vG|7CX`Y3=jtNFX-#i-jwY>Mv$3}f~G=CV;TT%Z5@y$#M+O7E!=U>fxn;q_|`$Yr1bBE#Z z*-W=1x!tdJw7^}Mk3kQWMm5O`wnKXv@7cWJwW3Zhgu5$EC2V)hMEi7&rqo*;nJrYG#$>2_w} zy(;dpE?x;9i{0#5rf}m7~a7K&x6?>HRgg2R;KBqbX41TtqW_|Hw?UnG{jh?wDUF&_(ZjVCRZFlq55-RtB^Dwk-Iy)S58#F-n zJ@&xK)-jZNl~^3K>Qmjx-NXyX%epo=0gRaFac4_x@jkzr?IY-_zhfmYP3DoG@dylJ ze)0!W+2qm~l&ePl7_hfzi<*YtN1d||>FK34M6rLklfdEH_jCe;%k#J3n%%LMe{kFf zp5y5g3oj)TnjtxUc2Ng7RNH)end3L?HN6M;$GohN=O1{?$Fp$_JrAJR97_EQJ*}6* zCOs%MrgGjqc-6?YOmwubG#<~P8F9{z=|P^H0NeSm^8-ysI)zi7>|F1IMt|%$RHd5n zj`fpT+V5`2=8;E>+!rQ?_@RJzViQxX@4$USumfOqqjOlGH3U6dcnXaxwwO;!&w-WZ zMg%tY^C_({*O|S6Ku~y|`*V+d{hox_CCx-X5QBU7pV7Uomz zdI-K>1#!RXb2;b^)o^9-0`a+zqK#(FB`G^CPc(cj^NQ3uKdO`8O(I?gL>vqvyy7j# z-Ni#m0q#Ax^}Y{s(efhGcMNYf8?4^i6ruPbo|+~ovkwx#UT zF8vxxvYwqi!Us|?>p=)#J(8SrD;VM=24!fO^eUGFBW#FgqrKs@RTMsHjoNzk(78$X z#vf>2tCdI7{amvJ;XP#gWW5_y1ivW^#)7`qfnmSYWUK;}IlG-E6Ays;Fap+3Vj!Fc$9_;%fWKrBce| z#(lmjyX(9cWwm9$k+JpVL}usycwM^dT)y#mzV1NF2b85l=Yo-&?xbzm%wW&~YRNmX zk11MPT!qJd-*bDHKQKX^+~|&n!h7md+;A~5dSx1Ze~|Wrw)^}iXaVIyB=7W%`Ro;RHEYf86z=F?^1C{ve>M2N z9$@}n=^&c{v($%ll2IFXYY5BB2Mtb?8-JIX2nu~GE1jP=>{mG)g!)aM(9O`!!$Ir+ zWH5OsPC~}2q3k2PEcX4n$qw}YBj?YjWF&5`+~HnBIbl`CTuVpRXLWDve*N#Hp&+IG zjDCquM1f-`2ksIXH%r7Y6DjJ~P5s~17;l%4XVELslvsFAYHu&@?-rP!4|mu;yP`h4 zmQ5%@t{itlHnr0we=e%Kdt*HD1=5$%Sx7#1xDHZ-*U7rEKuAO2;E_d#>M{0L1n3?8Xd(!;vu=C#1foK=@)Bb-OD$@Wvl`~jSpTZfQy1jO;82t*? zkM74`R7+P-w6kQw+zjj#7HZ9qH@O+xDRl&fi3o%CrD2G8GuK#Fwv%;v^y|+m;48(I zrytcyJso&9=Ls^V1|tw&|ABEw={(erO)b;({9h6Teh})?vR_5%shiKtvjuFvE2HT0 zuc6}gi;8{sN2ODx>`u08{r%%%>z4I5qgriMouGBMmUc6pzimXT>KOO^2rlpcz%J z?WB1Txucd|;W;q}Ie6?ETcPyEw=1}X!w?u5RH@xt-25kUbc)T`foMhFc0s>8OjWoZ zkHxyn|AFfA`Mxd(hgWZMKSk$cxcGf6WaOmE z8k)7N8b_2#=*qBX{p4PR+KAt}#UTW9auoR0#wI)|bSfMk(@-!ANkAT*2m0L-r}xZi z=S}JL=}yB5N&*mZAN+sHGx1%r>$i4_eVYWG=|sj_g!$SH4ZiwWB0T;BPB}jj&JWBw z_ssq--EpKm?Hu1f3E>aJyj=O>{e5GJit0=j+V#!s7Oe(6zuE@U^emi9(yQq5@?Z;WANLBljY|YN&$%Od0-%Nzo0shN;>^)_0vK<}x)}-{uZhlXo8Z`iuOD^) zy~$V6A4q?}mrdP14j@$c^|1?)<70ixU~8*tO9@zerpcouv4*&>#sVZB?&BqKo84RA zPq_sXFnFD95Hq+u&z~>V5}1^4xr3-W9dlbLmk9-ju>U3==R5B!Hx81~X{!^yH*GnY zKO91O%U|)@DD3~E=*-uZ1L6RD1?M8{MMR=SB_*MvC<+y&6m44W|MUHQ&hs!czvX>p z#ugbl8`-`F&xNd3!Z0ndt#qR9`aEUAsnWa*_tm#zZESZD`^u!i?Nxl#2S3hl;8d(< zKa?-l+}5YPoSMlWh2T^0>sZo2_u|h?P-b%za+} zObCjG1pB96y*?l-??QJz*tj`bufBDn*0NQo4;xS?{6k!|b|zEH-v8?C{u{#WpxIqT z^sJ>NdL&ZEOuk6K^1>KTjP8}AxU&zq=Fi&J#ZQ3jppxXT*`ax_G?jt9d0BXS8QY`2 zur%`|LF?&2(BF!mu8-Nz-nDkWldtg9 zxG>knOq||dP4L$JD2a5{q5I8SR+qLxpMmSg`65Sc1U#W!yxdvl3ev@l&A#2_<*Z?@ z1oYY~Z9zp^9(*Eb8Mo~l)%n&UJvW!U1|y?9uSbYie)# zrrD^kKcA==&OX?XX=2~pNY||z8)_r@xvq3(3Hpazccvx9ODhz*fEY|qRyqLYHtauX z^*K4*Sf2EcIr5>@VVM88na?b=V<>Xk7N4&6V!o);$b>SZt0g?n@k@0PYUdebNpr?r zAKoyog0Itp#>1&fi3YV%>2G1wB6H~|N7i3l=c5g)5sE}H6J)1tR?{dyUM!|Uof#{} z_Js07r57`;hpyh1ykp1W)b+T0z`nqjy*$@CEYsY!my+qpDXua$Ca2B_uR9Vl7jjcy zHjA8MHXFL1Jw#K5I>=J`B#cshyT$_lJHK4+ z0Q%tBO(({(V$bGa2`#)5?tG>Fm0E+2O;q`U8u`L!@hR*CSckcG4lb431RbYM*h^2ol{|aIiCdqVtV_AH17LXuGCM$y2QVJIRG!|Y%9~< zb)&JYEg8;wYeL!@?+=yEww%1-`UlLl*G<`vn=E~GSX9sdy{Lqe(nzdp*xRlXqsGduQgH1M!e_=E`R^+Zr@`21)fN;3+iPg?-DQT@&!ISuJoaONAeKaRkg0 zWySL5`|g2beBZ&`jh+%_8u5T&`;9*lV?@Y zianIdMHMp#D3-OXhv0K|6_dzdZkxBYMw8;Q@n11>9I7gph2R`^XIMAzGvD$XrdcA$ z5$s3hsFkhWsUBIenOcaX^7u!^9hA?$Ck#GI15Ei#w?qIW(9B^?Ju41E_hY`NL36<5 z)9v?Yll}Zt4OpS&fQdV=!%UBg^QxV*Ngb$TmF?Xm#_7Rxut(03c&Eq6t+ya~WV&9) zoIb=`^a`!*5uuovrHp4H^b5Daritogs)fdat+k>BIx-mUW3d^FusHJ9PIHlZcjDaT z+b1j_xR>W@=&IVEXv^wWBp@ESfm!H88Dp1V15=wy-_r{!ym;)pEQb^Q=m#M1;tcmN zc|fs+5NVUz&t0v2e(2K4v`RWWnjuO$bDcJ75q3+oT2lQOYO=|Dcw4B zb?c%l(!k?Wu$Kfn)*)#`MT_*fMwbdbF(z8#F+yu4ILvpd3ilmb_b9^@9HTgF)fREy zP+$mLRj9aj?qqb;$)ub|imaJoX8Do%gG*-^V|b@C5t{bI!u#>Sr%~XMW>{%6qr!{6 zxaRpn+ZUQg> z+~xNsK+=+J{nnh%y+&#P=^^wA5&0hmeWwVqmzCa_SxhT!Cu=2Ai`^-2d}nd}N<5ZN z-v_D!+?ni|PM}|l0sE*6Q$p_BtpsgY)k^lxw-sjIUtU>kl|Z%_K4bjWc5U*j7py&A zzc#6W>svjLlRcRo%*3Fhe{0ANJF4M3^z83$%%%6Y7`yDxA9w$D-tVN0j%hi=tv!PJ z#@pelYu@0$(_ak8HlS_-Z(6j2R)V)H-zlo$4Y5m7e|i1OMIloM9BqWT zHAIVRslEK}a~zHif=Trx&J;C3$I$+}e>yf-fE9m2NA&{bJ!c5h+A*wLdPKl)-~%6r$H0<# z)xSm&o_YQ!EhVyD72fBLuDdh8HvdyU)o9q$5q|{?BEr(2P~qcpu=#yL?xzrQ+4j4K zfZ?}DwO6l76}Qj^?<8RIMJ8(vj?2lJ8+}x4e`D+J6%@nmoAiu$vDffHUS~4wPhMd( z6IQ*xLx%g)*7BQ`6qN^&y2%@Hy?%v@@h_l&{yale`>OV1uH?S4zXGZE`X=}C7A#~w z9+wq~d#f4C!>hIK3>G$~`3}lUIgXmT={~w=YoI1bEB_)2XnXWjRdxY9)9S|4zVPH6 zE4ta&(8lIn_{iB$nhhu$Gfz;TUODuOy^0PDWh_q1`z89TOqM3yTp={)IMHV)0Ml#2 z59y{hpI z$qnbfiHLyG#0Jx*;(lgb`WcN8PqXhmlkAOFj5rE!uZ50mam@2XtXD@eGO`n{8&KGl z@m3R*umk35-XFL0x(}lmE(3M{l+zbogzgE}=95hsCcUlviYH;P6c8Cz;IH)qwnzSpfN^Lwbijd^p5&l|%!+mwR{*@T2ss@}bG>pE+e5^Fott1}XEVHBt_BOD{?vQ&(`NbJi zPQOHtwt`?P6*M_AeoHcH8+eSvQIUSJwPbcu)e~(SBg++GxLpO$j53g)U}6$`uq34+ zE0}9um=5XCY19#vI3D$z_CtZX*ZeXl_IWq@%`Um)Cl%Y#vFBjfbdxtB5|;n522+2x zjX>epkjm+i{?o52BHnCN&GX9Z6IzHNpL4>1a2pAdS(|HM_KsU81p#vKdh_`_2yDP| z$#eH(yh&Pl|$Dy`4-BZ8kLofSGjY0CEbtaCN~)Xa1!l5t6& z_GJ27qu%0i5*<}-Zdj$w!fYk`*(gl*m(5hbyqubq`*mP1cunI+|M^#b}ulxQ&j&< z`Ob@C87OiI80Y!@%2zqi2P{r)#;Pukp6g3J4`|=fa~Eeqat*dJREnnd#*eN!%DZHP zHSgI_;vHZ+dYgR}O!+xa3Ow6n1S-u<;{|ao+len4I?I#}apG$Hl#H^;f`CYifId~g zhJ(fP)E1-WFJolg5|t{hW8lZSN@2-VcVJX|@R2dIlIOIQeXC7$X2+kT`}a}l{{lL* zMYWO+FLZtY56`+tB7e23E-mfb(UDT>lueX#b~K{DKlJ-tVD|E?b>hoPA^=E`WRv&mj`Fd{Z4pN(5 z45O3l!YYHEc#8C4$GTzF3uYcxj17+db-*m0|-h8)5z-E0<+>H<#C} zYJzv?q-1z~*ne%clc3-Bb>kX~ zT$Tg;V~{-5>1{_LVE=Z%F`m)Y)z+1Tuk<*EDIkpgnM9016lb9fjf4$~*#VRLdi3qG z+z5OuwX{_@a!?oN(B?k9qS??i;GUVqw60Wf;G)U%DgVB%V)y=moinEcb0X3y z=c%!U^egdCCQG6Hn#-ZPm!gH=Wn9u^$9^&B9%!VScaJogCL38XU{al+Feg%^QATCW zk}s>Q$p7G6t>DJ92}U~yNdR+_I4C0#-FDg2@;I`!ku$9Vy1 z&vxp06IpS6CrHobh+gj^5ie|&V?}c?+2uXy<+*EATC<;1e5-ZJV?Y1S(*n*BKj_XY zgKsFH!-IBF3b9Cw^2UzZ zzK#YDj-Lw;zvUUxymZ)P{0ktK@{JC6?VTt98^jiLQq7>*MNi%bik_Ab zm1UEW)T&x+&ycGY|3wV>$pk@8l}w#DVuIwJbgin7)&dmVa~0jEi0_&-%2I8+2v~20 zKf9;&9Y7n2xcA*7uZR@cY3@;(am*UE^XwT__62zi&Ie2_`lH-#Rh7mKY9l5wB z*k9tSrqApr6jfE|SH(H}YHa`#*$73ZIPLEhITv>a_pFzU0nqxHidaWCl^1cUl5IFPNXRQtS zEJdi9FN)ZhnaRaob8ZPiJVD8Af-gLYsFJ$yM9%PaN>1Y z%)WPX)%;*dqcYYE=ow*4I{+v1*4mIEC3wssB) zk=YT+R~A6N?l5FJ>}oS@MEWJ!v+B890pm1gftx#|edY4>VJF64j@2u{{QY|C7M!790KS0eG4jVb?uE0zb{-Mg&W4(dubp*oK#{zrk1p+f;Bl( z{k}S(=4L<+2EjH&e_m>TyYs6IoCXoKvf4}JdAhU56O#t!ZwzJHCdG1rsDbwt!8rQu zEyC|)tTLHO)ziLqoZ;d-=-3O9l_|#uFO*P&=DEeTL z@a9brq)a}IxEq=;O8O^7f9@FMD`%Rz^xM55uR_{RbZ_?xfuu|nKc~W7?=jcY8Kjx9 z%`Gk9OnL`Vze+SmcPC0UiS%gTBKw00H;wz>XAhCi7&!hUE76EG@78gd`yK-KKUgm7 ziI8n>b94OkTS|FY__(9jss1Snz3j^SEVPdNVJsM!=3|$8x|Byrk#LLJ-NCB*S*cx0gB_DZa&%xKN+AtdPTn+1(QT8S<*& zp>YEiWCtAw)f?wYh3DT$t0~%QO~CD&wFaWa2F3GPZ;UEMW&S=<`S z?LE=%8dNXz$y&JRD-`Y(0|XH5q^6&(K6WLzUZBTA?33-?;thFi#63TnC#IFwIohIljlWN`onDC>F;(=?{n{1L^+Dgs*uPDq7h0$o3XZ&f4@za5Rcbh z=0TuIh>76MXCQ5JjHyKj8=`(MwL`a*#>mS_;Ag3d1{ZxkwH}l;wVNLhMng#vxRuT9 z(#bVCUcx6;=Rx~gmK5ES!)p2!%_A=9`z!^YfNzZfDD0p9nmBwKnGE9p+}w#WxA^>q z=PCQoNX4FBme3+_RRxkI#ii}0V zfP}?y&fCC0LJD7-XwAdvMV9BZ7#=iWMPIDc$F@fQw@{1YO`7gM_$KMjoArWMQYXMH zf}t?MV9Tw1LMmi5!gNyT?Lq{5hTEoGQaQl30s33g^=9JF)8W?X#~r1^uj*Op@MBv8 z_IAo^l(!*ekE;(mGuP$*BYn*5YAmKh_VHI%D1sR@9F79^hmj}8DyN?Y|FqEm5^2UT z$}Z1cXv|ajRm&gxGW4j>Bt|wWI&0>2Jf}*5e7TjzTyIA}=FfljR zv}C}b?`%xF>ib04!CM;{4TFoR0y?#C3K*^|Ys-lo=5%seD?G@tjCLL>A?R-g*Kee$ zcm=K9)?Zmt3AO7etfLj%Bk9>^HwTl`YILCkCcvCRbZN-xw24aq-oV@~MOO0dAP>@v z^}do5*rgCTKB+!PSm1SY=KXv-A&SSUQkShYH+!TmXxsf>;-g&4FOQ0}A;>Y8v&ijL zp}OcauF|Khfiwk#+X;OE|6o0J+Hcw8J*PvhTZ8lefGMmu7SUbs%+EM7om z4b+eOkTxdyl24?z#0?fv^IC>@WJ%Xz44St3#P z!oy`KqH!oCsQ0EQ)<@KjKZT$+72UcaaQbNQdlfvSOR%igXx{AgWKwRs8Z?}XnHs!M zdgw>Sy+_6jlUmCEzzLRh=N{kXyC07zH?0vlWzSa+hlxa$>5c7o5ADsO^P&|3XI1CIKp2$Z_(9nJ zAXyeYhFcIDA23b~iCZADo)YF2%b9N>A+r>zxKK>~i(+KqV$uHQ!iV1UWOp+OPCBtk z_YOB}Dec60INb_hp&NZaK8pNfQRfm(S#a95Wr6=y!t!#v%y4|weXt2yXNzQ-#_f@qKxLzrJ${X@ro+e3a!(;OSpCOHTa^md=$7@$`RY~7^SN4@G z#3Y7PW~KkE!dVUps}D@VQ*k0ULB7FyGD1vr!@+_szdrqN!!V|tm+KxR?pmvLU z&_9I!2$SsH=zostd-Vqu#R?{x>KgksGIv56|NI+P$9mq|l-v<#wG!ZJ9ce)^4B&FG z;;`hZHLcIC(2aPMZQ(0Bt3umq2E_#SZE`AWis+R%w^&~jHI$@%Uc#J9{3}=nmW@4N zX0&Pwrjk{;gSB=##fmI+btU;*iG^ibB#liY+HO*L-@Hc z_Flh%q_8;n#ky84K*2AD+M7E*)Q6BF{F;Po`w6LU0Y~d1BQ&3mNi7aMn(1&Ot79MF z?qO{Hbw1th>!0QiHRJe)CMoHYu}VJE?;9+#a<6DCRqalv2Go4-P+5P*{@ne@?=)qD zIxVc|?4|I;{RJl!s|#+sj>$h%)&KV%RIDke4HQ!omXoD?27-E~oc@og4=3^noMt^iA zxm;Zea`jr0PD4y-oZj5xKuGt0IFbJ??V6#TvG>e0aZb8#UrhTgRpuRm<#MTyja(;@ zx;@F~XDMVn{_+-8h5%Cu9<{c~c>sYf%>`eme-fUniGl;@P-L=rqC^_g za4@PyRshdAA!2!{VVYbhC z$javs@bX(az@?QZd$XPGxfb4s=wEn&VjyZQyD4%)#_(3S35M&J1It)ouHbp<@s|pj`846PaC{^FGGn*d$=$A}v?`kPBDkcFP$^E0}dn6-X9kK$qZi}+s%H<-AnCl2(F|UK&wVN)z7e6mVM$Nc-P7! z)A$z|W$zt!A@6Uz5S@3Al691t1_T_qCb(-ygg4lK9pC9@HW#V27S}(xzR@V%d@E3m zxkIs(byIHGlKCs6w_S@J-1PgT_5o#qIXw~ng7G}JgY~(L8R^zW#MFr zz7=civyG_L)ZAO`uD_KNe{|eRKuvp&9U}E@iXfZSvcQhQ9JY>J!Z%sWU(Thn-YPF% z-(1V(v)HK#DvJVe!{=0{ZlDQ@JrqYhgHDexdQGb(ZNET;7oWo=hJ6e6-+#U39sG?? zIy_H>ARE_L41{6vj5?-Z#mqEi<+tg5r0M>#dppVT3%?d_PUYkLz>a5r>yLV9)gK5nsNF zb{c=8kqUaHR%aECz;pC{0?GJ%bXKk%V za^J}MNqZGpiy_)%ih6Dtj%C!Y zSVGDH6R))&t4Uw0Wwz^?MKHR)BF~%E;&idn#9?J37*i}~8<)Ee_kJhC7Dde16;?=n z;vt9%Ou<^|KAs@w$YSeO;yg6b=!YgY;PZhqu}tHqo33QBw{EY*63$YgulI`9yNEhG z76fD81^3KV*v`rh#My__-(~bd4G(%jJxi(tn8h(F?4A;ncIae$C*+e0c`V_AWqPcA zOam!56~4{^S8|UEH846?ubb@ewe2E8mglwG$kwD5rU7$Sps7I;VAFFR3rNG^)rI;K zH?bal)7uwo=M018{afcRDZm_U6_)b?F()YMGh^x5!ueWBYgxmYfe(tT7foVq4sb{F z>91^PcOVbPjC1ve$7n49*p2+*_NAj2F2=2$d|IlG`RZhKtii%ACh6=l<~kCcuw0vW7jXPLLxeU99LIb|yJk8e#o#SA{G4>MLb*8%=hv zmSEu!M^)lbG zG8=V7ur~=A;lu@lEqaXrSfFQa>+IwOLvcfM!)*K5M_Y1B~*mB)ea>AX&kkcgvJs;{l2EIS~K!b zb^$?k+C#z6G?e1zP_B)fp$a{F+1s$!Cc(gWW6vNeTk}#dTRs617?QjIGZ{GO-~OiO zFe$#uM7gG4)#NATt;r$fHR3;#@p>ZIipj~;rW!Ejx1nrg6ldaEr1$E9s?quup*L&> z(c3IMpUke%#mOgw*oE9%lbIC3;iE;Cc4N-WSN=k7?4uu9ooRlbqhE=2X*O<~b!2af zgH&aY*LPlA{M&T?+*6>KoAuf5ZhP5c?-f`p9s`5Gv&krmK1VM&MH#CZvjjtmt~UHA zX!b=5!{4tB>09!nSqw?f+n;QlU#7)$(UyAgXbRcl3h5P@^^TnDw-!t$=FYFaJ-WAC zSiMDKVQ1OY9kJiwtRSWxz7UkaD;1p|+7SA%d^Sb;Z-f@6)NvbZyG@nEb$QU9w19x4 zi(L0D@DmzkhAmN$pc+%<o)jE?)Sg z8n%R-VpbTn(4VDPB596Dyma;Sttnt}oTq`IGj$$bDsIGu*=r4;-7Z8daw+tL6ooAq;q`so^Dl~kTIbfCrIIyxyxo+!rO3K zlQ87N8?qEw?8J}8p#|!j;bn8(?CvD4P(qYNc*L7DIKc=0g?k8}kQ}m|meDcfvT|0} z$>cUrjk0;iW^I0kk~jZQ5VG9fzvWD)iod^oQYcpT>mmG6P}KvR<6N-BR^MWR zo@CP)v#+Q7#3-5h!ILkq;l!H-FOx(%^s|i2Bq8beVS$tzv_d>*g>1zR&lw`)1s21@ zK#vC9UY|I&stndxlb*WeviNX|-W^4TFy!u+-OvL0O67|25Iz_B^+AVE;ckkbB=pMt zmmRn2SFFG{y=?QO_-aT`+z4(HC<_M1j2OM}RYU_P{YQjVCGXNF=K4KZ>Sp_efV}qT|zP^zIsCi{*DmFAiHBjjOo&)29L7=I1mtiLj$i~1+S}#l@xKh zf5?LVks@0stjq3_q)2@*1nh@i($OkRFpm94>q~r(ea!O^FLa!d$z63=cww)4J*ownB6R_ z6)_e&Xw);~nK{FyOb51tX77l34?(`=i)?S<4WA#Es*9T&&o55TUl#Wpp^7n$sDZDJ z*Pu$qZ#l(~kOpl@n#lKN&+G_1 zk4o;^Pw^1DgXRFPdm{HYngv^!MzfF`Pk#)XrQagY9F0PlGhO3qQ+O-(Cq7TXt%T@w z-ADEaO!DJbPJMl&9fv0j!w}0E%5cunaX$GgjSik6=mEch2OEIT&X1U2jpkx1KbT;~ zS>4WX2@-OzR10)db)<*38gBNI-lR*R=PBfWoS5?tqb6oSFPoL*?J9J<5hEF@!rN?@ zDpz*p!L;)KH8g(|#8`7E${p8~!2Ww0W|{wleBM>bqM^6ysZ5BnrIMxp7`=lOGl z%F7{1k-fg&)br8kL`ga89W|_1CO7xh#QRADZ zQJjN8jU2Vw8kuO|!2z{P?A=TiQp3o7FRL|2L&n~6XBM0O9hD5?)Xha%Drm_2%?~JF zSq1Y;uR#hqh97o|0UPX1t2R1g?t(;d^u8@tEP3Q2SvrLSDO*)htNQ|zLzH-9UyiJf zV-fmQKmbGZl|)gY)K6Wxin7)rAh5A?Y&)@B=Wl8tkZYVYx(G;j8VlnoHUk8{`QiE} z`GY*>BC9SF9OH0a3>G?tR@tL^+T}ba(V+h4Cr=XGtb@t8+_e*9s|MLw`^K@AI+{Z) zWA}%h;(DGq2z9{p-S-H91YFpS_2UJfe~}quw;fIf(8Kvvdt{ZZ(ZbZ60-sTtW6tB9MIo`c6QjfqI1ie&e9QK`X0(QBcI_p}vHr8Df;!i!vvuprw(8)neU~N$F?jCg$hQn6 zTCd%r6TWPij&GjxWx)&WyPtOZ)~5tnX?aarxjLG)g*Z}(ja;P*^!GEv`24vwbJ{Mm z(yJXvn{@tZXin=3!r!_nZa(VA^TlWCc90+by!m%zGfHufWCn?v?(4vzNuBD$pAke>f-)!6j1Nf-trcrnM#IAkm1*IfqC}sPnLSO#bT3m`}@w# zf#jTJXOp!V4HVp}CExB%apzd)%2kMOuk)D6ND3@$ z36YF4>o{;W=f%TODTg$#)*}n?Z+>HiD69%vm9sc#v!)Q%-4i@kwyuQa{6p4S#=oLS z;Hg`|W^HzO1hh4ciLy)4hrIN>wQSqt8c+)2HOah5fnzA+LbeufB{?2dh4(wQc@K$~ zShLi}`>1v35`jU*KE`~?XleUti!44kSr@rcDN-&1NFM=#^OCrL?&rq}J%fUbsx4g- zAI*?op=*ku-jz8MwS7^oSc#7fG}}_#Y0GCkY;^IWiA4?c$2%jtZKHVQS{p@VrN6=> zeodX4QmNXj zwI@x=YkDoahwyT*v(Kgev9Dtc<6YGD%$&n@L!TKid&o=6iB(NzK5)8>`;tuTa%FEn z>Yv#m?5y5^8yWSzuBk@5P2h}~K5u<5vy(u(=&x^dCsvCtpfT&gQjx4=W}SiggePC!=!C2oL{3sdg&02b*xNqwp-Cs z^rK4X+TEi@r4mGTLN44Id`(qcR(QESJ5S>~gz1ZVj>!Be60E26-QWExBIpRW%OwW* zW3G=<#auUy^KZe^L9LJI985Va!RYU)hP(XCA??GjSvY{c*_B$4Vl{Te;yV-A%+0q& z?Xrilx!bsaTf1-;K(j7tdOA{;D?Os?5g43zSxNjE22v1Whw~vcP%67bktS0tq>7D~ zsdB=cTCBOY!2n-mi5s{Gdy8d6r5PKiDBxt%r=2_+gz7SNbB|X8Y}%;WLuge7HzBT(^&K zQO*yXUFRV-g{Lf%N*rt78@b2pbBaVux1nin8y;al?EKssP_M!IVA$d8{HK9Y|QqF|qqdZXW)JsG=)yrn;0YQBd(SfS0CZBJNcU3$cRuad

    Q`Mh?}$th*2w}I>Ciu?Ln{H)#vg!8-3TIgtODGRaX zd(w~(4OfWr@tx+-B})7GCqNwIoG4&gSFPX+xBGq(3NCFM3)at2XF60F3Ia){wpXQb zcI{+>I#CN#VPpKij%g-=m@j&dFgJhT}ybKpBc)BMMx(GMy)WHaBGLkt=%cMhZ*67R2vV~I` zo4yK|a=d!_uSrq^v4Og<1{IuCTsEK#jv;{Ba8SE@>en;WOtxrb#X1{iH05#^|H7h& zR{AtEl9q%5*o|wG<&kSaOiJCzd}?2X$Cf@`QlgCp;GvLi>Ggh1&V#^8RR!jrCdB=` zNl)r4w$Uu2B(^&{mwH_|M}{NqXjNP>$_7$i|H=q6B|_f)(xdegJo0~!_0nb@p)!e^ zXLOIfytXf+!4VOk@BMua=gLlT8@Q7T(z7r+;u(WHV(X_;8F$s9|PgDqCe z$OJ?s_!RY;ZeK%)6x{O!U~|#tFI?m)eH?y=o>leCv*nDazGE^o4;-tO#hT2wAa0vj zfcBC%g!}>POR;1SX$K0m%9){u2(#HYj#zyVi>R@tG7bPC z>6DeznN=>CgIe2=9;RrTIKu=Hg9cu#<(Xxz8c0*L{ZP(|Yx@gM$%+h9eEJr-F4dej<#8vvEy zj6q~tuQPVEuo5^(9XLv0X}da=CpKd;(@~T#*yJi%f)lZvXdBSU>IqcYzV177m(wi< z+t_7HgnMX%9Pmma1+cO|c#GQYoBv|x*@C%c z?qm0`Fxg=>_LpK=wIxPG#D3Yb7<4sL))QY5qFDSWXXk9oPgIKLNmZb4`ZvX_+!)sJ zzbm8g2h{3$sF!H^$w#i+sj}ZewpB`Ejk5t|CJicIz+x7tq#j){7dvgBshVEA^izlB zCJ$1)pOJr9a!28aSBydV;7|EbA;`0l*3+qPepWq}CAmyv_s&1EhyGmk30eDYcP?2q zb==E~9=1D_L{6v=|9I`CF1J%KLM*fgwqOz}MX>d#U z=TQP+I&lcoy6o2MCG)z*y|c-|3p(IB=Zo~A^k3x&G`ZRjqfA(&r*FPQ(5Uq}6F&iX zj%E22s$%Cgr_502Y;=uPbDXUHlu(mrq=AV)iYXZA?xaQXSSc?rlQ93#8)s7+k=0M) zMH@)ROJqBe&KxI9n-yJ`GlInD5He=qT|~VQ5F^C0xz%x=A@8xz$wQbBwl6IYS@p=e zXer#^GqHj($Q=KRHHBn2oA;%!RYwx5HY%RgEoL{S$s|T+oRhPKM(k2D77P~WE{{{> z8^$~jg91cC5iD5rSkBaAMcUwsZ$lSoq9eS0<9KTSUwdB}Rb{vR`|O~*yEfgOBCzR> z%?4@d21yA)H{G@AlrBjT1wmy~(o#w*AfZ^KQo@DzJ?D&j&pCID|Cc+){owD@+VlCX zHRqah#a#OtYdlUTT(vMg1wz2nbaH9(yAQ9j!)f};CD7tz(qWP=1~Npz?G4vsT?uiD zNp+Cb!&iq9C4E*v$6ze4YOh~!LrmwqVjay}85R!u6vFbTi$idyOrHYZnJ4bANZTjKKu-3i{IpEg?NopA3m%xQpcCS_v7W+!B5#Z!-R)$4lc$V#qEpVqf;$K?o6Zwm}_;D z3$?1ShCZjjsple-OEuZcGw^?-aWsR+;01VxLZ&qI_kvPu9n;te!UhH1&BA z|2*(eWW}$Xey!3OH z=P5N$pQ9H7&bEj@R|V?dY0xH%(UHTj;mRN~a@C>KjD2|yS@%moPn#rb3h{R`5!~;S ze0WlJC!3$&-}%jn4bLUO$;z68GJ5Q##@WUe;y2cJ&jrfu2_OvX%@z{b_}#n)SCj@3 zZ1~|;3qHG4w%mZKU0YhK_fEo0Sn~JM6Ht|>|7+tEPQ%ptQVCuHq6|i~-IC0tJgOQB za?BL>@%3egDQT&AbU}JDi*SrqqoXYW>;-l8yHENa-MO0(K1L_tRh=uvr$GTREY!7X z_J8*tUn+g_)yTyc?)R3Hv#v)fN-_an0V$oo{Uv%=cw#|kw$TzNX5j^PyKX}!YsVaB zQ(4$~qf(0J_d9yiwZLY^nRnb=`aJab)x~xblX}kf+f_3~hr}Lj8d`&l^rBoYtcfBb zLttv8o>i4^!n|#_UQHN=;Qw`WuBMvy#d&YaX2sb;@kRQ=$uyoVK>uLbHwuody! zKfdc}AP&gWS{Oq4z^KF0_Y4wQ?pTaSquxYic1HxPzWWe6pp_3HC@L>QTk&u=aL9oj z4I^l)VF-#L%uBerh{aTGWEKlq!V}cRfPZa(Ntx&x-A+7>5BIzin5;9c%~oHzBd=FX zlS>2-6YWHq>6sc5{{Rmf{gAB=UAR%ZU}Xok>?ETR7#7n~1>C5(xRWC>99*VfEmYyk zm2`NLD`LCoaXfk%KYv=JQoSjH^D|qyt`2H)95rHk9bn)^AAs&e7BU+i2ocK(LDDVSE9ZPM_K{KHp0vX#Ap zS?01L9%4V)WDBO8M_-3_j;Kt!!%5=n9L9LDOY?s^Gx_8Ys;4lTt(4CAAa7S$XeO*A zHY~fuAPtG8xXT*I6F#!EMomk%WGs*dDbv!uYB4lsH?g{Hpb<|4e{MQ8TWXgRC_f&<s3<3hG0m9rzqn>*2Ky6O`6sl;pNP#6#^r2oLAR4Uq_Q_(03`oH{l4lLuFDdIT&trBD)R-~)sC!@m7Yo-&F5%unwJPI zMJ#@(JbH3g`a4r^EHxQ4|C>@2>YSpnhNa1VFN$3Es1Z7nl5J`S~^2dA|2B1hD@!jkQb_od@#>)G{pE=LyEWi!Y_xJ8HEEB<$xS%=T zIl$ZaKD#?SqS%{Si{C=W0Ud=3!wZGeD-b1AARaYT;?GLB9>I zRxkVVx_L*$Zj&~Ai{^7OFAL8e_rS~iVi?6GP@P>kWo3fZCP_87| zPD^9AG8vYYP+xH}0DF?BWDl_NCLH2y-0bh85#;WSXcR9JQW5@U_pjJG#;UB{_$Xga zKcyL;%pR?muqLbd;Elzd1AA2KFLC%Xeyc; z8H0RstF;>*?cWrcJ_qM|-zjAxO3iJ(L6Oju8MUmK_yR{fqD00A(hsxP0ptp;V~<}n20@-nklUHQrCxjLg!F-OGqff*;a#<+oys8bY)%LwxmQiS9Nt^ik<;pUDbxD zv9W=cR!=ZD>6$#`MCP#%GnwJ6BqI�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 z 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

    JFVlW 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

    A?Z7Ta56)rS-u+|@XZNG> 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%0AWD-c0m+Dpx_L~c_k`M#>X}9ef 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�>Fgi=?55CK2+Mu%UKPREs5;L-jUU8`_?1vRsIL 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

      M-(O2;nvllsY{aXmx&!0u&lY57whsO)*jTf_3 z0&~zotPHTM<;w`?CP|zY6@I}rsndB!nb&(0rYi0%bHw|%e%FTJrNPI_^*0Vx@U@hQ zWA!golK;B0JF^hja1rvrNx=oz^&39o^2o8bjQ58LiIMB?1dPaMuG2xqIqNv8JBu&P%#I#bCRSNLc3jg7 zlcqzHPhped=uKa;QBvq6{Q2&G{`qfaeq>z) z&LQB40PNE!x|*=~Nq4d_GC&%+{-b`pfPU#=7e zx<#4vV-{-u`-@Eb-XED>>_E{L2kTSx{7~W`^UQtcB&)BQx>cN~p#z8hG~dp$CCcut z)cwP_wK?Y(b)_+P=bzgjBJbP|hN~62O+uta%8l!lr)S)q?v^k76sze7n(h?mq&{AB zC^~xsfiY7)he$F#R*|OBJdAEvoZ!g>460jpw$c`L3CC^#ll$vJblf>USHasy-iLSS zyl#HDxPo;x#&_~IGE!f`XK!*Ay{mM1?Ta^V@*ien_2WIKLdcolyPE!)$${#j-@|P? z)1_zii7DahCblB16f>Rp@O8ib$9IXt^T(ntcK=B7%)poJy!1*=Pw_l_wl3Vnvk13x zggXQZQLb41=BBi#Y<=F0>$+lSxto>AEVJ?kD&o)qE|;7UraL&e*x`5MuAAse5&>U+ z;4f)jdl*Y-@$oOca2WUNC*dYygn~7x%x8S7Gf~UvpNvp5zEMW5cn#jZE9UR%*uJO5 zRhb5@w_13$t`^NsA$d2azK?lrx)BOrabUpn!8RZ*ejS85nr(yX$>@B&qSN+$fWX!4 zCa&q>;XQXdvmDdRqUQJpSHkJcYnb`uEAW0xQt-@5CcJXrj{2`}&ul#u>6-KusBsJB znp10asO%r3@z)~WsZ`1a-@iqPpN`5k54#`Pb)7eCU)?!y@l*8ZZs%h|Pwqa4?nZj7 z{*0oyTUAzE3vHOE94@|#*kKxBb4vl04ujy^GaU&rS3*omvh=-UR9SZkNedyof}m4s z#mBF%^)vVX*()$TxG0Jh6g#=$2TltVb2Ezi@eOb%%%hL%-oqMwN2c!!g2L zzQNPdk{y>`3C=VeyS1jnrddNE=W+>l1xI(O9(@p(gs*)Meax>t797d#{0O+BqI zBADWzhB48TzKWxVmDlV7A2X~R37BclLA~o8fA@y^s<2n@lCzy5U0co8?}%dhTvqi9 zGSi$4*?9e_|J*uv(OX&a@ih0w{mk_n4y>>ls?CfxE>FCJxmx89ufS(v5!Lxk_xG2B zH1w7y(Qg9|)cN=16ev4xN7~0kd=zG81nVl>bv(O}Iana?P|Bcvv|2ptouBC=2pCWQ zyGzSevFL4=$syEpkl*+ad~n2NsP7o|;OzIqFvT!NT|7BogiR8>#G_-Aprx!61kEDd zR>#c8E7T?`Ko>XHxbhlrSJqg_oDE`g&<$txH)uB7j%1bBq3(;|hoRLw8_j>(>6p)- zoi`lwktSP*^)vF*buLao$1uBx;sUtCZ8s*N!TddzA=;DB`{b(G?B4n#jpVGwg^_Wo zuhAgm)2<09un`L?A|P_0@6!=VV;ep}94CW(YK0lUk~=c56=)vtt9jaE$X9Rn^W)=ah!zsP$!-uO__8(W( z>4tcK?LtmMFQf+`byC=*R`XXDt`_=cfh_ic#ui@L^Z1hICY~ulA%pI>7SP+)zo0CN z+w}cDZM*0)N`5B-hZ~_Bi88Rkwlmke0D`f75GVM}^4$(nZ6wB%?90tA|iE z>CWd82jlu9Y%c3Y)YP6Nao|oHdzNRjtl}-pJ&8kb$}CsqD~A&^v>``C_jFoeAwj;y zHrg9Lqm40XzBZWB-04}~4()rk_et!VBZ}I(Np^Dm*8Yr3m0?nqIEyQ3LrCM{ zEx*RvgN^I7#0|O|a^tQ5ZOFp`&CCI{4P&W$>$x6$HDyPKUk_lI>Ua1`@$v3F60yU= z%5*~?=UB_o=Trq=lbSP``;X{*?#cOUu2gAj*P40tb_&_Rc~v3KtGU4s_2+(J(~XzY zkvYhhQ;*MfWsM$_wfw;mP3pV44AU$7mojc*MOTYGI6)b4w3pM#lZ_3>S-++rZC(2Z3T*eBI zO<<5ah?OM+1_Md2l-KmVC~UM6vwb`~Pa@?-KO9CU{$|=)$&aD7^bw0&!6@gw+=gD2 zb>t0x75hm`fJzDK83ev)!p-@HjSyr+l$HP!l+eN!fiCqqEnMm$^J1bN`*Mr(*S#t}#-!_2U_$*NnZM@FVqb4qs*F5@t zd-M;`{{zWDHoyJAIb3+60@Kd*V6mJs_g~`dJbk*Ot*dp z&z&#{YgdvlV1AxIux9&9Y%Hw);uS2|k%-mzeoQsJ^HHoSd>9KiX2YuNFJMv2MOc}* zpK5x%B39RU6HEHlWB0h(#ZqL+xq0EpjY&4&yh)`~Sc7g3^!!7byz#`1gEA z#II_Nn>oKV*u_!@+ix{^#m2=rSY;;NGw>%IocKPz`Sv6ZZv7tLJT?FaPty2V{zzsV zyz($B=g@<{AnvjJI5eK#q%6(S4~Or)>@`{ft2A+faC4yX!`kr3{|sKbxe`{drI~NprBYa1JTI32Qw(bd^uUVg&tcuO z6fv-})|XiKdpWGS^aHb^*SWT1!$DfnH0ys~y3Ly`N#(zYD0Q4{gS>_fN7_ zhHUcXy|N?j3`Hg^`z}A?)>daLMqKChh^y8eaSudM`?T+frE~MJnl5cL-{3$`AIz^e zKHlJOHvWkMKlEVs!80gOWGGgqe+Bsu%)_e2-I0G(AMMQQ5#x|Q*K=5Nv=;Jh9*cD~ z`ygL;nl0CNE{J@E3S-0O%E&vX4>sO+C-M&YP&>1!*sI9fyfrp;`k8t2Hb0yNc^{ye zV)O7z$cv^-Z+D-6-(X#%*`GgW@WxG7kv$)+!RzaeLe|smm;_m0{|>7AM)%bD3sLQKoAQ-(zZx89KA`p|FNB*{zPueL3U#1z_Qv7(q5fF?$t)b-Pz!5f zTH*L$iVIlV_c0u=@DkPy{)4R{8*YrkUmqSMT`znRfAxBa>5Wzryo8Re# zeJ!YuZfaHr`=-QVf&Go*=KgY<2zbWPy{PSooR-das{SO;j_#!?-ecFV*MkKX9ewZYJC18!s3fs6MPmy!D{LtCu{3#z$#(S@U!;yxOY>)~>h< zjsGcybyqW@@gTB$H@Ie?QQeztl+Y8=rl{6vkdJ1*%@5u{RLAVBKJ|CbH(0MJJ+ZoZ z^Mik&YGv|DZK_!kl_$K$a;sE$2G%e802Oo5lir$ci%>4136qVUs$jHPQ+tu<89c~a0OyECo-ucG1|42$wod^H|tW9Kh({eA1sW1 zJxh_)4X>fkvJNb_FCKUe>kllz=NL~?4=jR@f4HSTv7F9jaG()P`Pcnta54{xVXU25 zeNg|)*@siGi=|##ac?qfR}#C}-Rv(~Zk`-W0u<4g<{Zsua3Jl_HMB~) zdEY}?OT0`z{QZAa$M(IGnFQOve#~H9wpH7!8N7ew60Dv_{+)eY3t{bu4JKnixTRHOR24W=uJ zUF>d3QEr|bOo9)#EH#+&Al4OxsB-SOM6y@g0!6cx!;|A}19)k|i zT5_OBHw@kUGwX>%zq-d@y^nr+#{&i*m{);uBW>xMY(x$APJ}*6cOjnE|#L2 zxtXribwGD}YRAoiEFq@b>qQJcd?FFUV(84VJBwm?tqC~Zco2r){WMOz*Av68(R0bk z0Z(JtiSKbrd-58#tRznFxPoDyQQXs+iM25F>oH8Wp^PNEN(s%vm67PJguEM z9dQ>1$5z4di9IoR^kw`NaUO$*Zr9En{dqeEfABVrbRWgMYlrh(!oWQ=BOMyw2m}61 zU{aHx&&@#AfHj?a>k)$wXFHEMdC5vU(tQzPua(DNW%gj^?>lj#S4qscNN?dzkNFZa z#va4DDsgPSK0od%W>h8X>B7bDG2@F4`1`?mn6Y*RE)6V(nd!-byu5iQX11(`tJ?Dd z<(6=?6k^X)?AP_ig)zHZI@}ok80JncZm^4`W~85M@U}gWc4T5Rx*#lE|%Kb`3{2* zuTGCG?>s`f{`M|xj;Y6T+w{>-1_zRW=JqE4zGCpP%pWn<=C=XISn5pn+9}w@QncQ< znXc4VCc4{m&2n=v3A%PFW$@|w@r<>W`>h#E(cJ6F`mEe}{aJ(QN@5qgn^KgUCkL|0 zY4xu;G}7P`Ph>*PwA-^nN}$tV!_lG?t=r zJXx23EIBvRmAcJGcY9icZVoh4q_!zf^iPj+UCF0kp z>nUo5p#xB%M0s4;m<<)Q5qxpqX;jQh{`gCom!sm;sjTHHu9;-8-lp`f-OU$&T!wNV z)2Kf`vMb6?f0&h1X2DZ9ed83$lqO%zsSQ2w;=#5!Ipiu{Y*Pp)TK$O^&XH|-{Ixgm zLi^E7YOwxa|)Q+12c^a8+HLJFYpZ{ce5Z5T3zJevQk)U3eB^ho&jB!+%l7}txm!?0dt zi`~ec3BwDuz`sdv)NVfY97dFBrk%O9BQr)8PGnM#IMu*ly*^~O8+^}142h%Ih?@)h zVo0GXEH{clztLqb1|6k0HrG!6fn$bD+u$dYhCmJr0%Q5^*E_E2y+*iNP+Gs^}VF@U^Y6s4$3r6_c<-n<+AA zT3Yxl$`9y)tJ4!uK0ifsU-`H$B9HF&nim4~kc7ybh`Vd0!Pm+bM_gyJh_8=|#j<~| zu%1X3mz(uIy0CU@gRd_*hDALng7tdFC0Km!OO_j1Ty72~!Rm@AG z>Gbpp&CW=dl>T1(k1Hun%WnFlG#wd}(&@D$Z&I2}l)@g@udB$hlH}gkH6~^+y4PjO9u$j91z6}3Ze(F{WM6M`X=QG7VRUJ4ZZB3%Uu+Cn)zPaOlc;k+-fBm8UB~xn7Syi)Y^sn__ zdjLFTc_n!O0wMrl^Y{b&x&YwI`dB*$01yDk0KlJ3R{$m{8+R*PfKC5n3jz{=7#Rr_ z69)j`O#uL+#{hutcmQB~>DLw@0)X)QK>TkY{TKe(_h&c4-+O)&zXk#L=t!rJKLmUL zB0d5VKEkhI1cb-wJTiOa4EQH7FwxMFQBV<(5dV}2_&X2~k?*u0_X_wxTSzZw30v*r6p;p>U-WhGnBpRs;GS*(Ld@E6c zlBJ$u={Ah~S)(Z};pJ7${W`Wx1piY(0AQZ*aZbnx$dAfBia~npew;5J9XIWB3n@)Y zu%t$4O7q9m{?e8KkA-*hzcvBbk7E$=k?2wgh#G&^uzvw;8W>jK-}--x7)8?V z?x)5-DsU{$A0EF&hWK_#Ba`nR6+&k(i~N+|qI-(YmKPfPCgjfw+G4`Z&3o! zgR)?)K^A|0A7=4FbJ%~64x!0z6p^R0A!AqmPoe&X9s3{`iendx-y%oMCiFG44|Jh; z%4uZxUFZ)EP)<(pTM`_StTs+ln!VrRg7VaBshr~g%-DgW&Q>lMee~EiO=8q_;DSJ* zwJPG?^9-fw_w->U7EG)>CgF!>Z=s^G>9*T$zr_k5 zNwrKf^Q7X&WOih3iIUhlf6-AA$=9Xra#T?QPn{ph%N#*SpZCG@x0oTlL($gY=Kn}Y z=w;Piq}FNVy#n>x&@n$D3V0$Ew3bU@$9YF-K+@aOdU zEtUw1xjpXBgj#+KL)V|<>umITWB>r`-#Bf-#Zvf-Yl!Y)Ht}4Szq!u)2sKjqUO2Xt3W?>|jj5Phf$peu5;B+E* zAl2q;)N~*Ou(+v94}`INk}G!;{Q28FkTh)T$_?r?Ga7P-H`-R^q8LXO6B=#na<|TZ zmjwX8e_H3V)1wRkxQJ&#puZX1e*)V;*U4SY7JxGfS?(lP{e42f6D~bHC%)s5w5fc4 zldmEF2b6#>jwW5JE~Q;r!T%>z|G_`;G}qvv57j=SC35Zxz|Uhq;QWSBD%YY}I$`-$ zO>6L|6yRwprRON(xyZeIKY`A4gW*P@lAd8R0DuKFvFpe7mE~IvYoZVrZhz0=*y9U8 zc2s$ih%m`R;RaOh&7}ocrM0zM$t~KsNdg@CnlmKF-5YigjyG37GkWp3624Y0QT4u%pm=hp5@A)gNM(3h`jZJ=o zYO}x~#?|8qL0bRCbn^Gdi8~NDDL}8xiHRw4gMW?_DMqKmU7?av*QSQK7KCH4ke4@= zj|Tr3wk*G;s68uO(PEaxWF-(Y^A+;NBb|IIk!(YjTP8MCJnNr#Yzm z%#K&ZH}KEAM!nl`H4b?$tWt1Ch~;Jdm;{ZDuy`$%h|)K5aC`Bs(f&^j5z7e!HJ?Gb z=9+@P0NsohXX3d`RER_VTR}uN+lHR?RME!-V>86ruz5@ffEhS*W&(4Xf|vkM)S2!G z%;(!VhvU}Ka@kA;s|kJqYzMdmb_V`5*q_EnQMJ31FxN9vH|g&`;_{kT<(x@!lSHIA zYHHYRW>h|YYS)oBm0YV)$1TO$ays3U^ER!O<&+8!$bG|Dckg0LXYMMfz4 z#|KfGp1och&mV{XO(||ArRlrxiC-b>*#HD;&lNov(EUsZm+YUGG8Q=q;vgo=UySw2 z%vOaWA!Wekq@H&Q2*UuFL7+2PNTU~zl4d}QJ67Us^Z(QcX*Q#LPW6=%byhxfXoTHs zDF#G66Llp?T$2|YTj~q)nv$$C+3A`}Z|IKf|HHOLt%2EGMv#ka01kdu<*gN%%l_;T zz&)Uta7Q3xTkZCj?+ge|>V~~4 z*_?*HDj}#5D%!Cv!k>9}JpnX$<;Q^-6p-a?L{g^u2|fUIDo?fm7VJ30!ZTa=l!@ec zOpq4y6eJU|*3Grj6g**;Tce-%DRSLsZaL(C>O%q5&K8#-;ey8MwOyGWK(_n<2>-p{ zF!N?kP5MfGX1u2Uun^IG{xZySCEErHutdxvKV?Xp0+|3%UxX317C{=V zcn7$ZLf>IJf%XGrtKgHKuPWR)WM>TC9$Rrq{w;tIN(oj_-4k9yoVk1- zxUcbX95TujINFK(|FV$FdE!S1!EyaL9~0v7*c$EM+@`bXE?qf6VnkeAf-ls<%Kw9u zZB0DwUo;bYuPk;qwwEWGj{^_++ZqEb);hHcCIbKjyJ;i{cECzC&*9g#7PNmwE&=_<|U$#z@ZZ%NVs^({M77Gj2}SN5L5EZsTYy} zwr#;iR8>ycW7_Dfgn4U(3Jo)tvRg|VoPJ|C1;7{OplajjnLRS#BQUyYU#0ZO@_>;! z)E=&9L=<7A;hF3=nWrNaz(b-LuYq&QIWFHrUT`Iy|96>)E!vvZ{4U0c@MiQE zd7-)WcyLwDu%2|&>ldB00F(fx-gly(X)$AGW^Z|@?NC`i6lI;QiDy6FVi(^TofP3B zXl(SJDm}pNP&+7!IZ8K%Sm}zgF4n}8`JYeNIsBW+qF7b6DwR9CO(oBd+DaTB;t0|) zkqnqAHGL`GN&z7Dq?>&#{FZ_udwdd*i`%T7I z<9z`~J@$6R72BL3cq)cD?;kQP3G_8wT=OLW>=XPSFm_=89W{5(DqeGV`_Y*9e+k5~ zYp;R)7zY5jW62i>RJ7x!#|{2>^5|Ceflhp@!MRymw3yCf41?>BB6bPCJzm@O)0}q* z`#b?P1@I5N-6Yy)ZiCYkoFST@#kq)^0`}%NoM~2Ouf&BO&ng0fv9B9%|J`j#kIl(& zQKn%;76)W7c#=};**_g_zwzeBQOIf3c@Isos0%Zy=g z0849RND_;z_3^yG()xO1+5phobTUo%zQ9}H!Z${Q$Cb=%gdIFXDxv-4#HT++X^`HO z?`*Fu)wXQ=3_Ja>u)FBrne{*T5B`Jy;6L~e{(l9+uT22@AOCwmLHq^iwf(7;6nXF8 z?O)oBn_a7p^@c{iv97x+H^WkHU^=cv%Q1`X!!Fyzx6iM%(_0|A>7U%H`KE|EtD(ZF zTm+_k)5YlSH1g&3rf1qi;#(uQLKYe2Wr+b5356kY4ae7YKW}2yWO&x@fHwtElr{VZ zx<3vgE>LEIW&{M%bXG(9hbz&`~^fcPl%-pm`|T7H^+ADr&a91y#)O}$PDOq9@d$ZH+i(HN}32{TkGj#LsXP6IsGH|RuvmjwfXkOh&z`U zgPx@b=Tz5j7MkS1Ev7P`neQey$%Uz+UZfK-{Q?ldJcgR{zc(DRF!U2lBv&za zXa30fdg6+wQe5jLxJG!?5xo5>w||Y!z?#TeQ(FPI5%eZ;Nf+7^wl+)LNt#}F2?8~^ zt~VORIq}Yn>oL!r$KY;BtoErn7F~|Us%6%!f{a;s_6n@yX4D$rByJE7Xj&$^;{p46 zSW)CcS0Fwxrz3dBHv44y`R{? zBy5(vw(nTkEU|5KnLcmmjxnvSe8AeP50awR9RH+3k?iOtQ2DGBf-NY(tvmw*J$L4) z35fxpYVNWO>N3Wgm2Z&QsaVfSr$$-J3rpxSW)wlFsRG&kB1={c9=*e`K0?%Ss`b^D z_Lf^+yG<0J4gXZDRqB+0I$u-Mm)m58=EeR1EIwkKX zInj4Wq z0K~U5g9n8f^?rukGm4pcywQI`lssGzgIkpBCEuK|gmV0iySvFn2S#TG_YW@D$E%~G z9O0L50`H)@*9JnXP> z$zo4@J|+}j!k*>L#hXQjZ*tjr`O0!tHe+fqRFssWx5Fu?cUlXxJhBe_%-l-cxeONH z#wg`&(q3M;Q{c#Rm>gS?iTRIl4KZ-bRAb9wr%Yaj4uto+1fAVYF3Ya*8+XG4%!Tx} zcMe4^8X9F9gFf63=)RR>TnQ3P_yzE9d@Bd!e^q?*vK!>HsqK-TQ~ETcRRD0c*GoSl zl5wuRms2UrE!0(CpOc|?lVvy3u1H{#s?VO1dx(B|Flm@iqcy!wXjZwbAO7k`#wTi1 z22Vzfs1FR);#15Mk-mpZ5gplj?2TEQe&O5W+E;hZT0)hBU%OA~9(j#D3KFZ#Z8_qY zNoKWk2~gp+{s+Uy&SAHkJz1n&R*QA7fW*U2=A94Tgp^fZmrPpCb@WlVOW^$e_MmSE z-y)K1Fbf1Z8A#+WUj0S+2V0hH)iHH1pS_6*ACjKb_U=)vQPr(4xZ5P$;SYa_A=%)j zQ5-SRK1`|OL;MF7?N&S=W6CRCe<_IqrA#RK%R!F4ZkZ=$so?uz9>NlAugpU~QCgbF z>9+P5x;T?!Oq&%kO|fx9Qdp@r%!yh3TmoBgv!H6@eHEvwmWjN>`3M$#Xgt$KMN61r z_D;k)Mx!T&ai1cK@(5gTB(Z*E7wj|Q8&$NI;^}VISnKb|rj2i&F+(TuGf5)X2qU>7 z-%k2df@AE_iuL(h&Qs={n^%6R@QaW@Qnvfks&WyPxFdpu@^PCR75I$p%$6fZD}wl4 zGN+w1zIwM?w@-VF`|^qHe^kdE6j5`@?^f}WD zSq*1Gv7#)FC*EEjf#5+tWwEJqd0%U(KSYkea`f;sc{9FQXXf6oVHjd^b64y0C#(7Eq$;!Jw3eG6 zw*=Mgg#{-wTi8Arz_7IQ1goZ-PRAA`A#EYW(kQbxqJ=3>q>p@=^G63Doi*+^&R>aG zwlt4_0iMX)T*am{%N9rZUVQ=to<|+b`Q=XtZFTzom?vTi6SSFmm)j5uaf@4)vt8fn zHtiZXd0D}7z&`&zp)nsKY?AYp?!6zj?ipjytoCJ+p8cAMV3gzgA)%+Xdh*|VEtE#r z_DT6Z5hdT$cVgVnn>31z!MWe+b6H<3rj{0;p%l(MmnL!l*xJt!m=A z(hA+ao88{&e`4xE{obHkIMnXx+X~csVFW<6GBJh14w!F#qZF5hQlbJ$}<#v{rSWmyE zC0fM9dSeEu`_kH6eDcD>Ou-9+aB5Py!cRQukLkX7VSCN&_Q3+J3Cd+?SM$!Lp_W+u zN{orc+Y5hkIn!PJ`OzPKqnD7k)C{X{j84BuZB<|>!}$)y&eNW4Sf6EDekm;N- zm=!2%^rhjDm`EGGsM;f_a0j@<9_wtil3C@SH6Ja6F&Q@mq)I?OahmJT##pe-Gzn1`UpCK_MU8FRROsxoI zOPFqlHpy(e6Kf4zr&U>nZE_pI2}wS{ELzppWjmFh&{dd}k;aqgb-$%`iSYAWUdxnY z&tezPR*A0JOOQAKY0nr|4LN$6X$n+3M4lg?Q$z#B0w)!gIqT_d!WCBR!N1>H^jhM|kg=!#-$-hF)P}xpYvfuB+uJ$XA z?yLS>AiMQPcwYvU4KE)>CJ%Xba6aTNzXDDMN55ce<_JG(V|#%!xgKd~dpf+uN={Kt_W7UVRPm-Y z#@HL(MOiB!g$|O57<*`A%8Obx&*FG5nKELzh)~l#PQ?O`z#QZG)|;!PpG3>`igATN z?jy=CPCC^Jwm|N)dtsi-tOj+~Erx~)i@DI11uS}-aC(U%l8wnoOsSimN~a}4{_1Bh z*ESb@#T%Ke9}CVS_B@uLY|z)FK*LpWj&m$O0)Z>JD?g6EsyKZg zNve_UD7MxqWI?Zwyo$EejjGijfuW;2a@dcgH9U;S2BJQWFtv)ww<$P&*KPM%2nr-xQ4;kIuJ1+gw z1eU7_}OcFyI`!$ zQy($8=P+3(v3cgPJmfE7OeacUbCmy*`_(cr!s=e15sPt)&9o}1u^BFQ&-Q{rxe(JN zF0hE>GU=J2T_0p-QM(>^4QK3vrU*N?ANouyzh~rbP{@`>bTm)9y6t*2X6`HTQpRuq zX}4Up{Y|`3f(seXXVxO#Hd+g(UiFKMxl+$w-0F_?W;HeAeQ%j$!ZIp_7IYVDC1)2OM+E;SA%vK)p^asiii;-Tqdo zrrbSyZnS3S;l{A(&B5zn*Ok6dt|U%nR{hD>eja8Pt-bN>oSr_pFBJS?&*bG7Qgr=N zZp|};^M;nnFB%_6GQoy zm^dfVNS?M16ti&HNY7zkMShJbwQI zoHyi{owK2h z)BV8qhtP>()S|^IO8W3~G@ZI6A^I!`4bEw8Z)e69*Q<;Tp}?#0W(np|;EL)w6J>UL z|7*OnFA`7MJCpj}6vJLO&TFFzHL>*J$71?`pYdoAkB_cuqlu z(Py7R+gyo4x$X(@(_?3fIA!%iDL%xCTw5=0db#X7aTFzTpQl+zm<Hh}tNX z9*=G?1q>~qp4eh$7gLx3b4+DZm9Z2bwk1gh?>E38q1pj@5z50~yljx&n9%}#$JsvP zhpA%m*p9IhJcBr!8+;WJR%yy{H*|9HRUju`RC&X*L+QAhiYm2#5vmGG*Lo4I`|fqx zO5oTk_avh?uicdDQjd^gOPaX9?=7WSn?Ls)nswZsI|asf3TDy`v2EwG<0lEazNW{S zafo3Cn9#egBvOP;b#c{rL5$|aA4tC^k+k0@qKyLExssJ95j3gfsO*Aonc~;vbTnej zFsl^MrWSun4b0>;wU67C65R9+eVQi`kWMbr%*ap4G_V>Lnioyflc%G zS=~wSL=fz2oy@ylf@mT+44x%K3{v_l4_&txB38$kG?SbZwE@;!TA*~)%{)zk^s)>` zw5RQW*dVL7QfTqsuNG*t^)r7cRE>(ebvm|8SM`t?g;psbBnoRjcN#!Ka8hUsInhUS zGc|1xCjRu?Oz4(w(jhmMdhcWC=nTH*>s!z-fL*MPY{!wORetmphiqJ!DO*8m_bVWWBAL|HSm5MQ&2q53)E_ZA$vxj zRq1z=4!n4)Tj4KvVw8LJpX(c#9>g3Y=E~GK?>4lB1w2joa$9}v&a-a?kC}U7K!u{g zy%YaQ(OV?2_nWBFSZd7l6Q0*(x3gS0V+rH;i9a%W!2`WlgYwm(9K|`!);_^v3 zV+~w)JK8#*f&uDazbvE-v~);&f5*zLA!B2uf;M`YbdM-|Lga8V%98<{Sw+)xB+O2Rx%>@)S5u7%iq3GbC8y=Dx3h!4-G2%q8xe8VyOHoWT{lsL+6-IR}S9ITYZnAP`^4Y5SF-~II=9c<)o(CM1^da1H@F9KmE8h z3?_LHlD!--^l2jZS=UwjQj=|LfA_O8qNTE}K>n#aDV>4b zv+!I*c}<0bBANvZD~1@w+D}Y;Kl36Wwp|4ZyIv&k^hcgXvSWWyA!u)Y7CGaG(=IOeet9G%A?P-J_&Y~r{& z!%ZM3C$~wHw8ldbUngebR3A1_(-o=V8BPGpPxSP6J9d+PqmR_Dk~%3aM=D@O-`>Ho z$9ranXQQOC{o~>?i?b_sRc; zscz*ic_?0ax-HoE3tN9}lK-BXMcJE49|V6@%wuryX(?H!LbcV=%#iQo$OUF_+W>Yv zn{{7bYRf=JYG6(N^Yj%$SCKAN)v%fGAv{X-VJoS2b@&=TP^WVz zolT|cdn^x?U~%w?5@@X`V1$|4XUIe`Q&%^DuR#w5^dOR!BuZOwe7*`ccG1SxC*b*{ z?s)!8`MI{GirQA~SuWLLiNu!GGq@bi5s>m!_z=@4mqXp3?c;;xX`dlsDpoB;ww{WI ztOvfN6VB~P6iPQBOQr8Az}H%mZo%FyA64q^?4xOjpzhTPiJXyUwaJ?%a=N5( zJu0TG{70De@7%G`TglcoLab670B8@LBfMx`fGhvn;kw0?BFXl*OxMHFteL?UG#E_% z{eAfs`rO}Agt}gX*4oXDi3I^ZMJd-o9JR^W37M=%YAtC8^Ep5uGs6t&*^Vcx&w;7a zcoGIKG8^tdX%P2t=bqm`?%_8j@l2<4J=ZEaIiwuAc_Be zuYEic9KAr@=GNy;eU1dT?uK8U9t$Rh1>3>WsUfmjR~=h{)W^&q{T?%eycg!mzIp{` zV|BegCa-icEohgOiYU_@$FNcSU{CX3`qT0QMH~C5KMfo|wHaA8vt5vJT`fS-0CysQ z11^FO} zoc%^s0I{d8Kk%NRij5^lGz#5*isqX>H&?PkhvX^WUV$@6GG{+g28qa%GoZ}punAKU z%Adq$iCb1g6nHlI2~|u;Q;O0yN+w5EyHNM>9>*YCS0DF=9>O59g}?5y6Z|>B$TrJ} zSnx4abWpck2#Iy!v2DFiOKe3+)qKh~ciNh`*&d$L`ZByg7+*e0Lhdd|oq_deJXk&+ zy7NI+>{_RH4JE|*!*avYc4 z_y@mLj8LXt3diNQ9P%9yko~bNL-GQ$^BB=6d|G7%;4Vujay#*pqlL?|KZ;@l;K+od zs!OA{F-^*$v+hzOI)#b5=bfQ;3UpgKpk!-f@zhjY7k&KIrw+aI6y9Z3m<9WaHQh^@ z8@`)blmbuK(zA$Be~496>FP2U-Mmat$hx-fDRLb#h4ywD*bL#$964R#3LWG>1%65h zlpw^(%hs->>$R9H6|{77hby}d>u3fPvj~0nPsXK;&DzpA%5`-Y5chFGRhFHA6v*dT zmVTCZUaW%xy;9kL?xw{{UEakF3mn~{h+klN5gTA#nD#?rj!+q)X7>+2ZjPE=dd-8j zgPW%wo>qodhH;7Q_2FteNAAQO**&8qw~4OCrulE0wKMORt70(Rf=M|1#~#O9BZBFz%xg7nZk1*pJF0>#i#u`p(}>% z(9q@0wa`5K$hy-Ps6E~7I95% z3VdpK1R9cn=QFyg-l!w{bqsQ8jChgX$kx|K1A`Mz2Kj`*#>_T~!6W^Yt}Q!teaE2O z<-iR34QG2}jvSUgG=$`Ej~Ru5xT*aU4PzFO1s@vcNp-?h+x9)>sGlY{t-~sA zq;d5tDY)y@2KX*h@1V{Iw>}x;ZcZ}cVnfr`r5 zhp?``4_BY7ov4kN!Gqn|P=_7M(TY5cPv9kd1I|I|NZL@_P22(tuwGMOMlDK=#%f+w z(BkOss$~L)eOa5}eJZahMRXV~SAD(=~W2CfKwR#03G8a2|mwv}|lIc?b}19Y~U0Qvc? zU5Z|a+yJ-2Q-(>(lxenS_tfF50$%(m%K1&%npr&+6M`i4X2=FEcKwvt$ieAnFR~lI zzoU2XBU-A^+vxYVkCE*G)C`DG62xl)TGhqH#kcC{$J4wq9<|jusE&*DUos== z>KTUFpnnK_A>uC;V>dCe(SSm0CWCS#QDR#mtdULiqwsoI)b?fNJ3f_es=+ejPpQ@S z9KcxaqHf$|GwKLA9+GOw)G+#Mv#IW!NHBpEgN~Yf)7?lzUOws)8+5R&ovvV9g~rAn z?_fGXnKed;L8waXo4{!2q8sHDs))r$^?81W54c?bWmH+${!#-~;>Q{Sdvt=NZt2wrU zUvqJ+rTFncAe4s6Qp*IP1%Cv5a+F+sw+zhYzUscp)}juQPN1CBk&V!y@T;MXVpKm@xDK-6K#|Ye=ydy-&5wo}YeOqiD_8NQToLTG`Akr*bnrPKTF>OEUPO(Cl{&%s@ZHl;5gi~p3vPGSG zfn{>rmAZstED5%v&M+L<;aL_I6~-;mb(+~^%@hy@*EuBulDy};b89*B9G#U$FxZ@w z9ZKeYhkuqNB(T1>-HKX|RkXM`TShMlRH3D!MaY{{jXQ(Vq);gfh6bJ_1e z`mETSz8N^RxG?GCeMBCZ)+B1knP-s?&TkI-ZD7Bbdy!m%1v8As147U7z0+ly>*2A_V^R zL8hBXHWgPI154ZDMOcPmgPlp0_`Te)uBI1-uzh7!kCJB4mTe}tmd2a*Nfx*Yx2tdu zS|l$TcZ{EKC{@Gad=XLSTQFo2%2KWiLVu2p~nMl zBJoM>=3XPSYMW2yCUlR-hLiz4RTo}0G1Dnur#7|gXq(63<%Ksp?10AT>uNls@t^Ex z3z`tc>cnI!#$*#Snx56w_v-3ry;(J@P10~Ksa09>@uZ~9wq}*#aE{*MAdbPmy{11{ z4Hzc;!l%Xz3CLSp8Gb?R?y2$C8n(kt8?OF<{!xh-$ zVyT5`r`d`xldbBeZ!j?qW^4*g&AbUF_0J)&BTz-hz?ak1By|+*GR^hN<6GWl1Q?Qt z1Pi9MTj7-Df0Pm{S~0LRmb*YU{Za)}bGfV-hZ8b&{>ag(Q|VUMlZNbWKlE5FaX{v4 zq32B$B?4OjJwU?07CCiIhoGv{83dN~((4v3ekAtPZ;cNo@dkTMzHIs^GG1UMxq;{I z?}Y!z$vy@aD(Q4-8QU<_#YIhjJ63t7?@Nc5-uT^p??)zRH4l|mp>JTrj}N;_&s}B6 z)6~Ns+qmgoU;PO3^&*VHW||LOJ1yP|-}% z?^BZ(-8h^S#Nm?_UZ-&1!do5_(3(+{6spW<&+)mu%I;R|k*RCCfOzp_8=Ok~>P0I& zsPFusRqOn&&9MW!4o|%YycOL)0!A}(vZNw=yyQ`W5SU+QnO0Vee`GId_Ow&Y*lVW| z#i?RCNFq6u{RI%YqzAqCW6*P`nq#kAv+^z192%XY^5Qj#%4vVP?XPwZi4RKr_YW-X zRc~Vmo_%yO#bi%C@3G`t%+q)jmwm_2cT@&?kL*?e}^IYtHf^1u3h?Wlox| zZBkas`<$b#vdHokUZi1H7dSB84lsjcbHw#nHm?@X~0`72# zVBc0Pm3XtE-6SQ@a zg1wJmTyZ5fvJ}K+kIiN<+8j?~UI+Qp4@cvdzmkoHn;=x>xe`ss`X<-jYlAO*%1gKu zoV{B3=AoOV+~i=U!;LzMa)@yBfU_^t31krxx^d=HAg|xD>G9ESn$jJ$zKMs)o*W+Y z#6pdGAtx|iAnGU5eOCL`$4c2?!skuo5&Z*7)$88G=u{}Q+&Y@NYG&ISCrmcNkb zh^}b#Gk%6)2ay3(BsMf_XGWgyMsK;v*ei0=h22oc0@#?gyS8Vi^of$k@3`SwkwzOO zu_SC^kgA^W0~&^rfK+4;qQgiTDTHsL#%TVUR?lN|vayHl?8=s~`OqueC}IF*wQNiS zwxXe~4M&hzo;4;rXO#Yd&95%+b36R%gg%`-eLpFL`1091RjD`2&-1*-*DgBZzI*BD zDz<8SPB(z(FxpKN3W)TnY#lFEkV|KiprJ|31l~Shgi{!7@zaS9kIlTzYH8D0s%cFf zoehb-B6);|Cc#IoN$eCZ`WgpQNh(*W`Y1a&Y`}{xiUVbdCqN5d5zEzW$B_>YOf#R9 zBGd{PVaYGum?<^wr}9G&%_)=jt}jinchBElUK~(7RhDpPvmg;ET-|hRf23&n9D8S$ zVA~n}(zKzuI>$osd&{pA{a!4l!{{j z7u)-bVFv*oh+fuKcnw9@tfrKp&Wm6YiJdu?Pjlfy;>kHIBBF=?yT+zO!%B_Pf>i< zV58m}&aC0akJM=Am^tvIMaor2)HXh(c13P-lgnCXSfkwWk{{VpGC7vui>IC9v&dW# z>8b#p!l8g?JQlzhmYAX$yTu);WLtfU$rc`>)aj+hCd`7#sIA02I)u2=P#|6%8}Jf% ztJcnTE0;@IV1f8*FeKoMK>xZ=*%N3+Ybw*xZnhgc&zJ_z2)%G zl^C-tttz#s+a{NkT8F){#`-t5WYL(~ftT zFY9c)YG^!52YGkYs2qL)KAsc;cXKv?V^^2S**>$XVozA+AFsx*zX|TWTZod_nVF2P zGHNYa3`IWwT+r#EDi|M1q3~TeTekBURkr0@@t0x(3>LPyvd1`xt8-(JmLt~r^r?Hv zm-M5SEoVmEXZ=rsIdVI*@3A~7M@huUIW6{{DH6EeMWIa-_0_uKN_4xu-HDUwU*2e; zO`uf7f%^M)M6pFE(LEJl*ldfi5{)G-pmrD;Ekpo!B4~tc@kt{QfF>E(yJ0s&Eoq~x zK}iEj22JczKyw@u@B#l8P)^ReR+qqW@!XzViO4-_J!`Wx^!hD`ABni zWvRA+>bmpeRMo(p8~P-A$U)a$Tnk3qR1#%x@7t9Ahp_B>&VQC|GZjk;OoonM9dF=x zB=d*UO^I~3@&kAX7;B`SZfb`G9ubrX+PwTy00h;?R0$cM2z1^$UuW{#(1?FU?>(rc z77afLt?BV}sG>Q0t^_Ke5Xum-6RG)TFr6-E@Gpx z&X~oraHnF`jd6jh_=5fJT+)op$~>bZMpYRGugK;i{xf~Tv?)$dbYbu2Rz7LDO3bY%y`sbC_=KJXLN^4zg#ae8&AkI|8xgE1Axc+r%)RdH!2fdh|JSnO znX4)3MPu6!mxnnd5QIx9os7zRq$yCOcT7a zorc{49w*e9>PG<6JR7L?sj7M}JUx(V>&(Rg3B*~ah>&}ldoI9$w3Ut>M@p&+4%t*|F;@foR_zF%dKjxo)bJN{Yr z*01=2t7XEgSA%>v8bUGT)iW#=W}9R!%NgE@8E5(~+P;@3(AFlNEo2s|@9YZw38|iqq&4r0boReXe0h-0QA4oXpfaj9CRU zRSmo}_M{X2yXo5;x*-2{H{RH15e}wPMn2IxC8uW}qso&w8{2c*MMnB}qfUS1roET3 z4e-9iO7yr;ewK07qWWa=lYvs!R^fd_1ouMlIqQ_%DWm-=j`~#D55lD)`)D|5IWWm# zurWe(ZSa-KQ8Fr(09ZPeM~Vr6@o5b~PUjU8Zl7EQ%825!W|5|FW7+-Fo`6a<__amk z;1|?vY3LPwR@wFpNzJP*0@nS~lk>y!y48*Khuh!!egWO+cQ`C}r-=W!+m zH_BA=B*(JMo1}Vt%`V%3w81QGS)eS#iD|=Y+U&2Q#a8z(PYa)&y52mnLCK)2p6mPa zO~6q`W3?cvtw@*1VHwb6Gh32K{xw2>=6R#KE8FJ4ky-cAetBmSD-D&!6b+T-scQ@V zw_Z3%w8=)PdvR29NWdL`yt9N@2VVks95~wk#(Tl)^vOUIdSZh!<^zZ7V{{!3XOj;E zip6}uq*UiQWqZ6NV8yZdQ9L_(|I=OVO8hFfHPz5!u!?QLYPhOJj-}Q5O>8dlv|wmi zwYmuK@(AA*s=rdVY$~I(Sr_5Rg~85KW)B2ApTyfV+Ue41((0PPva?qOOY-{8enfNC z-hqOy4YymW%0;4))FO!iXg$UK|2${ zFj+r^E!X1(-;(8zkdIvT^q_I}T(Y1c4rtulpHwXZ@gKrJvukR$EsEN}-PsnehQBu& z!~=O<5B4(VWs;L6dwMzo!Zmd7 zl~#@l_sI&lJkAwa(=Pzol}Y(7XVu>qa zZ77{9R7sDoK3m93^@_N^FU=4MVc@9Z6i*$i7Fz2f+k21JHAJ+IrEwnnrl%Wjm)986 zDA?VP!E2tQ?*3VM{&hK|0>`?h{Kfp?czbJ}+9wXkcEFo&vK!whA`=^&4&tEibvn)k zE(L^Yg}i6$qt1Zd3gFvM&AX6TU@T@$N}5GkElg9>udM81tzkxqkmAdeHx~s8L-hg! z;hLVO!<`&~YYObt59pQM5xE_&MC#%srW$IQh004x>WVh4JC{^GOtb$2M7vjI@8;_lsT?C z_+Om7WmFx_x-GmQxU+C~cXxs<+@0XA3wI0d?he6OxO;GScY?bUB!Q6o?t9L@-?;mH zzwW;pqq}DJ=z3~Cb5>P9;SmT~kVjgC=uSRYnNVX~sg0%`ILhIusTAsofRV{9X7>5i zgbvH;sI0mf#TDEn?l7+~MKdM^7v~VU+_7QP*ZD)na-s~0tlMe&s)+HFR?l*un^aRs z$4uSPiS2k(G~b`!SJvgN-BAw|&Ih|I(Yyx-ofxP6{)lN(132m&FMn#2^HtQ9q&!CK zXofkj-5(X8HF0U95>Xd1wDyHrMAA7XBAH0*TVcvrg!~wwlV9dA%es;5#g zbQJ*iKP$W^e8g36;as!YZK1%GEEFPELNi2xk!B*` z8;wZp&lKTSb(rq=Y%`nf=P!z0JisY$mDO&$}i1~KMH)T>}k;e%6DC7!>I-DS)R|2&JyaAVl*KIM!F z^_Zx~U5<-@$+^u9{nW}c0$b5PJVLdU%0+Vvnr6H@j1f6NIiF(FmbYg9W6H(tN_`nl zqt{JHNh@M<%_aAOS2PsSdvg#wFF#j9SeOa=O;;g2hn^vt8S>C>Uh~6~>jE~o9Ry3{ zI_2v`x_&v`*yqxsOee$C=0z@7^7E~hC51AJrRCs0ZmDH22_vL^Ey=7ixChI%gF3nT z@}Ln3g;zfjNUa^5b-!-o+P1{P8wCI`bpE5xs%JD zu|%bWL@2?SC)tL#?Wne>VUV=L#}^)7r_ErR-fDg$)au#?~K&vY8)hpnx z^OAZAeqk+f>}|9XDH`a}2DrwmJCq=&Hk{o*hL3%H5@0Cf>@^Gc@ z?TGAnia(>R|J`Rg1qr}17S{IC?4o4qkX=@PudrfR&{E$^v&wre+oaF>knc(RiJ?J| zsqI`%^`x0(m`l-duuo}vusN62J(z1#-POkLkuc9urUVPmqkUdf%x7dDkC34IZu!~uz;3+eq_E_~DoG;Wt+a)=L;*BZ z6Od!maNrJb!RwoBQ74)EETbZLh0rW;RJC!k!ms;?kn+8sPE1Bw-&5C3Brwx~ds(q8 zs(M~&jD>iB&-$U{raj>u)c7XXN}3&*RnS># z2CIqRI-jj5Y@q89=K0B$mNC99e*~{6y-=6uGi&Tm6=k0SGL|%K7kS>Cx|%XmflvV% z1v$IuMLEXdV4Yi`@qd^~r9^hSKWO{XV=~IoKsQFA;Q;957W9~hq4i_XMx*2^=k56P z>o@aM&~Lp8;d}JX6~QPu*iBy|x%)@cU8AE90}+97O%jBBQ>=|qXGJ}h@`CFJ!iBs>EP7@`&0 zspCS$uIqgF+?}Yq8)EktQ2k8YRk6VHIAZNld7bSQtB)p=%#h9(naUV-7+ULOjK?bj zl=v#LFu|lYZZ9lC@kO18hIruE&xo3y^7|=vR7#%mJ#Vg^?hM~>zT)_W{E^gf$Io#m zIWbaKmy4#P^|}cKH!tx(R3lPA@l%rQeyJ{FXiXqXbG0*6zcGFl(Tv6%e#f)Uq4r%rzLst9 zDf$c0w=NxbE=Z=-05lwF3ro! zJV*G&)&v=i=9LG!NLDg}fm8M0jl6#23UC{j<+#mZyycsxr76p+OQLR{Q>ki|4E7$; zkNbabaL7bs*8Sp&;rL^yA#nf2*(hvAmt?i7mO_IFRlo-(n0{m{gZD}ydP;Zx zm8I@@)DZ9C=U)I{1#9+_V90@izV8p_=Qg5><}|1+9@Lg+_CR54 z0^x-+=o`cJ{WhzbI%`(sgM$UdPdgEa_q(I`8A9zp!HlWmtCLGfWx>sq4{o);+}B+= zlO(MuIteSsy_ljdZ=5dZ8O^7dR>9NiHio8~JB;XPFo%wH3QR$uU2+ML?DQAex}TO> z$Nx!If-x(ZTDc50K4|$M*NzPBN(baxJjtZudkeZp;RXj%d+KXFmbcSpG&E|?K^hJ3 zxAGWb3;(Z$hSBXXO3gT*K1q?YQ}>63yGQ^*ySaAp?8Oo*S}j50g~VgJAHa(p17E|s zfTr`)qn3rHe9dTxsb?iXVMQUvbLT5P9XoT*h#%)$nFZEAR#C3*fGf=J^+UFeLumr6 zyUU*M-upiJz35F1FNGwIPb)i#MkW_$|1KvLXCWZ+AEPi2+6>hg86fPcjusH}$qHCq zYLz}Uytkxi`@Vi%{!`c*D;`XLTQjUs$IkR9U2ofeZfCG&!2NdC6BQK$sScrZ($YGS zQvTRw?nel1e`2ik2THu-h!Qs{|xlSk{1Os`d`O@V+)f8v*?e|@E{U>oj_^UvI z1hNc^!IgFc(*Z@cgKV8smxPq{@qwZlDTp!t#5z2m9P98;43JFx3|ET_AW=z`wa1VY z21;tXU+9bw+9#=rDdjzH4!in7uR=G=FIN_4@65r+3t!n(9(}zO2ZM1HH&W0eNvWlY zQ)yoCvItC*`3!k(DH*Q`|CzVu@OqjAMu}w$(`^}~XZ{c{-a987FAL>!$Zq)HkRK)` z`?5`=o*lQ%G%pJWsSqH(X@~`yoOekn1|h~#O8M|VEZ+8#O;+6@k+Rf7d{WE}lf5d? zv>pD3R1F4&@k`24$x_l^K+VqPK#fDg2;sFWREmFJstKZE_n?q?O~@t}QWvoeCV{e5 z@sI`87+9ppwnbTqrefQQof?odO95HVvIIP;W!q|6O^=xOFT;H4RmL_(JuZ5uA_+> zdB|r)jQ(ZRPQXFr)YGggFIeB}%?G6;Lw8Clta0ih-v1Zcm%$Etl560Ga=h4Oh99Lb@r(RKD<_V3D@m#W?BQ zC|%yKhGsAmuu{2rXt{S0EA$f#E6&wvozGrH89+Vn-n7yg!Wk7ga8HxZq#Nox3&NNCp5{j(X8CG<7qIhFv&aJi8!MCxUnC+ezTcGZEBEi`r z3LuRG=aaYrGPb5tiQe*Ty1qH;uqX4nN++QL8eJFoBuddmY3hekVevBcl<#N`f7fGt zi9`5xpsB6HWWI>Ug10DzbZ1QKI3!Mj`%%_|u{1rB9u{-*uzU30@+=RmyI4+&)) zHSg|9{?_11#@ZBP7T?w@WO$(fYqaKJ$vQAFlT9Fpmdt~X^ED=BR(q(2GB3%)g76I2 zty({W1Hb98#%d>%U_9&tbH{ST8Q=TicDp*^2dJg+*5Iq{^-q1dkEgNcf{}8^pEm`u zWbL3vGXw0#Yqc`a0TPj6vHi98_-)7LlRuV`-lnofXZblnAFd>`Y!x{AoTKTWbFNt# z5zq@j+Vtvky~Q`J!!bM$Tv$FPt}VfJb z*JQ9axY~4AWrdt{hZFx}ci!Ynsl8F2J63Ogu>HBA*cQ#F4<=+v?vy=Uq~Z)6|3 zFW%JT@t^qA-;_|+Vwu<-jl^u%*$6VUOTLh!qxwWhd}V~>_n%krSQQ{Y_)yUZ=nu&K zscc6vnj1Z!E;h1y=ehOr{lCMtt2cy&UTaJA_=$qjyS2XAXH8qkFV!8vGTTc!e83? zqBf@7Bir?lG(pk@`^XLyPWy0(QEC6m9{2k z*7mokl`RaznxKND9e0a?;MhiaEE=5{Jf`2Dk^dJPu=1Za;CpVHQ?#)g>?#U&CN1bSS4Cg=?sMQHsQX}Y z(bF!Rd>exFST&1=bUixjZ}6_nYI)$oF;gfi(0uYEQB+8Jesj~8w#*hbN63~bbLtAP zhjH8k3O3}8UZELkNetL_dlCGP;Gff-uY)XY+qT%R;N)yXJ#V@?r^5nmco{eAj=bT0 zkuqi*-jq4tSpT(1i{;pIX;E~j+-CEy-Aa?n?gbyJUE6K}9^T~dXo_aa4U93lKtgU> zOKC4gYuf?ZDb(|3wbqmDuL<-ao?SM%6n-T_>AdL814b#TDYCtQye*3SnNl<3gMx3( zbnw?TRu(*OBh3Xep_NWY`v*xBt$HY#IIntKg>o#E`wPUso(0zsdq0;)do5^n9Xz*4 zOp|Ko$)f98zGQKa(#H->XFargfN^wWZ97rN3+fVMS{t318f`;KW})lQWKX5+AstMi z+cy7~y{0zS)8e>K*JaVMQ?9Ua_j-2jix${k)R=-6P*gi2Quy7@0 zs-qQ+2ltO?akje7Be=ibIl)|}ypT5b!mRuS=v)bSs1)0u#>^hZ|eKUSf)&2``0{>+C3rMm1aedt~vKkLz?DB)n)Ug-?Hx@uyEK+wU z-#Z*n`^y^`F_;jQ={{q^6Or=J#e>E2T^^v6RL7oCR&9?KoWhlqy-pWTCYIGHO<#Q#-lW zMC33g*2~1%?$seu$GN$DDyT?!N2P&!wpwdCAOd<2XP`$-%Iu=?X>J9@9R3*fMtv(r zJ2m$2x&6uPYSX8{eOf^A;&kx`IPKk44ePpCkC8~EW>Sc@QHLtivC|U^_`1W0r(3$F zCzT5A&nK6ydfeo4H0JKJ<&lY@hXi(sclmF5vS7TcQro_rYR`<1 zsLD*)hh$-`f%_w#rpfX-UTAa!0tS~`xS&y4Z!uW$7p_&6VKOt|??oxYY1wY`QO)GI z@;v2mJQDz{i{)e3Gshn!{3}l$i3(TWVVrO~ELEwa#Lf3(_p6493&8fk~qt3-? z@UPQ)lr)By6X0qxdu}j`-aw3R02mYj%E*-W%8Ou}fJd0Kv^6w^DEKlsOQnL5=i z;jrNgTm4sjaavNI8Z$~YVvf`s(Cd(*$sn^yHolSG-oBw7y+`J`k?RlAi@9v8KsK;Y zMIIQs-|YDt0@pXEDW+%6)iVFJsed*2l758pNPj|>{e0{_fWb+qr-BH8KH~cU` znHz@wtd$&5qerg&)vsFAGW+%agD%~lvK)UXwuR6yns+gxHB!WM)Cx}(bq|bgQc0-zfd`@i)#4<)L>SZbxbYXYr3uM?K6GBP0Fl`${aq7rC@~#9X{b1Y+hf z6tt8|l;!l@2&?Duk|r{HD1`b9c7_&CkT_``qpsqB-q62*6ZsepMhb;xS0V`9{mb22 ztX2J3KJ8%Ukb!W zUhMT{akd&{r+{?c&ME?QkgrmaNm^`~q>2{=6r0C@|IeqU<1`9g!8{mVZc(=w_bk@s z9`mCDh?OqD(&r*%Vv&v~ zX|RmC;zel~Vu|?#=3KHN-vY;&L`8?txs@KCLzsld4h&{|6||B`G90*_lVHa{-)Nwy zcK&}N2*P@Kyz)ir;l(ysAT^O8LA1OxWez736NSHV7fbmy#dXBBvUqgGUFtI3Y2w~t zCgy?84wCX3je%SW?T}Jj#GmCMHQmNPXM-xe-v)_s-e-Qj41t&di_)TIX>URd|Id@) zwtvDkG79{%_aIg+%Q282%Oi^iIJZyKdclWgD=@&(NAz^ve24L}oXs!s5axH$g?0JG zS*EURCG4qB+Sv729zvgY(fu{DtNBE)Fm~%*WTlXE`rT+V#;SA)Pt(Q1wk&QqmLGlC zc7s&2-YW#|ECwr&cg6XZjx~F+OGn{{!78VU(UyE|eJUe|;(e06S#>;gh!9DgK-NJY z5^{INzX4}Pti>*H;}@l5=p-N9O-Ix?Tn!!)3BD=%Dp*yK1yp%qm66mQm2){Gxy^8o zkH$$y?SmpolA*MQIIM)>c}XUViy0aJr83lf7BqTWV>gv!w2K!Xj(aIm89+;LJNc_c%PSuiLBhBhyff;s`eJn4g%l^%^Gl@&z zQ=5dMGc`zYu(7AQqwZ0q$Guvayj%_uCbk-x#lJ7gPT*6SrJ<4QZegx4}BXoL*b z8+2Z~28fpSE_R%UDkX+F0s-jK4>VFrZ^(+q8p7wVsI9iJW5_Tgu0f)u9h82k2`CCF z{ehF38PdicjU!fH4m!n>Id&RsbEgo|<}a4)upI)lw%c{0Jv&W@>Wz1vaDL*yrZc?tzCyu4ynv~I2%r6ltj?fSWeE& zvqkjtb<%`Z)Ul38kC$^)n@18`X}1>9mEoeYdjQF3weY|Wk^1xg7O4BMSthH#{^@4; zzEJsDXY1^w`&Wr-V0~Lsyc?;%0_}U>Ce=nOMRe`y3Z638sGVx;VRi@(v4%Iq9bAc7 zO5B}()WOMrES^K_tc<%?$O+WhNf}KlHEy{pj zyjKeS0ip)oI-I8V^qLM#j9wY3rVk!i?cehgJXnu+n9qe=|4$5^lQBNC*jzqQVZa!% z*I^=U2e_(f)4^JN5_Q5G@O5vcxpMrOj>?{1WTCiVIfzd)R9RoojE&8~^xiP*X`A{vnA zPT04C3+i2iVRk&l<HPfu(cm0RD_jt;UkYKhi2@v|WMd&)mC5-E;zWP}oJ5|d|pTcMYMx9vT2QHdOV zjMx>avn4F$An9PKi{W<^tb>A>RZHsxn-Qcz3XW0Ot#9>i`jj^{jw@A!Z&oUXIWd5# z9I#`QA5QN9n+JE;8M@pwGl64K+`+#blkHOy%t)(6f#L3p$eU^QN2rxo3rG-ZJv4k_ zG2v0>f!6p)R*UI|*6p4w8;orec~@;A zuV)#ET2tw~yRSt6i}b*bQItgbn}mUZr=-%m_H;WfgDt)r&Sk__p!z}-9(Dc<0pfMIB&1;sp+LqD$UqZ~(hEtKZ%e*C_M z1TY(Ot-7A|C0YL(;C%}I1y}Hga_fqa?TFyRS*h3RtJ~+B@27@=#-FBJyKQf$Zr`8y zk}q~-bVyFMGNEyr!MwODjw!4%MblFwD3QTTc95kkj}Z;~S|NczA&@O==a?iravA1> z19fwv9$^x60{m_YxTFrBRYfyT( zE&yhcOy}|!wNl2NOf+U>nOxGvG5DWssoe7zek0yCqNUT@lKrleyVQCkf~T~ak`#)e z+HhUhoS@mzI2m#ASiUy~P%5?u2QF2sFz_$ucp$DHTg-|m5b=rY`*fhWwahazO{{87 zgb-;hKh4_}v1f51buqCYw0B}v4m*Qew1#@e55Gj@C+vR95V^u|WZ4EuUC=9Is0TE@ zV~rmg`?d5cSv#(lWRgYA<|z+sNcWI{@T^5?-@}-I79Hl9kWB{GC+dmjMMHyH8QZaZ z)<-aOcKtTy=H_p^)Hb~5`YCdanY6N=9)#K|H!hM^++1Z-D5*^n5d$mS{w$lD>kiw^ zYX?p`k~LCe{N&(iwT#Bebw4}#ZgV&IMgwSnW7U;dwQKz$6r!YqHt@Ri0Q>k|f#w)x z$n7R>X7M4mZt3N%d`gk}=}eN|kwThMs7W2^z9JTsgOsmG_}EY7lAlxHs=|8n=qm2v zYbCHsl8dK46_{(%LoO&8I32fZH6qM_%9}UYEndj5Lh{)ur9=(x2@v)cI@mZB%<9{T zFVxA!q&FZe64oEqKZ1awg&-@(0R$>dGUjCpmajL2tDsIW?wWo|`#3p}uvGA}$)_JE zdOO@A7P2Z?3;p|cnt_QZGA5bpuyFMywRx8XDS(vMR8fKbqT=;v9)_L{jH>pyGT zm-SP7J{j#`kzWCS0R`m`m(>W=@YwanF-FP^{geoe1FUWd7s?QXp?^T8BZ|6=ym~zoc#@gG^K#<}WpBlcGwpi9K3r{EgxXm3^qRQ0jV@mQKu?0&3oRgF1 zU2HWqO;G-{#9I1oElwm;V;(|W7P$*h zM<*=3#vkI9UuCPdG=J-Ux2`!}_)0$a7y|a8>?%O*+U0`Hl(xTZh@-|zF{`~3rV(B2 zINaSjGekdqCL3s)Wn1-BCunjlf~ z3yJ|)7(=2zydL}AkOfZCI>22*;s+`s%4HFMRp_&;j3;6YH&fnkj1q~6ahYf|Ar7;K zO_MFm!!{PqaXK;HbxOL{smc$d_Q$aJUW4C=rK0s~55C>?Slghg6X9LhSwyL6^RWSA z)aBdjugoubN@VnUJ9}xlzAki_zKBF%nQP#m5UcKawLzt@mP6z7`N^dvYCthbzP2T9 zUdk&P8&^jj_pCtNvQABgyAIEsdnsg!pA-I1Smhk8=;GB9FIKVLI7ON_-?UX$e8p$9 zRm#yU<;?E^#&7yEHEl929?RjlTUHAvyH!cQZg9;Ff|}NIetJe69(0hO814>H{Z~HQ z^m};w3lLG-TvDNL%MdG2`<8TaGvkJV-fU(txLm|#I&ubHF>+U`z6DjG%2wnZF?9{z zJC27AU#+erLfzms#T?JvIRP^Huc?eBl7>$zbjDcNb6-6@apSD3Q96R}7C1bPwq=*B z7jwnSuhIKVE17q)U2G0q46FpY)UU6N$6&bNmZxAfXAg>gUK`43_K(y-B1vIr;j=sL zb8&M)Ms7Uf!_i*JPKIy3eea>FAITbRRX-d3=k%tEKg0`9VYak6AUSzwnxINgGP4}# z6*Tkafg8%84EI6){oSqK`7d)$|7gAouOA}4uf4Toi#6-qp4TIG*5EuhObG%}hr9V< zS5{7B(!T(={{~#Oe&PDKyzy8&z7w9(Zz0h`R$tK`%lmmEOBK?F z8R3n#7L_8(kxTS6W>}3&mQ7ja3dLFv_@>Q&7CuBx1)S=G9pFurxdgVJ2WpVpML#xr z(x|TA?hiI5jKQw?*?N3oCz1<*=0Xt>JaV=Ihsk9NdoMI*+Y#fLNGZRkw(}=AWUvW_u>jAdmmhKr-C#ynk1!b#f zio)2i|5-=;urF4aLS9InLM@eD$7_2MA31tM$4B&XU^cj|;Qjkwz?_B;)$e{tVn)4s zj&zrFxGSj7_Ipjp00sbj(4M>HQ-SD}1Fqn9pI~(VZKPC_v)ah)(!!fZ;fJFsI%#%_ zyo)>>-Mo1)E2Ta!E!U08_Z4WUv^=_`xQX9cIA?uooRY)ytzFvo6f}1Ym zky~Z)UU5C@9>s|Bh<~IPxsLAn`gL3@&3z`1d2$9TtjN-VeEj4PG4Z5dM`iT?U=V{i z>GVrf;Y-0BEHi=lIoi+xVR*Er%#_ma#SAgYF|?b0TB8zNWsP={(;>$K?D0qR#U_ zV!SsUaojZ$-c;EV51j-_6*+po)7fycTgpjOq0~uHI*U~$9op@7qA_COME9LQNHF_cU4J;(O*?}Wmq zng7|y$=BzliKBbGvl365?x=U(rZw1?HQBbEC918gL+(h{==kr9cFFaY{TJZzB6#`m zN@`iVr4nfT^|Y!dLCWHbwfb^NGxyQrv*g)fh8Nkc&fVsZ-!Rn9m zEqKB}<|KAamr(wtOS;AtR;;1?Oi9ImdMyK5C?J^eIdfrjznA2p4(@U8vH5hR{U zzSSYtV5ub+*Z(eV;G`oOVvAn=^d1uvRay0~e`!IdAm!)TEzMER1+ONh%~O3??epW# z>@izvAT4T<6aD0OBBAyq(p{N`gzMdeq+i0<&KM{cV>@bx3RNyE(rcpld2VVBQ@$9C z$xO=HmxNKb9ij07!x`re;v=Wl&3f1#{sTTM>CQrvRZZP=n&;!!=wX*@>G8aU4zsc` z4v(5{p?ZeL+=;mP(@!QhB$C-~AtQU{e*uU0bDPQm#m~d3kZ%`ywS#{0gEsnhSk%3G z*e1QYAcIAQoDLsiFrpE&zs)tc%6ybT8=+Qb1s-81VJGgG_HZJnn2}{TJ|yR4G66{C zeZswA<~!)Jqaw$!LRqlv9k;!LS;we|428?R?p^n+@`=pZn-&EB^P{FLKhMomD`#0B zcZt=BOrJ%!U>5NO^7Lo>K^21n1b3FO|G;1QhiiBz4dt*Xyz~RaSN`@|p5P7%4jWxMMns zxr9xCgBYNh$tb{>K_F2b`*|A>Od~p3 zHR^GaDI^`+(W$qZ1MKYNOE`+JWX$#DR&T-}ZoJlIU}YbivcM$rcBAY-V9d8*9@=tO z%FR)}+lZ~CqP_^dT4#*&i`wIrH!SWoFgS~XTrx^VIK&8Nx*pnO&yJ-#SyDs-Jp`%Z zdO1!Bxg{DUq{yia-)v%XagkWUjgpr&gV<3*lnHo+= zBJmE-{|NiC7B-oH;ul)jZr5`9o&&iUr;ST=?dO?KQl(#;+v_^=SPO`egYnV_j7$-s zWAfQphk-4)MPJ#vs$w#WdM${hs+4_M1-|c+c{ySQ);$$v21@6&NBs~)ACixnlI!Vy z-{RI$6kp^yk{b@3Rp6p??vfX=bgNGmEVzH63h0d;zn}Ejj_A;MLJbOD|4tNDGB%mV zkCC=SiWP{9m=_PiOVP5-lYP8AWp^o;Ok3|Il|(Do0I$wq%WClkPOY@&$}XgIzVUgU zC&J==MeF(j&mR)gfgmfTsq7VNW~UvrT#u1qu;Ov*x%p;x&F2J`@e<{Ch#P$hfaLNR za5Pq?DzEJXu2Zl_U!M%wtbR1pjO}qtoSoaXuN?b_tEqL{OFy)s-1O(h=L&u$6yD;( zPf(vJ{sIiG+y(M}auj^6 zKPJyYIx($|dF-XD z$2fjsKMZX;S!Jw1fC7;c0(4&zq?E6y7^P8teAQb3f<(S^kVoc-`rl6=$bnS3iVN6A zkM1Vn%@A+AItB^L#PMW5$NS%~M^pnr^K5QEkf|A%_4%kV3P*#QBvM8iUF8sNyu~OH zk`kmm>5^;B#ef*%%ofyUrRtPa2>V!O-YSEz0LBJ5EqD0ze_d4-XC|kyDgpqY04ATr zywT3taHg5b@5BuzG+f?h6@I1;P^#?V|2d`kEq4(_TMUW|sK4Jwi|x`iFWiTfS{G*q z;U=Q|{+Q#~^8K%-F7Z%8BlIb0YNl|4J zg+;P7GI*|zD}W(>Y$6V1)#N<&`Om*mx8dETl6VGtFtYU&+h6dq1J$R*u@U;smdTca!TqW})}FW}XbJg!RM=dQoL`jV6{ zl5zlFA?|XT))$SjPtbn>?+r=HI)o-P&KPO>jVA6Z2MoTrIH`;?F~5(#X<~eWei6WG z6@z6aTEpuak)V%@4pXAqr^i-y14A^XlLXSpF)^tXqt3~w9G-lFRXtTr2IqOHhl_3V z{t#0@yJn>Vql?|1Tw!9>o>-E^Cd-G5aIsYxgMf7a-uj>-HU62lDs)cO6X+@}t#sGw zR{z>{5(ox^$!=DkTP+}pQbGW8y+FD(9v~|Y)0mVTlPnt*M-`?Nz0Z1|LCuVS82Twp zQ!(%{tSHg!ZXx~iy_rOr5i#W+w0E5r2V5H5%nqo0Du@iV4n0-muXhEpNyEE z4S{v};Y(iTIbDcU?s4#Z?k)xEaT9kbs&hSz=UfPWu!+q#aT?q|#m+Ks^&L+ik9FhG0sUCh$0?AZ?g>F@y(LY;aztL5NarTY!TKv53aVcvg&Br z<5CdW#x}8biFm2ok;@tOWWOvZoal-=k&ic^Ie+Us^InxB05D!5DNYKgXiQ95M6mC< zCTJ`_xGqrS(f=mpNkIcZcS4`<{pyK??iUyj$>&jlmRLou&z5|A2ztqwiAII>bVL}| z;lfu&)VlGGmG_Jdl9zfyiNFxEl`9;}so;>fqm6%SrBaJeDJ}az?F>ET47zc$h;Z0H z$?Cue3Su^6q9g)Tu7req&*;&4qt%2SrEH*Spf8hSV4~)-M&}+F4oh$OJkXBef1;XC zG_FMOLMcrlMB)Ao1}-i8k9VaDH)BhMO{WwLI>xwA0p+Oei7^A5f$kM#F|#%W5HFjN zP7F=-344+xJ1uE%wMZNe2j`|^fcu^gF;V=q>l9{bdYhK}ku$}Ba2tVo@!mv1K0zEc zHpZ0ZzYrv9GdNT@eZ-o~J13o0LL^=-I42!do}kuyV3Ij`TG@Z*`K7QUAdkVrd0+;L zGJFlu!$qaUk1HC5A0quM3$OwCkG8`{sXYtQ=0DDZaW}~ zhrLrx{g2)^pS+=MSt=_xWur zfq+ueP327wr4__kT_ju!r7X1(G2VZNkd^k&Odv-A*q}r0P%3Hqe&=XF0fKb?cVA&3 z^|r4ukLNeZa)aXH6kr*M(epioJ=z_n(2c7)!_(9LFF*q0Yj24S|fN@pkmQus?vBX zR5ob{Ff_Q}fkJ83g&aNxSfovT8y{`~m9uwRyduw2o}@of>kj z4pdOT47Pf;+ULqNF(k{I)(!H}7ElC1JPuTK9QPtT|1!Y)egx`E5fl^vmAE34d|D+! zgfI>YvB8W2Mc!3lo<&vQ8w0{E3QWxEwmg}iJQ3i;23r>c9gQ?aDjG;Fn@kBZa3FR2 zDoKilxrncXKI6u~sitkpC!O!^(EsZ0!O#yd!w^s2EII8Y%Ft83VlO#~_>51x9nd z@NbAYia#qlQX_VuzfP@))0@qsbvIe0@<-1pIp%nxaP5Go5#x28ctLP%7uVkc0H?@JAYMwnZjsHz{7 zw60aU>L-Gc$4^SDxKS9DCYx1?nmei(XH2jtE0n}~Qb!?=rt%iDLnxJ!#vG&_zRM^$ zB_LEuB4smS5bEKs|Q7J+0P{-xEkrLc7&DGN0s zMPXtS`d0)A?0c<+&7uqn02xQQV+OXAIjx(bcY&f!hf2Lgd#==X1F*b78 zBy97q>~~?9(^8yW%Ao{Ny|n4!#E{<)IwQy-Xn2!tjX!Pr{{m8@BQS|xP)&tC!5|8T z{QC`Cnhr2*8+gBoXcF`$d<(KDKVgnby1SE*F1&L<=+qxjWZEld_r@-3Mv(XT8E6ercDFJKC#?Q;}W_LiT@p-W% zOPO1kP7M1JorY-V^hzp9X*g1rdO)=xXmC+P!%x(jXt*RgOM!eiRk0JD##A_(JX|ct zZ_rgv#Q7`wWV*$Qu1nltXCLIFnoJiAJ8+AI4r@&Nr*&g9p90WHblEW`z8Nb5Wr7_^ zznMjyzA79R;s}l3piq$Z0=Hly9yeGvVPBTwubeMv4ei!E=J3a z?g4=mEiA<4G6f3rEROQdFP3KD@6h-Gg2&`sa2BZcL zhcYj$QH+Jwa;;u}gX8PX4`L*)N25&5hNa^*EwDK}4Grt`FVNmd@i+6eJxKB271Y=k zWMVSu6A+KAMbV4PwMX7yw}cXSmzpKPAD4}U39{Z9n|R)*&A>G!kX)k|t%1oI#F%BH zex;hYr@t`&5p}Gy0siCGym3q`RSeuh5*R);J3+<<{FW6x#HlD{dg8LV5v)oxK(ZMvX8 zs)I?&@s!9N*5K`i4pT@YcfDMs!qkao&`L^9=wPA~_jS%haX$?MPII0>m=IJM_bGbl ze9jp*60puGXU40@tB<5=VKPmCYJHEzANm^R)mJ{=lVc{`l=_JpA#XT!WF|loD!2)y zY(QMx6G4I&*JQ58-7Xym*a#9cOR5PDZ*2TXx`-0~rR&!hhL0c^@vL0K=3+|HU{ivd zsxDrv#oh2gIIXFv&i0Yhf)E0S=0OorKj=8}=ZMTSTqt<}yDEUODWeMIicsLQ7Ufks z*XtL|sL~P2WK4V+gj}q_FQVa+fEZ(C>+5v2i0SEj5!N}S^@w!evxL$YAn~%F3b8%M z-Ga{?>dttIW zNSklJ#e{*$%J6|Z9?m|E7jbXPy_fd>^u<5P*s4Djw$O18O;>eS!{s+^LzIL|W#Y;p z{{m3cjmY&5&;m4|b|CoZ?l}qj3s5Dgo|MyJvYCtj*5%AzDVb#`cY{%EGTVU^o|K&3 zFv))>K7&bxdEkom7oe2!1PmpY6Fkq8=!J+O04fxV&01#LYgNQ{ENK}D|iG+7v=3F;R}+Hb1qaj6tD?;?O1r`w|Tw=(6zERHvS zJ;Pc-e4#A=fSQoHKRSiZ(N#QFPP?V>A(j7(=Lr=OA&W`R+R7DQ-(fi#Q%iGke#vm! zk0A|+<~8gJtw{HXf_Rs7vVFV`4@PsCbst+bIFen8fzk|z0rQqg99;Mbb;3a#qbU8c zAL^)?0v4)3lYdy_*nHsVf3^3XQBf>iz;4gLz%am&bIv*EJmj2nJVVYI1QQN9BS|ty zW&i~QB#Yz>5)}j_BLX6zh@#>*p7Wmf$NBMIzh8IVyUt#{W_1@&?cTe3*RHB*YK;$- zt4v%kD5dX!`nV>B$DZxBxG?PuD_+GZ(#!?rDTE5Qe-Up+Od8qdj+w3x_I^vgxHhtG zNr7RD;}tbWA;xH_rhT;DSCUW_4?>gee@C_ne;0UOOgm3f15AGUwW zDf2L`)o19^@+Lx)p0??p0}Fm^Pv<@HCY|pr)vEftRsyySA(U59F2ojQ#C~weJFjg- zcy=rJX>iCh)^7N}PbK-P6?MMXS^v>jy{d)n&ijNmvH4I|O2W*=J?is8VxDbOO%?%}Vq#7DD_TNdb#zaJi}jd(`UyN5H0bCHt2ECl z8>G_Uxa`OlWoNW-G`NEeAN#y`w($b*p_m*Kc_;A5x;?UTD#ud^FUHgaE1$g0@~bJ| z;DHv@gy<(g7u(LOp|(h+G$HwgP7M+xLF7682LBw?U10b2eC|i;4iY|D9EB%tIn^Q)y;fu3gJi16_}I#&k?RhYh1ULR=+7AUIX2q?pM zg#@$qdbQyc6CBqj>=CcXt_bQo4=$T1$+W+i?R@gqT#Wb(r^bM!CS=D2ahyO&qb*YC z$_QxbIxc^nA?B;Y>kf$NC~H#cdOEQvO6wdmC~!x_3L8~A;h&8*my9fJo$s0TyFcU6 zoV}A=7TgBEMsKll!E=x->}3|cx%b}d4?9Y z;Mh<&O;a;x`i7uLRv&FjKEQOpxskRkmOX~-ywn_r8i!VtUKds1N^Zw4??mSd;Tt~I zzNWZYdyg5ne7wdPp;!$>Tnj^GRGB|*>rrdBDR6L3P=-Z%g1A_l%a+y*Tj0vwsx#V& z%5wbFmTG15@X?+~szm1a0N&SOZ*JT~&8vW-DyhZg3`e7(c`|`3<~Hrr5wOftl?$&D zw=JSRNKa--mC=B#6FU`sgc|*zNwY2Wgt7l_%2on*%FrIp1k&b?S-ZdkqLfy0Uf%!b6FEPfkWu6K$?D2ZPnvXzT-^p~Z37Sg<6{|WSz-z|Bqdn&BYFd(+llIdfnAE?-ZXBPz8Go{<_NSk=PRQidkLkv+|L@yn9KENKUEjTX9Wr23o z&Yb)Fg?}=Lh2>?iTo21+iIxjCWF8u+BhA}1i_0B1Cl&{&P#YT*Q-txr)t!=-#ADRf zv8%IKQaB_7?h?lc3`l(REvFieo;2=#P@OUVEzyb937a!2FPAWN2Vdl{+F8mXf=hhU z^}4WVKS3?Q+dV@ZcGH`GXmY_6i6@j_k^M-x_H<9&B*mwcx6^KBwmq!R6e4iL!oBFU z`9;k7sWhe5LIGBhzEi<#S--P+Kh`#-Lh!q;GtJPte^zG&N*!>defUUv9w=X_@ z^<$x=!H<=0eCAV>@U`($c6mc^d5<6fo30JMI^%L>^tU#`;mLT(o82n#d87x~+n#h? zs2yt%72ClG@Rmc8b?TIwzqnuTjjTMvRY5xyn;ARZx7az;YGAxOPOt{rj|~+$c7lTK zu*a+?X8orQjAuS7hTqeuEJvzU5@%}jVSVABf56#n$l+mmHeQe$cGzs=#}qVWnx$$9 z(|){J+PypT$X(zzNRRuNz%gA{oRxzXeG=6Yi~`-iqHFx?*XI6uZS<||uOGF;`p;V= zFFMvzG_SO}vXPlJ(GAUQ%@C%POX+LTOT;znrO`F%CGr}4X=8V5GT@}L=Yn%S}2qVdrLw>9xLh+d1`26k zuqaQ4I(Go|-!2X30&VtSP@_`=GE-Ab?Hfec2e^=vts|juLuxd7N9p^v*tl~qZq()C z;v!~k{Dl{mhB44I0L=>zG&V9bqo8L-^TMJ^|NPjafT$}Q8;|`}f_@88)}F$g8!qLB z=lX?U6@?C#78yiO??-fWPj3d}PiL9B_AD-*78Dc~an>YCQ`r<0cI|)KSSm{Hfvdkt z`6w|f*rVGnc(UIm#JcxzDc8?Ce{AVZSwmKX`f6@iusv0VTk84`@8RtTo(8w8cuTm-_E<4y5)@Ppko9GZ#SS((Rka>|*PZ*p zj8W$jbBs}Ef*-QRch3Z`ANhTh6*Ilbd$U-kw&#I-a(Bn#N}B$pzI^raPk=&Q{!QeD z)+_9TQS6QYt>fkw;OUu!T?vCP@)HjD6SsvM#ZQ;W*ACKD%}(}fH`qcxIkzN*sY~)a z>C~2>AkP@umC!a?H2Fk?@TFkLGwqV0%YG`LJGLufYHFzVsrrR$_Q`NzVKK>=SMj<` z;UW2FYl9E+gcG-LS?a=^%f%m1CM8o)!EW<=?wSTw*7E9PmO$h+3R6XHN>6Kh*7htu zkWl(0bq^DZ1Xv&dOoBxM0KdL1{8#>!f8}5KSN^{!6gwR3EAWutrEjeIwypX;Rr@`h z?iY+XP``)&1-Gp-{~rDy~{!8h{;JYI>o58wbhxwz2;< z{VM=G5xC7c_t+|9?aOD}M`E83}kuLty~foN5&28U~=0HO#y(LRADEF|PL3b<*9_y_(?n6ngf z3;l#&7ux^?W3VsE7RgzP{}cd8*dqU73?=5Km_z!PPoN<{atr{y2HM8nqo}+9e1ACe zKeW>)Eu$c>BLjb(V3sOaIT7=?*Lf@SlQRe;J8O40K~c*bBVO z@XLKLzc1ZC2OS(fVSvgDXBhu68_g94~xNh2|)k=8q@1aDWH7-nbH5Ug$fSSg9#u& zMgVpbz>Aq|;FzNR2QDa?mq&h$z}Q2M0L+{)fq!%Jf8cgJTf)2;7Z8AW2Y}YVl)w@H z1Mi>%BTao#FcjdJ3Nm6>H}VwwU&b^6a1;_i5uzY{;@G8x+5^r3|AYQl{*`~_U-?)5 zmH&5z>A!n;h<^h1?v^WUjLxU$P@Qrk6M$X$naKBtq+h$h6qJBOK&sJ?Si;4=M7$Q(L`sRpZh&UBn_z zkT9MY>+?Q~*dwEf zcyxst*z&O{MO+f8R@>aJB7oN9P}-w2a?v~#0diXv%&0PAKvppG35}O}pA@Vx90UO6N}?C_B=IL~Lz$i+ARus1ctXLj^$V`#B-A9pcalCV;AD;%fL5a88YtuEt|Iy&$2-)8k}TpZadzGQ+T(Wy$U>GUcB#uvh0$UBhv)x^Lgk& zqJ#;s;M8bAmL^)6sq*64@C1qPwC$?e*Y_xEQnK(VN={IYInknyPA%)oaW({p>jYe1 zzuUf`4$fDWL!Xg)oeGn`rNgmPb!o%>Q=xKzP;gxW3CK4N(S0I3b61O*HA-!4u~vsj ziC1Wc11~OkQyGL1oO6*NF1IF<-8>%=$|~nb|JWeJ@APgyxfFSEMQI^s zK=UG!0vpijfIZ+*e!HjleYY$CqZ7>=XFjoJhDgBo5ru55y(QS`OF*F<={fkROAS=k zNO)U|#O|B00;MrQQlsKHGw*KI<76U8S|LK;ZjAZdQBQ=CAf{NXBODza`|0^aiN6mF zEJX3PurQH0sbpKx#P9)sJ$~fV5)Z=S`7?{udEpraEdUk=Ow5n}8D5n2T7%N3%m4tz z0dD{HAqxq^;;bMI-=e&4hp@d}n3&J*s|_Pa`165y{WT4qGBONZ zi8RL|(4ZI;EQmB|7;t?Tpg)H8RSK?d3e&NYHEvrZ9#oDE=~Kt@+EVe*xu+zhB3VA2 zqhq%SU!#(;9A;X^GQVT4x6XpR_+m*^+b%byG{xMM3D`e_6$sy>a>4#qs zGn;)K;TPi?v{gCKg=CF359=R~%a9dfr@kVu$sLD495gtaaQw^m$H>oeQ7@8}evQmC-&t zR^Se9KTgfb*o}J9K2QWHH~foCMHLQ~_61}QikI+o_L>MS#Eno>uKUiK{voPLdGtWaLRenKxu^7^UBM|tF59=l>ZY0U=xNw#+e5Ar{>icK-Mo~j<#ENkW+i5> z#!(5}=7q8NR)T5#VE^FVt)g%eVqyZem`YJr9!`STNABwXO=&?gm5Gfq01It7kXp)f zZ?#R;eIId23NgNCgzY=T8Lfxz!Q&?Eh*|W^ut?nh)+cRt;>}e0A;kRkhP!_QcLnQ$+M|R7_SoX{%y|+NcBKSkIu_hbj)!*V z?|#TLVYHclEAP$D$uzR{A$vQI+8Hl_r=IjwAvl9n%@(g|ihhwWUqxaU*~vB$RyI$c zJVY%BJulu4$%WxHWBzELuOf9uYYG?P94Mtgnc!=m>jq_Ons%2GLg$@Mu#r)j278Z# zT87>&efB0DDj;D!4#`i@rYFy!Q__v;QPJ8gO<2CN10OySkSPg&FI#l(P1$QkxDUkvsH%-KYwmZgnG zkphKypFlZsj8GWZhYKl03x>B18R6m-%fqIa{E7OttqS+6f<3?Xc9Ww{I;l=1 z@h&8ktVt6*m+CKVOz!1XBVhb~#6?H*kt} zFCvF=3U27oF|XgX;ksi+Z``UPCf%>_b_jc7OuLDk*gFXL(#g%SQLYP>RLS#VPW70fkAUy>N zQPy!JM4s+T)~F9eHm9VAlQsm7FjJIo8L9Ae_PLA+;qD)EorIRbNm@N#vsFhM`*H-} zjXe!2cvUw7<>=K&iNCn|Hbtf9Ewscmva7v9cVouv}-N@ki|?zWD*Bew!D z2_gX;MKZRMSaMg6h0s((5X{+C5EjxR+=r6&`sz$S1_)cv=maZ_i1C!HQ%S8p8?dPo zu0T;H&uo4cDy;$R;&^vg0}_hU(~VEWegfQg6Hob<7&2UA5@Pzai8FGQ93r)QG~?0| z|IDEPwsx5sbMt5vr{vyhrcJf4V1Tr#Jm0H^CllZdSfm~#Q`19{crd92vgPnB#GN^Z zQiCxcho3a2Ouva3F;i$jB_f{jog?}&?kj(g*wGi1jof&PiXeUUj=Xn^WsW^aPdO89 zvc}xJjgzesjn`S?DE|bU@?MNOkqr4nNF;*qd*?(M44ag{Jn}wss(_>kA}@xA(fNa5 z3o;Me5 z`9V{h%35NdU53WJrARVGI^p{oR$#AaX+7U4Lt`pv6^SvlC^l#)jw885D$h?97fQOn zYl0O^CmR?qNi-K65$YrFSz{EV8?q<6sXg}^a)l+59$Mi^96+EUuP1UK)fY>IB2@#v z5TS5wC@$Abs#jbz-XuXvNf7`+7!3m4>g~OGsM|TLN!Ln`G>fUA8aitwvMR7RZ2Xb% zr!UNahNrj!^FSseC;-X;+ao#Yqg2F0l`-4Oo!=cPB`>DdR4~VCLvwLeM7GBSIteW# zL~VLrya87DhsMa$t(8GuwM?FXsf*g9tgEI{T$p6YjvzndG;2TEHtrXYu(BI(0gRdA zPQ|Kr^S29kc7bMT@+1ys?5F{)03D8ZGQ9+a+FpGj=)-!?dcGYtX))q!YU0N7;-c$- z3TOlb**xI7jJ~fgLx?#B?p_Uq*x|beNPjR2Z zjon^zQe9{B9z>d=OK+%?x-Asuh-$qo^F2=p;@-&-v3*jW$i>wVuiD*|+MKk~3PoUD z7>jemdrz}SA-n;qz9;-Bm*{Ratgkqas7UoWkb8Ms+iZe0*jr0(@3$Rr*n-+t58XAi zYEnsuxT=His^IfLL;%{jNVoIZ&$stw5~BVXij9EA;0daDWhxV_uN2jji6-Q=u*WAi zkiNcy!`jghD0P~7^PbTP>rh)@nT7XpYqN0Lu7Q7=o;9I!Xe58V!dc;`aX`)`77Y_M;U)D8|XX-OQLf=Fxhv7ZZR zbVGwcSCxGXF{LCq`4et0W1I2o)ivn};c02nI9yB{*pZgxFpaDZke1aqEU_5ACcqr| zs105oO`nhtywIOMD_WCS1_`+ViSCBawj%f}AmsOlV()AgyuG34@aXCMS_QF_A92E{ zNX2ew-KWfR3IwrhuO;`OSeMHa{>?6mb<@MCP!2mB0+Z^Cxy+DI#Y5snF3}HpAv}Yi zMI#xGnwJhS&ej=yPl*gDodZKQ)FZ2<&nKwCQN54J!Wd_;2>YMl(+Kq7fmxWa&!mHq z)lOGU;fNo4uuHmHnBmQvF#5kI_maU);5B9&C^xkyD^LqFp#Fg4=^Sr|FEEBpFjH;d zU%P8&v{jIrse;W9WCDP5S0A=onfvOpoagnDS>~vj%p3!(I3{jkj zo5~|U0qJ!!2bFxMH{qK%C#Ou~BBf}rnNN8mvjvAB(Fu-KOUpP#eY>p$j(LKMEUq3j z%o_fti{x+v#OZyQ1xcFPw4;~UZFVSv9kB9j4F|2=ors1F#>)_z9o8T%CYb$>PuvKP zQUS{A2EQQF{1cIUwa=yKdz=1c&kcqu|2q+s=Ulm|SI3`)b<5AcnB;hx78yLz3D>*&o?QH1EJujt>0G@>(r@@24I}XnGtwXvx5pUT*$9Zxg_K zOv-uIrP|K;QG^ERfs;&C)L=ZPt@4RKMK7~;EYtadnHeC$nF|qeb~nk^_pCkmz%Knr zo&m7uz{*P)Hk03+W%*{Bus}-y_Gc1MkV|oxMxNddbX4*=qD=kq4MpSEw$a%v%~T?uTs# zeb*>}E#Y%7ey%$-dugDbRlqY~lfNwfrX@6l$%^txs`k5eZfo>p_kKd&(P1VrIma$BH@vCxW}E;%A#v;52Ux1YBA-+< zU-44WRk%8wZNVt1DqkcKnhzDv z^lVy+U_o`LGV}RdnV+_kbBX%j3CgBW7sD#Ed-TJtt^;;TOiF^2Oz2`=BGfuA=&_)_ zMKICA3Kf67X~l0{>Ql)wYb4VZ_7h;SxMdha|DQS6;~oT)wrKPZBZ}c|vhRZjNmI#$ z>)XP$o23_bgq1Ad;&@~dT~>(LpTJL`#3nPPoJQoWs(e3b8gCDSh7-XmW^PMFT}ej} zo~J#mmibKkCy>-^)AVqG1o@Cdz0_;eI-Z`RG{_89Gt^~?+L*%=PGvbF7K>Z-{DT+f zlBB8$scys~R!OhN-ROZbqEt}qD1iDz7yxAGLeBLfLU!x#ScFyOM?1?Tj; zhAfX+kT#0(FAsss8ouOBaMiK*ppK0{`&uD5;01-W?x%fyW>!~=3hQw0*-6b1v80Fy zoiCOKR>|KAF+vPbV9DH21;NN)3YZnxu6J?o6JL9C`d|n*2?_9ZO84AdDyaAUmUi zIB`@~hSh#O%^;G%(ce)PY720j(NR35iD6GB-Jn(v*r>^XQI{cEY!kB+ZL9>VbRM4U zS*Ru3+4Jl+a@p{q@Ex=Nko0tEoi?C~>f?X)Eqnzt`TUk*F`akFH@u7h6Ob0I_$>Sc zZiXWug0Gd*@W$5z)rJT|Z)iHRMd4Xh>ORlTy+t>lNuDw~E~yP^il9zz5|xef0RSiu zK{|lN@Y1O6@n#h^=DCGVFFq_MJt*a|a^j&;`#i~}#v^j<{nlD3Iml{&TFcv(o0FXK zj{C(2ydUipM`%Yibz-I$jyo60?=KO5Y3c*~OV05{U=h?)CfH+7VW?ln&Sc28!8LDmqMR3=N8;JfkCwx!is zJSe(^qD5=Tn$H5W*t&_eCazL+CkOk%hg?M!FVXM}_sG>eufwX%MS|I?xfXlGFx6`l zg!ff1iwPb!)Jc_v$Co#(z(uE%YK_oiXve-d$)SVUnBkX}GNXdzz)>xUYi?69l=p64zD%>w-T-#BCW z#_Q7)(bTwRrAQYVdcrvA&ZkO+BUaVie`Nq>fWBZVr}?`AAJ!A-^T6HlmX`@E9P;YX z_30*oh91@@k~gU1j#x_1$Z(J&{V41XThhKsws&5syA)*uqz8Fa)LK37+99pQzSw=o*)x~*1=*{QH(3i7tCQ(rh}c2si65{KLJrmtQb z6RS#FCq68|qLNKj+XT}_bthCR(aqw1Dpd14K6o~wC9=q&CtieW(}Lq6oU?*tS2nA# z6$HP$Dl5Lnm>}DubHpglQ@y}ZsidKW;?YB2G{r5Js@1z)r74i+1XCBpZg=9s+xx`v z^|H_Nw7_I(%qcFc=U(u@6xR?JsxYTVb8*OYlUH;cqQdOb>aTBvbqwl>XEL#zXCOu> zg9bGUUSX>W`hVqYS3`kjm=8~OO{B7TD4R$feti20O!U}y^x5_oV~h~tsUGJNi&K}3 z7H%DjNqu1AW<8u%nwAJB;u|Z7KPH$VZkQt>i7R+4U+K{YV|_r#vzbe}z_gS5kc&T( zwU2Z-1?|#9(5;DsQ)tPt%$zL^Rb7K1w`aM&w$f-1zC{&5>~*FbK%7g5lE!nB-w*IP z=lEH-xvOkRRKIZcM;XaFNSpA9;LTCe5X>h~)FrR@R0@dbGB)N6umYjeig9HKH6WfU z=rX5P6+)lIRT<}@+2(YVZY$Vkt?>~BbA(He-e*)=q#eo6IuGapAGv1xO9R!!I~kB+ zHmyoB`c;P|><18-?EXVlBTRg%eD%{(yYuCCre3U3j73bR@EaJ|;MkU%9wln3$xrk0 z*6eVvY0OYTn$AAH(PCkD$2Pwj%Hxn7gFdl2^;1=3;9Xp_PQJF#5c`E^vWm%a4E zYaa3%_%!WfLq>}Lr31g`|J^h5>otv+PC-FVRqd99fUc>jNtnwu`=#oa(cqdL+z_s9 z+)%D9+#6h*xS^>FkEk3D=|)WipDin)o-G#PMg_s~`{c@`iLf{6sZe1i0gNQZ#{Jr)kTInH2`7IP%h9G1;wx0P63Qj zr|=Vlrmz@8n%deOlApi~4}H|_Eot1l>gt+bl`tmmZdcWMbS*v=lBuor^0Fx*U3@B_ zYx3vEc|lHfRc-C=UnPqlbE?YrG3P{wt3|fCxA13f9nCTdAzp|TUhTgXi=OtUprD|{ zA6D0dqS4(0yu8vxI9tZX!FOizuiCSMqsKb})BLUo2a}U?{k%@DxH#Y6UuqZpP&mFm zQ_-8zt3TN;5q6g>%cig1Q6=>2pkoJeis@J-=- zL1txb(|OozxW2ZjX~5>%Qen{y;pVSRK$&lk()`5_aJlZ1AK+5%chaY6QocQ$e=Ai% zK^0d~xR8`QXguCoU!|V7Yu{=-A@K0bY;LN1=#};c=->sY>y+lWZ4_ttwJagM{agdC zWHc%$ZOVI?UP_H7Hb5OFN4F}4gt*vnMRFHyW_5I-rm}#9 zLf%|mc&mLWnisB5Z@*|}JnQjJJ#ErssgTm6TT>Z>N(Am7q32e7X?yI;-!tH(2_7t! zBpEHf_VQU=_c(5?$WnhDSBCbYl@<@w5zN-#+MysUFF!L{G`lyuj+yNIy@TslaJo=g z^e)j2DVQaDeqkOmx>>%+(C=9my5^g=yrJVQ%Xl*+7^X zb?6rpf)+l)l-hJ874!5S5_E5I5{Bt;e!yV}$U4c88ly7D-M|y}+Uzsp2agkX$*h`FD z_ZQfl9Q@TH;o4buu+82XLPbBsZol1_C}z) zu9XqpeVR+qOncmrtHp!MQbKz~PWF$m^a>R&Wki+bGYAd0;#%~3ok!2!KYGA-%j2~yshT@+v)-HNTdghjHg&Za<;EYp7$0#BbMLCZpheGr zH{twJ_>9;&FXt18>+lWhHX|2VDF4PE@7JH-0azVyUi*z7=h-cb zbMA)3If6SGgTedX&SR`LH+{bKK7XTvFR#wsp?dWs)5oPrmnu9>7PJ0+|E;rp2Hub? zdy6Wbjo`e!i$CZ7?dSA_55r!48`2FEh|_*Dbp3c+FnySQda-5nSCfQ^TfeeYFIK=G z%*c_k{diiW|0lfdvm+IrEHmtVp+nO-H5)YnxA{|lcVQ;=p+`$i!l0Dc80UMZZ|iL2 zxR%j2+kYCxf^E&7bbnfNA0=wHf6t<_Df7f??^i2!Kd1T_7+;bsdy_|y<;xD}W2nI8 z7J-;5`wDxKmUCpw$<%u*6v&m55m+xzi1tjcUc7@Nd*GtDI)r;k`m8g{0 z72DzwiXT892P4GJg4s_c?{56@0R+jx+cBG=OK`q$W?$cyIl?sfhZrU^wuS)Yh5%*A z$9Q-baQEf;=|;Aw{*V&YuS)L+th$E+jn=;YaNzbb4CU%Fc_E4O=gEyT@+HO#q8sV! zEV`l7Bqq13SY9AZ&6p(qQ#2l3khQM;ArkA%=+fkNEn!x$tM*CdrJkMxr%l$n>N<~m zI+m1BKd=#Te$cRaK|2ITNzZ5P$sZeVJ7J223a^!>U?%AB$S1w(P; z=lQJt6tV5mX(ft1+YMXj;!Q&D!R%y?ifK%@{RQ^a|M5Y!Z$*Irc=}#jwwM+N_7h!5 zPyOv9Ew4}Yy|S<3dDzHtDoFz+3^uxNT0A4sH~K!C$ibwL+xYooCNJJY@xA1m7MCx3 zWNBZ;%f8g1;Vg9@#WH*UttE*)!{(hoCX#+xx)tXslDaX`-rH)yTJ~vCu^@h76l1SR z{C2uwl9tnc?ds)CqJk_%PjyvQPZCFdlRGAy2UO-bmxdxME;LpAMR|UC9o>XybtdEe zaqrSPP^voCLO2X2n$r^urwWIL5?o#SJXf6`{@_quSA70!=j6)&0Z>Z^2oz-t$;Gk& z0M*?9003h^oWD>@0|XQR2mlBGoRoY`000000000000000GXM|(R!v`QZ)a~WQ*>c& zWMOh-UvF}0Wo~p~bZKvHFIG)oY;R|8F<($pS6_E%X>?^SYH(*&SPTG2;Qm`j;Qm|n z0Tcl2xK(r=OR_e&#mtPhn3>UHW`-@+mc`6uNtVUT%*@Qp%*-r{8Ejeh=$zAi@3}oQ z_jj*(o7G=ER3!vvL}X_DTKTmDK$Ve@mH>c(0|2IP58&5108Pxr#L5Ez27m+r{_MI0 zPzsyc8G`_(J#Rf=5CAMl2xxdD0D$cQ00?yk06Mz?fE|%v>wrK2*zW`UzX9=I_~+Q4 z!(e|O`Az)l1E9e|e0_Vs&;a0QU=V0vzXsmS0|UGcg9gNvj z=baN4u$BC0MNORQ*&7yvxP)SJ9RuP`DL9gfhGJ^tKIhl;sDUWa|EGokzzhc1o4`Na z_a+D8ZTQV#R1%i=!pw%sMoJDs{xLPzu|2u9z4o)aGr!gVh;MVi(IC*?Cf?pDt#b?m z{vGf@jsp9wmkIwZB8V7=o_~wrKll&+ga6<^_%{F{sNG^wPw6h#WvaTA6)?TCR5Swe9B z78!Ui7n_yiKN_fs90nFSzeV>>da*UjEBmj>Fn!RJIb~KmzeNdv``lU^IZgfNH+P|v zS?;6x?-3Hk0`R4;cHW_odL4m5&mrZl3sF#A!cO%NT^E#L%gY+w`t|n| zx@#t#beXD{Zya4ixI-^>qA=J49<0y5H1F@o-`n7#)ZtFD$m) zPhMEe=w{Xfn6t1PSmH`P;eBEoce+RQ;s7`a{T4UD_;M%yrw_u&bIS^L5uWH{Pw0_` zXif~4ls|4p>9rkLI8g!-<%QLjdwx$l3^*qfge)a8UY$|-Z`U@H>C9f=4dskiAE7#uGAE54`~UDM}$EN4)4s5iW!&@sE`RBmt5j@nE9_M2;Zt#iDA z6_g%%BC)1zc^1)vXe}zXRFlpx*EuB(O-7r~Rq7Z@Qa8;-#3Q+J|644<+-#giVIZp@ z7bN8oUqBUAocsU)M^Bmc7I=be0#33x}cpoc4Q~-Dl~hF1LP%{g~9D>TNQYWY7{{4v5gU66QLJ zk~UfoO{wvIpJfSs)b(5J0Dx54bX4H2KQ8N%rCkB^{%T!mrED>J)OkI_K(-clq1#bz z)o)e{0GwoN-NUpa5_(dllP@d)#ZyOR-^-eaMF+2><@c<61JW-*-E1@Q2!4yYiXF@t zw0+&88-WB0zWSJ*5XJ8@0dRgFSKk0B8PDM!HO9KyP`Vydf5uEyPhY?j`h6bQf7A!= zxBAelw%Yld;r%BN3qhr+8&&`a1yI?zR+G~2Qvx2K(yGYoddL)X#wNen{~LsW@3xug zv}p@%+DtwF4%vV34}g8gwr_a~f~L#ndIliX*Li85!&Yl$r(x(hy_cdR;fnTyIhCe} z^PZZ>EUiAUtWceF3AWa;+<7ZN%{E3nLL;uSb9QrPsuTD*V(U75)BtIlc<2#ARbqVS zT9uY9C1{Phak-GMT4reguy#&`b}}Vwh$6rLsRLB#C8d6^Dqbf_0@z2oP`UbD1?^5? zg0}vi_Bm$yw44lBoXU(F-=QG@Ngyd7!#nOC|L9F~d5=zu1S$C>+m?|X0Bl-Pv#O64 zJs)W+5GREBdppN`P zPbxfZI+IRXuA*wfLY*HRN$8sSuwlO>H9Hx~6HNwPios4=IdsCYCVessmsKgPVH-@A zXhD780KT1tMktmWr@MLQ>*%IA5ZHwNr+(lYPXyH;gK1c@G658EN8_5L4Nl5@>`;l9 z6j{B}9rpt{iB{?Cz>xE#N;V%Q=rQeT)@va^i~7)-cBqW}aSlKidEfW^$5^HOuv(6% z@fsIF^v7$}Q#%z9hNP2Gd+eW{*X7;!roa6{z&3+;1DdUZ6p+`%HwRFv91Us;@`tUO z!B1+_O#f@`2iK~yZgr%C;J~>PS#Cy$Fyo_<&C2oyf7`{U4GXqBjg@o)_9QDX7t)tT z|1j#mb%LPNcIAs+n9;U$;{>47fXb>M-%o1(H2>36;&Nv9g37jDk<0ba3H8%LfA>@i z$Iym07J9#v#@7}sl=S(3Eo}m5E|X3pkhZcK(jC2^g-ae&MtRLRb1;xs=*JorI{_AI zMvE#hOcV6jzc$*xspM7B^rh!>YY9{u05K}rZ3)s&R)eON-Hnr=73(E!$t7mVOt2RM zLrIw(+P&`UGB|Njc_cevy`2%pp0=Hf2z`?Yc;|r1y7bffUy@8K;OJwOXI=uE<4_W6 z>rWYb`7_KM1iB4bfq;0AlTcx&3#SzbG|a5&KWu^OtKyuSka<%TKyU@By@bS-7YdvK zc-38d9+4&KR8EHGx7KWq09*<Sf335g%E+`;l4w~*RX-fp@N*h1rUme-Y4Me%@?VIG`t6L z(q5g^lH`Bg6tQ<&HqSWt*XCd7csMZQh5oiwl&42M$)tp!D(@8t2JKJ~0L;ETvY{S5 zA^pu&&4WYx+C8*5TqSY-qYTOpBu((i@?R73%rC9E9BECsDkvry1$x8BEamq{g{HCf z@OMNP79EQG5_QwrH~at)e_8%Nkwlly2=tE{Q#mfq2K+6Iz3L7Jf<1Eno@92NNnI@mS*TxlDusaoahK`qhEX(@ot%G_B()(s(Zh7vbSPlRr=%7( z!;j&Nk@h5~mM!x_x|I7q)h9l0E90!cyhRC7ul$lb@6#!V>lDsJ2H!}nNZ)NBM zw}Xhwr~p~4iT(GL2s&2O+wJu1(`J@DTHk6@t(yo)8J1v<0tbN;w=NWx_zTiP?`F-t zBC}aoRC&600RO)RM6CeYJ^=7Kt>a$vzf1!&BZzX)hO2?eVPvYZ|IC3pFVd^Yy6Uul z2wrPrMcB-^%n(%?5COf^MBwUSRENKI zNkJOA6)41(7vdWo4_9HG-~YQ@1l|p4P$F;o9FI^2Lh4~_)sF=Mc?6`5dvdV1pu{F< zy*5Ra2QaKUKr%>1v>uHI0@XC^bSQ8FmU%rVcRV}}JF3|A4Dqd|)2Yl>$o1tN$6Ks2 z#f~2O^y=&JarOU~10&c+-3a>jkwlF29}}sdo=dV@J#H<}v^SAorNH0n2|bt7&dB>T zfNtF$tWGqZ_)z0i^Sq}#bq99q{E{8SIJv79@m_lC$uIz-g$b+51uA{fL+F3;F!)q6 z8uP+LJr)Aiod#L!z;PWj4~nWtzZ+jinn=D-5;q8-WqaHkBg_tH1`X&|<n}lf)$y1_1|+)^@oK)o1}K<70@J z2lhA9(&MOg@QE3h?Xv$b66wzzFpwl8nz&lx#@|y~k{1;}{!`#g4AdLt-z-FJESTFM0G`cr z5vcgPGdLAjY{4XZTh~VpGT+TlyoC(kIq)5jxmA;Sh;^aT_ z=Mo;Fg4m(?dHw!oT>y6eklu9NTr(C-dY@x>uT`di*)@OntYvxhLUp^AE0=A-WZI(q z1ya1q1SZD}wx$`M2Hw9OEB_A2hmB$06Vn_pmSyfQCW6ZB&8$&=@W&i)TL*iypioF^ z4pf}2F@(>w2N5-s(#7y)a4Xc4w~!^CnK~A%SU>#6qyy!3uCw?Q2*juk66-o#vNs4egbk~ zzOg`WcYU|FifN!=L5TZ_(HXiv&7ek~J{rRL6;4c>7|-14BYU?IZvS(5F`Ed>3p47w z6SJ?cDfcL;m0i9fr6?!1BEBMtC~Q6~U>n72^Jm|gim1jDUfO&-ilAD)_pRjXgr$8T zZnUH+nRX-6Do<0~2iLmuRnqHain8Kt7qiWAu_vpId4~XZm_%6b~}>D0K8v%^-mdrb{LY3p!$Jhl94$j(U%==+B=#qj8QFx4E zO%cy#+C7iqIvR5GS3DU}m3S(`bQ&b_ia5+LX^L(T_WuB|` z{YFilPQ2n|lei@5bJ( zitWYAX@;^<6%3X53u?1tPR&av#Np+t@dQyK@fAfxlH=c0&l9KWQX>h|(lW9M4aa?K zqo@yc8Zj3>wntT{R30-E4M{B zjMjE^bQFRYZfR$Eq_GY>63&#iV=|{6Ey0IX#I9C0NvYxB0jrvb3`A!>rWh7fNU06a zLmBywE!rf`g5j1qEGTaY7!tB7j!&67diu6FTyR}uQ##=+(8C)O4D-krNYNMd3E;>0 zG-FiBBYVmA@eZqC;iS1>{bq6Fteb7kA#=mq81)S6R`4OnkPQdcwtVkuWzoM8R$L_z z09r>ab?^yr31mD?Qa@YGtC4)6iLX@TUyqAq0^tLan>w^E|ca>d-;+0gNeEknZh zASd;~I=>k=cjr%zgZLZ?Oa2UPF+V@aDJIjrusj^4An%_cpGh=gu{&lmoOFp49ISO_ z`ijJ#m%Wpmkd{18oUSYVLYS_r*})WWandDFm}t46s+`RzSc~1U47tJj^=G+P0FJ4) z+_e>9iC+rnTHrX)6m;Etg!@@*uK|yno5Vt#56F4~Ud`DTUq1nC^z%p3ur(w|!|fP%OO_(Sz{G;tR?&Dr&a}6sH%uyS)bx1E z37L%q!aJnM=tQqNNG~-wFQ^`a6=QhH1?1^MWbxsU(8OlUU zzdko2?j4#u&v6wdHut0b2t(OhV2j4i&A@&yx1iozZ}vUC*TzH#SHfFPG+cCn>Ri?RD*C;D0B1HeS&c=DC&DOk>a2_M`m9I2`nN94uYru zqWps`R;3PMY2(mzK9&yVYAq>4;2vae6d@qed>i>6V#4Eth4y3hsgb#4DYBmbqQXdQ zgNl^grmdg1QzjVO@At{3xz^G8lryaL-Pnxt={_KnyDlG#4OU5FQ~A{R_w0}gA?MXBQ0N9} zfc4(gF~}nmVbH?JcRRYyUMP04W5hzqL37N=#LjT!7XVoGgKsgwiP%(2=KI7#WN1DP zyv=z?KOfgcl;oyMB0N^YQotU2tbLaX;RFo6jYlUA(W3H}huK(;n>=wc^?JMfnjZh? zNvM5VQ)z-nj$$-B+|7}{AlaPfk&zae)7FTK$jHq*{_Fdi2;xUUBXliyd`%Yj7|fg+yW_^qNVVbDr`EjA_Eonl+Io(#mm7%5 z@mQ=iq07<;BRZ38)oX38%KT{dT08PmRoAd15E#q@q#u1A^>;jsl4UbYG3^a%q*Y^3 z?uUE~hS@~uw*}~elUdttHk++JS{slH98KMR6+DI=3q2Gjv|TT{paRI(o<}DpKL~2F zZJk%v_*)=~2d`l+)*fTK@zG6u)hFObctE#C6(A=xZs=cx3}Io1dU@pjrd~kciMFI^ zNOW;RMrV%vn4ujo$8JoXa^SP9t<&;2q?JtLJXU%Te7%!3v-6Vc4yNTZ z^ReD+%!|dba8Yb8i@<=Pgo763vERj(P0?Nc^7dJ|5FWIcBYls zBF3Henf-MyhR49lgdaHP9v==Fki&5|#if*!BKJ;2JEw7tKVX+xT8MnXY+!K@+U_;l z`G+oI(xnCA%$B>Y1zdZ=0=d0UBG+sR3u4C%UPC(!510~4$OV?q-qusWmx2<~33J#7h z&S~#kTGZPeM;kekPf0}tEx=-Fw|u(Is;z3XC>XN3I>88-d@+fA(gR^EuIexi_{D1i zK7{_YRK3<=4f5=Vo}*>9vVDy4n&8$|Wu3fAM;ZnTKWLZ8?c|yDWKCS4Xw~SIGqg9( ztJ!kh>F=55#jllqqyQayJ&QFFwQKEeSL`K*B2vHH2CJ4KK->hWQ47sx1WI6*Kx1s()ODr#q{aK4?60m4b>NAUz4l~3h54Z|||L^-1hSfnpL za1l?34snOn*9Lq{r`}Z`J69S!xSr{5+rHLs(DVGG8t~a7JUZ)r1}EPm-IAMJxizyL zj%Rb_Pff42c7h}S(vE*p)FzwT<}dY$#@tzJ=#*9@qQQ=Cfb%B;3f5nBcM2z!D9Tq@UP^{;S1ZsYJ>>DQS(;$ams;1MnU1hwMqCZ)EvVhnu*_8uhwNv=!4l6LfQ)rc1Or%s~ncF)tR*><}lPgi8Y?Y5($ylei6OzRBRJ-Uq6(d!r{&i=9)>fyC~qR)rIKa<5yq7v+Y_Kz ze$sxDr_D=pCjf^BEwsQgj-8XQlU}#cd{pUPUa!Z!aKg(O^Abshyqd zK?vxX!-!@>;JDVjj@0s3ldyZKio1E}9?NK0#C852W{f;)z~*3XnfHJlgXn7iX2;#F`sE99EOr4aCgpDWRr#Fi4RVtM5hQhoM3O4=k`DyiP6c$ z*;CsO&-92}lX0UwB91K#(~_o&duW4@jcQb}&WMrBB4>-G%GddU4C7Wk_p$Iu_J@}< zTZ2uLEaYah>*NYDmLn(Sdd`Lll+~auhg2gU2@qvk8<$Yn{xU>^OPf1Q!)y2FGRC&Jh*P-l-l z1N)zHTW~$4857Xgt>?;}H7z_FdF0{|=r#H(b-tY5VxNR6wyxAAc>2DKsH-Hn4BNS3 zZV0Xy9T`*ht?P!vIgqT~TM z-bPIO0*u_un@leTcOX{1OBBm^$*NmG?)+s`W0ii`U-_^no+Vj^kh7i~(m$v5&cP&a zqta0h8q(;N7;iY{dWt_d$l-vWEp#I^rAlLJnY_nPf}k`O0>#}(yNn4h{1P%XqD^UR zDxv+0}`^? zaAhoOHuhQzon729@AH;92dXhQ%-nOU64KqIp9-t>+sb|cb_^B^RlewZ70MKPHpAK3 zg>2K#m5UVf&lPHP%6c_74@PJI`C|tBj~_F?0GENk0Drb2{%UvHz5Y;q`U&$3@ckEH zq?6}K@zu%snb)Z(8%DuydEeqYlE){5$l|XYhp+B`^!s)bC|)Oi_=_bt^apTfs=wI% z?Hdg2?YnLkpLFzlnrHH6b#rsIb4s?IK)~)qG_i??ez+diuEvkFysi?Ng32<=p|dH1 zsTLUp-jnz!JSHBzxKcEx_8gaFq-0%k%1!gpW2D7h+l++Vx0F1oC+c%qBNO{k>g?Hl&CX zdz@zXB>~@kNiMedCdKOoPS0wG*!t%5tJ=+WH~pxF&FyHUm>0{B){ ztldb_X)4|Hu}{%<48leqJbwZBx?2$)QRN9E~L(2*oNH*kdVD9+i!ky z%KdPN^x@T@7W{>GW(D1_mAw!H)V-5#FE;3N4|LTSUwupxqi4}L&9C!H#Bqwq;pX2& zsJmgOFyABm5I)uzya;qFHq9D>S-S3E`ea8YYy{!?iM_j(pIHt|P=M8TZ&d^7vO3_1 zpnkkGrH@g)*BzuZKE8B(o4vOZmTUm#bP#PJk{k58S|ncYL|lDMfG6~-*NrKzg#Q8x zyYU%|9I#vxTYjDpc#XJnw)sIxaD77uC?#$lZ`P#`Q zg(B2r&A7nGYuhyD$z8@nyugPgqo0s_rwkN|JWmdj0xhpW(^zjKP>}+kmW=A_1+unV zqDavSDf5(B96WBto5M!v^mcKy={+Thk3B&cSrJ3=Ry1eYS` znS?J!^Ku(5I0C_Tgi*Rk9X|Ei_+*%$Krjv&3h0(r;nABcOE4CUh1gPQh@F6itH7~9 z3rh(;m-js>B8YoQWFE}ohf08KHT2NQS5JO|6)tBq<$c(-!ZC)AxhFYkz3Vd-s5)tExCBn%cG5vvI)1xk~_#@eEwQx;m zBHBO?Dn6Fgv{^jmW)%f?!+sGB;}?Kqv;Mo2d_veJ>ip+aByKhrh>9dKN=MSYMNeYL zg-;$xQ%&I86zPrh1)gbADj#)$V>sxD%8`Tzl1D8jKguGS1@2ogC5DY3(LgoQu6L`O(*z3<5=|TGh0>^Wc~vb z$R{omt|0h8u#uPphsp-$;rf-iV`6emMe4*v;nvnvw>8h+aNgG5 z%usq9)}PPglU2x)aicCk>sdqu$Kq8=14{yEI@+Bew}UR=*~>b8Q%WnT?BJqJjW`>_ zNIE_D56es`GM*TD zhRmAxet#^FXrI8vu>5gYiT}Ei#oD8lWzNZ&zcHV7GCDOn)^L{dLS`(*{+2C%Y200P zn-9+|l4Sn=1#8h3rWgL|d4fkwA!k(0i}+p&lMJnK_!N0aX(y+blErSUMV^6!G_V(# zSS&w`svB&q6)S)kGNTYHcztXriNwJ{KH%bRS963kS)K5~J6KTASc4o|@HwUowJa>}HS|@u)U3cfk_jn@pm($h zJ^adkM{KnMX&X*^(*GHb$)C>cpq0}8@3SHcG+=?dEvr9<|JqoHBMtB-ld z;6@f*k@H(kAhBuF48u9}GNZn8e(;^-(A|f(7C+Z9Ufk=We z@AtE1SD>Pwv^d{_FL^lFwBU}6#U_`rQ^+-B8F1TkfZ{Sb=!O}`P_k&f)La=bfc2ah zHLckjNa_2=!}3n-49usYCl-ray1#7EK2@|amx^UTk{auaQ5FJa$3%C8VKU8gk7ot%Gr0 z_#&7buO^nd`ay7|K!LCtaY33M6+<2RfHYF-@&qw1^0^2JKvINrt?l{f~gyTrf zl8_RA`VLG*y6gEQ{hApTo$!+Ha}4Hb5-Z`}EwSy4#5@F%_F8+=t*wMF8H4gGxA+dB zh}_m){XO#hSrUjW$-U^*=K~6X=#k21sf*~mg+{o)8eL_ zZCiy*>lAD;teRk^uvPb?eITQxrcG%Nf`wt-+OrNP;DZ?x8?B23dOSsEge0e;VStJC zh$*8niyc_4U@k7@Z zERs~zncc8YjYse*%UfPLE3LZ}gQ*eP^Z=Dr9gFF{hbx3*rL88_k{M8;D1BxqPY^mr~azvJ>o2qIDFYb~66UINHlCF_$GwV^5E;yB@~9A-9}}JLxigOv_n$&h=vC8;-#X>;JJRGKiX~ZEiRw4IyXr8W zr>~nSZ8@vL&*5A*Oew26kT3jt0YfwL{o@s9a^wwevS&$o7CXl&4}PXMsFyJIiYx40 zTi9H4^k8{gFtLlkgoFAQp5}cv^3*}MT25Ah&ym{^$A9?hVo=$ALk=*Ii6S`j>(A8zyP65??y@Y!Qp;1e7Q!S zX;9S#MAUwXvk0f zeE*PS7YxOdv8M{_BOLXj`O&&L>ioFEjxGgu2{xAven{8-WcX!`NmGfr3(>MM##?_S zMtB~4Ky{#QhL0-CPO1&6=?-_pYs&;_dlk#=InHvslB< z@gQ92+LxhaOkYnD<3;zZ$Nc-9pkrO?=2261v}bkangfNF))?BDoTh<~1>xL9Pe-E? z_BOfObFGr-iq4Ce_)(qd_@imQg-FGcRpVVYrn-q}+sO1oY{tmYkbDl_l|}Jsk22{C zU<2~XijzxzTVI!u!Wa<(IG>9Qw}Rfz69qRH&ep?sEAzSVooM|%GDA5T%Ge-ExXea1 zn|nDN@G%qQC&d*OkS0%qLnu8qx2-s(K2-0>t+sm4I=d+NM(J4NGJSy;?%uBI7W2yE z=_ou!@+WoEUN!^TUPjfgV^ZW%DyP(8)H1tEtE^$_kF$`s1u1rJ-|CyRxaX?1F))V{ z+w}O*q@i^A=%`{Px{64M)#F(%e*pv~hH;40PV;tJC|uZRNQZ=)G;yMv1lp!VV2`$! zv}T0nN15poc%9H=naIaCg$)O7fY^(}2VGhwt!mn)7&zq89;yIqG`Vp{%5iuu;&O@p zPXaEyG5K>Fh+@_@qm3kIBrqF4`?Ni?xcOBK5y?IpMjfb|l$9fgdXTM+Y6cn7N zxilQEtH>IaOh#5Bi|CkjrgaL1ze1OTg+o(TR{h9iJ||uj5_kJv%7BhDa+x1DDODIX zAI;WGlJ%L&|8RPA&1&@H>;(JWP`1Y+Y`rRCW^O>w3(;rMoi>_o#DYM+rsxv(h1q1J z%lr!*6_9rW7?t64bXYlh>ST9@G&6|`mbkv81&4r|mE{u-E9ZAwKBDt78dAcf1#;0i zYFYm#5iLf-b?%=bi;ZTPzb~TPMKersavWK}Pck0}npO@9u4e7i@yAdylpMtRrU=@cAWey-4x=r$ zsG;zeL|mTu?vt#x*C)s78axiTNJ5SdJfS>y41>Kqw0*oGSN|F^O-mSft7=DN*B7dp zf(6Z-bX?#>6@Z&%9dmM$GhA8WH!>WGOigB8H*-(w6pMaE3X~dES6A1xk-SCf&Oh)f zo~zTQpBR~UwreneYqlb7fqF3pM)#-mv*yWwMs7`{tci_9QNWwdnArDFx##_40%=od zZJ0E^x?jo7g%!Mhk#aDVn-5Kt9}Wx!x~enp?v|BDPz8rPd=t4+ls?VUIJY9FNpz`D z1G;12p%d5ahub0}b9Rgel+o(U3iKrnDK!otIT~(8LZX1c;zr zE-gJ=(l_5h$&7P*mN;z zAQxYvXL0Bo9LCAC7ZW=OEq57k%RLcO_U$Tou06739}8L^5UFg(PN}_~RUV%2>G6DF zK_);P48=;?ANu2<6>`oByDnEZZ~lH=-Y*X}&oFefte`_%JG$uVopTq0jfRZ<_+y~Y z{NfAyA}cgf1SWNw?VM-;8ohDpQKZ7lmjD()L0`g8SVuFWS0Nb+;^<-|w#4P&&{V1ET+)g#NSp2%xl@xNG5O#t2C8H$sBp6TO_OQv z{NFhxEVc`%a>VI`VQEVdC6k{*l3VCtYmRJNPb}j0#yYY}``# zX;A-No4Y678vicj?{NgrEK{gb!8cH6X&I5bm7MSG;+ zn5prZ>qiO=PMX+oP_Nqh2CKS*9O27;?E(8fI0l7X^Y>WV@wsPaamwkSZRYLgVMc>fGI2zJYIq4g;4t! zqAD&du+X6{Om(2TTXQN4>S4Ti;Z~?eMI=(55PPg%@v?h)6XjaT2X36+u<$U(C)Ofx zCq~9%>AL!?n-7fE#cvlo2d~riK!7TBnBjZs5bBVSj7Z6-`REa!p0@)$xXW>ta}0q+ zQ7`6(Lq8A=!?S9pF{?WaW!rrsxjkqOgEXv_FrW+Ew-7pk1siScQgQFKdcF7Mf@$jBn5_emnh6-bmj2Y&$kRLx z#jsixL-luG*F*%s8zQlv_wvlHLLNb9f+;+1eBdz8cs5$&UvwH8-ZlE(-!uG*$mvQE zR1yo{d7#XVY163C>rV+iU)7JANfNJM?=p{d~W-Uc(zt!yywDzh)Zwgh{o6i z`mmH`#G2%7ve@#qZzdOo4r56_kNWda)~YS)MNbK0=-$APu4>3e3wBwNkdlu?eZDzh z-ZMsSIJ3+#mL99e+gUh+wFXtS2?68$8#rv6Rz$sKM#9VXNZb0Z2vt#O(mp9`cIsL{ z-gfl2(4tmvZAX3GTL_s(zP85_i*E}qzQ6EV(uj|yqvr^CALeuO4LJ!(GGgS43rR_w zQ##t-rZI4cb!C&9Q7UH-yj53)sx!q{bjd-P$j2=S&JTsWoQ}s~N3+lLKsJ?O#+cug zKu&&H&p`qtr0&4tS+n7UV{LI)rLnbDX1&MIJ)h8a0{=b03)@8l$-#KsNRx(=M+y-MYU!Q% ztk^m`2DrG0n7)3$?KY?(jOxhi>qV}7rTv0bFqE>iQkL>*rb zwpCHyGp*6&eU4ixFe1!})M1Av-B2{Ips)8E9M0d1dA&xA^wja3yv_Qg{PRUxHQ!%x zA=u|tZ3g9bEm}~EPUFlG2&bFw(4a=a7Q`B{79Ol(_3|uA)lwX!`+O1z8!LNksVnR% zPf#Vy0{{ZguG%aEkOI(BY2W8n4eP>0tLBsPmm`-8YF3Qa50)cjgeML+lQvB~u6&)) zN_(l^>sP6npVzaSW=G*J8SoPq(^g7OBTBcq#6e?bG!cjk&Y~wv$QIFSi#G#bJg5GLtd692f&Fzix4!_n(Vg{n zXOS8`tl^={7C{*<%NU)t z?nANxwsL4_JRnOVX?A0g2yV`mL!S5ormbAfVHK!&hQlK{Wi;M_JnDiB?J)K4o)}dg zY5vJrT2b(2p|qBFa`g_K1A9df6RRe)wwgl?cUnvIisUSySm{_ANd@(w1ow! z^Z9i2Aa20!``f1?s)pToaK?H{i%DHF9T<+w?7OJbqd&rj1W9$k_H+>xCvsQg=q<{> z#EAK<4lVFnI*4SyLnFW5my0s+3FhT3gG{N~?a)lMCs898mz%9yI+cS)|;303}CbX?~FPnCDc` z#`JVqX-=CNSl{svf4GO59BSg6uB7*tDrx-=97%PWZ0pD*9h>Vt^fg_jNL>a3(RgCP zn${tO0hmHyVrXJwVo#16TAr!v+(_?Xg}XuRt^*MEP3WedI<(CtU6tG=QP$Q`Sj?@T zpM7n+`WfFrJjC}67ZVCxWQ4P+@@a!DuyC^@HY=@yT~bcTeR>L?M7&QqxQ~)DDugY=WQ^c@ym^qigQ_WO&T!2-tTscF zm~wMO-bfvyHnrVciK2;7{vY{t|?KjJd(zPj9CTCxz{lGCe8N~N`(G{)u z?dRG3=0D$!9KiP)yGy4CDQE;_RG4I0d+LI6k=HdY{{ zm?{=2h2CgAn@zfj#A5rBB%^;{6Xzm7rv<^-Gov7Vd_+5^X53XHd!X1}_&j`toqcnF43X5_0ix$}+@8 zr@2|L*%cG7v-NTM&iYC7IJ%^zO@Sb+_sjmqx7jXYLF$9e$)Kr;IkvsiXQ4nV6jF7) zkYZgx#NAY1YOEka-)?olw#0OAHntc|Es)Z5AZa}IVAz=p!;bZ9cx1{`A`eO3p7Huz zeuG66?&m1KIOFtr$NyUH|F7@zuVrbJbe1kq39$6(Rs8Zpk>u;Y6S1 zl`OJ?r;fX+CDx@7;IaXHjKZKuxQI{Q&OHLJ>G4&KY%U{GVd}g-waGMS_NVO@^eSYG z!7>mi(e6!{UW(&w&i2oPos+R?mukQXA>S@Iv!8Sq)_KI!_hWfgf;z3GbXyxL+y$Xm zPS!b(Un*>Hh^`B?m(h*$bfdbQjgQ|o&Q6rqwiek|-Jcf@lQ~M4mn|HR@#D19-*3;a z$+}5QPsIaq8mviEHn}8 zqVO^3u&RWdiJ9llwEGZe-@PuM{NLUncwMQpD4x}>dX--QuJNvC!)`00P{UQrv1Wb+ ztOz(c(g$zO!^M`HJj0HuXu+uu1ug3?`ZUg9<^ZG3)WUT~}Q`8LoHwrG=TY zTu_wjNlQp0U_h*uI9=6nmIS@kH8w&|uS^1I2o2e z;CRoK>rR=BOdXW>USAi6v4nx4o7@^U&6+;gJm1FUC7pz0rOoM~!;~|t2z3n)j`M4K;oW@O+7=(y;Pq zY#;@LkAj^iC;&b{!M_z)KiUkIX72^EU4ItF%>}-KxEjIZ3@sFOs>Ld?#E&EmXi!L> zdvQ90^2@ z-pD@J$n0=gv}_y|v~1h<^C+5zy#+dxz@c?=%yNTT9*fBbMZ3i8WvInE@9PP3>LCv)g07ZckmulFe}%2;e>;Gj~H zKTTzp39(U?uy>*|tsaI_GoZaRIU4yq+P8om_E5_;Xcklf4QdUGGNjU;T4&aE8>E4r z$qtV~sEx{+xlRFbaXw7u-)1^}3UbJ0LDb&d%P;=vI#Pe{ni)4NYk#OM?Beyzf0qQv zK3z7WtDIAaYKW0q7q#A3RO8(>3|Ij+M1B@4pZ~uId+VS&o_1?=<1QNw1ZU&!?i+X6 zxVyW%ySoQ>cPD6Yg1cLAf+s-o{oeDv=bpOnxmEYSuAZ4SPj#Ffq z;#J}@;UI=sEapcIjqR%H)`6MF?LJ1DrZ4rW>%wjHFGEN@s^q(=jJk~TFQql;f9Ov( zVi2R{MrH*=`$p>t2`S#DBlpCA1c@|#%nn3+{}W{LmKT6h{QhU;g?lNtLP4`w#LE!d zAa*D(z6I}JZ9`*2Ugb|8rh18-^XO-OOqs}_}ZnxAtI_u4*WA(G5aamT#`_E zrh$reF4L=mxKQfW5H3~SFg*i;D(4c`Y%UT3K=77XB7GOKTLXPQW-qgz$dD`40js@h$`cB<+pm8vdg*QRmKGMTdR*a>7z z6;H;i|0Cm?&7OJMrp?npaOf(FH3}$6a{y!k7E^)`Ta;RJoad7m{(N_T*C3XZ#8tYE zgn{lUPvp%H1#f%eqEV#chabDE?xhspa8*vQ3X%2oWXXS@tahwvocTyMUuma$yl%tQ zWI6Lr!1IHaJ?7Ov>Wwfy#hXfwT#Q74ncP4t)4QOm?pjhwUBrxq8<}U^&Slr- zu|?l8JGq}fRq~QEx@0rqI2zE6)=8}|!9C56nvGQ$ z!4`4LN22d$pH>u=8f7qM1bv$9!`w3l-9qInn7tKK}+% z3?bigB5aQ0jFvCAc#AzFl?b={xBL`l{Yu4iEK>JY-pjeJ8cR$0{(rogu8^4na&xna zCAB3Ltg*)QNVNK=BYUsA&=^;|%gR#ME=OF5_!Kgs4 z?7bZm8GjNu4>)FXs>s8PoEMFX3m$U8hEoM;KompAmTiTLYPk1pX%%ZM2y{5ujK6wI zpwBj|q55NEqy6Gwo&rUS%an-A{-a|jl9K=ESo;Y`vkSr=&20T`jIfr910JR_3SLEk zfNi&r$j9T~!)5J_=SeOqONr0;K!~EQQnmE7J7#^QMYfCgF8~OeXZIK2lzPfAnUlk% z$;hAA+3_fy$GIDuH`<%@9~sZXqyB^|K0p9_HY2>ByJI$a(qphEMl&4lmzt}-(VRZ{ z;;Le6%Bq-}Eshrm+q5<*-HTfFHubvRhKcl0r#P_7%+a&rTTb2B?M?opk!5;E69aPaR^k1gy2f27%cj>Cui zdTuS(p7n9LPpuGkB^A2pqUbt&!5`?~_%K=`>RDRdkv@;fZ*R?LBjC>*pF4j#6AUA_ zJ)~$9td7DLC>IRmYeVOS*O5m>q)NedaLsi|=&mDMMK=`jJ04PjRfI1Wq zX9!jj+tpRyQwz6xGvS$YMjcm!^)qI`7Mw!w5@Af@|%hP>8iw0o>v3{f}#HsIX?MnWe=9Y`=uL#12+)R`DlZjDvUE`^*0_Pd*-v z&rTN^7|hvGLM@i=cNtz(X=6x@{FAN))SEUX zo-~p;IQn=mxsIH{F_p78fira-IA#_^1zR_Rbplvxz|6r)wyKN`7W?v8` z1Kx}-i?w66=$mtfmoaJQbQM|48gj?R{3?Ao_^SYJbJtMe6S z!iQ>8+D<4jITb&Fwxl-BD9WvY5Oexj zjsRnt&<61+2)#HSObj!`sr0G`;TUf)Gbl~hx3cO3gQI(4BL$I?X?tXErup%sq@{XK zHMMy9>UTTafm~kIX|7psjNzC7nrQ(;=FD3?lQ}3D@;fonmGCH-QJ#0cnAzYJ10!>G z@vdlFRnE>+$Tc@PtI{hiTfb-N_!CL8p@Cv`+lQbm1kcd&DyiE=2WP(d{309Ua5RRg zkHCD4b2snqn|;ITl9+<}lw5zL$sm!|p+VCf5zo!}Cev!OZQdn<1fN+-ol-vaG3f-qzkp^h zUo5@#iK3J<-(;%Yc5X)#u8OFAiMGqEK_)(GEd?8rC}GBEwHy|>^~GFjQtSRRLN3L| z$I&{-rk<>`%5=dqp^G15q4^FyeOSyb-e#JxCSa1G96cuYQEMfENgL%6Fm+Vr3M%^4{jS`*Jq{#dL~`{HbI`v@tc471>i{)lVu} z!dG4aS)%WuYxnc_cFG!0q{XLR{IV#p1Y!ZWvc5QvPsN>41CAY(Z~g;w79~E^AlvNm zE|xtip2}?-wh?+$*7?1gwkudkNS>c65EB9iF<+Oq0OER4Gz98J&JSnUiI3=SZGWaN zYgFDZ&0=o*1&>gM-{WilOSM=c5&1aAb0$USJ+wfoLPy*2TKgjwKA7SoIQRQf}U`DDPb$1f~WE|;@i_Z7u&2F~fx zS-v&@OQTND^yKW2_!EutYGu;Amsbc-Zn%x$4RSuE2DM^PotEajZ>H9GU&Aw4c#NFmK(BIn{;FHf7ROYViIH%rTahrY3 zUJ4o-&m%w!yileZFKisEb5tvOBn z>T)3LvaR|pA2AGQnEnyF)Hx?G(m-cu-!tZn!Kq_HsF&z9j+HzCepRSsB56(BMYZLH zGcXnxNL|bU=y;60s?{3W!wD>8IWR$uzq-|#`uv%$O<%Q`!-geR9v+KSWE~uHH4q@) zB`*IR*Z|qr=1tV$K2%I5VXf2s>K&ezGt>X);y=7ymO_R9{8B~&sBCAM*R9Z%)$uRj zY4MZM)-f5I1dJpW7MPqI^ff%fi=N)0nsa1d>@-eC^{DzNt_ksVrN!%ZSOej+i^$v? zb;vKc#*;6{tA*7UA`&w{}f zcTUoycVk)Ky-K$Is->-T8Dp<4@Tnq(L>L@50Yrw&d}nAT_gt%FiML z&QSXru@|%;5|I9Eg)so`OKZ!&BzQ`;&yQBytKSD@5ynt;n~t*+`n1{anR7Vq#zgMP zaXI~|3A&gaNVnbl(D(~j$wRLwTh@)#NF1T>eof2lHl2)Ph?GNr_Er!$K4#sDS-lJ4 zGrpLpw}_}M_O}pq2KH3rnaR$Enxikl9_6~{l*a9S#FYlTcz2{r{O)$hZsl!ULy!EF6qWsKi>jE#&Arj;#3;&`90E@KpSwk$(37RAQ*@v_K(AX z!*->ha0G*o6Us|^bKw(Xh67-GqC6~_WOMa;$~O+<(AB#BLXz&Zdt z;CNGvBe*}I+G#@J`rgV!47srWq{L@1{O*3Gmf|3f-D)Im?k2>alfk2#KLI%PRMgFJ z!OkyjypxIB#w&M{y}&NQ)0Epr1D}L!Nc+fL6Oj;(;hedBRr(9?Dhd>{`(^cutFp#7 z>HC8~4c+Jkak)I&_np|rba~`)T^kTzzt?=sNDzs=zQ&K^6l6Ve3Qz}e9JN4oPUX?S z2Im7aMm##VTx`Mhmte)d=fXnA$)(KjSTPE$+;_#7WEH_97^1|)6N7J&>PiPyKQ~=| zVRWH3jgTqzJ30{HYUB85HI@Wzh+qP9@0-FAbAqT|EP(*6jXD0 zBAz-wxui6epR_)v>018nji9uWeK6ud)^(tqPT*U?&bZ@6{(2Sd`v0)m;*6=M z?#XY%TYE0Z7E&N%r+{eEWBB5oUq|UEm@&kw_IsN*_Z0MbMw%+KT?|HulHiY$nDV{q zd{W{K90H*#U9Qg7`pKU{2eagVZwg1X-hgavn5;rdi#;Qk(|`15nohw<^07k4|G(1*7oY0NgNtNc>tBDILAp8TrF*Z74$`i^qRvPt|IA{eyLN zB~y2Qmx(jPzA~?t8anCpsWe9#8LWzx+>(@K-b}`luBlXpJ8A??1OGAw_KE0cihkH^ z%qLm=Ov%;k)Lf~1@w66QTM?32zvCM4WpZ#XFGkM*u&J9LQceZYf+u#6+(&*QuI~#S z=FKiK4ReJ^31ktUFFbcZr9f2Gq9UyrS&Vtn%m{{jf4wc56d3Lhn;bPdhy(;U%756lnlS}HN3BK31vr_-3P_?kAAx))e+-Ir>V z4K>CUc8&d~v2%baL{b@JhD{Yh*}bzSY2DvN$lBjq-*cB%grtA?6s*eg$Z|Fm?+^DW zHG^mXaZTGOrm=EO3B%Gro?2?X^kh$)XJUs_5_@8c(|CQG)qEW89hZVgxC-jNDnCB+H`{pD<(I-P}O`MSm^AonT znqCO_;m}!Y+;bnUif~q3B}D=(e>dr|w51v*-oB1;JI!OaJ;B=h*W`b*KSehF;+p^$ z5r0u3#14~Z++wf4Oqj0jab2odX$~Q(Jk6%4m<@D_ifi1j$ycb2Vn}aiPvHtIOFZ^Q zT=3DYIpg4>Kfc@DC^6j*w9xXMjO8{M|G%~*OZP9p@=vwOz1*{%10`aI`E_D0k8;gy zbfnKyNm*~I8~K<6UsrGdvuo!ybfK_a0vBn7>z2e?LFGgB&pWXG+!DWe0Ey`Km~Uvo zx7II)k5Q}0e+*bIt$&lucU97%IbS`|HO_ z#x= z=~?*cy*ieA-1St#XHIg|yInIRV?h&$umhx47Q09+2cKEiYqoOFcsVYtMq9#f{*+ZI zhesl*;UJ!*#XvV#oR-xmaZk%JaHPG%DR3K0&6^sSm z?Nc*PRPJ?2W1Edhl2na1*Jly>BPF0LSc1JlQppQ$yi2pyP)VCNJCPgB9<@7mhZ<-? zJ?vf4#mpz;4~)FS3^_1vjc(|OHD)GNji*GHdNf@vq>QlYP@*=OdP=2irERomp^lhf zr6XPcFqlP@>H477AdM;?a-FpS7pt`?Q+qxpW^^`cj?f46(3hdFlAD$4(g)$4FwHv> z4nf)5V?f#FyD<$t!HG-lTTOkqW0$NvgdA_QN?muj@dBG6RqkzQNo*M0AyqGW2WleA z`6t(-IIBt$gC8k~OKne90O=a#1IWjzMOpQNq~>A611$xJ<_ati`PWB3CMoi7n(1HKWjv;PltEj8Gu8)$K1 zx4~A%DdQkQ{3ff^@*tI$(5VN~FigMkKQDJU*5a2Fs^AvX{k8vTfBBW!j6|jcYriHZ zj7U<|>uTA+N0vU*N&|f{U2eR3?B}j0c4VeXgfOCK`^z(Q-I}iT3+$#+o+9xjE3koQ3s``iqs`|Lx6fMiYefuOv=++?3n7%bAYW3S|J5(4sto$!Bo`4) zlbmKBJ5~t&O3GZyQclXe1`L*u0b<>%L2lX%EE?LEJf2yr^DOo0Jeze=h?hN1GcYBVyR0DrvC9L8z9?=s z8aqEsl@&&?=c+wcgVk{p&)s{5I4>%$*6o)Fr)owNW`}^2$zL06Q819^$tbPI9fPGv zMh+UjLVV8@`jkvE1y&b~XY{8+zW@teDrmG*c%t~P61nVjFD>@-+)6*;OC91v@B>FX zbW4@iioEUkZ#pOtv_$lhsQUU9{{rl+Fg>vLreGm5zMc#n$Y*`nNv+Gb@1<6kZT_r_ zxN{Vt^M}tnqWf+v=$a~V1_dJUus>KrZ{}tHHL09%-VKzv`8+@H5MFWA$bXp9brjxJ zQ*&6meKARx`P>o{;HuEGtYL*R~|95 z-SvHBqjJa_BpDP^VN)tJ?9;9yj1wt?-zVPJlGje4=3f4zZKo92SNgr2y>`RFj1^2_ z{yhg~I5yUyLC6$9oR>N`xRekU9UH=KE1H~L!i+AN&vx9=`&*Lx&s|&AyviU!+ePr& zZ(b)d%a*0o#0$*3s}1`BdaJP=!pS-vw*my#Lgb?S9;{*i$P%%zy0+2D)GwS4(F>+K zL%!gseC8_7Y0)ydzKOgbZ(aGbDx>)S>1D|wHqKXy%a@x}{S zasJXkw%bPLiWS{j4V5LGKE?%&vDT&pJeiSux4LplCqlw@@?8MbKdG8?Z{fe&#)?X) zvF)K~k-pa1(q~-O5i-=33=htNIR79n=rxHlRUeAQ)o?MI{`QHn=W>i%CbZU!-aIOL z5}T+rosF^Ug|@0DHZGRlQA6WY!|>0_%*FJ2kCz5Gdd5$z9g=|T9;r8R63#azlm_a{ zS!p3>rI-$_fF0b$OZ|0$f5g44tEt?^L>A(v{cf2rkS)h{N{yj4H4-z}qHNPCvaliP zJPJ{DO~rED>59;h6?)wH3ka=*C(^;%HMA^cKe}ON2=ySuV!G&MXk5^5`TnXTpu^Rq z++jJ4>?N}$>eyw7$W3o)AP}w!@v>JMlyIFEJLtOBKiwkIf}Q#2Cezv*Zm~fujZ;45_JFdGjRuhRb;n5pp8hIZTzJ?hueeZgpUV)`5YFgZ z?r-0&6Z-K*b8pO2c!I(-x&@2mF=wD8`)+MFw(qraMRo+V{P$Ai^?7akpN#f9_i2^{ zpBQQqh2;{8>8m(HiAFlIKV7kZZAceawP>=z^}jXGu7ReYKbWpt1#90{?S2*0%5hl1 zxkBm28FN<5VW@oE5uH%~bYgvC4jZ61)j-KWrz?$vxkSX*ymd|z{%cS9PfF*a5YofI zmk&y(GGFYo0FmEPn*)lR(O8%I4+vH%+K*lbd};EF9k+1nWeRv&qsdJMqj5_eU$it- z+j?uXaAzoM zG=lH4>VvI;E)QrypG6QlehskTM`gu~939W6@tZ|))BP_92a_z+{tiw3zIB&*RMwqH zqFmx{CSZ@@Fafr1f;9HO0RIi@doqZ@7N3Dvl{=GAnD~YO^x|gdfSKtJ$^`5bi-Dzm zW^NgYSSQI1LNl#5KA*)qJ=?zkg)X}&Z)n}r>q5`u#b-uY^s-kKQ>kQ!gACj_+ktsD z1lXU%KQ;|(zBA9XR7KKIEXJxm#}WQ0%Gt?*7mZH;;j+NS3OeE@wpZk^I9aM`zk_JT zmP0ftk!xz9h3RY4zBpM2LkB}Ov|C5Vl0`@Ft&>H^{xfwxiK}c|hAuFn!Df2rU7&=n zB(y(ASxx}PZ%umD)F77RM%Q9<8B@3Pff0xZWE{Rrdb!rRTwJNHokc>6DfY>rAUMPjPbQ@vP5u-lNb!5 zTO5}gVx##$7<+$mRdHd+vTt;m=t7DSwcdUsvc-FaEbqc0Vac5_YrobPWzxwg9n?G{ zp5diU@$wYRK)VRMKIQ$oH`z!QISA z2d7JSd-;IMOPX%-KAoOuv~O)Vps`M~E$}qi7_J*x%4f+%hBmoVX2Op8&cw%yIcg{e zLJp-kIXrtnsrFA?$xexyXL0?as?r-~>H5sSfbSQcEuqu(Js*14l1*knHS^=)B)&3d zzIy>Yl^XgRgOBS9>BxBurCk@M$NO00E!7>jBS=`kvu-z43ig-K`qWp0(Rmxs=J#-1 z-&%#zuPe#-s0-COhSe>YgP=3Mw1t{t`R0WY0 zJu)&&*|(jPMe0iD@wGGaA1rTj(&uaxVDKP5L{cPDP}UzUgAA%YaByBTuJz^dHU%pb zQ9Iy9;-85jo_wht|2X%K=B2wK!YI78wqbME6I0we>*t@8kp>gMqd82aeC#YG|1i}b zuWx=*Pq$hh#!bgb$doh``kfnbgaWcTYsbR-ZPQFi@s7MQ(FGr+q6h4!B~1=Fx~UT? zGJE-@Nv1Ye983Y877k^n24|7fz48nEP^+nj^mmR=SaE9b?N|IyD+z?W(`j3$9!ru^ zS~W3Wa1rbs8Lf2Z16+I^;ww+(+)E zNWQdh6M7-$1SoG&Y*s{Kp+FvS6~Ne{)7hr%`94Zy5B*f5H2Q|F?2t{1v9heiJ|lNJ zdhfUm`r3y^sEQ3`>K4U5+%xBygSQFVJQGEMj-}jpGi6=u7W({eMEZ%Fyy#jJV=i-( z@D?NdgpQkzRsH+%)#6L2WATw}Wa5c@l%uiCpCc0@@Ab8?oTGaJ#wMOx_I?v9tubng zj4b&UqUTg~&1rK1538e2ry--^lH`+a4B-Q)Uiyaaij|_V-!qG<=A9~)T?uAQS`ODN zAvlvZq4X_}FekAo*>uHCP`*Xx%_Fq4N4sKV@|kd6D-;~a?B1>mp3nKPIkH#%gtF%UJ{g1iR5^^ z<88J?)LF3itR>uN7;;6odmWiiib8Bw)AhoJAwQnBHvR%men()+)Js^GwdvuK!fX(EJp)c8NuWY*9>LIU(7pNi6Dgz8_LZXsH}jULE;fkbpJgm!87azn>ZDQ12gE3q%O z9Nt1aGN|sBoK`O;e$lpv%?-Su3FZrl$BZ@E_}rIgJ*3>`_QZ7gQ29x=n<2e?b+(2Z zx|A-r*-KC)@`~A%x1+t0JYbKF%h)OQ5%Bv zWF+y&K(0}siP2kc0O!E_@ZgK*k}E?aBh%`=WEyk)`pypDUbJKHu+(m_uBig9~w#5`? z`>67%fO)iYEFzjO?!S8Gcx`K^D}}|X9{mIQOMPEz|1@d4`hlCsb}1{!TTUrw?0g@S zM~0Q5%5NRSaCl(*O>heL4p4pLLh)AkCG}lUu44m2Ny67!&^Zy~z7{P@=d7B1V}~G5 z>sKjt5`-}l1bKI$B)0^U(?IN4Z0dA=Xm@y|m1g~ZZP8&AdfZs6-Jf1`OJZ}WGMYxy zH*}=ZXiGuWB@G>Bdwx!_QmeZp)c&Ew`=rOr;XoX+t1Mg2?lTN~esv==#HKb?cm(p@ zaQZ;6bddN3hfr+dpjD-kue)T#VPZ(Yyy-YLp2C;m*;GPf)=P4T z;%3A6ZHkM;3!`m$qs62zXGS)UWsiWJ#B@_QB#-!&d8jFwzrf3df#KrIq_s~I>mmLA z5{EGvvQwdX2%Zx z)tDua3hGkos>=V0SRNef2;9!=cn(>d!O#B}Xr?Yesc8=HCn)MZBtsY!-IZsm4P|Ou{<0cFj9K_ZN;5YOa zxBu3tFVFLTmT%lyjnk-7cBA1ThVv^7H;*5Ew_*~sgW*6FHdp-p>*cw!8IUXuD zB>x2vRPQ$*ow~6A^m$= z4=0oPluve~;RR@WHaT$=!j7n2jTrC&?rk^}G5o?*!yZ5{dOE0zpHzx(T6UW+5#SRLbmzOH&o=bgYOEaB3yqj4r;twqqovVxUF zUxwYoKS-mfZRICvk+KZ{9n>eG{&X}fb!HciEJX4th|p9oGvG-}+eA3|?e|-#V^eR1 z^KtA8bK5Upgwi#qe}pCLg7n9ei1Gio*!(*_Jh0R!r z2q2tb0avk=&u>>F+)x}Xila!TQ?z#~$jQIIW8Yoq_gnc3&}QVLi&YO@2`qNF=HMD( zEZWOYNDDsju8OfE2#4rnN79MfA_HeT7Oha4C zHq={|ytTC)ZDs9+WS`H(`<|<9*o!_Z)tl`9c;A0#W-9KQ8lwb_X@r>kDW;iN?RIXI zsq9|_%?f#j>9es;;7z?;L#nOZLIrk5Se-jP&r7tV@uw*qAtcAG@`WWvufxs7_E*o^qDt zaSWSC-E)=Sbl;5+=QX(k5tGeI|02u$3n`Ir60}De?!+M`^Uwdy1)wSf_g_mVRn;?9 z{U5p29jP$&w52ebOuW{K`d}vp2ZL|8yN87bsWJOPgU;CwXR*J~)a*W8p)hG@6Nt5% zlrf{qTW(6au$u+Tz|sJ`XmiP8`FAoCJCjFjwYAm9T`#(}l&pFcttX@aOF1M`^8+z0 zT%YA_`OvdMmpDBgy9TYH*|4srJCl{A7A@gY=nwibBUgo-qZDK1jt>3;j-6rl3?0fn zxf04PZK{+Mtssid`JQ&e1=cT-1vaIo7e&zA1Y0hW1Vn-<4(b(UvY*;764!OV;1DLC zxZ~i1q{72xl;qQ5p)F?WV{5Z5;5MkblX?h%9Mm^a^y@)MpZy zEJSSjKkRMMXgmw@|Dg&#LU>5wWnWca8I08G<>n;B-RhO!6VUo6Bqv*#QJJg<+Y=AGA z#ru4{51w>C>b1+;;WOSTSIADEZDy<3vnJwQanbg{1hq|9r+nAg6 zNRIgNPX)pOiGKnXSfo4eJ&-c9aOsKY#7wy7%D3SceIAuYYcE&eHubeqSDxl~1(Z4jh+{dj?Jif^>i z8^9m(D`M@*aZjlz(8S|IucKyg=^=EgBq;k0v^sP;bTeH^cOVih+wz+*B5bG@U1tgZ6G+DMGo;F9!H+0VUc9ibAmrTMVlvsU?b<63%-hvn+mmDv&Jy zCW;!xvgWsd_Auv~t(g&vPB9I;bO?A%-E(tyv-@X;kxgwoRXh>}H6;bnR!)oQ0L6Y- zD09;x9&B{)FH=1Y#WVv8sDnVF^~5yxPwxK4YFiVI>GtMt@) zhAh%p0eslBo0WV-t{R4s>L$EBFUrk%V;$*jQUwr3M8{C*3WC5@k@im9dFx!p2!6^7 z-55tVx`0#0&H{sx-Ls8_@<7jqCZOSG+?2v7gt+hQj90qGlI5@VJT%w#!rsZOHk7?% zA(gcg!`)%KloV1HhswFZT`u}}F8ZN}a``FtmsArWCUAFY=;m5TIlw&|H<$!ofoxJRB+c+URNg9r_K>7@Mt1`4gCYV07|pRpImbpH;c9=WNGX?7cRGT zBJsW1NCAe$fTD9PC~P8z`XhaTHwBISwUvOYu50SjjeJ=mFK{lCy7e&oKh0Ott*&`$ zg?9ZKm+E?~@wVW0^;pfqN1>3VA1HB4!2599XM5Dhe^8T_$ZK9x)4LM%hKfMoj?}5c zVY52PO6Jm{$_n~H4tnw4VuIqm97p3^uK+pn%8)@9fWW;vb^$=$k9MKfn{~Zqtv2QP zs={9`)G|qEee-e+=|33?6>+s8AXTXad^4NV*(^OOe8PXA0crUPNSNViJKs5{Egu@N zP#id6k0Rw~$e?4v^6ieDt51!~OUnZ*5t5Q&;L$gqD|{@X7|iXdN8KNd$b2V2+$S+G zt^>sL{~ogn10_NZCXGaf2M2xifmwh`u5Q=bZ9yo3Ay=14fW{bsgMk*==R?4u#+-r# z8us=I4l$$_PflH}I7+ZHcCSET@PP6&0XkTWso%H>NdoIKD9~P zBr*f{*anF5^?Rm_s!oUF1iA1$bTN(;c$hlnoWc1!Y&zyNB8+U6CAVSlNmQr)X;z3!MZN5$m6dX6akQQPc zY6Dbhyjrb2`?PK7txIG&A$N_3^;riL!2;VrKUdhG31wvGYV zMfiqQ2(o?!8@UUA6&0lly&_&lx%3X?4lbzV4MT$U_8%<^d{sC^1wl?8uzTPXB5!7)VYOeWf&>tZ>AwUB{oAh6$93j;9P) zj9Jtp);-oJ2uDoCLCayI>!B9GCX*4YFdwZr&wfWG2WSY%ld(Ei711$8K#3yPL1h>~ zZ7w3^pHAaes)?Ka>(8LUtWZV#C@BJ9Of}hlw;(I+DoJ1pYfPE1+%_i^6)gKOV9^#6 zF*=nR?4D%imfuQlZkofzrzrXDmXBpo88(JHf1l3{tgj*!B2ad#x1A|Qx6k5UaOsyi zMa9XMkHBml7K`{5$Lu9P>zt+rkjp!bg(pQ9rXH?E52peR`3k@C<6ra($DAgBL9EuO zshR4AZ1y*{O|xM>M^-hdu}Ula*PDzqDDg*Nit+oQ+=s|)LKQhy>w>c4=g(4%xe`d1_@p^(^2 zQ+r2tfhd=)1*dYI^+OFa$N+O z++lro6{wkLmykt@rYuw(C=Oas>(l#6Diq*5{^Gx$L0_|h)?g?Ri)Nig*;G2IV+X2O z`K-1kwGM4$QvwxcEqG0&NWY{b^xCf{Z&T-%hCtcL8L>}3_@KiDyQNU=NsOn8eT7x0 zQgc+D@=cT?1Ysw_(4GiMQ=+9JjbZ$ARb~QC-NHcd3s17SHUh8OLIv%z)w)D+)r|fjO;a1mbQqiPO&r=16%HqIsPpL2D2cztoRRH zcGwwf`i+xur2WBZ4l`CNEu$p^ydE^PMrP)qt-;zGHBRWbX^Tk{G@7=x9V~|x2Iqux zI-qUvYb&e&DHiePuLhrAY~f2k!?~B^z_&-Yxk;YVY1kMpI3vjn6sNukip8sslBkps zv~EDkS@b~Rav?1Ae6ZXNwBdQ!Ra8UuUsDxr>2^3m>9)72Ne~jx?s+l;BC?is5T#2!~+H; zlgm#pu;%Ppk?63t6d!Ny7yEpF0c)th(h3X;i7y|{V}zfL7kGKGtKwd+m-@HdFm%3k zQIaKB{e#ftjRY`eR{t01Fp@>`8?OdM^h7pzQHaXR8j3d-&e$BOA_Nc}Lt!p0^UQ-m zs%R~Nl#yj_`(Koz2?ggVtjw}|CKIbs8u_-XL$&(4?|Z$}LRdfJS0b}k)gUrfFbJE6%$zi#QH^wwUbuaW97wQs0g0Hj35>6+2k7BotcK<4# zjsf8A*CBZy8{!>LVi+*C9ILC3)k{V;luMhS8K8eD+>dF8$|0#HfC|ZF`})~c`r5R) zAz!jqaLF@-z@PvPVH;1kx;)#{0tj z8Kx*AHS919efSZssD+p_TK;mLi5?2~5M1K7Xyu8erSlk-{S*oXA`<*C)|tJPp5O@M z%tU-u#4LIM+BnyrvD>U$0sm|@9M3g!UW?HuH_K#8b8fI>3WZ%Isej}$7%|)DPm%C) z8gmg;R|+NB*@^xpVVKoV>sjl{>D)K#0HcqHRP0HK@O;VXFWIqdAi40ja_A~3`h6JN zN1QZIlc3!uN}zTU&NHj?#+34_ZxtNsCe$}I)J)S+w=cLMs3$7a;_5QNd9Z1=Yf~EE z^2(ZG$snkK$A@HuSe#JjAikYKF;t=ZYl^Qb^~Iy_!t6 zrxIJcyWounb$@pFAxmdtIfN&)GYO0%>PWZW)(_&9IY^Yp#)0%u;c4bPDIG;*Kp;pV z`kZ9^`?guC^fYY?TlhZT`+Wqpvz`o<3Uvnb2% zWf;@@RPeBRmPz*BJ4=3k=%jK%bd(f03Ax?2g+5*|7^*|3gCKwP0zsY3Ww>6qM^}0C z#{^O8v<%h$36yW70q%P}$aWKhF;-7VscQzVEFMRIynh9%10VU58O-I63&C-5zhLR7 z_@k&~XmMTOVD_eX)ghU-K8;vB*llylCRLG zdRRE_^yg9>buq@hxi94zLF*y=yRRg!gJhCCGVXr1x3(gm&(}K(<^M`mskr`=`Jax4 z7>Nkb_SmehN#|I@%Jt!(bF8h+6ZG38zv4j+s#o*l7R3I z01P-@`Nvp(`+xT2fLUPB91s2Jp!>UKVDowi09!z$zseCdi;5BaNBYEiLNR8qz-`wz z`Nc3|1{0hty3J^lj8*^ePr(z&%&BxP z#~^N`Ei}Q`Q_)De%kXEjdbZX2a(Ju$gwz@Z7;4L~Y;sCGvqWpVv*7S9L1MUO>R+SJ z3oED|UjMLs2vLvfby&au>U7j%i_lOk4NCjlPi$T?4p>AIDY2xu#+2)fT!K&W`$mOo z0XpPd8C3DRbbkS0Qr5!LK!HL?Ad1svLE$$<)&$nb4V7^WKiTL_#wd0)U4e zz1F5V+;CTWNST>05O!OEVkA)*=}@jHdcJ_A1T2T4BY(j{b7zGa4?1e0cKwPZ0iYu) zRI(aV5}UDjJ!=-9jJBvdl>d2TcsomSUs2 za2Tn4wXnyBaaRTS!ke=(U>zL^6E>@=X(AW7$>52K>wMp9<1a}P)+D(-(9|>{9{|>} zY_Cfwe72b_S_!tvFo@@eGexFH!v70!&;^S@OL3ZKR&M?%{`f9DLhJT_+I#PyCZ8>S z_z9teYUsU%-g`#~y|)mm^xmaN6Vwo@bV4uEJE(wwG%-{`q)Cw~Ra688R74Sc~1nU;T%@0za^O2S#I}EzTgf`R+u|3Gjd8< z7ybK$;Qhmb49%}%IQ=eOE$_vPW7gVdT1%MR=;JGxC0>J<&M$a?v5}v>$QqKd@rcq@vDX8-=fZ-Q#g~nmWurx@%AyZ##s|a0AV@RFv zBKyWlQ1M)815r<KlQz-4wo6fGG#I{rE*5o6Y(@f>TCKi#F3%!W-MAj)Vu>aB-H$! z7$3vt@;!=_F zd&M1u*Hct5{23cXFn>8p8|tJTNTg9&wy>V*R*^}Djh!^yF}Q>T!J4cidK8~W9^upG zKt>V+lHYx`_Yh3?-qSekKbC}PE0?U3P&>~En=$}dsVqs@Pi|&W z-#jBTmn-BB$ITI}^!qz0T*R7%s1r7$%eftNl<2^Rk zdb5;Y^qsagZcYBUHSr>Z8g`RUrHwVIM$jdu#O3c$0WvW5Vp@&jM!kmq!cFO5(ed25&(2cXDAsvQb=={ zZNJub)RQ!dwvUMqa%UmSwSh90jc^_u(%nBAG=rt6q1WAB@PFvsVT>O32`8SvscW>b zIS@j2SVEK55<48t>dg$X_IQIk^myuakua|CGC_*?-FA++J(gk}<))ZD(F}oE@Bwb{ z3zAPaA2bFoQj>FkZvNP6+eYdvnpI;mXR^dt;%uSc?Vx=Mz0eDC=95K_Ds9Na=$;eB zly4O$xjsa3@WktZNt-#c9znLyW;<78rtbt%fW6g}k-D_J;=HV{oPGh2bdUTytH=Zo z#{~R)uDtP@{ti-8Bc?4`;d z4`%~-ZRKD|sn&(^6smN6=mdtx?q1mS!!&~L>Ul>_g-x#hBQ>p{X#eI~DRpUHORY@J zH`a+2cR`nh@$h|sg=gjoO}A7?SuTU z&X7_h;?bH@P*;CVf62>%f|S*9on#@PVw7N@QMrH%B2J?wx?!~8u>Fa6fAo>g+|NfM zQE!joBiXrRx!~t~9Hb@#v2qU&2yT+RJpNkdpr(}45O9Ua!tAWV3%4)$XgI^?Nu14l zt3!v(?iXO1PA+Fc+=L~xr|kXtom>qTOf~~WJY65Zd4AE+_6tyvEes#A~J=J24NJ$3c1vz^{?V|P+GVV$wr zL+Q6}@MdBL>v=>B8Ux8032fZgyIX4Gw0(T;T|W!=;#VHjxU z4-Kb2n8>_t`WfS48ZaShHV3&;k@*QvZI9SJ2;ixTe(PFDUJWV~B*+JM{)`kS&dz7e z)#?pQ+yw=U8|^PdPY$wY>D^FQ&eb4!pMnjUo!Sv>izNW{;i}NYDF)S^l1lhZT>Gc>#q9 zaMb(5CzJr6CUBQBjO*ckrCDDl3I!+xEn6`3qKbjqD~Tg>b=+bfxX0=f-+bO}WH9}? z^m*4n_GRIjZF)K718MDh#NUMF>~-}=ODOR|z(l4z99$(Dek8gh`Om!;b*yhDKGPYs zsSMLp*%=((l?W`lGgB*Wy5~JCYfQr^oy8;Js<2u1w%w$4RWE{pH@(y>!>A-1uhuX0 z)<-DACRcK8_+UYXE5CN+*S0O4O_7lLOF7ouhy^kMZuzJ;9`~|O)lo2;v$$`J4E zG3wG$@FSd)R+5GfAnHiYL3r)kv2ZoXkR8qbvdP} zo{_c&+$Njy1V=>NR^|07bgfWdreyLpbaMm0g{1a9H@reQhtbPCN5iRbf}fi#rph?E z7oqXUrj}NVhmucCsCvv*z^H^B10|@@bF^IHRBHKx{8ZyVSMe48;)M~h5xKPJHRe%E z&jrKLfaY7q@5d%CG4aO->b=L?l<1urmk?~R2%UE?F{Z@QT3lpC*&&{L))JdEu;E@T%p0zpX=?f|vi zJ>56nK9lnrcy5@67ag7naVCwMQs2GBFlgvpIc!r3CWtKrr%Y=lkzGNB)SwXJ^KdKx7;krm;&s)*7|u>`5lt z#TWAR^dB2IJGZ{!Pcq)14Ca^Uq)YGnl~%7@-ztMTV={bU&w^z97Vp zO{Rvp^Oy1U!{sZ)6Vzi)UUK{thl_Jvg0XB#WbsBxDqm4op^PL&ATQ``1`bBbUjXQz z|1gO6`}e6|zF!bwL=d&}fi_FP=%Xt>#^6CgL3uIY zba+#RV3Tc83a7Gowf;JbM|Hyvy`vxdrdY>sa4Zh&WegsWC&HoTONio-$Uq0s;azMr zDfVi&yotaj+hz$)XPf=!c1i4OYE;xb5_u>4yN_+DkpW^hw86(A#2hi-A*0OG@SFNS ziZ?R99hg7)tHCF70x|O$S5G|lpAwnqC)iU7J-R}V4N-WS9uOk0ym;(}v=*bKWr0;z zeuC83*LNKS&=P1(d8YonHr_q3yQZA}lYA&8_;AvGBW`!S^{n&F>+8I4vo?}8c;BoR z^=>K13Ur^%-5uHezWzCMm$^5nK@ey6u{?W9gq(a|nNoj1Uu<|}B5M2i4%1rgGrsJn zN>3@r7bYGjr(~dxjEsz?M><7=Bjwn+o`OS?*Lp)7G-9_@>CQH2=5u+B60@Iz2YvL5 ziW3R~N0G;80CMOp`1 z!v`Z-XCDyBqL0;{UzK=Jzt!W_yQQ4|Zec}cyb4zs(RsD>YS79^OO5P?Yaoy_5kxT} zGAaeLjgh47NLnJktaU9dHp=Z3w!GOUSy9n56RsYapuO)*S4FC<((w-2h_cq19&PC} z6&o2972jve%L(@CHJz6s*U%wM7tnfnw@=xn0@n|HNEur8FMLCvQXFx^lne|4@F>B! zV?9*JzjO7^1@^yy{W~ZAC*yz1-}1NoEq}}ZBBLKMoz?wye~1@`1HV6@Kg`Tn;IEJD zpOHcR6aI%}IQ~N8{h_Cef1&OF%(!psU!JZU{t0taD# zg!hp};e`#OcnAM1?4w3$z)lj)A?F{4oyY|@fQ^U$FzilvOPc`00gCz0BC`ZKwF51# zf&R?6e+TMn`y)SW{vU?j&xz5$(;D(;VZ@0pL9Z`7_7B0hsTyO7#FPC~zz;Ub*|k0PZcNfPAAp^QvVqMl!r@UL{4ykuyY;&r2OF5{2$}7{s$f&1-B?9qR9W>#{KGTQJu@E&dS5zkM#by zdHoo42$zcK946?Tht!|{2N`Dyyu(KzKdpc0imt-xR{e-pPyn-k5~+WelC$i8lCh&( z^}t*H#|&Mv@8l5a#FBS_H+ff~bjxN4?0>F1EgbfpF9_Pehpo7JuYV@Je+$?LsJ@0% z?7#)~+JBIN5?u2yAoYX0M1-w6hpp<8(1SYXL7D8hu)C1~;{TbAkp!K%u&UV;h-FvxVtE{yHo*m16!M*$J+7p|RF?wDd6XJ5K&)Q?yF+lv01cLlZc4<^RLaD1jk zI{B{SoHgqGFL;T23icSB&1?P%Tz5*Fu=V|xbvLOt>qH+o(@3XOAjn5OWaoVDUF!JMSDONerM5X z{nS69>ibPfCu)cQpgiy-`^T-JJzjN6S*VsY5Aq`ZN

    M2)F{2HYFX_)>U3dbIc! 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

    GmL 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

     fluent-bit.config.filters: |
       [FILTER]
    -      Name kubernetes
    -      Match kube.*
    -      Merge_Log On
    -      Keep_Log On
    -      K8S-Logging.Parser On
    +      Name                kubernetes
    +      Match               kube.*
    +      Merge_Log           On
    +      Keep_Log            On
    +      K8S-Logging.Parser  On
           K8S-Logging.Exclude On
       [FILTER]
    -      Name                nest
    -      Match               *
    -      Wildcard            pod_name
    -      Operation lift
    +      Name         nest
    +      Match        *
    +      Wildcard     pod_name
    +      Operation    lift
           Nested_under kubernetes
           Add_prefix   kubernetes_
      
    @@ -239,16 +242,19 @@ resources: {}
           
     fluent-bit.config.outputs: |
       [OUTPUT]
    -      Name http
    -      Match kube.*
    -      Host '{{ include "victoria-logs.server.fullname" . }}'
    -      port 9428
    -      compress gzip
    -      uri /insert/jsonline?_stream_fields=stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name&_msg_field=log&_time_field=date
    -      format json_lines
    +      Name             http
    +      Match            kube.*
    +      Host             {{ include "victoria-logs.server.fullname" . }}
    +      port             9428
    +      compress         gzip
    +      uri              /insert/jsonline
    +      format           json_lines
           json_date_format iso8601
    -      header AccountID 0
    -      header ProjectID 0
    +      header           AccountID 0
    +      header           ProjectID 0
    +      header           VL-Msg-Field log
    +      header           VL-Time-Field date
    +      header           VL-Stream-Fields stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name
      
     
     
    diff --git a/docs/helm/victoria-metrics-operator/CHANGELOG.md b/docs/helm/victoria-metrics-operator/CHANGELOG.md index db8b6941dc..36b8f2d240 100644 --- a/docs/helm/victoria-metrics-operator/CHANGELOG.md +++ b/docs/helm/victoria-metrics-operator/CHANGELOG.md @@ -1,7 +1,26 @@ ## Next release +- TODO + +## 0.35.1 + +**Release date:** 2024-09-26 + +![AppVersion: v0.48.1](https://img.shields.io/static/v1?label=AppVersion&message=v0.48.1&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + +- updates operator to [v0.48.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.48.1) version + +## 0.35.0 + +**Release date:** 2024-09-26 + +![AppVersion: v0.48.0](https://img.shields.io/static/v1?label=AppVersion&message=v0.48.0&color=success&logo=) +![Helm: v3](https://img.shields.io/static/v1?label=Helm&message=v3&color=informational&logo=helm) + - Made webhook port configurable. See [this issue](https://github.com/VictoriaMetrics/helm-charts/issues/1506) - Changed crd cleanup hook delete policy to prevent `resource already exists` error. +- updates operator to [v0.48.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.48.0) version ## 0.34.8 diff --git a/docs/helm/victoria-metrics-operator/README.md b/docs/helm/victoria-metrics-operator/README.md index 47162c443e..665417602c 100644 --- a/docs/helm/victoria-metrics-operator/README.md +++ b/docs/helm/victoria-metrics-operator/README.md @@ -1,4 +1,4 @@ -![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.34.8](https://img.shields.io/badge/Version-0.34.8-informational?style=flat-square) +![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 0.35.1](https://img.shields.io/badge/Version-0.35.1-informational?style=flat-square) [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-operator) Victoria Metrics Operator From 2d26d3e3de795df868955f9a1d18c12999bea948 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:42:10 +0300 Subject: [PATCH 122/128] Automatic update operator docs from VictoriaMetrics/operator@db0d09f (#7111) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: f41gh7 <18450869+f41gh7@users.noreply.github.com> --- docs/operator/CHANGELOG.md | 5 +++++ docs/operator/api.md | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md index 1dea40489a..1e76ac2168 100644 --- a/docs/operator/CHANGELOG.md +++ b/docs/operator/CHANGELOG.md @@ -11,6 +11,11 @@ aliases: - /operator/changelog/index.html --- +## [v0.48.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.48.1) - 26 Sep 2024 + +- [vmalertmanager](https://docs.victoriametrics.com/operator/resources/vmalertmanager): properly build service, previously port by number instead of name was used. It produced `updating service` log messages. +- [vmcluster](https://docs.victoriametrics.com/operator/resources/vmcluster): properly add `imagePullSecrets` to the components. Due to bug at `0.48.0` operator ignored `vmcluster.spec.imagePullSecrets` See [this issue](https://github.com/VictoriaMetrics/operator/issues/1116) for details. + ## [v0.48.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.48.0) - 25 Sep 2024 - [api](https://docs.victoriametrics.com/operator/api): adds new fields `useVMConfigReloader`, `configReloaderImageTag`, `configReloaderResources` to to the `VMagent`, `VMAlert`, `VMAuth`, and `VMAlertmanager`. diff --git a/docs/operator/api.md b/docs/operator/api.md index 351b63d80d..437e34d29c 100644 --- a/docs/operator/api.md +++ b/docs/operator/api.md @@ -383,7 +383,6 @@ _Appears in:_ | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | | `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | | `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | | `tolerations` | Tolerations If specified, the pod's tolerations. | _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#toleration-v1-core) array_ | false | | `topologySpreadConstraints` | TopologySpreadConstraints embedded kubernetes pod configuration option,
    controls how pods are spread across your cluster among failure-domains
    such as regions, zones, nodes, and other user-defined topology domains
    https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | _[TopologySpreadConstraint](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#topologyspreadconstraint-v1-core) array_ | false | @@ -3214,7 +3213,6 @@ _Appears in:_ | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | | `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | | `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vminsert VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vminsert service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `terminationGracePeriodSeconds` | TerminationGracePeriodSeconds period for container graceful termination | _integer_ | false | @@ -3658,7 +3656,6 @@ _Appears in:_ | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | | `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | | `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmselect VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be added to vmselect service spec | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `storage` | StorageSpec - add persistent volume claim for cacheMountPath
    its needed for persistent cache | _[StorageSpec](#storagespec)_ | false | @@ -3895,7 +3892,6 @@ _Appears in:_ | `schedulerName` | SchedulerName - defines kubernetes scheduler name | _string_ | false | | `secrets` | Secrets is a list of Secrets in the same namespace as the Application
    object, which shall be mounted into the Application container
    at /etc/vm/secrets/SECRET_NAME folder | _string array_ | false | | `securityContext` | SecurityContext holds pod-level security attributes and common container settings.
    This defaults to the default PodSecurityContext. | _[SecurityContext](#securitycontext)_ | false | -| `serviceAccountName` | ServiceAccountName is the name of the ServiceAccount to use to run the pods | _string_ | false | | `serviceScrapeSpec` | ServiceScrapeSpec that will be added to vmstorage VMServiceScrape spec | _[VMServiceScrapeSpec](#vmservicescrapespec)_ | false | | `serviceSpec` | ServiceSpec that will be create additional service for vmstorage | _[AdditionalServiceSpec](#additionalservicespec)_ | false | | `storage` | Storage - add persistent volume for StorageDataPath
    its useful for persistent cache | _[StorageSpec](#storagespec)_ | false | From c896bf340d89572905ef9dc3445a1067922de181 Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Fri, 27 Sep 2024 11:52:01 +0200 Subject: [PATCH 123/128] vmui: add functionality to preserve selected columns (#7037) ### Describe Your Changes 1) Changed table settings from a popup to a modal window to simplify future functionality additions. 2) Added functionality to save selected columns when data is modified or the page is reloaded. See #7016.
    Example screenshots demo-1
    ### Checklist The following checks are **mandatory**: - [x] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Co-authored-by: Roman Khavronenko --- .../src/components/Main/TextField/style.scss | 2 +- .../Table/TableSettings/TableSettings.tsx | 154 ++++++++++-------- .../components/Table/TableSettings/style.scss | 126 ++++++++------ .../CustomPanel/CustomPanelTabs/TableTab.tsx | 2 +- .../ExploreLogsBody/ExploreLogsBody.tsx | 2 +- .../QueryAnalyzerView/QueryAnalyzerView.tsx | 2 +- app/vmui/packages/vmui/src/utils/storage.ts | 1 + docs/VictoriaLogs/CHANGELOG.md | 2 + docs/changelog/CHANGELOG.md | 1 + 9 files changed, 173 insertions(+), 119 deletions(-) diff --git a/app/vmui/packages/vmui/src/components/Main/TextField/style.scss b/app/vmui/packages/vmui/src/components/Main/TextField/style.scss index 24dfa80e88..823f490a9f 100644 --- a/app/vmui/packages/vmui/src/components/Main/TextField/style.scss +++ b/app/vmui/packages/vmui/src/components/Main/TextField/style.scss @@ -149,7 +149,7 @@ max-width: 15px; top: 0; left: $padding-small; - height: 40px; + height: 36px; position: absolute; color: $color-text-secondary; } diff --git a/app/vmui/packages/vmui/src/components/Table/TableSettings/TableSettings.tsx b/app/vmui/packages/vmui/src/components/Table/TableSettings/TableSettings.tsx index a5eb0219fc..a59892a55f 100644 --- a/app/vmui/packages/vmui/src/components/Table/TableSettings/TableSettings.tsx +++ b/app/vmui/packages/vmui/src/components/Table/TableSettings/TableSettings.tsx @@ -1,23 +1,23 @@ import React, { FC, useEffect, useRef, useMemo } from "preact/compat"; import Button from "../../Main/Button/Button"; import { SearchIcon, SettingsIcon } from "../../Main/Icons"; -import Popper from "../../Main/Popper/Popper"; import "./style.scss"; import Checkbox from "../../Main/Checkbox/Checkbox"; import Tooltip from "../../Main/Tooltip/Tooltip"; import Switch from "../../Main/Switch/Switch"; import { arrayEquals } from "../../../utils/array"; import classNames from "classnames"; -import useDeviceDetect from "../../../hooks/useDeviceDetect"; import useBoolean from "../../../hooks/useBoolean"; import TextField from "../../Main/TextField/TextField"; import { KeyboardEvent, useState } from "react"; +import Modal from "../../Main/Modal/Modal"; +import { getFromStorage, removeFromStorage, saveToStorage } from "../../../utils/storage"; const title = "Table settings"; interface TableSettingsProps { columns: string[]; - defaultColumns?: string[]; + selectedColumns?: string[]; tableCompact: boolean; toggleTableCompact: () => void; onChangeColumns: (arr: string[]) => void @@ -25,13 +25,11 @@ interface TableSettingsProps { const TableSettings: FC = ({ columns, - defaultColumns = [], + selectedColumns = [], tableCompact, onChangeColumns, toggleTableCompact }) => { - const { isMobile } = useDeviceDetect(); - const buttonRef = useRef(null); const { @@ -41,31 +39,34 @@ const TableSettings: FC = ({ } = useBoolean(false); const { - value: showSearch, - toggle: toggleShowSearch, - } = useBoolean(false); + value: saveColumns, + toggle: toggleSaveColumns, + } = useBoolean(Boolean(getFromStorage("TABLE_COLUMNS"))); const [searchColumn, setSearchColumn] = useState(""); const [indexFocusItem, setIndexFocusItem] = useState(-1); + const customColumns = useMemo(() => { + return selectedColumns.filter(col => !columns.includes(col)); + }, [columns, selectedColumns]); + const filteredColumns = useMemo(() => { - if (!searchColumn) return columns; - return columns.filter(col => col.includes(searchColumn)); - }, [columns, searchColumn]); + const allColumns = customColumns.concat(columns); + if (!searchColumn) return allColumns; + return allColumns.filter(col => col.includes(searchColumn)); + }, [columns, customColumns, searchColumn]); const isAllChecked = useMemo(() => { - return filteredColumns.every(col => defaultColumns.includes(col)); - }, [defaultColumns, filteredColumns]); - - const disabledButton = useMemo(() => !columns.length, [columns]); + return filteredColumns.every(col => selectedColumns.includes(col)); + }, [selectedColumns, filteredColumns]); const handleChange = (key: string) => { - onChangeColumns(defaultColumns.includes(key) ? defaultColumns.filter(col => col !== key) : [...defaultColumns, key]); + onChangeColumns(selectedColumns.includes(key) ? selectedColumns.filter(col => col !== key) : [...selectedColumns, key]); }; const toggleAllColumns = () => { if (isAllChecked) { - onChangeColumns(defaultColumns.filter(col => !filteredColumns.includes(col))); + onChangeColumns(selectedColumns.filter(col => !filteredColumns.includes(col))); } else { onChangeColumns(filteredColumns); } @@ -94,10 +95,24 @@ const TableSettings: FC = ({ }; useEffect(() => { - if (arrayEquals(columns, defaultColumns)) return; + if (arrayEquals(columns, selectedColumns) || saveColumns) return; onChangeColumns(columns); }, [columns]); + useEffect(() => { + if (!saveColumns) { + removeFromStorage(["TABLE_COLUMNS"]); + } else if (selectedColumns.length) { + saveToStorage("TABLE_COLUMNS", selectedColumns.join(",")); + } + }, [saveColumns, selectedColumns]); + + useEffect(() => { + const saveColumns = getFromStorage("TABLE_COLUMNS") as string; + if (!saveColumns) return; + onChangeColumns(saveColumns.split(",")); + }, []); + return (
    @@ -106,48 +121,24 @@ const TableSettings: FC = ({ variant="text" startIcon={} onClick={toggleOpenSettings} - disabled={disabledButton} ariaLabel={title} />
    - -
    -
    - -
    -
    -
    -
    -

    Display columns

    - -
    - {showSearch && ( +
    +
    + Customize columns +
    +
    +
    } value={searchColumn} onChange={setSearchColumn} @@ -155,13 +146,10 @@ const TableSettings: FC = ({ onKeyDown={handleKeyDown} type="search" /> - )} - {!filteredColumns.length && ( -

    No columns found

    - )} -
    +
    +
    {!!filteredColumns.length && ( -
    +
    = ({ />
    )} -
    -
    + {!filteredColumns.length && ( +
    +

    + No columns found. +

    +
    + )} {filteredColumns.map((col, i) => (
    = ({
    ))}
    +
    + +

    + This label indicates that when the checkbox is activated, + the current column configurations will not be reset. +

    +
    -
    - +
    +
    + Table view +
    +
    + +
    +
    + )}
    ); }; diff --git a/app/vmui/packages/vmui/src/components/Table/TableSettings/style.scss b/app/vmui/packages/vmui/src/components/Table/TableSettings/style.scss index 2c0049cdac..7866edf99a 100644 --- a/app/vmui/packages/vmui/src/components/Table/TableSettings/style.scss +++ b/app/vmui/packages/vmui/src/components/Table/TableSettings/style.scss @@ -1,66 +1,98 @@ @use "src/styles/variables" as *; -.vm-table-settings-popper { - display: grid; - min-width: 250px; - - &_mobile &-list { - gap: $padding-global; - - &:first-child { - padding-top: 0; - } - } - - &-list { - display: grid; - gap: 12px; - padding: $padding-global; - border-bottom: $border-divider; - max-width: 250px; - - &_first { - padding-top: 0; +.vm-table-settings { + &-modal { + .vm-modal-content-body { + padding: 0; } - &-header { - display: grid; - align-items: center; - justify-content: space-between; - grid-template-columns: 1fr auto; - gap: $padding-small; - min-height: 25px; + &-section { + padding-block: $padding-global; + border-top: $border-divider; + + &:first-child { + padding-top: 0; + border-top: none; + } &__title { + padding-inline: $padding-global; + font-size: $font-size; font-weight: bold; + margin-bottom: $padding-global; } } &-columns { - max-height: 350px; - overflow: auto; - } - - &__item { - padding: calc($padding-global/2) $padding-global; - font-size: $font-size; - - &:hover, - &_focus { - background-color: $color-hover-black; + &__search { + padding-inline: $padding-global; } - &_check_all { - padding: calc($padding-global/2) $padding-global; - margin: 0 (-$padding-global); + &-list { + display: flex; + flex-direction: column; + max-height: 250px; + min-height: 250px; + overflow: auto; + margin-bottom: $padding-global; + + &__item { + width: 100%; + font-size: $font-size; + border-radius: $border-radius-small; + + &>div { + padding: $padding-small $padding-global; + } + + &_all { + font-weight: bold; + } + + &:hover, + &_focus { + background-color: $color-hover-black; + } + + &_custom { + .vm-checkbox__label:after { + width: 100%; + content: "(custom column, will be removed if unchecked)"; + padding: 0 $padding-small; + text-align: right; + font-style: italic; + color: $color-text-secondary; + } + } + } + } + + &-no-found { + display: flex; + flex-direction: column; + min-width: 100%; + min-height: 250px; + align-items: center; + justify-content: center; + gap: $padding-global; + + &__info { + text-align: center; + font-style: italic; + color: $color-text-secondary; + } } } - &__no-found { - text-align: center; - font-style: italic; - color: $color-text-secondary; - margin-bottom: $padding-small; + &-preserve { + padding: $padding-global; + + &__info { + padding-top: $padding-small; + font-size: $font-size-small; + color: $color-text-secondary; + line-height: 130%; + } } } } diff --git a/app/vmui/packages/vmui/src/pages/CustomPanel/CustomPanelTabs/TableTab.tsx b/app/vmui/packages/vmui/src/pages/CustomPanel/CustomPanelTabs/TableTab.tsx index afa42c1b1c..d8374c52b7 100644 --- a/app/vmui/packages/vmui/src/pages/CustomPanel/CustomPanelTabs/TableTab.tsx +++ b/app/vmui/packages/vmui/src/pages/CustomPanel/CustomPanelTabs/TableTab.tsx @@ -26,7 +26,7 @@ const TableTab: FC = ({ liveData, controlsRef }) => { const controls = ( = ({ data }) => {
    = ({ data, period }) => { {displayType === "table" && ( Date: Fri, 27 Sep 2024 18:21:09 +0800 Subject: [PATCH 124/128] =?UTF-8?q?stream=20aggregation:=20support=20confi?= =?UTF-8?q?guring=20multiple=20labels=20per=20`remoteWrite=E2=80=A6=20(#70?= =?UTF-8?q?73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ….url` using `-remoteWrite.streamAggr.dropInputLabels` Before, labels were set to all the `remoteWrite.url`. address https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6780 --------- Co-authored-by: Roman Khavronenko --- app/vmagent/remotewrite/streamaggr.go | 14 ++++++++++++-- docs/changelog/CHANGELOG.md | 1 + docs/vmagent.md | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/vmagent/remotewrite/streamaggr.go b/app/vmagent/remotewrite/streamaggr.go index 8bdc8c3a71..6391cfa3f1 100644 --- a/app/vmagent/remotewrite/streamaggr.go +++ b/app/vmagent/remotewrite/streamaggr.go @@ -3,6 +3,7 @@ package remotewrite import ( "flag" "fmt" + "strings" "github.com/VictoriaMetrics/VictoriaMetrics/lib/fasttime" "github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil" @@ -56,6 +57,7 @@ var ( "See https://docs.victoriametrics.com/stream-aggregation/#ignore-aggregation-intervals-on-start") streamAggrDropInputLabels = flagutil.NewArrayString("remoteWrite.streamAggr.dropInputLabels", "An optional list of labels to drop from samples "+ "before stream de-duplication and aggregation with -remoteWrite.streamAggr.config and -remoteWrite.streamAggr.dedupInterval at the corresponding -remoteWrite.url. "+ + "Multiple labels per remoteWrite.url must be delimited by '^^': -remoteWrite.streamAggr.dropInputLabels='replica^^az,replica'. "+ "See https://docs.victoriametrics.com/stream-aggregation/#dropping-unneeded-labels") ) @@ -155,7 +157,11 @@ func (rwctx *remoteWriteCtx) initStreamAggrConfig() { dedupInterval := streamAggrDedupInterval.GetOptionalArg(idx) if dedupInterval > 0 { alias := fmt.Sprintf("dedup-%d", idx+1) - rwctx.deduplicator = streamaggr.NewDeduplicator(rwctx.pushInternalTrackDropped, dedupInterval, *streamAggrDropInputLabels, alias) + var dropLabels []string + if streamAggrDropInputLabels.GetOptionalArg(idx) != "" { + dropLabels = strings.Split(streamAggrDropInputLabels.GetOptionalArg(idx), "^^") + } + rwctx.deduplicator = streamaggr.NewDeduplicator(rwctx.pushInternalTrackDropped, dedupInterval, dropLabels, alias) } } @@ -224,9 +230,13 @@ func newStreamAggrConfigPerURL(idx int, pushFunc streamaggr.PushFunc) (*streamag if *showRemoteWriteURL { alias = fmt.Sprintf("%d:%s", idx+1, remoteWriteURLs.GetOptionalArg(idx)) } + var dropLabels []string + if streamAggrDropInputLabels.GetOptionalArg(idx) != "" { + dropLabels = strings.Split(streamAggrDropInputLabels.GetOptionalArg(idx), "^^") + } opts := &streamaggr.Options{ DedupInterval: streamAggrDedupInterval.GetOptionalArg(idx), - DropInputLabels: *streamAggrDropInputLabels, + DropInputLabels: dropLabels, IgnoreOldSamples: streamAggrIgnoreOldSamples.GetOptionalArg(idx), IgnoreFirstIntervals: streamAggrIgnoreFirstIntervals.GetOptionalArg(idx), KeepInput: streamAggrKeepInput.GetOptionalArg(idx), diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 54dcf1c14c..667bbe1952 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -35,6 +35,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/) fix service discovery of Azure Virtual Machines for response contains `nextLink` in `Host:Port` format. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6912). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent/): properly consume messages [from kafka](https://docs.victoriametrics.com/vmagent/#kafka-integration). Previously vmagent could skip some messages during start-up. * BUGFIX: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): perform deduplication for all received data when specifying `-streamAggr.dedupInterval` or `-remoteWrite.streamAggr.dedupInterval` command-line flags are set. Previously, if the `-remoteWrite.streamAggr.config` or `-streamAggr.config` is set, only series that matched aggregation config were deduplicated. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6711#issuecomment-2288361213) for details. +* BUGFIX: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation/): fix `-remoteWrite.streamAggr.dropInputLabels` labels parsing. Now, this flag allows specifying a list of labels to drop (by using '^^' separator, i.e. `dropInputLabels='replica^^az,replica'`) per each corresponding `remoteWrite.url`. Before, `-remoteWrite.streamAggr.dropInputLabels` labels were incorrectly applied to all configured `remoteWrite.url`s. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6780) for the details. * BUGFIX: [vmagent dashboard](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards/vmagent.json): fix legend captions for stream aggregation related panels. Before they were displaying wrong label names. * BUGFIX: [vmgateway](https://docs.victoriametrics.com/vmgateway/): add missing `datadog`, `newrelic`, `opentelemetry` and `pushgateway` routes to the `JWT` authorization routes. Allows prefixed (`promtheus/graphite`) routes for query requests. * BUGFIX: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): properly cache empty list of matching time series for the given [labels filter](https://docs.victoriametrics.com/keyconcepts/#filtering). This type of caching was broken since [v1.97.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.97.0), which could result in the increased CPU usage when performing queries, which match zero time series. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7009). diff --git a/docs/vmagent.md b/docs/vmagent.md index 9ccbce4f71..4f5d2e9000 100644 --- a/docs/vmagent.md +++ b/docs/vmagent.md @@ -2215,7 +2215,7 @@ See the docs at https://docs.victoriametrics.com/vmagent/ . Supports array of values separated by comma or specified via multiple flags. Empty values are set to false. -remoteWrite.streamAggr.dropInputLabels array - An optional list of labels to drop from samples before stream de-duplication and aggregation with -remoteWrite.streamAggr.config and -remoteWrite.streamAggr.dedupInterval at the corresponding -remoteWrite.url. See https://docs.victoriametrics.com/stream-aggregation/#dropping-unneeded-labels + An optional list of labels to drop from samples before stream de-duplication and aggregation with -remoteWrite.streamAggr.config and -remoteWrite.streamAggr.dedupInterval at the corresponding -remoteWrite.url. Multiple labels per remoteWrite.url must be delimited by '^^': -remoteWrite.streamAggr.dropInputLabels='replica^^az,replica'. See https://docs.victoriametrics.com/stream-aggregation/#dropping-unneeded-labels Supports an array of values separated by comma or specified via multiple flags. Value can contain comma inside single-quoted or double-quoted string, {}, [] and () braces. -remoteWrite.streamAggr.ignoreFirstIntervals array From 76c1b0b8ea37899d4cfc821ddb0ad87ac781d897 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 12:05:40 +0200 Subject: [PATCH 125/128] lib/logstorage: support skipping _stream: prefix for stream filters '_stream:{...}' can be written as '{...}' This simplifies writing queries with stream filters, and makes them more familier to Loki users. --- docs/VictoriaLogs/CHANGELOG.md | 1 + docs/VictoriaLogs/LogsQL.md | 18 +++++++++++------ docs/VictoriaLogs/logsql-examples.md | 10 +++++----- docs/VictoriaLogs/querying/README.md | 4 ++-- lib/logstorage/filter_stream.go | 4 ++-- lib/logstorage/parser.go | 5 +++++ lib/logstorage/parser_test.go | 29 ++++++++++++++++++++++------ 7 files changed, 50 insertions(+), 21 deletions(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 5b1c779743..77a2299d3e 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -16,6 +16,7 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): keep selected columns in table view on page reloads. Before, selected columns were reset on each update. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7016). +* FEATURE: allow skipping `_stream:` prefix in [stream filters](https://docs.victoriametrics.com/victorialogs/logsql/#stream-filter). This simplifies writing queries with stream filters. Now `{foo="bar"}` is the recommended format for stream filters over the `_stream:{foo="bar"}` format. ## [v0.30.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.1-victorialogs) diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index 78828e863e..25bfc88954 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -177,7 +177,7 @@ and query performance when querying the needed streams via [`_stream` filter](#s If the `app` field is associated with the log stream, then the query above can be rewritten to more performant one: ```logsql -_time:5m log.level:error _stream:{app!~"buggy_app|foobar"} +_time:5m log.level:error {app!~"buggy_app|foobar"} ``` This query skips scanning for [log messages](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field) from `buggy_app` and `foobar` apps. @@ -428,14 +428,14 @@ See also: ### Stream filter VictoriaLogs provides an optimized way to select logs, which belong to particular [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). -This can be done via `_stream:{...}` filter. The `{...}` may contain arbitrary +This can be done via `{...}` filter, which may contain arbitrary [Prometheus-compatible label selector](https://docs.victoriametrics.com/keyconcepts/#filtering) over fields associated with [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). For example, the following query selects [log entries](https://docs.victoriametrics.com/victorialogs/keyconcepts/#data-model) with `app` field equal to `nginx`: ```logsql -_stream:{app="nginx"} +{app="nginx"} ``` This query is equivalent to the following [`exact` filter](#exact-filter) query, but the upper query usually works much faster: @@ -444,13 +444,19 @@ This query is equivalent to the following [`exact` filter](#exact-filter) query, app:="nginx" ``` +It is allowed to add `_stream:` prefix in front of `{...}` filter. The following filter is equivalent to `{app="nginx"}`: + +```logsql +_stream:{app="nginx"} +``` + Performance tips: -- It is recommended using the most specific `_stream:{...}` filter matching the smallest number of log streams, +- It is recommended using the most specific `{...}` filter matching the smallest number of log streams, which needs to be scanned by the rest of filters in the query. -- While LogsQL supports arbitrary number of `_stream:{...}` filters at any level of [logical filters](#logical-filter), - it is recommended specifying a single `_stream:...` filter at the top level of the query. +- While LogsQL supports arbitrary number of `{...}` filters at any level of [logical filters](#logical-filter), + it is recommended specifying a single `{...}` filter at the top level of the query. - See [other performance tips](#performance-tips). diff --git a/docs/VictoriaLogs/logsql-examples.md b/docs/VictoriaLogs/logsql-examples.md index 82782a7955..ab4bf7f7d9 100644 --- a/docs/VictoriaLogs/logsql-examples.md +++ b/docs/VictoriaLogs/logsql-examples.md @@ -146,7 +146,7 @@ to the query. For example, the following query selects logs with `error` and `ku from [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields) containing `container="my-app"` field, over the last hour: ```logsql -error kubernetes _stream:{container="my-app"} _time:1h +error kubernetes {container="my-app"} _time:1h ``` The logs are returned in arbitrary order because of performance reasons. Add [`sort` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#sort-pipe) @@ -220,14 +220,14 @@ For example, if the application contains `job="app-42"` and `instance="host-123: then the following query selects all the logs from this application: ```logsql -_stream:{job="app-42",instance="host-123:5678"} +{job="app-42",instance="host-123:5678"} ``` If the number of returned logs is too big, it is recommended adding [`_time` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) to the query in order to reduce the number of matching logs. For example, the following query returns logs for the given application for the last day: ```logsql -_stream:{job="app-42",instance="host-123:5678"} _time:1d +{job="app-42",instance="host-123:5678"} _time:1d ``` If the number of returned logs is still too big, then consider adding more specific [filters](https://docs.victoriametrics.com/victorialogs/logsql/#filters) @@ -236,7 +236,7 @@ which contain `error` [word](https://docs.victoriametrics.com/victorialogs/logsq over the last day: ```logsql -_stream:{job="app-42",instance="host-123:5678"} error _time:1d +{job="app-42",instance="host-123:5678"} error _time:1d ``` The logs are returned in arbitrary order because of performance reasons. Use [`sort` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#sort-pipe) @@ -244,7 +244,7 @@ for sorting the returned logs by the needed fields. For example, the following q by [`_time`](https://docs.victoriametrics.com/victorialogs/keyconcepts/#time-field): ```logsql -_stream:{job="app-42",instance="host-123:5678"} _time:1d | sort by (_time) +{job="app-42",instance="host-123:5678"} _time:1d | sort by (_time) ``` See also: diff --git a/docs/VictoriaLogs/querying/README.md b/docs/VictoriaLogs/querying/README.md index 3579550503..12f1a2ccde 100644 --- a/docs/VictoriaLogs/querying/README.md +++ b/docs/VictoriaLogs/querying/README.md @@ -876,7 +876,7 @@ received from [streams](https://docs.victoriametrics.com/victorialogs/keyconcept during the last 5 minutes: ```sh -curl http://localhost:9428/select/logsql/query -d 'query=_stream:{app="nginx"} AND _time:5m AND error' | wc -l +curl http://localhost:9428/select/logsql/query -d 'query={app="nginx"} AND _time:5m AND error' | wc -l ``` See [these docs](https://docs.victoriametrics.com/victorialogs/logsql/#stream-filter) about `_stream` filter, @@ -886,7 +886,7 @@ and [these docs](https://docs.victoriametrics.com/victorialogs/logsql/#logical-f Alternatively, you can count the number of matching logs at VictoriaLogs side with [`stats` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stats-pipe): ```sh -curl http://localhost:9428/select/logsql/query -d 'query=_stream:{app="nginx"} AND _time:5m AND error | stats count() logs_with_error' +curl http://localhost:9428/select/logsql/query -d 'query={app="nginx"} AND _time:5m AND error | stats count() logs_with_error' ``` The following example shows how to sort query results by the [`_time` field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#time-field) with traditional Unix tools: diff --git a/lib/logstorage/filter_stream.go b/lib/logstorage/filter_stream.go index 2359d7f36d..e127a1e0fe 100644 --- a/lib/logstorage/filter_stream.go +++ b/lib/logstorage/filter_stream.go @@ -6,7 +6,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" ) -// filterStream is the filter for `_stream:{...}` +// filterStream is the filter for `{}` aka `_stream:{...}` type filterStream struct { // f is the filter to apply f *StreamFilter @@ -22,7 +22,7 @@ type filterStream struct { } func (fs *filterStream) String() string { - return "_stream:" + fs.f.String() + return fs.f.String() } func (fs *filterStream) updateNeededFields(neededFields fieldsSet) { diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 3bfccbc42c..3f0264cc53 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -822,6 +822,11 @@ func parseFilterAnd(lex *lexer, fieldName string) (filter, error) { func parseGenericFilter(lex *lexer, fieldName string) (filter, error) { // Check for special keywords switch { + case lex.isKeyword("{"): + if fieldName != "" && fieldName != "_stream" { + return nil, fmt.Errorf("stream filter cannot be applied to %q field; it can be applied only to _stream field", fieldName) + } + return parseFilterStream(lex) case lex.isKeyword(":"): if !lex.mustNextToken() { return nil, fmt.Errorf("missing filter after ':'") diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index a4d393d426..cba1d0834b 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -29,6 +29,8 @@ func TestLexer(t *testing.T) { f("foo:bar", []string{"foo", ":", "bar"}) f(` re ( "тест(\":" ) `, []string{"re", "(", `тест(":`, ")"}) f(" `foo, bar`* AND baz:(abc or 'd\\'\"ЙЦУК `'*)", []string{"foo, bar", "*", "AND", "baz", ":", "(", "abc", "or", `d'"ЙЦУК ` + "`", "*", ")"}) + f(`{foo="bar",a=~"baz", b != 'cd',"d,}a"!~abc} def`, + []string{"{", "foo", "=", "bar", ",", "a", "=~", "baz", ",", "b", "!=", "cd", ",", "d,}a", "!~", "abc", "}", "def"}) f(`_stream:{foo="bar",a=~"baz", b != 'cd',"d,}a"!~abc}`, []string{"_stream", ":", "{", "foo", "=", "bar", ",", "a", "=~", "baz", ",", "b", "!=", "cd", ",", "d,}a", "!~", "abc", "}"}) } @@ -700,10 +702,14 @@ func TestParseQuerySuccess(t *testing.T) { f(`_stream_id:in(_time:5m | fields _stream_id)`, `_stream_id:in(_time:5m | fields _stream_id)`) // _stream filters - f(`_stream:{}`, `_stream:{}`) - f(`_stream:{foo="bar", baz=~"x" OR or!="b", "x=},"="d}{"}`, `_stream:{foo="bar",baz=~"x" or "or"!="b","x=},"="d}{"}`) - f(`_stream:{or=a or ","="b"}`, `_stream:{"or"="a" or ","="b"}`) - f("_stream : { foo = bar , } ", `_stream:{foo="bar"}`) + f(`_stream:{}`, `{}`) + f(`_stream:{foo="bar", baz=~"x" OR or!="b", "x=},"="d}{"}`, `{foo="bar",baz=~"x" or "or"!="b","x=},"="d}{"}`) + f(`_stream:{or=a or ","="b"}`, `{"or"="a" or ","="b"}`) + f("_stream : { foo = bar , } ", `{foo="bar"}`) + + // _stream filter without _stream prefix + f(`{}`, `{}`) + f(`{foo="bar", baz=~"x" OR or!="b", "x=},"="d}{"}`, `{foo="bar",baz=~"x" or "or"!="b","x=},"="d}{"}`) // _time filters f(`_time:[-5m,now)`, `_time:[-5m,now)`) @@ -942,11 +948,11 @@ func TestParseQuerySuccess(t *testing.T) { // complex queries f(`_time:[-1h, now] _stream:{job="foo",env=~"prod|staging"} level:(error or warn*) and not "connection reset by peer"`, - `_time:[-1h,now] _stream:{job="foo",env=~"prod|staging"} (level:error or level:warn*) !"connection reset by peer"`) + `_time:[-1h,now] {job="foo",env=~"prod|staging"} (level:error or level:warn*) !"connection reset by peer"`) f(`(_time:(2023-04-20, now] or _time:[-10m, -1m)) and (_stream:{job="a"} or _stream:{instance!="b"}) and (err* or ip:(ipv4_range(1.2.3.0, 1.2.3.255) and not 1.2.3.4))`, - `(_time:(2023-04-20,now] or _time:[-10m,-1m)) (_stream:{job="a"} or _stream:{instance!="b"}) (err* or ip:ipv4_range(1.2.3.0, 1.2.3.255) !ip:1.2.3.4)`) + `(_time:(2023-04-20,now] or _time:[-10m,-1m)) ({job="a"} or {instance!="b"}) (err* or ip:ipv4_range(1.2.3.0, 1.2.3.255) !ip:1.2.3.4)`) // fields pipe f(`foo|fields *`, `foo | fields *`) @@ -1273,6 +1279,17 @@ func TestParseQueryFailure(t *testing.T) { f("_stream:(foo)") f("_stream:[foo]") + // invalid _stream filters without _stream: prefix + f("{") + f(`{foo`) + f(`{foo}`) + f(`{foo=`) + f(`{foo=}`) + f(`{foo="bar`) + f(`{foo='bar`) + f(`{foo="bar}`) + f(`{foo='bar}`) + // invalid _time filters f("_time:") f("_time:[") From 09b309a82ec1883d16554a927f15f07a7bb4d5c1 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 27 Sep 2024 13:12:34 +0200 Subject: [PATCH 126/128] lib/logstorage: allow using `-` instead of `!` as a shorthand for `NOT` operator in LogsQL --- docs/VictoriaLogs/CHANGELOG.md | 3 +- docs/VictoriaLogs/LogsQL.md | 29 ++++++------ docs/VictoriaLogs/logsql-examples.md | 12 ++--- lib/logstorage/filter_not.go | 5 +- lib/logstorage/parser.go | 4 +- lib/logstorage/parser_test.go | 69 +++++++++++++++------------- 6 files changed, 67 insertions(+), 55 deletions(-) diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 77a2299d3e..be2fec41a6 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -17,13 +17,14 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): keep selected columns in table view on page reloads. Before, selected columns were reset on each update. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7016). * FEATURE: allow skipping `_stream:` prefix in [stream filters](https://docs.victoriametrics.com/victorialogs/logsql/#stream-filter). This simplifies writing queries with stream filters. Now `{foo="bar"}` is the recommended format for stream filters over the `_stream:{foo="bar"}` format. +* FEATURE: allow using `-` instead of `!` as `NOT` operator shorthand in [logical filters](https://docs.victoriametrics.com/victorialogs/logsql/#logical-filter). For example, `-info -warn` query is equivalent to `!info !warn`. This simplifies transition from other query languages with full-text search support, which usually use `-` as `NOT` operator. ## [v0.30.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.1-victorialogs) Released at 2024-09-27 * BUGFIX: consistently return matching log streams sorted by time from [`stream_context` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stream_context-pipe). Previously log streams could be returned in arbitrary order with every request. This could complicate using `stream_context` pipe. -* BUGFIX: add missing `_msg="---"` delimiter between stream contexts belonging to different [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). This should simplify investigating `stream_context` output for multiple matching log streams. +* BUGFIX: [`stream_context` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#stream_context-pipe): add missing `_msg="---"` delimiter between stream contexts belonging to different [log streams](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields). This should simplify investigating `stream_context` output for multiple matching log streams. ## [v0.30.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.30.0-victorialogs) diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md index 25bfc88954..2249106bd1 100644 --- a/docs/VictoriaLogs/LogsQL.md +++ b/docs/VictoriaLogs/LogsQL.md @@ -115,30 +115,30 @@ Then the following query removes all the logs from the buggy app, allowing us pa _time:5m error NOT buggy_app ``` -This query uses `NOT` [operator](#logical-filter) for removing log lines from the buggy app. The `NOT` operator is used frequently, so it can be substituted with `!` char -(the `!` char is used instead of `-` char as a shorthand for `NOT` operator because it nicely combines with [`=`](https://docs.victoriametrics.com/victorialogs/logsql/#exact-filter) +This query uses `NOT` [operator](#logical-filter) for removing log lines from the buggy app. The `NOT` operator is used frequently, so it can be substituted with `-` or `!` char +(the `!` must be used instead of `-` in front of [`=`](https://docs.victoriametrics.com/victorialogs/logsql/#exact-filter) and [`~`](https://docs.victoriametrics.com/victorialogs/logsql/#regexp-filter) filters like `!=` and `!~`). The following query is equivalent to the previous one: ```logsql -_time:5m error !buggy_app +_time:5m error -buggy_app ``` Suppose another buggy app starts pushing invalid error logs to VictoriaLogs - it adds `foobar` [word](#word) to every emitted log line. -No problems - just add `!foobar` to the query in order to remove these buggy logs: +No problems - just add `-foobar` to the query in order to remove these buggy logs: ```logsql -_time:5m error !buggy_app !foobar +_time:5m error -buggy_app -foobar ``` This query can be rewritten to more clear query with the `OR` [operator](#logical-filter) inside parentheses: ```logsql -_time:5m error !(buggy_app OR foobar) +_time:5m error -(buggy_app OR foobar) ``` The parentheses are **required** here, since otherwise the query won't return the expected results. -The query `error !buggy_app OR foobar` is interpreted as `(error AND NOT buggy_app) OR foobar` according to [priorities for AND, OR and NOT operator](#logical-filters). +The query `error -buggy_app OR foobar` is interpreted as `(error AND NOT buggy_app) OR foobar` according to [priorities for AND, OR and NOT operator](#logical-filters). This query returns logs with `foobar` [word](#word), even if do not contain `error` word or contain `buggy_app` word. So it is recommended wrapping the needed query parts into explicit parentheses if you are unsure in priority rules. As an additional bonus, explicit parentheses make queries easier to read and maintain. @@ -148,26 +148,26 @@ If this word is stored in other [field](https://docs.victoriametrics.com/victori in front of the `error` word: ```logsql -_time:5m log.level:error !(buggy_app OR foobar) +_time:5m log.level:error -(buggy_app OR foobar) ``` The field name can be wrapped into quotes if it contains special chars or keywords, which may clash with LogsQL syntax. Any [word](#word) also can be wrapped into quotes. So the following query is equivalent to the previous one: ```logsql -"_time":"5m" "log.level":"error" !("buggy_app" OR "foobar") +"_time":"5m" "log.level":"error" -("buggy_app" OR "foobar") ``` What if the application identifier - such as `buggy_app` and `foobar` - is stored in the `app` field? Correct - just add `app:` prefix in front of `buggy_app` and `foobar`: ```logsql -_time:5m log.level:error !(app:buggy_app OR app:foobar) +_time:5m log.level:error -(app:buggy_app OR app:foobar) ``` The query can be simplified by moving the `app:` prefix outside the parentheses: ```logsql -_time:5m log.level:error !app:(buggy_app OR foobar) +_time:5m log.level:error -app:(buggy_app OR foobar) ``` The `app` field uniquely identifies the application instance if a single instance runs per each unique `app`. @@ -1239,8 +1239,11 @@ Simpler LogsQL [filters](#filters) can be combined into more complex filters wit - `NOT q` - returns all the log entries except of those which match `q`. For example, `NOT info` returns all the [log messages](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field), - which do not contain `info` [word](#word). The `NOT` operation is frequently used in LogsQL queries, so it is allowed substituting `NOT` with `!` in queries. - For example, `!info` is equivalent to `NOT info`. + which do not contain `info` [word](#word). The `NOT` operation is frequently used in LogsQL queries, so it is allowed substituting `NOT` with `-` and `!` in queries. + For example, `-info` and `!info` are equivalent to `NOT info`. + The `!` must be used instead of `-` in front of [`=`](https://docs.victoriametrics.com/victorialogs/logsql/#exact-filter) + and [`~`](https://docs.victoriametrics.com/victorialogs/logsql/#regexp-filter) filters like `!=` and `!~`. + The `NOT` operation has the highest priority, `AND` has the middle priority and `OR` has the lowest priority. The priority order can be changed with parentheses. For example, `NOT info OR debug` is interpreted as `(NOT info) OR debug`, diff --git a/docs/VictoriaLogs/logsql-examples.md b/docs/VictoriaLogs/logsql-examples.md index ab4bf7f7d9..bd99d637ae 100644 --- a/docs/VictoriaLogs/logsql-examples.md +++ b/docs/VictoriaLogs/logsql-examples.md @@ -58,7 +58,7 @@ to the query. For example, the following query selects logs with `error` [word]( which do not contain `kubernetes` [word](https://docs.victoriametrics.com/victorialogs/logsql/#word), over the last hour: ```logsql -error !kubernetes _time:1h +error -kubernetes _time:1h ``` The logs are returned in arbitrary order because of performance reasons. Add [`sort` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#sort-pipe) @@ -86,14 +86,14 @@ Use [`NOT` logical filter](https://docs.victoriametrics.com/victorialogs/logsql/ without the `INFO` [word](https://docs.victoriametrics.com/victorialogs/logsql/#word) in the [log message](https://docs.victoriametrics.com/victorialogs/keyconcepts/#message-field): ```logsql -!INFO +-INFO ``` If the number of returned logs is too big, then add [`_time` filter](https://docs.victoriametrics.com/victorialogs/logsql/#time-filter) for limiting the time range for the selected logs. For example, the following query returns matching logs over the last hour: ```logsql -!INFO _time:1h +-INFO _time:1h ``` If the number of returned logs is still too big, then consider adding more specific [filters](https://docs.victoriametrics.com/victorialogs/logsql/#filters) @@ -101,7 +101,7 @@ to the query. For example, the following query selects logs without `INFO` [word which contain `error` [word](https://docs.victoriametrics.com/victorialogs/logsql/#word), over the last hour: ```logsql -!INFO error _time:1h +-INFO error _time:1h ``` The logs are returned in arbitrary order because of performance reasons. Add [`sort` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#sort-pipe) @@ -109,7 +109,7 @@ for sorting logs by the needed [fields](https://docs.victoriametrics.com/victori sorts the selected logs by [`_time` field](https://docs.victoriametrics.com/victorialogs/keyconcepts/#time-field): ```logsql -!INFO _time:1h | sort by (_time) +-INFO _time:1h | sort by (_time) ``` See also: @@ -191,7 +191,7 @@ to the query. For example, the following query selects logs without `error`, `ER which do not contain `kubernetes` [word](https://docs.victoriametrics.com/victorialogs/logsql/#word), over the last hour: ```logsql -(error or ERROR or Error) !kubernetes _time:1h +(error or ERROR or Error) -kubernetes _time:1h ``` The logs are returned in arbitrary order because of performance reasons. Add [`sort` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#sort-pipe) diff --git a/lib/logstorage/filter_not.go b/lib/logstorage/filter_not.go index 8b39415cab..936527ae75 100644 --- a/lib/logstorage/filter_not.go +++ b/lib/logstorage/filter_not.go @@ -11,9 +11,10 @@ func (fn *filterNot) String() string { s := fn.f.String() switch fn.f.(type) { case *filterAnd, *filterOr: - s = "(" + s + ")" + return "!(" + s + ")" + default: + return "!" + s } - return "!" + s } func (fn *filterNot) updateNeededFields(neededFields fieldsSet) { diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go index 3f0264cc53..2ec250030f 100644 --- a/lib/logstorage/parser.go +++ b/lib/logstorage/parser.go @@ -856,7 +856,7 @@ func parseGenericFilter(lex *lexer, fieldName string) (filter, error) { return parseFilterTilda(lex, fieldName) case lex.isKeyword("!~"): return parseFilterNotTilda(lex, fieldName) - case lex.isKeyword("not", "!"): + case lex.isKeyword("not", "!", "-"): return parseFilterNot(lex, fieldName) case lex.isKeyword("exact"): return parseFilterExact(lex, fieldName) @@ -2149,7 +2149,7 @@ func needQuoteToken(s string) bool { return true } for _, r := range s { - if !isTokenRune(r) && r != '.' && r != '-' { + if !isTokenRune(r) && r != '.' { return true } } diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go index cba1d0834b..84093adb7d 100644 --- a/lib/logstorage/parser_test.go +++ b/lib/logstorage/parser_test.go @@ -638,7 +638,9 @@ func TestParseQuerySuccess(t *testing.T) { f(`"":foo`, "foo") f(`"" bar`, `"" bar`) f(`!''`, `!""`) + f(`-''`, `!""`) f(`foo:""`, `foo:""`) + f(`-foo:""`, `!foo:""`) f(`!foo:""`, `!foo:""`) f(`not foo:""`, `!foo:""`) f(`not(foo)`, `!foo`) @@ -648,6 +650,8 @@ func TestParseQuerySuccess(t *testing.T) { f("_msg:foo", "foo") f("'foo:bar'", `"foo:bar"`) f("'!foo'", `"!foo"`) + f("'-foo'", `"-foo"`) + f(`'{a="b"}'`, `"{a=\"b\"}"`) f("foo 'and' and bar", `foo "and" bar`) f("foo bar", "foo bar") f("foo and bar", "foo bar") @@ -656,10 +660,13 @@ func TestParseQuerySuccess(t *testing.T) { f("foo OR bar", "foo or bar") f("not foo", "!foo") f("! foo", "!foo") + f("- foo", "!foo") f("not !`foo bar`", `"foo bar"`) + f("not -`foo bar`", `"foo bar"`) f("foo or bar and not baz", "foo or bar !baz") f("'foo bar' !baz", `"foo bar" !baz`) f("foo:!bar", `!foo:bar`) + f("foo:-bar", `!foo:bar`) f(`foo and bar and baz or x or y or z and zz`, `foo bar baz or x or y or z zz`) f(`foo and bar and (baz or x or y or z) and zz`, `foo bar (baz or x or y or z) zz`) f(`(foo or bar or baz) and x and y and (z or zz)`, `(foo or bar or baz) x y (z or zz)`) @@ -778,50 +785,50 @@ func TestParseQuerySuccess(t *testing.T) { // reserved functions f("exact", `"exact"`) f("exact:a", `"exact":a`) - f("exact-foo", `exact-foo`) + f("exact-foo", `"exact-foo"`) f("a:exact", `a:"exact"`) - f("a:exact-foo", `a:exact-foo`) - f("exact-foo:b", `exact-foo:b`) + f("a:exact-foo", `a:"exact-foo"`) + f("exact-foo:b", `"exact-foo":b`) f("i", `"i"`) - f("i-foo", `i-foo`) - f("a:i-foo", `a:i-foo`) - f("i-foo:b", `i-foo:b`) + f("i-foo", `"i-foo"`) + f("a:i-foo", `a:"i-foo"`) + f("i-foo:b", `"i-foo":b`) f("in", `"in"`) f("in:a", `"in":a`) - f("in-foo", `in-foo`) + f("in-foo", `"in-foo"`) f("a:in", `a:"in"`) - f("a:in-foo", `a:in-foo`) - f("in-foo:b", `in-foo:b`) + f("a:in-foo", `a:"in-foo"`) + f("in-foo:b", `"in-foo":b`) f("ipv4_range", `"ipv4_range"`) f("ipv4_range:a", `"ipv4_range":a`) - f("ipv4_range-foo", `ipv4_range-foo`) + f("ipv4_range-foo", `"ipv4_range-foo"`) f("a:ipv4_range", `a:"ipv4_range"`) - f("a:ipv4_range-foo", `a:ipv4_range-foo`) - f("ipv4_range-foo:b", `ipv4_range-foo:b`) + f("a:ipv4_range-foo", `a:"ipv4_range-foo"`) + f("ipv4_range-foo:b", `"ipv4_range-foo":b`) f("len_range", `"len_range"`) f("len_range:a", `"len_range":a`) - f("len_range-foo", `len_range-foo`) + f("len_range-foo", `"len_range-foo"`) f("a:len_range", `a:"len_range"`) - f("a:len_range-foo", `a:len_range-foo`) - f("len_range-foo:b", `len_range-foo:b`) + f("a:len_range-foo", `a:"len_range-foo"`) + f("len_range-foo:b", `"len_range-foo":b`) f("range", `"range"`) f("range:a", `"range":a`) - f("range-foo", `range-foo`) + f("range-foo", `"range-foo"`) f("a:range", `a:"range"`) - f("a:range-foo", `a:range-foo`) - f("range-foo:b", `range-foo:b`) + f("a:range-foo", `a:"range-foo"`) + f("range-foo:b", `"range-foo":b`) f("re", `"re"`) - f("re-bar", `re-bar`) - f("a:re-bar", `a:re-bar`) - f("re-bar:a", `re-bar:a`) + f("re-bar", `"re-bar"`) + f("a:re-bar", `a:"re-bar"`) + f("re-bar:a", `"re-bar":a`) f("seq", `"seq"`) - f("seq-a", `seq-a`) - f("x:seq-a", `x:seq-a`) - f("seq-a:x", `seq-a:x`) + f("seq-a", `"seq-a"`) + f("x:seq-a", `x:"seq-a"`) + f("seq-a:x", `"seq-a":x`) f("string_range", `"string_range"`) - f("string_range-a", `string_range-a`) - f("x:string_range-a", `x:string_range-a`) - f("string_range-a:x", `string_range-a:x`) + f("string_range-a", `"string_range-a"`) + f("x:string_range-a", `x:"string_range-a"`) + f("string_range-a:x", `"string_range-a":x`) // exact filter f("exact(foo)", `=foo`) @@ -932,11 +939,11 @@ func TestParseQuerySuccess(t *testing.T) { f("1.2.3.4 or ip:5.6.7.9", "1.2.3.4 or ip:5.6.7.9") // '-' and '.' chars in field name and search phrase - f("trace-id.foo.bar:baz", `trace-id.foo.bar:baz`) - f(`custom-Time:2024-01-02T03:04:05+08:00 fooBar OR !baz:xxx`, `custom-Time:"2024-01-02T03:04:05+08:00" fooBar or !baz:xxx`) + f("trace-id.foo.bar:baz", `"trace-id.foo.bar":baz`) + f(`custom-Time:2024-01-02T03:04:05+08:00 fooBar OR !baz:xxx`, `"custom-Time":"2024-01-02T03:04:05+08:00" fooBar or !baz:xxx`) f("foo-bar+baz*", `"foo-bar+baz"*`) - f("foo- bar", `foo- bar`) - f("foo -bar", `foo -bar`) + f("foo- bar", `"foo-" bar`) + f("foo -bar", `foo !bar`) f("foo!bar", `foo !bar`) f("foo:aa!bb:cc", `foo:aa !bb:cc`) f(`foo:bar:baz`, `foo:"bar:baz"`) From 8657d03433154f2805be41048dba4caf13c64f8f Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Fri, 27 Sep 2024 13:19:46 +0200 Subject: [PATCH 127/128] vmui/logs: improve graph usability (#7025) ### Describe Your Changes - Show the time range in the tooltip when hovering over staircase graphs. - Use bolder lines for staircase graphs. - Increase the number of steps on the staircase graph to 100. - Reduce the maximum width of the tooltip to 1/3 of the screen. - Insert only the label name under the cursor into the query input field when `Ctrl`-clicking the line legend. See [this comment](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6545#issuecomment-2336805237). ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Co-authored-by: Aliaksandr Valialkin --- .../BarHitsLegend/BarHitsLegend.tsx | 35 ++++++++++++++----- .../BarHitsChart/BarHitsLegend/style.scss | 31 ++++++++++++++-- .../BarHitsTooltip/BarHitsTooltip.tsx | 6 +++- .../BarHitsChart/hooks/useBarHitsOptions.ts | 6 ++-- .../components/Chart/ChartTooltip/style.scss | 1 + app/vmui/packages/vmui/src/constants/logs.ts | 2 +- .../pages/ExploreLogs/GroupLogs/GroupLogs.tsx | 7 ++-- app/vmui/packages/vmui/src/utils/logs.ts | 4 +++ docs/VictoriaLogs/CHANGELOG.md | 2 ++ 9 files changed, 73 insertions(+), 21 deletions(-) create mode 100644 app/vmui/packages/vmui/src/utils/logs.ts diff --git a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/BarHitsLegend.tsx b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/BarHitsLegend.tsx index e4d82cc985..238d8a3a88 100644 --- a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/BarHitsLegend.tsx +++ b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/BarHitsLegend.tsx @@ -6,6 +6,7 @@ import classNames from "classnames"; import { MouseEvent } from "react"; import { isMacOs } from "../../../../utils/detect-device"; import Tooltip from "../../../Main/Tooltip/Tooltip"; +import { getStreamPairs } from "../../../../utils/logs"; interface Props { uPlotInst: uPlot; @@ -14,20 +15,26 @@ interface Props { const BarHitsLegend: FC = ({ uPlotInst, onApplyFilter }) => { const [series, setSeries] = useState([]); + const [pairs, setPairs] = useState([]); const updateSeries = useCallback(() => { const series = uPlotInst.series.filter(s => s.scale !== "x"); setSeries(series); + setPairs(series.map(s => getStreamPairs(s.label || ""))); }, [uPlotInst]); - const handleClick = (target: Series) => (e: MouseEvent) => { + const handleClickByValue = (value: string) => (e: MouseEvent) => { const metaKey = e.metaKey || e.ctrlKey; - if (!metaKey) { - target.show = !target.show; - } else { - onApplyFilter(target.label || ""); - } + if (!metaKey) return; + onApplyFilter(`{${value}}` || ""); + updateSeries(); + uPlotInst.redraw(); + }; + const handleClickByStream = (target: Series) => (e: MouseEvent) => { + const metaKey = e.metaKey || e.ctrlKey; + if (metaKey) return; + target.show = !target.show; updateSeries(); uPlotInst.redraw(); }; @@ -36,7 +43,7 @@ const BarHitsLegend: FC = ({ uPlotInst, onApplyFilter }) => { return (
    - {series.map(s => ( + {series.map((s, i) => ( = ({ uPlotInst, onApplyFilter }) => { "vm-bar-hits-legend-item": true, "vm-bar-hits-legend-item_hide": !s.show, })} - onClick={handleClick(s)} + onClick={handleClickByStream(s)} >
    string)?.()}` }} /> -
    {s.label}
    +
    + {pairs[i].map(value => ( + + {value} + + ))} +
    ))} diff --git a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/style.scss b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/style.scss index 77b912c5e5..def94e5370 100644 --- a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/style.scss +++ b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsLegend/style.scss @@ -3,16 +3,16 @@ .vm-bar-hits-legend { display: flex; flex-wrap: wrap; - gap: 0; + gap: $padding-small; padding: 0 $padding-small $padding-small; &-item { display: grid; grid-template-columns: auto 1fr; align-items: center; - gap: 4px; + gap: $padding-small; font-size: 12px; - padding: $padding-small; + padding: 0 $padding-small; border-radius: $border-radius-small; cursor: pointer; transition: 0.2s; @@ -31,5 +31,30 @@ height: 14px; border: $color-background-block; } + + &-pairs { + display: flex; + gap: $padding-small; + + &__value { + padding: $padding-small 0; + + &:hover { + text-decoration: underline; + } + + &:after { + content: ","; + } + + &:last-child:after { + content: ""; + } + } + } + } + + &-info { + list-style-position: inside; } } diff --git a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsTooltip/BarHitsTooltip.tsx b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsTooltip/BarHitsTooltip.tsx index 7a9ce4269b..bf985d30a5 100644 --- a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsTooltip/BarHitsTooltip.tsx +++ b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/BarHitsTooltip/BarHitsTooltip.tsx @@ -12,12 +12,16 @@ interface Props { focusDataIdx: number; } +const timeFormat = (ts: number) => dayjs(ts * 1000).tz().format(DATE_TIME_FORMAT); + const BarHitsTooltip: FC = ({ data, focusDataIdx, uPlotInst }) => { const tooltipRef = useRef(null); const tooltipData = useMemo(() => { const series = uPlotInst?.series || []; const [time, ...values] = data.map((d) => d[focusDataIdx] || 0); + const step = (data[0][1] - data[0][0]); + const timeNext = time + step; const tooltipItems = values.map((value, i) => { const targetSeries = series[i + 1]; @@ -41,7 +45,7 @@ const BarHitsTooltip: FC = ({ data, focusDataIdx, uPlotInst }) => { point, values: tooltipItems, total: tooltipItems.reduce((acc, item) => acc + item.value, 0), - timestamp: dayjs(time * 1000).tz().format(DATE_TIME_FORMAT), + timestamp: `${timeFormat(time)} - ${timeFormat(timeNext)}`, }; }, [focusDataIdx, uPlotInst, data]); diff --git a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/hooks/useBarHitsOptions.ts b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/hooks/useBarHitsOptions.ts index ab699db3e8..68823c2abe 100644 --- a/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/hooks/useBarHitsOptions.ts +++ b/app/vmui/packages/vmui/src/components/Chart/BarHitsChart/hooks/useBarHitsOptions.ts @@ -19,8 +19,8 @@ const seriesColors = [ ]; const strokeWidth = { - [GRAPH_STYLES.BAR]: 0.8, - [GRAPH_STYLES.LINE_STEPPED]: 1.2, + [GRAPH_STYLES.BAR]: 1, + [GRAPH_STYLES.LINE_STEPPED]: 2, [GRAPH_STYLES.LINE]: 1.2, [GRAPH_STYLES.POINTS]: 0, }; @@ -82,7 +82,7 @@ const useBarHitsOptions = ({ cursor: { points: { width: (u, seriesIdx, size) => size / 4, - size: (u, seriesIdx) => (u.series?.[seriesIdx]?.points?.size || 1) * 2.5, + size: (u, seriesIdx) => (u.series?.[seriesIdx]?.points?.size || 1) * 1.5, stroke: (u, seriesIdx) => `${series?.[seriesIdx]?.stroke || "#ffffff"}`, fill: () => "#ffffff", }, diff --git a/app/vmui/packages/vmui/src/components/Chart/ChartTooltip/style.scss b/app/vmui/packages/vmui/src/components/Chart/ChartTooltip/style.scss index 02d533aa07..877d37b80d 100644 --- a/app/vmui/packages/vmui/src/components/Chart/ChartTooltip/style.scss +++ b/app/vmui/packages/vmui/src/components/Chart/ChartTooltip/style.scss @@ -29,6 +29,7 @@ $chart-tooltip-y: -1 * ($padding-global + $chart-tooltip-half-icon); white-space: pre-wrap; word-break: break-all; width: auto; + max-width: calc(100vw/3); } &_sticky { diff --git a/app/vmui/packages/vmui/src/constants/logs.ts b/app/vmui/packages/vmui/src/constants/logs.ts index 4ad19c3e19..24804e6ef1 100644 --- a/app/vmui/packages/vmui/src/constants/logs.ts +++ b/app/vmui/packages/vmui/src/constants/logs.ts @@ -1,2 +1,2 @@ export const LOGS_ENTRIES_LIMIT = 50; -export const LOGS_BARS_VIEW = 20; +export const LOGS_BARS_VIEW = 100; diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx index c4a1c64a7c..a73a5bbff5 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx @@ -16,6 +16,7 @@ import TextField from "../../../components/Main/TextField/TextField"; import useBoolean from "../../../hooks/useBoolean"; import useStateSearchParams from "../../../hooks/useStateSearchParams"; import { useSearchParams } from "react-router-dom"; +import { getStreamPairs } from "../../../utils/logs"; const WITHOUT_GROUPING = "No Grouping"; @@ -62,12 +63,10 @@ const GroupLogs: FC = ({ logs, settingsRef }) => { const groupData = useMemo(() => { return groupByMultipleKeys(logs, [groupBy]).map((item) => { const streamValue = item.values[0]?.[groupBy] || ""; - const pairs = /^{.+}$/.test(streamValue) - ? streamValue.slice(1, -1).match(/(\\.|[^,])+/g) || [streamValue] - : [streamValue]; + const pairs = getStreamPairs(streamValue); return { ...item, - pairs: pairs.filter(Boolean), + pairs, }; }); }, [logs, groupBy]); diff --git a/app/vmui/packages/vmui/src/utils/logs.ts b/app/vmui/packages/vmui/src/utils/logs.ts new file mode 100644 index 0000000000..13e3d246c9 --- /dev/null +++ b/app/vmui/packages/vmui/src/utils/logs.ts @@ -0,0 +1,4 @@ +export const getStreamPairs = (value: string): string[] => { + const pairs = /^{.+}$/.test(value) ? value.slice(1, -1).split(",") : [value]; + return pairs.filter(Boolean); +}; diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index be2fec41a6..6feb45f2af 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -15,6 +15,8 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): improved readability of staircase graphs and tooltip usability. See [this comment](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6545#issuecomment-2336805237). +* FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): simplify query input by adding only the label name when `ctrl`+clicking the line legend. See [this comment](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6545#issuecomment-2336805237). * FEATURE: [web UI](https://docs.victoriametrics.com/victorialogs/querying/#web-ui): keep selected columns in table view on page reloads. Before, selected columns were reset on each update. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7016). * FEATURE: allow skipping `_stream:` prefix in [stream filters](https://docs.victoriametrics.com/victorialogs/logsql/#stream-filter). This simplifies writing queries with stream filters. Now `{foo="bar"}` is the recommended format for stream filters over the `_stream:{foo="bar"}` format. * FEATURE: allow using `-` instead of `!` as `NOT` operator shorthand in [logical filters](https://docs.victoriametrics.com/victorialogs/logsql/#logical-filter). For example, `-info -warn` query is equivalent to `!info !warn`. This simplifies transition from other query languages with full-text search support, which usually use `-` as `NOT` operator. From 25a9802ca4d3f9bc5b65343544e34b9987a46208 Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Fri, 27 Sep 2024 13:22:22 +0200 Subject: [PATCH 128/128] vmui: add link to vmalert (#7088) ### Describe Your Changes Add link to VMalert when proxy is enabled. The link is displayed when the `-vmalert.proxyURL` flag is present. #5924 ![image](https://github.com/user-attachments/assets/c45ca884-8912-4bd9-a867-df5919f278a1) ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Co-authored-by: Aliaksandr Valialkin --- .../packages/vmui/src/constants/navigation.ts | 6 +++ .../packages/vmui/src/hooks/useFetchFlags.ts | 44 ++++++++++++++++++ .../layouts/Header/HeaderNav/HeaderNav.tsx | 14 +++++- .../src/layouts/Header/HeaderNav/NavItem.tsx | 45 +++++++++++++------ .../layouts/Header/HeaderNav/NavSubItem.tsx | 4 +- .../src/layouts/MainLayout/MainLayout.tsx | 2 + .../packages/vmui/src/state/common/reducer.ts | 10 ++++- app/vmui/packages/vmui/src/utils/tenants.ts | 4 ++ docs/changelog/CHANGELOG.md | 1 + 9 files changed, 113 insertions(+), 17 deletions(-) create mode 100644 app/vmui/packages/vmui/src/hooks/useFetchFlags.ts diff --git a/app/vmui/packages/vmui/src/constants/navigation.ts b/app/vmui/packages/vmui/src/constants/navigation.ts index d198636748..0df6c64d72 100644 --- a/app/vmui/packages/vmui/src/constants/navigation.ts +++ b/app/vmui/packages/vmui/src/constants/navigation.ts @@ -1,10 +1,16 @@ import router, { routerOptions } from "../router"; +export enum NavigationItemType { + internalLink, + externalLink, +} + export interface NavigationItem { label?: string, value?: string, hide?: boolean submenu?: NavigationItem[], + type?: NavigationItemType, } const explore = { diff --git a/app/vmui/packages/vmui/src/hooks/useFetchFlags.ts b/app/vmui/packages/vmui/src/hooks/useFetchFlags.ts new file mode 100644 index 0000000000..7c695323af --- /dev/null +++ b/app/vmui/packages/vmui/src/hooks/useFetchFlags.ts @@ -0,0 +1,44 @@ +import { useAppDispatch, useAppState } from "../state/common/StateContext"; +import { useEffect, useState } from "preact/compat"; +import { ErrorTypes } from "../types"; +import { getUrlWithoutTenant } from "../utils/tenants"; + +const useFetchFlags = () => { + const { serverUrl } = useAppState(); + const dispatch = useAppDispatch(); + + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(""); + + useEffect(() => { + const fetchFlags = async () => { + if (!serverUrl || process.env.REACT_APP_TYPE) return; + setError(""); + setIsLoading(true); + + try { + const url = getUrlWithoutTenant(serverUrl); + const response = await fetch(`${url}/flags`); + const data = await response.text(); + const flags = data.split("\n").filter(flag => flag.trim() !== "") + .reduce((acc, flag) => { + const [keyRaw, valueRaw] = flag.split("="); + const key = keyRaw.trim().replace(/^-/, ""); + acc[key.trim()] = valueRaw ? valueRaw.trim().replace(/^"(.*)"$/, "$1") : null; + return acc; + }, {} as Record); + dispatch({ type: "SET_FLAGS", payload: flags }); + } catch (e) { + setIsLoading(false); + if (e instanceof Error) setError(`${e.name}: ${e.message}`); + } + }; + + fetchFlags(); + }, [serverUrl]); + + return { isLoading, error }; +}; + +export default useFetchFlags; + diff --git a/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/HeaderNav.tsx b/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/HeaderNav.tsx index 46bebc0187..88c8bc19df 100644 --- a/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/HeaderNav.tsx +++ b/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/HeaderNav.tsx @@ -8,8 +8,9 @@ import "./style.scss"; import NavItem from "./NavItem"; import NavSubItem from "./NavSubItem"; import classNames from "classnames"; -import { anomalyNavigation, defaultNavigation, logsNavigation } from "../../../constants/navigation"; +import { anomalyNavigation, defaultNavigation, logsNavigation, NavigationItemType } from "../../../constants/navigation"; import { AppType } from "../../../types/appType"; +import { useAppState } from "../../../state/common/StateContext"; interface HeaderNavProps { color: string @@ -21,6 +22,7 @@ const HeaderNav: FC = ({ color, background, direction }) => { const appModeEnable = getAppModeEnable(); const { dashboardsSettings } = useDashboardsState(); const { pathname } = useLocation(); + const { serverUrl, flags } = useAppState(); const [activeMenu, setActiveMenu] = useState(pathname); @@ -37,7 +39,14 @@ const HeaderNav: FC = ({ color, background, direction }) => { label: routerOptions[router.dashboards].title, value: router.dashboards, hide: appModeEnable || !dashboardsSettings.length, - } + }, + { + // see more https://docs.victoriametrics.com/cluster-victoriametrics/?highlight=vmalertproxyurl#vmalert + label: "Alerts", + value: `${serverUrl}/vmalert`, + type: NavigationItemType.externalLink, + hide: !Object.keys(flags).includes("vmalert.proxyURL"), + }, ].filter(r => !r.hide)); } }, [appModeEnable, dashboardsSettings]); @@ -74,6 +83,7 @@ const HeaderNav: FC = ({ color, background, direction }) => { value={m.value || ""} label={m.label || ""} color={color} + type={m.type || NavigationItemType.internalLink} /> ) ))} diff --git a/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavItem.tsx b/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavItem.tsx index 193f5ac0ab..83a7e149b7 100644 --- a/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavItem.tsx +++ b/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavItem.tsx @@ -1,30 +1,49 @@ import React, { FC } from "preact/compat"; import { NavLink } from "react-router-dom"; import classNames from "classnames"; +import { NavigationItemType } from "../../../constants/navigation"; interface NavItemProps { activeMenu: string, label: string, value: string, - color?: string + type: NavigationItemType, + color?: string, } const NavItem: FC = ({ activeMenu, label, value, + type, color -}) => ( - m.value === activeMenu) - })} - style={{ color }} - to={value} - > - {label} - -); +}) => { + if (type === NavigationItemType.externalLink) return ( + + {label} + + ); + return ( + m.value === activeMenu) + })} + style={{ color }} + to={value} + > + {label} + + ); +}; export default NavItem; diff --git a/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavSubItem.tsx b/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavSubItem.tsx index aab22c0c8c..16b2fb3e68 100644 --- a/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavSubItem.tsx +++ b/app/vmui/packages/vmui/src/layouts/Header/HeaderNav/NavSubItem.tsx @@ -6,7 +6,7 @@ import Popper from "../../../components/Main/Popper/Popper"; import NavItem from "./NavItem"; import { useEffect } from "react"; import useBoolean from "../../../hooks/useBoolean"; -import { NavigationItem } from "../../../constants/navigation"; +import { NavigationItem, NavigationItemType } from "../../../constants/navigation"; interface NavItemProps { activeMenu: string, @@ -64,6 +64,7 @@ const NavSubItem: FC = ({ activeMenu={activeMenu} value={sm.value || ""} label={sm.label || ""} + type={sm.type || NavigationItemType.internalLink} /> ))} @@ -106,6 +107,7 @@ const NavSubItem: FC = ({ value={sm.value || ""} label={sm.label || ""} color={color} + type={sm.type || NavigationItemType.internalLink} /> ))}
    diff --git a/app/vmui/packages/vmui/src/layouts/MainLayout/MainLayout.tsx b/app/vmui/packages/vmui/src/layouts/MainLayout/MainLayout.tsx index 552b0b0726..8ea80e7d60 100644 --- a/app/vmui/packages/vmui/src/layouts/MainLayout/MainLayout.tsx +++ b/app/vmui/packages/vmui/src/layouts/MainLayout/MainLayout.tsx @@ -11,6 +11,7 @@ import { useFetchDashboards } from "../../pages/PredefinedPanels/hooks/useFetchD import useDeviceDetect from "../../hooks/useDeviceDetect"; import ControlsMainLayout from "./ControlsMainLayout"; import useFetchDefaultTimezone from "../../hooks/useFetchDefaultTimezone"; +import useFetchFlags from "../../hooks/useFetchFlags"; const MainLayout: FC = () => { const appModeEnable = getAppModeEnable(); @@ -20,6 +21,7 @@ const MainLayout: FC = () => { useFetchDashboards(); useFetchDefaultTimezone(); + useFetchFlags(); const setDocumentTitle = () => { const defaultTitle = "vmui"; diff --git a/app/vmui/packages/vmui/src/state/common/reducer.ts b/app/vmui/packages/vmui/src/state/common/reducer.ts index f2347eaca2..5c5986fb30 100644 --- a/app/vmui/packages/vmui/src/state/common/reducer.ts +++ b/app/vmui/packages/vmui/src/state/common/reducer.ts @@ -10,12 +10,14 @@ export interface AppState { tenantId: string; theme: Theme; isDarkTheme: boolean | null; + flags: Record; } export type Action = | { type: "SET_SERVER", payload: string } | { type: "SET_THEME", payload: Theme } | { type: "SET_TENANT_ID", payload: string } + | { type: "SET_FLAGS", payload: Record } | { type: "SET_DARK_THEME" } const tenantId = getQueryStringValue("g0.tenantID", "") as string; @@ -24,7 +26,8 @@ export const initialState: AppState = { serverUrl: removeTrailingSlash(getDefaultServer(tenantId)), tenantId, theme: (getFromStorage("THEME") || Theme.system) as Theme, - isDarkTheme: null + isDarkTheme: null, + flags: {}, }; export function reducer(state: AppState, action: Action): AppState { @@ -50,6 +53,11 @@ export function reducer(state: AppState, action: Action): AppState { ...state, isDarkTheme: isDarkTheme(state.theme) }; + case "SET_FLAGS": + return { + ...state, + flags: action.payload + }; default: throw new Error(); } diff --git a/app/vmui/packages/vmui/src/utils/tenants.ts b/app/vmui/packages/vmui/src/utils/tenants.ts index 89133d1655..94662068ba 100644 --- a/app/vmui/packages/vmui/src/utils/tenants.ts +++ b/app/vmui/packages/vmui/src/utils/tenants.ts @@ -7,3 +7,7 @@ export const replaceTenantId = (serverUrl: string, tenantId: string) => { export const getTenantIdFromUrl = (url: string): string => { return url.match(regexp)?.[2] || ""; }; + +export const getUrlWithoutTenant = (url: string): string => { + return url.replace(regexp, ""); +}; diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 667bbe1952..a47759ea83 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -26,6 +26,7 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/). * FEATURE: [vmgateway](https://docs.victoriametrics.com/vmgateway/): support parsing `vm_access` claims in string format. This is useful for cases when identity provider does not support mapping claims to JSON format. * FEATURE: [Single-node VictoriaMetrics](https://docs.victoriametrics.com/) and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/cluster-victoriametrics/): add new metrics for data ingestion: `vm_rows_received_by_storage_total`, `vm_rows_ignored_total{reason="nan_value"}`, `vm_rows_ignored_total{reason="invalid_raw_metric_name"}`, `vm_rows_ignored_total{reason="hourly_limit_exceeded"}`, `vm_rows_ignored_total{reason="daily_limit_exceeded"}`. See this [PR](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6663) for details. * FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): change request method for `/query_range` and `/query` calls from `GET` to `POST`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6288). +* FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): add link to vmalert when proxy is enabled. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5924). * FEATURE: [vmui](https://docs.victoriametrics.com/#vmui): keep selected columns in table view on page reloads. Before, selected columns were reset on each update. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7016). * FEATURE: [dashboards](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/dashboards) for VM single-node, cluster, vmalert, vmagent, VictoriaLogs: add `Go scheduling latency` panel to show the 99th quantile of Go goroutines scheduling. This panel should help identifying insufficient CPU resources for the service. It is especially useful if CPU gets throttled, which now should be visible on this panel. * FEATURE: [alerts](https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/deployment/docker/alerts-health.yml): add alerting rule to track the Go scheduling latency for goroutines. It should notify users if VM component doesn't have enough CPU to run or gets throttled.

    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 z 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.r(n),t.d(n,{CLSThresholds:()=>I,FCPThresholds:()=>S,FIDThresholds:()=>N,INPThresholds:()=>G,LCPThresholds:()=>X,TTFBThresholds:()=>$,getCLS:()=>F,getFCP:()=>P,getFID:()=>R,getINP:()=>W,getLCP:()=>Z,getTTFB:()=>ne,onCLS:()=>F,onFCP:()=>P,onFID:()=>R,onINP:()=>W,onLCP:()=>Z,onTTFB:()=>ne});var r,i,o,a,c,u=-1,s=function(e){addEventListener("pageshow",(function(n){n.persisted&&(u=n.timeStamp,e(n))}),!0)},f=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},d=function(){var e=f();return e&&e.activationStart||0},l=function(e,n){var t=f(),r="navigate";return u>=0?r="back-forward-cache":t&&(document.prerendering||d()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-"))),{name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},p=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},v=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n))}},m=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},h=function(e){var n=function(n){"pagehide"!==n.type&&"hidden"!==document.visibilityState||e(n)};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},g=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},T=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},C=function(e){"hidden"===document.visibilityState&&T>-1&&(T="visibilitychange"===e.type?e.timeStamp:0,L())},E=function(){addEventListener("visibilitychange",C,!0),addEventListener("prerenderingchange",C,!0)},L=function(){removeEventListener("visibilitychange",C,!0),removeEventListener("prerenderingchange",C,!0)},w=function(){return T<0&&(T=y(),E(),s((function(){setTimeout((function(){T=y(),E()}),0)}))),{get firstHiddenTime(){return T}}},b=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},S=[1800,3e3],P=function(e,n){n=n||{},b((function(){var t,r=w(),i=l("FCP"),o=p("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTimer.value&&(r.value=i,r.entries=o,t())},c=p("layout-shift",a);c&&(t=v(e,r,I,n.reportAllChanges),h((function(){a(c.takeRecords()),t(!0)})),s((function(){i=0,r=l("CLS",0),t=v(e,r,I,n.reportAllChanges),m((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},k=new Date,D=function(e,n){r||(r=n,i=e,o=new Date,x(removeEventListener),M())},M=function(){if(i>=0&&i1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){D(e,n),i()},r=function(){i()},i=function(){removeEventListener("pointerup",t,A),removeEventListener("pointercancel",r,A)};addEventListener("pointerup",t,A),addEventListener("pointercancel",r,A)}(n,e):D(n,e)}},x=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,B,A)}))},N=[100,300],R=function(e,n){n=n||{},b((function(){var t,o=w(),c=l("FID"),u=function(e){e.startTimen.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};U[r.id]=r,Q.push(r)}Q.sort((function(e,n){return n.latency-e.latency})),Q.splice(10).forEach((function(e){delete U[e.id]}))}},W=function(e,n){n=n||{},b((function(){var t;z();var r,i=l("INP"),o=function(e){e.forEach((function(e){e.interactionId&&V(e),"first-input"===e.entryType&&!Q.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&V(e)}));var n,t=(n=Math.min(Q.length-1,Math.floor(K()/50)),Q[n]);t&&t.latency!==i.value&&(i.value=t.latency,i.entries=t.entries,r())},a=p("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=v(e,i,G,n.reportAllChanges),a&&("PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&a.observe({type:"first-input",buffered:!0}),h((function(){o(a.takeRecords()),i.value<0&&K()>0&&(i.value=0,i.entries=[]),r(!0)})),s((function(){Q=[],J=_(),i=l("INP"),r=v(e,i,G,n.reportAllChanges)})))}))},X=[2500,4e3],Y={},Z=function(e,n){n=n||{},b((function(){var t,r=w(),i=l("LCP"),o=function(e){var n=e[e.length-1];n&&n.startTimeperformance.now())return;t.value=Math.max(o-d(),0),t.entries=[i],r(!0),s((function(){t=l("TTFB",0),(r=v(e,t,$,n.reportAllChanges))(!0)}))}}))}}}]); \ No newline at end of file diff --git a/app/vmselect/vmui/static/js/685.f772060c.chunk.js b/app/vmselect/vmui/static/js/685.f772060c.chunk.js new file mode 100644 index 0000000000..b725f304ff --- /dev/null +++ b/app/vmselect/vmui/static/js/685.f772060c.chunk.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvmui=self.webpackChunkvmui||[]).push([[685],{685:(e,n,t)=>{t.r(n),t.d(n,{CLSThresholds:()=>P,FCPThresholds:()=>w,FIDThresholds:()=>ne,INPThresholds:()=>_,LCPThresholds:()=>G,TTFBThresholds:()=>Q,onCLS:()=>A,onFCP:()=>I,onFID:()=>te,onINP:()=>z,onLCP:()=>K,onTTFB:()=>V});var r,i,o,a,c,u=-1,s=function(e){addEventListener("pageshow",(function(n){n.persisted&&(u=n.timeStamp,e(n))}),!0)},f=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart=0?r="back-forward-cache":t&&(document.prerendering||d()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-"))),{name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v4-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},p=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},v=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n))}},m=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},h=function(e){document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&e()}))},g=function(e){var n=!1;return function(){n||(e(),n=!0)}},T=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},E=function(e){"hidden"===document.visibilityState&&T>-1&&(T="visibilitychange"===e.type?e.timeStamp:0,b())},C=function(){addEventListener("visibilitychange",E,!0),addEventListener("prerenderingchange",E,!0)},b=function(){removeEventListener("visibilitychange",E,!0),removeEventListener("prerenderingchange",E,!0)},L=function(){return T<0&&(T=y(),C(),s((function(){setTimeout((function(){T=y(),C()}),0)}))),{get firstHiddenTime(){return T}}},S=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},w=[1800,3e3],I=function(e,n){n=n||{},S((function(){var t,r=L(),i=l("FCP"),o=p("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTimer.value&&(r.value=i,r.entries=o,t())},c=p("layout-shift",a);c&&(t=v(e,r,P,n.reportAllChanges),h((function(){a(c.takeRecords()),t(!0)})),s((function(){i=0,r=l("CLS",0),t=v(e,r,P,n.reportAllChanges),m((function(){return t()}))})),setTimeout(t,0))})))},F=0,k=1/0,M=0,D=function(e){e.forEach((function(e){e.interactionId&&(k=Math.min(k,e.interactionId),M=Math.max(M,e.interactionId),F=M?(M-k)/7+1:0)}))},B=function(){return r?F:performance.interactionCount||0},R=function(){"interactionCount"in performance||r||(r=p("event",D,{type:"event",buffered:!0,durationThreshold:0}))},x=[],H=new Map,N=0,q=[],O=function(e){if(q.forEach((function(n){return n(e)})),e.interactionId||"first-input"===e.entryType){var n=x[x.length-1],t=H.get(e.interactionId);if(t||x.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};H.set(r.id,r),x.push(r)}x.sort((function(e,n){return n.latency-e.latency})),x.length>10&&x.splice(10).forEach((function(e){return H.delete(e.id)}))}}},j=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=g(e),"hidden"===document.visibilityState?e():(t=n(e),h(e)),t},_=[200,500],z=function(e,n){"PerformanceEventTiming"in self&&"interactionId"in PerformanceEventTiming.prototype&&(n=n||{},S((function(){var t;R();var r,i=l("INP"),o=function(e){j((function(){e.forEach(O);var n=function(){var e=Math.min(x.length-1,Math.floor((B()-N)/50));return x[e]}();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r())}))},a=p("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=v(e,i,_,n.reportAllChanges),a&&(a.observe({type:"first-input",buffered:!0}),h((function(){o(a.takeRecords()),r(!0)})),s((function(){N=B(),x.length=0,H.clear(),i=l("INP"),r=v(e,i,_,n.reportAllChanges)})))})))},G=[2500,4e3],J={},K=function(e,n){n=n||{},S((function(){var t,r=L(),i=l("LCP"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime=0&&o1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){Y(e,n),i()},r=function(){i()},i=function(){removeEventListener("pointerup",t,W),removeEventListener("pointercancel",r,W)};addEventListener("pointerup",t,W),addEventListener("pointercancel",r,W)}(n,e):Y(n,e)}},ee=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,$,W)}))},ne=[100,300],te=function(e,n){n=n||{},S((function(){var t,r=L(),a=l("FID"),u=function(e){e.startTime{var e={61:(e,t,n)=>{"use strict";var r=n(375),a=n(629),o=a(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&o(e,".prototype.")>-1?a(n):n}},629:(e,t,n)=>{"use strict";var r=n(989),a=n(375),o=n(259),i=n(277),l=a("%Function.prototype.apply%"),s=a("%Function.prototype.call%"),c=a("%Reflect.apply%",!0)||r.call(s,l),u=n(709),d=a("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new i("a function is required");var t=c(r,s,arguments);return o(t,1+d(0,e.length-(arguments.length-1)),!0)};var h=function(){return c(r,l,arguments)};u?u(e.exports,"apply",{value:h}):e.exports.apply=h},159:function(e){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",a="second",o="minute",i="hour",l="day",s="week",c="month",u="quarter",d="year",h="date",m="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,f=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},g=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},y={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),a=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(a,2,"0")},m:function e(t,n){if(t.date()1)return e(i[0])}else{var l=t.name;b[l]=t,a=l}return!r&&a&&(_=a),a||!r&&_},S=function(e,t){if(k(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new E(n)},C=y;C.l=x,C.i=k,C.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function v(e){this.$L=x(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var g=v.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(C.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(p);if(r){var a=r[2]-1||0,o=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return C},g.isValid=function(){return!(this.$d.toString()===m)},g.isSame=function(e,t){var n=S(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return S(e)=0&&(o[d]=parseInt(u,10))}var h=o[3],m=24===h?0:h,p=o[0]+"-"+o[1]+"-"+o[2]+" "+m+":"+o[4]+":"+o[5]+":000",f=+t;return(a.utc(p).valueOf()-(f-=f%1e3))/6e4},s=r.prototype;s.tz=function(e,t){void 0===e&&(e=o);var n,r=this.utcOffset(),i=this.toDate(),l=i.toLocaleString("en-US",{timeZone:e}),s=Math.round((i-new Date(l))/1e3/60),c=15*-Math.round(i.getTimezoneOffset()/15)-s;if(Number(c)){if(n=a(l,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(c,!0),t){var u=n.utcOffset();n=n.add(r-u,"minute")}}else n=this.utcOffset(0,t);return n.$x.$timezone=e,n},s.offsetName=function(e){var t=this.$x.$timezone||a.tz.guess(),n=i(this.valueOf(),t,{timeZoneName:e}).find((function(e){return"timezonename"===e.type.toLowerCase()}));return n&&n.value};var c=s.startOf;s.startOf=function(e,t){if(!this.$x||!this.$x.$timezone)return c.call(this,e,t);var n=a(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return c.call(n,e,t).tz(this.$x.$timezone,!0)},a.tz=function(e,t,n){var r=n&&t,i=n||t||o,s=l(+a(),i);if("string"!=typeof e)return a(e).tz(i);var c=function(e,t,n){var r=e-60*t*1e3,a=l(r,n);if(t===a)return[r,t];var o=l(r-=60*(a-t)*1e3,n);return a===o?[r,a]:[e-60*Math.min(a,o)*1e3,Math.max(a,o)]}(a.utc(e,r).valueOf(),s,i),u=c[0],d=c[1],h=a(u).utcOffset(d);return h.$x.$timezone=i,h},a.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},a.tz.setDefault=function(e){o=e}}}()},220:function(e){e.exports=function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,a,o){var i=a.prototype;o.utc=function(e){return new a({date:e,utc:!0,args:arguments})},i.utc=function(t){var n=o(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},i.local=function(){return o(this.toDate(),{locale:this.$L,utc:!1})};var l=i.parse;i.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),l.call(this,e)};var s=i.init;i.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else s.call(this)};var c=i.utcOffset;i.utcOffset=function(r,a){var o=this.$utils().u;if(o(r))return this.$u?0:o(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&(r=function(e){void 0===e&&(e="");var r=e.match(t);if(!r)return null;var a=(""+r[0]).match(n)||["-",0,0],o=a[0],i=60*+a[1]+ +a[2];return 0===i?0:"+"===o?i:-i}(r),null===r))return this;var i=Math.abs(r)<=16?60*r:r,l=this;if(a)return l.$offset=i,l.$u=0===r,l;if(0!==r){var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(l=this.local().add(i+s,e)).$offset=i,l.$x.$localOffset=s}else l=this.utc();return l};var u=i.format;i.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,t)},i.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var d=i.toDate;i.toDate=function(e){return"s"===e&&this.$offset?o(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():d.call(this)};var h=i.diff;i.diff=function(e,t,n){if(e&&this.$u===e.$u)return h.call(this,e,t,n);var r=this.local(),a=o(e).local();return h.call(r,a,t,n)}}}()},411:(e,t,n)=>{"use strict";var r=n(709),a=n(430),o=n(277),i=n(553);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new o("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var l=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(r)r(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===l&&d?d.enumerable:!l,value:n,writable:null===s&&d?d.writable:!s});else{if(!u&&(l||s||c))throw new a("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},709:(e,t,n)=>{"use strict";var r=n(375)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(a){r=!1}e.exports=r},123:e=>{"use strict";e.exports=EvalError},953:e=>{"use strict";e.exports=Error},780:e=>{"use strict";e.exports=RangeError},768:e=>{"use strict";e.exports=ReferenceError},430:e=>{"use strict";e.exports=SyntaxError},277:e=>{"use strict";e.exports=TypeError},619:e=>{"use strict";e.exports=URIError},307:e=>{"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r{"use strict";var r=n(307);e.exports=Function.prototype.bind||r},375:(e,t,n)=>{"use strict";var r,a=n(953),o=n(123),i=n(780),l=n(768),s=n(430),c=n(277),u=n(619),d=Function,h=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(t){}},m=Object.getOwnPropertyDescriptor;if(m)try{m({},"")}catch(R){m=null}var p=function(){throw new c},f=m?function(){try{return p}catch(e){try{return m(arguments,"callee").get}catch(t){return p}}}():p,v=n(757)(),g=n(442)(),y=Object.getPrototypeOf||(g?function(e){return e.__proto__}:null),_={},b="undefined"!==typeof Uint8Array&&y?y(Uint8Array):r,w={__proto__:null,"%AggregateError%":"undefined"===typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":v&&y?y([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":_,"%AsyncGenerator%":_,"%AsyncGeneratorFunction%":_,"%AsyncIteratorPrototype%":_,"%Atomics%":"undefined"===typeof Atomics?r:Atomics,"%BigInt%":"undefined"===typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"===typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"===typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"===typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":a,"%eval%":eval,"%EvalError%":o,"%Float32Array%":"undefined"===typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"===typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"===typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":_,"%Int8Array%":"undefined"===typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"===typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"===typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":v&&y?y(y([][Symbol.iterator]())):r,"%JSON%":"object"===typeof JSON?JSON:r,"%Map%":"undefined"===typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&v&&y?y((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?r:Promise,"%Proxy%":"undefined"===typeof Proxy?r:Proxy,"%RangeError%":i,"%ReferenceError%":l,"%Reflect%":"undefined"===typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"===typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&v&&y?y((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":v&&y?y(""[Symbol.iterator]()):r,"%Symbol%":v?Symbol:r,"%SyntaxError%":s,"%ThrowTypeError%":f,"%TypedArray%":b,"%TypeError%":c,"%Uint8Array%":"undefined"===typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"===typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"===typeof Uint32Array?r:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"===typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"===typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"===typeof WeakSet?r:WeakSet};if(y)try{null.error}catch(R){var k=y(y(R));w["%Error.prototype%"]=k}var x=function e(t){var n;if("%AsyncFunction%"===t)n=h("async function () {}");else if("%GeneratorFunction%"===t)n=h("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=h("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var a=e("%AsyncGenerator%");a&&y&&(n=y(a.prototype))}return w[t]=n,n},S={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},C=n(989),E=n(155),N=C.call(Function.call,Array.prototype.concat),A=C.call(Function.apply,Array.prototype.splice),M=C.call(Function.call,String.prototype.replace),T=C.call(Function.call,String.prototype.slice),L=C.call(Function.call,RegExp.prototype.exec),I=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,P=/\\(\\)?/g,O=function(e,t){var n,r=e;if(E(S,r)&&(r="%"+(n=S[r])[0]+"%"),E(w,r)){var a=w[r];if(a===_&&(a=x(r)),"undefined"===typeof a&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:a}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===L(/^%?[^%]*%?$/,e))throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=T(e,0,1),n=T(e,-1);if("%"===t&&"%"!==n)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var r=[];return M(e,I,(function(e,t,n,a){r[r.length]=n?M(a,P,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",a=O("%"+r+"%",t),o=a.name,i=a.value,l=!1,u=a.alias;u&&(r=u[0],A(n,N([0,1],u)));for(var d=1,h=!0;d=n.length){var g=m(i,p);i=(h=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:i[p]}else h=E(i,p),i=i[p];h&&!l&&(w[o]=i)}}return i}},553:(e,t,n)=>{"use strict";var r=n(375)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(a){r=null}e.exports=r},734:(e,t,n)=>{"use strict";var r=n(709),a=function(){return!!r};a.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=a},442:e=>{"use strict";var t={__proto__:null,foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof n)}},757:(e,t,n)=>{"use strict";var r="undefined"!==typeof Symbol&&Symbol,a=n(175);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&a())))}},175:e=>{"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var a=Object.getOwnPropertyDescriptor(e,t);if(42!==a.value||!0!==a.enumerable)return!1}return!0}},155:(e,t,n)=>{"use strict";var r=Function.prototype.call,a=Object.prototype.hasOwnProperty,o=n(989);e.exports=o.call(r,a)},267:(e,t,n)=>{var r=NaN,a="[object Symbol]",o=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt,u="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,d="object"==typeof self&&self&&self.Object===Object&&self,h=u||d||Function("return this")(),m=Object.prototype.toString,p=Math.max,f=Math.min,v=function(){return h.Date.now()};function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function y(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&m.call(e)==a}(e))return r;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=l.test(e);return n||s.test(e)?c(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,a,o,i,l,s,c=0,u=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=r,o=a;return r=a=void 0,c=t,i=e.apply(o,n)}function _(e){var n=e-s;return void 0===s||n>=t||n<0||d&&e-c>=o}function b(){var e=v();if(_(e))return w(e);l=setTimeout(b,function(e){var n=t-(e-s);return d?f(n,o-(e-c)):n}(e))}function w(e){return l=void 0,h&&r?m(e):(r=a=void 0,i)}function k(){var e=v(),n=_(e);if(r=arguments,a=this,s=e,n){if(void 0===l)return function(e){return c=e,l=setTimeout(b,t),u?m(e):i}(s);if(d)return l=setTimeout(b,t),m(s)}return void 0===l&&(l=setTimeout(b,t)),i}return t=y(t)||0,g(n)&&(u=!!n.leading,o=(d="maxWait"in n)?p(y(n.maxWait)||0,t):o,h="trailing"in n?!!n.trailing:h),k.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=s=a=l=void 0},k.flush=function(){return void 0===l?i:w(v())},k}},424:(e,t,n)=>{var r="__lodash_hash_undefined__",a=1/0,o="[object Function]",i="[object GeneratorFunction]",l="[object Symbol]",s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,u=/^\./,d=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,h=/\\(\\)?/g,m=/^\[object .+?Constructor\]$/,p="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,f="object"==typeof self&&self&&self.Object===Object&&self,v=p||f||Function("return this")();var g=Array.prototype,y=Function.prototype,_=Object.prototype,b=v["__core-js_shared__"],w=function(){var e=/[^.]+$/.exec(b&&b.keys&&b.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),k=y.toString,x=_.hasOwnProperty,S=_.toString,C=RegExp("^"+k.call(x).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),E=v.Symbol,N=g.splice,A=j(v,"Map"),M=j(Object,"create"),T=E?E.prototype:void 0,L=T?T.toString:void 0;function I(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1},P.prototype.set=function(e,t){var n=this.__data__,r=R(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},O.prototype.clear=function(){this.__data__={hash:new I,map:new(A||P),string:new I}},O.prototype.delete=function(e){return F(this,e).delete(e)},O.prototype.get=function(e){return F(this,e).get(e)},O.prototype.has=function(e){return F(this,e).has(e)},O.prototype.set=function(e,t){return F(this,e).set(e,t),this};var H=$((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(q(e))return L?L.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return u.test(e)&&n.push(""),e.replace(d,(function(e,t,r,a){n.push(r?a.replace(h,"$1"):t||e)})),n}));function V(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function $(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i),i};return n.cache=new($.Cache||O),n}$.Cache=O;var U=Array.isArray;function B(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function q(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&S.call(e)==l}e.exports=function(e,t,n){var r=null==e?void 0:D(e,t);return void 0===r?n:r}},141:(e,t,n)=>{var r="function"===typeof Map&&Map.prototype,a=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=r&&a&&"function"===typeof a.get?a.get:null,i=r&&Map.prototype.forEach,l="function"===typeof Set&&Set.prototype,s=Object.getOwnPropertyDescriptor&&l?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=l&&s&&"function"===typeof s.get?s.get:null,u=l&&Set.prototype.forEach,d="function"===typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h="function"===typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,m="function"===typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,f=Object.prototype.toString,v=Function.prototype.toString,g=String.prototype.match,y=String.prototype.slice,_=String.prototype.replace,b=String.prototype.toUpperCase,w=String.prototype.toLowerCase,k=RegExp.prototype.test,x=Array.prototype.concat,S=Array.prototype.join,C=Array.prototype.slice,E=Math.floor,N="function"===typeof BigInt?BigInt.prototype.valueOf:null,A=Object.getOwnPropertySymbols,M="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"===typeof Symbol&&"object"===typeof Symbol.iterator,L="function"===typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,I=Object.prototype.propertyIsEnumerable,P=("function"===typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function O(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||k.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"===typeof e){var r=e<0?-E(-e):E(e);if(r!==e){var a=String(r),o=y.call(t,a.length+1);return _.call(a,n,"$&_")+"."+_.call(_.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return _.call(t,n,"$&_")}var R=n(634),D=R.custom,z=$(D)?D:null;function F(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function j(e){return _.call(String(e),/"/g,""")}function H(e){return"[object Array]"===q(e)&&(!L||!("object"===typeof e&&L in e))}function V(e){return"[object RegExp]"===q(e)&&(!L||!("object"===typeof e&&L in e))}function $(e){if(T)return e&&"object"===typeof e&&e instanceof Symbol;if("symbol"===typeof e)return!0;if(!e||"object"!==typeof e||!M)return!1;try{return M.call(e),!0}catch(t){}return!1}e.exports=function e(t,r,a,l){var s=r||{};if(B(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(B(s,"maxStringLength")&&("number"===typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var f=!B(s,"customInspect")||s.customInspect;if("boolean"!==typeof f&&"symbol"!==f)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(B(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(B(s,"numericSeparator")&&"boolean"!==typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var b=s.numericSeparator;if("undefined"===typeof t)return"undefined";if(null===t)return"null";if("boolean"===typeof t)return t?"true":"false";if("string"===typeof t)return W(t,s);if("number"===typeof t){if(0===t)return 1/0/t>0?"0":"-0";var k=String(t);return b?O(t,k):k}if("bigint"===typeof t){var E=String(t)+"n";return b?O(t,E):E}var A="undefined"===typeof s.depth?5:s.depth;if("undefined"===typeof a&&(a=0),a>=A&&A>0&&"object"===typeof t)return H(t)?"[Array]":"[Object]";var D=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"===typeof e.indent&&e.indent>0))return null;n=S.call(Array(e.indent+1)," ")}return{base:n,prev:S.call(Array(t+1),n)}}(s,a);if("undefined"===typeof l)l=[];else if(Y(l,t)>=0)return"[Circular]";function U(t,n,r){if(n&&(l=C.call(l)).push(n),r){var o={depth:s.depth};return B(s,"quoteStyle")&&(o.quoteStyle=s.quoteStyle),e(t,o,a+1,l)}return e(t,s,a+1,l)}if("function"===typeof t&&!V(t)){var K=function(e){if(e.name)return e.name;var t=g.call(v.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),ee=X(t,U);return"[Function"+(K?": "+K:" (anonymous)")+"]"+(ee.length>0?" { "+S.call(ee,", ")+" }":"")}if($(t)){var te=T?_.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):M.call(t);return"object"!==typeof t||T?te:Q(te)}if(function(e){if(!e||"object"!==typeof e)return!1;if("undefined"!==typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"===typeof e.nodeName&&"function"===typeof e.getAttribute}(t)){for(var ne="<"+w.call(String(t.nodeName)),re=t.attributes||[],ae=0;ae"}if(H(t)){if(0===t.length)return"[]";var oe=X(t,U);return D&&!function(e){for(var t=0;t=0)return!1;return!0}(oe)?"["+J(oe,D)+"]":"[ "+S.call(oe,", ")+" ]"}if(function(e){return"[object Error]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t)){var ie=X(t,U);return"cause"in Error.prototype||!("cause"in t)||I.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+S.call(ie,", ")+" }":"{ ["+String(t)+"] "+S.call(x.call("[cause]: "+U(t.cause),ie),", ")+" }"}if("object"===typeof t&&f){if(z&&"function"===typeof t[z]&&R)return R(t,{depth:A-a});if("symbol"!==f&&"function"===typeof t.inspect)return t.inspect()}if(function(e){if(!o||!e||"object"!==typeof e)return!1;try{o.call(e);try{c.call(e)}catch(ne){return!0}return e instanceof Map}catch(t){}return!1}(t)){var le=[];return i&&i.call(t,(function(e,n){le.push(U(n,t,!0)+" => "+U(e,t))})),G("Map",o.call(t),le,D)}if(function(e){if(!c||!e||"object"!==typeof e)return!1;try{c.call(e);try{o.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var se=[];return u&&u.call(t,(function(e){se.push(U(e,t))})),G("Set",c.call(t),se,D)}if(function(e){if(!d||!e||"object"!==typeof e)return!1;try{d.call(e,d);try{h.call(e,h)}catch(ne){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return Z("WeakMap");if(function(e){if(!h||!e||"object"!==typeof e)return!1;try{h.call(e,h);try{d.call(e,d)}catch(ne){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return Z("WeakSet");if(function(e){if(!m||!e||"object"!==typeof e)return!1;try{return m.call(e),!0}catch(t){}return!1}(t))return Z("WeakRef");if(function(e){return"[object Number]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t))return Q(U(Number(t)));if(function(e){if(!e||"object"!==typeof e||!N)return!1;try{return N.call(e),!0}catch(t){}return!1}(t))return Q(U(N.call(t)));if(function(e){return"[object Boolean]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t))return Q(p.call(t));if(function(e){return"[object String]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t))return Q(U(String(t)));if("undefined"!==typeof window&&t===window)return"{ [object Window] }";if("undefined"!==typeof globalThis&&t===globalThis||"undefined"!==typeof n.g&&t===n.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===q(e)&&(!L||!("object"===typeof e&&L in e))}(t)&&!V(t)){var ce=X(t,U),ue=P?P(t)===Object.prototype:t instanceof Object||t.constructor===Object,de=t instanceof Object?"":"null prototype",he=!ue&&L&&Object(t)===t&&L in t?y.call(q(t),8,-1):de?"Object":"",me=(ue||"function"!==typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(he||de?"["+S.call(x.call([],he||[],de||[]),": ")+"] ":"");return 0===ce.length?me+"{}":D?me+"{"+J(ce,D)+"}":me+"{ "+S.call(ce,", ")+" }"}return String(t)};var U=Object.prototype.hasOwnProperty||function(e){return e in this};function B(e,t){return U.call(e,t)}function q(e){return f.call(e)}function Y(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return W(y.call(e,0,t.maxStringLength),t)+r}return F(_.call(_.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,K),"single",t)}function K(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+b.call(t.toString(16))}function Q(e){return"Object("+e+")"}function Z(e){return e+" { ? }"}function G(e,t,n,r){return e+" ("+t+") {"+(r?J(n,r):S.call(n,", "))+"}"}function J(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+S.call(e,","+n)+"\n"+t.prev}function X(e,t){var n=H(e),r=[];if(n){r.length=e.length;for(var a=0;a{"use strict";n.r(t),n.d(t,{Children:()=>q,Component:()=>l.uA,Fragment:()=>l.FK,PureComponent:()=>j,StrictMode:()=>Ie,Suspense:()=>Z,SuspenseList:()=>X,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>we,cloneElement:()=>Ne,createContext:()=>l.q6,createElement:()=>l.n,createFactory:()=>xe,createPortal:()=>re,createRef:()=>l._3,default:()=>He,findDOMNode:()=>Me,flushSync:()=>Le,forwardRef:()=>U,hydrate:()=>de,isElement:()=>ze,isFragment:()=>Ce,isMemo:()=>Ee,isValidElement:()=>Se,lazy:()=>J,memo:()=>H,render:()=>ue,startTransition:()=>Pe,unmountComponentAtNode:()=>Ae,unstable_batchedUpdates:()=>Te,useCallback:()=>C,useContext:()=>E,useDebugValue:()=>N,useDeferredValue:()=>Oe,useEffect:()=>b,useErrorBoundary:()=>A,useId:()=>M,useImperativeHandle:()=>x,useInsertionEffect:()=>De,useLayoutEffect:()=>w,useMemo:()=>S,useReducer:()=>_,useRef:()=>k,useState:()=>y,useSyncExternalStore:()=>Fe,useTransition:()=>Re,version:()=>ke});var r,a,o,i,l=n(746),s=0,c=[],u=l.fF,d=u.__b,h=u.__r,m=u.diffed,p=u.__c,f=u.unmount,v=u.__;function g(e,t){u.__h&&u.__h(a,e,s||t),s=0;var n=a.__H||(a.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function y(e){return s=1,_(D,e)}function _(e,t,n){var o=g(r++,2);if(o.t=e,!o.__c&&(o.__=[n?n(t):D(void 0,t),function(e){var t=o.__N?o.__N[0]:o.__[0],n=o.t(t,e);t!==n&&(o.__N=[n,o.__[1]],o.__c.setState({}))}],o.__c=a,!a.u)){var i=function(e,t,n){if(!o.__c.__H)return!0;var r=o.__c.__H.__.filter((function(e){return!!e.__c}));if(r.every((function(e){return!e.__N})))return!l||l.call(this,e,t,n);var a=!1;return r.forEach((function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(a=!0)}})),!(!a&&o.__c.props===e)&&(!l||l.call(this,e,t,n))};a.u=!0;var l=a.shouldComponentUpdate,s=a.componentWillUpdate;a.componentWillUpdate=function(e,t,n){if(this.__e){var r=l;l=void 0,i(e,t,n),l=r}s&&s.call(this,e,t,n)},a.shouldComponentUpdate=i}return o.__N||o.__}function b(e,t){var n=g(r++,3);!u.__s&&R(n.__H,t)&&(n.__=e,n.i=t,a.__H.__h.push(n))}function w(e,t){var n=g(r++,4);!u.__s&&R(n.__H,t)&&(n.__=e,n.i=t,a.__h.push(n))}function k(e){return s=5,S((function(){return{current:e}}),[])}function x(e,t,n){s=6,w((function(){return"function"==typeof e?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0}),null==n?n:n.concat(e))}function S(e,t){var n=g(r++,7);return R(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function C(e,t){return s=8,S((function(){return e}),t)}function E(e){var t=a.context[e.__c],n=g(r++,9);return n.c=e,t?(null==n.__&&(n.__=!0,t.sub(a)),t.props.value):e.__}function N(e,t){u.useDebugValue&&u.useDebugValue(t?t(e):e)}function A(e){var t=g(r++,10),n=y();return t.__=e,a.componentDidCatch||(a.componentDidCatch=function(e,r){t.__&&t.__(e,r),n[1](e)}),[n[0],function(){n[1](void 0)}]}function M(){var e=g(r++,11);if(!e.__){for(var t=a.__v;null!==t&&!t.__m&&null!==t.__;)t=t.__;var n=t.__m||(t.__m=[0,0]);e.__="P"+n[0]+"-"+n[1]++}return e.__}function T(){for(var e;e=c.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(P),e.__H.__h.forEach(O),e.__H.__h=[]}catch(r){e.__H.__h=[],u.__e(r,e.__v)}}u.__b=function(e){a=null,d&&d(e)},u.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),v&&v(e,t)},u.__r=function(e){h&&h(e),r=0;var t=(a=e.__c).__H;t&&(o===a?(t.__h=[],a.__h=[],t.__.forEach((function(e){e.__N&&(e.__=e.__N),e.i=e.__N=void 0}))):(t.__h.forEach(P),t.__h.forEach(O),t.__h=[],r=0)),o=a},u.diffed=function(e){m&&m(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==c.push(t)&&i===u.requestAnimationFrame||((i=u.requestAnimationFrame)||I)(T)),t.__H.__.forEach((function(e){e.i&&(e.__H=e.i),e.i=void 0}))),o=a=null},u.__c=function(e,t){t.some((function(e){try{e.__h.forEach(P),e.__h=e.__h.filter((function(e){return!e.__||O(e)}))}catch(a){t.some((function(e){e.__h&&(e.__h=[])})),t=[],u.__e(a,e.__v)}})),p&&p(e,t)},u.unmount=function(e){f&&f(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach((function(e){try{P(e)}catch(e){t=e}})),n.__H=void 0,t&&u.__e(t,n.__v))};var L="function"==typeof requestAnimationFrame;function I(e){var t,n=function(){clearTimeout(r),L&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);L&&(t=requestAnimationFrame(n))}function P(e){var t=a,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),a=t}function O(e){var t=a;e.__c=e.__(),a=t}function R(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function D(e,t){return"function"==typeof t?t(e):t}function z(e,t){for(var n in t)e[n]=t[n];return e}function F(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function j(e,t){this.props=e,this.context=t}function H(e,t){function n(e){var n=this.props.ref,r=n==e.ref;return!r&&n&&(n.call?n(null):n.current=null),t?!t(this.props,e)||!r:F(this.props,e)}function r(t){return this.shouldComponentUpdate=n,(0,l.n)(e,t)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(j.prototype=new l.uA).isPureReactComponent=!0,j.prototype.shouldComponentUpdate=function(e,t){return F(this.props,e)||F(this.state,t)};var V=l.fF.__b;l.fF.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),V&&V(e)};var $="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function U(e){function t(t){var n=z({},t);return delete n.ref,e(n,t.ref||null)}return t.$$typeof=$,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var B=function(e,t){return null==e?null:(0,l.v2)((0,l.v2)(e).map(t))},q={map:B,forEach:B,count:function(e){return e?(0,l.v2)(e).length:0},only:function(e){var t=(0,l.v2)(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:l.v2},Y=l.fF.__e;l.fF.__e=function(e,t,n,r){if(e.then)for(var a,o=t;o=o.__;)if((a=o.__c)&&a.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),a.__c(e,t);Y(e,t,n,r)};var W=l.fF.unmount;function K(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),e.__c.__H=null),null!=(e=z({},e)).__c&&(e.__c.__P===n&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map((function(e){return K(e,t,n)}))),e}function Q(e,t,n){return e&&n&&(e.__v=null,e.__k=e.__k&&e.__k.map((function(e){return Q(e,t,n)})),e.__c&&e.__c.__P===t&&(e.__e&&n.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=n)),e}function Z(){this.__u=0,this.t=null,this.__b=null}function G(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function J(e){var t,n,r;function a(a){if(t||(t=e()).then((function(e){n=e.default||e}),(function(e){r=e})),r)throw r;if(!n)throw t;return(0,l.n)(n,a)}return a.displayName="Lazy",a.__f=!0,a}function X(){this.u=null,this.o=null}l.fF.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),W&&W(e)},(Z.prototype=new l.uA).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var a=G(r.__v),o=!1,i=function(){o||(o=!0,n.__R=null,a?a(l):l())};n.__R=i;var l=function(){if(! --r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=Q(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(i,i)},Z.prototype.componentWillUnmount=function(){this.t=[]},Z.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=K(this.__b,n,r.__O=r.__P)}this.__b=null}var a=t.__a&&(0,l.n)(l.FK,null,e.fallback);return a&&(a.__u&=-33),[(0,l.n)(l.FK,null,t.__a?null:e.children),a]};var ee=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),(0,l.XX)((0,l.n)(te,{context:t.context},e.__v),t.l)}function re(e,t){var n=(0,l.n)(ne,{__v:e,i:t});return n.containerInfo=t,n}(X.prototype=new l.uA).__a=function(e){var t=this,n=G(t.__v),r=t.o.get(e);return r[0]++,function(a){var o=function(){t.props.revealOrder?(r.push(a),ee(t,e,r)):a()};n?n(o):o()}},X.prototype.render=function(e){this.u=null,this.o=new Map;var t=(0,l.v2)(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},X.prototype.componentDidUpdate=X.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){ee(e,n,t)}))};var ae="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,oe=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,ie=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,le=/[A-Z0-9]/g,se="undefined"!=typeof document,ce=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(e)};function ue(e,t,n){return null==t.__k&&(t.textContent=""),(0,l.XX)(e,t),"function"==typeof n&&n(),e?e.__c:null}function de(e,t,n){return(0,l.Qv)(e,t),"function"==typeof n&&n(),e?e.__c:null}l.uA.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(l.uA.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var he=l.fF.event;function me(){}function pe(){return this.cancelBubble}function fe(){return this.defaultPrevented}l.fF.event=function(e){return he&&(e=he(e)),e.persist=me,e.isPropagationStopped=pe,e.isDefaultPrevented=fe,e.nativeEvent=e};var ve,ge={enumerable:!1,configurable:!0,get:function(){return this.class}},ye=l.fF.vnode;l.fF.vnode=function(e){"string"==typeof e.type&&function(e){var t=e.props,n=e.type,r={},a=-1===n.indexOf("-");for(var o in t){var i=t[o];if(!("value"===o&&"defaultValue"in t&&null==i||se&&"children"===o&&"noscript"===n||"class"===o||"className"===o)){var s=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===i?i="":"translate"===s&&"no"===i?i=!1:"o"===s[0]&&"n"===s[1]?"ondoubleclick"===s?o="ondblclick":"onchange"!==s||"input"!==n&&"textarea"!==n||ce(t.type)?"onfocus"===s?o="onfocusin":"onblur"===s?o="onfocusout":ie.test(o)&&(o=s):s=o="oninput":a&&oe.test(o)?o=o.replace(le,"-$&").toLowerCase():null===i&&(i=void 0),"oninput"===s&&r[o=s]&&(o="oninputCapture"),r[o]=i}}"select"==n&&r.multiple&&Array.isArray(r.value)&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==n&&null!=r.defaultValue&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",ge)):(t.className&&!t.class||t.class&&t.className)&&(r.class=r.className=t.className),e.props=r}(e),e.$$typeof=ae,ye&&ye(e)};var _e=l.fF.__r;l.fF.__r=function(e){_e&&_e(e),ve=e.__c};var be=l.fF.diffed;l.fF.diffed=function(e){be&&be(e);var t=e.props,n=e.__e;null!=n&&"textarea"===e.type&&"value"in t&&t.value!==n.value&&(n.value=null==t.value?"":t.value),ve=null};var we={ReactCurrentDispatcher:{current:{readContext:function(e){return ve.__n[e.__c].props.value},useCallback:C,useContext:E,useDebugValue:N,useDeferredValue:Oe,useEffect:b,useId:M,useImperativeHandle:x,useInsertionEffect:De,useLayoutEffect:w,useMemo:S,useReducer:_,useRef:k,useState:y,useSyncExternalStore:Fe,useTransition:Re}}},ke="17.0.2";function xe(e){return l.n.bind(null,e)}function Se(e){return!!e&&e.$$typeof===ae}function Ce(e){return Se(e)&&e.type===l.FK}function Ee(e){return!!e&&!!e.displayName&&("string"==typeof e.displayName||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")}function Ne(e){return Se(e)?l.Ob.apply(null,arguments):e}function Ae(e){return!!e.__k&&((0,l.XX)(null,e),!0)}function Me(e){return e&&(e.base||1===e.nodeType&&e)||null}var Te=function(e,t){return e(t)},Le=function(e,t){return e(t)},Ie=l.FK;function Pe(e){e()}function Oe(e){return e}function Re(){return[!1,Pe]}var De=w,ze=Se;function Fe(e,t){var n=t(),r=y({h:{__:n,v:t}}),a=r[0].h,o=r[1];return w((function(){a.__=n,a.v=t,je(a)&&o({h:a})}),[e,n,t]),b((function(){return je(a)&&o({h:a}),e((function(){je(a)&&o({h:a})}))}),[e]),n}function je(e){var t,n,r=e.v,a=e.__;try{var o=r();return!((t=a)===(n=o)&&(0!==t||1/t==1/n)||t!=t&&n!=n)}catch(e){return!0}}var He={useState:y,useId:M,useReducer:_,useEffect:b,useLayoutEffect:w,useInsertionEffect:De,useTransition:Re,useDeferredValue:Oe,useSyncExternalStore:Fe,startTransition:Pe,useRef:k,useImperativeHandle:x,useMemo:S,useCallback:C,useContext:E,useDebugValue:N,version:"17.0.2",Children:q,render:ue,hydrate:de,unmountComponentAtNode:Ae,createPortal:re,createElement:l.n,createContext:l.q6,createFactory:xe,cloneElement:Ne,createRef:l._3,Fragment:l.FK,isValidElement:Se,isElement:ze,isFragment:Ce,isMemo:Ee,findDOMNode:Me,Component:l.uA,PureComponent:j,memo:H,forwardRef:U,flushSync:Le,unstable_batchedUpdates:Te,StrictMode:Ie,Suspense:Z,SuspenseList:X,lazy:J,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:we}},746:(e,t,n)=>{"use strict";n.d(t,{FK:()=>x,Ob:()=>q,Qv:()=>B,XX:()=>U,_3:()=>k,fF:()=>a,n:()=>b,q6:()=>Y,uA:()=>S,v2:()=>I});var r,a,o,i,l,s,c,u,d,h,m,p={},f=[],v=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function y(e,t){for(var n in t)e[n]=t[n];return e}function _(e){var t=e.parentNode;t&&t.removeChild(e)}function b(e,t,n){var a,o,i,l={};for(i in t)"key"==i?a=t[i]:"ref"==i?o=t[i]:l[i]=t[i];if(arguments.length>2&&(l.children=arguments.length>3?r.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===l[i]&&(l[i]=e.defaultProps[i]);return w(e,l,a,o,null)}function w(e,t,n,r,i){var l={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==i?++o:i,__i:-1,__u:0};return null==i&&null!=a.vnode&&a.vnode(l),l}function k(){return{current:null}}function x(e){return e.children}function S(e,t){this.props=e,this.context=t}function C(e,t){if(null==t)return e.__?C(e.__,e.__i+1):null;for(var n;tt&&i.sort(c));A.__r=0}function M(e,t,n,r,a,o,i,l,s,c,u){var d,h,m,v,g,y=r&&r.__k||f,_=t.length;for(n.__d=s,T(n,t,y),s=n.__d,d=0;d<_;d++)null!=(m=n.__k[d])&&"boolean"!=typeof m&&"function"!=typeof m&&(h=-1===m.__i?p:y[m.__i]||p,m.__i=d,z(e,m,h,a,o,i,l,s,c,u),v=m.__e,m.ref&&h.ref!=m.ref&&(h.ref&&H(h.ref,null,m),u.push(m.ref,m.__c||v,m)),null==g&&null!=v&&(g=v),65536&m.__u||h.__k===m.__k?s=L(m,s,e):"function"==typeof m.type&&void 0!==m.__d?s=m.__d:v&&(s=v.nextSibling),m.__d=void 0,m.__u&=-196609);n.__d=s,n.__e=g}function T(e,t,n){var r,a,o,i,l,s=t.length,c=n.length,u=c,d=0;for(e.__k=[],r=0;r0?w(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):a)?(a.__=e,a.__b=e.__b+1,l=P(a,n,i,u),a.__i=l,o=null,-1!==l&&(u--,(o=n[l])&&(o.__u|=131072)),null==o||null===o.__v?(-1==l&&d--,"function"!=typeof a.type&&(a.__u|=65536)):l!==i&&(l==i-1?d--:l==i+1?d++:l>i?u>s-i?d+=l-i:d--:l(null!=s&&0==(131072&s.__u)?1:0))for(;i>=0||l=0){if((s=t[i])&&0==(131072&s.__u)&&a==s.key&&o===s.type)return i;i--}if(l2&&(s.children=arguments.length>3?r.call(arguments,2):n),w(e.type,s,a||e.key,o||e.ref,null)}function Y(e,t){var n={__c:t="__cC"+m++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.componentWillUnmount=function(){n=null},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some((function(e){e.__e=!0,N(e)}))},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n&&n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}r=f.slice,a={__e:function(e,t,n,r){for(var a,o,i;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&null!=o.getDerivedStateFromError&&(a.setState(o.getDerivedStateFromError(e)),i=a.__d),null!=a.componentDidCatch&&(a.componentDidCatch(e,r||{}),i=a.__d),i)return a.__E=a}catch(t){e=t}throw e}},o=0,S.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=y({},this.state),"function"==typeof e&&(e=e(y({},n),this.props)),e&&y(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),N(this))},S.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),N(this))},S.prototype.render=x,i=[],s="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(e,t){return e.__v.__b-t.__v.__b},A.__r=0,u=0,d=D(!1),h=D(!0),m=0},640:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",a="RFC3986";e.exports={default:a,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:a}},215:(e,t,n)=>{"use strict";var r=n(518),a=n(968),o=n(640);e.exports={formats:o,parse:a,stringify:r}},968:(e,t,n)=>{"use strict";var r=n(570),a=Object.prototype.hasOwnProperty,o=Array.isArray,i={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:r.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1},l=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},s=function(e,t){return e&&"string"===typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},c=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,l=n.depth>0&&/(\[[^[\]]*])/.exec(o),c=l?o.slice(0,l.index):o,u=[];if(c){if(!n.plainObjects&&a.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}for(var d=0;n.depth>0&&null!==(l=i.exec(o))&&d=0;--o){var i,l=e[o];if("[]"===l&&n.parseArrays)i=n.allowEmptyArrays&&(""===a||n.strictNullHandling&&null===a)?[]:[].concat(a);else{i=n.plainObjects?Object.create(null):{};var c="["===l.charAt(0)&&"]"===l.charAt(l.length-1)?l.slice(1,-1):l,u=n.decodeDotInKeys?c.replace(/%2E/g,"."):c,d=parseInt(u,10);n.parseArrays||""!==u?!isNaN(d)&&l!==u&&String(d)===u&&d>=0&&n.parseArrays&&d<=n.arrayLimit?(i=[])[d]=a:"__proto__"!==u&&(i[u]=a):i={0:a}}a=i}return a}(u,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if("undefined"!==typeof e.allowEmptyArrays&&"boolean"!==typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if("undefined"!==typeof e.decodeDotInKeys&&"boolean"!==typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&"undefined"!==typeof e.decoder&&"function"!==typeof e.decoder)throw new TypeError("Decoder has to be a function.");if("undefined"!==typeof e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t="undefined"===typeof e.charset?i.charset:e.charset,n="undefined"===typeof e.duplicates?i.duplicates:e.duplicates;if("combine"!==n&&"first"!==n&&"last"!==n)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:"undefined"===typeof e.allowDots?!0===e.decodeDotInKeys||i.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"===typeof e.allowEmptyArrays?!!e.allowEmptyArrays:i.allowEmptyArrays,allowPrototypes:"boolean"===typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"===typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"===typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"===typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"===typeof e.comma?e.comma:i.comma,decodeDotInKeys:"boolean"===typeof e.decodeDotInKeys?e.decodeDotInKeys:i.decodeDotInKeys,decoder:"function"===typeof e.decoder?e.decoder:i.decoder,delimiter:"string"===typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"===typeof e.depth||!1===e.depth?+e.depth:i.depth,duplicates:n,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"===typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"===typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"===typeof e.plainObjects?e.plainObjects:i.plainObjects,strictDepth:"boolean"===typeof e.strictDepth?!!e.strictDepth:i.strictDepth,strictNullHandling:"boolean"===typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var u="string"===typeof e?function(e,t){var n={__proto__:null},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;c=c.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var u,d=t.parameterLimit===1/0?void 0:t.parameterLimit,h=c.split(t.delimiter,d),m=-1,p=t.charset;if(t.charsetSentinel)for(u=0;u-1&&(v=o(v)?[v]:v);var b=a.call(n,f);b&&"combine"===t.duplicates?n[f]=r.combine(n[f],v):b&&"last"!==t.duplicates||(n[f]=v)}return n}(e,n):e,d=n.plainObjects?Object.create(null):{},h=Object.keys(u),m=0;m{"use strict";var r=n(670),a=n(570),o=n(640),i=Object.prototype.hasOwnProperty,l={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},s=Array.isArray,c=Array.prototype.push,u=function(e,t){c.apply(e,s(t)?t:[t])},d=Date.prototype.toISOString,h=o.default,m={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:a.encode,encodeValuesOnly:!1,format:h,formatter:o.formatters[h],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},p={},f=function e(t,n,o,i,l,c,d,h,f,v,g,y,_,b,w,k,x,S){for(var C,E=t,N=S,A=0,M=!1;void 0!==(N=N.get(p))&&!M;){var T=N.get(t);if(A+=1,"undefined"!==typeof T){if(T===A)throw new RangeError("Cyclic object value");M=!0}"undefined"===typeof N.get(p)&&(A=0)}if("function"===typeof v?E=v(n,E):E instanceof Date?E=_(E):"comma"===o&&s(E)&&(E=a.maybeMap(E,(function(e){return e instanceof Date?_(e):e}))),null===E){if(c)return f&&!k?f(n,m.encoder,x,"key",b):n;E=""}if("string"===typeof(C=E)||"number"===typeof C||"boolean"===typeof C||"symbol"===typeof C||"bigint"===typeof C||a.isBuffer(E))return f?[w(k?n:f(n,m.encoder,x,"key",b))+"="+w(f(E,m.encoder,x,"value",b))]:[w(n)+"="+w(String(E))];var L,I=[];if("undefined"===typeof E)return I;if("comma"===o&&s(E))k&&f&&(E=a.maybeMap(E,f)),L=[{value:E.length>0?E.join(",")||null:void 0}];else if(s(v))L=v;else{var P=Object.keys(E);L=g?P.sort(g):P}var O=h?n.replace(/\./g,"%2E"):n,R=i&&s(E)&&1===E.length?O+"[]":O;if(l&&s(E)&&0===E.length)return R+"[]";for(var D=0;D0?b+_:""}},570:(e,t,n)=>{"use strict";var r=n(640),a=Object.prototype.hasOwnProperty,o=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),l=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(o(n)){for(var r=[],a=0;a=s?l.slice(u,u+s):l,h=[],m=0;m=48&&p<=57||p>=65&&p<=90||p>=97&&p<=122||o===r.RFC1738&&(40===p||41===p)?h[h.length]=d.charAt(m):p<128?h[h.length]=i[p]:p<2048?h[h.length]=i[192|p>>6]+i[128|63&p]:p<55296||p>=57344?h[h.length]=i[224|p>>12]+i[128|p>>6&63]+i[128|63&p]:(m+=1,p=65536+((1023&p)<<10|1023&d.charCodeAt(m)),h[h.length]=i[240|p>>18]+i[128|p>>12&63]+i[128|p>>6&63]+i[128|63&p])}c+=h.join("")}return c},isBuffer:function(e){return!(!e||"object"!==typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(o(e)){for(var n=[],r=0;r{e.exports=n(204)},204:(e,t,n)=>{"use strict";var r=function(e){return e&&"object"==typeof e&&"default"in e?e.default:e}(n(609)),a=n(609);function o(){return(o=Object.assign||function(e){for(var t=1;tr.length&&h(e,t.length-1);)t=t.slice(0,t.length-1);return t.length}for(var a=r.length,o=t.length;o>=r.length;o--){var i=t[o];if(!h(e,o)&&m(e,o,i)){a=o+1;break}}return a}function v(e,t){return f(e,t)===e.mask.length}function g(e,t){var n=e.maskChar,r=e.mask,a=e.prefix;if(!n){for((t=y(e,"",t,0)).lengtht.length&&(t+=a.slice(t.length,r)),l.every((function(n){for(;u=n,h(e,c=r)&&u!==a[c];){if(r>=t.length&&(t+=a[r]),l=n,o&&h(e,r)&&l===o)return!0;if(++r>=a.length)return!1}var l,c,u;return!m(e,r,n)&&n!==o||(ra.start?d=(u=function(e,t,n,r){var a=e.mask,o=e.maskChar,i=n.split(""),l=r;return i.every((function(t){for(;i=t,h(e,n=r)&&i!==a[n];)if(++r>=a.length)return!1;var n,i;return(m(e,r,t)||t===o)&&r++,r=o.length?p=o.length:p=i.length&&p{"use strict";var r=n(375),a=n(411),o=n(734)(),i=n(553),l=n(277),s=r("%Math.floor%");e.exports=function(e,t){if("function"!==typeof e)throw new l("`fn` is not a function");if("number"!==typeof t||t<0||t>4294967295||s(t)!==t)throw new l("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],r=!0,c=!0;if("length"in e&&i){var u=i(e,"length");u&&!u.configurable&&(r=!1),u&&!u.writable&&(c=!1)}return(r||c||!n)&&(o?a(e,"length",t,!0,!0):a(e,"length",t)),e}},670:(e,t,n)=>{"use strict";var r=n(375),a=n(61),o=n(141),i=n(277),l=r("%WeakMap%",!0),s=r("%Map%",!0),c=a("WeakMap.prototype.get",!0),u=a("WeakMap.prototype.set",!0),d=a("WeakMap.prototype.has",!0),h=a("Map.prototype.get",!0),m=a("Map.prototype.set",!0),p=a("Map.prototype.has",!0),f=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new i("Side channel does not contain "+o(e))},get:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return c(e,r)}else if(s){if(t)return h(t,r)}else if(n)return function(e,t){var n=f(e,t);return n&&n.value}(n,r)},has:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return d(e,r)}else if(s){if(t)return p(t,r)}else if(n)return function(e,t){return!!f(e,t)}(n,r);return!1},set:function(r,a){l&&r&&("object"===typeof r||"function"===typeof r)?(e||(e=new l),u(e,r,a)):s?(t||(t=new s),m(t,r,a)):(n||(n={key:{},next:null}),function(e,t,n){var r=f(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,a))}};return r}},634:()=>{},738:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e="",t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".f772060c.chunk.js",n.miniCssF=e=>{},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="vmui:";n.l=(r,a,o,i)=>{if(e[r])e[r].push(a);else{var l,s;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{l.onerror=l.onload=null,clearTimeout(m);var a=e[r];if(delete e[r],l.parentNode&&l.parentNode.removeChild(l),a&&a.forEach((e=>e(n))),t)return t(n)},m=setTimeout(h.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=h.bind(null,l.onerror),l.onload=h.bind(null,l.onload),s&&document.head.appendChild(l)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="./",(()=>{var e={792:0};n.f.j=(t,r)=>{var a=n.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else{var o=new Promise(((n,r)=>a=e[t]=[n,r]));r.push(a[2]=o);var i=n.p+n.u(t),l=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;l.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",l.name="ChunkLoadError",l.type=o,l.request=i,a[1](l)}}),"chunk-"+t,t)}};var t=(t,r)=>{var a,o,i=r[0],l=r[1],s=r[2],c=0;if(i.some((t=>0!==e[t]))){for(a in l)n.o(l,a)&&(n.m[a]=l[a]);if(s)s(n)}for(t&&t(r);c{"use strict";var e={};n.r(e),n.d(e,{AlarmIcon:()=>Un,ArrowDownIcon:()=>jn,ArrowDropDownIcon:()=>Hn,CalendarIcon:()=>$n,ChartIcon:()=>Wn,ClockIcon:()=>Vn,CloseIcon:()=>In,CodeIcon:()=>Qn,CollapseIcon:()=>kr,CopyIcon:()=>rr,DeleteIcon:()=>Zn,DoneIcon:()=>Xn,DownloadIcon:()=>br,DragIcon:()=>ar,ErrorIcon:()=>Dn,ExpandIcon:()=>wr,FunctionIcon:()=>gr,InfoIcon:()=>On,IssueIcon:()=>lr,KeyboardIcon:()=>Bn,LabelIcon:()=>yr,ListIcon:()=>mr,LogoAnomalyIcon:()=>Mn,LogoIcon:()=>Nn,LogoLogsIcon:()=>An,LogoShortIcon:()=>Tn,MetricIcon:()=>vr,MinusIcon:()=>Jn,MoreIcon:()=>ur,PlayCircleOutlineIcon:()=>Yn,PlayIcon:()=>qn,PlusIcon:()=>Gn,Prettify:()=>nr,QuestionIcon:()=>sr,RefreshIcon:()=>Fn,RestartIcon:()=>Pn,SearchIcon:()=>xr,SettingsIcon:()=>Ln,StarBorderIcon:()=>pr,StarIcon:()=>fr,StorageIcon:()=>cr,SuccessIcon:()=>zn,TableIcon:()=>Kn,TimelineIcon:()=>or,TipIcon:()=>hr,TuneIcon:()=>dr,ValueIcon:()=>_r,VisibilityIcon:()=>er,VisibilityOffIcon:()=>tr,WarningIcon:()=>Rn,WikiIcon:()=>ir});var t,r=n(609),a=n(159),o=n.n(a),i=n(7),l=n.n(i),s=n(648),c=n.n(s),u=n(220),d=n.n(u);function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function b(e,n,r,a){void 0===a&&(a={});let{window:o=document.defaultView,v5Compat:i=!1}=a,l=o.history,s=t.Pop,c=null,u=d();function d(){return(l.state||{idx:null}).idx}function f(){s=t.Pop;let e=d(),n=null==e?null:e-u;u=e,c&&c({action:s,location:b.location,delta:n})}function _(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,n="string"===typeof e?e:y(e);return n=n.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,l.replaceState(h({},l.state,{idx:u}),""));let b={get action(){return s},get location(){return e(o,l)},listen(e){if(c)throw new Error("A history only accepts one active listener");return o.addEventListener(m,f),c=e,()=>{o.removeEventListener(m,f),c=null}},createHref:e=>n(o,e),createURL:_,encodeLocation(e){let t=_(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,n){s=t.Push;let a=g(b.location,e,n);r&&r(a,e),u=d()+1;let h=v(a,u),m=b.createHref(a);try{l.pushState(h,"",m)}catch(p){if(p instanceof DOMException&&"DataCloneError"===p.name)throw p;o.location.assign(m)}i&&c&&c({action:s,location:b.location,delta:1})},replace:function(e,n){s=t.Replace;let a=g(b.location,e,n);r&&r(a,e),u=d();let o=v(a,u),h=b.createHref(a);l.replaceState(o,"",h),i&&c&&c({action:s,location:b.location,delta:0})},go:e=>l.go(e)};return b}var w;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(w||(w={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function k(e,t,n){return void 0===n&&(n="/"),x(e,t,n,!1)}function x(e,t,n,r){let a=z(("string"===typeof t?_(t):t).pathname||"/",n);if(null==a)return null;let o=S(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let i=null;for(let l=0;null==i&&l{let i={relativePath:void 0===o?e.path||"":o,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};i.relativePath.startsWith("/")&&(p(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let l=$([r,i.relativePath]),s=n.concat(i);e.children&&e.children.length>0&&(p(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),S(e.children,t,s,l)),(null!=e.path||e.index)&&t.push({path:l,score:P(l,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of C(e.path))a(e,t,r);else a(e,t)})),t}function C(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(0===r.length)return a?[o,""]:[o];let i=C(r.join("/")),l=[];return l.push(...i.map((e=>""===e?o:[o,e].join("/")))),a&&l.push(...i),l.map((t=>e.startsWith("/")&&""===t?"/":t))}const E=/^:[\w-]+$/,N=3,A=2,M=1,T=10,L=-2,I=e=>"*"===e;function P(e,t){let n=e.split("/"),r=n.length;return n.some(I)&&(r+=L),t&&(r+=A),n.filter((e=>!I(e))).reduce(((e,t)=>e+(E.test(t)?N:""===t?M:T)),r)}function O(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,a={},o="/",i=[];for(let l=0;l(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))");let o=new RegExp(a,t?void 0:"i");return[o,r]}(e.path,e.caseSensitive,e.end),a=t.match(n);if(!a)return null;let o=a[0],i=o.replace(/(.)\/+$/,"$1"),l=a.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:a}=t;if("*"===r){let e=l[n]||"";i=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}const s=l[n];return e[r]=a&&!s?void 0:(s||"").replace(/%2F/g,"/"),e}),{}),pathname:o,pathnameBase:i,pattern:e}}function D(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return f(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function z(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function F(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function j(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function H(e,t){let n=j(e);return t?n.map(((e,t)=>t===n.length-1?e.pathname:e.pathnameBase)):n.map((e=>e.pathnameBase))}function V(e,t,n,r){let a;void 0===r&&(r=!1),"string"===typeof e?a=_(e):(a=h({},e),p(!a.pathname||!a.pathname.includes("?"),F("?","pathname","search",a)),p(!a.pathname||!a.pathname.includes("#"),F("#","pathname","hash",a)),p(!a.search||!a.search.includes("#"),F("#","search","hash",a)));let o,i=""===e||""===a.pathname,l=i?"/":a.pathname;if(null==l)o=n;else{let e=t.length-1;if(!r&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:a=""}="string"===typeof e?_(e):e,o=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:o,search:B(r),hash:q(a)}}(a,o),c=l&&"/"!==l&&l.endsWith("/"),u=(i||"."===l)&&n.endsWith("/");return s.pathname.endsWith("/")||!c&&!u||(s.pathname+="/"),s}const $=e=>e.join("/").replace(/\/\/+/g,"/"),U=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",q=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function Y(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const W=["post","put","patch","delete"],K=(new Set(W),["get",...W]);new Set(K),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t{n.current=!0}));let a=r.useCallback((function(r,a){void 0===a&&(a={}),n.current&&("number"===typeof r?e.navigate(r):e.navigate(r,Q({fromRouteId:t},a)))}),[e,t]);return a}():function(){ne()||p(!1);let e=r.useContext(Z),{basename:t,future:n,navigator:a}=r.useContext(J),{matches:o}=r.useContext(ee),{pathname:i}=re(),l=JSON.stringify(H(o,n.v7_relativeSplatPath)),s=r.useRef(!1);ae((()=>{s.current=!0}));let c=r.useCallback((function(n,r){if(void 0===r&&(r={}),!s.current)return;if("number"===typeof n)return void a.go(n);let o=V(n,JSON.parse(l),i,"path"===r.relative);null==e&&"/"!==t&&(o.pathname="/"===o.pathname?t:$([t,o.pathname])),(r.replace?a.replace:a.push)(o,r.state,r)}),[t,a,l,i,e]);return c}()}const ie=r.createContext(null);function le(e,t){let{relative:n}=void 0===t?{}:t,{future:a}=r.useContext(J),{matches:o}=r.useContext(ee),{pathname:i}=re(),l=JSON.stringify(H(o,a.v7_relativeSplatPath));return r.useMemo((()=>V(e,JSON.parse(l),i,"path"===n)),[e,l,i,n])}function se(e,n,a,o){ne()||p(!1);let{navigator:i}=r.useContext(J),{matches:l}=r.useContext(ee),s=l[l.length-1],c=s?s.params:{},u=(s&&s.pathname,s?s.pathnameBase:"/");s&&s.route;let d,h=re();if(n){var m;let e="string"===typeof n?_(n):n;"/"===u||(null==(m=e.pathname)?void 0:m.startsWith(u))||p(!1),d=e}else d=h;let f=d.pathname||"/",v=f;if("/"!==u){let e=u.replace(/^\//,"").split("/");v="/"+f.replace(/^\//,"").split("/").slice(e.length).join("/")}let g=k(e,{pathname:v});let y=me(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},c,e.params),pathname:$([u,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?u:$([u,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,a,o);return n&&y?r.createElement(X.Provider,{value:{location:Q({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:t.Pop}},y):y}function ce(){let e=function(){var e;let t=r.useContext(te),n=ge(fe.UseRouteError),a=ye(fe.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[a]}(),t=Y(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,a="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:a};return r.createElement(r.Fragment,null,r.createElement("h2",null,"Unexpected Application Error!"),r.createElement("h3",{style:{fontStyle:"italic"}},t),n?r.createElement("pre",{style:o},n):null,null)}const ue=r.createElement(ce,null);class de extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?r.createElement(ee.Provider,{value:this.props.routeContext},r.createElement(te.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function he(e){let{routeContext:t,match:n,children:a}=e,o=r.useContext(Z);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),r.createElement(ee.Provider,{value:t},a)}function me(e,t,n,a){var o;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===a&&(a=null),null==e){var i;if(!n)return null;if(n.errors)e=n.matches;else{if(!(null!=(i=a)&&i.v7_partialHydration&&0===t.length&&!n.initialized&&n.matches.length>0))return null;e=n.matches}}let l=e,s=null==(o=n)?void 0:o.errors;if(null!=s){let e=l.findIndex((e=>e.route.id&&void 0!==(null==s?void 0:s[e.route.id])));e>=0||p(!1),l=l.slice(0,Math.min(l.length,e+1))}let c=!1,u=-1;if(n&&a&&a.v7_partialHydration)for(let r=0;r=0?l.slice(0,u+1):[l[0]];break}}}return l.reduceRight(((e,a,o)=>{let i,d=!1,h=null,m=null;var p;n&&(i=s&&a.route.id?s[a.route.id]:void 0,h=a.route.errorElement||ue,c&&(u<0&&0===o?(p="route-fallback",!1||_e[p]||(_e[p]=!0),d=!0,m=null):u===o&&(d=!0,m=a.route.hydrateFallbackElement||null)));let f=t.concat(l.slice(0,o+1)),v=()=>{let t;return t=i?h:d?m:a.route.Component?r.createElement(a.route.Component,null):a.route.element?a.route.element:e,r.createElement(he,{match:a,routeContext:{outlet:e,matches:f,isDataRoute:null!=n},children:t})};return n&&(a.route.ErrorBoundary||a.route.errorElement||0===o)?r.createElement(de,{location:n.location,revalidation:n.revalidation,component:h,error:i,children:v(),routeContext:{outlet:null,matches:f,isDataRoute:!0}}):v()}),null)}var pe=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(pe||{}),fe=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(fe||{});function ve(e){let t=r.useContext(Z);return t||p(!1),t}function ge(e){let t=r.useContext(G);return t||p(!1),t}function ye(e){let t=function(e){let t=r.useContext(ee);return t||p(!1),t}(),n=t.matches[t.matches.length-1];return n.route.id||p(!1),n.route.id}const _e={};r.startTransition;function be(e){return function(e){let t=r.useContext(ee).outlet;return t?r.createElement(ie.Provider,{value:e},t):t}(e.context)}function we(e){p(!1)}function ke(e){let{basename:n="/",children:a=null,location:o,navigationType:i=t.Pop,navigator:l,static:s=!1,future:c}=e;ne()&&p(!1);let u=n.replace(/^\/*/,"/"),d=r.useMemo((()=>({basename:u,navigator:l,static:s,future:Q({v7_relativeSplatPath:!1},c)})),[u,c,l,s]);"string"===typeof o&&(o=_(o));let{pathname:h="/",search:m="",hash:f="",state:v=null,key:g="default"}=o,y=r.useMemo((()=>{let e=z(h,u);return null==e?null:{location:{pathname:e,search:m,hash:f,state:v,key:g},navigationType:i}}),[u,h,m,f,v,g,i]);return null==y?null:r.createElement(J.Provider,{value:d},r.createElement(X.Provider,{children:a,value:y}))}function xe(e){let{children:t,location:n}=e;return se(Se(t),n)}new Promise((()=>{}));r.Component;function Se(e,t){void 0===t&&(t=[]);let n=[];return r.Children.forEach(e,((e,a)=>{if(!r.isValidElement(e))return;let o=[...t,a];if(e.type===r.Fragment)return void n.push.apply(n,Se(e.props.children,o));e.type!==we&&p(!1),e.props.index&&e.props.children&&p(!1);let i={id:e.props.id||o.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=Se(e.props.children,o)),n.push(i)})),n}function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}function Ne(e){return void 0===e&&(e=""),new URLSearchParams("string"===typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map((e=>[n,e])):[[n,r]])}),[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const Ae=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Me=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"];try{window.__reactRouterVersion="6"}catch(Lp){}const Te=r.createContext({isTransitioning:!1});new Map;const Le=r.startTransition;r.flushSync,r.useId;function Ie(e){let{basename:t,children:n,future:a,window:o}=e,i=r.useRef();null==i.current&&(i.current=function(e){return void 0===e&&(e={}),b((function(e,t){let{pathname:n="/",search:r="",hash:a=""}=_(e.location.hash.substr(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),g("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let n=e.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let t=e.location.href,n=t.indexOf("#");r=-1===n?t:t.slice(0,n)}return r+"#"+("string"===typeof t?t:y(t))}),(function(e,t){f("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)}({window:o,v5Compat:!0}));let l=i.current,[s,c]=r.useState({action:l.action,location:l.location}),{v7_startTransition:u}=a||{},d=r.useCallback((e=>{u&&Le?Le((()=>c(e))):c(e)}),[c,u]);return r.useLayoutEffect((()=>l.listen(d)),[l,d]),r.createElement(ke,{basename:t,children:n,location:s.location,navigationType:s.action,navigator:l,future:a})}const Pe="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,Oe=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Re=r.forwardRef((function(e,t){let n,{onClick:a,relative:o,reloadDocument:i,replace:l,state:s,target:c,to:u,preventScrollReset:d,unstable_viewTransition:h}=e,m=Ee(e,Ae),{basename:f}=r.useContext(J),v=!1;if("string"===typeof u&&Oe.test(u)&&(n=u,Pe))try{let e=new URL(window.location.href),t=u.startsWith("//")?new URL(e.protocol+u):new URL(u),n=z(t.pathname,f);t.origin===e.origin&&null!=n?u=n+t.search+t.hash:v=!0}catch(Lp){}let g=function(e,t){let{relative:n}=void 0===t?{}:t;ne()||p(!1);let{basename:a,navigator:o}=r.useContext(J),{hash:i,pathname:l,search:s}=le(e,{relative:n}),c=l;return"/"!==a&&(c="/"===l?a:$([a,l])),o.createHref({pathname:c,search:s,hash:i})}(u,{relative:o}),_=function(e,t){let{target:n,replace:a,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s}=void 0===t?{}:t,c=oe(),u=re(),d=le(e,{relative:l});return r.useCallback((t=>{if(function(e,t){return 0===e.button&&(!t||"_self"===t)&&!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)}(t,n)){t.preventDefault();let n=void 0!==a?a:y(u)===y(d);c(e,{replace:n,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s})}}),[u,c,d,a,o,n,e,i,l,s])}(u,{replace:l,state:s,target:c,preventScrollReset:d,relative:o,unstable_viewTransition:h});return r.createElement("a",Ce({},m,{href:n||g,onClick:v||i?a:function(e){a&&a(e),e.defaultPrevented||_(e)},ref:t,target:c}))}));const De=r.forwardRef((function(e,t){let{"aria-current":n="page",caseSensitive:a=!1,className:o="",end:i=!1,style:l,to:s,unstable_viewTransition:c,children:u}=e,d=Ee(e,Me),h=le(s,{relative:d.relative}),m=re(),f=r.useContext(G),{navigator:v,basename:g}=r.useContext(J),y=null!=f&&function(e,t){void 0===t&&(t={});let n=r.useContext(Te);null==n&&p(!1);let{basename:a}=je(ze.useViewTransitionState),o=le(e,{relative:t.relative});if(!n.isTransitioning)return!1;let i=z(n.currentLocation.pathname,a)||n.currentLocation.pathname,l=z(n.nextLocation.pathname,a)||n.nextLocation.pathname;return null!=R(o.pathname,l)||null!=R(o.pathname,i)}(h)&&!0===c,_=v.encodeLocation?v.encodeLocation(h).pathname:h.pathname,b=m.pathname,w=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;a||(b=b.toLowerCase(),w=w?w.toLowerCase():null,_=_.toLowerCase()),w&&g&&(w=z(w,g)||w);const k="/"!==_&&_.endsWith("/")?_.length-1:_.length;let x,S=b===_||!i&&b.startsWith(_)&&"/"===b.charAt(k),C=null!=w&&(w===_||!i&&w.startsWith(_)&&"/"===w.charAt(_.length)),E={isActive:S,isPending:C,isTransitioning:y},N=S?n:void 0;x="function"===typeof o?o(E):[o,S?"active":null,C?"pending":null,y?"transitioning":null].filter(Boolean).join(" ");let A="function"===typeof l?l(E):l;return r.createElement(Re,Ce({},d,{"aria-current":N,className:x,ref:t,style:A,to:s,unstable_viewTransition:c}),"function"===typeof u?u(E):u)}));var ze,Fe;function je(e){let t=r.useContext(Z);return t||p(!1),t}function He(e){let t=r.useRef(Ne(e)),n=r.useRef(!1),a=re(),o=r.useMemo((()=>function(e,t){let n=Ne(e);return t&&t.forEach(((e,r)=>{n.has(r)||t.getAll(r).forEach((e=>{n.append(r,e)}))})),n}(a.search,n.current?null:t.current)),[a.search]),i=oe(),l=r.useCallback(((e,t)=>{const r=Ne("function"===typeof e?e(o):e);n.current=!0,i("?"+r,t)}),[i,o]);return[o,l]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(ze||(ze={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Fe||(Fe={}));let Ve=function(e){return e.logs="logs",e.anomaly="anomaly",e}({});const $e={home:"/",metrics:"/metrics",dashboards:"/dashboards",cardinality:"/cardinality",topQueries:"/top-queries",trace:"/trace",withTemplate:"/expand-with-exprs",relabel:"/relabeling",logs:"/logs",activeQueries:"/active-queries",queryAnalyzer:"/query-analyzer",icons:"/icons",anomaly:"/anomaly",query:"/query"},{REACT_APP_TYPE:Ue}={},Be=Ue===Ve.logs,qe={header:{tenant:!0,stepControl:!Be,timeSelector:!Be,executionControls:!Be}},Ye={[$e.home]:{title:"Query",...qe},[$e.metrics]:{title:"Explore Prometheus metrics",header:{tenant:!0,stepControl:!0,timeSelector:!0}},[$e.cardinality]:{title:"Explore cardinality",header:{tenant:!0,cardinalityDatePicker:!0}},[$e.topQueries]:{title:"Top queries",header:{tenant:!0}},[$e.trace]:{title:"Trace analyzer",header:{}},[$e.queryAnalyzer]:{title:"Query analyzer",header:{}},[$e.dashboards]:{title:"Dashboards",...qe},[$e.withTemplate]:{title:"WITH templates",header:{}},[$e.relabel]:{title:"Metric relabel debug",header:{}},[$e.logs]:{title:"Logs Explorer",header:{}},[$e.activeQueries]:{title:"Active Queries",header:{}},[$e.icons]:{title:"Icons",header:{}},[$e.anomaly]:{title:"Anomaly exploration",...qe},[$e.query]:{title:"Query",...qe}},We=$e,Ke=()=>{var e;const t=(null===(e=document.getElementById("root"))||void 0===e?void 0:e.dataset.params)||"{}";try{return JSON.parse(t)}catch(Lp){return console.error(Lp),{}}},Qe=()=>!!Object.keys(Ke()).length,Ze=/(\/select\/)(\d+|\d.+)(\/)(.+)/,Ge=(e,t)=>e.replace(Ze,"$1".concat(t,"/$4")),Je=e=>{var t;return(null===(t=e.match(Ze))||void 0===t?void 0:t[2])||""},Xe=(e,t)=>{t?window.localStorage.setItem(e,JSON.stringify({value:t})):tt([e]),window.dispatchEvent(new Event("storage"))},et=e=>{const t=window.localStorage.getItem(e);if(null!==t)try{var n;return null===(n=JSON.parse(t))||void 0===n?void 0:n.value}catch(Lp){return t}},tt=e=>e.forEach((e=>window.localStorage.removeItem(e))),{REACT_APP_TYPE:nt}={};var rt=n(215),at=n.n(rt),ot=n(424),it=n.n(ot);const lt={table:100,chart:20,code:1e3},st=[{id:"small",isDefault:!0,height:()=>.2*window.innerHeight},{id:"medium",height:()=>.4*window.innerHeight},{id:"large",height:()=>.8*window.innerHeight}],ct=["min","median","max"],ut=(e,t)=>{const n=window.location.hash.split("?")[1],r=at().parse(n,{ignoreQueryPrefix:!0});return it()(r,e,t||"")},dt=()=>{var e;const t=(null===(e=(window.location.hash.split("?")[1]||"").match(/g\d+\.expr/g))||void 0===e?void 0:e.length)||1;return new Array(t>10?10:t).fill(1).map(((e,t)=>ut("g".concat(t,".expr"),"")))};let ht=function(e){return e.yhat="yhat",e.yhatUpper="yhat_upper",e.yhatLower="yhat_lower",e.anomaly="vmui_anomalies_points",e.training="vmui_training_data",e.actual="actual",e.anomalyScore="anomaly_score",e}({}),mt=function(e){return e.table="table",e.chart="chart",e.code="code",e}({}),pt=function(e){return e.emptyServer="Please enter Server URL",e.validServer="Please provide a valid Server URL",e.validQuery="Please enter a valid Query and execute it",e.traceNotFound="Not found the tracing information",e.emptyTitle="Please enter title",e.positiveNumber="Please enter positive number",e.validStep="Please enter a valid step",e.unknownType="Unknown server response format: must have 'errorType'",e}({}),ft=function(e){return e.system="system",e.light="light",e.dark="dark",e}({}),vt=function(e){return e.empty="empty",e.metricsql="metricsql",e.label="label",e.labelValue="labelValue",e}({});const gt=e=>getComputedStyle(document.documentElement).getPropertyValue("--".concat(e)),yt=(e,t)=>{document.documentElement.style.setProperty("--".concat(e),t)},_t=()=>window.matchMedia("(prefers-color-scheme: dark)").matches,bt=e=>{let t;try{t=new URL(e)}catch(n){return!1}return"http:"===t.protocol||"https:"===t.protocol},wt=e=>e.replace(/\/$/,""),kt=ut("g0.tenantID",""),xt={serverUrl:wt((e=>{const{serverURL:t}=Ke(),n=et("SERVER_URL"),r=window.location.href.replace(/\/(select\/)?(vmui)\/.*/,""),a="".concat(window.location.origin).concat(window.location.pathname.replace(/^\/vmui/,"")),o=window.location.href.replace(/\/(?:prometheus\/)?(?:graph|vmui)\/.*/,"/prometheus"),i=t||n||o;switch(nt){case Ve.logs:return r;case Ve.anomaly:return n||a;default:return e?Ge(i,e):i}})(kt)),tenantId:kt,theme:et("THEME")||ft.system,isDarkTheme:null};function St(e,t){switch(t.type){case"SET_SERVER":return{...e,serverUrl:wt(t.payload)};case"SET_TENANT_ID":return{...e,tenantId:t.payload};case"SET_THEME":return Xe("THEME",t.payload),{...e,theme:t.payload};case"SET_DARK_THEME":return{...e,isDarkTheme:(n=e.theme,n===ft.system&&_t()||n===ft.dark)};default:throw new Error}var n}var Ct=n(746);var Et=0;Array.isArray;function Nt(e,t,n,r,a,o){t||(t={});var i,l,s=t;if("ref"in s)for(l in s={},t)"ref"==l?i=t[l]:s[l]=t[l];var c={type:e,props:s,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--Et,__i:-1,__u:0,__source:a,__self:o};if("function"==typeof e&&(i=e.defaultProps))for(l in i)void 0===s[l]&&(s[l]=i[l]);return Ct.fF.vnode&&Ct.fF.vnode(c),c}const At=(0,r.createContext)({}),Mt=()=>(0,r.useContext)(At).state,Tt=()=>(0,r.useContext)(At).dispatch,Lt=Object.entries(xt).reduce(((e,t)=>{let[n,r]=t;return{...e,[n]:ut(n)||r}}),{}),It="YYYY-MM-DD",Pt="YYYY-MM-DD HH:mm:ss",Ot="YYYY-MM-DD HH:mm:ss:SSS (Z)",Rt="YYYY-MM-DD[T]HH:mm:ss",Dt="YYYY-MM-DD_HHmmss",zt=window.innerWidth/4,Ft=window.innerWidth/40,jt=1,Ht=1578e8,Vt=Intl.supportedValuesOf,$t=Vt?Vt("timeZone"):["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Katmandu","Asia/Khandyga","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis"],Ut=[{long:"years",short:"y",possible:"year"},{long:"weeks",short:"w",possible:"week"},{long:"days",short:"d",possible:"day"},{long:"hours",short:"h",possible:"hour"},{long:"minutes",short:"m",possible:"min"},{long:"seconds",short:"s",possible:"sec"},{long:"milliseconds",short:"ms",possible:"millisecond"}],Bt=Ut.map((e=>e.short)),qt=e=>Math.round(1e3*e)/1e3,Yt=e=>en(o().duration(e,"seconds").asMilliseconds()),Wt=e=>{let t=qt(e);const n=Math.round(e);e>=100&&(t=n-n%10),e<100&&e>=10&&(t=n-n%5),e<10&&e>=1&&(t=n),e<1&&e>.01&&(t=Math.round(40*e)/40);return Yt(t||.001).replace(/\s/g,"")},Kt=e=>{const t=e.match(/\d+/g),n=e.match(/[a-zA-Z]+/g);if(n&&t&&Bt.includes(n[0]))return{[n[0]]:t[0]}},Qt=e=>{const t=Ut.map((e=>e.short)).join("|"),n=new RegExp("\\d+(\\.\\d+)?[".concat(t,"]+"),"g"),r=(e.match(n)||[]).reduce(((e,t)=>{const n=Kt(t);return n?{...e,...n}:{...e}}),{});return o().duration(r).asSeconds()},Zt=(e,t)=>Wt(e/(t?Ft:zt)),Gt=(e,t)=>{const n=(t||o()().toDate()).valueOf()/1e3,r=Qt(e);return{start:n-r,end:n,step:Zt(r),date:Jt(t||o()().toDate())}},Jt=e=>o().tz(e).utc().format(Rt),Xt=e=>o().tz(e).format(Rt),en=e=>{const t=Math.floor(e%1e3),n=Math.floor(e/1e3%60),r=Math.floor(e/1e3/60%60),a=Math.floor(e/1e3/3600%24),o=Math.floor(e/864e5),i=["d","h","m","s","ms"],l=[o,a,r,n,t].map(((e,t)=>e?"".concat(e).concat(i[t]):""));return l.filter((e=>e)).join("")},tn=e=>{const t=o()(1e3*e);return t.isValid()?t.toDate():new Date},nn={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE===Ve.logs,rn=[{title:"Last 5 minutes",duration:"5m",isDefault:nn},{title:"Last 15 minutes",duration:"15m"},{title:"Last 30 minutes",duration:"30m",isDefault:!nn},{title:"Last 1 hour",duration:"1h"},{title:"Last 3 hours",duration:"3h"},{title:"Last 6 hours",duration:"6h"},{title:"Last 12 hours",duration:"12h"},{title:"Last 24 hours",duration:"24h"},{title:"Last 2 days",duration:"2d"},{title:"Last 7 days",duration:"7d"},{title:"Last 30 days",duration:"30d"},{title:"Last 90 days",duration:"90d"},{title:"Last 180 days",duration:"180d"},{title:"Last 1 year",duration:"1y"},{title:"Yesterday",duration:"1d",until:()=>o()().tz().subtract(1,"day").endOf("day").toDate()},{title:"Today",duration:"1d",until:()=>o()().tz().endOf("day").toDate()}].map((e=>({id:e.title.replace(/\s/g,"_").toLocaleLowerCase(),until:e.until?e.until:()=>o()().tz().toDate(),...e}))),an=e=>{var t;let{relativeTimeId:n,defaultDuration:r,defaultEndInput:a}=e;const o=null===(t=rn.find((e=>e.isDefault)))||void 0===t?void 0:t.id,i=n||ut("g0.relative_time",o),l=rn.find((e=>e.id===i));return{relativeTimeId:l?i:"none",duration:l?l.duration:r,endInput:l?l.until():a}},on=e=>{const t=o()().tz(e);return"UTC".concat(t.format("Z"))},ln=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=new RegExp(e,"i");return $t.reduce(((n,r)=>{const a=(r.match(/^(.*?)\//)||[])[1]||"unknown",o=on(r),i=o.replace(/UTC|0/,""),l=r.replace(/[/_]/g," "),s={region:r,utc:o,search:"".concat(r," ").concat(o," ").concat(l," ").concat(i)},c=!e||e&&t.test(s.search);return c&&n[a]?n[a].push(s):c&&(n[a]=[s]),n}),{})},sn=e=>{o().tz.setDefault(e)},cn=()=>{const e=o().tz.guess(),t=(e=>{try{return o()().tz(e),!0}catch(Lp){return!1}})(e);return{isValid:t,title:t?"Browser Time (".concat(e,")"):"Browser timezone (UTC)",region:t?e:"UTC"}},un=et("TIMEZONE")||cn().region;sn(un);const dn=()=>{const e=ut("g0.range_input"),{duration:t,endInput:n,relativeTimeId:r}=an({defaultDuration:e||"1h",defaultEndInput:(a=ut("g0.end_input",o()().utc().format(Rt)),o()(a).utcOffset(0,!0).toDate()),relativeTimeId:e?ut("g0.relative_time","none"):void 0});var a;return{duration:t,period:Gt(t,n),relativeTime:r}},hn={...dn(),timezone:un};function mn(e,t){switch(t.type){case"SET_TIME_STATE":return{...e,...t.payload};case"SET_DURATION":return{...e,duration:t.payload,period:Gt(t.payload,tn(e.period.end)),relativeTime:"none"};case"SET_RELATIVE_TIME":return{...e,duration:t.payload.duration,period:Gt(t.payload.duration,t.payload.until),relativeTime:t.payload.id};case"SET_PERIOD":const n=(e=>{const t=e.to.valueOf()-e.from.valueOf();return en(t)})(t.payload);return{...e,duration:n,period:Gt(n,t.payload.to),relativeTime:"none"};case"RUN_QUERY":const{duration:r,endInput:a}=an({relativeTimeId:e.relativeTime,defaultDuration:e.duration,defaultEndInput:tn(e.period.end)});return{...e,period:Gt(r,a)};case"RUN_QUERY_TO_NOW":return{...e,period:Gt(e.duration)};case"SET_TIMEZONE":return sn(t.payload),Xe("TIMEZONE",t.payload),e.defaultTimezone&&Xe("DISABLED_DEFAULT_TIMEZONE",t.payload!==e.defaultTimezone),{...e,timezone:t.payload};case"SET_DEFAULT_TIMEZONE":return{...e,defaultTimezone:t.payload};default:throw new Error}}const pn=(0,r.createContext)({}),fn=()=>(0,r.useContext)(pn).state,vn=()=>(0,r.useContext)(pn).dispatch,gn=e=>{const t=et(e);return t?JSON.parse(t):[]},yn=50,_n=1e3,bn=1e3;const wn=dt(),kn={query:wn,queryHistory:wn.map((e=>({index:0,values:[e]}))),autocomplete:et("AUTOCOMPLETE")||!1,autocompleteQuick:!1,autocompleteCache:new class{constructor(){this.maxSize=void 0,this.map=void 0,this.maxSize=bn,this.map=new Map}get(e){for(const[t,n]of this.map){const r=JSON.parse(t),a=r.start===e.start&&r.end===e.end,o=r.type===e.type,i=e.value&&r.value&&e.value.includes(r.value),l=r.match===e.match||i,s=n.length<_n;if(l&&a&&o&&s)return n}return this.map.get(JSON.stringify(e))}put(e,t){if(this.map.size>=this.maxSize){const e=this.map.keys().next().value;this.map.delete(e)}this.map.set(JSON.stringify(e),t)}},metricsQLFunctions:[]};function xn(e,t){switch(t.type){case"SET_QUERY":return{...e,query:t.payload.map((e=>e))};case"SET_QUERY_HISTORY":return(e=>{const t=e.map((e=>e.values[e.index])),n=gn("QUERY_HISTORY");n[0]||(n[0]=[]);const r=n[0];t.forEach((e=>{!r.includes(e)&&e&&r.unshift(e),r.length>250&&r.shift()})),Xe("QUERY_HISTORY",JSON.stringify(n))})(t.payload),{...e,queryHistory:t.payload};case"SET_QUERY_HISTORY_BY_INDEX":return e.queryHistory.splice(t.payload.queryNumber,1,t.payload.value),{...e,queryHistory:e.queryHistory};case"TOGGLE_AUTOCOMPLETE":return Xe("AUTOCOMPLETE",!e.autocomplete),{...e,autocomplete:!e.autocomplete};case"SET_AUTOCOMPLETE_QUICK":return{...e,autocompleteQuick:t.payload};case"SET_AUTOCOMPLETE_CACHE":return e.autocompleteCache.put(t.payload.key,t.payload.value),{...e};case"SET_METRICSQL_FUNCTIONS":return{...e,metricsQLFunctions:t.payload};default:throw new Error}}const Sn=(0,r.createContext)({}),Cn=()=>(0,r.useContext)(Sn).state,En=()=>(0,r.useContext)(Sn).dispatch,Nn=()=>Nt("svg",{viewBox:"0 0 74 24",fill:"currentColor",children:Nt("path",{d:"M6.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29C15.73 4.1 12.46 3.01 7.43 3h-.06C2.33 3-.93 4.1.24 5.18c0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a454.94 454.94 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44a454.4 454.4 0 0 0 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM35 5l-5.84 14.46h-2.43L20.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H35Zm17.18 0v14.46H49.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L38.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H36.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15Z"})}),An=()=>Nt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:[Nt("path",{d:"M11.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29 1.17-1.09-2.1-2.17-7.13-2.18h-.06c-5.04 0-8.3 1.1-7.13 2.18 0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a455.13 455.13 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44 2.05-1.82 4.09-3.65 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM40 5l-5.84 14.46h-2.43L25.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H40Zm17.18 0v14.46H54.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L43.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H41.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15ZM1.73 36v-5.17l-.67-.07a.6.6 0 0 1-.21-.1.23.23 0 0 1-.08-.18v-.44h.96v-.59c0-.34.05-.65.14-.92a1.79 1.79 0 0 1 1.08-1.11 2.45 2.45 0 0 1 1.62-.02l-.03.53c0 .1-.06.15-.16.16H4c-.18 0-.35.03-.5.08a.95.95 0 0 0-.39.23c-.1.11-.19.25-.25.43-.05.18-.08.4-.08.65v.56h1.75v.78H2.8V36H1.73Zm6.17-6.17c.45 0 .85.07 1.2.22a2.57 2.57 0 0 1 1.5 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.86-.07-1.22-.21a2.57 2.57 0 0 1-1.5-1.62c-.12-.38-.19-.81-.19-1.3 0-.47.07-.9.2-1.28a2.57 2.57 0 0 1 1.5-1.62c.35-.15.76-.22 1.2-.22Zm0 5.42c.6 0 1.05-.2 1.35-.6.3-.4.44-.97.44-1.69s-.15-1.28-.44-1.69c-.3-.4-.75-.6-1.35-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.33.73-.08.28-.11.6-.11.96 0 .72.15 1.29.44 1.69.3.4.76.6 1.36.6Zm5.26-4.11c.2-.42.43-.74.71-.97.28-.24.62-.36 1.03-.36.13 0 .25.02.36.05.12.02.23.07.32.13l-.08.8c-.02.1-.08.15-.18.15l-.24-.04a1.7 1.7 0 0 0-.88.05c-.15.05-.29.14-.4.25-.12.1-.23.24-.32.4-.1.17-.18.35-.26.56V36h-1.07v-6.08h.61c.12 0 .2.02.24.07.05.04.08.12.1.23l.06.92Zm13.73-3.82L23.39 36h-1.46l-3.5-8.68h1.29a.54.54 0 0 1 .54.37l2.04 5.3a11.31 11.31 0 0 1 .37 1.21 11.65 11.65 0 0 1 .35-1.22l2.03-5.29c.03-.1.1-.18.19-.25.1-.08.21-.12.35-.12h1.3Zm2.2 2.52V36H27.6v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.08.36a1 1 0 0 1-.51.5.96.96 0 0 1-.73 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .37.08c.12.05.22.11.3.2a.94.94 0 0 1 .3.67Zm5.72 3.1a.68.68 0 0 1-.13.13c-.04.03-.1.05-.18.05a.42.42 0 0 1-.22-.07 3.95 3.95 0 0 0-.62-.31c-.14-.05-.3-.07-.51-.07-.26 0-.5.04-.69.14-.2.1-.36.23-.49.4-.13.18-.22.4-.29.64-.06.25-.1.53-.1.85 0 .33.04.62.1.88.08.25.18.47.32.64.13.18.29.3.48.4.18.09.4.13.63.13a1.6 1.6 0 0 0 .94-.27l.26-.2a.4.4 0 0 1 .25-.09.3.3 0 0 1 .27.14l.43.54a2.76 2.76 0 0 1-1.77.96c-.22.03-.43.05-.65.05a2.57 2.57 0 0 1-1.96-.83c-.25-.28-.45-.6-.6-1-.14-.4-.21-.85-.21-1.35 0-.45.06-.87.2-1.25a2.61 2.61 0 0 1 1.51-1.67c.37-.16.8-.24 1.28-.24.46 0 .86.07 1.2.22.35.15.66.36.94.64l-.4.54Zm3.43 4.95c-.54 0-.95-.15-1.24-.45-.28-.3-.42-.73-.42-1.26v-3.44h-.63a.29.29 0 0 1-.2-.07c-.06-.06-.09-.13-.09-.24v-.59l.99-.16.31-1.68a.33.33 0 0 1 .12-.18.34.34 0 0 1 .21-.07h.77v1.94h1.64v1.05h-1.64v3.34c0 .2.05.34.14.45.1.1.22.16.39.16a.73.73 0 0 0 .39-.1l.12-.07a.2.2 0 0 1 .11-.03c.05 0 .08.01.11.03l.09.1.44.72c-.21.18-.46.32-.74.4-.28.1-.57.15-.87.15Zm5.09-6.35c.46 0 .87.07 1.24.22a2.7 2.7 0 0 1 1.58 1.63c.14.39.22.83.22 1.31 0 .49-.08.93-.22 1.32-.14.4-.35.73-.62 1-.26.28-.58.49-.96.64-.37.15-.78.22-1.24.22a3.4 3.4 0 0 1-1.25-.22 2.71 2.71 0 0 1-1.59-1.64 3.8 3.8 0 0 1-.21-1.32c0-.48.07-.92.21-1.31a2.75 2.75 0 0 1 1.58-1.63c.38-.15.8-.22 1.26-.22Zm0 5.2c.51 0 .89-.17 1.13-.52.25-.34.38-.84.38-1.5a2.6 2.6 0 0 0-.38-1.53c-.24-.34-.62-.52-1.13-.52-.52 0-.9.18-1.16.53-.25.35-.37.85-.37 1.51s.12 1.17.37 1.51c.25.35.64.52 1.16.52Zm5.56-4.04c.2-.37.42-.65.69-.86.26-.21.57-.32.94-.32.28 0 .5.06.68.19l-.1 1.1a.3.3 0 0 1-.09.16.24.24 0 0 1-.15.04 1.8 1.8 0 0 1-.27-.03 2.01 2.01 0 0 0-.34-.03c-.16 0-.3.03-.44.08a1.1 1.1 0 0 0-.34.2c-.1.1-.2.2-.27.33-.08.13-.15.27-.22.44V36H47.7v-6.16h.87c.15 0 .26.03.31.09.06.05.1.15.13.29l.09.7Zm4.62-1.07V36h-1.49v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.07.36a1 1 0 0 1-.51.5.96.96 0 0 1-.74 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .38.08c.11.05.21.11.3.2a.94.94 0 0 1 .28.67Zm4.56 5.32a7.8 7.8 0 0 0-1.08.12c-.29.05-.52.12-.7.2a.92.92 0 0 0-.38.3.64.64 0 0 0-.11.36c0 .26.07.45.23.56.15.11.35.17.6.17.3 0 .57-.06.79-.17.22-.1.44-.28.65-.5v-1.04Zm-3.4-2.67c.71-.65 1.57-.97 2.56-.97.36 0 .68.06.97.18a1.99 1.99 0 0 1 1.16 1.24c.1.3.16.61.16.96V36h-.67a.7.7 0 0 1-.33-.06c-.07-.04-.13-.13-.18-.26l-.13-.44c-.16.14-.3.26-.46.37a2.8 2.8 0 0 1-.97.43 2.77 2.77 0 0 1-1.32-.05 1.62 1.62 0 0 1-.57-.31 1.41 1.41 0 0 1-.38-.53 1.85 1.85 0 0 1-.05-1.18c.05-.16.14-.3.25-.45.12-.14.28-.27.46-.4a3 3 0 0 1 .7-.32 9.19 9.19 0 0 1 2.2-.33v-.36c0-.41-.09-.71-.26-.91-.18-.2-.43-.3-.76-.3a1.84 1.84 0 0 0-1.02.28l-.33.18c-.1.06-.2.09-.32.09-.1 0-.2-.03-.27-.08a.72.72 0 0 1-.17-.2l-.26-.47Zm11.49 4.32V36h-4.88v-8.6h1.16v7.62h3.72Zm3.16-5.2c.44 0 .84.08 1.2.23a2.57 2.57 0 0 1 1.49 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.85-.07-1.21-.21a2.57 2.57 0 0 1-1.5-1.62c-.13-.38-.2-.81-.2-1.3 0-.47.07-.9.2-1.28.14-.39.33-.72.59-1 .25-.26.55-.47.9-.62.37-.15.77-.22 1.22-.22Zm0 5.43c.6 0 1.05-.2 1.34-.6.3-.4.45-.97.45-1.69s-.15-1.28-.45-1.69c-.3-.4-.74-.6-1.34-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.34.73-.07.28-.1.6-.1.96 0 .72.14 1.29.44 1.69.3.4.75.6 1.36.6Zm6.33-2.22c.22 0 .4-.03.57-.09.16-.06.3-.14.41-.25.12-.11.2-.24.26-.39.05-.15.08-.31.08-.5 0-.37-.11-.66-.34-.88-.23-.22-.55-.33-.98-.33-.43 0-.76.1-.99.33-.22.22-.34.51-.34.89 0 .18.03.34.09.5a1.1 1.1 0 0 0 .67.63c.16.06.35.09.57.09Zm1.93 3.3a.51.51 0 0 0-.13-.36.84.84 0 0 0-.34-.22 8.57 8.57 0 0 0-1.73-.2 7.5 7.5 0 0 1-.62-.05c-.23.1-.41.23-.56.4a.8.8 0 0 0-.1.92c.07.12.18.22.32.3.14.1.32.16.54.21a3.5 3.5 0 0 0 1.55 0c.23-.05.42-.12.57-.22.16-.1.29-.21.37-.34a.8.8 0 0 0 .13-.44Zm1.08-6.17v.4c0 .13-.08.21-.25.25l-.69.09c.14.26.2.56.2.88a1.86 1.86 0 0 1-1.36 1.82 3.07 3.07 0 0 1-1.72.04c-.12.08-.22.16-.29.25a.44.44 0 0 0-.1.27c0 .15.06.26.17.33.12.08.28.13.47.16a5 5 0 0 0 .66.06 16.56 16.56 0 0 1 1.5.13c.26.05.48.12.67.22.19.1.34.24.46.41.12.18.18.4.18.69 0 .26-.07.5-.2.75s-.31.46-.56.65c-.24.2-.54.34-.9.46a4.57 4.57 0 0 1-2.36.04c-.33-.09-.6-.2-.82-.36a1.56 1.56 0 0 1-.5-.51c-.1-.2-.16-.4-.16-.6 0-.3.1-.56.28-.77.19-.2.45-.37.77-.5a1.15 1.15 0 0 1-.43-.32.88.88 0 0 1-.15-.54c0-.09.01-.18.04-.27.04-.1.08-.2.15-.28a1.55 1.55 0 0 1 .58-.5c-.3-.16-.53-.39-.7-.66-.17-.28-.25-.6-.25-.97 0-.3.05-.57.16-.8.12-.25.28-.46.48-.63.2-.17.45-.3.73-.4a3 3 0 0 1 2.3.21h1.64Zm4.65.76a.24.24 0 0 1-.23.14.42.42 0 0 1-.2-.07 3.59 3.59 0 0 0-.67-.3 1.8 1.8 0 0 0-1.03 0c-.14.05-.27.11-.37.2a.87.87 0 0 0-.23.27.75.75 0 0 0-.08.35c0 .15.04.28.13.39.1.1.21.19.36.27.15.07.32.14.5.2a13.63 13.63 0 0 1 1.16.4c.2.08.36.18.5.3a1.33 1.33 0 0 1 .5 1.07 2 2 0 0 1-.15.78c-.1.24-.25.44-.45.62-.2.17-.43.3-.72.4a3.1 3.1 0 0 1-2.14-.05 2.97 2.97 0 0 1-.87-.53l.25-.41c.04-.05.07-.1.12-.12a.3.3 0 0 1 .17-.04.4.4 0 0 1 .22.08l.3.19a1.91 1.91 0 0 0 1.03.27c.2 0 .38-.03.54-.08.16-.06.29-.13.4-.22a.96.96 0 0 0 .3-.7c0-.17-.05-.31-.14-.42-.09-.11-.2-.2-.36-.28a2.6 2.6 0 0 0-.5-.2l-.59-.19c-.2-.06-.39-.14-.58-.22a2.14 2.14 0 0 1-.5-.3 1.45 1.45 0 0 1-.36-.46c-.1-.19-.14-.41-.14-.67a1.6 1.6 0 0 1 .57-1.23c.18-.16.4-.3.68-.39.26-.1.57-.14.91-.14a2.84 2.84 0 0 1 1.9.7l-.23.4Z"}),Nt("defs",{children:Nt("path",{d:"M0 0h85v38H0z"})})]}),Mn=()=>Nt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:Nt("path",{d:"M11.118 10.476c.36.28.801.433 1.257.436h.052c.48-.007.961-.192 1.25-.444 1.509-1.279 5.88-5.287 5.88-5.287 1.168-1.087-2.093-2.174-7.13-2.181h-.06c-5.036.007-8.298 1.094-7.13 2.181 0 0 4.372 4.008 5.88 5.295zm2.559 2.166c-.359.283-.801.439-1.258.444h-.044a2.071 2.071 0 0 1-1.257-.444C10.082 11.755 6.384 8.42 5 7.148v1.93c0 .215.081.496.222.629l.07.064c1.045.955 4.546 4.154 5.825 5.245.358.283.8.438 1.257.444h.044c.489-.015.962-.2 1.258-.444 1.309-1.11 4.948-4.444 5.887-5.31.148-.132.222-.413.222-.628v-1.93a455.127 455.127 0 0 1-6.11 5.494zm-1.258 4.984a2.071 2.071 0 0 0 1.258-.436c2.053-1.815 4.09-3.65 6.11-5.502v1.938c0 .207-.075.488-.223.621-.94.873-4.578 4.2-5.887 5.31-.296.25-.77.436-1.258.443h-.044a2.071 2.071 0 0 1-1.257-.436c-1.204-1.027-4.376-3.928-5.616-5.062l-.28-.255c-.14-.133-.221-.414-.221-.621v-1.938c1.383 1.265 5.081 4.607 6.117 5.495.358.282.8.438 1.257.443h.044zM40 5l-5.84 14.46h-2.43L25.89 5h2.16c.233 0 .423.057.57.17.146.113.256.26.33.44l3.41 8.82c.113.287.22.603.32.95.106.34.206.697.3 1.07.08-.373.166-.73.26-1.07a8.84 8.84 0 0 1 .31-.95l3.39-8.82a.959.959 0 0 1 .31-.42.906.906 0 0 1 .58-.19H40zm17.176 0v14.46h-2.37v-9.34c0-.373.02-.777.06-1.21l-4.37 8.21c-.206.393-.523.59-.95.59h-.38c-.426 0-.743-.197-.95-.59l-4.42-8.24c.02.22.037.437.05.65.014.213.02.41.02.59v9.34h-2.37V5h2.03c.12 0 .224.003.31.01a.778.778 0 0 1 .23.05c.074.027.137.07.19.13.06.06.117.14.17.24l4.33 8.03c.114.213.217.433.31.66.1.227.197.46.29.7.094-.247.19-.483.29-.71.1-.233.207-.457.32-.67l4.27-8.01c.054-.1.11-.18.17-.24a.57.57 0 0 1 .19-.13.903.903 0 0 1 .24-.05c.087-.007.19-.01.31-.01h2.03zm8.887 13.73c.68 0 1.286-.117 1.82-.35.54-.24.996-.57 1.37-.99a4.28 4.28 0 0 0 .85-1.48c.2-.573.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.124 1.51-.37 2.19a5.248 5.248 0 0 1-1.07 1.77c-.46.5-1.024.893-1.69 1.18-.66.287-1.404.43-2.23.43-.827 0-1.574-.143-2.24-.43a5.012 5.012 0 0 1-1.69-1.18 5.33 5.33 0 0 1-1.06-1.77 6.373 6.373 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.096 1.277.29 1.85.2.567.483 1.06.85 1.48.373.42.826.75 1.36.99.54.24 1.15.36 1.83.36zm10.38.73h-1.03V5.31h1.03v14.15zM4.242 35v-5.166l-.672-.078a.595.595 0 0 1-.21-.09.23.23 0 0 1-.078-.186v-.438h.96v-.588c0-.348.048-.656.144-.924.1-.272.24-.5.42-.684a1.79 1.79 0 0 1 .66-.426c.256-.096.544-.144.864-.144.272 0 .522.04.75.12l-.024.534c-.008.096-.062.148-.162.156a4.947 4.947 0 0 1-.39.012c-.184 0-.352.024-.504.072a.949.949 0 0 0-.384.234c-.108.108-.192.25-.252.426a2.184 2.184 0 0 0-.084.654v.558h1.752v.774H5.316V35H4.242zM10.416 28.826a3.1 3.1 0 0 1 1.2.222c.356.148.66.358.912.63s.444.602.576.99c.136.384.204.814.204 1.29 0 .48-.068.912-.204 1.296a2.735 2.735 0 0 1-.576.984 2.572 2.572 0 0 1-.912.63 3.175 3.175 0 0 1-1.2.216c-.448 0-.852-.072-1.212-.216a2.572 2.572 0 0 1-.912-.63 2.805 2.805 0 0 1-.582-.984 3.972 3.972 0 0 1-.198-1.296c0-.476.066-.906.198-1.29.136-.388.33-.718.582-.99.252-.272.556-.482.912-.63.36-.148.764-.222 1.212-.222zm0 5.424c.6 0 1.048-.2 1.344-.6.296-.404.444-.966.444-1.686 0-.724-.148-1.288-.444-1.692-.296-.404-.744-.606-1.344-.606-.304 0-.57.052-.798.156a1.507 1.507 0 0 0-.564.45c-.148.196-.26.438-.336.726a3.941 3.941 0 0 0-.108.966c0 .72.148 1.282.444 1.686.3.4.754.6 1.362.6zM15.677 30.14c.192-.416.428-.74.708-.972.28-.236.622-.354 1.026-.354.128 0 .25.014.366.042.12.028.226.072.318.132l-.078.798c-.024.1-.084.15-.18.15-.056 0-.138-.012-.246-.036a1.694 1.694 0 0 0-.366-.036c-.192 0-.364.028-.516.084-.148.056-.282.14-.402.252a1.782 1.782 0 0 0-.318.408c-.092.16-.176.344-.252.552V35h-1.074v-6.078h.612c.116 0 .196.022.24.066.044.044.074.12.09.228l.072.924zM26.761 28.922 24.283 35h-.96l-2.478-6.078h.87a.33.33 0 0 1 .33.222l1.542 3.912c.048.148.09.292.126.432.036.14.07.28.102.42.032-.14.066-.28.102-.42.036-.14.08-.284.132-.432l1.56-3.912a.33.33 0 0 1 .12-.156.311.311 0 0 1 .198-.066h.834zM27.74 35v-6.078h.643c.152 0 .246.074.282.222l.078.624c.224-.276.476-.502.756-.678.28-.176.604-.264.972-.264.408 0 .738.114.99.342.256.228.44.536.552.924.088-.22.2-.41.336-.57a1.987 1.987 0 0 1 1.014-.624c.196-.048.394-.072.594-.072.32 0 .604.052.852.156.252.1.464.248.636.444.176.196.31.438.402.726.092.284.138.61.138.978V35H34.91v-3.87c0-.476-.104-.836-.312-1.08-.208-.248-.508-.372-.9-.372-.176 0-.344.032-.504.096-.156.06-.294.15-.414.27-.12.12-.216.272-.288.456-.068.18-.102.39-.102.63V35h-1.074v-3.87c0-.488-.098-.852-.294-1.092-.196-.24-.482-.36-.858-.36-.264 0-.508.072-.732.216a2.38 2.38 0 0 0-.618.576V35H27.74zM40.746 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM44.974 29.6c.124-.124.254-.238.39-.342a2.395 2.395 0 0 1 .936-.444c.176-.044.368-.066.576-.066.336 0 .634.058.894.174.26.112.476.272.648.48.176.204.308.45.396.738.092.284.138.598.138.942V35H47.47v-3.918c0-.376-.086-.666-.258-.87-.172-.208-.434-.312-.786-.312-.256 0-.496.058-.72.174a2.58 2.58 0 0 0-.636.474V35h-1.482v-6.156h.906c.192 0 .318.09.378.27l.102.486zM53.085 28.748c.456 0 .87.074 1.242.222a2.692 2.692 0 0 1 1.578 1.626c.144.392.216.83.216 1.314 0 .488-.072.928-.216 1.32-.144.392-.35.726-.618 1.002a2.653 2.653 0 0 1-.96.636 3.333 3.333 0 0 1-1.242.222c-.46 0-.878-.074-1.254-.222a2.712 2.712 0 0 1-.966-.636 2.922 2.922 0 0 1-.618-1.002 3.807 3.807 0 0 1-.216-1.32c0-.484.072-.922.216-1.314.148-.392.354-.724.618-.996.268-.272.59-.482.966-.63a3.397 3.397 0 0 1 1.254-.222zm0 5.202c.512 0 .89-.172 1.134-.516.248-.344.372-.848.372-1.512s-.124-1.17-.372-1.518c-.244-.348-.622-.522-1.134-.522-.52 0-.906.176-1.158.528-.248.348-.372.852-.372 1.512s.124 1.164.372 1.512c.252.344.638.516 1.158.516zM57.252 35v-6.156h.906c.192 0 .318.09.378.27l.096.456c.108-.12.22-.23.336-.33a2.017 2.017 0 0 1 1.32-.492c.388 0 .706.106.954.318.252.208.44.486.564.834a1.93 1.93 0 0 1 .834-.882c.172-.092.354-.16.546-.204.196-.044.392-.066.588-.066.34 0 .642.052.906.156.264.104.486.256.666.456.18.2.316.444.408.732.096.288.144.618.144.99V35h-1.482v-3.918c0-.392-.086-.686-.258-.882-.172-.2-.424-.3-.756-.3-.152 0-.294.026-.426.078a1.026 1.026 0 0 0-.342.228 1.019 1.019 0 0 0-.228.366 1.435 1.435 0 0 0-.084.51V35h-1.488v-3.918c0-.412-.084-.712-.252-.9-.164-.188-.406-.282-.726-.282-.216 0-.418.054-.606.162a1.979 1.979 0 0 0-.516.432V35h-1.482zM70.558 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM74.9 26.084V35h-1.482v-8.916H74.9zM81.969 28.844l-3.354 7.848a.538.538 0 0 1-.174.234c-.068.056-.174.084-.318.084h-1.104l1.152-2.472-2.49-5.694h1.302c.116 0 .206.028.27.084.068.056.118.12.15.192l1.308 3.192c.044.108.08.216.108.324.032.108.062.218.09.33a32.3 32.3 0 0 1 .108-.33c.036-.112.076-.222.12-.33l1.236-3.186a.437.437 0 0 1 .408-.276h1.188z"})}),Tn=()=>Nt("svg",{viewBox:"0 0 15 17",fill:"currentColor",children:Nt("path",{d:"M6.11767 7.47586C6.47736 7.75563 6.91931 7.90898 7.37503 7.91213H7.42681C7.90756 7.90474 8.38832 7.71987 8.67677 7.46846C10.1856 6.18921 14.5568 2.18138 14.5568 2.18138C15.7254 1.09438 12.4637 0.00739 7.42681 0H7.36764C2.3308 0.00739 -0.930935 1.09438 0.237669 2.18138C0.237669 2.18138 4.60884 6.18921 6.11767 7.47586ZM8.67677 9.64243C8.31803 9.92483 7.87599 10.0808 7.41941 10.0861H7.37503C6.91845 10.0808 6.47641 9.92483 6.11767 9.64243C5.0822 8.75513 1.38409 5.42018 0.000989555 4.14832V6.07829C0.000989555 6.29273 0.0823481 6.57372 0.222877 6.70682L0.293316 6.7712L0.293344 6.77122C1.33784 7.72579 4.83903 10.9255 6.11767 12.0161C6.47641 12.2985 6.91845 12.4545 7.37503 12.4597H7.41941C7.90756 12.4449 8.38092 12.2601 8.67677 12.0161C9.9859 10.9069 13.6249 7.57198 14.5642 6.70682C14.7121 6.57372 14.7861 6.29273 14.7861 6.07829V4.14832C12.7662 5.99804 10.7297 7.82949 8.67677 9.64243ZM7.41941 14.6263C7.87513 14.6232 8.31708 14.4698 8.67677 14.19C10.7298 12.3746 12.7663 10.5407 14.7861 8.68853V10.6259C14.7861 10.8329 14.7121 11.1139 14.5642 11.247C13.6249 12.1196 9.9859 15.4471 8.67677 16.5563C8.38092 16.8077 7.90756 16.9926 7.41941 17H7.37503C6.91931 16.9968 6.47736 16.8435 6.11767 16.5637C4.91427 15.5373 1.74219 12.6364 0.502294 11.5025C0.393358 11.4029 0.299337 11.3169 0.222877 11.247C0.0823481 11.1139 0.000989555 10.8329 0.000989555 10.6259V8.68853C1.38409 9.95303 5.0822 13.2953 6.11767 14.1827C6.47641 14.4651 6.91845 14.6211 7.37503 14.6263H7.41941Z"})}),Ln=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"})}),In=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})}),Pn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8zm-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91z"})}),On=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"})}),Rn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})}),Dn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),zn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})}),Fn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})}),jn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"})}),Hn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m7 10 5 5 5-5z"})}),Vn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[Nt("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),Nt("path",{d:"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"})]}),$n=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"})}),Un=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m22 5.72-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"})}),Bn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"})}),qn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M8 5v14l11-7z"})}),Yn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m10 16.5 6-4.5-6-4.5v9zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"})}),Wn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m3.5 18.49 6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"})}),Kn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M10 10.02h5V21h-5zM17 21h3c1.1 0 2-.9 2-2v-9h-5v11zm3-18H5c-1.1 0-2 .9-2 2v3h19V5c0-1.1-.9-2-2-2zM3 19c0 1.1.9 2 2 2h3V10H3v9z"})}),Qn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})}),Zn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"})}),Gn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})}),Jn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 13H5v-2h14v2z"})}),Xn=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M8.9999 14.7854L18.8928 4.8925C19.0803 4.70497 19.3347 4.59961 19.5999 4.59961C19.8651 4.59961 20.1195 4.70497 20.307 4.8925L21.707 6.2925C22.0975 6.68303 22.0975 7.31619 21.707 7.70672L9.70701 19.7067C9.31648 20.0972 8.68332 20.0972 8.2928 19.7067L2.6928 14.1067C2.50526 13.9192 2.3999 13.6648 2.3999 13.3996C2.3999 13.1344 2.50526 12.88 2.6928 12.6925L4.0928 11.2925C4.48332 10.902 5.11648 10.902 5.50701 11.2925L8.9999 14.7854Z"})}),er=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"})}),tr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"})}),nr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z"})}),rr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"})}),ar=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M20 9H4v2h16V9zM4 15h16v-2H4v2z"})}),or=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"})}),ir=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21 5C19.89 4.65 18.67 4.5 17.5 4.5C15.55 4.5 13.45 4.9 12 6C10.55 4.9 8.45 4.5 6.5 4.5C5.33 4.5 4.11 4.65 3 5C2.25 5.25 1.6 5.55 1 6V20.6C1 20.85 1.25 21.1 1.5 21.1C1.6 21.1 1.65 21.1 1.75 21.05C3.15 20.3 4.85 20 6.5 20C8.2 20 10.65 20.65 12 21.5C13.35 20.65 15.8 20 17.5 20C19.15 20 20.85 20.3 22.25 21.05C22.35 21.1 22.4 21.1 22.5 21.1C22.75 21.1 23 20.85 23 20.6V6C22.4 5.55 21.75 5.25 21 5ZM21 18.5C19.9 18.15 18.7 18 17.5 18C15.8 18 13.35 18.65 12 19.5C10.65 18.65 8.2 18 6.5 18C5.3 18 4.1 18.15 3 18.5V7C4.1 6.65 5.3 6.5 6.5 6.5C8.2 6.5 10.65 7.15 12 8C13.35 7.15 15.8 6.5 17.5 6.5C18.7 6.5 19.9 6.65 21 7V18.5Z"}),Nt("path",{d:"M17.5 10.5C18.38 10.5 19.23 10.59 20 10.76V9.24C19.21 9.09 18.36 9 17.5 9C15.8 9 14.26 9.29 13 9.83V11.49C14.13 10.85 15.7 10.5 17.5 10.5ZM13 12.49V14.15C14.13 13.51 15.7 13.16 17.5 13.16C18.38 13.16 19.23 13.25 20 13.42V11.9C19.21 11.75 18.36 11.66 17.5 11.66C15.8 11.66 14.26 11.96 13 12.49ZM17.5 14.33C15.8 14.33 14.26 14.62 13 15.16V16.82C14.13 16.18 15.7 15.83 17.5 15.83C18.38 15.83 19.23 15.92 20 16.09V14.57C19.21 14.41 18.36 14.33 17.5 14.33Z"}),Nt("path",{d:"M6.5 10.5C5.62 10.5 4.77 10.59 4 10.76V9.24C4.79 9.09 5.64 9 6.5 9C8.2 9 9.74 9.29 11 9.83V11.49C9.87 10.85 8.3 10.5 6.5 10.5ZM11 12.49V14.15C9.87 13.51 8.3 13.16 6.5 13.16C5.62 13.16 4.77 13.25 4 13.42V11.9C4.79 11.75 5.64 11.66 6.5 11.66C8.2 11.66 9.74 11.96 11 12.49ZM6.5 14.33C8.2 14.33 9.74 14.62 11 15.16V16.82C9.87 16.18 8.3 15.83 6.5 15.83C5.62 15.83 4.77 15.92 4 16.09V14.57C4.79 14.41 5.64 14.33 6.5 14.33Z"})]}),lr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3z"})}),sr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 6C9.79 6 8 7.79 8 10H10C10 8.9 10.9 8 12 8C13.1 8 14 8.9 14 10C14 10.8792 13.4202 11.3236 12.7704 11.8217C11.9421 12.4566 11 13.1787 11 15H13C13 13.9046 13.711 13.2833 14.4408 12.6455C15.21 11.9733 16 11.2829 16 10C16 7.79 14.21 6 12 6ZM13 16V18H11V16H13Z"})}),cr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M4 20h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2zM2 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2zm4 1H4V5h2v2zm-2 7h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2z"})}),ur=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})}),dr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"})}),hr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M7 20h4c0 1.1-.9 2-2 2s-2-.9-2-2zm-2-1h8v-2H5v2zm11.5-9.5c0 3.82-2.66 5.86-3.77 6.5H5.27c-1.11-.64-3.77-2.68-3.77-6.5C1.5 5.36 4.86 2 9 2s7.5 3.36 7.5 7.5zm4.87-2.13L20 8l1.37.63L22 10l.63-1.37L24 8l-1.37-.63L22 6l-.63 1.37zM19 6l.94-2.06L22 3l-2.06-.94L19 0l-.94 2.06L16 3l2.06.94L19 6z"})}),mr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M3 14h4v-4H3v4zm0 5h4v-4H3v4zM3 9h4V5H3v4zm5 5h13v-4H8v4zm0 5h13v-4H8v4zM8 5v4h13V5H8z"})}),pr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"})}),fr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"})}),vr=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-error"),children:Nt("path",{d:"M13.5095 4L8.50952 1H7.50952L2.50952 4L2.01953 4.85999V10.86L2.50952 11.71L7.50952 14.71H8.50952L13.5095 11.71L13.9995 10.86V4.85999L13.5095 4ZM7.50952 13.5601L3.00952 10.86V5.69995L7.50952 8.15002V13.5601ZM3.26953 4.69995L8.00952 1.85999L12.7495 4.69995L8.00952 7.29004L3.26953 4.69995ZM13.0095 10.86L8.50952 13.5601V8.15002L13.0095 5.69995V10.86Z"})}),gr=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-primary"),children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2 5H4V4H1.5L1 4.5V12.5L1.5 13H4V12H2V5ZM14.5 4H12V5H14V12H12V13H14.5L15 12.5V4.5L14.5 4ZM11.76 6.56995L12 7V9.51001L11.7 9.95996L7.19995 11.96H6.73999L4.23999 10.46L4 10.03V7.53003L4.30005 7.06995L8.80005 5.06995H9.26001L11.76 6.56995ZM5 9.70996L6.5 10.61V9.28003L5 8.38V9.70996ZM5.57996 7.56006L7.03003 8.43005L10.42 6.93005L8.96997 6.06006L5.57996 7.56006ZM7.53003 10.73L11.03 9.17004V7.77002L7.53003 9.31995V10.73Z"})}),yr=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-warning"),children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 2H8L7 3V6H8V3H14V8H10V9H14L15 8V3L14 2ZM9 6H13V7H9.41L9 6.59V6ZM7 7H2L1 8V13L2 14H8L9 13V8L8 7H7ZM8 13H2V8H8V9V13ZM3 9H7V10H3V9ZM3 11H7V12H3V11ZM9 4H13V5H9V4Z"})}),_r=()=>Nt("svg",{viewBox:"0 0 16 16",fill:gt("color-primary"),children:Nt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7 3L8 2H14L15 3V8L14 9H10V8H14V3H8V6H7V3ZM9 9V8L8 7H7H2L1 8V13L2 14H8L9 13V9ZM8 8V9V13H2V8H7H8ZM9.41421 7L9 6.58579V6H13V7H9.41421ZM9 4H13V5H9V4ZM7 10H3V11H7V10Z"})}),br=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})}),wr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M12 5.83 15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15z"})}),kr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M7.41 18.59 8.83 20 12 16.83 15.17 20l1.41-1.41L12 14zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10z"})}),xr=()=>Nt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:Nt("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"})});var Sr=n(738),Cr=n.n(Sr);const Er=e=>{let{to:t,isNavLink:n,children:r,...a}=e;return n?Nt(De,{to:t,...a,children:r}):Nt("div",{...a,children:r})},Nr=e=>{let{activeItem:t,item:n,color:r=gt("color-primary"),activeNavRef:a,onChange:o,isNavLink:i}=e;return Nt(Er,{className:Cr()({"vm-tabs-item":!0,"vm-tabs-item_active":t===n.value,[n.className||""]:n.className}),isNavLink:i,to:n.value,style:{color:r},onClick:(l=n.value,()=>{o&&o(l)}),ref:t===n.value?a:void 0,children:[n.icon&&Nt("div",{className:Cr()({"vm-tabs-item__icon":!0,"vm-tabs-item__icon_single":!n.label}),children:n.icon}),n.label]});var l};const Ar=function(e,t,n,a){const o=(0,r.useRef)(t);(0,r.useEffect)((()=>{o.current=t}),[t]),(0,r.useEffect)((()=>{var t;const r=null!==(t=null===n||void 0===n?void 0:n.current)&&void 0!==t?t:window;if(!r||!r.addEventListener)return;const i=e=>o.current(e);return r.addEventListener(e,i,a),()=>{r.removeEventListener(e,i,a)}}),[e,n,a])},Mr=()=>{const[e,t]=(0,r.useState)({width:0,height:0}),n=()=>{t({width:window.innerWidth,height:window.innerHeight})};return Ar("resize",n),(0,r.useEffect)(n,[]),e},Tr=e=>{let{activeItem:t,items:n,color:a=gt("color-primary"),onChange:o,indicatorPlacement:i="bottom",isNavLink:l}=e;const s=Mr(),c=(0,r.useRef)(null),[u,d]=(0,r.useState)({left:0,width:0,bottom:0});return(0,r.useEffect)((()=>{var e;if((null===(e=c.current)||void 0===e?void 0:e.base)instanceof HTMLElement){const{offsetLeft:e,offsetWidth:t,offsetHeight:n}=c.current.base;d({left:e,width:t,bottom:"top"===i?n-2:0})}}),[s,t,c,n]),Nt("div",{className:"vm-tabs",children:[n.map((e=>Nt(Nr,{activeItem:t,item:e,onChange:o,color:a,activeNavRef:c,isNavLink:l},e.value))),Nt("div",{className:"vm-tabs__indicator",style:{...u,borderColor:a}})]})},Lr=[{value:mt.chart,icon:Nt(Wn,{}),label:"Graph",prometheusCode:0},{value:mt.code,icon:Nt(Qn,{}),label:"JSON",prometheusCode:3},{value:mt.table,icon:Nt(Kn,{}),label:"Table",prometheusCode:1}],Ir=()=>{const{displayType:e}=Fr(),t=jr();return Nt(Tr,{activeItem:e,items:Lr,onChange:n=>{var r;t({type:"SET_DISPLAY_TYPE",payload:null!==(r=n)&&void 0!==r?r:e})}})},Pr=()=>{const e=ut("g0.tab",0),t=Lr.find((t=>t.prometheusCode===+e||t.value===e));return(null===t||void 0===t?void 0:t.value)||mt.chart},Or=et("SERIES_LIMITS"),Rr={displayType:Pr(),nocache:!1,isTracingEnabled:!1,seriesLimits:Or?JSON.parse(Or):lt,tableCompact:et("TABLE_COMPACT")||!1};function Dr(e,t){switch(t.type){case"SET_DISPLAY_TYPE":return{...e,displayType:t.payload};case"SET_SERIES_LIMITS":return Xe("SERIES_LIMITS",JSON.stringify(t.payload)),{...e,seriesLimits:t.payload};case"TOGGLE_QUERY_TRACING":return{...e,isTracingEnabled:!e.isTracingEnabled};case"TOGGLE_NO_CACHE":return{...e,nocache:!e.nocache};case"TOGGLE_TABLE_COMPACT":return Xe("TABLE_COMPACT",!e.tableCompact),{...e,tableCompact:!e.tableCompact};default:throw new Error}}const zr=(0,r.createContext)({}),Fr=()=>(0,r.useContext)(zr).state,jr=()=>(0,r.useContext)(zr).dispatch,Hr={customStep:ut("g0.step_input",""),yaxis:{limits:{enable:!1,range:{1:[0,0]}}},isHistogram:!1,spanGaps:!1};function Vr(e,t){switch(t.type){case"TOGGLE_ENABLE_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,enable:!e.yaxis.limits.enable}}};case"SET_CUSTOM_STEP":return{...e,customStep:t.payload};case"SET_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,range:t.payload}}};case"SET_IS_HISTOGRAM":return{...e,isHistogram:t.payload};case"SET_SPAN_GAPS":return{...e,spanGaps:t.payload};default:throw new Error}}const $r=(0,r.createContext)({}),Ur=()=>(0,r.useContext)($r).state,Br=()=>(0,r.useContext)($r).dispatch,qr={dashboardsSettings:[],dashboardsLoading:!1,dashboardsError:""};function Yr(e,t){switch(t.type){case"SET_DASHBOARDS_SETTINGS":return{...e,dashboardsSettings:t.payload};case"SET_DASHBOARDS_LOADING":return{...e,dashboardsLoading:t.payload};case"SET_DASHBOARDS_ERROR":return{...e,dashboardsError:t.payload};default:throw new Error}}const Wr=(0,r.createContext)({}),Kr=()=>(0,r.useContext)(Wr).state,Qr={markdownParsing:"true"===et("LOGS_MARKDOWN")};function Zr(e,t){if("SET_MARKDOWN_PARSING"===t.type)return Xe("LOGS_MARKDOWN","".concat(t.payload)),{...e,markdownParsing:t.payload};throw new Error}const Gr=(0,r.createContext)({}),Jr={windows:"Windows",mac:"Mac OS",linux:"Linux"},Xr=()=>(Object.values(Jr).find((e=>navigator.userAgent.indexOf(e)>=0))||"unknown")===Jr.mac;function ea(){const e=Mr(),t=()=>{const e=["Android","webOS","iPhone","iPad","iPod","BlackBerry","Windows Phone"].map((e=>navigator.userAgent.match(new RegExp(e,"i")))).some((e=>e)),t=window.innerWidth<500;return e||t},[n,a]=(0,r.useState)(t());return(0,r.useEffect)((()=>{a(t())}),[e]),{isMobile:n}}const ta={success:Nt(zn,{}),error:Nt(Dn,{}),warning:Nt(Rn,{}),info:Nt(On,{})},na=e=>{let{variant:t,children:n}=e;const{isDarkTheme:r}=Mt(),{isMobile:a}=ea();return Nt("div",{className:Cr()({"vm-alert":!0,["vm-alert_".concat(t)]:t,"vm-alert_dark":r,"vm-alert_mobile":a}),children:[Nt("div",{className:"vm-alert__icon",children:ta[t||"info"]}),Nt("div",{className:"vm-alert__content",children:n})]})},ra=(0,r.createContext)({showInfoMessage:()=>{}}),aa=function(){for(var e=arguments.length,t=new Array(e),n=0;nn=>{let{children:r}=n;return Nt(e,{children:Nt(t,{children:r})})}),(e=>{let{children:t}=e;return Nt(Ct.FK,{children:t})}))}(...[e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(St,Lt),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(At.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(mn,hn),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(pn.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(xn,kn),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(Sn.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Dr,Rr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(zr.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Vr,Hr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt($r.Provider,{value:o,children:t})},e=>{let{children:t}=e;const{isMobile:n}=ea(),[a,o]=(0,r.useState)({}),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)(void 0);(0,r.useEffect)((()=>{if(!s)return;o({message:s.text,variant:s.type,key:Date.now()}),l(!0);const e=setTimeout(u,4e3);return()=>clearTimeout(e)}),[s]);const u=()=>{c(void 0),l(!1)};return Nt(ra.Provider,{value:{showInfoMessage:c},children:[i&&Nt("div",{className:Cr()({"vm-snackbar":!0,"vm-snackbar_mobile":n}),children:Nt(na,{variant:a.variant,children:Nt("div",{className:"vm-snackbar-content",children:[Nt("span",{children:a.message}),Nt("div",{className:"vm-snackbar-content__close",onClick:u,children:Nt(In,{})})]})})}),t]})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Yr,qr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(Wr.Provider,{value:o,children:t})},e=>{let{children:t}=e;const[n,a]=(0,r.useReducer)(Zr,Qr),o=(0,r.useMemo)((()=>({state:n,dispatch:a})),[n,a]);return Nt(Gr.Provider,{value:o,children:t})}]),oa=e=>{let{activeMenu:t,label:n,value:r,color:a}=e;return Nt(De,{className:Cr()({"vm-header-nav-item":!0,"vm-header-nav-item_active":t===r}),style:{color:a},to:r,children:n})},ia=(e,t,n)=>{const a=(0,r.useCallback)((r=>{const a=null===e||void 0===e?void 0:e.current,o=r.target,i=(null===n||void 0===n?void 0:n.current)&&n.current.contains(o);!a||a.contains((null===r||void 0===r?void 0:r.target)||null)||i||t(r)}),[e,t]);Ar("mousedown",a),Ar("touchstart",a)},la=e=>{let{variant:t="contained",color:n="primary",size:r="medium",ariaLabel:a,children:o,endIcon:i,startIcon:l,fullWidth:s=!1,className:c,disabled:u,onClick:d,onMouseDown:h}=e;return Nt("button",{className:Cr()({"vm-button":!0,["vm-button_".concat(t,"_").concat(n)]:!0,["vm-button_".concat(r)]:r,"vm-button_icon":(l||i)&&!o,"vm-button_full-width":s,"vm-button_with-icon":l||i,"vm-button_disabled":u,[c||""]:c}),disabled:u,"aria-label":a,onClick:d,onMouseDown:h,children:Nt(Ct.FK,{children:[l&&Nt("span",{className:"vm-button__start-icon",children:l}),o&&Nt("span",{children:o}),i&&Nt("span",{className:"vm-button__end-icon",children:i})]})})},sa=e=>{let{children:t,buttonRef:n,placement:a="bottom-left",open:o=!1,onClose:i,offset:l={top:6,left:0},clickOutside:s=!0,fullWidth:c,title:u,disabledFullScreen:d,variant:h}=e;const{isMobile:m}=ea(),p=oe(),f=re(),[v,g]=(0,r.useState)({width:0,height:0}),[y,_]=(0,r.useState)(!1),b=(0,r.useRef)(null);(0,r.useEffect)((()=>(_(o),!o&&i&&i(),o&&m&&!d&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="auto"})),[o]),(0,r.useEffect)((()=>{var e,t;g({width:(null===b||void 0===b||null===(e=b.current)||void 0===e?void 0:e.clientWidth)||0,height:(null===b||void 0===b||null===(t=b.current)||void 0===t?void 0:t.clientHeight)||0}),_(!1)}),[b]);const w=(0,r.useMemo)((()=>{const e=n.current;if(!e||!y)return{};const t=e.getBoundingClientRect(),r={top:0,left:0,width:"auto"},o="bottom-right"===a||"top-right"===a,i=null===a||void 0===a?void 0:a.includes("top"),s=(null===l||void 0===l?void 0:l.top)||0,u=(null===l||void 0===l?void 0:l.left)||0;r.left=r.left=t.left+u,r.top=t.height+t.top+s,o&&(r.left=t.right-v.width),i&&(r.top=t.top-v.height-s);const{innerWidth:d,innerHeight:h}=window,m=r.top+v.height+20>h,p=r.top-20<0,f=r.left+v.width+20>d,g=r.left-20<0;return m&&(r.top=t.top-v.height-s),p&&(r.top=t.height+t.top+s),f&&(r.left=t.right-v.width-u),g&&(r.left=t.left+u),c&&(r.width="".concat(t.width,"px")),r.top<0&&(r.top=20),r.left<0&&(r.left=20),r}),[n,a,y,t,c]),k=()=>{_(!1),i()};(0,r.useEffect)((()=>{if(!b.current||!y||m&&!d)return;const{right:e,width:t}=b.current.getBoundingClientRect();if(e>window.innerWidth){const e=window.innerWidth-20-t;b.current.style.left=e{y&&m&&!d&&(p(f,{replace:!0}),i())}),[y,m,d,f,i]);return Ar("scroll",k),Ar("popstate",x),ia(b,(()=>{s&&k()}),n),Nt(Ct.FK,{children:(y||!v.width)&&r.default.createPortal(Nt("div",{className:Cr()({"vm-popper":!0,["vm-popper_".concat(h)]:h,"vm-popper_mobile":m&&!d,"vm-popper_open":(m||Object.keys(w).length)&&y}),ref:b,style:m&&!d?{}:w,children:[(u||m&&!d)&&Nt("div",{className:"vm-popper-header",children:[Nt("p",{className:"vm-popper-header__title",children:u}),Nt(la,{variant:"text",color:"dark"===h?"white":"primary",size:"small",onClick:e=>{e.stopPropagation(),i()},ariaLabel:"close",children:Nt(In,{})})]}),t]}),document.body)})},ca=e=>{const[t,n]=(0,r.useState)(!!e),a=(0,r.useCallback)((()=>n(!0)),[]),o=(0,r.useCallback)((()=>n(!1)),[]),i=(0,r.useCallback)((()=>n((e=>!e))),[]);return{value:t,setValue:n,setTrue:a,setFalse:o,toggle:i}},ua=e=>{let{activeMenu:t,label:n,color:a,background:o,submenu:i,direction:l}=e;const{pathname:s}=re(),[c,u]=(0,r.useState)(null),d=(0,r.useRef)(null),{value:h,setFalse:m,setTrue:p}=ca(!1),f=()=>{c&&clearTimeout(c);const e=setTimeout(m,300);u(e)};return(0,r.useEffect)((()=>{m()}),[s]),"column"===l?Nt(Ct.FK,{children:i.map((e=>Nt(oa,{activeMenu:t,value:e.value||"",label:e.label||""},e.value)))}):Nt("div",{className:Cr()({"vm-header-nav-item":!0,"vm-header-nav-item_sub":!0,"vm-header-nav-item_open":h,"vm-header-nav-item_active":i.find((e=>e.value===t))}),style:{color:a},onMouseEnter:()=>{p(),c&&clearTimeout(c)},onMouseLeave:f,ref:d,children:[n,Nt(Hn,{}),Nt(sa,{open:h,placement:"bottom-left",offset:{top:12,left:0},onClose:m,buttonRef:d,children:Nt("div",{className:"vm-header-nav-item-submenu",style:{background:o},onMouseLeave:f,onMouseEnter:()=>{c&&clearTimeout(c)},children:i.map((e=>Nt(oa,{activeMenu:t,value:e.value||"",label:e.label||"",color:a},e.value)))})})]})},da={label:"Explore",submenu:[{label:Ye[We.metrics].title,value:We.metrics},{label:Ye[We.cardinality].title,value:We.cardinality},{label:Ye[We.topQueries].title,value:We.topQueries},{label:Ye[We.activeQueries].title,value:We.activeQueries}]},ha={label:"Tools",submenu:[{label:Ye[We.trace].title,value:We.trace},{label:Ye[We.queryAnalyzer].title,value:We.queryAnalyzer},{label:Ye[We.withTemplate].title,value:We.withTemplate},{label:Ye[We.relabel].title,value:We.relabel}]},ma=[{label:Ye[We.logs].title,value:We.home}],pa=[{label:Ye[We.anomaly].title,value:We.home}],fa=[{label:Ye[We.home].title,value:We.home},da,ha],va=e=>{let{color:t,background:n,direction:a}=e;const o=Qe(),{dashboardsSettings:i}=Kr(),{pathname:l}=re(),[s,c]=(0,r.useState)(l),u=(0,r.useMemo)((()=>{switch({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE){case Ve.logs:return ma;case Ve.anomaly:return pa;default:return[...fa,{label:Ye[We.dashboards].title,value:We.dashboards,hide:o||!i.length}].filter((e=>!e.hide))}}),[o,i]);return(0,r.useEffect)((()=>{c(l)}),[l]),Nt("nav",{className:Cr()({"vm-header-nav":!0,["vm-header-nav_".concat(a)]:a}),children:u.map((e=>e.submenu?Nt(ua,{activeMenu:s,label:e.label||"",submenu:e.submenu,color:t,background:n,direction:a},e.label):Nt(oa,{activeMenu:s,value:e.value||"",label:e.label||"",color:t},e.value)))})},ga=e=>{let{title:t,children:n,onClose:a,className:o,isOpen:i=!0}=e;const{isMobile:l}=ea(),s=oe(),c=re(),u=(0,r.useCallback)((e=>{i&&"Escape"===e.key&&a()}),[i]),d=e=>{e.stopPropagation()},h=(0,r.useCallback)((()=>{i&&(s(c,{replace:!0}),a())}),[i,c,a]);return(0,r.useEffect)((()=>{if(i)return document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}}),[i]),Ar("popstate",h),Ar("keyup",u),r.default.createPortal(Nt("div",{className:Cr()({"vm-modal":!0,"vm-modal_mobile":l,["".concat(o)]:o}),onMouseDown:a,children:Nt("div",{className:"vm-modal-content",children:[Nt("div",{className:"vm-modal-content-header",onMouseDown:d,children:[t&&Nt("div",{className:"vm-modal-content-header__title",children:t}),Nt("div",{className:"vm-modal-header__close",children:Nt(la,{variant:"text",size:"small",onClick:a,ariaLabel:"close",children:Nt(In,{})})})]}),Nt("div",{className:"vm-modal-content-body",onMouseDown:d,tabIndex:0,children:n})]})}),document.body)},ya=e=>{let{children:t,title:n,open:a,placement:o="bottom-center",offset:i={top:6,left:0}}=e;const{isMobile:l}=ea(),[s,c]=(0,r.useState)(!1),[u,d]=(0,r.useState)({width:0,height:0}),h=(0,r.useRef)(null),m=(0,r.useRef)(null),p=()=>c(!1);(0,r.useEffect)((()=>{if(m.current&&s)return d({width:m.current.clientWidth,height:m.current.clientHeight}),window.addEventListener("scroll",p),()=>{window.removeEventListener("scroll",p)}}),[s,n]);const f=(0,r.useMemo)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(!t||!s)return{};const n=t.getBoundingClientRect(),r={top:0,left:0},a="bottom-right"===o||"top-right"===o,l="bottom-left"===o||"top-left"===o,c=null===o||void 0===o?void 0:o.includes("top"),d=(null===i||void 0===i?void 0:i.top)||0,m=(null===i||void 0===i?void 0:i.left)||0;r.left=n.left-(u.width-n.width)/2+m,r.top=n.height+n.top+d,a&&(r.left=n.right-u.width),l&&(r.left=n.left+m),c&&(r.top=n.top-u.height-d);const{innerWidth:p,innerHeight:f}=window,v=r.top+u.height+20>f,g=r.top-20<0,y=r.left+u.width+20>p,_=r.left-20<0;return v&&(r.top=n.top-u.height-d),g&&(r.top=n.height+n.top+d),y&&(r.left=n.right-u.width-m),_&&(r.left=n.left+m),r.top<0&&(r.top=20),r.left<0&&(r.left=20),r}),[h,o,s,u]),v=()=>{"boolean"!==typeof a&&c(!0)},g=()=>{c(!1)};return(0,r.useEffect)((()=>{"boolean"===typeof a&&c(a)}),[a]),(0,r.useEffect)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(t)return t.addEventListener("mouseenter",v),t.addEventListener("mouseleave",g),()=>{t.removeEventListener("mouseenter",v),t.removeEventListener("mouseleave",g)}}),[h]),Nt(Ct.FK,{children:[Nt(r.Fragment,{ref:h,children:t}),!l&&s&&r.default.createPortal(Nt("div",{className:"vm-tooltip",ref:m,style:f,children:n}),document.body)]})},_a=Nt("code",{children:Xr()?"Cmd":"Ctrl"}),ba=[{title:"Zoom in",description:Nt(Ct.FK,{children:["To zoom in, hold down the ",_a," + ",Nt("code",{children:"scroll up"}),", or press the ",Nt("code",{children:"+"}),". Also, you can zoom in on a range on the graph by holding down your mouse button and selecting the range."]})},{title:"Zoom out",description:Nt(Ct.FK,{children:["To zoom out, hold down the ",_a," + ",Nt("code",{children:"scroll down"}),", or press the ",Nt("code",{children:"-"}),"."]})},{title:"Move horizontal axis",description:Nt(Ct.FK,{children:["To move the graph, hold down the ",_a," + ",Nt("code",{children:"drag"})," the graph to the right or left."]})},{title:"Fixing a tooltip",description:Nt(Ct.FK,{children:["To fix the tooltip, ",Nt("code",{children:"click"})," mouse when it's open. Then, you can drag the fixed tooltip by ",Nt("code",{children:"clicking"})," and ",Nt("code",{children:"dragging"})," on the ",Nt(ar,{})," icon."]})},{title:"Set a custom range for the vertical axis",description:Nt(Ct.FK,{children:["To set a custom range for the vertical axis, click on the ",Nt(Ln,{})," icon located in the upper right corner of the graph, activate the toggle, and set the values."]})}],wa=[{title:"Show/hide a legend item",description:Nt(Ct.FK,{children:[Nt("code",{children:"click"})," on a legend item to isolate it on the graph.",_a," + ",Nt("code",{children:"click"})," on a legend item to remove it from the graph. To revert to the previous state, click again."]})},{title:"Copy label key-value pairs",description:Nt(Ct.FK,{children:[Nt("code",{children:"click"})," on a label key-value pair to save it to the clipboard."]})},{title:"Collapse/Expand the legend group",description:Nt(Ct.FK,{children:[Nt("code",{children:"click"})," on the group name (e.g. ",Nt("b",{children:'Query 1: {__name__!=""}'}),") to collapse or expand the legend."]})}],ka=ba.concat(wa),xa=()=>{const{value:e,setFalse:t,setTrue:n}=ca(!1);return Nt(Ct.FK,{children:[Nt(ya,{title:"Show tips on working with the graph",children:Nt(la,{variant:"text",color:"gray",startIcon:Nt(hr,{}),onClick:n,ariaLabel:"open the tips"})}),e&&Nt(ga,{title:"Tips on working with the graph and the legend",onClose:t,children:Nt("div",{className:"fc-graph-tips",children:ka.map((e=>{let{title:t,description:n}=e;return Nt("div",{className:"fc-graph-tips-item",children:[Nt("h4",{className:"fc-graph-tips-item__action",children:t}),Nt("p",{className:"fc-graph-tips-item__description",children:n})]},t)}))})})]})},Sa=Nt("code",{children:Xr()?"Cmd":"Ctrl"}),Ca=Nt(Ct.FK,{children:[Nt("code",{children:Xr()?"Option":"Ctrl"})," + ",Nt("code",{children:"Space"})]}),Ea=[{title:"Query",list:[{keys:Nt("code",{children:"Enter"}),description:"Run"},{keys:Nt(Ct.FK,{children:[Nt("code",{children:"Shift"})," + ",Nt("code",{children:"Enter"})]}),description:"Multi-line queries"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"Arrow Up"})]}),description:"Previous command from the Query history"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"Arrow Down"})]}),description:"Next command from the Query history"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"click"})," by ",Nt(er,{})]}),description:"Toggle multiple queries"},{keys:Ca,description:"Show quick autocomplete tips"}]},{title:"Graph",readMore:Nt(xa,{}),list:[{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"scroll Up"})," or ",Nt("code",{children:"+"})]}),description:"Zoom in"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"scroll Down"})," or ",Nt("code",{children:"-"})]}),description:"Zoom out"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"drag"})]}),description:"Move the graph left/right"},{keys:Nt(Ct.FK,{children:Nt("code",{children:"click"})}),description:"Select the series in the legend"},{keys:Nt(Ct.FK,{children:[Sa," + ",Nt("code",{children:"click"})]}),description:"Toggle multiple series in the legend"}]}],Na="Shortcut keys",Aa=Xr(),Ma=Aa?"Cmd + /":"F1",Ta=e=>{let{showTitle:t}=e;const n=Qe(),{value:a,setTrue:o,setFalse:i}=ca(!1),l=(0,r.useCallback)((e=>{const t=Aa&&"/"===e.key&&e.metaKey,n=!Aa&&"F1"===e.key&&!e.metaKey;(t||n)&&o()}),[o]);return Ar("keydown",l),Nt(Ct.FK,{children:[Nt(ya,{open:!0!==t&&void 0,title:"".concat(Na," (").concat(Ma,")"),placement:"bottom-center",children:Nt(la,{className:n?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt(Bn,{}),onClick:o,ariaLabel:Na,children:t&&Na})}),a&&Nt(ga,{title:"Shortcut keys",onClose:i,children:Nt("div",{className:"vm-shortcuts",children:Ea.map((e=>Nt("div",{className:"vm-shortcuts-section",children:[e.readMore&&Nt("div",{className:"vm-shortcuts-section__read-more",children:e.readMore}),Nt("h3",{className:"vm-shortcuts-section__title",children:e.title}),Nt("div",{className:"vm-shortcuts-section-list",children:e.list.map(((t,n)=>Nt("div",{className:"vm-shortcuts-section-list-item",children:[Nt("div",{className:"vm-shortcuts-section-list-item__key",children:t.keys}),Nt("p",{className:"vm-shortcuts-section-list-item__description",children:t.description})]},"".concat(e.title,"_").concat(n))))})]},e.title)))})})]})},La=e=>{let{open:t}=e;return Nt("button",{className:Cr()({"vm-menu-burger":!0,"vm-menu-burger_opened":t}),"aria-label":"menu",children:Nt("span",{})})},{REACT_APP_TYPE:Ia}={},Pa=Ia===Ve.logs,Oa=e=>{let{background:t,color:n}=e;const{pathname:a}=re(),{isMobile:o}=ea(),i=(0,r.useRef)(null),{value:l,toggle:s,setFalse:c}=ca(!1);return(0,r.useEffect)(c,[a]),ia(i,c),Nt("div",{className:"vm-header-sidebar",ref:i,children:[Nt("div",{className:Cr()({"vm-header-sidebar-button":!0,"vm-header-sidebar-button_open":l}),onClick:s,children:Nt(La,{open:l})}),Nt("div",{className:Cr()({"vm-header-sidebar-menu":!0,"vm-header-sidebar-menu_open":l}),children:[Nt("div",{children:Nt(va,{color:n,background:t,direction:"column"})}),Nt("div",{className:"vm-header-sidebar-menu-settings",children:!o&&!Pa&&Nt(Ta,{showTitle:!0})})]})]})},Ra=e=>{let{controlsComponent:t,isMobile:n,...a}=e;const o=Qe(),{pathname:i}=re(),{accountIds:l}=(()=>{const{useTenantID:e}=Ke(),t=Qe(),{serverUrl:n}=Mt(),[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(),[s,c]=(0,r.useState)([]),u=(0,r.useMemo)((()=>"".concat(n.replace(/^(.+)(\/select.+)/,"$1"),"/admin/tenants")),[n]),d=(0,r.useMemo)((()=>!!Je(n)),[n]),h=t?!e:!d;return(0,r.useEffect)((()=>{h||(async()=>{o(!0);try{const e=await fetch(u),t=await e.json(),n=t.data||[];c(n.sort(((e,t)=>e.localeCompare(t)))),e.ok?l(void 0):l("".concat(t.errorType,"\r\n").concat(null===t||void 0===t?void 0:t.error))}catch(Lp){Lp instanceof Error&&l("".concat(Lp.name,": ").concat(Lp.message))}o(!1)})().catch(console.error)}),[u]),{accountIds:s,isLoading:a,error:i}})(),{value:s,toggle:c,setFalse:u}=ca(!1),d=Nt(t,{...a,isMobile:n,accountIds:l,headerSetup:(0,r.useMemo)((()=>(Ye[i]||{}).header||{}),[i])});return n?Nt(Ct.FK,{children:[Nt("div",{children:Nt(la,{className:Cr()({"vm-header-button":!o}),startIcon:Nt(ur,{}),onClick:c,ariaLabel:"controls"})}),Nt(ga,{title:"Controls",onClose:u,isOpen:s,className:Cr()({"vm-header-controls-modal":!0,"vm-header-controls-modal_open":s}),children:d})]}):d},{REACT_APP_TYPE:Da}={},za=Da===Ve.logs||Da===Ve.anomaly,Fa=()=>{switch(Da){case Ve.logs:return Nt(An,{});case Ve.anomaly:return Nt(Mn,{});default:return Nt(Nn,{})}},ja=e=>{let{controlsComponent:t}=e;const{isMobile:n}=ea(),a=Mr(),o=(0,r.useMemo)((()=>window.innerWidth<1e3),[a]),{isDarkTheme:i}=Mt(),l=Qe(),s=(0,r.useMemo)((()=>gt(i?"color-background-block":"color-primary")),[i]),{background:c,color:u}=(0,r.useMemo)((()=>{const{headerStyles:{background:e=(l?"#FFF":s),color:t=(l?s:"#FFF")}={}}=Ke();return{background:e,color:t}}),[s]),d=oe(),h=()=>{d({pathname:We.home}),window.location.reload()};return Nt("header",{className:Cr()({"vm-header":!0,"vm-header_app":l,"vm-header_dark":i,"vm-header_sidebar":o,"vm-header_mobile":n}),style:{background:c,color:u},children:[o?Nt(Oa,{background:c,color:u}):Nt(Ct.FK,{children:[!l&&Nt("div",{className:Cr()({"vm-header-logo":!0,"vm-header-logo_logs":za}),onClick:h,style:{color:u},children:Nt(Fa,{})}),Nt(va,{color:u,background:c})]}),o&&Nt("div",{className:Cr()({"vm-header-logo":!0,"vm-header-logo_mobile":!0,"vm-header-logo_logs":za}),onClick:h,style:{color:u},children:Nt(Fa,{})}),Nt(Ra,{controlsComponent:t,displaySidebar:o,isMobile:n})]})},Ha={href:"https://github.com/VictoriaMetrics/VictoriaMetrics/issues/new/choose",Icon:lr,title:"Create an issue"},Va=[{href:"https://docs.victoriametrics.com/MetricsQL.html",Icon:Qn,title:"MetricsQL"},{href:"https://docs.victoriametrics.com/#vmui",Icon:ir,title:"Documentation"},Ha],$a=(0,r.memo)((e=>{let{links:t=Va}=e;const n="2019-".concat((new Date).getFullYear());return Nt("footer",{className:"vm-footer",children:[Nt("a",{className:"vm-link vm-footer__website",target:"_blank",href:"https://victoriametrics.com/",rel:"me noreferrer",children:[Nt(Tn,{}),"victoriametrics.com"]}),t.map((e=>{let{href:t,Icon:n,title:r}=e;return Nt("a",{className:"vm-link vm-footer__link",target:"_blank",href:t,rel:"help noreferrer",children:[Nt(n,{}),r]},"".concat(t,"-").concat(r))})),Nt("div",{className:"vm-footer__copyright",children:["\xa9 ",n," VictoriaMetrics"]})]})})),Ua=$a,Ba=()=>{const e=Qe(),{serverUrl:t}=Mt(),n=(0,r.useContext)(Wr).dispatch,[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(""),[s,c]=(0,r.useState)([]),u=async()=>{try{const e=window.__VMUI_PREDEFINED_DASHBOARDS__;if(null===e||void 0===e||!e.length)return[];const t=await Promise.all(e.map((async e=>(async e=>{const t=await fetch("./dashboards/".concat(e));return await t.json()})(e))));c((e=>[...t,...e]))}catch(Lp){Lp instanceof Error&&l("".concat(Lp.name,": ").concat(Lp.message))}};return(0,r.useEffect)((()=>{e||(c([]),(async()=>{if(t&&!{NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE){l(""),o(!0);try{const e=await fetch("".concat(t,"/vmui/custom-dashboards")),n=await e.json();if(e.ok){const{dashboardsSettings:e}=n;e&&e.length>0?c((t=>[...t,...e])):await u(),o(!1)}else await u(),l(n.error),o(!1)}catch(Lp){o(!1),Lp instanceof Error&&l("".concat(Lp.name,": ").concat(Lp.message)),await u()}}})())}),[t]),(0,r.useEffect)((()=>{n({type:"SET_DASHBOARDS_SETTINGS",payload:s})}),[s]),(0,r.useEffect)((()=>{n({type:"SET_DASHBOARDS_LOADING",payload:a})}),[a]),(0,r.useEffect)((()=>{n({type:"SET_DASHBOARDS_ERROR",payload:i})}),[i]),{dashboardsSettings:s,isLoading:a,error:i}},qa=e=>{let{error:t,warning:n,info:a}=e;const o=(0,r.useRef)(null),[i,l]=(0,r.useState)(!1),[s,c]=(0,r.useState)(!1),u=(0,r.useMemo)((()=>t?"ERROR: ":n?"WARNING: ":""),[t,n]),d="".concat(u).concat(t||n||a),h=()=>{const e=o.current;if(e){const{offsetWidth:t,scrollWidth:n,offsetHeight:r,scrollHeight:a}=e;l(t+1{c(!1),h()}),[o,d]),Ar("resize",h),t||n||a?Nt("span",{className:Cr()({"vm-text-field__error":!0,"vm-text-field__warning":n&&!t,"vm-text-field__helper-text":!n&&!t,"vm-text-field__error_overflowed":i,"vm-text-field__error_full":s}),"data-show":!!d,ref:o,onClick:()=>{i&&(c(!0),l(!1))},children:d}):null},Ya=e=>{let{label:t,value:n,type:a="text",error:o="",warning:i="",helperText:l="",placeholder:s,endIcon:c,startIcon:u,disabled:d=!1,autofocus:h=!1,inputmode:m="text",caretPosition:p,onChange:f,onEnter:v,onKeyDown:g,onFocus:y,onBlur:_,onChangeCaret:b}=e;const{isDarkTheme:w}=Mt(),{isMobile:k}=ea(),x=(0,r.useRef)(null),S=(0,r.useRef)(null),C=(0,r.useMemo)((()=>"textarea"===a?S:x),[a]),[E,N]=(0,r.useState)([0,0]),A=Cr()({"vm-text-field__input":!0,"vm-text-field__input_error":o,"vm-text-field__input_warning":!o&&i,"vm-text-field__input_icon-start":u,"vm-text-field__input_disabled":d,"vm-text-field__input_textarea":"textarea"===a}),M=e=>{const{selectionStart:t,selectionEnd:n}=e;N([t||0,n||0])},T=e=>{M(e.currentTarget)},L=e=>{g&&g(e);const{key:t,ctrlKey:n,metaKey:r}=e,o="Enter"===t;("textarea"!==a?o:o&&(r||n))&&v&&(e.preventDefault(),v())},I=e=>{M(e.currentTarget)},P=e=>{d||(f&&f(e.currentTarget.value),M(e.currentTarget))},O=()=>{y&&y()},R=()=>{_&&_()},D=e=>{try{C.current&&C.current.setSelectionRange(e[0],e[1])}catch(Lp){return Lp}};return(0,r.useEffect)((()=>{var e;h&&!k&&(null===C||void 0===C||null===(e=C.current)||void 0===e?void 0:e.focus)&&C.current.focus()}),[C,h]),(0,r.useEffect)((()=>{b&&b(E)}),[E]),(0,r.useEffect)((()=>{D(E)}),[n]),(0,r.useEffect)((()=>{p&&D(p)}),[p]),Nt("label",{className:Cr()({"vm-text-field":!0,"vm-text-field_textarea":"textarea"===a,"vm-text-field_dark":w}),"data-replicated-value":n,children:[u&&Nt("div",{className:"vm-text-field__icon-start",children:u}),c&&Nt("div",{className:"vm-text-field__icon-end",children:c}),"textarea"===a?Nt("textarea",{className:A,disabled:d,ref:S,value:n,rows:1,inputMode:m,placeholder:s,autoCapitalize:"none",onInput:P,onKeyDown:L,onKeyUp:I,onFocus:O,onBlur:R,onMouseUp:T}):Nt("input",{className:A,disabled:d,ref:x,value:n,type:a,placeholder:s,inputMode:m,autoCapitalize:"none",onInput:P,onKeyDown:L,onKeyUp:I,onFocus:O,onBlur:R,onMouseUp:T}),t&&Nt("span",{className:"vm-text-field__label",children:t}),Nt(qa,{error:o,warning:i,info:l})]})},Wa=e=>{let{accountIds:t}=e;const n=Qe(),{isMobile:a}=ea(),{tenantId:o,serverUrl:i}=Mt(),l=Tt(),s=vn(),[c,u]=(0,r.useState)(""),d=(0,r.useRef)(null),{value:h,toggle:m,setFalse:p}=ca(!1),f=(0,r.useMemo)((()=>{if(!c)return t;try{const e=new RegExp(c,"i");return t.filter((t=>e.test(t))).sort(((t,n)=>{var r,a;return((null===(r=t.match(e))||void 0===r?void 0:r.index)||0)-((null===(a=n.match(e))||void 0===a?void 0:a.index)||0)}))}catch(Lp){return[]}}),[c,t]),v=(0,r.useMemo)((()=>t.length>1),[t]),g=e=>()=>{const t=e;if(l({type:"SET_TENANT_ID",payload:t}),i){const e=Ge(i,t);if(e===i)return;l({type:"SET_SERVER",payload:e}),s({type:"RUN_QUERY"})}p()};return(0,r.useEffect)((()=>{const e=Je(i);o&&o!==e?g(o)():g(e)()}),[i]),v?Nt("div",{className:"vm-tenant-input",children:[Nt(ya,{title:"Define Tenant ID if you need request to another storage",children:Nt("div",{ref:d,children:a?Nt("div",{className:"vm-mobile-option",onClick:m,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(cr,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Tenant ID"}),Nt("span",{className:"vm-mobile-option-text__value",children:o})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(la,{className:n?"":"vm-header-button",variant:"contained",color:"primary",fullWidth:!0,startIcon:Nt(cr,{}),endIcon:Nt("div",{className:Cr()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":h}),children:Nt(jn,{})}),onClick:m,children:o})})}),Nt(sa,{open:h,placement:"bottom-right",onClose:p,buttonRef:d,title:a?"Define Tenant ID":void 0,children:Nt("div",{className:Cr()({"vm-list vm-tenant-input-list":!0,"vm-list vm-tenant-input-list_mobile":a}),children:[Nt("div",{className:"vm-tenant-input-list__search",children:Nt(Ya,{autofocus:!0,label:"Search",value:c,onChange:u,type:"search"})}),f.map((e=>Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":a,"vm-list-item_active":e===o}),onClick:g(e),children:e},e)))]})})]}):null};const Ka=function(e){const t=(0,r.useRef)();return(0,r.useEffect)((()=>{t.current=e}),[e]),t.current},Qa=()=>{const e=Qe(),{isMobile:t}=ea(),{customStep:n,isHistogram:a}=Ur(),{period:{step:o,end:i,start:l}}=fn(),s=Br(),c=Ka(i-l),u=(0,r.useMemo)((()=>Zt(i-l,a)),[o,a]),[d,h]=(0,r.useState)(n||u),[m,p]=(0,r.useState)(""),{value:f,toggle:v,setFalse:g}=ca(!1),y=(0,r.useRef)(null),_=e=>{const t=e||d||u||"1s",n=(t.match(/[a-zA-Z]+/g)||[]).length?t:"".concat(t,"s");s({type:"SET_CUSTOM_STEP",payload:n}),h(n),p("")},b=()=>{_(),g()},w=e=>{const t=e.match(/[-+]?([0-9]*\.[0-9]+|[0-9]+)/g)||[],n=e.match(/[a-zA-Z]+/g)||[],r=t.length&&t.every((e=>parseFloat(e)>0)),a=n.every((e=>Ut.find((t=>t.short===e)))),o=r&&a;h(e),p(o?"":pt.validStep)};return(0,r.useEffect)((()=>{n&&_(n)}),[n]),(0,r.useEffect)((()=>{!n&&u&&_(u)}),[u]),(0,r.useEffect)((()=>{i-l!==c&&c&&u&&_(u)}),[i,l,c,u]),(0,r.useEffect)((()=>{o!==n&&o!==u||_(u)}),[a]),Nt("div",{className:"vm-step-control",ref:y,children:[t?Nt("div",{className:"vm-mobile-option",onClick:v,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(or,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Step"}),Nt("span",{className:"vm-mobile-option-text__value",children:d})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:"Query resolution step width",children:Nt(la,{className:e?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt(or,{}),onClick:v,children:Nt("p",{children:["STEP",Nt("p",{className:"vm-step-control__value",children:d})]})})}),Nt(sa,{open:f,placement:"bottom-right",onClose:b,buttonRef:y,title:t?"Query resolution step width":void 0,children:Nt("div",{className:Cr()({"vm-step-control-popper":!0,"vm-step-control-popper_mobile":t}),children:[Nt(Ya,{autofocus:!0,label:"Step value",value:d,error:m,onChange:w,onEnter:()=>{_(),b()},onFocus:()=>{document.activeElement instanceof HTMLInputElement&&document.activeElement.select()},onBlur:_,endIcon:Nt(ya,{title:"Set default step value: ".concat(u),children:Nt(la,{size:"small",variant:"text",color:"primary",startIcon:Nt(Pn,{}),onClick:()=>{const e=u||"1s";w(e),_(e)},ariaLabel:"reset step"})})}),Nt("div",{className:"vm-step-control-popper-info",children:[Nt("code",{children:"step"})," - the ",Nt("a",{className:"vm-link vm-link_colored",href:"https://prometheus.io/docs/prometheus/latest/querying/basics/#time-durations",target:"_blank",rel:"noreferrer",children:"interval"}),"between datapoints, which must be returned from the range query. The ",Nt("code",{children:"query"})," is executed at",Nt("code",{children:"start"}),", ",Nt("code",{children:"start+step"}),", ",Nt("code",{children:"start+2*step"}),", \u2026, ",Nt("code",{children:"end"})," timestamps.",Nt("a",{className:"vm-link vm-link_colored",href:"https://docs.victoriametrics.com/keyConcepts.html#range-query",target:"_blank",rel:"help noreferrer",children:"Read more about Range query"})]})]})})]})},Za=e=>{let{relativeTime:t,setDuration:n}=e;const{isMobile:r}=ea();return Nt("div",{className:Cr()({"vm-time-duration":!0,"vm-time-duration_mobile":r}),children:rn.map((e=>{let{id:a,duration:o,until:i,title:l}=e;return Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":r,"vm-list-item_active":a===t}),onClick:(s={duration:o,until:i(),id:a},()=>{n(s)}),children:l||o},a);var s}))})},Ga=e=>{let{viewDate:t,showArrowNav:n,onChangeViewDate:r,toggleDisplayYears:a}=e;return Nt("div",{className:"vm-calendar-header",children:[Nt("div",{className:"vm-calendar-header-left",onClick:a,children:[Nt("span",{className:"vm-calendar-header-left__date",children:t.format("MMMM YYYY")}),Nt("div",{className:"vm-calendar-header-left__select-year",children:Nt(Hn,{})})]}),n&&Nt("div",{className:"vm-calendar-header-right",children:[Nt("div",{className:"vm-calendar-header-right__prev",onClick:()=>{r(t.subtract(1,"month"))},children:Nt(jn,{})}),Nt("div",{className:"vm-calendar-header-right__next",onClick:()=>{r(t.add(1,"month"))},children:Nt(jn,{})})]})]})},Ja=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Xa=e=>{let{viewDate:t,selectDate:n,onChangeSelectDate:a}=e;const i="YYYY-MM-DD",l=o().tz(),s=o()(t.format(i)),c=(0,r.useMemo)((()=>{const e=new Array(42).fill(null),t=s.startOf("month"),n=s.endOf("month").diff(t,"day")+1,r=new Array(n).fill(t).map(((e,t)=>e.add(t,"day"))),a=t.day();return e.splice(a,n,...r),e}),[s]),u=e=>()=>{e&&a(e)};return Nt("div",{className:"vm-calendar-body",children:[Ja.map((e=>Nt(ya,{title:e,children:Nt("div",{className:"vm-calendar-body-cell vm-calendar-body-cell_weekday",children:e[0]})},e))),c.map(((e,t)=>Nt("div",{className:Cr()({"vm-calendar-body-cell":!0,"vm-calendar-body-cell_day":!0,"vm-calendar-body-cell_day_empty":!e,"vm-calendar-body-cell_day_active":(e&&e.format(i))===n.format(i),"vm-calendar-body-cell_day_today":(e&&e.format(i))===l.format(i)}),onClick:u(e),children:e&&e.format("D")},e?e.format(i):t)))]})},eo=e=>{let{viewDate:t,onChangeViewDate:n}=e;const a=o()().format("YYYY"),i=(0,r.useMemo)((()=>t.format("YYYY")),[t]),l=(0,r.useMemo)((()=>{const e=o()().subtract(9,"year");return new Array(18).fill(e).map(((e,t)=>e.add(t,"year")))}),[t]);(0,r.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(i));e&&e.scrollIntoView({block:"center"})}),[]);return Nt("div",{className:"vm-calendar-years",children:l.map((e=>{return Nt("div",{className:Cr()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("YYYY")===i,"vm-calendar-years__year_today":e.format("YYYY")===a}),id:"vm-calendar-year-".concat(e.format("YYYY")),onClick:(t=e,()=>{n(t)}),children:e.format("YYYY")},e.format("YYYY"));var t}))})},to=e=>{let{viewDate:t,selectDate:n,onChangeViewDate:a}=e;const i=o()().format("MM"),l=(0,r.useMemo)((()=>n.format("MM")),[n]),s=(0,r.useMemo)((()=>new Array(12).fill("").map(((e,n)=>o()(t).month(n)))),[t]);(0,r.useEffect)((()=>{const e=document.getElementById("vm-calendar-year-".concat(l));e&&e.scrollIntoView({block:"center"})}),[]);return Nt("div",{className:"vm-calendar-years",children:s.map((e=>{return Nt("div",{className:Cr()({"vm-calendar-years__year":!0,"vm-calendar-years__year_selected":e.format("MM")===l,"vm-calendar-years__year_today":e.format("MM")===i}),id:"vm-calendar-year-".concat(e.format("MM")),onClick:(t=e,()=>{a(t)}),children:e.format("MMMM")},e.format("MM"));var t}))})};var no=function(e){return e[e.days=0]="days",e[e.months=1]="months",e[e.years=2]="years",e}(no||{});const ro=e=>{let{date:t,format:n=Pt,onChange:a}=e;const[i,l]=(0,r.useState)(no.days),[s,c]=(0,r.useState)(o().tz(t)),[u,d]=(0,r.useState)(o().tz(t)),h=o().tz(),m=h.format(It)===s.format(It),{isMobile:p}=ea(),f=e=>{c(e),l((e=>e===no.years?no.months:no.days))};return(0,r.useEffect)((()=>{u.format()!==o().tz(t).format()&&a(u.format(n))}),[u]),(0,r.useEffect)((()=>{const e=o().tz(t);c(e),d(e)}),[t]),Nt("div",{className:Cr()({"vm-calendar":!0,"vm-calendar_mobile":p}),children:[Nt(Ga,{viewDate:s,onChangeViewDate:f,toggleDisplayYears:()=>{l((e=>e===no.years?no.days:no.years))},showArrowNav:i===no.days}),i===no.days&&Nt(Xa,{viewDate:s,selectDate:u,onChangeSelectDate:e=>{d(e)}}),i===no.years&&Nt(eo,{viewDate:s,onChangeViewDate:f}),i===no.months&&Nt(to,{selectDate:u,viewDate:s,onChangeViewDate:f}),!m&&i===no.days&&Nt("div",{className:"vm-calendar-footer",children:Nt(la,{variant:"text",size:"small",onClick:()=>{c(h)},children:"show today"})})]})},ao=(0,r.forwardRef)(((e,t)=>{let{date:n,targetRef:a,format:i=Pt,onChange:l,label:s}=e;const c=(0,r.useMemo)((()=>o()(n).isValid()?o().tz(n):o()().tz()),[n]),{isMobile:u}=ea(),{value:d,toggle:h,setFalse:m}=ca(!1);return Ar("click",h,a),Ar("keyup",(e=>{"Escape"!==e.key&&"Enter"!==e.key||m()})),Nt(Ct.FK,{children:Nt(sa,{open:d,buttonRef:a,placement:"bottom-right",onClose:m,title:u?s:void 0,children:Nt("div",{ref:t,children:Nt(ro,{date:c,format:i,onChange:e=>{l(e),m()}})})})})}));var oo=n(494),io=n.n(oo);const lo=e=>o()(e).isValid()?o().tz(e).format(Pt):e,so=e=>{let{value:t="",label:n,pickerLabel:a,pickerRef:i,onChange:l,onEnter:s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(null),[h,m]=(0,r.useState)(lo(t)),[p,f]=(0,r.useState)(!1),[v,g]=(0,r.useState)(!1),y=o()(h).isValid()?"":"Invalid date format";return(0,r.useEffect)((()=>{const e=lo(t);e!==h&&m(e),v&&(s(),g(!1))}),[t]),(0,r.useEffect)((()=>{p&&u&&(u.focus(),u.setSelectionRange(11,11),f(!1))}),[p]),Nt("div",{className:Cr()({"vm-date-time-input":!0,"vm-date-time-input_error":y}),children:[Nt("label",{children:n}),Nt(io(),{tabIndex:1,inputRef:d,mask:"9999-99-99 99:99:99",placeholder:"YYYY-MM-DD HH:mm:ss",value:h,autoCapitalize:"none",inputMode:"numeric",maskChar:null,onChange:e=>{m(e.currentTarget.value)},onBlur:()=>{l(h)},onKeyUp:e=>{"Enter"===e.key&&(l(h),g(!0))}}),y&&Nt("span",{className:"vm-date-time-input__error-text",children:y}),Nt("div",{className:"vm-date-time-input__icon",ref:c,children:Nt(la,{variant:"text",color:"gray",size:"small",startIcon:Nt($n,{}),ariaLabel:"calendar"})}),Nt(ao,{label:a,ref:i,date:h,onChange:e=>{m(e),f(!0)},targetRef:c})]})},co=()=>{const{isMobile:e}=ea(),{isDarkTheme:t}=Mt(),n=(0,r.useRef)(null),a=Mr(),i=(0,r.useMemo)((()=>a.width>1120),[a]),[l,s]=(0,r.useState)(),[c,u]=(0,r.useState)(),{period:{end:d,start:h},relativeTime:m,timezone:p,duration:f}=fn(),v=vn(),g=Qe(),y=Ka(p),{value:_,toggle:b,setFalse:w}=ca(!1),k=(0,r.useMemo)((()=>({region:p,utc:on(p)})),[p]);(0,r.useEffect)((()=>{s(Xt(tn(d)))}),[p,d]),(0,r.useEffect)((()=>{u(Xt(tn(h)))}),[p,h]);const x=e=>{let{duration:t,until:n,id:r}=e;v({type:"SET_RELATIVE_TIME",payload:{duration:t,until:n,id:r}}),w()},S=(0,r.useMemo)((()=>({start:o().tz(tn(h)).format(Pt),end:o().tz(tn(d)).format(Pt)})),[h,d,p]),C=(0,r.useMemo)((()=>m&&"none"!==m?m.replace(/_/g," "):"".concat(S.start," - ").concat(S.end)),[m,S]),E=(0,r.useRef)(null),N=(0,r.useRef)(null),A=(0,r.useRef)(null),M=()=>{c&&l&&v({type:"SET_PERIOD",payload:{from:o().tz(c).toDate(),to:o().tz(l).toDate()}}),w()};return(0,r.useEffect)((()=>{const e=an({relativeTimeId:m,defaultDuration:f,defaultEndInput:tn(d)});y&&p!==y&&x({id:e.relativeTimeId,duration:e.duration,until:e.endInput})}),[p,y]),ia(n,(t=>{var n,r;if(e)return;const a=t.target,o=(null===E||void 0===E?void 0:E.current)&&(null===E||void 0===E||null===(n=E.current)||void 0===n?void 0:n.contains(a)),i=(null===N||void 0===N?void 0:N.current)&&(null===N||void 0===N||null===(r=N.current)||void 0===r?void 0:r.contains(a));o||i||w()})),Nt(Ct.FK,{children:[Nt("div",{ref:A,children:e?Nt("div",{className:"vm-mobile-option",onClick:b,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(Vn,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Time range"}),Nt("span",{className:"vm-mobile-option-text__value",children:C})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:i?"Time range controls":C,children:Nt(la,{className:g?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt(Vn,{}),onClick:b,ariaLabel:"time range controls",children:i&&Nt("span",{children:C})})})}),Nt(sa,{open:_,buttonRef:A,placement:"bottom-right",onClose:w,clickOutside:!1,title:e?"Time range controls":"",children:Nt("div",{className:Cr()({"vm-time-selector":!0,"vm-time-selector_mobile":e}),ref:n,children:[Nt("div",{className:"vm-time-selector-left",children:[Nt("div",{className:Cr()({"vm-time-selector-left-inputs":!0,"vm-time-selector-left-inputs_dark":t}),children:[Nt(so,{value:c,label:"From:",pickerLabel:"Date From",pickerRef:E,onChange:u,onEnter:M}),Nt(so,{value:l,label:"To:",pickerLabel:"Date To",pickerRef:N,onChange:s,onEnter:M})]}),Nt("div",{className:"vm-time-selector-left-timezone",children:[Nt("div",{className:"vm-time-selector-left-timezone__title",children:k.region}),Nt("div",{className:"vm-time-selector-left-timezone__utc",children:k.utc})]}),Nt(la,{variant:"text",startIcon:Nt(Un,{}),onClick:()=>v({type:"RUN_QUERY_TO_NOW"}),children:"switch to now"}),Nt("div",{className:"vm-time-selector-left__controls",children:[Nt(la,{color:"error",variant:"outlined",onClick:()=>{s(Xt(tn(d))),u(Xt(tn(h))),w()},children:"Cancel"}),Nt(la,{color:"primary",onClick:M,children:"Apply"})]})]}),Nt(Za,{relativeTime:m||"",setDuration:x})]})})]})},uo=()=>{const e=oe(),[t,n]=He();return{setSearchParamsFromKeys:(0,r.useCallback)((r=>{const a=!!Array.from(t.values()).length;let o=!1;Object.entries(r).forEach((e=>{let[n,r]=e;t.get(n)!=="".concat(r)&&(t.set(n,"".concat(r)),o=!0)})),o&&(a?n(t):e("?".concat(t.toString()),{replace:!0}))}),[t,e])}},ho=()=>{const{isMobile:e}=ea(),t=Qe(),n=(0,r.useRef)(null),[a]=He(),{setSearchParamsFromKeys:i}=uo(),l=a.get("date")||o()().tz().format(It),s=(0,r.useMemo)((()=>o().tz(l).format(It)),[l]),c=e=>{i({date:e})};return(0,r.useEffect)((()=>{c(l)}),[]),Nt("div",{children:[Nt("div",{ref:n,children:e?Nt("div",{className:"vm-mobile-option",children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt($n,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Date control"}),Nt("span",{className:"vm-mobile-option-text__value",children:s})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:"Date control",children:Nt(la,{className:t?"":"vm-header-button",variant:"contained",color:"primary",startIcon:Nt($n,{}),children:s})})}),Nt(ao,{label:"Date control",date:l||"",format:It,onChange:c,targetRef:n})]})},mo=[{seconds:0,title:"Off"},{seconds:1,title:"1s"},{seconds:2,title:"2s"},{seconds:5,title:"5s"},{seconds:10,title:"10s"},{seconds:30,title:"30s"},{seconds:60,title:"1m"},{seconds:300,title:"5m"},{seconds:900,title:"15m"},{seconds:1800,title:"30m"},{seconds:3600,title:"1h"},{seconds:7200,title:"2h"}],po=()=>{const{isMobile:e}=ea(),t=vn(),n=Qe(),[a,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(mo[0]),{value:s,toggle:c,setFalse:u}=ca(!1),d=(0,r.useRef)(null);(0,r.useEffect)((()=>{const e=i.seconds;let n;return a?n=setInterval((()=>{t({type:"RUN_QUERY"})}),1e3*e):l(mo[0]),()=>{n&&clearInterval(n)}}),[i,a]);const h=e=>()=>{(e=>{(a&&!e.seconds||!a&&e.seconds)&&o((e=>!e)),l(e),u()})(e)};return Nt(Ct.FK,{children:[Nt("div",{className:"vm-execution-controls",children:Nt("div",{className:Cr()({"vm-execution-controls-buttons":!0,"vm-execution-controls-buttons_mobile":e,"vm-header-button":!n}),children:[!e&&Nt(ya,{title:"Refresh dashboard",children:Nt(la,{variant:"contained",color:"primary",onClick:()=>{t({type:"RUN_QUERY"})},startIcon:Nt(Fn,{}),ariaLabel:"refresh dashboard"})}),e?Nt("div",{className:"vm-mobile-option",onClick:c,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(Pn,{})}),Nt("div",{className:"vm-mobile-option-text",children:[Nt("span",{className:"vm-mobile-option-text__label",children:"Auto-refresh"}),Nt("span",{className:"vm-mobile-option-text__value",children:i.title})]}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:"Auto-refresh control",children:Nt("div",{ref:d,children:Nt(la,{variant:"contained",color:"primary",fullWidth:!0,endIcon:Nt("div",{className:Cr()({"vm-execution-controls-buttons__arrow":!0,"vm-execution-controls-buttons__arrow_open":s}),children:Nt(jn,{})}),onClick:c,children:i.title})})})]})}),Nt(sa,{open:s,placement:"bottom-right",onClose:u,buttonRef:d,title:e?"Auto-refresh duration":void 0,children:Nt("div",{className:Cr()({"vm-execution-controls-list":!0,"vm-execution-controls-list_mobile":e}),children:mo.map((t=>Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":e,"vm-list-item_active":t.seconds===i.seconds}),onClick:h(t),children:t.title},t.seconds)))})})]})},fo="Enable to save the modified server URL to local storage, preventing reset upon page refresh.",vo="Disable to stop saving the server URL to local storage, reverting to the default URL on page refresh.",go=(0,r.forwardRef)(((e,t)=>{let{onClose:n}=e;const{serverUrl:a}=Mt(),o=Tt(),{value:i,toggle:l}=ca(!!et("SERVER_URL")),[s,c]=(0,r.useState)(a),[u,d]=(0,r.useState)(""),h=(0,r.useCallback)((()=>{const e=Je(s);""!==e&&o({type:"SET_TENANT_ID",payload:e}),o({type:"SET_SERVER",payload:s}),n()}),[s]);return(0,r.useEffect)((()=>{a||d(pt.emptyServer),bt(a)||d(pt.validServer)}),[a]),(0,r.useEffect)((()=>{i?Xe("SERVER_URL",s):tt(["SERVER_URL"])}),[i]),(0,r.useEffect)((()=>{i&&Xe("SERVER_URL",s)}),[s]),(0,r.useEffect)((()=>{a!==s&&c(a)}),[a]),(0,r.useImperativeHandle)(t,(()=>({handleApply:h})),[h]),Nt("div",{children:[Nt("div",{className:"vm-server-configurator__title",children:"Server URL"}),Nt("div",{className:"vm-server-configurator-url",children:[Nt(Ya,{autofocus:!0,value:s,error:u,onChange:e=>{c(e||""),d("")},onEnter:h,inputmode:"url"}),Nt(ya,{title:i?vo:fo,children:Nt(la,{className:"vm-server-configurator-url__button",variant:"text",color:i?"primary":"gray",onClick:l,startIcon:Nt(cr,{})})})]})]})})),yo=[{label:"Graph",type:mt.chart},{label:"JSON",type:mt.code},{label:"Table",type:mt.table}],_o=(0,r.forwardRef)(((e,t)=>{let{onClose:n}=e;const{isMobile:a}=ea(),{seriesLimits:o}=Fr(),i=jr(),[l,s]=(0,r.useState)(o),[c,u]=(0,r.useState)({table:"",chart:"",code:""}),d=(0,r.useCallback)((()=>{i({type:"SET_SERIES_LIMITS",payload:l}),n()}),[l]);return(0,r.useImperativeHandle)(t,(()=>({handleApply:d})),[d]),Nt("div",{className:"vm-limits-configurator",children:[Nt("div",{className:"vm-server-configurator__title",children:["Series limits by tabs",Nt(ya,{title:"Set to 0 to disable the limit",children:Nt(la,{variant:"text",color:"primary",size:"small",startIcon:Nt(On,{})})}),Nt("div",{className:"vm-limits-configurator-title__reset",children:Nt(la,{variant:"text",color:"primary",size:"small",startIcon:Nt(Pn,{}),onClick:()=>{s(lt)},children:"Reset limits"})})]}),Nt("div",{className:Cr()({"vm-limits-configurator__inputs":!0,"vm-limits-configurator__inputs_mobile":a}),children:yo.map((e=>{return Nt("div",{children:Nt(Ya,{label:e.label,value:l[e.type],error:c[e.type],onChange:(t=e.type,e=>{const n=e||"";u((e=>({...e,[t]:+n<0?pt.positiveNumber:""}))),s({...l,[t]:n||1/0})}),onEnter:d,type:"number"})},e.type);var t}))})]})})),bo=_o,wo=e=>{let{defaultExpanded:t=!1,onChange:n,title:a,children:o}=e;const[i,l]=(0,r.useState)(t);return(0,r.useEffect)((()=>{n&&n(i)}),[i]),Nt(Ct.FK,{children:[Nt("header",{className:"vm-accordion-header ".concat(i&&"vm-accordion-header_open"),onClick:()=>{l((e=>!e))},children:[a,Nt("div",{className:"vm-accordion-header__arrow ".concat(i&&"vm-accordion-header__arrow_open"),children:Nt(jn,{})})]}),i&&Nt("section",{className:"vm-accordion-section",children:o},"content")]})},ko=()=>Nt(ya,{title:"Browser timezone is not recognized, supported, or could not be determined.",children:Nt(Rn,{})}),xo=cn(),So=(0,r.forwardRef)(((e,t)=>{const{isMobile:n}=ea(),a=ln(),{timezone:o,defaultTimezone:i}=fn(),l=vn(),[s,c]=(0,r.useState)(o),[u,d]=(0,r.useState)(""),h=(0,r.useRef)(null),{value:m,toggle:p,setFalse:f}=ca(!1),v=(0,r.useMemo)((()=>[{title:"Default time (".concat(i,")"),region:i,utc:i?on(i):"UTC"},{title:xo.title,region:xo.region,utc:on(xo.region),isInvalid:!xo.isValid},{title:"UTC (Coordinated Universal Time)",region:"UTC",utc:"UTC"}].filter((e=>e.region))),[i]),g=(0,r.useMemo)((()=>{if(!u)return a;try{return ln(u)}catch(Lp){return{}}}),[u,a]),y=(0,r.useMemo)((()=>Object.keys(g)),[g]),_=(0,r.useMemo)((()=>({region:s,utc:on(s)})),[s]),b=e=>()=>{(e=>{c(e.region),d(""),f()})(e)};return(0,r.useEffect)((()=>{c(o)}),[o]),(0,r.useImperativeHandle)(t,(()=>({handleApply:()=>{l({type:"SET_TIMEZONE",payload:s})}})),[s]),Nt("div",{className:"vm-timezones",children:[Nt("div",{className:"vm-server-configurator__title",children:"Time zone"}),Nt("div",{className:"vm-timezones-item vm-timezones-item_selected",onClick:p,ref:h,children:[Nt("div",{className:"vm-timezones-item__title",children:_.region}),Nt("div",{className:"vm-timezones-item__utc",children:_.utc}),Nt("div",{className:Cr()({"vm-timezones-item__icon":!0,"vm-timezones-item__icon_open":m}),children:Nt(Hn,{})})]}),Nt(sa,{open:m,buttonRef:h,placement:"bottom-left",onClose:f,fullWidth:!0,title:n?"Time zone":void 0,children:Nt("div",{className:Cr()({"vm-timezones-list":!0,"vm-timezones-list_mobile":n}),children:[Nt("div",{className:"vm-timezones-list-header",children:[Nt("div",{className:"vm-timezones-list-header__search",children:Nt(Ya,{autofocus:!0,label:"Search",value:u,onChange:e=>{d(e)}})}),v.map(((e,t)=>e&&Nt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[Nt("div",{className:"vm-timezones-item__title",children:[e.title,e.isInvalid&&Nt(ko,{})]}),Nt("div",{className:"vm-timezones-item__utc",children:e.utc})]},"".concat(t,"_").concat(e.region))))]}),y.map((e=>Nt("div",{className:"vm-timezones-list-group",children:Nt(wo,{defaultExpanded:!0,title:Nt("div",{className:"vm-timezones-list-group__title",children:e}),children:Nt("div",{className:"vm-timezones-list-group-options",children:g[e]&&g[e].map((e=>Nt("div",{className:"vm-timezones-item vm-timezones-list-group-options__item",onClick:b(e),children:[Nt("div",{className:"vm-timezones-item__title",children:e.region}),Nt("div",{className:"vm-timezones-item__utc",children:e.utc})]},e.search)))})})},e)))]})})]})})),Co=So,Eo=e=>{let{options:t,value:n,label:a,onChange:o}=e;const i=(0,r.useRef)(null),[l,s]=(0,r.useState)({width:"0px",left:"0px",borderRadius:"0px"}),c=e=>()=>{o(e)};return(0,r.useEffect)((()=>{if(!i.current)return void s({width:"0px",left:"0px",borderRadius:"0px"});const e=t.findIndex((e=>e.value===n)),{width:r}=i.current.getBoundingClientRect();let a=r,o=e*a,l="0";0===e&&(l="16px 0 0 16px"),e===t.length-1&&(l="10px",o-=1,l="0 16px 16px 0"),0!==e&&e!==t.length-1&&(a+=1,o-=1),s({width:"".concat(a,"px"),left:"".concat(o,"px"),borderRadius:l})}),[i,n,t]),Nt("div",{className:"vm-toggles",children:[a&&Nt("label",{className:"vm-toggles__label",children:a}),Nt("div",{className:"vm-toggles-group",style:{gridTemplateColumns:"repeat(".concat(t.length,", 1fr)")},children:[l.borderRadius&&Nt("div",{className:"vm-toggles-group__highlight",style:l}),t.map(((e,t)=>Nt("div",{className:Cr()({"vm-toggles-group-item":!0,"vm-toggles-group-item_first":0===t,"vm-toggles-group-item_active":e.value===n,"vm-toggles-group-item_icon":e.icon&&e.title}),onClick:c(e.value),ref:e.value===n?i:null,children:[e.icon,e.title]},e.value)))]})]})},No=Object.values(ft).map((e=>({title:e,value:e}))),Ao=()=>{const{isMobile:e}=ea(),t=Tt(),{theme:n}=Mt();return Nt("div",{className:Cr()({"vm-theme-control":!0,"vm-theme-control_mobile":e}),children:[Nt("div",{className:"vm-server-configurator__title",children:"Theme preferences"}),Nt("div",{className:"vm-theme-control__toggle",children:Nt(Eo,{options:No,value:n,onChange:e=>{t({type:"SET_THEME",payload:e})}})},"".concat(e))]})},Mo=e=>{let{value:t=!1,disabled:n=!1,label:r,color:a="secondary",fullWidth:o,onChange:i}=e;return Nt("div",{className:Cr()({"vm-switch":!0,"vm-switch_full-width":o,"vm-switch_disabled":n,"vm-switch_active":t,["vm-switch_".concat(a,"_active")]:t,["vm-switch_".concat(a)]:a}),onClick:()=>{n||i(!t)},children:[Nt("div",{className:"vm-switch-track",children:Nt("div",{className:"vm-switch-track__thumb"})}),r&&Nt("span",{className:"vm-switch__label",children:r})]})},To=()=>{const{isMobile:e}=ea(),{markdownParsing:t}=(0,r.useContext)(Gr).state,n=(0,r.useContext)(Gr).dispatch;return Nt("div",{children:[Nt("div",{className:"vm-server-configurator__title",children:"Markdown Parsing for Logs"}),Nt(Mo,{label:t?"Disable markdown parsing":"Enable markdown parsing",value:t,onChange:e=>{n({type:"SET_MARKDOWN_PARSING",payload:e})},fullWidth:e}),Nt("div",{className:"vm-server-configurator__info",children:"Toggle this switch to enable or disable the Markdown formatting for log entries. Enabling this will parse log texts to Markdown."})]})},Lo="Settings",{REACT_APP_TYPE:Io}={},Po=Io===Ve.logs,Oo=()=>{const{isMobile:e}=ea(),t=Qe(),n=(0,r.useRef)(null),a=(0,r.useRef)(null),o=(0,r.useRef)(null),{value:i,setTrue:l,setFalse:s}=ca(!1),c=[{show:!t&&!Po,component:Nt(go,{ref:n,onClose:s})},{show:!Po,component:Nt(bo,{ref:a,onClose:s})},{show:Po,component:Nt(To,{})},{show:!0,component:Nt(Co,{ref:o})},{show:!t,component:Nt(Ao,{})}].filter((e=>e.show));return Nt(Ct.FK,{children:[e?Nt("div",{className:"vm-mobile-option",onClick:l,children:[Nt("span",{className:"vm-mobile-option__icon",children:Nt(Ln,{})}),Nt("div",{className:"vm-mobile-option-text",children:Nt("span",{className:"vm-mobile-option-text__label",children:Lo})}),Nt("span",{className:"vm-mobile-option__arrow",children:Nt(jn,{})})]}):Nt(ya,{title:Lo,children:Nt(la,{className:Cr()({"vm-header-button":!t}),variant:"contained",color:"primary",startIcon:Nt(Ln,{}),onClick:l,ariaLabel:"settings"})}),i&&Nt(ga,{title:Lo,onClose:s,children:Nt("div",{className:Cr()({"vm-server-configurator":!0,"vm-server-configurator_mobile":e}),children:[c.map(((e,t)=>Nt("div",{className:"vm-server-configurator__input",children:e.component},t))),Nt("div",{className:"vm-server-configurator-footer",children:[Nt(la,{color:"error",variant:"outlined",onClick:s,children:"Cancel"}),Nt(la,{color:"primary",variant:"contained",onClick:()=>{n.current&&n.current.handleApply(),a.current&&a.current.handleApply(),o.current&&o.current.handleApply(),s()},children:"Apply"})]})]})})]})},Ro=e=>{let{displaySidebar:t,isMobile:n,headerSetup:r,accountIds:a}=e;return Nt("div",{className:Cr()({"vm-header-controls":!0,"vm-header-controls_mobile":n}),children:[(null===r||void 0===r?void 0:r.tenant)&&Nt(Wa,{accountIds:a||[]}),(null===r||void 0===r?void 0:r.stepControl)&&Nt(Qa,{}),(null===r||void 0===r?void 0:r.timeSelector)&&Nt(co,{}),(null===r||void 0===r?void 0:r.cardinalityDatePicker)&&Nt(ho,{}),(null===r||void 0===r?void 0:r.executionControls)&&Nt(po,{}),Nt(Oo,{}),!t&&Nt(Ta,{})]})},Do=Boolean(et("DISABLED_DEFAULT_TIMEZONE")),zo=()=>{const{serverUrl:e}=Mt(),t=vn(),[n,a]=(0,r.useState)(!1),[i,l]=(0,r.useState)(""),s=async()=>{if(e&&!{NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!1}.REACT_APP_TYPE){l(""),a(!0);try{const n=await fetch("".concat(e,"/vmui/timezone")),r=await n.json();n.ok?((e=>{const n="local"===e.toLowerCase()?cn().region:e;try{if(o()().tz(n).isValid(),t({type:"SET_DEFAULT_TIMEZONE",payload:n}),Do)return;t({type:"SET_TIMEZONE",payload:n})}catch(Lp){Lp instanceof Error&&l("".concat(Lp.name,": ").concat(Lp.message))}})(r.timezone),a(!1)):(l(r.error),a(!1))}catch(Lp){a(!1),Lp instanceof Error&&l("".concat(Lp.name,": ").concat(Lp.message))}}};return(0,r.useEffect)((()=>{s()}),[e]),{isLoading:n,error:i}},Fo=()=>{const e=Qe(),{isMobile:t}=ea(),{pathname:n}=re(),[a,o]=He();Ba(),zo();return(0,r.useEffect)((()=>{var e;const t="vmui",r=null===(e=Ye[n])||void 0===e?void 0:e.title;document.title=r?"".concat(r," - ").concat(t):t}),[n]),(0,r.useEffect)((()=>{const{search:e,href:t}=window.location;if(e){const t=at().parse(e,{ignoreQueryPrefix:!0});Object.entries(t).forEach((e=>{let[t,n]=e;return a.set(t,n)})),o(a),window.location.search=""}const n=t.replace(/\/\?#\//,"/#/");n!==t&&window.location.replace(n)}),[]),Nt("section",{className:"vm-container",children:[Nt(ja,{controlsComponent:Ro}),Nt("div",{className:Cr()({"vm-container-body":!0,"vm-container-body_mobile":t,"vm-container-body_app":e}),children:Nt(be,{})}),!e&&Nt(Ua,{})]})};var jo=function(e){return e[e.mouse=0]="mouse",e[e.keyboard=1]="keyboard",e}(jo||{});const Ho=e=>{var t;let{value:n,options:a,anchor:o,disabled:i,minLength:l=2,fullWidth:s,selected:c,noOptionsText:u,label:d,disabledFullScreen:h,offset:m,maxDisplayResults:p,loading:f,onSelect:v,onOpenAutocomplete:g,onFoundOptions:y,onChangeWrapperRef:_}=e;const{isMobile:b}=ea(),w=(0,r.useRef)(null),[k,x]=(0,r.useState)({index:-1}),[S,C]=(0,r.useState)(""),[E,N]=(0,r.useState)(0),{value:A,setValue:M,setFalse:T}=ca(!1),L=(0,r.useMemo)((()=>{if(!A)return[];try{const e=new RegExp(String(n.trim()),"i"),t=a.filter((t=>e.test(t.value))).sort(((t,r)=>{var a,o;return t.value.toLowerCase()===n.trim().toLowerCase()?-1:r.value.toLowerCase()===n.trim().toLowerCase()?1:((null===(a=t.value.match(e))||void 0===a?void 0:a.index)||0)-((null===(o=r.value.match(e))||void 0===o?void 0:o.index)||0)}));return N(t.length),C(t.length>Number(null===p||void 0===p?void 0:p.limit)&&(null===p||void 0===p?void 0:p.message)||""),null!==p&&void 0!==p&&p.limit?t.slice(0,p.limit):t}catch(Lp){return[]}}),[A,a,n]),I=(0,r.useMemo)((()=>{var e;return 1===L.length&&(null===(e=L[0])||void 0===e?void 0:e.value)===n}),[L]),P=(0,r.useMemo)((()=>u&&!L.length),[u,L]),O=()=>{x({index:-1})},R=(0,r.useCallback)((e=>{const{key:t,ctrlKey:n,metaKey:r,shiftKey:a}=e,o=n||r||a,i=L.length&&!I;if("ArrowUp"===t&&!o&&i&&(e.preventDefault(),x((e=>{let{index:t}=e;return{index:t<=0?0:t-1,type:jo.keyboard}}))),"ArrowDown"===t&&!o&&i){e.preventDefault();const t=L.length-1;x((e=>{let{index:n}=e;return{index:n>=t?t:n+1,type:jo.keyboard}}))}if("Enter"===t){const e=L[k.index];e&&v(e.value),c||T()}"Escape"===t&&T()}),[k,L,I,T,v,c]);return(0,r.useEffect)((()=>{M(n.length>=l)}),[n,a]),Ar("keydown",R),(0,r.useEffect)((()=>{if(!w.current||k.type===jo.mouse)return;const e=w.current.childNodes[k.index];null!==e&&void 0!==e&&e.scrollIntoView&&e.scrollIntoView({block:"center"})}),[k,L]),(0,r.useEffect)((()=>{x({index:-1})}),[L]),(0,r.useEffect)((()=>{g&&g(A)}),[A]),(0,r.useEffect)((()=>{y&&y(I?[]:L)}),[L,I]),(0,r.useEffect)((()=>{_&&_(w)}),[w]),Nt(sa,{open:A,buttonRef:o,placement:"bottom-left",onClose:T,fullWidth:s,title:b?d:void 0,disabledFullScreen:h,offset:m,children:[Nt("div",{className:Cr()({"vm-autocomplete":!0,"vm-autocomplete_mobile":b&&!h}),ref:w,children:[f&&Nt("div",{className:"vm-autocomplete__loader",children:[Nt(Fn,{}),Nt("span",{children:"Loading..."})]}),P&&Nt("div",{className:"vm-autocomplete__no-options",children:u}),!I&&L.map(((e,t)=>{return Nt("div",{className:Cr()({"vm-list-item":!0,"vm-list-item_mobile":b,"vm-list-item_active":t===k.index,"vm-list-item_multiselect":c,"vm-list-item_multiselect_selected":null===c||void 0===c?void 0:c.includes(e.value),"vm-list-item_with-icon":e.icon}),id:"$autocomplete$".concat(e.value),onClick:(r=e.value,()=>{i||(v(r),c||T())}),onMouseEnter:(n=t,()=>{x({index:n,type:jo.mouse})}),onMouseLeave:O,children:[(null===c||void 0===c?void 0:c.includes(e.value))&&Nt(Xn,{}),Nt(Ct.FK,{children:e.icon}),Nt("span",{children:e.value})]},"".concat(t).concat(e.value));var n,r}))]}),S&&Nt("div",{className:"vm-autocomplete-message",children:["Shown ",null===p||void 0===p?void 0:p.limit," results out of ",E,". ",S]}),(null===(t=L[k.index])||void 0===t?void 0:t.description)&&Nt("div",{className:"vm-autocomplete-info",children:[Nt("div",{className:"vm-autocomplete-info__type",children:L[k.index].type}),Nt("div",{className:"vm-autocomplete-info__description",dangerouslySetInnerHTML:{__html:L[k.index].description||""}})]})]})};var Vo=n(267),$o=n.n(Vo);const Uo=e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&"),Bo=e=>JSON.stringify(e).slice(1,-1),qo=e=>{const t=e.match(/["`']/g);return!!t&&t.length%2!==0};var Yo=function(e){return e.metric="metric",e.label="label",e.labelValue="labelValue",e}(Yo||{});const Wo={[Yo.metric]:Nt(vr,{}),[Yo.label]:Nt(yr,{}),[Yo.labelValue]:Nt(_r,{})};function Ko(e){return Ko="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ko(e)}function Qo(e){var t=function(e,t){if("object"!=Ko(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Ko(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ko(t)?t:t+""}function Zo(e,t,n){return(t=Qo(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Go(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let Jo={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function Xo(e){Jo=e}const ei=/[&<>"']/,ti=new RegExp(ei.source,"g"),ni=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,ri=new RegExp(ni.source,"g"),ai={"&":"&","<":"<",">":">",'"':""","'":"'"},oi=e=>ai[e];function ii(e,t){if(t){if(ei.test(e))return e.replace(ti,oi)}else if(ni.test(e))return e.replace(ri,oi);return e}const li=/(^|[^\[])\^/g;function si(e,t){let n="string"===typeof e?e:e.source;t=t||"";const r={replace:(e,t)=>{let a="string"===typeof t?t:t.source;return a=a.replace(li,"$1"),n=n.replace(e,a),r},getRegex:()=>new RegExp(n,t)};return r}function ci(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch{return null}return e}const ui={exec:()=>null};function di(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let r=!1,a=t;for(;--a>=0&&"\\"===n[a];)r=!r;return r?"|":" |"})).split(/ \|/);let r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^(?: {1,4}| {0,3}\t)/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:hi(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=hi(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:hi(t[0],"\n")}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=hi(t[0],"\n").split("\n"),n="",r="";const a=[];for(;e.length>0;){let t=!1;const o=[];let i;for(i=0;i/.test(e[i]))o.push(e[i]),t=!0;else{if(t)break;o.push(e[i])}e=e.slice(i);const l=o.join("\n"),s=l.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1").replace(/^ {0,3}>[ \t]?/gm,"");n=n?"".concat(n,"\n").concat(l):l,r=r?"".concat(r,"\n").concat(s):s;const c=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(s,a,!0),this.lexer.state.top=c,0===e.length)break;const u=a[a.length-1];if("code"===(null===u||void 0===u?void 0:u.type))break;if("blockquote"===(null===u||void 0===u?void 0:u.type)){const t=u,o=t.raw+"\n"+e.join("\n"),i=this.blockquote(o);a[a.length-1]=i,n=n.substring(0,n.length-t.raw.length)+i.raw,r=r.substring(0,r.length-t.text.length)+i.text;break}if("list"!==(null===u||void 0===u?void 0:u.type));else{const t=u,o=t.raw+"\n"+e.join("\n"),i=this.list(o);a[a.length-1]=i,n=n.substring(0,n.length-u.raw.length)+i.raw,r=r.substring(0,r.length-t.raw.length)+i.raw,e=o.substring(a[a.length-1].raw.length).split("\n")}}return{type:"blockquote",raw:n,tokens:a,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const r=n.length>1,a={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?"\\d{1,9}\\".concat(n.slice(-1)):"\\".concat(n),this.options.pedantic&&(n=r?n:"[*+-]");const o=new RegExp("^( {0,3}".concat(n,")((?:[\t ][^\\n]*)?(?:\\n|$))"));let i=!1;for(;e;){let n=!1,r="",l="";if(!(t=o.exec(e)))break;if(this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let s=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],u=!s.trim(),d=0;if(this.options.pedantic?(d=2,l=s.trimStart()):u?d=t[1].length+1:(d=t[2].search(/[^ ]/),d=d>4?1:d,l=s.slice(d),d+=t[1].length),u&&/^[ \t]*$/.test(c)&&(r+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp("^ {0,".concat(Math.min(3,d-1),"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))")),n=new RegExp("^ {0,".concat(Math.min(3,d-1),"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)")),a=new RegExp("^ {0,".concat(Math.min(3,d-1),"}(?:```|~~~)")),o=new RegExp("^ {0,".concat(Math.min(3,d-1),"}#")),i=new RegExp("^ {0,".concat(Math.min(3,d-1),"}<[a-z].*>"),"i");for(;e;){const h=e.split("\n",1)[0];let m;if(c=h,this.options.pedantic?(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," "),m=c):m=c.replace(/\t/g," "),a.test(c))break;if(o.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(c))break;if(m.search(/[^ ]/)>=d||!c.trim())l+="\n"+m.slice(d);else{if(u)break;if(s.replace(/\t/g," ").search(/[^ ]/)>=4)break;if(a.test(s))break;if(o.test(s))break;if(n.test(s))break;l+="\n"+c}u||c.trim()||(u=!0),r+=h+"\n",e=e.substring(h.length+1),s=m.slice(d)}}a.loose||(i?a.loose=!0:/\n[ \t]*\n[ \t]*$/.test(r)&&(i=!0));let h,m=null;this.options.gfm&&(m=/^\[[ xX]\] /.exec(l),m&&(h="[ ] "!==m[0],l=l.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:r,task:!!m,checked:h,loose:!1,text:l,tokens:[]}),a.raw+=r}a.items[a.items.length-1].raw=a.items[a.items.length-1].raw.trimEnd(),a.items[a.items.length-1].text=a.items[a.items.length-1].text.trimEnd(),a.raw=a.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));a.loose=n}if(a.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:r}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=di(t[1]),r=t[2].replace(/^\||\| *$/g,"").split("|"),a=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],o={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(const e of r)/^ *-+: *$/.test(e)?o.align.push("right"):/^ *:-+: *$/.test(e)?o.align.push("center"):/^ *:-+ *$/.test(e)?o.align.push("left"):o.align.push(null);for(let e=0;e({text:e,tokens:this.lexer.inline(e),header:!1,align:o.align[t]}))));return o}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:ii(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=hi(e.slice(0,-1),"\\");if((e.length-t.length)%2===0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let r=0;r-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),mi(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:r?r.replace(this.rules.inline.anyPunctuation,"$1"):r},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return mi(n,e,n[0],this.lexer)}}emStrong(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this.rules.inline.emStrongLDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...r[0]].length-1;let a,o,i=n,l=0;const s="*"===r[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(s.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=s.exec(t));){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){i+=o;continue}if((r[5]||r[6])&&n%3&&!((n+o)%3)){l+=o;continue}if(i-=o,i>0)continue;o=Math.min(o,o+i+l);const t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+o);if(Math.min(n,o)%2){const e=s.slice(1,-1);return{type:"em",raw:s,text:e,tokens:this.lexer.inlineTokens(e)}}const c=s.slice(2,-2);return{type:"strong",raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=ii(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=ii(t[1]),n="mailto:"+e):(e=ii(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,a;if("@"===t[2])e=ii(t[0]),a="mailto:"+e;else{let o;do{var n,r;o=t[0],t[0]=null!==(n=null===(r=this.rules.inline._backpedal.exec(t[0]))||void 0===r?void 0:r[0])&&void 0!==n?n:""}while(o!==t[0]);e=ii(t[0]),a="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:a,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:ii(t[0]),{type:"text",raw:t[0],text:e}}}}const fi=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,vi=/(?:[*+-]|\d{1,9}[.)])/,gi=si(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,vi).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),yi=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,_i=/(?!\s*\])(?:\\.|[^\[\]\\])+/,bi=si(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",_i).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),wi=si(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,vi).getRegex(),ki="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",xi=/|$))/,Si=si("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",xi).replace("tag",ki).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Ci=si(yi).replace("hr",fi).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ki).getRegex(),Ei={blockquote:si(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Ci).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:bi,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:fi,html:Si,lheading:gi,list:wi,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:Ci,table:ui,text:/^[^\n]+/},Ni=si("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",fi).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ki).getRegex(),Ai={...Ei,table:Ni,paragraph:si(yi).replace("hr",fi).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ni).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ki).getRegex()},Mi={...Ei,html:si("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",xi).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ui,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:si(yi).replace("hr",fi).replace("heading"," *#{1,6} *[^\n]").replace("lheading",gi).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ti=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Li=/^( {2,}|\\)\n(?!\s*$)/,Ii="\\p{P}\\p{S}",Pi=si(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,Ii).getRegex(),Oi=si(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,Ii).getRegex(),Ri=si("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,Ii).getRegex(),Di=si("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,Ii).getRegex(),zi=si(/\\([punct])/,"gu").replace(/punct/g,Ii).getRegex(),Fi=si(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ji=si(xi).replace("(?:--\x3e|$)","--\x3e").getRegex(),Hi=si("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",ji).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Vi=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,$i=si(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Vi).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ui=si(/^!?\[(label)\]\[(ref)\]/).replace("label",Vi).replace("ref",_i).getRegex(),Bi=si(/^!?\[(ref)\](?:\[\])?/).replace("ref",_i).getRegex(),qi={_backpedal:ui,anyPunctuation:zi,autolink:Fi,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:Li,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:ui,emStrongLDelim:Oi,emStrongRDelimAst:Ri,emStrongRDelimUnd:Di,escape:Ti,link:$i,nolink:Bi,punctuation:Pi,reflink:Ui,reflinkSearch:si("reflink|nolink(?!\\()","g").replace("reflink",Ui).replace("nolink",Bi).getRegex(),tag:Hi,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(this.options.pedantic&&(e=e.replace(/\t/g," ").replace(/^ +$/gm,""));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((n=>!!(t=n.call({lexer:this},e,a))&&(e=e.substring(t.raw.length),a.push(t),!0)))))if(t=this.tokenizer.space(e))e=e.substring(t.raw.length),1===t.raw.length&&a.length>0?a[a.length-1].raw+="\n":a.push(t);else if(t=this.tokenizer.code(e))e=e.substring(t.raw.length),n=a[a.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?a.push(t):(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.fences(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.heading(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.hr(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.blockquote(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.list(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.html(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.def(e))e=e.substring(t.raw.length),n=a[a.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(n.raw+="\n"+t.raw,n.text+="\n"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.table(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.lheading(e))e=e.substring(t.raw.length),a.push(t);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let a;this.options.extensions.startBlock.forEach((e=>{a=e.call({lexer:this},n),"number"===typeof a&&a>=0&&(t=Math.min(t,a))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}var i;if(this.state.top&&(t=this.tokenizer.paragraph(r)))n=a[a.length-1],o&&"paragraph"===(null===(i=n)||void 0===i?void 0:i.type)?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):a.push(t),o=r.length!==e.length,e=e.substring(t.raw.length);else if(t=this.tokenizer.text(e))e=e.substring(t.raw.length),n=a[a.length-1],n&&"text"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):a.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,a}inline(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e){let t,n,r,a,o,i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],s=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(s));)e.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(s));)s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(a=this.tokenizer.rules.inline.anyPunctuation.exec(s));)s=s.slice(0,a.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(o||(i=""),o=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((n=>!!(t=n.call({lexer:this},e,l))&&(e=e.substring(t.raw.length),l.push(t),!0)))))if(t=this.tokenizer.escape(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.tag(e))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.link(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.emStrong(e,s,i))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.codespan(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.br(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.del(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.autolink(e))e=e.substring(t.raw.length),l.push(t);else if(this.state.inLink||!(t=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let a;this.options.extensions.startInline.forEach((e=>{a=e.call({lexer:this},n),"number"===typeof a&&a>=0&&(t=Math.min(t,a))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(t=this.tokenizer.inlineText(r))e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(i=t.raw.slice(-1)),o=!0,n=l[l.length-1],n&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(t.raw.length),l.push(t);return l}}class Ji{constructor(e){Zo(this,"options",void 0),Zo(this,"parser",void 0),this.options=e||Jo}space(e){return""}code(e){var t;let{text:n,lang:r,escaped:a}=e;const o=null===(t=(r||"").match(/^\S*/))||void 0===t?void 0:t[0],i=n.replace(/\n$/,"")+"\n";return o?'

    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 z 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.r(n),t.d(n,{CLSThresholds:()=>I,FCPThresholds:()=>S,FIDThresholds:()=>N,INPThresholds:()=>G,LCPThresholds:()=>X,TTFBThresholds:()=>$,getCLS:()=>F,getFCP:()=>P,getFID:()=>R,getINP:()=>W,getLCP:()=>Z,getTTFB:()=>ne,onCLS:()=>F,onFCP:()=>P,onFID:()=>R,onINP:()=>W,onLCP:()=>Z,onTTFB:()=>ne});var r,i,o,a,c,u=-1,s=function(e){addEventListener("pageshow",(function(n){n.persisted&&(u=n.timeStamp,e(n))}),!0)},f=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},d=function(){var e=f();return e&&e.activationStart||0},l=function(e,n){var t=f(),r="navigate";return u>=0?r="back-forward-cache":t&&(document.prerendering||d()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-"))),{name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},p=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},v=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n))}},m=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},h=function(e){var n=function(n){"pagehide"!==n.type&&"hidden"!==document.visibilityState||e(n)};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},g=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},T=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},C=function(e){"hidden"===document.visibilityState&&T>-1&&(T="visibilitychange"===e.type?e.timeStamp:0,L())},E=function(){addEventListener("visibilitychange",C,!0),addEventListener("prerenderingchange",C,!0)},L=function(){removeEventListener("visibilitychange",C,!0),removeEventListener("prerenderingchange",C,!0)},w=function(){return T<0&&(T=y(),E(),s((function(){setTimeout((function(){T=y(),E()}),0)}))),{get firstHiddenTime(){return T}}},b=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},S=[1800,3e3],P=function(e,n){n=n||{},b((function(){var t,r=w(),i=l("FCP"),o=p("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTimer.value&&(r.value=i,r.entries=o,t())},c=p("layout-shift",a);c&&(t=v(e,r,I,n.reportAllChanges),h((function(){a(c.takeRecords()),t(!0)})),s((function(){i=0,r=l("CLS",0),t=v(e,r,I,n.reportAllChanges),m((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},k=new Date,D=function(e,n){r||(r=n,i=e,o=new Date,x(removeEventListener),M())},M=function(){if(i>=0&&i1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){D(e,n),i()},r=function(){i()},i=function(){removeEventListener("pointerup",t,A),removeEventListener("pointercancel",r,A)};addEventListener("pointerup",t,A),addEventListener("pointercancel",r,A)}(n,e):D(n,e)}},x=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,B,A)}))},N=[100,300],R=function(e,n){n=n||{},b((function(){var t,o=w(),c=l("FID"),u=function(e){e.startTimen.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};U[r.id]=r,Q.push(r)}Q.sort((function(e,n){return n.latency-e.latency})),Q.splice(10).forEach((function(e){delete U[e.id]}))}},W=function(e,n){n=n||{},b((function(){var t;z();var r,i=l("INP"),o=function(e){e.forEach((function(e){e.interactionId&&V(e),"first-input"===e.entryType&&!Q.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&V(e)}));var n,t=(n=Math.min(Q.length-1,Math.floor(K()/50)),Q[n]);t&&t.latency!==i.value&&(i.value=t.latency,i.entries=t.entries,r())},a=p("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=v(e,i,G,n.reportAllChanges),a&&("PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&a.observe({type:"first-input",buffered:!0}),h((function(){o(a.takeRecords()),i.value<0&&K()>0&&(i.value=0,i.entries=[]),r(!0)})),s((function(){Q=[],J=_(),i=l("INP"),r=v(e,i,G,n.reportAllChanges)})))}))},X=[2500,4e3],Y={},Z=function(e,n){n=n||{},b((function(){var t,r=w(),i=l("LCP"),o=function(e){var n=e[e.length-1];n&&n.startTimeperformance.now())return;t.value=Math.max(o-d(),0),t.entries=[i],r(!0),s((function(){t=l("TTFB",0),(r=v(e,t,$,n.reportAllChanges))(!0)}))}}))}}}]); \ No newline at end of file diff --git a/app/vlselect/vmui/static/js/685.f772060c.chunk.js b/app/vlselect/vmui/static/js/685.f772060c.chunk.js new file mode 100644 index 0000000000..b725f304ff --- /dev/null +++ b/app/vlselect/vmui/static/js/685.f772060c.chunk.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvmui=self.webpackChunkvmui||[]).push([[685],{685:(e,n,t)=>{t.r(n),t.d(n,{CLSThresholds:()=>P,FCPThresholds:()=>w,FIDThresholds:()=>ne,INPThresholds:()=>_,LCPThresholds:()=>G,TTFBThresholds:()=>Q,onCLS:()=>A,onFCP:()=>I,onFID:()=>te,onINP:()=>z,onLCP:()=>K,onTTFB:()=>V});var r,i,o,a,c,u=-1,s=function(e){addEventListener("pageshow",(function(n){n.persisted&&(u=n.timeStamp,e(n))}),!0)},f=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart=0?r="back-forward-cache":t&&(document.prerendering||d()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-"))),{name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v4-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},p=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},v=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n))}},m=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},h=function(e){document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&e()}))},g=function(e){var n=!1;return function(){n||(e(),n=!0)}},T=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},E=function(e){"hidden"===document.visibilityState&&T>-1&&(T="visibilitychange"===e.type?e.timeStamp:0,b())},C=function(){addEventListener("visibilitychange",E,!0),addEventListener("prerenderingchange",E,!0)},b=function(){removeEventListener("visibilitychange",E,!0),removeEventListener("prerenderingchange",E,!0)},L=function(){return T<0&&(T=y(),C(),s((function(){setTimeout((function(){T=y(),C()}),0)}))),{get firstHiddenTime(){return T}}},S=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},w=[1800,3e3],I=function(e,n){n=n||{},S((function(){var t,r=L(),i=l("FCP"),o=p("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTimer.value&&(r.value=i,r.entries=o,t())},c=p("layout-shift",a);c&&(t=v(e,r,P,n.reportAllChanges),h((function(){a(c.takeRecords()),t(!0)})),s((function(){i=0,r=l("CLS",0),t=v(e,r,P,n.reportAllChanges),m((function(){return t()}))})),setTimeout(t,0))})))},F=0,k=1/0,M=0,D=function(e){e.forEach((function(e){e.interactionId&&(k=Math.min(k,e.interactionId),M=Math.max(M,e.interactionId),F=M?(M-k)/7+1:0)}))},B=function(){return r?F:performance.interactionCount||0},R=function(){"interactionCount"in performance||r||(r=p("event",D,{type:"event",buffered:!0,durationThreshold:0}))},x=[],H=new Map,N=0,q=[],O=function(e){if(q.forEach((function(n){return n(e)})),e.interactionId||"first-input"===e.entryType){var n=x[x.length-1],t=H.get(e.interactionId);if(t||x.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};H.set(r.id,r),x.push(r)}x.sort((function(e,n){return n.latency-e.latency})),x.length>10&&x.splice(10).forEach((function(e){return H.delete(e.id)}))}}},j=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=g(e),"hidden"===document.visibilityState?e():(t=n(e),h(e)),t},_=[200,500],z=function(e,n){"PerformanceEventTiming"in self&&"interactionId"in PerformanceEventTiming.prototype&&(n=n||{},S((function(){var t;R();var r,i=l("INP"),o=function(e){j((function(){e.forEach(O);var n=function(){var e=Math.min(x.length-1,Math.floor((B()-N)/50));return x[e]}();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r())}))},a=p("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=v(e,i,_,n.reportAllChanges),a&&(a.observe({type:"first-input",buffered:!0}),h((function(){o(a.takeRecords()),r(!0)})),s((function(){N=B(),x.length=0,H.clear(),i=l("INP"),r=v(e,i,_,n.reportAllChanges)})))})))},G=[2500,4e3],J={},K=function(e,n){n=n||{},S((function(){var t,r=L(),i=l("LCP"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime=0&&o1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){Y(e,n),i()},r=function(){i()},i=function(){removeEventListener("pointerup",t,W),removeEventListener("pointercancel",r,W)};addEventListener("pointerup",t,W),addEventListener("pointercancel",r,W)}(n,e):Y(n,e)}},ee=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,$,W)}))},ne=[100,300],te=function(e,n){n=n||{},S((function(){var t,r=L(),a=l("FID"),u=function(e){e.startTime{var e={61:(e,t,n)=>{"use strict";var r=n(375),o=n(629),a=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&a(e,".prototype.")>-1?o(n):n}},629:(e,t,n)=>{"use strict";var r=n(989),o=n(375),a=n(259),i=n(277),l=o("%Function.prototype.apply%"),s=o("%Function.prototype.call%"),c=o("%Reflect.apply%",!0)||r.call(s,l),u=n(709),d=o("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new i("a function is required");var t=c(r,s,arguments);return a(t,1+d(0,e.length-(arguments.length-1)),!0)};var h=function(){return c(r,l,arguments)};u?u(e.exports,"apply",{value:h}):e.exports.apply=h},159:function(e){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",l="day",s="week",c="month",u="quarter",d="year",h="date",p="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,_={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},g=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},v={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(o,2,"0")},m:function e(t,n){if(t.date()1)return e(i[0])}else{var l=t.name;b[l]=t,o=l}return!r&&o&&(y=o),o||!r&&y},S=function(e,t){if(k(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new C(n)},A=v;A.l=x,A.i=k,A.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var C=function(){function _(e){this.$L=x(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var g=_.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(A.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(f);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return A},g.isValid=function(){return!(this.$d.toString()===p)},g.isSame=function(e,t){var n=S(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return S(e)=0&&(a[d]=parseInt(u,10))}var h=a[3],p=24===h?0:h,f=a[0]+"-"+a[1]+"-"+a[2]+" "+p+":"+a[4]+":"+a[5]+":000",m=+t;return(o.utc(f).valueOf()-(m-=m%1e3))/6e4},s=r.prototype;s.tz=function(e,t){void 0===e&&(e=a);var n=this.utcOffset(),r=this.toDate(),i=r.toLocaleString("en-US",{timeZone:e}),l=Math.round((r-new Date(i))/1e3/60),s=o(i,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(r.getTimezoneOffset()/15)-l,!0);if(t){var c=s.utcOffset();s=s.add(n-c,"minute")}return s.$x.$timezone=e,s},s.offsetName=function(e){var t=this.$x.$timezone||o.tz.guess(),n=i(this.valueOf(),t,{timeZoneName:e}).find((function(e){return"timezonename"===e.type.toLowerCase()}));return n&&n.value};var c=s.startOf;s.startOf=function(e,t){if(!this.$x||!this.$x.$timezone)return c.call(this,e,t);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return c.call(n,e,t).tz(this.$x.$timezone,!0)},o.tz=function(e,t,n){var r=n&&t,i=n||t||a,s=l(+o(),i);if("string"!=typeof e)return o(e).tz(i);var c=function(e,t,n){var r=e-60*t*1e3,o=l(r,n);if(t===o)return[r,t];var a=l(r-=60*(o-t)*1e3,n);return o===a?[r,o]:[e-60*Math.min(o,a)*1e3,Math.max(o,a)]}(o.utc(e,r).valueOf(),s,i),u=c[0],d=c[1],h=o(u).utcOffset(d);return h.$x.$timezone=i,h},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(e){a=e}}}()},220:function(e){e.exports=function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,a){var i=o.prototype;a.utc=function(e){return new o({date:e,utc:!0,args:arguments})},i.utc=function(t){var n=a(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},i.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var l=i.parse;i.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),l.call(this,e)};var s=i.init;i.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else s.call(this)};var c=i.utcOffset;i.utcOffset=function(r,o){var a=this.$utils().u;if(a(r))return this.$u?0:a(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&(r=function(e){void 0===e&&(e="");var r=e.match(t);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],a=o[0],i=60*+o[1]+ +o[2];return 0===i?0:"+"===a?i:-i}(r),null===r))return this;var i=Math.abs(r)<=16?60*r:r,l=this;if(o)return l.$offset=i,l.$u=0===r,l;if(0!==r){var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(l=this.local().add(i+s,e)).$offset=i,l.$x.$localOffset=s}else l=this.utc();return l};var u=i.format;i.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,t)},i.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var d=i.toDate;i.toDate=function(e){return"s"===e&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():d.call(this)};var h=i.diff;i.diff=function(e,t,n){if(e&&this.$u===e.$u)return h.call(this,e,t,n);var r=this.local(),o=a(e).local();return h.call(r,o,t,n)}}}()},411:(e,t,n)=>{"use strict";var r=n(709),o=n(430),a=n(277),i=n(553);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new a("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new a("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new a("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new a("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new a("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new a("`loose`, if provided, must be a boolean");var l=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(r)r(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===l&&d?d.enumerable:!l,value:n,writable:null===s&&d?d.writable:!s});else{if(!u&&(l||s||c))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},709:(e,t,n)=>{"use strict";var r=n(375)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(o){r=!1}e.exports=r},123:e=>{"use strict";e.exports=EvalError},953:e=>{"use strict";e.exports=Error},780:e=>{"use strict";e.exports=RangeError},768:e=>{"use strict";e.exports=ReferenceError},430:e=>{"use strict";e.exports=SyntaxError},277:e=>{"use strict";e.exports=TypeError},619:e=>{"use strict";e.exports=URIError},307:e=>{"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r{"use strict";var r=n(307);e.exports=Function.prototype.bind||r},375:(e,t,n)=>{"use strict";var r,o=n(953),a=n(123),i=n(780),l=n(768),s=n(430),c=n(277),u=n(619),d=Function,h=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(t){}},p=Object.getOwnPropertyDescriptor;if(p)try{p({},"")}catch(L){p=null}var f=function(){throw new c},m=p?function(){try{return f}catch(e){try{return p(arguments,"callee").get}catch(t){return f}}}():f,_=n(757)(),g=n(442)(),v=Object.getPrototypeOf||(g?function(e){return e.__proto__}:null),y={},b="undefined"!==typeof Uint8Array&&v?v(Uint8Array):r,w={__proto__:null,"%AggregateError%":"undefined"===typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":_&&v?v([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":y,"%AsyncGenerator%":y,"%AsyncGeneratorFunction%":y,"%AsyncIteratorPrototype%":y,"%Atomics%":"undefined"===typeof Atomics?r:Atomics,"%BigInt%":"undefined"===typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"===typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"===typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"===typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":a,"%Float32Array%":"undefined"===typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"===typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"===typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":y,"%Int8Array%":"undefined"===typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"===typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"===typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":_&&v?v(v([][Symbol.iterator]())):r,"%JSON%":"object"===typeof JSON?JSON:r,"%Map%":"undefined"===typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&_&&v?v((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?r:Promise,"%Proxy%":"undefined"===typeof Proxy?r:Proxy,"%RangeError%":i,"%ReferenceError%":l,"%Reflect%":"undefined"===typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"===typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&_&&v?v((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":_&&v?v(""[Symbol.iterator]()):r,"%Symbol%":_?Symbol:r,"%SyntaxError%":s,"%ThrowTypeError%":m,"%TypedArray%":b,"%TypeError%":c,"%Uint8Array%":"undefined"===typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"===typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"===typeof Uint32Array?r:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"===typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"===typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"===typeof WeakSet?r:WeakSet};if(v)try{null.error}catch(L){var k=v(v(L));w["%Error.prototype%"]=k}var x=function e(t){var n;if("%AsyncFunction%"===t)n=h("async function () {}");else if("%GeneratorFunction%"===t)n=h("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=h("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&v&&(n=v(o.prototype))}return w[t]=n,n},S={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},A=n(989),C=n(155),E=A.call(Function.call,Array.prototype.concat),M=A.call(Function.apply,Array.prototype.splice),T=A.call(Function.call,String.prototype.replace),N=A.call(Function.call,String.prototype.slice),P=A.call(Function.call,RegExp.prototype.exec),D=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,O=/\\(\\)?/g,R=function(e,t){var n,r=e;if(C(S,r)&&(r="%"+(n=S[r])[0]+"%"),C(w,r)){var o=w[r];if(o===y&&(o=x(r)),"undefined"===typeof o&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===P(/^%?[^%]*%?$/,e))throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=N(e,0,1),n=N(e,-1);if("%"===t&&"%"!==n)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var r=[];return T(e,D,(function(e,t,n,o){r[r.length]=n?T(o,O,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",o=R("%"+r+"%",t),a=o.name,i=o.value,l=!1,u=o.alias;u&&(r=u[0],M(n,E([0,1],u)));for(var d=1,h=!0;d=n.length){var g=p(i,f);i=(h=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:i[f]}else h=C(i,f),i=i[f];h&&!l&&(w[a]=i)}}return i}},553:(e,t,n)=>{"use strict";var r=n(375)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(o){r=null}e.exports=r},734:(e,t,n)=>{"use strict";var r=n(709),o=function(){return!!r};o.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},442:e=>{"use strict";var t={__proto__:null,foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof n)}},757:(e,t,n)=>{"use strict";var r="undefined"!==typeof Symbol&&Symbol,o=n(175);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&o())))}},175:e=>{"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},155:(e,t,n)=>{"use strict";var r=Function.prototype.call,o=Object.prototype.hasOwnProperty,a=n(989);e.exports=a.call(r,o)},267:(e,t,n)=>{var r=NaN,o="[object Symbol]",a=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt,u="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,d="object"==typeof self&&self&&self.Object===Object&&self,h=u||d||Function("return this")(),p=Object.prototype.toString,f=Math.max,m=Math.min,_=function(){return h.Date.now()};function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function v(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&p.call(e)==o}(e))return r;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(a,"");var n=l.test(e);return n||s.test(e)?c(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,o,a,i,l,s,c=0,u=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var n=r,a=o;return r=o=void 0,c=t,i=e.apply(a,n)}function y(e){var n=e-s;return void 0===s||n>=t||n<0||d&&e-c>=a}function b(){var e=_();if(y(e))return w(e);l=setTimeout(b,function(e){var n=t-(e-s);return d?m(n,a-(e-c)):n}(e))}function w(e){return l=void 0,h&&r?p(e):(r=o=void 0,i)}function k(){var e=_(),n=y(e);if(r=arguments,o=this,s=e,n){if(void 0===l)return function(e){return c=e,l=setTimeout(b,t),u?p(e):i}(s);if(d)return l=setTimeout(b,t),p(s)}return void 0===l&&(l=setTimeout(b,t)),i}return t=v(t)||0,g(n)&&(u=!!n.leading,a=(d="maxWait"in n)?f(v(n.maxWait)||0,t):a,h="trailing"in n?!!n.trailing:h),k.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=s=o=l=void 0},k.flush=function(){return void 0===l?i:w(_())},k}},424:(e,t,n)=>{var r="__lodash_hash_undefined__",o=1/0,a="[object Function]",i="[object GeneratorFunction]",l="[object Symbol]",s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,u=/^\./,d=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,h=/\\(\\)?/g,p=/^\[object .+?Constructor\]$/,f="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,m="object"==typeof self&&self&&self.Object===Object&&self,_=f||m||Function("return this")();var g=Array.prototype,v=Function.prototype,y=Object.prototype,b=_["__core-js_shared__"],w=function(){var e=/[^.]+$/.exec(b&&b.keys&&b.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),k=v.toString,x=y.hasOwnProperty,S=y.toString,A=RegExp("^"+k.call(x).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),C=_.Symbol,E=g.splice,M=j(_,"Map"),T=j(Object,"create"),N=C?C.prototype:void 0,P=N?N.toString:void 0;function D(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1},O.prototype.set=function(e,t){var n=this.__data__,r=L(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},R.prototype.clear=function(){this.__data__={hash:new D,map:new(M||O),string:new D}},R.prototype.delete=function(e){return $(this,e).delete(e)},R.prototype.get=function(e){return $(this,e).get(e)},R.prototype.has=function(e){return $(this,e).has(e)},R.prototype.set=function(e,t){return $(this,e).set(e,t),this};var F=V((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(Y(e))return P?P.call(e):"";var t=e+"";return"0"==t&&1/e==-o?"-0":t}(t);var n=[];return u.test(e)&&n.push(""),e.replace(d,(function(e,t,r,o){n.push(r?o.replace(h,"$1"):t||e)})),n}));function H(e){if("string"==typeof e||Y(e))return e;var t=e+"";return"0"==t&&1/e==-o?"-0":t}function V(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i),i};return n.cache=new(V.Cache||R),n}V.Cache=R;var B=Array.isArray;function U(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Y(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&S.call(e)==l}e.exports=function(e,t,n){var r=null==e?void 0:I(e,t);return void 0===r?n:r}},141:(e,t,n)=>{var r="function"===typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=r&&o&&"function"===typeof o.get?o.get:null,i=r&&Map.prototype.forEach,l="function"===typeof Set&&Set.prototype,s=Object.getOwnPropertyDescriptor&&l?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=l&&s&&"function"===typeof s.get?s.get:null,u=l&&Set.prototype.forEach,d="function"===typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h="function"===typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"===typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,f=Boolean.prototype.valueOf,m=Object.prototype.toString,_=Function.prototype.toString,g=String.prototype.match,v=String.prototype.slice,y=String.prototype.replace,b=String.prototype.toUpperCase,w=String.prototype.toLowerCase,k=RegExp.prototype.test,x=Array.prototype.concat,S=Array.prototype.join,A=Array.prototype.slice,C=Math.floor,E="function"===typeof BigInt?BigInt.prototype.valueOf:null,M=Object.getOwnPropertySymbols,T="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?Symbol.prototype.toString:null,N="function"===typeof Symbol&&"object"===typeof Symbol.iterator,P="function"===typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===N||"symbol")?Symbol.toStringTag:null,D=Object.prototype.propertyIsEnumerable,O=("function"===typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function R(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||k.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"===typeof e){var r=e<0?-C(-e):C(e);if(r!==e){var o=String(r),a=v.call(t,o.length+1);return y.call(o,n,"$&_")+"."+y.call(y.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return y.call(t,n,"$&_")}var L=n(634),I=L.custom,z=V(I)?I:null;function $(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function j(e){return y.call(String(e),/"/g,""")}function F(e){return"[object Array]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}function H(e){return"[object RegExp]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}function V(e){if(N)return e&&"object"===typeof e&&e instanceof Symbol;if("symbol"===typeof e)return!0;if(!e||"object"!==typeof e||!T)return!1;try{return T.call(e),!0}catch(t){}return!1}e.exports=function e(t,r,o,l){var s=r||{};if(U(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(U(s,"maxStringLength")&&("number"===typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var m=!U(s,"customInspect")||s.customInspect;if("boolean"!==typeof m&&"symbol"!==m)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(U(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(U(s,"numericSeparator")&&"boolean"!==typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var b=s.numericSeparator;if("undefined"===typeof t)return"undefined";if(null===t)return"null";if("boolean"===typeof t)return t?"true":"false";if("string"===typeof t)return q(t,s);if("number"===typeof t){if(0===t)return 1/0/t>0?"0":"-0";var k=String(t);return b?R(t,k):k}if("bigint"===typeof t){var C=String(t)+"n";return b?R(t,C):C}var M="undefined"===typeof s.depth?5:s.depth;if("undefined"===typeof o&&(o=0),o>=M&&M>0&&"object"===typeof t)return F(t)?"[Array]":"[Object]";var I=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"===typeof e.indent&&e.indent>0))return null;n=S.call(Array(e.indent+1)," ")}return{base:n,prev:S.call(Array(t+1),n)}}(s,o);if("undefined"===typeof l)l=[];else if(W(l,t)>=0)return"[Circular]";function B(t,n,r){if(n&&(l=A.call(l)).push(n),r){var a={depth:s.depth};return U(s,"quoteStyle")&&(a.quoteStyle=s.quoteStyle),e(t,a,o+1,l)}return e(t,s,o+1,l)}if("function"===typeof t&&!H(t)){var Z=function(e){if(e.name)return e.name;var t=g.call(_.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),ee=X(t,B);return"[Function"+(Z?": "+Z:" (anonymous)")+"]"+(ee.length>0?" { "+S.call(ee,", ")+" }":"")}if(V(t)){var te=N?y.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):T.call(t);return"object"!==typeof t||N?te:K(te)}if(function(e){if(!e||"object"!==typeof e)return!1;if("undefined"!==typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"===typeof e.nodeName&&"function"===typeof e.getAttribute}(t)){for(var ne="<"+w.call(String(t.nodeName)),re=t.attributes||[],oe=0;oe"}if(F(t)){if(0===t.length)return"[]";var ae=X(t,B);return I&&!function(e){for(var t=0;t=0)return!1;return!0}(ae)?"["+J(ae,I)+"]":"[ "+S.call(ae,", ")+" ]"}if(function(e){return"[object Error]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t)){var ie=X(t,B);return"cause"in Error.prototype||!("cause"in t)||D.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+S.call(ie,", ")+" }":"{ ["+String(t)+"] "+S.call(x.call("[cause]: "+B(t.cause),ie),", ")+" }"}if("object"===typeof t&&m){if(z&&"function"===typeof t[z]&&L)return L(t,{depth:M-o});if("symbol"!==m&&"function"===typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!==typeof e)return!1;try{a.call(e);try{c.call(e)}catch(ne){return!0}return e instanceof Map}catch(t){}return!1}(t)){var le=[];return i&&i.call(t,(function(e,n){le.push(B(n,t,!0)+" => "+B(e,t))})),Q("Map",a.call(t),le,I)}if(function(e){if(!c||!e||"object"!==typeof e)return!1;try{c.call(e);try{a.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var se=[];return u&&u.call(t,(function(e){se.push(B(e,t))})),Q("Set",c.call(t),se,I)}if(function(e){if(!d||!e||"object"!==typeof e)return!1;try{d.call(e,d);try{h.call(e,h)}catch(ne){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return G("WeakMap");if(function(e){if(!h||!e||"object"!==typeof e)return!1;try{h.call(e,h);try{d.call(e,d)}catch(ne){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return G("WeakSet");if(function(e){if(!p||!e||"object"!==typeof e)return!1;try{return p.call(e),!0}catch(t){}return!1}(t))return G("WeakRef");if(function(e){return"[object Number]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t))return K(B(Number(t)));if(function(e){if(!e||"object"!==typeof e||!E)return!1;try{return E.call(e),!0}catch(t){}return!1}(t))return K(B(E.call(t)));if(function(e){return"[object Boolean]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t))return K(f.call(t));if(function(e){return"[object String]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t))return K(B(String(t)));if("undefined"!==typeof window&&t===window)return"{ [object Window] }";if("undefined"!==typeof globalThis&&t===globalThis||"undefined"!==typeof n.g&&t===n.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===Y(e)&&(!P||!("object"===typeof e&&P in e))}(t)&&!H(t)){var ce=X(t,B),ue=O?O(t)===Object.prototype:t instanceof Object||t.constructor===Object,de=t instanceof Object?"":"null prototype",he=!ue&&P&&Object(t)===t&&P in t?v.call(Y(t),8,-1):de?"Object":"",pe=(ue||"function"!==typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(he||de?"["+S.call(x.call([],he||[],de||[]),": ")+"] ":"");return 0===ce.length?pe+"{}":I?pe+"{"+J(ce,I)+"}":pe+"{ "+S.call(ce,", ")+" }"}return String(t)};var B=Object.prototype.hasOwnProperty||function(e){return e in this};function U(e,t){return B.call(e,t)}function Y(e){return m.call(e)}function W(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return q(v.call(e,0,t.maxStringLength),t)+r}return $(y.call(y.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Z),"single",t)}function Z(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+b.call(t.toString(16))}function K(e){return"Object("+e+")"}function G(e){return e+" { ? }"}function Q(e,t,n,r){return e+" ("+t+") {"+(r?J(n,r):S.call(n,", "))+"}"}function J(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+S.call(e,","+n)+"\n"+t.prev}function X(e,t){var n=F(e),r=[];if(n){r.length=e.length;for(var o=0;o{"use strict";n.r(t),n.d(t,{Children:()=>W,Component:()=>l.uA,Fragment:()=>l.FK,PureComponent:()=>F,StrictMode:()=>Oe,Suspense:()=>Q,SuspenseList:()=>ee,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>ke,cloneElement:()=>Me,createContext:()=>l.q6,createElement:()=>l.n,createFactory:()=>Se,createPortal:()=>oe,createRef:()=>l._3,default:()=>He,findDOMNode:()=>Ne,flushSync:()=>De,forwardRef:()=>U,hydrate:()=>he,isElement:()=>$e,isFragment:()=>Ce,isMemo:()=>Ee,isValidElement:()=>Ae,lazy:()=>X,memo:()=>H,render:()=>de,startTransition:()=>Re,unmountComponentAtNode:()=>Te,unstable_batchedUpdates:()=>Pe,useCallback:()=>C,useContext:()=>E,useDebugValue:()=>M,useDeferredValue:()=>Le,useEffect:()=>w,useErrorBoundary:()=>T,useId:()=>N,useImperativeHandle:()=>S,useInsertionEffect:()=>ze,useLayoutEffect:()=>k,useMemo:()=>A,useReducer:()=>b,useRef:()=>x,useState:()=>y,useSyncExternalStore:()=>je,useTransition:()=>Ie,version:()=>xe});var r,o,a,i,l=n(746),s=0,c=[],u=[],d=l.fF,h=d.__b,p=d.__r,f=d.diffed,m=d.__c,_=d.unmount,g=d.__;function v(e,t){d.__h&&d.__h(o,e,s||t),s=0;var n=o.__H||(o.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({__V:u}),n.__[e]}function y(e){return s=1,b(z,e)}function b(e,t,n){var a=v(r++,2);if(a.t=e,!a.__c&&(a.__=[n?n(t):z(void 0,t),function(e){var t=a.__N?a.__N[0]:a.__[0],n=a.t(t,e);t!==n&&(a.__N=[n,a.__[1]],a.__c.setState({}))}],a.__c=o,!o.u)){var i=function(e,t,n){if(!a.__c.__H)return!0;var r=a.__c.__H.__.filter((function(e){return!!e.__c}));if(r.every((function(e){return!e.__N})))return!l||l.call(this,e,t,n);var o=!1;return r.forEach((function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}})),!(!o&&a.__c.props===e)&&(!l||l.call(this,e,t,n))};o.u=!0;var l=o.shouldComponentUpdate,s=o.componentWillUpdate;o.componentWillUpdate=function(e,t,n){if(this.__e){var r=l;l=void 0,i(e,t,n),l=r}s&&s.call(this,e,t,n)},o.shouldComponentUpdate=i}return a.__N||a.__}function w(e,t){var n=v(r++,3);!d.__s&&I(n.__H,t)&&(n.__=e,n.i=t,o.__H.__h.push(n))}function k(e,t){var n=v(r++,4);!d.__s&&I(n.__H,t)&&(n.__=e,n.i=t,o.__h.push(n))}function x(e){return s=5,A((function(){return{current:e}}),[])}function S(e,t,n){s=6,k((function(){return"function"==typeof e?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0}),null==n?n:n.concat(e))}function A(e,t){var n=v(r++,7);return I(n.__H,t)?(n.__V=e(),n.i=t,n.__h=e,n.__V):n.__}function C(e,t){return s=8,A((function(){return e}),t)}function E(e){var t=o.context[e.__c],n=v(r++,9);return n.c=e,t?(null==n.__&&(n.__=!0,t.sub(o)),t.props.value):e.__}function M(e,t){d.useDebugValue&&d.useDebugValue(t?t(e):e)}function T(e){var t=v(r++,10),n=y();return t.__=e,o.componentDidCatch||(o.componentDidCatch=function(e,r){t.__&&t.__(e,r),n[1](e)}),[n[0],function(){n[1](void 0)}]}function N(){var e=v(r++,11);if(!e.__){for(var t=o.__v;null!==t&&!t.__m&&null!==t.__;)t=t.__;var n=t.__m||(t.__m=[0,0]);e.__="P"+n[0]+"-"+n[1]++}return e.__}function P(){for(var e;e=c.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(R),e.__H.__h.forEach(L),e.__H.__h=[]}catch(r){e.__H.__h=[],d.__e(r,e.__v)}}d.__b=function(e){o=null,h&&h(e)},d.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),g&&g(e,t)},d.__r=function(e){p&&p(e),r=0;var t=(o=e.__c).__H;t&&(a===o?(t.__h=[],o.__h=[],t.__.forEach((function(e){e.__N&&(e.__=e.__N),e.__V=u,e.__N=e.i=void 0}))):(t.__h.forEach(R),t.__h.forEach(L),t.__h=[],r=0)),a=o},d.diffed=function(e){f&&f(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==c.push(t)&&i===d.requestAnimationFrame||((i=d.requestAnimationFrame)||O)(P)),t.__H.__.forEach((function(e){e.i&&(e.__H=e.i),e.__V!==u&&(e.__=e.__V),e.i=void 0,e.__V=u}))),a=o=null},d.__c=function(e,t){t.some((function(e){try{e.__h.forEach(R),e.__h=e.__h.filter((function(e){return!e.__||L(e)}))}catch(o){t.some((function(e){e.__h&&(e.__h=[])})),t=[],d.__e(o,e.__v)}})),m&&m(e,t)},d.unmount=function(e){_&&_(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach((function(e){try{R(e)}catch(e){t=e}})),n.__H=void 0,t&&d.__e(t,n.__v))};var D="function"==typeof requestAnimationFrame;function O(e){var t,n=function(){clearTimeout(r),D&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);D&&(t=requestAnimationFrame(n))}function R(e){var t=o,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),o=t}function L(e){var t=o;e.__c=e.__(),o=t}function I(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function z(e,t){return"function"==typeof t?t(e):t}function $(e,t){for(var n in t)e[n]=t[n];return e}function j(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function F(e,t){this.props=e,this.context=t}function H(e,t){function n(e){var n=this.props.ref,r=n==e.ref;return!r&&n&&(n.call?n(null):n.current=null),t?!t(this.props,e)||!r:j(this.props,e)}function r(t){return this.shouldComponentUpdate=n,(0,l.n)(e,t)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(F.prototype=new l.uA).isPureReactComponent=!0,F.prototype.shouldComponentUpdate=function(e,t){return j(this.props,e)||j(this.state,t)};var V=l.fF.__b;l.fF.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),V&&V(e)};var B="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function U(e){function t(t){var n=$({},t);return delete n.ref,e(n,t.ref||null)}return t.$$typeof=B,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var Y=function(e,t){return null==e?null:(0,l.v2)((0,l.v2)(e).map(t))},W={map:Y,forEach:Y,count:function(e){return e?(0,l.v2)(e).length:0},only:function(e){var t=(0,l.v2)(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:l.v2},q=l.fF.__e;l.fF.__e=function(e,t,n,r){if(e.then)for(var o,a=t;a=a.__;)if((o=a.__c)&&o.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),o.__c(e,t);q(e,t,n,r)};var Z=l.fF.unmount;function K(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),e.__c.__H=null),null!=(e=$({},e)).__c&&(e.__c.__P===n&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map((function(e){return K(e,t,n)}))),e}function G(e,t,n){return e&&n&&(e.__v=null,e.__k=e.__k&&e.__k.map((function(e){return G(e,t,n)})),e.__c&&e.__c.__P===t&&(e.__e&&n.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=n)),e}function Q(){this.__u=0,this.t=null,this.__b=null}function J(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function X(e){var t,n,r;function o(o){if(t||(t=e()).then((function(e){n=e.default||e}),(function(e){r=e})),r)throw r;if(!n)throw t;return(0,l.n)(n,o)}return o.displayName="Lazy",o.__f=!0,o}function ee(){this.u=null,this.o=null}l.fF.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),Z&&Z(e)},(Q.prototype=new l.uA).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var o=J(r.__v),a=!1,i=function(){a||(a=!0,n.__R=null,o?o(l):l())};n.__R=i;var l=function(){if(! --r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=G(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(i,i)},Q.prototype.componentWillUnmount=function(){this.t=[]},Q.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=K(this.__b,n,r.__O=r.__P)}this.__b=null}var o=t.__a&&(0,l.n)(l.FK,null,e.fallback);return o&&(o.__u&=-33),[(0,l.n)(l.FK,null,t.__a?null:e.children),o]};var te=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),(0,l.XX)((0,l.n)(ne,{context:t.context},e.__v),t.l)}function oe(e,t){var n=(0,l.n)(re,{__v:e,i:t});return n.containerInfo=t,n}(ee.prototype=new l.uA).__a=function(e){var t=this,n=J(t.__v),r=t.o.get(e);return r[0]++,function(o){var a=function(){t.props.revealOrder?(r.push(o),te(t,e,r)):o()};n?n(a):a()}},ee.prototype.render=function(e){this.u=null,this.o=new Map;var t=(0,l.v2)(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},ee.prototype.componentDidUpdate=ee.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){te(e,n,t)}))};var ae="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,ie=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,le=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,se=/[A-Z0-9]/g,ce="undefined"!=typeof document,ue=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(e)};function de(e,t,n){return null==t.__k&&(t.textContent=""),(0,l.XX)(e,t),"function"==typeof n&&n(),e?e.__c:null}function he(e,t,n){return(0,l.Qv)(e,t),"function"==typeof n&&n(),e?e.__c:null}l.uA.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(l.uA.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var pe=l.fF.event;function fe(){}function me(){return this.cancelBubble}function _e(){return this.defaultPrevented}l.fF.event=function(e){return pe&&(e=pe(e)),e.persist=fe,e.isPropagationStopped=me,e.isDefaultPrevented=_e,e.nativeEvent=e};var ge,ve={enumerable:!1,configurable:!0,get:function(){return this.class}},ye=l.fF.vnode;l.fF.vnode=function(e){"string"==typeof e.type&&function(e){var t=e.props,n=e.type,r={};for(var o in t){var a=t[o];if(!("value"===o&&"defaultValue"in t&&null==a||ce&&"children"===o&&"noscript"===n||"class"===o||"className"===o)){var i=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===a?a="":"translate"===i&&"no"===a?a=!1:"ondoubleclick"===i?o="ondblclick":"onchange"!==i||"input"!==n&&"textarea"!==n||ue(t.type)?"onfocus"===i?o="onfocusin":"onblur"===i?o="onfocusout":le.test(o)?o=i:-1===n.indexOf("-")&&ie.test(o)?o=o.replace(se,"-$&").toLowerCase():null===a&&(a=void 0):i=o="oninput","oninput"===i&&r[o=i]&&(o="oninputCapture"),r[o]=a}}"select"==n&&r.multiple&&Array.isArray(r.value)&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==n&&null!=r.defaultValue&&(r.value=(0,l.v2)(t.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",ve)):(t.className&&!t.class||t.class&&t.className)&&(r.class=r.className=t.className),e.props=r}(e),e.$$typeof=ae,ye&&ye(e)};var be=l.fF.__r;l.fF.__r=function(e){be&&be(e),ge=e.__c};var we=l.fF.diffed;l.fF.diffed=function(e){we&&we(e);var t=e.props,n=e.__e;null!=n&&"textarea"===e.type&&"value"in t&&t.value!==n.value&&(n.value=null==t.value?"":t.value),ge=null};var ke={ReactCurrentDispatcher:{current:{readContext:function(e){return ge.__n[e.__c].props.value},useCallback:C,useContext:E,useDebugValue:M,useDeferredValue:Le,useEffect:w,useId:N,useImperativeHandle:S,useInsertionEffect:ze,useLayoutEffect:k,useMemo:A,useReducer:b,useRef:x,useState:y,useSyncExternalStore:je,useTransition:Ie}}},xe="17.0.2";function Se(e){return l.n.bind(null,e)}function Ae(e){return!!e&&e.$$typeof===ae}function Ce(e){return Ae(e)&&e.type===l.FK}function Ee(e){return!!e&&!!e.displayName&&("string"==typeof e.displayName||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")}function Me(e){return Ae(e)?l.Ob.apply(null,arguments):e}function Te(e){return!!e.__k&&((0,l.XX)(null,e),!0)}function Ne(e){return e&&(e.base||1===e.nodeType&&e)||null}var Pe=function(e,t){return e(t)},De=function(e,t){return e(t)},Oe=l.FK;function Re(e){e()}function Le(e){return e}function Ie(){return[!1,Re]}var ze=k,$e=Ae;function je(e,t){var n=t(),r=y({h:{__:n,v:t}}),o=r[0].h,a=r[1];return k((function(){o.__=n,o.v=t,Fe(o)&&a({h:o})}),[e,n,t]),w((function(){return Fe(o)&&a({h:o}),e((function(){Fe(o)&&a({h:o})}))}),[e]),n}function Fe(e){var t,n,r=e.v,o=e.__;try{var a=r();return!((t=o)===(n=a)&&(0!==t||1/t==1/n)||t!=t&&n!=n)}catch(e){return!0}}var He={useState:y,useId:N,useReducer:b,useEffect:w,useLayoutEffect:k,useInsertionEffect:ze,useTransition:Ie,useDeferredValue:Le,useSyncExternalStore:je,startTransition:Re,useRef:x,useImperativeHandle:S,useMemo:A,useCallback:C,useContext:E,useDebugValue:M,version:"17.0.2",Children:W,render:de,hydrate:he,unmountComponentAtNode:Te,createPortal:oe,createElement:l.n,createContext:l.q6,createFactory:Se,cloneElement:Me,createRef:l._3,Fragment:l.FK,isValidElement:Ae,isElement:$e,isFragment:Ce,isMemo:Ee,findDOMNode:Ne,Component:l.uA,PureComponent:F,memo:H,forwardRef:U,flushSync:De,unstable_batchedUpdates:Pe,StrictMode:Oe,Suspense:Q,SuspenseList:ee,lazy:X,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:ke}},746:(e,t,n)=>{"use strict";n.d(t,{FK:()=>x,Ob:()=>Y,Qv:()=>U,XX:()=>B,_3:()=>k,fF:()=>o,n:()=>b,q6:()=>W,uA:()=>S,v2:()=>D});var r,o,a,i,l,s,c,u,d,h,p,f={},m=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function v(e,t){for(var n in t)e[n]=t[n];return e}function y(e){var t=e.parentNode;t&&t.removeChild(e)}function b(e,t,n){var o,a,i,l={};for(i in t)"key"==i?o=t[i]:"ref"==i?a=t[i]:l[i]=t[i];if(arguments.length>2&&(l.children=arguments.length>3?r.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===l[i]&&(l[i]=e.defaultProps[i]);return w(e,l,o,a,null)}function w(e,t,n,r,i){var l={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==i?++a:i,__i:-1,__u:0};return null==i&&null!=o.vnode&&o.vnode(l),l}function k(){return{current:null}}function x(e){return e.children}function S(e,t){this.props=e,this.context=t}function A(e,t){if(null==t)return e.__?A(e.__,e.__i+1):null;for(var n;tt&&i.sort(c));M.__r=0}function T(e,t,n,r,o,a,i,l,s,c,u){var d,h,p,_,g,v=r&&r.__k||m,y=t.length;for(n.__d=s,N(n,t,v),s=n.__d,d=0;d0?w(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o)?(o.__=e,o.__b=e.__b+1,l=O(o,n,i,u),o.__i=l,a=null,-1!==l&&(u--,(a=n[l])&&(a.__u|=131072)),null==a||null===a.__v?(-1==l&&d--,"function"!=typeof o.type&&(o.__u|=65536)):l!==i&&(l===i+1?d++:l>i?u>s-i?d+=l-i:d--:l(null!=s&&0==(131072&s.__u)?1:0))for(;i>=0||l=0){if((s=t[i])&&0==(131072&s.__u)&&o==s.key&&a===s.type)return i;i--}if(l2&&(s.children=arguments.length>3?r.call(arguments,2):n),w(e.type,s,o||e.key,a||e.ref,null)}function W(e,t){var n={__c:t="__cC"+p++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some((function(e){e.__e=!0,E(e)}))},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}r=m.slice,o={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},a=0,S.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),"function"==typeof e&&(e=e(v({},n),this.props)),e&&v(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),E(this))},S.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),E(this))},S.prototype.render=x,i=[],s="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(e,t){return e.__v.__b-t.__v.__b},M.__r=0,u=0,d=I(!1),h=I(!0),p=0},640:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},215:(e,t,n)=>{"use strict";var r=n(518),o=n(968),a=n(640);e.exports={formats:a,parse:o,stringify:r}},968:(e,t,n)=>{"use strict";var r=n(570),o=Object.prototype.hasOwnProperty,a=Array.isArray,i={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:r.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},l=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},s=function(e,t){return e&&"string"===typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},c=function(e,t,n,r){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,l=n.depth>0&&/(\[[^[\]]*])/.exec(a),c=l?a.slice(0,l.index):a,u=[];if(c){if(!n.plainObjects&&o.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}for(var d=0;n.depth>0&&null!==(l=i.exec(a))&&d=0;--a){var i,l=e[a];if("[]"===l&&n.parseArrays)i=n.allowEmptyArrays&&""===o?[]:[].concat(o);else{i=n.plainObjects?Object.create(null):{};var c="["===l.charAt(0)&&"]"===l.charAt(l.length-1)?l.slice(1,-1):l,u=n.decodeDotInKeys?c.replace(/%2E/g,"."):c,d=parseInt(u,10);n.parseArrays||""!==u?!isNaN(d)&&l!==u&&String(d)===u&&d>=0&&n.parseArrays&&d<=n.arrayLimit?(i=[])[d]=o:"__proto__"!==u&&(i[u]=o):i={0:o}}o=i}return o}(u,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if("undefined"!==typeof e.allowEmptyArrays&&"boolean"!==typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if("undefined"!==typeof e.decodeDotInKeys&&"boolean"!==typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&"undefined"!==typeof e.decoder&&"function"!==typeof e.decoder)throw new TypeError("Decoder has to be a function.");if("undefined"!==typeof e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t="undefined"===typeof e.charset?i.charset:e.charset,n="undefined"===typeof e.duplicates?i.duplicates:e.duplicates;if("combine"!==n&&"first"!==n&&"last"!==n)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:"undefined"===typeof e.allowDots?!0===e.decodeDotInKeys||i.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"===typeof e.allowEmptyArrays?!!e.allowEmptyArrays:i.allowEmptyArrays,allowPrototypes:"boolean"===typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"===typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"===typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"===typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"===typeof e.comma?e.comma:i.comma,decodeDotInKeys:"boolean"===typeof e.decodeDotInKeys?e.decodeDotInKeys:i.decodeDotInKeys,decoder:"function"===typeof e.decoder?e.decoder:i.decoder,delimiter:"string"===typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"===typeof e.depth||!1===e.depth?+e.depth:i.depth,duplicates:n,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"===typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"===typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"===typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:"boolean"===typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var u="string"===typeof e?function(e,t){var n,c={__proto__:null},u=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,d=t.parameterLimit===1/0?void 0:t.parameterLimit,h=u.split(t.delimiter,d),p=-1,f=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(_=a(_)?[_]:_);var b=o.call(c,m);b&&"combine"===t.duplicates?c[m]=r.combine(c[m],_):b&&"last"!==t.duplicates||(c[m]=_)}return c}(e,n):e,d=n.plainObjects?Object.create(null):{},h=Object.keys(u),p=0;p{"use strict";var r=n(670),o=n(570),a=n(640),i=Object.prototype.hasOwnProperty,l={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},s=Array.isArray,c=Array.prototype.push,u=function(e,t){c.apply(e,s(t)?t:[t])},d=Date.prototype.toISOString,h=a.default,p={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:o.encode,encodeValuesOnly:!1,format:h,formatter:a.formatters[h],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},f={},m=function e(t,n,a,i,l,c,d,h,m,_,g,v,y,b,w,k,x,S){for(var A,C=t,E=S,M=0,T=!1;void 0!==(E=E.get(f))&&!T;){var N=E.get(t);if(M+=1,"undefined"!==typeof N){if(N===M)throw new RangeError("Cyclic object value");T=!0}"undefined"===typeof E.get(f)&&(M=0)}if("function"===typeof _?C=_(n,C):C instanceof Date?C=y(C):"comma"===a&&s(C)&&(C=o.maybeMap(C,(function(e){return e instanceof Date?y(e):e}))),null===C){if(c)return m&&!k?m(n,p.encoder,x,"key",b):n;C=""}if("string"===typeof(A=C)||"number"===typeof A||"boolean"===typeof A||"symbol"===typeof A||"bigint"===typeof A||o.isBuffer(C))return m?[w(k?n:m(n,p.encoder,x,"key",b))+"="+w(m(C,p.encoder,x,"value",b))]:[w(n)+"="+w(String(C))];var P,D=[];if("undefined"===typeof C)return D;if("comma"===a&&s(C))k&&m&&(C=o.maybeMap(C,m)),P=[{value:C.length>0?C.join(",")||null:void 0}];else if(s(_))P=_;else{var O=Object.keys(C);P=g?O.sort(g):O}var R=h?n.replace(/\./g,"%2E"):n,L=i&&s(C)&&1===C.length?R+"[]":R;if(l&&s(C)&&0===C.length)return L+"[]";for(var I=0;I0?b+y:""}},570:(e,t,n)=>{"use strict";var r=n(640),o=Object.prototype.hasOwnProperty,a=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),l=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var r=[],o=0;o=s?l.slice(u,u+s):l,h=[],p=0;p=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||a===r.RFC1738&&(40===f||41===f)?h[h.length]=d.charAt(p):f<128?h[h.length]=i[f]:f<2048?h[h.length]=i[192|f>>6]+i[128|63&f]:f<55296||f>=57344?h[h.length]=i[224|f>>12]+i[128|f>>6&63]+i[128|63&f]:(p+=1,f=65536+((1023&f)<<10|1023&d.charCodeAt(p)),h[h.length]=i[240|f>>18]+i[128|f>>12&63]+i[128|f>>6&63]+i[128|63&f])}c+=h.join("")}return c},isBuffer:function(e){return!(!e||"object"!==typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],r=0;r{e.exports=n(204)},204:(e,t,n)=>{"use strict";var r=function(e){return e&&"object"==typeof e&&"default"in e?e.default:e}(n(609)),o=n(609);function a(){return(a=Object.assign||function(e){for(var t=1;tr.length&&h(e,t.length-1);)t=t.slice(0,t.length-1);return t.length}for(var o=r.length,a=t.length;a>=r.length;a--){var i=t[a];if(!h(e,a)&&p(e,a,i)){o=a+1;break}}return o}function _(e,t){return m(e,t)===e.mask.length}function g(e,t){var n=e.maskChar,r=e.mask,o=e.prefix;if(!n){for((t=v(e,"",t,0)).lengtht.length&&(t+=o.slice(t.length,r)),l.every((function(n){for(;u=n,h(e,c=r)&&u!==o[c];){if(r>=t.length&&(t+=o[r]),l=n,a&&h(e,r)&&l===a)return!0;if(++r>=o.length)return!1}var l,c,u;return!p(e,r,n)&&n!==a||(ro.start?d=(u=function(e,t,n,r){var o=e.mask,a=e.maskChar,i=n.split(""),l=r;return i.every((function(t){for(;i=t,h(e,n=r)&&i!==o[n];)if(++r>=o.length)return!1;var n,i;return(p(e,r,t)||t===a)&&r++,r=a.length?f=a.length:f=i.length&&f{"use strict";var r=n(375),o=n(411),a=n(734)(),i=n(553),l=n(277),s=r("%Math.floor%");e.exports=function(e,t){if("function"!==typeof e)throw new l("`fn` is not a function");if("number"!==typeof t||t<0||t>4294967295||s(t)!==t)throw new l("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],r=!0,c=!0;if("length"in e&&i){var u=i(e,"length");u&&!u.configurable&&(r=!1),u&&!u.writable&&(c=!1)}return(r||c||!n)&&(a?o(e,"length",t,!0,!0):o(e,"length",t)),e}},670:(e,t,n)=>{"use strict";var r=n(375),o=n(61),a=n(141),i=n(277),l=r("%WeakMap%",!0),s=r("%Map%",!0),c=o("WeakMap.prototype.get",!0),u=o("WeakMap.prototype.set",!0),d=o("WeakMap.prototype.has",!0),h=o("Map.prototype.get",!0),p=o("Map.prototype.set",!0),f=o("Map.prototype.has",!0),m=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new i("Side channel does not contain "+a(e))},get:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return c(e,r)}else if(s){if(t)return h(t,r)}else if(n)return function(e,t){var n=m(e,t);return n&&n.value}(n,r)},has:function(r){if(l&&r&&("object"===typeof r||"function"===typeof r)){if(e)return d(e,r)}else if(s){if(t)return f(t,r)}else if(n)return function(e,t){return!!m(e,t)}(n,r);return!1},set:function(r,o){l&&r&&("object"===typeof r||"function"===typeof r)?(e||(e=new l),u(e,r,o)):s?(t||(t=new s),p(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=m(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},634:()=>{},738:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".bebe1265.chunk.js",n.miniCssF=e=>{},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="vmui:";n.l=(r,o,a,i)=>{if(e[r])e[r].push(o);else{var l,s;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{l.onerror=l.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],l.parentNode&&l.parentNode.removeChild(l),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=h.bind(null,l.onerror),l.onload=h.bind(null,l.onload),s&&document.head.appendChild(l)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="./",(()=>{var e={792:0};n.f.j=(t,r)=>{var o=n.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var a=new Promise(((n,r)=>o=e[t]=[n,r]));r.push(o[2]=a);var i=n.p+n.u(t),l=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var a=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;l.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",l.name="ChunkLoadError",l.type=a,l.request=i,o[1](l)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,a,i=r[0],l=r[1],s=r[2],c=0;if(i.some((t=>0!==e[t]))){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(s)s(n)}for(t&&t(r);c{"use strict";var e,t=n(609),r=n(159),o=n.n(r),a=n(7),i=n.n(a),l=n(648),s=n.n(l),c=n(220),u=n.n(c);function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function y(t,n,r,o){void 0===o&&(o={});let{window:a=document.defaultView,v5Compat:i=!1}=o,l=a.history,s=e.Pop,c=null,u=f();function f(){return(l.state||{idx:null}).idx}function v(){s=e.Pop;let t=f(),n=null==t?null:t-u;u=t,c&&c({action:s,location:b.location,delta:n})}function y(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"===typeof e?e:g(e);return n=n.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,l.replaceState(d({},l.state,{idx:u}),""));let b={get action(){return s},get location(){return t(a,l)},listen(e){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(h,v),c=e,()=>{a.removeEventListener(h,v),c=null}},createHref:e=>n(a,e),createURL:y,encodeLocation(e){let t=y(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(t,n){s=e.Push;let o=_(b.location,t,n);r&&r(o,t),u=f()+1;let d=m(o,u),h=b.createHref(o);try{l.pushState(d,"",h)}catch(p){if(p instanceof DOMException&&"DataCloneError"===p.name)throw p;a.location.assign(h)}i&&c&&c({action:s,location:b.location,delta:1})},replace:function(t,n){s=e.Replace;let o=_(b.location,t,n);r&&r(o,t),u=f();let a=m(o,u),d=b.createHref(o);l.replaceState(a,"",d),i&&c&&c({action:s,location:b.location,delta:0})},go:e=>l.go(e)};return b}var b;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(b||(b={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function w(e,t,n){return void 0===n&&(n="/"),k(e,t,n,!1)}function k(e,t,n,r){let o=I(("string"===typeof t?v(t):t).pathname||"/",n);if(null==o)return null;let a=x(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let l=0;null==i&&l{let i={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};i.relativePath.startsWith("/")&&(p(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let l=H([r,i.relativePath]),s=n.concat(i);e.children&&e.children.length>0&&(p(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),x(e.children,t,s,l)),(null!=e.path||e.index)&&t.push({path:l,score:D(l,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of S(e.path))o(e,t,r);else o(e,t)})),t}function S(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(0===r.length)return o?[a,""]:[a];let i=S(r.join("/")),l=[];return l.push(...i.map((e=>""===e?a:[a,e].join("/")))),o&&l.push(...i),l.map((t=>e.startsWith("/")&&""===t?"/":t))}const A=/^:[\w-]+$/,C=3,E=2,M=1,T=10,N=-2,P=e=>"*"===e;function D(e,t){let n=e.split("/"),r=n.length;return n.some(P)&&(r+=N),t&&(r+=E),n.filter((e=>!P(e))).reduce(((e,t)=>e+(A.test(t)?C:""===t?M:T)),r)}function O(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},a="/",i=[];for(let l=0;l(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let a=new RegExp(o,t?void 0:"i");return[a,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=l[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}const s=l[n];return e[r]=o&&!s?void 0:(s||"").replace(/%2F/g,"/"),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function L(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return f(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function I(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function z(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function $(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function j(e,t){let n=$(e);return t?n.map(((t,n)=>n===e.length-1?t.pathname:t.pathnameBase)):n.map((e=>e.pathnameBase))}function F(e,t,n,r){let o;void 0===r&&(r=!1),"string"===typeof e?o=v(e):(o=d({},e),p(!o.pathname||!o.pathname.includes("?"),z("?","pathname","search",o)),p(!o.pathname||!o.pathname.includes("#"),z("#","pathname","hash",o)),p(!o.search||!o.search.includes("#"),z("#","search","hash",o)));let a,i=""===e||""===o.pathname,l=i?"/":o.pathname;if(null==l)a=n;else{let e=t.length-1;if(!r&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}a=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"===typeof e?v(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:B(r),hash:U(o)}}(o,a),c=l&&"/"!==l&&l.endsWith("/"),u=(i||"."===l)&&n.endsWith("/");return s.pathname.endsWith("/")||!c&&!u||(s.pathname+="/"),s}const H=e=>e.join("/").replace(/\/\/+/g,"/"),V=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",U=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function Y(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const W=["post","put","patch","delete"],q=(new Set(W),["get",...W]);new Set(q),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t{r.current=!0}));let o=t.useCallback((function(t,o){void 0===o&&(o={}),r.current&&("number"===typeof t?e.navigate(t):e.navigate(t,Z({fromRouteId:n},o)))}),[e,n]);return o}():function(){te()||p(!1);let e=t.useContext(K),{basename:n,future:r,navigator:o}=t.useContext(Q),{matches:a}=t.useContext(X),{pathname:i}=ne(),l=JSON.stringify(j(a,r.v7_relativeSplatPath)),s=t.useRef(!1);re((()=>{s.current=!0}));let c=t.useCallback((function(t,r){if(void 0===r&&(r={}),!s.current)return;if("number"===typeof t)return void o.go(t);let a=F(t,JSON.parse(l),i,"path"===r.relative);null==e&&"/"!==n&&(a.pathname="/"===a.pathname?n:H([n,a.pathname])),(r.replace?o.replace:o.push)(a,r.state,r)}),[n,o,l,i,e]);return c}()}const ae=t.createContext(null);function ie(e,n){let{relative:r}=void 0===n?{}:n,{future:o}=t.useContext(Q),{matches:a}=t.useContext(X),{pathname:i}=ne(),l=JSON.stringify(j(a,o.v7_relativeSplatPath));return t.useMemo((()=>F(e,JSON.parse(l),i,"path"===r)),[e,l,i,r])}function le(n,r,o,a){te()||p(!1);let{navigator:i}=t.useContext(Q),{matches:l}=t.useContext(X),s=l[l.length-1],c=s?s.params:{},u=(s&&s.pathname,s?s.pathnameBase:"/");s&&s.route;let d,h=ne();if(r){var f;let e="string"===typeof r?v(r):r;"/"===u||(null==(f=e.pathname)?void 0:f.startsWith(u))||p(!1),d=e}else d=h;let m=d.pathname||"/",_=m;if("/"!==u){let e=u.replace(/^\//,"").split("/");_="/"+m.replace(/^\//,"").split("/").slice(e.length).join("/")}let g=w(n,{pathname:_});let y=he(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},c,e.params),pathname:H([u,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?u:H([u,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,o,a);return r&&y?t.createElement(J.Provider,{value:{location:Z({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:e.Pop}},y):y}function se(){let e=function(){var e;let n=t.useContext(ee),r=_e(fe.UseRouteError),o=ge(fe.UseRouteError);if(void 0!==n)return n;return null==(e=r.errors)?void 0:e[o]}(),n=Y(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o};return t.createElement(t.Fragment,null,t.createElement("h2",null,"Unexpected Application Error!"),t.createElement("h3",{style:{fontStyle:"italic"}},n),r?t.createElement("pre",{style:a},r):null,null)}const ce=t.createElement(se,null);class ue extends t.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?t.createElement(X.Provider,{value:this.props.routeContext},t.createElement(ee.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function de(e){let{routeContext:n,match:r,children:o}=e,a=t.useContext(K);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),t.createElement(X.Provider,{value:n},o)}function he(e,n,r,o){var a;if(void 0===n&&(n=[]),void 0===r&&(r=null),void 0===o&&(o=null),null==e){var i;if(null==(i=r)||!i.errors)return null;e=r.matches}let l=e,s=null==(a=r)?void 0:a.errors;if(null!=s){let e=l.findIndex((e=>e.route.id&&void 0!==(null==s?void 0:s[e.route.id])));e>=0||p(!1),l=l.slice(0,Math.min(l.length,e+1))}let c=!1,u=-1;if(r&&o&&o.v7_partialHydration)for(let t=0;t=0?l.slice(0,u+1):[l[0]];break}}}return l.reduceRight(((e,o,a)=>{let i,d=!1,h=null,p=null;var f;r&&(i=s&&o.route.id?s[o.route.id]:void 0,h=o.route.errorElement||ce,c&&(u<0&&0===a?(f="route-fallback",!1||ve[f]||(ve[f]=!0),d=!0,p=null):u===a&&(d=!0,p=o.route.hydrateFallbackElement||null)));let m=n.concat(l.slice(0,a+1)),_=()=>{let n;return n=i?h:d?p:o.route.Component?t.createElement(o.route.Component,null):o.route.element?o.route.element:e,t.createElement(de,{match:o,routeContext:{outlet:e,matches:m,isDataRoute:null!=r},children:n})};return r&&(o.route.ErrorBoundary||o.route.errorElement||0===a)?t.createElement(ue,{location:r.location,revalidation:r.revalidation,component:h,error:i,children:_(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):_()}),null)}var pe=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(pe||{}),fe=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(fe||{});function me(e){let n=t.useContext(K);return n||p(!1),n}function _e(e){let n=t.useContext(G);return n||p(!1),n}function ge(e){let n=function(e){let n=t.useContext(X);return n||p(!1),n}(),r=n.matches[n.matches.length-1];return r.route.id||p(!1),r.route.id}const ve={};t.startTransition;function ye(e){return function(e){let n=t.useContext(X).outlet;return n?t.createElement(ae.Provider,{value:e},n):n}(e.context)}function be(e){p(!1)}function we(n){let{basename:r="/",children:o=null,location:a,navigationType:i=e.Pop,navigator:l,static:s=!1,future:c}=n;te()&&p(!1);let u=r.replace(/^\/*/,"/"),d=t.useMemo((()=>({basename:u,navigator:l,static:s,future:Z({v7_relativeSplatPath:!1},c)})),[u,c,l,s]);"string"===typeof a&&(a=v(a));let{pathname:h="/",search:f="",hash:m="",state:_=null,key:g="default"}=a,y=t.useMemo((()=>{let e=I(h,u);return null==e?null:{location:{pathname:e,search:f,hash:m,state:_,key:g},navigationType:i}}),[u,h,f,m,_,g,i]);return null==y?null:t.createElement(Q.Provider,{value:d},t.createElement(J.Provider,{children:o,value:y}))}function ke(e){let{children:t,location:n}=e;return le(xe(t),n)}new Promise((()=>{}));t.Component;function xe(e,n){void 0===n&&(n=[]);let r=[];return t.Children.forEach(e,((e,o)=>{if(!t.isValidElement(e))return;let a=[...n,o];if(e.type===t.Fragment)return void r.push.apply(r,xe(e.props.children,a));e.type!==be&&p(!1),e.props.index&&e.props.children&&p(!1);let i={id:e.props.id||a.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=xe(e.props.children,a)),r.push(i)})),r}function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function Ce(e){return void 0===e&&(e=""),new URLSearchParams("string"===typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map((e=>[n,e])):[[n,r]])}),[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const Ee=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Me=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"];try{window.__reactRouterVersion="6"}catch(Vd){}const Te=t.createContext({isTransitioning:!1});new Map;const Ne=t.startTransition;t.flushSync,t.useId;function Pe(e){let{basename:n,children:r,future:o,window:a}=e,i=t.useRef();null==i.current&&(i.current=function(e){return void 0===e&&(e={}),y((function(e,t){let{pathname:n="/",search:r="",hash:o=""}=v(e.location.hash.substr(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),_("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let n=e.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let t=e.location.href,n=t.indexOf("#");r=-1===n?t:t.slice(0,n)}return r+"#"+("string"===typeof t?t:g(t))}),(function(e,t){f("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)}({window:a,v5Compat:!0}));let l=i.current,[s,c]=t.useState({action:l.action,location:l.location}),{v7_startTransition:u}=o||{},d=t.useCallback((e=>{u&&Ne?Ne((()=>c(e))):c(e)}),[c,u]);return t.useLayoutEffect((()=>l.listen(d)),[l,d]),t.createElement(we,{basename:n,children:r,location:s.location,navigationType:s.action,navigator:l,future:o})}const De="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,Oe=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Re=t.forwardRef((function(e,n){let r,{onClick:o,relative:a,reloadDocument:i,replace:l,state:s,target:c,to:u,preventScrollReset:d,unstable_viewTransition:h}=e,f=Ae(e,Ee),{basename:m}=t.useContext(Q),_=!1;if("string"===typeof u&&Oe.test(u)&&(r=u,De))try{let e=new URL(window.location.href),t=u.startsWith("//")?new URL(e.protocol+u):new URL(u),n=I(t.pathname,m);t.origin===e.origin&&null!=n?u=n+t.search+t.hash:_=!0}catch(Vd){}let v=function(e,n){let{relative:r}=void 0===n?{}:n;te()||p(!1);let{basename:o,navigator:a}=t.useContext(Q),{hash:i,pathname:l,search:s}=ie(e,{relative:r}),c=l;return"/"!==o&&(c="/"===l?o:H([o,l])),a.createHref({pathname:c,search:s,hash:i})}(u,{relative:a}),y=function(e,n){let{target:r,replace:o,state:a,preventScrollReset:i,relative:l,unstable_viewTransition:s}=void 0===n?{}:n,c=oe(),u=ne(),d=ie(e,{relative:l});return t.useCallback((t=>{if(function(e,t){return 0===e.button&&(!t||"_self"===t)&&!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)}(t,r)){t.preventDefault();let n=void 0!==o?o:g(u)===g(d);c(e,{replace:n,state:a,preventScrollReset:i,relative:l,unstable_viewTransition:s})}}),[u,c,d,o,a,r,e,i,l,s])}(u,{replace:l,state:s,target:c,preventScrollReset:d,relative:a,unstable_viewTransition:h});return t.createElement("a",Se({},f,{href:r||v,onClick:_||i?o:function(e){o&&o(e),e.defaultPrevented||y(e)},ref:n,target:c}))}));const Le=t.forwardRef((function(e,n){let{"aria-current":r="page",caseSensitive:o=!1,className:a="",end:i=!1,style:l,to:s,unstable_viewTransition:c,children:u}=e,d=Ae(e,Me),h=ie(s,{relative:d.relative}),f=ne(),m=t.useContext(G),{navigator:_,basename:g}=t.useContext(Q),v=null!=m&&function(e,n){void 0===n&&(n={});let r=t.useContext(Te);null==r&&p(!1);let{basename:o}=$e(Ie.useViewTransitionState),a=ie(e,{relative:n.relative});if(!r.isTransitioning)return!1;let i=I(r.currentLocation.pathname,o)||r.currentLocation.pathname,l=I(r.nextLocation.pathname,o)||r.nextLocation.pathname;return null!=R(a.pathname,l)||null!=R(a.pathname,i)}(h)&&!0===c,y=_.encodeLocation?_.encodeLocation(h).pathname:h.pathname,b=f.pathname,w=m&&m.navigation&&m.navigation.location?m.navigation.location.pathname:null;o||(b=b.toLowerCase(),w=w?w.toLowerCase():null,y=y.toLowerCase()),w&&g&&(w=I(w,g)||w);const k="/"!==y&&y.endsWith("/")?y.length-1:y.length;let x,S=b===y||!i&&b.startsWith(y)&&"/"===b.charAt(k),A=null!=w&&(w===y||!i&&w.startsWith(y)&&"/"===w.charAt(y.length)),C={isActive:S,isPending:A,isTransitioning:v},E=S?r:void 0;x="function"===typeof a?a(C):[a,S?"active":null,A?"pending":null,v?"transitioning":null].filter(Boolean).join(" ");let M="function"===typeof l?l(C):l;return t.createElement(Re,Se({},d,{"aria-current":E,className:x,ref:n,style:M,to:s,unstable_viewTransition:c}),"function"===typeof u?u(C):u)}));var Ie,ze;function $e(e){let n=t.useContext(K);return n||p(!1),n}function je(e){let n=t.useRef(Ce(e)),r=t.useRef(!1),o=ne(),a=t.useMemo((()=>function(e,t){let n=Ce(e);return t&&t.forEach(((e,r)=>{n.has(r)||t.getAll(r).forEach((e=>{n.append(r,e)}))})),n}(o.search,r.current?null:n.current)),[o.search]),i=oe(),l=t.useCallback(((e,t)=>{const n=Ce("function"===typeof e?e(a):e);r.current=!0,i("?"+n,t)}),[i,a]);return[a,l]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ie||(Ie={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(ze||(ze={}));const Fe=()=>{var e;const t=(null===(e=document.getElementById("root"))||void 0===e?void 0:e.dataset.params)||"{}";try{return JSON.parse(t)}catch(Vd){return console.error(Vd),{}}},He=()=>!!Object.keys(Fe()).length,Ve=/(\/select\/)(\d+|\d.+)(\/)(.+)/,Be=e=>{var t;return(null===(t=e.match(Ve))||void 0===t?void 0:t[2])||""};let Ue=function(e){return e.logs="logs",e.anomaly="anomaly",e}({});const Ye=(e,t)=>{t?window.localStorage.setItem(e,JSON.stringify({value:t})):qe([e]),window.dispatchEvent(new Event("storage"))},We=e=>{const t=window.localStorage.getItem(e);if(null!==t)try{var n;return null===(n=JSON.parse(t))||void 0===n?void 0:n.value}catch(Vd){return t}},qe=e=>e.forEach((e=>window.localStorage.removeItem(e))),{REACT_APP_TYPE:Ze}={REACT_APP_TYPE:"logs"};var Ke=n(215),Ge=n.n(Ke),Qe=n(424),Je=n.n(Qe);const Xe={table:100,chart:20,code:1e3},et=(e,t)=>{const n=window.location.hash.split("?")[1],r=Ge().parse(n,{ignoreQueryPrefix:!0});return Je()(r,e,t||"")};let tt=function(e){return e.yhat="yhat",e.yhatUpper="yhat_upper",e.yhatLower="yhat_lower",e.anomaly="vmui_anomalies_points",e.training="vmui_training_data",e.actual="actual",e.anomalyScore="anomaly_score",e}({}),nt=function(e){return e.table="table",e.chart="chart",e.code="code",e}({}),rt=function(e){return e.emptyServer="Please enter Server URL",e.validServer="Please provide a valid Server URL",e.validQuery="Please enter a valid Query and execute it",e.traceNotFound="Not found the tracing information",e.emptyTitle="Please enter title",e.positiveNumber="Please enter positive number",e.validStep="Please enter a valid step",e.unknownType="Unknown server response format: must have 'errorType'",e}({}),ot=function(e){return e.system="system",e.light="light",e.dark="dark",e}({}),at=function(e){return e.empty="empty",e.metricsql="metricsql",e.label="label",e.labelValue="labelValue",e}({});const it=e=>getComputedStyle(document.documentElement).getPropertyValue("--".concat(e)),lt=(e,t)=>{document.documentElement.style.setProperty("--".concat(e),t)},st=()=>window.matchMedia("(prefers-color-scheme: dark)").matches,ct=e=>e.replace(/\/$/,""),ut=et("g0.tenantID",""),dt={serverUrl:ct((e=>{const{serverURL:t}=Fe(),n=We("SERVER_URL"),r=window.location.href.replace(/\/(select\/)?(vmui)\/.*/,""),o="".concat(window.location.origin).concat(window.location.pathname.replace(/^\/vmui/,"")),a=window.location.href.replace(/\/(?:prometheus\/)?(?:graph|vmui)\/.*/,"/prometheus"),i=t||n||a;switch(Ze){case Ue.logs:return r;case Ue.anomaly:return n||o;default:return e?((e,t)=>e.replace(Ve,"$1".concat(t,"/$4")))(i,e):i}})(ut)),tenantId:ut,theme:We("THEME")||ot.system,isDarkTheme:null};function ht(e,t){switch(t.type){case"SET_SERVER":return{...e,serverUrl:ct(t.payload)};case"SET_TENANT_ID":return{...e,tenantId:t.payload};case"SET_THEME":return Ye("THEME",t.payload),{...e,theme:t.payload};case"SET_DARK_THEME":return{...e,isDarkTheme:(n=e.theme,n===ot.system&&st()||n===ot.dark)};default:throw new Error}var n}var pt=n(746);var ft=0;Array.isArray;function mt(e,t,n,r,o,a){t||(t={});var i,l,s=t;if("ref"in s)for(l in s={},t)"ref"==l?i=t[l]:s[l]=t[l];var c={type:e,props:s,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--ft,__i:-1,__u:0,__source:o,__self:a};if("function"==typeof e&&(i=e.defaultProps))for(l in i)void 0===s[l]&&(s[l]=i[l]);return pt.fF.vnode&&pt.fF.vnode(c),c}const _t=(0,t.createContext)({}),gt=()=>(0,t.useContext)(_t).state,vt=()=>(0,t.useContext)(_t).dispatch,yt=Object.entries(dt).reduce(((e,t)=>{let[n,r]=t;return{...e,[n]:et(n)||r}}),{}),bt="YYYY-MM-DD",wt="YYYY-MM-DD HH:mm:ss",kt="YYYY-MM-DD[T]HH:mm:ss",xt=window.innerWidth/4,St=window.innerWidth/40,At=1,Ct=1578e8,Et=Intl.supportedValuesOf,Mt=Et?Et("timeZone"):["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Katmandu","Asia/Khandyga","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis"],Tt=[{long:"years",short:"y",possible:"year"},{long:"weeks",short:"w",possible:"week"},{long:"days",short:"d",possible:"day"},{long:"hours",short:"h",possible:"hour"},{long:"minutes",short:"m",possible:"min"},{long:"seconds",short:"s",possible:"sec"},{long:"milliseconds",short:"ms",possible:"millisecond"}],Nt=Tt.map((e=>e.short)),Pt=e=>{let t=(n=e,Math.round(1e3*n)/1e3);var n;const r=Math.round(e);e>=100&&(t=r-r%10),e<100&&e>=10&&(t=r-r%5),e<10&&e>=1&&(t=r),e<1&&e>.01&&(t=Math.round(40*e)/40);const a=(e=>zt(o().duration(e,"seconds").asMilliseconds()))(t||.001);return a.replace(/\s/g,"")},Dt=e=>{const t=e.match(/\d+/g),n=e.match(/[a-zA-Z]+/g);if(n&&t&&Nt.includes(n[0]))return{[n[0]]:t[0]}},Ot=(e,t)=>Pt(e/(t?St:xt)),Rt=(e,t)=>{const n=(t||o()().toDate()).valueOf()/1e3,r=(e=>{const t=Tt.map((e=>e.short)).join("|"),n=new RegExp("\\d+(\\.\\d+)?[".concat(t,"]+"),"g"),r=(e.match(n)||[]).reduce(((e,t)=>{const n=Dt(t);return n?{...e,...n}:{...e}}),{});return o().duration(r).asSeconds()})(e);return{start:n-r,end:n,step:Ot(r),date:Lt(t||o()().toDate())}},Lt=e=>o().tz(e).utc().format(kt),It=e=>o().tz(e).format(kt),zt=e=>{const t=Math.floor(e%1e3),n=Math.floor(e/1e3%60),r=Math.floor(e/1e3/60%60),o=Math.floor(e/1e3/3600%24),a=Math.floor(e/864e5),i=["d","h","m","s","ms"],l=[a,o,r,n,t].map(((e,t)=>e?"".concat(e).concat(i[t]):""));return l.filter((e=>e)).join("")},$t=e=>{const t=o()(1e3*e);return t.isValid()?t.toDate():new Date},jt="logs"===Ue.logs,Ft=[{title:"Last 5 minutes",duration:"5m",isDefault:jt},{title:"Last 15 minutes",duration:"15m"},{title:"Last 30 minutes",duration:"30m",isDefault:!jt},{title:"Last 1 hour",duration:"1h"},{title:"Last 3 hours",duration:"3h"},{title:"Last 6 hours",duration:"6h"},{title:"Last 12 hours",duration:"12h"},{title:"Last 24 hours",duration:"24h"},{title:"Last 2 days",duration:"2d"},{title:"Last 7 days",duration:"7d"},{title:"Last 30 days",duration:"30d"},{title:"Last 90 days",duration:"90d"},{title:"Last 180 days",duration:"180d"},{title:"Last 1 year",duration:"1y"},{title:"Yesterday",duration:"1d",until:()=>o()().tz().subtract(1,"day").endOf("day").toDate()},{title:"Today",duration:"1d",until:()=>o()().tz().endOf("day").toDate()}].map((e=>({id:e.title.replace(/\s/g,"_").toLocaleLowerCase(),until:e.until?e.until:()=>o()().tz().toDate(),...e}))),Ht=e=>{var t;let{relativeTimeId:n,defaultDuration:r,defaultEndInput:o}=e;const a=null===(t=Ft.find((e=>e.isDefault)))||void 0===t?void 0:t.id,i=n||et("g0.relative_time",a),l=Ft.find((e=>e.id===i));return{relativeTimeId:l?i:"none",duration:l?l.duration:r,endInput:l?l.until():o}},Vt=e=>{const t=o()().tz(e);return"UTC".concat(t.format("Z"))},Bt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=new RegExp(e,"i");return Mt.reduce(((n,r)=>{const o=(r.match(/^(.*?)\//)||[])[1]||"unknown",a=Vt(r),i=a.replace(/UTC|0/,""),l=r.replace(/[/_]/g," "),s={region:r,utc:a,search:"".concat(r," ").concat(a," ").concat(l," ").concat(i)},c=!e||e&&t.test(s.search);return c&&n[o]?n[o].push(s):c&&(n[o]=[s]),n}),{})},Ut=e=>{o().tz.setDefault(e)},Yt=()=>{const e=o().tz.guess(),t=(e=>{try{return o()().tz(e),!0}catch(Vd){return!1}})(e);return{isValid:t,title:t?"Browser Time (".concat(e,")"):"Browser timezone (UTC)",region:t?e:"UTC"}},Wt=We("TIMEZONE")||Yt().region;Ut(Wt);const qt={...(()=>{const e=et("g0.range_input"),{duration:t,endInput:n,relativeTimeId:r}=Ht({defaultDuration:e||"1h",defaultEndInput:(a=et("g0.end_input",o()().utc().format(kt)),o()(a).utcOffset(0,!0).toDate()),relativeTimeId:e?et("g0.relative_time","none"):void 0});var a;return{duration:t,period:Rt(t,n),relativeTime:r}})(),timezone:Wt};function Zt(e,t){switch(t.type){case"SET_TIME_STATE":return{...e,...t.payload};case"SET_DURATION":return{...e,duration:t.payload,period:Rt(t.payload,$t(e.period.end)),relativeTime:"none"};case"SET_RELATIVE_TIME":return{...e,duration:t.payload.duration,period:Rt(t.payload.duration,t.payload.until),relativeTime:t.payload.id};case"SET_PERIOD":const n=(e=>{const t=e.to.valueOf()-e.from.valueOf();return zt(t)})(t.payload);return{...e,duration:n,period:Rt(n,t.payload.to),relativeTime:"none"};case"RUN_QUERY":const{duration:r,endInput:o}=Ht({relativeTimeId:e.relativeTime,defaultDuration:e.duration,defaultEndInput:$t(e.period.end)});return{...e,period:Rt(r,o)};case"RUN_QUERY_TO_NOW":return{...e,period:Rt(e.duration)};case"SET_TIMEZONE":return Ut(t.payload),Ye("TIMEZONE",t.payload),e.defaultTimezone&&Ye("DISABLED_DEFAULT_TIMEZONE",t.payload!==e.defaultTimezone),{...e,timezone:t.payload};case"SET_DEFAULT_TIMEZONE":return{...e,defaultTimezone:t.payload};default:throw new Error}}const Kt=(0,t.createContext)({}),Gt=()=>(0,t.useContext)(Kt).state,Qt=()=>(0,t.useContext)(Kt).dispatch,Jt=e=>{const t=e.map((e=>e.values[e.index])),n=(e=>{const t=We(e);return t?JSON.parse(t):[]})("QUERY_HISTORY");n[0]||(n[0]=[]);const r=n[0];t.forEach((e=>{!r.includes(e)&&e&&r.unshift(e),r.length>250&&r.shift()})),Ye("QUERY_HISTORY",JSON.stringify(n))},Xt=50,en=1e3,tn=1e3;const nn=(()=>{var e;const t=(null===(e=(window.location.hash.split("?")[1]||"").match(/g\d+\.expr/g))||void 0===e?void 0:e.length)||1;return new Array(t>10?10:t).fill(1).map(((e,t)=>et("g".concat(t,".expr"),"")))})(),rn={query:nn,queryHistory:nn.map((e=>({index:0,values:[e]}))),autocomplete:We("AUTOCOMPLETE")||!1,autocompleteQuick:!1,autocompleteCache:new class{constructor(){this.maxSize=void 0,this.map=void 0,this.maxSize=tn,this.map=new Map}get(e){for(const[t,n]of this.map){const r=JSON.parse(t),o=r.start===e.start&&r.end===e.end,a=r.type===e.type,i=e.value&&r.value&&e.value.includes(r.value),l=r.match===e.match||i,s=n.length=this.maxSize){const e=this.map.keys().next().value;this.map.delete(e)}this.map.set(JSON.stringify(e),t)}},metricsQLFunctions:[]};function on(e,t){switch(t.type){case"SET_QUERY":return{...e,query:t.payload.map((e=>e))};case"SET_QUERY_HISTORY":return Jt(t.payload),{...e,queryHistory:t.payload};case"SET_QUERY_HISTORY_BY_INDEX":return e.queryHistory.splice(t.payload.queryNumber,1,t.payload.value),{...e,queryHistory:e.queryHistory};case"TOGGLE_AUTOCOMPLETE":return Ye("AUTOCOMPLETE",!e.autocomplete),{...e,autocomplete:!e.autocomplete};case"SET_AUTOCOMPLETE_QUICK":return{...e,autocompleteQuick:t.payload};case"SET_AUTOCOMPLETE_CACHE":return e.autocompleteCache.put(t.payload.key,t.payload.value),{...e};case"SET_METRICSQL_FUNCTIONS":return{...e,metricsQLFunctions:t.payload};default:throw new Error}}const an=(0,t.createContext)({}),ln=()=>(0,t.useContext)(an).state,sn=()=>(0,t.useContext)(an).dispatch,cn=()=>mt("svg",{viewBox:"0 0 74 24",fill:"currentColor",children:mt("path",{d:"M6.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29C15.73 4.1 12.46 3.01 7.43 3h-.06C2.33 3-.93 4.1.24 5.18c0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a454.94 454.94 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44a454.4 454.4 0 0 0 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM35 5l-5.84 14.46h-2.43L20.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H35Zm17.18 0v14.46H49.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L38.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H36.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15Z"})}),un=()=>mt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:[mt("path",{d:"M11.12 10.48c.36.28.8.43 1.26.43h.05c.48 0 .96-.19 1.25-.44 1.5-1.28 5.88-5.29 5.88-5.29 1.17-1.09-2.1-2.17-7.13-2.18h-.06c-5.04 0-8.3 1.1-7.13 2.18 0 0 4.37 4 5.88 5.3Zm2.56 2.16c-.36.28-.8.44-1.26.45h-.04c-.46 0-.9-.17-1.26-.45-1.04-.88-4.74-4.22-6.12-5.5v1.94c0 .21.08.5.22.63l.07.06c1.05.96 4.55 4.16 5.83 5.25.36.28.8.43 1.26.44h.04c.49-.02.96-.2 1.26-.44 1.3-1.11 4.94-4.45 5.88-5.31.15-.14.23-.42.23-.63V7.15a455.13 455.13 0 0 1-6.11 5.5Zm-1.26 4.99c.46 0 .9-.16 1.26-.44 2.05-1.82 4.09-3.65 6.1-5.5v1.94c0 .2-.07.48-.22.62-.94.87-4.57 4.2-5.88 5.3-.3.26-.77.44-1.26.45h-.04c-.46 0-.9-.16-1.26-.44-1.2-1.02-4.38-3.92-5.62-5.06l-.28-.25c-.14-.14-.22-.42-.22-.62v-1.94c1.38 1.26 5.08 4.6 6.12 5.5.36.28.8.43 1.26.44h.04ZM40 5l-5.84 14.46h-2.43L25.89 5h2.16a.9.9 0 0 1 .9.61l3.41 8.82a18.8 18.8 0 0 1 .62 2.02 19.44 19.44 0 0 1 .57-2.02l3.39-8.82c.05-.15.16-.3.31-.42a.9.9 0 0 1 .58-.19H40Zm17.18 0v14.46H54.8v-9.34c0-.37.02-.78.06-1.21l-4.37 8.21c-.21.4-.53.59-.95.59h-.38c-.43 0-.75-.2-.95-.59L43.8 8.88a22.96 22.96 0 0 1 .07 1.24v9.34H41.5V5h2.03l.3.01c.1 0 .17.02.24.05.07.03.13.07.19.13a1 1 0 0 1 .17.24l4.33 8.03a16.97 16.97 0 0 1 .6 1.36 14.34 14.34 0 0 1 .6-1.38l4.28-8.01c.05-.1.1-.18.17-.24.06-.06.12-.1.19-.13a.9.9 0 0 1 .24-.05l.3-.01h2.04Zm8.88 13.73a4.5 4.5 0 0 0 1.82-.35 3.96 3.96 0 0 0 2.22-2.47c.2-.57.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.12 1.51-.37 2.19a4.88 4.88 0 0 1-2.76 2.95c-.66.29-1.4.43-2.23.43-.82 0-1.57-.14-2.24-.43a5.01 5.01 0 0 1-2.75-2.95 6.37 6.37 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.1 1.28.3 1.85a3.98 3.98 0 0 0 2.21 2.47c.53.24 1.14.36 1.82.36Zm10.38.73h-1.03V5.31h1.03v14.15ZM1.73 36v-5.17l-.67-.07a.6.6 0 0 1-.21-.1.23.23 0 0 1-.08-.18v-.44h.96v-.59c0-.34.05-.65.14-.92a1.79 1.79 0 0 1 1.08-1.11 2.45 2.45 0 0 1 1.62-.02l-.03.53c0 .1-.06.15-.16.16H4c-.18 0-.35.03-.5.08a.95.95 0 0 0-.39.23c-.1.11-.19.25-.25.43-.05.18-.08.4-.08.65v.56h1.75v.78H2.8V36H1.73Zm6.17-6.17c.45 0 .85.07 1.2.22a2.57 2.57 0 0 1 1.5 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.86-.07-1.22-.21a2.57 2.57 0 0 1-1.5-1.62c-.12-.38-.19-.81-.19-1.3 0-.47.07-.9.2-1.28a2.57 2.57 0 0 1 1.5-1.62c.35-.15.76-.22 1.2-.22Zm0 5.42c.6 0 1.05-.2 1.35-.6.3-.4.44-.97.44-1.69s-.15-1.28-.44-1.69c-.3-.4-.75-.6-1.35-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.33.73-.08.28-.11.6-.11.96 0 .72.15 1.29.44 1.69.3.4.76.6 1.36.6Zm5.26-4.11c.2-.42.43-.74.71-.97.28-.24.62-.36 1.03-.36.13 0 .25.02.36.05.12.02.23.07.32.13l-.08.8c-.02.1-.08.15-.18.15l-.24-.04a1.7 1.7 0 0 0-.88.05c-.15.05-.29.14-.4.25-.12.1-.23.24-.32.4-.1.17-.18.35-.26.56V36h-1.07v-6.08h.61c.12 0 .2.02.24.07.05.04.08.12.1.23l.06.92Zm13.73-3.82L23.39 36h-1.46l-3.5-8.68h1.29a.54.54 0 0 1 .54.37l2.04 5.3a11.31 11.31 0 0 1 .37 1.21 11.65 11.65 0 0 1 .35-1.22l2.03-5.29c.03-.1.1-.18.19-.25.1-.08.21-.12.35-.12h1.3Zm2.2 2.52V36H27.6v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.08.36a1 1 0 0 1-.51.5.96.96 0 0 1-.73 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .37.08c.12.05.22.11.3.2a.94.94 0 0 1 .3.67Zm5.72 3.1a.68.68 0 0 1-.13.13c-.04.03-.1.05-.18.05a.42.42 0 0 1-.22-.07 3.95 3.95 0 0 0-.62-.31c-.14-.05-.3-.07-.51-.07-.26 0-.5.04-.69.14-.2.1-.36.23-.49.4-.13.18-.22.4-.29.64-.06.25-.1.53-.1.85 0 .33.04.62.1.88.08.25.18.47.32.64.13.18.29.3.48.4.18.09.4.13.63.13a1.6 1.6 0 0 0 .94-.27l.26-.2a.4.4 0 0 1 .25-.09.3.3 0 0 1 .27.14l.43.54a2.76 2.76 0 0 1-1.77.96c-.22.03-.43.05-.65.05a2.57 2.57 0 0 1-1.96-.83c-.25-.28-.45-.6-.6-1-.14-.4-.21-.85-.21-1.35 0-.45.06-.87.2-1.25a2.61 2.61 0 0 1 1.51-1.67c.37-.16.8-.24 1.28-.24.46 0 .86.07 1.2.22.35.15.66.36.94.64l-.4.54Zm3.43 4.95c-.54 0-.95-.15-1.24-.45-.28-.3-.42-.73-.42-1.26v-3.44h-.63a.29.29 0 0 1-.2-.07c-.06-.06-.09-.13-.09-.24v-.59l.99-.16.31-1.68a.33.33 0 0 1 .12-.18.34.34 0 0 1 .21-.07h.77v1.94h1.64v1.05h-1.64v3.34c0 .2.05.34.14.45.1.1.22.16.39.16a.73.73 0 0 0 .39-.1l.12-.07a.2.2 0 0 1 .11-.03c.05 0 .08.01.11.03l.09.1.44.72c-.21.18-.46.32-.74.4-.28.1-.57.15-.87.15Zm5.09-6.35c.46 0 .87.07 1.24.22a2.7 2.7 0 0 1 1.58 1.63c.14.39.22.83.22 1.31 0 .49-.08.93-.22 1.32-.14.4-.35.73-.62 1-.26.28-.58.49-.96.64-.37.15-.78.22-1.24.22a3.4 3.4 0 0 1-1.25-.22 2.71 2.71 0 0 1-1.59-1.64 3.8 3.8 0 0 1-.21-1.32c0-.48.07-.92.21-1.31a2.75 2.75 0 0 1 1.58-1.63c.38-.15.8-.22 1.26-.22Zm0 5.2c.51 0 .89-.17 1.13-.52.25-.34.38-.84.38-1.5a2.6 2.6 0 0 0-.38-1.53c-.24-.34-.62-.52-1.13-.52-.52 0-.9.18-1.16.53-.25.35-.37.85-.37 1.51s.12 1.17.37 1.51c.25.35.64.52 1.16.52Zm5.56-4.04c.2-.37.42-.65.69-.86.26-.21.57-.32.94-.32.28 0 .5.06.68.19l-.1 1.1a.3.3 0 0 1-.09.16.24.24 0 0 1-.15.04 1.8 1.8 0 0 1-.27-.03 2.01 2.01 0 0 0-.34-.03c-.16 0-.3.03-.44.08a1.1 1.1 0 0 0-.34.2c-.1.1-.2.2-.27.33-.08.13-.15.27-.22.44V36H47.7v-6.16h.87c.15 0 .26.03.31.09.06.05.1.15.13.29l.09.7Zm4.62-1.07V36h-1.49v-6.16h1.49Zm.2-1.79c0 .13-.02.25-.07.36a1 1 0 0 1-.51.5.96.96 0 0 1-.74 0 1.02 1.02 0 0 1-.5-.5.96.96 0 0 1 0-.73.93.93 0 0 1 .86-.58.9.9 0 0 1 .38.08c.11.05.21.11.3.2a.94.94 0 0 1 .28.67Zm4.56 5.32a7.8 7.8 0 0 0-1.08.12c-.29.05-.52.12-.7.2a.92.92 0 0 0-.38.3.64.64 0 0 0-.11.36c0 .26.07.45.23.56.15.11.35.17.6.17.3 0 .57-.06.79-.17.22-.1.44-.28.65-.5v-1.04Zm-3.4-2.67c.71-.65 1.57-.97 2.56-.97.36 0 .68.06.97.18a1.99 1.99 0 0 1 1.16 1.24c.1.3.16.61.16.96V36h-.67a.7.7 0 0 1-.33-.06c-.07-.04-.13-.13-.18-.26l-.13-.44c-.16.14-.3.26-.46.37a2.8 2.8 0 0 1-.97.43 2.77 2.77 0 0 1-1.32-.05 1.62 1.62 0 0 1-.57-.31 1.41 1.41 0 0 1-.38-.53 1.85 1.85 0 0 1-.05-1.18c.05-.16.14-.3.25-.45.12-.14.28-.27.46-.4a3 3 0 0 1 .7-.32 9.19 9.19 0 0 1 2.2-.33v-.36c0-.41-.09-.71-.26-.91-.18-.2-.43-.3-.76-.3a1.84 1.84 0 0 0-1.02.28l-.33.18c-.1.06-.2.09-.32.09-.1 0-.2-.03-.27-.08a.72.72 0 0 1-.17-.2l-.26-.47Zm11.49 4.32V36h-4.88v-8.6h1.16v7.62h3.72Zm3.16-5.2c.44 0 .84.08 1.2.23a2.57 2.57 0 0 1 1.49 1.62c.13.38.2.81.2 1.29s-.07.91-.2 1.3a2.57 2.57 0 0 1-1.49 1.61c-.36.14-.76.21-1.2.21-.45 0-.85-.07-1.21-.21a2.57 2.57 0 0 1-1.5-1.62c-.13-.38-.2-.81-.2-1.3 0-.47.07-.9.2-1.28.14-.39.33-.72.59-1 .25-.26.55-.47.9-.62.37-.15.77-.22 1.22-.22Zm0 5.43c.6 0 1.05-.2 1.34-.6.3-.4.45-.97.45-1.69s-.15-1.28-.45-1.69c-.3-.4-.74-.6-1.34-.6-.3 0-.57.05-.8.15-.22.1-.4.26-.56.45-.15.2-.26.44-.34.73-.07.28-.1.6-.1.96 0 .72.14 1.29.44 1.69.3.4.75.6 1.36.6Zm6.33-2.22c.22 0 .4-.03.57-.09.16-.06.3-.14.41-.25.12-.11.2-.24.26-.39.05-.15.08-.31.08-.5 0-.37-.11-.66-.34-.88-.23-.22-.55-.33-.98-.33-.43 0-.76.1-.99.33-.22.22-.34.51-.34.89 0 .18.03.34.09.5a1.1 1.1 0 0 0 .67.63c.16.06.35.09.57.09Zm1.93 3.3a.51.51 0 0 0-.13-.36.84.84 0 0 0-.34-.22 8.57 8.57 0 0 0-1.73-.2 7.5 7.5 0 0 1-.62-.05c-.23.1-.41.23-.56.4a.8.8 0 0 0-.1.92c.07.12.18.22.32.3.14.1.32.16.54.21a3.5 3.5 0 0 0 1.55 0c.23-.05.42-.12.57-.22.16-.1.29-.21.37-.34a.8.8 0 0 0 .13-.44Zm1.08-6.17v.4c0 .13-.08.21-.25.25l-.69.09c.14.26.2.56.2.88a1.86 1.86 0 0 1-1.36 1.82 3.07 3.07 0 0 1-1.72.04c-.12.08-.22.16-.29.25a.44.44 0 0 0-.1.27c0 .15.06.26.17.33.12.08.28.13.47.16a5 5 0 0 0 .66.06 16.56 16.56 0 0 1 1.5.13c.26.05.48.12.67.22.19.1.34.24.46.41.12.18.18.4.18.69 0 .26-.07.5-.2.75s-.31.46-.56.65c-.24.2-.54.34-.9.46a4.57 4.57 0 0 1-2.36.04c-.33-.09-.6-.2-.82-.36a1.56 1.56 0 0 1-.5-.51c-.1-.2-.16-.4-.16-.6 0-.3.1-.56.28-.77.19-.2.45-.37.77-.5a1.15 1.15 0 0 1-.43-.32.88.88 0 0 1-.15-.54c0-.09.01-.18.04-.27.04-.1.08-.2.15-.28a1.55 1.55 0 0 1 .58-.5c-.3-.16-.53-.39-.7-.66-.17-.28-.25-.6-.25-.97 0-.3.05-.57.16-.8.12-.25.28-.46.48-.63.2-.17.45-.3.73-.4a3 3 0 0 1 2.3.21h1.64Zm4.65.76a.24.24 0 0 1-.23.14.42.42 0 0 1-.2-.07 3.59 3.59 0 0 0-.67-.3 1.8 1.8 0 0 0-1.03 0c-.14.05-.27.11-.37.2a.87.87 0 0 0-.23.27.75.75 0 0 0-.08.35c0 .15.04.28.13.39.1.1.21.19.36.27.15.07.32.14.5.2a13.63 13.63 0 0 1 1.16.4c.2.08.36.18.5.3a1.33 1.33 0 0 1 .5 1.07 2 2 0 0 1-.15.78c-.1.24-.25.44-.45.62-.2.17-.43.3-.72.4a3.1 3.1 0 0 1-2.14-.05 2.97 2.97 0 0 1-.87-.53l.25-.41c.04-.05.07-.1.12-.12a.3.3 0 0 1 .17-.04.4.4 0 0 1 .22.08l.3.19a1.91 1.91 0 0 0 1.03.27c.2 0 .38-.03.54-.08.16-.06.29-.13.4-.22a.96.96 0 0 0 .3-.7c0-.17-.05-.31-.14-.42-.09-.11-.2-.2-.36-.28a2.6 2.6 0 0 0-.5-.2l-.59-.19c-.2-.06-.39-.14-.58-.22a2.14 2.14 0 0 1-.5-.3 1.45 1.45 0 0 1-.36-.46c-.1-.19-.14-.41-.14-.67a1.6 1.6 0 0 1 .57-1.23c.18-.16.4-.3.68-.39.26-.1.57-.14.91-.14a2.84 2.84 0 0 1 1.9.7l-.23.4Z"}),mt("defs",{children:mt("path",{d:"M0 0h85v38H0z"})})]}),dn=()=>mt("svg",{viewBox:"0 0 85 38",fill:"currentColor",children:mt("path",{d:"M11.118 10.476c.36.28.801.433 1.257.436h.052c.48-.007.961-.192 1.25-.444 1.509-1.279 5.88-5.287 5.88-5.287 1.168-1.087-2.093-2.174-7.13-2.181h-.06c-5.036.007-8.298 1.094-7.13 2.181 0 0 4.372 4.008 5.88 5.295zm2.559 2.166c-.359.283-.801.439-1.258.444h-.044a2.071 2.071 0 0 1-1.257-.444C10.082 11.755 6.384 8.42 5 7.148v1.93c0 .215.081.496.222.629l.07.064c1.045.955 4.546 4.154 5.825 5.245.358.283.8.438 1.257.444h.044c.489-.015.962-.2 1.258-.444 1.309-1.11 4.948-4.444 5.887-5.31.148-.132.222-.413.222-.628v-1.93a455.127 455.127 0 0 1-6.11 5.494zm-1.258 4.984a2.071 2.071 0 0 0 1.258-.436c2.053-1.815 4.09-3.65 6.11-5.502v1.938c0 .207-.075.488-.223.621-.94.873-4.578 4.2-5.887 5.31-.296.25-.77.436-1.258.443h-.044a2.071 2.071 0 0 1-1.257-.436c-1.204-1.027-4.376-3.928-5.616-5.062l-.28-.255c-.14-.133-.221-.414-.221-.621v-1.938c1.383 1.265 5.081 4.607 6.117 5.495.358.282.8.438 1.257.443h.044zM40 5l-5.84 14.46h-2.43L25.89 5h2.16c.233 0 .423.057.57.17.146.113.256.26.33.44l3.41 8.82c.113.287.22.603.32.95.106.34.206.697.3 1.07.08-.373.166-.73.26-1.07a8.84 8.84 0 0 1 .31-.95l3.39-8.82a.959.959 0 0 1 .31-.42.906.906 0 0 1 .58-.19H40zm17.176 0v14.46h-2.37v-9.34c0-.373.02-.777.06-1.21l-4.37 8.21c-.206.393-.523.59-.95.59h-.38c-.426 0-.743-.197-.95-.59l-4.42-8.24c.02.22.037.437.05.65.014.213.02.41.02.59v9.34h-2.37V5h2.03c.12 0 .224.003.31.01a.778.778 0 0 1 .23.05c.074.027.137.07.19.13.06.06.117.14.17.24l4.33 8.03c.114.213.217.433.31.66.1.227.197.46.29.7.094-.247.19-.483.29-.71.1-.233.207-.457.32-.67l4.27-8.01c.054-.1.11-.18.17-.24a.57.57 0 0 1 .19-.13.903.903 0 0 1 .24-.05c.087-.007.19-.01.31-.01h2.03zm8.887 13.73c.68 0 1.286-.117 1.82-.35.54-.24.996-.57 1.37-.99a4.28 4.28 0 0 0 .85-1.48c.2-.573.3-1.19.3-1.85V5.31h1.02v8.75c0 .78-.124 1.51-.37 2.19a5.248 5.248 0 0 1-1.07 1.77c-.46.5-1.024.893-1.69 1.18-.66.287-1.404.43-2.23.43-.827 0-1.574-.143-2.24-.43a5.012 5.012 0 0 1-1.69-1.18 5.33 5.33 0 0 1-1.06-1.77 6.373 6.373 0 0 1-.37-2.19V5.31h1.03v8.74c0 .66.096 1.277.29 1.85.2.567.483 1.06.85 1.48.373.42.826.75 1.36.99.54.24 1.15.36 1.83.36zm10.38.73h-1.03V5.31h1.03v14.15zM4.242 35v-5.166l-.672-.078a.595.595 0 0 1-.21-.09.23.23 0 0 1-.078-.186v-.438h.96v-.588c0-.348.048-.656.144-.924.1-.272.24-.5.42-.684a1.79 1.79 0 0 1 .66-.426c.256-.096.544-.144.864-.144.272 0 .522.04.75.12l-.024.534c-.008.096-.062.148-.162.156a4.947 4.947 0 0 1-.39.012c-.184 0-.352.024-.504.072a.949.949 0 0 0-.384.234c-.108.108-.192.25-.252.426a2.184 2.184 0 0 0-.084.654v.558h1.752v.774H5.316V35H4.242zM10.416 28.826a3.1 3.1 0 0 1 1.2.222c.356.148.66.358.912.63s.444.602.576.99c.136.384.204.814.204 1.29 0 .48-.068.912-.204 1.296a2.735 2.735 0 0 1-.576.984 2.572 2.572 0 0 1-.912.63 3.175 3.175 0 0 1-1.2.216c-.448 0-.852-.072-1.212-.216a2.572 2.572 0 0 1-.912-.63 2.805 2.805 0 0 1-.582-.984 3.972 3.972 0 0 1-.198-1.296c0-.476.066-.906.198-1.29.136-.388.33-.718.582-.99.252-.272.556-.482.912-.63.36-.148.764-.222 1.212-.222zm0 5.424c.6 0 1.048-.2 1.344-.6.296-.404.444-.966.444-1.686 0-.724-.148-1.288-.444-1.692-.296-.404-.744-.606-1.344-.606-.304 0-.57.052-.798.156a1.507 1.507 0 0 0-.564.45c-.148.196-.26.438-.336.726a3.941 3.941 0 0 0-.108.966c0 .72.148 1.282.444 1.686.3.4.754.6 1.362.6zM15.677 30.14c.192-.416.428-.74.708-.972.28-.236.622-.354 1.026-.354.128 0 .25.014.366.042.12.028.226.072.318.132l-.078.798c-.024.1-.084.15-.18.15-.056 0-.138-.012-.246-.036a1.694 1.694 0 0 0-.366-.036c-.192 0-.364.028-.516.084-.148.056-.282.14-.402.252a1.782 1.782 0 0 0-.318.408c-.092.16-.176.344-.252.552V35h-1.074v-6.078h.612c.116 0 .196.022.24.066.044.044.074.12.09.228l.072.924zM26.761 28.922 24.283 35h-.96l-2.478-6.078h.87a.33.33 0 0 1 .33.222l1.542 3.912c.048.148.09.292.126.432.036.14.07.28.102.42.032-.14.066-.28.102-.42.036-.14.08-.284.132-.432l1.56-3.912a.33.33 0 0 1 .12-.156.311.311 0 0 1 .198-.066h.834zM27.74 35v-6.078h.643c.152 0 .246.074.282.222l.078.624c.224-.276.476-.502.756-.678.28-.176.604-.264.972-.264.408 0 .738.114.99.342.256.228.44.536.552.924.088-.22.2-.41.336-.57a1.987 1.987 0 0 1 1.014-.624c.196-.048.394-.072.594-.072.32 0 .604.052.852.156.252.1.464.248.636.444.176.196.31.438.402.726.092.284.138.61.138.978V35H34.91v-3.87c0-.476-.104-.836-.312-1.08-.208-.248-.508-.372-.9-.372-.176 0-.344.032-.504.096-.156.06-.294.15-.414.27-.12.12-.216.272-.288.456-.068.18-.102.39-.102.63V35h-1.074v-3.87c0-.488-.098-.852-.294-1.092-.196-.24-.482-.36-.858-.36-.264 0-.508.072-.732.216a2.38 2.38 0 0 0-.618.576V35H27.74zM40.746 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM44.974 29.6c.124-.124.254-.238.39-.342a2.395 2.395 0 0 1 .936-.444c.176-.044.368-.066.576-.066.336 0 .634.058.894.174.26.112.476.272.648.48.176.204.308.45.396.738.092.284.138.598.138.942V35H47.47v-3.918c0-.376-.086-.666-.258-.87-.172-.208-.434-.312-.786-.312-.256 0-.496.058-.72.174a2.58 2.58 0 0 0-.636.474V35h-1.482v-6.156h.906c.192 0 .318.09.378.27l.102.486zM53.085 28.748c.456 0 .87.074 1.242.222a2.692 2.692 0 0 1 1.578 1.626c.144.392.216.83.216 1.314 0 .488-.072.928-.216 1.32-.144.392-.35.726-.618 1.002a2.653 2.653 0 0 1-.96.636 3.333 3.333 0 0 1-1.242.222c-.46 0-.878-.074-1.254-.222a2.712 2.712 0 0 1-.966-.636 2.922 2.922 0 0 1-.618-1.002 3.807 3.807 0 0 1-.216-1.32c0-.484.072-.922.216-1.314.148-.392.354-.724.618-.996.268-.272.59-.482.966-.63a3.397 3.397 0 0 1 1.254-.222zm0 5.202c.512 0 .89-.172 1.134-.516.248-.344.372-.848.372-1.512s-.124-1.17-.372-1.518c-.244-.348-.622-.522-1.134-.522-.52 0-.906.176-1.158.528-.248.348-.372.852-.372 1.512s.124 1.164.372 1.512c.252.344.638.516 1.158.516zM57.252 35v-6.156h.906c.192 0 .318.09.378.27l.096.456c.108-.12.22-.23.336-.33a2.017 2.017 0 0 1 1.32-.492c.388 0 .706.106.954.318.252.208.44.486.564.834a1.93 1.93 0 0 1 .834-.882c.172-.092.354-.16.546-.204.196-.044.392-.066.588-.066.34 0 .642.052.906.156.264.104.486.256.666.456.18.2.316.444.408.732.096.288.144.618.144.99V35h-1.482v-3.918c0-.392-.086-.686-.258-.882-.172-.2-.424-.3-.756-.3-.152 0-.294.026-.426.078a1.026 1.026 0 0 0-.342.228 1.019 1.019 0 0 0-.228.366 1.435 1.435 0 0 0-.084.51V35h-1.488v-3.918c0-.412-.084-.712-.252-.9-.164-.188-.406-.282-.726-.282-.216 0-.418.054-.606.162a1.979 1.979 0 0 0-.516.432V35h-1.482zM70.558 32.372c-.428.02-.788.058-1.08.114-.292.052-.526.12-.702.204a.923.923 0 0 0-.378.294.639.639 0 0 0-.114.366c0 .26.076.446.228.558.156.112.358.168.606.168.304 0 .566-.054.786-.162.224-.112.442-.28.654-.504v-1.038zm-3.396-2.67c.708-.648 1.56-.972 2.556-.972.36 0 .682.06.966.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96V35h-.672a.708.708 0 0 1-.324-.06c-.076-.044-.136-.13-.18-.258l-.132-.444c-.156.14-.308.264-.456.372a2.804 2.804 0 0 1-.462.264c-.16.072-.332.126-.516.162-.18.04-.38.06-.6.06-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.414 1.414 0 0 1-.372-.522 1.852 1.852 0 0 1-.132-.726 1.419 1.419 0 0 1 .33-.906c.12-.14.274-.272.462-.396s.418-.232.69-.324c.276-.092.596-.166.96-.222.364-.06.78-.096 1.248-.108v-.36c0-.412-.088-.716-.264-.912-.176-.2-.43-.3-.762-.3-.24 0-.44.028-.6.084-.156.056-.294.12-.414.192l-.33.186a.631.631 0 0 1-.324.084.439.439 0 0 1-.264-.078.716.716 0 0 1-.174-.192l-.264-.474zM74.9 26.084V35h-1.482v-8.916H74.9zM81.969 28.844l-3.354 7.848a.538.538 0 0 1-.174.234c-.068.056-.174.084-.318.084h-1.104l1.152-2.472-2.49-5.694h1.302c.116 0 .206.028.27.084.068.056.118.12.15.192l1.308 3.192c.044.108.08.216.108.324.032.108.062.218.09.33a32.3 32.3 0 0 1 .108-.33c.036-.112.076-.222.12-.33l1.236-3.186a.437.437 0 0 1 .408-.276h1.188z"})}),hn=()=>mt("svg",{viewBox:"0 0 15 17",fill:"currentColor",children:mt("path",{d:"M6.11767 7.47586C6.47736 7.75563 6.91931 7.90898 7.37503 7.91213H7.42681C7.90756 7.90474 8.38832 7.71987 8.67677 7.46846C10.1856 6.18921 14.5568 2.18138 14.5568 2.18138C15.7254 1.09438 12.4637 0.00739 7.42681 0H7.36764C2.3308 0.00739 -0.930935 1.09438 0.237669 2.18138C0.237669 2.18138 4.60884 6.18921 6.11767 7.47586ZM8.67677 9.64243C8.31803 9.92483 7.87599 10.0808 7.41941 10.0861H7.37503C6.91845 10.0808 6.47641 9.92483 6.11767 9.64243C5.0822 8.75513 1.38409 5.42018 0.000989555 4.14832V6.07829C0.000989555 6.29273 0.0823481 6.57372 0.222877 6.70682L0.293316 6.7712L0.293344 6.77122C1.33784 7.72579 4.83903 10.9255 6.11767 12.0161C6.47641 12.2985 6.91845 12.4545 7.37503 12.4597H7.41941C7.90756 12.4449 8.38092 12.2601 8.67677 12.0161C9.9859 10.9069 13.6249 7.57198 14.5642 6.70682C14.7121 6.57372 14.7861 6.29273 14.7861 6.07829V4.14832C12.7662 5.99804 10.7297 7.82949 8.67677 9.64243ZM7.41941 14.6263C7.87513 14.6232 8.31708 14.4698 8.67677 14.19C10.7298 12.3746 12.7663 10.5407 14.7861 8.68853V10.6259C14.7861 10.8329 14.7121 11.1139 14.5642 11.247C13.6249 12.1196 9.9859 15.4471 8.67677 16.5563C8.38092 16.8077 7.90756 16.9926 7.41941 17H7.37503C6.91931 16.9968 6.47736 16.8435 6.11767 16.5637C4.91427 15.5373 1.74219 12.6364 0.502294 11.5025C0.393358 11.4029 0.299337 11.3169 0.222877 11.247C0.0823481 11.1139 0.000989555 10.8329 0.000989555 10.6259V8.68853C1.38409 9.95303 5.0822 13.2953 6.11767 14.1827C6.47641 14.4651 6.91845 14.6211 7.37503 14.6263H7.41941Z"})}),pn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"})}),fn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})}),mn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8zm-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91z"})}),_n=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"})}),gn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})}),vn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),yn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})}),bn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})}),wn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"})}),kn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"m7 10 5 5 5-5z"})}),xn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[mt("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),mt("path",{d:"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"})]}),Sn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"})}),An=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"m22 5.72-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"})}),Cn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"})}),En=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M8 5v14l11-7z"})}),Mn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"m3.5 18.49 6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"})}),Tn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M10 10.02h5V21h-5zM17 21h3c1.1 0 2-.9 2-2v-9h-5v11zm3-18H5c-1.1 0-2 .9-2 2v3h19V5c0-1.1-.9-2-2-2zM3 19c0 1.1.9 2 2 2h3V10H3v9z"})}),Nn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})}),Pn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M8.9999 14.7854L18.8928 4.8925C19.0803 4.70497 19.3347 4.59961 19.5999 4.59961C19.8651 4.59961 20.1195 4.70497 20.307 4.8925L21.707 6.2925C22.0975 6.68303 22.0975 7.31619 21.707 7.70672L9.70701 19.7067C9.31648 20.0972 8.68332 20.0972 8.2928 19.7067L2.6928 14.1067C2.50526 13.9192 2.3999 13.6648 2.3999 13.3996C2.3999 13.1344 2.50526 12.88 2.6928 12.6925L4.0928 11.2925C4.48332 10.902 5.11648 10.902 5.50701 11.2925L8.9999 14.7854Z"})}),Dn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"})}),On=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"})}),Rn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M20 9H4v2h16V9zM4 15h16v-2H4v2z"})}),Ln=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:[mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21 5C19.89 4.65 18.67 4.5 17.5 4.5C15.55 4.5 13.45 4.9 12 6C10.55 4.9 8.45 4.5 6.5 4.5C5.33 4.5 4.11 4.65 3 5C2.25 5.25 1.6 5.55 1 6V20.6C1 20.85 1.25 21.1 1.5 21.1C1.6 21.1 1.65 21.1 1.75 21.05C3.15 20.3 4.85 20 6.5 20C8.2 20 10.65 20.65 12 21.5C13.35 20.65 15.8 20 17.5 20C19.15 20 20.85 20.3 22.25 21.05C22.35 21.1 22.4 21.1 22.5 21.1C22.75 21.1 23 20.85 23 20.6V6C22.4 5.55 21.75 5.25 21 5ZM21 18.5C19.9 18.15 18.7 18 17.5 18C15.8 18 13.35 18.65 12 19.5C10.65 18.65 8.2 18 6.5 18C5.3 18 4.1 18.15 3 18.5V7C4.1 6.65 5.3 6.5 6.5 6.5C8.2 6.5 10.65 7.15 12 8C13.35 7.15 15.8 6.5 17.5 6.5C18.7 6.5 19.9 6.65 21 7V18.5Z"}),mt("path",{d:"M17.5 10.5C18.38 10.5 19.23 10.59 20 10.76V9.24C19.21 9.09 18.36 9 17.5 9C15.8 9 14.26 9.29 13 9.83V11.49C14.13 10.85 15.7 10.5 17.5 10.5ZM13 12.49V14.15C14.13 13.51 15.7 13.16 17.5 13.16C18.38 13.16 19.23 13.25 20 13.42V11.9C19.21 11.75 18.36 11.66 17.5 11.66C15.8 11.66 14.26 11.96 13 12.49ZM17.5 14.33C15.8 14.33 14.26 14.62 13 15.16V16.82C14.13 16.18 15.7 15.83 17.5 15.83C18.38 15.83 19.23 15.92 20 16.09V14.57C19.21 14.41 18.36 14.33 17.5 14.33Z"}),mt("path",{d:"M6.5 10.5C5.62 10.5 4.77 10.59 4 10.76V9.24C4.79 9.09 5.64 9 6.5 9C8.2 9 9.74 9.29 11 9.83V11.49C9.87 10.85 8.3 10.5 6.5 10.5ZM11 12.49V14.15C9.87 13.51 8.3 13.16 6.5 13.16C5.62 13.16 4.77 13.25 4 13.42V11.9C4.79 11.75 5.64 11.66 6.5 11.66C8.2 11.66 9.74 11.96 11 12.49ZM6.5 14.33C8.2 14.33 9.74 14.62 11 15.16V16.82C9.87 16.18 8.3 15.83 6.5 15.83C5.62 15.83 4.77 15.92 4 16.09V14.57C4.79 14.41 5.64 14.33 6.5 14.33Z"})]}),In=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 6C9.79 6 8 7.79 8 10H10C10 8.9 10.9 8 12 8C13.1 8 14 8.9 14 10C14 10.8792 13.4202 11.3236 12.7704 11.8217C11.9421 12.4566 11 13.1787 11 15H13C13 13.9046 13.711 13.2833 14.4408 12.6455C15.21 11.9733 16 11.2829 16 10C16 7.79 14.21 6 12 6ZM13 16V18H11V16H13Z"})}),zn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M4 20h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2zM2 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2zm4 1H4V5h2v2zm-2 7h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2z"})}),$n=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})}),jn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M7 20h4c0 1.1-.9 2-2 2s-2-.9-2-2zm-2-1h8v-2H5v2zm11.5-9.5c0 3.82-2.66 5.86-3.77 6.5H5.27c-1.11-.64-3.77-2.68-3.77-6.5C1.5 5.36 4.86 2 9 2s7.5 3.36 7.5 7.5zm4.87-2.13L20 8l1.37.63L22 10l.63-1.37L24 8l-1.37-.63L22 6l-.63 1.37zM19 6l.94-2.06L22 3l-2.06-.94L19 0l-.94 2.06L16 3l2.06.94L19 6z"})}),Fn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M3 14h4v-4H3v4zm0 5h4v-4H3v4zM3 9h4V5H3v4zm5 5h13v-4H8v4zm0 5h13v-4H8v4zM8 5v4h13V5H8z"})}),Hn=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-error"),children:mt("path",{d:"M13.5095 4L8.50952 1H7.50952L2.50952 4L2.01953 4.85999V10.86L2.50952 11.71L7.50952 14.71H8.50952L13.5095 11.71L13.9995 10.86V4.85999L13.5095 4ZM7.50952 13.5601L3.00952 10.86V5.69995L7.50952 8.15002V13.5601ZM3.26953 4.69995L8.00952 1.85999L12.7495 4.69995L8.00952 7.29004L3.26953 4.69995ZM13.0095 10.86L8.50952 13.5601V8.15002L13.0095 5.69995V10.86Z"})}),Vn=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-primary"),children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2 5H4V4H1.5L1 4.5V12.5L1.5 13H4V12H2V5ZM14.5 4H12V5H14V12H12V13H14.5L15 12.5V4.5L14.5 4ZM11.76 6.56995L12 7V9.51001L11.7 9.95996L7.19995 11.96H6.73999L4.23999 10.46L4 10.03V7.53003L4.30005 7.06995L8.80005 5.06995H9.26001L11.76 6.56995ZM5 9.70996L6.5 10.61V9.28003L5 8.38V9.70996ZM5.57996 7.56006L7.03003 8.43005L10.42 6.93005L8.96997 6.06006L5.57996 7.56006ZM7.53003 10.73L11.03 9.17004V7.77002L7.53003 9.31995V10.73Z"})}),Bn=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-warning"),children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 2H8L7 3V6H8V3H14V8H10V9H14L15 8V3L14 2ZM9 6H13V7H9.41L9 6.59V6ZM7 7H2L1 8V13L2 14H8L9 13V8L8 7H7ZM8 13H2V8H8V9V13ZM3 9H7V10H3V9ZM3 11H7V12H3V11ZM9 4H13V5H9V4Z"})}),Un=()=>mt("svg",{viewBox:"0 0 16 16",fill:it("color-primary"),children:mt("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7 3L8 2H14L15 3V8L14 9H10V8H14V3H8V6H7V3ZM9 9V8L8 7H7H2L1 8V13L2 14H8L9 13V9ZM8 8V9V13H2V8H7H8ZM9.41421 7L9 6.58579V6H13V7H9.41421ZM9 4H13V5H9V4ZM7 10H3V11H7V10Z"})}),Yn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M12 5.83 15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15z"})}),Wn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M7.41 18.59 8.83 20 12 16.83 15.17 20l1.41-1.41L12 14zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10z"})}),qn=()=>mt("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:mt("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"})});var Zn=n(738),Kn=n.n(Zn);const Gn=e=>{let{to:t,isNavLink:n,children:r,...o}=e;return n?mt(Le,{to:t,...o,children:r}):mt("div",{...o,children:r})},Qn=e=>{let{activeItem:t,item:n,color:r=it("color-primary"),activeNavRef:o,onChange:a,isNavLink:i}=e;return mt(Gn,{className:Kn()({"vm-tabs-item":!0,"vm-tabs-item_active":t===n.value,[n.className||""]:n.className}),isNavLink:i,to:n.value,style:{color:r},onClick:(l=n.value,()=>{a&&a(l)}),ref:t===n.value?o:void 0,children:[n.icon&&mt("div",{className:Kn()({"vm-tabs-item__icon":!0,"vm-tabs-item__icon_single":!n.label}),children:n.icon}),n.label]});var l};const Jn=function(e,n,r,o){const a=(0,t.useRef)(n);(0,t.useEffect)((()=>{a.current=n}),[n]),(0,t.useEffect)((()=>{var t;const n=null!==(t=null===r||void 0===r?void 0:r.current)&&void 0!==t?t:window;if(!n||!n.addEventListener)return;const i=e=>a.current(e);return n.addEventListener(e,i,o),()=>{n.removeEventListener(e,i,o)}}),[e,r,o])},Xn=()=>{const[e,n]=(0,t.useState)({width:0,height:0}),r=()=>{n({width:window.innerWidth,height:window.innerHeight})};return Jn("resize",r),(0,t.useEffect)(r,[]),e},er=e=>{let{activeItem:n,items:r,color:o=it("color-primary"),onChange:a,indicatorPlacement:i="bottom",isNavLink:l}=e;const s=Xn(),c=(0,t.useRef)(null),[u,d]=(0,t.useState)({left:0,width:0,bottom:0});return(0,t.useEffect)((()=>{var e;if((null===(e=c.current)||void 0===e?void 0:e.base)instanceof HTMLElement){const{offsetLeft:e,offsetWidth:t,offsetHeight:n}=c.current.base;d({left:e,width:t,bottom:"top"===i?n-2:0})}}),[s,n,c,r]),mt("div",{className:"vm-tabs",children:[r.map((e=>mt(Qn,{activeItem:n,item:e,onChange:a,color:o,activeNavRef:c,isNavLink:l},e.value))),mt("div",{className:"vm-tabs__indicator",style:{...u,borderColor:o}})]})},tr=[{value:nt.chart,icon:mt(Mn,{}),label:"Graph",prometheusCode:0},{value:nt.code,icon:mt(Nn,{}),label:"JSON",prometheusCode:3},{value:nt.table,icon:mt(Tn,{}),label:"Table",prometheusCode:1}],nr=We("SERIES_LIMITS"),rr={displayType:(()=>{const e=et("g0.tab",0),t=tr.find((t=>t.prometheusCode===+e||t.value===e));return(null===t||void 0===t?void 0:t.value)||nt.chart})(),nocache:!1,isTracingEnabled:!1,seriesLimits:nr?JSON.parse(nr):Xe,tableCompact:We("TABLE_COMPACT")||!1};function or(e,t){switch(t.type){case"SET_DISPLAY_TYPE":return{...e,displayType:t.payload};case"SET_SERIES_LIMITS":return Ye("SERIES_LIMITS",JSON.stringify(t.payload)),{...e,seriesLimits:t.payload};case"TOGGLE_QUERY_TRACING":return{...e,isTracingEnabled:!e.isTracingEnabled};case"TOGGLE_NO_CACHE":return{...e,nocache:!e.nocache};case"TOGGLE_TABLE_COMPACT":return Ye("TABLE_COMPACT",!e.tableCompact),{...e,tableCompact:!e.tableCompact};default:throw new Error}}const ar=(0,t.createContext)({}),ir={customStep:et("g0.step_input",""),yaxis:{limits:{enable:!1,range:{1:[0,0]}}},isHistogram:!1,spanGaps:!1};function lr(e,t){switch(t.type){case"TOGGLE_ENABLE_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,enable:!e.yaxis.limits.enable}}};case"SET_CUSTOM_STEP":return{...e,customStep:t.payload};case"SET_YAXIS_LIMITS":return{...e,yaxis:{...e.yaxis,limits:{...e.yaxis.limits,range:t.payload}}};case"SET_IS_HISTOGRAM":return{...e,isHistogram:t.payload};case"SET_SPAN_GAPS":return{...e,spanGaps:t.payload};default:throw new Error}}const sr=(0,t.createContext)({}),cr={dashboardsSettings:[],dashboardsLoading:!1,dashboardsError:""};function ur(e,t){switch(t.type){case"SET_DASHBOARDS_SETTINGS":return{...e,dashboardsSettings:t.payload};case"SET_DASHBOARDS_LOADING":return{...e,dashboardsLoading:t.payload};case"SET_DASHBOARDS_ERROR":return{...e,dashboardsError:t.payload};default:throw new Error}}const dr=(0,t.createContext)({}),hr={markdownParsing:"true"===We("LOGS_MARKDOWN")};function pr(e,t){if("SET_MARKDOWN_PARSING"===t.type)return Ye("LOGS_MARKDOWN","".concat(t.payload)),{...e,markdownParsing:t.payload};throw new Error}const fr=(0,t.createContext)({}),mr=()=>(0,t.useContext)(fr).state,_r={windows:"Windows",mac:"Mac OS",linux:"Linux"},gr=()=>(Object.values(_r).find((e=>navigator.userAgent.indexOf(e)>=0))||"unknown")===_r.mac;function vr(){const e=Xn(),n=()=>{const e=["Android","webOS","iPhone","iPad","iPod","BlackBerry","Windows Phone"].map((e=>navigator.userAgent.match(new RegExp(e,"i")))).some((e=>e)),t=window.innerWidth<500;return e||t},[r,o]=(0,t.useState)(n());return(0,t.useEffect)((()=>{o(n())}),[e]),{isMobile:r}}const yr={success:mt(yn,{}),error:mt(vn,{}),warning:mt(gn,{}),info:mt(_n,{})},br=e=>{let{variant:t,children:n}=e;const{isDarkTheme:r}=gt(),{isMobile:o}=vr();return mt("div",{className:Kn()({"vm-alert":!0,["vm-alert_".concat(t)]:t,"vm-alert_dark":r,"vm-alert_mobile":o}),children:[mt("div",{className:"vm-alert__icon",children:yr[t||"info"]}),mt("div",{className:"vm-alert__content",children:n})]})},wr=(0,t.createContext)({showInfoMessage:()=>{}}),kr=function(){for(var e=arguments.length,t=new Array(e),n=0;nn=>{let{children:r}=n;return mt(e,{children:mt(t,{children:r})})}),(e=>{let{children:t}=e;return mt(pt.FK,{children:t})}))}(...[e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(ht,yt),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(_t.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(Zt,qt),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(Kt.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(on,rn),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(an.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(or,rr),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(ar.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(lr,ir),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(sr.Provider,{value:a,children:n})},e=>{let{children:n}=e;const{isMobile:r}=vr(),[o,a]=(0,t.useState)({}),[i,l]=(0,t.useState)(!1),[s,c]=(0,t.useState)(void 0);(0,t.useEffect)((()=>{if(!s)return;a({message:s.text,variant:s.type,key:Date.now()}),l(!0);const e=setTimeout(u,4e3);return()=>clearTimeout(e)}),[s]);const u=()=>{c(void 0),l(!1)};return mt(wr.Provider,{value:{showInfoMessage:c},children:[i&&mt("div",{className:Kn()({"vm-snackbar":!0,"vm-snackbar_mobile":r}),children:mt(br,{variant:o.variant,children:mt("div",{className:"vm-snackbar-content",children:[mt("span",{children:o.message}),mt("div",{className:"vm-snackbar-content__close",onClick:u,children:mt(fn,{})})]})})}),n]})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(ur,cr),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(dr.Provider,{value:a,children:n})},e=>{let{children:n}=e;const[r,o]=(0,t.useReducer)(pr,hr),a=(0,t.useMemo)((()=>({state:r,dispatch:o})),[r,o]);return mt(fr.Provider,{value:a,children:n})}]),xr=e=>{if(7!=e.length)return"0, 0, 0";const t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return"".concat(t,", ").concat(n,", ").concat(r)},Sr={[tt.yhatUpper]:"#7126a1",[tt.yhatLower]:"#7126a1",[tt.yhat]:"#da42a6",[tt.anomaly]:"#da4242",[tt.anomalyScore]:"#7126a1",[tt.actual]:"#203ea9",[tt.training]:"rgba(".concat(xr("#203ea9"),", 0.2)")},Ar={"color-primary":"#589DF6","color-secondary":"#316eca","color-error":"#e5534b","color-warning":"#c69026","color-info":"#539bf5","color-success":"#57ab5a","color-background-body":"#22272e","color-background-block":"#2d333b","color-background-tooltip":"rgba(22, 22, 22, 0.8)","color-text":"#cdd9e5","color-text-secondary":"#768390","color-text-disabled":"#636e7b","box-shadow":"rgba(0, 0, 0, 0.16) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.2) 0px 2px 8px 0px","border-divider":"1px solid rgba(99, 110, 123, 0.5)","color-hover-black":"rgba(0, 0, 0, 0.12)","color-log-hits-bar-0":"rgba(255, 255, 255, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Cr={"color-primary":"#3F51B5","color-secondary":"#E91E63","color-error":"#FD080E","color-warning":"#FF8308","color-info":"#03A9F4","color-success":"#4CAF50","color-background-body":"#FEFEFF","color-background-block":"#FFFFFF","color-background-tooltip":"rgba(80,80,80,0.9)","color-text":"#110f0f","color-text-secondary":"#706F6F","color-text-disabled":"#A09F9F","box-shadow":"rgba(0, 0, 0, 0.08) 1px 2px 6px","box-shadow-popper":"rgba(0, 0, 0, 0.1) 0px 2px 8px 0px","border-divider":"1px solid rgba(0, 0, 0, 0.15)","color-hover-black":"rgba(0, 0, 0, 0.06)","color-log-hits-bar-0":"rgba(0, 0, 0, 0.18)","color-log-hits-bar-1":"#FFB74D","color-log-hits-bar-2":"#81C784","color-log-hits-bar-3":"#64B5F6","color-log-hits-bar-4":"#E57373","color-log-hits-bar-5":"#8a62f0"},Er=()=>{const[e,n]=(0,t.useState)(st()),r=e=>{n(e.matches)};return(0,t.useEffect)((()=>{const e=window.matchMedia("(prefers-color-scheme: dark)");return e.addEventListener("change",r),()=>e.removeEventListener("change",r)}),[]),e},Mr=["primary","secondary","error","warning","info","success"],Tr=e=>{let{onLoaded:n}=e;const r=He(),{palette:o={}}=Fe(),{theme:a}=gt(),i=Er(),l=vt(),s=Xn(),[c,u]=(0,t.useState)({[ot.dark]:Ar,[ot.light]:Cr,[ot.system]:st()?Ar:Cr}),d=()=>{const{innerWidth:e,innerHeight:t}=window,{clientWidth:n,clientHeight:r}=document.documentElement;lt("scrollbar-width","".concat(e-n,"px")),lt("scrollbar-height","".concat(t-r,"px")),lt("vh","".concat(.01*t,"px"))},h=()=>{Mr.forEach(((e,t)=>{const r=(e=>{let t=e.replace("#","").trim();if(3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),6!==t.length)throw new Error("Invalid HEX color.");return(299*parseInt(t.slice(0,2),16)+587*parseInt(t.slice(2,4),16)+114*parseInt(t.slice(4,6),16))/1e3>=128?"#000000":"#FFFFFF"})(it("color-".concat(e)));lt("".concat(e,"-text"),r),t===Mr.length-1&&(l({type:"SET_DARK_THEME"}),n(!0))}))},p=()=>{const e=We("THEME")||ot.system,t=c[e];Object.entries(t).forEach((e=>{let[t,n]=e;lt(t,n)})),h(),r&&(Mr.forEach((e=>{const t=o[e];t&<("color-".concat(e),t)})),h())};return(0,t.useEffect)((()=>{d(),p()}),[c]),(0,t.useEffect)(d,[s]),(0,t.useEffect)((()=>{const e=st()?Ar:Cr;c[ot.system]!==e?u((t=>({...t,[ot.system]:e}))):p()}),[a,i]),(0,t.useEffect)((()=>{r&&l({type:"SET_THEME",payload:ot.light})}),[]),null},Nr=()=>{const{showInfoMessage:e}=(0,t.useContext)(wr);return async(t,n)=>{var r;if(null===(r=navigator)||void 0===r||!r.clipboard)return e({text:"Clipboard not supported",type:"error"}),console.warn("Clipboard not supported"),!1;try{return await navigator.clipboard.writeText(t),n&&e({text:n,type:"success"}),!0}catch(o){return o instanceof Error&&e({text:"".concat(o.name,": ").concat(o.message),type:"error"}),console.warn("Copy failed",o),!1}}},Pr=e=>{let{variant:t="contained",color:n="primary",size:r="medium",ariaLabel:o,children:a,endIcon:i,startIcon:l,fullWidth:s=!1,className:c,disabled:u,onClick:d,onMouseDown:h}=e;return mt("button",{className:Kn()({"vm-button":!0,["vm-button_".concat(t,"_").concat(n)]:!0,["vm-button_".concat(r)]:r,"vm-button_icon":(l||i)&&!a,"vm-button_full-width":s,"vm-button_with-icon":l||i,"vm-button_disabled":u,[c||""]:c}),disabled:u,"aria-label":o,onClick:d,onMouseDown:h,children:mt(pt.FK,{children:[l&&mt("span",{className:"vm-button__start-icon",children:l}),a&&mt("span",{children:a}),i&&mt("span",{className:"vm-button__end-icon",children:i})]})})},Dr=e=>{let{data:n}=e;const r=Nr(),o=(0,t.useMemo)((()=>{const e=n.map((e=>1===Object.keys(e).length?JSON.stringify(e):JSON.stringify(e,null,2))).join(",\n").replace(/^/gm,"".concat(" "));return"[\n".concat(e,"\n]")}),[n]);return mt("div",{className:"vm-json-view",children:[mt("div",{className:"vm-json-view__copy",children:mt(Pr,{variant:"outlined",onClick:async()=>{await r(o,"Formatted JSON has been copied")},children:"Copy JSON"})}),mt("pre",{className:"vm-json-view__code",children:mt("code",{children:o})})]})},Or=(e,n)=>{const[r]=je(),o=r.get(n)?r.get(n):e,[a,i]=(0,t.useState)(o);return(0,t.useEffect)((()=>{o!==a&&i(o)}),[o]),[a,i]},Rr=()=>{const e=oe(),[n,r]=je();return{setSearchParamsFromKeys:(0,t.useCallback)((t=>{const o=!!Array.from(n.values()).length;let a=!1;Object.entries(t).forEach((e=>{let[t,r]=e;n.get(t)!=="".concat(r)&&(n.set(t,"".concat(r)),a=!0)})),a&&(o?r(n):e("?".concat(n.toString()),{replace:!0}))}),[n,e])}},Lr=(e,n,r)=>{const o=(0,t.useCallback)((t=>{const o=null===e||void 0===e?void 0:e.current,a=t.target,i=(null===r||void 0===r?void 0:r.current)&&r.current.contains(a);!o||o.contains((null===t||void 0===t?void 0:t.target)||null)||i||n(t)}),[e,n]);Jn("mousedown",o),Jn("touchstart",o)},Ir=e=>{let{children:n,buttonRef:r,placement:o="bottom-left",open:a=!1,onClose:i,offset:l={top:6,left:0},clickOutside:s=!0,fullWidth:c,title:u,disabledFullScreen:d,variant:h}=e;const{isMobile:p}=vr(),f=oe(),m=ne(),[_,g]=(0,t.useState)({width:0,height:0}),[v,y]=(0,t.useState)(!1),b=(0,t.useRef)(null);(0,t.useEffect)((()=>(y(a),!a&&i&&i(),a&&p&&!d&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="auto"})),[a]),(0,t.useEffect)((()=>{var e,t;g({width:(null===b||void 0===b||null===(e=b.current)||void 0===e?void 0:e.clientWidth)||0,height:(null===b||void 0===b||null===(t=b.current)||void 0===t?void 0:t.clientHeight)||0}),y(!1)}),[b]);const w=(0,t.useMemo)((()=>{const e=r.current;if(!e||!v)return{};const t=e.getBoundingClientRect(),n={top:0,left:0,width:"auto"},a="bottom-right"===o||"top-right"===o,i=null===o||void 0===o?void 0:o.includes("top"),s=(null===l||void 0===l?void 0:l.top)||0,u=(null===l||void 0===l?void 0:l.left)||0;n.left=n.left=t.left+u,n.top=t.height+t.top+s,a&&(n.left=t.right-_.width),i&&(n.top=t.top-_.height-s);const{innerWidth:d,innerHeight:h}=window,p=n.top+_.height+20>h,f=n.top-20<0,m=n.left+_.width+20>d,g=n.left-20<0;return p&&(n.top=t.top-_.height-s),f&&(n.top=t.height+t.top+s),m&&(n.left=t.right-_.width-u),g&&(n.left=t.left+u),c&&(n.width="".concat(t.width,"px")),n.top<0&&(n.top=20),n.left<0&&(n.left=20),n}),[r,o,v,n,c]),k=()=>{y(!1),i()};(0,t.useEffect)((()=>{if(!b.current||!v||p&&!d)return;const{right:e,width:t}=b.current.getBoundingClientRect();if(e>window.innerWidth){const e=window.innerWidth-20-t;b.current.style.left=e{v&&p&&!d&&(f(m,{replace:!0}),i())}),[v,p,d,m,i]);return Jn("scroll",k),Jn("popstate",x),Lr(b,(()=>{s&&k()}),r),mt(pt.FK,{children:(v||!_.width)&&t.default.createPortal(mt("div",{className:Kn()({"vm-popper":!0,["vm-popper_".concat(h)]:h,"vm-popper_mobile":p&&!d,"vm-popper_open":(p||Object.keys(w).length)&&v}),ref:b,style:p&&!d?{}:w,children:[(u||p&&!d)&&mt("div",{className:"vm-popper-header",children:[mt("p",{className:"vm-popper-header__title",children:u}),mt(Pr,{variant:"text",color:"dark"===h?"white":"primary",size:"small",onClick:e=>{e.stopPropagation(),i()},ariaLabel:"close",children:mt(fn,{})})]}),n]}),document.body)})},zr=e=>{let{checked:t=!1,disabled:n=!1,label:r,color:o="secondary",onChange:a}=e;return mt("div",{className:Kn()({"vm-checkbox":!0,"vm-checkbox_disabled":n,"vm-checkbox_active":t,["vm-checkbox_".concat(o,"_active")]:t,["vm-checkbox_".concat(o)]:o}),onClick:()=>{n||a(!t)},children:[mt("div",{className:"vm-checkbox-track",children:mt("div",{className:"vm-checkbox-track__thumb",children:mt(Pn,{})})}),r&&mt("span",{className:"vm-checkbox__label",children:r})]})},$r=e=>{let{children:n,title:r,open:o,placement:a="bottom-center",offset:i={top:6,left:0}}=e;const{isMobile:l}=vr(),[s,c]=(0,t.useState)(!1),[u,d]=(0,t.useState)({width:0,height:0}),h=(0,t.useRef)(null),p=(0,t.useRef)(null),f=()=>c(!1);(0,t.useEffect)((()=>{if(p.current&&s)return d({width:p.current.clientWidth,height:p.current.clientHeight}),window.addEventListener("scroll",f),()=>{window.removeEventListener("scroll",f)}}),[s,r]);const m=(0,t.useMemo)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(!t||!s)return{};const n=t.getBoundingClientRect(),r={top:0,left:0},o="bottom-right"===a||"top-right"===a,l="bottom-left"===a||"top-left"===a,c=null===a||void 0===a?void 0:a.includes("top"),d=(null===i||void 0===i?void 0:i.top)||0,p=(null===i||void 0===i?void 0:i.left)||0;r.left=n.left-(u.width-n.width)/2+p,r.top=n.height+n.top+d,o&&(r.left=n.right-u.width),l&&(r.left=n.left+p),c&&(r.top=n.top-u.height-d);const{innerWidth:f,innerHeight:m}=window,_=r.top+u.height+20>m,g=r.top-20<0,v=r.left+u.width+20>f,y=r.left-20<0;return _&&(r.top=n.top-u.height-d),g&&(r.top=n.height+n.top+d),v&&(r.left=n.right-u.width-p),y&&(r.left=n.left+p),r.top<0&&(r.top=20),r.left<0&&(r.left=20),r}),[h,a,s,u]),_=()=>{"boolean"!==typeof o&&c(!0)},g=()=>{c(!1)};return(0,t.useEffect)((()=>{"boolean"===typeof o&&c(o)}),[o]),(0,t.useEffect)((()=>{var e;const t=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.base;if(t)return t.addEventListener("mouseenter",_),t.addEventListener("mouseleave",g),()=>{t.removeEventListener("mouseenter",_),t.removeEventListener("mouseleave",g)}}),[h]),mt(pt.FK,{children:[mt(t.Fragment,{ref:h,children:n}),!l&&s&&t.default.createPortal(mt("div",{className:"vm-tooltip",ref:p,style:m,children:r}),document.body)]})},jr=e=>{let{value:t=!1,disabled:n=!1,label:r,color:o="secondary",fullWidth:a,onChange:i}=e;return mt("div",{className:Kn()({"vm-switch":!0,"vm-switch_full-width":a,"vm-switch_disabled":n,"vm-switch_active":t,["vm-switch_".concat(o,"_active")]:t,["vm-switch_".concat(o)]:o}),onClick:()=>{n||i(!t)},children:[mt("div",{className:"vm-switch-track",children:mt("div",{className:"vm-switch-track__thumb"})}),r&&mt("span",{className:"vm-switch__label",children:r})]})};const Fr=e=>{const[n,r]=(0,t.useState)(!!e),o=(0,t.useCallback)((()=>r(!0)),[]),a=(0,t.useCallback)((()=>r(!1)),[]),i=(0,t.useCallback)((()=>r((e=>!e))),[]);return{value:n,setValue:r,setTrue:o,setFalse:a,toggle:i}},Hr=e=>{let{error:n,warning:r,info:o}=e;const a=(0,t.useRef)(null),[i,l]=(0,t.useState)(!1),[s,c]=(0,t.useState)(!1),u=(0,t.useMemo)((()=>n?"ERROR: ":r?"WARNING: ":""),[n,r]),d="".concat(u).concat(n||r||o),h=()=>{const e=a.current;if(e){const{offsetWidth:t,scrollWidth:n,offsetHeight:r,scrollHeight:o}=e;l(t+1{c(!1),h()}),[a,d]),Jn("resize",h),n||r||o?mt("span",{className:Kn()({"vm-text-field__error":!0,"vm-text-field__warning":r&&!n,"vm-text-field__helper-text":!r&&!n,"vm-text-field__error_overflowed":i,"vm-text-field__error_full":s}),"data-show":!!d,ref:a,onClick:()=>{i&&(c(!0),l(!1))},children:d}):null},Vr=e=>{let{label:n,value:r,type:o="text",error:a="",warning:i="",helperText:l="",placeholder:s,endIcon:c,startIcon:u,disabled:d=!1,autofocus:h=!1,inputmode:p="text",caretPosition:f,onChange:m,onEnter:_,onKeyDown:g,onFocus:v,onBlur:y,onChangeCaret:b}=e;const{isDarkTheme:w}=gt(),{isMobile:k}=vr(),x=(0,t.useRef)(null),S=(0,t.useRef)(null),A=(0,t.useMemo)((()=>"textarea"===o?S:x),[o]),[C,E]=(0,t.useState)([0,0]),M=Kn()({"vm-text-field__input":!0,"vm-text-field__input_error":a,"vm-text-field__input_warning":!a&&i,"vm-text-field__input_icon-start":u,"vm-text-field__input_disabled":d,"vm-text-field__input_textarea":"textarea"===o}),T=e=>{const{selectionStart:t,selectionEnd:n}=e;E([t||0,n||0])},N=e=>{T(e.currentTarget)},P=e=>{g&&g(e);const{key:t,ctrlKey:n,metaKey:r}=e,a="Enter"===t;("textarea"!==o?a:a&&(r||n))&&_&&(e.preventDefault(),_())},D=e=>{T(e.currentTarget)},O=e=>{d||(m&&m(e.currentTarget.value),T(e.currentTarget))},R=()=>{v&&v()},L=()=>{y&&y()},I=e=>{try{A.current&&A.current.setSelectionRange(e[0],e[1])}catch(Vd){return Vd}};return(0,t.useEffect)((()=>{var e;h&&!k&&(null===A||void 0===A||null===(e=A.current)||void 0===e?void 0:e.focus)&&A.current.focus()}),[A,h]),(0,t.useEffect)((()=>{b&&b(C)}),[C]),(0,t.useEffect)((()=>{I(C)}),[r]),(0,t.useEffect)((()=>{f&&I(f)}),[f]),mt("label",{className:Kn()({"vm-text-field":!0,"vm-text-field_textarea":"textarea"===o,"vm-text-field_dark":w}),"data-replicated-value":r,children:[u&&mt("div",{className:"vm-text-field__icon-start",children:u}),c&&mt("div",{className:"vm-text-field__icon-end",children:c}),"textarea"===o?mt("textarea",{className:M,disabled:d,ref:S,value:r,rows:1,inputMode:p,placeholder:s,autoCapitalize:"none",onInput:O,onKeyDown:P,onKeyUp:D,onFocus:R,onBlur:L,onMouseUp:N}):mt("input",{className:M,disabled:d,ref:x,value:r,type:o,placeholder:s,inputMode:p,autoCapitalize:"none",onInput:O,onKeyDown:P,onKeyUp:D,onFocus:R,onBlur:L,onMouseUp:N}),n&&mt("span",{className:"vm-text-field__label",children:n}),mt(Hr,{error:a,warning:i,info:l})]})},Br="Table settings",Ur=e=>{let{columns:n,defaultColumns:r=[],tableCompact:o,onChangeColumns:a,toggleTableCompact:i}=e;const{isMobile:l}=vr(),s=(0,t.useRef)(null),{value:c,toggle:u,setFalse:d}=Fr(!1),{value:h,toggle:p}=Fr(!1),[f,m]=(0,t.useState)(""),[_,g]=(0,t.useState)(-1),v=(0,t.useMemo)((()=>f?n.filter((e=>e.includes(f))):n),[n,f]),y=(0,t.useMemo)((()=>v.every((e=>r.includes(e)))),[r,v]),b=(0,t.useMemo)((()=>!n.length),[n]),w=e=>{a(r.includes(e)?r.filter((t=>t!==e)):[...r,e])};return(0,t.useEffect)((()=>{((e,t)=>e.length===t.length&&e.every(((e,n)=>e===t[n])))(n,r)||a(n)}),[n]),mt("div",{className:"vm-table-settings",children:[mt($r,{title:Br,children:mt("div",{ref:s,children:mt(Pr,{variant:"text",startIcon:mt(pn,{}),onClick:u,disabled:b,ariaLabel:Br})})}),mt(Ir,{open:c,onClose:d,placement:"bottom-right",buttonRef:s,title:Br,children:mt("div",{className:Kn()({"vm-table-settings-popper":!0,"vm-table-settings-popper_mobile":l}),children:[mt("div",{className:"vm-table-settings-popper-list vm-table-settings-popper-list_first",children:mt(jr,{label:"Compact view",value:o,onChange:i})}),mt("div",{className:"vm-table-settings-popper-list",children:mt("div",{children:[mt("div",{className:"vm-table-settings-popper-list-header",children:[mt("h3",{className:"vm-table-settings-popper-list-header__title",children:"Display columns"}),mt($r,{title:"search column",children:mt(Pr,{color:"primary",variant:"text",onClick:p,startIcon:mt(qn,{}),ariaLabel:"reset columns"})})]}),h&&mt(Vr,{placeholder:"search column",startIcon:mt(qn,{}),value:f,onChange:m,onBlur:()=>{g(-1)},onKeyDown:e=>{const t="ArrowUp"===e.key,n="ArrowDown"===e.key,r="Enter"===e.key;(n||t||r)&&e.preventDefault(),n?g((e=>e+1>v.length-1?e:e+1)):t?g((e=>e-1<0?e:e-1)):r&&w(v[_])},type:"search"}),!v.length&&mt("p",{className:"vm-table-settings-popper-list__no-found",children:"No columns found"}),mt("div",{className:"vm-table-settings-popper-list-header",children:!!v.length&&mt("div",{className:"vm-table-settings-popper-list__item vm-table-settings-popper-list__item_check_all",children:mt(zr,{checked:y,onChange:()=>{a(y?r.filter((e=>!v.includes(e))):v)},label:y?"Uncheck all":"Check all",disabled:o})})}),mt("div",{className:"vm-table-settings-popper-list-columns",children:v.map(((e,t)=>{return mt("div",{className:Kn()({"vm-table-settings-popper-list__item":!0,"vm-table-settings-popper-list__item_focus":t===_}),children:mt(zr,{checked:r.includes(e),onChange:(n=e,()=>{w(n)}),label:e,disabled:o})},e);var n}))})]})})]})})]})},Yr=["date","timestamp","time"];function Wr(e,t,n){const r=e[n],a=t[n],i=Yr.includes("".concat(n))?o()("".concat(r)).unix():r,l=Yr.includes("".concat(n))?o()("".concat(a)).unix():a;return li?1:0}const qr=e=>{let{rows:n,columns:r,defaultOrderBy:o,defaultOrderDir:a,copyToClipboard:i,paginationOffset:l}=e;const[s,c]=(0,t.useState)(o),[u,d]=(0,t.useState)(a||"desc"),[h,p]=(0,t.useState)(null),f=(0,t.useMemo)((()=>{const{startIndex:e,endIndex:t}=l;return function(e,t){const n=e.map(((e,t)=>[e,t]));return n.sort(((e,n)=>{const r=t(e[0],n[0]);return 0!==r?r:e[1]-n[1]})),n.map((e=>e[0]))}(n,function(e,t){return"desc"===e?(e,n)=>Wr(e,n,t):(e,n)=>-Wr(e,n,t)}(u,s)).slice(e,t)}),[n,s,u,l]),m=(e,t)=>async()=>{if(h!==t)try{await navigator.clipboard.writeText(String(e)),p(t)}catch(Vd){console.error(Vd)}};return(0,t.useEffect)((()=>{if(null===h)return;const e=setTimeout((()=>p(null)),2e3);return()=>clearTimeout(e)}),[h]),mt("table",{className:"vm-table",children:[mt("thead",{className:"vm-table-header",children:mt("tr",{className:"vm-table__row vm-table__row_header",children:[r.map((e=>{return mt("th",{className:"vm-table-cell vm-table-cell_header vm-table-cell_sort",onClick:(t=e.key,()=>{d((e=>"asc"===e&&s===t?"desc":"asc")),c(t)}),children:mt("div",{className:"vm-table-cell__content",children:[mt("div",{children:String(e.title||e.key)}),mt("div",{className:Kn()({"vm-table__sort-icon":!0,"vm-table__sort-icon_active":s===e.key,"vm-table__sort-icon_desc":"desc"===u&&s===e.key}),children:mt(kn,{})})]})},String(e.key));var t})),i&&mt("th",{className:"vm-table-cell vm-table-cell_header"})]})}),mt("tbody",{className:"vm-table-body",children:f.map(((e,t)=>mt("tr",{className:"vm-table__row",children:[r.map((t=>mt("td",{className:Kn()({"vm-table-cell":!0,["".concat(t.className)]:t.className}),children:e[t.key]||"-"},String(t.key)))),i&&mt("td",{className:"vm-table-cell vm-table-cell_right",children:e[i]&&mt("div",{className:"vm-table-cell__content",children:mt($r,{title:h===t?"Copied":"Copy row",children:mt(Pr,{variant:"text",color:h===t?"success":"gray",size:"small",startIcon:mt(h===t?Pn:On,{}),onClick:m(e[i],t),ariaLabel:"copy row"})})})})]},t)))})]})},Zr=e=>{let{logs:n,displayColumns:r,tableCompact:o,columns:a}=e;const i=e=>{switch(e){case"_time":return"vm-table-cell_logs-time";case"_vmui_data":return"vm-table-cell_logs vm-table-cell_pre";default:return"vm-table-cell_logs"}},l=(0,t.useMemo)((()=>o?[{key:"_vmui_data",title:"Data",className:i("_vmui_data")}]:a.map((e=>({key:e,title:e,className:i(e)})))),[o,a]),s=(0,t.useMemo)((()=>o?l:null!==r&&void 0!==r&&r.length?l.filter((e=>r.includes(e.key))):[]),[l,r,o]);return mt(pt.FK,{children:mt(qr,{rows:n,columns:s,defaultOrderBy:"_time",defaultOrderDir:"desc",copyToClipboard:"_vmui_data",paginationOffset:{startIndex:0,endIndex:1/0}})})},Kr=e=>{let{defaultExpanded:n=!1,onChange:r,title:o,children:a}=e;const[i,l]=(0,t.useState)(n);return(0,t.useEffect)((()=>{r&&r(i)}),[i]),mt(pt.FK,{children:[mt("header",{className:"vm-accordion-header ".concat(i&&"vm-accordion-header_open"),onClick:()=>{l((e=>!e))},children:[o,mt("div",{className:"vm-accordion-header__arrow ".concat(i&&"vm-accordion-header__arrow_open"),children:mt(wn,{})})]}),i&&mt("section",{className:"vm-accordion-section",children:a},"content")]})},Gr=e=>{let{log:n}=e;const{value:r,toggle:o}=Fr(!1),{markdownParsing:a}=mr(),i=["_msg","_vmui_time","_vmui_data","_vmui_markdown"],l=Object.entries(n).filter((e=>{let[t]=e;return!i.includes(t)})),s=l.length>0,c=(0,t.useMemo)((()=>{if(n._msg)return n._msg;if(!s)return;const e=l.reduce(((e,t)=>{let[n,r]=t;return e[n]=r,e}),{});return JSON.stringify(e)}),[n,l,s]),u=Nr(),[d,h]=(0,t.useState)(null);return(0,t.useEffect)((()=>{if(null===d)return;const e=setTimeout((()=>h(null)),2e3);return()=>clearTimeout(e)}),[d]),mt("div",{className:"vm-group-logs-row",children:[mt("div",{className:"vm-group-logs-row-content",onClick:o,children:[s&&mt("div",{className:Kn()({"vm-group-logs-row-content__arrow":!0,"vm-group-logs-row-content__arrow_open":r}),children:mt(wn,{})}),mt("div",{className:Kn()({"vm-group-logs-row-content__time":!0,"vm-group-logs-row-content__time_missing":!n._vmui_time}),children:n._vmui_time||"timestamp missing"}),mt("div",{className:Kn()({"vm-group-logs-row-content__msg":!0,"vm-group-logs-row-content__msg_empty-msg":!n._msg,"vm-group-logs-row-content__msg_missing":!c}),dangerouslySetInnerHTML:a&&n._vmui_markdown?{__html:n._vmui_markdown}:void 0,children:c||"-"})]},"".concat(n._msg).concat(n._time)),s&&r&&mt("div",{className:"vm-group-logs-row-fields",children:mt("table",{children:mt("tbody",{children:l.map(((e,t)=>{let[n,r]=e;return mt("tr",{className:"vm-group-logs-row-fields-item",children:[mt("td",{className:"vm-group-logs-row-fields-item-controls",children:mt("div",{className:"vm-group-logs-row-fields-item-controls__wrapper",children:mt($r,{title:d===t?"Copied":"Copy to clipboard",children:mt(Pr,{variant:"text",color:"gray",size:"small",startIcon:mt(On,{}),onClick:(o="".concat(n,': "').concat(r,'"'),a=t,async()=>{if(d!==a)try{await u(o),h(a)}catch(Vd){console.error(Vd)}}),ariaLabel:"copy to clipboard"})})})}),mt("td",{className:"vm-group-logs-row-fields-item__key",children:n}),mt("td",{className:"vm-group-logs-row-fields-item__value",children:r})]},n);var o,a}))})})})]})},Qr="No Grouping",Jr=e=>{let{logs:n,settingsRef:r}=e;const{isDarkTheme:o}=gt(),a=Nr(),[i,l]=je(),[s,c]=(0,t.useState)([]),[u,d]=Or("_stream","groupBy"),[h,p]=(0,t.useState)(null),[f,m]=(0,t.useState)(""),_=(0,t.useRef)(null),{value:g,toggle:v,setFalse:y}=Fr(!1),b=(0,t.useMemo)((()=>s.every(Boolean)),[s]),w=(0,t.useMemo)((()=>{const e=["_msg","_time","_vmui_time","_vmui_data","_vmui_markdown"],t=Array.from(new Set(n.map((e=>Object.keys(e))).flat())),r=[Qr,...t.filter((t=>!e.includes(t)))];if(!f)return r;try{const e=new RegExp(f,"i");return r.filter((t=>e.test(t))).sort(((t,n)=>{var r,o;return((null===(r=t.match(e))||void 0===r?void 0:r.index)||0)-((null===(o=n.match(e))||void 0===o?void 0:o.index)||0)}))}catch(Vd){return[]}}),[n,f]),k=(0,t.useMemo)((()=>function(e,t){const n=e.reduce(((e,n)=>{const r=t.map((e=>"".concat(e,": ").concat(n[e]||"-"))).join("|");return(e[r]=e[r]||[]).push(n),e}),{});return Object.entries(n).map((e=>{let[t,n]=e;return{keys:t.split("|"),values:n}}))}(n,[u]).map((e=>{var t;const n=(null===(t=e.values[0])||void 0===t?void 0:t[u])||"",r=/^{.+}$/.test(n)&&n.slice(1,-1).match(/(\\.|[^,])+/g)||[n];return{...e,pairs:r.filter(Boolean)}}))),[n,u]),x=(0,t.useCallback)((()=>{c(new Array(k.length).fill(!b))}),[b]),S=e=>t=>{c((n=>{const r=[...n];return r[e]=t,r}))};return(0,t.useEffect)((()=>{if(null===h)return;const e=setTimeout((()=>p(null)),2e3);return()=>clearTimeout(e)}),[h]),(0,t.useEffect)((()=>{c(new Array(k.length).fill(!0))}),[k]),mt(pt.FK,{children:[mt("div",{className:"vm-group-logs",children:k.map(((e,t)=>mt("div",{className:"vm-group-logs-section",children:mt(Kr,{defaultExpanded:s[t],onChange:S(t),title:u!==Qr&&mt("div",{className:"vm-group-logs-section-keys",children:[mt("span",{className:"vm-group-logs-section-keys__title",children:["Group by ",mt("code",{children:u}),":"]}),e.pairs.map((t=>{return mt($r,{title:h===t?"Copied":"Copy to clipboard",placement:"top-center",children:mt("div",{className:Kn()({"vm-group-logs-section-keys__pair":!0,"vm-group-logs-section-keys__pair_dark":o}),onClick:(n=t,async e=>{e.stopPropagation();const t=/(.+)?=(".+")/.test(n)?"".concat(n.replace(/=/,": ")):"".concat(u,': "').concat(n,'"');await a(t)&&p(n)}),children:t})},"".concat(e.keys.join(""),"_").concat(t));var n})),mt("span",{className:"vm-group-logs-section-keys__count",children:[e.values.length," entries"]})]}),children:mt("div",{className:"vm-group-logs-section-rows",children:e.values.map((e=>mt(Gr,{log:e},"".concat(e._msg).concat(e._time))))})},String(s[t]))},e.keys.join(""))))}),r.current&&t.default.createPortal(mt("div",{className:"vm-group-logs-header",children:[mt($r,{title:b?"Collapse All":"Expand All",children:mt(Pr,{variant:"text",startIcon:mt(b?Wn:Yn,{}),onClick:x,ariaLabel:b?"Collapse All":"Expand All"})}),mt($r,{title:"Group by",children:mt("div",{ref:_,children:mt(Pr,{variant:"text",startIcon:mt(zn,{}),onClick:v,ariaLabel:"Group by"})})}),mt(Ir,{open:g,placement:"bottom-right",onClose:y,buttonRef:_,children:mt("div",{className:"vm-list vm-group-logs-header-keys",children:[mt("div",{className:"vm-group-logs-header-keys__search",children:mt(Vr,{label:"Search key",value:f,onChange:m,type:"search"})}),w.map((e=>{return mt("div",{className:Kn()({"vm-list-item":!0,"vm-list-item_active":e===u}),onClick:(t=e,()=>{d(t),i.set("groupBy",t),l(i),y()}),children:e},e);var t}))]})})]}),r.current)]})};function Xr(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function eo(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function to(e){return to="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},to(e)}function no(e){var t=function(e,t){if("object"!=to(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=to(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==to(t)?t:t+""}function ro(e,t,n){return(t=no(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function oo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let ao={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function io(e){ao=e}const lo=/[&<>"']/,so=new RegExp(lo.source,"g"),co=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,uo=new RegExp(co.source,"g"),ho={"&":"&","<":"<",">":">",'"':""","'":"'"},po=e=>ho[e];function fo(e,t){if(t){if(lo.test(e))return e.replace(so,po)}else if(co.test(e))return e.replace(uo,po);return e}const mo=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function _o(e){return e.replace(mo,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const go=/(^|[^\[])\^/g;function vo(e,t){let n="string"===typeof e?e:e.source;t=t||"";const r={replace:(e,t)=>{let o="string"===typeof t?t:t.source;return o=o.replace(go,"$1"),n=n.replace(e,o),r},getRegex:()=>new RegExp(n,t)};return r}function yo(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch(Vd){return null}return e}const bo={exec:()=>null};function wo(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"})).split(/ \|/);let r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:ko(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=ko(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=t[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1");e=ko(e.replace(/^ *>[ \t]?/gm,""),"\n");const n=this.lexer.state.top;this.lexer.state.top=!0;const r=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:r,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const r=n.length>1,o={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?"\\d{1,9}\\".concat(n.slice(-1)):"\\".concat(n),this.options.pedantic&&(n=r?n:"[*+-]");const a=new RegExp("^( {0,3}".concat(n,")((?:[\t ][^\\n]*)?(?:\\n|$))"));let i="",l="",s=!1;for(;e;){let n=!1;if(!(t=a.exec(e)))break;if(this.rules.block.hr.test(e))break;i=t[0],e=e.substring(i.length);let r=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],u=0;this.options.pedantic?(u=2,l=r.trimStart()):(u=t[2].search(/[^ ]/),u=u>4?1:u,l=r.slice(u),u+=t[1].length);let d=!1;if(!r&&/^ *$/.test(c)&&(i+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp("^ {0,".concat(Math.min(3,u-1),"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))")),n=new RegExp("^ {0,".concat(Math.min(3,u-1),"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)")),o=new RegExp("^ {0,".concat(Math.min(3,u-1),"}(?:```|~~~)")),a=new RegExp("^ {0,".concat(Math.min(3,u-1),"}#"));for(;e;){const s=e.split("\n",1)[0];if(c=s,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),o.test(c))break;if(a.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=u||!c.trim())l+="\n"+c.slice(u);else{if(d)break;if(r.search(/[^ ]/)>=4)break;if(o.test(r))break;if(a.test(r))break;if(n.test(r))break;l+="\n"+c}d||c.trim()||(d=!0),i+=s+"\n",e=e.substring(s.length+1),r=c.slice(u)}}o.loose||(s?o.loose=!0:/\n *\n *$/.test(i)&&(s=!0));let h,p=null;this.options.gfm&&(p=/^\[[ xX]\] /.exec(l),p&&(h="[ ] "!==p[0],l=l.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:i,task:!!p,checked:h,loose:!1,text:l,tokens:[]}),o.raw+=i}o.items[o.items.length-1].raw=i.trimEnd(),o.items[o.items.length-1].text=l.trimEnd(),o.raw=o.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));o.loose=n}if(o.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:r}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=wo(t[1]),r=t[2].replace(/^\||\| *$/g,"").split("|"),o=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],a={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(const e of r)/^ *-+: *$/.test(e)?a.align.push("right"):/^ *:-+: *$/.test(e)?a.align.push("center"):/^ *:-+ *$/.test(e)?a.align.push("left"):a.align.push(null);for(const e of n)a.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of o)a.rows.push(wo(e,a.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return a}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:fo(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=ko(e.slice(0,-1),"\\");if((e.length-t.length)%2===0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let r=0;r-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),xo(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:r?r.replace(this.rules.inline.anyPunctuation,"$1"):r},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return xo(n,e,n[0],this.lexer)}}emStrong(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=this.rules.inline.emStrongLDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...r[0]].length-1;let o,a,i=n,l=0;const s="*"===r[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(s.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=s.exec(t));){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){i+=a;continue}if((r[5]||r[6])&&n%3&&!((n+a)%3)){l+=a;continue}if(i-=a,i>0)continue;a=Math.min(a,a+i+l);const t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){const e=s.slice(1,-1);return{type:"em",raw:s,text:e,tokens:this.lexer.inlineTokens(e)}}const c=s.slice(2,-2);return{type:"strong",raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=fo(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=fo(t[1]),n="mailto:"+e):(e=fo(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,o;if("@"===t[2])e=fo(t[0]),o="mailto:"+e;else{let a;do{var n,r;a=t[0],t[0]=null!==(n=null===(r=this.rules.inline._backpedal.exec(t[0]))||void 0===r?void 0:r[0])&&void 0!==n?n:""}while(a!==t[0]);e=fo(t[0]),o="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:o,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:fo(t[0]),{type:"text",raw:t[0],text:e}}}}const Ao=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Co=/(?:[*+-]|\d{1,9}[.)])/,Eo=vo(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,Co).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),Mo=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,To=/(?!\s*\])(?:\\.|[^\[\]\\])+/,No=vo(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",To).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Po=vo(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Co).getRegex(),Do="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Oo=/|$))/,Ro=vo("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",Oo).replace("tag",Do).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Lo=vo(Mo).replace("hr",Ao).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Do).getRegex(),Io={blockquote:vo(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Lo).getRegex(),code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,def:No,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:Ao,html:Ro,lheading:Eo,list:Po,newline:/^(?: *(?:\n|$))+/,paragraph:Lo,table:bo,text:/^[^\n]+/},zo=vo("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ao).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Do).getRegex(),$o={...Io,table:zo,paragraph:vo(Mo).replace("hr",Ao).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",zo).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Do).getRegex()},jo={...Io,html:vo("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",Oo).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:bo,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:vo(Mo).replace("hr",Ao).replace("heading"," *#{1,6} *[^\n]").replace("lheading",Eo).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Fo=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ho=/^( {2,}|\\)\n(?!\s*$)/,Vo="\\p{P}\\p{S}",Bo=vo(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,Vo).getRegex(),Uo=vo(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,Vo).getRegex(),Yo=vo("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,Vo).getRegex(),Wo=vo("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,Vo).getRegex(),qo=vo(/\\([punct])/,"gu").replace(/punct/g,Vo).getRegex(),Zo=vo(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Ko=vo(Oo).replace("(?:--\x3e|$)","--\x3e").getRegex(),Go=vo("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Ko).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Qo=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Jo=vo(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Qo).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Xo=vo(/^!?\[(label)\]\[(ref)\]/).replace("label",Qo).replace("ref",To).getRegex(),ea=vo(/^!?\[(ref)\](?:\[\])?/).replace("ref",To).getRegex(),ta={_backpedal:bo,anyPunctuation:qo,autolink:Zo,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:Ho,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:bo,emStrongLDelim:Uo,emStrongRDelimAst:Yo,emStrongRDelimUnd:Wo,escape:Fo,link:Jo,nolink:ea,punctuation:Bo,reflink:Xo,reflinkSearch:vo("reflink|nolink(?!\\()","g").replace("reflink",Xo).replace("nolink",ea).getRegex(),tag:Go,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\1&&void 0!==arguments[1]?arguments[1]:[];for(e=this.options.pedantic?e.replace(/\t/g," ").replace(/^ +$/gm,""):e.replace(/^( *)(\t+)/gm,((e,t,n)=>t+" ".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((n=>!!(t=n.call({lexer:this},e,a))&&(e=e.substring(t.raw.length),a.push(t),!0)))))if(t=this.tokenizer.space(e))e=e.substring(t.raw.length),1===t.raw.length&&a.length>0?a[a.length-1].raw+="\n":a.push(t);else if(t=this.tokenizer.code(e))e=e.substring(t.raw.length),n=a[a.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?a.push(t):(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.fences(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.heading(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.hr(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.blockquote(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.list(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.html(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.def(e))e=e.substring(t.raw.length),n=a[a.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(n.raw+="\n"+t.raw,n.text+="\n"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(t=this.tokenizer.table(e))e=e.substring(t.raw.length),a.push(t);else if(t=this.tokenizer.lheading(e))e=e.substring(t.raw.length),a.push(t);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let o;this.options.extensions.startBlock.forEach((e=>{o=e.call({lexer:this},n),"number"===typeof o&&o>=0&&(t=Math.min(t,o))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(t=this.tokenizer.paragraph(r)))n=a[a.length-1],o&&"paragraph"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):a.push(t),o=r.length!==e.length,e=e.substring(t.raw.length);else if(t=this.tokenizer.text(e))e=e.substring(t.raw.length),n=a[a.length-1],n&&"text"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):a.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,a}inline(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e){let t,n,r,o,a,i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],s=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(o=this.tokenizer.rules.inline.reflinkSearch.exec(s));)e.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(o=this.tokenizer.rules.inline.blockSkip.exec(s));)s=s.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(o=this.tokenizer.rules.inline.anyPunctuation.exec(s));)s=s.slice(0,o.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(a||(i=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((n=>!!(t=n.call({lexer:this},e,l))&&(e=e.substring(t.raw.length),l.push(t),!0)))))if(t=this.tokenizer.escape(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.tag(e))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.link(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(t.raw.length),n=l[l.length-1],n&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(t=this.tokenizer.emStrong(e,s,i))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.codespan(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.br(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.del(e))e=e.substring(t.raw.length),l.push(t);else if(t=this.tokenizer.autolink(e))e=e.substring(t.raw.length),l.push(t);else if(this.state.inLink||!(t=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let o;this.options.extensions.startInline.forEach((e=>{o=e.call({lexer:this},n),"number"===typeof o&&o>=0&&(t=Math.min(t,o))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(t=this.tokenizer.inlineText(r))e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(i=t.raw.slice(-1)),a=!0,n=l[l.length-1],n&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):l.push(t);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(t.raw.length),l.push(t);return l}}class sa{constructor(e){ro(this,"options",void 0),this.options=e||ao}code(e,t,n){var r;const o=null===(r=(t||"").match(/^\S*/))||void 0===r?void 0:r[0];return e=e.replace(/\n$/,"")+"\n",o?'